;Die Original-ASM-Texte wurden um Zeilennummern, Adressen und Operationscode ergaenzt. ;Die Zeilennummern stimmen nicht immer, es gibt Spruenge, z.B. wegen DEFB, DEFM, DEFW ;und der Kommentare, die ja beim Reassemblieren fehlen. ;Unterschiedliche Schreibweisen der einzelnen Bearbeiter wurden vereinheitlicht. ;Die Namen der Originaldateien wurden, wie in der naechsten Zeile zu sehen, ;hinter den Doppelkreuzen angegeben. ; (Ulrich Zander im Juli 2013) ; ; ############################################### BICDSK.ASM ab hier (UZ) ; ;************************************************ ;----------------------------------------------- ; Diskettenerweiterung Disk-BASIC ; Stand: 25.05.1989 / Dr.Busch ;----------------------------------------------- GLOBAL BBDOSX ;----------------------------------------------- ; externals aus BASIC und ROM-BIOS ;----------------------------------------------- external ADTDE external AUSGE external AUZN external BYTAE1 external BYTAE2 external BYTAE3 external CHR2 external CLOSE1 external CLOSEA external CURSRD external DATNA external DIM1 external ERALOP external ERBFNA external ERBFNR external ERFC external ERFIOV external ERINPE external ERNTFO external ERNTOP external ERRO external ERRO3 external ERSN external ERTM external FCBAD external FCBBE5 external FN7 external GERDS external HAUZN external INIBA external INIT2 external INTPA2 external KOM7 external LSTRE1 external LSTRES external MOERR0 external OPEN4 external OUTZK external PTNEW external REN10 external RUNMOD external SNAL1 external TCHAR0 external TSTZK external TYPTS0 external WLAZK1 external ZKUP18 external ZKUP2 external NLDIRT external AC1HLT external HLAC1T external CINT1 external POS1 external POS2 external LINP14 external INTDE2 ;----------------------------------------------- ; externals aus ROM-BIOS ;----------------------------------------------- LREB: EQU 0CH CHARO: EQU 18H L3CALL: EQU 1CH CPREG: EQU 20H BANKUM: EQU 24H L2CALL: EQU 30H JIBCDE: EQU 59H JOBCDE: EQU 5CH SSCR0: EQU 6CH JBREAK: EQU 0BDH JKEYOF: EQU 0CCH JLTXTM: EQU 0D2H DBAABF: EQU 138H DTMABF: EQU 141H JL1CAL: EQU 159H REZEMU: EQU 2DH WRZEMU: EQU 177H REMASK: EQU 198H external CURSS external CURSRD external INKEY RDRIPU OUTASC PRTOUT external PRSTA ;----------------------------------------------- ; externals aus ROM-BDOS ;----------------------------------------------- external BFLINI external BICOP external FORMA0 external SELDSK external HOME external SETTRK external SETSEC external BSETDMA external SECTRAN external READ external WRITE ;------------------------------------------------------------------------------------- ;Z80 DISASSEMBLER LISTING ;Line Addr Opcodes Label Instruction Comment ;------------------------------------------------------------------------------------- 0001 4000 41 42 DEFM 'AB' ;Kennzeichen 0003 4002 17 40 DEFW DSKINI ;Adr. Initialisierung 0005 4004 5B 43 DEFW CALLUP ;Eintritt CALL 0007 4006 00 00 DEFW 0 ;Eintritt Aufruf Zusatzgeraete 0009 4008 00 00 DEFW 0 ;RAM-Reservierung 0011 400A 00 00 DEFW 0 0013 400C 00 00 DEFW 0 0015 400E 00 00 DEFW 0 ;--------------------------------------------------- 0017 4010 7E DCHARO: LD A,(HL) 0018 4011 A7 AND A 0019 4012 C8 RET Z 0020 4013 DF RST CHARO 0021 4014 23 INC HL 0022 4015 18 F9 JR DCHARO ; 0023 4017 F3 DSKINI: DI ;Initialisierung I 0024 4018 3E 01 LD A,1 ;dse-ton ein 0025 401A D3 70 OUT (70H),A 0026 401C 3A 91 FC LD A,(HLPBNK) 0027 401F A7 AND A 0028 4020 F8 RET M ;disk-ROM nicht da ! ; 0029 4021 3E 06 LD A,06H 0030 4023 CD 41 01 CALL DTMABF ;direkte Tastenabfrage 0031 4026 F3 DI 0032 4027 0F RRCA 0033 4028 38 0D JR C,DSKIN1 ;bit 0,a ? (kein shift) 0034 402A 3E 07 LD A,07H ;nein (shift) 0035 402C DF RST CHARO ;BEEP 0036 402D 3E FF LD A,0FFH ;disk-ROM aus 0037 402F 32 91 FC LD (HLPBNK),A 0038 4032 AF XOR A ;RBASIC 0039 4033 32 91 FF LD (BSKENN),A 0040 4036 C9 RET ; Initialisierung disk-ROM 0041 4037 21 35 F2 DSKIN1: LD HL,LREUP 0042 403A 11 80 E8 LD DE,ARAMDS ;Anfang disk-RAM 0043 403D A7 AND A 0044 403E ED 52 SBC HL,DE 0045 4040 D4 CB 42 CALL NC,MEMNEU ;Speichergrenzen neu 0046 4043 D8 RET C ;reicht nicht 0047 4044 2A B6 FB LD HL,(EOFRM1) 0048 4047 22 B4 FB LD (EOFRAM),HL 0049 404A E5 PUSH HL 0050 404B 23 INC HL 0051 404C 22 B8 FB LD (SYSANF),HL ;Anfang Systembereich 0052 404F 21 B5 09 LD HL,LREUP-ARAMDS 0053 4052 01 80 E8 LD BC,ARAMDS 0054 4055 AF DSKIN4: XOR A ;disk-RAM initialisieren 0055 4056 02 LD (BC),A 0056 4057 03 INC BC 0057 4058 2B DEC HL 0058 4059 7D LD A,L 0059 405A B4 OR H 0060 405B 20 F8 JR NZ,DSKIN4 0061 405D 22 71 F5 LD (AUTOZN),HL ;= 0 0062 4060 3E 06 LD A,06H 0063 4062 CD 41 01 CALL DTMABF ;dir. Tastenabfrage 0064 4065 E6 02 AND 02H ;2 /CTRL, 0 CTRL 0065 4067 32 8A E8 LD (TAST),A 0066 406A 3E 07 LD A,07H 0067 406C DF RST CHARO ;BEEP 0068 406D 21 81 40 LD HL,XNEW1A 0069 4070 11 FB FE LD DE,XNEW1 ;Initialisierung II initialisieren 0070 4073 01 05 00 LD BC,0005H 0071 4076 ED B0 LDIR 0072 4078 CD 53 43 CALL BANK? 0073 407B 32 FC FE LD (XNEW1+1),A ;richtige Bank eintragen 0074 407E D1 POP DE 0075 407F 18 05 JR DSKINA 0076 4081 F7 XNEW1A: RST L2CALL 0077 4082 00 DEFB 0 0078 4083 92 40 DEFW DINIT ; 0079 0080 4085 C9 RET ; 0081 4086 3A 8A E8 DSKINA: LD A,(TAST) 0082 4089 A7 AND A 0083 408A CD 34 6A CALL BFLINI ;Treiberinitialisierung 0084 408D 21 91 FC LD HL,HLPBNK ;Init II durch 0085 4090 34 INC (HL) 0086 4091 C9 RET ;--------------------------------------------------------- 0087 4092 21 FB FE DINIT: LD HL,XNEW1 ;Initialisierung II 0088 4095 06 05 LD B,05H ;Aufruf aus Anlauf RBASIC 0089 4097 36 C9 DINIT1: LD (HL),0C9h 0090 4099 23 INC HL ;Initialisierung loeschen 0091 409A 10 FB DJNZ DINIT1 0092 409C 21 91 FC LD HL,HLPBNK 0093 409F AF XOR A 0094 40A0 BE CP (HL) 0095 40A1 77 LD (HL),A ;HLPBNK loesch (Init I,II durch) 0096 40A2 F0 RET P ;kein Init I, zurueck 0097 40A3 CD 53 43 CALL BANK? 0098 40A6 32 8D E8 LD (AKTBNK),A 0099 40A9 CD 38 01 CALL DBAABF ;dir. Bankabfrage 0100 40AC E6 0C AND 0CH ;page 1 0101 40AE 47 LD B,A 0102 40AF 3A 26 F7 LD A,(SLCTRL) 0103 40B2 E6 F3 AND 0F3H 0104 40B4 B0 OR B 0105 40B5 32 26 F7 LD (SLCTRL),a ;akt. slot eintragen 0106 40B8 3E 0D LD A,0DH ;Ende LINBUF setzen 0107 40BA 32 21 F4 LD (LINBUF+13CH),A 0108 40BD 3A 8A E8 LD A,(TAST) 0109 40C0 A7 AND A 0110 40C1 CD D2 56 CALL INITBB ;BDOS initialisieren 0111 40C4 CD 80 42 CALL BIOSLI ;BIOS Sprungleiste init. 0112 40C7 0E 0D LD C,13 ;reset disk 0113 40C9 CD 9A E8 CALL BBDOS 0114 40CC 32 8C E8 LD (RESDOK),A 0115 40CF CD CA 41 CALL PATCHI ;patches initialisieren 0116 40D2 0E 00 LD C,00H 0117 40D4 31 00 C2 LD SP,0C200H ; 0118 40D7 21 65 41 LD HL,SCPSYS ;SCPX5105.SYS da (Systemdisk) ? 0119 40DA CD 8C 41 CALL FILDA? 0120 40DD 20 03 JR NZ,DSKBAS ;nein ; 0121 40DF CD 65 FC CALL INSCPX ;Initialisierung SCPX ; 0122 40E2 3E 01 DSKBAS: LD A,1 ;Kennz. Disk-BASIC 0123 40E4 32 91 FF LD (BSKENN),A 0124 40E7 21 70 41 LD HL,AUTEXB ;AUTOEXEC.BAS da ? 0125 40EA CD 8C 41 CALL FILDA? 0126 40ED F5 PUSH AF 0127 40EE 21 7B 41 LD HL,RAUTEX ;Kommando laden 0128 40F1 11 2E F4 LD DE,EDIBUF+0Ah 0129 40F4 01 11 00 LD BC,17 0130 40F7 ED B0 LDIR 0131 40F9 F1 POP AF 0132 40FA 28 04 JR Z,DSKBA1 ;ja 0133 40FC AF XOR A ;nein 0134 40FD 32 31 F4 LD (EDIBUF+0Dh),A ;Kommando loeschen 0135 4100 31 00 C2 DSKBA1: LD SP,0C200H 0136 4103 2A B2 FB LD HL,(ANFRAM) 0137 4106 AF XOR A 0138 4107 77 LD (HL),A 0139 4108 23 INC HL 0140 4109 22 3C F5 LD (PSTBEG),HL 0141 410C 77 LD (HL),A 0142 410D 23 INC HL 0143 410E 77 LD (HL),A 0144 410F 23 INC HL 0145 4110 22 88 F5 LD (SVARPT),HL 0146 4113 21 FF FF LD HL,0FFFFH 0147 4116 22 E2 F2 LD (ACTZN),HL 0148 4119 3A 25 F7 LD A,(MAXFIL) 0149 411C CD B0 41 CALL MXFIUP 0150 411F 60 LD H,B 0151 4120 69 LD L,C 0152 4121 CD CB 42 CALL MEMNEU 0153 4124 ED 7B 3A F5 LD SP,(STDPTR) 0154 4128 DD 21 9E 7D LD IX,INIBA 0155 412C CD 59 01 CALL JL1CAL ;Meldung RBASIC 0156 412F CD 44 43 CALL OUZKSP ;Meldung Disk RBASIC ; 0157 4132 0D DEFB 0DH 0158 4133 0A DEFB 0AH 0159 4134 52 42 41 53 49 43 20 44 69 73 6B 20 56 65 72 73 69 6F 6E 20 32 2E 30 30 DEFM 'RBASIC Disk Version 2.00' 0178 414C 0D DEFB 0DH 0179 414D 0A DEFB 0AH 0180 414E 00 DEFB 0 ; 0181 414F 21 6E 41 LD HL,KOM7 0182 4152 E5 PUSH HL 0183 4153 21 2D F4 LD HL,EDIBUF+9 0184 4156 E5 PUSH HL 0185 4157 21 64 F4 LD HL,EDIBUF+40H 0186 415A E5 PUSH HL 0187 415B 36 E1 LD (HL),0E1H ;pop hl 0188 415D 23 INC HL 0189 415E 36 C9 LD (HL),0C9H ;ret 0190 4160 26 40 LD H,40H ;page address 0191 4162 C3 24 00 JP BANKUM ;ret --> KOM7, hl=Kommando ; 0192 4165 53 43 50 58 35 31 30 35 53 59 53 SCPSYS: DEFM 'SCPX5105SYS' ; 0193-0200 0201 4170 41 55 54 4F 45 58 45 43 42 41 53 AUTEXB: DEFM 'AUTOEXECBAS' ; 0202-0210 0211 417A 53 52 55 4E 22 41 55 54 4F 45 58 45 43 2E 42 41 53 RAUTEX: DEFM 'RUN"AUTOEXEC.BAS' ; 0212-0224 0225 418B 00 DEFB 0 ; 0226 418C 3A 8C E8 FILDA?: LD A,(RESDOK) ;reset disk durch ? 0227 418F A7 AND A 0228 4190 28 02 JR Z,FILDA0 ;ja (RESDOK=0) 0229 4192 3C INC A ; (oder 0FFh) 0230 4193 C0 RET NZ ;nein (RESDOK=0FEh) 0231 4194 AF FILDA0: XOR A 0232 4195 11 3F F4 LD DE,EDIBUF+1BH ;fcb erstellen 0233 4198 D5 PUSH DE ;file name hl-> 0234 4199 06 24 LD B,24H ;fcb-Laenge 0235 419B 12 FILDA1: LD (DE),A 0236 419C 13 INC DE 0237 419D 10 FC DJNZ FILDA1 0238 419F D1 POP DE 0239 41A0 D5 PUSH DE 0240 41A1 13 INC DE 0241 41A2 01 0B 00 LD BC,000BH 0242 41A5 ED B0 LDIR ;file name laden 0243 41A7 D1 POP DE ;fcb adr. 0244 41A8 0E 0F LD C,15 ;open file 0245 41AA CD 69 53 CALL BBDOSX 0246 41AD E6 FC AND 0FCH ;Fehler ? 0247 41AF C9 RET ; 0248 41B0 3C MXFIUP: INC A 0249 41B1 4F LD C,A 0250 41B2 11 A4 00 LD DE,00A4H ;Laenge bdos-fcb 0251 41B5 62 LD H,D 0252 41B6 6A LD L,D 0253 41B7 42 LD B,D 0254 41B8 CD D2 45 CALL MLT16 0255 41BB 2A B4 FB LD HL,(EOFRAM) 0256 41BE A7 AND A 0257 41BF ED 42 SBC HL,BC 0258 41C1 22 8E E8 LD (ADFCB0),HL 0259 41C4 C9 RET ; ;---------------------------------------------- 0260 41C5 33 GERDSX: INC SP 0261 41C6 33 INC SP 0262 41C7 C3 22 71 JP GERDS ;------------------------------- 0263 41CA 21 C5 41 PATCHI: LD HL,GERDSX ;Initialisierung patches 0264 41CD 11 F1 FE LD DE,XGERDS 0265 41D0 01 05 00 LD BC,0005H ;zuerst XGERDS 0266 41D3 ED B0 LDIR 0267 41D5 21 F2 41 LD HL,PATCHT ;Adresstabelle 0268 41D8 5E PATCH1: LD E,(HL) 0269 41D9 23 INC HL 0270 41DA 56 LD D,(HL) 0271 41DB 23 INC HL 0272 41DC 7B LD A,E 0273 41DD B2 OR D 0274 41DE C8 RET Z ;fertig 0275 41DF EB EX DE,HL 0276 41E0 36 F7 LD (HL),0F7H ;rst L2CALL 0277 41E2 23 INC HL 0278 41E3 3A 8D E8 LD A,(AKTBNK) 0279 41E6 77 LD (HL),A ;Bank 0280 41E7 23 INC HL 0281 41E8 EB EX DE,HL 0282 41E9 ED A0 LDI ;Adresse 0283 41EB ED A0 LDI 0284 41ED 3E C9 LD A,0C9H ;ret 0285 41EF 12 LD (DE),A 0286 41F0 18 E6 JR PATCH1 ;-> weiter ; 0287 41F2 42 FE PATCHT: DEFW XNAME 0288 41F4 44 50 DEFW NAME 0289 41F6 47 FE DEFW XKILL 0290 41F8 02 50 DEFW KILL 0291 41FA 4C FE DEFW XCOPY 0292 41FC 93 53 DEFW COPY 0293 41FE 65 FE DEFW XLSET 0294 4200 AA 4D DEFW LSET 0295 4202 6A FE DEFW XRSET 0296 4204 A9 4D DEFW RSET 0297 4206 6F FE DEFW XFIELD 0298 4208 21 4D DEFW FIELD 0299 420A 74 FE DEFW XMKI 0300 420C 82 4E DEFW MKI 0301 420E 79 FE DEFW XMKS 0302 4210 85 4E DEFW MKS 0303 4212 7E FE DEFW XMKD 0304 4214 88 4E DEFW MKD 0305 4216 83 FE DEFW XCVI 0306 4218 AA 4E DEFW CVI 0307 421A 88 FE DEFW XCVS 0308 421C AD 4E DEFW CVS 0309 421E 8D FE DEFW XCVD 0310 4220 B0 4E DEFW CVD 0311 4222 92 FE DEFW XZUGDS 0312 4224 6F 44 DEFW ZUGDS 0313 4226 97 FE DEFW XOPDS 0314 4228 7E 44 DEFW OPDS 0315 422A 9C FE DEFW XOPERW 0316 422C BE 44 DEFW OPERW 0317 422E A1 FE DEFW XCLODS 0318 4230 65 47 DEFW CLODS 0319 4232 A6 FE DEFW XBLOAD 0320 4234 BA 49 DEFW DBLOAD 0321 4236 AB FE DEFW XBSAVE 0322 4238 52 48 DEFW DBSAVE 0323 423A B0 FE DEFW XFILSA 0324 423C A4 47 DEFW FILSA 0325 423E B5 FE DEFW XFILLO 0326 4240 D5 47 DEFW FILLO 0327 4242 BA FE DEFW XFILES 0328 4244 EF 4E DEFW FILES 0329 4246 BF FE DEFW XFILGE 0330 4248 2A 4B DEFW FILGE 0331 424A C4 FE DEFW XFILLS 0332 424C E2 46 DEFW FILLS 0333 424E C9 FE DEFW XZMODS 0334 4250 14 46 DEFW ZMODS 0335 4252 CE FE DEFW XLOC 0336 4254 4B 51 DEFW LOC 0337 4256 D3 FE DEFW XLOF 0338 4258 4C 51 DEFW LOF 0339 425A D8 FE DEFW XEOF 0340 425C CE 4E DEFW EOF 0341 425E E2 FE DEFW XLINPD 0342 4260 CF 46 DEFW LINPD 0343 4262 E7 FE DEFW XFILDS 0344 4264 11 53 DEFW FILDS 0345 4266 EC FE DEFW XGERST 0346 4268 55 53 DEFW GERST 0347 426A 0F FF DEFW XERR2 0348 426C D8 51 DEFW ERR2 0349 426E 56 FE DEFW XRESET 0350 4270 24 50 DEFW RESET 0351 4272 60 FE DEFW XMXFIL 0352 4274 B5 43 DEFW MXFIL 0353 4276 5B FE DEFW XCLEAR 0354 4278 BC 43 DEFW CLEARD 0355 427A 80 E8 DEFW JPBDOS 0356 427C 9A E8 DEFW BBDOS 0357 427E 00 00 DEFW 0 ; 0358-0392 ;---------------------------------------------------- 0393 4280 21 8C 42 BIOSLI: LD HL,BIODSL ;BIOS-DSK-Sprungleiste 0394 4283 11 00 FD LD DE,BIORSL ;Sprungleiste im RAM 0395 4286 01 3F 00 LD BC,63 ;21 BIOS-Rufe 0396 4289 ED B0 LDIR 0397 428B C9 RET ; 0398 428C C3 40 47 BIODSL: JP ERFC ;CBOOT 0399 428F C3 40 47 JP ERFC ;WBOOT 0400 4292 C3 E5 05 JP INKEY ;CONST 0401 4295 C3 85 0A JP RDRIPU ;CONIN 0402 4298 C3 EA 13 JP OUTASC ;CONOUT 0403 429B C3 7C 03 JP PRTOUT ;LIST 0404 429E C3 40 47 JP ERFC ;PUNCH 0405 42A1 C3 40 47 JP ERFC ;READER 0406 42A4 C3 15 66 JP HOME 0407 42A7 C3 20 64 JP SELDSK 0408 42AA C3 23 66 JP SETTRK 0409 42AD C3 28 66 JP SETSEC 0410 42B0 C3 2D 66 JP BSETDMA 0411 42B3 C3 A1 66 JP READ 0412 42B6 C3 36 66 JP WRITE 0413 42B9 C3 BD 02 JP PRSTA ;LISTST 0414 42BC C3 32 66 JP SECTRAN 0415 42BF C3 40 47 JP ERFC ;CONOST 0416 42C2 C3 40 47 JP ERFC ;AUXIST 0417 42C5 C3 40 47 JP ERFC ;AUXOST 0418 42C8 C3 40 47 JP ERFC ;DEVTBL ;---------------------------------------------------- 0419 42CB 7D MEMNEU: LD A,L 0420 42CC B4 OR H 0421 42CD C8 RET Z 0422 42CE AF XOR A 0423 42CF 95 SUB L 0424 42D0 6F LD L,A 0425 42D1 3E 00 LD A,00H 0426 42D3 9C SBC A,H 0427 42D4 67 LD H,A 0428 42D5 4D LD C,L 0429 42D6 44 LD B,H 0430 42D7 39 ADD HL,SP ;hl = sp - hl 0431 42D8 3F CCF 0432 42D9 D8 RET C 0433 42DA ED 5B B2 FB LD DE,(ANFRAM) 0434 42DE ED 52 SBC HL,DE 0435 42E0 D8 RET C 0436 42E1 7C LD A,H 0437 42E2 FE 02 CP 02H 0438 42E4 D8 RET C 0439 42E5 C5 PUSH BC 0440 42E6 21 00 00 LD HL,0000H 0441 42E9 39 ADD HL,SP 0442 42EA 5D LD E,L 0443 42EB 54 LD D,H 0444 42EC 09 ADD HL,BC 0445 42ED E5 PUSH HL 0446 42EE 2A 3A F5 LD HL,(STDPTR) 0447 42F1 A7 AND A 0448 42F2 ED 52 SBC HL,DE 0449 42F4 4D LD C,L 0450 42F5 44 LD B,H 0451 42F6 03 INC BC 0452 42F7 E1 POP HL 0453 42F8 F9 LD SP,HL 0454 42F9 EB EX DE,HL 0455 42FA ED B0 LDIR 0456 42FC C1 POP BC 0457 42FD 2A B4 FB LD HL,(EOFRAM) 0458 4300 09 ADD HL,BC 0459 4301 22 B6 FB LD (EOFRM1),HL 0460 4304 11 D4 FD LD DE,0FDD4H ;-2*(114h+2), BASIC-fcb + Adr. 0461 4307 19 ADD HL,DE 0462 4308 22 27 F7 LD (ATBFCB),hl 0463 430B EB EX DE,HL 0464 430C 2A 38 F5 LD HL,(RAMTOP) 0465 430F 09 ADD HL,BC 0466 4310 22 38 F5 LD (RAMTOP),HL 0467 4313 2A 29 F7 LD HL,(ACTDMA) 0468 4316 09 ADD HL,BC 0469 4317 22 29 F7 LD (ACTDMA),hl 0470 431A 2A 3A F5 LD HL,(STDPTR) 0471 431D 09 ADD HL,BC 0472 431E 22 3A F5 LD (STDPTR),HL 0473 4321 2B DEC HL 0474 4322 2B DEC HL 0475 4323 22 77 F5 LD (HELPSP),HL 0476 4326 6B LD L,E 0477 4327 62 LD H,D 0478 4328 23 INC HL 0479 4329 23 INC HL 0480 432A 23 INC HL 0481 432B 23 INC HL 0482 432C 3A 25 F7 LD A,(MAXFIL) ;Anzahl fcb's 0483 432F 3C INC A 0484 4330 EB MEMNE2: EX DE,HL 0485 4331 73 LD (HL),E ;ATBFCB fuellen 0486 4332 23 INC HL 0487 4333 72 LD (HL),D 0488 4334 23 INC HL 0489 4335 EB EX DE,HL ;fcb's initialisieren 0490 4336 01 07 00 LD BC,0007H 0491 4339 70 LD (HL),B 0492 433A 09 ADD HL,BC 0493 433B 70 LD (HL),B 0494 433C 01 0D 01 LD BC,010DH 0495 433F 09 ADD HL,BC 0496 4340 3D DEC A 0497 4341 20 ED JR NZ,MEMNE2 0498 4343 C9 RET ; 0499 4344 E3 OUZKSP: EX (SP),HL 0500 4345 CD 4A 43 CALL STROUT 0501 4348 E3 EX (SP),HL 0502 4349 C9 RET ; 0503 434A 7E STROUT: LD A,(HL) 0504 434B 23 INC HL 0505 434C A7 AND A 0506 434D C8 RET Z 0507 434E CD 0C FD CALL ICONOUT 0508 4351 18 F7 JR STROUT ; 0509 4353 CD 38 01 BANK?: CALL DBAABF 0510 4356 0F RRCA 0511 4357 0F RRCA 0512 4358 E6 03 AND 03H 0513 435A C9 RET ; 0514 435B 3A 92 FE CALLUP: LD A,(XZUGDS) 0515 435E FE C9 CP 0C9H 0516 4360 37 SCF 0517 4361 C8 RET Z 0518 4362 E5 PUSH HL 0519 4363 CD 53 43 CALL BANK? 0520 4366 21 8D E8 LD HL,AKTBNK 0521 4369 BE CP (HL) 0522 436A 20 26 JR NZ,CALLU5 0523 436C 21 95 43 LD HL,CALLTB 0524 436F 11 81 FC CALLU1: LD DE,NACALL 0525 4372 1A CALLU2: LD A,(DE) 0526 4373 BE CP (HL) 0527 4374 13 INC DE 0528 4375 23 INC HL 0529 4376 20 10 JR NZ,CALLU4 0530 4378 A7 AND A 0531 4379 20 F7 JR NZ,CALLU2 0532 437B 7E LD A,(HL) 0533 437C 23 L0040: INC HL 0534 437D 66 LD H,(HL) 0535 437E 6F LD L,A 0536 437F E3 EX (SP),HL 0537 4380 CD C1 52 CALL DTCHAR 0538 4383 37 SCF 0539 4384 3F CCF 0540 4385 C9 RET 0541 4386 23 CALLU3: INC HL 0542 4387 7E LD A,(HL) 0543 4388 A7 CALLU4: AND A 0544 4389 20 FB JR NZ,CALLU3 0545 438B 23 INC HL 0546 438C 23 INC HL 0547 438D 23 INC HL 0548 438E 7E LD A,(HL) 0549 438F A7 AND A 0550 4390 20 DD JR NZ,CALLU1 0551 4392 E1 CALLU5: POP HL 0552 4393 37 SCF 0553 4394 C9 RET ; 0554 4395 46 4F 52 4D 41 54 CALLTB: DEFM 'FORMAT' 0555 439B 00 DEFB 0 0556 439C A7 43 DEFW FORMAT 0557 439E 42 49 43 4F 50 DEFM 'BICOP' 0558 43A3 00 DEFB 0 0559 43A4 AC 76 DEFW BICOP 0560 43A6 00 DEFB 0 ; 0561-0571 ; 0572 43A7 E5 FORMAT: PUSH HL 0573 43A8 CC 5C 71 CALL Z,FORMA0 0574 43AB E1 POP HL 0575 43AC A7 AND A 0576 43AD C9 RET ; 0577 43AE 7A LDDSK: LD A,D ;Geraetekennzeichen 0578 43AF 3D LDDSK1: DEC A 0579 43B0 F0 RET P ;expliz. Diskdrive 0580 43B1 3A 87 E8 LD A,(DEFDRV) ;default 0581 43B4 C9 RET ; 0582 43B5 CD B0 41 MXFIL: CALL MXFIUP ;bdos-fcb's anlegen 0583 43B8 22 B6 FB LD (EOFRM1),HL ;Oberkante BASIC-fcb's 0584 43BB C9 RET ; 0585 43BC 01 46 FE CLEARD: LD BC,-442 ;notwendiger Platz je 0586 43BF C9 RET ;bdos- + BASIC-fcb ; 0587 43C0 E5 SUFCB: PUSH HL ;FCB-Adresse suchen 0588 43C1 D5 PUSH DE 0589 43C2 C5 PUSH BC 0590 43C3 CD AE 43 CALL LDDSK 0591 43C6 4F LD C,A 0592 43C7 2A 27 F7 LD HL,(ATBFCB) 0593 43CA 3A 25 F7 LD A,(MAXFIL) 0594 43CD F5 SUFCB1: PUSH AF 0595 43CE 5E LD E,(HL) 0596 43CF 23 INC HL 0597 43D0 56 LD D,(HL) 0598 43D1 23 INC HL 0599 43D2 E5 PUSH HL 0600 43D3 EB EX DE,HL 0601 43D4 7E LD A,(HL) ;mode 0602 43D5 A7 AND A ;file offen ? 0603 43D6 28 2D JR Z,SUFCB4 ;nein 0604 43D8 23 INC HL 0605 43D9 23 INC HL 0606 43DA 23 INC HL 0607 43DB 23 INC HL 0608 43DC 7E LD A,(HL) ;Geraet 0609 43DD FE 11 CP 17 ;=Disk ? 0610 43DF 30 24 JR NC,SUFCB4 ;nein 0611 43E1 2B DEC HL 0612 43E2 2B DEC HL 0613 43E3 56 LD D,(HL) 0614 43E4 2B DEC HL 0615 43E5 5E LD E,(HL) 0616 43E6 1A LD A,(DE) ;byte 0 bdos-fcb 0617 43E7 CD AF 43 CALL LDDSK1 0618 43EA B9 CP C 0619 43EB 20 18 JR NZ,SUFCB4 0620 43ED 13 INC DE 0621 43EE 21 2D F7 LD HL,AUTSTL 0622 43F1 06 0B LD B,11 0623 43F3 1A SUFCB2: LD A,(DE) ;Namen vergleichen 0624 43F4 E6 7F AND 7FH 0625 43F6 FE 3F CP 3FH 0626 43F8 28 03 JR Z,SUFCB3 0627 43FA BE CP (HL) 0628 43FB 20 08 JR NZ,SUFCB4 0629 43FD 13 SUFCB3: INC DE 0630 43FE 23 INC HL 0631 43FF 10 F2 DJNZ SUFCB2 0632 4401 E1 POP HL 0633 4402 E1 POP HL 0634 4403 18 66 JR END2 ;fertig, file gefunden 0635 4405 E1 SUFCB4: POP HL 0636 4406 F1 POP AF 0637 4407 3D DEC A 0638 4408 F2 CD 43 JP P,SUFCB1 ;nicht gefunden, weiter 0639 440B 18 5E JR END2 ; 0640 440D E5 SUCHF: PUSH HL 0641 440E D5 PUSH DE 0642 440F C5 PUSH BC 0643 4410 7A LD A,D ;Geraet 0644 4411 32 2E F4 LD (EDIBUF+0Ah),A 0645 4414 CD 33 44 CALL NAUML 0646 4417 CD 1C 44 CALL SUCHF1 ;set dma, search first 0647 441A 18 4F JR END2 ; 0648 441C 11 78 F4 SUCHF1: LD DE,EDIBUF+54H 0649 441F 0E 1A LD C,26 ;set dma address 0650 4421 CD 69 53 CALL BBDOSX 0651 4424 11 2E F4 LD DE,EDIBUF+0AH ;fcb address 0652 4427 AF XOR A 0653 4428 32 3A F4 LD (EDIBUF+16H),A 0654 442B 0E 11 LD C,17 ;search for first 0655 442D CD 69 53 CALL BBDOSX 0656 4430 FE FF CP 0FFH ;Fehler ? 0657 4432 C9 RET ; 0658 4433 11 2F F4 NAUML: LD DE,EDIBUF+0BH ;Namen umladen in Hilfs-fcb 0659 4436 21 2D F7 NAUML1: LD HL,AUTSTL 0660 4439 01 0B 00 LD BC,11 0661 443C ED B0 LDIR 0662 443E C9 RET ; 0663 443F E5 STACKM: PUSH HL ;Stackmanipulation fuer 0664 4440 D5 PUSH DE ;nachfolgende Disk-Zugriffe 0665 4441 C5 PUSH BC 0666 4442 F5 PUSH AF 0667 4443 21 10 00 LD HL,0010H 0668 4446 39 ADD HL,SP 0669 4447 DD E5 PUSH IX 0670 4449 C1 POP BC 0671 444A 71 LD (HL),C 0672 444B 23 INC HL 0673 444C 70 LD (HL),B 0674 444D 21 0A 00 LD HL,000AH 0675 4450 39 ADD HL,SP 0676 4451 EB EX DE,HL 0677 4452 18 0C JR STAKM4 0678 4454 FD E5 STAKM2: PUSH IY 0679 4456 C1 POP BC 0680 4457 4E STAKM3: LD C,(HL) 0681 4458 1A LD A,(DE) 0682 4459 77 LD (HL),A 0683 445A 79 LD A,C 0684 445B 12 LD (DE),A 0685 445C 23 INC HL 0686 445D 13 INC DE 0687 445E 10 F7 DJNZ STAKM3 0688 4460 21 12 00 STAKM4: LD HL,18 0689 4463 39 ADD HL,SP 0690 4464 7B LD A,E 0691 4465 95 SUB L 0692 4466 7A LD A,D 0693 4467 9C SBC A,H 0694 4468 38 EA JR C,STAKM2 0695 446A F1 END1: POP AF 0696 446B C1 END2: POP BC 0697 446C D1 POP DE 0698 446D E1 POP HL 0699 446E C9 RET ; 0700 446F DD 21 40 F2 ZUGDS: LD IX,LWRUP+6 ;Disk-Zugriff 0701 4473 FD 21 00 02 LD IY,0200H 0702 4477 CD 3F 44 CALL STACKM 0703 447A E1 POP HL 0704 447B 7E LD A,(HL) ;modus 0705 447C A7 AND A 0706 447D C9 RET ; 0707 447E 01 80 00 OPDS: LD BC,0080H ;Auswertung fuer LEN=... 0708 4481 ED 43 88 E8 LD (RECLEN),BC ;Standard merken 0709 4485 CD C1 52 CALL DTCHAR ;Anweisungsende ? 0710 4488 7B LD A,E ;File-Nr. 0711 4489 C8 RET Z ;ja 0712 448A F5 PUSH AF 0713 448B E5 PUSH HL 0714 448C 21 0C 00 LD HL,12 0715 448F 39 ADD HL,SP 0716 4490 7E LD A,(HL) 0717 4491 FE 04 CP 04H ;mode = random ? 0718 4493 C2 0A 53 JP NZ,ERDSN ;nein 0719 4496 23 INC HL 0720 4497 7E LD A,(HL) ;Geraet = Disk ? 0721 4498 FE 11 CP 17 0722 449A D2 0A 53 JP NC,ERDSN ;nein 0723 449D E1 POP HL 0724 449E CD B7 52 CALL DCPSTX 0725 44A1 FF DEFB 0FFH ;Funktion 0726 44A2 CD B7 52 CALL DCPSTX 0727 44A5 92 DEFB 92H ;LEN 0728 44A6 CD B7 52 CALL DCPSTX 0729 44A9 EF DEFB 0EFH ;= 0730 44AA DD 21 3C 47 LD IX,INTPA2 0731 44AE CD 59 01 CALL JL1CAL ;integer par. 0732 44B1 1B DEC DE 0733 44B2 14 INC D 0734 44B3 15 DEC D ;<100h ? 0735 44B4 C2 04 53 JP NZ,ERDFC 0736 44B7 13 INC DE ;i.O. 0737 44B8 ED 53 88 E8 LD (RECLEN),DE 0738 44BC F1 POP AF 0739 44BD C9 RET ; 0740 44BE D0 OPERW: RET NC ;OPEN fuer Diskette 0741 44BF DD 21 40 F2 LD IX,LWRUP+6 0742 44C3 FD 21 00 04 LD IY,0400H 0743 44C7 CD 3F 44 CALL STACKM 0744 44CA CD D7 50 CALL NACOF4 ;unzulaessige Zeichen ? 0745 44CD CD C0 43 CALL SUFCB ;file auf anderen fcbs offen ? 0746 44D0 CA EC 52 JP Z,ERDALO ;ja 0747 44D3 22 2B F7 LD (ACTFCB),HL 0748 44D6 7B LD A,E 0749 44D7 FE 04 CP 04H ;random ? 0750 44D9 28 07 JR Z,OPERW1 0751 44DB 01 80 00 LD BC,0080H ;Standard fuer sequentielle files 0752 44DE ED 43 88 E8 LD (RECLEN),BC 0753 44E2 F1 OPERW1: POP AF 0754 44E3 F5 PUSH AF ;file nr 0755 44E4 E5 PUSH HL ;fcb address 0756 44E5 D5 PUSH DE ;d=Geraet, e=mode 0757 44E6 5F LD E,A ;file nr 0758 44E7 3A 25 F7 LD A,(MAXFIL) 0759 44EA BB CP E 0760 44EB DA F2 52 JP C,ERDBFN ; 0761 44EE 01 A4 00 LD BC,0A4H ;Laenge bdos-fcb 0762 44F1 50 LD D,B 0763 44F2 2A 8E E8 LD HL,(ADFCB0) 0764 44F5 CD D2 45 CALL MLT16 0765 44F8 AF XOR A 0766 44F9 21 0C 00 LD HL,12 ;extent=0 0767 44FC 09 ADD HL,BC 0768 44FD 77 LD (HL),A 0769 44FE D1 POP DE 0770 44FF E1 POP HL 0771 4500 23 INC HL ;Laden BASIC-fcb mit Zeiger 0772 4501 71 LD (HL),C ;auf bdos fcb 0773 4502 23 INC HL 0774 4503 70 LD (HL),B 0775 4504 23 INC HL 0776 4505 77 LD (HL),A ;last byte = 0 0777 4506 23 INC HL 0778 4507 72 LD (HL),D ;Geraet = 0 0779 4508 23 INC HL 0780 4509 23 INC HL 0781 450A 77 LD (HL),A ;Fuellstand dma = 0 0782 450B CD 0D 44 CALL SUCHF ;search for first 0783 450E C5 PUSH BC 0784 450F D5 PUSH DE 0785 4510 7A LD A,D 0786 4511 02 LD (BC),A 0787 4512 59 LD E,C 0788 4513 50 LD D,B 0789 4514 13 INC DE 0790 4515 CD 36 44 CALL NAUML1 ;Dateinamen eintragen 0791 4518 D1 POP DE 0792 4519 C1 POP BC 0793 451A 7B LD A,E 0794 451B 20 2E JR NZ,OPERW3 ;file schon da ? 0795 451D E6 86 AND 86H ;nein -> INPUT oder APPEND ? 0796 451F CA FE 52 JP Z,ERDFNF ; ja -> file not found ; 0797 4522 D5 OPERW2: PUSH DE ;fuer OUTPUT und SAVE 0798 4523 C5 PUSH BC ;und RANDOM, wenn noch nicht da 0799 4524 F5 PUSH AF ;z - file schon da, nz - nicht da 0800 4525 59 LD E,C 0801 4526 50 LD D,B 0802 4527 CD E5 45 CALL INIFCB 0803 452A F1 POP AF ;file schon da ? 0804 452B 20 0C JR NZ,OPERW8 ;nein 0805 452D D5 PUSH DE 0806 452E 0E 13 LD C,19 ;delete file 0807 4530 CD 69 53 CALL BBDOSX 0808 4533 D1 POP DE 0809 4534 FE FF CP 0FFH ;Fehler ? 0810 4536 CA B3 51 JP Z,ERWPRT ;write protected 0811 4539 0E 16 OPERW8: LD C,16H 0812 453B CD 69 53 CALL BBDOSX 0813 453E 3C INC A 0814 453F CA B0 51 JP Z,ERTOOM ;too many files 0815 4542 E1 OPERW7: POP HL 0816 4543 D1 POP DE 0817 4544 2A 2B F7 LD HL,(ACTFCB) 0818 4547 73 LD (HL),E ;mode eintragen 0819 4548 F1 END3: POP AF 0820 4549 E1 POP HL 0821 454A C9 RET 0822 454B FE 08 OPERW3: CP 8 ;file schon da 0823 454D 28 42 JR Z,OPERW5 ;-> APPEND 0824 454F FE 02 CP 2 0825 4551 28 CF JR Z,OPERW2 ;-> OUTPUT 0826 4553 FE 80 CP 80H 0827 4555 28 CB JR Z,OPERW2 ;-> SAVE 0828 4557 D5 PUSH DE ;INPUT und random, wenn schon da 0829 4558 C5 PUSH BC 0830 4559 59 LD E,C 0831 455A 50 LD D,B 0832 455B CD E5 45 CALL INIFCB 0833 455E 0E 0F LD C,15 ;open file 0834 4560 CD 69 53 CALL BBDOSX 0835 4563 E1 POP HL 0836 4564 D1 POP DE 0837 4565 2A 2B F7 LD HL,(ACTFCB) 0838 4568 73 LD (HL),E 0839 4569 7B LD A,E 0840 456A FE 04 CP 4 ;random ? 0841 456C 28 DA JR Z,END3 ;ja, fertig 0842 456E E5 PUSH HL ;nein, erstes Zeichen lesen 0843 456F 21 1C FC LD HL,HLPERR 0844 4572 AF XOR A 0845 4573 BE CP (HL) 0846 4574 77 LD (HL),A 0847 4575 E1 POP HL 0848 4576 20 D0 JR NZ,END3 0849 4578 01 06 00 LD BC,6 ;read/write-Zeiger in dma-Bereich 0850 457B 09 ADD HL,BC 0851 457C E5 PUSH HL 0852 457D CD 2B 46 CALL ZEILES ;Zeichen lesen 0853 4580 E1 POP HL 0854 4581 2B DEC HL 0855 4582 2B DEC HL 0856 4583 2B DEC HL 0857 4584 77 LD (HL),A ;last byte 0858 4585 FE FF CP 0FFH ;Programm-Datei ? 0859 4587 20 BF JR NZ,END3 ;nein 0860 4589 23 INC HL ;ja 0861 458A 23 INC HL 0862 458B 23 INC HL 0863 458C 23 INC HL 0864 458D 36 80 LD (HL),80H 0865 458F 18 B7 OPERW4: JR END3 0866 4591 C5 OPERW5: PUSH BC ;fuer APPEND 0867 4592 59 LD E,C 0868 4593 50 LD D,B 0869 4594 CD E5 45 CALL INIFCB 0870 4597 0E 0F LD C,15 ;open file 0871 4599 CD 69 53 CALL BBDOSX 0872 459C 2A 2B F7 LD HL,(ACTFCB) 0873 459F 36 01 LD (HL),1 ;auf INPUT schalten 0874 45A1 01 06 00 LD BC,6 0875 45A4 09 ADD HL,BC 0876 45A5 36 80 LD (HL),80H ;dma-Bereich leer 0877 45A7 2A 2B F7 LD HL,(ACTFCB) 0878 45AA E5 OPERW6: PUSH HL 0879 45AB CD 2B 46 CALL ZEILES ;Zeichen lesen aus file 0880 45AE E1 POP HL 0881 45AF 30 F9 JR NC,OPERW6 ;bis Ende 0882 45B1 36 02 LD (HL),2 ;umschalten auf OUTPUT 0883 45B3 01 06 00 LD BC,6 0884 45B6 09 ADD HL,BC 0885 45B7 7E LD A,(HL) 0886 45B8 D6 80 SUB 80H 0887 45BA 2F CPL 0888 45BB 77 LD (HL),A ;read/write pointer 0889 45BC 01 03 01 LD BC,0103H 0890 45BF 09 ADD HL,BC 0891 45C0 4E LD C,(HL) 0892 45C1 23 INC HL 0893 45C2 46 LD B,(HL) 0894 45C3 0B DEC BC ;basic loc dec 0895 45C4 70 LD (HL),B 0896 45C5 2B DEC HL 0897 45C6 71 LD (HL),C 0898 45C7 CD C6 46 CALL ACTBDO 0899 45CA 01 20 00 LD BC,0020H 0900 45CD 09 ADD HL,BC 0901 45CE 35 DEC (HL) ;bdos cr dec 0902 45CF E1 POP HL 0903 45D0 18 BD JR OPERW4 ; 0904 45D2 78 MLT16: LD A,B ;bc:=bc*de+hl 0905 45D3 06 11 LD B,11H 0906 45D5 18 07 JR MLT163 0907 45D7 30 01 MLT161: JR NC,MLT162 0908 45D9 19 ADD HL,DE 0909 45DA CB 1C MLT162: RR H 0910 45DC CB 1D RR L 0911 45DE 1F MLT163: RRA 0912 45DF CB 19 RR C 0913 45E1 10 F4 DJNZ MLT161 0914 45E3 47 LD B,A 0915 45E4 C9 RET ; 0916 45E5 62 INIFCB: LD H,D 0917 45E6 6B LD L,E 0918 45E7 01 0C 00 LD BC,0CH ;hl: Anfang bdos fcb 0919 45EA 09 ADD HL,BC ;Loeschen ab extent 0920 45EB 0E 84 LD C,84H ;bis Ende dma-Bereich 0921 45ED 70 INIFC1: LD (HL),B 0922 45EE 23 INC HL 0923 45EF 0D DEC C 0924 45F0 20 FB JR NZ,INIFC1 0925 45F2 2A 2B F7 LD HL,(ACTFCB) ;hl: BASIC-fcb 0926 45F5 01 05 00 LD BC,0005H 0927 45F8 09 ADD HL,BC 0928 45F9 36 80 LD (HL),80H ;rec len bdos 0929 45FB 23 INC HL 0930 45FC 70 LD (HL),B ;read/write pointer = 0 0931 45FD 01 03 01 LD BC,0103H 0933 4601 E5 PUSH HL 0934 4602 06 0B LD B,11 0935 4604 AF XOR A 0936 4605 77 INIFC2: LD (HL),A 0937 4606 23 INC HL 0938 4607 10 FC DJNZ INIFC2 0939 4609 E1 POP HL 0940 460A 23 INC HL 0941 460B 23 INC HL 0942 460C ED 4B 88 E8 LD BC,(RECLEN) ;user set record size 0943 4610 71 LD (HL),C ;bei random, sonst 80h 0944 4611 23 INC HL 0945 4612 70 LD (HL),B 0946 4613 C9 RET ; 0947 4614 DD 21 40 F2 ZMODS: LD IX,LWRUP+6 ;1 byte fuer INPUT#, LINE INPUT# 0948 4618 FD 21 00 06 LD IY,0600H 0949 461C CD 3F 44 CALL STACKM 0950 461F CD 2B 46 CALL ZEILES ;byte lesen einschl. record 0951 4622 C3 6B 44 JP END2 ;fertig ; 0952 4625 CD 36 46 ZEILE: CALL ZEILS ;Zeichen lesen 0953 4628 36 00 LD (HL),00H ;last byte loeschen 0954 462A C9 RET ; 0955 462B CD 36 46 ZEILES: CALL ZEILS ;Zeichen lesen mit Test 0956 462E D8 RET C ;auf EOF (1Ah) 0957 462F FE 1A CP 1AH 0958 4631 37 SCF 0959 4632 3F CCF 0960 4633 C0 RET NZ 0961 4634 37 SCF 0962 4635 C9 RET ; 0963 4636 2A 2B F7 ZEILS: LD HL,(ACTFCB) ;BASIC-fcb Zeichen lesen 0964 4639 7E LD A,(HL) ;mode 0965 463A FE 01 CP 1 ;= INPUT ? 0966 463C C2 9E 51 JP NZ,ERBMOD ;bad file mode 0967 463F 23 INC HL 0968 4640 23 INC HL 0969 4641 23 INC HL ;last byte 0970 4642 E5 PUSH HL 0971 4643 7E LD A,(HL) 0972 4644 A7 AND A ;schon was gelesen ? 0973 4645 20 18 JR NZ,ZEILS1 ;ja, EOF-Test 0974 4647 23 INC HL 0975 4648 23 INC HL 0976 4649 23 ZEILS6: INC HL ;Lesezeiger 0977 464A 7E LD A,(HL) 0978 464B B7 OR A 0979 464C 28 1E JR Z,ZEILS2 ;dma-Bereich leer -> record lesen 0980 464E 2B DEC HL ;Zeichen lesen 0981 464F 7E LD A,(HL) ;rec len 0982 4650 23 INC HL 0983 4651 96 SUB (HL) ;Lesezeiger 0984 4652 35 DEC (HL) 0985 4653 4F LD C,A 0986 4654 06 00 LD B,0 ;bc: neuser Lesezeiger 0987 4656 CD C6 46 CALL ACTBDO ;hl: akt. bdos fcb 0988 4659 11 24 00 LD DE,24H ;Anfang dma bereich 0989 465C 19 ADD HL,DE 0990 465D 09 ADD HL,BC ;Zeichen aus dma-Bereich 0991 465E 7E LD A,(HL) ;lesen 0992 465F 47 ZEILS1: LD B,A 0993 4660 D6 1A SUB 1AH ;EOF-Test 0994 4662 D6 01 SUB 1 ;EOF-CY=1, <>EOF-CY=0 0995 4664 78 LD A,B ;Zeichen 0996 4665 E1 POP HL ;last byte 0997 4666 36 00 LD (HL),00H ;fuer <>EOF 0998 4668 D0 RET NC 0999 4669 77 LD (HL),A ;fuer EOF 1000 466A 3F CCF 1001 466B C9 RET 1002 466C CD 77 46 ZEILS2: CALL RECLES 1003 466F 28 D8 JR Z,ZEILS6 ;Zeichen lesen 1004 4671 3E 1A LD A,1AH ;EOF bei Fehler 1005 4673 37 SCF 1006 4674 E1 POP HL 1007 4675 77 LD (HL),A 1008 4676 C9 RET ; 1009 4677 2A 2B F7 RECLES: LD HL,(ACTFCB) ;BASIC fcb 1010 467A 01 09 01 LD BC,0109H ;BASIC rrn 1011 467D 09 ADD HL,BC ; =+1 1012 467E 4E LD C,(HL) 1013 467F 23 INC HL 1014 4680 46 LD B,(HL) 1015 4681 03 INC BC 1016 4682 70 LD (HL),B 1017 4683 2B DEC HL 1018 4684 71 LD (HL),C 1019 4685 CD C6 46 CALL ACTBDO ;bdos fcb 1020 4688 E5 PUSH HL 1021 4689 01 24 00 LD BC,0024H 1022 468C 09 ADD HL,BC ;akt. dma-Adresse 1023 468D E5 PUSH HL 1024 468E 0E 80 LD C,80H ;loeschen 1025 4690 36 00 ZEILS3: LD (HL),00H 1026 4692 23 INC HL 1027 4693 0D DEC C 1028 4694 20 FA JR NZ,ZEILS3 1029 4696 D1 POP DE 1030 4697 0E 1A LD C,26 ;set dma address 1031 4699 CD 69 53 CALL BBDOSX 1032 469C D1 POP DE 1033 469D D5 PUSH DE 1034 469E 0E 14 LD C,20 ;sequential read 1035 46A0 CD 69 53 CALL BBDOSX 1036 46A3 D1 POP DE 1037 46A4 A7 AND A ;Fehler? 1038 46A5 F5 PUSH AF 1039 46A6 21 21 00 LD HL,0021H ;bdos rrn 1040 46A9 19 ADD HL,DE 1041 46AA 34 INC (HL) ; =+1 1042 46AB 20 06 JR NZ,ZEILS4 1043 46AD 23 INC HL 1044 46AE 34 INC (HL) 1045 46AF 20 02 JR NZ,ZEILS4 1046 46B1 23 INC HL 1047 46B2 34 INC (HL) 1048 46B3 F1 ZEILS4: POP AF 1049 46B4 3E 00 LD A,00H 1050 46B6 2A 2B F7 LD HL,(ACTFCB) ;Lesezeiger 1051 46B9 01 06 00 LD BC,0006H 1052 46BC 09 ADD HL,BC 1053 46BD 20 02 JR NZ,ZEILS5 ;bei Fehler 1054 46BF 3E 80 LD A,80H 1055 46C1 77 ZEILS5: LD (HL),A ;0 bei Fehler, sonst 80h 1056 46C2 2B DEC HL 1057 46C3 36 80 LD (HL),80H ;rec len 1058 46C5 C9 RET ; 1059 46C6 2A 2B F7 ACTBDO: LD HL,(ACTFCB) 1060 46C9 23 ACTBDP: INC HL 1061 46CA 7E LD A,(HL) 1062 46CB 23 INC HL 1063 46CC 66 LD H,(HL) 1064 46CD 6F LD L,A ;hl: bdos fcb 1065 46CE C9 RET ; 1066 46CF E5 LINPD: PUSH HL 1067 46D0 D5 PUSH DE 1068 46D1 21 0A 00 LD HL,000AH 1069 46D4 39 ADD HL,SP 1070 46D5 11 3A 70 LD DE,LINP14 1071 46D8 73 LD (HL),E 1072 46D9 23 INC HL 1073 46DA 72 LD (HL),D 1074 46DB D1 POP DE 1075 46DC E1 POP HL 1076 46DD 23 INC HL 1077 46DE 23 INC HL 1078 46DF 23 INC HL 1079 46E0 71 LD (HL),C ;Zeichen in last byte eintragen 1080 46E1 C9 RET ; 1081 46E2 DD 21 40 F2 FILLS: LD IX,LWRUP+6 ;von PRINT# 1082 46E6 FD 21 00 08 LD IY,0800H 1083 46EA CD 3F 44 CALL STACKM 1084 46ED 7E LD A,(HL) 1085 46EE FE 02 CP 02H ;OUTPUT ? 1086 46F0 C2 9E 51 JP NZ,ERBMOD ;nein -> bad file mode 1087 46F3 F1 POP AF 1088 46F4 F5 PUSH AF 1089 46F5 CD FB 46 CALL ZEINTR ;byte eintragen, u.U. rec aus 1090 46F8 C3 6A 44 JP END1 ;fertig ; 1091 46FB 2A 2B F7 ZEINTR: LD HL,(ACTFCB) 1092 46FE E5 PUSH HL 1093 46FF 01 06 00 LD BC,6 ;write pointer 1094 4702 09 ADD HL,BC 1095 4703 5F LD E,A 1096 4704 34 INC (HL) 1097 4705 7E LD A,(HL) 1098 4706 FE 80 CP 80H ;record voll ? 1099 4708 F5 PUSH AF ;merken 1100 4709 4F LD C,A 1101 470A C5 PUSH BC 1102 470B CD C6 46 CALL ACTBDO 1103 470E 01 23 00 LD BC,0023H ;hl: dma-Bereich 1104 4711 09 ADD HL,BC 1105 4712 C1 POP BC 1106 4713 09 ADD HL,BC ;Zeichenadr. in dma-Ber. 1107 4714 73 LD (HL),E ;Zeichen eintragen 1108 4715 F1 POP AF 1109 4716 E1 POP HL ;BASIC fcb 1110 4717 C0 RET NZ ;record nicht voll ; 1111 4718 E5 RECAUS: PUSH HL ;voll, ausgeben 1112 4719 01 06 00 LD BC,0006H 1113 471C 09 ADD HL,BC 1114 471D 36 00 LD (HL),00H ;write pointer = 0 1115 471F CD C6 46 CALL ACTBDO ;bdos fcb 1116 4722 E5 PUSH HL 1117 4723 01 24 00 LD BC,0024H 1118 4726 09 ADD HL,BC ;dma-Bereich 1119 4727 EB EX DE,HL 1120 4728 0E 1A LD C,26 ;set dma address 1121 472A CD 69 53 CALL BBDOSX 1122 472D D1 POP DE 1123 472E D5 PUSH DE 1124 472F 0E 15 LD C,21 ;sequential write 1125 4731 CD 69 53 CALL BBDOSX 1126 4734 D1 POP DE 1127 4735 D5 PUSH DE 1128 4736 F5 PUSH AF 1129 4737 21 21 00 LD HL,0021H ;bdos rrn = +1 1130 473A 19 ADD HL,DE 1131 473B 34 INC (HL) 1132 473C 20 06 JR NZ,RECAU1 1133 473E 23 INC HL 1134 473F 34 INC (HL) 1135 4740 20 02 JR NZ,RECAU1 1136 4742 23 INC HL 1137 4743 34 INC (HL) 1138 4744 F1 RECAU1: POP AF 1139 4745 A7 AND A 1140 4746 28 0C JR Z,RECAU2 1141 4748 D1 POP DE ;bdos fcb 1142 4749 AF XOR A 1143 474A E1 POP HL ;BASIC fcb 1144 474B 77 LD (HL),A 1145 474C 0E 10 LD C ;close file 1146 474E CD 69 53 CALL BBDOSX 1147 4751 C3 AD 51 JP ERFULL ;disk full 1148 4754 E1 RECAU2: POP HL 1149 4755 E1 POP HL ;BASIC fcb 1150 4756 E5 PUSH HL 1151 4757 11 09 01 LD DE,0109H 1152 475A 19 ADD HL,DE ;BASIC rrn 1153 475B 5E LD E,(HL) ; =+1 1154 475C 23 INC HL 1155 475D 56 LD D,(HL) 1156 475E 13 INC DE 1157 475F 72 LD (HL),D 1158 4760 2B DEC HL 1159 4761 73 LD (HL),E 1160 4762 E1 POP HL ;BASIC fcb 1161 4763 A7 AND A 1162 4764 C9 RET ; 1163 4765 DD 21 40 F2 CLODS: LD IX,LWRUP+6 ;CLOSE fuer Disk 1164 4769 FD 21 00 04 LD IY,0400H 1165 476D CD 3F 44 CALL STACKM 1166 4770 E1 POP HL 1167 4771 7E LD A,(HL) 1168 4772 E6 82 AND 82H ;OUTPUT, SAVE ? 1169 4774 28 12 JR Z,CLODS1 ;nein 1170 4776 AF XOR A 1171 4777 E5 PUSH HL 1172 4778 21 1C FC LD HL,HLPERR 1173 477B BE CP (HL) 1174 477C 77 LD (HL),A 1175 477D E1 POP HL 1176 477E 20 08 JR NZ,CLODS1 1177 4780 3E 1A LD A,1AH 1178 4782 CD FB 46 CALL ZEINTR ;EOF eintragen fuer OUTPUT 1179 4785 C4 18 47 CALL NZ,RECAUS ;rec ausgeben 1180 4788 E5 CLODS1: PUSH HL 1181 4789 23 INC HL 1182 478A 5E LD E,(HL) 1183 478B 23 INC HL 1184 478C 56 LD D,(HL) 1185 478D 0E 10 LD C,16 ;close file 1186 478F CD 69 53 CALL BBDOSX 1187 4792 E1 POP HL 1188 4793 E5 PUSH HL 1189 4794 11 07 00 LD DE,0007H 1190 4797 19 ADD HL,DE 1191 4798 72 LD (HL),D 1192 4799 6A LD L,D 1193 479A 62 LD H,D 1194 479B 22 2B F7 LD (ACTFCB),hl ;loeschen 1195 479E E1 POP HL 1196 479F 34 INC (HL) 1197 47A0 35 DEC (HL) 1198 47A1 72 LD (HL),D ;mode loeschen 1199 47A2 E1 POP HL 1200 47A3 C9 RET ; 1201 47A4 CD 58 53 FILSA: CALL STCKM ;Stackmanipul. 1202 47A7 E5 PUSH HL 1203 47A8 DD 21 CB 54 LD IX,REN10 ;Zeiger bereinigen 1204 47AC CD 59 01 CALL JL1CAL 1205 47AF 3E FF LD A,0FFH ;Kennzeichen Programm 1206 47B1 CD FB 46 CALL ZEINTR ;Zeichen eintragen in record 1207 47B4 2A 88 F5 LD HL,(SVARPT) 1208 47B7 EB EX DE,HL 1209 47B8 2A 3C F5 LD HL,(PSTBEG) 1210 47BB E7 FILSA2: RST CPREG ;Anfang - Ende ? 1211 47BC 28 0B JR Z,FILSA1 ;fertig -> CLOSE 1212 47BE 7E LD A,(HL) ;Zeichen holen 1213 47BF 23 INC HL 1214 47C0 E5 PUSH HL 1215 47C1 D5 PUSH DE 1216 47C2 CD FB 46 CALL ZEINTR ;Zeichen eintragen in record 1217 47C5 D1 POP DE 1218 47C6 E1 POP HL 1219 47C7 18 F2 JR FILSA2 1220 47C9 AF FILSA1: XOR A 1221 47CA 32 43 F7 LD (LMAFL),A 1222 47CD E1 POP HL 1223 47CE DD 21 32 6D LD IX,CLOSE1 1224 47D2 C3 59 01 JP JL1CAL ; 1225 47D5 DD 21 B7 75 FILLO: LD IX,FCBBE5 ;LOAD interner Code 1226 47D9 FD 21 00 02 LD IY,0200H 1227 47DD CD 3F 44 CALL STACKM 1228 47E0 F1 POP AF 1229 47E1 CA 9E 51 JP Z,ERBMOD ;bad file mode 1230 47E4 2A 2B F7 LD HL,(ACTFCB) ;BASIC fcb 1231 47E7 E5 PUSH HL 1232 47E8 CD 2B 46 CALL ZEILES ;Zeichen lesen 0FFh 1233 47EB 3C INC A ;interner Code? 1234 47EC C2 9E 51 JP NZ,ERBMOD ;nein -> bad file mode 1235 47EF 2A 3C F5 LD HL,(PSTBEG) ;Anfang 1236 47F2 EB FILLO1: EX DE,HL 1237 47F3 2A 3A F5 LD HL,(STDPTR) ;Adr. Stack 1238 47F6 01 6D FF LD BC,0FF6DH ;-93h 1239 47F9 09 ADD HL,BC 1240 47FA E7 RST CPREG 1241 47FB EB EX DE,HL ;Zeiger in BASIC Programm 1242 47FC DA D4 52 JP C,ERDMO ;out of memory 1243 47FF E3 EX (SP),HL ;BASIC fcb, (Zeiger) 1244 4800 E5 PUSH HL ;(BASIC fcb), (Zeiger) 1245 4801 CD 25 46 CALL ZEILE ;Zeichen lesen 1246 4804 E1 POP HL 1247 4805 E3 EX (SP),HL ;Zeiger, (BASIC fcb) 1248 4806 38 04 JR C,FILLO2 ;fileende gefunden (kein weiterer rec) 1249 4808 77 LD (HL),A ;Zeichen eintragen 1250 4809 23 INC HL ;Zeiger weiterstellen 1251 480A 18 E6 JR FILLO1 ;weiter 1252 480C DD 21 4E 42 FILLO2: LD IX,PTNEW ;Folgezeiger 1253 4810 CD 59 01 CALL JL1CAL ;neu stellen 1254 4813 23 INC HL 1255 4814 22 88 F5 LD (SVARPT),HL 1256 4817 22 8A F5 LD (DVARPT),HL 1257 481A 22 8C F5 LD (FSLPTR),HL 1258 481D DD 21 24 6E LD IX,CLOSEA 1259 4821 CD 59 01 CALL JL1CAL 1260 4824 E1 POP HL 1261 4825 3A 2D F7 LD A,(AUTSTL) 1262 4828 A7 AND A 1263 4829 C8 RET Z ;ohne Autostart 1264 482A AF XOR A 1265 482B 32 43 F7 LD (LMAFL),A 1266 482E 21 42 48 LD HL,FILLOT ;5 byte RUN anhaengen 1267 4831 11 2E F4 LD DE,EDIBUF+0AH 1268 4834 01 05 00 LD BC,0005H 1269 4837 D5 PUSH DE 1270 4838 ED B0 LDIR 1271 483A E1 POP HL 1272 483B DD 21 ED 45 LD IX,RUNMOD 1273 483F C3 59 01 JP JL1CAL 1274 4842 3A FILLOT: DEFB ':' 1274a 4843 8A DEFB 08AH ;RUN token 1274b 4844 00 DEFB 0 1275 4845 00 DEFB 0 1276 4846 00 DEFB 0 ; 1277 4847 E5 SAVHL: PUSH HL ;hl -> record 1278 4848 7D LD A,L 1279 4849 CD FB 46 CALL ZEINTR 1280 484C E1 POP HL 1281 484D 7C LD A,H 1282 484E CD FB 46 CALL ZEINTR 1283 4851 C9 RET ; 1284 4852 D0 DBSAVE: RET NC 1285 4853 CD 58 53 CALL STCKM ;SAVE Maschinencode 1286 4856 D5 PUSH DE 1287 4857 CD 08 4B CALL KADTDE ;Anfangsadresse 1288 485A ED 53 6E FC LD (STADR),DE 1289 485E D5 PUSH DE 1290 485F CD 08 4B CALL KADTDE ;Endadresse 1291 4862 ED 53 44 F7 LD (LADBSA),DE 1292 4866 E3 EX (SP),HL 1293 4867 EB EX DE,HL 1294 4868 E7 RST CPREG 1295 4869 DA 04 53 JP C,ERDFC ;Anf>End -> ill. function call 1296 486C EB EX DE,HL 1297 486D E3 EX (SP),HL 1298 486E CD C1 52 CALL DTCHAR 1299 4871 37 SCF ;RAM 1300 4872 28 1B JR Z,DBSAV2 ;Anweisungsende 1301 4874 CD B7 52 CALL DCPSTX ;es kommt noch was 1302 4877 2C DEFB ',' 1303 4878 FE 5A CP 'Z' 1304 487A CA 63 49 JP Z,DBSAVG 1305 487D FE 53 CP 'S' ;aus Bildspeicher ? 1306 487F 20 06 JR NZ,DBSAV1 ;nein 1307 4881 CD C2 52 CALL DTCHA0 1308 4884 A7 AND A ;screen 1309 4885 18 08 JR DBSAV2 ;ja, ohne Startadr. 1310 4887 CD 0C 4B DBSAV1: CALL ADTDEX ;Startadresse 1311 488A ED 53 6E FC LD (STADR),DE 1312 488E 37 SCF 1313 488F C1 DBSAV2: POP BC 1314 4890 30 05 JR NC,DBSAV3 ;-> screen 1315 4892 04 INC B ;Anfangsadr. < 8000H ? 1316 4893 05 DEC B 1317 4894 F2 04 53 JP P,ERDFC ;ja -> ill. function call 1318 4897 D1 DBSAV3: POP DE 1319 4898 E5 PUSH HL 1320 4899 C5 PUSH BC 1321 489A F5 PUSH AF 1322 489B AF XOR A ;file #0 1323 489C 1E 02 LD E,02H ;OPEN FOR OUTPUT 1324 489E DD 21 08 6D LD IX,OPEN4 1325 48A2 CD 59 01 CALL JL1CAL 1326 48A5 F1 POP AF 1327 48A6 F5 PUSH AF 1328 48A7 3E FE LD A,0FEH ;MC 1329 48A9 38 02 JR C,DBSAVD 1330 48AB 3E FD LD A,0FDH ;Screen 1331 48AD CD FB 46 DBSAVD: CALL ZEINTR ;eintragen 1332 48B0 F1 POP AF 1333 48B1 E1 POP HL 1334 48B2 E5 PUSH HL 1335 48B3 F5 PUSH AF 1336 48B4 CD 47 48 CALL SAVHL ;Anfangsadr 1337 48B7 2A 44 F7 LD HL,(LADBSA) 1338 48BA CD 47 48 CALL SAVHL ;Endadr 1339 48BD 2A 6E FC LD HL,(STADR) 1340 48C0 CD 47 48 CALL SAVHL ;Startadr eintragen 1341 48C3 F1 POP AF 1342 48C4 D1 POP DE 1343 48C5 2A 44 F7 LD HL,(LADBSA) ;Endadr 1344 48C8 30 1B JR NC,DBSAV4 ;Screen 1345 48CA 1A DBSAV5: LD A,(DE) ;Zeichen holen 1346 48CB D5 PUSH DE 1347 48CC E5 PUSH HL 1348 48CD CD FB 46 CALL ZEINTR ;und ausgeben 1349 48D0 E1 POP HL 1350 48D1 D1 POP DE 1351 48D2 E7 RST CPREG 1352 48D3 28 05 JR Z,DBSAV6 1353 48D5 38 03 JR C,DBSAV6 1354 48D7 13 INC DE 1355 48D8 18 F0 JR DBSAV5 1356 48DA AF DBSAV6: XOR A 1357 48DB DD 21 32 6D LD IX,CLOSE1 ;CLOSE 1358 48DF CD 59 01 CALL JL1CAL 1359 48E2 C3 EB 4F JP END4 ; 1360 48E5 E5 DBSAV4: PUSH HL 1361 48E6 CD 97 17 CALL CURSRD ;Kursoradr lesen 1362 48E9 22 65 F5 LD (HARI5),HL ;retten 1363 48EC CD 1B 4B CALL KRAUS 1364 48EF E1 POP HL 1365 48F0 ED 5B 6E FC LD DE,(STADR) 1366 48F4 A7 AND A 1367 48F5 ED 52 SBC HL,DE 1368 48F7 23 INC HL 1369 48F8 22 44 F7 LD (LADBSA),hl ;Laenge gesamt 1370 48FB CD 8D 51 CALL BLSIZE ;Blockgroesse bestimmen 1371 48FE E5 PUSH HL 1372 48FF ED 5B 44 F7 LD DE,(LADBSA) 1373 4903 7A LD A,D 1374 4904 B3 OR E 1375 4905 20 05 JR NZ,DBSA11 1376 4907 37 SCF 1377 4908 F5 PUSH AF 1378 4909 18 0D JR DBSA10 1379 490B E5 DBSAV7: PUSH HL ;Laenge rec 1380 490C ED 5B 44 F7 DBSA11: LD DE,(LADBSA) ;Restlaenge gesamt 1381 4910 E7 RST CPREG 1382 4911 F5 PUSH AF 1383 4912 4B LD C,E 1384 4913 42 LD B,D 1385 4914 30 04 JR NC,DBSAVC 1386 4916 28 02 JR Z,DBSAVC 1387 4918 4D DBSA10: LD C,L ;bc: Anzahl 1388 4919 44 LD B,H 1389 491A 2A 6E FC DBSAVC: LD HL,(STADR) ;Anfang 1390 491D E5 PUSH HL 1391 491E 09 ADD HL,BC 1392 491F 22 6E FC LD (STADR),HL ;neuer Anfang 1393 4922 E1 POP HL ;Anfang 1394 4923 ED 5B 90 E8 LD DE,(HIADR) 1395 4927 CD 59 00 CALL JIBCDE ;Lesen von VDP,bc mal nach de 1396 492A F1 POP AF 1397 492B 30 12 JR NC,DBSAV8 1398 492D E1 POP HL 1399 492E E5 PUSH HL 1400 492F CD 51 49 CALL DBSAVA 1401 4932 2A 44 F7 LD HL,(LADBSA) ;Laenge gesamt 1402 4935 D1 POP DE ;Laenge rec 1403 4936 A7 AND A 1404 4937 ED 52 SBC HL,DE ;- Anzahl 1405 4939 22 44 F7 LD (LADBSA),hHL 1406 493C EB EX DE,HL 1407 493D 18 CC JR DBSAV7 ;weiter 1408 493F E1 DBSAV8: POP HL ;Rest ausgeben 1409 4940 2A 44 F7 LD HL,(LADBSA) 1410 4943 CD 51 49 CALL DBSAVA 1411 4946 2A 65 F5 LD HL,(HARI5) ;Kursoradr reg. 1412 4949 CD 86 17 CALL CURSS 1413 494C CD 24 4B CALL KREIN 1414 494F 18 89 DBSAVJ: JR DBSAV6 ;fertig, CLOSE 1415 4951 45 DBSAVA: LD B,L ;80 bytes 1416 4952 CB 20 SLA B ;oder weniger von SCREEN-Puffer 1417 4954 2A 90 E8 LD HL,(HIADR) ;ausgeben 1418 4957 7E DBSAVB LD A,(HL) 1419 4958 C5 PUSH BC 1420 4959 E5 PUSH HL 1421 495A CD FB 46 CALL ZEINTR ;in file 1422 495D E1 POP HL 1423 495E 23 INC HL 1424 495F C1 POP BC 1425 4960 10 F5 DJNZ DBSAVB 1426 4962 C9 RET ; 1427 4963 CD C2 52 DBSAVG: CALL DTCHA0 ;BSAVE Zeichengenerator 1428 4966 C1 POP BC ;Anfangsadr. 1429 4967 78 LD A,B 1430 4968 A7 AND A 1431 4969 C2 04 53 JP NZ,ERDFC ;Anfang > 255 -> ill.f.call 1432 496C D1 POP DE 1433 496D E5 PUSH HL 1434 496E C5 PUSH BC ;Anfangsadr. 1435 496F AF XOR A ;file #0 1436 4970 1E 02 LD E,02H ;OPEN FOR OUTPUT 1437 4972 DD 21 08 6D LD IX,OPEN4 1438 4976 CD 59 01 CALL JL1CAL 1439 4979 3E FC LD A,0FCH ;ZG 1440 497B CD FB 46 CALL ZEINTR 1441 497E E1 POP HL 1442 497F CD 47 48 CALL SAVHL ;Anfang 1443 4982 2A 44 F7 LD HL,(LADBSA) 1444 4985 CD 47 48 CALL SAVHL ;Ende 1445 4988 2A 6E FC LD HL,(STADR) 1446 498B CD 47 48 CALL SAVHL ;Start 1447 498E 2A 44 F7 LD HL,(LADBSA) ;letzte Zeichennummer 1448 4991 ED 5B 6E FC LD DE,(STADR) ;erste Zeichennummer in e 1449 4995 A7 AND A 1450 4996 ED 52 SBC HL,DE 1451 4998 23 INC HL ;Zeichenanzahl (max 256) 1452 4999 4B LD C,E ;Zeichennr. in c 1453 499A 7C DBSAVH: LD A,H 1454 499B B5 OR L 1455 499C 28 B1 JR Z,DBSAVJ ;fertig 1456 499E E5 PUSH HL ;Anzahl 1457 499F C5 PUSH BC ;Nr. 1458 49A0 79 LD A,C 1459 49A1 CD 2D 00 CALL REZEMU 1460 49A4 06 08 LD B,08H 1461 49A6 21 AA FB LD HL,ZEIPUF 1462 49A9 7E DBSAVI LD A,(HL) 1463 49AA E5 PUSH HL 1464 49AB C5 PUSH BC 1465 49AC CD FB 46 CALL ZEINTR 1466 49AF C1 POP BC 1467 49B0 E1 POP HL 1468 49B1 23 INC HL 1469 49B2 10 F5 DJNZ DBSAVI 1470 49B4 C1 POP BC 1471 49B5 E1 POP HL 1472 49B6 2B DEC HLl ;Anzahl-=1 1473 49B7 0C INC C ;naechstes Zeichen 1474 49B8 18 E0 JR DBSAVH ; 1475 49BA D0 DBLOAD: RET NC 1476 49BB CD 58 53 CALL STCKM ;BLOAD MC 1477 49BE D5 PUSH DE 1478 49BF AF XOR A 1479 49C0 32 6D FC LD (AUTOST),A 1480 49C3 4F LD C,A 1481 49C4 47 LD B,A 1482 49C5 CD C1 52 CALL DTCHAR ;Anweisungsende ? 1483 49C8 28 21 JR Z,DBLOA3 ;ja 1484 49CA CD B7 52 CALL DCPSTX ;nein 1485 49CD 2C DEFB ',' 1486 49CE FE 52 CP 'R' ;Autostart ? 1487 49D0 28 08 JR Z,DBLOA1 ;ja 1488 49D2 FE 53 CP 'S' ;nein, in Bildspeicher ? 1489 49D4 28 04 JR Z,DBLOA1 ;ja 1490 49D6 FE 5A CP 'Z' ;nein, in ZG ? 1491 49D8 20 0C JR NZ,DBLOA2 ;nein 1492 49DA 32 6D FC DBLOA1: LD (AUTOST),A 1493 49DD CD C2 52 CALL DTCHA0 1494 49E0 28 09 JR Z,DBLOA3 ;Anweisungsende 1495 49E2 CD B7 52 CALL DCPSTX 1496 49E5 2C DEFB ',' 1497 49E6 CD 0C 4B DBLOA2: CALL ADTDEX ;Verschiebung 1498 49E9 42 LD B,D 1499 49EA 4B LD C,E 1500 49EB D1 DBLOA3: POP DE 1501 49EC E5 PUSH HL 1502 49ED C5 PUSH BC 1503 49EE 3E FF LD A,0FFH 1504 49F0 32 1C FC LD (HLPERR),A 1505 49F3 AF XOR A 1506 49F4 1E 01 LD E,01H ;OPEN FOR INPUT 1507 49F6 DD 21 08 6D LD IX,OPEN4 1508 49FA CD 59 01 CALL JL1CAL 1509 49FD CD 25 46 CALL ZEILE 1510 4A00 C1 POP BC ;Verschiebung 1511 4A01 F5 PUSH AF ;file type 1512 4A02 CD FA 4A CALL LSHLBC ;2 byte lesen, + Verschiebung 1513 4A05 E5 PUSH HL 1514 4A06 CD FA 4A CALL LSHLBC ;das 3 x 1515 4A09 E5 PUSH HL 1516 4A0A CD FA 4A CALL LSHLBC 1517 4A0D 22 6E FC LD (STADR),HL ;Startadr 1518 4A10 E1 POP HL ;Endadr 1519 4A11 C1 POP BC ;Anfadr 1520 4A12 A7 AND A 1521 4A13 ED 42 SBC HL,BC 1522 4A15 23 INC HL ;Laenge 1523 4A16 22 90 E8 LD (HIADR),HL 1524 4A19 3A 6D FC LD A,(AUTOST) 1525 4A1C FE 53 CP 'S' 1526 4A1E CA 5B 4A JP Z,DBLOA6 ;S -> in screen 1527 4A21 FE 5A CP 'Z' 1528 4A23 CA D0 4A JP Z,DBLOAG ;Z -> in ZG 1529 4A26 F1 DBLOA4: POP AF ;file type 1530 4A27 FE FE CP 0FEH ;MC RAM 1531 4A29 C2 9E 51 JP NZ,ERBMOD 1532 4A2C 7C DBLOAE: LD A,H ;Laenge = 0 ? 1533 4A2D B5 OR L 1534 4A2E 28 0C JR Z,DBLOA5 ;ja, fertig 1535 4A30 E5 PUSH HL ;Laenge 1536 4A31 C5 PUSH BC ;Adresse 1537 4A32 CD 25 46 CALL ZEILE ;Zeichen aus file in a 1538 4A35 C1 POP BC 1539 4A36 E1 POP HL 1540 4A37 02 LD (BC),A ;in Speicher 1541 4A38 2B DEC HL 1542 4A39 03 INC BC 1543 4A3A 18 F0 JR DBLOAE 1544 4A3C DD 21 E1 4A DBLOA5: LD IX,AUSGE ;Endebehandlung 1545 4A40 CD 59 01 CALL JL1CAL 1546 4A43 AF XOR A 1547 4A44 DD 21 32 6D LD IX,CLOSE1 ;file 0 close 1548 4A48 CD 59 01 CALL JL1CAL 1549 4A4B 21 59 4A LD HL,DBLOAB 1550 4A4E E5 PUSH HL 1551 4A4F 3A 6D FC LD A,(AUTOST) ;Autostart? 1552 4A52 A7 AND A 1553 4A53 C8 RET Z ;nein 1554 4A54 2A 6E FC LD HL,(STADR) ;ja 1555 4A57 E5 PUSH HL 1556 4A58 C9 RET 1557 4A59 E1 DBLOAB: POP HL 1558 4A5A C9 RET ; 1559 4A5B CD 97 17 DBLOA6: CALL CURSRD ;Kursor retten 1560 4A5E 22 65 F5 LD (HARI5),HL 1561 4A61 CD 1B 4B CALL KRAUS 1562 4A64 CD 98 01 CALL REMASK ;Schreibmaske ruecksetzen 1563 4A67 F1 POP AF ;file type 1564 4A68 FE FD CP 0FDH 1565 4A6A C2 9E 51 JP NZ,ERBMOD 1566 4A6D 2A 90 E8 LD HL,(HIADR) 1567 4A70 22 44 F7 LD (LADBSA),HL 1568 4A73 CD 8D 51 CALL BLSIZE ;(HIADR)=Pufferad, hl=Laenge 1569 4A76 E5 DBLOA7: PUSH HL 1570 4A77 ED 5B 44 F7 LD DE,(LADBSA) ;Laenge in screen 1571 4A7B E7 RST CPREG 1572 4A7C F5 PUSH AF 1573 4A7D 4B LD C,E 1574 4A7E 42 LD B,D 1575 4A7F 30 04 JR NC,DBLOAC 1576 4A81 28 02 JR Z,DBLOAC 1577 4A83 4D LD C,L 1578 4A84 44 LD B,H ;Anzahl words in bc 1579 4A85 2A 6E FC DBLOAC: LD HL,(STADR) ;Anfang 1580 4A88 E5 PUSH HL 1581 4A89 09 ADD HL,BC 1582 4A8A 22 6E FC LD (STADR),HL ;Anfang' 1583 4A8D D1 POP DE ;Anfang 1584 4A8E 2A 90 E8 LD HL,(HIADR) 1585 4A91 CD B8 4A CALL DBLOA9 ;Lesen aus file in Puffer 1586 4A94 EB EX DE,HL 1587 4A95 CD 5C 00 CALL JOBCDE ;Schreiben in VDP, bc mal 1588 4A98 F1 POP AF ;weiter? 1589 4A99 30 0D JR NC,DBLOA8 ;nein 1590 4A9B 2A 44 F7 LD HL,(LADBSA) 1591 4A9E D1 POP DE 1592 4A9F A7 AND A 1593 4AA0 ED 52 SBC HL,DE 1594 4AA2 22 44 F7 LD (LADBSA),HL 1595 4AA5 EB EX DE,HL 1596 4AA6 18 CE JR DBLOA7 1597 4AA8 2A 65 F5 DBLOA8: LD HL,(HARI5) ;Kursor reg. 1598 4AAB CD 86 17 CALL CURSS 1599 4AAE CD 24 4B KREIN 1600 4AB1 C1 POP BC 1601 4AB2 AF DBLOAH: XOR A 1602 4AB3 32 6D FC LD (AUTOST),A 1603 4AB6 18 84 JR DBLOA5 1604 4AB8 C5 DBLOA9: PUSH BC ;Anzahl (words) 1605 4AB9 D5 PUSH DE ;Ziel in screen 1606 4ABA E5 PUSH HL ;Quelle in Puffer 1607 4ABB 41 LD B,C 1608 4ABC CB 20 SLA B ;*2 (bytes) 1609 4ABE 2A 90 E8 LD HL,(HIADR) 1610 4AC1 C5 DBLOAA: PUSH BC 1611 4AC2 E5 PUSH HL 1612 4AC3 CD 25 46 CALL ZEILE ;Zeichen lesen aus file 1613 4AC6 E1 POP HL 1614 4AC7 77 LD (HL),A ;eintragen in Puffer 1615 4AC8 23 INC HL 1616 4AC9 C1 POP BC 1617 4ACA 10 F5 DJNZ DBLOAA 1618 4ACC E1 POP HL ;Puffer gefuellt 1619 4ACD D1 POP DE ;Register reg. 1620 4ACE C1 POP BC 1621 4ACF C9 RET ; 1622 4AD0 F1 DBLOAG: POP AF ;file type 1623 4AD1 FE FC CP 0FCH ;ZG ? 1624 4AD3 C2 9E 51 JP NZ,ERBMOD 1625 4AD6 7C DBLOAJ: LD A,H ;hl - Anzahl 1626 4AD7 B5 OR L ;(b)c - erste Zeichennummer 1627 4AD8 28 D8 JR Z,DBLOAH ;fertig 1628 4ADA E5 PUSH HL ;Restanzahl 1629 4ADB C5 PUSH BC ;Zeichen-Nr. 1630 4ADC 06 08 LD B,08H ;8 bytes pro Zeichen 1631 4ADE 21 AA FB LD HL,ZEIPUF ;Pufferadr. 1632 4AE1 E5 DBLOAI: PUSH HL 1633 4AE2 C5 PUSH BC 1634 4AE3 CD 25 46 CALL ZEILE 1635 4AE6 C1 POP BC 1636 4AE7 E1 POP HL 1637 4AE8 77 LD (HL),A 1638 4AE9 23 INC HL 1639 4AEA 10 F5 DJNZ DBLOAI 1640 4AEC C1 POP BC ;Zeichen-Nr. 1641 4AED C5 PUSH BC 1642 4AEE 21 AA FB LD HL,ZEIPUF ;Pufferadr. 1643 4AF1 CD 77 01 CALL WRZEMU 1644 4AF4 C1 POP BC 1645 4AF5 0C INC C ;naechstes Zeichen 1646 4AF6 E1 POP HL ;Anzahl 1647 4AF7 2B DEC HL ;-1 1648 4AF8 18 DC JR DBLOAJ ; 1649 4AFA C5 LSHLBC: PUSH BC ;2 byte aus file, + bc 1650 4AFB CD 25 46 CALL ZEILE ;(Adresse + Verschiebung) 1651 4AFE F5 PUSH AF 1652 4AFF CD 25 46 CALL ZEILE 1653 4B02 67 LD H,A 1654 4B03 F1 POP AF 1655 4B04 6F LD L,A 1656 4B05 C1 POP BC 1657 4B06 09 ADD HL,BC 1658 4B07 C9 RET ; 1659 4B08 CD B7 52 KADTDE: CALL DCPSTX 1660 4B0B 2C DEFB ',' ;??? (UZ) 1661 4B0C DD 21 10 71 ADTDEX: LD IX,ADTDE 1662 4B10 C3 59 01 JP JL1CAL ; 1663 4B13 1B KAUS: DEFB 1BH ;ESC 1664 4B14 78 35 DEFM 'x5' 1665 4B16 00 DEFB 0 1666 4B17 1B KEIN: DEFB 1BH 1667 4B18 79 35 DEFM 'y5' 1668 4B1A 00 DEFB 0 ; 1669-1670 1671 4B1B E5 KRAUS: PUSH HL 1672 4B1C 21 13 4B LD HL,KAUS 1673 4B1F CD 4A 43 KRAUS1: CALL STROUT 1674 4B22 E1 POP HL 1675 4B23 C9 RET 1676 4B24 E5 KREIN: PUSH HL 1677 4B25 21 17 4B LD HL,KEIN 1678 4B28 18 F5 JR KRAUS1 ; 1679 4B2A DD 21 40 F2 FILGE: LD IX,LWRUP+6 ;GET und PUT 1680 4B2E FD 21 00 04 LD IY,0400H 1681 4B32 CD 3F 44 CALL STACKM ;Stackmanipul 1682 4B35 7E LD A,(HL) 1683 4B36 FE 04 CP 04H ;random ? 1684 4B38 C2 9E 51 JP NZ,ERBMOD ;bad file mode 1685 4B3B C1 POP BC 1686 4B3C F1 POP AF 1687 4B3D 32 92 E8 LD (HPUGE),A ;PUT/GET 1688 4B40 C5 PUSH BC 1689 4B41 01 0F 01 LD BC,010FH ;BASIC rrn 1690 4B44 09 ADD HL,BC 1691 4B45 5E LD E,(HL) 1692 4B46 23 INC HL 1693 4B47 56 LD D,(HL) 1694 4B48 13 INC DE ;rrn = +1 1695 4B49 E3 EX (SP),HL ;(fcb+110h), Zeiger 1696 4B4A CD C1 52 CALL DTCHAR 1697 4B4D 28 0B JR Z,FILGE1 ;Anweisungsende 1698 4B4F CD B7 52 CALL DCPSTX 1699 4B52 2C DEFB ',' ;??? (UZ) 1700 4B53 DD 21 E6 51 LD IX,INTDE2 ;rec nr uebernehmen 1701 4B57 CD 59 01 CALL JL1CAL 1702 4B5A E3 FILGE1: EX (SP),HL ;fcb+110h, (Zeiger) 1703 4B5B CB 7A BIT 7,D ;< 32768 ? 1704 4B5D C2 04 53 JP NZ,ERDFC ;ill. function call 1705 4B60 7B LD A,E 1706 4B61 B2 OR D 1707 4B62 CA 04 53 JP Z,ERDFC ;=0 -> dto. 1708 4B65 2B DEC HL ;BASIC random rrn 1709 4B66 73 LD (HL),E ;eintragen 1710 4B67 23 INC HL 1711 4B68 72 LD (HL),D 1712 4B69 1B DEC DE ;rrn-1 1713 4B6A 23 INC HL 1714 4B6B 23 INC HL 1715 4B6C AF XOR A 1716 4B6D 77 LD (HL),A 1717 4B6E 23 INC HL 1718 4B6F 77 LD (HL),A 1719 4B70 01 F8 FF LD BC,-8 1720 4B73 09 ADD HL,BC ;user set record size 1721 4B74 7E LD A,(HL) 1722 4B75 23 INC HL 1723 4B76 66 LD H,(HL) 1724 4B77 6F LD L,A 1725 4B78 EB EX DE,HL 1726 4B79 D5 PUSH DE ;rec size 1727 4B7A E5 PUSH HL ;rec nr 1728 4B7B 21 80 00 LD HL,0080H 1729 4B7E E7 RST CPREG ;rec size = 80h ? 1730 4B7F E1 POP HL 1731 4B80 20 05 JR NZ,FILGE2 1732 4B82 11 00 00 LD DE,0000H 1733 4B85 18 38 JR FILGE9 ;fuer rec size = 80h 1734 4B87 42 FILGE2: LD B,D ;<> 80h 1735 4B88 4B LD C,E 1736 4B89 3E 10 LD A,10H 1737 4B8B EB EX DE,HL 1738 4B8C 21 00 00 LD HL,0000H 1739 4B8F E5 PUSH HL 1740 4B90 29 FILGE3: ADD HL,HL 1741 4B91 E3 EX (SP),HL 1742 4B92 30 04 JR NC,FILGE4 1743 4B94 29 ADD HL,HL 1744 4B95 23 INC HL 1745 4B96 18 01 JR FILGE5 1746 4B98 29 FILGE4: ADD HL,HL 1747 4B99 E3 FILGE5: EX (SP),HL 1748 4B9A EB EX DE,HL 1749 4B9B 29 ADD HL,HL 1750 4B9C EB EX DE,HL 1751 4B9D 30 06 JR NC,FILGE7 1752 4B9F 09 ADD HL,BC 1753 4BA0 E3 EX (SP),HL 1754 4BA1 30 01 JR NC,FILGE6 1755 4BA3 23 INC HL 1756 4BA4 E3 FILGE6: EX (SP),HL 1757 4BA5 3D FILGE7: DEC A 1758 4BA6 20 E8 JR NZ,FILGE3 1759 4BA8 7D LD A,L 1760 4BA9 E6 7F AND 7FH 1761 4BAB 5F LD E,A 1762 4BAC 16 00 LD D,00H 1763 4BAE C1 POP BC 1764 4BAF 7D LD A,L 1765 4BB0 6C LD L,H 1766 4BB1 61 LD H,C 1767 4BB2 29 ADD HL,HL 1768 4BB3 DA 04 53 JP C,ERDFC ;ill. function call 1769 4BB6 17 RLA 1770 4BB7 30 01 JR NC,FILGE8 1771 4BB9 23 INC HL 1772 4BBA 78 FILGE8: LD A,B 1773 4BBB B7 OR A 1774 4BBC C2 04 53 JP NZ,ERDFC ;ill. function call 1775 4BBF 22 94 E8 FILGE9: LD (HRECNU),HL ;rec nr retten 1776 4BC2 ED 4B 2B F7 LD BC,(ACTFCB) 1777 4BC6 21 09 00 LD HL,0009H ;Anfang FIELD-Bereich 1778 4BC9 09 ADD HL,BC 1779 4BCA 22 96 E8 LD (HFIELD),HL 1780 4BCD CD C6 46 FILGEA: CALL ACTBDO ;Anfang dma-Bereich 1781 4BD0 01 24 00 LD BC,0024H 1782 4BD3 09 ADD HL,BC 1783 4BD4 19 ADD HL,DE 1784 4BD5 22 98 E8 LD (HDMAB),hl 1785 4BD8 21 80 00 LD HL,0080H 1786 4BDB 7D LD A,L 1787 4BDC 93 SUB E 1788 4BDD 6F LD L,A 1789 4BDE 7C LD A,H 1790 4BDF 9A SBC A,D 1791 4BE0 67 LD H,A 1792 4BE1 D1 POP DE 1793 4BE2 D5 PUSH DE ;rec size 1794 4BE3 E7 RST CPREG 1795 4BE4 38 02 JR C,FILGEB 1796 4BE6 62 LD H,D 1797 4BE7 6B LD L,E 1798 4BE8 3A 92 E8 FILGEB: LD A,(HPUGE) 1799 4BEB B7 OR A ;PUT oder GET ? 1800 4BEC 28 3A JR Z,FILGEE ;GET 1801 4BEE 11 80 00 LD DE,0080H ;PUT 1802 4BF1 E7 RST CPREG 1803 4BF2 30 05 JR NC,FILGEC 1804 4BF4 E5 PUSH HL 1805 4BF5 CD 44 4C CALL FILGEG 1806 4BF8 E1 POP HL 1807 4BF9 C5 FILGEC: PUSH BC 1808 4BFA 44 LD B,H 1809 4BFB 4D LD C,L 1810 4BFC 2A 98 E8 LD HL,(HDMAB) 1811 4BFF EB EX DE,HL 1812 4C00 2A 96 E8 LD HL,(HFIELD) 1813 4C03 CD 7B 4C CALL FILGEJ ;umladen bc * 1814 4C06 22 96 E8 LD (HFIELD),HL 1815 4C09 50 LD D,B 1816 4C0A 59 LD E,C 1817 4C0B C1 POP BC 1818 4C0C CD 43 4C CALL FILGEF 1819 4C0F E1 FILGED: POP HL 1820 4C10 7D LD A,L 1821 4C11 93 SUB E 1822 4C12 6F LD L,A 1823 4C13 7C LD A,H 1824 4C14 9A SBC A,D 1825 4C15 67 LD H,A 1826 4C16 B5 OR L 1827 4C17 11 00 00 LD DE,0000H 1828 4C1A E5 PUSH HL 1829 4C1B 2A 94 E8 LD HL,(HRECNU) 1830 4C1E 23 INC HL 1831 4C1F 22 94 E8 LD (HRECNU),HL 1832 4C22 20 A9 JR NZ,FILGEA 1833 4C24 E1 POP HL 1834 4C25 C3 EB 4F JP END4 ;