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