Files
RFS/asm/mz5z008.asm
2026-04-01 17:16:00 +01:00

19788 lines
550 KiB
NASM

; Disassembly of the file "mz5z008.bin"
;
; CPU Type: Z80
;
; Created with dZ80 2.1
;
; on Monday, 16 of March 2026 at 07:23 PM
;
LSD0 EQU 0D0H
LSD1 EQU 0D1H
LSD2 EQU 0D2H
LSD3 EQU 0D3H
LSE0 EQU 0E0H
LSE1 EQU 0E1H
LSE2 EQU 0E2H
LSE3 EQU 0E3H
LSE4 EQU 0E4H
LSE5 EQU 0E5H
LSE6 EQU 0E6H
QDPA EQU 0F2H
QDPB EQU 0F3H
QDPC EQU 0F4H
QDPD EQU 0F5H
FDPA EQU 0F8H
FDPB EQU 0F9H
FDPC EQU 0FAH
FDPD EQU 0FBH
LSFC EQU 0FCH
TMCNT EQU 01195H
CSMDT EQU 01199H
TEMPW EQU 0119EH
KEY262 EQU 012AAH
KEY264 EQU 012ACH
KEY266 EQU 012AEH
FUNBUF EQU 012B2H
INBUFC EQU 01352H
INBUFL EQU 01353H
INBUF EQU 01354H
TIMST EQU 00033H ; Timer stop routine in Monitor ROM
LINLIM EQU 01364H
KEYDAT EQU 01365H
AMPM EQU 01366H
SECD EQU 01367H
XS EQU 01369H
XE EQU 0136AH
CWIDTH EQU 0136BH
CSIZE EQU 0136DH
YS EQU 0136FH
YE EQU 01370H
YW EQU 01371H
SOF EQU 01372H
SW EQU 01374H
SSA EQU 01375H
SEA EQU 01376H
SSW EQU 01377H
CRTMD1 EQU 01379H
CRTMD2 EQU 0137AH
SELCOL EQU 0137BH
PAIWED EQU 0137CH
PALBK EQU 0137EH
PALAD EQU 0137FH
PALTBL EQU 01381H
PAL2T EQU 01385H
PAL4T EQU 01389H
PAL16T EQU 0138DH
CURDT1 EQU 01391H
CURDT2 EQU 01399H
CURDT3 EQU 013A1H
SCRNT0 EQU 013A9H
EMFLG EQU 013C3H
EMPTR EQU 013C4H
EMWP0 EQU 013C6H
EMWP1 EQU 013C8H
PBCN EQU 013CEH
HERRF EQU 013D9H
CTABLE EQU 013DAH
FONTBF EQU 01000H
TEXTBF EQU 02000H
BITBUF EQU 08000H
IBUFE EQU 010F0H
ERRTXT EQU 0FDA0H
VRAM EQU 0D000H
ARAM EQU 0D800H
MMIO EQU 0E000H
TEMPO_ EQU 0E008H
PPI_PA EQU 0E010H
PPI_PB EQU 0E011H
PPI_PC EQU 0E012H
PPI_CTL EQU 0E013H
PRGSTART EQU 00000H
; ===========================================================================
; Build configuration — set these flags to select the build variant:
;
; BUILD_RFS=0, BUILD_TAPE=0 : Original BASIC (QD boot, no RFS)
; BUILD_RFS=0, BUILD_TAPE=1 : Original BASIC (Tape/CMT/RFS ROM boot)
; BUILD_RFS=1, BUILD_TAPE=0 : RFS Enhanced BASIC (QD boot)
; BUILD_RFS=1, BUILD_TAPE=1 : RFS Enhanced BASIC (Tape/CMT/RFS ROM boot)
; ===========================================================================
;BUILD_RFS EQU 1 ; 0 = original BASIC, 1 = RFS enhancements
;BUILD_TAPE EQU 0 ; 0 = QD boot, 1 = Tape/CMT/RFS ROM boot
; Tape/CMT boot constants
ATRB EQU 010F0H ; MZF header location (= ELMD area)
TAPECOPY EQU 01200H ; Load address for tape bootstrap
HDRLEN EQU 00040H ; MZF header length (64 bytes)
; RFS (ROM Filing System) constants for picoZ80
PORT_LODRAM EQU 0E0H ; OUT: map 0000-0FFF to DRAM
PORT_DRAM EQU 0E1H ; OUT: map D000-FFFF to DRAM
PORT_LOROM EQU 0E2H ; OUT: map 0000-0FFF to Monitor ROM
PORT_MMIO EQU 0E3H ; OUT: map D000-FFFF to VRAM/MMIO/ROM
BNKCTRLRST EQU 0EFF8H ; RFS bank control reset register
BNKCTRL EQU 0EFFFH ; Bank Control register (CS, CLK bits)
HWSPIDATA EQU 0EFFBH ; Hardware SPI Data register (read/write)
HWSPISTART EQU 0EFFCH ; Start SPI transfer register
; SECTORBUF relocated to RFS data area — was EQU 0CE00H (overlapped BASIC stack)
SDCS_ACT EQU 001H ; BNKCTRL: CS LOW (active), BBCLK enable
SDCS_DEACT EQU 003H ; BNKCTRL: CS HIGH (inactive), BBCLK enable
; ---------------------------------------------------------------------------
; MZF tape header (only for BUILD_TAPE=1)
; Loaded by Monitor ROM at ATRB (0x10F0), then bootstrapped to 0x0000
; ---------------------------------------------------------------------------
IF BUILD_TAPE = 1
ORG ATRB
BOOTATRB: DB 001H ; File type: 01 = Machine Code
IF BUILD_RFS = 1
BOOTNAME: DB "BASIC 5Z-008BRFS", 00DH ; Title (17 bytes + CR)
ELSE
BOOTNAME: DB "BASIC 5Z-008B ", 00DH ; Title (17 bytes + CR)
ENDIF
BOOTSIZE: DW BASICEND - L0000 ; Size of program
BOOTDTADR: DW TAPECOPY ; Load address
BOOTEXADR: DW EXECSTART + TAPECOPY ; Exec address (relocated)
BOOTCOMNT: DS 104 ; Comment area (unused)
ENDIF
ORG PRGSTART
L0000: JP L0CAF ; Cold start entry - JP to initialization
L0003: JP L028C
L0006: JP L05EC
JP L05E8
L000C: JP L0BFD
L000F: JP L05F1
L0012: JP L0BFF
L0015: JP L0BEE
SVC_ENTRY: JP SVC_DISP ; RST 18H - SVC (Supervisor Call) dispatcher
JP L041C
BRKCHK: JP L05C1
JP L30CB
JP L30D2
L0027: JP L3114
JP L311B
JP L3153
L0030: JP L14BC
JP L0955
L0036: LD B,B
NOP
RST38: JP BREAKZ ; RST 38H - Interrupt handler
JP L098F
L003E: JP L0D3F
L0041: JP L0D30
JP L0D05
JP L0D20
JP L028C
L004D: DB 000H ; System status / work area
L004E: DB 000H
L004F: DB 0FFH
L0050: DB 000H
DB 0C3H
DB 0EEH
DB 00BH
L0054: DS 2, 000H
L0056: DB 000H
L0057: DB 018H
DB 0C3H
DB 08AH
DB 003H
L005B: DB 000H
DB 027H
L005D: DB 071H
DB 000H
L005F: DB 000H
L0060: DB 0EFH
DB 0C3H
DB 037H
DB 00AH
L0064: DB 000H
L0065: DB 000H
L0066: DB 000H
L0067: DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB 0ADH
DB 007H
DB 0F1H
DB 008H
L0071: DB 015H
DB 008H
DB 012H
DB 008H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
L0080: DB 000H
L0081: DB 0ADH
DB 007H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB 01EH
DB 008H
DB 0CCH
DB 007H
DB 0F0H
DB 007H
DB LSD1
DB 007H
DB QDPD
DB 007H
DB 054H
DB 007H
DB 074H
DB 007H
DB 018H
DB 008H
DB 0BAH
DB 008H
DB 012H
DB 008H
DB LSE5
DB 000H
DB 0ADH
DB 007H
DB LSE5
L00A0: DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
.NOP: DB 000H
.HL: DS 11, 000H
.RET: DS 8, 000H
PUSHRA: DS 6, 000H
L00C0: DS 7, 000H
PUSHR: DS 18, 000H
L00D9: DB 000H
L00DA: DI
LD SP,L0000
IM 1
OUT (LSE1),A
JP L1800
BREAKZ: RET
BREAKX: DI
OUT (LSE3),A
L00E9: LD A,(HL)
OUT (LSE1),A
EI
ERRORJ: RET
POPRA: DI
OUT (LSE3),A
LD (HL),A
OUT (LSE1),A
EI
RET
JP L026A
L00F9: NOP
L00FA: JP (HL)
IOOUT: EX (SP),IX
PUSH HL
PUSH BC
PUSH DE
L0100: PUSH AF
L0101: PUSH HL
LD HL,L0114
EX (SP),HL
JP (IX)
SKPDE: EX (SP),IX
PUSH HL
PUSH BC
PUSH DE
DEVASC: PUSH HL
LD HL,L0115
EX (SP),HL
JP (IX)
L0114: POP AF
L0115: POP DE
POP BC
POP HL
POP IX
RET
CHKACC: EX (SP),HL
PUSH BC
LD B,(HL)
L011E: INC HL
CP (HL)
JR Z,L0127 ; (+005H)
DJNZ L011E ; (-006H)
INC HL
JR L012A ; (+003H)
L0127: INC HL
DJNZ L0127 ; (-003H)
L012A: POP BC
EX (SP),HL
RET
LDDEMI: LD E,(HL)
INC HL
LD D,(HL)
INC HL
RET
LDDEMD: LD E,(HL)
INC HL
LD D,(HL)
DEC HL
RET
?CLRHL: XOR A
?SETHL: LD (HL),A
INC HL
DJNZ ?SETHL ; (-004H)
RET
?CLRDE: XOR A
?SETDE: LD (DE),A
INC DE
L0140: DJNZ ?SETDE ; (-004H)
RET
LDDEHL: LD A,(HL)
LD (DE),A
INC HL
INC DE
DJNZ LDDEHL ; (-006H)
RET
LDHLDE: LD A,(DE)
LD (HL),A
INC HL
INC DE
DJNZ LDHLDE ; (-006H)
RET
INDRCT: PUSH AF
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
POP AF
RET
ADDHLA: ADD A,L
LD L,A
RET NC
INC H
RET
INCHLF: INC HL
HLFTCH: LD A,(HL)
CP 020H
JR Z,INCHLF ; (-006H)
RET
TEST1: CALL HLFTCH
EX (SP),HL
L0168: CP (HL)
INC HL
EX (SP),HL
RET NZ
INC HL
RET
TESTX: CALL HLFTCH
EX (SP),HL
CP (HL)
INC HL
EX (SP),HL
INC HL
RET Z
LD A,001H
JR L0182 ; (+007H)
L017B: XOR A
LD HL,L803E
LD HL,L80F6
L0182: PUSH AF
CALL L0D20
POP AF
JP L0000
; ---------------------------------------------------------------------------
; SVC Dispatch Table (L018A - ~0x0201)
;
; This is a lookup table of 2-byte handler addresses indexed by SVC number.
; SVC_DISP uses: handler = word[L018A + SVC*2].
; NOTE: The bytes in this table also serve as executable code — several
; labels within the table (L01A2, L01CE, L01D9, L01E0) are jump targets
; from nearby code. This dual-purpose layout prevents conversion to DW.
;
; Key entries:
; SVC #00=3D9D #02=05E8 #05=0908 #20=0D3E #29=1EDB #2A=1F1D
; SVC #2E=19E0 #33=1AE1 #39=1D1B #3A=14DD
; ---------------------------------------------------------------------------
L018A: SBC A,L
DEC A
CALL PE,0E805H
DEC B
RST 038H
DEC BC
LD B,E
INC C
EX AF,AF'
ADD HL,BC
XOR C
RRCA
LD A,00FH
RET Z
DEC BC
JP Z,0D80BH
DEC BC
AND 00BH
L01A2: ADC A,H
LD (BC),A
ADC A,D
INC BC
POP BC
DEC B
AND B
INC D
ADD A,A
LD A,(BC)
ADC A,C
LD A,(BC)
SCF
LD A,(BC)
LD B,(HL)
INC D
HALT
INC D
SUB C
INC D
LD B,014H
LD E,H
LD (BC),A
POP HL
INC C
RET PE
INC C
RST 028H
INC C
PUSH HL
INC D
AND H
INC DE
LD (HL),D
INC DE
LD C,E
LD B,LSE5
NOP
LD A,00DH
JR NC,L01CE ; (+000H)
L01CE: PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
ADC A,A
ADD HL,BC
LD D,L
ADD HL,BC
SUB B
L01D9: DEC C
RET PE
DEC DE
IN A,(01EH)
DEC E
RRA
L01E0: POP AF
LD E,03DH
LD A,(DE)
CP B
LD A,(DE)
RET PO
ADD HL,DE
LD (HL),C
DEC DE
OR H
INC E
RET C
INC E
RET
INC E
POP HL
LD A,(DE)
RET NC
JR L01D9 ; (-01cH)
JR 00243H ; (+04cH)
ADD HL,DE
RRCA
JR L01A2 ; (-059H)
DEC DE
DEC DE
DEC E
DB 0DDH
INC D
L0200: PUSH HL
NOP
LD E,B
LD E,067H
INC L
OR (HL)
INC L
LD B,(HL)
INC L
NOP
ADD HL,HL
SBC A,L
LD HL,(02925H)
XOR E
RRA
CALL M,L742A
RLCA
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
PUSH HL
NOP
SVC_DISP: EX (SP),HL
PUSH AF
LD A,(HL)
INC HL
PUSH HL
LD HL,L018A
ADD A,A
ADD A,L
JR NC,L0237 ; (+001H)
INC H
L0237: LD L,A
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (00243H),HL
POP HL
POP AF
EX (SP),HL
JP L0000
IOCALL: PUSH HL
PUSH DE
LD (00251H),IX
LD IX,00180H
OR A
CALL L0000
POP DE
POP HL
RET NC
OR A
SCF
L0258: RET Z
JP 00180H
PUSH DE
LD B,000H
L025F: LD A,(DE)
OR A
JR Z,L0268 ; (+005H)
INC DE
INC B
JR NZ,L025F ; (-008H)
DEC B
L0268: POP DE
RET
L026A: PUSH HL
LD HL,(L0054)
PUSH HL
PUSH DE
CALL PUSHW
POP DE
LD (HL),000H
POP HL
CALL L028C
JR C,L028A ; (+00eH)
LD A,(L005B)
SUB L
JR NC,L028A ; (+008H)
NEG
LD L,A
LD H,000H
ADD HL,DE
EX DE,HL
OR A
L028A: POP HL
RET
L028C: PUSH BC
PUSH HL
PUSH DE
L028F: CALL L0391
CP 00DH
JP Z,L0311
CP 01BH
JR Z,L02E8 ; (+04dH)
PUSH AF
CP 020H
DEASC: JR C,L02CD ; (+02dH)
JR L02C8 ; (+026H)
L02A2: LD A,(L004D)
OR A
JR NZ,L02C8 ; (+020H)
LD A,(00B18H)
RRCA
JR C,L02C8 ; (+01aH)
LD A,(L004E)
OR A
JR NZ,L02C8 ; (+014H)
POP AF
LD HL,L06C1
CP 011H
JR Z,L02C3 ; (+007H)
LD HL,L06E7
CP 012H
JR NZ,L02C9 ; (+006H)
L02C3: CALL L00FA
JR L028F ; (-039H)
L02C8: POP AF
L02C9: RST 018H
DB 003H
JR L028F ; (-03eH)
L02CD: LD A,(L0060)
CP 0FFH
JR NZ,L02A2 ; (-032H)
POP AF
CP 017H
JR NC,L02C9 ; (-010H)
CP 011H
JR C,L02C9 ; (-014H)
LD HL,(00B18H)
BIT 6,L
JR Z,L02C9 ; (-01bH)
RST 018H
DB 004H
JR L028F ; (-059H)
L02E8: SCF
CKHEX: PUSH AF
LD A,00DH
RST 018H
DB 003H
POP AF
POP DE
POP HL
POP BC
RET
L02F3: CALL PUSHW
L02F6: LD A,(HL)
OR A
MHALT: RET Z
DEC HL
DEC E
LD A,(L0056)
CP E
JR C,L02F6 ; (-00bH)
RET
L0302: CALL PUSHW
L0305: INC E
INC HL
LD A,(HL)
OR A
RET Z
LD A,(L0057)
CP E
JR NC,L0305 ; (-00bH)
RET
L0311: LD HL,(L0054)
SETDFL: CALL L02F3
LD D,E
CALL L0305
LD A,(L005B)
LD L,A
LD A,E
SUB D
LD E,A
LD H,D
ADDP1: LD D,L
RST 018H
DB 01EH
LD A,(0005CH)
SUB D
ADDP2: INC A
LD D,A
POP BC
PUSH BC
EXX
PUSH HL
LD HL,(L004F)
EXX
L0334: PUSH DE
PUSH HL
L0336: CALL BREAKX
RST 018H
DB 01CH
INC HL
LD (BC),A
INC BC
L033E: EXX
DEC L
ERRX: JR Z,L0354 ; (+012H)
EXX
DEC D
JR NZ,L0336 ; (-010H)
POP HL
PUSH BC
LD BC,00028H
ADD HL,BC
POP BC
POP DE
DEC E
JR NZ,L0334 ; (-01dH)
PUSH DE
PUSH HL
EXX
L0354: EXX
POP HL
POP DE
EXX
POP HL
EXX
XOR A
LD (BC),A
LD L,C
LD H,B
POP DE
PUSH DE
PUSH HL
OR A
SBC HL,DE
LD B,L
POP HL
LD A,020H
LD D,A
JP Z,CKHEX
DEC HL
L036D: LD A,(HL)
OR A
JR Z,L0376 ; (+005H)
CP D
JR NZ,L037D ; (+009H)
LD (HL),000H
L0376: DEC HL
DJNZ L036D ; (-00cH)
OR A
JP CKHEX
L037D: LD A,(HL)
OR A
JR NZ,L0383 ; (+002H)
LD (HL),020H
L0383: DEC HL
DJNZ L037D ; (-009H)
OR A
JP CKHEX
INC A
JR Z,L0406 ; (+079H)
DEC A
JP Z,L041C
L0391: CALL L0426
CALL SKPDE
SETDNM: CALL L0648
CALL BREAKX
LD D,A
LD A,(L0060)
LD E,A
CALL POPRA
XOR A
DI
OUT (LSE3),A
LD (MMIO),A
CPL
LD (MMIO),A
OUT (LSE1),A
EI
LD C,000H
EX AF,AF'
PUSH AF
CALL L0459
LD A,000H
L03BC: EX AF,AF'
L03BD: LD B,010H
L03BF: CALL L043C
CALL L0459
BIT 1,A
JR NZ,L03BD ; (-00cH)
DJNZ L03BF ; (-00cH)
BIT 0,A
JR Z,L03DB ; (+00cH)
BIT 2,A
JR NZ,L03EC ; (+019H)
EX AF,AF'
DEC A
JR NZ,L03BC ; (-01bH)
LD A,006H
JR L03EE ; (+013H)
L03DB: PUSH HL
PUSH DE
PUSH BC
LD HL,INKEY1
LD DE,L0B17
LD BC,0000AH
L03E7: LDIR
POP BC
POP DE
POP HL
L03EC: LD A,040H
L03EE: LD (003BBH),A
L03F1: CALL L043C
CALL L0494
OR A
JR Z,L03F1 ; (-009H)
LD (L005F),A
LD C,A
LD A,D
CALL POPRA
POP AF
EX AF,AF'
LD A,C
RET
L0406: CALL L0426
PUSH HL
CALL L0494
LD HL,L005F
OR A
JR Z,L0419 ; (+006H)
CP (HL)
JR NZ,L0419 ; (+003H)
POP HL
XOR A
RET
L0419: LD (HL),A
POP HL
RET
L041C: CALL L0426
CALL L0494
LD (L005F),A
RET
L0426: PUSH HL
LD HL,(L1360)
LD A,L
CP H
POP HL
RET Z
EX (SP),HL
INC A
LD (L1360),A
LD HL,L1361
CALL ADDHLA
LD A,(HL)
POP HL
RET
L043C: DI
OUT (LSE3),A
LD A,(0E002H)
OUT (LSE1),A
EI
RLCA
RLCA
LD A,C
JR C,L0451 ; (+007H)
OR A
RET Z
LD C,000H
LD A,D
DPALBK: JR L0456 ; (+005H)
L0451: DEC A
RET Z
LD C,001H
LD A,E
L0456: JP POPRA
L0459: CALL SKPDE
LD DE,INKEY1
LD HL,L0B17
LD BC,L0A00
DI
OUT (LSE3),A
L0468: LD A,B
ADD A,0EFH
LD (MMIO),A
CP FDPA
LD A,(0E001H)
JR NZ,L0477 ; (+002H)
OR 07FH
L0477: CP 0FFH
JR Z,L047D ; (+002H)
SET 0,C
L047D: EX DE,HL
CP (HL)
LD (HL),A
EX DE,HL
JR Z,L0485 ; (+002H)
SET 1,C
L0485: CPL
AND (HL)
JR Z,L048B ; (+002H)
SET 2,C
L048B: INC HL
INC DE
DJNZ L0468 ; (-027H)
LD A,C
L0490: OUT (LSE1),A
EI
DGCOL: RET
L0494: CALL SKPDE
LD HL,L0B17
LD DE,INKEY1
PUSH HL
PUSH DE
LD BC,0000AH
LDIR
POP HL
POP DE
LD BC,L0AF9
DI
OUT (LSE3),A
LD A,C
LD (MMIO),A
NOP
LD A,(0E001H)
LD (DE),A
L04B5: LD A,C
LD (MMIO),A
CP FDPA
LD A,(0E001H)
LD (DE),A
JR Z,L04E4 ; (+023H)
CPL
AND (HL)
L04C3: LD (HL),A
INC DE
INC HL
DEC C
DJNZ L04B5 ; (-014H)
OUT (LSE1),A
EI
LD BC,L0A00
L04CF: DEC HL
LD A,(HL)
OR A
JR NZ,L0507 ; (+033H)
INC C
DJNZ L04CF ; (-008H)
LD B,00AH
L04D9: DEC DE
LD A,(DE)
CP 0FFH
JR NZ,L04E7 ; (+008H)
L04DF: DJNZ L04D9 ; (-008H)
L04E1: XOR A
JR L0490 ; (-054H)
L04E4: XOR A
JR L04C3 ; (-024H)
L04E7: LD A,B
CP 002H
JR NZ,L04F5 ; (+009H)
L04EC: LD A,(DE)
AND 081H
DWIDTH: JR NZ,L04DF ; (-012H)
LD A,01BH
JR L0490 ; (-065H)
L04F5: CP 001H
JR Z,L04E1 ; (-018H)
CP 000H
JR NZ,L04DF ; (-01eH)
LD A,(DE)
AND 001H
JR NZ,L04DF ; (-023H)
LD A,(L005F)
JR L0490 ; (-077H)
L0507: PUSH AF
LD A,B
LD (004FAH),A
LD A,(HL)
LD (004FFH),A
POP AF
DEC B
JR NZ,L054A ; (+036H)
CALL L05B7
LD A,(00B18H)
BIT 6,A
JR Z,L04E1 ; (-03dH)
BIT 0,A
LD A,B
JR NZ,L0525 ; (+002H)
ADD A,005H
L0525: CP 00AH
JR NC,L04E1 ; (-048H)
LD L,A
LD H,000H
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,L12C0
ADD HL,BC
LD A,(HL)
OR A
JR Z,L04E1 ; (-057H)
LD DE,L1360
LD A,001H
LD (DE),A
L053E: INC DE
LD BC,00010H
LDIR
LD A,(01362H)
JP L0490
L054A: CALL L05B7
LD A,C
ADD A,A
ADD A,A
ADD A,A
ADD A,B
LD L,A
LD H,000H
LD A,(00B18H)
BIT 6,A
LD BC,L0B2B
JR Z,L058E ; (+02fH)
PUSH AF
LD A,(L0060)
CP 043H
JR NZ,L056B ; (+004H)
POP AF
XOR 001H
PUSH AF
L056B: POP AF
BIT 0,A
JR NZ,L0573 ; (+003H)
LD BC,L0B3D
L0573: LD A,(L0060)
CP 0FFH
JR NZ,L0587 ; (+00dH)
LD BC,L0B4F
LD A,(00B18H)
BIT 0,A
JR Z,L0587 ; (+003H)
LD BC,L0B61
L0587: CALL L13E0
LD A,C
JP L0490
L058E: CALL L13E0
LD A,C
CP 020H
JP C,L0490
LD HL,L0B73
LD B,005H
L059C: CP (HL)
JR Z,L05B1 ; (+012H)
INC HL
DJNZ L059C ; (-006H)
CP 040H
JP C,L04E1
CP 05BH
JP NC,L04E1
SUB 040H
JP L0490
L05B1: LD A,020H
SUB B
JP L0490
L05B7: LD B,008H
L05B9: RRCA
JR C,L05BF ; (+003H)
DJNZ L05B9 ; (-005H)
RET
L05BF: DEC B
RET
L05C1: LD A,0E8H
DI
OUT (LSE3),A
LD (MMIO),A
NOP
LD A,(0E001H)
OUT (LSE1),A
EI
AND 081H
RET Z
RLCA
RET C
JR L05C1 ; (-016H)
L05D7: CALL SKPDE
LD HL,(L0054)
LD A,(L005B)
CP L
RET C
CALL PUSHW
LD A,(HL)
OR A
RET
L05E8: CALL L05D7
RET Z
L05EC: LD A,00DH
JP L0BFF
L05F1: CALL L0BFD
LD A,(L0054)
L05F7: SUB 00AH
LBOUND: JR NC,L05F7 ; (-004H)
ADD A,00AH
RET Z
JR L05F1 ; (-00fH)
L0600: CALL IOOUT
LD HL,(L0054)
PUSH HL
PUSH AF
RST 018H
DB 01EH
POP AF
RST 018H
DB 01DH
CALL POPRA
SET 3,H
LD DE,(0005DH)
LD A,E
OR D
CALL POPRA
POP HL
INC L
HCLSW: LD A,(0005CH)
CP L
JP NC,L07EC
L0624: LD A,(L005B)
LD L,A
INC H
PUSH HL
CALL PUSHW
LD (HL),001H
POP HL
LD A,(L0057)
CP H
JP NC,L07EC
LD H,A
PUSH HL
CALL L0730
POP HL
JP L07EC
PUSHW: LD E,H
LD D,000H
LD HL,.HL
ADD HL,DE
RET
L0648: LD HL,(L0054)
PUSH DE
PUSH AF
LD D,LSD0
LD E,L
LD A,H
ADD A,A
HCLS: ADD A,A
ADD A,H
LD L,A
LD H,000H
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,DE
L065B: POP AF
POP DE
RET
L065E: ADD A,A
LD HL,L0067
CALL ADDHLA
CALL INDRCT
JP (HL)
L0669: LD B,D
LD C,E
L066B: LD DE,00028H
EX DE,HL
ADD HL,DE
DEC B
JR Z,L067E ; (+00bH)
PUSH HL
PUSH BC
LD B,000H
CALL L069E
POP BC
POP HL
JR L066B ; (-013H)
L067E: EX DE,HL
LD E,C
L0680: LD A,(L005D)
LD D,A
LD A,(0005EH)
OR D
LD D,A
L0689: DI
OUT (LSE3),A
LD (HL),000H
SET 3,H
LD (HL),D
RES 3,H
OUT (LSE1),A
EI
INC HL
DEC E
JR NZ,L0689 ; (-011H)
RET
L069B: LD BC,00028H
L069E: LD A,0B0H
JR L06A4 ; (+002H)
L06A2: LD A,0B8H
L06A4: LD (006BCH),A
PUSH HL
PUSH DE
PUSH BC
RES 3,H
RES 3,D
CALL L06B8
POP BC
POP DE
POP HL
SET 3,H
SET 3,D
L06B8: DI
OUT (LSE3),A
LDIR
OUT (LSE1),A
EI
RET
L06C1: LD HL,VRAM
LD DE,0D7D0H
CALL L069B
LD HL,0D028H
LD DE,VRAM
LD B,032H
L06D2: PUSH BC
CALL L069B
POP BC
DJNZ L06D2 ; (-007H)
LD HL,.HL
LD D,H
LD E,L
LD A,(HL)
INC HL
LD BC,00031H
LDIR
LD (DE),A
RET
L06E7: LD HL,0D7CFH
LD DE,0D7F7H
LD B,032H
L06EF: PUSH BC
LD BC,00028H
CALL L06A2
POP BC
DJNZ L06EF ; (-00aH)
LD HL,0D7D0H
LD DE,VRAM
CALL L069B
LD HL,L00D9
LD D,H
LD E,L
DEC HL
LD A,(DE)
LD BC,00031H
LDDR
LD (DE),A
RET
L0710: LD HL,0D3E8H
XOR A
CALL POPRA
SET 3,H
LD A,(L005D)
CALL POPRA
LD DE,0D3E9H
LD BC,L0027
CALL L069E
CALL L06C1
XOR A
LD (L00C0),A
RET
L0730: LD A,(L004E)
OR A
JR Z,L0710 ; (-026H)
CALL L075F
CALL L0669
LD A,(L0056)
LD H,A
CALL PUSHW
LD A,(L0057)
SUB E
LD B,A
LD (HL),000H
INC HL
LD D,H
LD E,L
INC DE
CALL NZ,LDHLDE
LD (HL),000H
RET
L0754: LD A,(L005B)
LD L,A
LD A,(L0056)
LD H,A
JP L07EC
L075F: LD HL,(L005B)
LD DE,(00056H)
LD A,D
L0767: SUB E
INC A
LD D,A
LD A,H
SUB L
INC A
L076D: LD E,A
CALL L0754
JP L0648
CALL SKPDE
LD A,(L004E)
L077A: OR A
JR NZ,L078B ; (+00eH)
LD A,031H
LD (L0057),A
CALL L078B
LD A,018H
LD (L0057),A
RET
L078B: CALL L075F
L078E: PUSH DE
PUSH HL
CALL L0680
POP HL
LD BC,00028H
ADD HL,BC
POP DE
DEC D
JR NZ,L078E ; (-00eH)
LD A,(L0056)
LD H,A
CALL PUSHW
LD A,(L0057)
SUB E
ADD A,002H
LD B,A
JP ?CLRHL
XOR A
LD (0091FH),A
LD HL,(L0054)
PUSH HL
INC H
CALL PUSHW
LD A,(L0057)
LD D,A
L07BD: LD A,(HL)
OR A
JR Z,L07C7 ; (+006H)
INC HL
INC E
LD A,D
CP E
JR NC,L07BD ; (-00aH)
L07C7: DEC E
POP HL
LD H,E
JR L07DB ; (+00fH)
LD HL,(L0054)
JR L07DF ; (+00eH)
LD HL,(L0054)
INC L
LD A,(0005CH)
CP L
JR NC,L07EC ; (+011H)
L07DB: LD A,(L005B)
LD L,A
L07DF: INC H
LD A,(L0057)
CP H
JR NC,L07EC ; (+006H)
LD H,A
PUSH HL
CALL L0730
POP HL
L07EC: LD (L0054),HL
RET
LD HL,(L0054)
JR L0802 ; (+00dH)
LD HL,(L0054)
LD A,(L005B)
CP L
JR C,0080DH ; (+00fH)
LD A,(0005CH)
LD L,A
L0802: LD A,(L0056)
CP H
JR C,0080FH ; (+007H)
LD A,(L0056)
LD H,A
LD A,02DH
LD A,025H
JR L07EC ; (-026H)
LD A,0EFH
LD HL,L433E
LD HL,0FF3EH
LD (L0060),A
RET
LD HL,(L0054)
LD BC,(0005BH)
LD A,L
DEC L
INC C
CP C
JR NC,L0837 ; (+00cH)
PUSH HL
CALL PUSHW
LD A,(HL)
POP HL
INC L
OR A
JR Z,L0874 ; (+03fH)
LD L,B
DEC H
L0837: LD DE,(00054H)
LD (L0054),HL
L083E: EX DE,HL
LD A,(L005B)
CP L
JR C,L086D ; (+028H)
L0845: PUSH HL
CALL PUSHW
LD A,(HL)
POP HL
OR A
JR Z,L085D ; (+00fH)
CALL L0882
PUSH HL
LD A,(0005CH)
LD L,A
DEC H
CALL L089A
POP HL
JR L0874 ; (+017H)
L085D: LD A,(0005CH)
LD L,A
DEC H
L0862: LD DE,(0005DH)
LD A,E
OR D
LD E,A
LD D,000H
JR L089A ; (+02dH)
L086D: CALL L0882
DEC BC
CALL L0895
L0874: INC L
LD A,(0005CH)
CP L
JR NC,L086D ; (-00eH)
LD A,(L005B)
LD L,A
INC H
JR L0845 ; (-03dH)
L0882: PUSH HL
RST 018H
DB 01EH
SET 3,H
CALL BREAKX
LD E,A
RES 3,H
CALL BREAKX
LD D,A
LD B,H
LD C,L
POP HL
RET
L0895: PUSH HL
LD H,B
LD L,C
JR L089D ; (+003H)
L089A: PUSH HL
RST 018H
DB 01EH
L089D: SET 3,H
LD A,E
CALL POPRA
RES 3,H
LD A,D
CALL POPRA
LD B,H
LD C,L
POP HL
RET
L08AD: LD HL,(L0054)
CALL L0302
DEC E
LD H,E
LD A,(0005CH)
LD L,A
RET
CALL L08AD
CALL L0882
LD A,0F0H
CP D
JR Z,L08C8 ; (+003H)
XOR A
CP D
RET NZ
L08C8: LD BC,(0005BH)
EX DE,HL
LD HL,(L0054)
OR A
SBC HL,DE
EX DE,HL
JR Z,L0862 ; (-074H)
LD A,C
CP L
JR NC,L08E4 ; (+00aH)
DEC L
CALL L0882
INC BC
CALL L0895
JR L08C8 ; (-01cH)
L08E4: PUSH HL
LD L,B
DEC H
CALL L0882
EX (SP),HL
CALL L089A
POP HL
JR L08C8 ; (-029H)
LD HL,L0071
LD (L005D),HL
L08F7: LD HL,L1800
LD (L0056),HL
LD HL,L2700
LD (L005B),HL
XOR A
LD (L004E),A
RET
CALL SKPDE
L090B: LD A,(DE)
INC DE
OR A
RET Z
LD C,A
CP 005H
JR Z,L0933 ; (+01fH)
CP 006H
JR Z,L0932 ; (+01aH)
SUB 041H
CP 01AH
JR NC,HCURON ; (+00dH)
LD A,000H
OR A
JR Z,HCURON ; (+008H)
LD A,C
LD HL,L08F7
CALL ADDHLA
LD C,(HL)
HCURON: LD A,C
RST 018H
DB 003H
CP 00DH
JR NZ,L090B ; (-027H)
L0932: XOR A
L0933: LD (0091FH),A
JR L090B ; (-02dH)
AND C
SBC A,D
SBC A,A
HCUROF: SBC A,H
SUB D
XOR D
SUB A
SBC A,B
AND (HL)
XOR A
XOR C
CP B
OR E
FLASH: OR B
OR A
SBC A,(HL)
AND B
SBC A,L
AND H
SUB (HL)
AND L
CURMOV: XOR E
AND E
SBC A,E
CP L
AND D
NOP
NOP
L0954: NOP
L0955: PUSH DE
PUSH HL
LD (L0954),A
LD (00952H),DE
LD HL,0E007H
DI
OUT (LSE3),A
LD (HL),0B4H
LD (HL),074H
DEC HL
LD (HL),0C0H
LD (HL),0A8H
DEC HL
LD (HL),002H
LD (HL),000H
L0972: LD HL,0E007H
LD (HL),080H
PONTCB: DEC HL
LD E,(HL)
LD D,(HL)
PONTB: LD HL,0A8C0H
OR A
SBC HL,DE
JR NZ,L0972 ; (-010H)
LD HL,0E005H
LD (HL),0F6H
LD (HL),079H
OUT (LSE1),A
EI
POP HL
POP DE
RET
L098F: PUSH BC
PUSH HL
DI
OUT (LSE3),A
LD HL,0E007H
LD (HL),080H
LD (HL),040H
DEC HL
LD E,(HL)
LD D,(HL)
DEC HL
LD C,(HL)
LD B,(HL)
OUT (LSE1),A
EI
PUSH BC
LD A,D
L09A6: OR E
JR NZ,L09AC ; (+003H)
LD DE,0A8C0H
L09AC: LD HL,0A8C0H
LD A,(L0954)
OR A
SBC HL,DE
LD DE,L5460
CALL L09EB
OR A
LD DE,(00952H)
RR D
RR E
PUSH AF
ADD HL,DE
LD DE,L5460
CALL L09EB
LD C,A
ADD HL,HL
EX DE,HL
POP AF
LD A,C
POP BC
PUSH AF
OR A
LD HL,L3CFB
SBC HL,BC
JR C,L09DC ; (+001H)
INC DE
L09DC: POP AF
JR NC,L09E0 ; (+001H)
INC DE
L09E0: EX DE,HL
LD DE,0A8C0H
CALL L09EB
EX DE,HL
POP HL
POP BC
RET
L09EB: OR A
SBC HL,DE
JR NC,L09F2 ; (+002H)
ADD HL,DE
RET
L09F2: XOR 001H
RET
L09F5: LD A,04EH
DEC L
RET Z
LD A,056H
DEC L
RET Z
LD A,05EH
DEC L
L0A00: RET Z
L0A01: LD A,066H
DEC L
RET
L0A05: PUSH DE
LD (00A23H),A
LD DE,0FFFFH
LD HL,0E002H
DI
OUT (LSE3),A
L0A12: BIT 7,(HL)
JR Z,L0A12 ; (-004H)
L0A16: BIT 7,(HL)
JR NZ,L0A16 ; (-004H)
L0A1A: LD L,008H
LD A,011H
L0A1E: DEC A
JR NZ,L0A1E ; (-003H)
L0A21: INC DE
BIT 0,(HL)
JR Z,L0A21 ; (-005H)
OUT (LSE1),A
EI
LD A,D
OR A
LD A,E
JR Z,L0A30 ; (+002H)
LD A,0FFH
L0A30: LD (L0066),A
POP DE
POP HL
SCF
RET
INC A
PUSH HL
LD L,A
CALL L09F5
JR Z,L0A05 ; (-03aH)
CALL L09F5
LD (00A75H),A
LD (00A55H),A
LD HL,0E002H
DI
OUT (LSE3),A
L0A4E: BIT 7,(HL)
JR Z,L0A4E ; (-004H)
LD L,008H
BIT 0,(HL)
LD A,L
JR Z,L0A5A ; (+001H)
XOR A
L0A5A: LD (00A7CH),A
OUT (LSE1),A
LD A,009H
L0A61: PUSH AF
XOR A
L0A63: DEC A
JR NZ,L0A63 ; (-003H)
POP AF
BINPUT: DEC A
JR NZ,L0A61 ; (-009H)
OUT (LSE3),A
LD L,002H
L0A6E: BIT 7,(HL)
JR Z,L0A6E ; (-004H)
LD L,008H
BIT 0,(HL)
LD A,L
JR Z,L0A7A ; (+001H)
XOR A
L0A7A: LD L,A
LD A,000H
AND L
LD (L0065),A
OUT (LSE1),A
EI
GETL: POP HL
OR A
RET
DI
RET
EI
RET
DS 110, 000H
L0AF9: DS 30, 000H
L0B17: DS 3, 000H
INKEY$: DS 7, 000H
INKEY1: DS 10, 000H
L0B2B: JP PE,0900BH
RLA
CALL M,00019H
DEC SP
LD A,(L180D)
DJNZ L0B4A ; (+012H)
LD DE,01413H
CCF
CPL
L0B3D: LD HL,(0900CH)
RLA
EI
DEC B
NOP
DEC HL
LD HL,(0160DH)
DEC D
LD (DE),A
L0B4A: LD DE,01413H
ADD A,05FH
L0B4F: JP (HL)
INC C
SUB B
RLA
LD L,B
DEC B
NOP
ADD A,H
JP (HL)
DEC C
LD D,015H
LD (DE),A
LD DE,01413H
ADC A,A
ADC A,E
L0B61: LD L,D
INC C
SUB B
RLA
LD L,H
ADD HL,DE
NOP
CP 089H
DEC C
LD D,015H
LD (DE),A
LD DE,01413H
ADC A,D
LD A,E
L0B73: LD E,E
LD E,H
LD E,L
LD E,(HL)
CPL
$CRT: DB 091H,00BH,"CRT",000H,08AH ; $CRT - CRT device descriptor
DS 2, 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
INKEYF: DB 0AAH
DB 00BH
DB 0B5H
DB 00BH
DB 0C4H
DB 00BH
$KB_: DB 000H ; $KB - Keyboard device descriptor
DB 00FH
DB 04BH
DB 042H
DS 2, 000H
DB 081H
DS 2, 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
INKEY0: DB 000H
DB LSE5
DB 000H
DB 0AAH
DB 00BH
DB LSE5
DB 000H
DB LSE5
DB 000H
RST 018H
DB 00CH
LD A,080H
RET C
JP C,0017DH
RST 018H
DB 017H
RET
EX AF,AF'
LD HL,L0BFF
L0BB9: LD A,(DISPX)
OR A
JR Z,L0BC2 ; (+003H)
LD HL,L0C43
L0BC2: EX AF,AF'
JP (HL)
LD A,(L0054)
RET
LD A,00DH
L0BCA: PUSH AF
LD A,(FILOUT)
L0BCE: OR A
JR NZ,L0BD4 ; (+003H)
POP AF
JR L0BFF ; (+02bH)
L0BD4: POP AF
JP L0F3E
PUSH AF
LD A,(FILOUT)
OR A
JR NZ,L0BE2 ; (+003H)
POP AF
JR L0C43 ; (+061H)
L0BE2: POP AF
JP L0F2E
CALL SKPDE
LD HL,L0BCA
JR L0BF4 ; (+006H)
L0BEE: CALL SKPDE
LD HL,L0BFF
L0BF4: LD A,(DE)
OR A
RET Z
CALL L00FA
INC DE
JR L0BF4 ; (-009H)
L0BFD: LD A,020H
L0BFF: CALL IOOUT
L0C02: LD C,A
LD A,(L004D)
OR A
JR Z,L0C3A ; (+031H)
LD A,C
CP 020H
JR NC,L0C37 ; (+029H)
LD DE,(00054H)
LD HL,(L005B)
CP 014H
JR Z,L0C21 ; (+008H)
CP 012H
JR NZ,L0C26 ; (+009H)
LD HL,(L0056)
LD E,D
L0C21: LD A,L
CP E
JP NC,L0D3F
L0C26: LD A,C
LD HL,L0C8F
ADD A,L
LD L,A
JR NC,L0C2F ; (+001H)
INC H
L0C2F: LD A,(HL)
INC A
JR Z,L0C3A ; (+007H)
DEC A
JP Z,L0D3F
L0C37: CALL L0C60
L0C3A: LD A,C
CP 020H
JP C,L065E
JP L0600
L0C43: CALL IOOUT
LD C,A
CP 00DH
JR Z,L0C02 ; (-049H)
CALL L0600
LD A,(L004D)
OR A
RET Z
LD A,C
CP 011H
JR C,L0C8A ; (+032H)
CP 017H
JR C,L0C8C ; (+030H)
CP 020H
JR C,L0C8A ; (+02aH)
L0C60: CP 060H
JR C,L0C8C ; (+028H)
CALL CHKACC
ADD HL,BC
ADD A,B
LD A,E
ADD A,08BH
RST 010H
RST 008H
CALL M,0FFFBH
JR Z,L0C8C ; (+019H)
CP 092H
JR C,L0C8A ; (+013H)
CALL CHKACC
ADD HL,BC
SBC A,C
SUB L
XOR H
AND A
OR H
OR C
OR (HL)
OR L
CP H
JR Z,L0C8A ; (+004H)
CP 0BFH
JR C,L0C8C ; (+002H)
L0C8A: LD A,02EH
L0C8C: JP L0FA9
; ---------------------------------------------------------------------------
; Control character translation table (indexed by char code 0x00-0x1F)
; Used by L0C26: HL = L0C8F + C, A = (HL).
; 0x00 → handle via L0D3F, 0xFF → skip, other → translate via L0C60
; ---------------------------------------------------------------------------
L0C8F: DB 000H,000H,000H,000H ; 00-03: NUL,SOH,STX,ETX → L0D3F
DB 0FFH,0FFH,0FFH,01DH ; 04-07: EOT,ENQ,ACK → skip; BEL → 0x1D
DB 000H,000H,000H,000H ; 08-0B: BS,HT,LF,VT → L0D3F
DB 000H,00DH,000H,000H ; 0C-0F: FF → L0D3F; CR → 0x0D; SO,SI → L0D3F
DB 000H,00AH,003H,020H ; 10-13: DLE → L0D3F; DC1 → 0x0A; DC2 → 0x03; DC3 → 0x20
DB 00EH,000H,000H,0FFH ; 14-17: DC4 → 0x0E; NAK,SYN → L0D3F; ETB → skip
DB 000H,0FFH,0FFH,00DH ; 18-1B: CAN → L0D3F; EM,SUB → skip; ESC → 0x0D
DB 0FFH,000H,000H,000H ; 1C-1F: FS → skip; GS,RS,US → L0D3F
L0CAF: DI
XOR A
LD (L004D),A
LD (FILOUT),A
LD SP,L0000
OUT (LSE1),A
LD A,004H
RST 018H
DB 003H
L0CC0: LD HL,L1B18
XOR A
LD (L0CC0),A
LD D,A
LD E,A
RST 018H
DB 026H
LD DE,$CMT
LD A,B
DEC A
JR Z,L0CDB ; (+009H)
LD DE,$FD
DEC A
JR Z,L0CDB ; (+003H)
LD DE,$QD
L0CDB: LD A,C
RST 018H
DB 03AH
JP L00DA
LD HL,(TEXTED)
ADD HL,DE
LD (TEXTED),HL
LD HL,(VARST)
ADD HL,DE
LD (VARST),HL
LD HL,(STRST)
ADD HL,DE
LD (STRST),HL
LD HL,(VARED)
ADD HL,DE
LD (VARED),HL
LD HL,(TMPEND)
ADD HL,DE
LD (TMPEND),HL
RET
L0D05: LD HL,(00B15H)
L0D08: LD A,H
OR L
JR Z,L0D20 ; (+014H)
PUSH DE
EX DE,HL
LD HL,0E004H
DI
OUT (LSE3),A
LD (HL),E
LD (HL),D
LD A,001H
LD (TEMPO_),A
OUT (LSE1),A
EI
POP DE
RET
L0D20: LD A,036H
BRKEY: DI
OUT (LSE3),A
LD (0E007H),A
XOR A
LD (TEMPO_),A
OUT (LSE1),A
EI
RET
L0D30: PUSH AF
PUSH BC
AND 00FH
LD B,A
LD A,008H
SUB B
LD (0119EH),A
POP BC
POP AF
RET
L0D3E: XOR A
L0D3F: PUSH HL
LD HL,L04EC
JR Z,L0D4E ; (+009H)
CP 001H
L0D47: JR Z,L0D59 ; (+010H)
CALL L0D08
POP HL
RET
L0D4E: CALL L0D08
LD HL,L2710
L0D54: DEC HL
LD A,H
OR L
JR NZ,L0D54 ; (-005H)
L0D59: CALL L0D20
POP HL
RET
; ---------------------------------------------------------------------------
; $USR Device Descriptor (User-defined device)
;
; Handlers pointing to 0x00E5 (monitor ROM) are stubs (no-op/error).
; ZRO and ZWO share the same handler (USR_RO).
; ZINP and ZOUT share the same handler (USR_IO).
; ZWDIR and ZFREE are not emitted explicitly — USR_RO code at 0x0D77
; overlaps these 2 DW fields (the first 4 bytes of USR_RO: 21 01 10 DF
; encode ZWDIR=0x0121, ZFREE=0xDF10). Neither is called (flags1 bit7=1).
; ---------------------------------------------------------------------------
$USR: DW 00000H ; Next device = NULL (end of chain)
L0D60: DB "USR",000H ; Device name
DB 09FH ; flags1: bit7=1 (no dir/free), bit4-0=0x1F
DB 000H ; flags2
DB 000H ; dirmx: 0
DW 000E5H ; ZINIT (monitor ROM stub)
DW USR_RO ; ZRO handler (read/write open)
DW USR_RO ; ZWO handler (same as ZRO)
DW 000E5H ; ZCL (monitor ROM stub)
DW 000E5H ; ZKL (monitor ROM stub)
DW USR_IO ; ZINP handler (user I/O dispatch)
DW USR_IO ; ZOUT handler (same as ZINP)
DW 000E5H ; ZDELT (monitor ROM stub)
; ZWDIR/ZFREE implicit — next 4 bytes are USR_RO code, read as DW pointers
;
; ---------------------------------------------------------------------------
; USR_RO - User device open (ZRO/ZWO handler)
;
; Calls SVC #13H to find the USR device entry point, stores it in ZWRK1.
; ---------------------------------------------------------------------------
USR_RO: LD HL,ELMD1
RST 018H
DB 013H
LD A,D
OR E
JP Z,01F9AH
LD (ZWRK1),DE
RET
;
; ---------------------------------------------------------------------------
; USR_IO - User device I/O (ZINP/ZOUT handler)
;
; Dispatches to the user-supplied routine address stored in ZWRK1.
; ---------------------------------------------------------------------------
USR_IO: LD HL,(ZWRK1)
JP (HL)
NOP
NOP
NOP
NOP
NOP
NOP
LD A,(ZFLAG1)
BIT 7,A
JP NZ,01F97H
JP L1989
L0D9B: LD B,(IY+000H)
CALL L1C39
LD A,(ELMD)
CP B
JP NZ,01F9DH
RET
L0DA9: LD A,(L004D)
OR A
LD A,(LPOSB)
RET Z
LD A,(L0054)
RET
DS 40, 000H
EQTBL: DS 25, 000H
$KB: DS 10, 000H
L0E00: DS 16, 000H
L0E10: DS 46, 000H
L0E3E: DS 35, 000H
CRT1C: DS 82, 000H
PLTOTX: DS 77, 000H
$LPT: DB 0F7H,"/LPT",000H,08AH ; $LPT - Line printer device descriptor
DS 2, 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DB 000H
DB LSE5
DS 3, 000H
DB 027H
DB 00FH
DB 019H
DB 00FH
JP L0DA9
RET
L0F1D: LD A,00DH
CALL L0FA9
XOR A
LD (LPOSB),A
RET
LD HL,DISPX
BIT 0,(HL)
JR Z,L0F3E ; (+010H)
L0F2E: CALL IOOUT
LD B,A
LD A,(L004D)
OR A
LD A,B
LD E,0FFH
JR Z,L0F4E ; (+013H)
RST 018H
DB 004H
RET
L0F3E: CALL IOOUT
LD B,A
LD A,(L004D)
OR A
LD A,B
LD E,000H
JR Z,L0F4E ; (+003H)
RST 018H
DB 003H
RET
L0F4E: LD A,(PNMODE)
CP 001H
LD A,044H
JP NZ,00180H
LD A,B
CP 00DH
JR Z,L0F1D ; (-040H)
LD HL,LPOSB
INC (HL)
SUB 005H
CP 002H
JR C,L0F7C ; (+015H)
LD A,B
CP 020H
JR NC,L0FB0 ; (+044H)
BIT 0,E
JR Z,L0F80 ; (+010H)
SUB 011H
CP 006H
JR C,L0FB1 ; (+03bH)
SUB QDPC
CP 002H
JR NC,L0FAE ; (+032H)
L0F7C: LD A,02EH
JR L0FB0 ; (+030H)
L0F80: LD HL,LPOSB
DEC (HL)
LD A,B
CP 015H
LD B,00FH
JR Z,L0FB1 ; (+026H)
CP 011H
LD B,009H
JR Z,L0FB1 ; (+020H)
CP 012H
LD B,00BH
JR Z,L0FB1 ; (+01aH)
CP 016H
JR NZ,L0FB0 ; (+015H)
LD A,00CH
CALL L0FB0
LD A,00AH
CALL L0FB0
LD A,003H
JR L0FB0 ; (+007H)
L0FA9: CALL IOOUT
JR L0FB0 ; (+002H)
L0FAE: LD A,020H
L0FB0: LD B,A
L0FB1: CALL L0FCA
LD A,B
DI
CALL L0FBB
EI
RET
L0FBB: OUT (0FFH),A
LD A,080H
OUT (0FEH),A
LD A,001H
CALL L0FCB
L0FC6: XOR A
OUT (0FEH),A
RET
L0FCA: XOR A
L0FCB: CALL SKPDE
LD C,A
LD B,00EH
L0FD1: LD HL,0E678H
L0FD4: IN A,(0FEH)
AND 00DH
CP C
RET Z
DEC HL
LD A,H
OR L
NOP
NOP
JR NZ,L0FD4 ; (-00dH)
DJNZ L0FD1 ; (-012H)
XOR A
LD (L004D),A
CALL L0FC6
LD A,041H
JP L0182
DS 17, 000H
; ===========================================================================
; BASIC System Workspace (0x1000-0x109F)
; ===========================================================================
;
; --- ELMD: File header / element data (0x1000-0x103F) ---
ELMD: DB 000H ; File type (0=obj, 1=BTX, 2=BASIC, 3=data, 5=MZF)
ELMD1: DS 17, 000H ; Filename (17 bytes, null-padded)
ELMD18: DW 00000H ; File size (bytes)
ELMD20: DW 00000H ; Load address / BASIC program size
ELMD22: DW 00000H ; Execution address
ELMD24: DW 00000H ; Reserved
ELMD26: DW 00000H ; Reserved
DS 2, 000H
ELMD30: DW 00000H ; Reserved
ELMD32: DW 00000H ; Reserved
DS 6, 000H
SDDRIVENO: DB 000H ; SD drive number (numeric 0-9)
CMTFILENO: DB 000H ; Sequential file counter
DS 20, 000H
L103E: DS 2, 000H
;
; --- Device workspace (0x1040-0x106F) ---
ZTOP: DW 00002H ; Top of device chain pointer
ZLOG: DB 000H ; Logical unit number
ZRWX: DB 000H ; Read/write mode
ZEQT: DW 00000H ; Equipment/device type
ZCH: DB 000H ; Channel number
ZEOF: DB 000H ; End of file flag
ZWRK1: DW 00000H ; Work area 1 (16-bit)
ZNXT: DW 00000H ; Next byte pointer
ZDEVNM: DS 4, 000H ; Active device name (4 bytes)
ZFLAG1: DB 001H ; Active device flags1
ZFLAG2: DB 000H ; Active device flags2
ZDIRMX: DB 000H ; Active device max dir entries
ZINIT: DW 00000H ; Active ZINIT function pointer
ZRO: DW 00000H ; Active ZRO function pointer
ZWO: DW 00000H ; Active ZWO function pointer
ZCL: DW 00000H ; Active ZCL function pointer
ZKL: DW 00000H ; Active ZKL function pointer
ZINP: DW 00000H ; Active ZINP function pointer
ZOUT: DW 00000H ; Active ZOUT function pointer
ZDELT: DW 00000H ; Active ZDELT function pointer
ZWDIR: DW 00000H ; Active ZWDIR function pointer
ZFREE: DW 00000H ; Active ZFREE function pointer
DS 2, 000H
DCHAN: DB 000H ; Default channel
DDEV: DW 00000H ; Default device descriptor pointer
_CRT: DW 00B78H ; CRT device descriptor pointer
_LPT: DW 00F00H ; LPT device descriptor pointer
;
; --- BASIC memory pointers (0x1070-0x109F) ---
TEXTST: DW 00000H ; Start of BASIC text
TEXTED: DW 00000H ; End of BASIC text
VARST: DW 00000H ; Start of variables
STRST: DW 00000H ; Start of string space
VARED: DW 00000H ; End of variables
TMPEND: DW 00000H ; End of temporary area
INTFAC: DW 00000H ; Integer accumulator
MEMLMT: DW 00000H ; Memory limit
MEMMAX: DW 0FF00H ; Maximum memory
CURXY: DW 00000H ; Cursor X,Y position
POSADR: DW 00000H ; Cursor VRAM address
BITADR: DW 00000H ; Bit address
POINTX: DW 00000H ; Graphics point X
POINTY: DW 00000H ; Graphics point Y
CURFLG: DB 000H ; Cursor flag
CURMAK: DB 000H ; Cursor make flag
CMTMSG: DB 000H ; CMT message flag
INPFLG: DB 000H ; Input flag
DISPX: DB 000H ; Display X position
FILOUT: DB 000H ; File output flag
PSEL: DB 001H ; Printer select
PCRLF: DB 000H ; Printer CR/LF mode
LPT_TM: DB 00EH ; LPT timeout
LPOSB: DB 000H ; LPT position
PSMAL: DB 000H ; Printer small flag
PNMODE: DB 001H ; Printer mode
DMD: DB 000H ; Display mode
MEMOP: DB 000H ; Memory operation flag
PWMODE: DB 000H ; Power mode
CMODE: DB 000H ; Color mode
CPLANE: DB 000H ; Color plane
MAXCF: DB 000H ; Max color flag
PMASK: DB 000H ; Plane mask
GMODE: DB 000H ; Graphics mode
DS 80, 000H ; 0x10A0-0x10EF (padding to L10F0)
L10F0: DS 78, 000H
L113E: DS 84, 000H
RST 028H
NOP
NOP
NOP
NOP
SUMDT: NOP
NOP
NOP
NOP
NOP
NOP
LD BC,00504H
DS 3, 000H
KEYBM1: DB 000H
KEYBUF: DS 154, 000H
L123E: DS 57, 000H
L1277: DS 73, 000H
; ---------------------------------------------------------------------------
; Function key definition table (F1-F10 defaults, stored in RAM)
; Each entry: 1 byte length + string + zero-padded to 16 bytes total.
; Loaded at startup, modifiable via DEF KEY statement.
; ---------------------------------------------------------------------------
L12C0: DB 007H,"RUN",020H,020H,020H,00DH ; F1: RUN <CR>
DS 8, 000H
DB 005H,"LIST",020H ; F2: LIST
DS 10, 000H
DB 005H,"AUTO",020H ; F3: AUTO
DS 10, 000H
DB 006H,"RENUM",020H ; F4: RENUM
DS 9, 000H
DB 004H,"DIR",020H ; F5: DIR
DS 11, 000H
DB 005H,"CHR$(" ; F6: CHR$(
DS 10, 000H
DB 008H,"DEF KEY(" ; F7: DEF KEY(
DS 7, 000H
DB 004H,"CONT" ; F8: CONT
DS 9, 000H
L133E: DS 2, 000H ; (last 2 bytes of F8 entry, used as workspace)
DB 006H,"SAVE",020H,020H ; F9: SAVE
DS 9, 000H
DB 006H,"LOAD",020H,020H ; F10: LOAD
DS 9, 000H
L1360: DB 000H ; F11: (empty/unused)
L1361: DS 15, 000H ; (F11 padding, used as workspace)
DB 000H ; End marker
L1371: DB 000H ; End marker
CALL L13D8
JR Z,L1385 ; (+00eH)
L1377: CP 010H
JR C,L139B ; (+020H)
CP 080H
JR Z,L13A1 ; (+022H)
CP 0C0H
JR Z,L13A1 ; (+01eH)
JR L1391 ; (+00cH)
L1385: CP 003H
JR Z,L139B ; (+012H)
CP 005H
JR Z,L139E ; (+011H)
CP 006H
JR Z,L139E ; (+00dH)
L1391: DI
OUT (LSE2),A
CALL L0BB9
OUT (LSE0),A
EI
RET
L139B: LD A,0F0H
RET
L139E: ADD A,0C9H
RET
L13A1: SUB 040H
RET
L13A4: CP 0F0H
JR NC,L13CF ; (+027H)
CP 073H
JR Z,L139B ; (-011H)
CALL L13D8
JR Z,L13BB ; (+00aH)
CP 040H
JR Z,L13D5 ; (+020H)
CP 080H
JR Z,L13D5 ; (+01cH)
JR L13C3 ; (+008H)
L13BB: CP 0CEH
JR Z,L13D2 ; (+013H)
CP 0CFH
JR Z,L13D2 ; (+00fH)
L13C3: DI
OUT (LSE2),A
CALL L0BCE
OUT (LSE0),A
EI
CP 0F0H
RET NZ
L13CF: LD A,020H
RET
L13D2: SUB 0C9H
RET
L13D5: ADD A,040H
RET
L13D8: PUSH HL
LD HL,L0036
BIT 6,(HL)
POP HL
RET
L13E0: PUSH AF
LD A,L
SUB 008H
JR C,L13EA ; (+004H)
SUB 030H
JR C,L13F1 ; (+007H)
L13EA: ADD A,00AH
LD L,A
ADD HL,BC
LD C,(HL)
POP AF
RET
L13F1: LD A,(BC)
PUSH AF
INC BC
LD A,(BC)
LD B,A
POP AF
LD C,A
ADD HL,BC
DI
OUT (LSE2),A
LD A,(HL)
OUT (LSE0),A
EI
CALL L13A4
LD C,A
POP AF
RET
PUSH HL
PUSH BC
PUSH DE
LD DE,L2710
CALL L142C
LD DE,003E8H
CALL L142C
LD DE,L0064
CALL L142C
LD DE,0000AH
CALL L142C
LD A,L
POP DE
OR 030H
LD (DE),A
INC DE
XOR A
LD (DE),A
POP BC
POP HL
RET
L142C: LD A,0FFH
L142E: INC A
OR A
SBC HL,DE
JR NC,L142E ; (-006H)
ADD HL,DE
OR A
JR NZ,L143B ; (+003H)
OR B
RET Z
XOR A
L143B: LD B,001H
OR 030H
POP DE
EX (SP),HL
LD (HL),A
INC HL
EX (SP),HL
PUSH DE
RET
CALL TEST1
DB 024H
JR Z,L1476 ; (+02aH)
LD DE,L0000
L144F: CALL HLFTCH
SUB 030H
CP 00AH
RET NC
INC HL
PUSH HL
LD H,D
LD L,E
ADD HL,HL
JR C,L1471 ; (+013H)
ADD HL,HL
JR C,L1471 ; (+010H)
ADD HL,DE
JR C,L1471 ; (+00dH)
ADD HL,HL
JR C,L1471 ; (+00aH)
LD E,A
LD D,000H
ADD HL,DE
JR C,L1471 ; (+004H)
EX DE,HL
POP HL
JR L144F ; (-022H)
L1471: LD A,002H
JP L0182
L1476: LD DE,L0000
L1479: LD A,(HL)
CALL L1491
RET C
INC HL
EX DE,HL
ADD HL,HL
JR C,L1471 ; (-012H)
ADD HL,HL
JR C,L1471 ; (-015H)
ADD HL,HL
JR C,L1471 ; (-018H)
ADD HL,HL
JR C,L1471 ; (-01bH)
ADD A,L
LD L,A
EX DE,HL
JR L1479 ; (-018H)
L1491: SUB 030H
CP 00AH
CCF
RET NC
SUB 011H
CP 006H
CCF
RET C
ADD A,00AH
RET
CALL L14AD
CP 020H
RET NZ
L14A6: CALL L14AD
OR A
JR Z,L14A6 ; (-006H)
RET
L14AD: RST 018H
DB 00EH
JR Z,L14B8 ; (+007H)
LD A,0FFH
RST 018H
DB 00DH
CP 01BH
RET NZ
L14B8: JP 0017DH
RET
L14BC: CALL SKPDE
LD HL,KEYBUF
LD B,000H
PUSH HL
CALL LDHLDE
POP DE
LD (014DAH),SP
LD SP,L10F0
DI
OUT (LSE4),A
RST 030H
OUT (LSE0),A
OUT (LSE1),A
EI
LD SP,L0000
RET
LD (DDEV),DE
LD (DCHAN),A
RET
LD C,A
RST 018H
DB 020H
RST 018H
DB 002H
BIT 7,C
JR Z,L14F8 ; (+00aH)
LD HL,KEYBUF
PUSH HL
CALL L1535
POP DE
RST 018H
DB 005H
L14F8: LD A,C
AND 07FH
JR L14FF ; (+002H)
L14FD: LD A,045H
L14FF: LD DE,L1554
L1502: DEC A
JR Z,L150F ; (+00aH)
EX AF,AF'
L1506: LD A,(DE)
INC DE
OR A
JP P,L1506
EX AF,AF'
JR L1502 ; (-00dH)
L150F: LD A,(DE)
CP 080H
JR Z,L14FD ; (-017H)
L1514: LD A,(DE)
OR A
JP M,L151F
CALL L152A
INC DE
JR L1514 ; (-00bH)
L151F: AND 07FH
CALL L152A
LD DE,L179E
RST 018H
DB 005H
RET
L152A: PUSH DE
LD DE,L1533
LD (DE),A
RST 018H
DB 005H
POP DE
RET
L1533: NOP
NOP
L1535: LD DE,(ZEQT)
INC DE
INC DE
RST 018H
DB 017H
CALL LDHLDE
LD A,(ZCH)
ADD A,031H
LD (HL),A
LD A,(01051H)
AND 00FH
JR Z,L154E ; (+001H)
INC HL
L154E: LD (HL),03AH
INC HL
LD (HL),000H
RET
L1554: DB 053H,005H,"YNTA",0D8H,04FH,005H,"VER FLO",0D7H,049H,005H ; Error message table (bit-7 terminated)
DS 2, 04CH
DB "EGAL DAT",0C1H,054H,005H,"YPE MISMATC",0C8H,053H,005H,"TRING LENGT",0C8H,04DH,005H,"EMORY CAPACIT",0D9H,041H,005H
DS 2, 052H
DB "AY DEF",0AEH,04CH,005H,"INELENGT",0C8H,080H,"GOSUB ",005H,"NESTIN",0C7H,"FOR-NEX",0D4H,"DEF FN ",005H,"NESTIN",0C7H,"NEX",0D4H,"RETUR",0CEH,055H,005H,"N DEF. FUNCTIO",0CEH,055H,005H,"N DEF. LIN",0C5H,043H,005H,"AN'T ",006H,"CON",0D4H,04DH,005H,"EMORY PROTECTIO",0CEH,049H,005H,"NSTRUCTIO",0CEH,043H,005H,"AN'T ",006H,"RESUM",0C5H,"RESUM",0C5H
DS 2, 080H
DB "REA",0C4H,"SWAP ",005H,"LEVE",0CCH
DS 2, 080H
DB 053H,005H,"YSTEM I",0C4H,046H,005H,"RAMIN",0C7H,04FH,005H,056H,045H
DS 2, 052H
DB 055H,0CEH,050H,005H,"ARIT",0D9H
DS 8, 080H
DB 046H,005H,"ILE NOT FOUN",0C4H,048H,005H,"ARDWAR",0C5H,041H,005H,"LREADY EXIS",0D4H,041H,005H,"LREADY OPE",0CEH,04EH,005H,"OT OPE",0CEH,080H,057H,005H,"RITE PROTEC",0D4H
DS 3, 080H
DB 04EH,005H,"OT READ",0D9H,054H,005H
DS 2, 04FH
DB " MANY FILE"
DB LSD3
DB 044H,005H,"ISK MISMATC",0C8H,04EH,005H,"O FILE SPAC",0C5H,055H,005H,"NFORMA",0D4H,054H,005H
DS 2, 04FH
DB " LONG FIL",0C5H
DS 2, 080H
DB 044H,005H,"EV. NAM",0C5H,043H,005H,"AN'T EXECUT",0C5H,049H,005H
DS 2, 04CH
DB "EGAL FILENAM",0C5H,049H,005H
DS 2, 04CH
DB "EGAL FILEMOD",0C5H,080H,04FH,005H,"UT OF FIL",0C5H,04CH,005H,"OGICAL NUMBE"
DB LSD2
DB "LPT:"
L1772: DB 04EH,005H,"OT READ",0D9H
DS 2, 080H
DB 044H,005H,"EV. MOD",0C5H,055H,005H,"NPRINTABL",0C5H,043H,005H,"HECK SU",0CDH
L179E: DB 020H
DB 005H
DB 045H
DS 2, 052H
DB 04FH
DB 052H
DS 91, 000H
L1800: JP L4000
L1803: LD A,(ZLOG)
CP 088H
RET
L1809: NOP
NOP
L180B: NOP
NOP
L180D: NOP
NOP
CALL L181A
CALL L1821
L1815: XOR A
LD (L1FC0),A
RET
L181A: LD A,(ZLOG)
LD (L1FC0),A
RET
L1821: CALL SKPDE
LD A,(ZFLAG1)
BIT 7,A
LD HL,L1848
L182C: JR Z,L183D ; (+00fH)
BIT 3,A
LD HL,L1835
JR NZ,L183D ; (+008H)
L1835: LD IX,(ZOUT)
CALL IOCALL
RET
L183D: LD A,B
L183E: OR A
RET Z
LD A,(DE)
CALL L00FA
INC DE
DEC B
JR L183D ; (-00bH)
L1848: CALL SKPDE
LD E,(IY+040H)
LD D,(IY+041H)
LD HL,(L180B)
ADD HL,DE
LD (HL),A
INC DE
LD HL,(ZKL)
OR A
SBC HL,DE
CALL Z,L1871
LD (IY+040H),E
LD (IY+041H),D
INC (IY+014H)
RET NZ
INC (IY+015H)
RET NZ
JP 01F91H
L1871: PUSH BC
LD B,002H
L1874: CALL L1D15
LD IX,L1835
JR Z,L1881 ; (+004H)
LD IX,L2907
L1881: LD A,B
CALL L18B6
CALL L1890
INC (IY+04EH)
LD DE,L0000
POP BC
RET
L1890: JP (IX)
L1892: LD A,01AH
LD E,(IY+040H)
LD D,(IY+041H)
L189A: LD HL,(L180B)
ADD HL,DE
LD (HL),A
INC DE
LD HL,(ZKL)
XOR A
SBC HL,DE
JR NZ,L189A ; (-00eH)
PUSH BC
LD HL,(L180B)
DEC HL
LD (HL),0FFH
DEC HL
LD (HL),0FFH
LD B,006H
JR L1874 ; (-042H)
L18B6: LD BC,(ZKL)
INC BC
INC BC
LD HL,(L180B)
DEC HL
DEC HL
LD DE,(01809H)
RET
L18C6: OR 0AFH
LD IX,(ZCL)
CALL IOCALL
RET
CALL L1803
RET NZ
PUSH DE
LD DE,KEYBUF
CALL L026A
LD (0193CH),DE
POP DE
RET NC
JP 0017DH
PUSH HL
PUSH DE
CALL L181A
LD HL,(ZTOP)
INC HL
BIT 7,(HL)
PUSH HL
LD B,000H
SCF
CALL Z,L1913
POP HL
CALL C,L1908
POP DE
PUSH AF
CALL L1815
LD L,B
LD H,000H
ADD HL,DE
LD (HL),000H
POP AF
POP HL
RET
L1908: SET 7,(HL)
LD HL,01051H
BIT 4,(HL)
RET Z
JP 01FA0H
L1913: CALL L1803
JR Z,L193B ; (+023H)
LD A,(ZFLAG1)
BIT 7,A
LD HL,L1989
JR Z,L1975 ; (+053H)
BIT 2,A
LD HL,L1929
JR NZ,L1975 ; (+04cH)
L1929: LD IX,(ZINP)
CALL IOCALL
RET
L1931: LD A,03FH
RST 018H
DB 003H
LD A,020H
RST 018H
DB 003H
RST 018H
DB 034H
L193B: LD HL,L0000
L193E: CALL HLFTCH
OR A
JR Z,L1931 ; (-013H)
LD C,000H
RST 018H
DB 036H
LD (0193CH),HL
RET
LD B,000H
CALL TEST1
DB 022H
JR NZ,L1967 ; (+013H)
L1954: LD A,(HL)
OR A
RET Z
INC HL
CP 022H
JR Z,L1961 ; (+005H)
LD (DE),A
INC DE
INC B
JR L1954 ; (-00dH)
L1961: CALL TEST1
DB 02CH
OR A
RET
L1967: LD A,(HL)
OR A
RET Z
CP C
RET Z
INC HL
CP 02CH
RET Z
LD (DE),A
INC DE
INC B
JR L1967 ; (-00eH)
L1975: LD (0197BH),HL
LD B,000H
L197A: CALL L0000
RET C
CP 00DH
RET Z
LD (DE),A
INC DE
INC B
JR NZ,L197A ; (-00cH)
JP 01F76H
L1989: CALL SKPDE
LD E,(IY+040H)
LD D,(IY+041H)
LD HL,(ZKL)
OR A
SBC HL,DE
CALL Z,L19B4
RET C
LD L,(IY+04EH)
LD H,(IY+04FH)
XOR A
SBC HL,DE
SCF
RET Z
LD HL,(L180B)
ADD HL,DE
LD A,(HL)
INC DE
LD (IY+040H),E
LD (IY+041H),D
RET
L19B4: CALL L1D15
JP NZ,L2A4C
OR 0AFH
CALL L18B6
CALL L1929
RET C
LD A,(HL)
INC HL
AND (HL)
LD (HL),0FFH
INC A
LD DE,L0000
RET NZ
PUSH HL
LD HL,(L180D)
LD BC,(ZKL)
L19D5: DEC HL
DEC BC
LD A,(HL)
OR A
JR Z,L19D5 ; (-006H)
POP HL
LD (HL),B
DEC HL
LD (HL),C
RET
CALL SKPDE
LD HL,L1A2D
CP 088H
JR Z,L19F4 ; (+00aH)
LD HL,L1A35
CP 089H
JR Z,L19F4 ; (+003H)
RST 018H
DB 029H
RET C
L19F4: LD (ZTOP),HL
LD DE,ZLOG
LD BC,00008H
LDIR
LD (L1809),HL
PUSH HL
POP IY
LD DE,ELMD
CALL L1C54
PUSH HL
LD HL,(ZEQT)
LD DE,ZNXT
LD BC,0001DH
LDIR
POP HL
LD BC,00010H
ADD HL,BC
LD (L180B),HL
LD BC,(ZKL)
ADD HL,BC
LD (L180D),HL
LD A,(ZRWX)
AND 00FH
RET
L1A2D: ADC A,B
INC BC
LD A,B
DEC BC
NOP
NOP
NOP
NOP
L1A35: ADC A,C
LD (BC),A
NOP
RRCA
NOP
NOP
NOP
NOP
LD HL,KEYBUF
PUSH HL
LD A,B
OR A
CALL NZ,LDHLDE
LD (HL),000H
LD HL,$CRT
JR L1A50 ; (+003H)
L1A4D: LD HL,L0000
L1A50: LD A,L
OR H
JR Z,L1A89 ; (+035H)
LD (01A84H),HL
CALL LDDEMI
LD (01A4EH),DE
LD DE,KEYBUF
EX DE,HL
L1A62: LD A,(DE)
OR A
JR Z,L1A6D ; (+007H)
CP (HL)
JR NZ,L1A4D ; (-01cH)
INC HL
INC DE
JR L1A62 ; (-00bH)
L1A6D: LD A,(HL)
INC HL
CP 03AH
LD C,000H
JR Z,L1A82 ; (+00dH)
SUB 031H
CP 009H
JR NC,L1A4D ; (-02eH)
LD C,A
LD A,(HL)
INC HL
CP 03AH
JR NZ,L1A4D ; (-035H)
L1A82: EX (SP),HL
LD HL,L0000
LD A,C
JR L1A9B ; (+012H)
L1A89: POP HL
PUSH HL
L1A8B: LD A,(HL)
INC HL
CP 03AH
JP Z,01F94H
OR A
JR NZ,L1A8B ; (-00aH)
LD HL,(DDEV)
LD A,(DCHAN)
L1A9B: LD (ZEQT),HL
PUSH HL
LD (ZCH),A
LD DE,ZNXT
LD BC,0001DH
LDIR
LD B,A
LD A,(01051H)
AND 007H
CP B
JP C,01F94H
LD A,B
POP DE
POP HL
RET
CALL SKPDE
RST 018H
DB 02CH
EX DE,HL
LD HL,ELMD1
LD B,01FH
CALL ?CLRHL
LD HL,ELMD
RST 018H
DB 017H
CALL L1EB4
LD HL,ZFLAG1
BIT 4,(HL)
RET Z
INC HL
BIT 7,(HL)
RET NZ
LD A,(ELMD1)
CP 00DH
JP Z,01F9AH
RET
CALL SKPDE
CALL L1AEF
LD B,000H
CALL L1B97
JP L2D08
L1AEF: LD A,(ZLOG)
RST 018H
DB 029H
JP NC,01F7CH
CALL L1C5B
LD HL,L005D
LD A,(ZFLAG1)
LD DE,(ZKL)
INC DE
INC DE
BIT 7,A
JR NZ,L1B0B ; (+001H)
ADD HL,DE
L1B0B: LD A,(ZRWX)
BIT 2,A
JR Z,L1B13 ; (+001H)
ADD HL,DE
L1B13: EX DE,HL
LD A,(ZLOG)
RST 018H
L1B18: DB 02AH
LD (L1FC0),A
LD (ZTOP),HL
EX DE,HL
LD HL,ZLOG
LD BC,00008H
LDIR
LD (01809H),DE
PUSH DE
POP IY
LD HL,ELMD
CALL L1C54
LD HL,00010H
ADD HL,DE
LD (L180B),HL
LD DE,(ZKL)
ADD HL,DE
LD (L180D),HL
CALL L1D15
JP NZ,L2B7F
LD A,(ZRWX)
BIT 2,A
JP NZ,01F97H
BIT 1,A
LD IX,(ZWO)
JR NZ,L1B65 ; (+00bH)
LD A,(ZFLAG1)
BIT 7,A
JR Z,L1B6B ; (+00aH)
LD IX,(ZRO)
L1B65: LD HL,ELMD
JP IOCALL
L1B6B: CALL L0D9B
JP 019BBH
CALL SKPDE
LD IY,L0100
LD (ZLOG),IY
LD IY,ELMD
CALL L1D15
LD HL,L2B7A
JR NZ,L1B8B ; (+003H)
LD HL,L1C39
L1B8B: CALL L00FA
LD B,080H
CALL L1B97
LD A,(ELMD)
RET
L1B97: LD A,(ELMD)
CP 005H
RET C
LD A,(ELMD18)
AND 080H
CP B
RET Z
JP 01F9DH
L1BA7: CALL SKPDE
OR A
JR Z,L1BED ; (+040H)
CALL L1BB3
JP L2D08
L1BB3: RST 018H
DB 02EH
RET C
CALL L181A
PUSH AF
CALL L1D15
JR NZ,L1BE1 ; (+022H)
BIT 7,A
LD A,B
JR Z,L1BD4 ; (+010H)
OR A
LD IX,(ZKL)
JR Z,L1BCF ; (+004H)
LD IX,(ZCL)
L1BCF: CALL IOCALL
JR L1BE4 ; (+010H)
L1BD4: OR A
JR Z,L1BE4 ; (+00dH)
LD A,(ZRWX)
BIT 1,A
CALL NZ,L1892
JR L1BE4 ; (+003H)
L1BE1: CALL L2BEC
L1BE4: POP AF
RST 018H
DB 02BH
RET
CALL SKPDE
LD B,000H
L1BED: LD C,08EH
L1BEF: LD A,C
PUSH BC
RST 018H
DB 029H
CALL NC,L1BB3
POP BC
DEC C
JR NZ,L1BEF ; (-00bH)
JP L1FAB
L1BFD: CALL SKPDE
LD A,(ZFLAG1)
BIT 6,A
JP Z,01F97H
CALL 018C7H
LD A,(ZDIRMX)
LD B,A
L1C0F: LD HL,KEYBUF
PUSH BC
LD IX,(ZRO)
CALL IOCALL
POP BC
SET 0,A
RET C
PUSH IY
POP DE
CALL L1E9D
LD A,(HL)
RET Z
DJNZ L1C0F ; (-019H)
XOR A
SCF
RET
L1C2B: CALL L1C5B
CALL L1BFD
JP NC,01F79H
OR A
JP Z,01F85H
RET
L1C39: CALL L1C5B
CALL L1BFD
JP C,01F73H
CALL SKPDE
LD HL,KEYBUF
PUSH IY
POP DE
PUSH HL
CALL L1C54
POP HL
LD DE,ELMD
LD A,(HL)
L1C54: LD BC,00040H
LDIR
OR A
RET
L1C5B: LD IX,L1C9D
L1C5F: LD (01C99H),IX
CALL SKPDE
LD A,(ZLOG)
LD C,A
LD HL,(TEXTED)
PUSH HL
L1C6E: POP HL
LD A,(HL)
OR A
RET Z
LD B,A
INC HL
CALL LDDEMI
PUSH HL
ADD HL,DE
EX (SP),HL
CP 08FH
JR NC,L1C6E ; (-010H)
CP C
JR Z,L1C6E ; (-013H)
INC HL
LD A,(HL)
EX AF,AF'
INC HL
LD DE,ZEQT
PUSH BC
LD BC,00300H
L1C8C: LD A,(DE)
SUB (HL)
OR C
LD C,A
INC DE
INC HL
DJNZ L1C8C ; (-008H)
POP BC
JR NZ,L1C6E ; (-029H)
LD A,B
CALL L0000
JR L1C6E ; (-02fH)
L1C9D: LD A,(01051H)
BIT 6,A
JP NZ,01F7CH
BIT 5,A
RET Z
EX AF,AF'
LD B,A
LD A,(ZRWX)
AND B
BIT 1,A
RET Z
JP 01F7CH
CALL L1D15
JP NZ,L2AD2
LD BC,(ELMD20)
PUSH BC
XOR A
LD IX,(ZINP)
CALL IOCALL
POP BC
RET
LD A,(01051H)
BIT 7,A
JP Z,01F97H
LD BC,(ELMD20)
JP L313A
LD A,(ELMD)
CP 005H
JR C,L1CE4 ; (+005H)
LD A,080H
LD (ELMD18),A
L1CE4: CALL L1D15
JP NZ,L2AE0
BIT 7,A
JP NZ,01F97H
PUSH DE
LD HL,L0200
LD (ZLOG),HL
CALL L1C5B
LD HL,ELMD
PUSH HL
POP IY
LD IX,(ZWO)
CALL IOCALL
LD BC,(ELMD20)
POP HL
LD A,004H
LD IX,(ZOUT)
CALL IOCALL
RET
L1D15: LD A,(ZFLAG1)
BIT 5,A
RET
CALL SKPDE
OR A
JR NZ,L1D6B ; (+04aH)
LD HL,L0100
LD (ZLOG),HL
IF BUILD_RFS = 1
CALL RFS_L1C5B_WRAP
CALL RFS_FLAGS_TEST
; RFS_FLAGS_TEST returns HL=ZFLAG1 for non-$RFS devices
; (and already handles the ZFLAG1 bit7 error check).
BIT 5,(HL) ; ZFLAG1 bit5 = block device
JP NZ,02F38H ; Block device DIR path (ZINP-based)
INC HL ; HL = ZFLAG2
BIT 7,(HL) ; ZFLAG2 bit7 = error
JP NZ,01F97H
NOP
NOP
NOP
NOP
NOP
ELSE
; Original SVC#39 DIR handler (no RFS)
CALL L1C5B
LD HL,ZFLAG1
BIT 7,(HL)
JP NZ,01F97H
BIT 5,(HL)
JP NZ,02F38H ; Block device DIR path
INC HL
BIT 7,(HL)
JP NZ,01F97H
ENDIF
LD HL,L2000
LD BC,00008H
L1D43: CALL ?CLRHL
DEC C
JR NZ,L1D43 ; (-006H)
CALL 018C7H
LD A,(ZDIRMX)
LD B,A
LD HL,L2000
L1D53: PUSH BC
LD IX,(ZRO)
CALL IOCALL
PUSH AF
LD BC,00020H
ADD HL,BC
LD (HL),000H
POP AF
POP BC
JR C,L1D68 ; (+002H)
DJNZ L1D53 ; (-015H)
L1D68: JP L18C6
L1D6B: LD (01E13H),A
XOR A
LD (DISPX),A
LD HL,KEYBUF
PUSH HL
LD DE,L1E1D
LD B,00EH
CALL LDHLDE
CALL L1535
LD (HL),020H
INC HL
LD (HL),020H
INC HL
EX DE,HL
CALL L1D15
LD IX,(ZFREE)
JR Z,L1D95 ; (+004H)
LD IX,L2F4B
L1D95: CALL IOCALL
JR C,L1DA8 ; (+00eH)
LD H,B
LD L,C
LD B,000H
RST 018H
DB 016H
LD HL,L1E2B
LD B,009H
CALL LDDEHL
L1DA8: EX DE,HL
LD (HL),00DH
INC HL
LD (HL),000H
POP DE
CALL L1E12
LD B,040H
LD HL,L2000
L1DB7: CALL L1DC3
LD DE,00020H
ADD HL,DE
DJNZ L1DB7 ; (-009H)
JP L2D08
L1DC3: CALL SKPDE
LD A,(HL)
OR A
RET Z
RET M
LD DE,KEYBUF
PUSH DE
LD A,020H
LD B,026H
CALL ?SETDE
LD A,(HL)
CP 00CH
JR C,L1DDC ; (+002H)
LD A,00CH
L1DDC: PUSH HL
POP IY
POP DE
PUSH DE
INC DE
LD HL,L1E31
LD BC,L0003
L1DE8: ADD HL,BC
DEC A
JR NZ,L1DE8 ; (-004H)
LDIR
EX DE,HL
BIT 0,(IY+012H)
JR Z,L1DF7 ; (+002H)
LD (HL),02AH
L1DF7: INC HL
INC HL
LD (HL),022H
INC HL
L1DFC: LD A,(IY+001H)
CP 00DH
JR Z,L1E09 ; (+006H)
LD (HL),A
INC IY
INC HL
JR L1DFC ; (-00dH)
L1E09: LD (HL),022H
INC HL
LD (HL),00DH
INC HL
LD (HL),000H
POP DE
L1E12: LD A,000H
RST 018H
DB 02EH
RST 018H
DB 017H
RST 018H
DB 037H
RST 018H
DB 00FH
RET
L1E1D: DB 00DH,"DIRECTORY OF " ; Directory/file type strings
L1E2B: DB " KB FR"
L1E31: DS 2, 045H
DB ".OBJBTXBSDBRDRB"
DS 2, 020H
DB "? LIB ?"
DS 2, 020H
DB "? SYSGR"
DS 2, 020H
DB 03FH
DB 020H
; ---------------------------------------------------------------------------
; Subroutine at 0x1E58: Opens device I/O channel (saves/restores SP and IX)
; ---------------------------------------------------------------------------
PUSH HL ; E5
L1E59: XOR A ; AF
LD (01042H),A ; 32 42 10 — clear I/O flag
LD IX,01E71H ; DD 21 71 1E — IX = workspace
LD (01E72H),SP ; ED 73 72 1E — save stack pointer
CALL L1C5F ; CD 5F 1C — open channel
POP HL ; E1
LD IX,(01053H) ; DD 2A 53 10 — restore IX
CALL IOCALL ; CD 45 02
RET ; C9
; Workspace area (0x1E71-0x1E73, used by above subroutine)
DB 031H ; 0x1E71 data (IX-based structure)
DS 2, 000H ; 0x1E72-73 SP save area
; ---------------------------------------------------------------------------
; Subroutine at 0x1E74: Confirm prompt — SVC #38 + "OK ? [Y/N]"
; ---------------------------------------------------------------------------
LD B,000H ; 06 00
RST 018H ; DF
DB 038H ; SVC #38
JR L1E59 ; 18 DF — loop back to XOR A at 0x1E59
; ---------------------------------------------------------------------------
; Subroutine at 0x1E7A: Ask "OK ? [Y/N]" and return Z if 'Y'
; ---------------------------------------------------------------------------
L1E7A: CALL 00164H ; CD 64 01
DB 059H ; inline param 'Y' for CALL 0164H
RET Z ; C8 — return if match
LD DE,01E8EH ; 11 8E 1E — DE → "OK ? [Y/N]" string
RST 018H ; DF
DB 005H ; SVC #5 — display string
LD A,001H ; 3E 01
RST 018H ; DF
DB 00DH ; SVC #0D — read key
CP 059H ; FE 59 — compare with 'Y'
RET Z ; C8 — return Z if 'Y'
JP 0017DH ; C3 7D 01 — jump to error/cancel handler
DB "OK ? [Y/N]",019H,000H ; Inline string at 0x1E8E
; ---------------------------------------------------------------------------
; L1E9D: Filename comparison — compares entry name (HL) with search name (DE).
; Skips ATRB byte in both, compares up to 17 chars, CR terminates/matches.
; ---------------------------------------------------------------------------
L1E9A: LD DE,01000H
L1E9D: CALL SKPDE ; Skip DE past device name
INC HL ; Skip ATRB byte in directory entry
INC DE ; Skip ATRB byte in search name
LD A,(DE)
CP 00DH
RET Z
LD B,011H
L1EA8: LD A,(DE)
CP (HL)
RET NZ
CP 00DH
RET Z
INC HL
INC DE
DJNZ L1EA8 ; (-00aH)
OR A
RET
L1EB4: INC HL
LD C,010H
L1EB7: LD A,B
OR A
JR Z,L1ECF ; (+014H)
LD A,(DE)
INC DE
DEC B
OR A
JR Z,L1ECF ; (+00eH)
CP 022H
JR Z,L1EB7 ; (-00eH)
CP 03AH
JP Z,01F9AH
LD (HL),A
INC HL
DEC C
JR NZ,L1EB7 ; (-018H)
L1ECF: LD (HL),00DH
INC HL
L1ED2: LD A,C
OR A
RET Z
LD (HL),020H
INC HL
DEC C
JR L1ED2 ; (-009H)
LD HL,(TEXTED)
L1EDE: INC (HL)
DEC (HL)
SCF
RET Z
CP (HL)
INC HL
JR Z,L1EEE ; (+008H)
PUSH DE
CALL LDDEMI
ADD HL,DE
POP DE
JR L1EDE ; (-010H)
L1EEE: INC HL
INC HL
RET
L1EF1: CALL SKPDE
RST 018H
DB 029H
RET C
DEC HL
LD B,(HL)
DEC HL
LD C,(HL)
DEC HL
LD D,H
LD E,L
INC BC
INC BC
INC BC
PUSH BC
ADD HL,BC
PUSH HL
LD B,H
LD C,L
LD HL,(TMPEND)
OR A
SBC HL,BC
LD B,H
LD C,L
POP HL
LDIR
POP DE
LD HL,L0000
OR A
SBC HL,DE
EX DE,HL
RST 018H
DB 019H
OR A
RET
PUSH AF
PUSH BC
PUSH DE
PUSH DE
INC DE
INC DE
INC DE
LD HL,(TMPEND)
EX DE,HL
ADD HL,DE
EX DE,HL
JP C,01F6DH
PUSH HL
LD HL,0FE00H
ADD HL,SP
SBC HL,DE
JR C,01F6DH ; (+037H)
LD HL,(MEMLMT)
DEC H
DEC H
SBC HL,DE
JR C,01F6DH ; (+02eH)
POP HL
PUSH HL
LD BC,(VARST)
OR A
SBC HL,BC
LD B,H
LD C,L
POP HL
INC BC
LDDR
POP DE
LD (HL),A
INC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
PUSH HL
INC DE
PUSH DE
L1F58: LD (HL),000H
INC HL
DEC DE
LD A,D
OR E
JR NZ,L1F58 ; (-008H)
POP DE
INC DE
INC DE
RST 018H
DB 019H
POP HL
POP DE
POP BC
POP AF
RET
L1F6A: LD A,003H
LD HL,0063EH
LD HL,09C3EH
LD HL,0A83EH
LD HL,0A93EH
LD HL,0AA3EH
LD HL,0AB3EH
LD HL,0AE3EH
LD HL,0B23EH
LD HL,0B33EH
LD HL,0B43EH
LD HL,0B53EH
LD HL,0B63EH
LD HL,0B73EH
LD HL,L3A3E
LD HL,0BB3EH
LD HL,0BC3EH
LD HL,0BD3EH
LD HL,0BF3EH
LD HL,L403E
LD HL,0C43EH
JP L0182
L1FAB: LD A,(L1FC0)
OR A
LD B,000H
CALL NZ,L1BA7
CALL L368D
CALL L38FA
CALL L2D08
JP L0D20
L1FC0: DS 64, 000H
L2000: DS 38, 000H
L2026: DS 263, 000H
L212D: DS 211, 000H
L2200: DS 294, 000H
L2326: DS 986, 000H
L2700: DS 16, 000H
L2710: DS 240, 000H
L2800: DS 256, 000H
LD (02905H),DE
RET
L2905: NOP
NOP
L2907: LD BC,L0000
LD DE,00001H
BIT 2,A
CALL Z,L2ED0
LD HL,(L180D)
LD A,(HL)
LD (HL),C
LD C,A
INC HL
LD A,(HL)
LD (HL),B
LD B,A
LD HL,(L180B)
LD DE,L0100
JP L2FCF
CALL SKPDE
CALL L181A
LD HL,KEYBUF
PUSH HL
LD A,B
OR A
CALL NZ,LDHLDE
LD B,020H
LD A,020H
CALL ?SETHL
LD A,(IY+012H)
OR A
JP NZ,01F7FH
CALL L29DF
JR NC,L2964 ; (+01dH)
LD (IY+014H),E
LD (IY+015H),D
LD (IY+046H),001H
JR Z,L2964 ; (+011H)
CALL L29C2
CALL L2A08
CALL L297C
LD (IY+040H),L
LD (IY+041H),H
JR L296A ; (+006H)
L2964: CALL L297C
CALL L29AB
L296A: POP HL
CALL L2E24
LD (IY+044H),001H
L2972: LD HL,(L2905)
INC HL
LD (L2905),HL
JP L1815
L297C: LD HL,(L2905)
DEC HL
PUSH HL
ADD HL,HL
LD E,H
LD D,000H
LD HL,(L180B)
ADD HL,DE
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
POP HL
LD A,L
PUSH AF
RRA
RRA
RRA
AND 00FH
LD L,A
LD H,000H
ADD HL,DE
POP AF
AND 007H
ADD A,A
ADD A,A
ADD A,A
ADD A,A
ADD A,A
LD DE,(0180BH)
INC D
ADD A,E
LD E,A
RET NC
INC D
RET
L29AB: LD A,(IY+040H)
CP L
JR NZ,L29B6 ; (+005H)
LD A,(IY+041H)
CP H
RET Z
L29B6: CALL L29C2
LD (IY+040H),L
LD (IY+041H),H
XOR A
JR L29CC ; (+00aH)
L29C2: XOR A
CP (IY+044H)
RET Z
LD (IY+044H),A
LD A,003H
L29CC: CALL SKPDE
LD C,(IY+040H)
LD B,(IY+041H)
LD DE,L0100
LD HL,(L180B)
INC H
JP L2FD1
L29DF: LD L,(IY+014H)
LD H,(IY+015H)
LD DE,(02905H)
LD A,H
OR L
JR NZ,L29F1 ; (+004H)
OR 0FFH
SCF
RET
L29F1: CALL L2FC9
RET NC
CALL SKPDE
DEC HL
DEC DE
LD A,L
AND 080H
LD L,A
LD A,E
AND 080H
LD E,A
CALL L2FC9
RET C
SCF
RET
L2A08: CALL SKPDE
LD HL,(L2905)
DEC HL
ADD HL,HL
LD B,H
INC B
LD HL,(L180B)
L2A15: LD A,(HL)
INC HL
OR (HL)
CALL Z,L2A23
INC HL
DJNZ L2A15 ; (-009H)
LD (IY+046H),001H
RET
L2A23: CALL SKPDE
PUSH HL
LD DE,00010H
CALL L2ED0
POP HL
LD (HL),B
DEC HL
LD (HL),C
LD HL,(L180B)
INC H
XOR A
L2A36: LD (HL),020H
INC HL
DEC A
JR NZ,L2A36 ; (-006H)
DEC H
LD DE,L0100
LD A,010H
L2A42: PUSH AF
CALL L2FCF
POP AF
INC BC
DEC A
JR NZ,L2A42 ; (-009H)
RET
L2A4C: LD L,(IY+014H)
LD H,(IY+015H)
LD A,H
OR L
SCF
RET Z
LD DE,0FF02H
PUSH HL
ADD HL,DE
JR C,L2A60 ; (+003H)
LD HL,L0000
L2A60: LD (IY+014H),L
LD (IY+015H),H
POP DE
LD HL,(L180B)
DEC HL
LD (HL),D
DEC HL
LD (HL),E
CALL L2A88
OR A
LD A,(ZRWX)
BIT 2,A
RET NZ
LD HL,(L180D)
LD A,(HL)
LD (IY+01EH),A
INC HL
LD A,(HL)
LD (IY+01FH),A
LD DE,L0000
RET
L2A88: LD C,(IY+01EH)
LD B,(IY+01FH)
LD A,B
OR C
JP Z,01F76H
LD DE,L0100
LD HL,(L180B)
JP 02FD0H
RET
XOR A
LD (DE),A
PUSH HL
PUSH DE
PUSH DE
CALL L29DF
POP DE
JR C,L2AC7 ; (+01fH)
CALL L181A
PUSH DE
CALL L297C
CALL L29AB
EX DE,HL
POP DE
CALL L2E24
XOR A
LD (DE),A
CALL L2972
LD B,020H
XOR A
LD HL,(ZTOP)
INC HL
RES 7,(HL)
JR L2ACF ; (+008H)
L2AC7: XOR A
LD B,A
LD HL,(ZTOP)
INC HL
SET 7,(HL)
L2ACF: POP DE
POP HL
RET
L2AD2: LD DE,(ELMD20)
LD BC,(ELMD30)
CALL 02FD0H
JP L2D08
L2AE0: CALL L2AEA
LD IY,ELMD
JP L2C07
L2AEA: PUSH DE
CALL L2DD0
CALL L2ED0
LD (ELMD30),BC
LD D,E
LD E,000H
POP HL
JP L2FCF
OR A
JR NZ,L2B34 ; (+035H)
PUSH DE
CALL L2B6A
LD A,000H
CALL Z,L2B51
POP DE
CALL L2AEA
LD HL,ELMD
OR 0FFH
CALL L2B51
CALL L2E2A
LD HL,L2000
LD (HL),081H
PUSH HL
POP IY
LD HL,(ELMD20)
LD (IY+014H),L
LD (IY+015H),H
LD HL,(ELMD30)
LD (IY+01EH),L
LD (IY+01FH),H
JP L2F37
L2B34: PUSH HL
CALL L2B6A
JP NZ,01F88H
DEC (HL)
LD DE,ELMD
CALL L2E24
CALL L2F37
L2B45: XOR A
LD HL,L2000
CALL L2B51
CALL L2E2A
POP HL
RET
L2B51: CALL SKPDE
PUSH AF
LD DE,00014H
ADD HL,DE
CALL LDDEMI
LD BC,00008H
ADD HL,BC
LD C,(HL)
INC HL
LD B,(HL)
CALL L2DD8
POP AF
JP L2E77
L2B6A: CALL L1D15
JP Z,01F97H
CALL L2E36
CALL 02F38H
LD A,(HL)
CP 081H
RET
L2B7A: LD A,009H
LD (ZRWX),A
L2B7F: CALL L2F6E
XOR B
DEC HL
LD A,(ZRWX)
BIT 0,A
JP NZ,01F73H
PUSH AF
LD DE,00001H
CALL L2ED0
LD (IY+01EH),C
LD (IY+01FH),B
LD (IY+046H),001H
POP AF
BIT 1,A
RET Z
LD HL,(L180D)
LD (HL),C
INC HL
LD (HL),B
RET
RET M
RET Z
CALL L1E9A
RET NZ
POP AF
LD A,(ZRWX)
BIT 1,A
JP NZ,01F79H
PUSH HL
CALL L2E24
LD B,020H
CALL ?CLRDE
POP HL
LD A,(HL)
PUSH IY
POP DE
CALL L2E24
LD HL,ZRWX
BIT 3,(HL)
RET NZ
BIT 0,(HL)
JP NZ,L2A4C
CALL L2E5E
CALL L2A88
LD D,H
LD E,L
L2BDB: LD A,(HL)
INC HL
OR (HL)
INC HL
JR NZ,L2BDB ; (-006H)
DEC HL
DEC HL
SBC HL,DE
LD (IY+042H),L
LD (IY+043H),H
RET
L2BEC: LD A,B
OR A
RET Z
LD A,(ZRWX)
BIT 0,A
RET NZ
BIT 2,A
JR NZ,L2C20 ; (+027H)
LD A,006H
CALL L2907
PUSH IY
POP HL
LD DE,ELMD
CALL L2E24
L2C07: CALL L2F6E
RLA
INC L
JP Z,01F85H
L2C0F: LD A,001H
LD B,(IY+000H)
JP L2D6A
RET M
RET Z
CALL L1E9A
RET NZ
JP 01F79H
L2C20: CALL L29C2
LD A,(IY+046H)
OR A
RET Z
CALL L2F6E
LD (0CA2CH),A
ADD A,L
RRA
JR L2C0F ; (-023H)
RET M
RET Z
CALL L1E9A
RET NZ
POP AF
LD (IY+045H),001H
LD A,(HL)
CP (IY+000H)
JP NZ,01F9DH
JR L2C0F ; (-037H)
CALL SKPDE
LD (02C60H),A
CALL L2F6E
LD D,H
INC L
JP 01F73H
RET Z
RET M
CALL L1E9A
RET NZ
POP AF
LD BC,L0012
ADD HL,BC
LD (HL),0FFH
L2C61: CALL L2F37
JP L2D08
CALL SKPDE
CALL L2F6E
LD (HL),D
INC L
JP 01F73H
RET Z
RET M
CALL L1E9A
RET NZ
POP AF
CALL L2CFB
PUSH HL
LD DE,ELMD
CALL L2E24
XOR A
LD (ZLOG),A
LD IX,L2C9B
CALL L1C5F
XOR A
LD (ELMD),A
POP HL
L2C93: LD B,(HL)
LD IY,ELMD
JP L2D6A
L2C9B: INC HL
INC HL
INC HL
CALL L1E9A
JP Z,01F7CH
L2CA4: RET
L2CA5: DS 16, 000H
DEC C
CALL SKPDE
LD HL,L2CA4
CALL L1EB4
XOR A
L2CC0: LD (02CE3H),A
CALL L2F6E
JP Z,L182C
JR L2C93 ; (-038H)
RET M
LD DE,L2CA4
CALL L1E9D
JP Z,01F79H
CALL L1E9A
RET NZ
LD (02CE9H),HL
LD A,001H
LD (02CE3H),A
RET
LD A,0FFH
OR A
JP Z,01F73H
LD HL,0FFFFH
CALL L2CFB
LD DE,L2CA5
INC HL
EX DE,HL
LD BC,00011H
LDIR
JP L2C61
L2CFB: CALL SKPDE
LD DE,L0012
ADD HL,DE
LD A,(HL)
OR A
RET Z
JP 01F7FH
L2D08: CALL IOOUT
XOR A
LD (L1FC0),A
LD A,LSE0
L2D11: PUSH AF
RST 018H
DB 02BH
POP AF
INC A
JR NZ,L2D11 ; (-007H)
LD HL,(ZEQT)
LD DE,$FD
CALL L2FC9
RET NZ
LD A,(ZCH)
EXX
LD H,A
LD D,000H
LD B,003H
EXX
XOR A
LD (ZLOG),A
L2D30: EXX
LD A,B
LD (ZCH),A
ADD A,090H
LD L,A
LD E,000H
EXX
LD IX,L2D5C
CALL L1C5F
EXX
BIT 7,E
LD A,L
EXX
CALL Z,L1EF1
EXX
DEC B
EXX
JP P,L2D30
EXX
LD A,H
LD (ZCH),A
BIT 7,D
EXX
CALL Z,L368D
RET
L2D5C: EXX
LD DE,0FFFFH
EXX
RET
L2D62: LD A,(ZCH)
ADD A,090H
RST 018H
DB 029H
RET
L2D6A: LD (L2DCF),A
LD A,B
PUSH AF
EX DE,HL
LD HL,ELMD
CALL L2E24
CALL L2E36
POP AF
CP 005H
JR C,L2D88 ; (+00aH)
LD A,(ELMD18)
RLA
LD A,003H
JR NC,L2D88 ; (+002H)
LD A,001H
L2D88: LD HL,02D9CH
ADD A,A
CALL ADDHLA
CALL INDRCT
CALL L00FA
CALL L2F37
CALL L2E2A
JP L2D08
ADD A,02DH
ADD A,02DH
AND (HL)
DEC L
JP PO,L212D
JR NZ,02DB9H ; (+010H)
L2DA9: DEC HL
LD B,(HL)
DEC HL
LD C,(HL)
LD A,B
OR C
RET Z
LD DE,L0100
LD HL,KEYBUF
PUSH HL
PUSH DE
CALL 02FD0H
LD DE,00001H
CALL L2DC9
POP DE
POP HL
ADD HL,DE
JR L2DA9 ; (-01dH)
CALL L2DD0
L2DC9: LD A,(L2DCF)
JP L2E77
L2DCF: NOP
L2DD0: LD DE,(ELMD20)
LD BC,(ELMD30)
L2DD8: LD A,E
OR D
JR Z,L2DDD ; (+001H)
DEC DE
L2DDD: INC D
LD E,D
LD D,000H
RET
LD DE,L0100
LD BC,(ELMD30)
LD A,(L2DCF)
OR A
LD HL,KEYBUF
JR Z,L2DF5 ; (+003H)
LD HL,(L180B)
L2DF5: PUSH HL
PUSH AF
CALL L2FD1
POP AF
PUSH AF
JR Z,L2E02 ; (+004H)
LD A,(IY+045H)
OR A
L2E02: LD DE,00001H
CALL Z,L2DC9
POP AF
POP HL
JR Z,L2E13 ; (+007H)
LD E,(IY+042H)
LD D,(IY+043H)
ADD HL,DE
L2E13: LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD A,B
OR C
RET Z
PUSH HL
LD DE,00010H
CALL L2DC9
POP HL
JR L2E13 ; (-011H)
L2E24: LD BC,00020H
LDIR
RET
L2E2A: LD HL,L2800
LD DE,L0100
LD BC,L000F
JP L2FCF
L2E36: LD HL,L2800
CALL L2E67
PUSH HL
CALL L2D62
EX DE,HL
POP HL
RET C
PUSH HL
LD A,(DE)
CP (HL)
JP NZ,01F88H
LD BC,L0006
ADD HL,BC
EX DE,HL
ADD HL,BC
EX DE,HL
LD B,FDPC
L2E52: LD A,(DE)
CPL
AND (HL)
JP NZ,01F88H
INC HL
INC DE
DJNZ L2E52 ; (-00aH)
POP HL
RET
L2E5E: CALL L2D62
RET NC
LD DE,L0100
RST 018H
DB 02AH
L2E67: LD BC,L000F
LD DE,L0100
XOR A
CALL L2FD4
LD A,(HL)
OR A
JP M,01F70H
RET
L2E77: LD HL,L2800
CALL L2E84
OR A
RET NZ
CALL L2D62
RET C
XOR A
L2E84: CALL IOOUT
OR A
PUSH HL
LD HL,0B600H
LD A,013H
JR NZ,L2E95 ; (+005H)
LD HL,0A62FH
LD A,01BH
L2E95: LD (L2EB2),A
LD (L2EC8),HL
POP HL
L2E9C: CALL L2EA4
INC BC
DEC E
JR NZ,L2E9C ; (-007H)
RET
L2EA4: CALL SKPDE
INC HL
LD A,C
SUB (HL)
LD C,A
JR NC,L2EAE ; (+001H)
DEC B
L2EAE: INC HL
LD E,(HL)
INC HL
LD D,(HL)
L2EB2: NOP
DEC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
INC HL
INC HL
LD A,C
LD E,003H
L2EBD: SRL B
RR C
DEC E
JR NZ,L2EBD ; (-007H)
ADD HL,BC
CALL L2F2B
L2EC8: NOP
NOP
CP (HL)
LD (HL),A
RET NZ
JP 01F88H
L2ED0: PUSH DE
CALL L2E5E
POP DE
PUSH HL
CALL L2EDE
POP HL
LD A,001H
JR L2E84 ; (-05aH)
L2EDE: LD A,E
EXX
LD E,A
LD D,A
LD B,001H
EXX
INC HL
LD E,(HL)
LD D,000H
INC HL
INC HL
INC HL
LD C,(HL)
INC HL
LD B,(HL)
DEC BC
LD (02EFCH),BC
INC HL
PUSH HL
EXX
POP HL
EXX
LD B,D
LD C,E
L2EFB: LD HL,L0000
OR A
SBC HL,DE
JP C,01F8BH
EXX
LD A,B
AND (HL)
EXX
CALL L2F15
INC DE
EXX
RLC B
JR NC,L2F12 ; (+001H)
INC HL
L2F12: EXX
JR L2EFB ; (-01aH)
L2F15: JR NZ,L2F24 ; (+00dH)
EXX
DEC E
EXX
RET NZ
POP AF
EXX
LD A,D
EXX
LD E,A
LD D,000H
OR A
RET
L2F24: EXX
LD E,D
EXX
LD B,D
LD C,E
INC BC
RET
L2F2B: PUSH BC
AND 007H
INC A
LD B,A
XOR A
SCF
L2F32: ADC A,A
DJNZ L2F32 ; (-003H)
POP BC
RET
L2F37: OR 0AFH
LD HL,L2000
LD DE,00800H
LD BC,00010H
CALL L2FD1
LD A,(HL)
OR A
JP P,01F70H
RET
L2F4B: PUSH HL
PUSH DE
CALL L2E36
INC HL
INC HL
CALL LDDEMI
CALL INDRCT
XOR A
SBC HL,DE
JP C,01F70H
SRL H
RR L
SRL H
RR L
LD B,H
LD C,L
POP DE
POP HL
OR A
JP L368D
L2F6E: CALL L1D15
JP Z,01F97H
POP HL
CALL LDDEMI
LD (02FB1H),HL
LD (02F97H),DE
XOR A
LD (L2FC3),A
CALL 02F38H
LD (L2FC7),HL
LD A,040H
LD (L2FC6),A
L2F8E: LD HL,(L2FC7)
LD A,(HL)
OR A
CALL Z,L2FB3
CALL 0FFFFH
LD HL,(L2FC7)
LD BC,00020H
ADD HL,BC
LD (L2FC7),HL
LD HL,L2FC6
DEC (HL)
JR NZ,L2F8E ; (-01bH)
LD A,(L2FC3)
LD HL,(L2FC4)
OR A
JP 0FFFFH
L2FB3: PUSH AF
LD A,(L2FC3)
OR A
JR NZ,L2FC1 ; (+007H)
INC A
LD (L2FC3),A
LD (L2FC4),HL
L2FC1: POP AF
RET
L2FC3: NOP
L2FC4: NOP
NOP
L2FC6: NOP
L2FC7: NOP
NOP
L2FC9: PUSH HL
OR A
SBC HL,DE
POP HL
RET
L2FCF: OR 0AFH
L2FD1: CALL L2FE8
L2FD4: CALL SKPDE
OR A
LD IX,(ZINP)
JR Z,L2FE2 ; (+004H)
LD IX,(ZOUT)
L2FE2: LD A,(ZCH)
JP IOCALL
L2FE8: CALL IOOUT
LD A,(L35B5)
OR A
RET M
CALL L2D62
RET C
JP L2E36
; ---------------------------------------------------------------------------
; $CMT - Cassette Tape device descriptor (same format as $RFS, $FD, etc.)
; ---------------------------------------------------------------------------
$CMT: DW 03359H ; Next device = $RS
DB "CMT",000H ; Device name
DB 05FH ; flags1: bit5=0, bit6=1
L2FFE: DB 0C0H ; flags2 (bit 4 toggled by CMT handler)
DB 000H ; dirmx = 0
DW 03014H ; ZINIT
DW 03064H ; ZRO
DW 03022H ; ZWO
DW 000E5H ; ZCL (= NOP stub)
DW 00100H ; ZKL
DW 030AAH ; ZINP
DW 0305DH ; ZOUT
DW 01F97H ; ZDELT (= error handler)
DW 01F97H ; ZWDIR (= error handler)
DW 01F97H ; ZFREE (= error handler)
CALL TEST1
DB 054H
LD HL,L2FFE
SET 4,(HL)
RET Z
RES 4,(HL)
OR A
RET
CALL SKPDE
LD DE,L10F0
LD A,(HL)
LD C,005H
CP 002H
JR Z,L303D ; (+00eH)
LD C,004H
L3031: CP 003H
JR Z,L303D ; (+008H)
LD C,A
L3036: SUB 004H
CP 002H
JP C,01F9DH
L303D: LD A,C
LD (DE),A
INC HL
INC DE
LD BC,00011H
LDIR
INC HL
INC HL
LD BC,L0006
LDIR
LD B,068H
CALL ?CLRDE
LD HL,L10F0
LD BC,L0080
CALL L30CB
JR L3060 ; (+003H)
CALL L30D2
L3060: JP C,L017B
RET
LD A,037H
LD (L30AA),A
PUSH HL
LD HL,L10F0
LD BC,L0080
CALL L3114
JR C,L30C1 ; (+04cH)
LD DE,L3332
CALL L3301
POP DE
LD A,(HL)
LD C,002H
CP 005H
JR Z,L3091 ; (+00eH)
LD C,003H
CP 004H
JR Z,L3091 ; (+008H)
LD C,A
SUB 002H
CP 002H
JP C,01F9DH
L3091: LD A,C
LD (DE),A
INC HL
INC DE
LD BC,00011H
LDIR
XOR A
LD B,002H
CALL ?CLRDE
LD BC,L0006
LDIR
LD B,006H
JP ?CLRDE
L30AA: XOR A
JR NC,L30BD ; (+010H)
LD A,0AFH
LD (L30AA),A
PUSH HL
LD HL,ELMD
LD DE,L333F
CALL L3301
POP HL
L30BD: CALL L311B
RET NC
L30C1: CP 002H
JP NZ,L017B
LD A,0C6H
JP L0182
L30CB: CALL L32D4
LD A,0CCH
JR L30D4 ; (+002H)
L30D2: LD A,053H
L30D4: LD (03109H),SP
LD SP,L10F0
PUSH DE
LD E,A
LD D,0D7H
LD A,B
OR C
JR Z,L3107 ; (+024H)
CALL L32CB
CALL L3174
JR C,L3101 ; (+016H)
LD A,E
CP 0CCH
JR NZ,L30F8 ; (+008H)
PUSH DE
LD DE,L3325
CALL L3301
POP DE
L30F8: DI
OUT (LSE4),A
CALL 00780H
CALL NC,L31DD
L3101: DI
OUT (LSE4),A
CALL 00700H
L3107: POP DE
LD SP,L0000
OUT (LSE0),A
OUT (LSE1),A
PUSH AF
RST 018H
DB 011H
POP AF
RET
L3114: CALL L32D4
LD A,0CCH
JR L311D ; (+002H)
L311B: LD A,053H
L311D: LD (03109H),SP
LD SP,L10F0
PUSH DE
LD D,LSD2
LD E,A
LD A,B
OR C
JR Z,L3107 ; (-025H)
CALL L3174
DI
OUT (LSE4),A
CALL NC,L065B
CALL NC,L3220
JR L3101 ; (-039H)
L313A: PUSH HL
LD DE,L334C
LD HL,ELMD
CALL L3301
POP HL
CALL L3153
RET NC
CP 002H
JP NZ,L017B
LD A,083H
JP L0182
L3153: LD (03109H),SP
LD SP,L10F0
PUSH DE
LD D,LSD2
LD E,053H
LD A,B
OR C
JR Z,L3107 ; (-05cH)
IF BUILD_RFS = 1
CALL RFS_LOAD_HOOK
NOP
NOP
NOP
ELSE
; Original SVC#30 data transfer (no RFS)
CALL L32CB
CALL L3174
NOP
ENDIF
DI
OUT (LSE4),A
CALL NC,L065B
CALL NC,L3274
JR L3101 ; (-073H)
L3174: CALL SKPDE
RST 018H
DB 010H
LD HL,MMIO
LD A,FDPA
CALL POPRA
LD B,00AH
L3183: LD HL,0E002H
CALL BREAKX
AND 010H
JR Z,L319A ; (+00dH)
L318D: LD B,0FFH
OUT (LSE2),A
L3191: CALL L09A6
DJNZ L3191 ; (-005H)
OUT (LSE0),A
XOR A
RET
L319A: LD HL,0E003H
LD A,006H
CALL POPRA
INC A
CALL POPRA
DJNZ L3183 ; (-025H)
LD A,(L0050)
OR A
JR NZ,L31C7 ; (+019H)
RST 018H
DB 002H
LD A,07FH
RST 018H
DB 004H
LD A,020H
RST 018H
DB 003H
LD A,D
CP 0D7H
LD DE,L32BC
JR Z,L31C3 ; (+003H)
LD DE,L32C3
L31C3: RST 018H
DB 005H
RST 018H
DB 002H
L31C7: LD HL,0E002H
CALL BREAKX
AND 010H
JR NZ,L318D ; (-044H)
LD HL,0E001H
CALL BREAKX
AND 080H
JR NZ,L31C7 ; (-014H)
SCF
RET
L31DD: PUSH DE
PUSH BC
PUSH HL
LD D,002H
LD A,FDPA
LD (MMIO),A
L31E7: OUT (LSE1),A
LD A,(HL)
OUT (LSE3),A
CALL L32C8
LD A,(0E001H)
AND 080H
SCF
JR Z,L321C ; (+025H)
INC HL
DEC BC
LD A,B
OR C
JR NZ,L31E7 ; (-016H)
LD HL,(SUMDT)
LD A,H
CALL L32C8
LD A,L
CALL L32C8
CALL L0D60
XOR A
DEC D
JR Z,L321C ; (+00dH)
LD B,000H
L3211: CALL L0D47
DJNZ L3211 ; (-005H)
POP HL
POP BC
PUSH BC
PUSH HL
JR L31E7 ; (-035H)
L321C: POP HL
POP BC
POP DE
RET
L3220: PUSH DE
PUSH BC
PUSH HL
LD H,002H
L3225: LD BC,0E001H
LD DE,0E002H
L322B: CALL 00601H
JR C,L3267 ; (+037H)
CALL 00A4AH
LD A,(DE)
AND 020H
JR Z,L322B ; (-00dH)
LD D,H
LD HL,L0000
LD (SUMDT),HL
POP HL
POP BC
PUSH BC
PUSH HL
L3243: CALL L0624
JR C,L3267 ; (+01fH)
OUT (LSE1),A
LD (HL),A
OUT (LSE3),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,L3243 ; (-010H)
LD HL,(SUMDT)
CALL L0624
JR C,L3267 ; (+00cH)
CP H
JR NZ,L326B ; (+00dH)
CALL L0624
JR C,L3267 ; (+004H)
CP L
JR NZ,L326B ; (+005H)
L3266: XOR A
L3267: POP HL
POP BC
POP DE
RET
L326B: DEC D
LD H,D
JR NZ,L3225 ; (-04aH)
L326F: LD A,002H
SCF
JR L3267 ; (-00dH)
L3274: PUSH DE
PUSH BC
PUSH HL
LD H,002H
L3279: LD BC,0E001H
LD DE,0E002H
L327F: CALL 00601H
JR C,L3267 ; (-01dH)
CALL 00A4AH
LD A,(DE)
AND 020H
JR Z,L327F ; (-00dH)
LD D,H
POP HL
POP BC
PUSH BC
PUSH HL
L3291: CALL L0624
JR C,L3267 ; (-02fH)
OUT (LSE1),A
CP (HL)
OUT (LSE3),A
JR NZ,L326F ; (-02eH)
INC HL
DEC BC
LD A,B
OR C
JR NZ,L3291 ; (-012H)
LD HL,(CSMDT)
CALL L0624
JR C,L3267 ; (-044H)
CP H
JR NZ,L326F ; (-03fH)
CALL L0624
JR C,L3267 ; (-04cH)
CP L
JR NZ,L326F ; (-047H)
DEC D
LD H,D
JR NZ,L3279 ; (-041H)
JR L3266 ; (-056H)
L32BC: DB "RECORD." ; CMT status strings (RECORD/PLAY)
L32C3: DB "PLAY",000H
L32C8: JP L076D
L32CB: DI
OUT (LSE2),A
CALL 0071AH
OUT (LSE0),A
RET
L32D4: CALL SKPDE
LD A,0C9H
LD (L32D4),A
LD HL,L0036
BIT 6,(HL)
RET Z
LD HL,L0767
LD (032C9H),HL
LD HL,L077A
LD (030FCH),HL
LD HL,00996H
LD (03192H),HL
LD HL,L0A01
LD (03212H),HL
LD HL,L0A1A
LD (03209H),HL
RET
L3301: LD A,(L0050)
OR A
RET NZ
RST 018H
DB 002H
RST 018H
DB 005H
PUSH HL
INC HL
LD A,022H
RST 018H
DB 003H
LD D,010H
L3312: LD A,(HL)
CP 00DH
JR Z,L331D ; (+006H)
RST 018H
DB 003H
INC HL
DEC D
JR NZ,L3312 ; (-00bH)
L331D: LD A,022H
RST 018H
DB 003H
RST 018H
DB 002H
POP HL
RET
L3325: DB 057H,005H,"RITING" ; CMT status strings (WRITING/FOUND/LOADING/VERIFYING)
DS 3, 020H
DB 006H
DB 000H
L3332: DB 046H,005H,"OUND"
DS 5, 020H
DB 006H
DB 000H
L333F: DB 04CH,005H,"OADING"
DS 3, 020H
DB 006H
DB 000H
L334C: DB 056H,005H,"ERIFYING ",006H
NOP
; ---------------------------------------------------------------------------
; $RS - RS-232C device descriptor
; flags1 bit7=1: ZWDIR/ZFREE not used, overlap with RS_INIT code below.
; ---------------------------------------------------------------------------
$RS: DW $FD ; Next device = $FD (0x358D)
DB "RS",000H,000H ; Device name
DB 08FH ; flags1: bit7=1 (no dir/free)
DB 001H ; flags2
DB 000H ; dirmx = 0
DW 03372H ; ZINIT
DW 033A4H ; ZRO
DW 033A4H ; ZWO (same handler as ZRO)
DW 033B5H ; ZCL
DW 033B5H ; ZKL (same handler as ZCL)
DW 033C6H ; ZINP
DW 033DBH ; ZOUT
DW 000E5H ; ZDELT (= monitor ROM stub)
; ZWDIR/ZFREE implicit — next 4 bytes are ZINIT code, read as DW pointers
; (flags1 bit 7=1 → ZWDIR/ZFREE never called)
RS_INIT: RET C
PUSH IY
CALL L33EC
CALL L3380
CALL L3435
JR L33D8 ; (+058H)
L3380: RST 018H
DB 013H
LD (IY-003H),E
CALL TEST1
DB 02CH
JP NZ,L1F6A
RST 018H
DB 013H
LD (IY-002H),E
LD (IY-008H),00DH
CALL TEST1
DB 000H
RET Z
CALL TEST1
DB 02CH
RST 018H
DB 013H
LD (IY-008H),E
RET
PUSH IY
CALL L33EC
LD A,(IY-001H)
INC (IY-001H)
OR A
CALL Z,L3497
JR L33D8 ; (+023H)
PUSH IY
CALL L33EC
DEC (IY-001H)
LD A,(IY-001H)
OR A
CALL Z,L347F
JR L33D7 ; (+011H)
PUSH IY
CALL L33EC
CALL L34E6
JR C,L33D8 ; (+008H)
CP (IY-008H)
JR NZ,L33D7 ; (+002H)
LD A,00DH
L33D7: OR A
L33D8: POP IY
RET
PUSH IY
CALL L33EC
CP 00DH
JR NZ,L33E7 ; (+003H)
LD A,(IY-008H)
L33E7: CALL L352B
JR L33D8 ; (-014H)
L33EC: PUSH AF
PUSH DE
LD A,(ZCH)
INC A
LD IY,033F7H
LD DE,L0015
L33F9: ADD IY,DE
DEC A
JR NZ,L33F9 ; (-005H)
LD C,(IY+000H)
POP DE
POP AF
RET
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
OR C
OR B
NOP
DJNZ L3421 ; (+010H)
INC B
LD B,B
INC BC
RET NZ
DEC B
LD H,B
JR NC,L341C ; (+003H)
NOP
NOP
NOP
L341C: NOP
NOP
NOP
NOP
NOP
L3421: OR E
OR D
NOP
DJNZ 03436H ; (+010H)
INC B
LD B,B
INC BC
RET NZ
DEC B
LD H,B
JR NC,L3431 ; (+003H)
L342E: CALL BRKCHK
L3431: RET NZ
JP 0017DH
L3435: LD A,018H
OUT (C),A
LD A,030H
OUT (C),A
LD A,(IY-002H)
AND 00CH
JR NZ,L3448 ; (+004H)
SET 2,(IY-002H)
L3448: LD A,(IY-002H)
LD B,A
AND 00FH
OR 040H
LD (IY+006H),A
LD A,B
AND 080H
OR 040H
LD (IY+008H),A
RRA
AND 07FH
OR 00AH
LD (IY+00AH),A
LD A,B
OR 07FH
LD (IY+002H),A
CALL L348B
L346C: IN A,(C)
RRCA
RET NC
DEC C
IN A,(C)
INC C
LD A,001H
OUT (C),A
IN A,(C)
AND 070H
JR Z,L346C ; (-012H)
RET
L347F: RES 0,(IY+008H)
RES 7,(IY+00AH)
LD (IY-001H),000H
L348B: LD B,00AH
PUSH IY
POP HL
LD DE,L0003
ADD HL,DE
OTIR
RET
L3497: LD A,030H
OUT (C),A
RET
L349C: SET 0,(IY+008H)
LD A,013H
OUT (C),A
LD A,(IY+008H)
OUT (C),A
LD A,035H
OUT (C),A
LD A,(IY+00AH)
OR 088H
LD (IY+00AH),A
OUT (C),A
RET
LD A,003H
OUT (C),A
RES 0,(IY+008H)
LD A,(IY+008H)
OUT (C),A
L34C5: RES 7,(IY+00AH)
JR L34DB ; (+010H)
L34CB: SET 1,(IY+00AH)
JR L34DB ; (+00aH)
L34D1: RES 1,(IY+00AH)
JR L34DB ; (+004H)
SET 7,(IY+00AH)
L34DB: LD A,005H
OUT (C),A
LD A,(IY+00AH)
OUT (C),A
OR A
RET
L34E6: CALL SKPDE
LD C,(IY+000H)
L34EC: CALL L342E
CALL L3564
JR C,L34EC ; (-008H)
CALL L349C
L34F7: CALL L342E
IN A,(C)
RRCA
JR NC,L34F7 ; (-008H)
DEC C
IN A,(C)
INC C
AND (IY+002H)
PUSH AF
LD A,001H
OUT (C),A
IN A,(C)
AND 070H
JR NZ,L3516 ; (+005H)
CALL L34C5
POP AF
RET
L3516: LD B,A
POP AF
PUSH BC
CALL L3435
POP BC
LD A,01DH
RLC B
RLC B
RET C
INC A
RLC B
RET C
INC A
SCF
RET
L352B: CALL SKPDE
LD C,(IY+000H)
LD D,A
CALL L34CB
L3535: CALL L342E
CALL L356B
CALL NC,L357C
L353E: JR C,L3535 ; (-00bH)
IN A,(C)
BIT 2,A
JR Z,L3535 ; (-011H)
BIT 7,(IY-003H)
JR Z,L3555 ; (+009H)
LD A,001H
OUT (C),A
IN A,(C)
RRCA
JR NC,L3535 ; (-020H)
L3555: DEC C
OUT (C),D
INC C
BIT 6,(IY-003H)
JR Z,L3562 ; (+003H)
CALL L34D1
L3562: OR A
RET
L3564: OR A
BIT 0,(IY-003H)
JR L3570 ; (+005H)
L356B: OR A
BIT 1,(IY-003H)
L3570: RET Z
LD A,010H
OUT (C),A
IN A,(C)
AND 008H
RET NZ
SCF
RET
L357C: OR A
BIT 2,(IY-003H)
RET Z
LD A,010H
OUT (C),A
IN A,(C)
AND 020H
RET NZ
SCF
RET
; $FD descriptor (original, restored)
$FD: DW $QD ; Next device = $QD
DB "FD",000H,000H ; Device name
DB 03FH ; ZFLAG1 (original, bit5=1 = ZINP-based DIR)
DB 003H ; ZFLAG2 (original)
DB 03FH ; ZDIRMX (original)
DW 0368DH ; func[0] ZINIT
DW 0000FH ; func[1] ZRO (original)
DW 00100H ; func[2] ZWO
DW 00030H ; func[3] ZCL
DW 000FEH ; func[4] ZKL
DW 03705H ; func[5] ZINP (original restored)
DW 03708H ; func[6] ZOUT
DW 01F97H ; func[7] ZDELT
DW 01F97H ; func[8] ZWDIR
DW 01F97H ; func[9] ZFREE
DB 000H
L35AB: DB 000H
L35AC: DB 000H
L35AD: DS 3, 000H
L35B0: DB 000H
L35B1: DS 2, 000H
L35B3: DB 000H
L35B4: DB 000H
L35B5: DB 000H
L35B6: DB 000H
L35B7: DS 4, 000H
L35BB: DS 4, 000H
L35BF: DB 000H
L35C0: PUSH BC
LD A,L
LD B,004H
L35C4: SRL H
RR L
DJNZ L35C4 ; (-006H)
AND 00FH
INC A
LD H,A
POP BC
RET
L35D0: LD A,H
LD H,000H
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
DEC A
ADD A,L
LD L,A
RET
L35DB: CALL SKPDE
LD HL,L35B5
BIT 7,(HL)
JR NZ,L35EB ; (+006H)
CALL L367C
CALL L3898
L35EB: LD A,(L35AC)
BIT 2,A
SET 2,A
JR Z,L35F6 ; (+002H)
SET 5,A
L35F6: SET 7,A
LD HL,L35B5
BIT 6,(HL)
JR Z,L3601 ; (+002H)
SET 6,A
L3601: CALL L361C
LD (HL),A
LD HL,L35B7
CALL L3614
BIT 0,(HL)
CALL Z,L3695
RET C
SET 0,(HL)
RET
L3614: LD A,(L35AC)
AND 003H
JP ADDHLA
L361C: OUT (0DCH),A
PUSH AF
RLCA
RLCA
OUT (0DDH),A
RLCA
OUT (0DEH),A
POP AF
RET
L3628: CALL SKPDE
LD D,000H
LD A,(L35B3)
SRL A
CPL
OUT (0DBH),A
LD B,A
LD A,(L35B5)
RES 6,A
BIT 5,A
JR Z,L3640 ; (+001H)
CCF
L3640: JR C,L3644 ; (+002H)
SET 6,A
L3644: CALL L361C
LD HL,L35B5
CP (HL)
LD (HL),A
JR Z,L364F ; (+001H)
INC D
L364F: LD HL,L35BB
CALL L3614
LD A,(HL)
OUT (0D9H),A
CP B
JR Z,L3666 ; (+00bH)
INC D
CALL L3673
PUSH AF
IN A,(0D9H)
LD (HL),A
POP AF
RET C
RET NZ
L3666: LD A,(L35B4)
CPL
OUT (0DAH),A
LD A,D
OR A
CALL NZ,L388D
XOR A
RET
L3673: LD A,018H
CALL L36C2
RET C
AND 099H
RET
L367C: LD HL,L35B5
SET 7,(HL)
LD A,(HL)
CALL L361C
LD HL,L35B7
LD B,004H
JP ?CLRHL
L368D: XOR A
CALL L361C
LD (L35B5),A
RET
L3695: CALL SKPDE
LD HL,L35BB
CALL L3614
LD (HL),0FFH
LD A,008H
CALL L36C2
RET C
AND 085H
XOR 004H
RET Z
JP L385A
L36AE: PUSH AF
LD A,LSD0
CALL L36BB
JR C,L36B8 ; (+002H)
POP AF
RET
L36B8: POP HL
POP HL
RET
L36BB: CALL SKPDE
LD D,000H
JR L36DC ; (+01aH)
L36C2: CALL SKPDE
LD B,A
LD A,(035AAH)
CPL
AND 003H
OR B
LD D,000H
JR L36D6 ; (+005H)
L36D1: CALL SKPDE
LD D,001H
L36D6: CALL L36AE
LD (L35B6),A
L36DC: CPL
OUT (0D8H),A
CALL L3887
LD E,007H
L36E4: LD HL,L2710
L36E7: DEC HL
LD A,H
OR L
JP Z,L36F9
IN A,(0D8H)
CPL
LD B,A
AND 081H
CP D
JR NZ,L36E7 ; (-00fH)
LD A,B
OR A
RET
L36F9: DEC E
JP Z,L385A
LD A,(L35B6)
CPL
OUT (0D8H),A
JR L36E4 ; (-021H)
DB 037H
JR L3709 ; (+001H)
OR A
L3709: EX AF,AF'
PUSH AF
EX AF,AF'
LD (L35B1),HL
PUSH HL
LD HL,L35AB
RL (HL)
RRC (HL)
LD H,(HL)
LD L,A
AND 007H
LD (L35AC),A
CALL L35DB
JR NC,L3728 ; (+005H)
POP HL
EX AF,AF'
POP AF
EX AF,AF'
RET
L3728: BIT 7,H
LD A,L
POP HL
PUSH HL
CALL Z,L37E7
LD (035AFH),DE
PUSH DE
OR A
PUSH AF
LD H,B
LD L,C
CALL P,L35C0
LD (L35AD),HL
LD A,009H
LD (L35BF),A
PUSH IY
CALL L375C
EX AF,AF'
POP IY
LD HL,(L35B3)
POP AF
CALL P,L35D0
LD B,H
LD C,L
POP DE
POP HL
POP AF
EX AF,AF'
JP L37E7
L375C: LD E,000H
LD HL,(035AFH)
LD A,(L35B5)
BIT 5,A
JR Z,L376B ; (+003H)
ADD HL,HL
LD E,080H
L376B: LD A,L
OR A
JR Z,L3770 ; (+001H)
INC H
L3770: LD A,H
LD (L35B0),A
L3774: CALL L37FA
CALL NC,L3628
RET C
JR NZ,L37E1 ; (+064H)
DI
LD A,(L35AB)
BIT 7,A
LD A,090H
LD IY,0A2EDH
JR NZ,L3791 ; (+006H)
LD A,0B4H
LD IY,0A3EDH
L3791: LD (L37A8),IY
CALL L36D1
RET C
L3799: LD B,E
PUSH DE
LD DE,0FE7CH
L379E: IN A,(0D8H)
OR E
CP D
JR Z,L379E ; (-006H)
CP LSFC
JR NZ,L37AD ; (+005H)
L37A8: NOP
NOP
JP NZ,L379E
L37AD: POP DE
IN A,(0D8H)
RRA
JP C,L385A
LD A,(L35B4)
INC A
LD (L35B4),A
CP 011H
JR Z,L37C4 ; (+005H)
DEC D
JR NZ,L3799 ; (-029H)
JR L37C5 ; (+001H)
L37C4: DEC D
L37C5: CALL L36AE
EI
IN A,(0D8H)
CPL
OR A
JR NZ,L37E1 ; (+012H)
LD A,(L35AB)
OR A
CALL Z,L3830
JR C,L37E1 ; (+009H)
CALL L3818
LD A,D
OR A
JR NZ,L3774 ; (-06bH)
XOR A
RET
L37E1: CALL L380B
RET C
JR L3774 ; (-073H)
L37E7: CALL IOOUT
LD A,(L35B5)
BIT 5,A
RET Z
L37F0: LD A,(HL)
CPL
LD (HL),A
INC HL
DEC DE
LD A,D
OR E
JR NZ,L37F0 ; (-009H)
RET
L37FA: LD HL,(L35AD)
LD (L35B3),HL
LD HL,(L35B1)
LD A,(L35B0)
LD D,A
LD C,0DBH
OR A
RET
L380B: CALL SKPDE
LD HL,L35BF
DEC (HL)
JP Z,L385A
JP L3695
L3818: LD (L35B1),HL
LD A,D
LD (L35B0),A
LD HL,(L35B3)
LD A,H
CP 011H
RET NZ
LD H,001H
INC L
LD (L35AD),HL
LD (L35B3),HL
RET
L3830: LD A,(035AEH)
CPL
OUT (0DAH),A
LD A,090H
CALL L36D1
RET C
LD A,(L35B4)
LD B,A
L3840: IN A,(0D8H)
CPL
AND 081H
CP 001H
JR NZ,L3852 ; (+009H)
IN A,(0DAH)
CPL
CP B
JR NZ,L3840 ; (-00fH)
CALL L36AE
L3852: IN A,(0D8H)
CPL
AND 099H
RET Z
SCF
RET
L385A: LD A,(L35B6)
RLA
IN A,(0D8H)
CPL
JR NC,L3878 ; (+015H)
RLA
JR C,L387B ; (+015H)
RLA
JR NC,L3870 ; (+007H)
LD HL,L35AB
BIT 7,(HL)
JR Z,L387F ; (+00fH)
L3870: AND 0C0H
JR NZ,L3883 ; (+00fH)
L3874: LD A,029H
SCF
RET
L3878: RLA
JR NC,L3874 ; (-007H)
L387B: LD A,032H
SCF
RET
L387F: LD A,02EH
SCF
RET
L3883: LD A,036H
SCF
RET
L3887: PUSH DE
LD DE,L000F
JR L3891 ; (+004H)
L388D: PUSH DE
LD DE,L2026
L3891: DEC DE
LD A,E
OR D
JR NZ,L3891 ; (-005H)
POP DE
RET
L3898: PUSH BC
LD B,011H
L389B: CALL L388D
DJNZ L389B ; (-005H)
POP BC
RET
; ---------------------------------------------------------------------------
; $QD Device Descriptor (Quick Disk)
; ---------------------------------------------------------------------------
$QD:
IF BUILD_RFS = 1
DW $RFS ; Next device = $RFS (RFS enhanced)
ELSE
DW $USR ; Next device = $USR (original)
ENDIF
DB "QD",000H,000H ; Device name
DB 05FH ; flags1: bit5=1 ZINP-based DIR, bit6=1 ZRO enum
DB 040H ; flags2
DB 020H ; dirmx: 32 (max directory entries)
DW QDINIT ; ZINIT handler
DW QDRO ; ZRO handler
DW QDWO ; ZWO handler
DW QDCL ; ZCL handler
DW 00400H ; ZKL (constant)
DW QDINP ; ZINP handler
DW QDOUT ; ZOUT handler
DW 00000H ; ZDELT (not supported)
DW 00000H ; ZWDIR (not supported)
DW QDFREE ; ZFREE handler
;
; ---------------------------------------------------------------------------
; QDFREE - Free space query (returns carry = not supported)
; ---------------------------------------------------------------------------
QDFREE: XOR A
SCF
RET
;
; ---------------------------------------------------------------------------
; QDINIT - Quick Disk initialization
; ---------------------------------------------------------------------------
QDINIT: RET C
CALL TEST1
DB 059H ; Test for 'Y'
JR Z,L38D0 ; (+007H)
OR A
JP NZ,L1F6A
CALL L1E7A
L38D0: CALL L3924
RET C
RST 018H
DB 010H
LD C,002H
JR L3919 ; (+03fH)
;
; ---------------------------------------------------------------------------
; QDCL - Quick Disk close
; ---------------------------------------------------------------------------
QDCL: OR A
JR NZ,L38FA ; (+01dH)
RST 018H
DB 010H
XOR A
LD (L395E),A
LD C,005H
CALL L38EB
LD BC,00001H
L38EB: LD (L3954),HL
LD (03956H),DE
LD HL,L3953
LD (HL),B
DEC HL
LD (HL),C
JR L3968 ; (+06eH)
L38FA: CALL SKPDE
LD C,006H
JR L3919 ; (+018H)
;
; ---------------------------------------------------------------------------
; QDRO - Quick Disk read open (ZRO handler)
; ---------------------------------------------------------------------------
QDRO: LD BC,L0003
LD DE,00040H
CALL L38EB
RET NC
CP 028H
SCF
RET NZ
LD A,000H
RET
;
; ---------------------------------------------------------------------------
; QDINP - Quick Disk input (ZINP handler)
; ---------------------------------------------------------------------------
QDINP: RST 018H
DB 010H
LD D,B
LD E,C
LD BC,00103H
L3919: CALL L38EB
RST 018H
DB 011H
RET
;
; ---------------------------------------------------------------------------
; QDWO - Quick Disk write open (ZWO handler)
; ---------------------------------------------------------------------------
QDWO: LD A,037H
LD (L392C),A
L3924: LD BC,L0101
JR L38EB ; (-03eH)
;
; ---------------------------------------------------------------------------
; QDOUT - Quick Disk output (ZOUT handler)
; ---------------------------------------------------------------------------
QDOUT: PUSH AF
RST 018H
DB 010H
L392C: XOR A
JR NC,L3943 ; (+014H)
LD A,0AFH
LD (L392C),A
CALL L1C2B
LD (L3958),HL
LD HL,ELMD
LD DE,00040H
POP AF
JR L3949 ; (+006H)
L3943: LD (L3958),HL
POP AF
SET 0,A
L3949: LD (0395AH),BC
LD B,A
LD C,004H
JR L3919 ; (-039H)
DB 000H
L3953: DB 000H
L3954: DS 4, 000H
L3958: DS 4, 000H
L395C: DB 000H
L395D: DB 000H
L395E: DB 000H
L395F: DB 000H
L3960: DB 000H
L3961: DB 000H
L3962: DB 000H
L3963: DB 000H
L3964: DB 000H
L3965: DS 3, 000H
L3968: LD A,005H
LD (L3964),A
L396D: DI
CALL L39BC
EI
RET NC
PUSH AF
CP 028H
JR Z,L39BA ; (+042H)
CALL L3C37
LD A,(03952H)
CP 004H
JR NZ,L399F ; (+01dH)
LD A,(L3960)
OR A
JR Z,L399F ; (+017H)
XOR A
LD (L3960),A
LD A,(L3961)
PUSH HL
LD (03966H),SP
POP HL
DI
CALL L3BB7
EI
JR C,L39B4 ; (+018H)
CALL L3C37
L399F: POP AF
PUSH AF
CP 029H
JR NZ,L39B4 ; (+00fH)
LD HL,L3964
DEC (HL)
JR Z,L39B4 ; (+009H)
POP AF
LD A,(L395F)
LD (L395E),A
JR L396D ; (-047H)
L39B4: CALL L3B29
CALL L39D5
L39BA: POP AF
RET
L39BC: LD (03966H),SP
LD A,(03952H)
DEC A
JR Z,L39DC ; (+016H)
DEC A
JR Z,L39E2 ; (+019H)
DEC A
JR Z,L3A2C ; (+060H)
DEC A
JP Z,L3A9C
DEC A
JR Z,L39D5 ; (+002H)
JR L3A25 ; (+050H)
L39D5: PUSH AF
XOR A
LD (L395C),A
POP AF
RET
L39DC: LD A,(L3953)
JP L3B8B
L39E2: XOR A
CALL L3BB7
CALL L3CB5
LD BC,0EFFFH
LD A,0AAH
L39EE: CPL
LD D,A
CALL L3D2C
DEC BC
LD A,B
OR C
JR Z,L39FB ; (+003H)
LD A,D
JR L39EE ; (-00dH)
L39FB: CALL L3D02
CALL L3C37
CALL L3BEA
LD A,(L3962)
DEC A
JR NZ,L3A28 ; (+01eH)
CALL L3C4C
LD BC,0EFFFH
LD E,055H
L3A12: CP E
JR NZ,L3A28 ; (+013H)
DEC BC
LD A,B
OR C
JR Z,L3A22 ; (+008H)
LD A,E
CPL
LD E,A
CALL L3D42
JR L3A12 ; (-010H)
L3A22: CALL L3D14
L3A25: JP L3C37
L3A28: LD A,029H
SCF
RET
L3A2C: LD A,(L3963)
OR A
CALL Z,L3BEA
CALL L3A62
RET C
CALL L3D87
CALL L3D42
LD C,A
L3A3E: CALL L3D42
LD B,A
LD HL,(03956H)
SBC HL,BC
JP C,L3B33
LD HL,(L3954)
L3A4D: CALL L3D42
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,L3A4D ; (-00aH)
CALL L3D14
LD A,(L3953)
BIT 0,A
JR NZ,L3A25 ; (-03cH)
RET
L3A62: LD HL,L3962
DEC (HL)
JR Z,L3A98 ; (+030H)
CALL L3C4C
LD C,A
LD A,(L395C)
LD HL,L395D
CP (HL)
JR NZ,L3A95 ; (+020H)
INC A
LD (L395C),A
LD (HL),A
LD A,(L3953)
XOR C
RRA
RET NC
L3A80: CALL L3D42
LD C,A
CALL L3D42
LD B,A
L3A88: CALL L3D42
DEC BC
LD A,B
OR C
JR NZ,L3A88 ; (-008H)
CALL L3D14
JR L3A62 ; (-033H)
L3A95: INC (HL)
JR L3A80 ; (-018H)
L3A98: LD A,028H
SCF
RET
L3A9C: LD A,(L395E)
LD (L395F),A
LD A,(L3963)
OR A
JR NZ,L3ABF ; (+017H)
CALL L3BEA
LD A,(L395E)
LD HL,L3962
ADD A,(HL)
LD (L3962),A
INC A
LD (L395C),A
CALL L3A62
JP NC,L3B33
L3ABF: LD A,(L3953)
LD B,A
AND 001H
JR NZ,L3AD3 ; (+00cH)
LD DE,L3954
LD A,B
RES 2,A
CALL L3B3C
CALL L3D87
L3AD3: LD DE,L3958
LD A,(L3953)
SET 0,A
CALL L3B3C
CALL L3C37
CALL L3D87
LD A,(L3953)
AND 004H
JR Z,L3B37 ; (+04cH)
LD A,(L3961)
LD HL,L395E
ADD A,(HL)
CALL L3BB7
LD A,001H
LD (L3960),A
L3AFA: LD A,(L3961)
LD HL,L395F
ADD A,(HL)
INC A
LD (L3962),A
INC A
LD (L395C),A
CALL L3A62
JR NC,L3B33 ; (+025H)
LD A,(L3953)
AND 001H
JR NZ,L3B1C ; (+007H)
LD DE,L3954
CALL L3B6A
RET C
L3B1C: LD DE,L3958
CALL L3B6A
RET C
LD A,(L3960)
OR A
JR Z,L3B30 ; (+007H)
L3B29: XOR A
LD (L395E),A
LD (L3960),A
L3B30: JP L3C37
L3B33: LD A,029H
SCF
RET
L3B37: CALL L3BEA
JR L3AFA ; (-042H)
L3B3C: PUSH AF
LD HL,L395E
INC (HL)
CALL L3CB5
POP AF
CALL L3D2C
CALL L3B60
LD A,C
CALL L3D2C
LD A,B
CALL L3D2C
L3B53: LD A,(HL)
CALL L3D2C
INC HL
DEC BC
LD A,B
OR C
JR NZ,L3B53 ; (-00aH)
JP L3D02
L3B60: EX DE,HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
RET
L3B6A: CALL L3C4C
CALL L3B60
CALL L3D42
CP C
JR NZ,L3B33 ; (-043H)
CALL L3D42
CP B
JR NZ,L3B33 ; (-049H)
L3B7C: CALL L3D42
CP (HL)
JR NZ,L3B33 ; (-04fH)
INC HL
DEC BC
LD A,B
OR C
JR NZ,L3B7C ; (-00cH)
JP L3D14
L3B8B: LD B,A
LD A,002H
OUT (0F7H),A
LD A,081H
OUT (0F7H),A
LD A,002H
OUT (0F7H),A
IN A,(0F7H)
AND 0F0H
CP 080H
JP NZ,03D58H
LD A,010H
OUT (0F6H),A
IN A,(0F6H)
LD C,A
AND 008H
JP Z,03D58H
LD A,B
OR A
RET Z
LD A,C
AND 020H
RET NZ
JP 03D55H
L3BB7: PUSH AF
LD HL,03D7EH
LD B,009H
CALL L3C27
L3BC0: LD A,010H
OUT (0F6H),A
IN A,(0F6H)
AND 008H
JP Z,03D58H
LD A,010H
OUT (0F7H),A
IN A,(0F7H)
AND 008H
JR Z,L3BC0 ; (-015H)
LD BC,L00E9
CALL L3D66
CALL L3CEA
CALL L3CCE
POP AF
CALL L3D2C
CALL L3D02
JR L3C1D ; (+033H)
L3BEA: LD HL,L3D73
LD B,00BH
CALL L3C27
L3BF2: LD A,010H
OUT (0F6H),A
IN A,(0F6H)
AND 008H
JP Z,03D58H
CALL L3D87
LD A,010H
OUT (0F7H),A
IN A,(0F7H)
AND 008H
JR Z,L3BF2 ; (-018H)
LD BC,L00E9
CALL L3D66
CALL L3C62
LD (L3961),A
INC A
LD (L3962),A
CALL L3D14
L3C1D: LD HL,L3965
SET 3,(HL)
XOR A
LD (L395D),A
RET
L3C27: LD C,0F6H
OTIR
LD A,005H
LD (L3963),A
OUT (0F7H),A
LD A,080H
OUT (0F7H),A
RET
L3C37: PUSH AF
LD A,005H
OUT (0F6H),A
LD A,060H
OUT (0F6H),A
LD A,005H
OUT (0F7H),A
XOR A
LD (L3963),A
OUT (0F7H),A
POP AF
RET
L3C4C: LD A,058H
LD B,00BH
LD HL,L3D73
CALL L3CF3
LD HL,L3965
BIT 3,(HL)
LD BC,L0003
JR Z,L3C65 ; (+005H)
RES 3,(HL)
L3C62: LD BC,L00A0
L3C65: CALL L3D66
LD A,005H
OUT (0F7H),A
LD A,082H
OUT (0F7H),A
LD A,003H
OUT (0F6H),A
LD A,LSD3
OUT (0F6H),A
LD BC,L2CC0
L3C7B: LD A,010H
OUT (0F6H),A
IN A,(0F6H)
AND 010H
JR Z,L3C8D ; (+008H)
DEC BC
LD A,B
OR C
JR NZ,L3C7B ; (-00fH)
JP 03D5EH
L3C8D: LD A,003H
OUT (0F6H),A
LD A,0C3H
OUT (0F6H),A
LD B,09FH
L3C97: LD A,010H
OUT (0F6H),A
IN A,(0F6H)
AND 001H
JR NZ,L3CA7 ; (+006H)
DEC B
JR NZ,L3C97 ; (-00dH)
JP 03D5EH
L3CA7: LD A,003H
OUT (0F6H),A
LD A,0C9H
OUT (0F6H),A
CALL L3D42
JP L3D42
L3CB5: LD A,098H
LD B,009H
LD HL,03D7EH
CALL L3CF3
CALL L3CEA
LD HL,L3965
BIT 3,(HL)
LD BC,0001DH
JR Z,L3CD1 ; (+005H)
RES 3,(HL)
L3CCE: LD BC,L0140
L3CD1: CALL L3D66
LD A,005H
OUT (0F6H),A
LD A,0EFH
OUT (0F6H),A
LD BC,00001H
CALL L3D66
LD A,0C0H
OUT (0F6H),A
LD A,0A5H
JR L3D2C ; (+042H)
L3CEA: LD A,005H
OUT (0F6H),A
LD A,0FFH
OUT (0F6H),A
RET
L3CF3: LD C,0F6H
OUT (C),A
LD A,005H
OUT (0F7H),A
L3CFB: LD A,080H
OUT (0F7H),A
OTIR
RET
L3D02: LD BC,00001H
CALL L3D66
LD A,010H
OUT (0F7H),A
IN A,(0F7H)
AND 008H
RET NZ
JP 03D5BH
L3D14: LD B,003H
L3D16: CALL L3D42
DJNZ L3D16 ; (-005H)
L3D1B: IN A,(0F6H)
RRCA
JR NC,L3D1B ; (-005H)
LD A,001H
OUT (0F6H),A
IN A,(0F6H)
AND 040H
JR NZ,L3D52 ; (+028H)
OR A
RET
L3D2C: PUSH AF
L3D2D: IN A,(0F6H)
AND 004H
JR Z,L3D2D ; (-006H)
POP AF
OUT (QDPC),A
L3D36: LD A,010H
OUT (0F6H),A
IN A,(0F6H)
AND 008H
JP Z,03D58H
RET
L3D42: CALL L3D36
IN A,(0F6H)
RLCA
JR C,L3D52 ; (+008H)
RRCA
RRCA
JR NC,L3D42 ; (-00cH)
IN A,(QDPC)
OR A
RET
L3D52: LD A,029H
LD HL,02E3EH
LD HL,0323EH
LD HL,L353E
LD HL,0363EH
LD SP,(03966H)
SCF
RET
L3D66: PUSH AF
L3D67: LD A,096H
L3D69: DEC A
JR NZ,L3D69 ; (-003H)
DEC BC
LD A,B
OR C
JR NZ,L3D67 ; (-00aH)
POP AF
RET
L3D73: LD E,B
INC B
DJNZ L3D7C ; (+005H)
INC B
INC BC
RET NC
LD B,016H
L3D7C: RLCA
LD D,098H
INC B
DJNZ 03D88H ; (+006H)
LD D,007H
LD D,005H
LD L,L
L3D87: LD A,0E8H
OUT (LSE3),A
LD (MMIO),A
NOP
LD A,(0E001H)
OUT (LSE1),A
AND 081H
RET NZ
CALL L3B29
JP L017B
PUSH HL
LD DE,(00188H)
PUSH DE
LD DE,L3DE4
LD (00188H),DE
LD A,(L004F)
PUSH AF
LD A,064H
LD (L004F),A
LD (03E5BH),SP
XOR A
LD (FILOUT),A
L3DBB: LD SP,L0000
L3DBE: LD BC,L3DBE
PUSH BC
RST 018H
DB 002H
LD A,02AH
RST 018H
DB 003H
L3DC8: CALL L3E67
JR NC,L3DC8 ; (-005H)
LD A,(DE)
CP 02AH
RET NZ
INC DE
LD A,(DE)
INC DE
EXX
LD HL,L3DF6
LD B,00AH
L3DDA: CP (HL)
INC HL
JR Z,L3DF0 ; (+012H)
INC HL
INC HL
DJNZ L3DDA ; (-008H)
EXX
RET
L3DE4: LD C,A
AND 07FH
JR Z,L3DBB ; (-02eH)
LD A,C
RST 018H
DB 01BH
RST 018H
DB 043H
JR L3DBB ; (-035H)
L3DF0: LD E,(HL)
INC HL
LD D,(HL)
PUSH DE
EXX
RET
L3DF6: LD B,H
CALL C,L4D3E
LD C,(HL)
CCF
LD D,B
INC D
LD A,047H
RST 010H
LD A,046H
LD (HL),D
CCF
LD D,D
L3E06: LD E,D
LD A,053H
DEC E
LD A,04CH
INC (HL)
LD A,056H
LD D,C
LD A,054H
JP NZ,03A3FH
SUB C
DJNZ L3E06 ; (-012H)
LD BC,09132H
DJNZ 03DE6H ; (-037H)
CALL L3FAB
RET C
EXX
CALL L3FD9
EXX
LD (ELMD20),BC
LD (ELMD22),DE
LD (ELMD24),HL
RST 018H
DB 031H
RET
CALL L3E88
PUSH HL
PUSH AF
CALL L3E46
POP AF
POP HL
JR NC,L3E43 ; (+003H)
LD HL,(ELMD22)
L3E43: RST 018H
DB 030H
RET
L3E46: CALL L3FD9
RST 018H
DB 02FH
CP 001H
RET Z
JP 01F9DH
CALL L3E46
LD HL,(ELMD22)
RST 018H
DB 032H
RET
LD SP,L0000
POP AF
LD (L004F),A
POP HL
LD (00188H),HL
POP HL
RET
L3E67: LD DE,0FF00H
RST 018H
DB 00CH
JR C,L3E86 ; (+018H)
LD A,(DE)
CP 03AH
SCF
RET NZ
INC DE
CALL L3E88
RET C
LD A,(DE)
INC DE
XOR 03DH
RET NZ
L3E7D: CALL L3EAD
CCF
RET NC
LD (HL),A
INC HL
JR L3E7D ; (-009H)
L3E86: LD (DE),A
RET
L3E88: PUSH HL
CALL L3EA2
PUSH DE
CALL L3EB4
JR C,L3E9D ; (+00bH)
LD H,A
CALL L3EB4
JR C,L3E9D ; (+005H)
LD L,A
POP AF
POP AF
XOR A
RET
L3E9D: POP DE
POP HL
SCF
RET
L3EA1: INC DE
L3EA2: LD A,(DE)
CP 020H
JR Z,L3EA1 ; (-006H)
RET
L3EA8: LD A,(DE)
RST 018H
DB 015H
INC DE
RET
L3EAD: CALL L3EA2
CP 03BH
JR Z,L3ED2 ; (+01eH)
L3EB4: PUSH BC
PUSH DE
CALL L3EA8
JR C,L3ECE ; (+013H)
LD C,A
CALL L3EA8
JR C,L3ECE ; (+00dH)
LD B,A
LD A,C
RLCA
RLCA
RLCA
RLCA
ADD A,B
LD C,A
LD A,C
POP BC
POP BC
OR A
RET
L3ECE: POP DE
POP BC
SCF
RET
L3ED2: INC DE
LD A,(DE)
INC DE
OR A
RET
CALL L3E88
RET C
JP (HL)
CALL L3E88
JR C,L3EEC ; (+00bH)
PUSH HL
CALL L3E88
JR C,L3EEB ; (+004H)
POP DE
EX DE,HL
JR L3EF2 ; (+007H)
L3EEB: POP HL
L3EEC: EX DE,HL
LD HL,L0080
ADD HL,DE
EX DE,HL
L3EF2: LD C,008H
CALL L3EFF
RET C
PUSH HL
SBC HL,DE
POP HL
RET NC
JR L3EF2 ; (-00dH)
L3EFF: CALL L3F27
LD B,C
PUSH HL
L3F04: LD A,(HL)
CALL L3F38
INC HL
LD A,020H
RST 018H
DB 009H
DJNZ L3F04 ; (-00bH)
POP HL
LD A,02FH
RST 018H
DB 009H
LD B,C
L3F15: LD A,(HL)
CP 020H
JR NC,L3F1C ; (+002H)
LD A,02EH
L3F1C: RST 018H
DB 009H
INC HL
DJNZ L3F15 ; (-00cH)
RST 018H
DB 008H
RST 018H
DB 00FH
OR A
RET
L3F27: LD A,03AH
RST 018H
DB 009H
LD A,H
CALL L3F38
LD A,L
CALL L3F38
LD A,03DH
RST 018H
DB 009H
RET
L3F38: PUSH AF
RLCA
RLCA
RLCA
RLCA
CALL L3F41
POP AF
L3F41: AND 00FH
ADD A,030H
CP 03AH
JR C,L3F4B ; (+002H)
ADD A,007H
L3F4B: RST 018H
DB 009H
RET
CALL L3E88
LD A,(FILOUT)
PUSH AF
XOR A
LD (FILOUT),A
L3F59: RST 018H
DB 002H
CALL L3F27
LD A,(HL)
CALL L3F38
LD A,014H
RST 018H
DB 003H
RST 018H
DB 003H
CALL L3E67
JR NC,L3F59 ; (-014H)
POP AF
LD (FILOUT),A
RET
CALL L3E88
RET C
PUSH HL
CALL L3E88
POP BC
RET C
PUSH HL
PUSH BC
LD HL,0FF00H
CALL L3E7D
LD DE,0FF00H
OR A
SBC HL,DE
LD C,L
POP HL
PUSH HL
EXX
POP HL
POP DE
EXX
RET Z
L3F92: CALL L3FEC
JR NZ,L3F9B ; (+004H)
CALL L3EFF
RET C
L3F9B: RST 018H
DB 00EH
RET Z
EXX
INC HL
PUSH HL
SCF
SBC HL,DE
POP HL
RET NC
PUSH HL
EXX
POP HL
JR L3F92 ; (-019H)
L3FAB: CALL L3E88
PUSH HL
CALL NC,L3E88
POP BC
RET C
SBC HL,BC
INC HL
PUSH HL
PUSH BC
CALL L3E88
PUSH HL
EXX
POP HL
POP DE
POP BC
RET
CALL L3FAB
RET C
EX DE,HL
PUSH HL
SBC HL,DE
POP HL
JR C,L3FD0 ; (+003H)
LDIR
RET
L3FD0: ADD HL,BC
DEC HL
EX DE,HL
ADD HL,BC
DEC HL
EX DE,HL
LDDR
RET
L3FD9: LD A,(DE)
OR A
JR Z,L3FE2 ; (+005H)
INC DE
CP 03AH
JR NZ,L3FD9 ; (-009H)
L3FE2: RST 018H
DB 017H
RST 018H
DB 02DH
LD A,001H
LD (ELMD),A
RET
L3FEC: LD A,(DE)
CP (HL)
RET NZ
PUSH BC
PUSH DE
PUSH HL
LD B,C
L3FF3: LD A,(DE)
CP (HL)
JR NZ,L3FFC ; (+005H)
INC DE
INC HL
DJNZ L3FF3 ; (-008H)
XOR A
L3FFC: POP HL
POP DE
POP BC
RET
L4000:
IF BUILD_RFS = 1
LD HL,RFS_END ; TEXTST: moved past RFS module
ELSE
LD HL,085FFH ; TEXTST: original end of BASIC code
ENDIF
LD (TEXTST),HL
LD HL,L4046
LD (000E3H),HL
LD A,B
OR A
JR Z,L401B ; (+00bH)
LD HL,L4036
LD DE,L1361
LD BC,00010H
LDIR
L401B: LD DE,L84E7
RST 018H
DB 005H
IF BUILD_RFS = 1
JP MEMCLI_PATCH ; MEMCLI: call SVC 020H then set HL=RFS_END
ELSE
RST 018H ; Original: SVC 020H (boot beep + EI)
DB 020H
EX DE,HL ; HL = DE (original TEXTST)
ENDIF
L4023: LD (HL),000H
INC HL
LD A,H
CP 0FFH
JR C,L4023 ; (-008H)
L402B: CALL L4902
CALL L4914
CALL L5E1D
JR L404A ; (+014H)
; ---------------------------------------------------------------------------
; Auto-run command string (16 bytes, copied into F-key slot at startup)
; L403E overlaps: referenced as "TO RUN"\r (suffix of "AUTO RUN"\r)
; ---------------------------------------------------------------------------
L4036: DB 00FH,"RUN ",022H ; Length (15) + 'RUN "'
L403E: DB "AUTO RUN",022H,00DH ; 'AUTO RUN"\r' (also read as 'TO RUN"\r' via L403E+2)
; ---------------------------------------------------------------------------
; Hook snippet installed at 0x00E3 — executed in-place as Z80 code
; ---------------------------------------------------------------------------
L4046: LD A,016H ; 3E 16
RST 018H ; DF
DB 003H ; SVC #3
L404A: LD HL,L4B85
LD (00188H),HL
L4050: RST 018H
DB 002H
LD DE,L4B72
RST 018H
DB 005H
RST 018H
DB 001H
L4059: LD A,(L4B78)
OR A
JR NZ,L406B ; (+00cH)
LD SP,(INTFAC)
LD HL,0FFFFH
PUSH HL
LD (08496H),SP
L406B: LD HL,L0000
LD (L8483),HL
XOR A
LD (L0050),A
CALL L48B1
RST 018H
DB 043H
LD DE,KEYBUF
RST 018H
DB 00CH
JR NC,L408D ; (+00cH)
L4081: LD HL,L48B0
LD A,(HL)
OR A
LD (HL),000H
JR NZ,L4050 ; (-03aH)
JR L4059 ; (-033H)
L408C: INC DE
L408D: LD A,(DE)
CP 020H
JR Z,L408C ; (-006H)
OR A
JR Z,L4059 ; (-03cH)
CALL L5EC4
JP NC,L473E
LD HL,L84E7
PUSH HL
CALL L66EF
INC HL
LD (L847D),HL
CALL L4952
POP HL
JR L40AF ; (+003H)
L40AC: CALL 05E48H
L40AF: LD (08496H),SP
L40B3: LD DE,L40AC
PUSH DE
L40B7: LD (L8498),HL
CALL BRKCHK
JP Z,0017DH
L40C0: LD A,(HL)
INC HL
CP 080H
JR NC,L411A ; (+054H)
CP 027H
JP Z,L4F8A
CP 020H
JR Z,L40C0 ; (-00fH)
CP 03AH
JR Z,L40B7 ; (-01cH)
OR A
JR Z,L40E1 ; (+00bH)
DEC HL
SUB 041H
CP 01AH
JP C,L4C99
JP L4AEC
L40E1: LD HL,(L847D)
L40E4: LD E,(HL)
INC HL
LD D,(HL)
LD A,D
OR E
JR Z,L4103 ; (+018H)
LD (L0050),A
EX DE,HL
ADD HL,DE
DEC HL
LD (L847D),HL
EX DE,HL
INC HL
CALL LDDEMI
LD (08483H),DE
CALL L4971
POP DE
JR L40AF ; (-054H)
L4103: POP HL
CALL L4146
JP Z,L4050
XOR A
LD (L4B78),A
LD A,(L8486)
CP 002H
JP Z,04B19H
PUSH HL
JP L484D
L411A: CP 0FFH
JP Z,L4CCB
LD DE,L44AC
CP 0FEH
JR NZ,L412A ; (+004H)
LD A,(HL)
INC HL
JR L4132 ; (+008H)
L412A: CP LSE0
JP NC,L4AEC
LD DE,L43EC
L4132: ADD A,A
PUSH HL
EX DE,HL
LD E,A
LD D,000H
ADD HL,DE
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
EX (SP),HL
L413E: CALL HLFTCH
L4141: OR A
RET Z
CP 03AH
RET
L4146: PUSH HL
LD HL,(L8483)
LD A,L
OR H
POP HL
RET
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
STMTWORDTBL:DB "GOT", "O" | 080H ; BASIC statement keyword text table
DB "GOSU", "B" | 080H
DB 080H
DB "RU", "N" | 080H
DB "RETUR", "N" | 080H
DB "RESTOR", "E" | 080H
DB "RESUM", "E" | 080H
DB "LIS", "T" | 080H
DB 080H
DB "DELET", "E" | 080H
DB "RENU", "M" | 080H
DB "AUT", "O" | 080H
DB "EDI", "T" | 080H
L4193: DB "FO", "R" | 080H
DB "NEX", "T" | 080H
DB "PRIN", "T" | 080H
DB 080H
DB "INPU", "T" | 080H
DB 080H
DB "I", "F" | 080H
DB "DAT", "A" | 080H
DB "REA", "D" | 080H
DB "DI", "M" | 080H
DB "RE", "M" | 080H
DB "EN", "D" | 080H
DB "STO", "P" | 080H
DB "CON", "T" | 080H
DB "CL", "S" | 080H
DB 080H
DB "O", "N" | 080H
DB "LE", "T" | 080H
DB "NE", "W" | 080H
DB "POK", "E" | 080H
DB "OF", "F" | 080H
DB "MOD", "E" | 080H
DB "SKI", "P" | 080H
DB "PLO", "T" | 080H
DB "LIN", "E" | 080H
DB "RLIN", "E" | 080H
DB "MOV", "E" | 080H
DB "RMOV", "E" | 080H
DB "TRO", "N" | 080H
DB "TROF", "F" | 080H
DB "INP", "@" | 080H
DB "DEFAUL", "T" | 080H
DB "GE", "T" | 080H
DB "PCOLO", "R" | 080H
DB "PHOM", "E" | 080H
DB "HSE", "T" | 080H
DB "GPRIN", "T" | 080H
DB "KE", "Y" | 080H
DB "AXI", "S" | 080H
DB "LOA", "D" | 080H
DB "SAV", "E" | 080H
DB "MERG", "E" | 080H
DB "CHAI", "N" | 080H
DB "CONSOL", "E" | 080H
DB "SEARC", "H" | 080H
DB "OUT", "@" | 080H
DB "CIRCL", "E" | 080H
DB "TES", "T" | 080H
DB "PAG", "E" | 080H
DB "WAI", "T" | 080H
DB "SWA", "P" | 080H
DB 080H
DB "ERRO", "R" | 080H
DB "ELS", "E" | 080H
DB "US", "R" | 080H
DB "BY", "E" | 080H
DB 080H
DB 080H
DB "DE", "F" | 080H
DB 080H
DB 080H
DB "LABE", "L" | 080H
DB 080H
DB 080H
DB 080H
DB "WOPE", "N" | 080H
DB "CLOS", "E" | 080H
DB "ROPE", "N" | 080H
DB "XOPE", "N" | 080H
DB 080H
DB 080H
DB 080H
DB "DI", "R" | 080H
DB 080H
DB 080H
DB "RENAM", "E" | 080H
DB "KIL", "L" | 080H
DB "LOC", "K" | 080H
DB "UNLOC", "K" | 080H
DB "INI", "T" | 080H
DB 080H
DB 080H
DB "RMO", "V" | 080H
DB "T", "O" | 080H
DB "STE", "P" | 080H
DB "THE", "N" | 080H
DB "USIN", "G" | 080H
DB 080H
DB 080H
DB "TA", "B" | 080H
DB "SP", "C" | 080H
DB 080H
DB 080H
DB ".XO", "R" | 080H
DB ".O", "R" | 080H
DB ".AN", "D" | 080H
DB ".NO", "T" | 080H
DB ">", "<" | 080H
DB "<", ">" | 080H
DB "=", "<" | 080H
DB "<", "=" | 080H
DB "=", ">" | 080H
DB ">", "=" | 080H
DB "=" | 080H
DB ">" | 080H
DB "<" | 080H
DB "+" | 080H
DB "-" | 080H
DB 080H
DB 080H
DB "/" | 080H
DB "*" | 080H
DB "^" | 080H
DB 0FFH
EXTWORDTBL: DB 080H ; BASIC extended keyword text table
DB "SE", "T" | 080H
DB "RESE", "T" | 080H
DB "COLO", "R" | 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB "BEE", "P" | 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB "MUSI", "C" | 080H
DB "TEMP", "O" | 080H
DB "CURSO", "R" | 080H
DB "VERIF", "Y" | 080H
DB "CL", "R" | 080H
L433E: DB "LIMI", "T" | 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB "BOO", "T" | 080H
DB 0FFH
FUNCWORDTBL:DB "IN", "T" | 080H ; BASIC function keyword text table
DB "AB", "S" | 080H
DB "SI", "N" | 080H
DB "CO", "S" | 080H
DB "TA", "N" | 080H
DB "L", "N" | 080H
DB "EX", "P" | 080H
DB "SQ", "R" | 080H
DB "RN", "D" | 080H
DB "PEE", "K" | 080H
DB "AT", "N" | 080H
DB "SG", "N" | 080H
DB "LO", "G" | 080H
DB "FRA", "C" | 080H
DB "PA", "I" | 080H
DB "RA", "D" | 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB "JO", "Y" | 080H
DB 080H
DB "CHR", "$" | 080H
DB "STR", "$" | 080H
DB "HEX", "$" | 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB "SPACE", "$" | 080H
DB 080H
DB 080H
DB "AS", "C" | 080H
DB "LE", "N" | 080H
DB "VA", "L" | 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB "ER", "N" | 080H
DB "ER", "L" | 080H
DB "SIZ", "E" | 080H
DB "CSR", "H" | 080H
DB "CSR", "V" | 080H
DB 080H
DB 080H
DB "LEFT", "$" | 080H
DB "RIGHT", "$" | 080H
DB "MID", "$" | 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB 080H
DB "TI", "$" | 080H
DB 080H
DB "EO", "F" | 080H
DB "F", "N" | 080H
DB 0FFH
L43EC: DW L5147 ; Keyword dispatch address table
DW L50C2
DW L4AEC
DW L47FF
DW L5091
DW L5828
DW L4C38
DW 052C2H
DW L4AEC
DW L4999
DW L4A38
DW L485E
DW L48B9
DW L4D8E
DW L4E25
DW L561E
DW L4AEC
DW L575B
DW L4AEC
DW L515A
DW L4F8A
DW L5754
DW L76AC
DW L4F8A
DW L484D
DW L4BEA
DW L4C1B
DW L5537
DW L4AEC
DW L50EA
DW L4C99
DW L4922
DW L5024
DW L4AEC
DW L6A24
DW L6A87
DW L6E22
DW L6AD4
DW 06AD7H
DW 06ADAH
DW 06ADDH
DW L4959
DW L496C
DW L4FAB
DW L58CA
DW L4FEF
DW L6B3F
DW L6B71
DW L6B7B
DW L6B85
DW L53A9
DW L6BEA
DW L5986
DW L5C88
DW L59EA
DW L59D5
DW L5260
DW L52C0
DW L4F96
DW L6C2A
DW L6DF8
DW L6E03
DW L4F7A
DW L5D65
DW L4AEC
DW L4B7A
DW L517C
DW L4F30
DW L5258
DW L4AEC
DW L4AEC
DW L5456
DW L4AEC
DW L4AEC
DW L4F8A
DW L4AEC
DW L4AEC
DW L4AEC
DW 058E2H
DW L5913
DW L58DF
DW 058E5H
DW L4AEC
DW L4AEC
DW L4AEC
DW L5CE3
DW L4AEC
DW L4AEC
DW L5D0A
DW 05914H
DW 05CD7H
DW L5CD5
DW L58D0
DW L4AEC
DW L4AEC
DW L4AEC
L44AC: DW L4AEC
DW L51EE
DW 051EFH
DW L54A6
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L5255
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L54FD
DW L551F
DW L4FC7
DW L5C71
DW L4928
DW L504D
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L52BA
L450A: DW L7E8B
DW L7E86
DW L7FD2
DW L7FC2
DW L80B1
DW L8320
DW L81FC
DW L7EE8
DW L81B7
DW L81A3
DW L7F06
DW L8169
DW L8314
DW L608D
DW L8181
DW L817C
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L792C
DW L4AEC
DW L4AEC
DW L7237
DW L71F6
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L7219
DW L4AEC
DW L4AEC
DW L7272
DW L727C
DW L7284
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L7180
DW L718E
DW L7164
DW L7176
DW L717B
DW L4AEC
DW L4AEC
DW L7296
DW L72B3
DW L72D0
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L7326
DW L4AEC
DW L7245
DW L789F
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
DW L4AEC
L45AA: CALL TEST1
DB 00CH
JR NZ,L45B6 ; (+006H)
CALL LDDEMI
OR 0FFH
RET
L45B6: INC HL
CP 00BH
JR NZ,L45DA ; (+01fH)
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD A,E
OR D
RET Z
EX DE,HL
CALL L4609
JP C,04B0DH
EX DE,HL
DEC HL
LD (HL),D
DEC HL
LD (HL),E
DEC HL
LD (HL),00CH
INC HL
INC HL
INC HL
OR 0FFH
LD (L473D),A
RET
L45DA: CP 022H
JP NZ,L4AEC
LD (04650H),HL
LD B,000H
L45E4: LD A,(HL)
OR A
JR Z,L45F0 ; (+008H)
INC HL
CP 022H
JR Z,L45F0 ; (+003H)
INC B
JR L45E4 ; (-00cH)
L45F0: LD A,B
OR A
JP Z,L4AEC
LD (0464EH),A
EX DE,HL
CALL L4603
JP C,04B0DH
EX DE,HL
OR 0FFH
RET
L4603: PUSH BC
LD BC,L463C
JR L460D ; (+004H)
L4609: PUSH BC
LD BC,L4630
L460D: LD (04623H),BC
PUSH DE
EX DE,HL
LD HL,(TEXTST)
L4616: LD C,(HL)
INC HL
LD B,(HL)
LD A,B
OR C
SCF
JR Z,L462D ; (+00fH)
DEC HL
PUSH HL
ADD HL,BC
EX (SP),HL
CALL L0000
JR C,L462C ; (+005H)
JR Z,L462C ; (+003H)
POP HL
JR L4616 ; (-016H)
L462C: POP DE
L462D: POP DE
POP BC
RET
L4630: INC HL
INC HL
INC HL
LD A,D
CP (HL)
RET NZ
DEC HL
LD A,E
CP (HL)
DEC HL
DEC HL
RET
L463C: PUSH HL
INC HL
INC HL
INC HL
INC HL
CALL TEST1
DB 0CAH
JR NZ,L4660 ; (+019H)
CALL TEST1
DB 022H
JR NZ,L4660 ; (+013H)
LD B,000H
LD DE,L0000
L4652: LD A,(DE)
CP (HL)
JR NZ,L4660 ; (+00aH)
INC HL
INC DE
DJNZ L4652 ; (-008H)
LD A,(HL)
CP 022H
JR Z,L4660 ; (+001H)
OR A
L4660: SCF
CCF
POP HL
RET
L4664: LD DE,L0000
LD BC,0FFFFH
CALL L46A6
RET Z
CP 02DH
JR Z,L468E ; (+01cH)
CP 02EH
LD DE,(0847FH)
JR Z,L4681 ; (+007H)
CALL TESTX
DB 00BH
LD E,(HL)
INC HL
LD D,(HL)
L4681: INC HL
CALL L46A6
JR Z,L468B ; (+004H)
CP 02DH
JR Z,L468E ; (+003H)
L468B: LD C,E
LD B,D
RET
L468E: INC HL
CALL L46A6
RET Z
CP 02EH
JR NZ,L469D ; (+006H)
LD BC,(0847FH)
INC HL
RET
L469D: CALL TESTX
DB 00BH
LD C,(HL)
INC HL
LD B,(HL)
INC HL
RET
L46A6: CALL L413E
RET Z
CP 02CH
RET
L46AD: CALL SKPDE
LD A,0FFH
LD (L473D),A
LD HL,L4703
JR L46CC ; (+012H)
L46BA: CALL SKPDE
CALL L4836
L46C0: LD A,(L473D)
OR A
RET Z
XOR A
LD (L473D),A
LD HL,L46E9
L46CC: LD (046E7H),HL
LD HL,(TEXTST)
DEC HL
L46D3: INC HL
LD A,(HL)
INC HL
OR (HL)
RET Z
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD (04732H),DE
L46E0: CALL L51A2
OR A
JR Z,L46D3 ; (-013H)
JP L0000
L46E9: CP 00CH
JR NZ,L46E0 ; (-00dH)
DEC HL
LD E,(HL)
INC HL
LD D,(HL)
PUSH HL
EX DE,HL
INC HL
INC HL
LD E,(HL)
INC HL
LD D,(HL)
POP HL
LD (HL),D
DEC HL
LD (HL),E
DEC HL
LD (HL),00BH
INC HL
INC HL
JR L46E0 ; (-023H)
L4703: CP 00BH
JR NZ,L46E0 ; (-027H)
DEC HL
PUSH HL
CALL INDRCT
LD E,L
LD D,H
LD A,L
OR H
JR Z,L4739 ; (+027H)
CALL L4609
JR C,L4722 ; (+00bH)
EX DE,HL
POP HL
DEC HL
LD (HL),00CH
INC HL
LD (HL),E
INC HL
LD (HL),D
JR L46E0 ; (-042H)
L4722: PUSH DE
LD A,010H
RST 018H
DB 01BH
LD A,020H
RST 018H
DB 003H
POP HL
CALL L5E66
RST 018H
DB 005H
LD HL,L0000
CALL L4B58
RST 018H
DB 002H
L4739: POP HL
INC HL
JR L46E0 ; (-05dH)
L473D: NOP
L473E: RST 018H
DB 028H
CALL L46BA
CALL L6A11
LD A,B
OR C
JP Z,L4059
LD (0847FH),BC
LD A,(DE)
CP 020H
JR NZ,L4755 ; (+001H)
INC DE
L4755: PUSH AF
LD HL,L84E7
CALL L66EF
PUSH HL
LD HL,(L847F)
LD E,L
LD D,H
CALL L49B9
POP HL
POP AF
OR A
JR Z,L477C ; (+012H)
LD DE,L84E7
OR A
SBC HL,DE
LD DE,00005H
ADD HL,DE
LD B,H
LD C,L
LD HL,L84E7
CALL L4794
L477C: LD A,(L48B0)
OR A
JP Z,L4059
LD DE,(08481H)
LD HL,(L847F)
ADD HL,DE
LD (L847F),HL
JP NC,L4059
JP L4081
L4794: LD (047F6H),HL
PUSH BC
LD BC,(0847FH)
LD HL,(TEXTST)
JR L47A5 ; (+004H)
L47A1: CALL LDDEMD
ADD HL,DE
L47A5: CALL LDDEMD
LD A,D
OR E
JR Z,L47B9 ; (+00dH)
INC HL
INC HL
CALL LDDEMD
EX DE,HL
SBC HL,BC
DEC DE
DEC DE
EX DE,HL
JR C,L47A1 ; (-018H)
L47B9: POP DE
PUSH HL
PUSH DE
LD HL,00028H
ADD HL,DE
LD BC,(VARED)
LD (TMPEND),BC
ADD HL,BC
JP C,L4B2C
EX DE,HL
CALL L74E8
POP DE
RST 018H
DB 018H
POP HL
PUSH DE
PUSH BC
EX (SP),HL
POP BC
PUSH HL
OR A
SBC HL,BC
LD B,H
LD C,L
POP HL
LD DE,(VARED)
INC BC
LDDR
INC HL
POP BC
LD (HL),C
INC HL
LD (HL),B
INC HL
LD DE,(0847FH)
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
LD HL,L84E7
DEC BC
DEC BC
DEC BC
DEC BC
LDIR
RET
L47FF: JR Z,L480A ; (+009H)
CALL L5176
JP Z,L5147
JP L5AED
L480A: CALL L4928
L480D: CALL L4821
LD DE,(TEXTST)
LD SP,(INTFAC)
LD HL,0FFFFH
PUSH HL
PUSH HL
EX DE,HL
JP L40E4
L4821: PUSH HL
PUSH DE
CALL L4836
XOR A
LD (L48B0),A
LD HL,0000AH
LD (L847F),HL
LD (L8481),HL
POP DE
POP HL
RET
L4836: CALL L5825
LD HL,L0000
LD (L8487),HL
XOR A
LD (L4B78),A
LD (L8486),A
LD (L8485),A
LD (L849A),A
RET
L484D: LD A,(L849A)
OR A
JP NZ,L5DCB
RST 018H
DB 028H
XOR A
LD (L4B78),A
POP BC
JP L4050
L485E: CALL L5C08
LD DE,0000AH
LD BC,0000AH
JR Z,L4897 ; (+02eH)
CP 02CH
JR NZ,L4878 ; (+00bH)
INC HL
CALL L6E5F
LD B,D
LD C,E
LD DE,0000AH
JR L4897 ; (+01fH)
L4878: CP 02EH
LD DE,(0847FH)
JR Z,L4889 ; (+009H)
CP 00BH
JP NZ,L4AEC
INC HL
LD E,(HL)
INC HL
LD D,(HL)
L4889: INC HL
CALL TEST1
DB 02CH
JR NZ,L4897 ; (+007H)
PUSH DE
CALL L6E5F
LD C,E
LD B,D
POP DE
L4897: CALL 05E48H
LD A,C
OR B
JP Z,04AF2H
LD (0847FH),DE
LD (08481H),BC
LD A,001H
LD (L48B0),A
POP AF
JP L4059
L48B0: NOP
L48B1: LD A,(L48B0)
OR A
RET Z
XOR A
JR L48BF ; (+006H)
L48B9: CALL L48BF
JP L4059
L48BF: LD DE,(0847FH)
CALL NZ,L4664
PUSH DE
EX DE,HL
CALL L4609
POP DE
INC HL
INC HL
INC HL
INC HL
JR NC,L48D5 ; (+003H)
LD HL,L00F9
L48D5: EX DE,HL
PUSH DE
LD (L847F),HL
CALL L5E66
RST 018H
DB 005H
LD A,020H
RST 018H
DB 003H
POP HL
LD DE,KEYBUF
PUSH DE
CALL L68E0
POP DE
LD B,000H
L48EE: LD A,(DE)
OR A
JR Z,L48F8 ; (+006H)
INC B
RST 018H
DB 004H
INC DE
JR L48EE ; (-00aH)
L48F8: LD A,B
OR A
RET Z
LD A,014H
RST 018H
DB 003H
DJNZ 048FCH ; (-005H)
RET
L4902: PUSH DE
LD DE,0FFF0H
ADD HL,DE
POP DE
LD (MEMLMT),HL
DEC H
LD (INTFAC),HL
XOR A
LD (L849A),A
RET
L4914: LD HL,(TEXTST)
CALL L4952
LD (TEXTED),HL
CALL L4821
JR L4928 ; (+006H)
L4922: CALL L4914
JP L404A
L4928: PUSH HL
CALL L4939
POP HL
RST 018H
DB 028H
RET
L4930: LD HL,(TEXTST)
CALL L4952
LD (TEXTED),HL
L4939: LD HL,(TEXTED)
LD (HL),000H
INC HL
LD (VARST),HL
LD (HL),000H
INC HL
LD (STRST),HL
CALL L4952
LD (VARED),HL
LD (TMPEND),HL
RET
L4952: LD (HL),000H
INC HL
LD (HL),000H
INC HL
RET
L4959: CALL L413E
LD A,001H
JR Z,L496D ; (+00dH)
CALL TESTX
DB FDPD
CALL TESTX
DB 050H
LD A,002H
JR L496D ; (+001H)
L496C: XOR A
L496D: LD (04972H),A
RET
L4971: LD A,000H
OR A
RET Z
DEC A
LD (FILOUT),A
JR Z,L4982 ; (+007H)
LD A,(PNMODE)
CP 002H
JR Z,L4994 ; (+012H)
L4982: PUSH HL
LD A,05BH
RST 018H
DB 009H
LD HL,(L8483)
CALL L5E66
RST 018H
DB 00BH
LD A,05DH
RST 018H
DB 009H
POP HL
L4994: XOR A
LD (FILOUT),A
RET
L4999: CALL L46A6
JP Z,L4AEC
CALL L5176
JR Z,L49AD ; (+009H)
CP 02DH
JR Z,L49AD ; (+005H)
CP 02EH
JP NZ,L5D02
L49AD: CALL L4664
EX DE,HL
LD E,C
LD D,B
CALL L49B9
JP L4050
L49B9: PUSH AF
PUSH BC
PUSH HL
PUSH DE
CALL L46BA
LD C,L
LD B,H
LD HL,(TEXTST)
L49C5: CALL LDDEMI
LD A,E
OR D
JR NZ,L49D4 ; (+008H)
L49CC: POP DE
POP HL
POP BC
POP AF
RET
L49D1: POP DE
JR L49CC ; (-008H)
L49D4: EX DE,HL
ADD HL,DE
DEC HL
DEC HL
EX DE,HL
PUSH DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
LD (049EEH),HL
SBC HL,BC
POP HL
JR C,L49C5 ; (-021H)
DB 01BH
DEC DE
DEC DE
POP BC
PUSH BC
PUSH DE
PUSH HL
LD HL,L0000
SBC HL,BC
POP HL
JR Z,L4A13 ; (+01eH)
JR NC,L49D1 ; (-026H)
L49F7: CALL LDDEMI
LD A,D
OR E
JR Z,L4A11 ; (+013H)
EX DE,HL
ADD HL,DE
EX DE,HL
DEC DE
DEC DE
PUSH DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
SBC HL,BC
POP HL
JR C,L49F7 ; (-016H)
JR Z,L4A13 ; (+004H)
EX DE,HL
DEC HL
L4A11: DEC HL
DEC HL
L4A13: POP DE
PUSH DE
PUSH HL
OR A
EX DE,HL
SBC HL,DE
EX DE,HL
LD BC,(VARED)
RST 018H
DB 018H
POP DE
LD H,B
LD L,C
OR A
SBC HL,DE
LD B,H
LD C,L
EX DE,HL
POP DE
LDIR
JR L49CC ; (-063H)
L4A2F: CALL L6E5F
LD A,D
OR E
RET NZ
JP 04AF2H
L4A38: CALL L5C08
LD DE,0000AH
LD (04AB7H),DE
LD (04AC9H),DE
LD E,000H
LD (04AA6H),DE
JR Z,L4A81 ; (+033H)
CP 02CH
JR Z,L4A62 ; (+010H)
CALL L4A2F
LD (04AB7H),DE
CALL L413E
JR Z,L4A81 ; (+023H)
CALL L5E70
DEC HL
L4A62: CALL INCHLF
CP 02CH
JR Z,L4A79 ; (+010H)
CALL L4A2F
LD (04AA6H),DE
CALL L413E
JR Z,L4A81 ; (+00cH)
CALL L5E70
DEC HL
L4A79: INC HL
CALL L4A2F
LD (04AC9H),DE
L4A81: PUSH HL
LD HL,(04AA6H)
EX DE,HL
LD HL,(04AB7H)
OR A
SBC HL,DE
JP C,04AF2H
CALL L46AD
LD HL,(TEXTST)
L4A95: LD E,(HL)
INC HL
LD D,(HL)
LD A,D
OR E
JR Z,L4AD3 ; (+037H)
EX DE,HL
ADD HL,DE
DEC HL
EX DE,HL
INC HL
LD C,(HL)
INC HL
LD B,(HL)
PUSH HL
LD HL,L0000
OR A
SBC HL,BC
POP HL
JR Z,L4AB3 ; (+005H)
JR C,L4AB3 ; (+003H)
EX DE,HL
JR L4A95 ; (-01eH)
L4AB3: DEC HL
DEC HL
DEC HL
LD BC,L0000
L4AB9: LD E,(HL)
INC HL
LD D,(HL)
LD A,D
OR E
JR Z,L4AD3 ; (+013H)
EX DE,HL
ADD HL,DE
DEC HL
EX DE,HL
INC HL
LD (HL),C
INC HL
LD (HL),B
LD HL,L0000
ADD HL,BC
JR C,L4AD8 ; (+00aH)
LD C,L
LD B,H
EX DE,HL
JR L4AB9 ; (-01aH)
L4AD3: CALL L46C0
POP HL
RET
L4AD8: LD HL,0000AH
LD (04AC9H),HL
LD (04AB7H),HL
LD L,000H
LD (04AA6H),HL
CALL L4A81
JP 04AF2H
L4AEC: LD A,001H
LD HL,0023EH
LD HL,L033E
LD HL,0043EH
LD HL,L053E
LD HL,0063EH
LD HL,0073EH
LD HL,L083E
LD HL,L0D3E
LD HL,L0E3E
LD HL,L0F3E
LD HL,L103E
LD HL,L113E
LD HL,L123E
LD HL,L133E
LD HL,0143EH
LD HL,0153EH
LD HL,L183E
LD HL,L193E
LD HL,L3A3E
LD HL,L403E
JR L4B3A ; (+00eH)
L4B2C: LD A,006H
L4B2E: LD SP,(INTFAC)
LD HL,0FFFFH
PUSH HL
LD (08496H),SP
L4B3A: JR L4B55 ; (+019H)
L4B3C: LD HL,(_LPT)
LD IX,(_CRT)
LD (ZEQT),HL
XOR A
LD (01051H),A
LD A,0C4H
LD HL,0BB3EH
LD HL,0BC3EH
LD HL,0BD3EH
L4B55: JP L0182
L4B58: LD A,L
OR H
RET Z
LD DE,L4B66
RST 018H
DB 005H
CALL L5E66
RST 018H
DB 005H
RET
L4B66: DB 020H,049H,04EH,020H,000H ; " IN \0" — error location text
L4B6B: DB 042H,005H ; "B\x05" — control prefix
DB 052H,045H,041H,04BH,000H ; "REAK\0" — BREAK message
L4B72: DB 052H,005H ; "R\x05" — control prefix
DB 045H,041H,044H,059H ; "EADY" — Ready prompt
L4B78: DB 000H ; NUL terminator
NOP
L4B7A: CALL L6E4B
DEC A
CP 046H
JR C,L4B84 ; (+002H)
LD A,044H
L4B84: INC A
L4B85: LD SP,(08496H)
PUSH AF
RST 018H
DB 043H
CALL L5C44
POP AF
OR A
JR Z,L4BE5 ; (+052H)
CP 080H
JR Z,L4BE3 ; (+04cH)
LD C,A
LD HL,L0000
LD (L7928),HL
CALL L4146
LD A,C
JR Z,L4BCE ; (+02aH)
LD HL,(L8483)
LD (L8487),HL
LD (L847F),HL
LD HL,(L847D)
LD (L8489),HL
LD HL,(L8498)
LD (L848B),HL
AND 07FH
LD (L8485),A
LD A,(L8486)
INC A
CP 002H
JR Z,L4BD9 ; (+013H)
XOR A
LD (L4B78),A
LD (L849A),A
LD A,C
L4BCE: RST 018H
DB 01BH
L4BD0: LD HL,(L8483)
CALL L4B58
JP L4050
L4BD9: LD (L8486),A
LD HL,(0848DH)
PUSH HL
JP L40E4
L4BE3: LD A,02EH
L4BE5: LD HL,(L8498)
JR L4BED ; (+003H)
L4BEA: LD A,02EH
POP DE
L4BED: PUSH AF
PUSH HL
RST 018H
DB 002H
RST 018H
DB 020H
LD DE,L4B6B
RST 018H
DB 005H
POP HL
CALL L4146
JR Z,L4C17 ; (+019H)
LD (04C33H),HL
LD HL,(L847D)
LD (04C2DH),HL
LD HL,(L8483)
LD (04C27H),HL
LD (L847F),HL
POP AF
LD (L4B78),A
JP L4BD0
L4C17: POP AF
JP L4050
L4C1B: POP DE
LD HL,L4B78
LD A,(HL)
OR A
JP Z,04B10H
LD (HL),000H
LD HL,L0000
LD (L8483),HL
LD HL,L0000
LD (L847D),HL
LD HL,L0000
JP L40AF
L4C38: LD A,(L8486)
CP 002H
JP C,04B1CH
DEC A
LD (L8486),A
CALL L413E
EX DE,HL
LD HL,(L8487)
LD (L8483),HL
LD HL,(L8489)
LD (L847D),HL
LD HL,(L848B)
JR NZ,L4C5D ; (+004H)
POP BC
JP L40B3
L4C5D: CP 08EH
JP Z,L4F8A
EX DE,HL
JP L5147
L4C66: CALL TEST1
DB 080H
JR Z,L4C74 ; (+008H)
CALL TESTX
DB 082H
CALL TESTX
DB LSE0
L4C74: CALL L45AA
JR Z,L4C83 ; (+00aH)
LD (0848DH),DE
LD A,001H
L4C7F: LD (L8486),A
RET
L4C83: LD A,(L8486)
DEC A
JR Z,L4C7F ; (-00aH)
XOR A
LD (L8486),A
LD HL,(L8487)
LD (L8483),HL
LD A,(L8485)
JP L4B85
L4C99: CALL TEST1
DB 0FFH
JP Z,L4CCB
CALL L7436
PUSH BC
PUSH BC
PUSH AF
CALL TESTX
DB QDPC
CALL L6E8A
POP BC
LD A,(L84CE)
CP B
JP NZ,04AF5H
EX (SP),HL
EX DE,HL
CP 005H
JR Z,L4CC3 ; (+008H)
PUSH BC
CALL L4CD6
POP AF
POP HL
POP BC
RET
L4CC3: LD C,A
LD B,000H
LDIR
POP HL
POP BC
RET
L4CCB: CALL TESTX
DB 0C4H
JP L73C2
L4CD2: PUSH DE
EX DE,HL
JR L4CDA ; (+004H)
L4CD6: PUSH DE
CALL L6E7E
L4CDA: LD HL,KEYBM1
LD (HL),A
LD B,A
LD C,A
INC HL
CALL LDHLDE
POP HL
LD A,(HL)
CP C
JR Z,L4D2B ; (+042H)
PUSH HL
OR A
CALL NZ,L4D3B
POP HL
LD A,(KEYBM1)
OR A
JR Z,L4D28 ; (+033H)
PUSH HL
LD BC,(VARST)
SBC HL,BC
EX DE,HL
LD HL,(VARED)
DEC HL
DEC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
LD BC,(STRST)
OR A
POP DE
PUSH HL
SBC HL,BC
EX DE,HL
LD (HL),A
LD B,A
INC HL
LD (HL),E
INC HL
LD (HL),D
POP HL
LD DE,KEYBM1
INC DE
CALL L74DC
CALL L4952
LD (TMPEND),HL
LD (VARED),HL
RET
L4D28: LD (HL),000H
RET
L4D2B: INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD HL,(STRST)
ADD HL,DE
LD DE,KEYBM1
LD B,C
INC DE
JP L74DC
L4D3B: LD C,(HL)
LD B,000H
L4D3E: INC BC
INC BC
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD HL,(STRST)
ADD HL,DE
DEC HL
DEC HL
LD E,L
LD D,H
ADD HL,BC
PUSH BC
PUSH DE
EX DE,HL
LD HL,(VARED)
OR A
SBC HL,DE
LD C,L
LD B,H
EX DE,HL
POP DE
PUSH DE
JR Z,L4D5F ; (+002H)
LDIR
L4D5F: POP DE
POP BC
LD HL,(VARED)
OR A
SBC HL,BC
LD (VARED),HL
EX DE,HL
L4D6B: LD E,(HL)
INC HL
LD D,(HL)
LD A,D
OR E
RET Z
LD HL,(VARST)
ADD HL,DE
LD A,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
OR A
EX DE,HL
SBC HL,BC
EX DE,HL
LD (HL),D
DEC HL
LD (HL),E
PUSH BC
LD C,A
LD B,000H
LD HL,(STRST)
ADD HL,DE
ADD HL,BC
POP BC
JR L4D6B ; (-023H)
L4D8E: POP BC
LD (04E23H),BC
CALL L4C99
LD IX,L0000
ADD IX,SP
LD (04E05H),HL
CALL L4EFE
LD (04E01H),BC
L4DA6: LD E,(IX+000H)
LD D,(IX+001H)
LD HL,0FF12H
OR A
SBC HL,DE
JR NZ,L4DCE ; (+01aH)
LD E,(IX+006H)
LD D,(IX+007H)
EX DE,HL
OR A
SBC HL,BC
JR Z,L4DC7 ; (+007H)
LD DE,L0012
ADD IX,DE
JR L4DA6 ; (-021H)
L4DC7: LD DE,00012H
ADD IX,DE
LD SP,IX
L4DCE: LD HL,(04E05H)
CALL TESTX
DB LSE0
CALL L6E8A
PUSH AF
PUSH HL
EX DE,HL
LD DE,L4F0A
CALL L5E93
POP HL
POP AF
CP LSE1
LD DE,L6112
JR NZ,L4DEE ; (+004H)
INC HL
CALL L6E8A
L4DEE: LD (04E05H),HL
LD HL,0FFF6H
ADD HL,SP
LD SP,HL
EX DE,HL
CALL L5E93
LD HL,L4F0A
CALL L5E93
LD HL,L0000
PUSH HL
LD HL,L0000
PUSH HL
LD HL,(L847D)
PUSH HL
LD HL,0FF12H
PUSH HL
LD HL,0FE00H
ADD HL,SP
LD DE,(TMPEND)
SBC HL,DE
LD A,00BH
JP C,L4B2E
LD HL,(04E05H)
JP L0000
L4E25: LD A,005H
LD (L84CE),A
POP BC
LD (04E9AH),BC
L4E2F: PUSH AF
POP BC
LD (04E05H),HL
LD IX,L0000
ADD IX,SP
LD (04E89H),IX
LD E,(IX+000H)
LD D,(IX+001H)
LD HL,0FF12H
OR A
SBC HL,DE
JP NZ,04B04H
PUSH BC
POP AF
JR NZ,L4EB0 ; (+05fH)
LD E,(IX+004H)
LD D,(IX+005H)
EX DE,HL
LD (04E97H),HL
LD E,(IX+006H)
LD D,(IX+007H)
LD HL,(VARST)
ADD HL,DE
LD BC,00008H
ADD IX,BC
PUSH IX
POP DE
CALL L7985
INC DE
LD A,(DE)
LD IX,(04E89H)
LD DE,0000DH
ADD IX,DE
PUSH IX
POP DE
BIT 7,A
JR NZ,L4E83 ; (+001H)
EX DE,HL
L4E83: CALL L7A1C
JR C,L4E9C ; (+014H)
LD SP,L0000
LD HL,00002H
ADD HL,SP
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (L847D),HL
LD HL,L0000
L4E99: JP L0000
L4E9C: LD DE,L0012
LD HL,(04E89H)
ADD HL,DE
LD SP,HL
LD HL,(04E05H)
CALL TEST1
DB 02CH
JR NZ,L4E99 ; (-014H)
LD (04E05H),HL
L4EB0: LD IX,L0000
ADD IX,SP
LD (04E89H),IX
LD HL,(04E05H)
CALL TEST1
DB 02CH
JP Z,L4E2F
CALL L7436
LD (04E05H),HL
CALL L4EFE
LD IX,(04E89H)
L4ED1: LD E,(IX+000H)
LD D,(IX+001H)
LD HL,0FF12H
OR A
SBC HL,DE
JP NZ,04B04H
LD L,(IX+006H)
LD H,(IX+007H)
OR A
SBC HL,BC
LD HL,(04E05H)
JP Z,L4E2F
LD DE,L0012
ADD IX,DE
LD (04E89H),IX
LD SP,(04E89H)
JR L4ED1 ; (-02dH)
L4EFE: LD H,B
LD L,C
LD BC,(VARST)
OR A
SBC HL,BC
LD B,H
LD C,L
RET
L4F0A: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
L4F13: CALL L51A2
OR A
RET NZ
INC HL
PUSH DE
LD E,(HL)
INC HL
LD D,(HL)
LD A,D
OR E
INC HL
LD (04F12H),DE
LD E,(HL)
INC HL
LD D,(HL)
LD (04F10H),DE
POP DE
SCF
RET Z
JR L4F13 ; (-01dH)
L4F30: CALL L5E7B
CALL L6E5F
LD (04F69H),DE
CALL TEST1
DB 02CH
JR NZ,L4F5B ; (+01bH)
CALL L6E8A
CALL L7916
LD (04F5EH),DE
CALL TEST1
DB 02CH
JR NZ,L4F5B ; (+00bH)
CALL L7436
CALL L7916
LD (04F71H),BC
XOR A
L4F5B: PUSH HL
PUSH AF
LD HL,L0000
CALL L6E7E
LD IX,L0182
XOR A
CALL L0000
POP AF
JR NZ,L4F76 ; (+008H)
LD A,B
EX DE,HL
LD DE,L0000
CALL L4CD2
L4F76: POP HL
JP L5E7F
L4F7A: CALL L6E5F
L4F7D: LD A,D
OR E
RET Z
LD B,000H
L4F82: DJNZ L4F82 ; (-002H)
RST 018H
DB 00EH
RET Z
DEC DE
JR L4F7D ; (-00dH)
L4F8A: DEC HL
L4F8B: CALL L51A2
OR A
SCF
RET Z
CP 03AH
RET Z
JR L4F8B ; (-00bH)
L4F96: CALL L6E4B
SUB LSE0
CP 007H
JP C,04AF2H
CALL L5E70
PUSH DE
CALL L6E4B
POP BC
OUT (C),A
RET
L4FAB: CALL L6E4B
CALL L5E70
PUSH DE
CALL L7436
CP 005H
JP NZ,04AF5H
EX (SP),HL
PUSH BC
EX (SP),HL
POP BC
IN E,(C)
LD D,000H
CALL L5E99
POP HL
RET
L4FC7: CALL L4FCF
LD (00054H),DE
RET
L4FCF: LD B,018H
LD C,027H
CALL L4FDA
JP C,04AF2H
RET
L4FDA: PUSH BC
CALL L6E4B
PUSH AF
CALL L5E70
CALL L6E4B
LD D,E
POP AF
LD E,A
POP BC
LD A,C
CP E
RET C
LD A,B
CP D
RET
L4FEF: CALL L7436
LD (L84CE),A
CP 005H
JR Z,L500E ; (+015H)
PUSH HL
PUSH BC
LD A,0FFH
RST 018H
DB 00DH
OR A
JR Z,L5008 ; (+006H)
LD HL,(TMPEND)
LD (HL),A
LD A,001H
L5008: POP DE
CALL L4CD2
POP HL
RET
L500E: PUSH HL
PUSH BC
LD A,0FFH
RST 018H
DB 00DH
SUB 030H
CP 00AH
JR C,L501B ; (+001H)
XOR A
L501B: LD E,A
LD D,000H
POP HL
CALL L5E99
POP HL
RET
L5024: CP 040H
LD BC,POPRA
JR NZ,L502F ; (+004H)
INC HL
LD BC,L504B
L502F: LD (05040H),BC
CALL L6E5F
CALL L5E73
L5039: PUSH DE
CALL L6E4B
POP DE
EX DE,HL
CALL POPRA
EX DE,HL
INC DE
CALL TEST1
DB 02CH
RET NZ
JR L5039 ; (-012H)
L504B: LD (HL),A
RET
L504D: PUSH HL
CALL TEST1
DB 04DH
JR NZ,L5066 ; (+012H)
CALL TEST1
DB 041H
JR NZ,L5066 ; (+00cH)
CALL TEST1
DB 058H
JR NZ,L5066 ; (+006H)
EX (SP),HL
LD HL,(MEMMAX)
JR L5082 ; (+01cH)
L5066: POP HL
CALL L6E5F
PUSH HL
LD HL,(MEMMAX)
OR A
SBC HL,DE
JP C,L4B2C
LD HL,(TMPEND)
INC H
INC H
INC H
INC H
OR A
SBC HL,DE
JP NC,04AF2H
EX DE,HL
L5082: CALL L4902
POP HL
POP DE
LD SP,(INTFAC)
LD BC,0FFFFH
PUSH BC
PUSH DE
RET
L5091: POP IX
L5093: POP BC
PUSH BC
LD A,B
INC A
JP NZ,04B07H
LD A,C
CP 012H
JR Z,L50B9 ; (+01aH)
CP 0FEH
JP NZ,04B07H
POP BC
CALL L413E
EX DE,HL
POP HL
LD (L8483),HL
POP HL
LD (L847D),HL
POP HL
PUSH IX
RET Z
EX DE,HL
JP L5147
L50B9: EX DE,HL
LD HL,L0012
ADD HL,SP
LD SP,HL
EX DE,HL
JR L5093 ; (-02fH)
L50C2: PUSH HL
CALL L4F8A
EX DE,HL
POP HL
POP BC
PUSH DE
EXX
LD HL,(L847D)
PUSH HL
LD HL,(L8483)
PUSH HL
LD HL,0FFFEH
PUSH HL
LD HL,0FE00H
ADD HL,SP
LD DE,(TMPEND)
SBC HL,DE
LD A,00AH
JP C,L4B2E
EXX
PUSH BC
JR L5147 ; (+05dH)
L50EA: CALL TEST1
DB 0C1H
JP Z,L4C66
CALL L6E5F
LD C,E
LD B,D
CP 087H
JP NC,L4AEC
CP 082H
JR NZ,L510F ; (+010H)
CALL INCHLF
LD E,081H
CP LSE4
JR Z,L510E ; (+006H)
CP LSE0
JP NZ,L4AEC
DEC E
L510E: LD A,E
L510F: PUSH HL
LD HL,L43EC
SUB 080H
ADD A,A
LD E,A
LD D,000H
ADD HL,DE
CALL INDRCT
EX (SP),HL
INC HL
LD A,B
OR A
JR NZ,L5143 ; (+020H)
LD A,C
OR A
JR Z,L5143 ; (+01cH)
LD B,A
L5128: DEC B
RET Z
CALL HLFTCH
CALL L5173
JP NZ,L4AEC
CALL L51A8
OR A
RET Z
INC HL
CALL TEST1
DB 02CH
JR Z,L5128 ; (-017H)
POP DE
JP 05E48H
L5143: POP DE
JP L4F8A
L5147: CALL L45AA
EX DE,HL
JR NZ,L5150 ; (+003H)
LD HL,(TEXTST)
L5150: LD (L847D),HL
XOR A
LD (L4B78),A
JP L40E4
L515A: CALL L6E8A
EX AF,AF'
LD A,(DE)
OR A
JR Z,L5182 ; (+020H)
EX AF,AF'
CP LSE2
JR NZ,L516F ; (+008H)
L5167: CALL INCHLF
CALL L5173
JR Z,L5147 ; (-028H)
L516F: POP AF
JP L40AF
L5173: CP 022H
RET Z
L5176: CP 00BH
RET Z
CP 00CH
RET
L517C: CALL L518B
JR NC,L517C ; (-005H)
RET
L5182: DEC HL
CALL L518B
JR NC,L5167 ; (-021H)
DB 0C3H
POP HL
LD B,B
L518B: CALL L51A2
OR A
SCF
RET Z
CP 0C2H
RET Z
CP 093H
JR NZ,L518B ; (-00dH)
CALL L518B
RET C
JR L518B ; (-013H)
L519E: INC HL
LD A,(HL)
JR L51A8 ; (+006H)
L51A2: INC HL
LD A,(HL)
CP 094H
JR Z,L51C7 ; (+01fH)
L51A8: OR A
RET Z
CP 022H
JR Z,L51E5 ; (+037H)
CP 0FEH
JR NC,L51C5 ; (+013H)
CP 097H
JR Z,L51C7 ; (+011H)
CP 027H
JR Z,L51C7 ; (+00dH)
CP 020H
RET NC
CP 00BH
RET C
CP 015H
JR NC,L51DC ; (+018H)
INC HL
L51C5: INC HL
RET
L51C7: LD A,(HL)
OR A
RET Z
CP 03AH
RET Z
CP 022H
JR Z,L51D4 ; (+003H)
INC HL
JR L51C7 ; (-00dH)
L51D4: CALL L51E5
OR A
RET Z
INC HL
JR L51C7 ; (-015H)
L51DC: AND 00FH
ADD A,L
LD L,A
LD A,020H
RET NC
INC H
RET
L51E5: INC HL
LD A,(HL)
OR A
RET Z
CP 022H
RET Z
JR L51E5 ; (-009H)
L51EE: OR 0AFH
PUSH AF
LD B,031H
LD C,04FH
CALL L4FDA
PUSH AF
CALL L523F
POP AF
JR C,L523D ; (+03eH)
LD A,C
LD (0522BH),A
LD B,001H
SRL E
JR NC,L520B ; (+002H)
SLA B
L520B: SRL D
JR NC,L5213 ; (+004H)
SLA B
SLA B
L5213: EX DE,HL
RST 018H
DB 01EH
CALL BREAKX
CP 0F0H
JR NC,L521F ; (+002H)
LD A,0F0H
L521F: LD C,A
POP AF
JR Z,L5235 ; (+012H)
SET 3,H
CALL BREAKX
AND 08FH
OR 000H
CALL POPRA
RES 3,H
LD A,C
OR B
JR L5238 ; (+003H)
L5235: LD A,B
CPL
AND C
L5238: CALL POPRA
EX DE,HL
RET
L523D: POP AF
RET
L523F: LD A,(L005D)
AND 070H
LD C,A
CALL TEST1
DB 02CH
RET NZ
PUSH DE
CALL L552C
POP DE
RLCA
RLCA
RLCA
RLCA
LD C,A
RET
L5255: RST 018H
DB 020H
RET
L5258: CALL 05E48H
RST 018H
DB 028H
RST 018H
DB 000H
RET
L5260: JR Z,L5285 ; (+023H)
LD A,001H
LD (L004E),A
LD A,(L0056)
LD B,019H
CALL L5298
LD (00056H),BC
CALL TEST1
DB 02CH
RET NZ
LD B,028H
LD A,(L005B)
CALL L5298
LD (0005BH),BC
RET
L5285: XOR A
LD (L004E),A
LD BC,L1800
LD (00056H),BC
LD BC,L2700
LD (0005BH),BC
RET
L5298: LD D,000H
LD E,A
CALL TEST1
DB 02CH
JR Z,L52A9 ; (+008H)
PUSH BC
CALL L6E4B
POP BC
CALL L5E70
L52A9: LD C,E
PUSH BC
CALL L6E4B
POP BC
DEC A
JP M,04AF2H
ADD A,C
CP B
JP NC,04AF2H
LD B,A
RET
L52BA: DI
OUT (LSE4),A
JP L0000
L52C0: XOR A
LD BC,?SETDE
LD (L53A8),A
PUSH AF
CALL L5882
RST 018H
DB 02EH
JP C,04B28H
BIT 1,A
JP Z,04B28H
CALL TEST1
DB 02CH
POP AF
OR A
JR NZ,L52F2 ; (+015H)
CALL L6E6F
LD A,B
LD (L53A3),A
LD (053A4H),DE
CALL 05E48H
JR L52F2 ; (+005H)
L52ED: LD A,002H
LD (L53A8),A
L52F2: CALL L4664
LD (05319H),DE
LD (05327H),BC
LD A,0FFH
LD (DISPX),A
CALL SKPDE
LD HL,(TEXTST)
L5308: CALL LDDEMI
LD A,D
OR E
RET Z
EX DE,HL
ADD HL,DE
DEC HL
DEC HL
EX DE,HL
PUSH DE
CALL LDDEMI
PUSH HL
LD HL,L0000
OR A
SBC HL,DE
JR C,L5326 ; (+006H)
JR Z,L5326 ; (+004H)
POP HL
POP HL
JR L5308 ; (-01eH)
L5326: LD HL,L0000
OR A
SBC HL,DE
JR NC,L5331 ; (+003H)
POP HL
POP HL
RET
L5331: EX DE,HL
CALL L5E66
RST 018H
DB 017H
LD HL,KEYBUF
CALL LDHLDE
LD (HL),020H
INC HL
EX DE,HL
POP HL
CALL L68E0
LD A,(L53A8)
OR A
JR NZ,L5350 ; (+005H)
CALL L5366
JR NC,L535A ; (+00aH)
L5350: LD DE,KEYBUF
RST 018H
DB 017H
RST 018H
DB 037H
CALL L5733
L535A: POP HL
LD A,(L53A8)
CP 002H
JR Z,L5308 ; (-05aH)
RST 018H
DB 00FH
JR L5308 ; (-05eH)
L5366: EX DE,HL
L5367: PUSH HL
CALL L5371
POP HL
RET C
RET Z
INC HL
JR L5367 ; (-00aH)
L5371: LD A,(L53A3)
LD B,A
LD DE,(053A4H)
L5379: LD A,(HL)
INC HL
OR A
RET Z
CP 005H
JR Z,L5385 ; (+004H)
CP 006H
JR NZ,L5387 ; (+002H)
L5385: JR L5379 ; (-00eH)
L5387: PUSH HL
LD C,A
L5389: LD A,(DE)
INC DE
CP 005H
JR Z,L5393 ; (+004H)
CP 006H
JR NZ,L539A ; (+007H)
L5393: DEC B
SCF
POP HL
RET Z
PUSH HL
JR L5389 ; (-011H)
L539A: SUB C
POP HL
OR A
RET NZ
DEC B
SCF
RET Z
JR L5379 ; (-02aH)
L53A3: NOP
NOP
NOP
NOP
NOP
L53A8: NOP
L53A9: CALL TESTX
DB 087H
CALL L5E4F
PUSH HL
LD C,000H
L53B3: RST 018H
DB 008H
LD A,C
ADD A,031H
LD D,A
LD E,020H
CP 03AH
JR NZ,L53C2 ; (+003H)
LD DE,L3031
L53C2: LD (05445H),DE
LD DE,L543D
RST 018H
DB 00BH
LD A,C
CALL L549C
LD B,(HL)
INC HL
PUSH BC
CALL L53E0
POP BC
INC C
LD A,C
CP 00AH
JR NZ,L53B3 ; (-029H)
RST 018H
DB 008H
POP HL
RET
L53E0: LD A,B
OR A
LD C,000H
JR NZ,L53ED ; (+007H)
LD A,022H
RST 018H
DB 00AH
RST 018H
DB 00AH
RET
L53ED: LD A,(HL)
CP 020H
JR C,L5412 ; (+020H)
CP 022H
JR Z,L5412 ; (+01cH)
LD A,C
CP 001H
JR Z,L5405 ; (+00aH)
OR A
LD DE,L544A
JR NZ,L5403 ; (+002H)
INC DE
INC DE
L5403: RST 018H
DB 00BH
L5405: LD A,(HL)
RST 018H
DB 00AH
INC HL
LD C,001H
DJNZ L53ED ; (-020H)
LD A,022H
L540F: RST 018H
DB 00AH
RET
L5412: LD A,C
CP 0FFH
JR Z,L5437 ; (+020H)
OR A
LD DE,0544EH
JR NZ,L541F ; (+002H)
INC DE
INC DE
L541F: RST 018H
DB 00BH
L5421: PUSH BC
PUSH HL
LD L,(HL)
LD H,000H
CALL L5E66
RST 018H
DB 00BH
POP HL
POP BC
INC HL
LD C,0FFH
DJNZ L53ED ; (-045H)
LD A,029H
JP L540F
L5437: LD A,02CH
RST 018H
DB 00AH
JR L5421 ; (-01cH)
L543D: LD B,H
LD B,L
LD B,(HL)
JR NZ,L548D ; (+04bH)
LD B,L
LD E,C
JR Z,L5446 ; (+000H)
L5446: NOP
ADD HL,HL
DEC A
NOP
L544A: ADD HL,HL
DEC HL
LD (L2200),HL
DEC HL
LD B,E
LD C,B
LD D,D
INC H
JR Z,L5456 ; (+000H)
L5456: CALL TEST1
DB 0B2H
JR Z,L5467 ; (+00bH)
CALL TESTX
DB 0FFH
L5460: CALL TESTX
DB 0C7H
JP L7824
L5467: CALL TESTX
DB 028H
CALL L6E4B
CALL TESTX
DB 029H
CALL TESTX
DB QDPC
LD A,E
DEC A
CP 00AH
JP NC,04AF2H
PUSH HL
CALL L549C
EX (SP),HL
CALL L6E6F
EX (SP),HL
LD A,B
CP 010H
JR C,L548D ; (+002H)
LD A,00FH
L548D: LD (HL),A
OR A
JR Z,L5499 ; (+008H)
LD B,A
INC HL
L5493: LD A,(DE)
LD (HL),A
INC DE
INC HL
DJNZ L5493 ; (-006H)
L5499: POP HL
EI
RET
L549C: ADD A,A
ADD A,A
ADD A,A
ADD A,A
LD HL,L12C0
JP ADDHLA
L54A6: CALL TEST1
DB 02CH
JR NZ,L54B4 ; (+008H)
CALL L5E70
LD DE,L005D
JR L54C0 ; (+00cH)
L54B4: CALL L4FCF
CALL L5E70
EX DE,HL
RST 018H
DB 01EH
SET 3,H
EX DE,HL
L54C0: EX DE,HL
CALL BREAKX
EX DE,HL
PUSH DE
CALL L54D0
POP DE
EX DE,HL
CALL POPRA
EX DE,HL
RET
L54D0: LD C,A
CALL TEST1
DB 02CH
JR Z,L54E9 ; (+012H)
CALL L552C
ADD A,A
ADD A,A
ADD A,A
ADD A,A
XOR C
AND 070H
XOR C
LD C,A
CALL TEST1
DB 02CH
JR NZ,L54FA ; (+011H)
L54E9: CALL L413E
JR Z,L54FA ; (+00cH)
CP 05DH
JR Z,L54FA ; (+008H)
CALL L552C
XOR C
AND 007H
XOR C
RET
L54FA: LD A,C
RET
L54FC: INC HL
L54FD: CALL L6E6F
LD A,B
OR A
JR Z,L5513 ; (+00fH)
PUSH HL
LD HL,KEYBUF
PUSH HL
CALL LDHLDE
LD (HL),00DH
POP DE
CALL L0030
POP HL
L5513: CALL HLFTCH
CP 03BH
JR Z,L54FC ; (-01eH)
CP 02CH
JR Z,L54FC ; (-022H)
RET
L551F: CALL L6E4B
DEC A
CP 007H
JP NC,04AF2H
INC A
JP L0041
L552C: PUSH BC
CALL L6E4B
POP BC
CP 008H
JP NC,04AF2H
RET
L5537: RST 018H
DB 045H
RET
DS 198, 000H
L5600: LD A,(ZLOG)
CP 088H
RET
L5606: CALL L6E8A
LD A,(L84CE)
CP 003H
PUSH HL
EX DE,HL
JR Z,L5619 ; (+007H)
CALL L6028
POP HL
RST 018H
DB 017H
RET
L5619: CALL L6E7E
POP HL
RET
L561E: LD A,(L005D)
LD (0574DH),A
XOR A
LD (DISPX),A
CALL L5882
RST 018H
DB 02EH
JP C,L57B4
BIT 2,A
JP NZ,L5D18
BIT 1,A
JP Z,057B7H
CALL L58C2
CALL L5600
JR NZ,L5655 ; (+013H)
CALL TEST1
DB 05BH
JR NZ,L5655 ; (+00dH)
LD A,(0574DH)
CALL L54D0
LD (0574DH),A
CALL TESTX
DB 05DH
L5655: CALL L413E
JP Z,L5733
L565B: LD A,(HL)
CP LSE3
JR Z,L56DA ; (+07aH)
LD BC,L5674
PUSH BC
CP 03BH
RET Z
CP 02CH
RET Z
CP LSE6
JR Z,L56AA ; (+03cH)
CALL L5606
JP L573E
L5674: CALL L413E
JP Z,L5733
CP 02CH
JR NZ,L569A ; (+01cH)
CALL L5600
JR C,L5697 ; (+014H)
LD IX,(ZDELT)
CALL IOCALL
LD B,A
L568B: SUB 00AH
JR NC,L568B ; (-004H)
NEG
LD B,A
CALL L56CC
JR L569A ; (+003H)
L5697: CALL L5733
L569A: LD A,(HL)
CP 02CH
JR Z,L56A1 ; (+002H)
CP 03BH
L56A1: JR NZ,L56A4 ; (+001H)
INC HL
L56A4: CALL L413E
RET Z
JR L565B ; (-04fH)
L56AA: CALL L5600
JP C,057B7H
CALL L5E77
CALL L6E4B
CALL L5E7F
LD IX,(ZDELT)
CALL IOCALL
SUB E
RET NC
NEG
LD B,A
CALL L5600
LD A,013H
JR Z,L56CE ; (+002H)
L56CC: LD A,020H
L56CE: LD DE,KEYBUF
PUSH BC
PUSH DE
CALL ?SETDE
POP DE
POP BC
JR L573E ; (+064H)
L56DA: INC HL
CALL L6E6F
LD A,B
OR A
JP Z,04AF2H
PUSH HL
LD HL,KEYBUF
PUSH HL
PUSH BC
CALL LDHLDE
POP BC
LD A,0F0H
LD E,B
LD D,000H
INC DE
RST 018H
DB 02AH
LD (L6306),HL
LD (L6308),HL
POP DE
CALL LDHLDE
LD (HL),000H
POP HL
L5702: CALL L413E
JR Z,L5729 ; (+022H)
INC HL
CP 02CH
JR Z,L5711 ; (+005H)
CP 03BH
JP NZ,L4AEC
L5711: CALL L413E
JR Z,L572C ; (+016H)
CALL L6E92
PUSH HL
LD BC,(TMPEND)
PUSH BC
CALL L630A
POP DE
CALL L573C
POP HL
JR L5702 ; (-027H)
L5729: CALL L5733
L572C: LD A,0F0H
RST 018H
DB 02BH
RET
L5731: DEC C
NOP
L5733: LD A,(L005D)
LD (0574DH),A
LD DE,L5731
L573C: RST 018H
DB 017H
L573E: CALL L5600
JR Z,L5746 ; (+003H)
RST 018H
DB 037H
RET
L5746: PUSH HL
PUSH BC
LD HL,L005D
LD C,(HL)
LD (HL),070H
RST 018H
DB 037H
LD (HL),C
POP BC
POP HL
RET
L5754: LD A,08AH
LD (ZLOG),A
JR L5792 ; (+037H)
L575B: CALL L5882
RST 018H
DB 02EH
JP C,L57B4
BIT 2,A
JP NZ,L5D29
BIT 0,A
JP Z,057B7H
CALL L58C2
CALL L5600
JR NZ,L5792 ; (+01dH)
CALL HLFTCH
CP 022H
LD DE,L57BC
LD B,002H
JR NZ,L5788 ; (+007H)
CALL L6E6F
CALL TESTX
DB 03BH
L5788: LD A,B
OR A
JR Z,L5792 ; (+006H)
L578C: LD A,(DE)
INC DE
RST 018H
DB 003H
DJNZ L578C ; (-006H)
L5792: LD (057EBH),SP
LD DE,(VARED)
LD (TMPEND),DE
L579E: LD DE,(TMPEND)
CALL L74E8
CALL L7436
PUSH AF
PUSH BC
CALL L413E
JR Z,057BEH ; (+00fH)
CALL L5E73
JR L579E ; (-016H)
L57B4: LD A,02CH
LD HL,0BB3EH
JP L0182
L57BC: CCF
JR NZ,0576EH ; (-051H)
PUSH AF
PUSH HL
RST 018H
DB 034H
LD HL,(057EBH)
DEC HL
L57C7: LD A,(HL)
OR A
JR Z,L57E9 ; (+01eH)
DEC HL
DEC HL
LD B,(HL)
DEC HL
LD C,(HL)
DEC HL
PUSH HL
PUSH AF
PUSH BC
LD DE,(TMPEND)
CALL L57EE
LD H,000H
LD L,B
ADD HL,DE
LD (HL),000H
POP DE
POP AF
CALL L57F8
POP HL
JR L57C7 ; (-022H)
L57E9: POP HL
LD SP,L0000
RET
L57EE: LD A,(ZLOG)
CP 08AH
JR Z,L5839 ; (+044H)
RST 018H
DB 035H
RET
L57F8: CP 003H
JR NZ,L5803 ; (+007H)
LD HL,(TMPEND)
LD A,B
$START: JP L4CD2 ; $START - BASIC warm start / system entry
L5803: PUSH DE
LD HL,(INTFAC)
LD DE,(TMPEND)
EX DE,HL
CALL HLFTCH
CP 045H
JP Z,04AF2H
EX DE,HL
CALL L5EDC
EX DE,HL
CALL TEST1
DB 000H
JP NZ,04AF2H
EX DE,HL
POP DE
JP L5E93
L5825: XOR A
JR L587E ; (+056H)
L5828: CALL L5825
CALL L413E
CALL NZ,L45AA
EX DE,HL
CALL NZ,L5869
EX DE,HL
JP L4F8A
L5839: PUSH HL
PUSH DE
CALL L5847
POP DE
POP HL
RET
L5841: LD HL,(TEXTST)
CALL L5869
L5847: LD A,(L848F)
CP 001H
JP Z,04B1FH
JR C,L5841 ; (-010H)
LD HL,(L8490)
LD C,03AH
RST 018H
DB 036H
LD (L8490),HL
CALL L413E
SCF
CCF
RET NZ
DEC HL
L5862: CALL L519E
OR A
JR NZ,L5874 ; (+00cH)
INC HL
L5869: LD A,(HL)
INC HL
OR (HL)
LD A,001H
JR Z,L587E ; (+00eH)
INC HL
INC HL
JR L5862 ; (-012H)
L5874: CP 094H
JR NZ,L5862 ; (-016H)
INC HL
LD (L8490),HL
LD A,002H
L587E: LD (L848F),A
RET
L5882: CALL TEST1
DB 023H
JR NZ,L58AD ; (+025H)
CALL HLFTCH
CP 020H
JP NC,L4AEC
PUSH DE
PUSH BC
LD DE,L84CF
PUSH DE
CALL L705A
EX (SP),HL
CALL L60B7
LD A,H
OR A
JP NZ,04B28H
OR L
JP Z,04B28H
JP M,04B28H
POP HL
POP BC
POP DE
RET
L58AD: CALL TEST1
DB FDPD
LD A,088H
RET NZ
CALL TEST1
DB 050H
LD A,089H
RET Z
CALL TESTX
DB 054H
LD A,080H
RET
L58C2: LD A,(ZLOG)
OR A
RET M
JP L5E70
L58CA:
IF BUILD_RFS = 1
JP RFS_DIRCMD1 ; RFS: debug hook for DIR handler 1
NOP
NOP
NOP
ELSE
CALL L593A ; Original: parse device name for DIR
LD B,A
XOR A
NOP
ENDIF
L58D0:
IF BUILD_RFS = 1
JP RFS_DIRCMD2 ; RFS: debug hook for DIR handler 2
NOP
NOP
NOP
NOP
NOP
ELSE
CALL L6E6F ; Original: evaluate string expression
PUSH HL
RST 018H
DB 02CH
RST 018H
DB 03CH
ENDIF
L58D8: PUSH HL
RST 018H
DB 02CH
RST 018H
DB 03CH
POP HL
RET
L58DF: LD A,001H
LD BC,0023EH
LD BC,0043EH
PUSH AF
LD (ZRWX),A
CALL L5882
CP 088H
JR NZ,L58F4 ; (+002H)
LD A,080H
L58F4: LD (ZLOG),A
CALL L58C2
CALL L592D
POP AF
CP 004H
JR Z,L5904 ; (+002H)
L5902: LD A,003H
L5904: LD (ELMD),A
PUSH AF
RST 018H
DB 033H
LD A,(ELMD)
POP BC
CP B
JP NZ,04B53H
RET
L5913: OR 0AFH
LD B,A
CALL L413E
JR Z,L5929 ; (+00eH)
L591B: CALL L5882
CP 088H
RET NC
RST 018H
DB 038H
CALL TEST1
DB 02CH
JR L591B ; (-00eH)
L5929: XOR A
RST 018H
DB 038H
RET
L592D: CALL L46A6
LD B,000H
CALL NZ,L6E6F
PUSH HL
RST 018H
DB 02DH
POP HL
RET
L593A: PUSH HL
CALL HLFTCH
LD DE,L5982
LD B,001H
CALL L5975
CALL NC,L5975
JR C,L5962 ; (+017H)
CALL L5975
CALL L5EC4
CALL L597B
CALL L413E
JR NZ,L5962 ; (+009H)
LD A,03AH
LD (DE),A
POP AF
IF BUILD_RFS = 1
JP RFS_DIR_FIX
NOP
NOP
ELSE
LD DE,L5982 ; Original: buffer for device name
INC HL ; Advance past ':'
ENDIF
L5962: POP HL
CALL L413E
LD B,000H
CALL NZ,L6E6F
L596B:
IF BUILD_RFS = 1
JP RFS_DIR_OPEN ; RFS: debug hook for SVC #2C DIR trace
NOP
NOP
NOP
NOP
NOP
NOP
NOP
ELSE
PUSH HL ; Original SVC #2C DIR handler
RST 018H
DB 02CH
INC (HL)
DEC (HL)
JP NZ,04B1FH
POP HL
RET
ENDIF
L5975: CP 041H
RET C
CP 05BH
CCF
L597B: RET C
LD (DE),A
INC HL
INC DE
LD A,(HL)
INC B
RET
L5982: NOP
NOP
NOP
NOP
L5986: CALL L592D
CALL TEST1
DB 02CH
JP Z,L5A47
PUSH HL
CALL L5BDC
DEC A
JR Z,L59A9 ; (+012H)
DEC A
JP NZ,04B53H
CALL L5C08
CALL L5BE5
CALL L5C11
CALL L5C44
POP HL
RET
L59A9: LD HL,(ELMD22)
PUSH HL
LD DE,(MEMLMT)
CALL L59CF
LD DE,(ELMD20)
LD BC,(MEMMAX)
CALL NC,L59CA
JP C,04B13H
POP HL
RST 018H
DB 030H
CALL L5C44
POP HL
RET
L59CA: ADD HL,DE
RET C
EX DE,HL
LD H,B
LD L,C
L59CF: PUSH HL
OR A
SBC HL,DE
POP HL
RET
L59D5: CALL L592D
CALL L5BDC
CP 002H
JP NZ,04B53H
LD A,(L849A)
OR A
JP Z,L5B0D
JP L5DB2
L59EA: CALL L5C08
CALL L592D
CALL TEST1
DB 02CH
JR Z,05A4DH ; (+057H)
RST 018H
DB 02FH
CP 002H
JP NZ,04B53H
PUSH HL
LD HL,(VARED)
LD (TMPEND),HL
LD BC,003E8H
ADD HL,BC
JP C,L4B2C
PUSH HL
LD BC,(ELMD20)
INC B
ADD HL,BC
JP C,L4B2C
SBC HL,SP
JP NC,L4B2C
POP HL
PUSH HL
RST 018H
DB 030H
POP HL
CALL L5A24
POP HL
RET
L5A24: CALL LDDEMI
LD A,D
OR E
RET Z
PUSH DE
CALL LDDEMI
PUSH HL
LD H,D
LD L,E
LD (L847F),HL
CALL L49B9
POP HL
POP BC
PUSH BC
PUSH HL
CALL L4794
POP HL
POP BC
ADD HL,BC
DEC HL
DEC HL
DEC HL
DEC HL
JR L5A24 ; (-023H)
L5A47: CALL L5C08
LD A,001H
LD BC,L003E
LD BC,0023EH
PUSH AF
CALL TESTX
DB 041H
CALL 05E48H
LD A,001H
LD (ZRWX),A
LD A,081H
LD (ZLOG),A
CALL L5902
POP AF
PUSH AF
PUSH HL
LD HL,L0000
LD DE,0FFFFH
OR A
CALL NZ,L49B9
LD A,081H
RST 018H
DB 02EH
LD HL,(VARED)
LD (TMPEND),HL
LD BC,003E8H
ADD HL,BC
JP C,04AFBH
PUSH HL
LD (L5AEB),HL
L5A89: LD HL,0FE00H
ADD HL,SP
LD DE,(05AEBH)
SBC HL,DE
JP C,04AFBH
LD DE,(TMPEND)
RST 018H
DB 035H
LD A,B
OR A
JR Z,L5AD6 ; (+036H)
CALL L6A11
LD A,B
OR C
JP Z,04AF2H
LD HL,(L5AEB)
PUSH HL
INC HL
INC HL
LD (HL),C
INC HL
LD (HL),B
INC HL
PUSH HL
LD H,D
LD L,E
CALL TEST1
DB 000H
JP Z,04AF2H
POP HL
LD A,(DE)
CP 020H
JR NZ,L5AC3 ; (+001H)
INC DE
L5AC3: CALL L66EF
LD (HL),000H
INC HL
LD (L5AEB),HL
POP DE
OR A
SBC HL,DE
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
JR L5A89 ; (-04dH)
L5AD6: LD HL,(L5AEB)
CALL L4952
CALL L4928
POP HL
CALL L5A24
POP HL
POP AF
CP 002H
RET NZ
JP L480D
L5AEB: NOP
NOP
L5AED: CALL L592D
PUSH HL
CALL TEST1
DB 02CH
JR NZ,L5AFF ; (+008H)
CALL HLFTCH
CP 041H
JP Z,05A50H
L5AFF: CALL L5BDC
POP HL
DEC A
JR Z,L5B16 ; (+010H)
DEC A
JP NZ,04B53H
CALL L5BE5
L5B0D: CALL L5C11
CALL L5C44
JP L480D
L5B16: LD D,0C9H
LD BC,0FF00H
CALL TEST1
DB 02CH
JR NZ,L5B2A ; (+009H)
CALL TESTX
DB 052H
LD D,000H
LD BC,0CF00H
L5B2A: LD A,D
LD (L5B93),A
LD HL,(ELMD20)
LD DE,(ELMD22)
PUSH HL
CALL L59CA
POP DE
LD HL,(TEXTST)
LD BC,0FF00H
CALL NC,L59CA
JP C,L4B2C
LD SP,L0000
CALL L4930
XOR A
LD (L5C07),A
LD HL,(ELMD24)
PUSH HL
LD DE,(ELMD20)
PUSH DE
LD HL,(TMPEND)
RST 018H
DB 030H
LD A,004H
RST 018H
DB 003H
LD A,016H
RST 018H
DB 003H
POP BC
PUSH BC
LD DE,(ELMD22)
CALL L59CF
LD A,0B0H
JR NC,L5B7B ; (+008H)
EX DE,HL
ADD HL,BC
DEC HL
EX DE,HL
ADD HL,BC
DEC HL
LD A,0B8H
L5B7B: LD (05B92H),A
DI
PUSH HL
PUSH DE
LD BC,00016H
LD HL,L5B8E
LD DE,0FF80H
PUSH DE
LDIR
RET
L5B8E: POP DE
POP HL
POP BC
LDIR
L5B93: RET
POP BC
LD SP,VRAM
EX DE,HL
PUSH BC
PUSH HL
LD (HL),LSD3
INC HL
LD (HL),LSE4
INC HL
LD (HL),0C9H
RET
L5BA4: LD HL,(VARED)
LD (TMPEND),HL
LD DE,(TEXTED)
LD (05C01H),DE
OR A
SBC HL,DE
LD (L5C03),HL
LD HL,0FF00H
ADD HL,SP
LD (L5C05),HL
LD DE,(VARED)
PUSH HL
OR A
SBC HL,DE
JP C,L4B2C
EX (SP),HL
EX DE,HL
LD BC,(05C03H)
INC BC
LDDR
POP DE
RST 018H
DB 018H
LD A,001H
LD (L5C07),A
RET
L5BDC: CALL L5BA4
RST 018H
DB 02FH
LD A,(ELMD)
RET
L5BE5: LD HL,(VARED)
XOR A
DEC HL
LD (HL),A
DEC HL
LD (HL),A
LD (STRST),HL
DEC HL
LD (HL),A
LD (VARST),HL
DEC HL
LD (HL),A
LD (TEXTED),HL
LD HL,00004H
LD (L5C03),HL
RET
L5C01: NOP
NOP
L5C03: NOP
NOP
L5C05: NOP
NOP
L5C07: NOP
L5C08: PUSH AF
CALL L4146
JP NZ,04B16H
POP AF
RET
L5C11: LD BC,(ELMD20)
PUSH BC
LD HL,(TEXTED)
LD DE,(TEXTST)
OR A
SBC HL,DE
LD L,000H
SBC HL,BC
JP C,L4B2C
LD HL,L0000
LD (L5C01),HL
CALL L4821
LD HL,L0000
LD (L8483),HL
LD HL,(TEXTST)
RST 018H
DB 030H
POP BC
LD HL,(TEXTST)
ADD HL,BC
LD (L5C01),HL
RET
L5C44: LD A,081H
LD B,000H
RST 018H
DB 038H
LD HL,L5C07
LD A,(HL)
OR A
RET Z
LD (HL),000H
LD HL,(L5C01)
LD A,H
OR L
JR NZ,L5C5F ; (+006H)
LD HL,(TEXTST)
CALL L4952
L5C5F: EX DE,HL
LD HL,(TEXTED)
LD BC,(05C03H)
LDIR
EX DE,HL
OR A
SBC HL,DE
EX DE,HL
RST 018H
DB 018H
RET
L5C71: PUSH HL
CALL L46C0
POP HL
CALL L592D
PUSH HL
RST 018H
DB 02FH
CP 002H
JP NZ,04B53H
LD HL,(TEXTST)
RST 018H
DB 032H
POP HL
RET
L5C88: PUSH HL
CALL L46C0
POP HL
CALL L592D
CALL TEST1
DB 02CH
JR Z,L5CB5 ; (+01fH)
PUSH HL
LD A,002H
LD (ELMD),A
LD HL,(TEXTED)
LD DE,(TEXTST)
OR A
SBC HL,DE
LD (ELMD20),HL
LD A,(ELMD1)
CP 00DH
JP Z,04B50H
RST 018H
DB 031H
POP HL
RET
L5CB5: CALL TESTX
DB 041H
PUSH HL
LD A,002H
LD (ZRWX),A
LD A,081H
LD (ZLOG),A
CALL L5902
POP HL
CALL L52ED
CALL L5733
LD B,001H
LD A,081H
RST 018H
DB 038H
RET
L5CD5: XOR A
LD BC,?SETDE
PUSH AF
CALL L6E6F
RST 018H
DB 02DH
POP AF
RST 018H
DB 03FH
RET
L5CE3:
IF BUILD_RFS = 1
JP RFS_DIR3 ; RFS: debug hook for DIR handler
ELSE
NOP ; Original: no hook (3 bytes NOP)
NOP
NOP
ENDIF
PUSH AF
RST 018H
DB 02EH
JP C,L57B4
BIT 1,A
JP Z,057B7H
CALL L58C2
CALL L593A
LD B,A
XOR A
RST 018H
DB 039H
LD A,B
RST 018H
DB 03AH
POP AF
RST 018H
DB 039H
RET
L5D02: CALL L6E6F
RST 018H
DB 02DH
RST 018H
DB 03DH
RET
L5D0A: CALL L6E6F
RST 018H
DB 02DH
CALL L5E70
CALL L6E6F
RST 018H
DB 03EH
RET
L5D18: CALL L5D4E
L5D1B: CALL L5606
RST 018H
DB 042H
CALL L413E
RET Z
CALL L5E73
JR L5D1B ; (-00eH)
L5D29: CALL L5D4E
LD DE,(TMPEND)
CALL L74E8
L5D33: CALL L7436
PUSH HL
PUSH AF
PUSH BC
LD DE,(TMPEND)
RST 018H
DB 041H
POP DE
POP AF
CALL L57F8
POP HL
CALL L413E
RET Z
CALL L5E73
JR L5D33 ; (-01bH)
L5D4E: CALL TEST1
DB 028H
RET NZ
CALL L6E5F
LD A,D
OR E
JP Z,04AF2H
RST 018H
DB 040H
CALL L5E7F
CALL TEST1
DB 02CH
RET
L5D65: LD A,(L849A)
OR A
JP NZ,04B22H
PUSH HL
LD B,000H
RST 018H
DB 02CH
LD (05E1AH),DE
LD (L5E1C),A
LD HL,(TEXTED)
LD DE,(TEXTST)
XOR A
SBC HL,DE
LD (ELMD20),HL
RST 018H
DB 044H
POP HL
CALL L592D
CALL 05E48H
LD A,(ZFLAG1)
BIT 5,A
JP Z,057B7H
PUSH HL
LD HL,(08494H)
ADD HL,SP
LD SP,HL
EX DE,HL
LD HL,L847D
LD BC,(08492H)
LDIR
CALL L5BDC
CP 002H
JP NZ,04B53H
LD (05DB3H),SP
L5DB2: LD SP,L0000
CALL L5C11
CALL L5C44
LD HL,0FFFDH
PUSH HL
PUSH HL
LD A,001H
LD (L849A),A
LD HL,(TEXTST)
JP L40E4
L5DCB: XOR A
LD (L849A),A
POP IX
L5DD1: POP BC
LD A,B
CP 0FFH
JP NZ,04B22H
LD A,C
CP 0FDH
JR Z,L5DF0 ; (+013H)
CP 0FEH
LD HL,00004H
JR Z,L5DEC ; (+008H)
CP 012H
LD HL,00010H
JP NZ,04B22H
L5DEC: ADD HL,SP
LD SP,HL
JR L5DD1 ; (-01fH)
L5DF0: LD DE,(05E1AH)
LD A,(L5E1C)
RST 018H
DB 03AH
LD B,000H
RST 018H
DB 02CH
CALL L5BA4
OR 0FFH
RST 018H
DB 044H
CALL L5C11
CALL L5C44
LD HL,L0000
ADD HL,SP
LD DE,L847D
LD BC,(08492H)
LDIR
LD SP,HL
POP HL
RET
NOP
NOP
L5E1C: NOP
L5E1D: LD DE,L5E37
LD B,005H
CALL L58D8
LD A,031H
CALL L5E2C
LD A,032H
L5E2C: LD (05E3EH),A
LD DE,05E3CH
LD B,00CH
JP L58D8
L5E37: DB "CMT:TRS?:0,$8C,13",0CDH; XCMT device config string
LD A,041H
RET Z
JP L4AEC
L5E4F: XOR A
LD (FILOUT),A
CALL TEST1
DB FDPD
RET NZ
CALL TESTX
DB 050H
CALL L6AC6
LD A,050H
LD (FILOUT),A
CP A
RET
L5E66: LD DE,L849C
LD B,000H
PUSH DE
RST 018H
DB 016H
POP DE
RET
L5E70: CALL HLFTCH
L5E73: CP 02CH
JR L5E84 ; (+00dH)
L5E77: INC HL
L5E78: CALL HLFTCH
L5E7B: CP 028H
JR L5E84 ; (+005H)
L5E7F: CALL HLFTCH
L5E82: CP 029H
L5E84: INC HL
RET Z
JP L4AEC
L5E89: LD A,(DE)
CP 020H
INC DE
JR Z,L5E89 ; (-006H)
RET
L5E90: LD HL,L6112
L5E93: LD BC,00005H
LDIR
RET
L5E99: CALL L7967
LD A,E
OR D
RET Z
BIT 7,D
LD A,07FH
JR Z,L5EAE ; (+009H)
LD A,D
CPL
LD D,A
LD A,E
CPL
LD E,A
INC DE
LD A,0FFH
L5EAE: LD B,091H
L5EB0: DEC B
BIT 7,D
JR NZ,L5EBB ; (+006H)
RL E
RL D
JR L5EB0 ; (-00bH)
L5EBB: LD (HL),B
INC HL
AND D
LD (HL),A
INC HL
LD (HL),E
DEC HL
DEC HL
RET
L5EC4: CP 030H
RET C
CP 03AH
CCF
RET
L5ECB: CP 05FH
RET Z
CP 030H
RET C
CP 05BH
CCF
RET C
CP 03AH
CCF
RET NC
CP 041H
RET
L5EDC: CALL L7967
LD (L6301),A
LD (L6302),A
LD (L6303),A
LD (05F83H),A
LD A,005H
LD (L84CE),A
L5EF0: CALL L5E89
CP 02BH
JR Z,L5EF0 ; (-007H)
CP 02DH
JR NZ,L5F01 ; (+006H)
CALL L5EF0
JP L7972
L5F01: CP 024H
JR NZ,L5F11 ; (+00cH)
PUSH HL
EX DE,HL
RST 018H
DB 014H
EX (SP),HL
CALL L5E99
POP DE
LD A,005H
RET
L5F11: CP 030H
JR NZ,L5F1B ; (+006H)
LD A,(DE)
INC DE
JR L5F11 ; (-008H)
L5F19: LD A,(DE)
INC DE
L5F1B: CP 020H
JR Z,L5F19 ; (-006H)
CP 02EH
JR Z,L5F3E ; (+01bH)
CALL L5EC4
JR C,L5F78 ; (+050H)
SUB 030H
CALL L60AA
CALL L6014
LD A,001H
LD (L6302),A
LD A,(L6301)
INC A
LD (L6301),A
JR L5F19 ; (-025H)
L5F3E: LD A,001H
LD (05F83H),A
LD C,A
L5F44: LD A,(DE)
INC DE
CP 020H
JR Z,L5F44 ; (-006H)
CALL L5EC4
JR C,L5F70 ; (+021H)
INC C
SUB 030H
JR Z,L5F5B ; (+007H)
PUSH AF
LD A,001H
LD (L6302),A
POP AF
L5F5B: PUSH AF
LD A,(L6302)
LD B,A
LD A,(L6301)
ADD A,B
LD (L6301),A
POP AF
CALL L60AA
CALL L6014
JR L5F44 ; (-02cH)
L5F70: DEC C
JR Z,L5F78 ; (+005H)
CALL L5FFE
JR L5F70 ; (-008H)
L5F78: CP 045H
JR Z,L5F89 ; (+00dH)
L5F7C: DEC DE
LD A,(L6303)
OR A
RET NZ
LD A,000H
OR A
RET NZ
LD A,005H
RET
L5F89: LD A,(DE)
CP 02DH
JR Z,L5F97 ; (+009H)
CP 02BH
JR Z,L5F97 ; (+005H)
CALL L5EC4
JR C,L5F7C ; (-01bH)
L5F97: LD A,001H
LD (05F83H),A
PUSH HL
LD HL,L7BB3
LD (05FF7H),HL
LD HL,L0000
LD A,(DE)
INC DE
CP 02BH
JR Z,L5FB8 ; (+00cH)
CP 02DH
JR NZ,L5FBA ; (+00aH)
PUSH HL
LD HL,L7C9E
LD (05FF7H),HL
POP HL
L5FB8: LD A,(DE)
INC DE
L5FBA: SUB 030H
JR C,L5FDA ; (+01cH)
CP 00AH
JR NC,L5FDA ; (+018H)
PUSH DE
CALL L600F
LD E,L
LD D,H
CALL L600F
CALL L600F
CALL L600B
LD E,A
LD D,000H
CALL L600B
POP DE
JR L5FB8 ; (-022H)
L5FDA: LD A,H
OR A
JR NZ,L6011 ; (+033H)
LD A,L
POP HL
PUSH DE
PUSH BC
PUSH HL
LD DE,L84CF
PUSH DE
CALL L5E90
POP HL
LD B,A
INC B
JR L5FF2 ; (+003H)
L5FEF: CALL L60AA
L5FF2: DJNZ L5FEF ; (-005H)
EX DE,HL
POP HL
CALL L0000
POP BC
POP DE
JP L5F7C
L5FFE: PUSH AF
PUSH BC
PUSH DE
LD DE,L610D
CALL L7C9E
POP DE
POP BC
POP AF
RET
L600B: ADD HL,DE
RET NC
JR L6011 ; (+002H)
L600F: ADD HL,HL
RET NC
L6011: JP 04AEFH
L6014: PUSH DE
PUSH HL
LD HL,L84CF
LD E,A
LD D,000H
CALL L5E99
EX DE,HL
POP HL
PUSH BC
CALL L7985
POP BC
POP DE
RET
L6028: LD A,005H
LD (L84CE),A
LD A,(HL)
OR A
JR Z,L6035 ; (+004H)
INC HL
LD A,(HL)
DEC HL
RLCA
L6035: LD A,020H
JR NC,L603E ; (+005H)
CALL L7972
LD A,02DH
L603E: PUSH AF
CALL L61AD
CALL L623A
POP AF
DEC DE
LD (DE),A
RET
L6049: PUSH BC
CALL L7A1C
POP BC
RET
L604F: CALL SKPDE
LD A,(HL)
CP 081H
JP C,L7967
LD A,(HL)
CP 0A0H
RET NC
INC HL
CALL L6086
PUSH HL
LD L,(HL)
LD B,000H
L6064: SRL E
RR D
RR C
RR L
INC A
INC B
CP 0A0H
JR NZ,L6064 ; (-00eH)
L6072: SLA L
RL C
RL D
RL E
DJNZ L6072 ; (-00aH)
LD A,L
POP HL
LD (HL),A
DEC HL
LD (HL),C
DEC HL
LD (HL),D
DEC HL
LD (HL),E
RET
L6086: LD E,(HL)
INC HL
L6088: LD D,(HL)
INC HL
LD C,(HL)
INC HL
RET
L608D: LD A,(HL)
CP 081H
RET C
PUSH DE
PUSH HL
LD DE,L60A5
PUSH DE
CALL L5E93
POP HL
CALL L604F
EX DE,HL
POP HL
CALL L797C
POP DE
RET
L60A5: NOP
NOP
NOP
NOP
NOP
L60AA: PUSH AF
PUSH BC
PUSH DE
LD DE,L610D
CALL L7BB3
POP DE
POP BC
POP AF
RET
L60B7: INC HL
BIT 7,(HL)
JR Z,L60C7 ; (+00bH)
CALL L60C7
LD A,H
CPL
LD H,A
LD A,L
CPL
LD L,A
INC HL
RET
L60C7: DEC HL
LD A,(HL)
CP 091H
JP NC,04AEFH
CP 081H
JR C,L60E5 ; (+013H)
PUSH AF
INC HL
LD A,(HL)
INC HL
LD L,(HL)
LD H,A
POP AF
SET 7,H
L60DB: CP 090H
RET Z
INC A
SRL H
RR L
JR L60DB ; (-00aH)
L60E5: CCF
LD HL,L0000
RET
; ---------------------------------------------------------------------------
; Floating-point constant table — powers of 10 for number formatting
; Each entry is 5 bytes (1 exponent + 4 mantissa) in Sharp MZ FP format
; ---------------------------------------------------------------------------
L60EA: DB 09BH,03EH,0BCH,020H,000H ; FP 10^9 (1000000000)
L60EF: DB 098H,018H,096H,080H,000H ; FP 10^8 (100000000)
DB 094H,074H,024H,000H,000H ; FP 10^7 (10000000)
DB 091H,043H,050H,000H,000H ; FP 10^6 (1000000)
DB 08EH,01CH,040H,000H,000H ; FP 10^5 (100000)
DB 08AH,07AH,000H,000H,000H ; FP 10^4 (10000)
DB 087H,048H,000H,000H,000H ; FP 10^3 (1000)
L610D: DB 084H,020H,000H,000H,000H ; FP 10^2 (100)
L6112: DB 081H,000H,000H,000H,000H ; FP 10^1 (10)
DB 07DH,04CH,0CCH,0CCH,0CDH ; FP 10^-1 (0.1)
L611C: DB 066H,02BH,0CCH,077H,012H ; FP precision guard
L6121: LD HL,(L6304)
LD B,000H
L6126: LD DE,L610D
CALL L6049
JR C,L6134 ; (+006H)
CALL L5FFE
INC B
JR L6126 ; (-00eH)
L6134: LD DE,L6112
CALL L6049
JR NC,L6142 ; (+006H)
CALL L60AA
DEC B
JR L6134 ; (-00eH)
L6142: PUSH BC
CALL L61AD
CALL L623A
POP BC
PUSH DE
EX DE,HL
L614C: LD A,(HL)
OR A
JR Z,L6153 ; (+003H)
INC HL
JR L614C ; (-007H)
L6153: DEC HL
LD A,(HL)
INC HL
CP 030H
JR NZ,L615C ; (+002H)
INC B
DEC HL
L615C: LD A,045H
LD (HL),A
INC HL
LD A,B
LD B,02BH
BIT 7,A
JR Z,L616B ; (+004H)
NEG
LD B,02DH
L616B: LD (HL),B
INC HL
LD (HL),030H
L616F: SUB 00AH
JR C,L6176 ; (+003H)
INC (HL)
JR L616F ; (-007H)
L6176: ADD A,03AH
INC HL
LD (HL),A
INC HL
LD (HL),000H
POP DE
RET
L617F: PUSH HL
CALL L60B7
LD DE,L84A7
PUSH DE
LD B,001H
RST 018H
DB 016H
POP HL
LD A,030H
LD B,005H
L6190: CP (HL)
JR NZ,L6198 ; (+005H)
INC HL
DJNZ L6190 ; (-006H)
JR L61A1 ; (+009H)
L6198: LD A,B
LD (L6301),A
LD A,001H
LD (L6302),A
L61A1: LD A,02EH
LD (L84AC),A
POP HL
CALL L608D
JP L61FD
L61AD: LD (L6304),HL
XOR A
LD (L6301),A
LD (L6302),A
PUSH HL
LD HL,L84A3
LD (HL),0FFH
LD B,021H
LD A,030H
L61C1: INC HL
LD (HL),A
DJNZ L61C1 ; (-004H)
LD A,02EH
LD (L84AC),A
POP HL
LD A,(HL)
OR A
RET Z
LD DE,L60EA
CALL L7A1C
CCF
RET C
LD DE,L611C
CALL L7A1C
RET C
LD DE,L84D7
PUSH DE
CALL L5E93
POP HL
LD A,(HL)
CP 081H
JR C,L61FD ; (+013H)
CP 090H
JP C,L617F
LD IX,L84A4
LD DE,L60EF
CALL L62C4
CALL L62F8
RET NC
L61FD: LD IX,L84AD
L6201: LD DE,L60EA
PUSH BC
PUSH IX
CALL L7BB3
POP IX
POP BC
INC DE
INC DE
INC DE
INC DE
INC DE
CALL L62C4
CALL L62F8
JR C,L6201 ; (-019H)
RET
L621B: LD A,005H
LD (L84CE),A
PUSH HL
LD DE,L84DF
PUSH DE
CALL L5E93
POP HL
CALL L61AD
CALL L6237
POP HL
RET
L6231: LD DE,L84AC
LD (DE),A
DEC DE
RET
L6237: JP C,L6121
L623A: LD HL,(L6304)
LD A,(HL)
OR A
JR Z,L6231 ; (-010H)
LD DE,L84A4
DEC DE
EX DE,HL
LD DE,00001H
L6249: INC HL
LD A,(HL)
CP 02EH
JR NZ,L6254 ; (+005H)
LD DE,L0000
JR L6249 ; (-00bH)
L6254: CP 030H
JR Z,L6249 ; (-00fH)
ADD HL,DE
LD DE,00008H
ADD HL,DE
LD A,(HL)
L625E: LD (HL),030H
CP 035H
JR C,L6273 ; (+00fH)
L6264: DEC HL
LD A,(HL)
CP 02EH
JR Z,L6264 ; (-006H)
INC A
JR Z,L62AD ; (+040H)
LD (HL),A
CP 03AH
JR Z,L625E ; (-014H)
INC HL
L6273: LD DE,L84AC
EX DE,HL
OR A
SBC HL,DE
EX DE,HL
JR C,L6282 ; (+005H)
LD HL,L84AC
JR L6299 ; (+017H)
L6282: DEC HL
LD A,(HL)
CP 02EH
DEC HL
JR Z,L6298 ; (+00fH)
INC HL
CP 030H
JR Z,L6273 ; (-01bH)
PUSH HL
LD DE,L84B5
SBC HL,DE
POP HL
JP NC,L6121
L6298: INC HL
L6299: LD (HL),000H
LD DE,L84A4
L629E: LD A,(DE)
CP 030H
JR NZ,L62A6 ; (+003H)
INC DE
JR L629E ; (-008H)
L62A6: OR A
RET NZ
DEC DE
LD A,030H
LD (DE),A
RET
L62AD: LD HL,L849C
LD DE,L62BE
PUSH BC
LD BC,L0006
LDIR
POP BC
LD DE,L849C
RET
L62BE: LD SP,L2B45
JR NC,L62FB ; (+038H)
NOP
L62C4: LD A,(DE)
CP 07DH
RET Z
L62C8: CALL L7A1C
JR C,L62E0 ; (+013H)
INC (IX+000H)
PUSH IX
PUSH BC
CALL L797C
POP BC
POP IX
LD A,001H
LD (L6302),A
JR L62C8 ; (-018H)
L62E0: INC IX
INC DE
INC DE
INC DE
INC DE
INC DE
LD A,(L6302)
LD B,A
LD A,(L6301)
ADD A,B
LD (L6301),A
CALL L62F8
RET NC
JR L62C4 ; (-034H)
L62F8: LD A,(HL)
OR A
RET Z
L62FB: LD A,(L6301)
CP 009H
RET
L6301: NOP
L6302: NOP
L6303: NOP
L6304: NOP
NOP
L6306: NOP
NOP
L6308: NOP
NOP
L630A: LD HL,(L6308)
PUSH DE
L630E: LD A,(HL)
OR A
JP Z,04AF2H
CALL L63AC
JR Z,L631D ; (+005H)
LD (BC),A
INC BC
INC HL
JR L630E ; (-00fH)
L631D: EX AF,AF'
LD A,(L84CE)
CP 003H
JP NZ,L63D5
EX AF,AF'
CP 021H
JP Z,L6334
CP 026H
JP Z,L635B
JP 04AF5H
L6334: EX (SP),HL
PUSH BC
CALL L6E7E
OR A
LD A,020H
JR Z,L633F ; (+001H)
LD A,(DE)
L633F: POP BC
LD (BC),A
INC BC
L6342: POP HL
INC HL
L6344: LD A,(HL)
OR A
JR Z,L6352 ; (+00aH)
CALL L63AC
JR Z,L6355 ; (+008H)
LD (BC),A
INC BC
INC HL
JR L6344 ; (-00eH)
L6352: LD HL,(L6306)
L6355: LD (L6308),HL
XOR A
LD (BC),A
RET
L635B: LD D,002H
L635D: INC HL
LD A,(HL)
CP 026H
JR Z,L636B ; (+008H)
INC D
CP 020H
JR Z,L635D ; (-00bH)
JP 04AF2H
L636B: EX (SP),HL
LD A,(HL)
CP D
JR C,L6385 ; (+015H)
INC HL
CALL INDRCT
PUSH BC
LD BC,(STRST)
ADD HL,BC
POP BC
L637B: LD A,(HL)
LD (BC),A
INC BC
INC HL
DEC D
JR NZ,L637B ; (-007H)
JP L6342
L6385: LD E,(HL)
INC HL
CALL INDRCT
LD A,E
OR A
JR Z,L63A2 ; (+014H)
PUSH BC
LD BC,(STRST)
ADD HL,BC
POP BC
L6395: LD A,(HL)
LD (BC),A
INC BC
INC HL
DEC E
JR Z,L63A6 ; (+00aH)
DEC D
JR NZ,L6395 ; (-00aH)
JP L6342
L63A2: LD A,020H
LD (BC),A
INC BC
L63A6: DEC D
JR NZ,L63A2 ; (-007H)
JP L6342
L63AC: CALL CHKACC
INC B
LD HL,L2326
DEC HL
RET Z
LD E,A
CP 02AH
JR Z,L63CF ; (+015H)
CALL L65AC
JR Z,L63CF ; (+010H)
CP 02EH
LD E,023H
JR Z,L63CF ; (+00aH)
CP 0C4H
RET NZ
INC HL
LD A,(HL)
OR A
JP Z,04AF2H
RET
L63CF: INC HL
LD A,(HL)
CP E
DEC HL
LD A,(HL)
RET
L63D5: XOR A
LD (0651CH),A
LD (0656CH),A
LD (L6554),A
LD (06512H),A
LD (064CCH),A
LD (064F9H),A
LD (06517H),A
LD (064C5H),A
DEC A
LD (064C2H),A
EX AF,AF'
LD D,000H
CP 023H
JP Z,L6431
CP 02AH
JP Z,L6412
CALL L65AC
JP Z,L6423
CP 02EH
JP Z,L6433
CP 02BH
JP Z,L642C
JP 04AF5H
L6412: LD A,001H
LD (0656CH),A
INC HL
INC D
INC HL
INC D
LD A,(HL)
CALL L65AC
JR NZ,L6433 ; (+012H)
JR L6425 ; (+002H)
L6423: INC HL
INC D
L6425: INC HL
INC D
LD (L6554),A
JR L6433 ; (+007H)
L642C: LD A,001H
LD (0651CH),A
L6431: INC HL
INC D
L6433: EX DE,HL
DEC H
L6435: INC H
LD A,(DE)
INC DE
CP 023H
JR Z,L6435 ; (-007H)
CP 02CH
JR NZ,L6447 ; (+007H)
LD A,001H
LD (064CCH),A
JR L6435 ; (-012H)
L6447: CP 02EH
JR Z,L646E ; (+023H)
CP 02DH
JR NZ,L6457 ; (+008H)
LD A,001H
LD (06512H),A
INC DE
JR L6467 ; (+010H)
L6457: CP 02BH
JR NZ,L6467 ; (+00cH)
LD A,(0651CH)
OR A
JR NZ,L6467 ; (+006H)
LD A,001H
LD (06517H),A
INC DE
L6467: DEC DE
LD A,H
LD (064F9H),A
JR L64A1 ; (+033H)
L646E: LD A,H
LD (064F9H),A
LD H,0FFH
L6474: INC H
LD A,(DE)
INC DE
CP 023H
JR Z,L6474 ; (-007H)
CP 02DH
JR NZ,L6487 ; (+008H)
LD A,001H
LD (06512H),A
INC DE
JR L6497 ; (+010H)
L6487: CP 02BH
JR NZ,L6497 ; (+00cH)
LD A,(0651CH)
OR A
JR NZ,L6497 ; (+006H)
LD A,001H
LD (06517H),A
INC DE
L6497: DEC DE
LD A,H
LD (064C2H),A
JR L64A1 ; (+003H)
L649E: POP DE
JR L64B3 ; (+012H)
L64A1: LD H,004H
PUSH DE
L64A4: LD A,(DE)
INC DE
CP 05EH
JR NZ,L649E ; (-00cH)
DEC H
JR NZ,L64A4 ; (-009H)
POP AF
LD A,001H
LD (064C5H),A
L64B3: POP HL
PUSH DE
INC HL
LD A,(HL)
RES 7,(HL)
DEC HL
LD (06549H),A
LD A,(064F9H)
LD D,A
LD A,000H
LD E,A
LD A,000H
PUSH BC
CALL L65BE
POP BC
LD A,000H
OR A
JR Z,L6511 ; (+041H)
PUSH BC
PUSH DE
LD A,(064F9H)
LD L,A
LD H,000H
ADD HL,DE
LD DE,L849C
LD C,000H
DEC HL
L64DF: LD B,003H
L64E1: LD A,(HL)
CP 020H
JR Z,L64F8 ; (+012H)
INC C
LD (DE),A
INC DE
DEC HL
DJNZ L64E1 ; (-00bH)
LD A,(HL)
CP 020H
JR Z,L64F8 ; (+007H)
LD A,02CH
LD (DE),A
INC DE
INC C
JR L64DF ; (-019H)
L64F8: LD A,000H
CP C
JP C,04AEFH
LD B,C
LD L,A
LD H,000H
POP DE
PUSH DE
ADD HL,DE
LD DE,L849C
DEC HL
L6509: LD A,(DE)
LD (HL),A
DEC HL
INC DE
DJNZ L6509 ; (-006H)
POP DE
POP BC
L6511: LD A,000H
OR A
JR NZ,L6553 ; (+03dH)
LD A,000H
OR A
JR NZ,L6553 ; (+038H)
LD A,000H
OR A
JR NZ,L6548 ; (+028H)
LD A,(06549H)
RLCA
JR NC,L6553 ; (+02dH)
LD A,(DE)
CP 020H
LD H,02DH
JR Z,L6532 ; (+005H)
CP 030H
JP NZ,04AEFH
L6532: PUSH DE
L6533: LD A,(DE)
INC DE
CP 020H
JR Z,L6533 ; (-006H)
CP 030H
JR Z,L6533 ; (-00aH)
OR A
JR NZ,L6541 ; (+001H)
DEC DE
L6541: DEC DE
DEC DE
LD A,H
LD (DE),A
POP DE
JR L6553 ; (+00bH)
L6548: LD A,000H
RLCA
LD H,02BH
JR NC,L6532 ; (-01dH)
LD H,02DH
JR L6532 ; (-021H)
L6553: DB 03EH ; LD A,nn opcode (self-modifying: operand at L6554)
L6554: DB 000H ; Operand byte — patched by LD (L6554),A
OR A
JR Z,L656B ; (+013H)
LD A,(DE)
CP 020H
JR NZ,L656B ; (+00eH)
PUSH DE
L655E: LD A,(DE)
INC DE
CP 020H
JR Z,L655E ; (-006H)
DEC DE
DEC DE
LD A,(L6554)
LD (DE),A
POP DE
L656B: LD A,000H
OR A
JR Z,L657D ; (+00dH)
PUSH DE
L6571: LD A,(DE)
CP 020H
JR NZ,L657C ; (+006H)
LD A,02AH
LD (DE),A
INC DE
JR L6571 ; (-00bH)
L657C: POP DE
L657D: LD A,(DE)
OR A
JR Z,L6586 ; (+005H)
LD (BC),A
INC BC
INC DE
JR L657D ; (-009H)
L6586: LD A,(06517H)
OR A
JR Z,L659A ; (+00eH)
LD A,(06549H)
RLCA
LD A,02BH
L6592: JR NC,L6596 ; (+002H)
LD A,02DH
L6596: LD (BC),A
INC BC
JR L65A8 ; (+00eH)
L659A: LD A,(06512H)
OR A
JR Z,L65A8 ; (+008H)
LD A,(06549H)
RLCA
LD A,020H
JR L6592 ; (-016H)
L65A8: POP HL
JP L6344
L65AC: PUSH HL
LD HL,L0036
BIT 6,(HL)
POP HL
JR NZ,L65B8 ; (+003H)
CP 07DH
RET
L65B8: CP FDPD
RET Z
CP 024H
RET
L65BE: OR A
JP Z,L6649
PUSH DE
LD A,(HL)
OR A
JR Z,L6606 ; (+03fH)
PUSH HL
LD A,D
LD DE,L84D7
PUSH AF
CALL L5E90
POP AF
OR A
JR Z,L65DF ; (+00bH)
LD B,A
LD HL,L84D7
JR L65DD ; (+003H)
L65DA: CALL L60AA
L65DD: DJNZ L65DA ; (-005H)
L65DF: POP HL
LD B,000H
L65E2: LD DE,L84D7
CALL L6049
JR C,L65F0 ; (+006H)
CALL L5FFE
INC B
JR L65E2 ; (-00eH)
L65F0: PUSH HL
LD HL,L84D7
CALL L5FFE
POP HL
L65F8: LD DE,L84D7
CALL L6049
JR NC,L6606 ; (+006H)
CALL L60AA
DEC B
JR L65F8 ; (-00eH)
L6606: POP DE
PUSH BC
CALL L6663
POP BC
PUSH DE
LD A,(DE)
CP 02EH
JR NZ,L6624 ; (+012H)
LD DE,L84AC
DEC DE
LD A,(DE)
CP 031H
POP DE
PUSH DE
JR NZ,L6640 ; (+023H)
EX DE,HL
INC HL
LD (HL),031H
DEC HL
JR L663E ; (+01aH)
L6624: LD A,(DE)
CP 031H
JR NZ,L6640 ; (+017H)
EX DE,HL
INC HL
LD A,(HL)
DEC HL
CP 02EH
LD A,030H
JR Z,L6635 ; (+002H)
LD A,020H
L6635: LD (HL),A
L6636: INC HL
LD A,(HL)
CP 02EH
JR Z,L6636 ; (-006H)
LD (HL),031H
L663E: EX DE,HL
INC B
L6640: LD A,(DE)
INC DE
OR A
JR NZ,L6640 ; (-005H)
DEC DE
JP L615C
L6649: PUSH DE
CALL L6663
POP AF
OR A
RET NZ
PUSH HL
LD HL,L84AC
DEC HL
LD A,030H
CP (HL)
L6658: JP NZ,04AEFH
DEC HL
LD A,020H
CP (HL)
JR NZ,L6658 ; (-009H)
POP HL
RET
L6663: PUSH DE
CALL L61AD
JP C,04AEFH
POP HL
PUSH HL
LD H,000H
INC L
JR Z,L6672 ; (+001H)
DEC L
L6672: LD DE,L84AD
ADD HL,DE
LD A,(HL)
LD (HL),000H
LD DE,L3036
CP 035H
JR C,L668F ; (+00fH)
L6680: DEC HL
LD A,(HL)
CP 02EH
JR Z,L6680 ; (-006H)
INC A
JP Z,04AEFH
LD (HL),A
CP 03AH
JR Z,0667AH ; (-015H)
L668F: LD HL,KEYBM1
LD DE,L2000
L6695: LD (HL),D
INC HL
DEC E
JR NZ,L6695 ; (-005H)
POP HL
PUSH HL
LD E,H
LD D,000H
LD HL,KEYBUF
ADD HL,DE
PUSH HL
LD HL,L84A3
LD (HL),020H
INC HL
LD D,007H
L66AC: LD A,(HL)
CP 030H
JR NZ,L66B7 ; (+006H)
LD (HL),020H
INC HL
DEC D
JR NZ,L66AC ; (-00bH)
L66B7: POP HL
PUSH HL
LD B,E
LD A,B
OR A
JR Z,L66D5 ; (+017H)
LD DE,L84AC
L66C1: DEC HL
DEC DE
LD A,(DE)
LD (HL),A
CP 020H
JR Z,L66D5 ; (+00cH)
DJNZ L66C1 ; (-00aH)
DEC DE
LD A,(DE)
CP 020H
JR Z,L66D5 ; (+004H)
INC A
JP NZ,04AEFH
L66D5: POP HL
POP DE
INC E
JR Z,L66E9 ; (+00fH)
LD B,E
LD DE,L84AD
LD (HL),02EH
L66E0: INC HL
DEC B
JR Z,L66E9 ; (+005H)
LD A,(DE)
INC DE
LD (HL),A
JR L66E0 ; (-009H)
L66E9: LD (HL),000H
LD DE,KEYBUF
RET
L66EF: PUSH DE
PUSH BC
LD C,000H
DEC DE
L66F4: INC DE
L66F5: CALL L687B
OR A
JR Z,L672C ; (+031H)
CP 0FFH
JR Z,L6730 ; (+031H)
CP 060H
JP NC,L4AEC
CP 020H
JR C,L66F4 ; (-014H)
LD IX,L66F5
PUSH IX
CP 022H
JR Z,L674B ; (+039H)
CP 027H
JR Z,L673E ; (+028H)
CP 03FH
JR Z,L6737 ; (+01dH)
CP 02EH
JP Z,L689E
CP 024H
JP Z,L68B8
CALL L5EC4
JR C,L6773 ; (+04aH)
JP L6885
L672C: LD (HL),A
POP BC
POP DE
RET
L6730: LD (HL),LSE4
CALL L6757
JR L66F5 ; (-042H)
L6737: LD A,08FH
CALL L6756
JR L67B4 ; (+076H)
L673E: LD (HL),03AH
CALL L6757
LD (HL),027H
CALL L6758
JP L681B
L674B: LD (HL),A
CALL L6757
L674F: LD A,(DE)
OR A
RET Z
CP 022H
JR NZ,L674B ; (-00bH)
L6756: LD (HL),A
L6757: INC DE
L6758: INC HL
L6759: INC C
RET NZ
JP 04B01H
L675E: POP BC
LD A,(DE)
CALL L5ECB
JR C,L6756 ; (-00fH)
L6765: CALL L6756
LD A,(DE)
CP 024H
JR Z,L6756 ; (-017H)
CALL L5EC4
RET C
JR L6765 ; (-00eH)
L6773: PUSH BC
LD BC,STMTWORDTBL
CALL L682A
JR NC,L67AA ; (+02eH)
LD BC,EXTWORDTBL
CALL L682A
LD C,0FEH
JR NC,L6790 ; (+00aH)
LD BC,FUNCWORDTBL
CALL L682A
LD C,0FFH
JR C,L675E ; (-032H)
L6790: LD (HL),C
INC HL
LD (HL),A
POP BC
CALL L6759
CALL L6758
CP 0B4H
RET NZ
CALL L687B
CP 03DH
RET NZ
LD (HL),QDPC
CALL L6757
JR L67F0 ; (+046H)
L67AA: POP BC
CP 0DFH
DB 020H
LD (BC),A
LD (HL),0A8H
CALL L6758
L67B4: CP 097H
JR Z,L681B ; (+063H)
CP 094H
JR Z,L681B ; (+05fH)
CP 0C2H
JR Z,L6811 ; (+051H)
CP LSE2
JR Z,L67F0 ; (+02cH)
CP LSE0
RET NC
PUSH AF
CALL L687B
CP 02FH
JR NZ,L67DC ; (+00dH)
LD (HL),FDPD
CALL L6757
CALL L6A1D
CALL L6756
JR L67EC ; (+010H)
L67DC: CP 023H
JR NZ,L67EC ; (+00cH)
CALL L6756
CALL L6A1D
CALL L5EC4
CALL NC,L6885
L67EC: POP AF
CP 08DH
RET NC
L67F0: CALL L687B
CP 022H
JR NZ,L67FC ; (+005H)
CALL L674B
JR L67F0 ; (-00cH)
L67FC: CP 02CH
RET C
CP 02FH
JR C,L680C ; (+009H)
CALL L5EC4
RET C
CALL L68AF
JR L67F0 ; (-01cH)
L680C: CALL L6756
JR L67F0 ; (-021H)
L6811: DEC HL
LD (HL),03AH ; Store ':' at previous position
INC HL
LD (HL),A
CALL L6758
JR L67F0 ; (-02bH)
L681B: LD A,(DE)
CALL L4141
RET Z
CALL L6756
CP 022H
CALL Z,L674F
JR L681B ; (-00fH)
L682A: PUSH HL
PUSH DE
LD H,B
LD L,C
LD B,07FH
L6830: POP DE
PUSH DE
INC B
LD A,(HL)
CP 0FFH
JR NZ,L683C ; (+004H)
POP DE
POP HL
SCF
RET
L683C: CP 02EH
JR NZ,L6849 ; (+009H)
INC HL
DEC DE
LD A,(DE)
INC DE
CALL L5ECB
JR NC,L6868 ; (+01fH)
L6849: LD A,(DE)
CP 020H
JR NZ,L685A ; (+00cH)
LD A,(HL)
AND 07FH
SUB 041H
CP 01AH
JR C,L6868 ; (+011H)
CALL L6A1C
L685A: LD C,(HL)
INC HL
INC DE
CP 02EH
JR Z,L6870 ; (+00fH)
SUB C
JR Z,L6849 ; (-01bH)
CP 080H
JR Z,L6876 ; (+00eH)
L6868: DEC HL
L6869: BIT 7,(HL)
INC HL
JR Z,L6869 ; (-005H)
JR L6830 ; (-040H)
L6870: LD A,B
CP 0E8H
JR NC,L6868 ; (-00dH)
CCF
L6876: POP HL
POP HL
LD (HL),B
LD A,B
RET
L687B: LD A,(DE)
CP 020H
RET NZ
LD (HL),A
CALL L6757
JR L687B ; (-00aH)
L6885: EX AF,AF'
PUSH DE
CALL L6A1C
POP DE
CALL L5EC4
JR NC,L689E ; (+00eH)
CP 02EH
JR Z,L689E ; (+00aH)
CP 045H
JR Z,L689E ; (+006H)
EX AF,AF'
SUB 02FH
JP L689E
L689E: PUSH BC
LD (HL),015H
INC HL
PUSH HL
CALL L5EDC
POP HL
LD BC,00005H
ADD HL,BC
LD A,006H
JR L68D2 ; (+023H)
L68AF: PUSH BC
CALL L6A11
LD (HL),00BH
INC HL
JR L68CC ; (+014H)
L68B8: LD (HL),A
INC DE
LD A,(DE)
RST 018H
DB 015H
JP C,L6758
PUSH BC
LD (HL),011H
INC HL
PUSH HL
EX DE,HL
RST 018H
DB 014H
LD B,D
LD C,E
EX DE,HL
POP HL
L68CC: LD A,003H
LD (HL),C
INC HL
LD (HL),B
INC HL
L68D2: POP BC
ADD A,C
JP C,04B01H
LD C,A
L68D8: DEC DE
LD A,(DE)
CP 020H
JR Z,L68D8 ; (-006H)
INC DE
RET
L68E0: PUSH HL
PUSH DE
PUSH BC
EXX
LD B,000H
EXX
LD C,000H
L68E9: LD A,(HL)
OR A
JR Z,L691D ; (+030H)
LD BC,L68E9
PUSH BC
CP 027H
JR Z,L6937 ; (+042H)
INC HL
LD BC,STMTWORDTBL
CP 020H
JR C,L695F ; (+062H)
CP 022H
JR Z,L6948 ; (+047H)
CP 03AH
JR Z,L6955 ; (+050H)
CP 097H
JR Z,L6933 ; (+02aH)
CP 094H
JR Z,L6933 ; (+026H)
CP LSE4
JR Z,L6922 ; (+011H)
CP 0FEH
JR NC,L6927 ; (+012H)
CP 080H
JP NC,L69A3
JP L69C0
L691D: LD (DE),A
POP BC
POP DE
POP HL
RET
L6922: LD A,0FFH
JP L69C0
L6927: LD BC,FUNCWORDTBL
JR NZ,L692F ; (+003H)
LD BC,EXTWORDTBL
L692F: LD A,(HL)
INC HL
JR L69A3 ; (+070H)
L6933: CALL L69A3
RET Z
L6937: LD A,(HL)
CALL L4141
RET Z
CALL L69C0
LD A,(HL)
INC HL
CP 022H
CALL Z,L694B
JR L6937 ; (-011H)
L6948: CALL L69C0
L694B: LD A,(HL)
OR A
RET Z
INC HL
CP 022H
JR NZ,L6948 ; (-00bH)
JR L69C0 ; (+06bH)
L6955: LD (DE),A
LD A,(HL)
CP 0C2H
RET Z
CP 027H
RET Z
JR L69C3 ; (+064H)
L695F: CP 015H
JR Z,L6993 ; (+030H)
CP 00BH
JR NC,L696C ; (+005H)
DEC A
OR 030H
JR L69C0 ; (+054H)
L696C: PUSH DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
PUSH HL
CP 012H
JR Z,L6982 ; (+00cH)
CP 00CH
JR C,L6982 ; (+008H)
JR NZ,L69CF ; (+053H)
EX DE,HL
INC HL
INC HL
LD E,(HL)
INC HL
LD D,(HL)
L6982: EX DE,HL
CALL L5E66
LD B,D
LD C,E
POP HL
POP DE
L698A: LD A,(BC)
OR A
RET Z
CALL L69C0
INC BC
JR L698A ; (-009H)
L6993: PUSH HL
PUSH DE
CALL L621B
LD B,D
LD C,E
POP DE
POP HL
INC HL
INC HL
INC HL
INC HL
INC HL
JR L698A ; (-019H)
L69A3: CP 080H
JR Z,L69B1 ; (+00aH)
EX AF,AF'
L69A8: LD A,(BC)
RLCA
INC BC
JR NC,L69A8 ; (-005H)
EX AF,AF'
DEC A
JR L69A3 ; (-00eH)
L69B1: LD A,(BC)
BIT 7,A
JR NZ,L69BE ; (+008H)
CP 02EH
CALL NZ,L69C0
INC BC
JR L69B1 ; (-00dH)
L69BE: AND 07FH
L69C0: LD (DE),A
OR A
RET Z
L69C3: INC DE
EXX
INC B
EXX
RET NZ
XOR A
LD (DE),A
DEC DE
EXX
DEC B
EXX
RET
L69CF: LD A,024H
EX AF,AF'
EX DE,HL
CALL L69E0
LD B,D
LD C,E
POP HL
POP DE
EX AF,AF'
CALL L69C0
JR L698A ; (-056H)
L69E0: LD DE,L84A8
PUSH DE
LD A,H
CALL L69F9
LD A,L
CALL L69F9
XOR A
LD (DE),A
POP DE
LD B,003H
L69F1: LD A,(DE)
CP 030H
RET NZ
INC DE
DJNZ L69F1 ; (-007H)
RET
L69F9: PUSH AF
RRCA
RRCA
RRCA
RRCA
AND 00FH
CALL L6A06
POP AF
AND 00FH
L6A06: ADD A,030H
CP 03AH
JR C,L6A0E ; (+002H)
ADD A,007H
L6A0E: LD (DE),A
INC DE
RET
L6A11: PUSH HL
EX DE,HL
RST 018H
DB 013H
LD B,D
LD C,E
EX DE,HL
POP HL
JP L68D8
L6A1C: INC DE
L6A1D: LD A,(DE)
CP 020H
JR Z,L6A1C ; (-006H)
RET
L6A23: LD C,(HL)
L6A24: CALL L6A2C
XOR A
LD (LPOSB),A
RET
L6A2C: LD A,(L004D)
OR A
JP NZ,L4B3C
CALL TEST1
DB 047H
JR Z,L6A7C ; (+043H)
CALL TESTX
DB 054H
LD A,001H
LD (PNMODE),A
CALL TEST1
DB 04EH
JR Z,L6A52 ; (+00aH)
CALL TEST1
DB 04CH
JR Z,L6A52 ; (+004H)
CALL TESTX
DB 053H
L6A52: LD (L6A23),A
CALL 05E48H
CALL L6A74
L6A5B: LD A,001H
RST 018H
DB 006H
LD A,(L6A23)
CP 04EH
RET Z
CP 04CH
LD A,00BH
JR Z,L6A71 ; (+006H)
LD A,009H
RST 018H
DB 006H
RST 018H
DB 006H
L6A71: RST 018H
DB 006H
RET
L6A74: LD A,00AH
RST 018H
DB 006H
LD A,003H
JR L6A71 ; (-00bH)
L6A7C: INC HL
CALL 05E48H
LD A,002H
LD (PNMODE),A
JR L6A71 ; (-016H)
L6A87: CALL L6AC6
CALL L6E5F
LD A,E
OR A
RET Z
CP 0ECH
JR NC,L6A99 ; (+005H)
CP 015H
JP NC,04AF2H
L6A99: CALL 05E48H
BIT 7,E
JR NZ,L6AA8 ; (+008H)
L6AA0: LD A,00AH
RST 018H
DB 006H
DEC E
JR NZ,L6AA0 ; (-007H)
RET
L6AA8: LD A,003H
RST 018H
DB 006H
INC E
JR NZ,L6AA8 ; (-007H)
RET
L6AB0: PUSH HL
LD HL,L03E7
JR L6ABA ; (+004H)
L6AB6: PUSH HL
LD HL,L01E0
L6ABA: PUSH HL
ADD HL,DE
POP HL
JR C,L6AC4 ; (+005H)
SBC HL,DE
JP C,04AF2H
L6AC4: POP HL
RET
L6AC6: LD B,001H
JR L6ACC ; (+002H)
L6ACA: LD B,002H
L6ACC: LD A,(PNMODE)
CP B
RET Z
JP L4B3C
L6AD4: LD C,044H
LD DE,04A0EH
LD DE,04D0EH
LD DE,0520EH
CALL L6ACA
LD A,C
LD (06B26H),A
CP 04DH
JR NC,L6B0C ; (+022H)
CALL TEST1
DB 025H
JR NZ,L6B0C ; (+01cH)
CALL L6E4B
LD A,E
DEC A
CP 010H
JP NC,04AF2H
DEC DE
LD A,04CH
RST 018H
DB 006H
CALL L6DE2
CALL L6B68
CALL L413E
RET Z
CALL L5E73
L6B0C: CALL L6E5F
CALL L5E73
CALL L6AB6
PUSH DE
CALL L6E5F
CP 02CH
JR Z,L6B20 ; (+003H)
CALL 05E48H
L6B20: CALL L6AB0
POP BC
PUSH DE
LD A,000H
RST 018H
DB 006H
LD E,C
LD D,B
CALL L6DE2
CALL L6B6C
POP DE
CALL L6DE2
CALL L6B68
CALL L413E
RET Z
INC HL
JR L6B0C ; (-033H)
L6B3F: CALL L6E4B
LD A,E
CP 004H
JP NC,04AF2H
CALL 05E48H
LD A,(PNMODE)
CP 002H
JR Z,L6B5F ; (+00dH)
CALL L6A74
LD A,002H
RST 018H
DB 006H
CALL L6B5F
JP L6A5B
L6B5F: LD A,043H
RST 018H
DB 006H
LD A,E
OR 030H
RST 018H
DB 006H
L6B68: LD A,00DH
JR L6B6E ; (+002H)
L6B6C: LD A,02CH
L6B6E: RST 018H
DB 006H
RET
L6B71: CALL L6ACA
CALL 05E48H
LD A,048H
JR L6B6E ; (-00dH)
L6B7B: CALL L6ACA
CALL 05E48H
LD A,049H
JR L6B6E ; (-017H)
L6B85: CALL L6ACA
CALL TEST1
DB 05BH
JR NZ,L6BC6 ; (+038H)
CALL L6E4B
CP 040H
JP NC,04AF2H
PUSH DE
CALL L5E70
CALL L6E4B
CP 004H
JP NC,04AF2H
PUSH DE
CALL TESTX
DB 05DH
POP BC
POP DE
PUSH BC
LD A,053H
RST 018H
DB 006H
CALL L6DE2
CALL L6B6C
POP DE
LD A,051H
RST 018H
DB 006H
CALL L6DE2
CALL L6B68
CALL L413E
RET Z
CALL L5E73
L6BC6: CALL L6E6F
CALL L413E
JR Z,L6BD2 ; (+004H)
CALL L5E73
DEC HL
L6BD2: LD A,B
OR A
JR Z,L6BE3 ; (+00dH)
LD A,050H
RST 018H
DB 006H
L6BDA: LD A,(DE)
RST 018H
DB 006H
INC DE
DJNZ L6BDA ; (-006H)
CALL L6B68
L6BE3: CALL L413E
RET Z
INC HL
JR L6BC6 ; (-024H)
L6BEA: CALL L6ACA
CALL L6E4B
CP 002H
JP NC,04AF2H
PUSH AF
CALL L5E70
CALL L6E5F
PUSH DE
CALL L5E73
CALL L6E4B
OR A
JP Z,04AF2H
CALL 05E48H
LD A,058H
RST 018H
DB 006H
POP BC
POP AF
PUSH DE
PUSH BC
OR 030H
RST 018H
DB 006H
CALL L6B6C
POP DE
CALL L6AB0
CALL L6DE2
CALL L6B6C
POP DE
CALL L6DE2
JP L6B68
L6C2A: CALL L6ACA
PUSH HL
LD DE,L0000
LD HL,L6DC4
CALL L5E99
LD DE,L0168
LD HL,L6DC9
CALL L5E99
LD HL,L610D
LD DE,L6DCE
CALL L5E93
POP HL
CALL L6E8A
CALL L5E73
PUSH HL
LD HL,L6DB5
EX DE,HL
CALL L5E93
POP HL
CALL L6E8A
CALL L5E73
PUSH HL
LD HL,L6DBA
EX DE,HL
CALL L5E93
POP HL
CALL L6E8A
PUSH HL
PUSH AF
LD HL,L6DBF
EX DE,HL
CALL L5E93
LD A,(06DC0H)
RLCA
JP C,04AF2H
POP AF
CP 02CH
JR NZ,L6CBA ; (+03aH)
POP HL
INC HL
CALL L6E8A
PUSH HL
PUSH AF
LD HL,L6DC4
EX DE,HL
CALL L5E93
POP AF
CP 02CH
JR NZ,L6CBA ; (+027H)
POP HL
INC HL
CALL L6E8A
PUSH HL
PUSH AF
LD HL,L6DC9
EX DE,HL
CALL L5E93
POP AF
CP 02CH
JR NZ,L6CBA ; (+014H)
POP HL
INC HL
CALL L6E8A
PUSH HL
LD HL,L6DCE
EX DE,HL
CALL L5E93
LD A,(06DCFH)
RLCA
JP C,04AF2H
L6CBA: POP HL
CALL 05E48H
PUSH HL
LD HL,L6DC9
LD DE,L6DC4
LD A,(L6DCE)
OR A
CALL NZ,L7A1C
JP C,04AF2H
CALL L6D6B
LD HL,L6DD3
LD (06D43H),HL
LD HL,L6DD8
LD (06D4EH),HL
CALL 06D3FH
LD A,(L6DCE)
OR A
JR Z,L6D19 ; (+032H)
L6CE7: LD HL,L6DC4
LD DE,L6DCE
CALL L7985
LD DE,L6DC9
CALL L7A1C
JR NC,L6D04 ; (+00cH)
CALL L6D6B
CALL L6D3C
RST 018H
DB 00EH
JR NZ,L6CE7 ; (-01bH)
POP HL
RET
L6D04: CALL L6D0C
CALL L6D3C
POP HL
RET
L6D0C: LD HL,L6DC9
LD DE,L6DC4
LD BC,00005H
LDIR
JR L6D6B ; (+052H)
L6D19: LD HL,L6DB5
LD (06D43H),HL
LD HL,L6DBA
LD (06D4EH),HL
CALL L6D3C
CALL L6D0C
LD HL,L6DD3
LD (06D43H),HL
LD HL,L6DD8
LD (06D4EH),HL
CALL L6D3C
POP HL
RET
L6D3C: LD A,044H
LD HL,L4D3E
PUSH AF
LD HL,L6DB5
CALL L60B7
PUSH HL
EX DE,HL
CALL L6AB0
LD HL,L6DBA
CALL L60B7
PUSH HL
EX DE,HL
CALL L6AB0
POP HL
POP DE
POP AF
RST 018H
DB 006H
PUSH HL
CALL L6DE2
CALL L6B6C
POP DE
CALL L6DE2
JP L6B68
L6D6B: LD DE,(INTFAC)
LD HL,L6DC4
CALL L5E93
LD HL,(INTFAC)
CALL L817C
CALL L7FC2
LD DE,L6DBF
CALL L7BB3
LD DE,L6DB5
CALL L7985
LD DE,L6DD3
CALL L5E93
LD DE,(INTFAC)
LD HL,L6DC4
CALL L5E93
LD HL,(INTFAC)
CALL L817C
CALL L7FD2
LD DE,L6DBF
CALL L7BB3
LD DE,L6DBA
CALL L7985
LD DE,L6DD8
JP L5E93
L6DB5: DS 5, 000H
L6DBA: DS 5, 000H
L6DBF: DS 5, 000H
L6DC4: DS 5, 000H
L6DC9: DS 5, 000H
L6DCE: DS 5, 000H
L6DD3: DS 5, 000H
L6DD8: DS 10, 000H
L6DE2: PUSH AF
PUSH HL
LD HL,(INTFAC)
CALL L5E99
CALL L6028
RST 018H
DB 017H
L6DEF: LD A,(DE)
RST 018H
DB 006H
INC DE
DJNZ L6DEF ; (-006H)
POP HL
POP AF
RET
L6DF8: CALL L6AC6
CALL 05E48H
LD A,004H
RST 018H
DB 006H
RET
L6E03: CALL L6AC6
CALL L6E5F
LD A,E
OR A
JP Z,04AF2H
CP 049H
JP NC,04AF2H
CALL 05E48H
LD A,009H
RST 018H
DB 006H
RST 018H
DB 006H
CALL L6DE2
JP L6B68
L6E22: CP 09DH
JR Z,L6E31 ; (+00bH)
CP 0A1H
JP NZ,L4AEC
XOR A
L6E2C: LD (L004D),A
INC HL
RET
L6E31: CALL L6AC6
LD A,(L6A23)
CP 04EH
JP NZ,L4B3C
LD A,(L004D)
OR A
JR NZ,L6E2C ; (-016H)
CALL L5285
LD A,016H
RST 018H
DB 003H
JR L6E2C ; (-01fH)
L6E4B: CALL L6E5F
L6E4E: LD A,D
OR A
JP NZ,04AF2H
LD A,E
RET
L6E55: CALL L6E9C
DEC DE
DEC DE
DEC DE
DEC DE
DEC DE
JR L6E62 ; (+003H)
L6E5F: CALL L6E8A
L6E62: PUSH AF
PUSH HL
EX DE,HL
CALL L791F
CALL L60B7
EX DE,HL
POP HL
POP AF
RET
L6E6F: CALL L6E8A
PUSH AF
CALL L7916
PUSH HL
EX DE,HL
CALL L6E7E
POP HL
POP AF
RET
L6E7E: LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD HL,(STRST)
ADD HL,DE
EX DE,HL
LD A,B
RET
L6E8A: LD DE,(VARED)
LD (TMPEND),DE
L6E92: LD DE,(INTFAC)
PUSH DE
CALL L6E9C
POP DE
RET
L6E9C: PUSH DE
LD DE,(TMPEND)
CALL L74E8
POP DE
CALL L6EC0
L6EA8: CP 0EAH
RET NZ
LD A,(L84CE)
PUSH AF
INC HL
CALL L6EC0
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL 07E65H
POP HL
POP AF
JR L6EA8 ; (-018H)
L6EC0: CALL L6EDB
L6EC3: CP 0EBH
RET NZ
LD A,(L84CE)
PUSH AF
INC HL
CALL L6EDB
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL 07E62H
POP HL
POP AF
JR L6EC3 ; (-018H)
L6EDB: CALL L6EF6
L6EDE: CP 0ECH
RET NZ
LD A,(L84CE)
PUSH AF
INC HL
CALL L6EF6
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L7E5F
POP HL
POP AF
JR L6EDE ; (-018H)
L6EF6: CALL TEST1
DB 0EDH
JR NZ,L6F0B ; (+00fH)
CALL L6F0B
PUSH AF
PUSH HL
LD HL,0FFFBH
ADD HL,DE
CALL L7E4F
POP HL
POP AF
RET
L6F0B: CALL L6F75
L6F0E: CP 0EEH
RET C
PUSH AF
LD A,(L84CE)
PUSH AF
INC HL
CALL L6F75
POP BC
EX (SP),HL
PUSH AF
PUSH HL
CALL L74C5
CALL L7A1C
EX AF,AF'
POP AF
CP 0F6H
JR NZ,L6F48 ; (+01eH)
EX AF,AF'
JR C,L6F43 ; (+016H)
L6F2D: LD BC,L0000
L6F30: LD (HL),C
INC HL
LD (HL),B
INC HL
XOR A
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
LD A,005H
LD (L84CE),A
POP AF
POP HL
JR L6F0E ; (-035H)
L6F43: LD BC,08081H
JR L6F30 ; (-018H)
L6F48: CP QDPD
JR NZ,L6F53 ; (+007H)
EX AF,AF'
JR Z,L6F2D ; (-022H)
JR C,L6F2D ; (-024H)
JR L6F43 ; (-010H)
L6F53: CP QDPC
JR NZ,L6F5C ; (+005H)
EX AF,AF'
JR Z,L6F43 ; (-017H)
JR L6F2D ; (-02fH)
L6F5C: CP QDPA
JR C,L6F65 ; (+005H)
EX AF,AF'
JR NC,L6F43 ; (-020H)
JR L6F2D ; (-038H)
L6F65: CP 0F0H
JR C,L6F70 ; (+007H)
EX AF,AF'
JR Z,L6F43 ; (-029H)
JR C,L6F43 ; (-02bH)
JR L6F2D ; (-043H)
L6F70: EX AF,AF'
JR Z,L6F2D ; (-046H)
JR L6F43 ; (-032H)
L6F75: CALL L6FA0
L6F78: CP 0F7H
RET C
LD A,(L84CE)
PUSH AF
INC HL
JR Z,L6F92 ; (+010H)
CALL L6FA0
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L797C
L6F8E: POP HL
POP AF
JR L6F78 ; (-01aH)
L6F92: CALL L6FA0
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L7985
JR L6F8E ; (-012H)
L6FA0: CALL L6FCB
L6FA3: CP FDPB
RET C
LD A,(L84CE)
PUSH AF
INC HL
JR Z,L6FBD ; (+010H)
CALL L6FCB
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L7EBB
L6FB9: POP HL
POP AF
JR L6FA3 ; (-01aH)
L6FBD: CALL L6FCB
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L7EDA
JR L6FB9 ; (-012H)
L6FCB: CALL L6FF6
L6FCE: CP FDPD
RET C
LD A,(L84CE)
PUSH AF
INC HL
JR Z,L6FE8 ; (+010H)
CALL L6FF6
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L7BB3
L6FE4: POP HL
POP AF
JR L6FCE ; (-01aH)
L6FE8: CALL L6FF6
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L7C9E
JR L6FE4 ; (-012H)
L6FF6: CALL TEST1
DB 0F7H
JR Z,L6FF6 ; (-006H)
CP FDPA
JR NZ,L7006 ; (+006H)
INC HL
CALL L7006
JR L702F ; (+029H)
L7006: CALL L703B
L7009: CP 0FDH
RET NZ
LD A,(L84CE)
PUSH AF
INC HL
CALL L7021
POP BC
PUSH AF
PUSH HL
CALL L74C5
CALL L7DD3
POP HL
POP AF
JR L7009 ; (-018H)
L7021: CALL TEST1
DB 0F7H
JR Z,L7021 ; (-006H)
CP FDPA
JR NZ,L703B ; (+010H)
INC HL
CALL L703B
L702F: PUSH AF
PUSH HL
LD HL,0FFFBH
ADD HL,DE
CALL L796F
POP HL
POP AF
RET
L703B: CALL L413E
JP Z,L4AEC
CALL L7047
JP HLFTCH
L7047: PUSH HL
LD HL,(MEMLMT)
SCF
SBC HL,DE
JP C,04AFBH
POP HL
CP LSE4
JR Z,L7064 ; (+00eH)
CP 020H
JR NC,L70A4 ; (+04aH)
L705A: INC HL
CP 015H
JR C,L7073 ; (+014H)
CALL L5E93
JR L706D ; (+009H)
L7064: INC HL
PUSH HL
LD HL,0818FH
CALL L5E93
POP HL
L706D: LD A,005H
L706F: LD (L84CE),A
RET
L7073: CP 00BH
JR NC,L7080 ; (+009H)
DEC A
JP M,L4AEC
LD B,000H
LD C,A
JR L7091 ; (+011H)
L7080: LD C,(HL)
INC HL
LD B,(HL)
INC HL
CP 00CH
JR NZ,L7091 ; (+009H)
INC BC
INC BC
LD A,(BC)
INC BC
EX AF,AF'
LD A,(BC)
LD B,A
EX AF,AF'
LD C,A
L7091: PUSH HL
PUSH DE
EX DE,HL
LD E,C
LD D,B
CALL L5E99
POP DE
POP HL
LD A,005H
L709D: INC DE
INC DE
INC DE
INC DE
INC DE
JR L706F ; (-035H)
L70A4: CP 022H
JR NZ,L70D7 ; (+02fH)
INC HL
PUSH HL
CALL L74D0
EX (SP),HL
PUSH HL
LD HL,(TMPEND)
PUSH BC
LD BC,(STRST)
OR A
SBC HL,BC
POP BC
EX DE,HL
LD (HL),B
INC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
INC HL
INC HL
POP DE
PUSH HL
LD HL,(TMPEND)
CALL L74DC
LD (TMPEND),HL
POP DE
POP HL
LD A,003H
LD (L84CE),A
RET
L70D7: CP 028H
JR NZ,L70E2 ; (+007H)
INC HL
CALL L6E9C
JP L5E82
L70E2: OR A
JP P,L76F5
CP 0E7H
INC HL
JR NZ,L70F0 ; (+005H)
LD A,0A8H
PUSH AF
JR L7125 ; (+035H)
L70F0: CP 0FFH
JP NZ,L4AEC
LD A,(HL)
INC HL
CP 0A0H
JP Z,L71A5
CP 0C8H
JP NC,L4AEC
CP 0BAH
JR NC,L7155 ; (+050H)
PUSH AF
CP 0B3H
JR NC,L7146 ; (+03cH)
LD B,003H
CP 0AAH
JR Z,L7125 ; (+015H)
CP 0ABH
JR NC,L7125 ; (+011H)
LD B,005H
CP 088H
JR Z,L7140 ; (+026H)
CP 089H
JR NZ,L7125 ; (+007H)
CALL TEST1
DB 040H
LD (081A8H),A
L7125: CALL L5E78
L7128: PUSH BC
CALL L6E9C
CALL L5E82
POP AF
CALL L7912
L7133: POP AF
PUSH DE
PUSH HL
LD HL,0FFFBH
ADD HL,DE
CALL L7155
POP HL
POP DE
RET
L7140: CALL TEST1
DB 028H
JR Z,L7128 ; (-01eH)
L7146: LD A,005H
LD (L84CE),A
PUSH HL
LD HL,L6112
CALL L5E93
POP HL
JR L7133 ; (-022H)
L7155: PUSH HL
ADD A,A
LD L,A
LD H,000H
LD BC,L450A
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
EX (SP),HL
RET
L7164: EX DE,HL
LD HL,0FDF1H
ADD HL,SP
LD BC,(TMPEND)
OR A
SBC HL,BC
EX DE,HL
JR NC,L7186 ; (+013H)
XOR A
JR L7183 ; (+00dH)
L7176: LD A,(L0054)
JR L7183 ; (+008H)
L717B: LD A,(00055H)
JR L7183 ; (+003H)
L7180: LD A,(L8485)
L7183: LD E,A
LD D,000H
L7186: LD A,005H
LD (L84CE),A
JP L5E99
L718E: LD DE,(08487H)
CALL L5E99
INC HL
BIT 7,(HL)
DEC HL
RET Z
LD DE,L71A0
JP L7985
L71A0: DB 091H,000H,000H,000H,000H ; FP constant (65536.0)
L71A5: CALL L5E78
LD B,000H
L71AA: PUSH BC
PUSH DE
CALL L6E55
CALL L6E4E
POP DE
POP BC
PUSH AF
INC B
CALL TEST1
DB 02CH
JR Z,L71AA ; (-012H)
CALL L5E82
LD A,B
EXX
LD B,A
LD HL,(TMPEND)
CALL ADDHLA
LD D,H
LD E,L
CALL L74E8
L71CD: DEC HL
POP AF
LD (HL),A
DJNZ L71CD ; (-005H)
EXX
LD A,B
EXX
LD B,A
L71D6: LD (TMPEND),DE
LD DE,(STRST)
OR A
SBC HL,DE
PUSH HL
LD A,B
EXX
EX DE,HL
LD (HL),A
INC HL
POP BC
LD (HL),C
INC HL
LD (HL),B
LD BC,L0003
ADD HL,BC
L71EF: EX DE,HL
LD A,003H
LD (L84CE),A
RET
L71F6: PUSH HL
CALL L60B7
CALL L69E0
RST 018H
DB 017H
L71FF: LD A,B
OR A
JR Z,L7213 ; (+010H)
LD HL,(TMPEND)
PUSH HL
PUSH BC
CALL L74DC
POP BC
EX DE,HL
POP HL
EXX
POP DE
EXX
JR L71D6 ; (-03dH)
L7213: POP HL
CALL L7967
JR L71EF ; (-02aH)
L7219: PUSH HL
CALL L722A
LD B,A
LD C,A
OR A
LD A,020H
PUSH DE
CALL NZ,?SETDE
POP DE
LD B,C
JR L71FF ; (-02bH)
L722A: CALL L60B7
LD DE,KEYBUF
LD A,H
OR A
JP NZ,04AF2H
LD A,L
RET
L7237: PUSH HL
CALL L6028
LD A,(DE)
CP 020H
JR NZ,L7241 ; (+001H)
INC DE
L7241: RST 018H
DB 017H
JR L71FF ; (-046H)
L7245: CALL L5E78
CALL L5882
LD B,A
CALL L5E7F
LD A,B
PUSH HL
PUSH DE
RST 018H
DB 029H
LD DE,0FFFFH
JR C,L7261 ; (+008H)
INC HL
BIT 7,(HL)
JR NZ,L7261 ; (+003H)
LD DE,L0000
L7261: POP HL
CALL L5E99
LD A,005H
LD (L84CE),A
INC HL
INC HL
INC HL
INC HL
INC HL
EX DE,HL
POP HL
RET
L7272: PUSH HL
CALL L6E7E
OR A
JR Z,L727A ; (+001H)
LD A,(DE)
L727A: JR L7280 ; (+004H)
L727C: PUSH HL
CALL L6E7E
L7280: POP HL
JP L7183
L7284: PUSH HL
CALL L6E7E
LD HL,(TMPEND)
PUSH HL
CALL L74DC
LD (HL),000H
POP DE
POP HL
JP L5EDC
L7296: CALL L7312
CALL L5E82
CALL L730B
EX DE,HL
LD A,(HL)
CP C
JR NC,L72A5 ; (+001H)
LD C,A
L72A5: LD (HL),C
LD BC,00005H
L72A9: LD A,003H
ADD HL,BC
EX DE,HL
LD (L84CE),A
JP HLFTCH
L72B3: CALL L7312
CALL L5E82
CALL L730B
EX DE,HL
LD A,(HL)
SUB C
JR NC,L72C3 ; (+002H)
XOR A
LD C,(HL)
L72C3: LD (HL),C
INC HL
ADD A,(HL)
LD (HL),A
INC HL
JR NC,L72CB ; (+001H)
INC (HL)
L72CB: LD BC,L0003
JR L72A9 ; (-027H)
L72D0: CALL L7312
CALL L730B
OR A
JP Z,04AF2H
PUSH AF
CALL TEST1
DB 029H
LD A,0FFH
JR Z,L72F7 ; (+014H)
CALL L5E70
PUSH DE
EX DE,HL
LD BC,00005H
ADD HL,BC
EX DE,HL
CALL L6E55
CALL L5E82
CALL L6E4E
POP DE
L72F7: POP BC
LD C,A
EX DE,HL
LD A,(HL)
SUB B
JR C,L7307 ; (+009H)
INC A
CP C
JR NC,L7303 ; (+001H)
LD C,A
L7303: LD A,B
DEC A
JR L72C3 ; (-044H)
L7307: XOR A
LD C,A
JR L72C3 ; (-048H)
L730B: LD A,B
OR A
JP NZ,04AF2H
LD A,C
RET
L7312: CALL L5E78
PUSH DE
CALL L6E9C
CALL L5E73
CALL L7916
CALL L6E55
LD C,E
LD B,D
POP DE
RET
L7326: PUSH HL
PUSH DE
LD HL,(TMPEND)
PUSH HL
LD A,030H
LD B,006H
CALL ?SETHL
RST 018H
DB 025H
POP HL
OR A
JR Z,L733E ; (+005H)
INC (HL)
INC HL
INC (HL)
INC (HL)
DEC HL
L733E: EX DE,HL
LD BC,08CA0H
CALL L73B5
LD BC,L0E10
CALL L73B5
CP 03AH
JR C,L7359 ; (+00aH)
SUB 00AH
DEC DE
LD (DE),A
DEC DE
LD A,(DE)
INC A
LD (DE),A
INC DE
INC DE
L7359: DEC DE
DEC DE
LD A,(DE)
INC DE
LD B,A
LD A,(DE)
INC DE
LD C,A
LD A,B
CP 032H
JR NZ,L7377 ; (+011H)
LD A,C
CP 034H
JR NZ,L7377 ; (+00cH)
LD HL,(TMPEND)
LD A,030H
LD B,006H
CALL ?SETHL
JR L738D ; (+016H)
L7377: LD BC,L0258
CALL L73B5
LD BC,0003CH
CALL L73B5
LD BC,0000AH
CALL L73B5
LD A,030H
ADD A,L
LD (DE),A
L738D: LD HL,(TMPEND)
LD DE,L0006
EX DE,HL
ADD HL,DE
LD (TMPEND),HL
EX DE,HL
LD DE,(STRST)
OR A
SBC HL,DE
EX DE,HL
POP HL
LD (HL),006H
INC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
INC HL
INC HL
EX DE,HL
POP HL
LD A,003H
LD (L84CE),A
JP HLFTCH
L73B5: OR A
SBC HL,BC
JR C,L73BF ; (+005H)
LD A,(DE)
INC A
LD (DE),A
JR L73B5 ; (-00aH)
L73BF: ADD HL,BC
INC DE
RET
L73C2: CALL TESTX
DB QDPC
CALL L6E6F
LD A,B
CP 006H
JP NZ,04AF2H
PUSH HL
PUSH DE
LD HL,L0000
CALL L7403
CP 018H
JP NC,04AF2H
CP 00CH
LD A,000H
JR C,L73EB ; (+009H)
PUSH DE
LD DE,L000C
OR A
SBC HL,DE
POP DE
INC A
L73EB: PUSH AF
CALL L7403
CP 03CH
JP NC,04AF2H
CALL L7403
CP 03CH
JP NC,04AF2H
POP AF
EX DE,HL
RST 018H
DB 026H
POP DE
POP HL
RET
L7403: PUSH DE
LD D,H
LD E,L
ADD HL,HL
ADD HL,HL
ADD HL,DE
LD D,H
LD E,L
ADD HL,HL
ADD HL,DE
ADD HL,HL
ADD HL,HL
POP DE
LD A,(DE)
INC DE
SUB 030H
JP C,04AF2H
CP 00AH
JP NC,04AF2H
PUSH BC
LD C,A
ADD A,A
ADD A,A
ADD A,C
ADD A,A
LD C,A
LD A,(DE)
INC DE
SUB 030H
JP C,04AF2H
L742A: CP 00AH
JP NC,04AF2H
ADD A,C
LD C,A
LD B,000H
ADD HL,BC
POP BC
RET
L7436: LD DE,(VARED)
LD (TMPEND),DE
LD DE,(INTFAC)
L7442: PUSH DE
CALL L7495
L7446: LD A,(HL)
CP 028H
JP Z,L74FB
PUSH HL
CALL L77B6
JR NC,L7458 ; (+006H)
LD A,C
LD C,L
LD B,H
POP HL
POP DE
RET
L7458: LD A,(DE)
ADD A,C
ADD A,002H
PUSH BC
EX DE,HL
LD HL,(TMPEND)
PUSH HL
OR A
SBC HL,DE
INC HL
LD C,L
LD B,H
POP HL
PUSH DE
EX DE,HL
LD L,A
LD H,000H
ADD HL,DE
EX DE,HL
CALL L74E8
LDDR
LD E,A
LD D,000H
RST 018H
DB 01AH
POP HL
POP BC
LD DE,KEYBUF
LD (HL),C
INC HL
SCF
SBC A,C
LD B,A
L7484: LD A,(DE)
LD (HL),A
INC DE
INC HL
DJNZ L7484 ; (-006H)
PUSH HL
LD B,C
CALL ?CLRHL
LD (HL),A
LD A,C
POP BC
POP HL
POP DE
RET
L7495: CALL HLFTCH
SUB 041H
CP 01AH
JP NC,L4AEC
LD DE,KEYBUF
LD B,000H
L74A4: INC DE
LD A,(HL)
CALL L5ECB
JR C,L74B6 ; (+00bH)
LD (DE),A
INC B
LD A,B
CP 003H
JR C,L74B3 ; (+001H)
DEC B
L74B3: INC HL
JR L74A4 ; (-012H)
L74B6: LD DE,KEYBUF
EX DE,HL
LD (HL),B
EX DE,HL
LD C,005H
CP 024H
RET NZ
LD C,003H
INC HL
RET
L74C5: LD HL,0FFFBH
EX DE,HL
ADD HL,DE
EX DE,HL
ADD HL,DE
LD A,B
JP L7912
L74D0: LD B,0FFH
L74D2: INC B
LD A,(HL)
OR A
RET Z
INC HL
CP 022H
RET Z
JR L74D2 ; (-00aH)
L74DC: LD A,B
OR A
RET Z
CALL LDHLDE
EX DE,HL
CALL L74E8
EX DE,HL
RET
L74E8: PUSH HL
LD HL,0FE00H
ADD HL,SP
SBC HL,DE
POP HL
RET NC
JP L4B2C
L74F4: LD DE,(INTFAC)
PUSH DE
JR L7503 ; (+008H)
L74FB: XOR A
LD (L76F4),A
INC HL
LD (L76F2),HL
L7503: LD B,000H
EXX
POP HL
PUSH HL
PUSH HL
LD HL,(TMPEND)
LD DE,KEYBUF
PUSH HL
LD A,(DE)
LD (HL),A
INC DE
INC HL
LD B,A
CALL L74DC
POP DE
LD (TMPEND),HL
LD HL,(STRST)
EX DE,HL
OR A
SBC HL,DE
EX (SP),HL
PUSH HL
EXX
L7526: POP DE
PUSH DE
PUSH BC
LD BC,(076F2H)
LD A,(L76F4)
PUSH BC
PUSH AF
LD BC,(0849CH)
PUSH BC
CALL L6E55
BIT 7,D
JP NZ,04AF2H
EX AF,AF'
POP BC
LD (0849CH),BC
POP AF
LD (L76F4),A
POP BC
LD (076F2H),BC
EX AF,AF'
INC HL
CP 029H
JR Z,L756C ; (+018H)
CP 02CH
JP NZ,L4AEC
POP BC
INC B
LD A,B
CP 004H
JP NC,04AF2H
EXX
POP HL
POP DE
EXX
PUSH DE
EXX
PUSH DE
PUSH HL
EXX
JR L7526 ; (-046H)
L756C: POP BC
EXX
POP HL
POP DE
EXX
INC B
PUSH DE
PUSH HL
EXX
LD HL,(STRST)
ADD HL,DE
LD B,(HL)
INC B
LD DE,KEYBUF
CALL LDDEHL
EXX
SET 7,C
CALL L77B6
RES 7,C
JR NC,L75E1 ; (+056H)
LD A,B
CP (HL)
JP NZ,04AFEH
INC HL
EX DE,HL
POP HL
LD (L849C),HL
EXX
LD HL,L0000
EXX
EX DE,HL
L759C: LD E,(HL)
INC HL
LD D,(HL)
INC HL
EX (SP),HL
PUSH DE
EXX
POP DE
CALL L76C8
EXX
PUSH HL
OR A
SBC HL,DE
JP NC,04AF2H
EXX
POP DE
CALL L76C4
EXX
POP HL
DJNZ L759C ; (-01cH)
PUSH HL
EXX
LD A,C
LD D,B
BIT 6,A
JR NZ,L75D4 ; (+014H)
AND 00FH
LD E,A
PUSH AF
CALL L76C8
PUSH HL
EXX
POP BC
POP AF
POP HL
ADD HL,BC
LD C,L
LD B,H
L75CF: LD HL,(L849C)
POP DE
RET
L75D4: LD E,(HL)
INC HL
LD D,(HL)
POP HL
LD C,L
LD B,H
LD (HL),E
INC HL
LD (HL),D
AND 00FH
JR L75CF ; (-012H)
L75E1: EXX
LD A,(L76F4)
OR A
JP Z,04AF2H
POP HL
LD (L849C),HL
EXX
LD DE,(TMPEND)
LD L,B
LD H,000H
ADD HL,HL
ADD HL,DE
EX DE,HL
INC DE
CALL L74E8
LD (HL),B
INC HL
EXX
LD HL,00001H
EXX
L7603: POP DE
LD A,(L76F4)
OR A
JR NZ,L7616 ; (+00cH)
PUSH HL
EX DE,HL
LD DE,0000AH
SCF
SBC HL,DE
JP NC,04AF2H
POP HL
L7616: INC DE
LD (HL),E
INC HL
LD (HL),D
INC HL
PUSH DE
EXX
POP DE
CALL L76C8
EXX
DJNZ L7603 ; (-021H)
DB 059H
LD D,000H
PUSH BC
PUSH DE
EXX
POP DE
CALL L76C8
PUSH HL
EXX
POP BC
PUSH BC
EX DE,HL
LD HL,(TMPEND)
LD L,(HL)
LD H,000H
ADD HL,HL
LD A,(KEYBUF)
ADD A,005H
ADD A,L
LD L,A
LD A,000H
ADC A,H
LD H,A
JR C,L764C ; (+005H)
ADD HL,BC
JR C,L764C ; (+002H)
PUSH HL
ADD HL,DE
L764C: JP C,L4B2C
EX DE,HL
CALL L74E8
PUSH HL
EXX
POP HL
LD BC,(STRST)
DEC BC
OR A
SBC HL,BC
PUSH HL
EXX
POP BC
LDDR
POP DE
RST 018H
DB 01AH
POP BC
PUSH DE
EXX
POP DE
LD H,B
LD L,C
POP BC
LD A,C
OR 080H
LD (HL),A
INC HL
DEC DE
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,KEYBUF
LD A,(DE)
INC A
LD B,A
CALL LDHLDE
LD DE,(TMPEND)
LD A,(DE)
LD (HL),A
INC HL
INC DE
ADD A,A
LD B,A
CALL LDHLDE
PUSH HL
EXX
POP HL
L7690: XOR A
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,L7690 ; (-008H)
LD (HL),A
EXX
POP DE
LD A,(L76F4)
OR A
JR Z,L76A5 ; (+004H)
LD HL,(L849C)
RET
L76A5: LD HL,(L76F2)
PUSH DE
JP L7503
L76AC: LD A,0FFH
LD (L76F4),A
L76B1: CALL L7495
LD A,(HL)
CALL L5E7B
CALL L74F4
CALL HLFTCH
CP 02CH
RET NZ
INC HL
JR L76B1 ; (-013H)
L76C4: ADD HL,DE
RET NC
JR L76EF ; (+027H)
L76C8: PUSH BC
EX DE,HL
LD C,L
LD A,H
LD HL,L0000
CALL L76D8
LD A,C
CALL L76D8
POP BC
RET
L76D8: OR A
JR Z,L76E9 ; (+00eH)
LD B,008H
L76DD: ADD HL,HL
JR C,L76EF ; (+00fH)
RLCA
JR NC,L76E6 ; (+003H)
ADD HL,DE
JR C,L76EF ; (+009H)
L76E6: DJNZ L76DD ; (-00bH)
RET
L76E9: LD A,H
LD H,L
LD L,000H
OR A
RET Z
L76EF: JP 04AFBH
L76F2: NOP
NOP
L76F4: NOP
L76F5: SUB 041H
CP 01AH
JP NC,L4AEC
LD BC,(07928H)
LD A,B
OR C
JR NZ,L7716 ; (+012H)
CALL L7442
L7707: PUSH DE
PUSH HL
LD L,C
LD H,B
LD B,A
LD C,A
CALL LDDEHL
POP HL
LD A,C
POP DE
JP L709D
L7716: PUSH DE
CALL L7495
PUSH HL
INC B
LD DE,KEYBUF
LD HL,(TMPEND)
CALL L74DC
LD B,000H
LD HL,(L7928)
CALL HLFTCH
CP QDPC
JR Z,L7760 ; (+02fH)
CP 028H
JR NZ,L775D ; (+028H)
L7735: INC HL
INC B
PUSH BC
CALL L7495
LD A,C
POP DE
CP E
LD C,E
JR NZ,L7752 ; (+011H)
PUSH DE
LD C,B
INC C
PUSH HL
LD HL,(TMPEND)
LD DE,KEYBUF
CALL L7953
POP HL
POP BC
JR Z,L7776 ; (+024H)
L7752: CALL HLFTCH
CP 029H
JR Z,L7760 ; (+007H)
CP 02CH
JR Z,L7735 ; (-028H)
L775D: JP L4AEC
L7760: LD HL,(TMPEND)
LD DE,KEYBUF
LD A,(HL)
LD (DE),A
LD B,A
L7769: INC HL
INC DE
LD A,(HL)
LD (DE),A
DJNZ L7769 ; (-006H)
POP HL
POP DE
CALL L77B2
JR L7707 ; (-06fH)
L7776: LD HL,(L792A)
CALL L5E78
DEC B
JR Z,L7797 ; (+018H)
DEC HL
L7780: PUSH BC
L7781: CALL L51A2
CALL L413E
JP Z,L4AEC
CP 029H
JP Z,L4AEC
CP 02CH
JR NZ,L7781 ; (-012H)
POP BC
DJNZ L7780 ; (-016H)
INC HL
L7797: EX DE,HL
POP HL
EX (SP),HL
EX DE,HL
LD BC,(07928H)
PUSH BC
LD BC,L0000
LD (07928H),BC
CALL L6E9C
POP HL
LD (L7928),HL
POP HL
JP HLFTCH
L77B2: PUSH DE
JP L7446
L77B6: LD HL,(VARST)
L77B9: LD DE,KEYBUF
LD A,(HL)
OR A
RET Z
CP 040H
JR NC,L77EA ; (+027H)
CP C
JR NZ,L77DF ; (+019H)
INC HL
LD A,(DE)
CP (HL)
JR NZ,L77DD ; (+012H)
LD B,A
L77CC: INC DE
INC HL
LD A,(DE)
CP (HL)
JR NZ,L77D7 ; (+005H)
DJNZ L77CC ; (-008H)
INC HL
SCF
RET
L77D7: INC HL
DJNZ L77D7 ; (-003H)
LD A,C
JR L77E4 ; (+007H)
L77DD: LD A,C
DEC HL
L77DF: AND 00FH
INC HL
ADD A,(HL)
INC HL
L77E4: LD E,A
LD D,000H
ADD HL,DE
JR L77B9 ; (-031H)
L77EA: CP C
JR Z,L7801 ; (+014H)
INC HL
L77EE: LD E,(HL)
INC HL
LD D,(HL)
DEC HL
ADD HL,DE
JR L77B9 ; (-03cH)
L77F5: LD A,C
SUB B
CPL
LD C,A
LD B,0FFH
ADD HL,BC
POP BC
L77FD: DEC HL
DEC HL
JR L77EE ; (-013H)
L7801: LD A,(HL)
EXX
LD C,A
LD B,000H
EXX
INC HL
PUSH DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
EX DE,HL
ADD HL,DE
EX DE,HL
POP DE
LD A,(DE)
CP (HL)
JR NZ,L77FD ; (-018H)
PUSH BC
LD B,A
LD C,A
L7818: INC HL
INC DE
LD A,(DE)
CP (HL)
JR NZ,L77F5 ; (-029H)
DJNZ L7818 ; (-008H)
INC HL
POP BC
SCF
RET
L7824: CALL L7495
SET 6,C
PUSH HL
CALL L77B6
JP C,04AFEH
LD (HL),C
EX (SP),HL
PUSH HL
DEC HL
L7834: CALL L51A2
OR A
JR Z,L783E ; (+004H)
CP 03AH
JR NZ,L7834 ; (-00aH)
L783E: POP DE
PUSH HL
INC HL
SBC HL,DE
LD A,(KEYBUF)
ADD A,004H
LD C,A
LD B,000H
LD A,L
ADD HL,BC
LD B,A
PUSH HL
EXX
POP BC
PUSH BC
PUSH HL
PUSH DE
PUSH BC
LD HL,L0000
ADD HL,SP
LD DE,(TMPEND)
DEC H
OR A
SBC HL,DE
LD A,00CH
JP C,L4B2E
POP BC
POP DE
POP HL
LD HL,(TMPEND)
PUSH HL
ADD HL,BC
EX (SP),HL
PUSH HL
LD DE,(STRST)
OR A
SBC HL,DE
LD C,L
LD B,H
POP HL
POP DE
LDDR
POP DE
RST 018H
DB 01AH
DEC DE
POP HL
EX (SP),HL
INC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,KEYBUF
LD A,(DE)
LD (HL),A
LD B,A
L788E: INC DE
INC HL
LD A,(DE)
LD (HL),A
DJNZ L788E ; (-006H)
INC HL
PUSH HL
EXX
POP HL
CALL LDHLDE
LD (HL),000H
POP HL
RET
L789F: PUSH DE
CALL L7495
POP IX
PUSH BC
SET 6,C
LD DE,(0792AH)
LD (L792A),HL
PUSH DE
CALL L77B6
JP NC,04B0AH
LD DE,(07928H)
LD (L7928),HL
PUSH DE
PUSH IX
DEC HL
L78C1: CALL L51A2
CALL L413E
JP Z,L4AEC
CP QDPC
JR NZ,L78C1 ; (-00dH)
INC HL
POP DE
PUSH DE
CALL L6E9C
POP DE
LD HL,(L792A)
POP BC
LD (07928H),BC
POP BC
LD (0792AH),BC
EX DE,HL
POP BC
LD A,C
CALL L7912
LD BC,00005H
ADD HL,BC
EX DE,HL
CALL HLFTCH
CP 028H
RET NZ
PUSH DE
LD B,001H
L78F6: PUSH BC
CALL L51A2
POP BC
CALL L4141
JP Z,L4AEC
CP 028H
JR NZ,L7906 ; (+001H)
INC B
L7906: CP 029H
JR NZ,L78F6 ; (-014H)
DJNZ L78F6 ; (-016H)
INC HL
CALL HLFTCH
POP DE
RET
L7912: CP 003H
JR NZ,L791F ; (+009H)
L7916: LD A,(L84CE)
CP 003H
RET Z
JP 04AF5H
L791F: LD A,(L84CE)
CP 003H
RET NZ
JP 04AF5H
L7928: NOP
NOP
L792A: NOP
NOP
L792C: PUSH HL
CALL L60B7
LD A,H
OR A
JP NZ,04AF2H
LD A,L
CP 008H
JP NC,04AF2H
RST 018H
DB 012H
POP HL
JR C,L794E ; (+00eH)
JR Z,L794E ; (+00cH)
LD DE,0FFFFH
L7945: CALL L5E99
LD A,005H
LD (L84CE),A
RET
L794E: LD E,A
LD D,000H
JR L7945 ; (-00eH)
L7953: LD A,(DE)
CP (HL)
RET NZ
PUSH BC
PUSH DE
PUSH HL
LD B,C
L795A: LD A,(DE)
CP (HL)
JR NZ,L7963 ; (+005H)
INC DE
INC HL
DJNZ L795A ; (-008H)
XOR A
L7963: POP HL
POP DE
POP BC
RET
L7967: PUSH HL
LD B,005H
CALL ?CLRHL
POP HL
RET
L796F: CALL L791F
L7972: LD A,(HL)
OR A
RET Z
INC HL
LD A,(HL)
XOR 080H
LD (HL),A
DEC HL
RET
L797C: CALL L791F
LD C,A
LD A,080H
JP L798F
L7985: LD A,(L84CE)
CP 003H
JP Z,L79D9
LD C,A
XOR A
L798F: LD (L7D89),HL
PUSH DE
PUSH HL
LD (07D8CH),SP
INC HL
INC DE
LD B,(HL)
XOR (HL)
EX DE,HL
XOR (HL)
DEC HL
DEC DE
EX DE,HL
RLCA
LD A,B
LD (L7D8B),A
JP C,L7A9A
XOR A
CP (HL)
JP Z,L79CE
LD A,(DE)
OR A
JR Z,L79B6 ; (+004H)
SUB (HL)
JP L7ADD
L79B6: LD SP,(07D8CH)
POP HL
POP DE
EI
LD A,(HL)
OR A
JP Z,L7E86
LD A,(L7D8B)
AND 080H
INC HL
RES 7,(HL)
OR (HL)
LD (HL),A
DEC HL
RET
L79CE: LD B,000H
LD A,005H
LD C,A
EX DE,HL
LDIR
JP L79B6
L79D9: LD B,(HL)
LD A,(DE)
ADD A,B
JP C,04AF8H
LD C,A
PUSH DE
PUSH HL
PUSH DE
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD HL,(STRST)
ADD HL,DE
EX DE,HL
LD HL,(TMPEND)
CALL L74DC
EX (SP),HL
LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD HL,(STRST)
ADD HL,DE
EX DE,HL
POP HL
CALL L74DC
LD A,C
LD DE,(TMPEND)
LD BC,(STRST)
EX DE,HL
OR A
SBC HL,BC
EX DE,HL
LD (TMPEND),HL
POP HL
LD (HL),A
INC HL
LD (HL),E
INC HL
LD (HL),D
DEC HL
DEC HL
POP DE
RET
L7A1C: LD A,(L84CE)
CP 003H
JR NZ,L7A57 ; (+034H)
PUSH DE
PUSH HL
LD A,(DE)
OR (HL)
JR Z,L7A54 ; (+02bH)
LD A,(DE)
CP (HL)
JR C,L7A2E ; (+001H)
LD A,(HL)
L7A2E: OR A
JR Z,L7A4E ; (+01dH)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD HL,(STRST)
EX DE,HL
ADD HL,DE
EX DE,HL
ADD HL,BC
EX DE,HL
LD B,A
OR A
JR Z,L7A54 ; (+00eH)
L7A46: LD A,(DE)
CP (HL)
JR NZ,L7A54 ; (+00aH)
INC DE
INC HL
DJNZ L7A46 ; (-008H)
L7A4E: POP DE
POP HL
LD A,(DE)
CP (HL)
EX DE,HL
RET
L7A54: POP HL
POP DE
RET
L7A57: INC DE
INC HL
LD A,(DE)
DEC DE
XOR (HL)
RLCA
JR NC,L7A63 ; (+004H)
LD A,(HL)
DEC HL
RLCA
RET
L7A63: LD A,(HL)
DEC HL
RLCA
JR NC,L7A6E ; (+006H)
CALL L7A6E
RET Z
CCF
RET
L7A6E: PUSH DE
PUSH HL
EX DE,HL
LD A,(DE)
CP (HL)
JR NZ,L7A8F ; (+01aH)
INC DE
INC HL
LD A,(HL)
OR 080H
LD B,A
LD A,(DE)
OR 080H
CP B
JR NZ,L7A8F ; (+00eH)
LD A,(L84CE)
LD B,A
DEC B
DEC B
L7A87: INC DE
INC HL
LD A,(DE)
CP (HL)
JR NZ,L7A8F ; (+002H)
DJNZ L7A87 ; (-008H)
L7A8F: POP HL
POP DE
RET
L7A92: POP HL
PUSH HL
CALL L7967
JP L79B6
L7A9A: CALL L7A6E
JR Z,L7A92 ; (-00dH)
JR NC,L7AAA ; (+009H)
LD A,(L7D8B)
XOR 080H
LD (L7D8B),A
SCF
L7AAA: EX AF,AF'
LD A,(HL)
OR A
JP Z,L79CE
LD A,(DE)
OR A
JP Z,L79B6
SUB (HL)
JR C,L7ABF ; (+007H)
CP 020H
JP NC,L79CE
JR L7AC6 ; (+007H)
L7ABF: NEG
CP 020H
JP NC,L79B6
L7AC6: EX AF,AF'
JR C,L7ACA ; (+001H)
EX DE,HL
L7ACA: EX AF,AF'
JP L7B64
L7ACE: LD SP,(07D8CH)
EI
POP HL
POP DE
LD A,(07D93H)
OR A
JP Z,04AEFH
RET
L7ADD: JR NC,L7AE9 ; (+00aH)
NEG
CP 020H
JP NC,L79B6
EX DE,HL
JR L7AEE ; (+005H)
L7AE9: CP 020H
JP NC,L79CE
L7AEE: CALL L7B24
LD A,H
EXX
ADC A,H
EXX
LD H,A
LD A,L
EXX
ADC A,L
EXX
LD L,A
LD A,D
EXX
ADC A,D
EXX
LD D,A
LD A,E
EXX
ADC A,E
EXX
JR NC,L7B11 ; (+00bH)
RRA
RR D
RR L
RR H
INC C
JP Z,L7ACE
L7B11: LD E,A
LD A,C
EXX
LD BC,00005H
LD HL,(L7D89)
LD (HL),A
ADD HL,BC
DI
LD SP,HL
EXX
PUSH HL
PUSH DE
JP L79B6
L7B24: DI
LD (07D8EH),SP
EX AF,AF'
INC HL
LD SP,HL
EXX
POP DE
SET 7,E
POP HL
OR A
L7B32: EX AF,AF'
CP 008H
JR C,L7B43 ; (+00cH)
SUB 008H
EX AF,AF'
RL H
LD H,L
LD L,D
LD D,E
LD E,000H
JR L7B32 ; (-011H)
L7B43: OR A
JR Z,L7B54 ; (+00eH)
L7B46: EX AF,AF'
OR A
RR E
RR D
RR L
RR H
EX AF,AF'
DEC A
JR NZ,L7B46 ; (-00eH)
L7B54: EXX
EX DE,HL
LD C,(HL)
INC HL
LD SP,HL
POP DE
SET 7,E
POP HL
EX AF,AF'
LD SP,(07D8EH)
EI
RET
L7B64: CP 020H
JP NC,L79B6
CALL L7B24
LD A,H
EXX
SBC A,H
EXX
LD H,A
LD A,L
EXX
SBC A,L
EXX
LD L,A
LD A,D
EXX
SBC A,D
EXX
LD D,A
LD A,E
EXX
SBC A,E
EXX
L7B7F: OR A
JR Z,L7B98 ; (+016H)
L7B82: BIT 7,A
JR NZ,L7B94 ; (+00eH)
RL H
RL L
RL D
RLA
DEC C
JP NZ,L7B82
JP L7A92
L7B94: LD E,A
JP L7B11
L7B98: LD A,C
SUB 008H
LD C,A
LD A,D
LD D,L
LD L,H
LD H,000H
JR Z,L7BA5 ; (+002H)
JR NC,L7B7F ; (-026H)
L7BA5: JP L7A92
L7BA8: LD C,A
INC HL
INC DE
LD A,(DE)
XOR (HL)
LD (L7D8B),A
DEC HL
DEC DE
RET
L7BB3: CALL L791F
CALL L7BA8
PUSH DE
PUSH HL
LD (07D8CH),SP
LD A,(HL)
OR A
JP Z,L7A92
LD A,(DE)
OR A
JP Z,L7A92
INC DE
PUSH DE
POP IX
ADD A,(HL)
LD E,A
LD A,000H
ADC A,A
LD D,A
LD (07D91H),DE
INC HL
XOR A
LD (L7D90),A
LD D,(HL)
SET 7,D
INC HL
LD E,(HL)
INC HL
PUSH HL
LD H,A
LD L,A
EXX
POP HL
LD D,(HL)
INC HL
LD E,(HL)
LD B,A
LD C,A
LD H,A
LD L,A
EXX
LD A,(IX+000H)
OR 080H
LD C,004H
L7BF6: LD B,008H
OR A
JP Z,L7C8B
L7BFC: RLCA
JR NC,L7C11 ; (+012H)
EX AF,AF'
EXX
LD A,C
ADD A,B
LD C,A
ADC HL,DE
EXX
ADC HL,DE
JR NC,L7C10 ; (+005H)
LD A,001H
LD (L7D90),A
L7C10: EX AF,AF'
L7C11: SRL D
RR E
EXX
RR D
RR E
RR B
EXX
DJNZ L7BFC ; (-023H)
L7C1F: INC IX
LD A,(IX+000H)
DEC C
JR NZ,L7BF6 ; (-031H)
EXX
LD A,(L7D90)
OR A
JR Z,L7C44 ; (+016H)
LD DE,(07D91H)
INC DE
LD (07D91H),DE
EXX
SCF
RR H
RR L
EXX
RR H
RR L
RR C
L7C44: BIT 7,C
JR Z,L7C62 ; (+01aH)
LD DE,00001H
ADD HL,DE
EXX
LD DE,L0000
ADC HL,DE
EXX
JR NC,L7C62 ; (+00dH)
LD DE,(07D91H)
INC DE
LD (07D91H),DE
EXX
LD H,080H
EXX
L7C62: POP IX
PUSH IX
LD (IX+004H),L
LD (IX+003H),H
EXX
LD (IX+002H),L
LD (IX+001H),H
LD HL,(07D91H)
OR A
LD DE,L0081
SBC HL,DE
LD A,H
ADD A,000H
JP M,L7C97
JP NZ,L7ACE
LD (IX+000H),L
JP L79B6
L7C8B: LD A,E
EXX
LD B,E
LD E,D
LD D,A
EXX
LD E,D
LD D,000H
JP L7C1F
L7C97: LD SP,(07D8CH)
JP L7A92
L7C9E: CALL L791F
CALL L7BA8
PUSH DE
PUSH HL
LD (07D8CH),SP
LD A,(DE)
OR A
JP Z,04AEFH
EX AF,AF'
LD A,(HL)
OR A
JP Z,L7A92
EXX
ADD A,081H
LD B,A
LD A,000H
ADC A,A
EX AF,AF'
LD C,A
LD A,B
SUB C
LD C,A
EX AF,AF'
LD B,A
EX AF,AF'
LD A,B
SBC A,000H
JP C,L7C97
JP NZ,L7ACE
LD A,C
PUSH AF
EXX
INC DE
INC HL
LD B,(HL)
SET 7,B
INC HL
LD C,(HL)
INC HL
PUSH HL
EX DE,HL
LD D,(HL)
SET 7,D
INC HL
LD E,(HL)
INC HL
PUSH HL
LD H,B
LD L,C
EXX
POP HL
LD D,(HL)
INC HL
LD E,(HL)
POP HL
LD A,(HL)
INC HL
LD L,(HL)
LD H,A
EXX
LD C,005H
L7CF0: LD B,008H
XOR A
L7CF3: BIT 7,H
JR NZ,L7D07 ; (+010H)
OR A
L7CF8: RLA
EXX
ADD HL,HL
EXX
ADC HL,HL
DJNZ L7CF3 ; (-00dH)
PUSH AF
DEC C
JR NZ,L7CF0 ; (-014H)
JP L7D41
L7D07: OR A
EXX
SBC HL,DE
EXX
SBC HL,DE
CCF
JR C,L7CF8 ; (-019H)
EXX
ADD HL,DE
EXX
ADC HL,DE
OR A
RLA
EXX
ADD HL,HL
EXX
ADC HL,HL
DJNZ L7D26 ; (+007H)
PUSH AF
LD B,008H
DEC C
JP Z,L7D41
L7D26: EXX
OR A
SBC HL,DE
EXX
SBC HL,DE
SCF
RLA
DJNZ L7D37 ; (+006H)
PUSH AF
LD B,008H
DEC C
JR Z,L7D41 ; (+00aH)
L7D37: EXX
ADD HL,HL
EXX
ADC HL,HL
JR C,L7D26 ; (-018H)
JP L7CF3
L7D41: POP AF
LD H,A
EXX
POP AF
LD E,A
POP AF
LD D,A
POP AF
LD C,A
POP AF
LD B,A
POP AF
L7D4D: BIT 7,B
JR NZ,L7D64 ; (+013H)
EXX
SLA H
EXX
RL E
RL D
RL C
RL B
DEC A
JP NZ,L7D4D
JP L7A92
L7D64: EXX
RL H
EXX
JR NC,L7D7B ; (+011H)
LD HL,00001H
ADD HL,DE
EX DE,HL
LD HL,L0000
ADC HL,BC
LD B,H
LD C,L
JR NC,L7D7B ; (+003H)
LD B,080H
INC A
L7D7B: POP HL
PUSH HL
LD (HL),A
INC HL
LD (HL),B
L7D80: INC HL
LD (HL),C
INC HL
LD (HL),D
INC HL
LD (HL),E
JP L79B6
L7D89: NOP
NOP
L7D8B: NOP
NOP
NOP
NOP
NOP
L7D90: NOP
NOP
NOP
NOP
L7D94: INC HL
BIT 7,(HL)
DEC HL
RET
L7D99: INC (HL)
RET NZ
JP 04AEFH
L7D9E: LD A,(HL)
OR A
RET Z
DEC (HL)
RET NZ
JP L7967
L7DA6: PUSH HL
INC HL
INC HL
INC HL
INC HL
INC HL
EX DE,HL
LD HL,(MEMMAX)
DEC HL
SBC HL,DE
JP C,04AFBH
POP HL
RET
L7DB8: PUSH HL
LD (L8471),HL
CALL L7DA6
EX DE,HL
LD (L8473),HL
CALL L7DA6
EX DE,HL
LD (L8475),HL
CALL L7DA6
LD (08477H),DE
POP HL
RET
L7DD3: CALL L791F
EX DE,HL
LD A,(HL)
OR A
JP Z,L7E35
EX DE,HL
LD A,(HL)
OR A
JP Z,L7967
CALL L7D94
JR Z,L7E0F ; (+028H)
CALL L7972
EX DE,HL
PUSH DE
PUSH HL
LD DE,L84D7
CALL L5E93
LD HL,L84D7
CALL L608D
LD A,(HL)
OR A
JP NZ,04AF2H
POP HL
PUSH HL
CALL L60B7
BIT 0,L
POP DE
POP HL
JR Z,L7E0F ; (+006H)
CALL L7E0F
JP L7972
L7E0F: EX DE,HL
LD A,(HL)
OR A
JR Z,L7E35 ; (+021H)
CALL L7D94
JR Z,L7E3B ; (+022H)
CALL L7972
CALL L7E3B
PUSH DE
PUSH HL
LD DE,L84D7
CALL L5E90
LD HL,L84D7
POP DE
CALL L7C9E
PUSH DE
CALL L5E93
POP HL
POP DE
RET
L7E35: PUSH DE
CALL L5E90
POP HL
RET
L7E3B: PUSH DE
LD DE,L84D7
CALL L5E93
POP HL
CALL L8320
LD DE,L84D7
CALL L7BB3
JP L81FC
L7E4F: CALL L791F
PUSH DE
PUSH HL
CALL L60B7
LD A,L
CPL
LD E,A
LD A,H
CPL
LD D,A
JR L7E80 ; (+021H)
L7E5F: LD A,0A2H
LD BC,0B23EH
LD BC,0AA3EH
LD (L7E7B),A
INC A
LD (L7E7E),A
CALL L791F
PUSH DE
PUSH HL
CALL L60B7
EX DE,HL
CALL L60B7
LD A,H
L7E7B: AND D
LD D,A
LD A,L
L7E7E: AND E
LD E,A
L7E80: POP HL
CALL L5E99
POP DE
RET
L7E86: INC HL
RES 7,(HL)
DEC HL
RET
L7E8B: CALL L7D94
JP Z,L604F
CALL L7EB0
CALL L604F
LD DE,L84D7
CALL L7A1C
RET Z
L7E9E: LD DE,L6112
JP L797C
L7EA4: LD DE,L6112
JP L7985
L7EAA: LD DE,L6112
JP L7A1C
L7EB0: PUSH HL
PUSH DE
LD DE,L84D7
CALL L5E93
POP DE
POP HL
RET
L7EBB: CALL L604F
EX DE,HL
CALL L604F
EX DE,HL
CALL L7EB0
CALL L7C9E
CALL L604F
CALL L7BB3
PUSH DE
LD DE,L84D7
CALL L797C
POP DE
JP L7972
L7EDA: CALL L604F
EX DE,HL
CALL L604F
EX DE,HL
CALL L7C9E
JP L604F
L7EE8: LD A,(HL)
OR A
RET Z
CALL L7D94
JP NZ,04AF2H
CALL L8320
CALL L7D9E
JP L81FC
L7EFA: PUSH HL
EX DE,HL
CALL L5E90
POP HL
POP BC
RET
L7F02: LD A,(HL)
LD C,H
L7F04: ADD A,B
DEC HL
L7F06: PUSH BC
INC HL
LD A,(HL)
RES 7,(HL)
DEC HL
PUSH AF
CALL L7F17
POP AF
POP BC
RLCA
RET NC
JP L7972
L7F17: CALL L7EAA
JR C,L7F3A ; (+01eH)
CALL L7DA6
PUSH DE
PUSH HL
CALL L5E93
POP DE
PUSH DE
CALL L5E90
POP HL
POP DE
CALL L7C9E
CALL L7F3A
LD DE,08194H
CALL L797C
JP L7E86
L7F3A: LD A,0FFH
LD (L80B0),A
LD DE,L7F02
CALL L7A1C
JR C,07F96H ; (+04fH)
LD DE,L7F04
CALL L7A1C
PUSH AF
CALL L7DA6
POP AF
PUSH HL
PUSH DE
CALL L5E93
POP HL
JR C,L7F6E ; (+014H)
CALL L7EA4
EX (SP),HL
CALL L797C
POP DE
CALL L7C9E
CALL 07F96H
LD DE,08199H
JP L7985
L7F6E: LD DE,L7F91
CALL L7BB3
CALL L7EA4
EX (SP),HL
LD DE,L7F91
CALL L797C
POP DE
CALL L7C9E
CALL 07F96H
CALL L7D99
LD DE,08199H
CALL L7985
JP L7D9E
L7F91: DB 07FH,054H,013H,0CCH,0D0H ; FP constant (used by EXP/LOG)
PUSH BC ; *** was misaligned: disassembler consumed D0+C5 as CALL Z ***
PUSH HL
CALL L7DB8
POP HL
PUSH HL
PUSH DE
CALL L5E93
POP HL
LD E,L
LD D,H
CALL L7BB3
LD DE,(08475H)
POP HL
PUSH HL
CALL L5E93
LD A,(L84CE)
DEC A
CP 004H
LD B,A
LD HL,08137H
JP Z,L803D
LD B,00AH
JP L803D
L7FC2: PUSH BC
LD A,(HL)
OR A
JP Z,L7EFA
LD DE,08194H
CALL L797C
CALL L7972
POP BC
L7FD2: PUSH BC
INC HL
LD A,(HL)
RES 7,(HL)
AND 080H
CPL
LD (L80B0),A
DEC HL
LD DE,L818A
PUSH HL
CALL L7A1C
JR C,L7FF0 ; (+009H)
CALL L7C9E
CALL L608D
CALL L7BB3
L7FF0: LD DE,0818FH
CALL L7A1C
JR C,L8003 ; (+00bH)
CALL L797C
LD A,(L80B0)
XOR 080H
LD (L80B0),A
L8003: LD DE,08194H
CALL L7A1C
JR C,L8014 ; (+009H)
LD DE,0818FH
CALL L797C
CALL L7E86
L8014: CALL L7DB8
POP HL
PUSH DE
LD DE,08199H
CALL L7A1C
JR NC,L8086 ; (+065H)
POP DE
PUSH HL
PUSH DE
CALL L5E93
POP HL
LD E,L
LD D,H
CALL L7BB3
LD DE,(08475H)
POP HL
PUSH HL
CALL L5E93
LD A,(L84CE)
LD B,A
LD HL,L80E7
L803D: PUSH BC
L803E: PUSH HL
LD HL,(L8475)
LD DE,(08477H)
CALL L7BB3
POP HL
PUSH HL
LD DE,(08473H)
PUSH DE
CALL L5E93
POP HL
LD DE,(08475H)
CALL L7BB3
EX DE,HL
LD HL,(L8471)
CALL L7985
POP HL
LD DE,00005H
ADD HL,DE
POP BC
DJNZ L803D ; (-02dH)
POP HL
POP BC
LD A,(L80B0)
INC HL
XOR (HL)
CPL
LD (HL),A
DEC HL
LD A,(L84CE)
CP 008H
LD A,(HL)
JR Z,L8082 ; (+006H)
CP 05CH
L807E: RET NC
JP L7967
L8082: CP 04DH
JR L807E ; (-008H)
L8086: LD DE,08194H
CALL L797C
CALL L7E86
POP DE
PUSH HL
PUSH DE
CALL L5E93
L8095: POP HL
LD E,L
LD D,H
CALL L7BB3
LD DE,(08475H)
CALL L5E90
L80A2: POP DE
PUSH DE
CALL L5E90
LD A,(L84CE)
LD B,A
LD HL,L810F
JR L803D ; (-073H)
L80B0: NOP
L80B1: PUSH BC
PUSH HL
CALL L7DA6
EX DE,HL
LD (L8479),HL
CALL L7DA6
LD (0847BH),DE
POP HL
PUSH HL
CALL L5E93
LD HL,(L8479)
EX DE,HL
POP HL
L80CB: PUSH HL
CALL L5E93
LD HL,(0847BH)
CALL L7FD2
POP DE
PUSH DE
CALL L5E93
LD HL,(L8479)
CALL L7FC2
EX DE,HL
POP HL
CALL L7C9E
POP BC
RET
; ---------------------------------------------------------------------------
; Floating-point polynomial coefficient tables for transcendental functions
; (SIN, COS, TAN, ATN, LOG, EXP, SQR). 5 bytes per FP constant.
; ---------------------------------------------------------------------------
L80E7: DB 07EH,0AAH,0AAH,0AAH,0ABH ; SIN/COS coeff 0
DB 07AH,008H,088H,088H,089H ; SIN/COS coeff 1
DB 074H,0D0H,00DH,000H,0D0H ; SIN/COS coeff 2
L80F6: DB 06EH,038H,0EFH,01DH,02BH ; SIN/COS coeff 3
DB 067H,0D7H,032H,02BH,040H ; SIN/COS coeff 4
DB 060H,030H,092H,030H,09DH ; SIN/COS coeff 5
DB 058H,0D7H,03FH,09FH,03AH ; SIN/COS coeff 6
DB 050H,04AH,096H,03BH,082H ; SIN/COS coeff 7
L810F: DB 080H,080H,000H,000H,000H ; FP 1.0
DB 07CH,02AH,0AAH,0AAH,0ABH ; TAN coeff 0
DB 077H,0B6H,00BH,060H,0B6H ; TAN coeff 1
DB 071H,050H,00DH,000H,0D0H ; TAN coeff 2
DB 06BH,093H,0F2H,07DH,0BCH ; TAN coeff 3
DB 064H,00FH,076H,0C7H,080H ; TAN coeff 4
L812C: DB 05CH,0C9H,0CBH,0A5H,046H ; TAN coeff 5 (NB: 0xC9=RET opcode in data)
L812F: DB 054H,057H,03FH,09FH,03AH ; ATN coeff 0
DB 07FH,0AAH,0AAH,0AAH,0ABH ; ATN coeff 1
DB 07EH,04CH,0CCH,0CCH,0CDH ; ATN coeff 2
DB 07EH,092H,049H,024H,092H ; ATN coeff 3
DB 07DH,063H,08EH,038H,0E4H ; ATN coeff 4
DB 07DH,0BAH,02EH,08BH,0A3H ; ATN coeff 5
DB 07DH,01DH,089H,0D8H,09EH ; ATN coeff 6
DB 07DH,088H,088H,088H,089H ; ATN coeff 7
DB 07CH,070H,0F0H,0F0H,0F1H ; ATN coeff 8
DB 07CH,0D7H,094H,035H,0E5H ; ATN coeff 9
DB 07CH,043H,00CH,030H,0C3H ; ATN coeff 10
L8169: LD DE,L0000
LD A,(HL)
OR A
JR Z,L8178 ; (+008H)
CALL L7D94
INC DE
JR Z,L8178 ; (+002H)
DEC DE
DEC DE
L8178: CALL L5E99
RET
L817C: LD DE,0819EH
JR L8184 ; (+003H)
L8181: LD DE,0818FH
L8184: PUSH BC
CALL L7BB3
POP BC
RET
; FP constants for LOG/EXP computation
L818A: DB 083H,049H,00FH,0DAH,0A2H ; FP constant (log2(e))
DB 082H,049H,00FH,0DAH,0A2H ; FP constant
DB 081H,049H,00FH,0DAH,0A2H ; FP constant
DB 080H,049H,00FH,0DAH,0A2H ; FP constant
DB 07BH,00EH,0FAH,035H,013H ; FP constant (ln(2))
L81A2 EQU $-1 ; Last byte alias
L81A3: PUSH HL
CALL L60B7
LD A,000H
CP 040H
LD A,(HL)
CALL NZ,BREAKX
LD E,A
LD D,000H
POP HL
CALL L5E99
RET
L81B7: LD A,(HL)
OR A
JR Z,L81C0 ; (+005H)
CALL L7D94
JR Z,L81CB ; (+00bH)
L81C0: PUSH HL
LD HL,L4193
LD (L81FA),HL
POP HL
XOR A
LD R,A
L81CB: PUSH BC
LD DE,(081FAH)
LD A,R
XOR D
RRC A
RRC A
RRC A
LD D,A
LD A,R
XOR E
RLC A
RLC A
LD E,D
LD D,A
LD (081FAH),DE
PUSH HL
INC HL
RES 7,D
LD (HL),D
INC HL
LD (HL),E
INC HL
LD A,R
LD (HL),A
POP HL
LD (HL),081H
CALL L7E9E
POP BC
RET
L81FA: SUB E
LD B,C
L81FC: PUSH BC
LD A,(HL)
OR A
JP Z,L7EFA
INC HL
LD A,(HL)
LD (L8312),A
RES 7,(HL)
DEC HL
LD DE,L8467
CALL L7BB3
PUSH HL
CALL L7DA6
PUSH DE
CALL L5E93
POP HL
CALL L604F
PUSH HL
CALL L60B7
XOR A
CP H
JP NZ,04AEFH
LD A,L
LD (L8311),A
POP DE
POP HL
PUSH HL
CALL L797C
PUSH DE
PUSH HL
CALL L5E90
POP DE
POP HL
CALL L7D9E
EX DE,HL
XOR A
LD B,008H
L823D: PUSH BC
PUSH AF
CALL L7A1C
JR C,L824B ; (+007H)
CALL L797C
POP AF
SET 7,A
PUSH AF
L824B: POP AF
RLC A
EX DE,HL
PUSH AF
CALL L7D9E
POP AF
EX DE,HL
POP BC
DJNZ L823D ; (-01bH)
LD (L8313),A
PUSH DE
LD DE,L845D
LD A,(L84CE)
BIT 3,A
JR NZ,L8269 ; (+003H)
LD DE,L8462
L8269: CALL L7BB3
POP DE
PUSH DE
CALL L5E93
POP HL
LD A,(L84CE)
BIT 3,A
JP Z,L8301
CALL L7D99
LD DE,L610D
CALL L7985
CALL L7D9E
POP DE
PUSH DE
CALL L7BB3
LD DE,L610D
CALL L7D9E
CALL L7985
CALL L7D99
POP DE
PUSH DE
CALL L7BB3
LD DE,L8458
CALL L7BB3
L82A2: CALL L7D99
CALL L7EA4
CALL L7D9E
POP DE
PUSH DE
CALL L7BB3
CALL L7EA4
POP DE
PUSH DE
CALL L7BB3
L82B8: CALL L7EA4
EX (SP),HL
EX DE,HL
PUSH DE
CALL L5E90
POP HL
LD DE,L8408
LD A,(L8313)
LD B,008H
L82CA: RLC A
JR NC,L82D5 ; (+007H)
PUSH AF
PUSH BC
CALL L7BB3
POP BC
POP AF
L82D5: INC DE
INC DE
INC DE
INC DE
INC DE
DJNZ L82CA ; (-012H)
LD A,(L8311)
ADD A,(HL)
JP C,04AEFH
LD (HL),A
POP DE
CALL L7BB3
POP BC
LD A,(L8312)
RLC A
RET NC
PUSH BC
PUSH DE
PUSH HL
CALL L5E93
POP DE
PUSH DE
CALL L5E90
POP HL
POP DE
CALL L7C9E
POP BC
RET
L8301: POP DE
PUSH DE
CALL L7BB3
LD A,(HL)
OR A
CALL NZ,L7D9E
CALL L7985
JP L82B8
L8311: NOP
L8312: NOP
L8313: NOP
L8314: PUSH BC
CALL L8320
LD DE,L83F9
CALL L7BB3
POP BC
RET
L8320: PUSH BC
CALL L7D94
JP NZ,04AF2H
LD A,(HL)
OR A
JP Z,04AF2H
SUB 081H
LD (L83F8),A
LD (HL),081H
XOR A
LD B,008H
LD DE,L8408
L8339: PUSH BC
PUSH AF
CALL L7A1C
JR C,L834F ; (+00fH)
PUSH HL
LD HL,00028H
ADD HL,DE
EX DE,HL
EX (SP),HL
CALL L7BB3
POP DE
POP AF
SET 7,A
PUSH AF
L834F: POP AF
RLC A
INC DE
INC DE
INC DE
INC DE
INC DE
POP BC
DJNZ L8339 ; (-021H)
DB 022H
LD (HL),C
ADD A,H
CALL L7DA6
EX DE,HL
LD E,A
LD D,000H
CALL L5E99
LD A,(HL)
OR A
JR Z,L836E ; (+003H)
SUB 008H
LD (HL),A
L836E: LD A,(L83F8)
CP 080H
JR C,L8377 ; (+002H)
NEG
L8377: PUSH HL
CALL L7DA6
EX DE,HL
LD (L8473),HL
LD E,A
LD D,000H
CALL L5E99
LD A,(L83F8)
AND 080H
INC HL
OR (HL)
LD (HL),A
DEC HL
EX DE,HL
POP HL
CALL L7985
LD A,(L84CE)
LD DE,0846CH
CP 005H
JR Z,L83A0 ; (+003H)
LD DE,L845D
L83A0: CALL L7BB3
PUSH HL
LD DE,(08473H)
LD HL,(L8471)
PUSH HL
PUSH DE
CALL L5E93
POP HL
CALL L7EA4
EX (SP),HL
CALL L797C
POP DE
CALL L7C9E
PUSH DE
CALL L5E93
POP HL
PUSH DE
LD E,L
LD D,H
CALL L7BB3
POP DE
PUSH HL
PUSH DE
CALL L5E93
POP HL
LD DE,L8403
CALL L7985
EX DE,HL
POP HL
CALL L7BB3
LD DE,L610D
CALL L7D99
CALL L7985
CALL L7D9E
EX DE,HL
LD HL,(L8471)
CALL L7BB3
LD DE,L83FE
CALL L7BB3
POP DE
CALL L7985
POP BC
RET
L83F8: DB 000H ; Exponent work variable
; ---------------------------------------------------------------------------
; Floating-point polynomial coefficient tables for SQR, LOG, EXP functions
; Each entry is 5 bytes (1 exponent + 4 mantissa) in Sharp MZ FP format
; ---------------------------------------------------------------------------
L83F9: DB 07FH,05EH,05BH,0D8H,0A9H ; 1/sqrt(2) approx
L83FE: DB 07FH,04CH,0CCH,0CCH,0CDH ; log10(2) approx
L8403: DB 081H,055H,055H,055H,056H ; Coeff
L8408: DB 081H,035H,004H,0F3H,034H ; LOG poly coeff 0
DB 081H,018H,037H,0F0H,052H ; LOG poly coeff 1
DB 081H,00BH,095H,0C1H,0E4H ; LOG poly coeff 2
DB 081H,005H,0AAH,0C3H,068H ; LOG poly coeff 3
DB 081H,002H,0CDH,086H,099H ; LOG poly coeff 4
DB 081H,001H,064H,0D1H,0F4H ; LOG poly coeff 5
DB 081H,000H,0B1H,0EDH,050H ; LOG poly coeff 6
DB 081H,000H,058H,0D7H,0D3H ; LOG poly coeff 7
DB 080H,035H,004H,0F3H,034H ; EXP poly coeff 0
DB 080H,057H,044H,0FCH,0CBH ; EXP poly coeff 1
DB 080H,06AH,0C0H,0C6H,0E8H ; EXP poly coeff 2
DB 080H,075H,025H,07DH,016H ; EXP poly coeff 3
DB 080H,07AH,083H,0B2H,0DCH ; EXP poly coeff 4
DB 080H,07DH,03EH,00CH,00DH ; EXP poly coeff 5
DB 080H,07EH,09EH,011H,05DH ; EXP poly coeff 6
DB 080H,07FH,04EH,0CBH,05AH ; EXP poly coeff 7
L8458: DB 07AH,008H,088H,088H,089H ; SQR constant
L845D: DB 080H,031H,072H,017H,0F8H ; SQR constant
L8462: DB 080H,031H,072H,017H,0F8H ; SQR constant
L8467: DB 081H,038H,0AAH,03BH,02AH ; SQR constant
DB 080H,031H,072H,017H,0F8H ; SQR constant
L8471: DS 2, 000H
L8473: DS 2, 000H
L8475: DS 4, 000H
L8479: DS 4, 000H
L847D: DS 2, 000H
L847F: DS 2, 000H
L8481: DS 2, 000H
L8483: DS 2, 000H
L8485: DB 000H
L8486: DB 000H
L8487: DS 2, 000H
L8489: DS 2, 000H
L848B: DS 4, 000H
L848F: DB 000H
L8490: DS 2, 000H
DB 015H
DB 000H
DB 0EBH
DB 0FFH
DS 2, 000H
L8498: DS 2, 000H
L849A: DS 2, 000H
L849C: DS 7, 000H
L84A3: DB 000H
L84A4: DS 3, 000H
L84A7: DB 000H
L84A8: DS 4, 000H
L84AC: DB 000H
L84AD: DS 8, 000H
L84B5: DS 25, 000H
L84CE: DB 008H ; Splash screen / banner text
L84CF: DS 8, 000H
L84D7: DS 8, 000H
L84DF: DS 8, 000H
L84E7: DB 016H
DB 00DH
DB 020H
DS 38, 0D7H
DS 4, 020H
DB "BASIC ",005H,"INTERPRETER"
DS 2, 020H
DB 006H,"MZ-5Z"
DS 2, 030H
DB "8 V1.1Z ",00DH
DS 3, 020H
DB 043H,005H,"OPYRIGHT ",006H,"(C) 1984 ",005H,"BY ",006H,"SHARP CORP."
DS 5, 020H
DS 38, 0CFH
DB 020H,00DH,020H,005H,"30134 BYTES FR"
DS 2, 045H
DS 2, 00DH
DS 93, 000H
IF BUILD_RFS = 1
; =============================================================================
; $RFS - ROM Filing System device module (Direct SD Card Access)
;
; V1.0Z: Bypasses the RFS ROM entirely. All SD card access is done via
; direct SPI through the picoZ80 hardware SPI emulation at EFFBh/EFFCh.
;
; Only OUT(E3H) is needed to map MMIO for SPI port access, and OUT(E1H)
; to return to DRAM. No ROM banking, no BNKSELUSER, no lower memory
; switching required.
;
; SPI protocol:
; SPIOUT: LD (HWSPIDATA),A ; LD (HWSPISTART),A (send byte)
; SPIIN: LD (HWSPISTART),A ; LD A,(HWSPIDATA) (receive byte)
;
; SD card sector read (CMD17):
; CS LOW -> CMD17(0x51) + 4-byte sector + 0xFF -> poll R1(0x00) ->
; poll data token(0xFE) -> read 512 bytes -> 2 CRC -> CS HIGH
;
; SD image layout: each drive = 0x8010 sectors (directory + file blocks).
; Drive 0 at sector 0, drive 1 at 0x8010, drive 2 at 0x10020, etc.
; RFS1: = SD drive 3, RFS7: = SD drive 9 (SDDRIVENO = ZCH + 3, offset +3 skips boot drives 0-2).
;
; Directory: 16 entries per sector, 32 bytes each:
; [0] FLAG1 (bit7=active), [1] ATRB, [2..18] NAME (17, null-term),
; [19..22] START_SECTOR (4 bytes, big-endian),
; [23..24] SIZE (2 bytes, LE), [25..26] DTADR (2 bytes, LE),
; [27..28] EXADR (2 bytes, LE), [29..31] reserved.
;
; Device chain: $QD -> $RFS -> $USR -> NULL
; =============================================================================
; ---------------------------------------------------------------------------
; $RFS Device Descriptor (29 bytes header + 22 bytes state = 51 bytes)
; ---------------------------------------------------------------------------
ENDIF ; (Glass: $RFS label must be outside IF)
$RFS:
IF BUILD_RFS = 1
DW $USR ; Next device = $USR
DB "RFS",000H ; Device name
DB 05FH ; flags1: bit5=1 ZINP-based DIR, bit6=1 ZRO enum capable
DB 007H ; flags2: max channel 7 (bit7 must be 0, SVC #39 errors if set)
DB 0FFH ; dirmx: 255 (max directory entries)
DW RFSINIT ; ZINIT handler
DW RFSRO ; ZRO handler (LOAD: find file, extract header)
DW RFSWO ; ZWO handler (SAVE: sets ELMD20 SIZE)
DW RFSSTRT ; ZCL/ZSTRT handler
DW 00000H ; ZKL (not used)
DW RFSINP_DIR ; ZINP handler (DIR buffer fill + LOAD data)
DW RFSOUT ; ZOUT handler (triggers RFSWO on first call during SAVE)
DW 00000H ; ZDELT (not used)
DW RFSDIR ; ZWDIR handler (stub)
DW RFSFREE ; ZFREE handler
; Device state area (22 bytes) - BASIC reads/writes state at descriptor+29..+50.
; Without this, BASIC reads into code bytes causing "Disk mismatch" errors.
RFSST00: DB 000H ; +29: state byte 0
RFSST01: DB 000H ; +30: state byte 1
RFSST02: DB 000H ; +31: state byte 2
RFSST03: DS 3, 000H ; +32..+34: state bytes 3-5
RFSST06: DB 000H ; +35: state byte 6
RFSST07: DS 2, 000H ; +36..+37: state bytes 7-8
RFSST09: DB 000H ; +38: state byte 9
RFSST10: DB 000H ; +39: state byte 10
RFSST11: DB 000H ; +40: state byte 11
RFSST12: DB 000H ; +41: state byte 12
RFSST13: DS 4, 000H ; +42..+45: state bytes 13-16
RFSST17: DS 4, 000H ; +46..+49: state bytes 17-20
RFSST21: DB 000H ; +50: state byte 21
; ---------------------------------------------------------------------------
; RFSFREE - Free space query (not supported, return carry)
; ---------------------------------------------------------------------------
RFSFREE: XOR A
SCF
RET
; ---------------------------------------------------------------------------
; RFSINIT - Initialize RFS device
; ---------------------------------------------------------------------------
RFSINIT: XOR A
LD (SAVE_PENDING),A ; Clear at start of any operation
LD (DIR_FILLED),A ; Clear so next ZINP does DIR fill
LD (DIR_ENTRY_IDX),A ; Reset directory entry enumerator
LD A,0FFH
LD (DIRSECBUF),A ; Invalidate sector cache
LD A,(ZCH)
ADD A,003H ; RFS1:=drive 3, skipping boot drives 0-2
LD (SDDRIVENO),A
RET
; ---------------------------------------------------------------------------
; RFSSTRT - Start/Open device (A=0 means open, A!=0 means close)
; ---------------------------------------------------------------------------
RFSSTRT: OR A
RET NZ ; Close = just return
LD A,(ZCH)
ADD A,003H ; RFS1:=drive 3, skipping boot drives 0-2
LD (SDDRIVENO),A
;
; V1.1Y: Reset RFSRO state so file search starts from entry 0.
; Without this, LOAD after DIR/SAVE fails: RFSRO resumes from
; the post-DIR DIR_ENTRY_IDX position and misses files at earlier
; directory indices ("File not found" for files that exist).
XOR A
LD (DIR_ENTRY_IDX),A
LD A,0FFH
LD (DIRSECBUF),A ; Invalidate sector cache (stale after SAVE)
RET
; ---------------------------------------------------------------------------
; RFSDIR - ZWDIR handler (stub, not called with bit5=1 in flags1)
; ---------------------------------------------------------------------------
RFSDIR: XOR A
RET
; ---------------------------------------------------------------------------
; RFSWO - Write Open (ZWO handler)
;
; BASIC calls ZWO from BOTH the OPEN handler and L1CE4 SAVE path, THEN
; calls ZOUT. If we do the actual write here, the file gets created
; multiple times and the premature directory entry triggers "Already exist"
; during BASIC's own duplicate check.
;
; RFSWO calculates SIZE = TEXTED - TEXTST and stores it in ELMD20.
; This is essential because the SAVE path for bit-5 devices never populates
; ELMD20, leaving RFSDOWRITE to read SIZE=0. The actual SD write is still
; deferred to RFSOUT (ZOUT) via the SAVE_PENDING one-shot flag.
; ---------------------------------------------------------------------------
RFSWO: LD HL,(TEXTED) ; End of BASIC text area
LD DE,(TEXTST) ; Start of BASIC text area
OR A
SBC HL,DE ; HL = program size in bytes
LD (ELMD20),HL ; Store SIZE for RFSDOWRITE
XOR A ; A=0, NC = success
RET
; ---------------------------------------------------------------------------
; RFSDOWRITE - Actual SD card write (called from RFSOUT only)
;
; Performs the complete save operation:
; 1. Finds a free directory entry
; 2. Calculates the file's start sector from entry number
; 3. Writes file data sector-by-sector (toggling DRAM/MMIO)
; 4. Re-reads directory sector, fills entry, writes it back
;
; Entry: ELMD filled with file header (ATRB, NAME, SIZE, DTADR, EXADR)
; For type 2 (BASIC): ELMD20=SIZE, source data at TEXTST
; For type 1 (machine code): ELMD20=DTADR, ELMD18=SIZE
; Exit: NC = success, C = error
; ---------------------------------------------------------------------------
RFSDOWRITE: PUSH HL
PUSH DE
PUSH BC
;
; Get file info from ELMD — field mapping depends on file type.
; BASIC SAVE (type 2) stores SIZE in ELMD20 and source is TEXTST.
; Machine code SAVE (type 1) uses ELMD18=SIZE, ELMD20=DTADR.
LD A,(ELMD)
CP 002H
JR NZ,WO_NONBASIC
;
; Type 2 (BASIC): SIZE in ELMD20, source at TEXTST
LD HL,(ELMD20) ; SIZE (program length)
LD (FILE_SIZE),HL
LD HL,(TEXTST) ; Source = start of BASIC text
LD (FILE_LOADADDR),HL
JR WO_GOTINFO
;
WO_NONBASIC:
; Non-BASIC: SIZE in ELMD18, source at ELMD20
LD HL,(ELMD18) ; SIZE
LD (FILE_SIZE),HL
LD HL,(ELMD20) ; DTADR (source address for data)
LD (FILE_LOADADDR),HL
WO_GOTINFO:
;
; Set up drive number
LD A,(ZCH)
ADD A,003H ; RFS1:=drive 3
LD (SDDRIVENO),A
;
; Enter MMIO mode
CALL MMIO_ON
;
; Reset directory cache
LD A,0FFH
LD (DIRSECBUF),A
;
; --- Find free directory entry ---
LD E,000H
LD B,000H ; 256 entries (DJNZ wraps)
WO_SCAN: PUSH BC
PUSH DE
CALL GETSDDIRENT
POP DE
POP BC
OR A
JP NZ,WO_IOERR ; SD read error
LD A,(HL)
BIT 7,A
JR Z,WO_FOUND ; Bit 7 clear = free slot
INC E
DJNZ WO_SCAN
JP WO_IOERR ; Directory full
;
WO_FOUND: ; E = free entry number
LD A,E
LD (SAVE_DIRENT),A
;
; --- Calculate start sector: E * 128 + 16 ---
; E * 128 = E << 7, result fits 16 bits (max 255*128=32640)
LD H,000H
LD L,E ; HL = entry number
ADD HL,HL ; *2
ADD HL,HL ; *4
ADD HL,HL ; *8
ADD HL,HL ; *16
ADD HL,HL ; *32
ADD HL,HL ; *64
ADD HL,HL ; *128
LD DE,00010H ; +16 (directory sectors)
ADD HL,DE
LD D,000H
LD E,000H ; DEHL = relative sector
CALL RFSGETSECTR ; DEHL = absolute sector
CALL SETLBAADDR ; Store in SDSTARTSEC
;
; --- Write file data sector-by-sector ---
WO_WLOOP: LD HL,(FILE_SIZE)
LD A,H
OR L
JR Z,WO_WDONE ; No data left
;
; Map DRAM to read source data
OUT (PORT_DRAM),A
;
; Calculate bytes to copy: min(FILE_SIZE, 512)
LD HL,(FILE_SIZE)
LD DE,00200H ; 512
OR A
SBC HL,DE
JR C,WO_PARTIAL
;
; Full sector: remaining = HL
LD (FILE_SIZE),HL
LD BC,00200H
JR WO_COPY
;
WO_PARTIAL: ; Less than 512 bytes left
ADD HL,DE ; Restore HL = FILE_SIZE
LD B,H
LD C,L ; BC = bytes to copy
PUSH BC ; Save actual byte count
LD HL,0
LD (FILE_SIZE),HL
;
; Zero-fill SECTORBUF first for partial sector
LD HL,SECTORBUF
LD DE,SECTORBUF + 1
PUSH BC
LD BC,001FFH ; 511 bytes
LD (HL),000H
LDIR
POP BC
POP BC ; Restore actual byte count
;
WO_COPY: LD HL,(FILE_LOADADDR)
LD DE,SECTORBUF
LDIR ; Copy source data to SECTORBUF
LD (FILE_LOADADDR),HL ; Update source address
;
; Map MMIO for SPI write
OUT (PORT_MMIO),A
;
; Write SECTORBUF to current sector
CALL SD_WRITE
OR A
JP NZ,WO_IOERR
;
; Increment sector for next write
CALL INC_STARTSEC
JR WO_WLOOP
;
; --- Write directory entry ---
WO_WDONE: ; Ensure MMIO is active
OUT (PORT_MMIO),A
;
; Re-read the directory sector containing our entry
LD A,0FFH
LD (DIRSECBUF),A ; Force re-read
LD A,(SAVE_DIRENT)
LD E,A
PUSH DE
CALL GETSDDIRENT ; HL = entry in SECTORBUF
POP DE
OR A
JP NZ,WO_IOERR
;
; HL = 32-byte entry in SECTORBUF. Fill it.
; FLAG1 = 0x80 (active)
LD (HL),080H
INC HL
;
; ATRB: remap type 02 -> 05 for SD storage
LD A,(ELMD) ; Disk BASIC type
CP 002H
JR NZ,WO_AT1
LD A,005H ; BTX -> MZ-700 BASIC tape type
WO_AT1: LD (HL),A
INC HL
;
; NAME: 17 bytes from ELMD1, CR -> null
PUSH DE
LD DE,ELMD1
LD B,17
WO_NM: LD A,(DE)
CP 00DH ; CR?
JR NZ,WO_NM1
XOR A ; CR -> null for SD
WO_NM1: LD (HL),A
INC HL
INC DE
DJNZ WO_NM
POP DE
;
; START_SECTOR: 4 bytes (calculate from entry number)
PUSH HL ; Save directory entry pointer
LD A,(SAVE_DIRENT)
LD H,000H
LD L,A
ADD HL,HL ; *2
ADD HL,HL ; *4
ADD HL,HL ; *8
ADD HL,HL ; *16
ADD HL,HL ; *32
ADD HL,HL ; *64
ADD HL,HL ; *128
LD DE,00010H ; +16
ADD HL,DE ; HL = relative start sector (16-bit)
; Store as big-endian 32-bit (D=0, E=0, H, L)
EX DE,HL ; DE = sector
POP HL ; HL = entry pointer
LD (HL),000H ; Byte 0 (MSB) = 0
INC HL
LD (HL),000H ; Byte 1 = 0
INC HL
LD (HL),D ; Byte 2
INC HL
LD (HL),E ; Byte 3 (LSB)
INC HL
;
; SIZE: 2 bytes LE — read original from ELMD (FILE_SIZE is 0 after write loop).
PUSH DE
LD A,(ELMD)
CP 002H
JR NZ,WO_SZ_NB
LD DE,(ELMD20) ; BASIC: SIZE in ELMD20
JR WO_SZ_OK
WO_SZ_NB: LD DE,(ELMD18) ; Non-BASIC: SIZE in ELMD18
WO_SZ_OK: LD (HL),E
INC HL
LD (HL),D
INC HL
;
; DTADR: 2 bytes LE — read original from ELMD/TEXTST.
LD A,(ELMD)
CP 002H
JR NZ,WO_DA_NB
LD DE,(TEXTST) ; BASIC: load address is TEXTST
JR WO_DA_OK
WO_DA_NB: LD DE,(ELMD20) ; Non-BASIC: DTADR in ELMD20
WO_DA_OK: LD (HL),E
INC HL
LD (HL),D
INC HL
;
; EXADR: 2 bytes LE from ELMD22
LD DE,(ELMD22)
LD (HL),E
INC HL
LD (HL),D
INC HL
;
; RESERVED: 3 bytes zero
LD (HL),000H
INC HL
LD (HL),000H
INC HL
LD (HL),000H
POP DE
;
; Write the directory sector back to SD
; Calculate directory sector address
LD A,(SAVE_DIRENT)
SRL A
SRL A
SRL A
SRL A ; A = dir sector number (0-15)
LD DE,0
LD H,0
LD L,A
CALL RFSGETSECTR ; DEHL = absolute dir sector
CALL SETLBAADDR
CALL SD_WRITE
OR A
JR NZ,WO_IOERR
;
; Success
CALL MMIO_OFF
POP BC
POP DE
POP HL
XOR A ; NC = success
RET
;
WO_IOERR: CALL MMIO_OFF
POP BC
POP DE
POP HL
XOR A
SCF ; C = error
RET
; ---------------------------------------------------------------------------
; RFSOUT - Write Data (ZOUT handler for SAVE)
;
; BASIC's SAVE path calls ZOUT after ZWO. Since RFSWO is now a no-op,
; RFSOUT is the single entry point for the actual write. On the first
; call (SAVE_PENDING=0, cleared by RFSINIT), we call RFSDOWRITE to do
; the full SD card write in one shot (reading directly from DTADR in
; memory). Sets SAVE_PENDING=1 after, so subsequent calls are no-ops.
; ---------------------------------------------------------------------------
RFSOUT: LD A,(SAVE_PENDING)
OR A
JR NZ,RFSOUT_NOP ; Already written (1 = done), return success
INC A ; A = 1
LD (SAVE_PENDING),A ; Mark as done (one-shot)
JP RFSDOWRITE ; Do the full SD write and return
RFSOUT_NOP: XOR A ; A=0, NC = success
RET
; ---------------------------------------------------------------------------
; RFSRO - Read One directory entry (ZRO handler).
;
; V1.1V: Rewritten as directory entry enumerator.
;
; ZRO is called by BASIC for two purposes:
; 1. L1C0F file search loop (HL=KEYBUF) — enumerate entries, compare names
; 2. L1D53 DIR buffer fill loop (HL=L2000+offset) — fill 32-byte entries
;
; Each call returns one valid 32-byte MZF directory entry at the buffer
; pointed to by HL (the caller's HL passed through IOCALL). The internal
; DIR_ENTRY_IDX counter advances across calls; RFSINIT resets it to 0.
;
; Entry: HL = target buffer (32 bytes, set by caller before IOCALL)
; Exit: NC = valid entry written to (HL), A = entry type (ATRB byte)
; CF = no more entries (A=0)
; ---------------------------------------------------------------------------
RFSRO:
; Save target buffer address for CONVERT_ENTRY
LD (DIR_BUFPTR),HL
;
; Save registers on BASIC stack (before MMIO_ON switches stacks)
PUSH HL
PUSH DE
PUSH BC
;
; Set up drive number
LD A,(ZCH)
ADD A,003H ; RFS1:=drive 3
LD (SDDRIVENO),A
;
; Enter MMIO mode (switches to temp stack, enables SPI)
CALL MMIO_ON
;
; Clear 32 bytes at target buffer (below D000H, accessible in MMIO)
LD HL,(DIR_BUFPTR)
LD B,32
RFSRO_CLR: LD (HL),000H
INC HL
DJNZ RFSRO_CLR
;
RFSRO_NEXT:
; Get current entry index
LD A,(DIR_ENTRY_IDX)
LD E,A
;
; Read directory entry from SD card
CALL GETSDDIRENT ; HL=entry in SECTORBUF, A=status
OR A
JR NZ,RFSRO_END ; SD read error → done
;
; Check if entry is active (FLAG1 bit 7 set)
LD A,(HL)
BIT 7,A
JR Z,RFSRO_SKIP ; Inactive, skip
;
; Check ATRB at offset 1 — reject 0x00 (empty) and 0xFF (uninit)
INC HL
LD A,(HL)
DEC HL ; HL back to entry start
OR A
JR Z,RFSRO_SKIP ; ATRB=0, skip
CP 0FFH
JR Z,RFSRO_SKIP ; ATRB=0xFF, skip
;
; Valid entry: convert SD format to MZF format at DIR_BUFPTR
; (DIR_BUFPTR was set at RFSRO entry from caller's HL)
; HL = SD entry in SECTORBUF
CALL CONVERT_ENTRY
;
; Advance entry index for next call
LD A,(DIR_ENTRY_IDX)
INC A
LD (DIR_ENTRY_IDX),A
;
; Debug: show entry delivered
PUSH AF
OUT (PORT_DRAM),A ; Switch to DRAM for debug I/O
LD A,(DIR_ENTRY_IDX)
DEC A ; Show the index we just returned
OUT (PORT_MMIO),A ; Back to MMIO
POP AF
;
; Success: exit MMIO, restore regs, return NC
CALL MMIO_OFF
POP BC
POP DE
POP HL
;
; Return ATRB value in A, NC = success
LD HL,(DIR_BUFPTR)
LD A,(HL) ; A = ATRB byte (first byte of MZF entry)
OR A ; Clear carry
RET
;
RFSRO_SKIP:
; Advance to next entry
LD A,(DIR_ENTRY_IDX)
INC A
LD (DIR_ENTRY_IDX),A
JR Z,RFSRO_END ; Wrapped 255->0: all 256 scanned
JR RFSRO_NEXT
;
RFSRO_END:
; No more entries (or SD error)
CALL MMIO_OFF
POP BC
POP DE
POP HL
XOR A ; A=0
SCF ; CF = no more entries
RET
; ---------------------------------------------------------------------------
; RFSINP_DIR - ZINP handler for $RFS device
;
; For bit-5 devices, BASIC calls ZINP for three purposes:
; 1. Disk identity read (H >= 28H) — returns zeros at 2800-28FF
; 2. DIR buffer fill (DIR_FILLED=0, H < 28H) — fills 2000-27FF
; 3. LOAD data transfer (DIR_FILLED=1, H < 28H) — reads from SD card
;
; IMPORTANT: H >= 28H MUST be checked first, before DIR_FILLED.
; BASIC's data transfer path (L2AD2 → L2FD1 → L2FE8 → L2E36 → L2E67)
; does an identity read (H=28H) AFTER the DIR buffer fill has set
; DIR_FILLED=1. If DIR_FILLED were checked first, this identity read
; would incorrectly dispatch to RFSINP_LD.
;
; Returns: carry clear, A=0 (success)
; ---------------------------------------------------------------------------
RFSINP_DIR:
; Debug: trace every ZINP call
PUSH AF
LD A,H
POP AF
;
; LOAD data path: BASIC's LOAD for bit5=0 devices calls ZINP once
; via JP 019BBH (XOR A; CALL L18B6; CALL L1929). Entry A=0 signals
; "load file data now" — skip DIR fill and identity checks entirely.
; The byte-at-a-time refill path (L19B4) enters with A=0xFF (OR 0AFH).
OR A
JP Z,RFSINP_LD ; A=0 → LOAD path: read file to DTADR
;
; Identity reads (H >= 28H) MUST go to RFSINP_DISKID regardless of
; DIR_FILLED, because BASIC does identity validation (L2E36 → L2E67 →
; L2FD4 → IOCALL) AFTER the DIR buffer fill has set DIR_FILLED=1.
; If DIR_FILLED were checked first, the identity read would dispatch
; to RFSINP_LD instead of RFSINP_DISKID → identity validation fails.
LD A,H
CP 028H
JP NC,RFSINP_DISKID ; H >= 28H → identity (always)
;
; H < 28H: DIR buffer fill or data transfer
LD A,(DIR_FILLED)
OR A
JP NZ,RFSINP_LD ; DIR already filled → data transfer
;
; --- DIR mode: enumerate files into 0x2000 buffer ---
;
PUSH HL
PUSH DE
PUSH BC
;
; Clear DIR buffer 0x2000-0x27FF (2048 bytes = 64 entries x 32)
LD HL,L2000
LD DE,L2000 + 1
LD BC,007FFH
LD (HL),000H
LDIR
;
; Set up SD drive from channel number
LD A,(ZCH)
ADD A,003H ; RFS1:=drive 3, skipping boot drives 0-2
LD (SDDRIVENO),A
;
; Entry 0 at 0x2000: skip marker (0x80)
LD HL,L2000
LD (HL),080H
;
; Enter MMIO mode
CALL MMIO_ON
;
; Reset directory sector cache
LD A,0FFH
LD (DIRSECBUF),A
;
; Scan SD directory, fill MZF entries starting at 0x2020
LD HL,L2000 + 020H
LD (DIR_BUFPTR),HL ; Current buffer write position
LD E,000H ; E = SD directory entry index (0-255)
LD D,03FH ; D = remaining buffer entries (max 63)
LD B,000H ; B = 256 entries to scan (DJNZ wraps)
;
RDIR_LOOP: PUSH BC
PUSH DE
CALL GETSDDIRENT ; HL = entry in SECTORBUF, A = status
POP DE
POP BC
OR A
JR NZ,RDIR_DONE ; SD read error, stop
;
; Debug: dump first 4 entries (E=0..3) FLAG1+ATRB
LD A,E
CP 004H
JR NC,RDIR_NDBG ; Only dump entries 0-3
PUSH HL
PUSH AF
LD A,E
POP AF
POP HL
PUSH HL
PUSH BC
; Dump 8 bytes from entry
LD B,008H
RDIR_DBLP: LD A,(HL)
INC HL
DJNZ RDIR_DBLP
POP BC
POP HL
;
RDIR_NDBG:
; Check if entry is active (FLAG1 bit 7) AND has valid ATRB.
; Uninitialized SD entries (0xFF fill) have bit 7 set but ATRB=0xFF,
; so we reject ATRB=0x00 (empty) and ATRB=0xFF (uninitialized).
; All other values (0x01-0xFE) are accepted, including non-standard
; file types like 0x7E found on some partitions.
LD A,(HL)
BIT 7,A
JR Z,RDIR_NEXT ; Inactive (FLAG1 bit7=0), skip
INC HL
LD A,(HL) ; A = ATRB (offset 1)
DEC HL ; HL back to entry start
OR A
JR Z,RDIR_NEXT ; ATRB=0 → invalid, skip
CP 0FFH
JR Z,RDIR_NEXT ; ATRB=0xFF → uninitialized, skip
;
; Convert SD entry at HL to MZF format in DIR buffer
PUSH DE
PUSH BC
CALL CONVERT_ENTRY ; HL=SD entry, writes to (DIR_BUFPTR)
POP BC
POP DE
DEC D ; One fewer buffer slot
JR Z,RDIR_DONE ; Buffer full
;
RDIR_NEXT: INC E ; Next SD directory entry
DJNZ RDIR_LOOP
;
RDIR_DONE: CALL MMIO_OFF
; Debug: show how many entries found (D started at 63, remaining = D)
PUSH AF
LD A,03FH ; 63 max
SUB D ; A = entries found
POP AF
;
POP BC
POP DE
POP HL
LD A,001H
LD (DIR_FILLED),A ; Mark DIR buffer as filled
XOR A ; A=0, carry clear = success
RET
;
; --- Disk identity mode: zero L2800-L28FF ---
; L2E36 validates: (L2800) exact + L2806-L28FF bitmask against
; stored reference. L2E77/L2E84 modifies L2801-L2805 and writes
; computed values at L2806+. By presenting all-zeros consistently,
; L2E84 computes the same result each time → reference matches.
;
RFSINP_DISKID:
PUSH HL
PUSH DE
PUSH BC
LD HL,02800H
LD DE,02801H
LD BC,000FFH ; 255 bytes: L2800-L28FF
LD (HL),000H
LDIR
POP BC
POP DE
POP HL
XOR A ; A=0, carry clear = success
RET
; ---------------------------------------------------------------------------
; RFSINP_LD - LOAD data transfer (ZINP with ZLOG != 0)
;
; Reads file data sector-by-sector from SD card into the load address.
; For bit-5 devices, BASIC's LOAD path does NOT call ZRO and does not
; set ZLOG. RFSINP_DIR dispatches here when DIR_FILLED=1 (DIR buffer
; already populated). We find the file in the SD directory via FINDSD,
; extract SIZE, DTADR, and start sector directly from the SD entry.
; ---------------------------------------------------------------------------
RFSINP_LD: ; Debug: trace RFSINP_LD entry
PUSH AF
; Dump ELMD1 first 8 chars
PUSH HL
PUSH BC
LD HL,ELMD1
LD B,008H
ILD_DMP: LD A,(HL)
INC HL
DJNZ ILD_DMP
POP BC
POP HL
POP AF
;
; V1.1Y: Save entry A value (0=SVC #30 LOAD, nonzero=SVC #33 refill).
; RLD_DONE needs this to skip status byte writes when L180B still points
; at SVC #2C self-modifying code (0x1A85, set by prior DIR's SVC #2E).
LD (RFS_LD_A0),A
;
PUSH HL
PUSH DE
PUSH BC
;
; Set up drive number
LD A,(ZCH)
ADD A,003H ; RFS1:=drive 3, skipping boot drives 0-2
LD (SDDRIVENO),A
;
; Enter MMIO mode
CALL MMIO_ON
;
; Reset directory sector cache
LD A,0FFH
LD (DIRSECBUF),A
;
; Find file by name in SD directory to get start sector
LD DE,ELMD1
CALL FINDSD
JP NZ,RLD_NFERR ; File not found
;
; HL = directory entry in SECTORBUF
; Skip FLAG1(1) + ATRB(1) + NAME(17) = 19 bytes to START_SECTOR
LD DE,19
ADD HL,DE
;
; Copy 4-byte start sector to FILE_STARTSEC (big-endian)
LD DE,FILE_STARTSEC
LD A,(HL)
LD (DE),A
INC HL
INC DE
LD A,(HL)
LD (DE),A
INC HL
INC DE
LD A,(HL)
LD (DE),A
INC HL
INC DE
LD A,(HL)
LD (DE),A
;
; HL now at offset 22 (last byte of START_SECTOR).
; Read SIZE(2) and DTADR(2) from the SD directory entry
; (offset 23..26) instead of ELMD, which may not be populated
; for bit-5 device LOAD paths.
INC HL ; HL = offset 23 = SIZE low
LD E,(HL)
INC HL ; HL = offset 24 = SIZE high
LD D,(HL)
EX DE,HL ; HL = SIZE
LD (FILE_SIZE),HL
EX DE,HL ; HL = offset 24 again
INC HL ; HL = offset 25 = DTADR low
LD E,(HL)
INC HL ; HL = offset 26 = DTADR high
LD D,(HL)
EX DE,HL ; HL = DTADR
LD (FILE_LOADADDR),HL
;
; For BASIC programs (ELMD type 2/BTX), override FILE_LOADADDR
; with TEXTST. The file's DTADR reflects whatever system it was
; saved on and may point inside Disk BASIC code. BASIC's own
; SVC 038H rechain (called in the LOAD command handler at L5C44)
; rebuilds all next-line pointers from scratch, so the data just
; needs to land at the current TEXTST.
LD A,(ELMD) ; File attribute byte
CP 002H ; Type 2 = BTX (BASIC text)?
JR NZ,RLD_NORLOC ; No → use DTADR as-is
LD HL,(TEXTST) ; Current text area start
LD (FILE_LOADADDR),HL
RLD_NORLOC:
;
; Convert FILE_STARTSEC to absolute sector (add drive offset)
LD A,(FILE_STARTSEC)
LD D,A
LD A,(FILE_STARTSEC+1)
LD E,A
LD A,(FILE_STARTSEC+2)
LD H,A
LD A,(FILE_STARTSEC+3)
LD L,A
CALL RFSGETSECTR ; DEHL += drive_offset
;
; Store absolute sector in SDSTARTSEC for SD_READ
LD A,D
LD (SDSTARTSEC),A
LD A,E
LD (SDSTARTSEC+1),A
LD A,H
LD (SDSTARTSEC+2),A
LD A,L
LD (SDSTARTSEC+3),A
;
; Debug: dump FILE_STARTSEC, absolute sector, SIZE, DTADR
; Switch to DRAM for debug output (port 050H may need DRAM)
PUSH AF
OUT (PORT_DRAM),A
; FILE_STARTSEC (4 bytes)
LD A,(FILE_STARTSEC)
LD A,(FILE_STARTSEC+1)
LD A,(FILE_STARTSEC+2)
LD A,(FILE_STARTSEC+3)
; Absolute sector (SDSTARTSEC, 4 bytes)
LD A,(SDSTARTSEC)
LD A,(SDSTARTSEC+1)
LD A,(SDSTARTSEC+2)
LD A,(SDSTARTSEC+3)
; SIZE
LD A,(FILE_SIZE+1) ; High byte
LD A,(FILE_SIZE) ; Low byte
; DTADR
LD A,(FILE_LOADADDR+1) ; High byte
LD A,(FILE_LOADADDR) ; Low byte
; Switch back to MMIO
OUT (PORT_MMIO),A
POP AF
;
RLD_LOOP: ; Read one sector into SECTORBUF
CALL SD_READ
OR A
JR NZ,RLD_ERR
;
; Map DRAM to copy data (target may be >= D000H)
OUT (PORT_DRAM),A
;
; Calculate bytes to copy: min(FILE_SIZE, 512)
LD HL,(FILE_SIZE)
LD DE,00200H ; 512
OR A
SBC HL,DE ; HL = FILE_SIZE - 512
JR C,RLD_PARTIAL ; FILE_SIZE < 512
;
; Full sector: remaining = HL, copy 512 bytes
LD (FILE_SIZE),HL
LD BC,00200H
JR RLD_COPY
;
RLD_PARTIAL:; Partial sector: remaining = 0, copy FILE_SIZE bytes
ADD HL,DE ; Restore HL = FILE_SIZE
LD B,H
LD C,L ; BC = bytes to copy
LD HL,0
LD (FILE_SIZE),HL ; Done after this
;
RLD_COPY: LD HL,SECTORBUF
LD DE,(FILE_LOADADDR)
LDIR ; Copy sector data to target
LD (FILE_LOADADDR),DE ; Update target address
;
; Check if all data transferred
LD HL,(FILE_SIZE)
LD A,H
OR L
JR Z,RLD_DONE ; All done
;
; Increment SDSTARTSEC for next sector
CALL INC_STARTSEC
;
; Map MMIO for next sector read
OUT (PORT_MMIO),A
JR RLD_LOOP
;
RLD_DONE: ; Map MMIO so MMIO_OFF can work (it expects temp stack)
OUT (PORT_MMIO),A
CALL MMIO_OFF
;
; V1.1Y: Only write status bytes when entered via SVC #33 refill path
; (A≠0 at entry). The SVC #30 LOAD path (A=0) leaves L180B pointing at
; 0x1A85 (set by prior DIR's SVC #2E), which is inside SVC #2C's
; self-modifying LD HL,nnnn instruction (opcode 0x21 at 0x1A83).
; Writing 0xFF there corrupts the opcode to RST 38H, breaking all
; subsequent device-open calls ("Dev. name error" after LOAD).
; SVC #30 callers don't read the status bytes, so skipping is safe.
LD A,(RFS_LD_A0)
OR A
JR Z,RLD_SKIP_STAT
;
; SVC #33 refill path: write status bytes at (L180B)-2 to 0xFF,0xFF
; = "last block, all done". L1AEF already set L180B to a safe buffer.
LD HL,(L180B)
DEC HL
LD (HL),0FFH ; (L180B)-1 = 0xFF
DEC HL
LD (HL),0FFH ; (L180B)-2 = 0xFF
;
RLD_SKIP_STAT:
POP BC
POP DE
POP HL
XOR A ; NC = success
RET
;
RLD_ERR: CALL MMIO_OFF
POP BC
POP DE
POP HL
XOR A
SCF ; Carry = error
RET
;
RLD_NFERR: CALL MMIO_OFF
POP BC
POP DE
POP HL
XOR A
SCF ; Carry = file not found
RET
; ===========================================================================
; Low-level SD card access routines
; ===========================================================================
; ---------------------------------------------------------------------------
; MMIO_ON - Enter MMIO mode for SPI access
;
; Saves BASIC stack pointer, switches to temp stack, disables interrupts,
; maps MMIO (D000-FFFF), and trains the upCntr latch.
; After return, caller is on temp stack and can access EFF8-EFFF.
; ---------------------------------------------------------------------------
MMIO_ON: POP HL ; Get return address (from BASIC stack)
LD (SAVE_SP),SP ; Save BASIC SP
LD SP,TEMP_STACK_TOP ; Switch to temp stack
PUSH HL ; Push return address on temp stack
DI
XOR A
OUT (PORT_MMIO),A ; Map D000-FFFF to MMIO
CALL TRAIN_UPCNTR ; Train latch (15 reads of EFF8H)
RET ; Return to caller (via temp stack)
; ---------------------------------------------------------------------------
; MMIO_OFF - Leave MMIO mode, restore DRAM and BASIC stack
;
; Maps D000-FFFF back to DRAM, enables interrupts, restores BASIC stack.
; ---------------------------------------------------------------------------
MMIO_OFF: POP HL ; Get return address (from temp stack)
XOR A
OUT (PORT_DRAM),A ; Map D000-FFFF to DRAM
EI
LD SP,(SAVE_SP) ; Restore BASIC stack
JP (HL) ; Return to caller (on BASIC stack)
; ---------------------------------------------------------------------------
; TRAIN_UPCNTR - Train the RFS register latch (upCntr) to 15
;
; Reads BNKCTRLRST 15 times to enable control register writes.
; Entry: MMIO must be mapped (OUT E3H done)
; Exit: A = 0, HL and B modified
; ---------------------------------------------------------------------------
TRAIN_UPCNTR:
LD HL,BNKCTRLRST ; EFF8H
LD B,15
TRAIN_LP: LD A,(HL) ; Each read increments upCntr
DJNZ TRAIN_LP
XOR A
RET
; ---------------------------------------------------------------------------
; SPIOUT - Send one byte via hardware SPI
; Entry: A = byte to send
; Exit: A unchanged
; ---------------------------------------------------------------------------
SPIOUT: LD (HWSPIDATA),A ; Write data to SPI register
LD (HWSPISTART),A ; Start SPI transfer (clocks 8 bits)
RET
; ---------------------------------------------------------------------------
; SPIIN - Receive one byte via hardware SPI
; Entry: (none)
; Exit: A = received byte
; ---------------------------------------------------------------------------
SPIIN: LD (HWSPISTART),A ; Clock 8 bits (sends whatever was in A)
LD A,(HWSPIDATA) ; Read received byte
RET
; ---------------------------------------------------------------------------
; SPI_CS_LO - Activate SD card chip select (CS LOW)
; ---------------------------------------------------------------------------
SPI_CS_LO: LD A,SDCS_ACT ; CS LOW, clock enable
LD (BNKCTRL),A
RET
; ---------------------------------------------------------------------------
; SPI_CS_HI - Deactivate SD card chip select (CS HIGH)
; ---------------------------------------------------------------------------
SPI_CS_HI: LD A,SDCS_DEACT ; CS HIGH, clock enable
LD (BNKCTRL),A
RET
; ---------------------------------------------------------------------------
; SD_READ - Read one 512-byte sector from SD card into SECTORBUF
;
; Entry: SDSTARTSEC = 32-bit sector address (big-endian, 4 bytes)
; MMIO must be mapped, upCntr trained
; Exit: A = 0 success, A = 1 error
; SECTORBUF contains 512 bytes of sector data
; Modified: A, B, D, HL
; ---------------------------------------------------------------------------
SD_READ: CALL SPI_CS_LO ; CS LOW (activate card)
;
; Send CMD17 (Read Single Block): 0x51 + 4-byte sector + 0xFF
LD A,051H ; CMD17
CALL SPIOUT
LD A,(SDSTARTSEC) ; Sector byte 0 (MSB)
CALL SPIOUT
LD A,(SDSTARTSEC+1) ; Sector byte 1
CALL SPIOUT
LD A,(SDSTARTSEC+2) ; Sector byte 2
CALL SPIOUT
LD A,(SDSTARTSEC+3) ; Sector byte 3 (LSB)
CALL SPIOUT
LD A,0FFH ; CRC (dummy, ignored by emulation)
CALL SPIOUT
;
; Poll for R1 response (should be 0x00, not 0xFF)
LD B,0FFH ; Max 255 retries
SDR_R1: CALL SPIIN
CP 0FFH
JR NZ,SDR_GOTR1 ; Got non-0xFF response
DJNZ SDR_R1
JR SDR_ERR ; Timeout
;
SDR_GOTR1: OR A ; R1 should be 0x00 (no error)
JR NZ,SDR_ERR
;
; Poll for data token (0xFE)
LD B,0FFH
SDR_TOK: CALL SPIIN
CP 0FEH ; Data token?
JR Z,SDR_DATA ; Yes, start reading data
CP 0FFH ; Still busy?
JR NZ,SDR_ERR ; Error token
DJNZ SDR_TOK
JR SDR_ERR ; Timeout
;
; Read 512 bytes into SECTORBUF (2 pages of 256 bytes)
SDR_DATA: LD HL,SECTORBUF
LD D,002H ; 2 pages
SDR_PG: LD B,000H ; 256 bytes per page (B=0 wraps DJNZ)
SDR_BYTE: CALL SPIIN
LD (HL),A
INC HL
DJNZ SDR_BYTE
DEC D
JR NZ,SDR_PG
;
; Skip 2 CRC bytes
CALL SPIIN
CALL SPIIN
;
CALL SPI_CS_HI ; CS HIGH (deactivate)
XOR A ; A = 0, success
RET
;
SDR_ERR: CALL SPI_CS_HI ; CS HIGH on error too
LD A,001H ; A = 1, error
RET
; ---------------------------------------------------------------------------
; SD_WRITE - Write one 512-byte sector from SECTORBUF to SD card
;
; Entry: SDSTARTSEC = 32-bit sector address (big-endian, 4 bytes)
; SECTORBUF contains 512 bytes to write
; MMIO must be mapped, upCntr trained
; Exit: A = 0 success, A = 1 error
; Modified: A, B, D, HL
; ---------------------------------------------------------------------------
SD_WRITE: CALL SPI_CS_LO ; CS LOW (activate card)
;
; Send CMD24 (Write Single Block): 0x58 + 4-byte sector + 0xFF
LD A,058H ; CMD24
CALL SPIOUT
LD A,(SDSTARTSEC)
CALL SPIOUT
LD A,(SDSTARTSEC+1)
CALL SPIOUT
LD A,(SDSTARTSEC+2)
CALL SPIOUT
LD A,(SDSTARTSEC+3)
CALL SPIOUT
LD A,0FFH ; Dummy CRC
CALL SPIOUT
;
; Poll for R1 response (should be 0x00)
LD B,0FFH
SDW_R1: CALL SPIIN
CP 0FFH
JR NZ,SDW_GOTR1
DJNZ SDW_R1
JR SDW_ERR ; Timeout
;
SDW_GOTR1: OR A
JR NZ,SDW_ERR ; R1 error
;
; Send data token 0xFE
LD A,0FEH
CALL SPIOUT
;
; Send 512 bytes from SECTORBUF (2 pages of 256)
LD HL,SECTORBUF
LD D,002H
SDW_PG: LD B,000H ; 256 bytes per page
SDW_BYTE: LD A,(HL)
CALL SPIOUT
INC HL
DJNZ SDW_BYTE
DEC D
JR NZ,SDW_PG
;
; Send 2 dummy CRC bytes
LD A,0FFH
CALL SPIOUT
CALL SPIOUT
;
; Read data response token: xxx00101 = accepted (0x05)
CALL SPIIN
AND 01FH
CP 005H
JR NZ,SDW_ERR
;
; Wait for busy (card holds MISO low while writing)
LD D,040H ; Outer loop: 64
SDW_BSY1: LD B,000H ; Inner loop: 256 -> 64*256=16384 polls
SDW_BSY2: CALL SPIIN
CP 0FFH ; 0xFF = not busy
JR Z,SDW_DONE
DJNZ SDW_BSY2
DEC D
JR NZ,SDW_BSY1
JR SDW_ERR ; Timeout
;
SDW_DONE: CALL SPI_CS_HI
XOR A ; A = 0, success
RET
;
SDW_ERR: CALL SPI_CS_HI
LD A,001H ; A = 1, error
RET
; ===========================================================================
; Directory and file access routines
; ===========================================================================
; ---------------------------------------------------------------------------
; ADD3216 - Add 16-bit BC to 32-bit DEHL
;
; Entry: DEHL = 32-bit number, BC = 16-bit addend
; Exit: DEHL = DEHL + BC
; Modified: BC (set to 0)
; ---------------------------------------------------------------------------
ADD3216: ADD HL,BC
EX DE,HL
LD BC,0
ADC HL,BC ; Add carry to upper 16 bits
EX DE,HL
RET
; ---------------------------------------------------------------------------
; RFSGETSECTR - Calculate absolute SD sector from drive-relative sector
;
; Adds (SDDRIVENO * 0x8010) to DEHL.
; Each drive image occupies 0x8010 sectors in the SD card image.
;
; Entry: DEHL = relative sector (32-bit)
; SDDRIVENO = drive number (0 = first drive, 1 = second, etc.)
; Exit: DEHL = absolute sector
; Modified: A, BC
; ---------------------------------------------------------------------------
RFSGETSECTR:
LD A,(SDDRIVENO)
GETSEC_LP: OR A
RET Z ; Drive 0 = no offset
DEC A
LD BC,08010H ; Sectors per drive image
CALL ADD3216
JR GETSEC_LP
; ---------------------------------------------------------------------------
; SETLBAADDR - Store DEHL into SDSTARTSEC (big-endian)
;
; Entry: DEHL = 32-bit sector (D=MSB, L=LSB)
; Exit: SDSTARTSEC updated
; Modified: A
; ---------------------------------------------------------------------------
SETLBAADDR: LD A,D
LD (SDSTARTSEC),A
LD A,E
LD (SDSTARTSEC+1),A
LD A,H
LD (SDSTARTSEC+2),A
LD A,L
LD (SDSTARTSEC+3),A
RET
; ---------------------------------------------------------------------------
; INC_STARTSEC - Increment SDSTARTSEC by 1 (32-bit big-endian)
; Modified: HL
; ---------------------------------------------------------------------------
INC_STARTSEC:
LD HL,SDSTARTSEC+3 ; LSB
INC (HL)
RET NZ
DEC HL ; Byte 2
INC (HL)
RET NZ
DEC HL ; Byte 1
INC (HL)
RET NZ
DEC HL ; MSB
INC (HL)
RET
; ---------------------------------------------------------------------------
; GETSDDIRENT - Get SD directory entry with sector caching
;
; Reads the directory sector containing entry E if not cached, then
; returns a pointer to the entry within SECTORBUF.
;
; Entry: E = directory entry number (0-255)
; MMIO mapped, upCntr trained
; Exit: HL = pointer to 32-byte entry in SECTORBUF
; A = 0 success, A = 1 error
; Modified: A, BC, DE, HL
; ---------------------------------------------------------------------------
GETSDDIRENT:
PUSH DE
;
; Calculate which sector this entry is in (E / 16)
LD A,E
SRL A
SRL A
SRL A
SRL A ; A = sector number within directory
;
; Check if this sector is already cached
LD C,A
LD A,(DIRSECBUF)
CP C
JR Z,GDIR_CACHED ; Same sector, use cached data
;
; Need to read a new sector
LD A,C
LD (DIRSECBUF),A ; Update cache tag
;
; Calculate absolute sector: drive_offset + dir_sector
LD DE,0
LD H,0
LD L,A ; DEHL = directory sector (relative)
CALL RFSGETSECTR ; DEHL = absolute sector
CALL SETLBAADDR ; Store in SDSTARTSEC
CALL SD_READ ; Read sector into SECTORBUF
OR A
JR NZ,GDIR_ERR
;
GDIR_CACHED:; Calculate offset within sector: (E & 0x0F) * 32
POP DE
PUSH DE
LD A,E
AND 00FH ; Entry within sector (0-15)
LD HL,SECTORBUF
OR A
JR Z,GDIR_DONE ; First entry, no offset needed
;
; Add A * 32 to HL
LD B,A
LD DE,00020H ; 32 bytes per entry
GDIR_ADD: ADD HL,DE
DJNZ GDIR_ADD
;
GDIR_DONE: POP DE
XOR A ; A = 0, success
RET
;
GDIR_ERR: POP DE
LD A,001H ; A = 1, error
RET
; ---------------------------------------------------------------------------
; FINDSD - Find file by name in SD card directory
;
; Searches all 256 directory entries for an active entry whose filename
; matches the string at DE (prefix match: input terminated by CR or null).
;
; Entry: DE = filename string (CR or null terminated)
; MMIO mapped, upCntr trained, DIRSECBUF set to 0xFF
; Exit: Z flag set = found, HL = directory entry in SECTORBUF
; NZ flag = not found
; Modified: A, BC, DE, HL
; ---------------------------------------------------------------------------
FINDSD: LD (FINDSD_NAME),DE ; Save search name pointer
LD E,000H ; E = directory entry index
LD B,000H ; B = 256 entries (DJNZ wraps from 0)
;
FSD_LOOP: PUSH BC
PUSH DE
CALL GETSDDIRENT ; HL = entry, A = status
POP DE
POP BC
OR A
JR NZ,FSD_NF ; Read error = not found
;
; Check if entry is active (FLAG1 bit 7) AND has valid ATRB.
; Accept all non-zero, non-0xFF ATRB (01-FE).
LD A,(HL)
BIT 7,A
JR Z,FSD_NEXT ; Inactive, skip
INC HL
LD A,(HL) ; A = ATRB (offset 1)
DEC HL ; HL back to entry start
OR A
JR Z,FSD_NEXT ; ATRB=0 → invalid, skip
CP 0FFH
JR Z,FSD_NEXT ; ATRB=0xFF → uninitialized, skip
;
; Compare filename: dir entry name at HL+2 vs search name
PUSH HL ; Save entry start
PUSH DE
PUSH BC
INC HL
INC HL ; HL = directory entry name (offset 2)
LD DE,(FINDSD_NAME) ; DE = search name
LD B,17 ; Max filename length
;
FSD_CMP: LD A,(DE)
CP 00DH ; CR terminator?
JR Z,FSD_MATCH ; Input ended = prefix match
OR A ; Null terminator?
JR Z,FSD_MATCH
CP (HL) ; Compare characters
JR NZ,FSD_NOMATCH
INC DE
INC HL
DJNZ FSD_CMP
; All 17 characters matched
;
FSD_MATCH: POP BC
POP DE
POP HL ; HL = entry start
XOR A ; Z flag = found
RET
;
FSD_NOMATCH:POP BC
POP DE
POP HL
;
FSD_NEXT: INC E ; Next directory entry
DJNZ FSD_LOOP
;
FSD_NF: LD A,001H
OR A ; NZ flag = not found
RET
; ---------------------------------------------------------------------------
; EXTRACT_HDR - Extract file header from SD directory entry
;
; Converts SD directory entry fields to MZF format in ELMD, and saves
; the file's absolute start sector in FILE_STARTSEC for data transfer.
;
; Entry: HL = directory entry in SECTORBUF (MMIO mapped)
; SDDRIVENO set for current drive
; Exit: ELMD filled with MZF header (ATRB, NAME, SIZE, DTADR, EXADR)
; FILE_STARTSEC set to absolute start sector
; Modified: A, BC, DE, HL
; ---------------------------------------------------------------------------
EXTRACT_HDR:
INC HL ; Skip FLAG1, HL = ATRB (offset 1)
;
; Copy ATRB to ELMD[0], remapping CMT type 05 -> Disk BASIC type 02
LD DE,ELMD
LD A,(HL)
CP 005H ; CMT type 05 = MZ-700 BASIC text
JR NZ,EH_AT1
LD A,002H ; Disk BASIC type 02 = BTX
EH_AT1: LD (DE),A
INC HL ; HL = NAME (offset 2)
INC DE ; DE = ELMD+1
;
; Copy 17-byte filename, converting null to CR
LD B,17
EH_NAME: LD A,(HL)
OR A
JR NZ,EH_NM1
LD A,00DH ; Null -> CR for BASIC
EH_NM1: LD (DE),A
INC HL
INC DE
DJNZ EH_NAME
;
; HL at offset 19: START_SECTOR (4 bytes, big-endian)
; DE at ELMD+18
PUSH DE ; Save ELMD position
;
; Copy 4-byte start sector to FILE_STARTSEC
LD DE,FILE_STARTSEC
LD A,(HL)
LD (DE),A
INC HL
INC DE
LD A,(HL)
LD (DE),A
INC HL
INC DE
LD A,(HL)
LD (DE),A
INC HL
INC DE
LD A,(HL)
LD (DE),A
INC HL ; HL at offset 23: SIZE
;
; Copy SIZE(2) + DTADR(2) + EXADR(2) = 6 bytes to ELMD
POP DE ; DE = ELMD+18
LD BC,6
LDIR
;
; Convert FILE_STARTSEC to absolute sector (add drive offset)
LD A,(FILE_STARTSEC)
LD D,A
LD A,(FILE_STARTSEC+1)
LD E,A
LD A,(FILE_STARTSEC+2)
LD H,A
LD A,(FILE_STARTSEC+3)
LD L,A
CALL RFSGETSECTR ; DEHL += drive_offset
;
; Store absolute sector back to FILE_STARTSEC
LD A,D
LD (FILE_STARTSEC),A
LD A,E
LD (FILE_STARTSEC+1),A
LD A,H
LD (FILE_STARTSEC+2),A
LD A,L
LD (FILE_STARTSEC+3),A
RET
; ---------------------------------------------------------------------------
; CONVERT_ENTRY - Convert SD directory entry to Disk BASIC DIR buffer format
;
; Writes a 32-byte directory entry to the DIR buffer at (DIR_BUFPTR)
; and advances DIR_BUFPTR by 32. Format matches standard MZ Disk BASIC
; floppy directory layout so LOAD/SAVE work correctly.
;
; SD entry format: FLAG1(1), ATRB(1), NAME(17), SECTOR(4), SIZE(2), DTADR(2), EXADR(2), RESV(3)
; Disk BASIC format: ATRB(1), NAME(17), STARTSEC(2), SIZE(2), DTADR(2), EXADR(2), pad(6)
;
; Entry: HL = SD directory entry in SECTORBUF
; Exit: DIR_BUFPTR advanced by 32
; Modified: A, BC, DE, HL
; ---------------------------------------------------------------------------
CONVERT_ENTRY:
INC HL ; Skip FLAG1
;
; Copy ATRB to buffer, remapping CMT type 05 -> Disk BASIC type 02
LD DE,(DIR_BUFPTR)
LD A,(HL)
CP 005H ; CMT type 05 = MZ-700 BASIC text
JR NZ,CE_AT1
LD A,002H ; Disk BASIC type 02 = BTX
CE_AT1: LD (DE),A
INC HL ; HL = NAME (offset 2)
INC DE
;
; Copy 17-byte filename, null -> CR
LD B,17
CE_NAME: LD A,(HL)
OR A
JR NZ,CE_NM1
LD A,00DH
CE_NM1: LD (DE),A
INC HL
INC DE
DJNZ CE_NAME
;
; HL now at SD offset 19 = START_SECTOR (4 bytes, big-endian)
; Write 2-byte start sector placeholder at DIR offset 18-19
; then SIZE(2)+DTADR(2)+EXADR(2) at DIR offsets 20-25.
; BASIC reads SIZE from DIR offset 20 (IY+14H), DTADR from 22,
; EXADR from 24. The 2-byte slot at 18 must exist for alignment.
INC HL ; Skip START_SECTOR[0]
INC HL ; Skip START_SECTOR[1]
LD A,(HL)
LD (DE),A ; DIR[18] = START_SECTOR[2]
INC HL
INC DE
LD A,(HL)
LD (DE),A ; DIR[19] = START_SECTOR[3]
INC HL
INC DE
;
; Copy SIZE(2) + DTADR(2) + EXADR(2) = 6 bytes to DIR offset 20-25
LD BC,6
LDIR
;
; Remaining 8 bytes already zeroed by buffer clear
; Advance DIR_BUFPTR by 32
LD HL,(DIR_BUFPTR)
LD DE,00020H
ADD HL,DE
LD (DIR_BUFPTR),HL
RET
; ---------------------------------------------------------------------------
; MEMCLI_PATCH - Trampoline from L4020 (MEMCLI).
; Original code was: RST 018H / DB 020H / EX DE,HL
; SVC 020H programs the boot beep timer and (critically) enables interrupts.
; We must still call it, then load HL with RFS_END for the memory clear.
; ---------------------------------------------------------------------------
ENDIF ; (Glass: label must be outside IF)
MEMCLI_PATCH:
IF BUILD_RFS = 1
RST 018H
DB 020H ; SVC 020H: boot beep + EI
LD HL,RFS_END
JP L4023 ; Continue with memory clear loop
; ---------------------------------------------------------------------------
; RFS_LOAD_HOOK - Trampoline for L3153 data transfer
;
; Replaces CALL L32CB + CALL L3174 in L3153. Checks if the current device
; is $RFS (by comparing the ZINP handler pointer). For $RFS, performs SD
; card data transfer via RFSINP_LD instead of the FD/QD hardware path.
; For all other devices, calls the original L32CB + L3174 sequence.
;
; ---------------------------------------------------------------------------
; RFS_DIR_FIX — Trampoline for DIR device-name parsing.
; L593A's success path jumps here instead of directly to L596B.
; We advance HL past the ':' so the INC/DEC zero-test at L596B sees
; end-of-text (0x00) rather than ':' (0x3A).
; ---------------------------------------------------------------------------
ENDIF ; (Glass: label must be outside IF)
RFS_DIR_FIX:
IF BUILD_RFS = 1
LD DE,L5982
INC HL ; Advance HL past ':'.
JP L596B
;
; ---------------------------------------------------------------------------
; RFS_DIR_STR — Hook for L5962 string expression path.
; Called instead of L6E6F when L593A's letter parsing fails (e.g., DIR "RFS1:").
; Evaluates the string expression, then copies the device name (up to ':')
; into L5982 and sets B = length for SVC #2CH.
; Entry: HL = text pointer (at '"'), B = 0
; Exit: HL advanced past expression, B = name length, DE = L5982
; ---------------------------------------------------------------------------
RFS_DIR_STR:
CALL L6E6F ; Evaluate string expr. B=strlen, DE=strptr
PUSH HL ; Save text pointer (past closing quote)
EX DE,HL ; HL = string data pointer
LD DE,L5982 ; DE = name buffer
LD A,B ; A = string length
OR A
JR Z,DSTR_DONE ; Empty string → B stays 0
LD C,A ; C = remaining chars
LD B,000H ; B = bytes copied
DSTR_LP: LD A,(HL) ; Get char from string
LD (DE),A ; Copy to name buffer
INC HL
INC DE
INC B ; Count
DEC C
CP 03AH ; ':' ?
JR Z,DSTR_DONE ; Stop after ':'
LD A,C
OR A
JR NZ,DSTR_LP ; Loop if more chars
DSTR_DONE: LD DE,L5982 ; DE = start of name buffer (for SVC #2CH)
POP HL ; Restore text pointer
RET
;
; Entry: BC = SIZE (file size to load), stack = L10F0 stack
; Exit: A=0 NC on success; carry on error. Registers preserved.
; ---------------------------------------------------------------------------
ENDIF ; (Glass: label must be outside IF)
RFS_LOAD_HOOK:
IF BUILD_RFS = 1
; Debug: trace L3153 hook entry
PUSH AF
; Show BC (SIZE)
LD A,B
LD A,C
POP AF
;
LD HL,(ZINP) ; Current device ZINP handler
PUSH DE
LD DE,RFSINP_DIR ; $RFS handler address
OR A
SBC HL,DE
POP DE
JR Z,RFLH_RFS
;
; Not $RFS — call original FD/QD transfer
CALL L32CB
JP L3174
;
RFLH_RFS: ; $RFS device: transfer file data from SD card.
; Debug: show ELMD contents before RFSINP_LD
PUSH AF
PUSH HL
PUSH BC
; Dump ELMD[0..7] (ATRB + first 7 chars of name)
LD HL,ELMD
LD B,008H
RFLH_DMP1: LD A,(HL)
INC HL
DJNZ RFLH_DMP1
; Dump ELMD18-ELMD23 (SIZE+DTADR+EXADR)
LD HL,ELMD18
LD B,006H
RFLH_DMP2: LD A,(HL)
INC HL
DJNZ RFLH_DMP2
POP BC
POP HL
POP AF
;
CALL RFSINP_LD
; Debug: show return status
PUSH AF
JR C,RFLH_ERR
JR RFLH_DONE
RFLH_ERR: LD A,'E'
RFLH_DONE: CALL RFS_CRLF
POP AF
JP L3101
; ===========================================================================
; RFS_DIRCMD1 — Debug wrapper for L58CA (DIR handler 1: device-name path).
; Outputs "1E\n" on port 050H as version/path marker, then original logic.
; ===========================================================================
ENDIF ; (Glass: label must be outside IF)
RFS_DIRCMD1:
IF BUILD_RFS = 1
LD A,'1' ; DIR path 1 marker
LD A,'M' ; Version letter M
CALL L593A ; Original: parse device name
RST 018H
DB 03AH ; SVC #3A: list directory
RET
; ===========================================================================
; RFS_DIRCMD2 — Debug wrapper for L58D0 (DIR handler 2: string-expr path).
; Outputs "2E\n" on port 050H as version/path marker, then original logic.
; ===========================================================================
ENDIF ; (Glass: label must be outside IF)
RFS_DIRCMD2:
IF BUILD_RFS = 1
LD A,'2' ; DIR path 2 marker
LD A,'M' ; Version letter M
CALL L413E ; Original: check current char
LD B,000H
CALL NZ,L6E6F ; Evaluate string expression
JP L58D8 ; Continue at PUSH HL / SVC #2C / SVC #3C
; ===========================================================================
; RFS_DIR_OPEN — Debug wrapper replacing L596B for DIR SVC #2C.
; Outputs trace info on port 050H, then performs the original SVC call and
; error check. Format:
; D:BB NAMESTR... (before SVC: B=count, name from DE)
; K:xx xx xx xx xx xx (after SVC: KEYBUF[0..5])
; =HHHH:VV (after SVC: HL pointer and (HL) value)
; ===========================================================================
ENDIF ; (Glass: label must be outside IF)
RFS_DIR_OPEN:
IF BUILD_RFS = 1
PUSH AF
; --- Before SVC: output "D:" + B (hex) + space + name string ---
LD A,B
; Output the name (B chars from DE)
PUSH BC
PUSH DE
LD A,B
OR A
JR Z,RFS_NN
RFS_NLP: LD A,(DE)
INC DE
DJNZ RFS_NLP
RFS_NN: POP DE
POP BC
POP AF
; --- Call SVC #2C (original L596B logic) ---
PUSH HL
RST 018H
DB 02CH
; --- After SVC: dump KEYBUF[0..7] ---
PUSH AF
PUSH BC
PUSH DE
PUSH HL ; save SVC result HL
LD HL,KEYBUF
LD B,008H
RFS_KLP: LD A,(HL)
INC HL
DJNZ RFS_KLP
POP HL ; restore SVC result HL
; --- Output "=" + HL (4 hex) + ":" + (HL) (2 hex) ---
LD A,H
LD A,L
LD A,(HL)
POP DE
POP BC
POP AF
; --- Original error check ---
INC (HL)
DEC (HL)
JP NZ,04B25H
POP HL
RET
;
; ---------------------------------------------------------------------------
; RFS_HEX — Output A as 2 hex ASCII digits to port 050H.
; Preserves BC, DE, HL.
; ---------------------------------------------------------------------------
ENDIF ; (Glass: label outside IF)
RFS_HEX:
IF BUILD_RFS = 1
PUSH AF
RRCA
RRCA
RRCA
RRCA
AND 00FH
CALL RFS_NIB
POP AF
AND 00FH
RFS_NIB: CP 00AH
JR C,RFS_DIG
ADD A,037H ; 'A'..'F'
RET
RFS_DIG: ADD A,030H ; '0'..'9'
RET
;
; ---------------------------------------------------------------------------
; RFS_CRLF — Output CR+LF to port 050H. Preserves all registers.
; ---------------------------------------------------------------------------
ENDIF ; (Glass: label outside IF)
RFS_CRLF:
IF BUILD_RFS = 1
PUSH AF
LD A,00DH ; CR
LD A,00AH ; LF
POP AF
RET
; ===========================================================================
; RFS_DIR3 — Debug wrapper for L5CE3 (the real DIR command handler).
; Replicates the full DIR flow with debug markers around each SVC call.
; Output format on port 050H:
; D3:E (entry marker + version)
; 82:AA (L5882 result in A, hex)
; 2E:AA C=x B1=x (SVC #2E result: A, carry flag, bit1 of A)
; C2: (L58C2 done)
; 3A:AA (L593A result: channel in A)
; 39a: (SVC #39 with A=0 done)
; 3Ac:AA (SVC #3A with A=channel done)
; 39b:AA (SVC #39 with A=orig done)
; D3:X (exit marker)
; ===========================================================================
ENDIF ; (Glass: label must be outside IF)
RFS_DIR3:
IF BUILD_RFS = 1
; --- Entry marker ---
LD A,'M' ; Version M
; --- Call L5882 (original first instruction) ---
CALL L5882
; --- Debug: show L5882 result ---
PUSH AF
; --- PUSH AF (as original) ---
; AF is already on stack from our PUSH above
; --- SVC #2E ---
RST 018H
DB 02EH
; --- Debug: show SVC #2E result ---
PUSH AF ; save flags from SVC #2E
JR C,RFS_D3_CY1
LD A,'0'
JR RFS_D3_CY1D
RFS_D3_CY1:
LD A,'1'
RFS_D3_CY1D:
POP AF ; restore flags from SVC #2E
; --- JP C,L57B4 (error 0x2C on carry) ---
JP C,L57B4
; --- BIT 1,A / JP Z,057B7H ---
BIT 1,A
PUSH AF
JR Z,RFS_D3_B0
LD A,'1'
JR RFS_D3_B1D
RFS_D3_B0:
LD A,'0'
RFS_D3_B1D:
POP AF
JP Z,057B7H ; error 0xBB if bit1=0
; --- CALL L58C2 (check ZLOG) ---
CALL L58C2
LD A,'K' ; OK
; --- CALL L593A (parse device name) ---
CALL L593A
; --- Debug: show L593A result (channel in A) ---
; --- LD B,A / XOR A / SVC #39 (A=0) ---
LD B,A
;
; Debug V1.1J: dump ZINP pointer and ZFLAG1 before SVC #39
PUSH BC
LD A,'I' ; "IP=" marker for ZINP
LD A,(ZINP+1) ; High byte of ZINP pointer
LD A,(ZINP) ; Low byte of ZINP pointer
LD A,'F' ; "F1=" marker for ZFLAG1
LD A,(ZFLAG1)
POP BC
;
; Debug V1.1K: dump first 4 bytes at RFSINP_DIR (runtime) and 0x2000
PUSH HL
PUSH BC
LD HL,RFSINP_DIR ; Point to RFSINP_DIR code in memory
LD B,004H
RFS_RDMP: LD A,(HL)
INC HL
DJNZ RFS_RDMP
; Also dump first 4 bytes of DIR buffer at 0x2000
LD HL,L2000
LD B,004H
RFS_BDMP: LD A,(HL)
INC HL
DJNZ RFS_BDMP
POP BC
POP HL
;
; (V1.1L debug hook removed in V1.1Y — was calling RFSINP_DIR for
; ALL devices, causing 20s delay + empty DIR for non-RFS devices)
;
XOR A
XOR A ; A=0 again (debug output clobbered it)
RST 018H
DB 039H
; --- Debug: after SVC #39 --- dump 0x2000 again
PUSH AF
PUSH HL
PUSH BC
LD HL,L2000
LD B,004H
RFS_BDMP2: LD A,(HL)
INC HL
DJNZ RFS_BDMP2
POP BC
POP HL
POP AF
; --- original after-SVC debug ---
JR C,RFS_D3_CY2
LD A,'0'
JR RFS_D3_CY2D
RFS_D3_CY2:
LD A,'1'
RFS_D3_CY2D:
; --- LD A,B / SVC #3A (A=channel) ---
LD A,B
RST 018H
DB 03AH
; --- Debug: after SVC #3A ---
JR C,RFS_D3_CY3
LD A,'0'
JR RFS_D3_CY3D
RFS_D3_CY3:
LD A,'1'
RFS_D3_CY3D:
; --- POP AF / SVC #39 (A=original from L5882) ---
POP AF
PUSH AF
RST 018H
DB 039H
; --- Debug: after final SVC #39 ---
JR C,RFS_D3_CY4
LD A,'0'
JR RFS_D3_CY4D
RFS_D3_CY4:
LD A,'1'
RFS_D3_CY4D:
; --- Exit marker ---
; --- Clean up and return ---
POP AF ; balance the PUSH AF from after L5882
RET
; ===========================================================================
; Data area
; ===========================================================================
ENDIF ; (Glass: label outside IF)
SDSTARTSEC:
IF BUILD_RFS = 1
DS 4, 000H ; Current sector address for SD_READ (big-endian)
ENDIF ; (Glass: label outside IF)
DIRSECBUF:
IF BUILD_RFS = 1
DB 0FFH ; Cached directory sector number (0xFF = none)
ENDIF ; (Glass: label outside IF)
FILE_STARTSEC:
IF BUILD_RFS = 1
DS 4, 000H ; Saved file start sector (absolute, big-endian)
ENDIF ; (Glass: label outside IF)
FILE_LOADADDR:
IF BUILD_RFS = 1
DW 00000H ; Current load address during LOAD transfer
; ===========================================================================
; RFS_L1C5B_WRAP — Wrapper around CALL L1C5B to dump ZFLAG1 before and after.
; This reveals whether L1C5B modifies ZFLAG1 (specifically bit 5).
; Output format: "F1:xx>xx\r\n" where xx=before, xx=after
; ===========================================================================
ENDIF ; (Glass: label must be outside IF)
RFS_L1C5B_WRAP:
IF BUILD_RFS = 1
PUSH AF
PUSH HL
; --- Print "F1:" ---
; --- Dump ZFLAG1 before ---
LD A,(ZFLAG1)
POP HL
POP AF
; --- Call the real L1C5B ---
CALL L1C5B
; --- Save return flags ---
PUSH AF
PUSH HL
; --- Print ">" ---
; --- Dump ZFLAG1 after ---
LD A,(ZFLAG1)
POP HL
POP AF
RET
; ===========================================================================
; RFS_FLAGS_TEST — Replaces the LD HL,ZFLAG1 / BIT 7 / BIT 5 sequence.
; V1.1Q: Workaround for suspected Z80 emulator bug where AND immediate
; does not correctly set the Z flag (0x5F AND 0x20 = 0x20 yet Z is set).
; Instead of testing ZFLAG1 bit 5, check device name for "$RFS" and force
; the ZINP path directly. This is safe because this code point is only
; reached when A=0 (DIR enumeration) in SVC #39.
; ===========================================================================
ENDIF ; (Glass: label must be outside IF)
RFS_FLAGS_TEST:
IF BUILD_RFS = 1
LD HL,ZFLAG1
; --- Check bit 7 first (error condition, applies to all devices) ---
LD A,(HL)
AND 080H
JR Z,RFS_FT_NO7
POP DE ; discard CALL return address
JP 01F97H
RFS_FT_NO7:
; --- Check if this is the $RFS device by name ---
LD A,(ZDEVNM) ; first char of device name
CP 'R'
JR NZ,RFS_FT_NORFS
LD A,(ZDEVNM+1) ; second char
CP 'F'
JR NZ,RFS_FT_NORFS
; --- This IS $RFS — force ZINP/DIR path ---
POP DE ; discard CALL return address
JP RFS_BIT5PATH_DIR
RFS_FT_NORFS:
; --- Not $RFS: fall through to ZRO path ---
; HL = ZFLAG1 (correct for INC HL that follows the NOPs)
RET
; ===========================================================================
; RFS_BIT5PATH_DIR — Replacement for the SVC #39 bit-5 path at 0x2F38.
; Instead of calling through L2FD1 → IOCALL, this calls RFSINP_DIR directly
; to bypass the broken IOCALL dispatch. Also traces the path.
; Original bit-5 path: XOR A / LD HL,L2000 / LD DE,800 / LD BC,10 / CALL L2FD1
; L2FD1 does TWO ZINP calls:
; 1st: L2FE8 → disk identity (H=0x28)
; 2nd: L2FD4 → DIR fill (H=0x20)
; We replicate both calls directly to RFSINP_DIR.
; ===========================================================================
RFS_BIT5PATH_DIR:
; --- Marker ---
;
; --- 1st ZINP call: disk identity (H=0x28) ---
LD HL,02800H ; H=0x28 → DISKID path
LD A,(ZCH) ; Channel number
CALL RFSINP_DIR
;
; --- 2nd ZINP call: DIR fill (H=0x20) ---
LD HL,L2000 ; H=0x20 → DIR fill
LD A,(ZCH)
CALL RFSINP_DIR
;
; --- After both calls, check DIR buffer ---
PUSH HL
PUSH BC
LD HL,L2000
LD B,008H
RFS_B5DMP: LD A,(HL)
INC HL
DJNZ RFS_B5DMP
POP BC
POP HL
;
; --- Replicate original return logic ---
; Original: LD A,(HL) / OR A / JP P,01F70H / RET
; After L2FD1 returns, HL=0x2000 (restored by wrappers).
; We set HL=0x2000 explicitly since we bypassed the wrappers.
LD HL,L2000
LD A,(HL)
OR A
JP P,01F70H
;
; Clear DIR_FILLED for next DIR call
XOR A
LD (DIR_FILLED),A
;
; Return — will go through SKPDE cleanup from SVC #39 handler
RET
ENDIF ; (Glass: label outside IF)
FILE_SIZE:
IF BUILD_RFS = 1
DW 00000H ; Remaining bytes during LOAD transfer
ENDIF ; (Glass: label outside IF)
RFS_LD_A0:
IF BUILD_RFS = 1
DB 000H ; V1.1Y: Entry A for RFSINP_LD (0=SVC #30, else SVC #33)
ENDIF ; (Glass: label outside IF)
DIR_BUFPTR:
IF BUILD_RFS = 1
DW 00000H ; Current write position in DIR buffer
ENDIF ; (Glass: label outside IF)
FINDSD_NAME:
IF BUILD_RFS = 1
DW 00000H ; Saved filename pointer for FINDSD
ENDIF ; (Glass: label outside IF)
SAVE_DIRENT:
IF BUILD_RFS = 1
DB 000H ; Saved directory entry number for SAVE
ENDIF ; (Glass: label outside IF)
SAVE_PENDING:
IF BUILD_RFS = 1
DB 000H ; 1 = SAVE in progress, trigger RFSWO on first RFSOUT call
ENDIF ; (Glass: label outside IF)
DIR_FILLED:
IF BUILD_RFS = 1
DB 000H ; 1 = DIR buffer filled, next ZINP call is data transfer
ENDIF ; (Glass: label outside IF)
SAVE_SP:
IF BUILD_RFS = 1
DW 00000H ; Saved BASIC stack pointer
ENDIF ; (Glass: label outside IF)
DIR_ENTRY_IDX:
IF BUILD_RFS = 1
DB 000H ; Current SD directory entry index for RFSRO (0-255)
ENDIF ; (Glass: label outside IF)
SECTORBUF:
IF BUILD_RFS = 1
DS 512, 000H ; SD card sector buffer (was EQU 0CE00H, moved here
; to avoid overlap with BASIC stack at ~0xCFFF)
DS 128, 000H ; Temp stack (64 levels)
ENDIF ; (Glass: labels must be outside IF)
TEMP_STACK_TOP: ; SP points here (grows downward)
RFS_END EQU TEMP_STACK_TOP ; End of RFS code = new TEXTST
IF BUILD_RFS = 1
ENDIF ; END BUILD_RFS = 1
; ===========================================================================
; Tape/CMT bootstrap (only for BUILD_TAPE=1)
; This code loads at TAPECOPY (0x1200) and copies the BASIC ROM to 0x0000,
; then jumps to the cold start entry point.
; ===========================================================================
IF BUILD_TAPE = 1
EXECSTART: XOR A ; Execution entry point (runs at TAPECOPY+offset)
LD DE,L0000
CALL TIMST ; Stop timer
LD DE,L0000 ; Destination: 0x0000
LD HL,BASICEND - L0000 ; Size of BASIC ROM
OR A
SBC HL,DE
LD C,L
LD B,H ; BC = byte count
LD HL,TAPECOPY ; Source: where tape loaded the image
OUT (LSE0),A ; Map 0000-0FFF to DRAM
LDIR ; Copy BASIC ROM to 0x0000
JP L0000 ; Jump to cold start
BASICEND:
ENDIF