AS V1.42 Beta [Bld 64] - source file z1013riesa.asm - page 1 - 12/15/2011 10:24:49
1/ 0 : page 0
2/ 0 : CPU z80
3/ 0 :
4/ 0 : ;Z1013-MONITOR 2.02, A.2
5/ 0 : ;reass: 1988-1990 Volker Pohlers, Lomonossowallee 41/81, Greifswald, 2200
6/ 0 : ;basierend auf GENS3M-Listing des 2.02-Monitors von C.Fischer/Ilmenau
7/ 0 : ;Fassung für den Arnold-Assembler und vielfach erweiterte Kommentare
8/ 0 : ;Volker Pohlers, Sanitz, 23.04.2004
9/ 0 : ;letzte Änderung 07.12.2011
10/ 0 :
11/ 0 : ;
12/ 0 : ;gewünschten Monitortyp auskommentieren
13/ 0 : ;
14/ 0 : =Z1013_202 MONTYP EQU "Z1013_202"
15/ 0 : ;MONTYP EQU "Z1013_A2"
16/ 0 :
17/ 0 : ;die wichtigsten Unterschiede A2 <-> 2.02
18/ 0 : ;- kein H- und A- und F-Kommandos
19/ 0 : ;- andere Adressen Windows-Speicher
20/ 0 : ;- andere INKEY-Routine und auch INCH-Routine!
21/ 0 : ;- KDO mit RST-Aufrufen programmiert, damit Verschiebung aller Routinen des Monitors!
22/ 0 :
23/ 0 : ; Makros
24/ 0 : hi function x, (x>>8) & 0ffh ; High-Byte
25/ 0 : lo function x, x & 0ffh ; Low-Byte
26/ 0 :
27/ 0 : ;
28/ 0 : ;RAM-Zellen
29/ 0 : ;
30/ 0 : =3H R20BT: EQU 00003H ;Nummer des RST20-Calls
31/ 0 : =4H LAKEY: EQU 00004H ;letztes Zeichen von Tastatur
32/ 0 : =BH BPADR: EQU 0000BH ;Breakpointadresse
33/ 0 : =DH BPOPC: EQU 0000DH ;Operandenfolge bei Breakpoint
34/ 0 : =13H DATA: EQU 00013H ;Adresse bei INHEX; intern f. INKEY b. A2
35/ 0 : ;SHILO: EQU 00015H ;
36/ 0 : =16H SOIL: EQU 00016H ;Beginn Eingabezeile
37/ 0 : =1BH ARG1: EQU 0001BH ;1. Argument
38/ 0 : =1DH ARG2: EQU 0001DH ;2. Argument
39/ 0 : =1FH BUFFA: EQU 0001FH ;vom Cursor verdecktes Zeichen
40/ 0 : =20H RST20: EQU 00020H ;RST 20H
41/ 0 : =23H ARG3: EQU 00023H ;3. Argument
42/ 0 : =25H SOIL2: EQU 00025H ;Rest Eingabezeile
43/ 0 : =2BH CUPOS: EQU 0002BH ;aktuelle Cursorposition
44/ 0 : =33H LSYNC: EQU 00033H ;Kenntonlaenge
45/ 0 : =38H RST38: EQU 00038H ;RST 38H
46/ 0 : =>FALSE IF MONTYP == "Z1013_A2"
47/ 0 : WINDL: EQU 00035H ;Windowlaenge
48/ 0 : KYBTS: equ 00037h ;Tastaturroutinenzelle (Bit 4=Repeat)
49/ 0 : WINDA: EQU 0003BH ;Windowanfang
50/ 0 : WINDE: EQU 0003DH ;Windowende+1
51/ 0 : =>TRUE ELSE
52/ 0 : =27H KYBTS: EQU 00027H ;Tastaturroutinenzelle (0=ASCII,80h=Grafik)
53/ 0 : =47H WINDL: EQU 00047H ;Windowlaenge
54/ 0 : =49H WINDA: EQU 00049H ;Windowanfang
55/ 0 : =4BH WINDE: EQU 0004BH ;Windowende+1
56/ 0 : [46] ENDIF
57/ 0 : =4DH REGBR: EQU 0004DH ;Registerrettebereich
58/ 0 : =5BH REGAF: EQU 0005BH ;Register AF
59/ 0 : =61H REGPC: EQU 00061H ;Register PC
60/ 0 : =63H REGSP: EQU 00063H ;Userstack
61/ 0 : =66H NMI: EQU 00066H
62/ 0 : =69H NBYTE: EQU 00069H ;Operand bei NEXT
63/ 0 : =6AH SPADR: EQU 0006AH ;SP-Zwischenspeicher
64/ 0 : =6CH FBANZ: EQU 0006CH ;Zwsp. Anz. Suchbytes bei FIND
65/ 0 : =90H USRSK: EQU 00090H ;Userstack
66/ 0 : =B0H SYSSK: EQU 000B0H ;Systemstack
67/ 0 : =B0H USRKD: EQU SYSSK
68/ 0 : ;Bildschirm
69/ 0 : =EC00H BWS: EQU 0EC00H ;Beginn BWS
70/ 0 : =20H BWSROW EQU 32 ;Anzahl Zeilen
71/ 0 : =20H BWSCOL EQU 32 ;Anzahl Zeichen/Zeile
72/ 0 : =400H BWSSZ EQU BWSROW*BWSCOL
73/ 0 : ;
74/ 0 : ;Markenvereinbarungen
75/ 0 : ;
76/ 0 : =CH CLS: EQU 0CH
77/ 0 : =DH CR: EQU 0DH
78/ 0 : =1BH ESC: EQU 27
79/ 0 : =1EH NL: EQU 1EH
80/ 0 : =AH LF: EQU 0AH
81/ 0 : ;
82/ 0 : ;PIO
83/ 0 : =0H PIOAD equ 00h ; PIO A User
84/ 0 : =1H PIOAC equ 01h
85/ 0 : =2H PIOBD equ 02h ; PIO B, Bit0..4 Tastaturzeile
86/ 0 : =3H PIOBC equ 03h ; Bit5->AB0 in, Bit6->TB in, Bit7->TB out
87/ 0 : =8H KEYP equ 08h ; Port Ausgabe Tastaturspalte
88/ 0 : ;
89/ 0 : ; Makros für Systemaufrufe über RST 20h
90/ 0 : ;
91/ 0 : ROUTC: MACRO
92/ 0 : RST 20H
93/ 0 : DB 0 ; OUTCH
94/ 0 : ENDM
95/ 0 : RINCH: MACRO
96/ 0 : RST 20H
97/ 0 : DB 01h ; INCH
98/ 0 : ENDM
99/ 0 : RPRST: MACRO
100/ 0 : RST 20H
101/ 0 : DB 02h ; PRST
102/ 0 : ENDM
103/ 0 : RINHX: MACRO
104/ 0 : RST 20H
105/ 0 : DB 03h ; INHEX
106/ 0 : ENDM
107/ 0 : RINKY: MACRO
108/ 0 : RST 20H
109/ 0 : DB 04h ; INKEY
110/ 0 : ENDM
111/ 0 : RINLN: MACRO
112/ 0 : RST 20H
113/ 0 : DB 05h ; INLIN
114/ 0 : ENDM
115/ 0 : ROTHX: MACRO
116/ 0 : RST 20H
117/ 0 : DB 06h ; OUTHX
118/ 0 : ENDM
119/ 0 : ROTHL: MACRO
120/ 0 : RST 20H
121/ 0 : DB 07h ; OUTHL
122/ 0 : ENDM
123/ 0 : ROTHS: MACRO
124/ 0 : RST 20H
125/ 0 : DB 0Ch ; OTHLS
126/ 0 : ENDM
127/ 0 : ROTDP: MACRO
128/ 0 : RST 20H
129/ 0 : DB 0Dh ; OUTDP
130/ 0 : ENDM
131/ 0 : ROTSP: MACRO
132/ 0 : RST 20H
133/ 0 : DB 0Eh ; OUTSP
134/ 0 : ENDM
135/ 0 : ;
136/ 0 : ;
137/ 0 : ;
138/ F000 : ORG 0F000H
139/ F000 : ;
140/ F000 : ;-------------------------------------------------------------------------------
141/ F000 : ; Start
142/ F000 : ;-------------------------------------------------------------------------------
143/ F000 :
144/ F000 : 18 0D INIT: JR INIT2
145/ F002 : ;Initialisierung
146/ F002 : 21 4D 00 INIT1: LD HL,REGBR ;Registerrette-
147/ F005 : 11 4E 00 LD DE,REGBR+1 ;bereich loeschen
148/ F008 : 36 00 LD (HL),0
149/ F00A : 01 15 00 LD BC,0015H
150/ F00D : ED B0 LDIR
151/ F00F : 31 B0 00 INIT2: LD SP,SYSSK ;System-Stack
152/ F012 : =>TRUE IF MONTYP == "Z1013_202"
153/ F012 : AF xor a ;Tastaturschalter
154/ F013 : 32 27 00 ld (KYBTS), a ;auf ASCII
155/ F016 : [152] ENDIF
156/ F016 : 3E C3 LD A,0C3H ;JMP ...
157/ F018 : 32 20 00 LD (RST20),A
158/ F01B : 21 E8 F0 LD HL,RST1 ;RST20 eintragen
159/ F01E : 22 21 00 LD (RST20+1),HL
160/ F021 : 3E CF LD A,11001111b ;PIO Port B init.
161/ F023 : D3 03 OUT PIOBC, A ;BIT-Mode 3
162/ F025 : =>TRUE IF MONTYP <> "Z1013_A2"
163/ F025 : 3E 7F LD A,01111111b ;BIT7-Ausgang
164/ F027 : =>FALSE ELSE
165/ F027 : LD A,01101111b ;Bit7 und Bit4 Ausg.
166/ F027 : [162] ENDIF
167/ F027 : D3 03 OUT PIOBC, A
168/ F029 : 21 F2 F1 LD HL,MONTB ;System-RAM init.
169/ F02C : 11 33 00 LD DE,LSYNC
170/ F02F : 01 1A 00 LD BC,INCH-MONTB ;Laenge Tabelle
171/ F032 : ED B0 LDIR
172/ F034 : ;Systemmeldung
173/ F034 : (MACRO) RPRST
173/ F034 : E7 RST 20H
173/ F035 : 02 DB 02h ; PRST
174/ F036 : 0C DB CLS
175/ F037 : 0D DB CR
176/ F038 : 0D DB CR
177/ F039 : =>TRUE IF MONTYP == "Z1013_202"
178/ F039 : 72 6F 62 6F 74 72 DB "robotron Z 1013/2.02"
6F 6E 20 5A 20 31
30 31 33 2F 32 2E
30 32
179/ F04D : =>FALSE ELSEIF MONTYP == "Z1013_A2"
180/ F04D : DB "robotron Z 1013/A.2"
181/ F04D : [177] ENDIF
182/ F04D : 8D DB CR+80H
183/ F04E : ;
184/ F04E : 21 90 00 LD HL,USRSK ;User-Stack
185/ F051 : 22 63 00 LD (REGSP),HL
186/ F054 : ED 5E IM 2
187/ F056 : 18 07 JR KDO2
188/ F058 : ;
189/ F058 : ;-------------------------------------------------------------------------------
190/ F058 : ;Eingang Kommandomodus
191/ F058 : ;-------------------------------------------------------------------------------
192/ F058 : ;
193/ F058 : 31 B0 00 KDO1: LD SP,SYSSK ;System-Stack
194/ F05B : =>FALSE IF MONTYP == "Z1013_A2"
195/ F05B : RPRST
196/ F05B : =>TRUE ELSE
197/ F05B : CD A5 F2 CALL PRST7
198/ F05E : [194] ENDIF
199/ F05E : BF DB '?'+80H
200/ F05F : KDO2:
201/ F05F : =>FALSE IF MONTYP == "Z1013_A2"
202/ F05F : RINLN
203/ F05F : =>TRUE ELSE
204/ F05F : CD B3 F2 CALL INLIN ;Zeile eingeben
205/ F062 : [201] ENDIF
206/ F062 : ED 5B 16 00 LD DE,(SOIL)
207/ F066 : CD CA F2 CALL SPACE ;Leerzeichen uebergehen
208/ F069 : 47 LD B,A ;B=1. Zeichen
209/ F06A : 13 INC DE
210/ F06B : 1A LD A,(DE)
211/ F06C : 4F LD C,A ;C=2. Zeichen
212/ F06D : C5 PUSH BC
213/ F06E : 13 INC DE
214/ F06F : =>FALSE IF MONTYP == "Z1013_A2"
215/ F06F : RINHX
216/ F06F : =>TRUE ELSE
217/ F06F : CD F4 F2 CALL INHEX
218/ F072 : [214] ENDIF
219/ F072 : 20 05 JR NZ, KDO3
220/ F074 : 1A LD A,(DE)
221/ F075 : FE 3A CP A, ':' ;die alten Werte nehmen ?
222/ F077 : 28 0F JR Z, KDO4
223/ F079 : 22 1B 00 KDO3: LD (ARG1),HL ;neue Argumente holen
224/ F07C : =>FALSE IF MONTYP == "Z1013_A2"
225/ F07C : RINHX
226/ F07C : =>TRUE ELSE
227/ F07C : CD F4 F2 CALL INHEX
228/ F07F : [224] ENDIF
229/ F07F : 22 1D 00 LD (ARG2),HL
230/ F082 : =>FALSE IF MONTYP == "Z1013_A2"
231/ F082 : RINHX
232/ F082 : =>TRUE ELSE
233/ F082 : CD F4 F2 CALL INHEX
234/ F085 : [230] ENDIF
235/ F085 : 22 23 00 LD (ARG3),HL
236/ F088 : C1 KDO4: POP BC
237/ F089 : 08 EX AF, AF'
238/ F08A : ED 53 25 00 LD (SOIL2),DE ;Anfang 4. Argument
239/ F08E : ;Kommando (in Reg B) suchen
240/ F08E : 21 B1 F0 LD HL,KDOTB ;in Kommandotabelle
241/ F091 : 7E KDO5: LD A,(HL)
242/ F092 : B8 CP A, B
243/ F093 : 28 11 JR Z, KDO6 ;wenn gefunden
244/ F095 : 23 INC HL
245/ F096 : 23 INC HL
246/ F097 : 23 INC HL
247/ F098 : B7 OR A ;Tabellenende?
248/ F099 : 20 F6 JR NZ, KDO5 ;nein
249/ F09B : 78 LD A,B
250/ F09C : FE 40 CP A, '@' ;"@"-Kommando?
251/ F09E : 20 B8 JR NZ, KDO1 ;nein -> Eingabefehler
252/ F0A0 : 21 B0 00 LD HL,USRKD ;Suchen in "@"-Kdo.tab.
253/ F0A3 : 41 LD B,C
254/ F0A4 : 18 EB JR KDO5
255/ F0A6 : ;
256/ F0A6 : 23 KDO6: INC HL
257/ F0A7 : 5E LD E,(HL)
258/ F0A8 : 23 INC HL
259/ F0A9 : 56 LD D,(HL)
260/ F0AA : EB EX DE,HL ;HL=UP-Adresse
261/ F0AB : 08 EX AF, AF'
262/ F0AC : 01 5F F0 LD BC,KDO2 ;Returnadresse
263/ F0AF : C5 PUSH BC
264/ F0B0 : E9 JP (HL) ;Sprung zur Routine
265/ F0B1 : ;
266/ F0B1 : KDOTB:
267/ F0B1 : =>TRUE IF MONTYP == "Z1013_202"
268/ F0B1 : 41 DB "A"
269/ F0B2 : C5 F6 DW A_KDO
270/ F0B4 : [267] ENDIF
271/ F0B4 : 42 DB "B"
272/ F0B5 : 87 F5 DW B_KDO
273/ F0B7 : 43 DB "C"
274/ F0B8 : 77 F7 DW C_KDO
275/ F0BA : 44 DB "D"
276/ F0BB : CE F4 DW D_KDO
277/ F0BD : 45 DB "E"
278/ F0BE : 99 F5 DW E_KDO
279/ F0C0 : =>TRUE IF MONTYP <> "Z1013_A2"
280/ F0C0 : 46 DB "F"
281/ F0C1 : A2 F7 DW F_KDO
282/ F0C3 : [279] ENDIF
283/ F0C3 : 47 DB "G"
284/ F0C4 : B3 F5 DW G_KDO
285/ F0C6 : =>TRUE IF MONTYP == "Z1013_202"
286/ F0C6 : 48 DB "H"
287/ F0C7 : B8 F6 DW H_KDO
288/ F0C9 : [285] ENDIF
289/ F0C9 : 49 DB "I"
290/ F0CA : 02 F0 DW INIT1
291/ F0CC : 4A DB "J"
292/ F0CD : A5 F5 DW J_KDO
293/ F0CF : 4B DB "K"
294/ F0D0 : 0B F5 DW K_KDO
295/ F0D2 : 4C DB "L"
296/ F0D3 : F8 F3 DW CLOAD
297/ F0D5 : 4D DB "M"
298/ F0D6 : 25 F3 DW MEM
299/ F0D8 : 4E DB "N"
300/ F0D9 : 27 F7 DW N_KDO
301/ F0DB : 52 DB "R"
302/ F0DC : DF F5 DW R_KDO
303/ F0DE : 53 DB "S"
304/ F0DF : 69 F3 DW CSAVE
305/ F0E1 : 54 DB "T"
306/ F0E2 : 1D F5 DW T_KDO
307/ F0E4 : 57 DB "W"
308/ F0E5 : D1 F6 DW W_KDO
309/ F0E7 : 00 DB 0
310/ F0E8 : ;
311/ F0E8 : ;-------------------------------------------------------------------------------
312/ F0E8 : ;Eingang bei RST 20H
313/ F0E8 : ;-------------------------------------------------------------------------------
314/ F0E8 : ;
315/ F0E8 : E3 RST1: EX (SP),HL
316/ F0E9 : F5 PUSH AF
317/ F0EA : 7E LD A,(HL) ;Datenbyte hinter Ruf holen
318/ F0EB : 32 03 00 LD (R20BT),A ;und ablegen
319/ F0EE : 23 INC HL ;Returnadresse erhoehen
320/ F0EF : F1 POP AF
321/ F0F0 : E3 EX (SP),HL
322/ F0F1 : ;
323/ F0F1 : E5 PUSH HL
324/ F0F2 : C5 PUSH BC
325/ F0F3 : F5 PUSH AF
326/ F0F4 : 21 08 F1 LD HL,RSTTB
327/ F0F7 : 3A 03 00 LD A,(R20BT)
328/ F0FA : CB 27 SLA A
329/ F0FC : 4F LD C,A
330/ F0FD : 06 00 LD B,0
331/ F0FF : 09 ADD HL,BC ;HL=Adresse in Tab.
332/ F100 : 7E LD A,(HL)
333/ F101 : 23 INC HL
334/ F102 : 66 LD H,(HL)
335/ F103 : 6F LD L,A ;HL=UP-Adresse
336/ F104 : F1 POP AF
337/ F105 : C1 POP BC
338/ F106 : E3 EX (SP),HL ;Ansprung der
339/ F107 : C9 RET ;Routine
340/ F108 : ;
341/ F108 : 1B F2 RSTTB: DW OUTCH ;DB 0
342/ F10A : 0C F2 DW INCH ;DB 1
343/ F10C : A5 F2 DW PRST7 ;DB 2
344/ F10E : F4 F2 DW INHEX ;DB 3
345/ F110 : 30 F1 DW INKEY ;DB 4
346/ F112 : B3 F2 DW INLIN ;DB 5
347/ F114 : 01 F3 DW OUTHX ;DB 6
348/ F116 : 1A F3 DW OUTHL ;DB 7
349/ F118 : 69 F3 DW CSAVE ;DB 8
350/ F11A : F8 F3 DW CLOAD ;DB 9
351/ F11C : 25 F3 DW MEM ;DB 10
352/ F11E : D1 F6 DW W_KDO ;DB 11
353/ F120 : C7 F5 DW OTHLS ;DB 12
354/ F122 : C4 F5 DW OUTDP ;DB 13
355/ F124 : CF F5 DW OUTSP ;DB 14
356/ F126 : 1D F5 DW T_KDO ;DB 15
357/ F128 : B9 F2 DW INSTR ;DB 16
358/ F12A : 0B F5 DW K_KDO ;DB 17
359/ F12C : =>TRUE IF MONTYP <> "Z1013_A2"
360/ F12C : B8 F6 DW H_KDO ;DB 18
361/ F12E : C5 F6 DW A_KDO ;DB 19
362/ F130 : [359] ENDIF
363/ F130 :
364/ F130 : ;
365/ F130 : ;-------------------------------------------------------------------------------
366/ F130 : ;Eingabe ein Zeichen von der Tastatur in A
367/ F130 : ;-------------------------------------------------------------------------------
368/ F130 : ;
369/ F130 : =>TRUE IF MONTYP == "Z1013_202"
370/ F130 :
371/ F130 : ; Tastatur
372/ F130 : ; --------
373/ F130 : ;
374/ F130 : ; ------------------------------------------------- I-------I
375/ F130 : ; I X I Y I Z I [ { I \ | I ] } I ^ ~ I _ I I S1 S2 I
376/ F130 : ; RZ0-I I I I I I I I I I I
377/ F130 : ; I @ ` I A I B I C I D I E I F I G I I S0 I
378/ F130 : ; I-----+-----+-----+-----+-----+-----+-----+-----I I-------I
379/ F130 : ; I 0 I 1 ! I 2 " I 3 # I 4 $ I 5 % I 6 & I 7 ' I
380/ F130 : ; RZ1-I I I I I I I I I S0 = normal, Großbuchstaben
381/ F130 : ; I H I I I J I K I L I M I N I O I S1 = Ziffern etc.
382/ F130 : ; I-----+-----+-----+-----+-----+-----+-----+-----I S2 = Sonderzeichen etc.
383/ F130 : ; I 8 ( I 9 ) I : * I ; + I < , I = - I > . I ? / I S3 = Kleinbuchstaben
384/ F130 : ; RZ2-I I I I I I I I I S4 = Ctrl.
385/ F130 : ; I P I Q I R I S I T I U I V I W I
386/ F130 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
387/ F130 : ; I I I I I I I I I
388/ F130 : ; RZ3-I I I I I I I I I
389/ F130 : ; I S1 I S2 I S3 I S4 I <- I SP I -> I ENT I
390/ F130 : ; -------------------------------------------------
391/ F130 : ; ! ! ! ! ! ! ! !
392/ F130 : ; RS0 RS1 RS2 RS3 RS4 RS5 RS6 RS7
393/ F130 : ;
394/ F130 : ; IN 2 | OUT 8
395/ F130 :
396/ F130 :
397/ F130 : inkey: ;bei Ret A=ASCII
398/ F130 : AF xor a
399/ F131 : 67 ld h, a
400/ F132 : 6F ld l, a
401/ F133 : CD 88 F1 call ink9 ;Tastenabfrage
402/ F136 : 30 4B jr nc, ink8 ;Cy=0 keine Taste
403/ F138 : 19 add hl, de
404/ F139 : CD 9E F1 call ink12 ;restl. Spalten
405/ F13C : 0E 44 ld c, 44h ;Tastaturcodetabelle 0044H Shift-Ebene 0 40h,48h,50h
406/ F13E : 38 07 jr c, ink1 ;Cy=1 2.Taste gedr.
407/ F140 : EB ex de, hl
408/ F141 : CB 5A bit 3, d ;Abfrage Zeile 3
409/ F143 : 28 0B jr z, ink2 ;Z=1 Taste gedr.
410/ F145 : 18 14 jr ink3
411/ F147 : CB 5A ink1: bit 3, d ;2. Taste ? Zeile 3
412/ F149 : 28 05 jr z, ink2 ;Z=1 Taste gedr.
413/ F14B : EB ex de, hl
414/ F14C : CB 5A bit 3, d ;1. Taste ? Zeile 3
415/ F14E : 20 0B jr nz, ink3 ;Z=1 Taste gedr.
416/ F150 : CD A5 F1 ink2: call ink13 ;Welche Taste in Z3
417/ F153 : C5 push bc
418/ F154 : CD DC F1 call ink22 ;Summand holen
419/ F157 : C1 pop bc
420/ F158 : 28 06 jr z, ink4 ;Z=0 kein Summ.
421/ F15A : EB ex de, hl
422/ F15B : CD DC F1 ink3: call ink22 ;Summand holen
423/ F15E : 20 23 jr nz, ink8 ;Z=0 kein Summ.
424/ F160 : 83 ink4: add a, e
425/ F161 : 21 27 00 ld hl, KYBTS
426/ F164 : 86 add a, (hl)
427/ F165 : ;Berechnung Ascii-Wert abgeschlossen
428/ F165 : 21 04 00 ink5: ld hl, LAKEY ;Softwareentprel-
429/ F168 : BE cp (hl) ;lung, verhindert
430/ F169 : 28 C5 jr z, inkey ;Repeat-Funktion
431/ F16B : 47 ld b, a
432/ F16C : 7E ld a, (hl)
433/ F16D : B7 or a
434/ F16E : 78 ld a, b
435/ F16F : 20 BF jr nz, inkey ;Z=1 vorher keine
436/ F171 : 32 04 00 ld (LAKEY), a ;Taste gedrueckt
437/ F174 : FE 91 cp 91h ;(S4/A)
438/ F176 : 28 07 jr z, ink6 ;Z=1- ASCII
439/ F178 : FE 17 cp 17h ;(S4/G)
440/ F17A : C0 ret nz ;Z=0 Ruecksprung
441/ F17B : 3E 80 ld a, 80h
442/ F17D : 18 01 jr ink7
443/ F17F : AF ink6: xor a
444/ F180 : 32 27 00 ink7: ld (KYBTS), a
445/ F183 : AF ink8: xor a ;Ruecksprung wenn
446/ F184 : 32 04 00 ld (LAKEY), a ;keine Taste gedr.
447/ F187 : C9 ret ;mit A=0
448/ F188 : ;UP Tastenabfrage
449/ F188 : 5F ink9: ld e, a ;E=Spaltennummer
450/ F189 : D3 08 out (KEYP), a ;Ausgabe Spalte
451/ F18B : 06 20 ld b, 20h
452/ F18D : DB 02 ink10: in a, (PIOBD)
453/ F18F : E6 0F and 0Fh
454/ F191 : 57 ld d, a ;D=Zeilennummer
455/ F192 : DB 02 in a, (PIOBD)
456/ F194 : E6 0F and 0Fh
457/ F196 : BA cp d
458/ F197 : 20 03 jr nz, ink11 ;Z=0 Taste prellt
459/ F199 : FE 0F cp 0Fh
460/ F19B : C0 ret nz ;Z=0 Taste gedr.
461/ F19C : 10 EF ink11: djnz ink10
462/ F19E : 7B ink12: ld a, e ;Erhoeh. Spalten-
463/ F19F : 3C inc a ;zahl
464/ F1A0 : FE 08 cp 8
465/ F1A2 : 20 E4 jr nz, ink9 ;Z=1 alle Tasten
466/ F1A4 : C9 ret ;abgefragt
467/ F1A5 : ;Taste in Z3
468/ F1A5 : 3E 01 ink13: ld a, 1 ;Untersuchung
469/ F1A7 : BB cp e ;welche Taste in
470/ F1A8 : 28 29 jr z, ink19 ;Zeile 3 gedr. ist
471/ F1AA : 30 24 jr nc, ink18 ;E=Spaltenzahl
472/ F1AC : C6 02 add a, 2 ;E=0 - C=41H
473/ F1AE : BB cp e ;E=1 - C=3EH
474/ F1AF : 28 28 jr z, ink21 ;E=2 - C=3BH
475/ F1B1 : 30 23 jr nc, ink20 ;E=3 - C=35H
476/ F1B3 : C6 02 add a, 2 ;E=4 - A=08H
477/ F1B5 : BB cp e ;E=5 - A=20H
478/ F1B6 : 28 0F jr z, ink15 ;E=6 - A=09H
479/ F1B8 : 30 11 jr nc, ink16 ;E=7 - A=0DH
480/ F1BA : C6 02 add a, 2
481/ F1BC : BB cp e
482/ F1BD : 28 04 jr z, ink14
483/ F1BF : 3E 09 ld a, 9 ; ->
484/ F1C1 : 18 0A jr ink17
485/ F1C3 : 3E 0D ink14: ld a, 0Dh ; ENT
486/ F1C5 : 18 06 jr ink17
487/ F1C7 : 3E 20 ink15: ld a, 20h ; SPACE
488/ F1C9 : 18 02 jr ink17
489/ F1CB : 3E 08 ink16: ld a, 8 ; <-
490/ F1CD : C1 ink17: pop bc
491/ F1CE : 18 95 jr ink5
492/ F1D0 : 0E 41 ink18: ld c, 41h ;Tastaturcodetabelle 0041H Shift-Ebene 1 58h,30h,38h
493/ F1D2 : C9 ret
494/ F1D3 : 0E 3E ink19: ld c, 3Eh ;Tastaturcodetabelle 003EH Shift-Ebene 2 78h,20h,28h
495/ F1D5 : C9 ret
496/ F1D6 : 0E 3B ink20: ld c, 3Bh ;Tastaturcodetabelle 003BH Shift-Ebene 3 60h,68h,70h
497/ F1D8 : C9 ret
498/ F1D9 : 0E 35 ink21: ld c, 35h ;Tastaturcodetabelle 0035H Shift-Ebene 4 10h,00h,08h
499/ F1DB : C9 ret
500/ F1DC :
501/ F1DC : ;Summand holen
502/ F1DC : CB 42 ink22: bit 0, d ;Abfrage Zeile 0
503/ F1DE : 20 05 jr nz, ink24 ;Z=0 keine Taste
504/ F1E0 : 69 ink23: ld l, c
505/ F1E1 : 26 00 ld h, 0
506/ F1E3 : 7E ld a, (hl)
507/ F1E4 : C9 ret
508/ F1E5 : 0C ink24: inc c
509/ F1E6 : CB 4A bit 1, d ;Abfrage Zeile 1
510/ F1E8 : 20 02 jr nz, ink25 ;Z=0 keine Taste
511/ F1EA : 18 F4 jr ink23
512/ F1EC : 0C ink25: inc c
513/ F1ED : CB 52 bit 2, d ;Abfrage Zeile 2
514/ F1EF : C0 ret nz ;Z=0 keine Taste
515/ F1F0 : 18 EE jr ink23
516/ F1F2 :
517/ F1F2 : =>FALSE ELSEIF MONTYP == "Z1013_A2"
518/ F1F2 :
519/ F1F2 : ; Tastatur
520/ F1F2 : ; --------
521/ F1F2 : ;
522/ F1F2 : ; -------------------------------------------------
523/ F1F2 : ; I ! I # I % I ' I ) I = I I I
524/ F1F2 : ; RZ0-I I I I I I I I I
525/ F1F2 : ; I 1 I 3 I 5 I 7 I 9 I - I GRA I I
526/ F1F2 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
527/ F1F2 : ; I I I I I I ` I I I
528/ F1F2 : ; RZ1-I I I I I I I I I
529/ F1F2 : ; I Q I E I T I U I O I @ I ENT I I
530/ F1F2 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
531/ F1F2 : ; I I I I I I : I I I
532/ F1F2 : ; RZ2-I I I I I I I Cu I I
533/ F1F2 : ; I A I D I G I J I L I * I leftI I
534/ F1F2 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
535/ F1F2 : ; I I I I I > I ~ I I I
536/ F1F2 : ; RZ3-I I I I I I I Cu I I
537/ F1F2 : ; I Y I C I B I M I I ^ I rghtI I
538/ F1F2 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
539/ F1F2 : ; I " I $ I & I ( I I { I I I
540/ F1F2 : ; RZ4-I I I I I I I I I
541/ F1F2 : ; RZ0 I 2 I 4 I 6 I 8 I 0 I [ I Spc I I
542/ F1F2 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
543/ F1F2 : ; I I I I I I } I I
544/ F1F2 : ; RZ5-I I I I I I I I I
545/ F1F2 : ; RZ1 I W I R I Z I I I P I ] I CTRLI I
546/ F1F2 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
547/ F1F2 : ; I I I I I ; I | I I I
548/ F1F2 : ; RZ6-I I I I I I I Cu I I
549/ F1F2 : ; RZ2 I S I F I H I K I + I \\ I up I ShftI
550/ F1F2 : ; I-----+-----+-----+-----+-----+-----+-----+-----I
551/ F1F2 : ; I I I I < I ? I I I I
552/ F1F2 : ; RZ7-I I I I I I I Cu I ShftI
553/ F1F2 : ; RZ3 I X I V I N I , I / I _ I downI LockI
554/ F1F2 : ; -------------------------------------------------
555/ F1F2 : ; ! ! ! ! ! ! ! !
556/ F1F2 : ; RS0 RS1 RS2 RS3 RS4 RS5 RS6 RS7
557/ F1F2 : ;
558/ F1F2 : ; IN 2 | OUT 8
559/ F1F2 : ;
560/ F1F2 : ; Zeile 4..7 werden auf Zeile 0..3 gemuxt, wenn Pio B4=1
561/ F1F2 :
562/ F1F2 : inkey: ld hl, KYBTS ; Merkzelle
563/ F1F2 : ld a, 01011011b
564/ F1F2 : and (hl)
565/ F1F2 : ld (hl), a
566/ F1F2 : ld ix, keytab ; Tastaturcodetabelle
567/ F1F2 : call ink16 ; normale Taste gedrückt?
568/ F1F2 : jr nc, ink1 ; nein, dann evtl. Fkt.taste?
569/ F1F2 : push de ;
570/ F1F2 : set 7, (hl)
571/ F1F2 : call ink20 ; ASCII-Code aus Tabelle ermitteln
572/ F1F2 : ld (DATA), a ; ASCII-Code
573/ F1F2 : pop de ;
574/ F1F2 : call ink18 ;
575/ F1F2 : ; Funktionstasten (Spalte 6)
576/ F1F2 : ink1: ld ix, tab2 ; Tastaturcodetabelle
577/ F1F2 : ld e, 6 ; Spalte 6
578/ F1F2 : call ink19 ; Spalte abfragen
579/ F1F2 : jr z, ink9 ; wenn keine Taste gedrückt
580/ F1F2 : bit 0, c ; GRA ?
581/ F1F2 : jr z, ink2
582/ F1F2 : bit 5, c ; CTRL ?
583/ F1F2 : jr z, ink5
584/ F1F2 : call ink20 ; ASCII-Code aus Tabelle ermitteln
585/ F1F2 : ret ; A = ASCII-Code
586/ F1F2 : ; GRA
587/ F1F2 : ink2: ld a, 2
588/ F1F2 : res 3, (hl)
589/ F1F2 : ink3: bit 6, (hl)
590/ F1F2 : jr nz, ink4
591/ F1F2 : set 6, (hl) ; Statusbit Grafikmode setzen
592/ F1F2 : xor (hl)
593/ F1F2 : ld (hl), a
594/ F1F2 : ink4: xor a
595/ F1F2 : ret
596/ F1F2 : ; CTRL
597/ F1F2 : ink5: set 5, (hl) ; Statusbit CTRL setzen
598/ F1F2 : bit 7, (hl)
599/ F1F2 : jr z, ink9
600/ F1F2 : ld a, (DATA)
601/ F1F2 : bit 6, a
602/ F1F2 : jr nz, ink6
603/ F1F2 : set 4, a
604/ F1F2 : ink6: and 1Fh
605/ F1F2 : ink7: bit 1, (hl)
606/ F1F2 : ret z
607/ F1F2 : set 7, a ; Bit 7 := 1 (Grafikzeichen)
608/ F1F2 : ret
609/ F1F2 : ; Shift
610/ F1F2 : ink8: res 6, (hl)
611/ F1F2 : bit 7, (hl)
612/ F1F2 : ret z
613/ F1F2 : ld a, (DATA)
614/ F1F2 : jr ink7
615/ F1F2 : ;
616/ F1F2 : ink9: ld e, 7 ; Spalte 7 (Shift)
617/ F1F2 : call ink19 ; Taste gedrückt?
618/ F1F2 : jr z, ink10 ; nein
619/ F1F2 : bit 7, c ; Shift Lock
620/ F1F2 : jr z, ink15
621/ F1F2 : bit 6, c ; Shift
622/ F1F2 : jr nz, ink8
623/ F1F2 : bit 5, (hl)
624/ F1F2 : jr nz, ink15
625/ F1F2 : ink10: bit 7, (hl) ;
626/ F1F2 : ret z ; nein
627/ F1F2 : ; Repeat
628/ F1F2 : ld a, (DATA)
629/ F1F2 : bit 6, c
630/ F1F2 : jr z, ink11
631/ F1F2 : bit 3, (hl)
632/ F1F2 : jr z, ink7
633/ F1F2 : jr ink12
634/ F1F2 : ink11: bit 3, (hl)
635/ F1F2 : jr nz, ink7
636/ F1F2 : ink12: ld b, a
637/ F1F2 : and 30h
638/ F1F2 : ld a, b
639/ F1F2 : jp po, ink13
640/ F1F2 : res 4, a
641/ F1F2 : jr ink14
642/ F1F2 : ink13: set 4, a
643/ F1F2 : ink14: set 5, a
644/ F1F2 : jr ink7
645/ F1F2 : ; Shift Lock
646/ F1F2 : ink15: ld a, 8
647/ F1F2 : jp ink3
648/ F1F2 : ; normale Taste gedrückt?
649/ F1F2 : ; IN: IX: Tastaturcodetabelle
650/ F1F2 : ; OUT: Z-Flag=1: Taste gedrückt
651/ F1F2 : ; E = Spalte
652/ F1F2 : ; Cy=0: keine Taste gedrückt
653/ F1F2 : ; IX: Tastaturcodetabelle aktuelle Zeile
654/ F1F2 : ink16: ld e, 0 ; e = Spalte (0..5)
655/ F1F2 : ink17: call ink19 ; Taste in Spalte gedrückt?
656/ F1F2 : scf
657/ F1F2 : ret nz ; wenn gedrueckt
658/ F1F2 : ink18: inc e ; sonst naechste Spalte
659/ F1F2 : ld bc, 8 ; und Pointer auf Tastaturcode-
660/ F1F2 : add ix, bc ; tabelle erhöhen
661/ F1F2 : ld a, e
662/ F1F2 : cp 6 ; Spalte RS6 erreicht?
663/ F1F2 : jr nz, ink17 ; bis alle 7 Spalten
664/ F1F2 : scf
665/ F1F2 : ccf ; Cy=0
666/ F1F2 : ret
667/ F1F2 : ; Abfrage einer Spalte
668/ F1F2 : ; IN E: Spalte
669/ F1F2 : ; OUT: C: Zeile
670/ F1F2 : ; A = 0
671/ F1F2 : ; Z-Flag=1: Taste gedrückt
672/ F1F2 : ink19: ld a, e ; e = Spalte
673/ F1F2 : out (KEYP), a ; Spalte aktivieren
674/ F1F2 : out (PIOBD), a ; Pio B4 = 0 (Zeile 0..3)
675/ F1F2 : in a, (PIOBD) ; Zeilen 0..3 einlesen
676/ F1F2 : and 0Fh
677/ F1F2 : ld c, a
678/ F1F2 : set 4, a ; PIO B4 = 1 (Zeile 4..7)
679/ F1F2 : out (PIOBD), a
680/ F1F2 : in a, (PIOBD) ; Zeilen 4..7 einlesen
681/ F1F2 : sla a ; in obere 4 Bits verschieben
682/ F1F2 : sla a
683/ F1F2 : sla a
684/ F1F2 : sla a
685/ F1F2 : ld d, a ; d = Zeile 4..7
686/ F1F2 : add a, c
687/ F1F2 : ld c, a ; c = Zeile 0..7
688/ F1F2 : ; Entprellen ...
689/ F1F2 : xor a ; a = 0
690/ F1F2 : out (PIOBD), a ; Pio B4 = 0 (Zeile 0..3)
691/ F1F2 : in a, (PIOBD) ; Zeilen 0..3 einlesen
692/ F1F2 : and 0Fh
693/ F1F2 : add a, d
694/ F1F2 : cp c ; noch gleicher Wert?
695/ F1F2 : jr nz, ink19 ; nein
696/ F1F2 : cpl
697/ F1F2 : or a
698/ F1F2 : ld a, 0
699/ F1F2 : ret
700/ F1F2 : ; ASCII-Code aus Tabelle ermitteln
701/ F1F2 : ; IN: C = Zeile = Bit 0..7
702/ F1F2 : ; IX = Tastaturcodetabelle
703/ F1F2 : ink20: ld de, 0
704/ F1F2 : ld b, 8 ; max 8 Zeilen
705/ F1F2 : ink21: sra c ; nächste Zeile
706/ F1F2 : jr nc, ink22
707/ F1F2 : inc e
708/ F1F2 : djnz ink21
709/ F1F2 : ink22: add ix, de
710/ F1F2 : ld a, (ix+0) ; A = ASCII-Code
711/ F1F2 : res 6, (hl) ;
712/ F1F2 : ret
713/ F1F2 :
714/ F1F2 : [369] ENDIF
715/ F1F2 : ;
716/ F1F2 : ;-------------------------------------------------------------------------------
717/ F1F2 : ;Monitorinit., wird nach 0033H (LSYNC) umgeladen
718/ F1F2 : ;-------------------------------------------------------------------------------
719/ F1F2 : ;
720/ F1F2 : MONTB:
721/ 33 : phase 0033H
722/ 33 :
723/ 33 : =>TRUE IF MONTYP == "Z1013_202"
724/ 33 :
725/ 33 : D0 07 DW 2000 ;Kenntonlaenge LSYNC
726/ 35 : 10 00 08 DB 10h,00h,08h ;Tastaturcodetabelle 0035H Shift-Ebene 4
727/ 38 : C3 58 F0 JP KDO1 ;RST38-Sprung RST38
728/ 3B : 60 68 70 db 60h,68h,70h ;Tastaturcodetabelle 003BH Shift-Ebene 3
729/ 3E : 78 20 28 db 78h,20h,28h ;Tastaturcodetabelle 003EH Shift-Ebene 2
730/ 41 : 58 30 38 db 58h,30h,38h ;Tastaturcodetabelle 0041H Shift-Ebene 1
731/ 44 : 40 48 50 db 40h,48h,50h ;Tastaturcodetabelle 0044H Shift-Ebene 0
732/ 47 : E0 03 DW 03E0H ;WINDOW-Laenge WINDL
733/ 49 : 00 EC DW BWS ;WINDOW-Anfang WINDA
734/ 4B : 00 F0 DW BWS+BWSSZ ;WINDOW-Ende WINDE
735/ 4D :
736/ 4D : =>FALSE ELSEIF MONTYP == "Z1013_A2"
737/ 4D :
738/ 4D : dw 2000 ;Kenntonlaenge LSYNC
739/ 4D : DW BWSSZ-BWSCOL ;WINDOW-Laenge WINDL
740/ 4D : db 0 ;Status-Merkzelle f. INKEY KYBTS
741/ 4D : jp KDO1 ;RST38-Sprung RST38
742/ 4D : DW BWS ;WINDOW-Anfang WINDA
743/ 4D : DW BWS+BWSSZ ;WINDOW-Ende WINDE
744/ 4D :
745/ 4D : [723] ENDIF
746/ 4D :
747/ F20C : dephase
748/ F20C : ;
749/ F20C : ;-------------------------------------------------------------------------------
750/ F20C : ;Zeichen von Tastatur holen, warten bis Taste gedrueckt
751/ F20C : ;-------------------------------------------------------------------------------
752/ F20C : ;
753/ F20C : =>TRUE IF MONTYP == "Z1013_202"
754/ F20C :
755/ F20C : C5 INCH: push bc
756/ F20D : D5 push de
757/ F20E : E5 push hl
758/ F20F : CD 30 F1 INC1: CALL INKEY
759/ F212 : B7 OR A
760/ F213 : 28 FA JR Z, INC1 ;keine Taste gedrueckt
761/ F215 : E1 pop hl
762/ F216 : D1 pop de
763/ F217 : C1 pop bc
764/ F218 : C9 RET
765/ F219 :
766/ F219 : =>FALSE ELSEIF MONTYP == "Z1013_A2"
767/ F219 :
768/ F219 : INCH: push ix
769/ F219 : push bc
770/ F219 : push de
771/ F219 : push hl
772/ F219 : ld bc, 1000h ; B := 16; C := 0 (256)
773/ F219 : INC1: PUSH BC
774/ F219 : CALL INKEY ; ret: hl=KYBTS
775/ F219 : POP BC
776/ F219 : LD IX, LAKEY
777/ F219 : CP (IX+0)
778/ F219 : JR NZ, INC6 ; wenn anderes Zeichen
779/ F219 : OR A ; A = 0?
780/ F219 : JR Z, INC5 ; wenn keine Taste gedückt
781/ F219 : INC2: DEC C
782/ F219 : JR NZ, INC2 ; kurz warten
783/ F219 : BIT 4, (HL) ; Repeat?
784/ F219 : JR NZ, INC4 ; ja -> gleich weiter
785/ F219 : LD DE, 800H ; sonst längeres Warten
786/ F219 : INC3: DEC DE
787/ F219 : LD A, E
788/ F219 : OR D
789/ F219 : JR NZ, INC3
790/ F219 : INC4: DJNZ INC1 ; 16x
791/ F219 : SET 4, (HL) ; Repeat ein
792/ F219 : XOR A ; A := 0, kein Zeichen
793/ F219 : JR INC6
794/ F219 : INC5: RES 4, (HL) ; kein Repeat mehr
795/ F219 : INC6: LD (IX+0), A ; LAKEY füllen
796/ F219 : OR A ; A = 0?
797/ F219 : JR Z, INC1 ; nochmal, bis Taste gedrückt
798/ F219 : POP HL
799/ F219 : POP DE
800/ F219 : POP BC
801/ F219 : POP IX
802/ F219 : RET
803/ F219 :
804/ F219 : [753] ENDIF
805/ F219 : ;
806/ F219 : ;-------------------------------------------------------------------------------
807/ F219 : ;Ausgabe Zeichen auf Bildschirm
808/ F219 : ;-------------------------------------------------------------------------------
809/ F219 : ;
810/ F219 : ; Zeichenausgabe f. PRST7: Reset Bit 7
811/ F219 : E6 7F OUT0: AND A, 7FH
812/ F21B : ; Zeichenausgabe
813/ F21B : F5 OUTCH: push af
814/ F21C : C5 push bc
815/ F21D : D5 push de
816/ F21E : E5 PUSH HL
817/ F21F : 2A 2B 00 LD HL,(CUPOS)
818/ F222 : F5 PUSH AF
819/ F223 : 3A 1F 00 LD A,(BUFFA) ;Zeichen unter Cursor
820/ F226 : 77 LD (HL),A ;zurueckschreiben
821/ F227 : F1 POP AF
822/ F228 : FE 0D CP A, CR ;neue Zeile?
823/ F22A : 28 53 JR Z, OUT8
824/ F22C : FE 0C CP A, CLS ;Bildschirm loeschen?
825/ F22E : 28 5E JR Z, OUT10
826/ F230 : FE 08 CP A, 8 ;Cursor links?
827/ F232 : 28 48 JR Z, OUT7
828/ F234 : FE 09 CP A, 9 ;Cursor rechts?
829/ F236 : 28 01 JR Z, OUT2
830/ F238 : 77 LD (HL),A ;sonst Zeichen in BWS
831/ F239 : 23 OUT2: INC HL
832/ F23A : ;
833/ F23A : EB OUT3: EX DE,HL
834/ F23B : 2A 4B 00 LD HL,(WINDE)
835/ F23E : AF XOR A ;Test, ob neue Cursor-
836/ F23F : ED 52 SBC HL,DE ;position schon
837/ F241 : EB EX DE,HL ;ausserhalb Window
838/ F242 : 20 2A JR NZ, OUT6 ;nein
839/ F244 : ;
840/ F244 : ED 5B 49 00 LD DE,(WINDA) ;scrollen um
841/ F248 : 21 20 00 LD HL,BWSCOL ;eine Zeile im Window
842/ F24B : 19 ADD HL,DE
843/ F24C : ED 4B 47 00 LD BC,(WINDL) ;Windowlaenge
844/ F250 : 78 LD A,B
845/ F251 : B1 OR C ;=0?
846/ F252 : 28 02 JR Z, OUT5 ;ja --> kein Scrollen
847/ F254 : ED B0 LDIR
848/ F256 : D5 OUT5: PUSH DE ;letzte Zeile loeschen
849/ F257 : E1 POP HL
850/ F258 : E5 PUSH HL
851/ F259 : 13 INC DE
852/ F25A : 36 20 LD (HL),' '
853/ F25C : 01 1F 00 LD BC,BWSCOL-1
854/ F25F : ED B0 LDIR
855/ F261 : ;
856/ F261 : 2A 16 00 LD HL,(SOIL) ;SOIL um eine Zeile
857/ F264 : 11 20 00 LD DE,BWSCOL ;erhoehen
858/ F267 : AF XOR A
859/ F268 : ED 52 SBC HL,DE
860/ F26A : 22 16 00 LD (SOIL),HL
861/ F26D : E1 POP HL
862/ F26E : ;
863/ F26E : 7E OUT6: LD A,(HL) ;Zeichen unter Cursor
864/ F26F : 32 1F 00 LD (BUFFA),A ;sichern
865/ F272 : 36 FF LD (HL),0FFH ;Cursor setzen
866/ F274 : 22 2B 00 LD (CUPOS),HL
867/ F277 : E1 POP HL
868/ F278 : D1 POP DE
869/ F279 : C1 POP BC
870/ F27A : F1 POP AF
871/ F27B : C9 RET
872/ F27C : ;Cursor links
873/ F27C : 2B OUT7: DEC HL
874/ F27D : 18 BB JR OUT3
875/ F27F : ;neue Zeile
876/ F27F : 3E E0 OUT8: LD A, 0E0H ;auf Zeilenanfang stellen
877/ F281 : A5 AND A, L ;A=Anfang akt. Zeile
878/ F282 : C6 20 ADD A, BWSCOL ;A=NWB der Position
879/ F284 : 4F LD C,A ;eine Zeile tiefer
880/ F285 : 36 20 OUT9: LD (HL),' ' ;Rest der Zeile ab
881/ F287 : 23 INC HL ;ENTER loeschen
882/ F288 : 7D LD A,L
883/ F289 : B9 CP A, C
884/ F28A : 20 F9 JR NZ, OUT9
885/ F28C : 18 AC JR OUT3
886/ F28E : ;
887/ F28E : ;Window loeschen
888/ F28E : 2A 47 00 OUT10: LD HL,(WINDL)
889/ F291 : 01 1F 00 LD BC,BWSCOL-1
890/ F294 : 09 ADD HL,BC
891/ F295 : E5 PUSH HL
892/ F296 : C1 POP BC
893/ F297 : 2A 49 00 LD HL,(WINDA)
894/ F29A : E5 PUSH HL
895/ F29B : 36 20 LD (HL),' '
896/ F29D : E5 PUSH HL
897/ F29E : D1 POP DE
898/ F29F : 13 INC DE
899/ F2A0 : ED B0 LDIR
900/ F2A2 : E1 POP HL
901/ F2A3 : 18 C9 JR OUT6
902/ F2A5 : ;
903/ F2A5 : ;-------------------------------------------------------------------------------
904/ F2A5 : ;Ausgabe String, bis Bit7=1
905/ F2A5 : ;-------------------------------------------------------------------------------
906/ F2A5 : ;
907/ F2A5 : E3 PRST7: EX (SP),HL ;Adresse hinter CALL
908/ F2A6 : 7E PRS1: LD A,(HL)
909/ F2A7 : 23 INC HL
910/ F2A8 : F5 PUSH AF
911/ F2A9 : CD 19 F2 CALL OUT0
912/ F2AC : F1 POP AF
913/ F2AD : CB 7F BIT 7,A ;Bit7 gesetzt?
914/ F2AF : 28 F5 JR Z, PRS1 ;nein
915/ F2B1 : E3 EX (SP),HL ;neue Returnadresse
916/ F2B2 : C9 RET
917/ F2B3 : ;
918/ F2B3 : ;-------------------------------------------------------------------------------
919/ F2B3 : ;Eingabe einer Zeile mit Promptsymbol
920/ F2B3 : ;-------------------------------------------------------------------------------
921/ F2B3 : ;
922/ F2B3 : CD A5 F2 INLIN: CALL PRST7
923/ F2B6 : 20 23 DB " #"
924/ F2B8 : A0 DB ' '+80H
925/ F2B9 : ;
926/ F2B9 : ;-------------------------------------------------------------------------------
927/ F2B9 : ;Eingabe einer Zeichenkette
928/ F2B9 : ;-------------------------------------------------------------------------------
929/ F2B9 : ;
930/ F2B9 : E5 INSTR: PUSH HL
931/ F2BA : 2A 2B 00 LD HL,(CUPOS)
932/ F2BD : 22 16 00 LD (SOIL),HL ;SOIL=1.Position
933/ F2C0 : (MACRO) INS1: RINCH ;Zeichen von Tastatur
933/ F2C0 : E7 RST 20H
933/ F2C1 : 01 DB 01h ; INCH
934/ F2C2 : (MACRO) ROUTC ;anzeigen
934/ F2C2 : E7 RST 20H
934/ F2C3 : 00 DB 0 ; OUTCH
935/ F2C4 : FE 0D CP A, CR ;>ENTER<?
936/ F2C6 : 20 F8 JR NZ, INS1 ;nein --> weiter eingeben
937/ F2C8 : E1 POP HL
938/ F2C9 : C9 RET
939/ F2CA : ;
940/ F2CA : ;-------------------------------------------------------------------------------
941/ F2CA : ;fuehrende Leerzeichen ueberlesen
942/ F2CA : ;-------------------------------------------------------------------------------
943/ F2CA : ;
944/ F2CA : 1A SPACE: LD A,(DE)
945/ F2CB : FE 20 CP A, ' '
946/ F2CD : C0 RET NZ
947/ F2CE : 13 INC DE
948/ F2CF : 18 F9 JR SPACE
949/ F2D1 : ;
950/ F2D1 : ;-------------------------------------------------------------------------------
951/ F2D1 : ;letzen vier Zeichen als Hexzahl konvertieren
952/ F2D1 : ;und in DATA ablegen
953/ F2D1 : ;-------------------------------------------------------------------------------
954/ F2D1 : ;
955/ F2D1 : CD CA F2 KONVX: CALL SPACE
956/ F2D4 : AF XOR A
957/ F2D5 : 21 13 00 LD HL,DATA
958/ F2D8 : 77 LD (HL),A ;DATA=0
959/ F2D9 : 23 INC HL
960/ F2DA : 77 LD (HL),A
961/ F2DB : 1A KON1: LD A,(DE)
962/ F2DC : 2B DEC HL
963/ F2DD : D6 30 SUB 30H ;Zeichen<"0"?
964/ F2DF : F8 RET M
965/ F2E0 : FE 0A CP A, 0AH ;Zeichen<="9"?
966/ F2E2 : 38 08 JR C, KON2
967/ F2E4 : D6 07 SUB 7
968/ F2E6 : FE 0A CP A, 0AH ;Zeichen<"A"?
969/ F2E8 : F8 RET M
970/ F2E9 : FE 10 CP A, 10H ;Zeichen>"F"?
971/ F2EB : F0 RET P
972/ F2EC : 13 KON2: INC DE ;Hexziffer eintragen
973/ F2ED : ED 6F RLD
974/ F2EF : 23 INC HL
975/ F2F0 : ED 6F RLD
976/ F2F2 : 18 E7 JR KON1 ;naechste Ziffer
977/ F2F4 : ;
978/ F2F4 : ;-------------------------------------------------------------------------------
979/ F2F4 : ;Konvertierung ASCII-Hex ab (DE) --> (HL)
980/ F2F4 : ;-------------------------------------------------------------------------------
981/ F2F4 : ;
982/ F2F4 : C5 INHEX: PUSH BC
983/ F2F5 : CD D1 F2 CALL KONVX ;Konvertierung
984/ F2F8 : 44 LD B,H ;BC=HL=DATA+1
985/ F2F9 : 4D LD C,L
986/ F2FA : 6E LD L,(HL) ;unteres Byte
987/ F2FB : 03 INC BC
988/ F2FC : 0A LD A,(BC)
989/ F2FD : 67 LD H,A ;oberes Byte
990/ F2FE : B5 OR L ;Z-Flag setzen
991/ F2FF : C1 POP BC
992/ F300 : C9 RET
993/ F301 : ;
994/ F301 : ;-------------------------------------------------------------------------------
995/ F301 : ;Ausgabe (A) hexadezimal
996/ F301 : ;-------------------------------------------------------------------------------
997/ F301 : ;
998/ F301 : F5 OUTHX: PUSH AF
999/ F302 : 1F RRA
1000/ F303 : 1F RRA
1001/ F304 : 1F RRA
1002/ F305 : 1F RRA
1003/ F306 : CD 0A F3 CALL OUX1 ;obere Tetrade ausgeben
1004/ F309 : F1 POP AF ;und die untere
1005/ F30A : F5 OUX1: PUSH AF
1006/ F30B : E6 0F AND A, 0FH
1007/ F30D : C6 30 ADD A, 30H ;Konvertierung --> ASCII
1008/ F30F : FE 3A CP A, ':' ;Ziffer "A" ... "F"?
1009/ F311 : 38 02 JR C, OUX2 ;nein
1010/ F313 : C6 07 ADD A, 7 ;sonst Korrektur
1011/ F315 : CD 1B F2 OUX2: CALL OUTCH ;und Ausgabe
1012/ F318 : F1 POP AF
1013/ F319 : C9 RET
1014/ F31A : ;
1015/ F31A : ;-------------------------------------------------------------------------------
1016/ F31A : ;Ausgabe HL hexadezimal
1017/ F31A : ;-------------------------------------------------------------------------------
1018/ F31A : ;
1019/ F31A : F5 OUTHL: PUSH AF
1020/ F31B : 7C LD A,H
1021/ F31C : CD 01 F3 CALL OUTHX
1022/ F31F : 7D LD A,L
1023/ F320 : CD 01 F3 CALL OUTHX
1024/ F323 : F1 POP AF
1025/ F324 : C9 RET
1026/ F325 : ;
1027/ F325 : ;-------------------------------------------------------------------------------
1028/ F325 : ;Speicherinhalt modifizieren
1029/ F325 : ;-------------------------------------------------------------------------------
1030/ F325 : ;
1031/ F325 : 2A 1B 00 MEM: LD HL,(ARG1)
1032/ F328 : (MACRO) MEM1: ROTHL ;Ausgabe Adresse
1032/ F328 : E7 RST 20H
1032/ F329 : 07 DB 07h ; OUTHL
1033/ F32A : E5 PUSH HL
1034/ F32B : (MACRO) ROTSP ;Leerzeichen
1034/ F32B : E7 RST 20H
1034/ F32C : 0E DB 0Eh ; OUTSP
1035/ F32D : 7E LD A,(HL)
1036/ F32E : (MACRO) ROTHX ;Ausgabe Byte
1036/ F32E : E7 RST 20H
1036/ F32F : 06 DB 06h ; OUTHX
1037/ F330 : CD B3 F2 CALL INLIN
1038/ F333 : ED 5B 16 00 LD DE,(SOIL)
1039/ F337 : 1A LD A,(DE)
1040/ F338 : 08 EX AF, AF'
1041/ F339 : E1 POP HL
1042/ F33A : 2B DEC HL
1043/ F33B : 23 MEM2: INC HL
1044/ F33C : E5 PUSH HL
1045/ F33D : CD F4 F2 CALL INHEX
1046/ F340 : 28 0D JR Z, MEM4 ;Trennzeichen
1047/ F342 : 7D MEM3: LD A,L
1048/ F343 : E1 POP HL
1049/ F344 : 77 LD (HL),A
1050/ F345 : BE CP A, (HL) ;RAM-Test
1051/ F346 : 28 F3 JR Z, MEM2 ;i.O.
1052/ F348 : (MACRO) RPRST
1052/ F348 : E7 RST 20H
1052/ F349 : 02 DB 02h ; PRST
1053/ F34A : 45 52 DB "ER"
1054/ F34C : A0 DB ' '+80H
1055/ F34D : 18 D9 JR MEM1
1056/ F34F : ;
1057/ F34F : 1A MEM4: LD A,(DE) ;Test Datenbyte=0
1058/ F350 : FE 20 CP A, ' ' ;wenn ja --> Z=1
1059/ F352 : 28 EE JR Z, MEM3
1060/ F354 : E1 POP HL
1061/ F355 : 23 INC HL
1062/ F356 : 22 1D 00 LD (ARG2),HL ;1. nichtbearb. Adr.
1063/ F359 : FE 3B CP A, ';'
1064/ F35B : C8 RET Z ;Return, wenn ";" gegeben
1065/ F35C : 08 EX AF, AF'
1066/ F35D : FE 20 CP A, ' '
1067/ F35F : 28 C7 JR Z, MEM1 ;Z=1 keine Eingabe
1068/ F361 : 2B DEC HL
1069/ F362 : FE 52 CP A, 'R' ;"R" gegeben?
1070/ F364 : 20 C2 JR NZ, MEM1 ;nein
1071/ F366 : 2B DEC HL ;sonst eine Adresse
1072/ F367 : 18 BF JR MEM1 ;zurueck
1073/ F369 : ;
1074/ F369 : ;-------------------------------------------------------------------------------
1075/ F369 : ;Speichern auf Kassette
1076/ F369 : ;-------------------------------------------------------------------------------
1077/ F369 : ;
1078/ F369 : 2A 1B 00 CSAVE: LD HL,(ARG1)
1079/ F36C : CD 7D F3 CALL SAV2 ;Ausgabe 20H Bytes
1080/ F36F : EB SAV1: EX DE,HL
1081/ F370 : 2A 1D 00 LD HL,(ARG2)
1082/ F373 : A7 AND A, A
1083/ F374 : ED 52 SBC HL,DE
1084/ F376 : EB EX DE,HL
1085/ F377 : D8 RET C ;wenn File zu Ende
1086/ F378 : CD 83 F3 CALL SAV3 ;Ausgabe 20H Byte
1087/ F37B : 18 F2 JR SAV1
1088/ F37D : ;
1089/ F37D : ED 5B 33 00 SAV2: LD DE,(LSYNC) ;langer Vorton
1090/ F381 : 18 03 JR SAV4
1091/ F383 : ;Ausgabe ein Block = 20H Bytes
1092/ F383 : 11 0E 00 SAV3: LD DE,14 ;kurzer Vorton
1093/ F386 : ;Vorton: DE Halbschwingungen a 640 Hz
1094/ F386 : 06 70 SAV4: LD B,70H ;Ausg. Vorton
1095/ F388 : 10 FE SAV5: DJNZ SAV5
1096/ F38A : CD F1 F3 CALL SAV21 ;Flanke wechseln
1097/ F38D : 1B DEC DE
1098/ F38E : 7B LD A,E
1099/ F38F : B2 OR D
1100/ F390 : 20 F4 JR NZ,SAV4
1101/ F392 : ;Trennschwingung: 1 Vollschwingung a 1280 Hz
1102/ F392 : 0E 02 LD C,02H ;Ausgabe Synchron-
1103/ F394 : 06 35 SAV6: LD B,35H ;impulse
1104/ F396 : 10 FE SAV7: DJNZ SAV7
1105/ F398 : CD F1 F3 CALL SAV21 ;Flanke wechseln
1106/ F39B : 0D DEC C
1107/ F39C : 11 00 00 LD DE,0
1108/ F39F : 20 F3 JR NZ,SAV6
1109/ F3A1 : ;
1110/ F3A1 : D5 PUSH DE ;DE=IX=0000
1111/ F3A2 : DD E1 POP IX
1112/ F3A4 : ;Kopfinhalt ausgeben
1113/ F3A4 : 06 12 LD B,12H ;kurze Pause
1114/ F3A6 : 10 FE SAV8: DJNZ SAV8
1115/ F3A8 : CD D0 F3 CALL SAV14 ;Ausgabe DE
1116/ F3AB : 06 0F LD B,0FH ;kurze Pause
1117/ F3AD : 10 FE SAV9: DJNZ SAV9
1118/ F3AF : ;20H Bytes ausgeben
1119/ F3AF : 0E 10 LD C,10H ;10H*2 Bytes
1120/ F3B1 : 5E SAV10: LD E,(HL)
1121/ F3B2 : 23 INC HL
1122/ F3B3 : 56 LD D,(HL)
1123/ F3B4 : DD 19 ADD IX,DE ;Pruefsumme bilden
1124/ F3B6 : 23 INC HL
1125/ F3B7 : C5 PUSH BC
1126/ F3B8 : CD D0 F3 CALL SAV14 ;Ausgabe DE
1127/ F3BB : C1 POP BC
1128/ F3BC : 0D DEC C
1129/ F3BD : 28 06 JR Z, SAV12 ;Block fertig geschrieben
1130/ F3BF : 06 0E LD B,0EH ;kurze Pause
1131/ F3C1 : 10 FE SAV11: DJNZ SAV11
1132/ F3C3 : 18 EC JR SAV10
1133/ F3C5 : ;Pruefsumme ausgeben
1134/ F3C5 : DD E5 SAV12: PUSH IX
1135/ F3C7 : D1 POP DE ;DE = Pruefsumme
1136/ F3C8 : 06 10 LD B,10H ;kurze Pause
1137/ F3CA : 10 FE SAV13: DJNZ SAV13
1138/ F3CC : CD D0 F3 CALL SAV14 ;DE ausgeben
1139/ F3CF : C9 RET
1140/ F3D0 : ;Ausgabe 16 Bit DE
1141/ F3D0 : 0E 10 SAV14: LD C,16 ;16 Bit
1142/ F3D2 : CB 3A SAV15: SRL D ;Hi-Bit in Cy schieben
1143/ F3D4 : CB 1B RR E
1144/ F3D6 : 30 07 JR NC, SAV17 ;Cy=1, wenn Bit=1
1145/ F3D8 : ;1-Bit 1 Halbschwingung mit 1280 Hz
1146/ F3D8 : 06 03 LD B,3
1147/ F3DA : 10 FE SAV16: DJNZ SAV16
1148/ F3DC : 00 NOP
1149/ F3DD : 18 03 JR SAV18
1150/ F3DF : ;0-Bit 1 Vollschwingung mit 2560 Hz
1151/ F3DF : CD F1 F3 SAV17: CALL SAV21 ;Flanke ausgeben
1152/ F3E2 : 06 19 SAV18: LD B,19H
1153/ F3E4 : 10 FE SAV19: DJNZ SAV19
1154/ F3E6 : CD F1 F3 CALL SAV21 ;Flanke ausgeben
1155/ F3E9 : 0D DEC C
1156/ F3EA : C8 RET Z ;wenn fertig
1157/ F3EB : 06 15 LD B,15H
1158/ F3ED : 10 FE SAV20: DJNZ SAV20
1159/ F3EF : 18 E1 JR SAV15
1160/ F3F1 : ;Flanke ausgeben
1161/ F3F1 : DB 02 SAV21: IN A, PIOBD ;Flanke ausgeben
1162/ F3F3 : EE 80 XOR 80H ;durch Bit-Negierung Bit7
1163/ F3F5 : D3 02 OUT PIOBD, A
1164/ F3F7 : C9 RET
1165/ F3F8 : ;
1166/ F3F8 : ;-------------------------------------------------------------------------------
1167/ F3F8 : ;Laden von Kassette
1168/ F3F8 : ;-------------------------------------------------------------------------------
1169/ F3F8 : ;
1170/ F3F8 : 2A 1B 00 CLOAD: LD HL,(ARG1)
1171/ F3FB : CD 17 F4 LOA1: CALL LOA3 ;laden 20H Bytes
1172/ F3FE : 28 0C JR Z, LOA2 ;wenn kein Ladefehler
1173/ F400 : CD A5 F2 CALL PRST7 ;sonst Fehler
1174/ F403 : 43 53 DB "CS"
1175/ F405 : BC DB '<'+80h
1176/ F406 : CD 1A F3 CALL OUTHL ;Adresse ausgeben
1177/ F409 : CD CF F5 CALL OUTSP
1178/ F40C : EB LOA2: EX DE,HL
1179/ F40D : 2A 1D 00 LD HL,(ARG2)
1180/ F410 : A7 AND A, A
1181/ F411 : ED 52 SBC HL,DE ;Endadresse erreicht?
1182/ F413 : EB EX DE,HL
1183/ F414 : D8 RET C ;ja --> fertig
1184/ F415 : 18 E4 JR LOA1 ;sonst weiterlesen
1185/ F417 : ;20H Bytes laden nach (HL)
1186/ F417 : CD BC F4 LOA3: CALL LOA24 ;synchronisieren
1187/ F41A : CD C6 F4 CALL LOA25 ;Flanke abwarten
1188/ F41D : 0E 07 LD C,7
1189/ F41F : 11 10 09 LOA5: LD DE,0910H ;D=9, E=10h
1190/ F422 : 3E 07 LD A,7
1191/ F424 : 3D LOA6: DEC A
1192/ F425 : 20 FD JR NZ, LOA6
1193/ F427 : CD BC F4 CALL LOA24 ;synchronisieren
1194/ F42A : CD BC F4 LOA7: CALL LOA24 ;Flanke ?
1195/ F42D : 20 E8 JR NZ, LOA3 ;wenn nicht Vorton
1196/ F42F : 15 DEC D
1197/ F430 : 20 F8 JR NZ, LOA7
1198/ F432 : 0D DEC C
1199/ F433 : 28 0C JR Z, LOA9
1200/ F435 : DB 02 LOA8: IN A, 2
1201/ F437 : A8 XOR B
1202/ F438 : CB 77 BIT 6,A
1203/ F43A : 20 E3 JR NZ, LOA5
1204/ F43C : 1D DEC E
1205/ F43D : 20 F6 JR NZ, LOA8
1206/ F43F : 18 D6 JR LOA3
1207/ F441 : ;Synchronisierimpulse lesen
1208/ F441 : CD C6 F4 LOA9: CALL LOA25 ;Flanke abwarten
1209/ F444 : 3E 44 LD A,44H
1210/ F446 : 3D LOA10: DEC A
1211/ F447 : 20 FD JR NZ, LOA10
1212/ F449 : CD BC F4 CALL LOA24 ;Flanke ?
1213/ F44C : 20 F3 JR NZ, LOA9 ;wenn nicht
1214/ F44E : CD C6 F4 CALL LOA25 ;Flanke abwarten
1215/ F451 : 3E 1E LD A,1EH
1216/ F453 : 3D LOA11: DEC A
1217/ F454 : 20 FD JR NZ, LOA11
1218/ F456 : ;2 Bytes Kopf lesen
1219/ F456 : CD 9D F4 CALL LOA19 ;lesen DE
1220/ F459 : ;20H Byte Daten lesen
1221/ F459 : 0E 10 LD C,10H ;10H x 2 Bytes
1222/ F45B : D5 PUSH DE
1223/ F45C : DD E1 POP IX ;IX-Pruefsummenzaehler=
1224/ F45E : 3E 1A LD A,1AH
1225/ F460 : 3D LOA12: DEC A
1226/ F461 : 20 FD JR NZ, LOA12
1227/ F463 : CD 9D F4 LOA13: CALL LOA19 ;laden DE
1228/ F466 : DD 19 ADD IX,DE ;Pruefsumme bilden
1229/ F468 : C5 PUSH BC
1230/ F469 : 4D LD C,L
1231/ F46A : 44 LD B,H
1232/ F46B : 2A 1D 00 LD HL,(ARG2)
1233/ F46E : AF XOR A
1234/ F46F : ED 42 SBC HL,BC ;Endadresse erreicht?
1235/ F471 : 69 LD L,C
1236/ F472 : 60 LD H,B
1237/ F473 : C1 POP BC
1238/ F474 : 38 05 JR C, LOA14 ;ja --> Leseende
1239/ F476 : 73 LD (HL),E
1240/ F477 : 23 INC HL
1241/ F478 : 72 LD (HL),D
1242/ F479 : 18 06 JR LOA16
1243/ F47B : 3E 01 LOA14: LD A,1
1244/ F47D : 3D LOA15: DEC A
1245/ F47E : 20 FD JR NZ, LOA15
1246/ F480 : 23 INC HL
1247/ F481 : 23 LOA16: INC HL
1248/ F482 : 0D DEC C
1249/ F483 : 28 07 JR Z, LOA18 ;wenn Blockende
1250/ F485 : 3E 12 LD A,12H
1251/ F487 : 3D LOA17: DEC A
1252/ F488 : 20 FD JR NZ, LOA17
1253/ F48A : 18 D7 JR LOA13 ;naechte 2 Byte
1254/ F48C : 3E 12 LOA18: LD A,12H
1255/ F48E : 3D LOA27: DEC A
1256/ F48F : 20 FD JR NZ, LOA27
1257/ F491 : ;Pruefsumme lesen
1258/ F491 : CD 9D F4 CALL LOA19 ;laden DE
1259/ F494 : EB EX DE,HL
1260/ F495 : DD E5 PUSH IX
1261/ F497 : C1 POP BC
1262/ F498 : AF XOR A
1263/ F499 : ED 42 SBC HL,BC ;Prüfsumme gleich?
1264/ F49B : EB EX DE,HL ;Z=0 Ladefehler
1265/ F49C : C9 RET
1266/ F49D : ;Laden 2 Byte nach DE
1267/ F49D : E5 LOA19: PUSH HL
1268/ F49E : 2E 10 LD L,10H ;16 Datenbits
1269/ F4A0 : CD BC F4 LOA20: CALL LOA24 ;Flanke ?
1270/ F4A3 : 20 03 JR NZ, LOA21
1271/ F4A5 : AF XOR A ;Cy=0
1272/ F4A6 : 18 01 JR LOA22
1273/ F4A8 : 37 LOA21: SCF
1274/ F4A9 : CB 1A LOA22: RR D
1275/ F4AB : CB 1B RR E
1276/ F4AD : CD C6 F4 CALL LOA25 ;Flanke abwarten
1277/ F4B0 : 2D DEC L
1278/ F4B1 : 28 07 JR Z, LOA23 ;wenn fertig
1279/ F4B3 : 3E 1E LD A,1EH
1280/ F4B5 : 3D LOA26: DEC A
1281/ F4B6 : 20 FD JR NZ, LOA26
1282/ F4B8 : 18 E6 JR LOA20
1283/ F4BA : E1 LOA23: POP HL
1284/ F4BB : C9 RET
1285/ F4BC : ;Portabfrage
1286/ F4BC : DB 02 LOA24: IN A, PIOBD
1287/ F4BE : A8 XOR B
1288/ F4BF : CB 77 BIT 6,A ;Bit6->TB in
1289/ F4C1 : F5 PUSH AF
1290/ F4C2 : A8 XOR B
1291/ F4C3 : 47 LD B,A
1292/ F4C4 : F1 POP AF ;Z=0 --> Flanke
1293/ F4C5 : C9 RET
1294/ F4C6 : ;Warten auf Flankenwechsel
1295/ F4C6 : DB 02 LOA25: IN A, PIOBD
1296/ F4C8 : A8 XOR B
1297/ F4C9 : CB 77 BIT 6,A ;Bit6->TB in
1298/ F4CB : 28 F9 JR Z, LOA25
1299/ F4CD : C9 RET
1300/ F4CE : ;
1301/ F4CE : ;-------------------------------------------------------------------------------
1302/ F4CE : ;Speicherinhalt mit Checksumme anzeigen
1303/ F4CE : ;-------------------------------------------------------------------------------
1304/ F4CE : ;
1305/ F4CE : 2A 1B 00 D_KDO: LD HL,(ARG1)
1306/ F4D1 : ED 5B 1D 00 DKO1: LD DE,(ARG2)
1307/ F4D5 : 37 SCF
1308/ F4D6 : E5 PUSH HL
1309/ F4D7 : ED 52 SBC HL,DE
1310/ F4D9 : E1 POP HL
1311/ F4DA : D0 RET NC ;wenn EADR<AADR
1312/ F4DB : (MACRO) ROTHL
1312/ F4DB : E7 RST 20H
1312/ F4DC : 07 DB 07h ; OUTHL
1313/ F4DD : 01 00 08 LD BC,0800H ;B=8
1314/ F4E0 : 1E 00 LD E,0 ;EC=0 - Checksumme
1315/ F4E2 : (MACRO) DKO2: RPRST
1315/ F4E2 : E7 RST 20H
1315/ F4E3 : 02 DB 02h ; PRST
1316/ F4E4 : A0 DB ' '+80H
1317/ F4E5 : 7E LD A,(HL)
1318/ F4E6 : (MACRO) ROTHX
1318/ F4E6 : E7 RST 20H
1318/ F4E7 : 06 DB 06h ; OUTHX
1319/ F4E8 : 81 ADD A, C ;Checksumme bilden
1320/ F4E9 : 4F LD C,A
1321/ F4EA : 30 04 JR NC, DKO3
1322/ F4EC : 3E 00 LD A,0
1323/ F4EE : 8B ADC A, E
1324/ F4EF : 5F LD E,A
1325/ F4F0 : 23 DKO3: INC HL
1326/ F4F1 : 10 EF DJNZ DKO2
1327/ F4F3 : (MACRO) RPRST
1327/ F4F3 : E7 RST 20H
1327/ F4F4 : 02 DB 02h ; PRST
1328/ F4F5 : A0 DB ' '+80H
1329/ F4F6 : 7B LD A,E
1330/ F4F7 : CD 0A F3 CALL OUX1 ;Checksumme ausgeben
1331/ F4FA : 79 LD A,C
1332/ F4FB : (MACRO) ROTHX
1332/ F4FB : E7 RST 20H
1332/ F4FC : 06 DB 06h ; OUTHX
1333/ F4FD : 18 D2 JR DKO1
1334/ F4FF : ;
1335/ F4FF : ;-------------------------------------------------------------------------------
1336/ F4FF : ;Argumente uebergeben
1337/ F4FF : ;-------------------------------------------------------------------------------
1338/ F4FF : ;
1339/ F4FF : 2A 1B 00 PARA: LD HL,(ARG1)
1340/ F502 : ED 5B 1D 00 LD DE,(ARG2)
1341/ F506 : ED 4B 23 00 LD BC,(ARG3)
1342/ F50A : C9 RET
1343/ F50B : ;
1344/ F50B : ;-------------------------------------------------------------------------------
1345/ F50B : ;Speicherbereich mit Byte beschreiben
1346/ F50B : ;-------------------------------------------------------------------------------
1347/ F50B : ;
1348/ F50B : CD FF F4 K_KDO: CALL PARA
1349/ F50E : 71 LD (HL),C ;C=Fuellbyte
1350/ F50F : E5 PUSH HL
1351/ F510 : AF XOR A
1352/ F511 : EB EX DE,HL
1353/ F512 : ED 52 SBC HL,DE
1354/ F514 : 44 LD B,H
1355/ F515 : 4D LD C,L ;BC=Laenge
1356/ F516 : E1 POP HL
1357/ F517 : 54 LD D,H
1358/ F518 : 5D LD E,L
1359/ F519 : 13 INC DE
1360/ F51A : ED B0 LDIR
1361/ F51C : C9 RET
1362/ F51D : ;
1363/ F51D : ;-------------------------------------------------------------------------------
1364/ F51D : ;Speicherbereich verschieben
1365/ F51D : ;-------------------------------------------------------------------------------
1366/ F51D : ;
1367/ F51D : CD FF F4 T_KDO: CALL PARA
1368/ F520 : AF XOR A
1369/ F521 : E5 PUSH HL
1370/ F522 : ED 52 SBC HL,DE
1371/ F524 : E1 POP HL
1372/ F525 : 38 03 JR C, TKO1 ;wenn Zieladr. groesser
1373/ F527 : ED B0 LDIR ;Vorwaertstransfer
1374/ F529 : C9 RET
1375/ F52A : 09 TKO1: ADD HL,BC
1376/ F52B : EB EX DE,HL
1377/ F52C : 09 ADD HL,BC
1378/ F52D : EB EX DE,HL
1379/ F52E : 2B DEC HL
1380/ F52F : 1B DEC DE
1381/ F530 : ED B8 LDDR ;Rueckwaertstransfer
1382/ F532 : C9 RET
1383/ F533 : ;
1384/ F533 : ;-------------------------------------------------------------------------------
1385/ F533 : ;Debugging-Funktionen
1386/ F533 : ;-------------------------------------------------------------------------------
1387/ F533 : ;
1388/ F533 : ;Register im Registerrettebereich ablegen
1389/ F533 : ;
1390/ F533 : ED 73 13 00 REGA: LD (DATA),SP
1391/ F537 : 31 61 00 LD SP,REGPC
1392/ F53A : DD E5 PUSH IX
1393/ F53C : FD E5 PUSH IY
1394/ F53E : F5 PUSH AF
1395/ F53F : C5 PUSH BC
1396/ F540 : D5 PUSH DE
1397/ F541 : E5 PUSH HL
1398/ F542 : D9 EXX
1399/ F543 : 08 EX AF, AF'
1400/ F544 : F5 PUSH AF
1401/ F545 : C5 PUSH BC
1402/ F546 : D5 PUSH DE
1403/ F547 : E5 PUSH HL
1404/ F548 : 18 15 JR REG1
1405/ F54A : ;Register aus Registerrettebereich holen
1406/ F54A : ED 73 13 00 REGH: LD (DATA),SP
1407/ F54E : 31 4D 00 LD SP,REGBR
1408/ F551 : E1 POP HL
1409/ F552 : D1 POP DE
1410/ F553 : C1 POP BC
1411/ F554 : F1 POP AF
1412/ F555 : D9 EXX
1413/ F556 : 08 EX AF, AF'
1414/ F557 : E1 POP HL
1415/ F558 : D1 POP DE
1416/ F559 : C1 POP BC
1417/ F55A : F1 POP AF
1418/ F55B : FD E1 POP IY
1419/ F55D : DD E1 POP IX
1420/ F55F : ED 7B 13 00 REG1: LD SP,(DATA)
1421/ F563 : C9 RET
1422/ F564 : ;
1423/ F564 : ;Einsprung bei Breakpoint
1424/ F564 : ;
1425/ F564 : CD 33 F5 BREAK: CALL REGA ;Register ablegen
1426/ F567 : E1 POP HL ;HL=Breakadr.+3
1427/ F568 : ED 73 63 00 LD (REGSP),SP ;SP sichern
1428/ F56C : 31 B0 00 LD SP,SYSSK ;Systemstack nutzen
1429/ F56F : 2B DEC HL
1430/ F570 : 2B DEC HL
1431/ F571 : 2B DEC HL
1432/ F572 : 22 61 00 LD (REGPC),HL ;Breakadresse
1433/ F575 : ED 5B 0B 00 LD DE,(BPADR) ;die originalen 3 Byte
1434/ F579 : 21 0D 00 LD HL,BPOPC ;Operanden zurueckbringen
1435/ F57C : 01 03 00 LD BC,3
1436/ F57F : ED B0 LDIR
1437/ F581 : CD E4 F5 CALL REGDA
1438/ F584 : C3 5F F0 JP KDO2
1439/ F587 : ;
1440/ F587 : ;-------------------------------------------------------------------------------
1441/ F587 : ;Breakpoint-Adresse setzen
1442/ F587 : ;-------------------------------------------------------------------------------
1443/ F587 : ;
1444/ F587 : 2A 1B 00 B_KDO: LD HL,(ARG1)
1445/ F58A : 22 0B 00 LD (BPADR),HL
1446/ F58D : 11 0D 00 LD DE,BPOPC ;3 Byte Operanden
1447/ F590 : 01 03 00 LD BC,3 ;retten
1448/ F593 : ED B0 LDIR
1449/ F595 : CD E4 F5 CALL REGDA ;Register anzeigen
1450/ F598 : C9 RET
1451/ F599 : ;
1452/ F599 : ;-------------------------------------------------------------------------------
1453/ F599 : ;Programm starten mit Breakpoint
1454/ F599 : ;-------------------------------------------------------------------------------
1455/ F599 : ;
1456/ F599 : 2A 0B 00 E_KDO: LD HL,(BPADR)
1457/ F59C : 36 CD LD (HL),0CDH ;CALL ...
1458/ F59E : 23 INC HL
1459/ F59F : 11 64 F5 LD DE,BREAK ;an Breakpoint Unter-
1460/ F5A2 : 73 LD (HL),E ;Brechung zu BREAK eintragen
1461/ F5A3 : 23 INC HL
1462/ F5A4 : 72 LD (HL),D
1463/ F5A5 : ;
1464/ F5A5 : ;-------------------------------------------------------------------------------
1465/ F5A5 : ;Programm starten
1466/ F5A5 : ;-------------------------------------------------------------------------------
1467/ F5A5 : ;
1468/ F5A5 : 2A 1B 00 J_KDO: LD HL,(ARG1) ;Startadresse
1469/ F5A8 : 22 61 00 LD (REGPC),HL ;zwischenspeichern
1470/ F5AB : ED 7B 63 00 LD SP,(REGSP) ;Stack generieren
1471/ F5AF : E5 PUSH HL ;Startadresse in Stack
1472/ F5B0 : C3 4A F5 JP REGH ;Register holen
1473/ F5B3 : ;und Pgm. durch RET starten
1474/ F5B3 : ;
1475/ F5B3 : ;-------------------------------------------------------------------------------
1476/ F5B3 : ;Programm nach Break fortsetzen
1477/ F5B3 : ;-------------------------------------------------------------------------------
1478/ F5B3 : ;
1479/ F5B3 : 2A 61 00 G_KDO: LD HL,(REGPC)
1480/ F5B6 : 22 1B 00 LD (ARG1),HL
1481/ F5B9 : ED 5B 0B 00 LD DE,(BPADR)
1482/ F5BD : AF XOR A ;Cy=0
1483/ F5BE : ED 52 SBC HL,DE
1484/ F5C0 : 20 D7 JR NZ, E_KDO ;wenn nicht Breakpoint
1485/ F5C2 : 18 E1 JR J_KDO ;starten
1486/ F5C4 : ;
1487/ F5C4 : ;-------------------------------------------------------------------------------
1488/ F5C4 : ;Ausgabe eines Doppelpunktes und (HL) und Leerzeichen
1489/ F5C4 : ;-------------------------------------------------------------------------------
1490/ F5C4 : ;
1491/ F5C4 : (MACRO) OUTDP: RPRST
1491/ F5C4 : E7 RST 20H
1491/ F5C5 : 02 DB 02h ; PRST
1492/ F5C6 : BA DB ':'+80H
1493/ F5C7 : ;
1494/ F5C7 : ;-------------------------------------------------------------------------------
1495/ F5C7 : ;Ausgabe hex 2 Byte Speicher (HL) und (HL-1)
1496/ F5C7 : ;und ein Leerzeichen
1497/ F5C7 : ;-------------------------------------------------------------------------------
1498/ F5C7 : ;
1499/ F5C7 : 7E OTHLS: LD A,(HL) ;hoeherwertiges Byte
1500/ F5C8 : (MACRO) ROTHX ;ausgeben
1500/ F5C8 : E7 RST 20H
1500/ F5C9 : 06 DB 06h ; OUTHX
1501/ F5CA : 2B DEC HL
1502/ F5CB : 7E LD A,(HL) ;niederwertiges Byte
1503/ F5CC : (MACRO) ROTHX ;ausgeben
1503/ F5CC : E7 RST 20H
1503/ F5CD : 06 DB 06h ; OUTHX
1504/ F5CE : 2B DEC HL ;naechsten Aufruf vorbereiten
1505/ F5CF : ;
1506/ F5CF : ;-------------------------------------------------------------------------------
1507/ F5CF : ;Ausgabe ein Leerzeichen
1508/ F5CF : ;-------------------------------------------------------------------------------
1509/ F5CF : ;
1510/ F5CF : (MACRO) OUTSP: RPRST
1510/ F5CF : E7 RST 20H
1510/ F5D0 : 02 DB 02h ; PRST
1511/ F5D1 : A0 DB ' '+80H
1512/ F5D2 : C9 RET
1513/ F5D3 : ;
1514/ F5D3 : ;-------------------------------------------------------------------------------
1515/ F5D3 : ;Registermodifizerung und -anzeige
1516/ F5D3 : ;-------------------------------------------------------------------------------
1517/ F5D3 : ;
1518/ F5D3 : ;Z-Flag-Anzeige
1519/ F5D3 : ;
1520/ F5D3 : (MACRO) AUS1: RPRST ;Ausg. "1 "
1520/ F5D3 : E7 RST 20H
1520/ F5D4 : 02 DB 02h ; PRST
1521/ F5D5 : 31 DB "1"
1522/ F5D6 : A0 DB ' '+80H
1523/ F5D7 : C9 RET
1524/ F5D8 : 20 F9 AUSX: JR NZ, AUS1
1525/ F5DA : (MACRO) RPRST ;Ausg. "0 "
1525/ F5DA : E7 RST 20H
1525/ F5DB : 02 DB 02h ; PRST
1526/ F5DC : 30 DB "0"
1527/ F5DD : A0 DB ' '+80H
1528/ F5DE : C9 RET
1529/ F5DF : ;
1530/ F5DF : ; R-Kommando
1531/ F5DF : ;
1532/ F5DF : FE 3A R_KDO: CP A, ':'
1533/ F5E1 : C2 5A F6 JP NZ, RKO3 ;wenn Modifizierung
1534/ F5E4 : ;
1535/ F5E4 : (MACRO) REGDA: RPRST ;Anzeige Breakpointadresse
1535/ F5E4 : E7 RST 20H
1535/ F5E5 : 02 DB 02h ; PRST
1536/ F5E6 : 0D DB CR
1537/ F5E7 : 42 DB "B" ;"BP"
1538/ F5E8 : D0 DB 'P'+80H
1539/ F5E9 : 21 0C 00 LD HL,BPADR+1
1540/ F5EC : (MACRO) ROTDP
1540/ F5EC : E7 RST 20H
1540/ F5ED : 0D DB 0Dh ; OUTDP
1541/ F5EE : (MACRO) RPRST ;Ausgabe Operandenfolge
1541/ F5EE : E7 RST 20H
1541/ F5EF : 02 DB 02h ; PRST
1542/ F5F0 : 42 53 DB "BS" ;am Breakpoint
1543/ F5F2 : BA DB ':'+80H
1544/ F5F3 : 06 03 LD B,3 ;3 Byte
1545/ F5F5 : 21 0D 00 LD HL,BPOPC
1546/ F5F8 : 7E RKO1: LD A,(HL)
1547/ F5F9 : (MACRO) ROTHX
1547/ F5F9 : E7 RST 20H
1547/ F5FA : 06 DB 06h ; OUTHX
1548/ F5FB : 23 INC HL
1549/ F5FC : 10 FA DJNZ RKO1
1550/ F5FE : ;
1551/ F5FE : (MACRO) RPRST ;Flaganzeige
1551/ F5FE : E7 RST 20H
1551/ F5FF : 02 DB 02h ; PRST
1552/ F600 : 20 20 20 53 20 5A DB " S Z C"
20 43
1553/ F608 : A0 DB ' '+80H
1554/ F609 : 3A 5B 00 LD A,(REGAF) ;A-Flagregister
1555/ F60C : 6F LD L,A
1556/ F60D : CB 7D BIT 7,L ;S-Flag
1557/ F60F : CD D8 F5 CALL AUSX
1558/ F612 : CB 75 BIT 6,L ;Z-Flag
1559/ F614 : CD D8 F5 CALL AUSX
1560/ F617 : CB 45 BIT 0,L ;Cy-Flag
1561/ F619 : CD D8 F5 CALL AUSX
1562/ F61C : ;
1563/ F61C : 21 64 00 LD HL,REGSP+1 ;Sonderregister-anzeige
1564/ F61F : 06 02 LD B,2 ;2 Registersaetze
1565/ F621 : (MACRO) RPRST
1565/ F621 : E7 RST 20H
1565/ F622 : 02 DB 02h ; PRST
1566/ F623 : 53 RKO2: DB "S"
1567/ F624 : D0 DB 'P'+80H
1568/ F625 : (MACRO) ROTDP
1568/ F625 : E7 RST 20H
1568/ F626 : 0D DB 0Dh ; OUTDP
1569/ F627 : (MACRO) RPRST
1569/ F627 : E7 RST 20H
1569/ F628 : 02 DB 02h ; PRST
1570/ F629 : 50 DB "P"
1571/ F62A : C3 DB 'C'+80H
1572/ F62B : (MACRO) ROTDP
1572/ F62B : E7 RST 20H
1572/ F62C : 0D DB 0Dh ; OUTDP
1573/ F62D : (MACRO) RPRST
1573/ F62D : E7 RST 20H
1573/ F62E : 02 DB 02h ; PRST
1574/ F62F : 49 DB "I"
1575/ F630 : D8 DB 'X'+80H
1576/ F631 : (MACRO) ROTDP
1576/ F631 : E7 RST 20H
1576/ F632 : 0D DB 0Dh ; OUTDP
1577/ F633 : (MACRO) RPRST
1577/ F633 : E7 RST 20H
1577/ F634 : 02 DB 02h ; PRST
1578/ F635 : 49 DB "I"
1579/ F636 : D9 DB 'Y'+80H
1580/ F637 : (MACRO) ROTDP
1580/ F637 : E7 RST 20H
1580/ F638 : 0D DB 0Dh ; OUTDP
1581/ F639 : ;
1582/ F639 : (MACRO) RKO4: RPRST ;Registersatz anzeigen
1582/ F639 : E7 RST 20H
1582/ F63A : 02 DB 02h ; PRST
1583/ F63B : 41 DB "A"
1584/ F63C : C6 DB 'F'+80H
1585/ F63D : (MACRO) ROTDP
1585/ F63D : E7 RST 20H
1585/ F63E : 0D DB 0Dh ; OUTDP
1586/ F63F : (MACRO) RPRST
1586/ F63F : E7 RST 20H
1586/ F640 : 02 DB 02h ; PRST
1587/ F641 : 42 DB "B"
1588/ F642 : C3 DB 'C'+80H
1589/ F643 : (MACRO) ROTDP
1589/ F643 : E7 RST 20H
1589/ F644 : 0D DB 0Dh ; OUTDP
1590/ F645 : (MACRO) RPRST
1590/ F645 : E7 RST 20H
1590/ F646 : 02 DB 02h ; PRST
1591/ F647 : 44 DB "D"
1592/ F648 : C5 DB 'E'+80H
1593/ F649 : (MACRO) ROTDP
1593/ F649 : E7 RST 20H
1593/ F64A : 0D DB 0Dh ; OUTDP
1594/ F64B : (MACRO) RPRST
1594/ F64B : E7 RST 20H
1594/ F64C : 02 DB 02h ; PRST
1595/ F64D : 48 DB "H"
1596/ F64E : CC DB 'L'+80H
1597/ F64F : (MACRO) ROTDP
1597/ F64F : E7 RST 20H
1597/ F650 : 0D DB 0Dh ; OUTDP
1598/ F651 : 10 E6 DJNZ RKO4
1599/ F653 : ;
1600/ F653 : 2A 2B 00 LD HL,(CUPOS) ;2. Satz als Schatten-
1601/ F656 : 2B DEC HL ;register markieren:
1602/ F657 : 36 27 LD (HL),27H ;"'"
1603/ F659 : C9 RET
1604/ F65A : ;
1605/ F65A : 01 00 04 RKO3: LD BC,0400H ;B=4, C-Registernummer
1606/ F65D : 2A 16 00 LD HL,(SOIL)
1607/ F660 : 23 INC HL
1608/ F661 : 23 INC HL
1609/ F662 : 11 23 F6 LD DE,RKO2
1610/ F665 : 1A RKO5: LD A,(DE) ;Vergleich Registereingabe
1611/ F666 : BE CP A, (HL) ;mit allen Registern
1612/ F667 : 28 17 JR Z, RKO8 ;wenn gefunden
1613/ F669 : 13 INC DE
1614/ F66A : E5 RKO6: PUSH HL
1615/ F66B : 21 05 00 LD HL,5
1616/ F66E : 19 ADD HL,DE
1617/ F66F : EB EX DE,HL ;naechster Reg.name
1618/ F670 : E1 POP HL
1619/ F671 : 0C INC C ;C-Registernummer
1620/ F672 : 10 F1 DJNZ RKO5
1621/ F674 : 06 04 LD B,4
1622/ F676 : 79 LD A,C
1623/ F677 : FE 08 CP A, 8
1624/ F679 : 20 EA JR NZ, RKO5 ;weitersuchen
1625/ F67B : F1 POP AF ;sonst falsche Eingabe
1626/ F67C : FF RST 38H ;--> zum KDO-Monitor
1627/ F67D : ;
1628/ F67D : 2B RKO7: DEC HL ;weitersuchen
1629/ F67E : 18 EA JR RKO6
1630/ F680 : ;
1631/ F680 : 13 RKO8: INC DE ;Ueberpruefen zweiter
1632/ F681 : 23 INC HL ;Buchstabe
1633/ F682 : 1A LD A,(DE)
1634/ F683 : E6 7F AND A, 7FH
1635/ F685 : BE CP A, (HL)
1636/ F686 : 20 F5 JR NZ, RKO7 ;wenn ungleich
1637/ F688 : 23 INC HL
1638/ F689 : 7E LD A,(HL) ;Schattenregister ?
1639/ F68A : FE 27 CP A, 27H ;"'"
1640/ F68C : 79 LD A,C
1641/ F68D : 20 02 JR NZ, RKO9 ;wenn nicht
1642/ F68F : C6 04 ADD A, 4
1643/ F691 : CB 27 RKO9: SLA A
1644/ F693 : 4F LD C,A
1645/ F694 : 06 00 LD B,0
1646/ F696 : 21 64 00 LD HL,REGSP+1
1647/ F699 : ED 42 SBC HL,BC
1648/ F69B : 44 LD B,H ;HL=Adresse im
1649/ F69C : 4D LD C,L ;Registerrettebereich
1650/ F69D : (MACRO) ROTHS ;Ausgabe Wert
1650/ F69D : E7 RST 20H
1650/ F69E : 0C DB 0Ch ; OTHLS
1651/ F69F : CD B3 F2 CALL INLIN ;Eingabe neuer Wert
1652/ F6A2 : ED 5B 16 00 LD DE,(SOIL)
1653/ F6A6 : CD F4 F2 CALL INHEX ;HL=neuer Wert
1654/ F6A9 : 20 04 JR NZ, RKO10 ;wenn alles ok
1655/ F6AB : 1A LD A,(DE) ;keine Zahl, vielleicht
1656/ F6AC : FE 3B CP A, ';' ;Abbruch ?
1657/ F6AE : C8 RET Z
1658/ F6AF : ;
1659/ F6AF : EB RKO10: EX DE,HL
1660/ F6B0 : C5 PUSH BC
1661/ F6B1 : E1 POP HL ;Adr. im Reg.rettebereich
1662/ F6B2 : 72 LD (HL),D ;neuen Wert eintragen
1663/ F6B3 : 2B DEC HL
1664/ F6B4 : 73 LD (HL),E
1665/ F6B5 : C3 E4 F5 JP REGDA ;Registeranzeige
1666/ F6B8 :
1667/ F6B8 : =>TRUE IF MONTYP == "Z1013_202"
1668/ F6B8 : ;
1669/ F6B8 : ;-------------------------------------------------------------------------------
1670/ F6B8 : ;Hex-Umschaltung
1671/ F6B8 : ;-------------------------------------------------------------------------------
1672/ F6B8 : ;
1673/ F6B8 : 21 48 50 H_KDO: ld hl,5048h ;Aenderung der Tastaturcodetab.
1674/ F6BB : 22 42 00 ld (LSYNC+15),hl ;Shift-Ebene 1, Zeile 2 und 3
1675/ F6BE : 21 30 38 ld hl,3830h ;vertauschen mit
1676/ F6C1 : 22 45 00 ld (LSYNC+18),hl ;Shift-Ebene 0, Zeile 2 und 3
1677/ F6C4 : C9 RET
1678/ F6C5 : ;
1679/ F6C5 : ;-------------------------------------------------------------------------------
1680/ F6C5 : ;ASCII-Umschaltung
1681/ F6C5 : ;-------------------------------------------------------------------------------
1682/ F6C5 : ;
1683/ F6C5 : 21 F4 F1 A_KDO: ld hl,MONTB+2 ;Laden der alten
1684/ F6C8 : 11 35 00 ld de,LSYNC+2 ;Tastaturcodetab.
1685/ F6CB : 01 12 00 ld bc,12h
1686/ F6CE : ED B0 ldir
1687/ F6D0 : C9 RET
1688/ F6D1 :
1689/ F6D1 : [1667] ENDIF
1690/ F6D1 : ;
1691/ F6D1 : ;-------------------------------------------------------------------------------
1692/ F6D1 : ;Window definieren
1693/ F6D1 : ;-------------------------------------------------------------------------------
1694/ F6D1 : ;
1695/ F6D1 : CD ED F6 W_KDO: CALL WKO1 ;Kontrolle Parameter
1696/ F6D4 : 38 4C JR C, WKO3 ;wenn Fehleingabe
1697/ F6D6 : 22 47 00 LD (WINDL),HL ;neue Werte eintragen
1698/ F6D9 : ED 43 49 00 LD (WINDA),BC
1699/ F6DD : 2A 1D 00 LD HL,(ARG2)
1700/ F6E0 : 22 4B 00 LD (WINDE),HL
1701/ F6E3 : 2A 2B 00 LD HL,(CUPOS) ;Cursor loeschen
1702/ F6E6 : 36 20 LD (HL),' '
1703/ F6E8 : ED 43 2B 00 LD (CUPOS),BC ;Cursor home
1704/ F6EC : C9 RET
1705/ F6ED : ;
1706/ F6ED : 3A 1C 00 WKO1: LD A,(ARG1+1)
1707/ F6F0 : FE EC CP A, hi(BWS) ;innerhalb BWS ?
1708/ F6F2 : D8 RET C ;nein
1709/ F6F3 : 3A 1B 00 LD A,(ARG1) ;WINDOW-Anfang
1710/ F6F6 : E6 E0 AND A, 0E0H ;auf Zeilenanfang stellen
1711/ F6F8 : 32 1B 00 LD (ARG1),A
1712/ F6FB : 3A 1D 00 LD A,(ARG2) ;ebenso WINDOW-Ende
1713/ F6FE : E6 E0 AND A, 0E0H ;auf Zeilenanfang stellen
1714/ F700 : 32 1D 00 LD (ARG2),A
1715/ F703 : 2A 1D 00 LD HL,(ARG2)
1716/ F706 : ED 4B 1B 00 LD BC,(ARG1)
1717/ F70A : ED 42 SBC HL,BC
1718/ F70C : D8 RET C ;Endadresse zu klein
1719/ F70D : 28 11 JR Z, WKO2 ;kein Window --> Fehler
1720/ F70F : 2B DEC HL
1721/ F710 : 3E 03 LD A,3 ;WINDOW zu gross ?
1722/ F712 : BC CP A, H
1723/ F713 : D8 RET C ;ja
1724/ F714 : 23 INC HL
1725/ F715 : 11 40 00 LD DE,2*BWSCOL
1726/ F718 : ED 52 SBC HL,DE
1727/ F71A : D8 RET C ;wenn WINDOW zu klein
1728/ F71B : 11 20 00 LD DE,BWSCOL
1729/ F71E : 19 ADD HL,DE
1730/ F71F : C9 RET
1731/ F720 : ;
1732/ F720 : 37 WKO2: SCF
1733/ F721 : C9 RET
1734/ F722 : ;
1735/ F722 : F1 WKO3: POP AF
1736/ F723 : FF RST 38H
1737/ F724 : ;
1738/ F724 : ;-------------------------------------------------------------------------------
1739/ F724 : ;NEXT-Kommando, Step-Betrieb
1740/ F724 : ;-------------------------------------------------------------------------------
1741/ F724 : ;
1742/ F724 : ;Initialisierungstabelle fuer PIO bei NEXT
1743/ F724 : ;PIO B5 => AB0 in
1744/ F724 : ;
1745/ F724 : FE NKTA: DB Lo(NINTA) ;Interruptvektor Low Byte
1746/ F725 : 97 DB 10010111b ;Interruptsteuerwort, EI, Low-aktiv, Mask folgt
1747/ F726 : DF DB 11011111b ;Interruptmaske Bit5 aktiv
1748/ F727 : ;
1749/ F727 : ;NEXT-Kommando
1750/ F727 : ;
1751/ F727 : 3E F7 N_KDO: LD A,Hi(NINTA)
1752/ F729 : ED 47 LD I,A ;Interruptvektor
1753/ F72B : F3 DI
1754/ F72C : 21 24 F7 LD HL,NKTA ;Initialisieren PIO Port B
1755/ F72F : 01 03 03 LD BC,0303H ;3 Bytes, Port PIOBC
1756/ F732 : ED B3 OTIR ;loest selbstaendig INT aus
1757/ F734 : 2A 0B 00 LD HL,(BPADR) ;Byte vor Breakadr.(!)
1758/ F737 : 2B DEC HL ;wird EI
1759/ F738 : 7E LD A,(HL)
1760/ F739 : 32 69 00 LD (NBYTE),A ;Byte retten
1761/ F73C : 36 FB LD (HL),0FBH ;Code EI einschreiben
1762/ F73E : ED 73 6A 00 LD (SPADR),SP
1763/ F742 : ED 7B 63 00 LD SP,(REGSP)
1764/ F746 : E5 PUSH HL ;Adr. mit EI-Befehl
1765/ F747 : C3 4A F5 JP REGH ;Register holen und Start
1766/ F74A : ;Die PIO generiert bereits beim OTIR eine Interruptanforderung, da dabei AB0 => 0.
1767/ F74A : ;Sobald EI und nachfolgender Befehl ausgeführt wird, wird der Interrupt angenommen
1768/ F74A : ;und nachfolgende Routine über Inhalt der Adr. NINTA angesprungen (da IM 2)
1769/ F74A : ;
1770/ F74A : ;Eingang bei Interrupt
1771/ F74A : F3 NINTR: DI
1772/ F74B : CD 33 F5 CALL REGA ;Register retten
1773/ F74E : 3E 07 LD A,00000111b ;Interrupt von PIO
1774/ F750 : D3 03 OUT PIOBC, A ;verbieten
1775/ F752 : 2A 0B 00 LD HL,(BPADR) ;EI-Befehl durch Original-
1776/ F755 : 2B DEC HL ;Byte ersetzen
1777/ F756 : 3A 69 00 LD A,(NBYTE)
1778/ F759 : 77 LD (HL),A
1779/ F75A : E1 POP HL
1780/ F75B : 22 0B 00 LD (BPADR),HL ;neue Breakadresse
1781/ F75E : 22 61 00 LD (REGPC),HL
1782/ F761 : ED 73 63 00 LD (REGSP),SP
1783/ F765 : ED 7B 6A 00 LD SP,(SPADR) ;neue Operandenfolge
1784/ F769 : 11 0D 00 LD DE,BPOPC ;umladen
1785/ F76C : 01 03 00 LD BC,3
1786/ F76F : ED B0 LDIR
1787/ F771 : 21 E4 F5 LD HL,REGDA
1788/ F774 : E5 PUSH HL
1789/ F775 : ED 4D RETI ;Sprung zur Registeranzeige
1790/ F777 : ;
1791/ F777 : ;-------------------------------------------------------------------------------
1792/ F777 : ;Speicherbereiche vergleichen
1793/ F777 : ;-------------------------------------------------------------------------------
1794/ F777 : ;
1795/ F777 : CD FF F4 C_KDO: CALL PARA ;Parameter holen
1796/ F77A : 1A CKO1: LD A,(DE)
1797/ F77B : BE CP A, (HL) ;Vergleich
1798/ F77C : 20 08 JR NZ, CKO3 ;wenn ungleich
1799/ F77E : 0B CKO2: DEC BC
1800/ F77F : 23 INC HL
1801/ F780 : 13 INC DE
1802/ F781 : 78 LD A,B
1803/ F782 : B1 OR C
1804/ F783 : C8 RET Z ;wenn alles geprueft
1805/ F784 : 18 F4 JR CKO1 ;sonst weitertesten
1806/ F786 : ;
1807/ F786 : (MACRO) CKO3: ROTHL ;1. Adresse
1807/ F786 : E7 RST 20H
1807/ F787 : 07 DB 07h ; OUTHL
1808/ F788 : (MACRO) ROTSP
1808/ F788 : E7 RST 20H
1808/ F789 : 0E DB 0Eh ; OUTSP
1809/ F78A : 7E LD A,(HL)
1810/ F78B : (MACRO) ROTHX ;1. Byte
1810/ F78B : E7 RST 20H
1810/ F78C : 06 DB 06h ; OUTHX
1811/ F78D : (MACRO) ROTSP
1811/ F78D : E7 RST 20H
1811/ F78E : 0E DB 0Eh ; OUTSP
1812/ F78F : EB EX DE,HL
1813/ F790 : (MACRO) ROTHL ;2. Adresse
1813/ F790 : E7 RST 20H
1813/ F791 : 07 DB 07h ; OUTHL
1814/ F792 : (MACRO) ROTSP
1814/ F792 : E7 RST 20H
1814/ F793 : 0E DB 0Eh ; OUTSP
1815/ F794 : EB EX DE,HL
1816/ F795 : 1A LD A,(DE)
1817/ F796 : (MACRO) ROTHX ;2. Byte
1817/ F796 : E7 RST 20H
1817/ F797 : 06 DB 06h ; OUTHX
1818/ F798 : (MACRO) RPRST
1818/ F798 : E7 RST 20H
1818/ F799 : 02 DB 02h ; PRST
1819/ F79A : 8D DB CR+80H
1820/ F79B : (MACRO) RINCH ;warten auf Tastendruck
1820/ F79B : E7 RST 20H
1820/ F79C : 01 DB 01h ; INCH
1821/ F79D : FE 0D CP A, CR
1822/ F79F : C0 RET NZ ;Abbruch wenn <> >ENTER<
1823/ F7A0 : 18 DC JR CKO2 ;sonst weitertesten
1824/ F7A2 :
1825/ F7A2 : =>TRUE IF MONTYP <> "Z1013_A2"
1826/ F7A2 : ;
1827/ F7A2 : ;-------------------------------------------------------------------------------
1828/ F7A2 : ;Bytefolge suchen
1829/ F7A2 : ;-------------------------------------------------------------------------------
1830/ F7A2 : ;
1831/ F7A2 : ED 5B 25 00 F_KDO: LD DE,(SOIL2)
1832/ F7A6 : 1B DEC DE
1833/ F7A7 : 1B DEC DE
1834/ F7A8 : ED 53 23 00 LD (ARG3),DE ;DE = Beginn Bytefolge
1835/ F7AC : ED 4B 1B 00 LD BC,(ARG1) ;Suchadresse
1836/ F7B0 : ED 5B 23 00 FKO1: LD DE,(ARG3)
1837/ F7B4 : (MACRO) RINHX ;L = 1. Suchbyte
1837/ F7B4 : E7 RST 20H
1837/ F7B5 : 03 DB 03h ; INHEX
1838/ F7B6 : 0A FKO2: LD A,(BC)
1839/ F7B7 : BD CP A, L ;L = Suchbyte
1840/ F7B8 : 28 07 JR Z, FKO3 ;wenn Bytes gleich
1841/ F7BA : 03 INC BC ;sonst naechste Suchadresse
1842/ F7BB : 78 LD A,B
1843/ F7BC : B1 OR C
1844/ F7BD : 28 32 JR Z, FKO7 ;wenn Speicherende erreicht
1845/ F7BF : 18 F5 JR FKO2 ;weitersuchen
1846/ F7C1 : ;
1847/ F7C1 : C5 FKO3: PUSH BC
1848/ F7C2 : D5 PUSH DE
1849/ F7C3 : ED 5B 1D 00 LD DE,(ARG2) ;Suchbyteanzahl
1850/ F7C7 : 1B DEC DE
1851/ F7C8 : ED 53 6C 00 LD (FBANZ),DE ;Zwischenspeicher fuer Anzahl
1852/ F7CC : 03 INC BC
1853/ F7CD : 7A FKO4: LD A,D
1854/ F7CE : B3 OR E ;alle Suchbytes verglichen?
1855/ F7CF : D1 POP DE
1856/ F7D0 : 28 13 JR Z, FKO5 ;wenn Bytefolge gefunden
1857/ F7D2 : (MACRO) RINHX ;naechstes Suchbyte holen
1857/ F7D2 : E7 RST 20H
1857/ F7D3 : 03 DB 03h ; INHEX
1858/ F7D4 : 0A LD A,(BC)
1859/ F7D5 : BD CP A, L
1860/ F7D6 : 20 15 JR NZ, FKO6 ;wenn Folge nicht gefunden
1861/ F7D8 : D5 PUSH DE
1862/ F7D9 : ED 5B 6C 00 LD DE,(FBANZ) ;1 Byte weniger zu vergleichen
1863/ F7DD : 1B DEC DE
1864/ F7DE : ED 53 6C 00 LD (FBANZ),DE
1865/ F7E2 : 03 INC BC
1866/ F7E3 : 18 E8 JR FKO4 ;weitervergleichen
1867/ F7E5 : ;Bytefolge gefunden
1868/ F7E5 : C1 FKO5: POP BC
1869/ F7E6 : ED 43 1B 00 LD (ARG1),BC
1870/ F7EA : C3 25 F3 JP MEM ;Speicher modifizieren
1871/ F7ED : ;
1872/ F7ED : C1 FKO6: POP BC
1873/ F7EE : 03 INC BC
1874/ F7EF : 18 BF JR FKO1
1875/ F7F1 : ;Bytefolge nirgends gefunden
1876/ F7F1 : (MACRO) FKO7: RPRST
1876/ F7F1 : E7 RST 20H
1876/ F7F2 : 02 DB 02h ; PRST
1877/ F7F3 : 4E 4F 54 20 46 4F DB "NOT FOUND"
55 4E 44
1878/ F7FC : 8D DB CR+80H
1879/ F7FD : C9 RET
1880/ F7FE :
1881/ F7FE : [1825] ENDIF
1882/ F7FE :
1883/ F7FE : =>FALSE IF MONTYP == "Z1013_A2"
1884/ F7FE : ;
1885/ F7FE : ;-------------------------------------------------------------------------------
1886/ F7FE : ; Tastaturcodetabelle
1887/ F7FE : ;-------------------------------------------------------------------------------
1888/ F7FE : ;
1889/ F7FE : keytab:
1890/ F7FE : ; spalte 0
1891/ F7FE : db 31h ; 1
1892/ F7FE : db 51h ; Q
1893/ F7FE : db 41h ; A
1894/ F7FE : db 59h ; Y
1895/ F7FE : db 32h ; 2
1896/ F7FE : db 57h ; W
1897/ F7FE : db 53h ; S
1898/ F7FE : db 58h ; X
1899/ F7FE : ; Spalte 1
1900/ F7FE : db 33h ; 3
1901/ F7FE : db 45h ; E
1902/ F7FE : db 44h ; D
1903/ F7FE : db 43h ; C
1904/ F7FE : db 34h ; 4
1905/ F7FE : db 52h ; R
1906/ F7FE : db 46h ; F
1907/ F7FE : db 56h ; V
1908/ F7FE : ; Spalte 2
1909/ F7FE : db 35h ; 5
1910/ F7FE : db 54h ; T
1911/ F7FE : db 47h ; G
1912/ F7FE : db 42h ; B
1913/ F7FE : db 36h ; 6
1914/ F7FE : db 5Ah ; Z
1915/ F7FE : db 48h ; H
1916/ F7FE : db 4Eh ; N
1917/ F7FE : ; Spalte 3
1918/ F7FE : db 37h ; 7
1919/ F7FE : db 55h ; U
1920/ F7FE : db 4Ah ; J
1921/ F7FE : db 4Dh ; M
1922/ F7FE : db 38h ; 8
1923/ F7FE : db 49h ; I
1924/ F7FE : db 4Bh ; K
1925/ F7FE : db 2Ch ; ,
1926/ F7FE : ; Spalte 4
1927/ F7FE : db 39h ; 9
1928/ F7FE : db 4Fh ; O
1929/ F7FE : db 4Ch ; L
1930/ F7FE : db 2Eh ; .
1931/ F7FE : db 30h ; 0
1932/ F7FE : db 50h ; P
1933/ F7FE : db 2Bh ; +
1934/ F7FE : db 2Fh ; /
1935/ F7FE : ; Spalte 5
1936/ F7FE : db 2Dh ; -
1937/ F7FE : db 40h ; @
1938/ F7FE : db 2Ah ; *
1939/ F7FE : db 5Eh ; ^
1940/ F7FE : db 5Bh ; [
1941/ F7FE : db 5Dh ; ]
1942/ F7FE : db 5Ch ;
1943/ F7FE : db 5Fh ; _
1944/ F7FE : ; Spalte 6
1945/ F7FE : tab2: db 0 ; Graph E/A
1946/ F7FE : db 0Dh ; ENT
1947/ F7FE : db 8 ; Cu. links
1948/ F7FE : db 9 ; Cu. rechts
1949/ F7FE : db 20h ; Leerz.
1950/ F7FE : db 0 ; CTRL
1951/ F7FE : db 0Bh ; Cu. hoch
1952/ F7FE : db 0Ah ; Cu. runter
1953/ F7FE :
1954/ F7FE : [1883] ENDIF
1955/ F7FE :
1956/ F7FE : ;
1957/ F7FE : ;-------------------------------------------------------------------------------
1958/ F7FE : ;Interrupttabelle fuer Break
1959/ F7FE : ;-------------------------------------------------------------------------------
1960/ F7FE : ;
1961/ F7FE :
1962/ F7FE : align 2
1963/ F7FE : 4A F7 NINTA: DW NINTR
1964/ F800 :
1965/ F800 : END