Monitor
basierend auf dem originalen Listing, erweitert um zusätzliche Kommentare und Erläuterungen (Kommando-Ausführung, Tastatur, Step-Funktion, Registeranzeige, Musik etc.)
2K-ROM-Ausführung (0000-07FF)
AS V1.42 Beta [Bld 157] - Source File Lc80_dokumentiert.asm - Page 1 - 8/2/2022 12:0:48 1/ 0 : CPU z80 2/ 0 : ;*Heading Monitorprogramm LC80.3.0 3/ 0 : ;*Page 87 4/ 0 : 5/ 0 : ;******************************************************** 6/ 0 : ;* GUELTIGES LISTING ENTSPRECHEND * 7/ 0 : ;* BITMUSTER NUMMER 75 UND 76 * 8/ 0 : ;* (BEI 2-ROM-VARIANTE [MARKE ROM_=2]) * 9/ 0 : ;******************************************************** 10/ 0 : ; VEREINBARUNGEN 11/ 0 : ; 12/ 0 : =1H ROM_: EQU 1 ; EIN ROM -> 1 13/ 0 : ; ZWEI ROM -> 2 14/ 0 : 15/ 0 : ;PIO-PORTS: 16/ 0 : 17/ 0 : =0F4H SEGMENT EQU 0F4H ;AUSGABE-PORT SEGMENTANSTEUERUNG 18/ 0 : =0F6H PIO1AC EQU 0F6H 19/ 0 : 20/ 0 : =0F5H DIGITAP EQU 0F5H ;B2...B7=DIGITANST. UND TASTENMATRIX 21/ 0 : ;B0=TAPE-IN, B1=TAPE-OUT 22/ 0 : =0F7H PIO1BC EQU 0F7H 23/ 0 : 24/ 0 : =0F8H PIO2AD EQU 0F8H ;USER-PORT, FREI VERFUEGBAR 25/ 0 : =0F8H USERPORT EQU PIO2AD 26/ 0 : =0FAH PIO2AC EQU 0FAH 27/ 0 : 28/ 0 : =0F9H PIO2BD EQU 0F9H ;B4...B7=EINGAENGE TASTEN-ABFRAGE 29/ 0 : ;B0...B3 FUER USER NUTZBAR 30/ 0 : =0F9H KEYIN EQU PIO2BD 31/ 0 : =0FBH PIO2BC EQU 0FBH 32/ 0 : 33/ 0 : ;CTC-ADRESSEN 34/ 0 : =0ECH CTC0 EQU 0ECH 35/ 0 : =0EDH CTC1 EQU 0EDH 36/ 0 : =0EEH CTC2 EQU 0EEH 37/ 0 : =0EFH CTC3 EQU 0EFH 38/ 0 : 39/ 0 : ;VEREINBARUNGEN BEI ERWEITERUNGEN 40/ 0 : =0H INTVEK EQU 00H ;INT-VECT. FUER CTC lo(INTTAF) 41/ 0 : =23H HIINT EQU 23H ;CPU-I-REG hi(INTTAF) 42/ 0 : 43/ 0 : 44/ 0 : ;***************************************************** 45/ 0 : ; 46/ 0 : ORG 0000H 47/ 0 : START: 48/ 0 : 06 00 LD B,00H ;EINSCHALTVERZOEGERUNG 49/ 2 : 10 FE DJNZ $ 50/ 4 : 18 35 JR BEGIN 51/ 6 : 52/ 8 : ORG 08H 53/ 8 : RST1: 54/ 8 : C3 08 23 JP 2308H 55/ B : 56/ 10 : ORG 10H 57/ 10 : RST2: 58/ 10 : C3 10 23 JP 2310H 59/ 13 : 60/ 18 : ORG 18H 61/ 18 : RST3: 62/ 18 : C3 18 23 JP 2318H 63/ 1B : 64/ 20 : ORG 20H 65/ 20 : RST4: 66/ 20 : C3 20 23 JP 2320H 67/ 23 : 68/ 28 : ORG 28H 69/ 28 : RST5: 70/ 28 : C3 28 23 JP 2328H 71/ 2B : 72/ 30 : ORG 30H 73/ 30 : RST6: 74/ 30 : C3 30 23 JP 2330H 75/ 33 : 76/ 38 : ORG 38H 77/ 38 : RST7: 78/ 38 : C3 38 23 JP 2338H 79/ 3B : 80/ 3B : ;----------------------------------------------------- 81/ 3B : BEGIN: 82/ 3B : 3A FC 23 LD A,(INIFLAG) ;RAM LOESCHEN, WENN ERSTEINSCHALTUNG 83/ 3E : FE 80 CP 80H ;schon init? 84/ 40 : 28 29 JR Z,NOFF ;Ja, dann zu NOFF 85/ 42 : 21 00 20 LD HL,2000H ;4K RAM löschen (mit FF füllen) 86/ 45 : 11 01 20 LD DE,2001H 87/ 48 : 01 FF 0F LD BC,0FFFH 88/ 4B : 36 FF LD (HL),0FFH 89/ 4D : ED B0 LDIR 90/ 4F : 01 03 00 LD BC,RSTLGT ;STANDARD-RST38-PROG. LADEN 91/ 52 : 11 38 23 LD DE,2338H ; 92/ 55 : 21 11 01 LD HL,RSTUP 93/ 58 : ED B0 LDIR 94/ 5A : 01 03 00 LD BC,NMILGT ;STANDARD-NMI-PROG. LADEN 95/ 5D : 11 40 23 LD DE,2340H 96/ 60 : 21 EB 00 LD HL,NMIUP 97/ 63 : 18 04 JR NMI+3 ;weiter nach NMI-Einsprung 98/ 65 : 99/ 65 : ;-------------------- NMI-FKT. ANSPRINGEN ---------- 100/ 66 : ORG 0066H 101/ 66 : NMI: 102/ 66 : C3 40 23 JP 2340H 103/ 69 : 104/ 69 : ;--------------------------------------------------------- 105/ 69 : ED B0 LDIR 106/ 6B : NOFF: 107/ 6B : 31 EA 23 LD SP,SPINI ;SP AUF ANFANGSWERT 108/ 6E : CD CA 00 CALL IOINIT 109/ 71 : CD 99 00 CALL MEMTES 110/ 74 : ;--------------------- TEST, OB ERSTEINSCHALTUNG ---- 111/ 74 : 3A FC 23 LD A,(INIFLAG) 112/ 77 : FE 80 CP 80H 113/ 79 : C4 9C 02 CALL NZ,INI ;MUSIK U. GRAPHIK, WENN ERSTEINSCH. 114/ 7C : ;--------------------- RESETZUSTAND HERSTELLEN ------ 115/ 7C : 21 00 20 LD HL,2000H 116/ 7F : 22 F8 23 LD (USERPC),HL ;USER-PC AUF ANFANGSWERT 117/ 82 : AF XOR A 118/ 83 : 32 FD 23 LD (FUFEFLAG),A ;FUNKTIONS- UND FEHLERFLAG LOESCHEN 119/ 86 : DD 21 74 05 LD IX,DISP1 ; "LC80"-TEXT 120/ 8A : ;--------------------- TEXT, ADR.- U. TAPE-CODE LOE. 121/ 8A : SETSTO: 122/ 8A : AF XOR A 123/ 8B : 32 FB 23 LD (ATCODE),A ; Funktionscode löschen 124/ 8E : 125/ 8E : ;--------------------- HAUPTPROGRAMM ---------------- 126/ 8E : MAIN: 127/ 8E : 31 EA 23 LD SP,SPINI ;USER-PC AUF ANFANGSWERT 128/ 91 : CD 5A 04 CALL DAK1 ;ANZEIGE UND TASTATURABFRAGE 129/ 94 : CD 1B 01 CALL KEYEXC ;TASTENBEHANDLUNG 130/ 97 : 18 F5 JR MAIN 131/ 99 : 132/ 99 : ;--------------------- SPEICHERTEST ------------------ 133/ 99 : MEMTES: ;memory test 134/ 99 : 01 04 00 LD BC,0004H ;1 K RAM 135/ 9C : 21 00 20 LD HL,2000H ;ADR RAM 136/ 9F : RAMSL: ;RAM-Schleife 137/ 9F : CD 52 04 CALL RAMCHK ;TEST, OB (HL) RAM IST 138/ A2 : 28 01 JR Z, RAMOK 139/ A4 : 76 HALT ;HALT bei RAM-Fehler (rote LED) 140/ A5 : RAMOK: 141/ A5 : 23 INC HL 142/ A6 : 10 F7 DJNZ RAMSL ;256 Byte 143/ A8 : 0D DEC C 144/ A9 : 20 F4 JR NZ,RAMSL ;4x256 Byte 145/ AB : AF XOR A ;Prüfsumme := 0 146/ AC : 21 00 00 LD HL,0 ;ADR 1. ROM/EPROM 147/ AF : 01 04 00 LD BC,0004H ;1 K 148/ B2 : CD C2 00 CALL ROMSL 149/ B5 : 150/ B5 : =>TRUE IF ROM_=1 151/ B5 : 21 00 04 LD HL,0400H ;WEITER 1. ROM 152/ B8 : [150] ENDIF 153/ B8 : 154/ B8 : =>FALSE IF ROM_=2 155/ B8 : LD HL,0800H ;ADR 2. ROM 156/ B8 : [154] ENDIF 157/ B8 : 158/ B8 : 01 04 FF LD BC,0FF04H ;1K - 1BYTE 159/ BB : CD C2 00 CALL ROMSL 160/ BE : BE CP (HL) ;Vergleich mit letztem Byte (Prüfwert im ROM) 161/ BF : C8 RET Z ;wenn gleich 162/ C0 : 76 HALT ;sonst Fehler (rote LED) 163/ C1 : C9 RET 164/ C2 : 165/ C2 : ROMSL: ; ROM-Schleife 166/ C2 : 86 ADD A,(HL) ;Prüfsumme aufsaldieren 167/ C3 : 23 INC HL 168/ C4 : 10 FC DJNZ ROMSL 169/ C6 : 0D DEC C 170/ C7 : 20 F9 JR NZ,ROMSL 171/ C9 : C9 RET 172/ CA : 173/ CA : ;---------------------- IO-INITIALISIERUNG ----------- 174/ CA : IOINIT: ;PIO-INITIALISIERUNG 175/ CA : 3E CF LD A,0CFH ;MODE 3 176/ CC : D3 F6 OUT (PIO1AC),A ;SEGMENT-PORT 177/ CE : 3E FF LD A,0FFH 178/ D0 : D3 F4 OUT (SEGMENT),A ;ALLE SEGMENTE AUSSCHALTEN 179/ D2 : 3E 00 LD A,0 ;E-A-DEFINITION 180/ D4 : D3 F6 OUT (PIO1AC),A 181/ D6 : 182/ D6 : 3E CF LD A,0CFH 183/ D8 : D3 F7 OUT (PIO1BC),A ;DIGIT-AUSG. 184/ DA : ;B2...B7 = D-LSD,D-MSD,A-LSD...A-MSD 185/ DA : 3E FF LD A,0FFH ;ALLE TREIBER SPERREN 186/ DC : D3 F5 OUT (DIGITAP),A 187/ DE : 3E 01 LD A,1 ;B0-EINGANG, B1...B7-AUSGAENGE 188/ E0 : D3 F7 OUT (PIO1BC),A 189/ E2 : 190/ E2 : 3E CF LD A,0CFH 191/ E4 : D3 FB OUT (PIO2BC),A ;TASTEN-EINGAENGE B4...B7 192/ E6 : 3E FF LD A,0FFH 193/ E8 : D3 FB OUT (PIO2BC),A 194/ EA : C9 RET 195/ EB : 196/ EB : ;----------------------------------------------------- 197/ EB : NMIUP: ;NMI-UNTERPROGRAMM 198/ EB : C3 EE 00 JP NMIUP1 199/ EE : =3H NMILGT EQU $-NMIUP ;up length 200/ EE : 201/ EE : NMIUP1: 202/ EE : F5 PUSH AF ;Register sichern 203/ EF : C5 PUSH BC 204/ F0 : 08 EX AF,AF' ;' 205/ F1 : D9 EXX 206/ F2 : F5 PUSH AF 207/ F3 : C5 PUSH BC 208/ F4 : D5 PUSH DE 209/ F5 : E5 PUSH HL 210/ F6 : D9 EXX 211/ F7 : DD E5 PUSH IX 212/ F9 : 06 28 LD B,40 ;ANZEIGEZEIT "INT" 213/ FB : DD 21 99 05 LD IX,DISP5 ;Text " int " 214/ FF : NMISL: ;NMI-Schleife 215/ FF : CD 83 04 CALL DAK2 ;Anzeigen 216/ 102 : 10 FB DJNZ NMISL 217/ 104 : DD E1 POP IX 218/ 106 : D9 EXX 219/ 107 : E1 POP HL ;Register restaurieren 220/ 108 : D1 POP DE 221/ 109 : C1 POP BC 222/ 10A : F1 POP AF 223/ 10B : D9 EXX 224/ 10C : 08 EX AF,AF' ;' 225/ 10D : C1 POP BC 226/ 10E : F1 POP AF 227/ 10F : ED 45 RETN 228/ 111 : 229/ 111 : ;----------------------------------------------------- 230/ 111 : RSTUP: 231/ 111 : C3 14 01 JP RSTUP1 232/ 114 : =3H RSTLGT EQU $-RSTUP ; up length 233/ 114 : 234/ 114 : RSTUP1: 235/ 114 : DD 21 9F 05 LD IX,DISP6 ; "rst 38" 236/ 118 : C3 8A 00 JP SETSTO ; Spr. zum Hauptprogramm 237/ 11B : 238/ 11B : ;--------------------- TASTENBEHANDLUNGSPROGRAMM ---- 239/ 11B : ; EINTRITT: INTERNER TASTENCODE IN A 240/ 11B : 241/ 11B : ; "0".."F" 00..0F 242/ 11B : ; "+" 10, "-" 11, "EX" 12, "DAT" 14 243/ 11B : ; "ADR" 19, "ST" 1E, "LD" 1F 244/ 11B : 245/ 11B : KEYEXC: 246/ 11B : FE 10 CP 10H ;TEST, OB FUNKTIONSTASTE 247/ 11D : 38 24 JR C,KHEX ;SPR., WENN ZIFFERNTASTE 248/ 11F : 21 FD 23 LD HL,FUFEFLAG ;FLAG "FUNKTIONSTASTE" SETZEN 249/ 122 : CB C6 SET 0,(HL) 250/ 124 : D6 10 SUB 10H ;OBERE ZIFFER DES CODES LOESCHEN 251/ 126 : FE 08 CP 08H ;TEST DER FUNKTIONSGRUPPE 252/ 128 : 21 AB 05 LD HL,KSUFUN 253/ 12B : DA 87 02 JP C,BRANCH ; WENN "+","-","EXEC" O. "DATA"-TASTE 254/ 12E : 255/ 12E : ;ADR- ODER TAPE-TASTEN 256/ 12E : DD 21 F2 23 LD IX,DATLED ;ADR. FUER DATEN- U. ADR.-ANZEIGE 257/ 132 : D6 08 SUB 08H 258/ 134 : 21 FB 23 LD HL,ATCODE 259/ 137 : 77 LD (HL),A ;UMGERECHN. CODE HINTERLEGEN 260/ 138 : ;1-ADR,6-ST,7-LD 261/ 138 : 21 FA 23 LD HL,ATFLAG 262/ 13B : 36 00 LD (HL),0 ;FLAG LOESCHEN 263/ 13D : 21 B5 05 LD HL,KFUN ;Funktionen ADR,ST,LD 264/ 140 : C3 87 02 JP BRANCH 265/ 143 : 266/ 143 : ;----------------- AUSWERTUNG ZIFFERNTASTEN --------- 267/ 143 : KHEX: 268/ 143 : 4F LD C,A ;TASTATURCODE UMSPEICHERN 269/ 144 : 21 BF 05 LD HL,HTAB ;Funkionen nach Zifferntaste 270/ 147 : BR1: 271/ 147 : 3A FB 23 LD A,(ATCODE) ;WERT FUER AUSZUF. FUNKTION 272/ 14A : C3 87 02 JP BRANCH 273/ 14D : 274/ 14D : ;--------------------- EINTR.PKTE FUER +,-,EXEC,DATA - 275/ 14D : ; (UEBER KSUFUN-TABELLE) 276/ 14D : KINC: ; "+"-TASTE 277/ 14D : 21 CB 05 LD HL,ITAB ;Funktionen nach "+" 278/ 150 : 18 F5 JR BR1 279/ 152 : 280/ 152 : KDEC: ; "-"-TASTE 281/ 152 : 21 D7 05 LD HL,DTAB ;Funktionen nach "-" 282/ 155 : 18 F0 JR BR1 283/ 157 : 284/ 157 : KEXEC: ; "EXEC"-TASTE 285/ 157 : 21 E3 05 LD HL, ETAB ;Funktionen nach "EX" 286/ 15A : 18 EB JR BR1 287/ 15C : 288/ 15C : KDATA: ; "DATA"-TASTE 289/ 15C : CD 27 05 CALL TESTM ;TEST. OB ADR OD. DAT IN ATCODE 290/ 15F : CD C5 02 CALL MEMDP2 ;ADR U. DAT. ANZ., DAT. GEPUNKTET 291/ 162 : C9 RET 292/ 163 : 293/ 163 : ;--------------------- EINTR.PKTE FUER ADRS U. TAPE - 294/ 163 : ; (UEBER KFUN-TABELLE) 295/ 163 : KADRS: ; "ADRS"-TASTE 296/ 163 : CD BC 02 CALL MEMDP1 ;ADR. U. DAT. ANZ., ADR. GEPUNKTET 297/ 166 : C9 RET 298/ 167 : 299/ 167 : KTAPWR: ; "TO TAPE"- ODER "FROM TAPE"-TASTE 300/ 167 : CD E2 02 CALL STEPDP ;PARAMETER ANZEIGEN 301/ 16A : C9 RET 302/ 16B : 303/ 16B : ;--------------------- EINTR.PKTE FUER ZIFFERNEINGABEN 304/ 16B : ; (UEBER HTAB-TABELLE) 305/ 16B : HFIX: ; BEDIENUNGSFEHLER 306/ 16B : C3 96 02 JP ERRDIS 307/ 16E : 308/ 16E : HDA: ;ZIFFER ALS DATUM 309/ 16E : 2A F8 23 LD HL,(USERPC) 310/ 171 : CD 52 04 CALL RAMCHK ;TEST, OB USER-PC IM RAM-BEREICH 311/ 174 : C2 96 02 JP NZ,ERRDIS ;SPR., WENN KEIN RAM 312/ 177 : CD A8 02 CALL PRECL1 ;1 BYTE LOE., WENN FUFEFLAG NICHT 0 313/ 17A : 79 LD A,C ;EINGEG. ZIFFER 314/ 17B : ED 6F RLD ;TETRADE IN RAM SCHIEBEN 315/ 17D : CD C5 02 CALL MEMDP2 ;ANZEIGEN 316/ 180 : C9 RET 317/ 181 : 318/ 181 : HAD: ;ZIFFER ALS ADRESSE 319/ 181 : 21 F8 23 LD HL,USERPC 320/ 184 : CD B4 02 CALL PRECL2 ;2 BYTE LOE., WENN FUFEFLAG NICHT 0 321/ 187 : 79 LD A,C ;EINGEG. ZIFFER 322/ 188 : ED 6F RLD ;TETRADEN IN BEIDEN BYTE VERSCHIEBEN 323/ 18A : 23 INC HL 324/ 18B : ED 6F RLD 325/ 18D : CD BC 02 CALL MEMDP1 ;ANZEIGEN 326/ 190 : C9 RET 327/ 191 : 328/ 191 : HTAPWR: ;ZIFFER ALS PARAMETER FUER BAND 329/ 191 : CD FD 02 CALL LOCTBF ;ADR FUER PARAMETER BERECHNEN 330/ 194 : CD B4 02 CALL PRECL2 ;2 BYTE LOE., WENN FUFEFLAG NICHT 0 331/ 197 : 79 LD A,C ;EINGEG. ZIFFER 332/ 198 : ED 6F RLD ;TETRADE IN BEIDEN BYTE VERSCHIEBEN 333/ 19A : 23 INC HL 334/ 19B : ED 6F RLD 335/ 19D : CD E2 02 CALL STEPDP ;PARAMETER ANZEIGEN 336/ 1A0 : C9 RET 337/ 1A1 : 338/ 1A1 : ;---------------------- UNTEREINTRITT "+"-TASTE ---- 339/ 1A1 : ; (UEBER ITAB) 340/ 1A1 : IFIX: ;BEDIENUNGSFEHLER 341/ 1A1 : C3 96 02 JP ERRDIS 342/ 1A4 : 343/ 1A4 : ADRADD: ;ANWENDER-PC ERHOEHEN 344/ 1A4 : 2A F8 23 LD HL,(USERPC) 345/ 1A7 : 23 INC HL 346/ 1A8 : 22 F8 23 LD (USERPC),HL 347/ 1AB : CD C5 02 CALL MEMDP2 ;ANZEIGEN 348/ 1AE : C9 RET 349/ 1AF : 350/ 1AF : TPFUN1: ;BEI "TO TAPE" NAECHSTER PARAMETER 351/ 1AF : 21 FA 23 LD HL,ATFLAG 352/ 1B2 : 34 INC (HL) ;FLAS AUF NEUEN PARAMETER 353/ 1B3 : CD 07 03 CALL LOCTNA ;PARMETER 'F','S' ODER 'E' 354/ 1B6 : 20 04 JR NZ,ISTEP ;SPRUNG, WENN RICHTIG 355/ 1B8 : 35 DEC (HL) ;FLAG AUF ALTEN WERT 356/ 1B9 : C3 96 02 JP ERRDIS ;FEHLERANZEIGE 357/ 1BC : ISTEP: 358/ 1BC : CD E2 02 CALL STEPDP ;PARAMETER ANZEIGEN 359/ 1BF : C9 RET 360/ 1C0 : 361/ 1C0 : ;--------------------- UNTEREINTRITT "-"-TASTE ----- 362/ 1C0 : ; (UEBER DTAB) 363/ 1C0 : DFIX: ;BEDIENUNGSFEHLER 364/ 1C0 : C3 96 02 JP ERRDIS 365/ 1C3 : 366/ 1C3 : ADRDEC: ;ANWENDER-PC ERNIEDRIGEN 367/ 1C3 : 2A F8 23 LD HL,(USERPC) 368/ 1C6 : 2B DEC HL 369/ 1C7 : 22 F8 23 LD (USERPC),HL 370/ 1CA : CD C5 02 CALL MEMDP2 ;ANZEIGEN 371/ 1CD : C9 RET 372/ 1CE : 373/ 1CE : TPTUN2: ;BEI "TO TAPE" VORHERIGER PARAMETER 374/ 1CE : 21 FA 23 LD HL,ATFLAG 375/ 1D1 : 35 DEC (HL) ;FLAG AUF VORHER. PARAMETER 376/ 1D2 : CD 07 03 CALL LOCTNA ;PARAMETER 'F', 'S' ODER 'E' 377/ 1D5 : 20 04 JR NZ,DSTEP ;SPR., WENN RICHTIG 378/ 1D7 : 34 INC (HL) ;ALTER FLAGWERT 379/ 1D8 : C3 96 02 JP ERRDIS ;FEHLERANZEIGE 380/ 1DB : DSTEP: 381/ 1DB : CD E2 02 CALL STEPDP ;PARAMETER ANZEIGEN 382/ 1DE : C9 RET 383/ 1DF : 384/ 1DF : ;--------------------- UNTEREINTRITT "EXEC"-TASTE --- 385/ 1DF : ; (UEBER ETAB) 386/ 1DF : EFIX: ;BEDIENUNGSFEHLER 387/ 1DF : C3 96 02 JP ERRDIS 388/ 1E2 : 389/ 1E2 : ADREXC: ;PROGRAMAUSFUEHRUNG AB USER-PC 390/ 1E2 : E5 PUSH HL 391/ 1E3 : 2A F8 23 LD HL,(USERPC) 392/ 1E6 : E3 EX (SP),HL 393/ 1E7 : C9 RET 394/ 1E8 : 395/ 1E8 : ENDFUN: ; DE IN USER-PC ABSP. UND ANZEIGEN 396/ 1E8 : ED 53 F8 23 LD (USERPC),DE 397/ 1EC : CD C5 02 CALL MEMDP2 398/ 1EF : C9 RET 399/ 1F0 : 400/ 1F0 : EWT: ;UEBERSPIELEN AUF BAND 401/ 1F0 : CD 88 03 CALL SUM ;PRUEFSUMME BERECHNEN 402/ 1F3 : 38 EA JR C,EFIX ;WENN ENDADR<ANF.ADR 403/ 1F5 : 32 F1 23 LD (CHKSUMH),A ;ABSPEICHERN 404/ 1F8 : 21 A0 0F LD HL,0FA0H ;AUSGABE 4000 x 1KHZ-TAKTE (4sek 1kHz) 405/ 1FB : ;ALS START-SYNC SIGNAL 406/ 1FB : CD 70 03 CALL SOUN1K 407/ 1FE : 21 EB 23 LD HL,FILNAME ;DESCRIPTOR UEBERTRAGEN 408/ 201 : 01 07 00 LD BC,0007H ;7 BYTE 409/ 204 : CD 1B 04 CALL TAPOUT 410/ 207 : 21 A0 0F LD HL,0FA0H ;AUSGABE 4000 x 2KHZ-TAKTE (2sek 2kHz) 411/ 20A : ;ALS MITTEL-SYNC SIGNAL 412/ 20A : CD 74 03 CALL SOUN2K 413/ 20D : CD 95 03 CALL GETPTR ;LAENGE DES BLOCKES BER. 414/ 210 : CD 1B 04 CALL TAPOUT ;DATE UEBERTRAGEN 415/ 213 : 21 A0 0F LD HL,0FA0H ;AUSGABE 4000 x 2KHZ-TAKTE (2sek 2kHz) 416/ 216 : ;ALS END SYNC. SIGNAL 417/ 216 : CD 74 03 CALL SOUN2K 418/ 219 : ENDTAP: 419/ 219 : ED 5B EF 23 LD DE,(ENDADRH) ;STARTADR 420/ 21D : 18 C9 JR ENDFUN ;ABSP. UND ANZEIGEN 421/ 21F : 422/ 21F : ;----------------- FEHLERTEXT LADEN, SPR. Z. ANZEIGE - 423/ 21F : ERROR: 424/ 21F : DD 21 A5 05 LD IX,ERR ;ADR FEHLERTEXT 425/ 223 : C3 8A 00 JP SETSTO ;SPR. ZUR ANZEIGE 426/ 226 : 427/ 226 : ;----------------- DATEN VOM BAND LESEN -------- 428/ 226 : LOAD: 429/ 226 : 2A EB 23 LD HL,(FILNAME) 430/ 229 : 22 FE 23 LD (FILE2),HL 431/ 22C : 3E EF LD A,0EFH ;DEZIMALPUNKTE EIN 432/ 22E : 32 EA 23 LD (TAPDIS),A 433/ 231 : LEAD: 434/ 231 : 3A EA 23 LD A,(TAPDIS) 435/ 234 : D3 F4 OUT (SEGMENT),A 436/ 236 : 21 E8 03 LD HL,1000 437/ 239 : LEAD1: 438/ 239 : CD 00 04 CALL PERIOD ;EMPANGSFREQUENZ FESTSTELLEN 439/ 23C : 38 F3 JR C,LEAD ;WDHLG., SOLANGE NICHT 1 KHZ 440/ 23E : 2B DEC HL ;TEST, OB 1000 MAL 1 KHZ 441/ 23F : 7C LD A,H 442/ 240 : B5 OR L 443/ 241 : 20 F6 JR NZ,LEAD1 ;WDHLG., BIS 1000 x 1 KHZ 444/ 243 : LEAD2: 445/ 243 : CD 00 04 CALL PERIOD 446/ 246 : 30 FB JR NC,LEAD2 ;WDHLG., SOLANGE NOCH 1 KHZ 447/ 248 : 21 EB 23 LD HL,FILNAME ;ADR FUER HINTERLEGUNG DESCRIPTOR 448/ 24B : 01 07 00 LD BC,0007H 449/ 24E : CD A7 03 CALL TAPEIN ;7 BYTE LESEN 450/ 251 : 38 DE JR C,LEAD ;SPR., WENN UEBERTRAGUNGSFEHLER 451/ 253 : ED 5B EB 23 LD DE,(FILNAME) 452/ 257 : CD B7 04 CALL ADRSDP ;EMPFANGENEN FILENAMEN DARSTELLEN 453/ 25A : 06 4B LD B,75 454/ 25C : FILEDP: 455/ 25C : CD 83 04 CALL DAK2 ;ANZEIGEN 456/ 25F : 10 FB DJNZ FILEDP 457/ 261 : 2A FE 23 LD HL,(FILE2) ;SOLL-NAMEN LESEN 458/ 264 : B7 OR A 459/ 265 : ED 52 SBC HL,DE 460/ 267 : 3E F7 LD A,0F7H ;"-"-ZEICHEN 461/ 269 : 32 EA 23 LD (TAPDIS),A 462/ 26C : 20 C3 JR NZ,LEAD ;SPR., WENN FALSCHER FILENAME 463/ 26E : 3E FE LD A,0FEH ; "'"-ZEICHEN EIN 464/ 270 : D3 F4 OUT (SEGMENT),A 465/ 272 : CD 95 03 CALL GETPTR ;LAENGE DES BLOCKES BER. 466/ 275 : 38 A8 JR C,ERROR ;WENN ENDADR<ANF.ADR 467/ 277 : CD A7 03 CALL TAPEIN ;DATENSATZ EINLESEN 468/ 27A : 38 A3 JR C,ERROR ;SPR., WENN UEBERTR.FEHLER 469/ 27C : CD 88 03 CALL SUM ;PRUEFSUMME BER. 470/ 27F : 21 F1 23 LD HL,CHKSUMH 471/ 282 : BE CP (HL) ;VERGLEICH MIT UEBERTR. PRUEFS. 472/ 283 : 20 9A JR NZ,ERROR ;SPR., WENN FEHLER 473/ 285 : 18 92 JR ENDTAP 474/ 287 : 475/ 287 : ;----------------- FUNKTIONSTASTEN AUSWERTEN ------- 476/ 287 : BRANCH: 477/ 287 : 5E LD E,(HL) ;ADR DES FUNKTIONSPROGRAMMTEILS 478/ 288 : 23 INC HL 479/ 289 : 56 LD D,(HL) 480/ 28A : 23 INC HL 481/ 28B : D5 PUSH DE ;DE=Adr. 482/ 28C : 5F LD E,A ;A=Index 483/ 28D : 16 00 LD D,0 484/ 28F : 19 ADD HL,DE 485/ 290 : D1 POP DE 486/ 291 : 6E LD L,(HL) ;L=Byte an Index-Pos. 487/ 292 : 26 00 LD H,0 488/ 294 : 19 ADD HL,DE ;ADR DES GEW. PROG. TEILS 489/ 295 : E9 JP (HL) 490/ 296 : 491/ 296 : ;----------------- - 492/ 296 : ERRDIS: 493/ 296 : 21 FD 23 LD HL,FUFEFLAG ;FUNKTIONS- UND FEHLERFLAG 494/ 299 : CB FE SET 7,(HL) ;setze Fehlerbit 495/ 29B : C9 RET 496/ 29C : 497/ 29C : ;----------------- MUSIK UND GRAPHIK BEI ERSTEINSCH. - 498/ 29C : INI: 499/ 29C : 3E 80 LD A,80H 500/ 29E : 32 FC 23 LD (INIFLAG),A ;FLAG AUF INITIALISIERT SETZEN 501/ 2A1 : CD EA 04 CALL MONMUS ; MUSIKPROGRAMM 502/ 2A4 : CD 1B 03 CALL INIDIP ; ANFANGSGRAPHIK 503/ 2A7 : C9 RET 504/ 2A8 : 505/ 2A8 : ;----------------------------------------------------- 506/ 2A8 : ; zu HDA: ein Byte löschen, wenn kein Fehler vorliegt 507/ 2A8 : PRECL1: 508/ 2A8 : 3A FD 23 LD A,(FUFEFLAG) 509/ 2AB : B7 OR A 510/ 2AC : C8 RET Z ;RET., WENN KEIN FLAG 511/ 2AD : 3E 00 LD A,0 512/ 2AF : 77 LD (HL),A ;ZELLE LOESCHEN 513/ 2B0 : 32 FD 23 LD (FUFEFLAG),A ;FLAG LOESCHEN 514/ 2B3 : C9 RET 515/ 2B4 : 516/ 2B4 : ;---------------------- 2 BYTE IM RAM LOESCHEN ------ 517/ 2B4 : ; zu HAD und HTAPWR: zwei Byte löschen, wenn kein Fehler vorliegt 518/ 2B4 : PRECL2: 519/ 2B4 : CD A8 02 CALL PRECL1 ;1 BYTE LOE., WENN FUFEFLAG NICHT 0 520/ 2B7 : C8 RET Z ;RET., WENN KEIN FLAG 521/ 2B8 : 23 INC HL 522/ 2B9 : 77 LD (HL),A ;NAECHSTE ZELLE LOESCHEN 523/ 2BA : 2B DEC HL 524/ 2BB : C9 RET 525/ 2BC : 526/ 2BC : ;--------------------- ADR U. DAT ANZ., ADR GEPUNKTET- 527/ 2BC : MEMDP1: 528/ 2BC : 3E 01 LD A,01H ;CODE "ADRESSE" 529/ 2BE : 06 04 LD B,04H ;ANZ. ADRESSSTELLEN 530/ 2C0 : 21 F4 23 LD HL,ADRLED 531/ 2C3 : 18 07 JR SAV12 532/ 2C5 : 533/ 2C5 : ;--------------------- ADR U. DAT ANZ.,ADR GEPUNKTET - 534/ 2C5 : MEMDP2: 535/ 2C5 : 3E 02 LD A,02H ;CODE "DATEN" 536/ 2C7 : 06 02 LD B,02H ;ANZAHL DATENSTELLEN 537/ 2C9 : 21 F2 23 LD HL,DATLED 538/ 2CC : SAV12: 539/ 2CC : 32 FB 23 LD (ATCODE),A ;CODE ABSPEICHERN 540/ 2CF : D9 EXX 541/ 2D0 : ED 5B F8 23 LD DE,(USERPC) ;ANWENDERADR ANZEIGEN 542/ 2D4 : CD B7 04 CALL ADRSDP 543/ 2D7 : 1A LD A,(DE) ;INHALT DER ADRESS. RAM-ZELLE 544/ 2D8 : CD C3 04 CALL DADP ;DATUM ANZEIGEN 545/ 2DB : D9 EXX 546/ 2DC : SETPT: 547/ 2DC : CB E6 SET 4,(HL) ; DEZIMALPUNKTE SETZEN 548/ 2DE : 23 INC HL 549/ 2DF : 10 FB DJNZ SETPT ;WDHLG., BIS ALLE DEZIMALPUNKTEPT 550/ 2E1 : C9 RET 551/ 2E2 : 552/ 2E2 : ;--------------------- PARAMETER ANZEIGEN ---------- 553/ 2E2 : STEPDP: 554/ 2E2 : CD FD 02 CALL LOCTBF ;PARAMETERADR. BERECHNEN 555/ 2E5 : 5E LD E,(HL) ;INHALT DER ADRES. ZELLE NACH DE 556/ 2E6 : 23 INC HL 557/ 2E7 : 56 LD D,(HL) 558/ 2E8 : CD B7 04 CALL ADRSDP ;DARSTELLEN 559/ 2EB : 21 F4 23 LD HL,ADRLED ;ADR PUNKTIEREN 560/ 2EE : 06 04 LD B,04H 561/ 2F0 : CD DC 02 CALL SETPT 562/ 2F3 : CD 07 03 CALL LOCTNA ;ZEICHEN FUER PARAMETERANZ. NACH A 563/ 2F6 : 6F LD L,A 564/ 2F7 : 26 08 LD H,08H ;"-"-ZEICHEN 565/ 2F9 : 22 F2 23 LD (DATLED),HL ;IN DATENANZ. DARSTELLEN 566/ 2FC : C9 RET 567/ 2FD : 568/ 2FD : ;--------------------- PARAMETERADR. BERECHNEN ---- 569/ 2FD : ; EINTTRIT: ---- 570/ 2FD : ; AUSTRITT: ADR IN HL 571/ 2FD : ; ZERSTOERT: A 572/ 2FD : LOCTBF: 573/ 2FD : 3A FA 23 LD A, (ATFLAG) ;PARAMETERCODE 574/ 300 : 87 ADD A,A ; x 2 575/ 301 : 21 EB 23 LD HL,FILNAME 576/ 304 : 85 ADD A,L ; + DESCRIPTOR-AREA 577/ 305 : 6F LD L,A 578/ 306 : C9 RET 579/ 307 : 580/ 307 : ;--------------------- ZEICHEN FUER PARAMETERANZEIGE -- 581/ 307 : ;EINTRITT: 582/ 307 : ;AUSTRITT: ZEICHEN IN A 583/ 307 : ;ZERSTOERT: DE 584/ 307 : LOCTNA: 585/ 307 : 3A FB 23 LD A,(ATCODE) ; CODE "FROM TAPE" ODER "TO TAPE" 586/ 30A : D6 04 SUB 04H ; - 4 587/ 30C : 87 ADD A,A 588/ 30D : 87 ADD A,A ; x 4 589/ 30E : 11 89 05 LD DE,DISP4 ; ANZEIGETEXT Parameter-Buchstaben 590/ 311 : 83 ADD A,E 591/ 312 : 5F LD E,A ;NEUE ADR NACH DE (FROM ODER TO) 592/ 313 : 3A FA 23 LD A,(ATFLAG) ;CODE FUER PARAMETER 593/ 316 : 83 ADD A,E 594/ 317 : 5F LD E,A ;ADRESSE ZEICHEN 595/ 318 : 1A LD A,(DE) 596/ 319 : B7 OR A 597/ 31A : C9 RET 598/ 31B : 599/ 31B : ;--------------------- GRAPHIK FUER ANFANGS-ANZEIGE -- 600/ 31B : INIDIP: 601/ 31B : 0E 05 LD C,05H ;ANZAHL DER WDHLG. 602/ 31D : 21 83 05 LD HL,DISP3 ;TEXT "HALLO " 603/ 320 : E5 PUSH HL 604/ 321 : DD 21 7D 05 LD IX,DISP2 ;TEXT " USER " 605/ 325 : A1: 606/ 325 : CD 5E 03 CALL SOU1K 607/ 328 : DD E3 EX (SP),IX ;ADRESS-AUSTAUSCH 608/ 32A : 06 14 LD B,20 ;0.2 Sek 609/ 32C : A2: 610/ 32C : CD 83 04 CALL DAK2 611/ 32F : 10 FB DJNZ A2 612/ 331 : CD 67 03 CALL SOU2K 613/ 334 : 06 14 LD B,20 ;0.2 Sek 614/ 336 : A3: 615/ 336 : CD 83 04 CALL DAK2 616/ 339 : 10 FB DJNZ A3 617/ 33B : 0D DEC C 618/ 33C : 20 E7 JR NZ,A1 619/ 33E : 620/ 33E : 0E 15 LD C,21 ; 21 Schritte Laufschrift (disp4-disp1) 621/ 340 : DD 21 89 05 LD IX,DISP4 ; leere Anzeige 622/ 344 : BLOOP: 623/ 344 : 06 0B LD B,11 ;0.11 Sek 624/ 346 : B1: 625/ 346 : CD 83 04 CALL DAK2 626/ 349 : 10 FB DJNZ B1 627/ 34B : CB 41 BIT 0,C ; in jedem Schleifendurchlauf 628/ 34D : 20 05 JR NZ,B2 ; Wechsel zw. sou1k und sou2k 629/ 34F : CD 67 03 CALL SOU2K 630/ 352 : 18 03 JR B3 631/ 354 : B2: 632/ 354 : CD 5E 03 CALL SOU1K 633/ 357 : B3: 634/ 357 : DD 2B DEC IX ; Laufschrift nächster Schritt 635/ 359 : 0D DEC C 636/ 35A : 20 E8 JR NZ,BLOOP 637/ 35C : 638/ 35C : E1 POP HL ;STACK-KOR. 639/ 35D : C9 RET 640/ 35E : 641/ 35E : ;---------------------- 1KHZ80ms ---------------- 642/ 35E : SOU1K: 643/ 35E : D9 EXX 644/ 35F : 21 50 00 LD HL,80 645/ 362 : CD 70 03 CALL SOUN1K 646/ 365 : D9 EXX 647/ 366 : C9 RET 648/ 367 : 649/ 367 : ;--------------------- 2KHZ80ms ----------------- 650/ 367 : SOU2K: 651/ 367 : D9 EXX 652/ 368 : 21 A0 00 LD HL,160 653/ 36B : CD 74 03 CALL SOUN2K 654/ 36E : D9 EXX 655/ 36F : C9 RET 656/ 370 : 657/ 370 : ;--------------------- TONSIGNAL 1KHZ -------------- 658/ 370 : 659/ 370 : ; FUNKTION: Ausgabe eines Tonsignals von 1 kHz 660/ 370 : ; EINTRITT: Der Inhalt der Register HL gibt die Anzahl der Takte an; Höchstwert 32768 Takte. 661/ 370 : ; AUSTRITT: --- 662/ 370 : ; REGISTER: Die Inhalte der Register Arg BC, DE, HL, werden zerstört. 663/ 370 : 664/ 370 : SOUN1K: 665/ 370 : 0E 20 LD C,32 666/ 372 : 18 02 JR SOUND 667/ 374 : 668/ 374 : ;--------------------- TONSIGNAL 2KHZ -------------- 669/ 374 : 670/ 374 : ; FUNKTION: Ausgabe eines Tonsignals in 2 kHz 671/ 374 : ; EINTRITT: Der Inhalt der Register HL gibt die Anzahl der Takte an; Höchstwert 32768 Takte 672/ 374 : ; AUSTRITT: --- 673/ 374 : ; REGISTER: Die Inhalte der Register AF, BC, DE, HL werden zerstört. 674/ 374 : 675/ 374 : SOUN2K: 676/ 374 : 0E 0F LD C,15 677/ 376 : 678/ 376 : ; FUNKTION: Tonsignal für Lautsprecher 679/ 376 : ; EINTRITT: Der Inhalt des Registers C gibt die Tonfrequenz an. 680/ 376 : ; Der Inhalt der Register HL gibt die Anzahl der Takte an, Höchstwert 32768 Takte 681/ 376 : ; AUSTRITT: --- 682/ 376 : ; REGISTER: Die Inhalte der Register AF, B, DE, HL, werden zerstört. 683/ 376 : 684/ 376 : SOUND: 685/ 376 : 29 ADD HL,HL ; x 2 WEGEN H- UND L-TEIL DES TAKTES 686/ 377 : 11 01 00 LD DE,0001H ;FUER ZAEHLUNG 687/ 37A : 3E FF LD A,0FFH ;TAPE.OUT=H, ANZEIGE AUS 688/ 37C : SQWAVE: 689/ 37C : D3 F5 OUT (DIGITAP),A 690/ 37E : 41 LD B,C 691/ 37F : 10 FE DJNZ $ ;ZEITVERZ. 692/ 381 : EE 02 XOR 2 ;TAPE.OUT=L 693/ 383 : ED 52 SBC HL,DE 694/ 385 : 20 F5 JR NZ,SQWAVE ;WDHLG., BIS ALLE TAKTE 695/ 387 : C9 RET 696/ 388 : 697/ 388 : ;--------------------- PRUEFSUMME ---------------- 698/ 388 : ;EINTRITT: - 699/ 388 : ;AUSTRITT: SUMME IN A 700/ 388 : SUM: 701/ 388 : CD 95 03 CALL GETPTR 702/ 38B : D8 RET C ;RET., WENN FEHLER 703/ 38C : AF XOR A 704/ 38D : SUMCAL: 705/ 38D : 86 ADD A,(HL) ;AUFSUMMIEREN 706/ 38E : ED A1 CPI ;NAECHSTE ADR 707/ 390 : EA 8D 03 JP PE,SUMCAL ;WDHLG., BIS ALLE BYTES 708/ 393 : B7 OR A 709/ 394 : C9 RET 710/ 395 : 711/ 395 : ;--------------------- SPEICHERLAENGE BER. --------- 712/ 395 : ;EINTRITT: 713/ 395 : ;AUSTRITT: LAENGE IN BC 714/ 395 : ; BEI FEHLER CY=1 715/ 395 : GETPTR: 716/ 395 : 21 ED 23 LD HL,STARTADR ;DESCRIPTORAREA 717/ 398 : 5E LD E,(HL) ;STARTADR 718/ 399 : 23 INC HL 719/ 39A : 56 LD D,(HL) 720/ 39B : 23 INC HL 721/ 39C : 4E LD C,(HL) ;ENDADR (C ZWI.SP. WEG. ADR IN HL) 722/ 39D : 23 INC HL 723/ 39E : 66 LD H,(HL) 724/ 39F : 69 LD L,C 725/ 3A0 : B7 OR A ;CY LOESCHEN 726/ 3A1 : ED 52 SBC HL, DE ;ABSTAND 727/ 3A3 : 4D LD C,L ;NACH BC LADEN 728/ 3A4 : 44 LD B,H 729/ 3A5 : EB EX DE,HL 730/ 3A6 : C9 RET 731/ 3A7 : 732/ 3A7 : ;---------------------- LESEN VOM BAND ------------- 733/ 3A7 : ;EINTRITT: ZIELANFANGSADR IN HL 734/ 3A7 : ; LAENGE IN BC 735/ 3A7 : ;AUSTRITT: 736/ 3A7 : TAPEIN: 737/ 3A7 : AF XOR A 738/ 3A8 : 08 EX AF,AF' ;' 739/ 3A9 : TLOOP: 740/ 3A9 : CD B4 03 CALL GTBYTE ;1 BYTE LESEN 741/ 3AC : 73 LD (HL),E ;ABSPEICHERN 742/ 3AD : ED A1 CPI ;NAECHSTE ADR 743/ 3AF : EA A9 03 JP PE,TLOOP ;WDHLG., BIS ALLE BYTE 744/ 3B2 : 08 EX AF,AF' ;' 745/ 3B3 : C9 RET 746/ 3B4 : 747/ 3B4 : ;-------------------- 1 BYTE VOM BAND LESEN ---- 748/ 3B4 : ;EINTRITT: 749/ 3B4 : ;AUSTRITT: DATENBYTE IN E 750/ 3B4 : GTBYTE: 751/ 3B4 : CD C5 03 CALL GETBIT ;STARTBIT 752/ 3B7 : 16 08 LD D,08H ;8 BIT 753/ 3B9 : GLOOP: 754/ 3B9 : CD C5 03 CALL GETBIT ;DATENBIT LESEN 755/ 3BC : CB 1B RR E ;IN E SCHIEBEN 756/ 3BE : 15 DEC D 757/ 3BF : 20 F8 JR NZ,GLOOP ;WDHLG., BIS 8 BIT 758/ 3C1 : CD C5 03 CALL GETBIT ;STOPBIT 759/ 3C4 : C9 RET 760/ 3C5 : 761/ 3C5 : ;-------------------- 1 BIT VOM BAND LESEN --------- 762/ 3C5 : ;EINTRITT: 763/ 3C5 : ;AUSTRITT: BIT IN CY 764/ 3C5 : GETBIT: 765/ 3C5 : D9 EXX 766/ 3C6 : 21 00 00 LD HL,0000 767/ 3C9 : COUNT: 768/ 3C9 : CD 00 04 CALL PERIOD ;TAKTLAENGE 769/ 3CC : 14 INC D 770/ 3CD : 15 DEC D ;Z-FLAG SETZEN/RUECKSETZEN 771/ 3CE : 20 11 JR NZ,TERR ;SPR., WENN ZU GROSS (FEHLER) 772/ 3D0 : 38 06 JR C,SHORTP ;SPR., WENN 1 KHZ 773/ 3D2 : ;FREQU. IST 2 KHZ 774/ 3D2 : 2D DEC L ;L=L-2 775/ 3D3 : 2D DEC L 776/ 3D4 : CB C4 SET 0,H ;H=1 777/ 3D6 : 18 F1 JR COUNT ;WDHLG. 778/ 3D8 : SHORTP: 779/ 3D8 : ;FREQU. IST 1 KHZ 780/ 3D8 : 2C INC L ;L=L+1 781/ 3D9 : CB 44 BIT 0,H 782/ 3DB : 28 EC JR Z,COUNT ;SPR., WENN NOCH NICHT 2 KHZ EMPFANGEN 783/ 3DD : CB 15 RL L ;BIT IN CY 784/ 3DF : D9 EXX 785/ 3E0 : C9 RET 786/ 3E1 : TERR: 787/ 3E1 : ;FREQUENZ AUSSER ERLAUBTEM BEREICH 788/ 3E1 : 08 EX AF,AF' ;' 789/ 3E2 : 37 SCF 790/ 3E3 : 08 EX AF,AF' ;' 791/ 3E4 : D9 EXX 792/ 3E5 : C9 RET 793/ 3E6 : 794/ 3E6 : ;--------------------- ADR 2. ROM/EPROM -------------- 795/ 400 : ORG 0400H 796/ 400 : 797/ 400 : =>FALSE IF ROM_=2 798/ 400 : DEFB 0FFH 799/ 400 : ORG 0800H 800/ 400 : [797] ENDIF 801/ 400 : 802/ 400 : ;--------------------- TAKTLAENGE VOM BAND-SIGNAL ---- 803/ 400 : ;EINTRITT: ---- 804/ 400 : ;AUSTRITT: CY=O --> 1 KHZ 805/ 400 : ; CY=1 --> 2 KHZ 806/ 400 : PERIOD: 807/ 400 : 11 00 00 LD DE,0000 ;ZAEHLER = 0 808/ 403 : CHK0: 809/ 403 : DB F5 IN A,(DIGITAP) ;EINLESEN 810/ 405 : 13 INC DE ;ZAEHLER ERHOEHEN 811/ 406 : 1F RRA 812/ 407 : 38 FA JR C,CHK0 ;WDHLG., WENN EINGANG H 813/ 409 : 3E 00 LD A,0 ;AZEIGE FREI, TAPE.OUT = L 814/ 40B : D3 F5 OUT (DIGITAP),A 815/ 40D : CHK1: 816/ 40D : DB F5 IN A,(DIGITAP) ;EINLESEN 817/ 40F : 13 INC DE ;ZAEHLER ERHOEHEN 818/ 410 : 1F RRA 819/ 411 : 30 FA JR NC,CHK1 ;WDHLG., WENN EINGANG L 820/ 413 : 3E 02 LD A,2 ; ANZEIGE FREI, TAPE.OUT = H 821/ 415 : D3 F5 OUT (DIGITAP),A 822/ 417 : 7B LD A,E 823/ 418 : FE 16 CP 22 ;TEST <> 1,5 KHZ 824/ 41A : C9 RET 825/ 41B : 826/ 41B : ;--------------------- DATEN AUF BAND AUSGEBEN ------ 827/ 41B : ;EINTRITT: ANFANGSADR. IN HL 828/ 41B : ; ANZAHL IN BC 829/ 41B : ;AUSTRITT: 830/ 41B : TAPOUT: 831/ 41B : 5E LD E,(HL) ;BYTE NACH E 832/ 41C : CD 25 04 CALL OUTBYTE 833/ 41F : ED A1 CPI ;NAECHSTES BYTE 834/ 421 : EA 1B 04 JP PE,TAPOUT ;WDHLG., WENN NOCH BYTES ZU SENDEN 835/ 424 : C9 RET 836/ 425 : 837/ 425 : ;--------------------- EIN BYTE AUSGEBEN ---------- 838/ 425 : ;EINTRITT: BYTE IN E 839/ 425 : ;AUSTRITT: 840/ 425 : OUTBYTE: 841/ 425 : 16 08 LD D,08H ;8 BIT 842/ 427 : B7 OR A 843/ 428 : CD 38 04 CALL OUTBIT ;STARTBIT 844/ 42B : OLOOP: 845/ 42B : CB 1B RR E ;BIT IN CY 846/ 42D : CD 38 04 CALL OUTBIT ;DATENBIT AUSGEBEN 847/ 430 : 15 DEC D 848/ 431 : 20 F8 JR NZ,OLOOP ;WDHLG., BIS 8 BIT 849/ 433 : 37 SCF 850/ 434 : CD 38 04 CALL OUTBIT ;STOPBIT 851/ 437 : C9 RET 852/ 438 : 853/ 438 : ;----------------- - 854/ 438 : OUTBIT: 855/ 438 : D9 EXX ;OUTPUT 1 BIT DATA 856/ 439 : 26 00 LD H,0 857/ 43B : 38 09 JR C,OUT1 858/ 43D : OUT0: 859/ 43D : 2E 0C LD L,0CH ;6ms 2K 860/ 43F : CD 74 03 CALL SOUN2K 861/ 442 : 2E 03 LD L,03H ;3ms 1k 862/ 444 : 18 07 JR BITEND 863/ 446 : OUT1: 864/ 446 : 2E 06 LD L,06H ;3ms 2K 865/ 448 : CD 74 03 CALL SOUN2K 866/ 44B : 2E 06 LD L,06H ;6ms 1k 867/ 44D : BITEND: 868/ 44D : CD 70 03 CALL SOUN1K 869/ 450 : D9 EXX 870/ 451 : C9 RET 871/ 452 : ;---------------------- TEST, OB (HL) RAM IST ------- 872/ 452 : ; 2 x INVERTIERTES SCHREIBEN UND 873/ 452 : ; LESEN AUS/IN DEN DURCH HL ANGEG. 874/ 452 : ; SPEICHERPLATZ UND VERGLEICHEN 875/ 452 : ; AUSGABE: Z=1, WENN RAM 876/ 452 : 877/ 452 : ; FUNKTION: Test ob ein Speicherplatz im RAM liegt 878/ 452 : ; EINTRITT: HL gibt den Speicherplatz an. 879/ 452 : ; AUSTRITT: Z-Flag = 1 wenn (HL) RAM ist. 880/ 452 : ; REGISTER: Der Inhalt der Register AF wird zerstört. 881/ 452 : 882/ 452 : RAMCHK: 883/ 452 : 7E LD A,(HL) 884/ 453 : 2F CPL 885/ 454 : 77 LD (HL),A 886/ 455 : 7E LD A,(HL) 887/ 456 : 2F CPL 888/ 457 : 77 LD (HL),A 889/ 458 : BE CP (HL) 890/ 459 : C9 RET 891/ 45A : 892/ 45A : ;--------------------- LED UND TASTATUR-ABFR.-------- 893/ 45A : ; wie DAK2, aber: 894/ 45A : ; - die Funktion wird fortgesetzt, bis eine Taste gedrückt wurde. 895/ 45A : ; - Anstelle des Tastencodes wird der umgewandelte interne Code geliefert, 896/ 45A : ; wie er von anderen Teilen des Monitorprogrammes benötigt wird. 897/ 45A : ; EINTRITT: IX zeigt auf die niederwertigste Adresse des Speicherbereiches, 898/ 45A : ; der zur Anzeige gelangen soll. 899/ 45A : ; AUSTRITT: Der interne Code befindet sich im ARegister. 900/ 45A : ; REGISTER: Die Inhalte von AF, B, HL, A'F', B'C', D'E' werden zerstört. 901/ 45A : 902/ 45A : ; Taste interner Code 903/ 45A : 904/ 45A : ; 0..F 00..0F 905/ 45A : ; + 10 906/ 45A : ; - 11 907/ 45A : ; EX 12 908/ 45A : ; DAT 14 909/ 45A : ; ADR 19 910/ 45A : ; ST 1E 911/ 45A : ; LD 1F 912/ 45A : 913/ 45A : DAK1: 914/ 45A : DD E5 PUSH IX ;ADR ANZ.TEXT RETTEN 915/ 45C : 21 FD 23 LD HL,FUFEFLAG 916/ 45F : CB 7E BIT 7,(HL) ;FEHLERFLAG TESTEN 917/ 461 : 28 04 JR Z,SCPRE ;SPR., WENN KEIN FEHLER 918/ 463 : DD 21 A5 05 LD IX,ERR ;ADR FEHLERTEXT 919/ 467 : SCPRE: 920/ 467 : 06 06 LD B,06H 921/ 469 : SCNX: 922/ 469 : CD 83 04 CALL DAK2 923/ 46C : 30 F9 JR NC,SCPRE ;WDHLG., WENN TASTE NOCH GEDR. 924/ 46E : 10 F9 DJNZ SCNX 925/ 470 : CB BE RES 7,(HL) ;FEHLERLAG LOESCHEN 926/ 472 : DD E1 POP IX ;ALTER TEXT 927/ 474 : SCLOOP: 928/ 474 : CD 83 04 CALL DAK2 929/ 477 : 38 FB JR C,SCLOOP ;WDHLG., WENN KEINE TASTE GEDR. 930/ 479 : 21 EF 05 LD HL,KEYTAB ;TASTE NACH TABELLE UMCODIEREN 931/ 47C : 85 ADD A,L 932/ 47D : 6F LD L,A 933/ 47E : 30 01 JR NC,SCNCY 934/ 480 : 24 INC H 935/ 481 : SCNCY: 936/ 481 : 7E LD A,(HL) ;UMCODIERTER TASTENWERT 937/ 482 : C9 RET 938/ 483 : 939/ 483 : ;----------------- LED U. TASTATUR-UP -------------- 940/ 483 : ; Einmalige Ansteuerung von Anzeige und Tastatur, alle 6 LED-Anzeigen werden 941/ 483 : ; nacheinander angesteuert ( Ausführungszeit ca. 10 ms). 942/ 483 : ; Eintritt: IX, zeigt auf die niederwertigste Adresse des Speicherbereiches, 943/ 483 : ; der zur Anzeige gelangen soll. 944/ 483 : ; Austritt: CY = 1, wenn keine Taste gedrückt 945/ 483 : ; CY = 0, wenn eine Taste gedrückt (außer RES oder NMI). 946/ 483 : ; Der Positionscode der Taste befindet sich im A-Register. 947/ 483 : ; Register: Die Inhalte von AF, A' F', B' C', D'E' werden zerstört. 948/ 483 : 949/ 483 : 950/ 483 : ; TASTATURMATRIX 951/ 483 : ; 952/ 483 : ; System-PIO, DIGITAP 953/ 483 : ; 954/ 483 : ; B2 B3 B4 B5 B6 B7 955/ 483 : ; | | | | | | 956/ 483 : ; +-----+-----+-----+-----+-----+-----+ 957/ 483 : ; | EX | 0 | 4 | 8 | C | ADR | --> B7 User-IO, KEYIN 958/ 483 : ; | 00 | 04 | 08 | 0C | 10 | 14 | -- Tastencode DAK2 959/ 483 : ; +-----+-----+-----+-----+-----+-----+ 960/ 483 : ; | ST | 1 | 5 | 9 | D | DAT | --> B6 961/ 483 : ; | 01 | 05 | 09 | 0D | 11 | 15 | 962/ 483 : ; +-----+-----+-----+-----+-----+-----+ 963/ 483 : ; | LD | 2 | + | E | A | 6 | --> B5 964/ 483 : ; | 02 | 06 | 0A | 0E | 12 | 16 | 965/ 483 : ; +-----+-----+-----+-----+-----+-----+ 966/ 483 : ; | | 3 | 7 | B | F | - | --> B4 967/ 483 : ; | | 07 | 0B | 0F | 13 | 17 | 968/ 483 : ; +-----+-----+-----+-----+-----+-----+ 969/ 483 : 970/ 483 : DAK2: 971/ 483 : 37 SCF ;keine Taste gedrückt setzen 972/ 484 : 08 EX AF,AF' ;' und als Vorgabe merken 973/ 485 : D9 EXX 974/ 486 : 0E 00 LD C,0 ;TASTENNUMMER = 0 975/ 488 : 1E FB LD E,11111011B ;BITMUSTER FUER DIGITANSTEUERUNG 976/ 48A : ;Bit2 = 0 -> erste Spalte low 977/ 48A : KCOL: 978/ 48A : DD 7E 00 LD A,(IX) ;SEGMENTE ANSTEUERN 979/ 48D : 2F CPL 980/ 48E : D3 F4 OUT (SEGMENT),A 981/ 490 : 7B LD A,E ;DIGIT ANSTEUERN 982/ 491 : D3 F5 OUT (DIGITAP),A 983/ 493 : 06 64 LD B,100 ;ZEITVERZOEGERUNG 984/ 495 : 10 FE DJNZ $ 985/ 497 : 06 04 LD B,04H ;ZEILENZAHL TASTENMATRIX 986/ 499 : DB F9 IN A,(KEYIN) ;TASTENWERT EINLESEN 987/ 49B : 57 LD D,A ;TEST, OB TASTE GEDRUECKT 988/ 49C : KROW: 989/ 49C : CB 12 RL D ;Bit7 -> Cy, restl. Bit rücken nach 990/ 49E : 38 02 JR C,NOKEY ;wenn Taste nicht gedrückt 991/ 4A0 : 79 LD A,C ;wenn Taste gedrückt, ist C der Tastencode 992/ 4A1 : 08 EX AF,AF' ;' Taste merken 993/ 4A2 : ;WENN TASTE: -> CY=0, A = NUMMER 994/ 4A2 : NOKEY: 995/ 4A2 : 0C INC C ;ABFRAGEZAEHLER ERHOEHEN 996/ 4A3 : 10 F7 DJNZ KROW ;WDHLG., WENN NOCH NICHT ALLE ZEILEN 997/ 4A5 : DD 23 INC IX ;NAECHSTES ZEICHEN ZUR ANZEIGE 998/ 4A7 : CB 03 RLC E ;nächste Spalte low 999/ 4A9 : 3E FF LD A,0FFH 1000/ 4AB : D3 F5 OUT (DIGITAP),A ;ANZEIGE AUS 1001/ 4AD : 38 DB JR C,KCOL ;GGF. NAECHSTE SPALTE 1002/ 4AF : 11 FA FF LD DE,0FFFAH ; -6 1003/ 4B2 : DD 19 ADD IX,DE ;WIEDERHERST. ANF.ADR DES ANZ.TEXTES 1004/ 4B4 : D9 EXX 1005/ 4B5 : 08 EX AF,AF' ;' gemerkte Taste nach A 1006/ 4B6 : C9 RET 1007/ 4B7 : 1008/ 4B7 : ;-------------------- ADRESSE ANZEIGEN ------------- 1009/ 4B7 : ; FUNKTION: Eintragen von 4 Ziffern in den Adressanzeigespeicher 1010/ 4B7 : ; (Adressen 23F4 - 23F7H) 1011/ 4B7 : ; EINTRITT: Anzuzeigende Zahl in DE 1012/ 4B7 : ; AUSTRITT: Entsprechender 7-Segment-Code im Adressanzeigespeicher 1013/ 4B7 : ; REGISTER: Die Inhalte der Register AF und HL werden zerstört. 1014/ 4B7 : 1015/ 4B7 : ADRSDP: 1016/ 4B7 : 21 F4 23 LD HL,ADRLED 1017/ 4BA : 7B LD A,E ;UNTERE 2 ZIFFERN 1018/ 4BB : CD D9 04 CALL TWOSEG 1019/ 4BE : 7A LD A,D ;OBERE 2 ZIFFERN 1020/ 4BF : CD D9 04 CALL TWOSEG 1021/ 4C2 : C9 RET 1022/ 4C3 : 1023/ 4C3 : ;---------------------- A-REG IN DAT-ANZ-SPEICHER --- 1024/ 4C3 : ; FUNKTION: Eintragen von 2 Ziffern in den Datenanzeigespeicher 1025/ 4C3 : ; (Adressen 23F2 - 23F3H) 1026/ 4C3 : ; EINTRITT: Anzuzeigende Zahl in A 1027/ 4C3 : ; AUSTRITT: Entsprechender 7-Segment-Code im Datenanzeigespeicher 1028/ 4C3 : ; REGISTER: Die Inhalte der Register AF und HL werden zerstört. 1029/ 4C3 : DADP: 1030/ 4C3 : 21 F2 23 LD HL,DATLED 1031/ 4C6 : CD D9 04 CALL TWOSEG 1032/ 4C9 : C9 RET 1033/ 4CA : 1034/ 4CA : ;--------------------- - 1035/ 4CA : ; FUNKTION: Umwandeln einer Ziffer in den entsprechenden 7-Segment-Code 1036/ 4CA : ; EINTRITT: Die rechten 4 Bit des A-Registers sind die umzuwandelnde Hex-Zahl. 1037/ 4CA : ; AUSTRITT: Der entsprechende 7-Segment-Code steht im A-Register. 1038/ 4CA : ; REGISTER: Der Inhalt in AF wird zerstört 1039/ 4CA : 1040/ 4CA : ONESEG: 1041/ 4CA : E5 PUSH HL 1042/ 4CB : D5 PUSH DE 1043/ 4CC : 21 07 06 LD HL,SEGTAB ;ADR DER SEGMENTTABELLE 1044/ 4CF : E6 0F AND 0FH ;OBERES HALBBYTE AUSBLENDEN 1045/ 4D1 : 5F LD E,A 1046/ 4D2 : 16 00 LD D,0 1047/ 4D4 : 19 ADD HL,DE 1048/ 4D5 : D1 POP DE 1049/ 4D6 : 7E LD A,(HL) ;KONVERTIERTE ZAHL NACH A 1050/ 4D7 : E1 POP HL 1051/ 4D8 : C9 RET 1052/ 4D9 : 1053/ 4D9 : ;--------------------- - 1054/ 4D9 : ; FUNKTION: Umwandeln des Inhalts des A-Registers in die zugehörigen 2 7-Segment-Codes. 1055/ 4D9 : ; EINTRITT: Untere Tetrade von A als 1.Ziffer Obere Tetrade von A als 2.Ziffer 1056/ 4D9 : ; AUSTRITT: Der erste Code wird in (HL), der zweite Code in (HL + 1) abgespeichert. 1057/ 4D9 : ; HL wird um 2 erhöht. 1058/ 4D9 : ; REGISTER: Die Inhalte der Register AF und HL werden zerstört. 1059/ 4D9 : 1060/ 4D9 : TWOSEG: 1061/ 4D9 : F5 PUSH AF 1062/ 4DA : CD CA 04 CALL ONESEG ;UNTERE ZIFFER UMWANDELN 1063/ 4DD : 77 LD (HL),A ;ABSPEICHERN 1064/ 4DE : 23 INC HL ;ADR FUER HINTERLEGUNG OBERE ZAHL 1065/ 4DF : F1 POP AF ;URSPRUENGL. ZAHL 1066/ 4E0 : 0F RRCA 1067/ 4E1 : 0F RRCA 1068/ 4E2 : 0F RRCA 1069/ 4E3 : 0F RRCA ;OBERES HALBBYTE 1070/ 4E4 : CD CA 04 CALL ONESEG ;OBERE ZIFFER UMWANDELN 1071/ 4E7 : 77 LD (HL),A ;ABSPEICHERN 1072/ 4E8 : 23 INC HL ;ADR GGF. NAECHSTE ZIFFER 1073/ 4E9 : C9 RET 1074/ 4EA : 1075/ 4EA : ;--------------------- MUSIKPROGRAMM ----------------- 1076/ 4EA : 1077/ 4EA : ; FUNKTION: Spielen der Anfangsmusik 1078/ 4EA : ; EINTRITT: --- 1079/ 4EA : ; AUSTRITT: --- 1080/ 4EA : ; REGISTER: Die Inhalte der Register IX, IY, AF, DC, DE, HL werden zerstört. 1081/ 4EA : 1082/ 4EA : MONMUS: 1083/ 4EA : FD 21 17 06 LD IY,SONG ;ADR DER NOTEN 1084/ 4EE : 1085/ 4EE : ; FUNKTION: Spielen von Musik 1086/ 4EE : ; EINTRITT: Im Register IY steht die Startadresse des Musikstückes 1087/ 4EE : ; AUSTRITT: --- 1088/ 4EE : ; REGISTER: Die Inhalte der Register IX, AF, BC, DE, HL werden zerstört. 1089/ 4EE : 1090/ 4EE : ; Jeweils 2 Byte repräsentieren eine Note. 1091/ 4EE : ; Das erste Byte gibt die Tonhöhe, das zweite Byte die Tonlänge an. 1092/ 4EE : ; Hat das erste Byte den Wert 80H, wird das Musikprogramm 1093/ 4EE : ; verlassen, bei 40H wird das Programm von vorn begonnen, bei 20H 1094/ 4EE : ; wird eine Pause mit der durch das zweite Byte angegebenen Länge 1095/ 4EE : ; gemacht. 1096/ 4EE : ; Als Werte für die Tonhöhe sind die Zahlen 0H bis 1FH erlaubt. 1097/ 4EE : ; Bezogen auf eine Taktfrequenz von 900 kHz entsprechen 1098/ 4EE : ; aufeinanderfolgende Zahlen jeweils einen Halbtonschritt, wobei der 1099/ 4EE : ; tiefste Ton (00H) etwa dem Ton cis entspricht. 1100/ 4EE : ; Die Tonlänge ist frei wählbar. 1101/ 4EE : 1102/ 4EE : MUSIC: 1103/ 4EE : FD E5 PUSH IY 1104/ 4F0 : DD E1 POP IX 1105/ 4F2 : MUSLOOP: 1106/ 4F2 : DD 7E 00 LD A,(IX) ;tonhöhe/befehl 1107/ 4F5 : 87 ADD A,A 1108/ 4F6 : D8 RET C ;WENN WERT >= 80H Ende 1109/ 4F7 : FA EE 04 JP M,MUSIC ;WENN WERT >= 40H wiederholen 1110/ 4FA : 0E 00 LD C,0 ;vorbelegen mit Pause 1111/ 4FC : CB 77 BIT 6,A 1112/ 4FE : 20 02 JR NZ,PLAY ;WENN WERT >= 20H Pause 1113/ 500 : CB C9 SET 1,C ;AUSGABE-BIT (C:=2) 1114/ 502 : PLAY: 1115/ 502 : E6 3F AND 3FH ; A ist schon tonhöhe*2 1116/ 504 : 21 34 05 LD HL,FRQTAB ; Frequenztabelle 1117/ 507 : 5F LD E,A ; Tonhöhe 1118/ 508 : 16 00 LD D,0 1119/ 50A : 19 ADD HL,DE ; + 2x Tonhöhe 1120/ 50B : 5E LD E,(HL) ; erster Frequenzwert 1121/ 50C : 23 INC HL 1122/ 50D : 56 LD D,(HL) ; zweiter Freq.wert 1123/ 50E : DD 23 INC IX ;Tonlänge 1124/ 510 : DD 66 00 LD H,(IX) ;merken 1125/ 513 : 3E FF LD A,0FFH 1126/ 515 : TONE: 1127/ 515 : 6A LD L,D ; zweiter Freq.wert 1128/ 516 : TONOUT: 1129/ 516 : D3 F5 OUT (DIGITAP),A 1130/ 518 : 43 LD B,E ; erster Freq.wert 1131/ 519 : DELAY: ; Verzögerungsschleife 1132/ 519 : 00 NOP 1133/ 51A : 10 FD DJNZ DELAY 1134/ 51C : A9 XOR C ; Toggle Bit f. PIO 1135/ 51D : ; bei PAUSE erfolgt keine Änderung des Bits! 1136/ 51D : 2D DEC L 1137/ 51E : 20 F6 JR NZ,TONOUT ; weiter in Schleife 1138/ 520 : 25 DEC H ; Tonlänge 1139/ 521 : 20 F2 JR NZ,TONE ; weiter in Tonausgabe 1140/ 523 : DD 23 INC IX ; Pointer auf nächste Note 1141/ 525 : 18 CB JR MUSLOOP 1142/ 527 : 1143/ 527 : ;--------------------- ANZEIGEMOD TESTEN ------------- 1144/ 527 : TESTM: 1145/ 527 : 3A FB 23 LD A,(ATCODE) 1146/ 52A : FE 01 CP 01H ; ADRS 1147/ 52C : C8 RET Z 1148/ 52D : FE 02 CP 02H ; DATS 1149/ 52F : C8 RET Z 1150/ 530 : E1 POP HL ;RUECKKEHRADR. LOESCHEN 1151/ 531 : C3 96 02 JP ERRDIS 1152/ 534 : 1153/ 534 : ;--------------------- FREQUENZTABELLE --------------- 1154/ 534 : ; erster Wert f. Tonhöhe, zweiter Wert f. konstante Tonlänge 1155/ 534 : ; erster ton laut Handbuch Ais 1156/ 534 : ; Töne nachgerechnet, stimmt ! -> töne lc-80.xlsx 1157/ 534 : ; (laut Zielosko beginnt die Tabelle mit Cis. Das ist falsch! ) 1158/ 534 : FRQTAB: 1159/ 534 : 70 18 DEFB 70H, 18h ; 00 Ais 1160/ 536 : 6A 1A DEFB 6AH, 1Ah ; 01 H 1161/ 538 : 64 1B DEFB 64H, 1Bh ; 02 C' 1162/ 53A : 5E 1D DEFB 5EH, 1Dh ; 03 Cis 1163/ 53C : 59 1E DEFB 59H, 1Eh ; 04 D 1164/ 53E : 54 20 DEFB 54H, 20h ; 05 Dis 1165/ 540 : 4F 22 DEFB 4FH, 22h ; 06 E 1166/ 542 : 4B 24 DEFB 4BH, 24h ; 07 F 1167/ 544 : 46 26 DEFB 46H, 26h ; 08 Fis 1168/ 546 : 42 29 DEFB 42H, 29h ; 09 G 1169/ 548 : 3F 2B DEFB 3FH, 2Bh ; 0A Gis 1170/ 54A : 3B 2E DEFB 3BH, 2Eh ; 0B A 1171/ 54C : 38 31 DEFB 38H, 31h ; 0C Ais 1172/ 54E : 35 33 DEFB 35H, 33h ; 0D H 1173/ 550 : 32 37 DEFB 32H, 37h ; 0E C' 1174/ 552 : 2F 3A DEFB 2FH, 3Ah ; 0F Cis' 1175/ 554 : 2C 3D DEFB 2CH, 3Dh ; 10 D' 1176/ 556 : 2A 41 DEFB 2AH, 41h ; 11 Dis' 1177/ 558 : 27 45 DEFB 27H, 45h ; 12 E' 1178/ 55A : 25 49 DEFB 25H, 49h ; 13 F' 1179/ 55C : 23 4D DEFB 23H, 4Dh ; 14 Fis' 1180/ 55E : 21 52 DEFB 21H, 52h ; 15 G' 1181/ 560 : 1F 57 DEFB 1FH, 57h ; 16 Gis' 1182/ 562 : 1D 5C DEFB 1DH, 5Ch ; 17 A' 1183/ 564 : 1B 62 DEFB 1BH, 62h ; 18 Ais' 1184/ 566 : 1A 67 DEFB 1AH, 67h ; 19 H' 1185/ 568 : 18 6E DEFB 18H, 6Eh ; 1A C'' 1186/ 56A : 17 74 DEFB 17H, 74h ; 1B Cis'' 1187/ 56C : 16 7B DEFB 16H, 7Bh ; 1C D'' 1188/ 56E : 14 82 DEFB 14H, 82h ; 1D Dis'' 1189/ 570 : 13 8A DEFB 13H, 8Ah ; 1E E'' 1190/ 572 : 12 92 DEFB 12H, 92h ; 1F F'' 1191/ 574 : 1192/ 574 : ;---------------------- TEXTE ------------------------ 1193/ 574 : DISP1: ; "OF LC-80" 1194/ 574 : E7 DEFB 0E7H ;"0" 1195/ 575 : EF DEFB 0EFH ;"8" 1196/ 576 : 08 DEFB 08H ;"-" 1197/ 577 : C6 DEFB 0C6H ;"C" 1198/ 578 : C2 DEFB 0C2H ;"L" 1199/ 579 : 00 DEFB 00H ;" " 1200/ 57A : 00 DEFB 00H ;" " 1201/ 57B : 4E DEFB 4EH ;"F" 1202/ 57C : E7 DEFB 0E7H ;"O" 1203/ 57D : DISP2: ; " USER " 1204/ 57D : 00 DEFB 00H ;" " 1205/ 57E : 48 DEFB 048H ;"R" 1206/ 57F : CE DEFB 0CEH ;"E" 1207/ 580 : AE DEFB 0AEH ;"S" 1208/ 581 : E3 DEFB 0E3H ;"U" 1209/ 582 : 00 DEFB 000H ;" " 1210/ 583 : DISP3: ; " HALLO " 1211/ 583 : 00 DEFB 000H ;" " 1212/ 584 : E7 DEFB 0E7H ;"O" 1213/ 585 : C2 DEFB 0C2H ;"L" 1214/ 586 : C2 DEFB 0C2H ;"L" 1215/ 587 : 6F DEFB 06FH ;"A" 1216/ 588 : 6B DEFB 06BH ;"H" 1217/ 589 : DISP4: ;Parameter-Buchstaben (ATCODE-4) 1218/ 589 : ;gleichzeitig leere Anzeige 1219/ 589 : 00 DEFB 00H ;" " 1220/ 58A : 00 DEFB 00H ;" " 1221/ 58B : 00 DEFB 00H ;" " 1222/ 58C : 00 DEFB 00H ;" " 1223/ 58D : ; 1224/ 58D : 00 DEFB 00H ;" " 1225/ 58E : 00 DEFB 00H ;" " 1226/ 58F : 00 DEFB 00H ;" " 1227/ 590 : 00 DEFB 00H ;" " 1228/ 591 : ;TO TAPE 1229/ 591 : 4E DEFB 04EH ;"F" filename 1230/ 592 : AE DEFB 0AEH ;"S" startadr 1231/ 593 : CE DEFB 0CEH ;"E" endadr 1232/ 594 : 00 DEFB 00H ;" " 1233/ 595 : ;FROM TAPE 1234/ 595 : 4E DEFB 04EH ;"F" filename 1235/ 596 : 00 DEFB 00H ;" " 1236/ 597 : 00 DEFB 00H ;" " 1237/ 598 : 00 DEFB 00H ;" " 1238/ 599 : DISP5: ; " int " 1239/ 599 : 00 DEFB 00H ;" " 1240/ 59A : 00 DEFB 00H ;" " 1241/ 59B : CA DEFB 0CAH ;"t" 1242/ 59C : 68 DEFB 68H ;"n" 1243/ 59D : 21 DEFB 21H ;"i" 1244/ 59E : 00 DEFB 00H ;" " 1245/ 59F : DISP6: ; "rst 38" 1246/ 59F : EF DEFB 0EFH ;"8" 1247/ 5A0 : AD DEFB 0ADH ;"3" 1248/ 5A1 : 00 DEFB 00H ;" " 1249/ 5A2 : CA DEFB 0CAH ;"t" 1250/ 5A3 : AE DEFB 0AEH ;"s" 1251/ 5A4 : 48 DEFB 48H ;"r" 1252/ 5A5 : ERR: ; "error" 1253/ 5A5 : 00 DEFB 00H ;" " 1254/ 5A6 : 48 DEFB 48H ;"r" 1255/ 5A7 : E8 DEFB 0E8H ;"o" 1256/ 5A8 : 48 DEFB 48H ;"r" 1257/ 5A9 : 48 DEFB 48H ;"r" 1258/ 5AA : CE DEFB 0CEH ;"E" 1259/ 5AB : 1260/ 5AB : ;--------------------- - 1261/ 5AB : ; KEYEXC Funktionstastentabelle 1262/ 5AB : ; Aufbau: 2 Byte Adresse, dann Tabelle mit Byte-Offsets 1263/ 5AB : ; je nach idx wird Adr+Byte-Offs berechnet und dann diese Routine angesprungen 1264/ 5AB : ; das spart vermutlich ein paar Byte gegenüber einer direkten Case-Anweisung 1265/ 5AB : ; aber: die zu rufenden Routinen müssen innerhalb von 255 Byte nach der Basis-Routine liegen 1266/ 5AB : 1267/ 5AB : ; Funktionsgruppe 1 "+","-","EXEC" O. "DATA" 1268/ 5AB : KSUFUN: 1269/ 5AB : 4D 01 DEFW KINC 1270/ 5AD : 00 DEFB KINC-KINC ;0 10 "+" --> Sprung nach KINC 1271/ 5AE : 05 DEFB KDEC-KINC ;1 11 "-" --> Sprung nach KDEC 1272/ 5AF : 0A DEFB KEXEC-KINC ;2 12 "EXEC" --> usw. 1273/ 5B0 : 00 DEFB 00H ;3 1274/ 5B1 : 0F DEFB KDATA-KINC ;4 14 "DATA" 1275/ 5B2 : 00 DEFB 00H ;5 1276/ 5B3 : 00 DEFB 00H ;6 1277/ 5B4 : 00 DEFB 00H ;7 1278/ 5B5 : ;--------------------- - 1279/ 5B5 : ; Funktionsgruppe 2 ADR- ODER TAPE-TASTEN 1280/ 5B5 : KFUN: 1281/ 5B5 : 63 01 DEFW KADRS 1282/ 5B7 : 00 DEFB 00H ;0 18 1283/ 5B8 : 00 DEFB KADRS-KADRS ;1 19 ADR "ADRS" 1284/ 5B9 : 00 DEFB 00H ;2 1A 1285/ 5BA : 00 DEFB 00H ;3 1B 1286/ 5BB : 00 DEFB 00H ;4 1C 1287/ 5BC : 00 DEFB 00H ;5 1D 1288/ 5BD : 04 DEFB KTAPWR-KADRS ;6 1E ST "TO TAPE" 1289/ 5BE : 04 DEFB KTAPWR-KADRS ;7 1F LD "FROM TAPE* 1290/ 5BF : ;--------------------- - 1291/ 5BF : ; die folgenden Tabellen beziehen sich auf ATCODE 1292/ 5BF : ; 1-ADRS, 2-DATS, 6-TO TAPE, 7-FROM TAPE 1293/ 5BF : 1294/ 5BF : ; nach Zifferntaste (nach KHEX) 1295/ 5BF : HTAB: 1296/ 5BF : 6B 01 DEFW HFIX 1297/ 5C1 : 00 DEFB HFIX-HFIX ;0 FEHLER 1298/ 5C2 : 16 DEFB HAD-HFIX ;1 "ADRS" ZIFFER ALS ADRESSE 1299/ 5C3 : 03 DEFB HDA-HFIX ;2 ZIFFER ALS DATUM 1300/ 5C4 : 00 DEFB 00H ;3 1301/ 5C5 : 00 DEFB 00H ;4 1302/ 5C6 : 00 DEFB 00H ;5 1303/ 5C7 : 26 DEFB HTAPWR-HFIX ;6 "TO TAPE" ZIFFER ALS PARAMETER FUER BAND 1304/ 5C8 : 26 DEFB HTAPWR-HFIX ;7 "FROM TAPE" ZIFFER ALS PARAMETER FUER BAND 1305/ 5C9 : 00 DEFB 00H ;8 1306/ 5CA : 00 DEFB 00H ;9 1307/ 5CB : ;--------------------- - 1308/ 5CB : ; nach KINC ("+"-TASTE) 1309/ 5CB : ITAB: 1310/ 5CB : A1 01 DEFW IFIX 1311/ 5CD : 00 DEFB IFIX-IFIX ;0 BEDIENUNGSFEHLER 1312/ 5CE : 03 DEFB ADRADD-IFIX ;1 ANWENDER-PC ERHOEHEN 1313/ 5CF : 03 DEFB ADRADD-IFIX ;2 ANWENDER-PC ERHOEHEN 1314/ 5D0 : 00 DEFB 00H ;3 1315/ 5D1 : 00 DEFB 00H ;4 1316/ 5D2 : 00 DEFB 00H ;5 1317/ 5D3 : 0E DEFB TPFUN1-IFIX ;6 BEI "TO TAPE" NAECHSTER PARAMETER 1318/ 5D4 : 0E DEFB TPFUN1-IFIX ;7 BEI "TO TAPE" NAECHSTER PARAMETER 1319/ 5D5 : 00 DEFB 00H ;8 1320/ 5D6 : 00 DEFB 00H ;9 1321/ 5D7 : ;--------------------- - 1322/ 5D7 : ; nach KDEC ("-"-TASTE) 1323/ 5D7 : DTAB: 1324/ 5D7 : C0 01 DEFW DFIX 1325/ 5D9 : 00 DEFB 00H ;0 BEDIENUNGSFEHLER 1326/ 5DA : 03 DEFB ADRDEC-DFIX ;1 ANWENDER-PC ERNIEDRIGEN 1327/ 5DB : 03 DEFB ADRDEC-DFIX ;2 ANWENDER-PC ERNIEDRIGEN 1328/ 5DC : 00 DEFB 00H ;3 1329/ 5DD : 00 DEFB 00H ;4 1330/ 5DE : 00 DEFB 00H ;5 1331/ 5DF : 0E DEFB TPTUN2-DFIX ;6 BEI "TO TAPE" VORHERIGER PARAMETER 1332/ 5E0 : 0E DEFB TPTUN2-DFIX ;7 BEI "TO TAPE" VORHERIGER PARAMETER 1333/ 5E1 : 00 DEFB 00H ;8 1334/ 5E2 : 00 DEFB 00H ;9 1335/ 5E3 : ;--------------------- - 1336/ 5E3 : ; nach KEXEC ("EXEC"-TASTE) 1337/ 5E3 : ETAB: 1338/ 5E3 : DF 01 DEFW EFIX 1339/ 5E5 : 00 DEFB 00H ;0 BEDIENUNGSFEHLER 1340/ 5E6 : 03 DEFB ADREXC-EFIX ;1 PROGRAMAUSFUEHRUNG AB USER-PC 1341/ 5E7 : 03 DEFB ADREXC-EFIX ;2 PROGRAMAUSFUEHRUNG AB USER-PC 1342/ 5E8 : 00 DEFB 00H ;3 1343/ 5E9 : 00 DEFB 00H ;4 1344/ 5EA : 00 DEFB 00H ;5 1345/ 5EB : 11 DEFB EWT-EFIX ;6 UEBERSPIELEN AUF BAND 1346/ 5EC : 47 DEFB LOAD-EFIX ;7 DATEN VOM BAND LESEN 1347/ 5ED : 00 DEFB 00H ;8 1348/ 5EE : 00 DEFB 00H ;9 1349/ 5EF : ;----------------- TASTATURTABELLE ------------------- 1350/ 5EF : KEYTAB: 1351/ 5EF : 12 DEFB 12H ; 00 EXECUTE 1352/ 5F0 : 1E DEFB 1EH ; 01 STORE 1353/ 5F1 : 1F DEFB 1FH ; 02 LOAD 1354/ 5F2 : 00 DEFB 0 ; 03 NICHT BELEGT 1355/ 5F3 : 00 DEFB 0 ; 04 0 1356/ 5F4 : 01 DEFB 1 ; 05 1 1357/ 5F5 : 02 DEFB 2 ; 06 2 1358/ 5F6 : 03 DEFB 3 ; 07 3 1359/ 5F7 : 04 DEFB 4 ; 08 4 1360/ 5F8 : 05 DEFB 5 ; 09 5 1361/ 5F9 : 10 DEFB 10H ; 0A + 1362/ 5FA : 07 DEFB 7 ; 0B 7 1363/ 5FB : 08 DEFB 8 ; 0C 8 1364/ 5FC : 09 DEFB 9 ; 0D 9 1365/ 5FD : 0E DEFB 0EH ; 0E A 1366/ 5FE : 0B DEFB 0BH ; 0F B 1367/ 5FF : 0C DEFB 0CH ; 10 C 1368/ 600 : 0D DEFB 0DH ; 11 D 1369/ 601 : 0A DEFB 0AH ; 12 E 1370/ 602 : 0F DEFB 0FH ; 13 F 1371/ 603 : 19 DEFB 19H ; 14 ADRESS 1372/ 604 : 14 DEFB 14H ; 15 DATA 1373/ 605 : 06 DEFB 6 ; 16 6 1374/ 606 : 11 DEFB 11H ; 17 - 1375/ 607 : 1376/ 607 : ;----------------------- CODE FUER HEX-ZIFFERN -------- 1377/ 607 : ; Codierung in 7-Segement-Code 1378/ 607 : SEGTAB: 1379/ 607 : E7 DEFB 0E7H ; 0 "0" 1380/ 608 : 21 DEFB 21H ; 1 "1" 1381/ 609 : CD DEFB 0CDH ; 2 "2" 1382/ 60A : AD DEFB 0ADH ; 3 "3" 1383/ 60B : 2B DEFB 2BH ; 4 "4" 1384/ 60C : AE DEFB 0AEH ; 5 "5" 1385/ 60D : EE DEFB 0EEH ; 6 "6" 1386/ 60E : 25 DEFB 25H ; 7 "7" 1387/ 60F : EF DEFB 0EFH ; 8 "8" 1388/ 610 : AF DEFB 0AFH ; 9 "9" 1389/ 611 : 6F DEFB 6FH ; A "A" 1390/ 612 : EA DEFB 0EAH ; B "B" 1391/ 613 : C6 DEFB 0C6H ; C "C" 1392/ 614 : E9 DEFB 0E9H ; D "D" 1393/ 615 : CE DEFB 0CEH ; E "E" 1394/ 616 : 4E DEFB 4EH ; F "F" 1395/ 617 : 1396/ 617 : ;---------------------- LIED ------------------------ 1397/ 617 : ; Lied "Popcorn" von Hot Butter 1398/ 617 : SONG: 1399/ 617 : 12 02 DEFB 12H, 02h ; E' 1400/ 619 : 20 02 DEFB 20H, 02h 1401/ 61B : 10 02 DEFB 10H, 02h ; D' 1402/ 61D : 20 02 DEFB 20H, 02h 1403/ 61F : 12 02 DEFB 12H, 02h ; E' 1404/ 621 : 20 02 DEFB 20H, 02h 1405/ 623 : 0D 02 DEFB 0DH, 02h ; H 1406/ 625 : 20 02 DEFB 20H, 02h 1407/ 627 : 09 02 DEFB 09H, 02h ; G 1408/ 629 : 20 02 DEFB 20H, 02h 1409/ 62B : 0D 02 DEFB 0DH, 02h ; H 1410/ 62D : 20 02 DEFB 20H, 02h 1411/ 62F : 06 02 DEFB 06H, 02h ; E 1412/ 631 : 20 06 DEFB 20H, 06h 1413/ 633 : 12 02 DEFB 12H, 02h ; E' 1414/ 635 : 20 02 DEFB 20H, 02h 1415/ 637 : 10 02 DEFB 10H, 02h ; D' 1416/ 639 : 20 02 DEFB 20H, 02h 1417/ 63B : 12 02 DEFB 12H, 02h ; E' 1418/ 63D : 20 02 DEFB 20H, 02h 1419/ 63F : 0D 02 DEFB 0DH, 02h ; H 1420/ 641 : 20 02 DEFB 20H, 02h 1421/ 643 : 09 02 DEFB 09H, 02h ; G 1422/ 645 : 20 02 DEFB 20H, 02h 1423/ 647 : 0D 02 DEFB 0DH, 02h ; H 1424/ 649 : 20 02 DEFB 20H, 02h 1425/ 64B : 06 02 DEFB 06H, 02h ; E 1426/ 64D : 20 06 DEFB 20H, 06h 1427/ 64F : 12 02 DEFB 12H, 02h ; E' 1428/ 651 : 20 02 DEFB 20H, 02h 1429/ 653 : 14 02 DEFB 14H, 02h ; Fis' 1430/ 655 : 20 02 DEFB 20H, 02h 1431/ 657 : 15 02 DEFB 15H, 02h ; G' 1432/ 659 : 20 02 DEFB 20H, 02h 1433/ 65B : 14 02 DEFB 14H, 02h ; Fis' 1434/ 65D : 20 02 DEFB 20H, 02h 1435/ 65F : 15 02 DEFB 15H, 02h ; G' 1436/ 661 : 20 02 DEFB 20H, 02h 1437/ 663 : 12 02 DEFB 12H, 02h ; E' 1438/ 665 : 20 02 DEFB 20H, 02h 1439/ 667 : 14 02 DEFB 14H, 02h ; Fis' 1440/ 669 : 20 02 DEFB 20H, 02h 1441/ 66B : 12 02 DEFB 12H, 02h ; E' 1442/ 66D : 20 02 DEFB 20H, 02h 1443/ 66F : 14 02 DEFB 14H, 02h ; Fis' 1444/ 671 : 20 02 DEFB 20H, 02h 1445/ 673 : 10 02 DEFB 10H, 02h ; D' 1446/ 675 : 20 02 DEFB 20H, 02h 1447/ 677 : 12 02 DEFB 12H, 02h ; E' 1448/ 679 : 20 02 DEFB 20H, 02h 1449/ 67B : 10 02 DEFB 10H, 02h ; D' 1450/ 67D : 20 02 DEFB 20H, 02h 1451/ 67F : 12 02 DEFB 12H, 02h ; E' 1452/ 681 : 20 02 DEFB 20H, 02h 1453/ 683 : 0D 02 DEFB 0DH, 02h ; H 1454/ 685 : 20 02 DEFB 20H, 02h 1455/ 687 : 12 04 DEFB 12H, 04h ; E' 1456/ 689 : 20 06 DEFB 20H, 06h 1457/ 68B : 80 DEFB 80H 1458/ 68C : ;----------------------------------------------------- 1459/ 68C : 1460/ 68C : =>TRUE IF ROM_=1 1461/ 690 : ORG 0690H 1462/ 690 : [1460] ENDIF 1463/ 690 : 1464/ 690 : =>FALSE IF ROM_=2 1465/ 690 : ORG 0A90H 1466/ 690 : [1464] ENDIF 1467/ 690 : 1468/ 690 : ; Registeranzeige 1469/ 690 : ; zur Nutzung muss in 2340H JP START2 eingetragen werden 1470/ 690 : 1471/ 690 : START2: 1472/ 690 : 22 EC 22 LD (REGHL),HL ; HL sichern 1473/ 693 : 21 46 07 LD HL,RETURN ; Ret-Funktion 1474/ 696 : 22 02 23 LD (STEPZEI),HL ; festlegen 1475/ 699 : STARTST: 1476/ 699 : E1 POP HL ; aktuelle RET-Adr 1477/ 69A : E5 PUSH HL ; == Unterbrechungs-Adr. 1478/ 69B : ED 73 FA 22 LD (REGSP),SP ; SP sichern 1479/ 69F : 31 E4 22 LD SP,ARBSTA ; Arbeitsstack 1480/ 6A2 : CD 56 07 CALL REGRET ; Register sichern 1481/ 6A5 : 3A FE 22 LD A,(AREGST) ; A entspr. anzuzeigendes Register 1482/ 6A8 : ; nach Reset = FF -> 0 -> AF 1483/ 6A8 : 2F CPL 1484/ 6A9 : DEANZ1: 1485/ 6A9 : FD 21 E6 22 LD IY,REGRAM ; gesicherte Register 1486/ 6AD : DEANZ: ; (DEANZ wird nicht genutzt) 1487/ 6AD : F5 PUSH AF ; Registernr 1488/ 6AE : 21 CF 07 LD HL,REGSYM ; Registernamen 1489/ 6B1 : 85 ADD A,L 1490/ 6B2 : 6F LD L,A 1491/ 6B3 : 5E LD E,(HL) ; 2. Zeichen 1492/ 6B4 : 23 INC HL 1493/ 6B5 : 56 LD D,(HL) ; 1. Zeichen 1494/ 6B6 : ED 53 F2 23 LD (DATLED),DE ; in Anzeige eintragen 1495/ 6BA : F1 POP AF 1496/ 6BB : 16 00 LD D,0 1497/ 6BD : 5F LD E,A 1498/ 6BE : FD 19 ADD IY,DE 1499/ 6C0 : FD 5E 00 LD E,(IY+0) ; lo Register 1500/ 6C3 : FD 56 01 LD D,(IY+1) ; hi Register 1501/ 6C6 : ED 53 04 23 LD (AREGIN),DE ; Wert merken f. Edit 1502/ 6CA : 2F CPL 1503/ 6CB : 32 FE 22 LD (AREGST),A ; Register-Pointer merken 1504/ 6CE : DATLOOP: 1505/ 6CE : CD B7 04 CALL ADRSDP ; Wert eintragen 1506/ 6D1 : DAK: 1507/ 6D1 : DD 21 F2 23 LD IX,DATLED 1508/ 6D5 : CD 5A 04 CALL DAK1 ; Anzeigen + Tastaturabfrage 1509/ 6D8 : FE 10 CP 10H ; 0..F 1510/ 6DA : 38 14 JR C,HEXTAS 1511/ 6DC : 28 37 JR Z, POSTAS ; + 1512/ 6DE : FE 11 CP 11H ; - 1513/ 6E0 : 28 42 JR Z,NEGTAS 1514/ 6E2 : FE 12 CP 12H ; EX 1515/ 6E4 : 28 23 JR Z,EXTAS 1516/ 6E6 : FE 19 CP 19H ; ADR 1517/ 6E8 : 28 49 JR Z,ADRTAS 1518/ 6EA : FE 14 CP 14H ; DAT 1519/ 6EC : 28 5D JR Z,DATANZ 1520/ 6EE : 18 E1 JR DAK 1521/ 6F0 : HEXTAS: 1522/ 6F0 : 21 04 23 LD HL,AREGIN ; Ziffer in Registerwert 1523/ 6F3 : ED 6F RLD ; Tetraden in beiden Byte verschieben 1524/ 6F5 : 23 INC HL 1525/ 6F6 : ED 6F RLD 1526/ 6F8 : ED 5B 04 23 LD DE,(AREGIN) ; Wert laden 1527/ 6FC : CD B7 04 CALL ADRSDP ; in Anzeige eintragen 1528/ 6FF : 21 F4 23 LD HL,ADRLED 1529/ 702 : 06 04 LD B,4 1530/ 704 : CD DC 02 CALL SETPT ; als geändert markieren 1531/ 707 : 18 C8 JR DAK ; und weiter editieren 1532/ 709 : ; mit "EX" Wert in Register übernehmen 1533/ 709 : EXTAS: 1534/ 709 : ED 5B 04 23 LD DE,(AREGIN) ; Wert 1535/ 70D : FD 73 00 LD (IY+0),E ; in Registerstack 1536/ 710 : FD 72 01 LD (IY+1),D ; ablegen 1537/ 713 : 18 B9 JR DATLOOP 1538/ 715 : ; "+" nächstes Register 1539/ 715 : POSTAS: 1540/ 715 : 3A FE 22 LD A,(AREGST) ; Register-Pointer 1541/ 718 : 2F CPL 1542/ 719 : FE 16 CP 16H ; letztes Register erreicht? 1543/ 71B : 38 02 JR C,MPOS ; nein 1544/ 71D : 3E FE LD A,0FEH ; sonst -2 (wieder von vorn beginnen) 1545/ 71F : MPOS: 1546/ 71F : 3C INC A ; +2, Doppelregister weiter 1547/ 720 : 3C INC A 1548/ 721 : C3 A9 06 JP DEANZ1 1549/ 724 : ; "-" vorheriges Register 1550/ 724 : NEGTAS: 1551/ 724 : 3A FE 22 LD A,(AREGST) ; Register-Pointer 1552/ 727 : 2F CPL 1553/ 728 : FE 00 CP 0 ; erstes Register erreicht? 1554/ 72A : 20 02 JR NZ,MNEG ; nein 1555/ 72C : 3E 18 LD A,18H ; sonst letztes + 2 1556/ 72E : MNEG: 1557/ 72E : 3D DEC A ; -2, Doppelregister zurück 1558/ 72F : 3D DEC A 1559/ 730 : C3 A9 06 JP DEANZ1 1560/ 733 : ; mit "ADR" Registeranzeige beenden 1561/ 733 : ADRTAS: 1562/ 733 : 31 E4 22 LD SP,ARBSTA ; SP auf REGRAM - 2 (wg. CALL) 1563/ 736 : CD 71 07 CALL REGLAD ; Register wiederherstellen 1564/ 739 : ED 7B FA 22 LD SP,(REGSP) ; SP restaurieren 1565/ 73D : E1 POP HL ; orig. RET-Adr vom Stack 1566/ 73E : 2A FC 22 LD HL,(REGPC) ; gesicherte aktuelle Adresse 1567/ 741 : E5 PUSH HL ; auf Stack 1568/ 742 : 2A 02 23 LD HL,(STEPZEI) ; RETURN-Funktion 1569/ 745 : E9 JP (HL) ; anspringen 1570/ 746 : RETURN: 1571/ 746 : 2A EC 22 LD HL,(REGHL) ; HL restaurieren 1572/ 749 : ED 45 RETN ; INT-Ende 1573/ 74B : ; "DAT" Anzeige aktuelle Adresse und Wert (PC) 1574/ 74B : DATANZ: 1575/ 74B : 2A FC 22 LD HL,(REGPC) ; aktuelle Adresse 1576/ 74E : 7E LD A,(HL) ; Bate an aktueller Adresse 1577/ 74F : EB EX DE,HL 1578/ 750 : CD C3 04 CALL DADP ; anzeigen 1579/ 753 : C3 CE 06 JP DATLOOP 1580/ 756 : REGRET: ; Register retten 1581/ 756 : 31 FE 22 LD SP,AREGST 1582/ 759 : E5 PUSH HL ; REGPC, orig PC 1583/ 75A : 3B DEC SP ; REGSP, frei für SP 1584/ 75B : 3B DEC SP 1585/ 75C : FD E5 PUSH IY 1586/ 75E : DD E5 PUSH IX 1587/ 760 : D9 EXX 1588/ 761 : 08 EX AF,AF' ;' 1589/ 762 : E5 PUSH HL 1590/ 763 : D5 PUSH DE 1591/ 764 : C5 PUSH BC 1592/ 765 : F5 PUSH AF 1593/ 766 : D9 EXX 1594/ 767 : 08 EX AF,AF' ;' 1595/ 768 : 3B DEC SP 1596/ 769 : 3B DEC SP 1597/ 76A : D5 PUSH DE 1598/ 76B : C5 PUSH BC 1599/ 76C : F5 PUSH AF 1600/ 76D : 31 E2 22 LD SP,ARBST2 1601/ 770 : C9 RET 1602/ 771 : REGLAD: ; Register laden 1603/ 771 : 31 E6 22 LD SP,REGRAM 1604/ 774 : F1 POP AF 1605/ 775 : C1 POP BC 1606/ 776 : D1 POP DE 1607/ 777 : E1 POP HL 1608/ 778 : D9 EXX 1609/ 779 : 08 EX AF,AF' ;' 1610/ 77A : F1 POP AF 1611/ 77B : C1 POP BC 1612/ 77C : D1 POP DE 1613/ 77D : E1 POP HL 1614/ 77E : D9 EXX 1615/ 77F : 08 EX AF,AF' ;' 1616/ 780 : DD E1 POP IX 1617/ 782 : FD E1 POP IY 1618/ 784 : 31 E2 22 LD SP,ARBST2 1619/ 787 : C9 RET 1620/ 788 : 1621/ 788 : db 8 dup (?) 1622/ 790 : 1623/ 790 : ;----------------------------------------------------- 1624/ 790 : 1625/ 790 : ;org 0B90h 1626/ 790 : ; Stepfunktion 1627/ 790 : ; zur Nutzung muss in 2340H JP STEPUP eingetragen werden 1628/ 790 : 1629/ 790 : STEPUP: 1630/ 790 : 2A F8 23 LD HL,(USERPC) ; aktueller USER-PC 1631/ 793 : E5 PUSH HL ; merken 1632/ 794 : 21 C2 07 LD HL,INTROUT ; Int-Routine 1633/ 797 : 22 00 23 LD (INTTAF),HL ; in Int-Tabelle schreiben 1634/ 79A : 3E E9 LD A,0E9H ; cpl 16h 1635/ 79C : 32 FE 22 LD (AREGST),A ; Register-Pointer auf "PC" 1636/ 79F : 21 A5 07 LD HL,CTCPRG ; RET-Routine f. "ADR" 1637/ 7A2 : 22 02 23 LD (STEPZEI),HL ; (Ende Registeranzeige) 1638/ 7A5 : ; wird bei Start der Step-Funktion und dann bei Step (ADR) aufgerufen 1639/ 7A5 : CTCPRG: 1640/ 7A5 : F5 PUSH AF 1641/ 7A6 : 2A EC 22 LD HL,(REGHL) ; HL merken f. INTROUT 1642/ 7A9 : 3E 00 LD A,INTVEK ; INT-VECT. FUER CTC (00) 1643/ 7AB : D3 EC OUT (CTC0),A 1644/ 7AD : 3E 85 LD A,85H ;Steuerwort 1645/ 7AF : ;EI, Zeitgebermode 1646/ 7AF : D3 EC OUT (CTC0),A 1647/ 7B1 : 3E 04 LD A,04H ;ZK Zeitkonstante, 1 Befehl (4 Takte) 1648/ 7B3 : D3 EC OUT (CTC0),A 1649/ 7B5 : ED 5E IM 2 1650/ 7B7 : 3E 23 LD A,HIINT ; Hi-Adr. INT-VECT. (23) 1651/ 7B9 : ED 47 LD I,A 1652/ 7BB : C6 00 ADD A,0 1653/ 7BD : FB EI 1654/ 7BE : 00 NOP 1655/ 7BF : F1 POP AF 1656/ 7C0 : ED 4D RETI 1657/ 7C2 : ; CTC wirft INT beim nächsten USER-Befehl 1658/ 7C2 : ; INTROUT wird direkt danach aufgerufen 1659/ 7C2 : INTROUT: 1660/ 7C2 : F3 DI 1661/ 7C3 : F5 PUSH AF 1662/ 7C4 : 3E 03 LD A,03H 1663/ 7C6 : D3 EC OUT (CTC0),A ; INT aus 1664/ 7C8 : F1 POP AF 1665/ 7C9 : 22 EC 22 LD (REGHL),HL ; HL restaurieren 1666/ 7CC : C3 99 06 JP STARTST ; ab zur Registeranzeige 1667/ 7CF : 1668/ 7CF : ;----------------------------------------------------- 1669/ 7CF : REGSYM: ; Reihenfolge passend zu Registerstack REGRAM ff. 1670/ 7CF : 4E DEFB 4EH ; "F" 1671/ 7D0 : 6F DEFB 6FH ; "A" 1672/ 7D1 : C6 DEFB 0C6H ; "C" 1673/ 7D2 : EA DEFB 0EAH ; "B" 1674/ 7D3 : CE DEFB 0CEH ; "E" 1675/ 7D4 : E9 DEFB 0E9H ; "D" 1676/ 7D5 : C2 DEFB 0C2H ; "L" 1677/ 7D6 : 6B DEFB 06BH ; "H" 1678/ 7D7 : 5E DEFB 05EH ; "F." 1679/ 7D8 : 7F DEFB 07FH ; "A." 1680/ 7D9 : D6 DEFB 0D6H ; "C." 1681/ 7DA : FA DEFB 0FAH ; "B." 1682/ 7DB : DE DEFB 0DEH ; "E." 1683/ 7DC : F9 DEFB 0F9H ; "D." 1684/ 7DD : D2 DEFB 0D2H ; "L." 1685/ 7DE : 7B DEFB 07BH ; "H." 1686/ 7DF : 4A DEFB 04AH ; "X" 1687/ 7E0 : 20 DEFB 020H ; "i" 1688/ 7E1 : AB DEFB 0ABH ; "Y" 1689/ 7E2 : 20 DEFB 020H ; "i" 1690/ 7E3 : 4F DEFB 04FH ; "P" 1691/ 7E4 : AE DEFB 0AEH ; "S" 1692/ 7E5 : C6 DEFB 0C6H ; "C" 1693/ 7E6 : 4F DEFB 04FH ; "P" 1694/ 7E7 : 1695/ 7E7 : =>TRUE IF ROM_=1 1696/ 7E7 : 5B DEFB 05BH ;PRUEFSUMMENDIFFERENZ 1697/ 7E8 : [1695] ENDIF 1698/ 7E8 : 1699/ 7E8 : =>FALSE IF ROM_=2 1700/ 7E8 : DEFB 023H ;PRUEFSUMMENDIFFERENZ 1701/ 7E8 : [1699] ENDIF 1702/ 7E8 : 1703/ 7E8 : ;--------------------------------------------------- 1704/ 7E8 : =>TRUE IF ROM_=1 1705/ 7FF : ORG 07FFH 1706/ 7FF : A1 DEFB 0A1H ;PRUEFSUMME FUER 1-ROM-VARIANTE 1707/ 800 : [1704] ENDIF 1708/ 800 : 1709/ 800 : =>FALSE IF ROM_=2 1710/ 800 : ORG 0BFFH 1711/ 800 : DEFB 071H ;PRUEFSUMME FUER 2-ROM-VARIANTE 1712/ 800 : [1709] ENDIF 1713/ 800 : 1714/ 800 : 1715/ 800 : ;*************************************************** 1716/ 800 : ; RAM-ZELLEN 1717/ 800 : 1718/ 22E2 : ORG 22E2H 1719/ 22E2 : 1720/ 22E2 : ARBST2: DB 2 dup (?) ; Arbeitsstack2 Registeranzeige 1721/ 22E4 : ARBSTA: Db 2 dup (?) ; Arbeitsstack Registeranzeige 1722/ 22E6 : REGRAM: Db 2 dup (?) ; AF 1723/ 22E8 : Db 2 dup (?) ; BC 1724/ 22EA : Db 2 dup (?) ; DE 1725/ 22EC : REGHL: Db 2 dup (?) ; HL 1726/ 22EE : Db 2 dup (?) ; AF' 1727/ 22F0 : Db 2 dup (?) ; BC' 1728/ 22F2 : Db 2 dup (?) ; DE' 1729/ 22F4 : Db 2 dup (?) ; HL' 1730/ 22F6 : Db 2 dup (?) ; IX 1731/ 22F8 : Db 2 dup (?) ; IY 1732/ 22FA : REGSP: Db 2 dup (?) ; SP 1733/ 22FC : REGPC: Db 2 dup (?) ; PC 1734/ 22FE : AREGST: Db 2 dup (?) ; Registerstack 1735/ 2300 : ; org 2300h 1736/ 2300 : INTTAF: Db 2 dup (?) ; INTROUT 1737/ 2302 : STEPZEI: Db 2 dup (?) ; RET-Routine nach Unterbrechung 1738/ 2304 : AREGIN: Db 2 dup (?) ; Wert anzuzeigendes Register 1739/ 2306 : 1740/ 2306 : ; RAM 2000H 1741/ 2306 : ; RST1: 2308H 1742/ 2306 : ; RST2: 2310H 1743/ 2306 : ; RST3: 2318H 1744/ 2306 : ; RST4: 2320H 1745/ 2306 : ; RST5: 2328H 1746/ 2306 : ; RST6: 2330H 1747/ 2306 : ; RST7: 2338H 1748/ 2306 : ; RST8: 2338H ; RSTUP STANDARD-RST38-PROG. 1749/ 2306 : ; NMI: 2340H ; NMIUP STANDARD-NMI-PROG. 1750/ 2306 : 1751/ 23EA : ORG 23EAH 1752/ 23EA : 1753/ 23EA : =23EAH SPINI EQU $ ;ANF.WERT FUER SP 1754/ 23EA : TAPDIS: Db 1 dup(?) ;DARZUSTELLENDES ZEICHEN BEI LOAD 1755/ 23EB : FILNAME: Db 2 dup(?) ;NAME DES ZU UEBERTR. PROG. 1756/ 23ED : STARTADR: Db 2 dup(?) ; filename+2 1757/ 23EF : ENDADRH: Db 2 dup(?) ; filename+4 1758/ 23F1 : CHKSUMH: Db 1 dup(?) ; filename+6 1759/ 23F2 : DATLED: Db 2 dup(?) ;DATEN-ANZ. 1760/ 23F4 : ADRLED: Db 4 dup(?) ;ADR.-ANZ. 1761/ 23F8 : USERPC: Db 2 dup(?) ;ADRESSE 1762/ 23FA : ATFLAG: Db 1 dup(?) ; Aktionstastenflag, Kdo-Parametercode 0..3 1763/ 23FB : ; ADRS, TO TAPE, FROM TAPE 1764/ 23FB : ATCODE: Db 1 dup(?) ; Aktionstastencode 1765/ 23FC : ; 1-ADRS, 2-DATS, 6-TO TAPE, 7-FROM TAPE 1766/ 23FC : INIFLAG: Db 1 dup(?) ;INI-CODE, 80h-bereits initialisiert 1767/ 23FD : FUFEFLAG: Db 1 dup(?) ;FUNKTIONS- UND FEHLERFLAG 1768/ 23FE : ; Bit 0=1 Funktionstaste, Bit7=1 Fehler 1769/ 23FE : FILE2: Db 2 dup(?) ;NAME DES ZU LESENDEN PROG. 1770/ 2400 : 1771/ 2400 : ;***************************************************** 1772/ 2400 : END