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