diff --git a/.gitignore b/.gitignore index 909185b..083660e 100644 --- a/.gitignore +++ b/.gitignore @@ -153,3 +153,16 @@ software/CPM/1M44/DSK software/CPM/1M44/RAW software/CPM/CPM_MULTICOMP_contents.txt software/disks +software/CPM +software/DSK +software/roms/SHARP_MZ80A_RFS_IMAGE_0.img +software/roms/SHARP_MZ80A_RFS_IMAGE_10.img +software/roms/SHARP_MZ80A_RFS_IMAGE_2.img +software/roms/SHARP_MZ80A_RFS_IMAGE_3.img +software/roms/SHARP_MZ80A_RFS_IMAGE_4.img +software/roms/SHARP_MZ80A_RFS_IMAGE_5.img +software/roms/SHARP_MZ80A_RFS_IMAGE_6.img +software/roms/SHARP_MZ80A_RFS_IMAGE_7.img +software/roms/SHARP_MZ80A_RFS_IMAGE_8.img +software/roms/SHARP_MZ80A_RFS_IMAGE_9.img + diff --git a/software/DIS/SA-5510/SA-5510.asm b/software/DIS/SA-5510/SA-5510.asm new file mode 100644 index 0000000..bd04394 --- /dev/null +++ b/software/DIS/SA-5510/SA-5510.asm @@ -0,0 +1,7511 @@ +; Disassembly of the file "SA-5510.bin" +; +; CPU Type: Z80 +; +; Created with dZ80 2.1 +; +; on Saturday, 03 of April 2021 at 12:48 AM +; +PRTC EQU 0FEH +PRTD EQU 0FFH +GETL EQU 00003H +LETNL EQU 00006H +NL EQU 00009H +PRNTS EQU 0000CH +PRNTT EQU 0000FH +PRNT EQU 00012H +MSG EQU 00015H +MSGX EQU 00018H +GETKY EQU 0001BH +BRKEY EQU 0001EH +?WRI EQU 00021H +?WRD EQU 00024H +?RDI EQU 00027H +?RDD EQU 0002AH +?VRFY EQU 0002DH +MELDY EQU 00030H +?TMST EQU 00033H +TIMRD EQU 0003BH +BELL EQU 0003EH +XTEMP EQU 00041H +MSTA EQU 00044H +MSTP EQU 00047H +MONIT EQU 00000H +SS EQU 00089H +ST1 EQU 00095H +HLHEX EQU 00410H +_2HEX EQU 0041FH +?MODE EQU 0074DH +?KEY EQU 008CAH +PRNT3 EQU 0096CH +?ADCN EQU 00BB9H +?DACN EQU 00BCEH +?DSP EQU 00DB5H +?BLNK EQU 00DA6H +?DPCT EQU 00DDCH +PRTHL EQU 003BAH +PRTHX EQU 003C3H +ASC EQU 003DAH +HEX EQU 003F9H +DPCT EQU 00DDCH +DLY12 EQU 00DA7H +DLY12A EQU 00DAAH +?RSTR1 EQU 00EE6H +MOTOR EQU 006A3H +CKSUM EQU 0071AH +GAP EQU 0077AH +WTAPE EQU 00485H +MSTOP EQU 00700H +LINEBUFR EQU 0490DH +ATRB EQU 010F0H +NAME EQU 010F1H +SIZE EQU 01102H +DTADR EQU 01104H +EXADR EQU 01106H +COMNT EQU 01108H +SWPW EQU 01164H +KDATW EQU 0116EH +KANAF EQU 01170H +DSPXY EQU 01171H +MANG EQU 01173H +MANGE EQU 01179H +PBIAS EQU 0117AH +ROLTOP EQU 0117BH +MGPNT EQU 0117CH +PAGETP EQU 0117DH +ROLEND EQU 0117FH +FLASH EQU 0118EH +SFTLK EQU 0118FH +REVFLG EQU 01190H +SPAGE EQU 01191H +FLSDT EQU 01192H +STRGF EQU 01193H +DPRNT EQU 01194H +TMCNT EQU 01195H +SUMDT EQU 01197H +CSMDT EQU 01199H +AMPM EQU 0119BH +TIMFG EQU 0119CH +SWRK EQU 0119DH +TEMPW EQU 0119EH +ONTYO EQU 0119FH +OCTV EQU 011A0H +RATIO EQU 011A1H +BUFER EQU 011A3H +PRGSTART EQU 011FDH + + ORG PRGSTART + +TAPECOPY: JP L41EC + +COLDSTRT: LD HL,048FFH + LD D,0D0H +L1205: INC HL + LD A,H + CP D + JR Z,L1214 ; (+00aH) + LD A,PRTD + LD (HL),A + SUB (HL) + JR NZ,L1214 ; (+004H) + LD (HL),A + CP (HL) + JR Z,L1205 ; (-00fH) +L1214: LD (04908H),HL + LD (0490AH),HL + LD SP,HL + CALL BELL + XOR A + LD D,A + LD E,A + CALL ?TMST + CALL L132C + CALL L1313 + LD DE,TITLEMSG + CALL L1329 + LD DE,COPYRMSG + CALL L1329 + CALL L131E + CALL L1944 + LD BC,0000AH + CALL L184D + CALL L1841 + CALL MSGNL + LD DE,BYTESMSG + CALL MSGX +WARMSTRT: NOP + NOP +WARMSTRTMON:NOP ; Sharp defined BASIC restart location from Monitor. + NOP + NOP + NOP + NOP + NOP + NOP + NOP + LD SP,(0490AH) + LD DE,READYMSG + CALL MSGNL +L1262: LD HL,L12B8 + PUSH HL +L1266: LD HL,0504DH + CALL L19BA + CALL L19BA + CALL NL + LD DE,LINEBUFR + LD A,(L2A83) + OR A + JR Z,L1299 ; (+01eH) + LD HL,(L2A84) + PUSH HL + LD BC,(02A86H) + ADD HL,BC + JR C,L12A6 ; (+020H) + LD (L2A84),HL + POP HL + PUSH DE + CALL STRTONUM + EX DE,HL + LD (HL),020H + INC HL + LD (HL),00DH + EX DE,HL + POP DE + CALL MSGX +L1299: CALL L1338 + LD A,(DE) + CP 01BH + RET NZ + XOR A + LD (L2A83),A + JR L1299 ; (-00dH) + +L12A6: XOR A + LD (L2A83),A + JP SYNTAXERR + + CALL L1266 + LD A,(DE) + CP 00DH + RET Z + LD HL,(0490AH) + LD SP,HL +L12B8: CALL L146A + CALL L14F8 + LD HL,(04A10H) + LD A,L + OR H + JR NZ,L12D4 ; (+00fH) + LD HL,04A12H + LD (05051H),HL + CALL EXECNOTCHR + DB 00DH + DW L1B5F + JP L1262 + +L12D4: CALL L12DA + JP L1262 + +L12DA: CALL L145E + CALL L1459 + CALL L18B0 + RET PE + LD (DE),A + CALL Z,L1302 + LD A,(04A12H) + CP 00DH + RET Z + CALL L18B3 + DI + LD (DE),A + LD (04A0EH),HL + EX DE,HL + LD HL,04A0EH + CALL L18F2 + CALL L18A2 + JR L130C ; (+00aH) + +L1302: CALL L18F2 + EX DE,HL + CALL L1873 + CALL L1762 +L130C: CALL L19C3 + EX DE,HL + JP L18EA + +L1313: LD B,021H +L1315: LD A,0CFH + CALL PRNT + DJNZ L1315 ; (-007H) + JR L132C ; (+00eH) + +L131E: LD B,021H +L1320: LD A,0D7H + CALL PRNT + DJNZ L1320 ; (-007H) + JR L132C ; (+003H) + +L1329: CALL MSGX +L132C: CALL LETNL + JP LETNL + +MSGNL: CALL NL + JP MSGX + +L1338: CALL GETL + LD A,0C9H + CALL ?DPCT + LD A,000H + LD HL,SFTLK + LD (HL),A + RET + +TITLEMSG: DB " BASIC ",0A6H,0B0H,096H,092H,09DH,09EH,09DH,092H,096H,092H,09DH," SA-5510" + DB 00DH +COPYRMSG: DB " C",0B7H,09EH,0BDH,09DH,0A6H,097H,098H,096H," 1981 ",09AH,0BDH," SHARP C",0B7H,09DH,09EH,"." + DB 00DH +READYMSG: DB "R",092H,0A1H,09CH,0BDH + DB 00DH +ERRORMSG: DB "*E",09DH,09DH,0B7H,09DH + DB 00DH +INMSG: DB " ",0A6H,0B0H + DB 00DH +BREAKMSG: DB "*B",09DH,092H,0A1H,0A9H + DB 00DH +BYTESMSG: DB " B",0BDH,096H,092H,0A4H + DB 00DH +ERRCODE: DB 012H + DB 000H +L13A5: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +SYNTAXERR: DB 03EH + DB 001H + DB 001H +OVFLERR: DB 03EH + DB 002H + DB 001H +ILDATERR: DB 03EH + DB 003H + DB 001H +DATMISERR: DB 03EH + DB 004H + DB 001H +STRLENERR: DB 03EH + DB 005H + DB 001H +MEMERR: DB 03EH + DB 006H + DB 001H + DB 03EH + DB 007H + DB 001H +LINELENERR: DB 03EH + DB 008H + DB 001H +GOSUBERR: DB 03EH + DB 00AH + DB 001H +FORNEXTERR: DB 03EH + DB 00BH + DB 001H +FUNCERR: DB 03EH + DB 00CH + DB 001H +NEXTFORERR: DB 03EH + DB 00DH + DB 001H +RETGOSBERR: DB 03EH + DB 00EH + DB 001H +UNDEFFNERR: DB 03EH + DB 00FH + DB 001H +LINEERR: DB 03EH + DB 010H + DB 001H +CONTERR: DB 03EH + DB 011H + DB 001H +BADWRERR: DB 03EH + DB 012H + DB 001H +CMDSTMTERR: DB 03EH + DB 013H + DB 001H +READDATAERR:DB 03EH + DB 018H + DB 001H +OPENERR: DB 03EH + DB 02BH + DB 001H +UNKNWNERR: DB 03EH + DB 03CH + DB 001H +OUTFILEERR: DB 03EH + DB 03FH + DB 001H +PRTNRDYERR: DB 03EH + DB 041H + DB 001H +PRTHWERR: DB 03EH + DB 042H + DB 001H +PRTPAPERERR:DB 03EH + DB 043H + DB 001H +CHKSUMERR: DB 03EH + DB 046H + JR L1403 ; (+009H) + +L13FA: LD IY,L1400 + RET + + NOP +L1400: LD A,(013FFH) +L1403: LD (ERRCODE),A + CALL L1ABF + CALL L1AB8 + JR Z,L142A ; (+01cH) + LD HL,05056H + LD A,(HL) + CP 001H + JR NZ,L1421 ; (+00bH) + INC (HL) + LD HL,(0490AH) + LD SP,HL + LD HL,(05057H) + JP L1EAA + +L1421: CALL L1991 + CALL L1978 + CALL L199E +L142A: LD DE,ERRORMSG + CALL MSGNL + LD HL,(ERRCODE) + CALL L1453 + JR L143E ; (+006H) + +L1438: LD DE,BREAKMSG + CALL MSGNL +L143E: LD BC,WARMSTRT + PUSH BC + XOR A + LD (L2A83),A + CALL BELL + CALL L1AB8 + RET Z + LD DE,INMSG + CALL MSGX +L1453: CALL L1841 + JP MSGX + +L1459: XOR A + LD (L1463),A + RET + +L145E: XOR A + LD (05059H),A + RET + +L1463: NOP +L1464: SBC A,C + LD H,D + RET Z + RRCA + SUB B + LD H,D +L146A: LD HL,LINEBUFR + CALL L17F6 + LD (04A10H),DE + LD DE,04A12H + LD C,000H +L1479: CALL L1561 + RET Z + OR A + JP M,SYNTAXERR + DEC DE + PUSH HL + LD HL,L1479 + EX (SP),HL + CP 03FH + LD B,088H + JR Z,L1498 ; (+00bH) + DEC HL + PUSH DE + LD DE,CMDWORDTBL + CALL L14C7 + JR NZ,L14A8 ; (+011H) + POP DE +L1498: LD A,080H + CALL L14B3 + CP 084H + RET NC +L14A0: CALL L1595 + CP 03AH + RET Z + POP AF + RET + +L14A8: LD DE,UNUSEDTBL1 + CALL L14C7 + JR NZ,L14B9 ; (+009H) + POP DE + LD A,081H +L14B3: LD (DE),A + INC DE +L14B5: LD A,B + LD (DE),A + INC DE + RET + +L14B9: LD DE,OPERATORTBL + LD B,083H + CALL L14C9 + POP DE + JR Z,L14B5 ; (-00fH) + INC HL + INC DE + RET + +L14C7: LD B,080H +L14C9: PUSH HL +L14CA: CALL SKIPSPACE + OR A + JP M,L14F1 + EX DE,HL + CALL SKIPSPACE + EX DE,HL + SUB (HL) + INC HL + INC DE + JR Z,L14CA ; (-011H) + ADD A,080H + JR NZ,L14E2 ; (+003H) + INC SP + INC SP + RET + +L14E2: POP HL + DEC DE +L14E4: LD A,(DE) + INC DE + OR A + JR Z,L14EF ; (+006H) + JP P,L14E4 + INC B + JR L14C9 ; (-026H) + +L14EF: DEC A + RET + +L14F1: POP HL + CALL SKIPSPACE + DEC A + LD A,(HL) + RET + +L14F8: LD HL,(04A10H) + LD DE,LINEBUFR + LD C,0B2H + CALL L17FE + LD A,020H + LD (DE),A + INC DE + LD HL,04A12H +L150A: CALL L1561 + RET Z + SUB 080H + JR C,L150A ; (-008H) + DEC DE + DEC C + CP 003H + JR C,L1525 ; (+00dH) + SUB 002H + LD B,A + PUSH HL + LD HL,OPERATORTBL +L151F: CALL L1554 + POP HL + JR L150A ; (-01bH) + +L1525: EX AF,AF' + LD A,(HL) + INC HL + SUB 07FH + LD B,A + PUSH HL + EX AF,AF' + OR A + JR Z,L153D ; (+00dH) + LD HL,L151F + PUSH HL + LD HL,UNUSEDTBL1 + DEC A + RET Z + LD HL,UNUSEDTBL2 + RET + +L153D: PUSH BC + LD HL,CMDWORDTBL + CALL L1554 + POP AF + LD HL,L150A + EX (SP),HL + CP 004H + RET NC + JP L14A0 + +L154F: BIT 7,(HL) + INC HL + JR Z,L154F ; (-005H) +L1554: DJNZ L154F ; (-007H) +L1556: CALL L158A + ADD A,080H + JR NC,L1556 ; (-007H) + DEC DE + LD (DE),A + INC DE + RET + +L1561: CALL L158A + RET Z + CALL L1575 + JR Z,L1561 ; (-009H) + CP 022H + RET NZ + CALL L1581 + CP 00DH + JR NZ,L1561 ; (-013H) + RET + +L1575: CP 020H + RET Z + CP PRTD + RET Z + CP 028H + RET Z + CP 029H + RET + +L1581: CALL L158A + RET Z + CP 022H + JR NZ,L1581 ; (-008H) + RET + +L158A: LD A,(HL) + LD (DE),A + INC HL + INC DE + INC C + JP Z,LINELENERR + CP 00DH + RET + +L1595: CALL L158A + RET Z + CP 03AH + RET Z + CP 022H + JR NZ,L1595 ; (-00bH) + CALL L1581 + CP 00DH + JR NZ,L1595 ; (-012H) + RET + +CMDWORDTBL: DB "RE" + DB 0CDH + DB "DAT" + DB 0C1H + DB 0FFH + DB 0FFH + DB "REA" + DB 0C4H + DB "LIS" + DB 0D4H + DB "RU" + DB 0CEH + DB "NE" + DB 0D7H + DB "PRIN" + DB 0D4H + DB "LE" + DB 0D4H + DB "FO" + DB 0D2H + DB "I" + DB 0C6H + DB "THE" + DB 0CEH + DB "GOT" + DB 0CFH + DB "GOSU" + DB 0C2H + DB "RETUR" + DB 0CEH + DB "NEX" + DB 0D4H + DB "STO" + DB 0D0H + DB "EN" + DB 0C4H + DB 0FFH + DB "O" + DB 0CEH + DB "LOA" + DB 0C4H + DB "SAV" + DB 0C5H + DB "VERIF" + DB 0D9H + DB "POK" + DB 0C5H + DB "DI" + DB 0CDH + DB "DEF F" + DB 0CEH + DB "INPU" + DB 0D4H + DB "RESTOR" + DB 0C5H + DB "CL" + DB 0D2H + DB "MUSI" + DB 0C3H + DB "TEMP" + DB 0CFH + DB "USR" + DB 0A8H + DB "WOPE" + DB 0CEH + DB "ROPE" + DB 0CEH + DB "CLOS" + DB 0C5H + DB "MO" + DB 0CEH + DB "LIMI" + DB 0D4H + DB "CON" + DB 0D4H + DB "GE" + DB 0D4H + DB "INP" + DB 0C0H + DB "OUT" + DB 0C0H + DB "CURSO" + DB 0D2H + DB "SE" + DB 0D4H + DB "RESE" + DB 0D4H + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB "AUT" + DB 0CFH + DB 0FFH + DB 0FFH + DB "COPY/" + DB 0D0H + DB "PAGE/" + DB 0D0H + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 000H +UNUSEDTBL1: DB 0FFH + DB 000H +UNUSEDTBL2: DB 0FFH + DB 000H +OPERATORTBL:DB ">" + DB 0BCH + DB "<" + DB 0BEH + DB "=" + DB 0BCH + DB "<" + DB 0BDH + DB "=" + DB 0BEH + DB ">" + DB 0BDH + DB 0FFH + DB 0BEH + DB 0BCH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB 0FFH + DB "T" + DB 0CFH + DB "STE" + DB 0D0H + DB "LEFT$" + DB 0A8H + DB "RIGHT$" + DB 0A8H + DB "MID$" + DB 0A8H + DB "LEN" + DB 0A8H + DB "CHR$" + DB 0A8H + DB "STR$" + DB 0A8H + DB "ASC" + DB 0A8H + DB "VAL" + DB 0A8H + DB "PEEK" + DB 0A8H + DB "TAB" + DB 0A8H + DB "SPACE$" + DB 0A8H + DB "SIZ" + DB 0C5H + DB 0FFH,0FFH + DB 0FFH + DB "STRING" + DB 024H + DB 0A8H + DB 0FFH + DB "CHARACTER$" + DB 0A8H + DB "CS" + DB 0D2H + DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH + DB 0FFH + DB "RND" + DB 0A8H + DB "SIN" + DB 0A8H + DB "COS" + DB 0A8H + DB "TAN" + DB 0A8H + DB "ATN" + DB 0A8H + DB "EXP" + DB 0A8H + DB "INT" + DB 0A8H + DB "LOG" + DB 0A8H + DB "LN" + DB 0A8H + DB "ABS" + DB 0A8H + DB "SGN" + DB 0A8H + DB "SQR" + DB 0A8H + DB 0FFH,000H +L173A: LD HL,(05051H) + DEC HL +INCSKIPSPCE:INC HL +SKIPSPACE: LD A,(HL) + CP 020H + RET NZ + JR INCSKIPSPCE ; (-007H) + +L1745: PUSH AF + LD A,00DH +L1748: CP (HL) + INC HL + JR NZ,L1748 ; (-004H) + POP AF + RET + +L174E: INC HL +L174F: CALL L193B + RET Z + CP 022H + JR NZ,L174E ; (-009H) +L1757: INC HL + LD A,(HL) + CP 00DH + RET Z + CP 022H + JR NZ,L1757 ; (-009H) + JR L174E ; (-014H) + +L1762: LD A,C + CPL + LD C,A + LD A,B + CPL + LD B,A + INC BC + RET + +L176A: CALL SKIPSPACE + SUB 030H + CP 00AH + LD A,(HL) + RET + +L1773: LD A,H + SUB D + RET NZ + LD A,L + SUB E + RET + +L1779: POP HL ; Get address after call and jump to it via a RET command. +L177A: EX (SP),HL +EXECHL: PUSH AF + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + POP AF + EX (SP),HL + RET + +L1783: POP HL +L1784: EX (SP),HL + INC HL + INC HL + EX (SP),HL + RET + +L1789: LD HL,(04E94H) + INC HL + INC HL + INC HL + INC HL + INC HL + RET + +L1792: LD HL,(05051H) +EXECNOTCHR: CALL SKIPSPACE ; Scan for character after command + EX (SP),HL + CP (HL) + INC HL + JR NZ,EXECHL ; (-022H) + INC HL + JR L17AB ; (+00bH) + +L17A0: LD HL,(05051H) +MATCHCHR: CALL SKIPSPACE + EX (SP),HL + CP (HL) + JP NZ,SYNTAXERR +L17AB: INC HL + EX (SP),HL + JR INCSKIPSPCE ; (-071H) + +L17AF: XOR A + CP H + JR Z,L17B7 ; (+004H) + EX DE,HL + CP H + JR NZ,L177A ; (-03dH) +L17B7: LD A,L + LD L,H +L17B9: OR A + JR Z,L17CC ; (+010H) + RRA + JR NC,L17C2 ; (+003H) + ADD HL,DE + JR C,L177A ; (-048H) +L17C2: OR A + JR Z,L17CC ; (+007H) + EX DE,HL + ADD HL,HL + EX DE,HL + JR NC,L17B9 ; (-011H) + JR L177A ; (-052H) + +L17CC: EX DE,HL + JR L1784 ; (-04bH) + +L17CF: CALL L17AF + OR C + INC DE + RET + +L17D5: LD DE,MONIT + LD B,D +L17D9: CALL L176A + JR NC,L1784 ; (-05aH) + AND 00FH + LD C,A + XOR A + PUSH HL + LD L,E + LD H,D + ADD HL,HL + RRA + ADD HL,HL + RRA + ADD HL,DE + RRA + ADD HL,HL + RRA + ADD HL,BC + EX DE,HL + POP HL + INC HL + ADC A,A + JR NC,L17D9 ; (-01bH) + JR L177A ; (-07cH) + +L17F6: CALL L17D5 + XOR E + INC DE + RET + +STRTONUM: LD C,000H +L17FE: LD A,020H + LD (DE),A + INC DE + PUSH DE + LD B,000H + LD DE,L2710 + CALL L1827 + LD DE,003E8H + CALL L1827 + LD DE,00064H + CALL L1827 + LD DE,0000AH + CALL L1827 + LD A,L + POP HL + OR 030H + LD (HL),A + INC HL + LD (HL),00DH + EX DE,HL + RET + +L1827: LD A,PRTD +L1829: INC A + OR A + SBC HL,DE + JR NC,L1829 ; (-006H) + ADD HL,DE + OR A + JR NZ,L1836 ; (+003H) + OR B + RET Z + XOR A +L1836: INC B + OR 030H + POP DE + EX (SP),HL + LD (HL),A + INC HL + EX (SP),HL + PUSH DE + INC C + RET + +L1841: LD DE,04AB3H + PUSH DE + CALL STRTONUM + POP DE + RET + +L184A: LD BC,MONIT +L184D: LD HL,(04E94H) + ADD HL,BC + JR C,L185C ; (+009H) + EX DE,HL + LD HL,0FF9CH + ADD HL,SP + XOR A + SBC HL,DE + RET NC +L185C: JP MEMERR + +L185F: PUSH HL + PUSH DE + CALL L184D + POP DE + POP HL + RET + +L1867: LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX DE,HL + LD A,L + OR H + RET + +L1873: PUSH BC + PUSH HL + PUSH DE + EX DE,HL + ADD HL,BC + EX DE,HL + CALL L1789 + LD A,L + SUB E + LD C,A + LD A,H + SBC A,D + LD B,A + INC BC + POP HL + PUSH HL + EX DE,HL + JR L18A8 ; (+020H) + +L1888: CALL L185F + PUSH BC + PUSH HL + PUSH DE + CALL L1789 + PUSH HL + ADD HL,BC + EX (SP),HL + LD A,L + SUB E + LD C,A + LD A,H + SBC A,D + LD B,A + INC BC + POP DE + LDDR +L189E: POP DE + POP HL + POP BC + RET + +L18A2: CALL L1888 +L18A5: PUSH BC + PUSH HL + PUSH DE +L18A8: LD A,C + OR B + JR Z,L189E ; (-00eH) + LDIR + JR L189E ; (-012H) + +L18B0: LD (L18BF),HL +L18B3: LD HL,0505CH +L18B6: PUSH HL + CALL L1867 + JP Z,L1779 + PUSH HL + DB 021H +L18BF: DB 0AAH + DB 00FH + CALL L1773 + POP HL + JP Z,L1783 + JP C,L1783 + POP AF + JR L18B6 ; (-018H) + +L18CE: PUSH HL + LD E,(HL) + INC HL + LD D,(HL) + LD A,E + OR D + JP Z,L1779 + DB 021H +L18D8: DB 042H + DB 04CH + CALL L1773 + POP HL + INC HL + INC HL + JP L1784 + +L18E3: ADD HL,BC + EX DE,HL + POP HL + LD (HL),E + INC HL + LD (HL),D + EX DE,HL +L18EA: PUSH HL + CALL L1867 + JR NZ,L18E3 ; (-00dH) + POP HL + RET + +L18F2: PUSH HL + LD BC,00004H + ADD HL,BC + CALL L1900 + INC BC + POP HL + RET + +L18FD: LD BC,MONIT +L1900: PUSH HL + LD A,00DH +L1903: CP (HL) + INC HL + INC BC + JR NZ,L1903 ; (-005H) + DEC BC + POP HL + RET + +L190B: CALL L1921 +L190E: LD A,E + EX DE,HL + LD BC,MONIT + LD HL,(04E92H) + DEC HL +L1917: INC HL + ADD HL,BC + CP (HL) + INC HL + LD C,(HL) + INC HL + JR NZ,L1917 ; (-008H) + EX DE,HL + RET + +L1921: LD A,D + OR A + RET NZ + JR L1929 ; (+003H) + +L1926: LD A,D + OR A + RET Z +L1929: JP DATMISERR + +L192C: LD HL,(04E94H) + EX DE,HL +L1930: LD BC,00005H + LDIR + RET + +L1936: LD HL,(04E94H) + JR L1930 ; (-00bH) + +L193B: CALL SKIPSPACE + CP 00DH + RET Z + CP 03AH + RET + +L1944: LD HL,MONIT + LD (04E4CH),HL + CALL L1957 + CALL L199E + CALL L1978 + CALL L1459 + RET + +L1957: LD HL,0505CH + CALL L19BA + LD DE,04E4EH +L1960: PUSH HL + LD HL,04E96H + XOR A + SBC HL,DE + LD B,L + SRL B + POP HL + EX DE,HL +L196C: XOR A + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (DE),A + INC DE + LD (DE),A + INC DE + DJNZ L196C ; (-00bH) + RET + +L1978: LD HL,05040H + LD (04E9AH),HL + LD HL,04FD7H + LD (04E98H),HL + LD HL,04EBAH + LD (04E96H),HL + LD HL,05053H + CALL L19BA + LD (HL),A +L1991: XOR A + LD (05056H),A + RET + +L1996: LD HL,(04E84H) + LD DE,04E84H + JR L1960 ; (-03eH) + +L199E: LD HL,04DF2H + LD B,05AH +L19A3: LD (HL),000H + INC HL + DJNZ L19A3 ; (-005H) + LD B,01AH + LD HL,04E50H +L19AD: LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH HL + EX DE,HL + CALL L2E09 + POP HL + DJNZ L19AD ; (-00cH) + RET + +L19BA: XOR A +L19BB: LD (HL),A + INC HL + LD (HL),A + INC HL + RET + +L19C0: CALL L1888 +L19C3: PUSH HL + LD A,E + EX AF,AF' + LD A,D + LD HL,04E94H +L19CA: LD E,(HL) + INC HL + LD D,(HL) + CP D + JR C,L19D7 ; (+007H) + JR NZ,L19E2 ; (+010H) + EX AF,AF' + CP E + JR NC,L19E1 ; (+00bH) + EX AF,AF' +L19D7: EX DE,HL + ADD HL,BC + EX DE,HL + LD (HL),D + DEC HL + LD (HL),E + DEC HL + DEC HL + JR L19CA ; (-017H) + +L19E1: EX AF,AF' +L19E2: LD D,A + EX AF,AF' + LD E,A + POP HL + RET + +L19E7: CALL L1873 + PUSH BC + CALL L1762 + CALL L19C3 + POP BC + RET + +L19F3: CALL SKIPSPACE + LD DE,00D2CH + LD BC,MONIT + CP 022H + JR NZ,L1A02 ; (+002H) + LD E,A + INC HL +L1A02: PUSH HL +L1A03: LD A,(HL) + CP D + JR Z,L1A0F ; (+008H) + CP E + INC HL + JR Z,L1A0F ; (+004H) + INC BC + JR L1A03 ; (-00bH) + +L1A0E: PUSH HL +L1A0F: EX (SP),HL + PUSH HL + CALL L1A1E + EX DE,HL + EX (SP),HL + CALL L18A5 + POP DE + POP HL + JP SKIPSPACE + +L1A1E: PUSH BC + XOR A + LD E,A + LD HL,(04E92H) + JR L1A2B ; (+005H) + +L1A26: INC HL + LD C,(HL) + INC HL + INC HL + ADD HL,BC +L1A2B: INC E + CP (HL) + JR NZ,L1A26 ; (-009H) + POP BC + PUSH BC + INC BC + INC BC + INC BC + EX DE,HL + CALL L1888 + EX DE,HL + PUSH HL + ADD HL,BC + DEC HL + LD (HL),00DH + LD HL,(04E94H) + ADD HL,BC + LD (04E94H),HL + POP HL + POP BC + LD (HL),E + INC HL + LD (HL),C + INC HL + LD D,001H + RET + +L1A4E: PUSH HL + LD HL,(04E94H) + LD DE,MONIT + LD A,(HL) + OR A + JP P,L1779 + CP 0C1H + JR C,L1A72 ; (+014H) + SUB 0D1H + JP NC,L1779 + LD E,003H + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + JR L1A6F ; (+004H) + +L1A6B: SRL D + RR E +L1A6F: INC A + JR NZ,L1A6B ; (-007H) +L1A72: JP L1783 + +L1A75: CALL EXECNOTCHR + DB 00DH + DW L1A7E + JP L177A + +L1A7E: PUSH HL + DEC HL +L1A80: CALL L1A91 + JR Z,L1A80 ; (-005H) + CP 00DH + JP NZ,L1779 + POP HL + CALL L2333 + JP L1784 + +L1A91: CALL INCSKIPSPCE + CP 045H + RET Z +L1A97: CALL L176A + JR NC,L1A9E ; (+002H) + CP (HL) + RET + +L1A9E: CP 02EH + RET Z + CP 02BH + RET Z + CP 02DH + RET + +L1AA7: PUSH HL + CALL L1AB8 + POP HL + RET Z + JR L1AB5 ; (+006H) + +L1AAF: PUSH HL + CALL L1AB8 + POP HL + RET NZ +L1AB5: JP CMDSTMTERR + +L1AB8: LD HL,(0504FH) + LD A,H + OR L + RET + +L1ABE: NOP +L1ABF: LD HL,L1ABE + XOR A + CP (HL) + LD (HL),A + JR NZ,L1AEE ; (+027H) +L1AC7: LD HL,0505CH +L1ACA: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + LD A,E + OR D + RET Z + CALL L1773 + RET C + EX DE,HL + ADD HL,DE + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + EX DE,HL + JR L1ACA ; (-014H) + +L1ADE: LD HL,(04E4EH) + LD DE,0505CH + DEC HL + DEC HL + XOR A + SBC HL,DE + LD B,H + LD C,L + JP L19E7 + +L1AEE: CALL L1ADE +L1AF1: CALL L1996 + CALL L199E + CALL L1978 + RET + + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + PUSH BC + CALL L1AEE + POP BC + LD A,B + OR A + JR NZ,L1B10 ; (+004H) + LD A,C + CP 003H + RET C +L1B10: PUSH BC + DEC BC + DEC BC + LD DE,0505CH + CALL L19C0 + POP BC + RET + +L1B1B: LD HL,0505CH +L1B1E: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + LD A,D + OR E + RET Z + CALL L1773 + RET NC + PUSH DE + EX DE,HL + XOR A + SBC HL,DE + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + POP HL + JR L1B1E ; (-017H) + +L1B35: LD HL,(05051H) +L1B38: CALL SKIPSPACE +L1B3B: CP 00DH + JR Z,L1B45 ; (+006H) + CALL MATCHCHR + DB 03AH + JR L1B5C ; (+017H) + +L1B45: LD HL,(0504DH) + LD A,H + OR L + JP Z,WARMSTRT +L1B4D: LD A,(HL) + INC HL + OR (HL) + DEC HL + JP Z,L1D17 + LD DE,0504DH + LD BC,00004H + LDIR +L1B5C: LD (05051H),HL +L1B5F: LD A,(05056H) + DEC A + CALL Z,L1B9F + CALL BRKEY + JR NZ,L1B73 ; (+008H) + LD A,002H + CALL L29EB + JP L1438 + +L1B73: LD HL,(04E92H) + CALL L19BA + LD (04E94H),HL + CALL L173A +L1B7F: SUB 080H + JP C,CMDLET + INC HL + LD C,(HL) + INC HL + PUSH HL + LD HL,CMDJMPTBL + JP NZ,SYNTAXERR + LD A,C + ADD A,080H + JP NC,SYNTAXERR + LD C,A +L1B95: LD B,000H + ADD HL,BC + ADD HL,BC + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX (SP),HL + RET + +L1B9F: CALL L1AB8 + RET Z + LD DE,L13A5 + LD HL,0504DH + JR NZ,L1BAC ; (+001H) + EX DE,HL +L1BAC: LD BC,LETNL + LDIR + RET + +CMDJMPTBL: DW CMDREMDATA + DW CMDREMDATA + DW SYNTAXERR + DW SYNTAXERR + DW CMDREAD + DW CMDLIST + DW CMDRUN + DW CMDNEW + DW CMDPRINT + DW CMDLET + DW CMDFOR + DW CMDIF + DW SYNTAXERR + DW CMDGOTO + DW CMDGOSUB + DW CMDRETURN + DW CMDNEXT + DW CMDSTOP + DW CMDEND + DW SYNTAXERR + DW CMDON + DW CMDLOAD + DW CMDSAVE + DW CMDVERIFY + DW CMDPOKE + DW CMDDIM + DW CMDDEFFN + DW CMDINPUT + DW CMDRESTORE + DW CMDCLS + DW CMDMUSIC + DW CMDTEMPO + DW CMDUSRN + DW CMDWOPEN + DW CMDROPEN + DW CMDCLOSE + DW CMDMON + DW CMDLIMIT + DW CMDCONT + DW CMDGET + DW CMDINP + DW CMDOUT + DW CMDCURSOR + DW CMDSET + DW CMDRESET + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW CMDAUTO + DW SYNTAXERR + DW SYNTAXERR + DW CMDCOPY + DW CMDPAGE + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR +L1C32: CALL L193B + JP NZ,SYNTAXERR + LD (05051H),HL + RET + +CMDREMDATA: CALL L174F + JP L1B38 + +CMDNEW: XOR A + LD (L1463),A + CALL L1944 +L1C49: JP WARMSTRT + +L1C4C: DB 006H +CMDLIST: XOR A + LD (L1CAB),A + CALL EXECNOTCHR + DB 02FH + DW L1C60 + CALL MATCHCHR + DB 050H + LD A,001H + LD (L1CAB),A +L1C60: CALL L1AA7 + DB 03EH + LD A,(BC) + LD (L1C4C),A + PUSH HL + LD HL,04AB3H + CALL L19BA + DEC A + CALL L19BB + POP HL + CALL L193B + CALL NZ,L1CF3 + LD (05051H),HL + LD HL,0505CH +L1C80: PUSH HL + CALL L1867 + POP HL +L1C85: JR Z,L1C49 ; (-03eH) + CALL L18F2 + LD DE,04A0EH + LDIR + LD HL,(04AB3H) + EX DE,HL + LD HL,(04A10H) + CALL L1773 + JR C,L1CDF ; (+044H) + EX DE,HL + LD HL,(04AB5H) + CALL L1773 + JR C,L1CDF ; (+03bH) + CALL L14F8 + LD DE,LINEBUFR + DB 03EH +L1CAB: DB 000H + OR A + JR Z,L1CBA ; (+00bH) + CALL L31A2 + CALL L3246 + CALL L31A7 + JR L1CC7 ; (+00dH) + +L1CBA: CALL MSGNL + LD A,(L1C4C) + DEC A + LD (L1C4C),A + CALL Z,L1CE4 +L1CC7: CALL BRKEY + JR Z,L1C85 ; (-047H) +L1CCC: CALL GETKY + CP 020H + JR Z,L1CCC ; (-007H) + CP 03FH + JR NZ,L1CDF ; (+008H) + LD BC,L2000 +L1CDA: DEC BC + LD A,B + OR C + JR NZ,L1CDA ; (-005H) +L1CDF: LD HL,(04A0EH) + JR L1C80 ; (-064H) + +L1CE4: INC A + LD (L1C4C),A + PUSH BC + LD BC,00001H +L1CEC: DEC BC + LD A,B + OR C + JR NZ,L1CEC ; (-005H) + POP BC + RET + +L1CF3: CALL L17F6 + LD (04AB3H),DE + CALL L193B + JR Z,L1D0A ; (+00bH) + CALL MATCHCHR + DB 02DH + CALL L193B + RET Z + CALL L17F6 +L1D0A: LD (04AB5H),DE + CALL L193B + RET Z + JP SYNTAXERR + +CMDEND: DB 0AFH + DB 001H +L1D17: LD A,001H + EX AF,AF' + CALL L1AAF + EX AF,AF' + OR A + CALL Z,L1D24 + JR L1D41 ; (+01dH) + +L1D24: CALL L1C32 + LD A,001H + JP L29EB + +CMDSTOP: CALL L1AAF + CALL L1D24 + LD HL,(0504FH) + LD DE,L1D44 + CALL MSGX + CALL L1841 + CALL MSGX +L1D41: JP WARMSTRT + +L1D44: DB "*S",096H,0B7H,09EH," ",0A6H,0B0H,00DH +CMDRESTORE: CALL L17F6 + CALL L1C32 + LD BC,L1B35 + PUSH BC + LD A,D + OR E + JP Z,L145E + LD BC,L2D46 + PUSH BC +L1D60: EX DE,HL +L1D61: CALL L18B0 + PUSH DE + INC DE + RET Z + JP LINEERR + +CMDLET: PUSH HL +L1D6B: CALL L193B + JP Z,SYNTAXERR + CP 03DH + INC HL + JR NZ,L1D6B ; (-00bH) + CALL L2293 + LD (05051H),HL + CALL L1D95 + POP HL + CALL L267F + CALL L24B2 + CALL MATCHCHR + DB 03DH + CALL L1D9A + CALL L1DA5 + DW DATMISERR + JP L1B35 + +L1D95: LD HL,04900H + JR L1D9D ; (+003H) + +L1D9A: LD HL,04904H +L1D9D: LD (HL),C + INC HL + LD (HL),B + INC HL + LD (HL),E + INC HL + LD (HL),D + RET + +L1DA5: LD HL,04903H + LD B,(HL) + INC HL + LD C,(HL) + INC HL + LD A,(HL) + LD DE,(04906H) + OR A + JR NZ,L1DBD ; (+009H) + OR B + JP NZ,L177A + CALL L1936 + JR L1DF2 ; (+035H) + +L1DBD: XOR A + OR B + JP Z,L177A + LD HL,L1DF5 + XOR A + LD B,A + SBC HL,DE + JR Z,L1DFE ; (+033H) + LD HL,(04900H) + XOR A + SBC HL,BC + LD B,H + LD C,L + JR C,L1DDA ; (+005H) + CALL L1888 + JR L1DE2 ; (+008H) + +L1DDA: PUSH BC + CALL L1762 + CALL L1873 + POP BC +L1DE2: CALL L19C3 + LD HL,(04902H) + EX DE,HL + CALL L190E + EX DE,HL + DEC DE + DEC HL + INC BC + LDIR +L1DF2: JP L1784 + +L1DF5: JR NC,L1E27 ; (+030H) + DEC C + JR NC,L1E2A ; (+030H) + DEC C + JR NC,L1E2D ; (+030H) + DEC C +L1DFE: LD HL,(04902H) + EX DE,HL + CALL L190B + EX DE,HL + LD DE,L1DF5 + PUSH DE + LD B,003H +L1E0C: LD C,002H +L1E0E: CALL L176A + JR NC,L1E5D ; (+04aH) + LD (DE),A + INC DE + INC HL + DEC C + JR NZ,L1E0E ; (-00bH) + LD A,00DH + LD (DE),A + INC DE + DEC B + JR NZ,L1E0C ; (-014H) + CALL EXECNOTCHR + DB 00DH + DW ILDATERR + POP HL +L1E27: CALL L1E69 +L1E2A: LD B,000H + LD A,E +L1E2D: CP 018H + JR NC,L1E5D ; (+02cH) + SUB 00CH + JR C,L1E37 ; (+002H) + LD E,A + INC B +L1E37: LD A,B + PUSH AF + PUSH HL + LD HL,00E10H + CALL L17CF + POP HL + PUSH DE + INC HL + CALL L1E69 + LD A,E + CP 03CH + JR NC,L1E5D ; (+012H) + PUSH HL + LD HL,0003CH + CALL L17CF + POP HL + EX (SP),HL + ADD HL,DE + EX (SP),HL + INC HL + CALL L1E69 + LD A,E + CP 03CH +L1E5D: JR NC,L1E8E ; (+02fH) + POP HL + ADD HL,DE + EX DE,HL + POP AF + CALL ?TMST + JP L1784 + +L1E69: EXX + LD BC,00005H + CALL L1E7F + CALL L2333 + CALL L1926 + CALL L1A4E + OR C + INC DE + EXX + LD BC,0FFFBH +L1E7F: LD HL,(04E94H) + ADD HL,BC + LD (04E94H),HL + EXX + RET + +GETNUM: CALL L1E69 + LD A,D + OR A + RET Z +L1E8E: JP ILDATERR + +CMDRUN: XOR A + LD (L2A83),A + LD (L30E2),A + CALL L2E94 + CALL L145E + CALL L1459 + CALL L176A + JR NC,L1EAF ; (+009H) +CMDGOTO: CALL L17F6 +L1EA9: EX DE,HL +L1EAA: CALL L1D61 + JR L1EC4 ; (+015H) + +L1EAF: CALL L193B + JP NZ,SYNTAXERR + CALL L1991 + CALL L1978 + CALL L1996 + CALL L199E + LD HL,0505CH +L1EC4: JP L1B4D + +CMDGOSUB: CALL L1AAF + CALL L17F6 +L1ECD: CALL L1C32 + CALL L1D60 + EXX + LD HL,05055H + LD A,(HL) + CP 00FH + JP Z,GOSUBERR + INC (HL) + DEC HL + DEC HL + LD DE,(04E9AH) + DEC DE + LD BC,00007H + LDDR + INC DE + LD (04E9AH),DE + LD C,007H + ADD HL,BC + LD (HL),000H + EXX + JP L1B4D + +CMDRETURN: CALL L1AAF + LD HL,05055H + XOR A + CP (HL) + JP Z,RETGOSBERR + DEC (HL) +L1F04: LD HL,05053H + LD A,(HL) + OR A + JR Z,L1F1A ; (+00fH) + DEC (HL) + INC HL + DEC (HL) + LD HL,(04E98H) + LD BC,00013H + ADD HL,BC + LD (04E98H),HL + JR L1F04 ; (-016H) + +L1F1A: LD HL,(04E9AH) + LD DE,0504DH + LD BC,00007H + LDIR + LD (04E9AH),HL + JP L1B35 + +CMDFOR: CALL L267F + CALL MATCHCHR + DB 03DH + PUSH DE + CALL L1FB7 + POP HL + LD (05040H),HL + EX DE,HL + CALL L24BD + CALL L1936 + CALL L17A0 + SBC A,(HL) + CALL L1FB7 + LD DE,05048H + CALL L1936 + CALL L1792 + SBC A,A + LD E,H + RRA + CALL L1FB7 + LD HL,(04E94H) + JR L1F5F ; (+003H) + + LD HL,L2A88 +L1F5F: LD DE,05042H + LD A,(HL) + LD (05047H),A + LD BC,00005H + LDIR + LD HL,(04E98H) + LD DE,(05040H) + LD A,(05053H) + INC A +L1F76: DEC A + JR Z,L1F98 ; (+01fH) + EX AF,AF' + LD A,(HL) + SUB E + LD B,A + INC HL + LD A,(HL) + SUB D + OR B + LD BC,PRNT + ADD HL,BC + JR Z,L1F8A ; (+003H) + EX AF,AF' + JR L1F76 ; (-014H) + +L1F8A: LD (04E98H),HL + EX AF,AF' + DEC A + LD HL,05053H + LD B,(HL) + LD (HL),A + SUB B + INC HL + ADD A,(HL) + LD (HL),A +L1F98: LD HL,05054H + LD A,(HL) + CP 00FH + JP Z,FORNEXTERR + INC (HL) + DEC HL + INC (HL) + DEC HL + LD DE,(04E98H) + LD BC,00013H + DEC DE + LDDR + INC DE + EX DE,HL + LD (04E98H),HL + JP L1B35 + +L1FB7: CALL L2333 + LD (05051H),HL + JP L1926 + +CMDNEXT: LD A,(05053H) + OR A +L1FC4: JP Z,NEXTFORERR + CALL L2640 + LD (05051H),HL + LD HL,(04E98H) + CALL NC,L2039 +L1FD3: LD A,E + SUB (HL) + INC HL + LD B,A + LD A,D + SUB (HL) + OR B + JR Z,L1FF1 ; (+015H) + EXX + LD HL,05053H + LD A,(HL) + DEC A + JR Z,L1FC4 ; (-020H) + LD (HL),A + INC HL + DEC (HL) + EXX + LD BC,PRNT + ADD HL,BC + LD (04E98H),HL + JR L1FD3 ; (-01eH) + +L1FF1: INC HL + CALL L24BD + PUSH DE + PUSH HL + CALL L3405 + POP HL + POP DE + LD BC,00005H + ADD HL,BC +L2000: LD A,(HL) + INC HL + PUSH HL + OR A + JP P,L201B + EX DE,HL + CALL L3A66 + POP HL + LD BC,00005H + JR C,L2025 ; (+014H) +L2011: ADD HL,BC + LD DE,0504DH + INC C + LDIR + JP L1B35 + +L201B: CALL L3A66 + POP HL + LD BC,00005H + CCF + JR C,L2011 ; (-014H) +L2025: LD C,00BH + ADD HL,BC + LD (04E98H),HL + LD HL,05053H + DEC (HL) + INC HL + DEC (HL) + CALL L1792 + INC L + DEC (HL) + DEC DE + JR CMDNEXT ; (-079H) + +L2039: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + RET + +CMDON: CALL L1AAF + CALL L2333 + CALL L1926 + CALL L1A4E + DB 04CH + DB 020H + CALL MATCHCHR + DB 080H + SUB 08DH + CP 002H + JP NC,SYNTAXERR + EX AF,AF' + INC HL + LD A,E + OR A + JR Z,L2061 ; (+004H) + LD A,D + OR A + JR Z,L206F ; (+00eH) +L2061: JP CMDREMDATA + +L2064: CALL L193B + JP Z,L1B3B + CP 02CH + INC HL + JR NZ,L2064 ; (-00bH) +L206F: DEC E + JR NZ,L2064 ; (-00eH) + CALL L17F6 + CALL L174F + EX AF,AF' + OR A + JP NZ,L1ECD + JP L1EA9 + +CMDDIM: CALL L267F + LD BC,MONIT + CP 024H + JR NZ,L208C ; (+002H) + INC HL + INC B +L208C: CALL MATCHCHR + DB 028H + CALL L2107 + JR NZ,L20E5 ; (+050H) + PUSH HL + LD HL,(L2105) + LD E,H + LD D,A + LD H,A + INC HL + INC DE + CALL L17AF + CP D + INC DE + LD A,(L2104) + OR A + POP HL + PUSH DE + PUSH HL + LD HL,00002H + JR NZ,L20B1 ; (+002H) + LD L,005H +L20B1: CALL L17AF + CP D + INC DE + LD HL,00004H + ADD HL,DE + JP C,MEMERR + LD B,H + LD C,L + POP DE + CALL L19C0 + LD HL,(L18D8) + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + LD DE,(02105H) + LD (HL),E + INC HL + LD (HL),D + INC HL + POP BC + LD A,(L2104) + OR A + JR Z,L20F0 ; (+016H) +L20DA: LD (HL),000H + INC HL + LD (HL),00DH + INC HL + DEC BC + LD A,B + OR C + JR NZ,L20DA ; (-00bH) +L20E5: LD HL,(L2102) + CALL EXECNOTCHR + DB 02CH + DW L1B38 + JR CMDDIM ; (-070H) + +L20F0: EX DE,HL +L20F1: PUSH BC + LD HL,L2A8D + LD BC,00005H + LDIR + POP BC + DEC BC + LD A,B + OR C + JR NZ,L20F1 ; (-00fH) + JR L20E5 ; (-01dH) + +L2102: XOR (HL) + LD H,C +L2104: DB 001H +L2105: DB 00BH + DB 001H +L2107: PUSH DE + PUSH BC + CALL GETNUM + POP BC + LD A,(HL) + CP 02CH + CALL Z,L2185 + CALL MATCHCHR + DB 029H + LD (L2102),HL + POP HL + LD (L18D8),HL + EX DE,HL + LD (L2105),HL + LD A,B + LD (L2104),A + LD HL,04E86H + LD DE,LETNL + OR A + JR Z,L2130 ; (+001H) + ADD HL,DE +L2130: LD A,C + LD E,002H + OR A + JR NZ,L2137 ; (+001H) + ADD HL,DE +L2137: LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL +L213B: CALL L18CE + LD L,(HL) + LD HL,L2E28 + LD E,(HL) + INC HL + PUSH HL + LD L,(HL) + LD D,000H + LD H,D + INC HL + INC DE + CALL L17CF + LD A,(L2104) + OR A + JR NZ,L215F ; (+00bH) + LD HL,00005H + CALL L17CF + POP HL + ADD HL,DE + INC HL + JR L213B ; (-024H) + +L215F: POP HL + INC HL + LD B,000H +L2163: LD C,(HL) + INC HL + INC HL + ADD HL,BC + DEC DE + LD A,D + OR E + JR NZ,L2163 ; (-009H) + JR L213B ; (-033H) + + XOR A + RET + + LD C,(HL) + INC HL + LD B,(HL) + INC HL + LD DE,(02105H) + LD A,B + CP D + JR C,L217E ; (+002H) + LD A,C + CP E +L217E: JP C,ILDATERR + LD A,001H + OR A + RET + +L2185: INC C + PUSH BC + PUSH DE + INC HL + CALL GETNUM + LD A,E + POP DE + LD D,A + POP BC + RET + +CMDPOKE: CALL L299F + CALL L2E94 + PUSH DE + CALL L299F + LD A,D + OR A + JP NZ,ILDATERR + EX (SP),HL + LD (HL),E + POP HL +L21A3: JP L1B38 + +CMDCLS: PUSH HL + CALL L1AF1 + POP HL + JR L21A3 ; (-00aH) + +CMDIF: CALL L1AAF + CALL EXECNOTCHR + DB 0AEH + DW L21D3 + CALL L2DBA + JP Z,SYNTAXERR + LD B,A + CALL L2712 + PUSH HL + LD A,B + CALL L2DC1 + RST 038H + RST 038H + LD BC,00008H + ADD HL,BC + LD A,(HL) + POP HL + OR A + JR NZ,L21E3 ; (+013H) +L21D0: JP L1B45 + +L21D3: CALL L2293 + CALL L1926 + LD IX,(04E94H) + BIT 7,(IX+004H) + JR Z,L21D0 ; (-013H) +L21E3: CALL MATCHCHR + ADD A,B + SUB 08CH + INC HL + CP 002H + JP Z,CMDGOSUB +L21EF: JP NC,SYNTAXERR + OR A + CALL Z,L21F9 + JP CMDGOTO + +L21F9: CALL L176A + RET C + POP BC + JP L1B7F + +CMDDEFFN: CALL SKIPSPACE + SUB 041H + CP 01AH + JR NC,L21EF ; (-01bH) + LD E,(HL) + INC HL + CALL MATCHCHR + DB 028H + SUB 041H + CP 01AH + JR NC,L21EF ; (-027H) + LD D,(HL) + INC HL + CALL MATCHCHR + DB 029H + CALL MATCHCHR + DB 03DH + PUSH HL + CALL L174F + POP BC + PUSH HL + XOR A + SBC HL,BC + PUSH BC + PUSH HL + LD HL,(04E84H) +L222E: LD A,(HL) + CP E + JR Z,L224D ; (+01bH) + OR A + JR Z,L223C ; (+007H) + INC HL + INC HL + CALL L1745 + JR L222E ; (-00eH) + +L223C: EX DE,HL + LD BC,GETL + CALL L19C0 + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (HL),00DH + EX DE,HL + JR L225D ; (+010H) + +L224D: INC HL + LD (HL),D + INC HL + PUSH HL + CALL L174F + POP DE + XOR A + SBC HL,DE + LD B,H + LD C,L + CALL L19E7 +L225D: POP BC + POP HL + CALL L18A2 + CALL L19C3 + POP HL +L2266: JP L1B38 + +CMDMUSIC: CALL L193B + JR Z,L2266 ; (-008H) + CALL L2333 + CALL L193B + JR Z,L2277 ; (+001H) + INC HL +L2277: CALL L190B + CALL MELDY + JP C,L1438 + JR CMDMUSIC ; (-019H) + +CMDTEMPO: CALL GETNUM + LD A,E + DEC A + CP 007H + JP NC,ILDATERR + INC A + CALL XTEMP + JR L2266 ; (-02cH) + +L2292: INC HL +L2293: CALL L2333 +L2296: CP 03DH + JR NZ,L229C ; (+002H) + LD A,089H +L229C: CP 083H + RET C + CP 090H + RET NC + SUB 083H + EX AF,AF' + LD A,D + OR A + JR NZ,L22B4 ; (+00bH) + EX AF,AF' + EXX + LD BC,L2296 + LD DE,L2332 + JP L23BB + +L22B4: EX AF,AF' + PUSH DE + PUSH AF + CALL L2332 + POP AF + EX AF,AF' + EX (SP),HL + CALL L190B + LD A,C + PUSH AF + EX DE,HL + CALL L190B + POP AF + LD B,A + CALL L2305 + LD HL,L22F3 + PUSH HL + LD HL,L22E1 + EX AF,AF' + LD C,A + LD B,000H + ADD HL,BC + ADD HL,BC + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX AF,AF' + OR A + LD A,001H + JP (HL) + +L22E1: DW L231B + DW L231B + DW L231E + DW L231E + DW L2322 + DW L2322 + DW L2325 + DW L2328 + DW L232F +L22F3: LD DE,L2A92 + OR A + JR NZ,L22FC ; (+003H) + LD DE,L2A8D +L22FC: CALL L192C + POP HL + CALL L23FA + JR L2296 ; (-06fH) + +L2305: LD A,B + OR C + RET Z + LD A,C + CP B + JR NZ,L2315 ; (+009H) +L230C: LD A,(DE) + SUB (HL) + JR NZ,L2315 ; (+005H) + INC HL + INC DE + DJNZ L230C ; (-008H) + RET + +L2315: LD A,001H + DB 0D0H + LD A,080H + RET + +L231B: RET NZ + XOR A + RET + +L231E: RET Z + RET M + XOR A + RET + +L2322: RET P + XOR A + RET + +L2325: RET Z + XOR A + RET + +L2328: LD A,000H + RET Z + RET M + LD A,001H + RET + +L232F: RET M + XOR A + RET + +L2332: INC HL +L2333: LD A,(HL) + CP 020H + JR Z,L2332 ; (-006H) + CP 02BH + JR Z,L2348 ; (+00cH) + CP 02DH + JR NZ,L2349 ; (+009H) + CALL L2392 + CALL L2410 + JR L234C ; (+004H) + +L2348: INC HL +L2349: CALL L2393 +L234C: CP 02BH + JR Z,L2356 ; (+006H) + CP 02DH + RET NZ + LD A,00DH + DB 001H +L2356: LD A,00CH + EX AF,AF' + LD A,D + OR A + JR NZ,L2367 ; (+00aH) + EX AF,AF' + EXX + LD BC,L234C + LD DE,L2392 + JR L23BB ; (+054H) + +L2367: EX AF,AF' + CP 00CH + JP NZ,SYNTAXERR + PUSH DE + CALL L2392 + EX (SP),HL + PUSH DE + CALL L190B + LD A,C + PUSH AF + EX DE,HL + CALL L190B + POP AF + ADD A,C + JP C,STRLENERR + PUSH AF + EX DE,HL + CALL L18A2 + CALL L19C3 + POP AF + LD C,A + DEC DE + LD (DE),A + POP DE + POP HL + LD A,(HL) + JR L234C ; (-046H) + +L2392: INC HL +L2393: CALL L23AC +L2396: CP 02FH + JR Z,L23A0 ; (+006H) + CP 02AH + RET NZ + LD A,00EH + DB 001H +L23A0: LD A,00FH + EXX + LD BC,L2396 + LD DE,L23AB + JR L23BB ; (+010H) + +L23AB: INC HL +L23AC: CALL L2402 +L23AF: CP 05EH + RET NZ + LD A,010H + EXX + LD BC,L23AF + LD DE,L2401 +L23BB: PUSH BC + LD HL,(04E94H) + LD BC,00005H + ADD HL,BC + LD (04E94H),HL + LD HL,L2691 + LD C,A + ADD HL,BC + ADD HL,BC + LD C,(HL) + INC HL + LD B,(HL) + PUSH BC + LD HL,L23DC + PUSH HL + PUSH DE + EXX + LD A,D + OR A + RET Z +L23D9: JP DATMISERR + +L23DC: LD A,D + OR A + JR NZ,L23D9 ; (-007H) + POP IY + PUSH HL + LD HL,(04E94H) + LD BC,0FFFBH + LD E,L + LD D,H + ADD HL,BC + LD (04E94H),HL + EX DE,HL + LD BC,L23F9 + PUSH BC + JP (IY) + +L23F6: CALL L192C +L23F9: POP HL +L23FA: LD BC,00005H + LD D,B + LD E,B + LD A,(HL) + RET + +L2401: INC HL +L2402: CALL SKIPSPACE + CP 02BH + JR Z,L2425 ; (+01cH) + CP 02DH + JR NZ,L2426 ; (+019H) + CALL L2425 +L2410: EXX + LD HL,(04E94H) + PUSH HL + LD BC,00004H + ADD HL,BC + LD A,(HL) + POP HL + OR A + JR Z,L2422 ; (+004H) + LD A,(HL) + ADD A,080H + LD (HL),A +L2422: EXX + LD A,(HL) + RET + +L2425: INC HL +L2426: CALL L2640 + JR NC,L2447 ; (+01cH) + LD A,046H + CP E + JR NZ,L2436 ; (+006H) + LD A,04EH + CP D + JP Z,L24F0 +L2436: CALL L24B2 + PUSH HL + LD A,B + OR A + JR Z,L23F6 ; (-048H) + EX DE,HL + LD B,000H + CALL L1A0E + POP HL + LD A,(HL) + RET + +L2447: CP 080H + JR C,L2481 ; (+036H) + CP PRTD + JR Z,L24A8 ; (+059H) + CP 0C0H + JR C,L2472 ; (+01fH) + SUB 0C0H + PUSH AF + CALL L2332 + CALL L1926 + CALL MATCHCHR + DB 029H + POP AF + PUSH HL + LD HL,L23F9 + PUSH HL + LD HL,(04E94H) + EX DE,HL + LD HL,L26DB + PUSH HL + LD C,A + JP L1B95 + +L2472: SUB 0A0H + JR C,L248F ; (+019H) + LD C,A + CALL INCSKIPSPCE + PUSH HL + LD HL,L26B3 + JP L1B95 + +L2481: CP 028H + JR Z,L2492 ; (+00dH) + CP 022H + JP Z,L19F3 + CALL L1A97 + JR Z,L249E ; (+00fH) +L248F: JP SYNTAXERR + +L2492: LD BC,MONIT + CALL L185F + CALL L2292 + JP L2712 + +L249E: LD DE,(04E94H) + CALL L3670 + JP L23FA + +L24A8: CALL INCSKIPSPCE + PUSH HL + LD DE,L2A97 + JP L23F6 + +L24B2: LD A,(HL) + CP 024H + JP Z,L256F + CP 028H + JP Z,L25FE +L24BD: PUSH HL + LD HL,(04E8AH) + LD BC,00005H +L24C4: LD A,(HL) + CP E + INC HL + JR NZ,L24CD ; (+004H) + LD A,(HL) + CP D + JR Z,L24EB ; (+01eH) +L24CD: OR A + JR Z,L24D4 ; (+004H) + INC HL + ADD HL,BC + JR L24C4 ; (-010H) + +L24D4: LD C,007H + DEC HL + PUSH DE + EX DE,HL + LD HL,L2A8D + DEC HL + DEC HL + CALL L18A2 + CALL L19C3 + EX DE,HL + POP DE + LD (HL),E + INC HL + LD (HL),D + LD C,005H +L24EB: INC HL + EX DE,HL + POP HL + LD A,(HL) + RET + +L24F0: LD A,(HL) + SUB 041H + CP 01AH + JP NC,SYNTAXERR + LD E,(HL) + INC HL + CALL MATCHCHR + DB 028H + PUSH DE + CALL L2333 + CALL L1926 + CALL L2712 + POP DE + PUSH HL + LD HL,(04E84H) +L250D: LD A,(HL) + OR A + JP Z,UNDEFFNERR + CP E + JR Z,L251C ; (+007H) + INC HL + INC HL + CALL L1745 + JR L250D ; (-00fH) + +L251C: INC HL + LD E,(HL) + INC HL + PUSH HL + PUSH DE + LD D,020H + CALL L24BD + POP HL + PUSH DE + PUSH HL + LD HL,(04E96H) + LD DE,04E9CH + CALL L1773 + JP Z,FUNCERR + LD BC,0FFFAH + ADD HL,BC + LD (04E96H),HL + POP DE + LD (HL),E + INC HL + POP DE + LD BC,00005H + EX DE,HL + CALL L18A5 + EX DE,HL + LD HL,(04E94H) + CALL L18A5 + POP HL + CALL L2333 + CALL L1926 + CALL L193B + JP NZ,SYNTAXERR + LD HL,(04E96H) + LD E,(HL) + INC HL + LD D,020H + CALL L24BD + CALL L18A5 + ADD HL,BC + LD (04E96H),HL + JP L23F9 + +L256F: CALL INCSKIPSPCE + CP 028H + JP Z,L25F9 + PUSH HL + LD HL,04954H + XOR A + SBC HL,DE + JR Z,L25B2 ; (+032H) + EX DE,HL + LD (L18D8),HL + LD HL,(04E90H) +L2587: CALL L18CE + SUB (HL) + DEC H + JR Z,L25AA ; (+01cH) + LD B,000H + LD C,(HL) + ADD HL,BC + INC HL + INC HL + JR L2587 ; (-00fH) + + LD BC,00004H + EX DE,HL + LD HL,L18D8 + CALL L18A2 + CALL L19C3 + EX DE,HL + ADD HL,BC + DEC HL + LD (HL),00DH + DEC HL + LD (HL),B +L25AA: LD C,(HL) + INC HL + LD B,001H + EX DE,HL + POP HL + LD A,(HL) + RET + +L25B2: CALL TIMRD + EX DE,HL + OR A + JR Z,L25BB ; (+002H) + LD A,00CH +L25BB: EXX + LD HL,L1DF5 + PUSH HL + EXX + LD DE,0F1F0H + CALL L25D9 + LD DE,0FFC4H + CALL L25D8 + LD A,L + CALL L25E2 + POP DE + LD BC,00106H + POP HL + LD A,(HL) + RET + +L25D8: XOR A +L25D9: ADD HL,DE + JR NC,L25DF ; (+003H) + INC A + JR L25D9 ; (-006H) + +L25DF: OR A + SBC HL,DE +L25E2: LD BC,L30F6 +L25E5: ADD A,C + JR NC,L25EB ; (+003H) + INC B + JR L25E5 ; (-006H) + +L25EB: ADD A,03AH + EX AF,AF' + LD A,B + EXX + LD (HL),A + INC HL + EX AF,AF' + LD (HL),A + INC HL + LD (HL),00DH + EXX + RET + +L25F9: LD BC,00100H + JR L2601 ; (+003H) + +L25FE: LD BC,MONIT +L2601: INC HL + CALL L2107 + JP Z,ILDATERR + PUSH HL + LD L,C + LD H,000H + LD C,E + LD E,D + LD B,H + LD D,H + PUSH BC + INC HL + CALL L17CF + POP HL + ADD HL,DE + EX DE,HL + LD A,(L2104) + OR A + JR NZ,L262B ; (+00dH) + LD HL,00005H + CALL L17CF + POP HL + ADD HL,DE + LD BC,00005H + JR L263A ; (+00fH) + +L262B: POP HL + LD B,000H +L262E: LD C,(HL) + INC HL + LD A,D + OR E + JR Z,L2639 ; (+005H) + ADD HL,BC + INC HL + DEC DE + JR L262E ; (-00bH) + +L2639: INC B +L263A: EX DE,HL + LD HL,(L2102) + LD A,(HL) + RET + +L2640: CALL SKIPSPACE + LD BC,L411A + SUB B + CP C + LD A,(HL) + RET NC + LD E,A + LD D,020H +L264D: INC HL + LD A,(HL) + CP D + JR Z,L264D ; (-005H) + SUB B + CP C + JR C,L265A ; (+004H) + SUB 0EFH + CP 00AH +L265A: LD A,(HL) + CCF + RET C + LD D,A + CP 04EH + JR NZ,L2667 ; (+005H) + LD A,046H + CP E + JR Z,L267A ; (+013H) +L2667: INC HL + LD A,(HL) + CP 020H + JR Z,L2667 ; (-006H) + SUB B + CP C + JR C,L2667 ; (-00aH) + SUB 0EFH + CP 00AH + JR C,L2667 ; (-010H) +L2677: LD A,(HL) + SCF + RET + +L267A: CALL INCSKIPSPCE + SCF + RET + +L267F: CALL L2640 + JR NC,L268E ; (+00aH) + LD A,046H + CP E + JR NZ,L268C ; (+003H) + LD A,04EH + CP D +L268C: JR NZ,L2677 ; (-017H) +L268E: JP SYNTAXERR + +L2691: DW L3B62 + DW L3B62 + DW L3B87 + DW L3B87 + DW L3B8B + DW L3B8B + DW L3B7F + DW L3B73 + DW L3B77 + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW L3405 + DW L3403 + DW L3500 + DW L35D0 + DW L4159 +L26B3: DW L26F3 + DW L270F + DW L273E + DW L2765 + DW L2772 + DW L277F + DW L27B4 + DW L279A + DW L27F9 + DW L2801 + DW L2804 + DW L2895 + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW L2824 + DW SYNTAXERR + DW L2841 + DW L287C + DW SYNTAXERR +L26DB: DW L3B98 + DW L3C16 + DW L3D05 + DW L3D14 + DW L4076 + DW L3E03 + DW L3A86 + DW L4064 + DW L3F35 + DW L289D + DW L28A2 + DW L3D3F +L26F3: DB 0CDH + DB 033H + DB 023H + DB 0CDH + DB 094H + DB 02EH +L26F9: PUSH DE + CALL GETNUM + CALL L2712 + EX (SP),HL + PUSH HL + EX DE,HL + CALL L190B + LD A,C + SUB L + JR C,L273A ; (+030H) + PUSH HL + LD C,A + ADD HL,DE + JR L2732 ; (+023H) + +L270F: DB 0CDH +L2710: DB 017H + DB 027H +L2712: CALL MATCHCHR + DB 029H + RET + + CALL L2333 + CALL L2E94 + PUSH DE + CALL GETNUM + JR L2724 ; (+001H) + +L2723: PUSH BC +L2724: EX (SP),HL + PUSH HL + EX DE,HL + CALL L190B + LD A,C + SUB L + JR C,L273A ; (+00cH) + PUSH HL + LD C,A + LD L,E + LD H,D +L2732: EX DE,HL + CALL L19E7 + POP BC + DEC HL + LD (HL),C + INC HL +L273A: POP DE + POP HL + LD A,(HL) + RET + +L273E: CALL L2333 + CALL L2E94 + PUSH DE + PUSH BC + CALL GETNUM + POP BC + LD A,E + OR A + JP Z,ILDATERR + LD A,C + SUB E + JR NC,L2755 ; (+002H) + LD A,PRTD +L2755: INC A + LD E,A + POP BC + CALL L2723 + CALL L2E94 + CP 02DH + JR NZ,L26F9 ; (-069H) + INC HL + JR L2712 ; (-053H) + +L2765: CALL L2333 + CALL L190B + CALL L2712 + PUSH HL + LD A,C + JR L27C4 ; (+052H) + +L2772: CALL L299F + CALL L2712 + LD A,E + LD BC,00001H + JP L280F + +L277F: CALL L2333 + CALL L1926 + CALL L2712 + PUSH HL + LD HL,(04E94H) + LD DE,04AB3H + PUSH DE + CALL L38BB + POP HL + CALL L19F3 + POP HL + LD A,(HL) + RET + +L279A: CALL L2333 + CALL L190B + CALL L2712 + PUSH HL + EX DE,HL + JR L27AA ; (+003H) + + LD HL,L27B2 +L27AA: CALL L1A75 + AND A + DAA + POP HL + LD A,(HL) + RET + +L27B2: DB 030H + DB 00DH +L27B4: CALL L2333 + CALL L190B + CALL L2712 + LD A,C + OR A + JP Z,ILDATERR +L27C2: LD A,(DE) + PUSH HL +L27C4: LD E,A + LD D,000H +L27C7: CALL L27CD + POP HL + LD A,(HL) + RET + +L27CD: LD B,080H + LD A,D + OR E + JR Z,L27E7 ; (+014H) + LD B,0D0H + LD A,D + OR A + JR NZ,L27DE ; (+005H) + LD B,0C8H + LD D,E + LD E,000H +L27DE: EX DE,HL +L27DF: BIT 7,H + JR NZ,L27E6 ; (+003H) + ADD HL,HL + DJNZ L27DF ; (-007H) +L27E6: EX DE,HL +L27E7: LD HL,(04E94H) + LD (HL),B + INC HL + CALL L19BA + LD (HL),E + INC HL + LD (HL),D + LD BC,00005H + LD DE,MONIT + RET + +L27F9: CALL L299F + CALL L2712 + JR L27C2 ; (-03fH) + +L2801: JP SYNTAXERR + +L2804: CALL GETNUM + CALL L2712 + LD A,020H + LD C,E + LD B,000H +L280F: PUSH HL + PUSH AF + CALL L1A1E + POP AF + PUSH DE + PUSH BC + LD B,C + INC B + JR L281D ; (+002H) + +L281B: LD (HL),A + INC HL +L281D: DJNZ L281B ; (-004H) + POP BC + POP DE + POP HL + LD A,(HL) + RET + +L2824: CALL L2333 + CALL L2E94 + PUSH DE + CALL GETNUM + CALL L2712 + EX (SP),HL + PUSH DE + EX DE,HL + CALL L190B + LD A,C + OR A + JP Z,ILDATERR + LD A,(DE) + POP BC + POP HL + JR L280F ; (-032H) + +L2841: CALL L1E69 + LD A,E + CP 028H +L2847: JP NC,ILDATERR + PUSH AF + CALL MATCHCHR + DB 02CH + CALL GETNUM + CALL MATCHCHR + DB 029H + LD A,E + CP 019H + JR NC,L2847 ; (-014H) + POP AF + LD C,A + LD B,E + INC B + PUSH HL + LD HL,(PAGETP) + LD D,000H + LD E,028H + XOR A + SBC HL,DE +L286A: ADD HL,DE + DJNZ L286A ; (-003H) + ADD HL,BC + CALL L2878 + POP HL + LD BC,00001H + JP L280F + +L2878: LD A,(HL) + JP ?DACN + +L287C: CALL EXECNOTCHR + DB 056H + DW L288C + LD A,(01172H) +L2885: LD D,000H + LD E,A + PUSH HL + JP L27C7 + +L288C: CALL MATCHCHR + DB 048H + LD A,(DSPXY) + JR L2885 ; (-010H) + +L2895: PUSH HL + CALL L184A + EX DE,HL + JP L27C7 + +L289D: LD A,(DE) + OR 080H + LD (DE),A + RET + +L28A2: LD A,(DE) + LD DE,L192C + PUSH DE + LD DE,L2A92 + OR A + RET P + LD DE,L2A88 + CP 080H + RET NZ + LD DE,L2A8D + RET + +CMDMON: JP MONIT + +CMDCURSOR: CALL GETNUM + LD A,E + CP 028H +L28BF: JP NC,ILDATERR + PUSH AF + CALL MATCHCHR + DB 02CH + CALL GETNUM + LD A,E + CP 019H + JR NC,L28BF ; (-010H) + PUSH HL + LD HL,(DSPXY) + LD A,E + SUB H + LD H,A + LD A,(MGPNT) + JP M,L28F8 + ADD A,H + SUB 032H + JR NC,L28E3 ; (+002H) + ADD A,032H +L28E3: LD (MGPNT),A + EX DE,HL + LD H,L + POP DE + POP AF + LD L,A + LD (DSPXY),HL + NOP + NOP + NOP + LD (DPRNT),A + EX DE,HL + JP L1B38 + +L28F8: ADD A,H + JP P,L28E3 + ADD A,032H + JR L28E3 ; (-01dH) + + NOP + NOP +CMDGET: CALL L267F + CALL L24B2 + LD (05051H),HL + CALL L1D9A + CALL GETKY + PUSH AF + LD A,(04905H) + OR A + JR Z,L292D ; (+015H) + POP AF + LD BC,MONIT + OR A + JR Z,L2920 ; (+001H) + INC BC +L2920: CALL L280F +L2923: CALL L1D95 + CALL L1DA5 + DW DATMISERR + JR L2998 ; (+06bH) + +L292D: POP AF + LD DE,MONIT + CALL L2939 +L2934: CALL L27CD + JR L2923 ; (-016H) + +L2939: OR A + RET Z + SUB 030H + CP 00AH + RET NC + LD E,A + RET + +CMDUSRN: CALL L299F + PUSH DE + CALL EXECNOTCHR + DB 02CH + DW L2959 + CALL L267F + CALL L24B2 + LD A,B + OR A + JP Z,DATMISERR + LD B,000H +L2959: CALL L2712 + LD (05051H),HL + CALL L13FA + LD HL,L1B35 + EX (SP),HL + JP (HL) + +CMDLIMIT: LD DE,L299B + CALL L14C7 + JR NZ,L2977 ; (+008H) + LD (05051H),HL + LD HL,(04908H) + JR L2994 ; (+01dH) + +L2977: CALL L299F + LD (05051H),HL + LD HL,(04908H) + CALL L1773 + JP C,ILDATERR + LD HL,(04E94H) + LD BC,000C8H + ADD HL,BC + CALL L1773 + JP NC,BADWRERR + EX DE,HL +L2994: LD (0490AH),HL + LD SP,HL +L2998: JP L1B35 + +L299B: LD C,L + LD B,C + RET C + NOP +L299F: CALL EXECNOTCHR + DB 024H + DW L29CB + LD DE,MONIT +L29A8: CALL L176A + JR NC,L29C2 ; (+015H) +L29AD: AND 00FH + LD C,A + LD B,000H + LD A,D + AND 0F0H + JP NZ,ILDATERR + EX DE,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,BC + EX DE,HL + INC HL + JR L29A8 ; (-01aH) + +L29C2: SUB 041H + CP 006H + RET NC + ADD A,00AH + JR L29AD ; (-01eH) + +L29CB: JP L1E69 + +CMDCONT: CALL L1AA7 + LD A,(L1463) + OR A + JP Z,CONTERR + PUSH AF + XOR A + CALL L29EB + POP AF + LD HL,(05051H) + OR A + JP M,L2C56 + DEC A + JR Z,L2998 ; (-050H) + JP L1B5F + +L29EB: LD (L1463),A + LD DE,L1464 + LD BC,LETNL + LD HL,0504DH + OR A + JR NZ,L29FB ; (+001H) + EX DE,HL +L29FB: LDIR + RET + +CMDINP: CALL GETNUM + CALL L2E94 + LD A,E + LD (L2A15),A + CALL L267F + CALL L24B2 + LD (05051H),HL + CALL L1D9A + DB 0DBH +L2A15: DB 0FFH + LD E,A + LD D,000H + JP L2934 + +CMDOUT: CALL GETNUM + CALL L2E94 + LD A,E + LD (L2A2B),A + CALL GETNUM + LD A,E + DB 0D3H +L2A2B: DB 0FFH +L2A2C: JP L1B38 + +CMDAUTO: CALL L1AA7 + CALL L193B + JR Z,L2A5F ; (+028H) + CALL EXECNOTCHR + DB 02CH + DW L2A3F + JR L2A71 ; (+032H) + +L2A3F: CALL L2A7A + LD (02A84H),DE + CALL L193B + JR Z,L2A6C ; (+021H) + CALL EXECNOTCHR + DB 02CH + DW SYNTAXERR +L2A51: CALL L2A7A + LD (02A86H),DE +L2A58: LD A,001H + LD (L2A83),A + JR L2A2C ; (-033H) + +L2A5F: LD DE,0000AH + LD (02A84H),DE +L2A66: LD (02A86H),DE + JR L2A58 ; (-014H) + +L2A6C: LD DE,0000AH + JR L2A66 ; (-00bH) + +L2A71: LD DE,0000AH + LD (02A84H),DE + JR L2A51 ; (-029H) + +L2A7A: CALL L1E69 + LD A,D + OR E + RET NZ + JP SYNTAXERR + +L2A83: DB 000H +L2A84: DB 00AH + DB 000H + DB 00AH + DB 000H +L2A88: DB 0C1H + DB 000H + DB 000H + DB 000H + DB 080H +L2A8D: DB 080H + DB 000H + DB 000H + DB 000H + DB 000H +L2A92: DB 041H + DB 000H + DB 000H + DB 000H + DB 080H +L2A97: DB 0C2H + DB 0A1H + DB 0DAH + DB 00FH + DB 0C9H + AND 00FH + ADD A,030H + CP 03AH + RET C + ADD A,007H + RET + +CMDSET: LD A,001H + JR L2AAB ; (+001H) + +CMDRESET: XOR A +L2AAB: PUSH AF + CALL GETNUM + PUSH DE + CALL MATCHCHR + DB 02CH + CALL GETNUM + LD (05051H),HL + LD A,E +L2ABB: SUB 032H + JR NC,L2ABB ; (-004H) + ADD A,032H + LD E,A + POP BC + LD A,C +L2AC4: SUB 050H + JR NC,L2AC4 ; (-004H) + ADD A,050H + LD C,A + XOR A + SRL C + JR NC,L2ADE ; (+00eH) + SRL E + JR NC,L2AD8 ; (+004H) + ADD A,004H +L2AD6: ADD A,002H +L2AD8: ADD A,001H +L2ADA: ADD A,001H + JR L2AE4 ; (+006H) + +L2ADE: SRL E + JR NC,L2ADA ; (-008H) + JR L2AD6 ; (-00eH) + +L2AE4: PUSH AF + LD HL,(PAGETP) + LD A,028H +L2AEA: ADD HL,DE + DEC A + JR NZ,L2AEA ; (-004H) + ADD HL,BC + RES 3,H + LD A,(HL) + CP 0F0H + JR NC,L2AF8 ; (+002H) + LD A,0F0H +L2AF8: POP BC + LD C,A + POP AF + OR A + LD A,B + JR Z,L2B02 ; (+003H) + OR C + JR L2B04 ; (+002H) + +L2B02: CPL + AND C +L2B04: CP 0F0H + JR NZ,L2B09 ; (+001H) + XOR A +L2B09: LD (HL),A + JP L1B35 + +CMDPRINT: CALL EXECNOTCHR ; Check to see if a stream, ie. /T = Tape is given. The 02FH below is / and the function after is called if it doesnt match /. + DB 02FH + DW L2B18 + CALL L2E9B + JR L2B1E ; (+006H) + +L2B18: CALL L2DBA + CALL L2E94 +L2B1E: CALL L193B + JR NZ,L2B2F ; (+00cH) + LD (05051H),HL +L2B26: LD HL,L2BEF + CALL L2BE3 + JP L1B35 + +L2B2F: CALL EXECNOTCHR + DB 03BH + DW L2B35 +L2B35: LD BC,L2B4D + PUSH BC + CP 02CH + RET NZ + INC HL + LD A,(04DD4H) + OR A + RET P + AND 07FH + JP Z,PRNTT + CP 002H + RET NZ + JP L326E + +L2B4D: CALL L193B + LD (05051H),HL + JP NZ,L2B60 + LD A,(04DD4H) + OR A + JP M,L1B35 + JP L2B26 + +L2B60: CP 03BH + JR Z,L2B66 ; (+002H) + CP 02CH +L2B66: JP Z,L2B2F + CALL EXECNOTCHR + DB 0A9H + DW L2B9A + CALL GETNUM + CALL MATCHCHR + DB 029H + LD D,013H + LD A,(DPRNT) + LD B,A + LD A,(04DD4H) + CP 080H + JR Z,L2B8D ; (+00aH) + LD D,020H + CP 082H + JR NZ,L2BBD ; (+034H) + LD A,(L32D3) + LD B,A +L2B8D: LD A,E + SUB B + JR C,L2B2F ; (-062H) + LD C,A + LD B,000H + LD A,D + CALL L280F + JR L2B9D ; (+003H) + +L2B9A: CALL L2293 +L2B9D: PUSH HL + LD HL,LINEBUFR + LD A,D + OR A + CALL Z,L2BC0 + CALL NZ,L2BD0 + LD HL,L2BF7 + CALL L2BE3 + LD HL,L2B1E + EX (SP),HL + CALL L193B + RET Z + CP 03BH + RET Z + CP 02CH + RET Z +L2BBD: JP SYNTAXERR + +L2BC0: PUSH AF + PUSH HL + EX DE,HL + LD HL,(04E94H) + CALL L38BB + POP HL + CALL L18FD + JP L2BD9 + +L2BD0: PUSH AF + CALL L190B + EX DE,HL + CALL L18A5 + EX DE,HL +L2BD9: DEC HL + LD (HL),C + INC HL + PUSH HL + ADD HL,BC + LD (HL),00DH + POP DE + POP AF +L2BE2: RET + +L2BE3: LD A,(04DD4H) + ADD A,080H + CALL L13FA + CALL L2E12 + JP (HL) + +L2BEF: LD B,000H + XOR E + INC DE + AND A + LD SP,L2BE2 +L2BF7: DEC D + NOP + XOR E + INC DE + OR H + LD SP,L3064 +CMDINPUT: CALL L1AAF + CALL EXECNOTCHR + DB 02FH + DW L2C0E + CALL L2E9B + JP L2C62 + +L2C0E: CALL L2DBA + CALL SKIPSPACE + CP 022H + LD DE,L2C5F + JR NZ,L2C25 ; (+00aH) + CALL L2333 + CALL MATCHCHR + DB 03BH + CALL L190B +L2C25: LD (05051H),HL +L2C28: CALL MSG + LD A,(DPRNT) + LD B,A + LD L,A + LD H,000H + LD DE,LINEBUFR + ADD HL,DE + LD (L2C8C),HL + CALL GETL + EX DE,HL + LD A,(HL) + CP 01BH + JR NZ,L2C4A ; (+008H) + LD A,080H + CALL L29EB + JP L1438 + +L2C4A: INC B + LD A,00DH +L2C4D: CP (HL) + JR Z,L2C56 ; (+006H) + INC HL + DJNZ L2C4D ; (-006H) + JP L2C8E + +L2C56: CALL NL + LD DE,L2C5F + JP L2C28 + +L2C5F: CCF + JR NZ,L2C6F ; (+00dH) +L2C62: CALL L2E94 + LD (05051H),HL +L2C68: LD DE,LINEBUFR + PUSH DE + LD HL,L2C84 +L2C6F: CALL L2BE3 + POP HL + DEC HL + LD (HL),C + INC HL + LD A,B + OR A + JP NZ,STRLENERR + CALL L1A0E + LD HL,L2C68 + JP L2CC8 + +L2C84: XOR E + INC DE + XOR E + INC DE + XOR E + INC DE + ADC A,A + DB 030H +L2C8C: DB 00FH + DB 049H +L2C8E: LD A,(04DD4H) + CP 081H + JP Z,L2D1D + LD HL,(L2C8C) + CALL L18FD + LD DE,LINEBUFR + PUSH DE + INC BC + LDIR + POP HL + LD (L2C8C),HL + CALL SKIPSPACE + CP 00DH + JP Z,L2C56 + CALL EXECNOTCHR + DB 02CH + DW L2CBF + PUSH HL + LD DE,L2D11 + CALL L19F3 + POP HL + JR L2CC2 ; (+003H) + +L2CBF: CALL L19F3 +L2CC2: LD (L2C8C),HL + LD HL,L2C8E +L2CC8: PUSH HL + CALL L1D95 + LD HL,(05051H) + CALL L267F + CALL L24B2 + LD (05051H),HL + CALL L1D9A +L2CDB: CALL L1DA5 + DW L2CF4 + LD HL,(05051H) + CALL L193B + JR NZ,L2CEC ; (+004H) + POP AF + JP L1B35 + +L2CEC: CALL MATCHCHR + DB 02CH + LD (05051H),HL + RET + +L2CF4: LD DE,(04902H) + CALL L190B + EX DE,HL + CALL EXECNOTCHR + DB 00DH + DW L2D05 + LD HL,L2D10 +L2D05: CALL L1A75 + OR H + INC DE + CALL L1D95 + JP L2CDB + +L2D10: DB 030H +L2D11: DB 00DH +CMDREAD: LD (05051H),HL + LD A,081H + LD (04DD4H),A + CALL L1AAF +L2D1D: LD A,(05059H) + OR A + CALL Z,L2D43 + LD HL,(0505AH) + CALL L193B + JR NZ,L2D32 ; (+006H) + CALL L2D6B + JP L2D1D + +L2D32: CALL L19F3 + CALL L2E94 + LD (0505AH),HL + LD HL,LINEBUFR + LD (HL),00DH + JP L2CC2 + +L2D43: LD HL,0505CH +L2D46: XOR A + LD (05059H),A +L2D4A: LD A,(HL) + INC HL + OR (HL) + INC HL + JP Z,READDATAERR + INC HL + INC HL +L2D53: CALL EXECNOTCHR + DB 080H + DW L2D68 + CALL EXECNOTCHR + DB 081H + DW L2D68 + LD (0505AH),HL + LD A,001H + LD (05059H),A + RET + +L2D68: CALL L174F +L2D6B: INC HL + CP 03AH + JP Z,L2D53 + JP L2D4A + +L2D74: DB 001H +CMDLOAD: CALL EXECNOTCHR + DB 02FH + DW L2EDA + CALL MATCHCHR + DB 054H + JP L2EDA + +CMDSAVE: CALL L1AA7 + CALL EXECNOTCHR + DB 02FH + DW L2FE0 + CALL MATCHCHR + DB 054H + JP L2FE0 + +CMDROPEN: CALL EXECNOTCHR + DB 02FH + DW L311E + CALL MATCHCHR + DB 054H + JP L311E + +CMDWOPEN: CALL EXECNOTCHR + DB 02FH + DW L30E5 + CALL MATCHCHR + DB 054H + JP L30E5 + + NOP +CMDCLOSE: CALL EXECNOTCHR + DB 02FH + DW L3171 + CALL MATCHCHR + DB 054H + JP L3171 + +L2DBA: LD A,080H + LD (04DD4H),A + OR A + RET + +L2DC1: LD HL,04DF2H + LD DE,NL + LD B,00AH +L2DC9: CP (HL) + JR Z,L2DD2 ; (+006H) + ADD HL,DE + DJNZ L2DC9 ; (-006H) + JP L177A + +L2DD2: LD A,00AH + SUB B + JP L1784 + +L2DD8: LD A,B + OR C + JR Z,L2DDE ; (+002H) + INC BC + INC BC +L2DDE: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + PUSH HL + LD H,B + LD L,C + CALL L1773 + POP HL + JR Z,L2DF7 ; (+00cH) + EX DE,HL + PUSH BC + LD C,L + LD B,H + CALL L19E7 + POP BC + CALL L19C0 + EX DE,HL +L2DF7: LD D,H + LD E,L + LD A,C + OR B + RET Z + LD (HL),C + INC HL + LD (HL),B + DEC HL + DEC BC + DEC BC + RET + + CALL L2DD8 + INC HL + INC HL + RET + +L2E09: PUSH BC + LD BC,MONIT + CALL L2DD8 + POP BC + RET + +L2E12: ADD A,A + ADD A,L + LD L,A + JR NC,L2E18 ; (+001H) + INC H +L2E18: LD A,(HL) + INC HL + LD H,(HL) + LD L,A + RET + +L2E1D: LD DE,CMTFNAME ; Compare loaded filename against name given by user. + PUSH HL + INC HL + LD B,010H +L2E24: LD A,(DE) + CP (HL) + JR NZ,L2E31 ; (+009H) +L2E28: INC HL + INC DE + CP 00DH + JR Z,L2E31 ; (+003H) + DEC B + JR NZ,L2E24 ; (-00dH) +L2E31: POP HL + RET + +CMTBUF: DB 002H +CMTFNAME: DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + PUSH HL + LD HL,GETL + LD (04DD6H),HL + LD HL,04DD8H + LD B,005H +L2E5F: LD (HL),000H + INC HL + DJNZ L2E5F ; (-005H) + LD HL,CMTFNAME + LD B,011H +L2E69: LD (HL),00DH + INC HL + DJNZ L2E69 ; (-005H) + LD B,00EH +L2E70: LD (HL),000H + INC HL + DJNZ L2E70 ; (-005H) + POP HL + CALL L2E94 + CALL L2333 + LD A,D + OR A + JP Z,UNKNWNERR + LD A,C + DEC A + CP 010H + JP NC,UNKNWNERR + PUSH HL + CALL L190B + LD HL,CMTFNAME + EX DE,HL + LDIR + POP HL + RET + +L2E94: CALL EXECNOTCHR + DB 02CH + DW L2E9A +L2E9A: RET + +L2E9B: LD B,000H + LD DE,L2EB0 + CALL L14C9 + JP NZ,SYNTAXERR + CALL L2E94 + LD A,B + ADD A,082H + LD (04DD4H),A + RET + +L2EB0: DB 0D0H + DB 0D4H + DB 000H +CMDVERIFY: CALL L1AA7 + XOR A + JR L2EDC ; (+023H) + +L2EB9: LD A,(ATRB) + CP 002H + JR NZ,L2EE6 ; (+026H) + CALL L2F62 + CALL L1B1B + CALL ?VRFY + PUSH AF + CALL L1AC7 + POP AF + JP C,L30B3 + LD DE,L2FDD + CALL MSGNL + JP L1B35 + +L2EDA: LD A,001H +L2EDC: LD (L2D74),A + LD BC,L2EE6 + PUSH BC + JP L2FE4 + +L2EE6: CALL ?RDI + JP C,L30B3 + CALL L2F67 + LD HL,ATRB + LD A,(HL) + OR A + JR Z,L2EE6 ; (-010H) + CP 004H + JR NC,L2EE6 ; (-014H) + LD DE,CMTFNAME + LD A,(DE) + CP 00DH + JR Z,L2F07 ; (+005H) + CALL L2E1D + JR NZ,L2EE6 ; (-021H) +L2F07: LD A,(L2D74) + OR A + JR Z,L2EB9 ; (-054H) + LD A,(ATRB) + CP 001H + JP Z,L2F8E + CP 002H + JR NZ,L2EE6 ; (-033H) + CALL L1944 + LD HL,(SIZE) + DEC HL + DEC HL + LD C,L + LD B,H + LD DE,0505CH + CALL L1888 + CALL L19C3 + LD (DTADR),DE + CALL L2F6C + CALL ?RDD + JR C,L2F3E ; (+006H) + CALL L1ABF + JP L1B35 + +L2F3E: PUSH AF + CALL L2F4B + POP AF + PUSH AF + CALL L1944 + POP AF + JP L30B3 + +L2F4B: LD DE,0505EH + LD HL,04E4EH + XOR A + SBC HL,DE + RET Z + LD C,L + LD B,H + DEC DE + DEC DE + CALL L1873 + CALL L1762 + JP L19C3 + +L2F62: LD DE,L2FD2 + JR L2F6F ; (+008H) + +L2F67: LD DE,L2FC2 + JR L2F6F ; (+003H) + +L2F6C: LD DE,L2FC9 +L2F6F: CALL MSGNL + LD DE,NAME + LD A,(DE) + CP 00DH + RET Z + PUSH DE + CALL L2F86 + POP DE + LD A,00DH + LD (01101H),A + CALL MSGX +L2F86: LD DE,L2F8C + JP MSGX + +L2F8C: DB 022H + DB 00DH +L2F8E: LD HL,(DTADR) + EX DE,HL + LD HL,(0490AH) + DEC HL + CALL L1773 + JR NC,L2FB6 ; (+01bH) + LD HL,(SIZE) + ADD HL,DE + JR C,L2FBC ; (+01bH) + EX DE,HL + LD HL,(04908H) + CALL L1773 + JR C,L2FBC ; (+012H) + CALL L2F6C + CALL ?RDD + JP C,L30B3 + JP L1B35 + +L2FB6: CALL MSTOP + JP BADWRERR + +L2FBC: CALL MSTOP + JP MEMERR + +L2FC2: DB "F",0B7H,0A5H,0B0H,09CH," " + DB 00DH +L2FC9: DB "L",0B7H,0A1H,09CH,0A6H,0B0H,097H," " + DB 00DH +L2FD2: DB "V",092H,09DH,0A6H,0AAH,0BDH,0A6H,0B0H,097H," " + DB 00DH +L2FDD: DB "OK" + DB 00DH +L2FE0: LD BC,L3038 + PUSH BC +L2FE4: CALL EXECNOTCHR + DB 02CH + DW L2FEA +L2FEA: PUSH HL + LD HL,CMTBUF + LD (HL),002H +L2FF0: LD B,011H +L2FF2: INC HL + LD (HL),00DH + DJNZ L2FF2 ; (-005H) + CALL L1459 + POP HL + CALL L193B + LD (05051H),HL + RET Z + CALL L2333 + CALL L193B + JP NZ,SYNTAXERR + LD (05051H),HL + LD A,D + OR A + JP Z,UNKNWNERR + CALL L190B + LD A,C + OR A + RET Z + CP 011H + JP NC,UNKNWNERR + EX DE,HL + LD DE,CMTFNAME + LDIR + RET + +L3025: LD DE,ATRB + LD HL,CMTBUF + LD BC,PRNT + LDIR + LD B,06EH +L3032: XOR A + LD (DE),A + INC DE + DJNZ L3032 ; (-005H) + RET + +L3038: CALL L3025 + LD HL,0505CH + LD (DTADR),HL + LD DE,0505CH + LD HL,(04E4EH) + XOR A + SBC HL,DE + LD (SIZE),HL + CALL ?WRI + JP C,L30B8 + CALL L1B1B + CALL ?WRD + PUSH AF + CALL L1ABF + POP AF + JP C,L30B8 + JP WARMSTRT + +L3064: CALL L1459 + LD A,(L30E2) + CP 001H + JR NZ,L309A ; (+02cH) + LD HL,(L30E3) +L3071: PUSH DE + LD DE,04DD3H + CALL L1773 + JR C,L3082 ; (+008H) + CALL ?WRD + JR C,L30B8 ; (+039H) + LD HL,04CD3H +L3082: POP DE + LD A,(DE) + LD (HL),A + INC HL + INC DE + CP 00DH + JR NZ,L3071 ; (-01aH) + LD (L30E3),HL + RET + + CALL L1459 + LD A,(L30E2) + PUSH DE + LD C,000H + CP 002H +L309A: JP NZ,OUTFILEERR + LD (L2D74),A + LD HL,(L30E3) +L30A3: PUSH DE + LD DE,04DD3H + CALL L1773 + JR C,L30BE ; (+012H) + PUSH BC + CALL ?RDD + POP BC + JR NC,L30BB ; (+008H) +L30B3: CP 002H + JP NZ,CHKSUMERR +L30B8: JP L1438 + +L30BB: LD HL,04CD3H +L30BE: LD A,(HL) + LD B,A + CP PRTD + JR NZ,L30CC ; (+008H) + LD A,(L2D74) + CP 002H + JP Z,OUTFILEERR +L30CC: XOR A + LD (L2D74),A + LD A,B + POP DE + LD (DE),A + INC HL + INC DE + INC C + CP 00DH + JR NZ,L30A3 ; (-037H) + DEC C + POP DE + LD (L30E3),HL + LD B,000H + RET + +L30E2: NOP +L30E3: NOP + NOP +L30E5: CALL L1AAF + LD A,(L30E2) + OR A + JP NZ,OPENERR + LD BC,L30FC + PUSH BC + PUSH HL + DB 021H + DB 033H +L30F6: DB 02EH + LD (HL),003H + JP L2FF0 + +L30FC: CALL L3025 + LD HL,00100H + LD (SIZE),HL + LD HL,04CD3H + LD (L30E3),HL + LD (DTADR),HL + CALL ?WRI +L3111: JR C,L30B8 ; (-05bH) + CALL MSTOP + LD A,001H + LD (L30E2),A +L311B: JP L1B35 + +L311E: CALL L1AAF + LD A,(L30E2) + OR A + JP NZ,OPENERR + LD BC,L313A + PUSH BC + LD A,002H + LD (L2D74),A + PUSH HL + LD HL,CMTBUF + LD (HL),004H + JP L2FF0 + +L313A: CALL ?RDI + JP C,L30B3 + LD HL,ATRB + LD A,(HL) + CP 003H + JR NZ,L313A ; (-00eH) + LD DE,CMTFNAME + LD A,(DE) + CP 00DH + JR Z,L3155 ; (+005H) + CALL L2E1D + JR NZ,L313A ; (-01bH) +L3155: LD A,002H + LD (L30E2),A + CALL MSTOP + LD HL,04CD3H + LD (DTADR),HL + LD HL,00100H + LD (SIZE),HL + LD HL,04DD3H + LD (L30E3),HL + JR L311B ; (-056H) + +L3171: CALL L1459 + LD A,(L30E2) + OR A + JR Z,L3195 ; (+01bH) + PUSH HL + DEC A + JR NZ,L3190 ; (+012H) + LD HL,(L30E3) + LD DE,04DD3H + CALL L1773 + JR NC,L3198 ; (+00fH) +L3189: LD (HL),PRTD + CALL ?WRD +L318E: JR C,L3111 ; (-07fH) +L3190: XOR A + LD (L30E2),A + POP HL +L3195: JP CMDREMDATA + +L3198: CALL ?WRD + JR C,L318E ; (-00fH) + LD HL,04CD3H + JR L3189 ; (-019H) + +L31A2: LD A,(L32D3) + OR A + RET Z +L31A7: CALL L32C2 + LD A,00DH + CALL L3291 + XOR A + LD (L32D3),A + RET + + PUSH BC + PUSH DE + LD A,(L32D3) + LD B,A +L31BA: LD A,(DE) + CP 00DH + JP Z,L3258 + CP 020H + CALL C,L31CC + CALL L3291 + INC B + INC DE + JR L31BA ; (-012H) + +L31CC: CP 005H + JR Z,L31F0 ; (+020H) + CP 006H + JR Z,L3200 ; (+02cH) + CP 010H + JR Z,L3221 ; (+049H) + CP 011H + JR Z,L31F9 ; (+01dH) + CP 012H + JR Z,L31F5 ; (+015H) + CP 013H + JR Z,L3226 ; (+042H) + CP 014H + JR Z,L322A ; (+042H) + CP 015H + JR Z,L3238 ; (+04cH) + POP AF + INC DE + JR L31BA ; (-036H) + +L31F0: LD A,00FH +L31F2: LD B,PRTD + RET + +L31F5: LD A,00BH + JR L31F2 ; (-007H) + +L31F9: LD A,009H + LD (L326D),A + JR L31F2 ; (-00eH) + +L3200: LD A,00CH + CALL L3291 + LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,00BH + CALL L3291 + LD A,00AH + CALL L3291 + CALL L3267 + CALL L3291 + JR L31F0 ; (-031H) + +L3221: CALL L3267 + JR L31F2 ; (-034H) + +L3226: LD A,00CH + JR L31F2 ; (-038H) + +L322A: LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,009H + JR L31F2 ; (-046H) + +L3238: LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,00BH + JR L31F2 ; (-054H) + +L3246: PUSH BC + PUSH DE + LD A,(L32D3) + LD B,A +L324C: LD A,(DE) + CP 00DH + JR Z,L3258 ; (+007H) + CALL L3291 + INC DE + INC B + JR L324C ; (-00cH) + +L3258: LD A,B + CP 0A0H + JR C,L325F ; (+002H) + SUB 0A0H +L325F: LD (L32D3),A + POP DE + POP BC + JP L32C2 + +L3267: LD A,00AH + LD (L326D),A + RET + +L326D: LD A,(BC) +L326E: PUSH BC + PUSH DE + LD A,(L32D3) + LD B,A +L3274: LD A,020H + CALL L3291 + INC B + LD A,B +L327B: SUB 00AH + JR C,L3274 ; (-00bH) + JR NZ,L327B ; (-006H) + JP L3258 + +L3284: CALL L3291 + CALL L32A5 + IN A,(PRTC) + RRCA + RRCA + RET + +L328F: LD A,01BH +L3291: PUSH AF + CALL L32A5 + POP AF + OUT (PRTD),A + LD A,080H + OUT (PRTC),A + LD A,001H + CALL L32A6 + XOR A + OUT (PRTC),A + RET + +L32A5: XOR A +L32A6: PUSH BC + PUSH DE + LD C,A + LD B,00FH + LD DE,MONIT +L32AE: IN A,(PRTC) + AND 00DH + CP C + JR Z,L32BF ; (+00aH) + DEC DE + LD A,D + OR E + JR NZ,L32AE ; (-00cH) + DJNZ L32AE ; (-00eH) + JP PRTNRDYERR + +L32BF: POP DE + POP BC + RET + +L32C2: LD A,007H + CALL L3284 + JP NC,PRTPAPERERR + LD A,008H + CALL L3284 + RET C + JP PRTHWERR + +L32D3: NOP +CMDPAGE: CALL GETNUM + LD A,E + OR A + JP Z,ILDATERR + LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,E + PUSH AF + RRCA + RRCA + RRCA + RRCA + CALL ASC + CALL L3291 + POP AF + CALL ASC + CALL L3291 + JP L1B38 + +L32FC: CALL L31A7 + JP L1B35 + + CALL L193B + LD (05051H),HL + JR Z,L32FC ; (-00eH) + PUSH HL + CALL L338A + LD BC,00500H + CALL L2DD8 + POP HL +L3315: CALL L193B + LD (05051H),HL + JR Z,L3373 ; (+056H) + CALL L2E94 + CALL EXECNOTCHR + DB 03BH + DW L3326 +L3326: CALL L2293 + PUSH HL + LD HL,(04E80H) + PUSH BC + LD BC,003F0H + ADD HL,BC + POP BC + LD A,D + OR A + CALL Z,L2BC0 + CALL NZ,L2BD0 + LD A,B + OR C + JR Z,L3362 ; (+023H) + PUSH DE + LD HL,(04E80H) + INC HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + DEC HL + PUSH DE + PUSH HL + EX DE,HL + ADD HL,BC + XOR A + EX DE,HL + LD HL,003E8H + SBC HL,DE + JP C,ILDATERR + POP HL + LD (HL),E + INC HL + LD (HL),D + INC HL + POP DE + ADD HL,DE + POP DE + EX DE,HL + LDIR +L3362: LD HL,L3315 + EX (SP),HL + CALL L193B + RET Z + CP 03BH + RET Z + CP 02CH + RET Z + JP SYNTAXERR + +L3373: LD HL,(04E80H) + INC HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + LD A,D + OR E + JR Z,L3387 ; (+008H) + INC HL + EX DE,HL + CALL L3390 + CALL L338A +L3387: JP L1B35 + +L338A: LD HL,(04E80H) + JP L2E09 + +L3390: CALL L328F + LD A,018H + CALL L3291 + LD A,L + CALL L3291 + LD A,H + CALL L3291 +L33A0: LD A,(DE) + CALL L3291 + INC DE + DEC HL + LD A,H + OR L + JR NZ,L33A0 ; (-00aH) + RET + +CMDCOPY: CALL L193B + JP Z,SYNTAXERR + INC HL + LD (05051H),HL + SUB 034H + JP Z,SYNTAXERR + INC A + JP Z,SYNTAXERR + INC A + JP Z,SYNTAXERR + INC A + JP NZ,SYNTAXERR + LD HL,(PAGETP) + LD C,019H +L33CB: CALL L31A7 + LD A,028H + LD B,A +L33D1: CALL L2878 + OR A + JR Z,L33DB ; (+004H) + CP 00DH + JR NZ,L33DD ; (+002H) +L33DB: LD A,020H +L33DD: CALL L3291 + CALL BRKEY + JR Z,L33FD ; (+018H) + INC HL + DJNZ L33D1 ; (-017H) + DEC C + JR NZ,L33CB ; (-020H) + CALL L31A7 + JP L1B35 + +L33F1: CALL L328F + LD A,(L326D) + JP L3291 + + CALL L33F1 +L33FD: JP L1438 + +L3400: DB 000H +L3401: DB 080H +L3402: DB 086H +L3403: XOR A + DB 001H +L3405: LD A,080H + PUSH DE + XOR (HL) + CPL + LD C,A + LD A,(DE) + AND 080H + LD B,A + XOR C + CPL + AND 080H + LD C,A +L3414: PUSH BC + LD B,(HL) + RES 7,B + LD A,(DE) + AND 07FH + CP B + JR NC,L3428 ; (+00aH) + POP BC + EX DE,HL + LD A,B + XOR C + CPL + AND 080H + LD B,A + JR L3414 ; (-014H) + +L3428: LD C,A + ADD A,040H + LD (L3402),A + LD A,C + SUB B + POP BC + LD (03400H),BC + PUSH DE + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + POP HL + INC HL + JR Z,L345C ; (+01aH) +L3442: CP 008H + JR NC,L3453 ; (+00dH) +L3446: SRL B + RR C + RR D + RR E + DEC A + JR NZ,L3446 ; (-00bH) + JR L345C ; (+009H) + +L3453: LD E,D + LD D,C + LD C,B + LD B,000H + SUB 008H + JR NZ,L3442 ; (-01aH) +L345C: LD A,(L3400) + OR A + JR Z,L349C ; (+03aH) + LD A,(HL) + INC HL + ADD A,E + LD E,A + LD A,(HL) + INC HL + ADC A,D + LD D,A + LD A,(HL) + INC HL + ADC A,C + LD C,A + LD A,(HL) + ADC A,B + LD B,A + JR NC,L347F ; (+00cH) + RR B + RR C + RR D + RR E + LD HL,L3402 + INC (HL) +L347F: LD HL,L3402 + LD A,(HL) + SUB 040H + JR C,L348E ; (+007H) + JP M,OVFLERR + DEC HL + OR (HL) + JR L3491 ; (+003H) + +L348E: CALL L3CDE +L3491: POP HL +L3492: LD (HL),A + INC HL + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (HL),C + INC HL + LD (HL),B + RET + +L349C: LD A,(HL) + INC HL + SUB E + LD E,A + LD A,(HL) + INC HL + SBC A,D + LD D,A + LD A,(HL) + INC HL + SBC A,C + LD C,A + LD A,(HL) + SBC A,B + LD B,A + CALL C,L34E4 + OR C + OR D + JR NZ,L34B7 ; (+005H) + LD A,E + CP 03FH + JR C,L348E ; (-029H) +L34B7: LD HL,L3402 +L34BA: LD A,B + OR A + JP M,L347F + JR NZ,L34D4 ; (+013H) + LD A,(HL) + SUB 008H + JR C,L348E ; (-038H) + LD (HL),A + LD A,C + OR D + OR E + JR Z,L348E ; (-03eH) + LD B,C + LD C,D + LD D,E + LD E,000H + JP L34BA + +L34D4: DEC (HL) + JR C,L348E ; (-049H) + SLA E + RL D + RL C + RL B + JP P,L34D4 + JR L347F ; (-065H) + +L34E4: LD HL,L3401 + LD A,(HL) + ADD A,080H + LD (HL),A + LD A,E + CPL + ADD A,001H + LD E,A + LD A,D + CPL + ADC A,000H + LD D,A + LD A,C + CPL + ADC A,000H + LD C,A + LD A,B + CPL + ADC A,000H + LD B,A + RET + +L3500: PUSH DE + LD A,(DE) + XOR (HL) + CPL + AND 080H + LD (L3401),A + LD B,(HL) + RES 7,B + LD A,(DE) + AND 07FH + ADD A,B + JP Z,L348E + DEC A +L3514: CP 030H + JP C,L348E + CP 0E0H + JP NC,OVFLERR + LD (L3402),A + XOR A + LD (L3400),A + LD BC,00004H + ADD HL,BC + LD A,(HL) + OR A + JP P,L348E + PUSH HL + POP IY + LD C,B + EX DE,HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH HL + LD H,B + LD L,B + EXX + POP HL + LD E,(HL) + INC HL + LD D,(HL) + LD HL,MONIT + LD A,D + OR A + JP P,L348E + LD C,004H +L354A: LD A,(IY+000H) + LD B,008H + OR A + JR Z,L35C5 ; (+073H) +L3552: RLA + JR NC,L3569 ; (+014H) + EX AF,AF' + EXX + LD A,B + ADD A,C + LD C,A + ADC HL,DE + EXX + ADC HL,DE + JR NC,L3568 ; (+007H) + LD A,(L3400) + INC A + LD (L3400),A +L3568: EX AF,AF' +L3569: SRL D + RR E + EXX + RR D + RR E + RR B + EXX + DJNZ L3552 ; (-025H) +L3577: DEC IY + DEC C + JR NZ,L354A ; (-032H) + LD A,(L3400) + OR A + JR Z,L3599 ; (+017H) + LD B,A + LD A,(L3402) + ADD A,B + LD (L3402),A +L358A: SCF + RR H + RR L + EXX + RR H + RR L + RR C + EXX + DJNZ L358A ; (-00fH) +L3599: EXX + LD A,C + OR A + JP P,L35BD + LD DE,00001H + ADD HL,DE + EXX + LD DE,MONIT + ADC HL,DE + JR NC,L35BC ; (+011H) + RR H + RR L + EXX + RR H + RR L + EXX + LD A,(L3402) + INC A + LD (L3402),A +L35BC: EXX +L35BD: PUSH HL + EXX + LD B,H + LD C,L + POP DE + JP L34B7 + +L35C5: LD A,E + LD E,D + LD D,000H + EXX + LD B,E + LD E,D + LD D,A + EXX + JR L3577 ; (-059H) + +L35D0: PUSH DE + LD A,(DE) + XOR (HL) + CPL + AND 080H + LD (L3401),A + LD B,(HL) + RES 7,B + LD A,(DE) + AND 07FH + SUB B + ADD A,081H +L35E2: CP 030H + JP C,L348E + CP 0E0H + JP NC,OVFLERR + LD (L3402),A + INC HL + INC DE + EX DE,HL + LD C,(HL) + INC HL + LD B,(HL) + INC HL + PUSH HL + EX DE,HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,L + EX AF,AF' + LD A,H + LD H,B + LD L,C + EXX + POP HL + LD C,(HL) + INC HL + LD B,(HL) + LD H,A + EX AF,AF' + LD L,A + LD E,(HL) + INC HL + LD D,(HL) + LD H,B + LD L,C + LD A,D + OR A + JP P,OVFLERR + LD C,004H +L3615: LD B,008H +L3617: BIT 7,H + JR NZ,L3633 ; (+018H) + OR A +L361C: RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + DJNZ L3617 ; (-00dH) + PUSH AF + DEC C + JR NZ,L3615 ; (-013H) +L3628: POP AF + LD E,A + POP AF + LD D,A + POP AF + LD C,A + POP AF + LD B,A + JP L34B7 + +L3633: EXX + OR A + SBC HL,DE + EXX + SBC HL,DE + CCF + JR C,L361C ; (-021H) + EXX + ADD HL,DE + EXX + ADC HL,DE + OR A + RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + DEC B + JR NZ,L3652 ; (+006H) + PUSH AF + LD B,008H + DEC C + JR Z,L3628 ; (-02aH) +L3652: EXX + OR A + SBC HL,DE + EXX + SBC HL,DE + SCF + RLA + DEC B + JR NZ,L3664 ; (+006H) + PUSH AF + LD B,008H + DEC C + JR Z,L3628 ; (-03cH) +L3664: EXX + ADD HL,HL + EXX + ADC HL,HL + JR NC,L3617 ; (-054H) + JR L3652 ; (-01bH) + +L366D: DEC E +L366E: XOR C + LD D,B +L3670: LD A,(HL) + PUSH HL + POP IX + EX DE,HL + LD (L366E),HL + EX AF,AF' + XOR A + LD (L366D),A + LD H,A + LD L,A + EXX + LD H,A + LD L,A + LD B,A + LD C,A + EX AF,AF' + CP 02EH + JR Z,L369D ; (+014H) + SUB 030H +L368B: CALL L3772 + CALL L3768 + SUB 030H + CP 00AH + JR C,L368B ; (-00cH) + ADD A,030H + CP 02EH + JR NZ,L36AD ; (+010H) +L369D: CALL L3768 + SUB 030H + CP 00AH + JR NC,L36AB ; (+005H) + CALL L3780 + JR L369D ; (-00eH) + +L36AB: ADD A,030H +L36AD: CP 045H + JR NZ,L36F5 ; (+044H) + EXX + CALL L3768 + LD B,001H + CP 02BH + JR Z,L36C1 ; (+006H) + CP 02DH + JP NZ,SYNTAXERR + DEC B +L36C1: LD A,B + OR A + EX AF,AF' + CALL L3768 + SUB 030H + NOP + NOP + CP 00AH + JR NC,L36EB ; (+01cH) + LD B,A + CALL L3768 + SUB 030H + CP 00AH + JR NC,L36EB ; (+012H) + LD C,A + CALL L3768 + SUB 030H + CP 00AH + JP C,OVFLERR + LD A,B + ADD A,A + ADD A,A + ADD A,B + ADD A,A + ADD A,C + LD B,A +L36EB: EX AF,AF' + LD A,B + JR NZ,L36F1 ; (+002H) + CPL + INC A +L36F1: LD (L366D),A + EXX +L36F5: PUSH IX + LD A,(L366D) + ADD A,01DH + ADD A,C + LD (L366D),A + CP 030H + JR C,L370B ; (+007H) + CP 080H + JP C,OVFLERR + JR L375D ; (+052H) + +L370B: LD A,080H + LD (L3401),A + LD A,0A0H + LD (L3402),A + PUSH HL + EXX + POP BC + LD D,H + LD E,L + LD HL,L3725 + PUSH HL + LD HL,(L366E) + PUSH HL + JP L34B7 + +L3725: LD A,(L366D) + LD L,A + LD C,A + LD H,000H + LD B,H + ADD HL,HL + ADD HL,HL + ADD HL,BC + LD BC,L37AE + ADD HL,BC + LD DE,(0366EH) + LD A,080H + LD (L3401),A + LD A,020H + ADD A,(HL) + LD B,A + LD A,(DE) + AND 07FH + ADD A,B + JP C,OVFLERR + SUB 021H + JR NC,L374D ; (+001H) + XOR A +L374D: LD BC,L3755 + PUSH BC + PUSH DE + JP L3514 + +L3755: POP HL + LD BC,00005H + LD D,B + LD E,B + LD A,(HL) + RET + +L375D: LD HL,L3755 + PUSH HL + LD HL,(L366E) + PUSH HL + JP L348E + +L3768: INC IX + LD A,(IX+000H) + CP 020H + RET NZ + JR L3768 ; (-00aH) + +L3772: OR A + JR NZ,L3778 ; (+003H) + OR B + RET Z + XOR A +L3778: EX AF,AF' + LD A,B + CP 009H + JR NZ,L378E ; (+010H) + INC C + RET + +L3780: OR A + JR NZ,L3788 ; (+005H) + DEC C + OR B + RET Z + INC C + XOR A +L3788: EX AF,AF' + LD A,B + CP 009H + RET Z + DEC C +L378E: INC B + LD D,H + LD E,L + EXX + LD D,H + LD E,L + XOR A + ADD HL,HL + RLA + ADD HL,HL + RLA + ADD HL,DE + LD D,000H + ADC A,D + ADD HL,HL + RLA + EX AF,AF' + LD E,A + EX AF,AF' + ADD HL,DE + ADC A,D + EXX + ADD HL,HL + ADD HL,HL + ADD HL,DE + ADD HL,HL + LD D,000H + LD E,A + ADD HL,DE + RET + +L37AE: DB 0E0H + DB 0F5H + DB 0F7H + DB 0D2H + DB 0CAH + DB 0E3H + DB 0F3H + DB 0B5H + DB 087H + DB 0FDH + DB 0E7H + DB 0B8H + DB 0D1H + DB 074H + DB 09EH + DB 0EAH + DB 025H + DB 006H + DB 012H + DB 0C6H + DB 0EDH + DB 0AFH + DB 087H + DB 096H + DB 0F7H + DB 0F1H + DB 0CDH + DB 014H + DB 0BEH + DB 09AH + DB 0F4H + DB 001H + DB 09AH + DB 06DH + DB 0C1H + DB 0F7H + DB 081H + DB 000H + DB 0C9H + DB 0F1H + DB 0FBH + DB 050H + DB 0A0H + DB 01DH + DB 097H +L37DB: DB 0FEH + DB 065H + DB 008H + DB 0E5H + DB 0BCH + DB 001H + DB 07EH + DB 04AH + DB 01EH + DB 0ECH + DB 005H + DB 08FH + DB 0EEH + DB 092H + DB 093H + DB 008H + DB 032H + DB 0AAH + DB 077H + DB 0B8H + DB 00BH + DB 0BFH + DB 094H + DB 095H + DB 0E6H + DB 00FH + DB 0F7H + DB 07CH + DB 01DH + DB 090H + DB 012H + DB 035H + DB 0DCH + DB 024H + DB 0B4H + DB 015H + DB 042H + DB 013H + DB 02EH + DB 0E1H + DB 019H + DB 009H + DB 0CCH + DB 0BCH + DB 08CH + DB 01CH + DB 00CH + DB 0FFH + DB 0EBH + DB 0AFH + DB 01FH + DB 0CFH + DB 0FEH + DB 0E6H + DB 0DBH + DB 023H + DB 041H + DB 05FH + DB 070H + DB 089H + DB 026H + DB 012H + DB 077H + DB 0CCH + DB 0ABH + DB 029H + DB 0D6H + DB 094H + DB 0BFH + DB 0D6H + DB 02DH + DB 006H + DB 0BDH + DB 037H + DB 086H + DB 030H + DB 047H + DB 0ACH + DB 0C5H + DB 0A7H + DB 033H + DB 059H + DB 017H + DB 0B7H + DB 0D1H + DB 037H + DB 098H + DB 06EH + DB 012H + DB 083H + DB 03AH + DB 03DH + DB 00AH + DB 0D7H + DB 0A3H + DB 03DH + DB 0CDH + DB 0CCH + DB 0CCH + DB 0CCH + DB 041H + DB 000H + DB 000H + DB 000H + DB 080H + DB 044H + DB 000H + DB 000H + DB 000H + DB 0A0H + DB 047H + DB 000H + DB 000H + DB 000H + DB 0C8H + DB 04AH + DB 000H + DB 000H + DB 000H + DB 0FAH + DB 04EH + DB 000H + DB 000H + DB 040H + DB 09CH + DB 051H + DB 000H + DB 000H + DB 050H + DB 0C3H + DB 054H + DB 000H + DB 000H + DB 024H + DB 0F4H + DB 058H + DB 000H + DB 080H + DB 096H + DB 098H + DB 05BH + DB 000H + DB 020H + DB 0BCH + DB 0BEH + DB 05EH + DB 000H + DB 028H + DB 06BH + DB 0EEH + DB 062H + DB 000H + DB 0F9H + DB 002H + DB 095H + DB 065H + DB 040H + DB 0B7H + DB 043H + DB 0BAH + DB 068H + DB 010H + DB 0A5H + DB 0D4H + DB 0E8H + DB 06CH + DB 02AH + DB 0E7H + DB 084H + DB 091H + DB 06FH + DB 0F5H + DB 020H + DB 0E6H + DB 0B5H + DB 072H + DB 032H + DB 0A9H + DB 05FH + DB 0E3H + DB 076H + DB 0BFH + DB 0C9H + DB 01BH + DB 08EH + DB 079H + DB 02FH + DB 0BCH + DB 0A2H + DB 0B1H + DB 07CH + DB 03AH + DB 06BH + DB 00BH + DB 0DEH + DB 080H + DB 005H + DB 023H + DB 0C7H + DB 08AH +L38A3: DB 08DH + DB 06CH +L38A5: DB 001H +L38A6: DB 020H +L38A7: DB 031H +L38A8: DB 02EH + DB 035H + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH +L38AF: DB 00DH +L38B0: DB 00DH +L38B1: DB 000H +L38B2: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L38BB: PUSH DE + CALL L3997 + LD A,(L38A5) + OR A + JP Z,L3960 + JP M,L38CF + CP 009H + JR C,L392B ; (+05eH) + JR L38D4 ; (+005H) + +L38CF: CP PRTD + JP NC,L395B +L38D4: LD A,02EH + LD (L38A7),A + LD HL,L38B0 + XOR A +L38DD: DEC HL + CP (HL) + JR Z,L38DD ; (-004H) + LD A,(HL) + CP 02EH + JP Z,L398A + INC HL + LD (HL),045H + INC HL + LD A,(L38A5) + LD B,02BH + OR A + JP P,L38FD + CP 0EDH + JP C,L398A + LD B,02DH + CPL + INC A +L38FD: LD (HL),B + INC HL + LD BC,0FF0AH +L3902: INC B + SUB C + JR NC,L3902 ; (-004H) + ADD A,C + LD (HL),B + INC HL + LD (HL),A + INC HL + LD (HL),00DH +L390D: LD HL,L38A6 +L3910: INC HL + LD A,(HL) + CP 00DH + JR Z,L391D ; (+007H) + JR NC,L3910 ; (-008H) + OR 030H + LD (HL),A + JR L3910 ; (-00dH) + +L391D: LD DE,L38A6 + XOR A + SBC HL,DE + LD B,H + LD C,L + POP HL + EX DE,HL + INC BC + LDIR + RET + +L392B: LD HL,L38A8 + LD DE,L38A7 + LD B,A + INC B +L3933: DEC B + JR Z,L393C ; (+006H) + LD A,(HL) + LD (DE),A + INC HL + INC DE + JR L3933 ; (-009H) + +L393C: LD A,02EH + LD (DE),A + LD HL,L38B0 +L3942: LD (HL),00DH + DEC HL + LD A,(HL) + OR A + JR Z,L3942 ; (-007H) + CP 02EH + JR NZ,L394F ; (+002H) + LD (HL),00DH +L394F: LD HL,L38A7 + LD A,(HL) + CP 00DH + JR NZ,L390D ; (-04aH) + LD (HL),000H + JR L390D ; (-04eH) + +L395B: LD DE,L38B2 + JR L3963 ; (+003H) + +L3960: LD DE,L38B1 +L3963: LD HL,L38AF + LD A,00DH + LD (DE),A + PUSH DE + DEC DE + LD BC,00008H + LDDR + EX DE,HL + LD A,(L38A5) + OR A + JR Z,L397A ; (+003H) + LD (HL),000H + DEC HL +L397A: LD (HL),02EH + DEC HL + LD (HL),000H + POP HL +L3980: DEC HL + LD A,(HL) + CP 000H + JR NZ,L390D ; (-079H) + LD (HL),00DH + JR L3980 ; (-00aH) + +L398A: LD HL,L3994 + LD BC,GETL + POP DE + LDIR + RET + +L3994: JR NZ,L39C6 ; (+030H) + DEC C +L3997: LD (L38A3),HL + LD A,(HL) + LD B,020H + OR A + JP M,L39A3 + LD B,02DH +L39A3: AND 07FH + LD (HL),A + LD A,B + LD (L38A6),A + EX DE,HL + LD HL,L37DB + LD A,0ECH + EX AF,AF' +L39B1: EX AF,AF' + INC A + EX AF,AF' + LD BC,00005H + ADD HL,BC + PUSH HL + PUSH DE + LD A,(DE) + CALL L3A73 + POP DE + POP HL + JR NC,L39B1 ; (-011H) + EX AF,AF' + LD (L38A5),A +L39C6: PUSH DE + LD BC,L39D8 + PUSH BC + PUSH DE + LD A,080H + LD (L3401),A + LD A,(DE) + SUB (HL) + ADD A,081H + JP L35E2 + +L39D8: LD HL,L38A7 + LD (HL),000H + INC HL + EX (SP),HL + LD A,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH HL + EX DE,HL + EXX + POP HL + LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL + SUB 0C0H + JR NC,L39FE ; (+00dH) +L39F1: SRL H + RR L + EXX + RR H + RR L + EXX + INC A + JR NZ,L39F1 ; (-00dH) +L39FE: POP BC + LD A,009H +L3A01: EX AF,AF' + XOR A + LD D,H + LD E,L + EXX + LD D,H + LD E,L + ADD HL,HL + EXX + ADC HL,HL + RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + RLA + EXX + ADD HL,DE + EXX + ADC HL,DE + LD D,000H + ADC A,D + EXX + ADD HL,HL + EXX + ADC HL,HL + RLA + LD (BC),A + INC BC + EX AF,AF' + DEC A + JR NZ,L3A01 ; (-026H) +L3A27: LD HL,L38B0 + LD A,(HL) + LD (HL),000H + CP 005H + LD C,000H + JR C,L3A34 ; (+001H) + INC C +L3A34: LD B,00AH +L3A36: DEC B + JR Z,L3A47 ; (+00eH) + DEC HL + LD A,(HL) + ADD A,C + LD (HL),A + SUB 00AH + LD C,000H + JR C,L3A36 ; (-00dH) + INC C + LD (HL),A + JR L3A36 ; (-011H) + +L3A47: LD A,(L38A7) + OR A + RET Z + LD HL,L38AF + LD DE,L38B0 + LD BC,NL + LDDR + EX DE,HL + LD (HL),000H + LD A,(L38A5) + INC A + LD (L38A5),A + JR L3A27 ; (-03cH) + +L3A63: LD BC,00005H +L3A66: LD A,(DE) + OR A + JP M,L3A73 + BIT 7,(HL) + JR Z,L3A71 ; (+002H) + SCF + RET + +L3A71: EX DE,HL + LD A,(DE) +L3A73: CP (HL) + RET NZ + DEC C + ADD HL,BC + EX DE,HL + ADD HL,BC + EX DE,HL + LD B,003H +L3A7C: LD A,(DE) + CP (HL) + RET NZ + DEC HL + DEC DE + DJNZ L3A7C ; (-007H) + LD A,(DE) + CP (HL) + RET + +L3A86: EX DE,HL + CALL L3997 + LD A,(L38A6) + LD B,080H + CP 020H + JR Z,L3A95 ; (+002H) + LD B,000H +L3A95: LD A,B + LD (L3401),A + OR A + JR Z,L3B1A ; (+07eH) + LD A,(L38A5) + DEC A + JP M,L3B50 + LD HL,L38B0 + LD B,00DH + LD (HL),B + SUB 008H + JR NC,L3AB3 ; (+006H) +L3AAD: LD (HL),B + DEC HL + INC A + JR NZ,L3AAD ; (-005H) + DEC A +L3AB3: INC A + LD (L366D),A + LD IX,L38A7 + XOR A + LD H,A + LD L,A + EXX + LD B,A + LD C,A + LD H,A + LD L,A +L3AC3: LD A,(IX+000H) + CP 00DH + JR Z,L3AD1 ; (+007H) + CALL L3772 + INC IX + JR L3AC3 ; (-00eH) + +L3AD1: LD A,(L366D) + ADD A,01DH + ADD A,C + LD (L366D),A + LD A,0A0H + LD (L3402),A + PUSH HL + EXX + POP BC + LD D,H + LD E,L + LD HL,L3AEF + PUSH HL + LD HL,(L38A3) + PUSH HL + JP L34B7 + +L3AEF: LD A,(L366D) + LD C,A + LD L,A + LD H,000H + LD B,H + ADD HL,HL + ADD HL,HL + ADD HL,BC + LD BC,L37AE + ADD HL,BC + LD DE,(038A3H) + XOR A + LD (L3400),A + LD A,020H + ADD A,(HL) + LD B,A + LD A,(DE) + AND 07FH + ADD A,B + JP C,OVFLERR + SUB 021H + JR NC,L3B16 ; (+001H) + XOR A +L3B16: PUSH DE + JP L3514 + +L3B1A: LD A,(L38A5) + DEC A + JP M,L3B55 + LD HL,L38B0 + LD BC,00D00H + LD (HL),B + SUB 008H + JR NC,L3B3B ; (+00fH) + JR L3B36 ; (+008H) + +L3B2E: EX AF,AF' + LD A,(HL) + OR A + JR Z,L3B34 ; (+001H) + INC C +L3B34: LD (HL),B + EX AF,AF' +L3B36: DEC HL + INC A + JR NZ,L3B2E ; (-00cH) + DEC A +L3B3B: EX AF,AF' + LD A,C + OR A + JR Z,L3B4C ; (+00cH) +L3B40: LD A,(HL) + INC A + LD (HL),A + CP 00AH + JR NZ,L3B4C ; (+005H) + LD (HL),000H + DEC HL + JR L3B40 ; (-00cH) + +L3B4C: EX AF,AF' + JP L3AB3 + +L3B50: LD DE,L2A8D + JR L3B58 ; (+003H) + +L3B55: LD DE,L2A92 +L3B58: LD HL,(L38A3) + EX DE,HL +L3B5C: LD BC,00005H + LDIR + RET + +L3B62: PUSH DE + CALL L3A63 + JR Z,L3B6D ; (+005H) +L3B68: LD HL,L2A92 + JR L3B70 ; (+003H) + +L3B6D: LD HL,L2A8D +L3B70: POP DE + JR L3B5C ; (-017H) + +L3B73: PUSH DE + EX DE,HL + JR L3B78 ; (+001H) + +L3B77: PUSH DE +L3B78: CALL L3A63 + JR C,L3B68 ; (-015H) + JR L3B6D ; (-012H) + +L3B7F: PUSH DE + CALL L3A63 + JR Z,L3B68 ; (-01dH) + JR L3B6D ; (-01aH) + +L3B87: PUSH DE + EX DE,HL + JR L3B8C ; (+001H) + +L3B8B: PUSH DE +L3B8C: CALL L3A63 + JR C,L3B6D ; (-024H) + JR L3B68 ; (-02bH) + +L3B93: CP (HL) + DEC (HL) + JR Z,L3B73 ; (-024H) + RST 008H +L3B98: PUSH DE + EX DE,HL + LD A,(HL) + LD BC,00004H + ADD HL,BC + XOR (HL) + JP M,L3BC4 + LD DE,L3B93 + PUSH DE + LD HL,L3BE9 + CALL L3500 + POP HL + PUSH HL + LD A,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + CP 0C1H + CALL NC,L3BD2 + POP HL + PUSH HL + CALL L3492 + JR L3BCE ; (+00aH) + +L3BC4: LD DE,L3B93 + LD HL,L3BE4 + PUSH DE + CALL L3B5C +L3BCE: POP HL + POP DE + JR L3B5C ; (-076H) + +L3BD2: SUB 0C0H +L3BD4: SLA E + RL D + RL C + RL B + DEC A + JR NZ,L3BD4 ; (-00bH) + LD A,0C0H + JP L3CC5 + +L3BE4: CP (HL) + DEC (HL) + JR Z,L3BC4 ; (-024H) + RST 008H +L3BE9: DB 0C5H + DB 000H + DB 000H + DB 000H + DB 0B8H +L3BEE: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3BF3: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3BF8: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3BFD: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3C02: LD DE,L3BEE + JP L3405 + +L3C08: CALL L3C02 +L3C0B: LD HL,L3BF3 +L3C0E: LD DE,L3BEE + JP L3500 + +L3C14: NOP +L3C15: NOP +L3C16: PUSH DE + LD HL,L3CE7 + CALL L35D0 + POP HL + PUSH HL + LD A,(HL) + LD (L3C15),A + OR 080H + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + CP 0C3H + JR C,L3C43 ; (+012H) + SUB 0C2H +L3C33: SLA E + RL D + RL C + RL B + DEC A + JR NZ,L3C33 ; (-00bH) + LD A,0C2H + CALL L3CC5 +L3C43: LD HL,08000H + CP 0C2H + JR C,L3C50 ; (+006H) + LD H,L + RES 7,B + CALL L3CC5 +L3C50: CP 0C1H + JR C,L3C5A ; (+006H) + INC L + RES 7,B + CALL L3CC5 +L3C5A: EX AF,AF' + LD A,(L3C15) + XOR H + CPL + AND 080H + LD H,A + LD (L3C14),HL + EX AF,AF' + POP HL + PUSH HL + CALL L3492 + LD A,(L3C14) + OR A + JR Z,L3C7A ; (+008H) + POP DE + PUSH DE + LD HL,L2A88 + CALL L3403 +L3C7A: POP HL + PUSH HL + LD A,(HL) + AND 07FH + LD B,A + LD A,(L3C15) + OR B + LD (HL),A + LD DE,L3BEE + CALL L3B5C + LD DE,L3BF3 + LD HL,L3BEE + CALL L3B5C + CALL L3C0B + LD DE,L3BF3 + LD HL,L3BEE + CALL L3B5C + LD HL,L3CEC + CALL L3C0E + LD HL,L3CF1 + CALL L3C08 + LD HL,L3CF6 + CALL L3C08 + LD HL,L3CFB + CALL L3C08 + LD HL,L3D00 + CALL L3C02 + POP DE + LD HL,L3BEE + JP L3500 + +L3CC5: BIT 7,B + RET NZ + EX AF,AF' + LD A,B + OR C + OR E + OR D + JR Z,L3CDE ; (+00fH) + EX AF,AF' +L3CD0: BIT 7,B + RET NZ + SLA E + RL D + RL C + RL B + DEC A + JR NZ,L3CD0 ; (-00eH) +L3CDE: LD BC,MONIT + LD DE,MONIT + LD A,080H + RET + +L3CE7: DB 0C1H + DB 0A1H + DB 0DAH + DB 00FH + DB 0C9H +L3CEC: DB 0B4H + DB 0DCH + DB 00FH + DB 00AH + DB 09FH +L3CF1: DB 039H + DB 061H + DB 08FH + DB 029H + DB 099H +L3CF6: DB 0BDH + DB 0C8H + DB 077H + DB 034H + DB 0A3H +L3CFB: DB 040H + DB 085H + DB 0E1H + DB 05DH + DB 0A5H +L3D00: DB 0C1H + DB 094H + DB 0DAH + DB 00FH + DB 0C9H +L3D05: PUSH DE + LD HL,L3CE7 + CALL L3403 + POP HL + CALL L4193 + EX DE,HL + JP L3C16 + +L3D14: PUSH DE + EX DE,HL + LD DE,L3BFD + CALL L3B5C + POP DE + PUSH DE + CALL L3D05 + POP HL + PUSH HL + LD DE,L3BF8 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BFD + CALL L3B5C + POP DE + PUSH DE + CALL L3C16 + POP DE + LD HL,L3BF8 + JP L35D0 + +L3D3D: NOP +L3D3E: NOP +L3D3F: LD A,003H + LD (L3D3D),A + PUSH DE + EX DE,HL + LD A,(HL) + ADD A,080H + JP NC,ILDATERR + JR NZ,L3D5B ; (+00dH) + EX AF,AF' + LD BC,00004H + ADD HL,BC + LD A,(HL) + SBC HL,BC + OR A + JP P,L3DBA + EX AF,AF' +L3D5B: BIT 0,A + JR NZ,L3DD5 ; (+076H) + LD (L3D3E),A + LD (HL),0C0H + LD DE,L3BEE + CALL L3B5C + LD HL,L3DED + CALL L3C0E + LD HL,L3DF2 +L3D73: CALL L3C02 +L3D76: LD DE,L3BF3 + POP HL + PUSH HL + CALL L3B5C + LD DE,L3BF3 + LD HL,L3BEE + CALL L35D0 + LD HL,L3BF3 + CALL L3C02 + LD HL,L3BEE + LD A,(HL) + AND 07FH + DEC A + JR C,L3DBA ; (+024H) + OR 080H + LD (HL),A + LD A,(L3D3D) + DEC A + LD (L3D3D),A + JR NZ,L3D76 ; (-02cH) + LD A,(L3D3E) + CP 040H + CALL NZ,L3DC1 + LD B,(HL) + RES 7,B + ADD A,B + SUB 040H + JR C,L3DBA ; (+008H) + JP M,OVFLERR + OR 080H + LD (HL),A + JR L3DBD ; (+003H) + +L3DBA: LD HL,L2A8D +L3DBD: POP DE + JP L3B5C + +L3DC1: JR C,L3DCA ; (+007H) + SUB 040H + SRL A + ADD A,040H + RET + +L3DCA: LD B,A + LD A,040H + SUB B + SRL A + LD B,A + LD A,040H + SUB B + RET + +L3DD5: INC A + LD (L3D3E),A + LD (HL),0BFH + LD DE,L3BEE + CALL L3B5C + LD HL,L3DF7 + CALL L3C0E + LD HL,L3DFC + JP L3D73 + +L3DED: DB 0C0H + DB 000H + DB 000H + DB 000H + DB 090H +L3DF2: DB 0BFH + DB 000H + DB 000H + DB 000H + DB 0E0H +L3DF7: DB 0C0H + DB 000H + DB 000H + DB 000H + DB 0E0H +L3DFC: DB 0BFH + DB 000H + DB 000H + DB 000H + DB 090H +L3E01: NOP +L3E02: NOP +L3E03: PUSH DE + LD A,(DE) + AND 080H + LD (L3E01),A + LD A,(DE) + OR 080H + LD (DE),A + LD HL,L3F2D + CALL L35D0 + POP HL + PUSH HL + LD A,040H + LD (L3E02),A + LD A,(HL) + SUB 0C1H + CALL NC,L3EBB + POP DE + PUSH DE + LD HL,L3F28 + CALL L3403 + POP HL + PUSH HL + LD DE,L3BEE + CALL L3B5C + LD HL,L3F05 + CALL L3C0E + LD HL,L3F0A + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F0F + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F14 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F19 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F1E + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F23 + CALL L3C02 + LD HL,L3BEE + LD B,(HL) + RES 7,B + LD A,(L3E02) + ADD A,B + JP C,L3EFC + SUB 03FH + JR C,L3EEC ; (+067H) + JP M,L3EFC + OR 080H + LD (HL),A + LD A,(L3E01) + OR A + JR Z,L3E98 ; (+007H) + LD HL,L3BEE + POP DE + JP L3B5C + +L3E98: POP DE + PUSH DE + LD HL,L2A88 + CALL L3B5C + POP DE + PUSH DE + LD A,(DE) + CP 0FCH + PUSH AF + JR C,L3EAA ; (+002H) + DEC A + LD (DE),A +L3EAA: LD HL,L3BEE + CALL L35D0 + POP AF + POP HL + RET C + LD A,(HL) + DEC A + LD (HL),A + RET M + PUSH HL + JP L348E + +L3EBB: INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + PUSH HL + INC A + LD H,A + XOR A +L3EC7: SLA E + RL D + RL C + RL B + RLA + JR C,L3EFA ; (+028H) + DEC H + JR NZ,L3EC7 ; (-00eH) + ADD A,040H + JR C,L3EFA ; (+021H) + LD (L3E02),A + LD A,0C0H + CALL L3CC5 + POP HL + LD (HL),B + DEC HL + LD (HL),C + DEC HL + LD (HL),D + DEC HL + LD (HL),E + DEC HL + LD (HL),A + RET + +L3EEC: LD A,(L3E01) + OR A + JP Z,OVFLERR +L3EF3: LD HL,L2A8D + POP DE + JP L3B5C + +L3EFA: POP AF + POP AF +L3EFC: LD A,(L3E01) + OR A + JP NZ,OVFLERR + JR L3EF3 ; (-012H) + +L3F05: DB 0B3H + DB 07CH + DB 08CH + DB 090H + DB 0E3H +L3F0A: DB 0B6H + DB 01FH + DB 0DFH + DB 062H + DB 0F8H +L3F0F: DB 0B9H + DB 0E2H + DB 06DH + DB 0DDH + DB 0DEH +L3F14: DB 0BCH + DB 08BH + DB 033H + DB 0C1H + DB 0A0H +L3F19: DB 0BEH + DB 089H + DB 04AH + DB 0F1H + DB 0ADH +L3F1E: DB 0BFH + DB 034H + DB 033H + DB 0F2H + DB 0FAH +L3F23: DB 0C0H + DB 036H + DB 0F3H + DB 004H + DB 0B5H +L3F28: DB 0C0H + DB 000H + DB 000H + DB 000H + DB 080H +L3F2D: DB 0C0H + DB 0F8H + DB 017H + DB 072H + DB 0B1H +L3F32: DB 000H +L3F33: DB 000H +L3F34: DB 000H +L3F35: PUSH DE + LD A,080H + LD (L3F33),A + LD (L3F32),A + EX DE,HL + LD A,(HL) + OR A + JP P,OVFLERR + CP 08AH + JR NC,L3F53 ; (+00bH) + XOR A + LD (L3F32),A + EX DE,HL + CALL L3D3F + POP HL + PUSH HL + LD A,(HL) +L3F53: CP 0C1H + CALL C,L4011 + LD B,000H + CP 0C1H + JR Z,L3F64 ; (+006H) + SUB 0C1H + LD B,A + LD A,0C1H + LD (HL),A +L3F64: LD A,B + LD (L3F34),A + LD DE,L3BEE + CALL L3B5C + POP DE + PUSH DE + LD HL,L4055 + CALL L3403 + LD HL,L4055 + CALL L3C02 + POP DE + PUSH DE + LD HL,L3BEE + CALL L35D0 + POP DE + PUSH DE + LD HL,L405A + CALL L3500 + POP HL + PUSH HL + LD DE,L3BF3 + CALL L3B5C + POP HL + PUSH HL + LD DE,L3BF3 + CALL L3500 + LD DE,L3BEE + LD HL,L3BF3 + CALL L3B5C + LD HL,L4041 + CALL L3C0E + LD HL,L4046 + CALL L3C08 + LD HL,L404B + CALL L3C08 + LD HL,L4050 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD DE,L3BF3 + LD HL,L3BEE + CALL L3B5C + LD A,(L3F34) + ADD A,A + INC A + LD B,A + LD A,008H +L3FD3: BIT 7,B + JR NZ,L3FDC ; (+005H) + SLA B + DEC A + JR NZ,L3FD3 ; (-009H) +L3FDC: ADD A,0C0H + LD HL,L3BEE + LD (HL),A + INC HL + XOR A + LD (HL),A + INC HL + LD (HL),A + INC HL + LD (HL),A + INC HL + LD (HL),B + LD HL,L405F + CALL L3C0E + LD HL,L3BF3 + CALL L3C02 + LD HL,L3BEE + LD A,(L3F33) + CALL L4191 + POP DE + PUSH DE + CALL L3B5C + POP DE + LD A,(L3F32) + OR A + RET NZ + LD HL,L3BEE + JP L3405 + +L4011: PUSH HL + LD DE,L3BEE + CALL L3B5C + POP DE + PUSH DE + LD HL,L2A88 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BEE + CALL L35D0 + POP HL + LD A,(HL) + CP 0C1H + JR NC,L4039 ; (+00bH) + PUSH HL + EX DE,HL + LD HL,L2A88 + CALL L3B5C + POP HL + LD A,0C1H +L4039: EX AF,AF' + LD A,000H + LD (L3F33),A + EX AF,AF' + RET + +L4041: DB 0ADH + DB 0A4H + DB 062H + DB 0CCH + DB 0AFH +L4046: DB 0B2H + DB 09FH + DB 0E9H + DB 047H + DB 0F9H +L404B: DB 0B8H + DB 0A4H + DB 082H + DB 0AAH + DB 0DCH +L4050: DB 0BFH + DB 0BFH + DB 0CCH + DB 0B0H + DB 0AFH +L4055: DB 0C1H + DB 033H + DB 0F3H + DB 004H + DB 0B5H +L405A: DB 0C3H + DB 099H + DB 079H + DB 082H + DB 0BAH +L405F: DB 0BFH + DB 0F8H + DB 017H + DB 072H + DB 0B1H +L4064: PUSH DE + CALL L3F35 + POP DE + LD HL,L406F + JP L3500 + +L406F: DB 0BFH + DB 0A9H + DB 0D8H + DB 05BH + DB 0DEH +L4074: DB 000H +L4075: DB 000H +L4076: PUSH DE + EX DE,HL + LD A,(HL) + AND 080H + LD (L4074),A + SET 7,(HL) + LD DE,L2A88 + CALL L3A63 + LD A,080H + JR NC,L40A3 ; (+019H) + LD DE,L3BEE + POP HL + PUSH HL + CALL L3B5C + POP DE + PUSH DE + LD HL,L2A88 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BEE + CALL L35D0 + XOR A +L40A3: LD (L4075),A + POP HL + PUSH HL + LD DE,L3BEE + CALL L3B5C + POP HL + PUSH HL + CALL L3C0E + LD HL,L3BEE + LD DE,L3BF3 + CALL L3B5C + LD HL,L4121 + CALL L3C0E + LD HL,L4126 + CALL L3C08 + LD HL,L412B + CALL L3C08 + LD HL,L4130 + CALL L3C08 + LD HL,L4135 + CALL L3C08 + LD HL,L413A + CALL L3C08 + LD HL,L413F + CALL L3C08 + LD HL,L4144 + CALL L3C08 + LD HL,L4149 + CALL L3C08 + LD HL,L2A88 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + POP DE + PUSH DE + LD HL,L3BEE + CALL L3B5C + LD A,(L4075) + OR A + JR NZ,L411B ; (+010H) + POP DE + PUSH DE + LD HL,L3CE7 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BEE + DB 0CDH + DB 003H +L411A: DB 034H +L411B: POP HL + LD A,(L4074) + JR L4191 ; (+070H) + +L4121: DB 037H + DB 0CAH + DB 09AH + DB 056H + DB 0DFH +L4126: DB 0BAH + DB 012H + DB 077H + DB 0CCH + DB 0ABH +L412B: DB 03BH + DB 023H + DB 0B2H + DB 05EH + DB 0F8H +L4130: DB 0BCH + DB 020H + DB 063H + DB 090H + DB 0E9H +L4135: DB 03DH + DB 0EEH + DB 03DH + DB 0E0H + DB 0AAH +L413A: DB 0BDH + DB 04FH + DB 01AH + DB 0D5H + DB 0DFH +L413F: DB 03EH + DB 0E3H + DB 0AFH + DB 003H + DB 092H +L4144: DB 0BEH + DB 02AH + DB 07BH + DB 0C7H + DB 0CCH +L4149: DB 03FH + DB 017H + DB 096H + DB 0AAH + DB 0AAH +L414E: DB 000H + DB 000H + DB 000H + DB 000H +L4152: DB 000H +L4153: DB 000H +L4154: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L4159: PUSH DE + LD DE,L4154 + CALL L3B5C + POP HL + PUSH HL + LD BC,00004H + ADD HL,BC + LD A,(HL) + OR A + POP HL + PUSH HL + JP P,L348E + LD A,(HL) + AND 080H + LD (L4153),A + SET 7,(HL) + EX DE,HL + CALL L3F35 + LD A,(L4153) + OR A + CALL Z,L41A4 + POP DE + PUSH DE + LD HL,L4154 + CALL L3500 + POP DE + PUSH DE + CALL L3E03 + POP HL + LD A,(L4153) +L4191: OR A + RET NZ +L4193: LD BC,00004H + ADD HL,BC + BIT 7,(HL) + PUSH AF + XOR A + SBC HL,BC + POP AF + RET Z + LD A,(HL) + ADD A,080H + LD (HL),A + RET + +L41A4: LD HL,L4154 + LD DE,L414E + CALL L3B5C + LD DE,L4154 + CALL L3A86 + LD DE,L414E + LD HL,L4154 + CALL L3403 + LD HL,L4152 + LD A,(HL) + OR A + JP M,ILDATERR + LD HL,L4154 + LD A,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + AND 07FH + SUB 041H + JR C,L41E6 ; (+010H) + JR Z,L41E3 ; (+00bH) +L41D8: SLA E + RL D + RL C + RL B + DEC A + JR NZ,L41D8 ; (-00bH) +L41E3: RL B + RET C +L41E6: LD A,080H + LD (L4153),A + RET + +L41EC: NOP + LD DE,ATRB + LD HL,L4223 + LD BC,PRNT + LDIR + LD HL,TAPECOPY + LD (DTADR),HL + LD DE,L41EC + EX DE,HL + XOR A + SBC HL,DE + INC HL + LD (SIZE),HL + LD HL,COLDSTRT + LD (EXADR),HL + CALL ?WRI + RET C + LD HL,L41EC + LD A,0C9H + LD (HL),A + CALL ?WRD + PUSH AF + LD A,000H + LD (HL),A + POP AF + RET C + RET + +L4223: DB 001H,"BASIC SA-5510",00DH + NOP diff --git a/software/DIS/SA-5510/SA-5510.ini b/software/DIS/SA-5510/SA-5510.ini new file mode 100644 index 0000000..9c01a64 --- /dev/null +++ b/software/DIS/SA-5510/SA-5510.ini @@ -0,0 +1,568 @@ +---------------------------------------- +-- dZ80 configuration file +---------------------------------------- + +---------------------------------------- +-- Disassembly control +---------------------------------------- + +cpu="z80" +inputfile="SA-5510.bin" +outputfile="SA-5510.asm" +--fileheadersize=27 +filebaseaddr=4605 +disstart=0 +disend=16946 +--disstart=0 +--disend=3584 +--quiet=0 +labelledoutput=1 + +---------------------------------------- +-- Layout +---------------------------------------- + +labelreference=1 +addresscolumn=1 +opcodecolumn=1 +relativejumpcomment=1 +uppercase=1 +autoblanklines=1 +db="db" +comment="; " +radix=16 +numprefix="0" +numsuffix="H" + +---------------------------------------- +-- Scripts +---------------------------------------- + +--script="scripts\\spectrum.lua" + +---------------------------------------- +-- References +---------------------------------------- + +referencefile="SA-5510.ref" +inportreference=1 +outportreference=1 +addressreference=1 +indirectaddressreference=1 +limitreferences=1 + +---------------------------------------- +-- Opcode mapfile and code/data areas +---------------------------------------- + +--opmapfile="mayhem.map" + +-- Code Region isnt required as v2.x sets the entire region to code unless a data region overrides it. +-- d_SetCodeRegion(4608, 2464) + +-- Set the known data regions, either as a data region (byte), word or string. The type affects the assembly output definitions and word +-- regions will attempt to map to an address, ie. jump tables will be setup with labels rather than constants. +d_SetDataRegion( hex("1347"), 100) -- 0x1347 +d_SetStringRegion(hex("1347"), 28) +d_SetStringRegion(hex("1364"), 31) +d_SetStringRegion(hex("1384"), 5) +d_SetStringRegion(hex("138A"), 6) +d_SetStringRegion(hex("1391"), 3) +d_SetStringRegion(hex("1395"), 6) +d_SetStringRegion(hex("139C"), 6) +d_SetDataRegion( hex("2FC2"), 30) +d_SetStringRegion(hex("2FC2"), 6) +d_SetStringRegion(hex("2FC9"), 8) +d_SetStringRegion(hex("2FD2"), 10) +d_SetStringRegion(hex("2FDD"), 2) +d_SetStringRegion(hex("1D44"), 9) + +-- Reserved key words. +d_SetDataRegion( hex("15A8"), 402) -- 0x15A8 Start of tokens. +d_SetStringRegion(hex("15A8"), 2) -- 0 - REM +d_SetStringRegion(hex("15AB"), 3) -- 1 - DATA +d_SetStringRegion(hex("15AF"), 0) -- 2 - undefined +d_SetStringRegion(hex("15B0"), 0) -- 3 - undefined +d_SetStringRegion(hex("15B1"), 3) -- 4 - READ +d_SetStringRegion(hex("15B5"), 3) -- 5 - LIST +d_SetStringRegion(hex("15B9"), 2) -- 6 - RUN +d_SetStringRegion(hex("15BC"), 2) -- 7 - NEW +d_SetStringRegion(hex("15BF"), 4) -- 8 - PRINT +d_SetStringRegion(hex("15C4"), 2) -- 9 - LET +d_SetStringRegion(hex("15C7"), 2) -- 10 - FOR +d_SetStringRegion(hex("15CA"), 1) -- 11 - IF +d_SetStringRegion(hex("15CC"), 3) -- 12 - THEN +d_SetStringRegion(hex("15D0"), 3) -- 13 - GOTO +d_SetStringRegion(hex("15D4"), 4) -- 14 - GOSUB +d_SetStringRegion(hex("15D9"), 5) -- 15 - RETURN +d_SetStringRegion(hex("15DF"), 3) -- 16 - NEXT +d_SetStringRegion(hex("15E3"), 3) -- 17 - STOP +d_SetStringRegion(hex("15E7"), 2) -- 18 - END +d_SetStringRegion(hex("15EA"), 0) -- 19 - undefined +d_SetStringRegion(hex("15EB"), 1) -- 20 - ON +d_SetStringRegion(hex("15ED"), 3) -- 21 - LOAD +d_SetStringRegion(hex("15F1"), 3) -- 22 - SAVE +d_SetStringRegion(hex("15F5"), 5) -- 23 - VERIFY +d_SetStringRegion(hex("15FB"), 3) -- 24 - POKE +d_SetStringRegion(hex("15FF"), 2) -- 25 - DIM +d_SetStringRegion(hex("1602"), 5) -- 26 - DEF FN +d_SetStringRegion(hex("1608"), 4) -- 27 - INPUT +d_SetStringRegion(hex("160D"), 6) -- 28 - RESTORE +d_SetStringRegion(hex("1614"), 2) -- 29 - CLS +d_SetStringRegion(hex("1617"), 4) -- 30 - MUSIC +d_SetStringRegion(hex("161C"), 4) -- 31 - TEMPO +d_SetStringRegion(hex("1621"), 3) -- 32 - USRN +d_SetStringRegion(hex("1625"), 4) -- 33 - WOPEN +d_SetStringRegion(hex("162A"), 4) -- 34 - ROPEN +d_SetStringRegion(hex("162F"), 4) -- 35 - CLOSE +d_SetStringRegion(hex("1634"), 2) -- 36 - MON +d_SetStringRegion(hex("1637"), 4) -- 37 - LIMIT +d_SetStringRegion(hex("163C"), 3) -- 38 - CONT +d_SetStringRegion(hex("1640"), 2) -- 39 - GET +d_SetStringRegion(hex("1643"), 3) -- 40 - INP@ +d_SetStringRegion(hex("1647"), 3) -- 41 - OUT@ +d_SetStringRegion(hex("164B"), 5) -- 42 - CURSOR +d_SetStringRegion(hex("1651"), 2) -- 43 - SET +d_SetStringRegion(hex("1654"), 4) -- 44 - RESET +d_SetStringRegion(hex("1659"), 0) -- 45 - undefined +d_SetStringRegion(hex("165A"), 0) -- 46 - undefined +d_SetStringRegion(hex("165B"), 0) -- 47 - undefined +d_SetStringRegion(hex("165C"), 0) -- 48 - undefined +d_SetStringRegion(hex("165D"), 0) -- 49 - undefined +d_SetStringRegion(hex("165E"), 0) -- 59 - undefined +d_SetStringRegion(hex("165F"), 3) -- 51 - AUTO +d_SetStringRegion(hex("1663"), 0) -- 52 - undefined +d_SetStringRegion(hex("1664"), 0) -- 53 - undefined +d_SetStringRegion(hex("1665"), 5) -- 54 - COPY/P +d_SetStringRegion(hex("166B"), 5) -- 55 - PAGE/P +d_SetStringRegion(hex("1671"), 0) -- 56 - undefined +d_SetStringRegion(hex("1672"), 0) -- 57 - undefined +d_SetStringRegion(hex("1673"), 0) -- 58 - undefined +d_SetStringRegion(hex("1674"), 0) -- 59 - undefined +d_SetStringRegion(hex("1675"), 0) -- 60 - undefined +d_SetStringRegion(hex("1676"), 0) -- 61 - undefined +d_SetStringRegion(hex("1677"), 0) -- 62 - undefined +d_SetStringRegion(hex("1678"), 0) -- 63 - undefined +d_SetStringRegion(hex("1679"), 0) -- 64 - undefined +d_SetStringRegion(hex("167A"), 0) -- 65 - undefined +d_SetStringRegion(hex("167B"), 1) -- 66 - undefined +d_SetStringRegion(hex("167D"), 1) -- 67 - undefined + +-- Functions +d_SetStringRegion(hex("167F"), 1) -- >= +d_SetStringRegion(hex("1681"), 1) -- <> +d_SetStringRegion(hex("1683"), 1) -- =< +d_SetStringRegion(hex("1685"), 1) -- <= +d_SetStringRegion(hex("1687"), 1) -- <= +d_SetStringRegion(hex("1689"), 1) -- <= +d_SetStringRegion(hex("168B"), 0) -- undefined +d_SetStringRegion(hex("168C"), 0) -- <= +d_SetStringRegion(hex("168D"), 0) -- <= +d_SetStringRegion(hex("168E"), 0) -- undefined +d_SetStringRegion(hex("168F"), 0) -- undefined +d_SetStringRegion(hex("1690"), 0) -- undefined +d_SetStringRegion(hex("1691"), 0) -- undefined +d_SetStringRegion(hex("1692"), 0) -- undefined +d_SetStringRegion(hex("1693"), 0) -- undefined +d_SetStringRegion(hex("1694"), 0) -- undefined +d_SetStringRegion(hex("1695"), 0) -- undefined +d_SetStringRegion(hex("1696"), 0) -- undefined +d_SetStringRegion(hex("1697"), 0) -- undefined +d_SetStringRegion(hex("1698"), 0) -- undefined +d_SetStringRegion(hex("1699"), 0) -- undefined +d_SetStringRegion(hex("169A"), 0) -- undefined +d_SetStringRegion(hex("169B"), 0) -- undefined +d_SetStringRegion(hex("169C"), 0) -- undefined +d_SetStringRegion(hex("169D"), 0) -- undefined +d_SetStringRegion(hex("168E"), 0) -- undefined +d_SetStringRegion(hex("168F"), 0) -- undefined +d_SetStringRegion(hex("16A0"), 1) -- TO +d_SetStringRegion(hex("16A2"), 3) -- STEP +d_SetStringRegion(hex("16A6"), 5) -- LEFT$( +d_SetStringRegion(hex("16AC"), 6) -- RIGHT$( +d_SetStringRegion(hex("16B3"), 4) -- MID$( +d_SetStringRegion(hex("16B8"), 3) -- LEN( +d_SetStringRegion(hex("16BC"), 4) -- CHR$( +d_SetStringRegion(hex("16C1"), 4) -- STR$( +d_SetStringRegion(hex("16C6"), 3) -- ASC( +d_SetStringRegion(hex("16CA"), 3) -- VAL( +d_SetStringRegion(hex("16CE"), 4) -- PEEK( +d_SetStringRegion(hex("16D3"), 3) -- TAB( +d_SetStringRegion(hex("16D7"), 6) -- SPACE$( +d_SetStringRegion(hex("16DE"), 3) -- SIZE +d_SetStringRegion(hex("16E2"), 2) -- undefined +d_SetStringRegion(hex("16E5"), 6) -- STRING$( +d_SetStringRegion(hex("16ED"), 0) -- undefined +d_SetStringRegion(hex("16EE"), 10) -- CHARACTER$( +d_SetStringRegion(hex("16F9"), 2) -- CSR +d_SetStringRegion(hex("16FC"), 12) -- undefined +d_SetStringRegion(hex("1709"), 3) -- RND( +d_SetStringRegion(hex("170D"), 3) -- SIN( +d_SetStringRegion(hex("1711"), 3) -- COS( +d_SetStringRegion(hex("1715"), 3) -- TAN( +d_SetStringRegion(hex("1719"), 3) -- ATN( +d_SetStringRegion(hex("171D"), 3) -- EXP( +d_SetStringRegion(hex("1721"), 3) -- INT( +d_SetStringRegion(hex("1725"), 3) -- LOG( +d_SetStringRegion(hex("1729"), 2) -- LN( +d_SetStringRegion(hex("172C"), 3) -- ABS( +d_SetStringRegion(hex("1730"), 3) -- SGN( +d_SetStringRegion(hex("1734"), 3) -- SQR( +d_SetStringRegion(hex("1738"), 2) -- End of Table + + +d_SetDataRegion( hex("13AB"), 77) -- 0x13AB +d_SetStringRegion(hex("4223"), 15) -- 0x4223 BASIC SA-5510 +d_SetDataRegion( hex("1D15"), 2) -- 0x1D15 Data +d_SetDataRegion( hex("1C4C"), 1) +d_SetDataRegion( hex("1C63"), 1) -- 0x1C63 Data +d_SetWordRegion( hex("1BB2"), 128) -- 0x1BB2 Data +d_SetDataRegion( hex("3400"), 3) -- 0x3400 Data +d_SetDataRegion( hex("3404"), 1) -- 0x3404 Data +d_SetDataRegion( hex("2355"), 1) -- 0x2355 Data +d_SetDataRegion( hex("239F"), 1) -- 0x239f Data +d_SetWordRegion( hex("2691"), 34) +d_SetWordRegion( hex("26B3"), 40) +d_SetWordRegion( hex("26DB"), 24) +d_SetDataRegion( hex("26F3"), 6) +d_SetDataRegion( hex("27B2"), 2) -- 0x27B2 Data +d_SetDataRegion( hex("2884"), 1) -- 0x2885 Data +d_SetDataRegion( hex("2A83"), 25) -- 0x2A83 Data +--d_SetDataRegion( hex("2B3D"), 2) -- 0x2B3D Data +--d_SetDataRegion( hex("2D1D"), 2) -- 0x2D1D Data + +-- Function table. +d_SetWordRegion( hex("22E1"), 18) + +-- Function calls, CALL +d_SetDataRegion( hex("204A"), 2) +d_SetDataRegion( hex("12CE"), 1) +d_SetWordRegion( hex("12CF"), 2) +d_SetDataRegion( hex("1A78"), 1) +d_SetWordRegion( hex("1A79"), 2) +d_SetDataRegion( hex("1C54"), 1) +d_SetWordRegion( hex("1C55"), 2) +d_SetDataRegion( hex("1E23"), 1) +d_SetWordRegion( hex("1E24"), 2) +d_SetDataRegion( hex("20EB"), 1) +d_SetWordRegion( hex("20EC"), 2) +d_SetDataRegion( hex("21B3"), 1) +d_SetWordRegion( hex("21B4"), 2) +d_SetDataRegion( hex("287F"), 1) +d_SetWordRegion( hex("2880"), 2) +d_SetDataRegion( hex("2949"), 1) +d_SetWordRegion( hex("294A"), 2) +d_SetDataRegion( hex("29A2"), 1) +d_SetWordRegion( hex("29A3"), 2) +d_SetDataRegion( hex("2A3A"), 1) +d_SetWordRegion( hex("2A3B"), 2) +d_SetDataRegion( hex("2A4E"), 1) +d_SetWordRegion( hex("2A4F"), 2) +d_SetDataRegion( hex("2B10"), 1) +d_SetWordRegion( hex("2B11"), 2) +d_SetDataRegion( hex("2B32"), 1) +d_SetWordRegion( hex("2B33"), 2) +d_SetDataRegion( hex("2B6C"), 1) +d_SetWordRegion( hex("2B6D"), 2) +d_SetDataRegion( hex("2C05"), 1) +d_SetWordRegion( hex("2C06"), 2) +d_SetDataRegion( hex("2CFF"), 1) +d_SetWordRegion( hex("2D00"), 2) +d_SetDataRegion( hex("2D56"), 1) +d_SetWordRegion( hex("2D57"), 2) +d_SetDataRegion( hex("2D5C"), 1) +d_SetWordRegion( hex("2D5D"), 2) +d_SetDataRegion( hex("2CB2"), 1) +d_SetWordRegion( hex("2CB3"), 2) +d_SetDataRegion( hex("2D78"), 1) +d_SetWordRegion( hex("2D79"), 2) +d_SetDataRegion( hex("2D88"), 1) +d_SetWordRegion( hex("2D89"), 2) +d_SetDataRegion( hex("2D95"), 1) +d_SetWordRegion( hex("2D96"), 2) +d_SetDataRegion( hex("2DA2"), 1) +d_SetWordRegion( hex("2DA3"), 2) +d_SetDataRegion( hex("2DB0"), 1) +d_SetWordRegion( hex("2DB1"), 2) +d_SetDataRegion( hex("2E97"), 1) +d_SetWordRegion( hex("2E98"), 2) +d_SetDataRegion( hex("2FE7"), 1) +d_SetWordRegion( hex("2FE8"), 2) +d_SetDataRegion( hex("3323"), 1) +d_SetWordRegion( hex("3324"), 2) + +d_SetDataRegion( hex("2D74"), 1) + +d_SetDataRegion( hex("2E33"), 32) +d_SetDataRegion( hex("2EB0"), 3) +d_SetDataRegion( hex("2F8C"), 2) +d_SetDataRegion( hex("2FE8"), 2) +d_SetDataRegion( hex("37AE"), 269) +d_SetDataRegion( hex("3CE7"), 30) +d_SetDataRegion( hex("3F05"), 48) +d_SetDataRegion( hex("4041"), 35) +d_SetDataRegion( hex("406F"), 7) +d_SetDataRegion( hex("4121"), 56) + + +d_SetDataRegion( hex("18BE"), 3) +d_SetDataRegion( hex("18D7"), 3) +d_SetDataRegion( hex("1CAA"), 2) +d_SetWordRegion( hex("1D90"), 2) +d_SetDataRegion( hex("2104"), 3) +--d_SetDataRegion( hex("2221"), 3) +d_SetDataRegion( hex("2317"), 1) +d_SetDataRegion( hex("270F"), 3) +d_SetWordRegion( hex("2929"), 2) +d_SetDataRegion( hex("2A14"), 2) +d_SetDataRegion( hex("2A2A"), 2) +d_SetDataRegion( hex("2C8B"), 3) +d_SetWordRegion( hex("2CDE"), 2) +d_SetDataRegion( hex("2D10"), 2) +d_SetWordRegion( hex("2D90"), 2) +d_SetDataRegion( hex("30F4"), 3) +d_SetDataRegion( hex("3BE9"), 25) +d_SetDataRegion( hex("4118"), 3) + +d_SetDataRegion( hex("3DED"), 5) +d_SetDataRegion( hex("3DF2"), 5) +d_SetDataRegion( hex("3DF7"), 5) +d_SetDataRegion( hex("3DFC"), 5) + +d_SetDataRegion( hex("1B42"), 1) +d_SetDataRegion( hex("1C5A"), 1) +d_SetDataRegion( hex("1D02"), 1) +d_SetDataRegion( hex("1D89"), 1) +d_SetDataRegion( hex("1F31"), 1) +d_SetDataRegion( hex("204F"), 1) +d_SetDataRegion( hex("208F"), 1) +d_SetDataRegion( hex("2116"), 1) +d_SetDataRegion( hex("220F"), 1) +d_SetDataRegion( hex("221B"), 1) +d_SetDataRegion( hex("221F"), 1) +d_SetDataRegion( hex("245F"), 1) +d_SetDataRegion( hex("24FD"), 1) +d_SetDataRegion( hex("2715"), 1) +d_SetDataRegion( hex("284E"), 1) +d_SetDataRegion( hex("2855"), 1) +d_SetDataRegion( hex("288F"), 1) +d_SetDataRegion( hex("28C6"), 1) +d_SetDataRegion( hex("2AB3"), 1) +d_SetDataRegion( hex("2B75"), 1) +d_SetDataRegion( hex("2C21"), 1) +d_SetDataRegion( hex("2CEF"), 1) +d_SetDataRegion( hex("2D7E"), 1) +d_SetDataRegion( hex("2D8E"), 1) +d_SetDataRegion( hex("2D9B"), 1) +d_SetDataRegion( hex("2DA8"), 1) +d_SetDataRegion( hex("2DB6"), 1) + + +-- Create a mapping table of known Sharp I/O ports and 8 bit constants. +-- +-- Format Addr IsAddr Label : IsAddr = 0, value is a constant, = 1, value is an address. +d_SetByteEquate(hex("FE") , 1, "PRTC" ) +d_SetByteEquate(hex("FF") , 1, "PRTD" ) + +-- Create a mapping table of known Sharp MZ BIOS/Memory Mapped Hardware addresses which dz80 +-- can use to replace an address with the label. The EQU list will also be output at the start +-- of the disassembly file so it can compile. +-- Format Addr IsAddr Label : IsAddr = 0, value is a constant, = 1, value is an address. +d_SetWordEquate(hex("0003"), 1, "GETL" ) +d_SetWordEquate(hex("0006"), 1, "LETNL" ) +d_SetWordEquate(hex("0009"), 1, "NL" ) +d_SetWordEquate(hex("000C"), 1, "PRNTS" ) +d_SetWordEquate(hex("000F"), 1, "PRNTT" ) +d_SetWordEquate(hex("0012"), 1, "PRNT" ) +d_SetWordEquate(hex("0015"), 1, "MSG" ) +d_SetWordEquate(hex("0018"), 1, "MSGX" ) +d_SetWordEquate(hex("001B"), 1, "GETKY" ) +d_SetWordEquate(hex("001E"), 1, "BRKEY" ) +d_SetWordEquate(hex("0021"), 1, "?WRI" ) +d_SetWordEquate(hex("0024"), 1, "?WRD" ) +d_SetWordEquate(hex("0027"), 1, "?RDI" ) +d_SetWordEquate(hex("002A"), 1, "?RDD" ) +d_SetWordEquate(hex("002D"), 1, "?VRFY" ) +d_SetWordEquate(hex("0030"), 1, "MELDY" ) +d_SetWordEquate(hex("0033"), 1, "?TMST" ) +d_SetWordEquate(hex("003B"), 1, "TIMRD" ) +d_SetWordEquate(hex("003E"), 1, "BELL" ) +d_SetWordEquate(hex("0041"), 1, "XTEMP" ) +d_SetWordEquate(hex("0044"), 1, "MSTA" ) +d_SetWordEquate(hex("0047"), 1, "MSTP" ) +d_SetWordEquate(hex("0000"), 1, "MONIT" ) +d_SetWordEquate(hex("0089"), 1, "SS" ) +d_SetWordEquate(hex("0095"), 1, "ST1" ) +d_SetWordEquate(hex("0410"), 1, "HLHEX" ) +d_SetWordEquate(hex("041F"), 1, "_2HEX" ) +d_SetWordEquate(hex("074D"), 1, "?MODE" ) +d_SetWordEquate(hex("08CA"), 1, "?KEY" ) +d_SetWordEquate(hex("096C"), 1, "PRNT3" ) +d_SetWordEquate(hex("0BB9"), 1, "?ADCN" ) +d_SetWordEquate(hex("0BCE"), 1, "?DACN" ) +d_SetWordEquate(hex("0DB5"), 1, "?DSP" ) +d_SetWordEquate(hex("0DA6"), 1, "?BLNK" ) +d_SetWordEquate(hex("0DDC"), 1, "?DPCT" ) +d_SetWordEquate(hex("03BA"), 1, "PRTHL" ) +d_SetWordEquate(hex("03C3"), 1, "PRTHX" ) +d_SetWordEquate(hex("03DA"), 1, "ASC" ) +d_SetWordEquate(hex("03F9"), 1, "HEX" ) +d_SetWordEquate(hex("0DDC"), 1, "DPCT" ) +d_SetWordEquate(hex("0DA7"), 1, "DLY12" ) +d_SetWordEquate(hex("0DAA"), 1, "DLY12A" ) +d_SetWordEquate(hex("0EE6"), 1, "?RSTR1" ) +d_SetWordEquate(hex("06A3"), 1, "MOTOR" ) +d_SetWordEquate(hex("071A"), 1, "CKSUM" ) +d_SetWordEquate(hex("077A"), 1, "GAP" ) +d_SetWordEquate(hex("0485"), 1, "WTAPE" ) +d_SetWordEquate(hex("0700"), 1, "MSTOP" ) +d_SetWordEquate(hex("11FD"), 1, "TAPECOPY" ) +d_SetWordEquate(hex("1200"), 1, "COLDSTRT" ) +d_SetWordEquate(hex("1250"), 1, "WARMSTRTMON") +d_SetWordEquate(hex("15A8"), 1, "CMDWORDTBL" ) +d_SetWordEquate(hex("1BB2"), 1, "CMDJMPTBL" ) +d_SetWordEquate(hex("2E33"), 1, "CMTBUF" ) +d_SetWordEquate(hex("2E34"), 1, "CMTFNAME" ) + +d_SetWordEquate(hex("1C3C"), 1, "CMDREMDATA" ) +d_SetWordEquate(hex("13AB"), 1, "SYNTAXERR" ) +d_SetWordEquate(hex("2D12"), 1, "CMDREAD" ) +d_SetWordEquate(hex("1C4D"), 1, "CMDLIST" ) +d_SetWordEquate(hex("1E91"), 1, "CMDRUN" ) +d_SetWordEquate(hex("1C42"), 1, "CMDNEW" ) +d_SetWordEquate(hex("2B0D"), 1, "CMDPRINT" ) +d_SetWordEquate(hex("1D6A"), 1, "CMDLET" ) +d_SetWordEquate(hex("1F2B"), 1, "CMDFOR" ) +d_SetWordEquate(hex("21AD"), 1, "CMDIF" ) +d_SetWordEquate(hex("13AB"), 1, "CMDTHEN" ) +d_SetWordEquate(hex("1EA6"), 1, "CMDGOTO" ) +d_SetWordEquate(hex("1EC7"), 1, "CMDGOSUB" ) +d_SetWordEquate(hex("1EF8"), 1, "CMDRETURN" ) +d_SetWordEquate(hex("1FC0"), 1, "CMDNEXT" ) +d_SetWordEquate(hex("1D2C"), 1, "CMDSTOP" ) +d_SetWordEquate(hex("1D15"), 1, "CMDEND" ) +d_SetWordEquate(hex("203E"), 1, "CMDON" ) +d_SetWordEquate(hex("2D75"), 1, "CMDLOAD" ) +d_SetWordEquate(hex("2D82"), 1, "CMDSAVE" ) +d_SetWordEquate(hex("2EB3"), 1, "CMDVERIFY" ) +d_SetWordEquate(hex("2191"), 1, "CMDPOKE" ) +d_SetWordEquate(hex("2080"), 1, "CMDDIM" ) +d_SetWordEquate(hex("2201"), 1, "CMDDEFFN" ) +d_SetWordEquate(hex("2BFF"), 1, "CMDINPUT" ) +d_SetWordEquate(hex("1D4D"), 1, "CMDRESTORE" ) +d_SetWordEquate(hex("21A6"), 1, "CMDCLS" ) +d_SetWordEquate(hex("2269"), 1, "CMDMUSIC" ) +d_SetWordEquate(hex("2282"), 1, "CMDTEMPO" ) +d_SetWordEquate(hex("2942"), 1, "CMDUSRN" ) +d_SetWordEquate(hex("2D9F"), 1, "CMDWOPEN" ) +d_SetWordEquate(hex("2D92"), 1, "CMDROPEN" ) +d_SetWordEquate(hex("2DAD"), 1, "CMDCLOSE" ) +d_SetWordEquate(hex("28B6"), 1, "CMDMON" ) +d_SetWordEquate(hex("2967"), 1, "CMDLIMIT" ) +d_SetWordEquate(hex("29CE"), 1, "CMDCONT" ) +d_SetWordEquate(hex("2902"), 1, "CMDGET" ) +d_SetWordEquate(hex("29FE"), 1, "CMDINP" ) +d_SetWordEquate(hex("2A1C"), 1, "CMDOUT" ) +d_SetWordEquate(hex("28B9"), 1, "CMDCURSOR" ) +d_SetWordEquate(hex("2AA6"), 1, "CMDSET" ) +d_SetWordEquate(hex("2AAA"), 1, "CMDRESET" ) +d_SetWordEquate(hex("2A2F"), 1, "CMDAUTO" ) +d_SetWordEquate(hex("33AB"), 1, "CMDCOPY" ) +d_SetWordEquate(hex("32D4"), 1, "CMDPAGE" ) + +d_SetWordEquate(hex("13AE"), 1, "OVFLERR" ) +d_SetWordEquate(hex("13B1"), 1, "ILDATERR" ) +d_SetWordEquate(hex("13B4"), 1, "DATMISERR" ) +d_SetWordEquate(hex("13B7"), 1, "STRLENERR" ) +d_SetWordEquate(hex("13BA"), 1, "MEMERR" ) +d_SetWordEquate(hex("13C0"), 1, "LINELENERR" ) +d_SetWordEquate(hex("13C3"), 1, "GOSUBERR" ) +d_SetWordEquate(hex("13C6"), 1, "FORNEXTERR" ) +d_SetWordEquate(hex("13C9"), 1, "FUNCERR" ) +d_SetWordEquate(hex("13CC"), 1, "NEXTFORERR" ) +d_SetWordEquate(hex("13CF"), 1, "RETGOSBERR" ) +d_SetWordEquate(hex("13D2"), 1, "UNDEFFNERR" ) +d_SetWordEquate(hex("13D5"), 1, "LINEERR" ) +d_SetWordEquate(hex("13D8"), 1, "CONTERR" ) +d_SetWordEquate(hex("13DB"), 1, "BADWRERR" ) +d_SetWordEquate(hex("13DE"), 1, "CMDSTMTERR" ) +d_SetWordEquate(hex("13E1"), 1, "READDATAERR") +d_SetWordEquate(hex("13E4"), 1, "OPENERR" ) +d_SetWordEquate(hex("13E7"), 1, "UNKNWNERR" ) +d_SetWordEquate(hex("13EA"), 1, "OUTFILEERR" ) +d_SetWordEquate(hex("13ED"), 1, "PRTNRDYERR" ) +d_SetWordEquate(hex("13F0"), 1, "PRTHWERR" ) +d_SetWordEquate(hex("13F3"), 1, "PRTPAPERERR") +d_SetWordEquate(hex("13F6"), 1, "CHKSUMERR" ) + +d_SetWordEquate(hex("1347"), 1, "TITLEMSG" ) +d_SetWordEquate(hex("1364"), 1, "COPYRMSG" ) +d_SetWordEquate(hex("1384"), 1, "READYMSG" ) +d_SetWordEquate(hex("138A"), 1, "ERRORMSG" ) +d_SetWordEquate(hex("1391"), 1, "INMSG" ) +d_SetWordEquate(hex("1395"), 1, "BREAKMSG" ) +d_SetWordEquate(hex("139C"), 1, "BYTESMSG" ) +d_SetWordEquate(hex("13A3"), 1, "ERRCODE" ) + +d_SetWordEquate(hex("1332"), 1, "MSGNL" ) +d_SetWordEquate(hex("167B"), 1, "UNUSEDTBL1" ) +d_SetWordEquate(hex("167D"), 1, "UNUSEDTBL2" ) +d_SetWordEquate(hex("124E"), 1, "WARMSTRT" ) +d_SetWordEquate(hex("167F"), 1, "OPERATORTBL") +d_SetWordEquate(hex("17FC"), 1, "STRTONUM" ) +d_SetWordEquate(hex("1E88"), 1, "GETNUM" ) +d_SetWordEquate(hex("173F"), 1, "SKIPSPACE" ) +d_SetWordEquate(hex("173E"), 1, "INCSKIPSPCE") +d_SetWordEquate(hex("177B"), 1, "EXECHL" ) +d_SetWordEquate(hex("1795"), 1, "EXECNOTCHR" ) +d_SetWordEquate(hex("17A3"), 1, "MATCHCHR" ) +d_SetWordEquate(hex("490D"), 0, "LINEBUFR" ) + + +d_SetComment( hex("1795"), "Scan for character after command" ) +d_SetComment( hex("1779"), "Get address after call and jump to it via a RET command." ) +d_SetComment( hex("2E1D"), "Compare loaded filename against name given by user." ) +d_SetComment( hex("2B0D"), "Check to see if a stream, ie. /T = Tape is given. The 02FH below is / and the function after is called if it doesnt match /." ) +d_SetComment( hex("1250"), "Sharp defined BASIC restart location from Monitor." ) + +-- Known Sharp Constants. +d_SetWordEquate(hex("10F0"), 0, "ATRB" ) -- ATTRIBUTE +d_SetWordEquate(hex("10F1"), 0, "NAME" ) -- FILE NAME +d_SetWordEquate(hex("1102"), 0, "SIZE" ) -- BYTESIZE +d_SetWordEquate(hex("1104"), 0, "DTADR" ) -- DATA ADDRESS +d_SetWordEquate(hex("1106"), 0, "EXADR" ) -- EXECUTION ADDRESS +d_SetWordEquate(hex("1108"), 0, "COMNT" ) -- COMMENT +d_SetWordEquate(hex("1164"), 0, "SWPW" ) -- SWEEP WORK +d_SetWordEquate(hex("116E"), 0, "KDATW" ) -- KEY WORK +d_SetWordEquate(hex("1170"), 0, "KANAF" ) -- KANA FLAG (01=GRAPHIC MODE) +d_SetWordEquate(hex("1171"), 0, "DSPXY" ) -- DISPLAY COORDINATES +d_SetWordEquate(hex("1173"), 0, "MANG" ) -- COLUMN MANAGEMENT +d_SetWordEquate(hex("1179"), 0, "MANGE" ) -- COLUMN MANAGEMENT END +d_SetWordEquate(hex("117A"), 0, "PBIAS" ) -- PAGE BIAS +d_SetWordEquate(hex("117B"), 0, "ROLTOP" ) -- ROLL TOP BIAS +d_SetWordEquate(hex("117C"), 0, "MGPNT" ) -- COLUMN MANAG. POINTER +d_SetWordEquate(hex("117D"), 0, "PAGETP" ) -- PAGE TOP +d_SetWordEquate(hex("117F"), 0, "ROLEND" ) -- ROLL END +d_SetWordEquate(hex("118E"), 0, "FLASH" ) -- FLASHING DATA +d_SetWordEquate(hex("118F"), 0, "SFTLK" ) -- SHIFT LOCK +d_SetWordEquate(hex("1190"), 0, "REVFLG" ) -- REVERSE FLAG +d_SetWordEquate(hex("1191"), 0, "SPAGE" ) -- PAGE CHANGE +d_SetWordEquate(hex("1192"), 0, "FLSDT" ) -- CURSOR DATA +d_SetWordEquate(hex("1193"), 0, "STRGF" ) -- STRING FLAG +d_SetWordEquate(hex("1194"), 0, "DPRNT" ) -- TAB COUNTER +d_SetWordEquate(hex("1195"), 0, "TMCNT" ) -- TAPE MARK COUNTER +d_SetWordEquate(hex("1197"), 0, "SUMDT" ) -- CHECK SUM DATA +d_SetWordEquate(hex("1199"), 0, "CSMDT" ) -- FOR COMPARE SUM DATA +d_SetWordEquate(hex("119B"), 0, "AMPM" ) -- AMPM DATA +d_SetWordEquate(hex("119C"), 0, "TIMFG" ) -- TIME FLAG +d_SetWordEquate(hex("119D"), 0, "SWRK" ) -- KEY SOUND FLAG +d_SetWordEquate(hex("119E"), 0, "TEMPW" ) -- TEMPO WORK +d_SetWordEquate(hex("119F"), 0, "ONTYO" ) -- ONTYO WORK +d_SetWordEquate(hex("11A0"), 0, "OCTV" ) -- OCTAVE WORK +d_SetWordEquate(hex("11A1"), 0, "RATIO" ) -- ONPU RATIO +d_SetWordEquate(hex("11A3"), 0, "BUFER" ) -- GET LINE BUFFER + + +---------------------------------------- +-- End of configuration file +---------------------------------------- diff --git a/software/DIS/SA-5510/SA-5510.ref b/software/DIS/SA-5510/SA-5510.ref new file mode 100644 index 0000000..0fec0fd --- /dev/null +++ b/software/DIS/SA-5510/SA-5510.ref @@ -0,0 +1,2643 @@ +dZ80 2.1 Reference file from the disassembly of "SA-5510.bin". + +Input Port Reference (2 entries) +-------------------------------- + +Input Port 000feH. 2 references: +-------------------------------- + + 0328aH: IN A,(0FEH) + 032aeH: IN A,(0FEH) + + +Output Port Reference (3 entries) +--------------------------------- + +Output Port 000feH. 2 references: +--------------------------------- + + 0329aH: OUT (0FEH),A + 032a2H: OUT (0FEH),A + +Output Port 000ffH. 1 references: +--------------------------------- + + 03296H: OUT (0FFH),A + + +Direct address Reference (598 entries) +-------------------------------------- + +Direct address 00000H. 20 references: +------------------------------------- + + 017d5H: LD DE,00000H + 0184aH: LD BC,00000H + 018fdH: LD BC,00000H + 01910H: LD BC,00000H + 01944H: LD HL,00000H + 019f9H: LD BC,00000H + 01a52H: LD DE,00000H + 02083H: LD BC,00000H + 02492H: LD BC,00000H + 025feH: LD BC,00000H + 027f5H: LD DE,00000H + 02919H: LD BC,00000H + 0292eH: LD DE,00000H + 029a5H: LD DE,00000H + 02e0aH: LD BC,00000H + 032abH: LD DE,00000H + 03540H: LD HL,00000H + 035a4H: LD DE,00000H + 03cdeH: LD BC,00000H + 03ce1H: LD DE,00000H + +Direct address 00001H. 4 references: +------------------------------------ + + 01ce9H: LD BC,00001H + 02779H: LD BC,00001H + 02872H: LD BC,00001H + 0359fH: LD DE,00001H + +Direct address 00002H. 1 references: +------------------------------------ + + 020aaH: LD HL,00002H + +Direct address 00003H. 3 references: +------------------------------------ + + 0223dH: LD BC,00003H + 02e54H: LD HL,00003H + 0398dH: LD BC,00003H + +Direct address 00004H. 10 references: +------------------------------------- + + 018f3H: LD BC,00004H + 01b57H: LD BC,00004H + 020b6H: LD HL,00004H + 02415H: LD BC,00004H + 02596H: LD BC,00004H + 03525H: LD BC,00004H + 03b9bH: LD BC,00004H + 03d4fH: LD BC,00004H + 04162H: LD BC,00004H + 04193H: LD BC,00004H + +Direct address 00005H. 19 references: +------------------------------------- + + 01930H: LD BC,00005H + 01e6aH: LD BC,00005H + 01f66H: LD BC,00005H + 01ffcH: LD BC,00005H + 0200cH: LD BC,00005H + 0201fH: LD BC,00005H + 020f5H: LD BC,00005H + 02154H: LD HL,00005H + 023bfH: LD BC,00005H + 023faH: LD BC,00005H + 024c1H: LD BC,00005H + 02540H: LD BC,00005H + 0261eH: LD HL,00005H + 02626H: LD BC,00005H + 027f2H: LD BC,00005H + 03756H: LD BC,00005H + 039b4H: LD BC,00005H + 03a63H: LD BC,00005H + 03b5cH: LD BC,00005H + +Direct address 00006H. 3 references: +------------------------------------ + + 01bacH: LD BC,00006H + 02129H: LD DE,00006H + 029f1H: LD BC,00006H + +Direct address 00007H. 2 references: +------------------------------------ + + 01ee5H: LD BC,00007H + 01f20H: LD BC,00007H + +Direct address 00008H. 2 references: +------------------------------------ + + 021c7H: LD BC,00008H + 0396bH: LD BC,00008H + +Direct address 00009H. 2 references: +------------------------------------ + + 02dc4H: LD DE,00009H + 03a52H: LD BC,00009H + +Direct address 0000aH. 5 references: +------------------------------------ + + 0123cH: LD BC,0000AH + 01817H: LD DE,0000AH + 02a5fH: LD DE,0000AH + 02a6cH: LD DE,0000AH + 02a71H: LD DE,0000AH + +Direct address 00012H. 4 references: +------------------------------------ + + 01f81H: LD BC,00012H + 01fe8H: LD BC,00012H + 0302bH: LD BC,00012H + 041f3H: LD BC,00012H + +Direct address 00013H. 2 references: +------------------------------------ + + 01f11H: LD BC,00013H + 01fa9H: LD BC,00013H + +Direct address 0003cH. 1 references: +------------------------------------ + + 01e4cH: LD HL,0003CH + +Direct address 00064H. 1 references: +------------------------------------ + + 01811H: LD DE,00064H + +Direct address 000c8H. 1 references: +------------------------------------ + + 02989H: LD BC,000C8H + +Direct address 00100H. 3 references: +------------------------------------ + + 025f9H: LD BC,00100H + 030ffH: LD HL,00100H + 03163H: LD HL,00100H + +Direct address 00106H. 1 references: +------------------------------------ + + 025d2H: LD BC,00106H + +Direct address 003e8H. 2 references: +------------------------------------ + + 0180bH: LD DE,003E8H + 0334fH: LD HL,003E8H + +Direct address 003f0H. 1 references: +------------------------------------ + + 0332eH: LD BC,003F0H + +Direct address 00500H. 1 references: +------------------------------------ + + 0330eH: LD BC,00500H + +Direct address 00d00H. 1 references: +------------------------------------ + + 03b24H: LD BC,00D00H + +Direct address 00d2cH. 1 references: +------------------------------------ + + 019f6H: LD DE,00D2CH + +Direct address 00e10H. 1 references: +------------------------------------ + + 01e3aH: LD HL,00E10H + +Direct address ATRB. 4 references: +---------------------------------- + + 02eefH: LD HL,010F0H + 03025H: LD DE,010F0H + 03140H: LD HL,010F0H + 041edH: LD DE,010F0H + +Direct address NAME. 1 references: +---------------------------------- + + 02f72H: LD DE,010F1H + +Direct address DTADR. 1 references: +----------------------------------- + + 02f2cH: LD (01104H),DE + +Direct address SFTLK. 1 references: +----------------------------------- + + 01342H: LD HL,0118FH + +Direct address 011fdH. 1 references: +------------------------------------ + + 041f8H: LD HL,011FDH + +Direct address 01200H. 1 references: +------------------------------------ + + 04209H: LD HL,01200H + +Direct address 0124eH. 1 references: +------------------------------------ + + 0143eH: LD BC,0124EH + +Direct address 012b8H. 1 references: +------------------------------------ + + 01262H: LD HL,012B8H + +Direct address 01347H. 1 references: +------------------------------------ + + 0122aH: LD DE,01347H + +Direct address 01364H. 1 references: +------------------------------------ + + 01230H: LD DE,01364H + +Direct address 01384H. 1 references: +------------------------------------ + + 0125cH: LD DE,01384H + +Direct address 0138aH. 1 references: +------------------------------------ + + 0142aH: LD DE,0138AH + +Direct address 01391H. 1 references: +------------------------------------ + + 0144dH: LD DE,01391H + +Direct address 01395H. 1 references: +------------------------------------ + + 01438H: LD DE,01395H + +Direct address 0139cH. 1 references: +------------------------------------ + + 01248H: LD DE,0139CH + +Direct address 013a5H. 1 references: +------------------------------------ + + 01ba3H: LD DE,013A5H + +Direct address 013abH. 29 references: +------------------------------------- + + 01bb6H: XOR E + 01bb8H: XOR E + 01bcaH: XOR E + 01bd8H: XOR E + 01c0cH: XOR E + 01c0eH: XOR E + 01c10H: XOR E + 01c12H: XOR E + 01c14H: XOR E + 01c16H: XOR E + 01c1aH: XOR E + 01c1cH: XOR E + 01c22H: XOR E + 01c24H: XOR E + 01c26H: XOR E + 01c28H: XOR E + 01c2aH: XOR E + 01c2cH: XOR E + 01c2eH: XOR E + 01c30H: XOR E + 026a3H: XOR E + 026a5H: XOR E + 026a7H: XOR E + 026cbH: XOR E + 026cdH: XOR E + 026cfH: XOR E + 026d3H: XOR E + 026d9H: XOR E + 02a4fH: XOR E + +Direct address 013b1H. 1 references: +------------------------------------ + + 01e24H: OR C + +Direct address 013b4H. 2 references: +------------------------------------ + + 01d90H: OR H + 02929H: OR H + +Direct address 01400H. 1 references: +------------------------------------ + + 013faH: LD IY,01400H + +Direct address 01464H. 1 references: +------------------------------------ + + 029eeH: LD DE,01464H + +Direct address 01479H. 1 references: +------------------------------------ + + 01483H: LD HL,01479H + +Direct address 0150aH. 1 references: +------------------------------------ + + 01545H: LD HL,0150AH + +Direct address 0151fH. 1 references: +------------------------------------ + + 01530H: LD HL,0151FH + +Direct address 015a8H. 2 references: +------------------------------------ + + 0148fH: LD DE,015A8H + 0153eH: LD HL,015A8H + +Direct address 0167bH. 2 references: +------------------------------------ + + 014a8H: LD DE,0167BH + 01534H: LD HL,0167BH + +Direct address 0167dH. 1 references: +------------------------------------ + + 01539H: LD HL,0167DH + +Direct address 0167fH. 2 references: +------------------------------------ + + 014b9H: LD DE,0167FH + 0151cH: LD HL,0167FH + +Direct address 018d8H. 1 references: +------------------------------------ + + 0259aH: LD HL,018D8H + +Direct address 0192cH. 1 references: +------------------------------------ + + 028a3H: LD DE,0192CH + +Direct address 01a7eH. 1 references: +------------------------------------ + + 01a79H: LD A,(HL) + +Direct address 01abeH. 1 references: +------------------------------------ + + 01abfH: LD HL,01ABEH + +Direct address 01b35H. 2 references: +------------------------------------ + + 01d53H: LD BC,01B35H + 02962H: LD HL,01B35H + +Direct address 01b38H. 1 references: +------------------------------------ + + 020ecH: JR C,02109H + +Direct address 01b5fH. 1 references: +------------------------------------ + + 012cfH: LD E,A + +Direct address 01bb2H. 1 references: +------------------------------------ + + 01b88H: LD HL,01BB2H + +Direct address 01c3cH. 2 references: +------------------------------------ + + 01bb2H: INC A + 01bb4H: INC A + +Direct address 01c42H. 1 references: +------------------------------------ + + 01bc0H: LD B,D + +Direct address 01c4dH. 1 references: +------------------------------------ + + 01bbcH: LD C,L + +Direct address 01c60H. 1 references: +------------------------------------ + + 01c55H: LD H,B + +Direct address 01d15H. 1 references: +------------------------------------ + + 01bd6H: DEC D + +Direct address 01d2cH. 1 references: +------------------------------------ + + 01bd4H: INC L + +Direct address 01d44H. 1 references: +------------------------------------ + + 01d35H: LD DE,01D44H + +Direct address 01d4dH. 1 references: +------------------------------------ + + 01beaH: LD C,L + +Direct address 01d6aH. 1 references: +------------------------------------ + + 01bc4H: LD L,D + +Direct address 01df5H. 3 references: +------------------------------------ + + 01dc2H: LD HL,01DF5H + 01e06H: LD DE,01DF5H + 025bcH: LD HL,01DF5H + +Direct address 01e91H. 1 references: +------------------------------------ + + 01bbeH: SUB C + +Direct address 01ea6H. 1 references: +------------------------------------ + + 01bccH: AND (HL) + +Direct address 01ec7H. 1 references: +------------------------------------ + + 01bceH: RST 000H + +Direct address 01ef8H. 1 references: +------------------------------------ + + 01bd0H: RET M + +Direct address 01f2bH. 1 references: +------------------------------------ + + 01bc6H: DEC HL + +Direct address 01fc0H. 1 references: +------------------------------------ + + 01bd2H: RET NZ + +Direct address 02000H. 1 references: +------------------------------------ + + 01cd7H: LD BC,02000H + +Direct address 0203eH. 1 references: +------------------------------------ + + 01bdaH: LD A,020H + +Direct address 02080H. 1 references: +------------------------------------ + + 01be4H: ADD A,B + +Direct address 02105H. 2 references: +------------------------------------ + + 020cbH: LD DE,(02105H) + 02174H: LD DE,(02105H) + +Direct address 02191H. 1 references: +------------------------------------ + + 01be2H: SUB C + +Direct address 021a6H. 1 references: +------------------------------------ + + 01becH: AND (HL) + +Direct address 021adH. 1 references: +------------------------------------ + + 01bc8H: XOR L + +Direct address 021d3H. 1 references: +------------------------------------ + + 021b4H: OUT (021H),A + +Direct address 02201H. 1 references: +------------------------------------ + + 01be6H: LD BC,0FF22H + +Direct address 02269H. 1 references: +------------------------------------ + + 01beeH: LD L,C + +Direct address 02282H. 1 references: +------------------------------------ + + 01bf0H: ADD A,D + +Direct address 02296H. 1 references: +------------------------------------ + + 022abH: LD BC,02296H + +Direct address 022e1H. 1 references: +------------------------------------ + + 022cfH: LD HL,022E1H + +Direct address 022f3H. 1 references: +------------------------------------ + + 022cbH: LD HL,022F3H + +Direct address 0231bH. 2 references: +------------------------------------ + + 022e1H: DEC DE + 022e3H: DEC DE + +Direct address 0231eH. 2 references: +------------------------------------ + + 022e5H: LD E,023H + 022e7H: LD E,023H + +Direct address 02322H. 2 references: +------------------------------------ + + 022e9H: LD (02223H),HL + 022ebH: LD (02523H),HL + +Direct address 02325H. 1 references: +------------------------------------ + + 022edH: DEC H + +Direct address 02328H. 1 references: +------------------------------------ + + 022efH: JR Z,02314H + +Direct address 0232fH. 1 references: +------------------------------------ + + 022f1H: CPL + +Direct address 02332H. 1 references: +------------------------------------ + + 022aeH: LD DE,02332H + +Direct address 0234cH. 1 references: +------------------------------------ + + 0235fH: LD BC,0234CH + +Direct address 02392H. 1 references: +------------------------------------ + + 02362H: LD DE,02392H + +Direct address 02396H. 1 references: +------------------------------------ + + 023a3H: LD BC,02396H + +Direct address 023abH. 1 references: +------------------------------------ + + 023a6H: LD DE,023ABH + +Direct address 023afH. 1 references: +------------------------------------ + + 023b5H: LD BC,023AFH + +Direct address 023dcH. 1 references: +------------------------------------ + + 023d0H: LD HL,023DCH + +Direct address 023f9H. 2 references: +------------------------------------ + + 023f0H: LD BC,023F9H + 02462H: LD HL,023F9H + +Direct address 02401H. 1 references: +------------------------------------ + + 023b8H: LD DE,02401H + +Direct address 02691H. 1 references: +------------------------------------ + + 023c6H: LD HL,02691H + +Direct address 026b3H. 1 references: +------------------------------------ + + 0247bH: LD HL,026B3H + +Direct address 026dbH. 1 references: +------------------------------------ + + 0246aH: LD HL,026DBH + +Direct address 026f3H. 1 references: +------------------------------------ + + 026b3H: DI + +Direct address 0270fH. 1 references: +------------------------------------ + + 026b5H: RRCA + +Direct address 02710H. 1 references: +------------------------------------ + + 01805H: LD DE,02710H + +Direct address 0273eH. 1 references: +------------------------------------ + + 026b7H: LD A,027H + +Direct address 02765H. 1 references: +------------------------------------ + + 026b9H: LD H,L + +Direct address 02772H. 1 references: +------------------------------------ + + 026bbH: LD (HL),D + +Direct address 0277fH. 1 references: +------------------------------------ + + 026bdH: LD A,A + +Direct address 0279aH. 1 references: +------------------------------------ + + 026c1H: SBC A,D + +Direct address 027b2H. 1 references: +------------------------------------ + + 027a7H: LD HL,027B2H + +Direct address 027b4H. 1 references: +------------------------------------ + + 026bfH: OR H + +Direct address 027f9H. 1 references: +------------------------------------ + + 026c3H: LD SP,HL + +Direct address 02801H. 1 references: +------------------------------------ + + 026c5H: LD BC,00428H + +Direct address 02804H. 1 references: +------------------------------------ + + 026c7H: INC B + +Direct address 02824H. 1 references: +------------------------------------ + + 026d1H: INC H + +Direct address 02841H. 1 references: +------------------------------------ + + 026d5H: LD B,C + +Direct address 0287cH. 1 references: +------------------------------------ + + 026d7H: LD A,H + +Direct address 0288cH. 1 references: +------------------------------------ + + 02880H: ADC A,H + +Direct address 02895H. 1 references: +------------------------------------ + + 026c9H: SUB L + +Direct address 0289dH. 1 references: +------------------------------------ + + 026edH: SBC A,L + +Direct address 028a2H. 1 references: +------------------------------------ + + 026efH: AND D + +Direct address 028b6H. 1 references: +------------------------------------ + + 01bfaH: OR (HL) + +Direct address 028b9H. 1 references: +------------------------------------ + + 01c06H: CP C + +Direct address 02902H. 1 references: +------------------------------------ + + 01c00H: LD (BC),A + +Direct address 02942H. 1 references: +------------------------------------ + + 01bf2H: LD B,D + +Direct address 02959H. 1 references: +------------------------------------ + + 0294aH: LD E,C + +Direct address 02967H. 1 references: +------------------------------------ + + 01bfcH: LD H,A + +Direct address 0299bH. 1 references: +------------------------------------ + + 02967H: LD DE,0299BH + +Direct address 029cbH. 1 references: +------------------------------------ + + 029a3H: SRA C + +Direct address 029ceH. 1 references: +------------------------------------ + + 01bfeH: ADC A,029H + +Direct address 029feH. 1 references: +------------------------------------ + + 01c02H: CP 029H + +Direct address 02a1cH. 1 references: +------------------------------------ + + 01c04H: INC E + +Direct address 02a2fH. 1 references: +------------------------------------ + + 01c18H: CPL + +Direct address 02a3fH. 1 references: +------------------------------------ + + 02a3bH: CCF + +Direct address 02a84H. 3 references: +------------------------------------ + + 02a42H: LD (02A84H),DE + 02a62H: LD (02A84H),DE + 02a74H: LD (02A84H),DE + +Direct address 02a86H. 3 references: +------------------------------------ + + 0127fH: LD BC,(02A86H) + 02a54H: LD (02A86H),DE + 02a66H: LD (02A86H),DE + +Direct address 02a88H. 9 references: +------------------------------------ + + 01f5cH: LD HL,02A88H + 028acH: LD DE,02A88H + 03c74H: LD HL,02A88H + 03e9aH: LD HL,02A88H + 0401aH: LD HL,02A88H + 04030H: LD HL,02A88H + 04080H: LD DE,02A88H + 04094H: LD HL,02A88H + 040f2H: LD HL,02A88H + +Direct address 02a8dH. 8 references: +------------------------------------ + + 020f2H: LD HL,02A8DH + 022f9H: LD DE,02A8DH + 024d9H: LD HL,02A8DH + 028b2H: LD DE,02A8DH + 03b50H: LD DE,02A8DH + 03b6dH: LD HL,02A8DH + 03dbaH: LD HL,02A8DH + 03ef3H: LD HL,02A8DH + +Direct address 02a92H. 4 references: +------------------------------------ + + 022f3H: LD DE,02A92H + 028a7H: LD DE,02A92H + 03b55H: LD DE,02A92H + 03b68H: LD HL,02A92H + +Direct address 02a97H. 1 references: +------------------------------------ + + 024acH: LD DE,02A97H + +Direct address 02aa6H. 1 references: +------------------------------------ + + 01c08H: AND (HL) + +Direct address 02aaaH. 1 references: +------------------------------------ + + 01c0aH: XOR D + +Direct address 02b0dH. 1 references: +------------------------------------ + + 01bc2H: DEC C + +Direct address 02b18H. 1 references: +------------------------------------ + + 02b11H: JR 02B3EH + +Direct address 02b1eH. 1 references: +------------------------------------ + + 02bafH: LD HL,02B1EH + +Direct address 02b35H. 1 references: +------------------------------------ + + 02b33H: DEC (HL) + +Direct address 02b4dH. 1 references: +------------------------------------ + + 02b35H: LD BC,02B4DH + +Direct address 02b9aH. 1 references: +------------------------------------ + + 02b6dH: SBC A,D + +Direct address 02be2H. 1 references: +------------------------------------ + + 02bf4H: LD SP,02BE2H + +Direct address 02befH. 1 references: +------------------------------------ + + 02b26H: LD HL,02BEFH + +Direct address 02bf7H. 1 references: +------------------------------------ + + 02ba9H: LD HL,02BF7H + +Direct address 02bffH. 1 references: +------------------------------------ + + 01be8H: RST 038H + +Direct address 02c0eH. 1 references: +------------------------------------ + + 02c06H: LD C,02CH + +Direct address 02c5fH. 2 references: +------------------------------------ + + 02c16H: LD DE,02C5FH + 02c59H: LD DE,02C5FH + +Direct address 02c68H. 1 references: +------------------------------------ + + 02c7eH: LD HL,02C68H + +Direct address 02c84H. 1 references: +------------------------------------ + + 02c6cH: LD HL,02C84H + +Direct address 02c8eH. 1 references: +------------------------------------ + + 02cc5H: LD HL,02C8EH + +Direct address 02cbfH. 1 references: +------------------------------------ + + 02cb3H: CP A + +Direct address 02cf4H. 1 references: +------------------------------------ + + 02cdeH: CALL P,02A2CH + +Direct address 02d05H. 1 references: +------------------------------------ + + 02d00H: DEC B + +Direct address 02d10H. 1 references: +------------------------------------ + + 02d02H: LD HL,02D10H + +Direct address 02d11H. 1 references: +------------------------------------ + + 02cb6H: LD DE,02D11H + +Direct address 02d12H. 1 references: +------------------------------------ + + 01bbaH: LD (DE),A + +Direct address 02d46H. 1 references: +------------------------------------ + + 01d5cH: LD BC,02D46H + +Direct address 02d68H. 2 references: +------------------------------------ + + 02d57H: LD L,B + 02d5dH: LD L,B + +Direct address 02d75H. 1 references: +------------------------------------ + + 01bdcH: LD (HL),L + +Direct address 02d82H. 1 references: +------------------------------------ + + 01bdeH: ADD A,D + +Direct address 02d92H. 1 references: +------------------------------------ + + 01bf6H: SUB D + +Direct address 02d9fH. 1 references: +------------------------------------ + + 01bf4H: SBC A,A + +Direct address 02dadH. 1 references: +------------------------------------ + + 01bf8H: XOR L + +Direct address 02e28H. 1 references: +------------------------------------ + + 0213fH: LD HL,02E28H + +Direct address 02e33H. 3 references: +------------------------------------ + + 02febH: LD HL,02E33H + 03028H: LD HL,02E33H + 03132H: LD HL,02E33H + +Direct address 02e34H. 6 references: +------------------------------------ + + 02e1dH: LD DE,02E34H + 02e64H: LD HL,02E34H + 02e8cH: LD HL,02E34H + 02efaH: LD DE,02E34H + 0301fH: LD DE,02E34H + 03148H: LD DE,02E34H + +Direct address 02e9aH. 1 references: +------------------------------------ + + 02e98H: SBC A,D + +Direct address 02eb0H. 1 references: +------------------------------------ + + 02e9dH: LD DE,02EB0H + +Direct address 02eb3H. 1 references: +------------------------------------ + + 01be0H: OR E + +Direct address 02edaH. 1 references: +------------------------------------ + + 02d79H: JP C,0CD2EH + +Direct address 02ee6H. 1 references: +------------------------------------ + + 02edfH: LD BC,02EE6H + +Direct address 02f8cH. 1 references: +------------------------------------ + + 02f86H: LD DE,02F8CH + +Direct address 02fc2H. 1 references: +------------------------------------ + + 02f67H: LD DE,02FC2H + +Direct address 02fc9H. 1 references: +------------------------------------ + + 02f6cH: LD DE,02FC9H + +Direct address 02fd2H. 1 references: +------------------------------------ + + 02f62H: LD DE,02FD2H + +Direct address 02fddH. 1 references: +------------------------------------ + + 02ed1H: LD DE,02FDDH + +Direct address 02fe0H. 1 references: +------------------------------------ + + 02d89H: RET PO + +Direct address 02feaH. 1 references: +------------------------------------ + + 02fe8H: JP PE,0E52FH + +Direct address 03038H. 1 references: +------------------------------------ + + 02fe0H: LD BC,03038H + +Direct address 03064H. 1 references: +------------------------------------ + + 02bfcH: LD SP,03064H + +Direct address 030e5H. 1 references: +------------------------------------ + + 02da3H: PUSH HL + +Direct address 030f6H. 1 references: +------------------------------------ + + 025e2H: LD BC,030F6H + +Direct address 030fcH. 1 references: +------------------------------------ + + 030efH: LD BC,030FCH + +Direct address 0311eH. 1 references: +------------------------------------ + + 02d96H: LD E,031H + +Direct address 0313aH. 1 references: +------------------------------------ + + 03128H: LD BC,0313AH + +Direct address 03171H. 1 references: +------------------------------------ + + 02db1H: LD (HL),C + +Direct address 032d4H. 1 references: +------------------------------------ + + 01c20H: CALL NC,0AB32H + +Direct address 03315H. 1 references: +------------------------------------ + + 03362H: LD HL,03315H + +Direct address 03326H. 1 references: +------------------------------------ + + 03324H: LD H,033H + +Direct address 033abH. 1 references: +------------------------------------ + + 01c1eH: XOR E + +Direct address 03400H. 1 references: +------------------------------------ + + 03431H: LD (03400H),BC + +Direct address 03401H. 1 references: +------------------------------------ + + 034e4H: LD HL,03401H + +Direct address 03402H. 3 references: +------------------------------------ + + 0347bH: LD HL,03402H + 0347fH: LD HL,03402H + 034b7H: LD HL,03402H + +Direct address 03403H. 1 references: +------------------------------------ + + 026abH: INC BC + +Direct address 03405H. 1 references: +------------------------------------ + + 026a9H: DEC B + +Direct address 03500H. 1 references: +------------------------------------ + + 026adH: NOP + +Direct address 035d0H. 1 references: +------------------------------------ + + 026afH: RET NC + +Direct address 0366eH. 1 references: +------------------------------------ + + 03734H: LD DE,(0366EH) + +Direct address 03725H. 1 references: +------------------------------------ + + 0371aH: LD HL,03725H + +Direct address 03755H. 2 references: +------------------------------------ + + 0374dH: LD BC,03755H + 0375dH: LD HL,03755H + +Direct address 037aeH. 2 references: +------------------------------------ + + 03730H: LD BC,037AEH + 03afaH: LD BC,037AEH + +Direct address 037dbH. 1 references: +------------------------------------ + + 039abH: LD HL,037DBH + +Direct address 038a3H. 1 references: +------------------------------------ + + 03afeH: LD DE,(038A3H) + +Direct address 038a6H. 2 references: +------------------------------------ + + 0390dH: LD HL,038A6H + 0391dH: LD DE,038A6H + +Direct address 038a7H. 4 references: +------------------------------------ + + 0392eH: LD DE,038A7H + 0394fH: LD HL,038A7H + 039d8H: LD HL,038A7H + 03ab7H: LD IX,038A7H + +Direct address 038a8H. 1 references: +------------------------------------ + + 0392bH: LD HL,038A8H + +Direct address 038afH. 2 references: +------------------------------------ + + 03963H: LD HL,038AFH + 03a4cH: LD HL,038AFH + +Direct address 038b0H. 6 references: +------------------------------------ + + 038d9H: LD HL,038B0H + 0393fH: LD HL,038B0H + 03a27H: LD HL,038B0H + 03a4fH: LD DE,038B0H + 03aa3H: LD HL,038B0H + 03b21H: LD HL,038B0H + +Direct address 038b1H. 1 references: +------------------------------------ + + 03960H: LD DE,038B1H + +Direct address 038b2H. 1 references: +------------------------------------ + + 0395bH: LD DE,038B2H + +Direct address 03994H. 1 references: +------------------------------------ + + 0398aH: LD HL,03994H + +Direct address 039d8H. 1 references: +------------------------------------ + + 039c7H: LD BC,039D8H + +Direct address 03a86H. 1 references: +------------------------------------ + + 026e7H: ADD A,(HL) + +Direct address 03aefH. 1 references: +------------------------------------ + + 03ae4H: LD HL,03AEFH + +Direct address 03b62H. 2 references: +------------------------------------ + + 02691H: LD H,D + 02693H: LD H,D + +Direct address 03b73H. 1 references: +------------------------------------ + + 0269fH: LD (HL),E + +Direct address 03b77H. 1 references: +------------------------------------ + + 026a1H: LD (HL),A + +Direct address 03b7fH. 1 references: +------------------------------------ + + 0269dH: LD A,A + +Direct address 03b87H. 2 references: +------------------------------------ + + 02695H: ADD A,A + 02697H: ADD A,A + +Direct address 03b8bH. 2 references: +------------------------------------ + + 02699H: ADC A,E + 0269bH: ADC A,E + +Direct address 03b93H. 2 references: +------------------------------------ + + 03ba3H: LD DE,03B93H + 03bc4H: LD DE,03B93H + +Direct address 03b98H. 1 references: +------------------------------------ + + 026dbH: SBC A,B + +Direct address 03be4H. 1 references: +------------------------------------ + + 03bc7H: LD HL,03BE4H + +Direct address 03be9H. 1 references: +------------------------------------ + + 03ba7H: LD HL,03BE9H + +Direct address 03beeH. 29 references: +------------------------------------- + + 03c02H: LD DE,03BEEH + 03c0eH: LD DE,03BEEH + 03c85H: LD DE,03BEEH + 03c8eH: LD HL,03BEEH + 03c9aH: LD HL,03BEEH + 03cbfH: LD HL,03BEEH + 03d64H: LD DE,03BEEH + 03d81H: LD HL,03BEEH + 03d8dH: LD HL,03BEEH + 03ddbH: LD DE,03BEEH + 03e2bH: LD DE,03BEEH + 03e74H: LD HL,03BEEH + 03e91H: LD HL,03BEEH + 03eaaH: LD HL,03BEEH + 03f68H: LD DE,03BEEH + 03f7eH: LD HL,03BEEH + 03f9cH: LD DE,03BEEH + 03fc5H: LD HL,03BEEH + 03fdeH: LD HL,03BEEH + 03ff7H: LD HL,03BEEH + 0400bH: LD HL,03BEEH + 04012H: LD DE,03BEEH + 04022H: LD HL,03BEEH + 0408aH: LD DE,03BEEH + 0409cH: LD HL,03BEEH + 040a8H: LD DE,03BEEH + 040b3H: LD HL,03BEEH + 040ffH: LD HL,03BEEH + 04115H: LD HL,03BEEH + +Direct address 03bf3H. 12 references: +------------------------------------- + + 03c0bH: LD HL,03BF3H + 03c8bH: LD DE,03BF3H + 03c97H: LD DE,03BF3H + 03d76H: LD DE,03BF3H + 03d7eH: LD DE,03BF3H + 03d87H: LD HL,03BF3H + 03f8eH: LD DE,03BF3H + 03f96H: LD DE,03BF3H + 03f9fH: LD HL,03BF3H + 03fc2H: LD DE,03BF3H + 03ff1H: LD HL,03BF3H + 040b6H: LD DE,03BF3H + +Direct address 03bf8H. 2 references: +------------------------------------ + + 03d23H: LD DE,03BF8H + 03d37H: LD HL,03BF8H + +Direct address 03bfdH. 2 references: +------------------------------------ + + 03d16H: LD DE,03BFDH + 03d2bH: LD HL,03BFDH + +Direct address 03c16H. 1 references: +------------------------------------ + + 026ddH: LD D,03CH + +Direct address 03ce7H. 3 references: +------------------------------------ + + 03c17H: LD HL,03CE7H + 03d06H: LD HL,03CE7H + 0410dH: LD HL,03CE7H + +Direct address 03cecH. 1 references: +------------------------------------ + + 03ca0H: LD HL,03CECH + +Direct address 03cf1H. 1 references: +------------------------------------ + + 03ca6H: LD HL,03CF1H + +Direct address 03cf6H. 1 references: +------------------------------------ + + 03cacH: LD HL,03CF6H + +Direct address 03cfbH. 1 references: +------------------------------------ + + 03cb2H: LD HL,03CFBH + +Direct address 03d00H. 1 references: +------------------------------------ + + 03cb8H: LD HL,03D00H + +Direct address 03d05H. 1 references: +------------------------------------ + + 026dfH: DEC B + +Direct address 03d14H. 1 references: +------------------------------------ + + 026e1H: INC D + +Direct address 03d3fH. 1 references: +------------------------------------ + + 026f1H: CCF + +Direct address 03dedH. 1 references: +------------------------------------ + + 03d6aH: LD HL,03DEDH + +Direct address 03df2H. 1 references: +------------------------------------ + + 03d70H: LD HL,03DF2H + +Direct address 03df7H. 1 references: +------------------------------------ + + 03de1H: LD HL,03DF7H + +Direct address 03dfcH. 1 references: +------------------------------------ + + 03de7H: LD HL,03DFCH + +Direct address 03e03H. 1 references: +------------------------------------ + + 026e5H: INC BC + +Direct address 03f05H. 1 references: +------------------------------------ + + 03e31H: LD HL,03F05H + +Direct address 03f0aH. 1 references: +------------------------------------ + + 03e37H: LD HL,03F0AH + +Direct address 03f0fH. 1 references: +------------------------------------ + + 03e42H: LD HL,03F0FH + +Direct address 03f14H. 1 references: +------------------------------------ + + 03e4dH: LD HL,03F14H + +Direct address 03f19H. 1 references: +------------------------------------ + + 03e58H: LD HL,03F19H + +Direct address 03f1eH. 1 references: +------------------------------------ + + 03e63H: LD HL,03F1EH + +Direct address 03f23H. 1 references: +------------------------------------ + + 03e6eH: LD HL,03F23H + +Direct address 03f28H. 1 references: +------------------------------------ + + 03e23H: LD HL,03F28H + +Direct address 03f2dH. 1 references: +------------------------------------ + + 03e0eH: LD HL,03F2DH + +Direct address 03f35H. 1 references: +------------------------------------ + + 026ebH: DEC (HL) + +Direct address 04041H. 1 references: +------------------------------------ + + 03fa5H: LD HL,04041H + +Direct address 04046H. 1 references: +------------------------------------ + + 03fabH: LD HL,04046H + +Direct address 0404bH. 1 references: +------------------------------------ + + 03fb1H: LD HL,0404BH + +Direct address 04050H. 1 references: +------------------------------------ + + 03fb7H: LD HL,04050H + +Direct address 04055H. 2 references: +------------------------------------ + + 03f70H: LD HL,04055H + 03f76H: LD HL,04055H + +Direct address 0405aH. 1 references: +------------------------------------ + + 03f86H: LD HL,0405AH + +Direct address 0405fH. 1 references: +------------------------------------ + + 03febH: LD HL,0405FH + +Direct address 04064H. 1 references: +------------------------------------ + + 026e9H: LD H,H + +Direct address 0406fH. 1 references: +------------------------------------ + + 04069H: LD HL,0406FH + +Direct address 04076H. 1 references: +------------------------------------ + + 026e3H: HALT + +Direct address 0411aH. 1 references: +------------------------------------ + + 02643H: LD BC,0411AH + +Direct address 04121H. 1 references: +------------------------------------ + + 040bcH: LD HL,04121H + +Direct address 04126H. 1 references: +------------------------------------ + + 040c2H: LD HL,04126H + +Direct address 0412bH. 1 references: +------------------------------------ + + 040c8H: LD HL,0412BH + +Direct address 04130H. 1 references: +------------------------------------ + + 040ceH: LD HL,04130H + +Direct address 04135H. 1 references: +------------------------------------ + + 040d4H: LD HL,04135H + +Direct address 0413aH. 1 references: +------------------------------------ + + 040daH: LD HL,0413AH + +Direct address 0413fH. 1 references: +------------------------------------ + + 040e0H: LD HL,0413FH + +Direct address 04144H. 1 references: +------------------------------------ + + 040e6H: LD HL,04144H + +Direct address 04149H. 1 references: +------------------------------------ + + 040ecH: LD HL,04149H + +Direct address 0414eH. 2 references: +------------------------------------ + + 041a7H: LD DE,0414EH + 041b3H: LD DE,0414EH + +Direct address 04152H. 1 references: +------------------------------------ + + 041bcH: LD HL,04152H + +Direct address 04154H. 6 references: +------------------------------------ + + 0415aH: LD DE,04154H + 04182H: LD HL,04154H + 041a4H: LD HL,04154H + 041adH: LD DE,04154H + 041b6H: LD HL,04154H + 041c4H: LD HL,04154H + +Direct address 04159H. 1 references: +------------------------------------ + + 026b1H: LD E,C + +Direct address 041ecH. 2 references: +------------------------------------ + + 041feH: LD DE,041ECH + 04213H: LD HL,041ECH + +Direct address 04223H. 1 references: +------------------------------------ + + 041f0H: LD HL,04223H + +Direct address 048ffH. 1 references: +------------------------------------ + + 01200H: LD HL,048FFH + +Direct address 04900H. 1 references: +------------------------------------ + + 01d95H: LD HL,04900H + +Direct address 04902H. 1 references: +------------------------------------ + + 02cf4H: LD DE,(04902H) + +Direct address 04903H. 1 references: +------------------------------------ + + 01da5H: LD HL,04903H + +Direct address 04904H. 1 references: +------------------------------------ + + 01d9aH: LD HL,04904H + +Direct address 04906H. 1 references: +------------------------------------ + + 01dadH: LD DE,(04906H) + +Direct address 0490aH. 1 references: +------------------------------------ + + 01258H: LD SP,(0490AH) + +Direct address LINEBUFR. 9 references: +-------------------------------------- + + 01272H: LD DE,0490DH + 0146aH: LD HL,0490DH + 014fbH: LD DE,0490DH + 01ca7H: LD DE,0490DH + 02b9eH: LD HL,0490DH + 02c32H: LD DE,0490DH + 02c68H: LD DE,0490DH + 02c9cH: LD DE,0490DH + 02d3bH: LD HL,0490DH + +Direct address 04954H. 1 references: +------------------------------------ + + 02578H: LD HL,04954H + +Direct address 04a0eH. 2 references: +------------------------------------ + + 012f7H: LD HL,04A0EH + 01c8aH: LD DE,04A0EH + +Direct address 04a10H. 1 references: +------------------------------------ + + 01470H: LD (04A10H),DE + +Direct address 04a12H. 3 references: +------------------------------------ + + 012c5H: LD HL,04A12H + 01474H: LD DE,04A12H + 01507H: LD HL,04A12H + +Direct address 04ab3H. 4 references: +------------------------------------ + + 01841H: LD DE,04AB3H + 01c69H: LD HL,04AB3H + 01cf6H: LD (04AB3H),DE + 0278cH: LD DE,04AB3H + +Direct address 04ab5H. 1 references: +------------------------------------ + + 01d0aH: LD (04AB5H),DE + +Direct address 04cd3H. 5 references: +------------------------------------ + + 0307fH: LD HL,04CD3H + 030bbH: LD HL,04CD3H + 03105H: LD HL,04CD3H + 0315dH: LD HL,04CD3H + 0319dH: LD HL,04CD3H + +Direct address 04dd3H. 4 references: +------------------------------------ + + 03072H: LD DE,04DD3H + 030a4H: LD DE,04DD3H + 03169H: LD HL,04DD3H + 03181H: LD DE,04DD3H + +Direct address 04dd8H. 1 references: +------------------------------------ + + 02e5aH: LD HL,04DD8H + +Direct address 04df2H. 2 references: +------------------------------------ + + 0199eH: LD HL,04DF2H + 02dc1H: LD HL,04DF2H + +Direct address 04e4eH. 2 references: +------------------------------------ + + 0195dH: LD DE,04E4EH + 02f4eH: LD HL,04E4EH + +Direct address 04e50H. 1 references: +------------------------------------ + + 019aaH: LD HL,04E50H + +Direct address 04e84H. 1 references: +------------------------------------ + + 01999H: LD DE,04E84H + +Direct address 04e86H. 1 references: +------------------------------------ + + 02126H: LD HL,04E86H + +Direct address 04e94H. 2 references: +------------------------------------ + + 019c7H: LD HL,04E94H + 0249eH: LD DE,(04E94H) + +Direct address 04e96H. 1 references: +------------------------------------ + + 01961H: LD HL,04E96H + +Direct address 04e98H. 1 references: +------------------------------------ + + 01fa5H: LD DE,(04E98H) + +Direct address 04e9aH. 2 references: +------------------------------------ + + 01ee0H: LD DE,(04E9AH) + 01eebH: LD (04E9AH),DE + +Direct address 04e9cH. 1 references: +------------------------------------ + + 0252cH: LD DE,04E9CH + +Direct address 04ebaH. 1 references: +------------------------------------ + + 01984H: LD HL,04EBAH + +Direct address 04fd7H. 1 references: +------------------------------------ + + 0197eH: LD HL,04FD7H + +Direct address 05040H. 2 references: +------------------------------------ + + 01978H: LD HL,05040H + 01f6eH: LD DE,(05040H) + +Direct address 05042H. 1 references: +------------------------------------ + + 01f5fH: LD DE,05042H + +Direct address 05048H. 1 references: +------------------------------------ + + 01f48H: LD DE,05048H + +Direct address 0504dH. 6 references: +------------------------------------ + + 01266H: LD HL,0504DH + 01b54H: LD DE,0504DH + 01ba6H: LD HL,0504DH + 01f1dH: LD DE,0504DH + 02012H: LD DE,0504DH + 029f4H: LD HL,0504DH + +Direct address 05053H. 5 references: +------------------------------------ + + 0198aH: LD HL,05053H + 01f04H: LD HL,05053H + 01f8fH: LD HL,05053H + 01fddH: LD HL,05053H + 0202bH: LD HL,05053H + +Direct address 05054H. 1 references: +------------------------------------ + + 01f98H: LD HL,05054H + +Direct address 05055H. 2 references: +------------------------------------ + + 01ed4H: LD HL,05055H + 01efbH: LD HL,05055H + +Direct address 05056H. 1 references: +------------------------------------ + + 0140eH: LD HL,05056H + +Direct address 0505cH. 12 references: +------------------------------------- + + 018b3H: LD HL,0505CH + 01957H: LD HL,0505CH + 01ac7H: LD HL,0505CH + 01ae1H: LD DE,0505CH + 01b13H: LD DE,0505CH + 01b1bH: LD HL,0505CH + 01c7dH: LD HL,0505CH + 01ec1H: LD HL,0505CH + 02d43H: LD HL,0505CH + 02f23H: LD DE,0505CH + 0303bH: LD HL,0505CH + 03041H: LD DE,0505CH + +Direct address 0505eH. 1 references: +------------------------------------ + + 02f4bH: LD DE,0505EH + +Direct address 08000H. 1 references: +------------------------------------ + + 03c43H: LD HL,08000H + +Direct address 0f1f0H. 1 references: +------------------------------------ + + 025c1H: LD DE,0F1F0H + +Direct address 0ff0aH. 1 references: +------------------------------------ + + 038ffH: LD BC,0FF0AH + +Direct address 0ff9cH. 1 references: +------------------------------------ + + 01854H: LD HL,0FF9CH + +Direct address 0ffc4H. 1 references: +------------------------------------ + + 025c7H: LD DE,0FFC4H + +Direct address 0fffaH. 1 references: +------------------------------------ + + 02535H: LD BC,0FFFAH + +Direct address 0fffbH. 2 references: +------------------------------------ + + 01e7cH: LD BC,0FFFBH + 023e6H: LD BC,0FFFBH + + +Indirect address Reference (316 entries) +---------------------------------------- + +Indirect address ATRB. 2 references: +------------------------------------ + + 02eb9H: LD A,(010F0H) + 02f0dH: LD A,(010F0H) + +Indirect address 01101H. 1 references: +-------------------------------------- + + 02f80H: LD (01101H),A + +Indirect address SIZE. 6 references: +------------------------------------ + + 02f1cH: LD HL,(01102H) + 02f9bH: LD HL,(01102H) + 0304aH: LD (01102H),HL + 03102H: LD (01102H),HL + 03166H: LD (01102H),HL + 04206H: LD (01102H),HL + +Indirect address DTADR. 5 references: +------------------------------------- + + 02f8eH: LD HL,(01104H) + 0303eH: LD (01104H),HL + 0310bH: LD (01104H),HL + 03160H: LD (01104H),HL + 041fbH: LD (01104H),HL + +Indirect address EXADR. 1 references: +------------------------------------- + + 0420cH: LD (01106H),HL + +Indirect address DSPXY. 3 references: +------------------------------------- + + 02890H: LD A,(01171H) + 028d0H: LD HL,(01171H) + 028ebH: LD (01171H),HL + +Indirect address 01172H. 1 references: +-------------------------------------- + + 02882H: LD A,(01172H) + +Indirect address MGPNT. 2 references: +------------------------------------- + + 028d6H: LD A,(0117CH) + 028e3H: LD (0117CH),A + +Indirect address PAGETP. 3 references: +-------------------------------------- + + 02860H: LD HL,(0117DH) + 02ae5H: LD HL,(0117DH) + 033c6H: LD HL,(0117DH) + +Indirect address DPRNT. 3 references: +------------------------------------- + + 028f1H: LD (01194H),A + 02b78H: LD A,(01194H) + 02c2bH: LD A,(01194H) + +Indirect address 013a3H. 2 references: +-------------------------------------- + + 01403H: LD (013A3H),A + 01430H: LD HL,(013A3H) + +Indirect address 013ffH. 1 references: +-------------------------------------- + + 01400H: LD A,(013FFH) + +Indirect address 01463H. 4 references: +-------------------------------------- + + 0145aH: LD (01463H),A + 01c43H: LD (01463H),A + 029d1H: LD A,(01463H) + 029ebH: LD (01463H),A + +Indirect address 018bfH. 1 references: +-------------------------------------- + + 018b0H: LD (018BFH),HL + +Indirect address 018d8H. 3 references: +-------------------------------------- + + 020c3H: LD HL,(018D8H) + 0211bH: LD (018D8H),HL + 02581H: LD (018D8H),HL + +Indirect address 01c4cH. 4 references: +-------------------------------------- + + 01c65H: LD (01C4CH),A + 01cbdH: LD A,(01C4CH) + 01cc1H: LD (01C4CH),A + 01ce5H: LD (01C4CH),A + +Indirect address 01cabH. 2 references: +-------------------------------------- + + 01c4eH: LD (01CABH),A + 01c5dH: LD (01CABH),A + +Indirect address 02102H. 3 references: +-------------------------------------- + + 020e5H: LD HL,(02102H) + 02117H: LD (02102H),HL + 0263bH: LD HL,(02102H) + +Indirect address 02104H. 5 references: +-------------------------------------- + + 020a3H: LD A,(02104H) + 020d4H: LD A,(02104H) + 02123H: LD (02104H),A + 0214eH: LD A,(02104H) + 02618H: LD A,(02104H) + +Indirect address 02105H. 2 references: +-------------------------------------- + + 02096H: LD HL,(02105H) + 0211fH: LD (02105H),HL + +Indirect address 02a15H. 1 references: +-------------------------------------- + + 02a05H: LD (02A15H),A + +Indirect address 02a2bH. 1 references: +-------------------------------------- + + 02a23H: LD (02A2BH),A + +Indirect address 02a83H. 6 references: +-------------------------------------- + + 01275H: LD A,(02A83H) + 012a1H: LD (02A83H),A + 012a7H: LD (02A83H),A + 01443H: LD (02A83H),A + 01e92H: LD (02A83H),A + 02a5aH: LD (02A83H),A + +Indirect address 02a84H. 2 references: +-------------------------------------- + + 0127bH: LD HL,(02A84H) + 01286H: LD (02A84H),HL + +Indirect address 02c8cH. 4 references: +-------------------------------------- + + 02c36H: LD (02C8CH),HL + 02c96H: LD HL,(02C8CH) + 02ca4H: LD (02C8CH),HL + 02cc2H: LD (02C8CH),HL + +Indirect address 02d74H. 6 references: +-------------------------------------- + + 02edcH: LD (02D74H),A + 02f07H: LD A,(02D74H) + 0309dH: LD (02D74H),A + 030c4H: LD A,(02D74H) + 030cdH: LD (02D74H),A + 0312eH: LD (02D74H),A + +Indirect address 030e2H. 9 references: +-------------------------------------- + + 01e95H: LD (030E2H),A + 03067H: LD A,(030E2H) + 03092H: LD A,(030E2H) + 030e8H: LD A,(030E2H) + 03118H: LD (030E2H),A + 03121H: LD A,(030E2H) + 03157H: LD (030E2H),A + 03174H: LD A,(030E2H) + 03191H: LD (030E2H),A + +Indirect address 030e3H. 7 references: +-------------------------------------- + + 0306eH: LD HL,(030E3H) + 0308bH: LD (030E3H),HL + 030a0H: LD HL,(030E3H) + 030dcH: LD (030E3H),HL + 03108H: LD (030E3H),HL + 0316cH: LD (030E3H),HL + 0317eH: LD HL,(030E3H) + +Indirect address 0326dH. 3 references: +-------------------------------------- + + 031fbH: LD (0326DH),A + 03269H: LD (0326DH),A + 033f4H: LD A,(0326DH) + +Indirect address 032d3H. 7 references: +-------------------------------------- + + 02b89H: LD A,(032D3H) + 031a2H: LD A,(032D3H) + 031b0H: LD (032D3H),A + 031b6H: LD A,(032D3H) + 03248H: LD A,(032D3H) + 0325fH: LD (032D3H),A + 03270H: LD A,(032D3H) + +Indirect address 03400H. 6 references: +-------------------------------------- + + 0345cH: LD A,(03400H) + 03522H: LD (03400H),A + 03561H: LD A,(03400H) + 03565H: LD (03400H),A + 0357cH: LD A,(03400H) + 03b03H: LD (03400H),A + +Indirect address 03401H. 6 references: +-------------------------------------- + + 03506H: LD (03401H),A + 035d6H: LD (03401H),A + 0370dH: LD (03401H),A + 0373aH: LD (03401H),A + 039ceH: LD (03401H),A + 03a96H: LD (03401H),A + +Indirect address 03402H. 9 references: +-------------------------------------- + + 0342bH: LD (03402H),A + 0351eH: LD (03402H),A + 03583H: LD A,(03402H) + 03587H: LD (03402H),A + 035b5H: LD A,(03402H) + 035b9H: LD (03402H),A + 035ecH: LD (03402H),A + 03712H: LD (03402H),A + 03adcH: LD (03402H),A + +Indirect address 0366dH. 9 references: +-------------------------------------- + + 0367aH: LD (0366DH),A + 036f1H: LD (0366DH),A + 036f7H: LD A,(0366DH) + 036fdH: LD (0366DH),A + 03725H: LD A,(0366DH) + 03ab4H: LD (0366DH),A + 03ad1H: LD A,(0366DH) + 03ad7H: LD (0366DH),A + 03aefH: LD A,(0366DH) + +Indirect address 0366eH. 3 references: +-------------------------------------- + + 03675H: LD (0366EH),HL + 0371eH: LD HL,(0366EH) + 03761H: LD HL,(0366EH) + +Indirect address 038a3H. 3 references: +-------------------------------------- + + 03997H: LD (038A3H),HL + 03ae8H: LD HL,(038A3H) + 03b58H: LD HL,(038A3H) + +Indirect address 038a5H. 8 references: +-------------------------------------- + + 038bfH: LD A,(038A5H) + 038ebH: LD A,(038A5H) + 03971H: LD A,(038A5H) + 039c3H: LD (038A5H),A + 03a5aH: LD A,(038A5H) + 03a5eH: LD (038A5H),A + 03a9cH: LD A,(038A5H) + 03b1aH: LD A,(038A5H) + +Indirect address 038a6H. 2 references: +-------------------------------------- + + 039a7H: LD (038A6H),A + 03a8aH: LD A,(038A6H) + +Indirect address 038a7H. 2 references: +-------------------------------------- + + 038d6H: LD (038A7H),A + 03a47H: LD A,(038A7H) + +Indirect address 03c14H. 2 references: +-------------------------------------- + + 03c63H: LD (03C14H),HL + 03c6cH: LD A,(03C14H) + +Indirect address 03c15H. 3 references: +-------------------------------------- + + 03c20H: LD (03C15H),A + 03c5bH: LD A,(03C15H) + 03c80H: LD A,(03C15H) + +Indirect address 03d3dH. 3 references: +-------------------------------------- + + 03d41H: LD (03D3DH),A + 03d99H: LD A,(03D3DH) + 03d9dH: LD (03D3DH),A + +Indirect address 03d3eH. 3 references: +-------------------------------------- + + 03d5fH: LD (03D3EH),A + 03da2H: LD A,(03D3EH) + 03dd6H: LD (03D3EH),A + +Indirect address 03e01H. 4 references: +-------------------------------------- + + 03e07H: LD (03E01H),A + 03e8bH: LD A,(03E01H) + 03eecH: LD A,(03E01H) + 03efcH: LD A,(03E01H) + +Indirect address 03e02H. 3 references: +-------------------------------------- + + 03e18H: LD (03E02H),A + 03e7aH: LD A,(03E02H) + 03ed9H: LD (03E02H),A + +Indirect address 03f32H. 3 references: +-------------------------------------- + + 03f3bH: LD (03F32H),A + 03f49H: LD (03F32H),A + 04006H: LD A,(03F32H) + +Indirect address 03f33H. 3 references: +-------------------------------------- + + 03f38H: LD (03F33H),A + 03ffaH: LD A,(03F33H) + 0403cH: LD (03F33H),A + +Indirect address 03f34H. 2 references: +-------------------------------------- + + 03f65H: LD (03F34H),A + 03fcbH: LD A,(03F34H) + +Indirect address 04074H. 2 references: +-------------------------------------- + + 0407bH: LD (04074H),A + 0411cH: LD A,(04074H) + +Indirect address 04075H. 2 references: +-------------------------------------- + + 040a3H: LD (04075H),A + 04105H: LD A,(04075H) + +Indirect address 04153H. 4 references: +-------------------------------------- + + 04170H: LD (04153H),A + 04179H: LD A,(04153H) + 0418eH: LD A,(04153H) + 041e8H: LD (04153H),A + +Indirect address 04900H. 1 references: +-------------------------------------- + + 01dcbH: LD HL,(04900H) + +Indirect address 04902H. 2 references: +-------------------------------------- + + 01de5H: LD HL,(04902H) + 01dfeH: LD HL,(04902H) + +Indirect address 04905H. 1 references: +-------------------------------------- + + 02912H: LD A,(04905H) + +Indirect address 04908H. 4 references: +-------------------------------------- + + 01214H: LD (04908H),HL + 02972H: LD HL,(04908H) + 0297dH: LD HL,(04908H) + 02fa2H: LD HL,(04908H) + +Indirect address 0490aH. 5 references: +-------------------------------------- + + 01217H: LD (0490AH),HL + 012b4H: LD HL,(0490AH) + 01417H: LD HL,(0490AH) + 02994H: LD (0490AH),HL + 02f92H: LD HL,(0490AH) + +Indirect address 04a0eH. 2 references: +-------------------------------------- + + 012f3H: LD (04A0EH),HL + 01cdfH: LD HL,(04A0EH) + +Indirect address 04a10H. 3 references: +-------------------------------------- + + 012beH: LD HL,(04A10H) + 014f8H: LD HL,(04A10H) + 01c93H: LD HL,(04A10H) + +Indirect address 04a12H. 1 references: +-------------------------------------- + + 012e8H: LD A,(04A12H) + +Indirect address 04ab3H. 1 references: +-------------------------------------- + + 01c8fH: LD HL,(04AB3H) + +Indirect address 04ab5H. 1 references: +-------------------------------------- + + 01c9cH: LD HL,(04AB5H) + +Indirect address 04dd4H. 8 references: +-------------------------------------- + + 02b3dH: LD A,(04DD4H) + 02b56H: LD A,(04DD4H) + 02b7cH: LD A,(04DD4H) + 02be3H: LD A,(04DD4H) + 02c8eH: LD A,(04DD4H) + 02d17H: LD (04DD4H),A + 02dbcH: LD (04DD4H),A + 02eacH: LD (04DD4H),A + +Indirect address 04dd6H. 1 references: +-------------------------------------- + + 02e57H: LD (04DD6H),HL + +Indirect address 04e4cH. 1 references: +-------------------------------------- + + 01947H: LD (04E4CH),HL + +Indirect address 04e4eH. 2 references: +-------------------------------------- + + 01adeH: LD HL,(04E4EH) + 03044H: LD HL,(04E4EH) + +Indirect address 04e80H. 4 references: +-------------------------------------- + + 0332aH: LD HL,(04E80H) + 03340H: LD HL,(04E80H) + 03373H: LD HL,(04E80H) + 0338aH: LD HL,(04E80H) + +Indirect address 04e84H. 3 references: +-------------------------------------- + + 01996H: LD HL,(04E84H) + 0222bH: LD HL,(04E84H) + 0250aH: LD HL,(04E84H) + +Indirect address 04e8aH. 1 references: +-------------------------------------- + + 024beH: LD HL,(04E8AH) + +Indirect address 04e90H. 1 references: +-------------------------------------- + + 02584H: LD HL,(04E90H) + +Indirect address 04e92H. 3 references: +-------------------------------------- + + 01913H: LD HL,(04E92H) + 01a21H: LD HL,(04E92H) + 01b73H: LD HL,(04E92H) + +Indirect address 04e94H. 23 references: +--------------------------------------- + + 01789H: LD HL,(04E94H) + 0184dH: LD HL,(04E94H) + 0192cH: LD HL,(04E94H) + 01936H: LD HL,(04E94H) + 01a3eH: LD HL,(04E94H) + 01a42H: LD (04E94H),HL + 01a4fH: LD HL,(04E94H) + 01b79H: LD (04E94H),HL + 01e7fH: LD HL,(04E94H) + 01e83H: LD (04E94H),HL + 01f57H: LD HL,(04E94H) + 021d9H: LD IX,(04E94H) + 023bcH: LD HL,(04E94H) + 023c3H: LD (04E94H),HL + 023e3H: LD HL,(04E94H) + 023ecH: LD (04E94H),HL + 02411H: LD HL,(04E94H) + 02466H: LD HL,(04E94H) + 02548H: LD HL,(04E94H) + 02789H: LD HL,(04E94H) + 027e7H: LD HL,(04E94H) + 02986H: LD HL,(04E94H) + 02bc3H: LD HL,(04E94H) + +Indirect address 04e96H. 5 references: +-------------------------------------- + + 01987H: LD (04E96H),HL + 02529H: LD HL,(04E96H) + 02539H: LD (04E96H),HL + 0255bH: LD HL,(04E96H) + 02569H: LD (04E96H),HL + +Indirect address 04e98H. 9 references: +-------------------------------------- + + 01981H: LD (04E98H),HL + 01f0eH: LD HL,(04E98H) + 01f15H: LD (04E98H),HL + 01f6bH: LD HL,(04E98H) + 01f8aH: LD (04E98H),HL + 01fb1H: LD (04E98H),HL + 01fcdH: LD HL,(04E98H) + 01fecH: LD (04E98H),HL + 02028H: LD (04E98H),HL + +Indirect address 04e9aH. 3 references: +-------------------------------------- + + 0197bH: LD (04E9AH),HL + 01f1aH: LD HL,(04E9AH) + 01f25H: LD (04E9AH),HL + +Indirect address 05040H. 1 references: +-------------------------------------- + + 01f37H: LD (05040H),HL + +Indirect address 05047H. 1 references: +-------------------------------------- + + 01f63H: LD (05047H),A + +Indirect address 0504dH. 1 references: +-------------------------------------- + + 01b45H: LD HL,(0504DH) + +Indirect address 0504fH. 2 references: +-------------------------------------- + + 01ab8H: LD HL,(0504FH) + 01d32H: LD HL,(0504FH) + +Indirect address 05051H. 32 references: +--------------------------------------- + + 012c8H: LD (05051H),HL + 0173aH: LD HL,(05051H) + 01792H: LD HL,(05051H) + 017a0H: LD HL,(05051H) + 01b35H: LD HL,(05051H) + 01b5cH: LD (05051H),HL + 01c38H: LD (05051H),HL + 01c7aH: LD (05051H),HL + 01d79H: LD (05051H),HL + 01fbaH: LD (05051H),HL + 01fcaH: LD (05051H),HL + 02908H: LD (05051H),HL + 0295cH: LD (05051H),HL + 0296fH: LD (05051H),HL + 0297aH: LD (05051H),HL + 029deH: LD HL,(05051H) + 02a0eH: LD (05051H),HL + 02ab7H: LD (05051H),HL + 02b23H: LD (05051H),HL + 02b50H: LD (05051H),HL + 02c25H: LD (05051H),HL + 02c65H: LD (05051H),HL + 02cccH: LD HL,(05051H) + 02cd5H: LD (05051H),HL + 02ce0H: LD HL,(05051H) + 02cf0H: LD (05051H),HL + 02d12H: LD (05051H),HL + 02ffeH: LD (05051H),HL + 0300bH: LD (05051H),HL + 03305H: LD (05051H),HL + 03318H: LD (05051H),HL + 033b2H: LD (05051H),HL + +Indirect address 05053H. 2 references: +-------------------------------------- + + 01f72H: LD A,(05053H) + 01fc0H: LD A,(05053H) + +Indirect address 05056H. 2 references: +-------------------------------------- + + 01992H: LD (05056H),A + 01b5fH: LD A,(05056H) + +Indirect address 05057H. 1 references: +-------------------------------------- + + 0141bH: LD HL,(05057H) + +Indirect address 05059H. 4 references: +-------------------------------------- + + 0145fH: LD (05059H),A + 02d1dH: LD A,(05059H) + 02d47H: LD (05059H),A + 02d64H: LD (05059H),A + +Indirect address 0505aH. 3 references: +-------------------------------------- + + 02d24H: LD HL,(0505AH) + 02d38H: LD (0505AH),HL + 02d5fH: LD (0505AH),HL + + +End of reference file for "SA-5510.bin" + diff --git a/software/DIS/SA-5510/dz80.ini b/software/DIS/SA-5510/dz80.ini new file mode 120000 index 0000000..4617f95 --- /dev/null +++ b/software/DIS/SA-5510/dz80.ini @@ -0,0 +1 @@ +SA-5510.ini \ No newline at end of file diff --git a/software/DIS/XPATCH/XPATCH-5510.asm b/software/DIS/XPATCH/XPATCH-5510.asm new file mode 100644 index 0000000..244cab5 --- /dev/null +++ b/software/DIS/XPATCH/XPATCH-5510.asm @@ -0,0 +1,1894 @@ +; Disassembly of the file "XPATCH-5510.bin" +; +; CPU Type: Z80 +; +; Created with dZ80 2.1 +; +; on Sunday, 04 of April 2021 at 03:43 PM +; +PRTC EQU 0FEH +PRTD EQU 0FFH +GETL EQU 00003H +LETNL EQU 00006H +NL EQU 00009H +PRNTS EQU 0000CH +PRNTT EQU 0000FH +PRNT EQU 00012H +MSG EQU 00015H +MSGX EQU 00018H +GETKY EQU 0001BH +BRKEY EQU 0001EH +?WRI EQU 00021H +?WRD EQU 00024H +?RDI EQU 00027H +?RDD EQU 0002AH +?VRFY EQU 0002DH +MELDY EQU 00030H +?TMST EQU 00033H +TIMRD EQU 0003BH +BELL EQU 0003EH +XTEMP EQU 00041H +MSTA EQU 00044H +MSTP EQU 00047H +MONIT EQU 00000H +SS EQU 00089H +ST1 EQU 00095H +HLHEX EQU 00410H +_2HEX EQU 0041FH +?MODE EQU 0074DH +?KEY EQU 008CAH +PRNT3 EQU 0096CH +?ADCN EQU 00BB9H +?DACN EQU 00BCEH +?DSP EQU 00DB5H +?BLNK EQU 00DA6H +?DPCT EQU 00DDCH +PRTHL EQU 003BAH +PRTHX EQU 003C3H +ASC EQU 003DAH +HEX EQU 003F9H +DPCT EQU 00DDCH +DLY12 EQU 00DA7H +DLY12A EQU 00DAAH +?RSTR1 EQU 00EE6H +MOTOR EQU 006A3H +CKSUM EQU 0071AH +GAP EQU 0077AH +WTAPE EQU 00485H +MSTOP EQU 00700H +TAPECOPY EQU 011FDH +COLDSTRT EQU 01200H +WARMSTRTMON EQU 01250H +CMDWORDTBL EQU 015A8H +CMDJMPTBL EQU 01BB2H +CMTBUF EQU 02E33H +CMTFNAME EQU 02E34H +CMDREMDATA EQU 01C3CH +SYNTAXERR EQU 013ABH +CMDREAD EQU 02D12H +CMDLIST EQU 01C4DH +CMDRUN EQU 01E91H +CMDNEW EQU 01C42H +CMDPRINT EQU 02B0DH +CMDLET EQU 01D6AH +CMDFOR EQU 01F2BH +CMDIF EQU 021ADH +CMDTHEN EQU 013ABH +CMDGOTO EQU 01EA6H +CMDGOSUB EQU 01EC7H +CMDRETURN EQU 01EF8H +CMDNEXT EQU 01FC0H +CMDSTOP EQU 01D2CH +CMDEND EQU 01D15H +CMDON EQU 0203EH +CMDLOAD EQU 02D75H +CMDSAVE EQU 02D82H +CMDVERIFY EQU 02EB3H +CMDPOKE EQU 02191H +CMDDIM EQU 02080H +CMDDEFFN EQU 02201H +CMDINPUT EQU 02BFFH +CMDRESTORE EQU 01D4DH +CMDCLS EQU 021A6H +CMDMUSIC EQU 02269H +CMDTEMPO EQU 02282H +CMDUSRN EQU 02942H +CMDWOPEN EQU 02D9FH +CMDROPEN EQU 02D92H +CMDCLOSE EQU 02DADH +CMDMON EQU 028B6H +CMDLIMIT EQU 02967H +CMDCONT EQU 029CEH +CMDGET EQU 02902H +CMDINP EQU 029FEH +CMDOUT EQU 02A1CH +CMDCURSOR EQU 028B9H +CMDSET EQU 02AA6H +CMDRESET EQU 02AAAH +CMDAUTO EQU 02A2FH +CMDCOPY EQU 033ABH +CMDPAGE EQU 032D4H +OVFLERR EQU 013AEH +ILDATERR EQU 013B1H +DATMISERR EQU 013B4H +STRLENERR EQU 013B7H +MEMERR EQU 013BAH +LINELENERR EQU 013C0H +GOSUBERR EQU 013C3H +FORNEXTERR EQU 013C6H +FUNCERR EQU 013C9H +NEXTFORERR EQU 013CCH +RETGOSBERR EQU 013CFH +UNDEFFNERR EQU 013D2H +LINEERR EQU 013D5H +CONTERR EQU 013D8H +BADWRERR EQU 013DBH +CMDSTMTERR EQU 013DEH +READDATAERR EQU 013E1H +OPENERR EQU 013E4H +UNKNWNERR EQU 013E7H +OUTFILEERR EQU 013EAH +PRTNRDYERR EQU 013EDH +PRTHWERR EQU 013F0H +PRTPAPERERR EQU 013F3H +CHKSUMERR EQU 013F6H +TITLEMSG EQU 01347H +COPYRMSG EQU 01364H +READYMSG EQU 01384H +ERRORMSG EQU 0138AH +INMSG EQU 01391H +BREAKMSG EQU 01395H +BYTESMSG EQU 0139CH +ERRCODE EQU 013A3H +MSGNL EQU 01332H +UNUSEDTBL1 EQU 0167BH +UNUSEDTBL2 EQU 0167DH +WARMSTRT EQU 0124EH +OPERATORTBL EQU 0167FH +STRTONUM EQU 017FCH +GETNUM EQU 01E88H +SKIPSPACE EQU 0173FH +INCSKIPSPCE EQU 0173EH +EXECHL EQU 0177BH +EXECNOTCHR EQU 01795H +MATCHCHR EQU 017A3H +LINEBUFR EQU 0490DH +ATRB EQU 010F0H +NAME EQU 010F1H +SIZE EQU 01102H +DTADR EQU 01104H +EXADR EQU 01106H +COMNT EQU 01108H +SWPW EQU 01164H +KDATW EQU 0116EH +KANAF EQU 01170H +DSPXY EQU 01171H +MANG EQU 01173H +MANGE EQU 01179H +PBIAS EQU 0117AH +ROLTOP EQU 0117BH +MGPNT EQU 0117CH +PAGETP EQU 0117DH +ROLEND EQU 0117FH +FLASH EQU 0118EH +SFTLK EQU 0118FH +REVFLG EQU 01190H +SPAGE EQU 01191H +FLSDT EQU 01192H +STRGF EQU 01193H +DPRNT EQU 01194H +TMCNT EQU 01195H +SUMDT EQU 01197H +CSMDT EQU 01199H +AMPM EQU 0119BH +TIMFG EQU 0119CH +SWRK EQU 0119DH +TEMPW EQU 0119EH +ONTYO EQU 0119FH +OCTV EQU 011A0H +RATIO EQU 011A1H +BUFER EQU 011A3H +PRGSTART EQU 0505CH + + ORG PRGSTART + +L505C: NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP +L506B: NOP + NOP +L506D: LD BC,01B35H + PUSH BC + CALL L5098 + JP Z,L5150 + LD DE,L507D + JP MSGNL + +L507D: DB "RANGE ERROR" + DB 00DH +L5089: DB "OVERFLOW ERROR",00DH +L5098: LD DE,MONIT + LD (05063H),DE + DEC DE + DEC DE + LD (05065H),DE + CALL 017D5H + OR C + INC DE + LD A,02DH + CP (HL) + JR NZ,L50C0 ; (+011H) + LD (05063H),DE + INC HL + CALL 048A0H + CPL + JR Z,L50D2 ; (+018H) + LD (05065H),DE + JR L50D2 ; (+012H) + +L50C0: LD A,E + OR D + JR Z,L50CC ; (+008H) + LD (05063H),DE + LD (05065H),DE +L50CC: LD A,02FH + CP (HL) + JR NZ,L50D2 ; (+001H) + INC HL +L50D2: CALL 048A0H + INC L + JR NZ,L50DB ; (+003H) + LD DE,0000AH +L50DB: LD (05067H),DE + CALL 048A0H + NOP + JR NZ,L50E8 ; (+003H) + LD DE,0000AH +L50E8: LD (05069H),DE + LD (05051H),HL + LD BC,(05063H) + LD HL,(05065H) + OR A + SBC HL,BC +L50F9: JP C,SYNTAXERR + CALL L52BB + JR C,L50F9 ; (-008H) + CALL 01773H + JR Z,L5118 ; (+012H) + EX DE,HL + CALL 01867H + LD HL,(05067H) + EX DE,HL + SBC HL,DE + JR C,L5118 ; (+006H) + CALL L5118 +L5115: XOR A + INC A + RET + +L5118: LD BC,(05065H) + INC BC + CALL L52BB + JR NC,L5136 ; (+014H) + EX DE,HL + CALL 01867H + CALL L526C + EX DE,HL + CCF + JR C,L5149 ; (+01cH) +L512D: LD DE,L5089 + CALL MSG + JP 01438H + +L5136: PUSH DE + CALL 01867H + EX DE,HL + EX (SP),HL + CALL 01867H + CALL L526C + EX DE,HL + POP DE + JR C,L512D ; (-019H) + CALL 01773H +L5149: LD (L506B),HL + JR NC,L5115 ; (-039H) + XOR A + RET + +L5150: CALL 01AF1H + LD HL,(01958H) + PUSH HL + POP DE +L5158: PUSH HL + OR A + SBC HL,DE + JP C,MEMERR + LD BC,00080H + SBC HL,BC + POP HL + JR NC,L517E ; (+017H) + LD BC,00100H + EX DE,HL + CALL 01888H + EX DE,HL + ADD HL,BC + PUSH HL + PUSH DE + CALL 018EAH + LD HL,(04E94H) + ADD HL,BC + LD (04E94H),HL + POP DE + POP HL +L517E: PUSH DE + LD A,(HL) + LDI + OR (HL) + JR Z,L519C ; (+017H) + LDI + LD A,(HL) + LDI + LD B,(HL) + LD C,A + LDI + INC BC + CALL L51D1 + POP HL + LD C,(HL) + LD (HL),E + INC HL + LD B,(HL) + LD (HL),D + PUSH BC + POP HL + JR L5158 ; (-044H) + +L519C: LD (DE),A + INC DE + EX DE,HL + LD (04E4EH),HL + POP HL + CALL 0195AH + LD BC,(05063H) + CALL L52BB + LD BC,(05067H) +L51B1: PUSH HL + CALL 01867H + JR Z,L51CF ; (+018H) + PUSH HL + LD HL,(05065H) + SBC HL,DE + POP HL + JR C,L51CF ; (+00fH) + EX (SP),HL + INC HL + INC HL + LD (HL),C + INC HL + LD (HL),B + LD HL,(05069H) + ADD HL,BC + PUSH HL + POP BC + POP HL + JR L51B1 ; (-01eH) + +L51CF: POP HL + RET + +L51D1: CALL L52D5 + RET Z + CP 080H + JR NZ,L51D1 ; (-008H) + CALL L52D5 + CP 08CH + JR Z,L51EC ; (+00cH) + CP 08DH + JR Z,L51EC ; (+008H) + CP 08EH + JR Z,L51EC ; (+004H) + CP 09CH + JR NZ,L51D1 ; (-01bH) +L51EC: CALL L52D5 + DEC DE + DEC HL + SUB 030H + CP 00AH + JR NC,L51D1 ; (-026H) + CALL L5204 + LD A,02CH + CP (HL) + JR NZ,L51D1 ; (-02eH) + LD (DE),A + INC DE + INC HL + JR L51EC ; (-018H) + +L5204: PUSH DE + PUSH BC + CALL 017F6H + POP BC + CALL L526C + EX (SP),HL + JR NC,L523C ; (+02cH) + PUSH DE + PUSH HL + CALL NL + EX DE,HL + LD DE,L5255 + LD A,00DH + LD (DSPXY),A + CALL L5244 + LD DE,L525C + CALL MSG + XOR A + LD (DSPXY),A + LD D,B + LD E,C + CALL L526C + EX DE,HL + LD DE,L5257 + CALL L5244 + POP HL + LD (HL),070H + INC HL + POP DE +L523C: EX DE,HL + PUSH BC + CALL 01802H + POP BC + POP HL + RET + +L5244: PUSH BC + CALL MSG + LD DE,L505C + PUSH DE + CALL STRTONUM + POP DE + CALL MSG + POP BC + RET + +L5255: DB 03AH + DB 020H +L5257: DB "LINE" + DB 00DH +L525C: DB " DOES NOT EXIST" + DB 00DH +L526C: PUSH BC + PUSH HL + PUSH DE + XOR A + LD B,D + LD C,E + LD HL,(05065H) + SBC HL,DE + JR C,L52AB ; (+032H) + EX DE,HL + LD DE,(05063H) + SBC HL,DE + JR C,L52AB ; (+029H) + LD B,D + LD C,E + CALL L52BB + JR C,L52AB ; (+022H) + POP BC + LD DE,(05067H) + PUSH DE +L528F: CALL 01867H + JR Z,L52A7 ; (+013H) + EX DE,HL + XOR A + SBC HL,BC + JR Z,L52B2 ; (+018H) + JR NC,L52A7 ; (+00bH) + EX DE,HL + EX (SP),HL + LD DE,(05069H) + ADD HL,DE + EX (SP),HL + JR NC,L528F ; (-017H) + CPL +L52A7: OR A + CCF + JR L52AC ; (+001H) + +L52AB: XOR A +L52AC: POP DE +L52AD: LD D,B + LD E,C + POP HL + POP BC + RET + +L52B2: LD H,B + LD L,C + POP BC + SBC HL,BC + SCF + CCF + JR L52AD ; (-00eH) + +L52BB: LD HL,(01958H) + PUSH HL + JR L52C3 ; (+002H) + +L52C1: EX (SP),HL + EX DE,HL +L52C3: PUSH HL + CALL 01867H + JR Z,L52D1 ; (+008H) + EX DE,HL + SBC HL,BC + POP HL + JR C,L52C1 ; (-00eH) + POP DE + RET + +L52D1: POP HL + POP DE + SCF + RET + +L52D5: LD A,(HL) + LD (DE),A + CP 020H + INC HL + INC DE + JR Z,L52D5 ; (-008H) + CP 00DH + RET Z + CP 022H + RET NZ +L52E3: LD A,(HL) + LD (DE),A + INC HL + INC DE + CP 00DH + RET Z + CP 022H + JR NZ,L52E3 ; (-00bH) + OR A + RET + +L52F0: CALL 03327H + LD HL,(04AB3H) + CALL 018B0H + OR C + INC DE + PUSH HL + POP DE +L52FD: PUSH DE + LD A,(HL) + LDI + OR (HL) + JR Z,L532B ; (+027H) + LDI + LD A,(HL) + LDI + LD B,(HL) + LD C,A + LDI + PUSH HL + LD HL,(04AB5H) + OR A + SBC HL,BC + POP HL + JR C,L531C ; (+005H) + CALL L5338 + JR L5323 ; (+007H) + +L531C: LD A,(HL) + LDI + CP 00DH + JR NZ,L531C ; (-007H) +L5323: EX (SP),HL + LD (HL),E + INC HL + LD (HL),D + EX (SP),HL + POP AF + JR L52FD ; (-02eH) + +L532B: LDI + EX DE,HL + LD (04E4EH),HL + POP HL + CALL 0195AH + JP 01B35H + +L5338: PUSH DE +L5339: CALL SKIPSPACE + CALL L52D5 + JR NZ,L5343 ; (+002H) + POP BC + RET + +L5343: CP 080H + JR NZ,L5339 ; (-00eH) + CP (HL) + JR NZ,L5339 ; (-011H) + DEC DE + CALL 0174EH + INC HL + CP 03AH + JR Z,L5339 ; (-01aH) + EX (SP),HL + OR A + SBC HL,DE + POP HL + DEC DE + LD A,00DH + LD (DE),A + INC DE + RET C + DEC DE + DEC DE + DEC DE + DEC DE + RET + +L5363: XOR A + LD (L5465),A + CALL L536D + JP WARMSTRT + +L536D: LD A,(0504EH) + OR A + JP NZ,SYNTAXERR + CALL 0193BH + RET Z + LD DE,LINEBUFR + PUSH DE + CALL 0150AH + POP HL + CALL L546D + LD (L5467),A + LD DE,BUFER + LDIR + LD A,(L5465) + CP 001H + JR NZ,L53B7 ; (+025H) + LD DE,L5446 + CALL LETNL + CALL MSG + LD A,(DPRNT) + PUSH AF + LD DE,LINEBUFR + PUSH DE + CALL GETL + POP HL + XOR A + LD B,A + POP AF + LD C,A + ADD HL,BC + CALL L546D + LD DE,011CCH + LD (L5468),A + LDIR +L53B7: LD A,(L5467) + LD B,A + LD HL,(01958H) +L53BE: PUSH BC + PUSH HL + CALL 01867H + POP HL + JR NZ,L53D3 ; (+00dH) + CALL LETNL + POP BC + XOR A + RET + +L53CC: POP BC + POP DE + LD HL,(04A0EH) + JR L53BE ; (-015H) + +L53D3: CALL 018F2H + LD DE,04A0EH + CALL 018A5H + CALL 014F8H + POP BC + CALL BRKEY + JP Z,WARMSTRT + LD DE,BUFER + LD HL,0490FH +L53EC: LD A,(HL) + CP 020H + INC HL + JR NZ,L53EC ; (-006H) +L53F2: PUSH DE + PUSH BC + DEC HL +L53F5: INC HL + LD A,(HL) + CP 000H + JR Z,L53F5 ; (-006H) + CP 00DH + JR Z,L53CC ; (-033H) + EX DE,HL + CP (HL) + EX DE,HL + JR NZ,L53F5 ; (-00fH) + LD (L5469),HL +L5407: INC DE + DEC B + JR Z,L5423 ; (+018H) + LD A,(DE) + CP 020H + JR Z,L5407 ; (-009H) +L5410: INC HL + LD A,(HL) + CP 020H + JR Z,L5410 ; (-006H) + CP 00DH + JR Z,L53CC ; (-04eH) + EX DE,HL + CP (HL) + EX DE,HL + JR Z,L5407 ; (-018H) + POP BC + POP DE + JR L53F2 ; (-031H) + +L5423: INC HL + LD (L546B),HL + LD DE,LINEBUFR + CALL LETNL + CALL L5589 + POP BC + POP DE + LD A,(L5465) + OR A + RET NZ + CALL L543C + JR L53F2 ; (-04aH) + +L543C: CALL 03302H + CALL BRKEY + JP Z,L57D8 + RET + +L5446: DB " CHANGE TO? " + DB 00DH +L5453: DB "CHANGE IT? (Y/N) " + DB 00DH +L5465: DB 000H +L5466: DB 000H +L5467: DB 001H +L5468: DB 000H +L5469: DB 000H + DB 000H +L546B: DB 000H + DB 000H +L546D: LD A,(HL) + CP 020H + JP C,WARMSTRT + CP 022H + JR NZ,L5478 ; (+001H) + INC HL +L5478: CALL 018FDH + LD A,C + CP 028H + JP NC,ILDATERR + INC C + RET + +L5483: LD A,(HL) + CP 021H + JR NZ,L548A ; (+002H) + INC HL + XOR A +L548A: LD (L5466),A + RET + +L548E: LD A,001H + LD (L5465),A + CALL L5483 + CALL L536D +L5499: JP Z,WARMSTRT + CALL LETNL + LD A,(L5466) + OR A + JR NZ,L54BC ; (+017H) + LD DE,L5453 + CALL L59E3 + JR Z,L54BC ; (+00fH) + LD HL,(L546B) + LD DE,BUFER + LD A,(L5467) + LD B,A + CALL L53F2 + JR L5499 ; (-023H) + +L54BC: CALL 014F8H + LD HL,(L546B) + LD BC,(05469H) + OR A + SBC HL,BC + LD A,(L5468) + CP L + JR Z,L552E ; (+05fH) + JR C,L5517 ; (+046H) + PUSH BC + SUB L + LD C,A + LD B,000H + PUSH BC + LD HL,LINEBUFR + CALL 018FDH + INC C + LD A,C + POP BC + PUSH AF + ADD A,C + LD C,A + CP 050H + JR C,L5501 ; (+01aH) + LD DE,L55B3 + CALL LETNL + CALL MSG + POP AF + POP BC + LD HL,(04A0EH) + LD A,(L5467) + LD B,A + LD C,000H + LD DE,BUFER + JP L5565 + +L5501: LD HL,LINEBUFR + PUSH HL + ADD HL,BC + EX DE,HL + POP HL + POP AF + LD C,A + ADD HL,BC + POP BC + PUSH HL + OR A + SBC HL,BC + LD B,H + LD C,L + POP HL + LDDR + JR L552E ; (+017H) + +L5517: LD H,A + LD A,L + SUB H + LD L,A + LD H,000H + PUSH HL + LD HL,(L546B) + CALL 018FDH + INC C + POP DE + PUSH HL + OR A + SBC HL,DE + EX DE,HL + POP HL + LDIR +L552E: LD HL,011CCH + LD DE,(05469H) + LD A,(L5468) + OR A + JR Z,L5540 ; (+005H) + LD C,A + LD B,000H + LDIR +L5540: CALL 0146AH +L5543: LD HL,(04A10H) + CALL 018B0H + OR C + INC DE + CALL 01302H + CALL 018B3H + LD D,E + LD D,L + LD A,(L5465) + CP 001H + RET NZ + CALL 012F3H + LD DE,LINEBUFR + CALL MSGX + CALL LETNL +L5565: LD BC,L5499 + PUSH BC + LD DE,BUFER + LD HL,(L5469) + LD A,(L5468) + ADD A,L + LD L,A + LD A,(L5467) + LD B,A + LD C,000H + PUSH HL + LD HL,(04A0EH) + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + LD (04A0EH),HL + POP HL + JP L53F2 + +L5589: PUSH DE + LD DE,L55AB + CALL MSG + POP DE + PUSH HL + CALL 00FB1H + CALL MSGX + LD A,(L5469) + ADD A,01BH + LD C,A + LD B,000H + XOR A + ADC HL,BC + LD A,0C2H + LD (HL),A + POP HL + CALL LETNL + RET + +L55AB: LD DE,01211H + LD (DE),A + DEC C + NOP + NOP + NOP +L55B3: DB "LINE IS TOO LONG!",00DH +L55C5: LD A,002H + LD (L5465),A + CALL L5483 + CALL L536D +L55D0: JP Z,WARMSTRT + CALL LETNL + LD A,(L5466) + OR A + JR NZ,L55E9 ; (+00dH) + LD DE,L55F8 + CALL L59E3 + JR Z,L55E9 ; (+005H) + LD HL,(04A0EH) + JR L55EC ; (+003H) + +L55E9: CALL L5543 +L55EC: LD DE,BUFER + LD A,(L5467) + LD B,A + CALL L53BE + JR L55D0 ; (-028H) + +L55F8: DB "DELETE THIS LINE (Y/N)? ",00DH +L5611: NOP +L5612: NOP + NOP + NOP + NOP +L5616: XOR A + LD (L5611),A + CALL EXECNOTCHR + CPL + DEC HL + LD D,(HL) + CALL EXECNOTCHR + LD D,B + XOR E + INC DE + LD A,001H + LD (L5611),A + CALL 03327H + LD HL,(04AB3H) + CALL 018B0H + OR C + INC DE + PUSH HL + CALL 01AF1H + POP HL +L563B: LD A,(HL) + INC HL + OR (HL) + JP Z,L574F + INC HL + LD C,(HL) + INC HL + LD B,(HL) + PUSH HL + OR A + LD HL,(04AB5H) + SBC HL,BC + POP HL + JP C,L574F + PUSH BC + POP IY +L5653: INC HL +L5654: LD A,(HL) + INC HL + CP 020H + JR Z,L5654 ; (-006H) + CP 00DH + JR Z,L563B ; (-023H) + CP 080H + JR C,L5676 ; (+014H) + JR NZ,L5654 ; (-010H) + CP (HL) + JR Z,L566C ; (+005H) + CALL L588A + JR NZ,L5654 ; (-018H) +L566C: CALL 0174EH + INC HL + CP 00DH + JR Z,L563B ; (-039H) + JR L5654 ; (-022H) + +L5676: CP 022H + JR NZ,L5686 ; (+00cH) +L567A: LD A,(HL) + INC HL + CP 00DH + JR Z,L563B ; (-045H) + CP 022H + JR NZ,L567A ; (-00aH) + JR L5654 ; (-032H) + +L5686: DEC HL + CALL 02640H + JR NC,L5653 ; (-039H) + LD A,046H + CP E + JR NZ,L5696 ; (+005H) + LD A,04EH + CP D + JR Z,L5653 ; (-043H) +L5696: LD BC,MONIT + LD A,(HL) + CP 024H + JR NZ,L56A1 ; (+003H) + LD C,006H + INC HL +L56A1: LD (05614H),DE + LD (L5612),HL + LD A,(HL) + CP 028H + JR Z,L56B3 ; (+006H) + LD A,C + ADD A,004H + LD C,A + JR L56CB ; (+018H) + +L56B3: INC HL +L56B4: LD A,(HL) + INC HL + CP 028H + JR NZ,L56C1 ; (+007H) +L56BA: LD A,(HL) + INC HL + CP 029H + JR NZ,L56BA ; (-006H) + LD A,(HL) +L56C1: CP 02CH + JR Z,L56CB ; (+006H) + CP 029H + JR NZ,L56B4 ; (-015H) + INC C + INC C +L56CB: LD HL,04E86H + ADD HL,BC + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + LD DE,(05614H) +L56D7: LD A,(HL) + INC HL + CP E + JR C,L56E6 ; (+00aH) + JR NZ,L56F2 ; (+014H) + LD A,(HL) + CP D + JR C,L56E9 ; (+007H) + JR Z,L5705 ; (+021H) + JR L56F2 ; (+00cH) + +L56E6: OR (HL) + JR Z,L56F2 ; (+009H) +L56E9: INC HL + LD C,(HL) + LD B,000H + INC HL + ADD HL,BC + ADD HL,BC + JR L56D7 ; (-01bH) + +L56F2: DEC HL + EX DE,HL + LD BC,GETL + CALL 019C0H + LD HL,(05614H) + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + XOR A + JR L570B ; (+006H) + +L5705: INC HL + LD A,(HL) + CP PRTD + JR Z,L573C ; (+031H) +L570B: INC A + LD (HL),A + PUSH HL + LD B,A +L570F: INC HL + LD E,(HL) + INC HL + LD D,(HL) + PUSH HL + PUSH IY + POP HL + OR A + SBC HL,DE + POP HL + JR C,L5726 ; (+009H) + JR NZ,L5724 ; (+005H) + DEC A + POP HL + LD (HL),A + JR L5736 ; (+012H) + +L5724: DJNZ L570F ; (-017H) +L5726: POP AF + DEC HL + EX DE,HL + LD BC,00002H + CALL 019C0H + EX DE,HL + PUSH IY + POP BC + LD (HL),C + INC HL + LD (HL),B +L5736: LD HL,(L5612) + JP L5654 + +L573C: LD A,E + CALL L57DE + LD A,D + CALL L57DE + LD DE,L5807 + CALL L57FC + CALL L57ED + JR L5736 ; (-019H) + +L574F: LD IX,04E84H +L5753: CALL L57FC + INC IX + INC IX + PUSH IX + POP HL + LD A,L + CP 092H + JR NC,L57D8 ; (+076H) + SUB 086H + LD B,000H + LD C,A + RLC C + RLC C + LD HL,L5820 + CP 005H + JR C,L5775 ; (+003H) + LD HL,L5807 +L5775: ADD HL,BC + PUSH HL + POP IY + LD L,(IX+000H) + LD H,(IX+001H) +L577F: PUSH IY + POP DE + LD A,(HL) + LD B,A + INC HL + OR (HL) + JR Z,L5753 ; (-035H) + LD A,B + CALL L57DE + LD A,(HL) + CP 020H + JR Z,L5799 ; (+008H) + CALL L57DE + CALL L57ED + JR L57A1 ; (+008H) + +L5799: CALL L57ED + LD A,020H + CALL L57DE +L57A1: LD A,(DE) + CP 024H + LD A,020H + CALL NZ,L57DE + INC HL + LD B,(HL) + INC HL +L57AC: PUSH BC + LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH HL + EX DE,HL + LD DE,LINEBUFR + PUSH DE + CALL STRTONUM + LD C,020H + EX DE,HL +L57BD: LD A,L + CP 015H + JR NC,L57C6 ; (+004H) + LD (HL),C + INC HL + JR L57BD ; (-009H) + +L57C6: LD (HL),00DH + POP DE + CALL L57ED + POP HL + CALL L543C + POP BC + DJNZ L57AC ; (-027H) + CALL L57FC + JR L577F ; (-059H) + +L57D8: CALL 01AF1H + JP WARMSTRT + +L57DE: PUSH BC + LD B,A + CALL PRNT + LD A,(L5611) + OR A + LD A,B + POP BC + RET Z + JP 03291H + +L57ED: PUSH BC + LD B,A + CALL MSG + LD A,(L5611) + OR A + LD A,B + POP BC + RET Z + JP 031B4H + +L57FC: CALL LETNL + LD A,(L5611) + OR A + RET Z + JP 031A7H + +L5807: DB " HAS MORE THAN 255 REFS" + DB 00DH + DB 024H +L5820: DB 028H + DB 02CH + DB 029H + DB 020H + DB 00DH + DB 00DH + DB 00DH + DB "$() " + DB 00DH + DB 00DH + DB 00DH + DB "$ " + DB 00DH + DB 00DH + DB 00DH + DB 000H +L5838: CALL 014C7H + JP Z,01497H + LD B,0B8H + LD DE,L585D + CALL 014C9H + JP 01495H + +L5849: LD A,B + CP 039H + JR NC,L5854 ; (+006H) + LD HL,CMDWORDTBL + JP 01541H + +L5854: SUB 038H + LD B,A + LD HL,L585D + JP 01541H + +L585D: DB "RENU" + DB 0CDH + DB "APPEN" + DB 0C4H + DB "COMPRES" + DB 0D3H + DB "DELET" + DB 0C5H + DB "FIN" + DB 0C4H + DB "CHANG" + DB 0C5H + DB "SDE" + DB 0CCH + DB "XRE" + DB 0C6H + DB 000H + DB 000H +L588A: LD A,(HL) + CP 081H + RET Z + RET C + CALL INCSKIPSPCE + CP 02FH + RET NZ + INC HL + INC HL + OR A + RET + +L5899: CALL LETNL + CALL LETNL + LD DE,L58A5 + JP 01329H + +L58A5: LD B,L + LD E,B + LD D,B + LD B,C + LD C,(HL) + LD B,H + LD B,L + LD B,H + JR NZ,L58F1 ; (+042H) + LD B,C + LD D,E + LD C,C + LD B,E + JR NZ,L58EA ; (+035H) + DEC (HL) + LD SP,02035H + DEC L + JR NZ,L5905 ; (+049H) + LD C,(HL) + LD B,E + LD C,H + LD D,L + LD B,H + LD B,L + LD D,E + LD A,(0430DH) + OR A + SBC A,(HL) + CP L + SBC A,L + AND (HL) + SUB A + SBC A,B + SUB (HL) + JR NZ,L5913 ; (+043H) + LD L,044H + LD L,020H + LD C,B + SUB D + AND C + SBC A,L + OR B + JR NZ,L590C ; (+031H) + ADD HL,SP + JR C,L5915 ; (+037H) + JR NZ,L58ED ; (+00dH) +L58E0: CALL 03296H + LD A,00AH + CALL 03296H + LD A,00DH +L58EA: RET + +L58EB: CALL SKIPSPACE + CP 030H + JR NZ,L58F6 ; (+004H) + LD A,0C3H + JR L58FD ; (+007H) + +L58F6: CP 031H + JP NZ,SYNTAXERR + LD A,0CDH +L58FD: LD (L58E0),A + INC HL +L5901: LD (05051H),HL +L5904: JP 01B35H + +L5907: LD A,0C6H + CALL ?DPCT +L590C: JR L5901 ; (-00dH) + +L590E: XOR A + LD (L5466),A + CALL L5098 +L5915: JR NZ,L591C ; (+005H) + CALL L5150 + JR L5904 ; (-018H) + +L591C: LD BC,(05063H) + CALL L52BB + JR Z,L5935 ; (+010H) + PUSH HL + LD BC,(05065H) + INC BC + CALL L52BB + POP DE + OR A + SBC HL,DE + JP Z,WARMSTRT +L5935: LD HL,(01958H) + JR L593C ; (+002H) + +L593A: POP HL + POP AF +L593C: PUSH HL + CALL 01867H + JR Z,L5989 ; (+047H) + PUSH HL + LD HL,(L506B) + SBC HL,DE + JR C,L593A ; (-010H) + LD HL,(05067H) + PUSH DE + EX DE,HL + SBC HL,DE + POP DE + JR C,L593A ; (-01aH) + LD HL,(05065H) + SBC HL,DE + JR C,L5963 ; (+008H) + LD HL,(05063H) + EX DE,HL + SBC HL,DE + JR NC,L593A ; (-029H) +L5963: LD A,(L5466) + OR A + JR NZ,L597B ; (+012H) + LD DE,L59C7 + CALL L59E0 + JR Z,L5976 ; (+005H) + POP HL + POP DE + JP 01B35H + +L5976: LD A,001H + LD (L5466),A +L597B: POP HL + POP DE + OR A + SBC HL,DE + LD B,H + LD C,L + PUSH DE + CALL 01306H + POP HL + JR L593C ; (-04dH) + +L5989: CALL L5150 +L598C: LD HL,(01958H) + CALL 01867H + JR Z,L59C4 ; (+030H) + PUSH DE + POP BC +L5996: PUSH HL + CALL 01867H + JR Z,L59C4 ; (+028H) + LD A,B + SUB D + JR NZ,L59A2 ; (+002H) + LD A,C + SUB E +L59A2: LD C,E + LD B,D + POP DE + JR C,L5996 ; (-011H) + PUSH BC + SBC HL,DE + LD B,H + LD C,L + LD HL,04A0EH + EX DE,HL + PUSH HL + PUSH BC + LDIR + POP BC + POP DE + CALL 01306H + POP HL + CALL 018B0H + CP A + LD E,C + CALL 012F3H + JR L598C ; (-038H) + +L59C4: JP WARMSTRT + +L59C7: DB "OK TO DELETE DUP LINES? " + DB 00DH +L59E0: CALL LETNL +L59E3: CALL MSG +L59E6: CALL BRKEY + JP Z,01438H + CALL 009B3H + CALL ?DACN + CALL 02305H + CP 059H + JR Z,L59FE ; (+005H) + CP 04EH + JR NZ,L59E6 ; (-017H) + OR A +L59FE: PUSH AF + CALL LETNL + POP AF + RET + +L5A04: DW L58EB + DW CMDAUTO + DW L5907 + DW L590E + DW CMDCOPY + DW CMDPAGE + DW L506D + DW 04806H + DW L52F0 + DW 0488EH + DW L5363 + DW L548E + DW L55C5 + DW L5616 +L5A20: DB "LIN" + DB 0C5H + DB "AUT" + DB 0CFH + DB "CL" + DB 0D3H + DB "MOV" + DB 0C5H + DB "COPY/" + DB 0D0H + DB "PAGE/" + DB 0D0H + DB 000H +L5A3C: CP 091H + RET C + CP 0BEH + RET NC + CALL ?ADCN + CP 081H + JR C,L5A4F ; (+006H) + CP 09BH + JR NC,L5A4F ; (+002H) + SUB 080H +L5A4F: JP ?DACN + +L5A52: DB "XP BASIC SA-551" +L5A61: DB 035H + DB 00DH +XPINIT: LD HL,L5A04 + LD DE,01C16H + LD BC,0001CH + LDIR + LD HL,L5A3C + PUSH HL + LD DE,L5A20 + SBC HL,DE + PUSH HL + POP BC + EX DE,HL + LD DE,0165EH + LDIR + POP HL + LD DE,02305H + LD BC,00016H + LDIR + LD HL,03338H + LD (022C9H),HL + LD HL,03302H + LD (01CCDH),HL + LD HL,MONIT + LD (01CCFH),HL + LD (01CD1H),HL + LD HL,03311H + LD (02B11H),HL + LD HL,048C1H + LD (0307BH),HL + LD (0318CH),HL + LD (03199H),HL + LD HL,02F6CH + LD (0315BH),HL + LD A,0CDH + LD (03140H),A + LD HL,0330BH + LD (03141H),HL + LD A,0C3H + LD HL,L5849 + LD (0153EH),A + LD (0153FH),HL + LD HL,L5838 + LD (01492H),A + LD (01493H),HL + LD A,(0322EH) + CP 0C3H + JR NZ,L5AF2 ; (+017H) + LD (031ADH),A + LD HL,L58E0 + LD (031AEH),HL + LD A,036H + JR L5AF4 ; (+00cH) + + LD A,0ABH + LD (01C16H),A + LD A,013H + LD (01C17H),A +L5AF2: LD A,035H +L5AF4: LD HL,L58B7 + LD (HL),A + LD HL,L5A61 + LD (HL),A + XOR A + LD (041ECH),A + LD HL,L5A52 + LD DE,04224H + LD BC,00011H + LDIR + LD HL,L5A04 + LD (01958H),HL + LD (018B4H),HL + LD (01AC8H),HL + LD (01AE2H),HL + LD (01B14H),HL + LD (01B1CH),HL + LD (01C7EH),HL + LD (01EC2H),HL + LD (02D44H),HL + LD (02F24H),HL + LD (0303CH),HL + LD (03042H),HL + INC HL + LD (01201H),HL + LD (041FFH),HL + LD HL,L5899 + LD (01225H),HL + LD HL,RELOC3302 + LD DE,03302H + LD BC,0005BH + LDIR + LD DE,04806H + LD BC,000F8H + LDIR + JP COLDSTRT + +RELOC3302: CALL GETKY ; Relocated to 0x3302 for 0x5B bytes. + CP 020H + JP Z,009B3H + RET + + LD HL,ATRB + JP 02F67H + + CALL EXECNOTCHR + LD B,B + JR L5B95 ; (+02bH) + + LD A,0C9H + LD (028F5H),A + CALL CMDCURSOR + LD A,0C3H + LD (028F5H),A + JP 02B18H + + LD A,0C9H + LD (01C7DH),A + CALL 01C68H + LD A,021H + LD (01C7DH),A + RET + + NOP + NOP + NOP + LD A,B + OR C + RET Z + LD A,B + SUB C + JR NC,L5B93 ; (+001H) + XOR A +L5B93: ADD A,C + LD B,A +L5B95: LD A,(DE) + CALL 02305H + LD C,A + PUSH AF + LD A,(HL) + CALL 02305H + LD C,A + POP AF + OR A + SUB C + JR NZ,L5BAA ; (+005H) + INC DE + INC HL + DJNZ L5B95 ; (-014H) + RET + +L5BAA: LD A,001H + RET NC + LD A,080H + RET + +RELOC4806: CALL 048EEH ; Relocated to 0x4806 for 0xF8 bytes. + LD HL,0FFFFH + CALL 018B0H + LD DE,0E548H + EX DE,HL + LD BC,(SIZE) + DEC BC + DEC BC + CALL 01888H + CALL 019C3H + LD (DTADR),DE + CALL 02F6CH + CALL ?RDD + JR C,L5BFB ; (+026H) + POP HL + CALL 01ACAH + LD HL,(DTADR) + PUSH HL + INC HL + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + CALL 018B0H + LD A,048H + POP BC + OR A + SBC HL,BC + JP NC,01B35H + LD DE,(DTADR) + CALL 0485EH + LD A,047H + JP 01403H + +L5BFB: POP DE + PUSH DE + CALL 0485EH + POP HL + XOR A + LD (HL),A + INC HL + LD (HL),A + JP CHKSUMERR + + LD BC,(SIZE) + DEC BC + DEC BC + JP 02F59H + + CALL 03327H + LD HL,(04AB5H) + LD A,H + AND L + CP PRTD + JP Z,ILDATERR + PUSH HL + LD HL,(04AB3H) + LD A,H + OR L + JP Z,ILDATERR + CALL 018B0H + OR C + INC DE + EX (SP),HL + INC HL + CALL 018B0H + ADC A,C + LD C,B + POP DE + OR A + SBC HL,DE + RET + + CALL 04867H + JR Z,L5C44 ; (+007H) + JR C,L5C47 ; (+008H) + PUSH HL + POP BC + CALL 01306H +L5C44: JP 01B35H + +L5C47: JP OVFLERR + + PUSH BC + CALL 017F6H + POP BC + LD A,E + OR D + EX (SP),HL + LD A,(HL) + INC HL + EX (SP),HL + PUSH AF + CP (HL) + JR Z,L5C66 ; (+00dH) + LD A,00DH + CP (HL) + JR Z,L5C63 ; (+005H) + LD A,03AH + CP (HL) + JR NZ,L5C47 ; (-01cH) +L5C63: POP AF + SCF + RET + +L5C66: CALL INCSKIPSPCE + POP AF + RET + + DI + PUSH DE + PUSH BC + PUSH HL + LD DE,0D753H + LD BC,(SIZE) + LD HL,(DTADR) + LD A,B + OR C + JP Z,004CBH + CALL CKSUM + CALL MOTOR + JP C,00552H + CALL 048E3H + JP 00461H + + PUSH BC + PUSH DE + LD BC,00200H + LD DE,01414H + JP 0078EH + + LD A,0C9H + LD (02F19H),A + CALL 02EDAH + LD A,0CDH + LD (02F19H),A + JP 01AF1H + + NOP ; End of Relocated code. + NOP + NOP + NOP + NOP diff --git a/software/DIS/XPATCH/XPATCH-5510.ref b/software/DIS/XPATCH/XPATCH-5510.ref new file mode 100644 index 0000000..b10ee48 --- /dev/null +++ b/software/DIS/XPATCH/XPATCH-5510.ref @@ -0,0 +1,875 @@ +dZ80 2.1 Reference file from the disassembly of "XPATCH-5510.bin". + +Direct address Reference (127 entries) +-------------------------------------- + +Direct address 00000H. 3 references: +------------------------------------ + + 05098H: LD DE,00000H + 05696H: LD BC,00000H + 05a94H: LD HL,00000H + +Direct address 00002H. 1 references: +------------------------------------ + + 05729H: LD BC,00002H + +Direct address 00003H. 1 references: +------------------------------------ + + 056f4H: LD BC,00003H + +Direct address 0000aH. 2 references: +------------------------------------ + + 050d8H: LD DE,0000AH + 050e5H: LD DE,0000AH + +Direct address 00011H. 1 references: +------------------------------------ + + 05b06H: LD BC,00011H + +Direct address 00016H. 1 references: +------------------------------------ + + 05a83H: LD BC,00016H + +Direct address 0001cH. 1 references: +------------------------------------ + + 05a69H: LD BC,0001CH + +Direct address 0005bH. 1 references: +------------------------------------ + + 05b45H: LD BC,0005BH + +Direct address 00080H. 1 references: +------------------------------------ + + 0515fH: LD BC,00080H + +Direct address 000f8H. 1 references: +------------------------------------ + + 05b4dH: LD BC,000F8H + +Direct address 00100H. 1 references: +------------------------------------ + + 05167H: LD BC,00100H + +Direct address 00200H. 1 references: +------------------------------------ + + 05c8fH: LD BC,00200H + +Direct address ATRB. 1 references: +---------------------------------- + + 05b5eH: LD HL,010F0H + +Direct address SIZE. 3 references: +---------------------------------- + + 05bbdH: LD BC,(01102H) + 05c08H: LD BC,(01102H) + 05c72H: LD BC,(01102H) + +Direct address DTADR. 2 references: +----------------------------------- + + 05bc9H: LD (01104H),DE + 05befH: LD DE,(01104H) + +Direct address BUFER. 6 references: +----------------------------------- + + 05386H: LD DE,011A3H + 053e6H: LD DE,011A3H + 054b0H: LD DE,011A3H + 054fbH: LD DE,011A3H + 05569H: LD DE,011A3H + 055ecH: LD DE,011A3H + +Direct address 011ccH. 2 references: +------------------------------------ + + 053afH: LD DE,011CCH + 0552eH: LD HL,011CCH + +Direct address 01211H. 1 references: +------------------------------------ + + 055abH: LD DE,01211H + +Direct address 01414H. 1 references: +------------------------------------ + + 05c92H: LD DE,01414H + +Direct address 015a8H. 1 references: +------------------------------------ + + 0584eH: LD HL,015A8H + +Direct address 0165eH. 1 references: +------------------------------------ + + 05a7aH: LD DE,0165EH + +Direct address 01b35H. 1 references: +------------------------------------ + + 0506dH: LD BC,01B35H + +Direct address 01c16H. 1 references: +------------------------------------ + + 05a66H: LD DE,01C16H + +Direct address 02035H. 1 references: +------------------------------------ + + 058b6H: LD SP,02035H + +Direct address 02305H. 1 references: +------------------------------------ + + 05a80H: LD DE,02305H + +Direct address 02a2fH. 1 references: +------------------------------------ + + 05a06H: CPL + +Direct address 02f6cH. 1 references: +------------------------------------ + + 05aafH: LD HL,02F6CH + +Direct address 032d4H. 1 references: +------------------------------------ + + 05a0eH: CALL NC,06D32H + +Direct address 03302H. 2 references: +------------------------------------ + + 05a8eH: LD HL,03302H + 05b42H: LD DE,03302H + +Direct address 0330bH. 1 references: +------------------------------------ + + 05abaH: LD HL,0330BH + +Direct address 03311H. 1 references: +------------------------------------ + + 05a9dH: LD HL,03311H + +Direct address 03338H. 1 references: +------------------------------------ + + 05a88H: LD HL,03338H + +Direct address 033abH. 1 references: +------------------------------------ + + 05a0cH: XOR E + +Direct address 04224H. 1 references: +------------------------------------ + + 05b03H: LD DE,04224H + +Direct address 04806H. 2 references: +------------------------------------ + + 05a12H: LD B,048H + 05b4aH: LD DE,04806H + +Direct address 0488eH. 1 references: +------------------------------------ + + 05a16H: ADC A,(HL) + +Direct address 048c1H. 1 references: +------------------------------------ + + 05aa3H: LD HL,048C1H + +Direct address LINEBUFR. 7 references: +-------------------------------------- + + 05378H: LD DE,0490DH + 0539fH: LD DE,0490DH + 05427H: LD DE,0490DH + 054d7H: LD HL,0490DH + 05501H: LD HL,0490DH + 0555cH: LD DE,0490DH + 057b3H: LD DE,0490DH + +Direct address 0490fH. 1 references: +------------------------------------ + + 053e9H: LD HL,0490FH + +Direct address 04a0eH. 2 references: +------------------------------------ + + 053d6H: LD DE,04A0EH + 059acH: LD HL,04A0EH + +Direct address 04e84H. 1 references: +------------------------------------ + + 0574fH: LD IX,04E84H + +Direct address 04e86H. 1 references: +------------------------------------ + + 056cbH: LD HL,04E86H + +Direct address 0505cH. 1 references: +------------------------------------ + + 05248H: LD DE,0505CH + +Direct address 05063H. 7 references: +------------------------------------ + + 0509bH: LD (05063H),DE + 050afH: LD (05063H),DE + 050c4H: LD (05063H),DE + 050efH: LD BC,(05063H) + 051a6H: LD BC,(05063H) + 0527aH: LD DE,(05063H) + 0591cH: LD BC,(05063H) + +Direct address 05065H. 5 references: +------------------------------------ + + 050a1H: LD (05065H),DE + 050baH: LD (05065H),DE + 050c8H: LD (05065H),DE + 05118H: LD BC,(05065H) + 05926H: LD BC,(05065H) + +Direct address 05067H. 3 references: +------------------------------------ + + 050dbH: LD (05067H),DE + 051adH: LD BC,(05067H) + 0528aH: LD DE,(05067H) + +Direct address 05069H. 2 references: +------------------------------------ + + 050e8H: LD (05069H),DE + 0529eH: LD DE,(05069H) + +Direct address 0506dH. 1 references: +------------------------------------ + + 05a10H: LD L,L + +Direct address 0507dH. 1 references: +------------------------------------ + + 05077H: LD DE,0507DH + +Direct address 05089H. 1 references: +------------------------------------ + + 0512dH: LD DE,05089H + +Direct address 05255H. 1 references: +------------------------------------ + + 05216H: LD DE,05255H + +Direct address 05257H. 1 references: +------------------------------------ + + 05231H: LD DE,05257H + +Direct address 0525cH. 1 references: +------------------------------------ + + 05221H: LD DE,0525CH + +Direct address 052f0H. 1 references: +------------------------------------ + + 05a14H: RET P + +Direct address 05363H. 1 references: +------------------------------------ + + 05a18H: LD H,E + +Direct address 05446H. 1 references: +------------------------------------ + + 05392H: LD DE,05446H + +Direct address 05453H. 1 references: +------------------------------------ + + 054a5H: LD DE,05453H + +Direct address 05469H. 2 references: +------------------------------------ + + 054c2H: LD BC,(05469H) + 05531H: LD DE,(05469H) + +Direct address 0548eH. 1 references: +------------------------------------ + + 05a1aH: ADC A,(HL) + +Direct address 05499H. 1 references: +------------------------------------ + + 05565H: LD BC,05499H + +Direct address 055abH. 1 references: +------------------------------------ + + 0558aH: LD DE,055ABH + +Direct address 055b3H. 1 references: +------------------------------------ + + 054e7H: LD DE,055B3H + +Direct address 055c5H. 1 references: +------------------------------------ + + 05a1cH: PUSH BC + +Direct address 055f8H. 1 references: +------------------------------------ + + 055dcH: LD DE,055F8H + +Direct address 05614H. 2 references: +------------------------------------ + + 056a1H: LD (05614H),DE + 056d3H: LD DE,(05614H) + +Direct address 05616H. 1 references: +------------------------------------ + + 05a1eH: LD D,056H + +Direct address 05807H. 2 references: +------------------------------------ + + 05744H: LD DE,05807H + 05772H: LD HL,05807H + +Direct address 05820H. 1 references: +------------------------------------ + + 0576bH: LD HL,05820H + +Direct address 05838H. 1 references: +------------------------------------ + + 05acbH: LD HL,05838H + +Direct address 05849H. 1 references: +------------------------------------ + + 05ac2H: LD HL,05849H + +Direct address 0585dH. 2 references: +------------------------------------ + + 05840H: LD DE,0585DH + 05857H: LD HL,0585DH + +Direct address 05899H. 1 references: +------------------------------------ + + 05b39H: LD HL,05899H + +Direct address 058a5H. 1 references: +------------------------------------ + + 0589fH: LD DE,058A5H + +Direct address 058b7H. 1 references: +------------------------------------ + + 05af4H: LD HL,058B7H + +Direct address 058e0H. 1 references: +------------------------------------ + + 05adeH: LD HL,058E0H + +Direct address 058ebH. 1 references: +------------------------------------ + + 05a04H: EX DE,HL + +Direct address 05907H. 1 references: +------------------------------------ + + 05a08H: RLCA + +Direct address 0590eH. 1 references: +------------------------------------ + + 05a0aH: LD C,059H + +Direct address 059c7H. 1 references: +------------------------------------ + + 05969H: LD DE,059C7H + +Direct address 05a04H. 2 references: +------------------------------------ + + 05a63H: LD HL,05A04H + 05b0bH: LD HL,05A04H + +Direct address 05a20H. 1 references: +------------------------------------ + + 05a72H: LD DE,05A20H + +Direct address 05a3cH. 1 references: +------------------------------------ + + 05a6eH: LD HL,05A3CH + +Direct address 05a52H. 1 references: +------------------------------------ + + 05b00H: LD HL,05A52H + +Direct address 05a61H. 1 references: +------------------------------------ + + 05af8H: LD HL,05A61H + +Direct address 05b55H. 1 references: +------------------------------------ + + 05b3fH: LD HL,05B55H + +Direct address 0d753H. 1 references: +------------------------------------ + + 05c6fH: LD DE,0D753H + +Direct address 0e548H. 1 references: +------------------------------------ + + 05bb9H: LD DE,0E548H + +Direct address 0ffffH. 1 references: +------------------------------------ + + 05bb3H: LD HL,0FFFFH + + +Indirect address Reference (120 entries) +---------------------------------------- + +Indirect address DTADR. 2 references: +------------------------------------- + + 05bd9H: LD HL,(01104H) + 05c76H: LD HL,(01104H) + +Indirect address DSPXY. 2 references: +------------------------------------- + + 0521bH: LD (01171H),A + 05228H: LD (01171H),A + +Indirect address DPRNT. 1 references: +------------------------------------- + + 0539bH: LD A,(01194H) + +Indirect address 01201H. 1 references: +-------------------------------------- + + 05b33H: LD (01201H),HL + +Indirect address 01225H. 1 references: +-------------------------------------- + + 05b3cH: LD (01225H),HL + +Indirect address 01492H. 1 references: +-------------------------------------- + + 05aceH: LD (01492H),A + +Indirect address 01493H. 1 references: +-------------------------------------- + + 05ad1H: LD (01493H),HL + +Indirect address 0153eH. 1 references: +-------------------------------------- + + 05ac5H: LD (0153EH),A + +Indirect address 0153fH. 1 references: +-------------------------------------- + + 05ac8H: LD (0153FH),HL + +Indirect address 018b4H. 1 references: +-------------------------------------- + + 05b11H: LD (018B4H),HL + +Indirect address 01958H. 6 references: +-------------------------------------- + + 05153H: LD HL,(01958H) + 052bbH: LD HL,(01958H) + 053bbH: LD HL,(01958H) + 05935H: LD HL,(01958H) + 0598cH: LD HL,(01958H) + 05b0eH: LD (01958H),HL + +Indirect address 01ac8H. 1 references: +-------------------------------------- + + 05b14H: LD (01AC8H),HL + +Indirect address 01ae2H. 1 references: +-------------------------------------- + + 05b17H: LD (01AE2H),HL + +Indirect address 01b14H. 1 references: +-------------------------------------- + + 05b1aH: LD (01B14H),HL + +Indirect address 01b1cH. 1 references: +-------------------------------------- + + 05b1dH: LD (01B1CH),HL + +Indirect address 01c16H. 1 references: +-------------------------------------- + + 05aeaH: LD (01C16H),A + +Indirect address 01c17H. 1 references: +-------------------------------------- + + 05aefH: LD (01C17H),A + +Indirect address 01c7dH. 2 references: +-------------------------------------- + + 05b7cH: LD (01C7DH),A + 05b84H: LD (01C7DH),A + +Indirect address 01c7eH. 1 references: +-------------------------------------- + + 05b20H: LD (01C7EH),HL + +Indirect address 01ccdH. 1 references: +-------------------------------------- + + 05a91H: LD (01CCDH),HL + +Indirect address 01ccfH. 1 references: +-------------------------------------- + + 05a97H: LD (01CCFH),HL + +Indirect address 01cd1H. 1 references: +-------------------------------------- + + 05a9aH: LD (01CD1H),HL + +Indirect address 01ec2H. 1 references: +-------------------------------------- + + 05b23H: LD (01EC2H),HL + +Indirect address 022c9H. 1 references: +-------------------------------------- + + 05a8bH: LD (022C9H),HL + +Indirect address 028f5H. 2 references: +-------------------------------------- + + 05b6cH: LD (028F5H),A + 05b74H: LD (028F5H),A + +Indirect address 02b11H. 1 references: +-------------------------------------- + + 05aa0H: LD (02B11H),HL + +Indirect address 02d44H. 1 references: +-------------------------------------- + + 05b26H: LD (02D44H),HL + +Indirect address 02f19H. 2 references: +-------------------------------------- + + 05c9aH: LD (02F19H),A + 05ca2H: LD (02F19H),A + +Indirect address 02f24H. 1 references: +-------------------------------------- + + 05b29H: LD (02F24H),HL + +Indirect address 0303cH. 1 references: +-------------------------------------- + + 05b2cH: LD (0303CH),HL + +Indirect address 03042H. 1 references: +-------------------------------------- + + 05b2fH: LD (03042H),HL + +Indirect address 0307bH. 1 references: +-------------------------------------- + + 05aa6H: LD (0307BH),HL + +Indirect address 03140H. 1 references: +-------------------------------------- + + 05ab7H: LD (03140H),A + +Indirect address 03141H. 1 references: +-------------------------------------- + + 05abdH: LD (03141H),HL + +Indirect address 0315bH. 1 references: +-------------------------------------- + + 05ab2H: LD (0315BH),HL + +Indirect address 0318cH. 1 references: +-------------------------------------- + + 05aa9H: LD (0318CH),HL + +Indirect address 03199H. 1 references: +-------------------------------------- + + 05aacH: LD (03199H),HL + +Indirect address 031adH. 1 references: +-------------------------------------- + + 05adbH: LD (031ADH),A + +Indirect address 031aeH. 1 references: +-------------------------------------- + + 05ae1H: LD (031AEH),HL + +Indirect address 0322eH. 1 references: +-------------------------------------- + + 05ad4H: LD A,(0322EH) + +Indirect address 041ecH. 1 references: +-------------------------------------- + + 05afdH: LD (041ECH),A + +Indirect address 041ffH. 1 references: +-------------------------------------- + + 05b36H: LD (041FFH),HL + +Indirect address 0430dH. 1 references: +-------------------------------------- + + 058c3H: LD A,(0430DH) + +Indirect address 04a0eH. 5 references: +-------------------------------------- + + 053ceH: LD HL,(04A0EH) + 054f2H: LD HL,(04A0EH) + 0557bH: LD HL,(04A0EH) + 05582H: LD (04A0EH),HL + 055e4H: LD HL,(04A0EH) + +Indirect address 04a10H. 1 references: +-------------------------------------- + + 05543H: LD HL,(04A10H) + +Indirect address 04ab3H. 3 references: +-------------------------------------- + + 052f3H: LD HL,(04AB3H) + 0562eH: LD HL,(04AB3H) + 05c1fH: LD HL,(04AB3H) + +Indirect address 04ab5H. 3 references: +-------------------------------------- + + 0530eH: LD HL,(04AB5H) + 05647H: LD HL,(04AB5H) + 05c14H: LD HL,(04AB5H) + +Indirect address 04e4eH. 2 references: +-------------------------------------- + + 0519fH: LD (04E4EH),HL + 0532eH: LD (04E4EH),HL + +Indirect address 04e94H. 2 references: +-------------------------------------- + + 05175H: LD HL,(04E94H) + 05179H: LD (04E94H),HL + +Indirect address 0504eH. 1 references: +-------------------------------------- + + 0536dH: LD A,(0504EH) + +Indirect address 05051H. 2 references: +-------------------------------------- + + 050ecH: LD (05051H),HL + 05901H: LD (05051H),HL + +Indirect address 05063H. 1 references: +-------------------------------------- + + 0595bH: LD HL,(05063H) + +Indirect address 05065H. 4 references: +-------------------------------------- + + 050f3H: LD HL,(05065H) + 051b8H: LD HL,(05065H) + 05272H: LD HL,(05065H) + 05954H: LD HL,(05065H) + +Indirect address 05067H. 2 references: +-------------------------------------- + + 0510aH: LD HL,(05067H) + 0594aH: LD HL,(05067H) + +Indirect address 05069H. 1 references: +-------------------------------------- + + 051c6H: LD HL,(05069H) + +Indirect address 0506bH. 2 references: +-------------------------------------- + + 05149H: LD (0506BH),HL + 05943H: LD HL,(0506BH) + +Indirect address 05465H. 6 references: +-------------------------------------- + + 05364H: LD (05465H),A + 0538bH: LD A,(05465H) + 05432H: LD A,(05465H) + 05490H: LD (05465H),A + 05553H: LD A,(05465H) + 055c7H: LD (05465H),A + +Indirect address 05466H. 6 references: +-------------------------------------- + + 0548aH: LD (05466H),A + 0549fH: LD A,(05466H) + 055d6H: LD A,(05466H) + 0590fH: LD (05466H),A + 05963H: LD A,(05466H) + 05978H: LD (05466H),A + +Indirect address 05467H. 6 references: +-------------------------------------- + + 05383H: LD (05467H),A + 053b7H: LD A,(05467H) + 054b3H: LD A,(05467H) + 054f5H: LD A,(05467H) + 05574H: LD A,(05467H) + 055efH: LD A,(05467H) + +Indirect address 05468H. 4 references: +-------------------------------------- + + 053b2H: LD (05468H),A + 054c9H: LD A,(05468H) + 05535H: LD A,(05468H) + 0556fH: LD A,(05468H) + +Indirect address 05469H. 3 references: +-------------------------------------- + + 05404H: LD (05469H),HL + 0556cH: LD HL,(05469H) + 05598H: LD A,(05469H) + +Indirect address 0546bH. 4 references: +-------------------------------------- + + 05424H: LD (0546BH),HL + 054adH: LD HL,(0546BH) + 054bfH: LD HL,(0546BH) + 0551eH: LD HL,(0546BH) + +Indirect address 05611H. 5 references: +-------------------------------------- + + 05617H: LD (05611H),A + 05628H: LD (05611H),A + 057e3H: LD A,(05611H) + 057f2H: LD A,(05611H) + 057ffH: LD A,(05611H) + +Indirect address 05612H. 2 references: +-------------------------------------- + + 056a5H: LD (05612H),HL + 05736H: LD HL,(05612H) + +Indirect address 05614H. 1 references: +-------------------------------------- + + 056faH: LD HL,(05614H) + +Indirect address 058e0H. 1 references: +-------------------------------------- + + 058fdH: LD (058E0H),A + + +End of reference file for "XPATCH-5510.bin" + diff --git a/software/DIS/XPATCH/XPATCH.ini b/software/DIS/XPATCH/XPATCH.ini new file mode 100644 index 0000000..8cf8def --- /dev/null +++ b/software/DIS/XPATCH/XPATCH.ini @@ -0,0 +1,330 @@ +---------------------------------------- +-- dZ80 configuration file +---------------------------------------- + +---------------------------------------- +-- Disassembly control +---------------------------------------- + +cpu="z80" +inputfile="XPATCH-5510.bin" +outputfile="XPATCH-5510.asm" +--fileheadersize=27 +filebaseaddr=20572 +disstart=0 +disend=23724 +--disstart=0 +--disend=3584 +--quiet=0 +labelledoutput=1 + +---------------------------------------- +-- Layout +---------------------------------------- + +labelreference=1 +addresscolumn=1 +opcodecolumn=1 +relativejumpcomment=1 +uppercase=1 +autoblanklines=1 +db="db" +comment="; " +radix=16 +numprefix="0" +numsuffix="H" + +---------------------------------------- +-- Scripts +---------------------------------------- + +--script="scripts\\spectrum.lua" + +---------------------------------------- +-- References +---------------------------------------- + +referencefile="XPATCH-5510.ref" +inportreference=1 +outportreference=1 +addressreference=1 +indirectaddressreference=1 +limitreferences=1 + +---------------------------------------- +-- Opcode mapfile and code/data areas +---------------------------------------- + +--opmapfile="mayhem.map" + +-- Code Region isnt required as v2.x sets the entire region to code unless a data region overrides it. +d_SetCodeRegion(20572, 3152) + +-- Set the known data regions, either as a data region (byte), word or string. The type affects the assembly output definitions and word +-- regions will attempt to map to an address, ie. jump tables will be setup with labels rather than constants. +d_SetDataRegion( hex("507D"), 27) +d_SetStringRegion( hex("507D"), 11) +d_SetStringRegion( hex("5089"), 15) +d_SetDataRegion( hex("5255"), 23) +d_SetStringRegion( hex("5257"), 4) +d_SetStringRegion( hex("525C"), 15) + +d_SetDataRegion( hex("5446"), 31) +d_SetStringRegion( hex("5446"), 12) +d_SetStringRegion( hex("5453"), 17) +d_SetDataRegion( hex("5465"), 8) +d_SetStringRegion( hex("55B3"), 18) +d_SetStringRegion( hex("55F8"), 25) + +d_SetDataRegion( hex("5807"), 49) +d_SetStringRegion( hex("5807"), 23) +--d_SetStringRegion( hex("581F"), 5) +d_SetStringRegion( hex("5827"), 5) +d_SetStringRegion( hex("582F"), 5) + +d_SetDataRegion( hex("585D"), 45) +d_SetStringRegion( hex("585D"), 4) +d_SetStringRegion( hex("5862"), 5) +d_SetStringRegion( hex("5868"), 7) +d_SetStringRegion( hex("5870"), 5) +d_SetStringRegion( hex("5876"), 3) +d_SetStringRegion( hex("587A"), 5) +d_SetStringRegion( hex("5880"), 3) +d_SetStringRegion( hex("5884"), 3) + +--d_SetStringRegion( hex("585D"), 4) +--d_SetDataRegion( hex("58A5"), 59) +--d_SetStringRegion( hex("58A5"), 17) +--d_SetStringRegion( hex("58B7"), 40) + +d_SetDataRegion( hex("59C7"), 25) +d_SetStringRegion( hex("59C7"), 24) + +d_SetDataRegion( hex("5A04"), 56) +d_SetWordRegion( hex("5A04"), 28) + +-- Reserved key words. +d_SetDataRegion( hex("5A20"), 28) +d_SetStringRegion( hex("5A20"), 3) -- LINE +d_SetStringRegion( hex("5A24"), 3) -- AUTO +d_SetStringRegion( hex("5A28"), 2) -- CLR +d_SetStringRegion( hex("5A2B"), 3) -- MOVE +d_SetStringRegion( hex("5A2F"), 5) -- COPY/P +d_SetStringRegion( hex("5A35"), 5) -- PAGE/P + +d_SetDataRegion( hex("5A52"), 17) +d_SetStringRegion( hex("5A52"), 15) + +-- Create a mapping table of known Sharp I/O ports and 8 bit constants. +-- +-- Format Addr IsAddr Label : IsAddr = 0, value is a constant, = 1, value is an address. +d_SetByteEquate(hex("FE") , 1, "PRTC" ) +d_SetByteEquate(hex("FF") , 1, "PRTD" ) + +-- Create a mapping table of known Sharp MZ BIOS/Memory Mapped Hardware addresses which dz80 +-- can use to replace an address with the label. The EQU list will also be output at the start +-- of the disassembly file so it can compile. +-- Format Addr IsAddr Label : IsAddr = 0, value is a constant, = 1, value is an address. +d_SetWordEquate(hex("0003"), 1, "GETL" ) +d_SetWordEquate(hex("0006"), 1, "LETNL" ) +d_SetWordEquate(hex("0009"), 1, "NL" ) +d_SetWordEquate(hex("000C"), 1, "PRNTS" ) +d_SetWordEquate(hex("000F"), 1, "PRNTT" ) +d_SetWordEquate(hex("0012"), 1, "PRNT" ) +d_SetWordEquate(hex("0015"), 1, "MSG" ) +d_SetWordEquate(hex("0018"), 1, "MSGX" ) +d_SetWordEquate(hex("001B"), 1, "GETKY" ) +d_SetWordEquate(hex("001E"), 1, "BRKEY" ) +d_SetWordEquate(hex("0021"), 1, "?WRI" ) +d_SetWordEquate(hex("0024"), 1, "?WRD" ) +d_SetWordEquate(hex("0027"), 1, "?RDI" ) +d_SetWordEquate(hex("002A"), 1, "?RDD" ) +d_SetWordEquate(hex("002D"), 1, "?VRFY" ) +d_SetWordEquate(hex("0030"), 1, "MELDY" ) +d_SetWordEquate(hex("0033"), 1, "?TMST" ) +d_SetWordEquate(hex("003B"), 1, "TIMRD" ) +d_SetWordEquate(hex("003E"), 1, "BELL" ) +d_SetWordEquate(hex("0041"), 1, "XTEMP" ) +d_SetWordEquate(hex("0044"), 1, "MSTA" ) +d_SetWordEquate(hex("0047"), 1, "MSTP" ) +d_SetWordEquate(hex("0000"), 1, "MONIT" ) +d_SetWordEquate(hex("0089"), 1, "SS" ) +d_SetWordEquate(hex("0095"), 1, "ST1" ) +d_SetWordEquate(hex("0410"), 1, "HLHEX" ) +d_SetWordEquate(hex("041F"), 1, "_2HEX" ) +d_SetWordEquate(hex("074D"), 1, "?MODE" ) +d_SetWordEquate(hex("08CA"), 1, "?KEY" ) +d_SetWordEquate(hex("096C"), 1, "PRNT3" ) +d_SetWordEquate(hex("0BB9"), 1, "?ADCN" ) +d_SetWordEquate(hex("0BCE"), 1, "?DACN" ) +d_SetWordEquate(hex("0DB5"), 1, "?DSP" ) +d_SetWordEquate(hex("0DA6"), 1, "?BLNK" ) +d_SetWordEquate(hex("0DDC"), 1, "?DPCT" ) +d_SetWordEquate(hex("03BA"), 1, "PRTHL" ) +d_SetWordEquate(hex("03C3"), 1, "PRTHX" ) +d_SetWordEquate(hex("03DA"), 1, "ASC" ) +d_SetWordEquate(hex("03F9"), 1, "HEX" ) +d_SetWordEquate(hex("0DDC"), 1, "DPCT" ) +d_SetWordEquate(hex("0DA7"), 1, "DLY12" ) +d_SetWordEquate(hex("0DAA"), 1, "DLY12A" ) +d_SetWordEquate(hex("0EE6"), 1, "?RSTR1" ) +d_SetWordEquate(hex("06A3"), 1, "MOTOR" ) +d_SetWordEquate(hex("071A"), 1, "CKSUM" ) +d_SetWordEquate(hex("077A"), 1, "GAP" ) +d_SetWordEquate(hex("0485"), 1, "WTAPE" ) +d_SetWordEquate(hex("0700"), 1, "MSTOP" ) +d_SetWordEquate(hex("11FD"), 1, "TAPECOPY" ) +d_SetWordEquate(hex("1200"), 1, "COLDSTRT" ) +d_SetWordEquate(hex("1250"), 1, "WARMSTRTMON") +d_SetWordEquate(hex("15A8"), 1, "CMDWORDTBL" ) +d_SetWordEquate(hex("1BB2"), 1, "CMDJMPTBL" ) +d_SetWordEquate(hex("2E33"), 1, "CMTBUF" ) +d_SetWordEquate(hex("2E34"), 1, "CMTFNAME" ) + +-- Known BASIC SA-5510 labels/addresses. +d_SetWordEquate(hex("1C3C"), 1, "CMDREMDATA" ) +d_SetWordEquate(hex("13AB"), 1, "SYNTAXERR" ) +d_SetWordEquate(hex("2D12"), 1, "CMDREAD" ) +d_SetWordEquate(hex("1C4D"), 1, "CMDLIST" ) +d_SetWordEquate(hex("1E91"), 1, "CMDRUN" ) +d_SetWordEquate(hex("1C42"), 1, "CMDNEW" ) +d_SetWordEquate(hex("2B0D"), 1, "CMDPRINT" ) +d_SetWordEquate(hex("1D6A"), 1, "CMDLET" ) +d_SetWordEquate(hex("1F2B"), 1, "CMDFOR" ) +d_SetWordEquate(hex("21AD"), 1, "CMDIF" ) +d_SetWordEquate(hex("13AB"), 1, "CMDTHEN" ) +d_SetWordEquate(hex("1EA6"), 1, "CMDGOTO" ) +d_SetWordEquate(hex("1EC7"), 1, "CMDGOSUB" ) +d_SetWordEquate(hex("1EF8"), 1, "CMDRETURN" ) +d_SetWordEquate(hex("1FC0"), 1, "CMDNEXT" ) +d_SetWordEquate(hex("1D2C"), 1, "CMDSTOP" ) +d_SetWordEquate(hex("1D15"), 1, "CMDEND" ) +d_SetWordEquate(hex("203E"), 1, "CMDON" ) +d_SetWordEquate(hex("2D75"), 1, "CMDLOAD" ) +d_SetWordEquate(hex("2D82"), 1, "CMDSAVE" ) +d_SetWordEquate(hex("2EB3"), 1, "CMDVERIFY" ) +d_SetWordEquate(hex("2191"), 1, "CMDPOKE" ) +d_SetWordEquate(hex("2080"), 1, "CMDDIM" ) +d_SetWordEquate(hex("2201"), 1, "CMDDEFFN" ) +d_SetWordEquate(hex("2BFF"), 1, "CMDINPUT" ) +d_SetWordEquate(hex("1D4D"), 1, "CMDRESTORE" ) +d_SetWordEquate(hex("21A6"), 1, "CMDCLS" ) +d_SetWordEquate(hex("2269"), 1, "CMDMUSIC" ) +d_SetWordEquate(hex("2282"), 1, "CMDTEMPO" ) +d_SetWordEquate(hex("2942"), 1, "CMDUSRN" ) +d_SetWordEquate(hex("2D9F"), 1, "CMDWOPEN" ) +d_SetWordEquate(hex("2D92"), 1, "CMDROPEN" ) +d_SetWordEquate(hex("2DAD"), 1, "CMDCLOSE" ) +d_SetWordEquate(hex("28B6"), 1, "CMDMON" ) +d_SetWordEquate(hex("2967"), 1, "CMDLIMIT" ) +d_SetWordEquate(hex("29CE"), 1, "CMDCONT" ) +d_SetWordEquate(hex("2902"), 1, "CMDGET" ) +d_SetWordEquate(hex("29FE"), 1, "CMDINP" ) +d_SetWordEquate(hex("2A1C"), 1, "CMDOUT" ) +d_SetWordEquate(hex("28B9"), 1, "CMDCURSOR" ) +d_SetWordEquate(hex("2AA6"), 1, "CMDSET" ) +d_SetWordEquate(hex("2AAA"), 1, "CMDRESET" ) +d_SetWordEquate(hex("2A2F"), 1, "CMDAUTO" ) +d_SetWordEquate(hex("33AB"), 1, "CMDCOPY" ) +d_SetWordEquate(hex("32D4"), 1, "CMDPAGE" ) + +d_SetWordEquate(hex("13AE"), 1, "OVFLERR" ) +d_SetWordEquate(hex("13B1"), 1, "ILDATERR" ) +d_SetWordEquate(hex("13B4"), 1, "DATMISERR" ) +d_SetWordEquate(hex("13B7"), 1, "STRLENERR" ) +d_SetWordEquate(hex("13BA"), 1, "MEMERR" ) +d_SetWordEquate(hex("13C0"), 1, "LINELENERR" ) +d_SetWordEquate(hex("13C3"), 1, "GOSUBERR" ) +d_SetWordEquate(hex("13C6"), 1, "FORNEXTERR" ) +d_SetWordEquate(hex("13C9"), 1, "FUNCERR" ) +d_SetWordEquate(hex("13CC"), 1, "NEXTFORERR" ) +d_SetWordEquate(hex("13CF"), 1, "RETGOSBERR" ) +d_SetWordEquate(hex("13D2"), 1, "UNDEFFNERR" ) +d_SetWordEquate(hex("13D5"), 1, "LINEERR" ) +d_SetWordEquate(hex("13D8"), 1, "CONTERR" ) +d_SetWordEquate(hex("13DB"), 1, "BADWRERR" ) +d_SetWordEquate(hex("13DE"), 1, "CMDSTMTERR" ) +d_SetWordEquate(hex("13E1"), 1, "READDATAERR") +d_SetWordEquate(hex("13E4"), 1, "OPENERR" ) +d_SetWordEquate(hex("13E7"), 1, "UNKNWNERR" ) +d_SetWordEquate(hex("13EA"), 1, "OUTFILEERR" ) +d_SetWordEquate(hex("13ED"), 1, "PRTNRDYERR" ) +d_SetWordEquate(hex("13F0"), 1, "PRTHWERR" ) +d_SetWordEquate(hex("13F3"), 1, "PRTPAPERERR") +d_SetWordEquate(hex("13F6"), 1, "CHKSUMERR" ) + +d_SetWordEquate(hex("1347"), 1, "TITLEMSG" ) +d_SetWordEquate(hex("1364"), 1, "COPYRMSG" ) +d_SetWordEquate(hex("1384"), 1, "READYMSG" ) +d_SetWordEquate(hex("138A"), 1, "ERRORMSG" ) +d_SetWordEquate(hex("1391"), 1, "INMSG" ) +d_SetWordEquate(hex("1395"), 1, "BREAKMSG" ) +d_SetWordEquate(hex("139C"), 1, "BYTESMSG" ) +d_SetWordEquate(hex("13A3"), 1, "ERRCODE" ) + +d_SetWordEquate(hex("1332"), 1, "MSGNL" ) +d_SetWordEquate(hex("167B"), 1, "UNUSEDTBL1" ) +d_SetWordEquate(hex("167D"), 1, "UNUSEDTBL2" ) +d_SetWordEquate(hex("124E"), 1, "WARMSTRT" ) +d_SetWordEquate(hex("167F"), 1, "OPERATORTBL") +d_SetWordEquate(hex("17FC"), 1, "STRTONUM" ) +d_SetWordEquate(hex("1E88"), 1, "GETNUM" ) +d_SetWordEquate(hex("173F"), 1, "SKIPSPACE" ) +d_SetWordEquate(hex("173E"), 1, "INCSKIPSPCE") +d_SetWordEquate(hex("177B"), 1, "EXECHL" ) +d_SetWordEquate(hex("1795"), 1, "EXECNOTCHR" ) +d_SetWordEquate(hex("17A3"), 1, "MATCHCHR" ) +d_SetWordEquate(hex("490D"), 0, "LINEBUFR" ) + +-- XPATCH labels/addresses. +d_SetWordEquate(hex("5A63"), 1, "XPINIT" ) +d_SetWordEquate(hex("5B55"), 1, "RELOC3302" ) +d_SetWordEquate(hex("5BB0"), 1, "RELOC4806" ) + +-- Comments to be added at fixed addresses. +d_SetComment( hex("1250"), "Sharp defined BASIC restart location from Monitor." ) +d_SetComment( hex("5B55"), "Relocated to 0x3302 for 0x5B bytes." ) +d_SetComment( hex("5BB0"), "Relocated to 0x4806 for 0xF8 bytes." ) +d_SetComment( hex("5CA8"), "End of Relocated code." ) + +-- Known Sharp Constants. +d_SetWordEquate(hex("10F0"), 0, "ATRB" ) -- ATTRIBUTE +d_SetWordEquate(hex("10F1"), 0, "NAME" ) -- FILE NAME +d_SetWordEquate(hex("1102"), 0, "SIZE" ) -- BYTESIZE +d_SetWordEquate(hex("1104"), 0, "DTADR" ) -- DATA ADDRESS +d_SetWordEquate(hex("1106"), 0, "EXADR" ) -- EXECUTION ADDRESS +d_SetWordEquate(hex("1108"), 0, "COMNT" ) -- COMMENT +d_SetWordEquate(hex("1164"), 0, "SWPW" ) -- SWEEP WORK +d_SetWordEquate(hex("116E"), 0, "KDATW" ) -- KEY WORK +d_SetWordEquate(hex("1170"), 0, "KANAF" ) -- KANA FLAG (01=GRAPHIC MODE) +d_SetWordEquate(hex("1171"), 0, "DSPXY" ) -- DISPLAY COORDINATES +d_SetWordEquate(hex("1173"), 0, "MANG" ) -- COLUMN MANAGEMENT +d_SetWordEquate(hex("1179"), 0, "MANGE" ) -- COLUMN MANAGEMENT END +d_SetWordEquate(hex("117A"), 0, "PBIAS" ) -- PAGE BIAS +d_SetWordEquate(hex("117B"), 0, "ROLTOP" ) -- ROLL TOP BIAS +d_SetWordEquate(hex("117C"), 0, "MGPNT" ) -- COLUMN MANAG. POINTER +d_SetWordEquate(hex("117D"), 0, "PAGETP" ) -- PAGE TOP +d_SetWordEquate(hex("117F"), 0, "ROLEND" ) -- ROLL END +d_SetWordEquate(hex("118E"), 0, "FLASH" ) -- FLASHING DATA +d_SetWordEquate(hex("118F"), 0, "SFTLK" ) -- SHIFT LOCK +d_SetWordEquate(hex("1190"), 0, "REVFLG" ) -- REVERSE FLAG +d_SetWordEquate(hex("1191"), 0, "SPAGE" ) -- PAGE CHANGE +d_SetWordEquate(hex("1192"), 0, "FLSDT" ) -- CURSOR DATA +d_SetWordEquate(hex("1193"), 0, "STRGF" ) -- STRING FLAG +d_SetWordEquate(hex("1194"), 0, "DPRNT" ) -- TAB COUNTER +d_SetWordEquate(hex("1195"), 0, "TMCNT" ) -- TAPE MARK COUNTER +d_SetWordEquate(hex("1197"), 0, "SUMDT" ) -- CHECK SUM DATA +d_SetWordEquate(hex("1199"), 0, "CSMDT" ) -- FOR COMPARE SUM DATA +d_SetWordEquate(hex("119B"), 0, "AMPM" ) -- AMPM DATA +d_SetWordEquate(hex("119C"), 0, "TIMFG" ) -- TIME FLAG +d_SetWordEquate(hex("119D"), 0, "SWRK" ) -- KEY SOUND FLAG +d_SetWordEquate(hex("119E"), 0, "TEMPW" ) -- TEMPO WORK +d_SetWordEquate(hex("119F"), 0, "ONTYO" ) -- ONTYO WORK +d_SetWordEquate(hex("11A0"), 0, "OCTV" ) -- OCTAVE WORK +d_SetWordEquate(hex("11A1"), 0, "RATIO" ) -- ONPU RATIO +d_SetWordEquate(hex("11A3"), 0, "BUFER" ) -- GET LINE BUFFER + + +---------------------------------------- +-- End of configuration file +---------------------------------------- diff --git a/software/DIS/XPATCH/XPATCH_5510_V2.2.MZF b/software/DIS/XPATCH/XPATCH_5510_V2.2.MZF new file mode 100644 index 0000000..14c0ce3 Binary files /dev/null and b/software/DIS/XPATCH/XPATCH_5510_V2.2.MZF differ diff --git a/software/DIS/XPATCH/dz80.ini b/software/DIS/XPATCH/dz80.ini new file mode 120000 index 0000000..4193260 --- /dev/null +++ b/software/DIS/XPATCH/dz80.ini @@ -0,0 +1 @@ +XPATCH.ini \ No newline at end of file diff --git a/software/asm/BASIC.asm b/software/asm/RFSBASIC.asm similarity index 99% rename from software/asm/BASIC.asm rename to software/asm/RFSBASIC.asm index 6a3f8f6..ee68400 100644 --- a/software/asm/BASIC.asm +++ b/software/asm/RFSBASIC.asm @@ -52,7 +52,7 @@ HEADER2: IF BUILD_RFS = 1 ENDIF HEADER3: IF BUILD_TZFS = 1 - DB "TZFS BASIC V1.1", 0DH, 0DH ; Title/Name (17 bytes). + DB "RFS BASIC V1.1 ", 0DH, 0DH ; Title/Name (17 bytes). DW (CODEEND - CODESTART) + (RELOCEND - RELOC) ; Size of program. DW 01200H ; Load address of program. DW RELOC ; Exec address of program. @@ -152,8 +152,10 @@ INIT3: ; Setup keyboard buffer control. LD (FLASHCTL),A ; Change to 80 character mode. + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 128 ; 80 char mode. - LD (DSPCTL), A + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A CALL MLDSP CALL BEL ; Beep to indicate startup - for cases where screen is slow to startup. LD A,0FFH @@ -446,21 +448,21 @@ WORDTB: DW PEND DW CONT DW LIST DW CLEAR - DW SETANSITERM ; Enable/disable the ANSI Terminal Emulator. + DW SETANSITERM ; Enable/disable the ANSI Terminal Emulator. ; Optional commands to be builtin when a tranZPUter board is present. OPTIONS1: IF BUILD_TZFS = 1 - DW CLOADTZ ; Load tokenised BASIC program. - DW CSAVETZ ; Save tokenised BASIC program. - DW LOAD ; Load ASCII text BASIC program. - DW SAVE ; Save BASIC as ASCII text. - DW SETFREQ ; Set the CPU Frequency. - DW DIRSDCARD ; List out the SD directory. - DW SETDIR ; Change directory for all load and save operations. + DW CLOADTZ ; Load tokenised BASIC program. + DW CSAVETZ ; Save tokenised BASIC program. + DW LOAD ; Load ASCII text BASIC program. + DW SAVE ; Save BASIC as ASCII text. + DW SETFREQ ; Set the CPU Frequency. + DW DIRSDCARD ; List out the SD directory. + DW SETDIR ; Change directory for all load and save operations. ENDIF OPTIONS2: IF BUILD_RFS = 1 - DW CLOAD80A ; Load tokenised BASIC program from tape. - DW CSAVE80A ; Save tokenised BASIC program to tape. + DW CLOAD80A ; Load tokenised BASIC program from tape. + DW CSAVE80A ; Save tokenised BASIC program to tape. DW REM DW REM DW REM @@ -468,8 +470,8 @@ OPTIONS2: IF BUILD_RFS = 1 DW REM ENDIF OPTIONS3: IF BUILD_MZ80A = 1 - DW CLOAD80A ; Load tokenised BASIC program from tape. - DW CSAVE80A ; Save tokenised BASIC program to tape. + DW CLOAD80A ; Load tokenised BASIC program from tape. + DW CSAVE80A ; Save tokenised BASIC program to tape. DW REM DW REM DW REM @@ -480,61 +482,61 @@ OPTIONS3: IF BUILD_MZ80A = 1 ; RESERVED WORD TOKEN VALUES -ZEND EQU 080H ; END - ZEND marks the start of the table. -ZFOR EQU 081H ; FOR -ZDATA EQU 083H ; DATA -ZGOTO EQU 088H ; GOTO -ZGOSUB EQU 08CH ; GOSUB -ZREM EQU 08EH ; REM -ZPRINT EQU 09EH ; PRINT -ZNEW EQU 0AAH ; NEW - ZNEW marks the end of the table - ; AA..BF are reserved for future commands. +ZEND EQU 080H ; END - ZEND marks the start of the table. +ZFOR EQU 081H ; FOR +ZDATA EQU 083H ; DATA +ZGOTO EQU 088H ; GOTO +ZGOSUB EQU 08CH ; GOSUB +ZREM EQU 08EH ; REM +ZPRINT EQU 09EH ; PRINT +ZNEW EQU 0AAH ; NEW - ZNEW marks the end of the table + ; AA..BF are reserved for future commands. ; Space for expansion, a block of tokens for commands has been created from 0xA5 to 0xBF. -FUNCSTRT EQU 0C0H ; Function start. -ZTAB EQU FUNCSTRT + 00H ; 0A5H ; TAB -ZTO EQU FUNCSTRT + 01H ; 0A6H ; TO -ZFN EQU FUNCSTRT + 02H ; 0A7H ; FN -ZSPC EQU FUNCSTRT + 03H ; 0A8H ; SPC -ZTHEN EQU FUNCSTRT + 04H ; 0A9H ; THEN -ZNOT EQU FUNCSTRT + 05H ; 0AAH ; NOT -ZSTEP EQU FUNCSTRT + 06H ; 0ABH ; STEP +FUNCSTRT EQU 0C0H ; Function start. +ZTAB EQU FUNCSTRT + 00H ; 0A5H ; TAB +ZTO EQU FUNCSTRT + 01H ; 0A6H ; TO +ZFN EQU FUNCSTRT + 02H ; 0A7H ; FN +ZSPC EQU FUNCSTRT + 03H ; 0A8H ; SPC +ZTHEN EQU FUNCSTRT + 04H ; 0A9H ; THEN +ZNOT EQU FUNCSTRT + 05H ; 0AAH ; NOT +ZSTEP EQU FUNCSTRT + 06H ; 0ABH ; STEP -ZPLUS EQU FUNCSTRT + 07H ; 0ACH ; + -ZMINUS EQU FUNCSTRT + 08H ; 0ADH ; - -ZTIMES EQU FUNCSTRT + 09H ; 0AEH ; * -ZDIV EQU FUNCSTRT + 0AH ; 0AFH ; / - ; 0B0H - ; 0B1H -ZOR EQU FUNCSTRT + 0dH ; 0B2H ; OR -ZGTR EQU FUNCSTRT + 0eH ; 0B3H ; > -ZEQUAL EQU FUNCSTRT + 0fH ; 0B4H ; M -ZLTH EQU FUNCSTRT + 10H ; 0B5H ; < -ZSGN EQU FUNCSTRT + 11H ; 0B6H ; SGN - ; 0B7H - ; 0B8H - ; 0B9H - ; 0BAH - ; 0BBH - ; 0BCH - ; 0BDH - ; 0BEH - ; 0BFH - ; 0C0H - ; 0C1H - ; 0C2H - ; 0C3H - ; 0C4H - ; 0C5H - ; 0C6H -ZPOINT EQU FUNCSTRT + 22H ; 0C7H ; POINT - ; 0C8H - ; 0C9H - ; 0CAH - ; 0CBH - ; 0CCH -ZLEFT EQU FUNCSTRT + 2aH ; 0CFH ; LEFT$ +ZPLUS EQU FUNCSTRT + 07H ; 0ACH ; + +ZMINUS EQU FUNCSTRT + 08H ; 0ADH ; - +ZTIMES EQU FUNCSTRT + 09H ; 0AEH ; * +ZDIV EQU FUNCSTRT + 0AH ; 0AFH ; / + ; 0B0H + ; 0B1H +ZOR EQU FUNCSTRT + 0dH ; 0B2H ; OR +ZGTR EQU FUNCSTRT + 0eH ; 0B3H ; > +ZEQUAL EQU FUNCSTRT + 0fH ; 0B4H ; M +ZLTH EQU FUNCSTRT + 10H ; 0B5H ; < +ZSGN EQU FUNCSTRT + 11H ; 0B6H ; SGN + ; 0B7H + ; 0B8H + ; 0B9H + ; 0BAH + ; 0BBH + ; 0BCH + ; 0BDH + ; 0BEH + ; 0BFH + ; 0C0H + ; 0C1H + ; 0C2H + ; 0C3H + ; 0C4H + ; 0C5H + ; 0C6H +ZPOINT EQU FUNCSTRT + 22H ; 0C7H ; POINT + ; 0C8H + ; 0C9H + ; 0CAH + ; 0CBH + ; 0CCH +ZLEFT EQU FUNCSTRT + 2aH ; 0CFH ; LEFT$ ; Space for expansion, reserve a block of tokens for functions. @@ -623,7 +625,7 @@ INITAB: JP WARMST ; Warm start jump RET DB 1 ; POS (x) number (1) - DB COLW ; Terminal width +INITABW: DB COLW ; Terminal width DB 28 ; Width for commas (3 columns) DB 0 ; No nulls after input bytes DB 0 ; Output enabled (^O off) @@ -5556,7 +5558,6 @@ SWEP1: LD D,088H ; Break JR SWEP9 SWEP1A: JP REBOOT ; Shift + Graph + Break ON = RESET. ; - JR SWEP9 SWEP6: LD HL,SWPW PUSH HL JR NC,SWEP11 @@ -8611,7 +8612,7 @@ NUMBERBUF DS 20, 0 ; Buffe NUMBERPOS DW 1, NUMBERBUF ; Address within buffer CHARACTERNO DS 1, 0 ; Byte within Ansi sequence. 0=first,255=other CURSORCOUNT DS 1, 0 ; 1/50ths of a second since last change -FONTSET DS 1, 017H ; Ansi font setup - Blue background White Foreground as default. +FONTSET DS 1, 071H ; Ansi font setup - Blue background White Foreground as default. JSW_FF DS 1, 0 ; Byte value to turn on/off FF routine JSW_LF DS 1, 0 ; Byte value to turn on/off LF routine CHARACTER DS 1, 0 ; To buffer character to be printed. diff --git a/software/asm/SA-5510_RFS.asm b/software/asm/SA-5510_RFS.asm new file mode 100644 index 0000000..342859d --- /dev/null +++ b/software/asm/SA-5510_RFS.asm @@ -0,0 +1,7508 @@ +; Disassembly of the file "SA-5510.bin" +; +; CPU Type: Z80 +; +; Created with dZ80 2.1 +; +; on Wednesday, 31 of March 2021 at 11:11 PM +; + +BUILD_ORIG EQU 0 ; Build BASIC SA-5510 with original configuration, identical to version loaded from tape. +BUILD_RFS EQU 1 ; Build BASIC SA-5510 for use under RFS with SD Card access. + +PRTC EQU 0FEH +PRTD EQU 0FFH +GETL EQU 00003H +LETNL EQU 00006H +NL EQU 00009H +PRNTS EQU 0000CH +PRNTT EQU 0000FH +PRNT EQU 00012H +MSG EQU 00015H +MSGX EQU 00018H +GETKY EQU 0001BH +BRKEY EQU 0001EH +?WRI EQU 00021H +?WRD EQU 00024H +?RDI EQU 00027H +?RDD EQU 0002AH +?VRFY EQU 0002DH +MELDY EQU 00030H +?TMST EQU 00033H +TIMRD EQU 0003BH +BELL EQU 0003EH +XTEMP EQU 00041H +MSTA EQU 00044H +MSTP EQU 00047H +MONIT EQU 00000H +SS EQU 00089H +ST1 EQU 00095H +HLHEX EQU 00410H +_2HEX EQU 0041FH +?MODE EQU 0074DH +?KEY EQU 008CAH +PRNT3 EQU 0096CH +?ADCN EQU 00BB9H +?DACN EQU 00BCEH +?DSP EQU 00DB5H +?BLNK EQU 00DA6H +?DPCT EQU 00DDCH +PRTHL EQU 003BAH +PRTHX EQU 003C3H +ASC EQU 003DAH +HEX EQU 003F9H +DPCT EQU 00DDCH +DLY12 EQU 00DA7H +DLY12A EQU 00DAAH +?RSTR1 EQU 00EE6H +MOTOR EQU 006A3H +CKSUM EQU 0071AH +GAP EQU 0077AH +WTAPE EQU 00485H +MSTOP EQU 00700H +LINEBUFR EQU 0490DH +ATRB EQU 010F0H +NAME EQU 010F1H +SIZE EQU 01102H +DTADR EQU 01104H +EXADR EQU 01106H +COMNT EQU 01108H +SWPW EQU 01164H +KDATW EQU 0116EH +KANAF EQU 01170H +DSPXY EQU 01171H +MANG EQU 01173H +MANGE EQU 01179H +PBIAS EQU 0117AH +ROLTOP EQU 0117BH +MGPNT EQU 0117CH +PAGETP EQU 0117DH +ROLEND EQU 0117FH +FLASH EQU 0118EH +SFTLK EQU 0118FH +REVFLG EQU 01190H +SPAGE EQU 01191H +FLSDT EQU 01192H +STRGF EQU 01193H +DPRNT EQU 01194H +TMCNT EQU 01195H +SUMDT EQU 01197H +CSMDT EQU 01199H +AMPM EQU 0119BH +TIMFG EQU 0119CH +SWRK EQU 0119DH +TEMPW EQU 0119EH +ONTYO EQU 0119FH +OCTV EQU 011A0H +RATIO EQU 011A1H +BUFER EQU 011A3H +CMT_RDINF EQU 0E886H ; UROMADDR+86H - Tape/SD intercept handler - Read Header +CMT_RDDATA EQU 0E889H ; UROMADDR+89H - Tape/SD intercept handler - Read Data +CMT_WRINF EQU 0E88CH ; UROMADDR+80H - Tape/SD intercept handler - Write Header +CMT_WRDATA EQU 0E88FH ; UROMADDR+8FH - Tape/SD intercept handler - Write Data +CMT_VERIFY EQU 0E892H ; UROMADDR+92H - Tape/SD intercept handler - Verify Data +CMT_DIR EQU 0E895H ; UROMADDR+95H - SD directory command. +PRGSTART EQU 011FDH ; Build includes the tape copy code under original build. + + ; Original build set the tape handlers to original. + IF BUILD_ORIG = 1 +QRDI EQU ?RDI +QRDD EQU ?RDD +QWRI EQU ?WRI +QWRD EQU ?WRD + ENDIF + IF BUILD_RFS = 1 +QRDI EQU RFSRDI +QRDD EQU CMT_RDDATA +QWRI EQU CMT_WRINF +QWRD EQU CMT_WRDATA + ENDIF + + ; Create an MZF Tape header. + ORG ATRB + + ; Declare the MZF header to bootstrap BASIC from tape/SD. +BOOTATRB: DB 01h ; Code Type, 01 = Machine Code. +BOOTNAME: IF BUILD_ORIG = 1 + DB "BASIC SA-5510 ", 0Dh ; Title/Name (17 bytes). + ENDIF + IF BUILD_RFS = 1 + DB "BASIC SA-5510RFS", 0Dh ; Title/Name (17 bytes). + ENDIF +BOOTSIZE: DW BASICEND - TAPECOPY ; Size of program. +BOOTDTADR: DW TAPECOPY ; Load address of program. +BOOTEXADR: DW COLDSTRT ; Exec address of program. +BOOTCOMNT: DS 104 ; COMMENT + + ORG PRGSTART + +TAPECOPY: IF BUILD_ORIG = 1 + JP TAPECOPYPRG + ENDIF + IF BUILD_RFS = 1 ; Under RFS build the tape copy code isnt needed so place NOP's where the call resides. + NOP + NOP + NOP + ENDIF + +COLDSTRT: LD HL,048FFH ; Scan for memory top. + IF BUILD_ORIG = 1 + LD D,0D0H ; Full memory for original build + ENDIF + IF BUILD_RFS = 1 + LD D,0CEH ; RFS uses the top 512byte sector for SD card operations so need to limit memory. + ENDIF +L1205: INC HL + LD A,H + CP D + JR Z,L1214 ; (+00aH) + LD A,0FFH ; Set location to 255, reread and subtract, should be 0 if real memory. + LD (HL),A + SUB (HL) + JR NZ,L1214 ; (+004H) + LD (HL),A + CP (HL) + JR Z,L1205 ; (-00fH) +L1214: LD (04908H),HL + LD (0490AH),HL + LD SP,HL + CALL BELL + XOR A + LD D,A + LD E,A + CALL ?TMST + CALL L132C + CALL L1313 + LD DE,TITLEMSG + CALL L1329 + LD DE,COPYRMSG + CALL L1329 + CALL L131E + CALL L1944 + LD BC,0000AH + CALL L184D + CALL L1841 + CALL MSGNL + LD DE,BYTESMSG + CALL MSGX + ; + ; Warm start, entry point after command error or completion. + ; +WARMSTRT: NOP + NOP +WARMSTRTMON:NOP ; Sharp defined BASIC restart location from Monitor. + NOP + NOP + NOP + NOP + NOP + NOP + NOP + LD SP,(0490AH) + LD DE,READYMSG + CALL MSGNL +L1262: LD HL,L12B8 + PUSH HL +L1266: LD HL,0504DH + CALL L19BA + CALL L19BA + CALL NL + LD DE,LINEBUFR + LD A,(L2A83) + OR A + JR Z,L1299 ; (+01eH) + LD HL,(L2A84) + PUSH HL + LD BC,(02A86H) + ADD HL,BC + JR C,L12A6 ; (+020H) + LD (L2A84),HL + POP HL + PUSH DE + CALL STRTONUM + EX DE,HL + LD (HL),020H + INC HL + LD (HL),00DH + EX DE,HL + POP DE + CALL MSGX +L1299: CALL L1338 + LD A,(DE) + CP 01BH + RET NZ + XOR A + LD (L2A83),A + JR L1299 ; (-00dH) + +L12A6: XOR A + LD (L2A83),A + JP SYNTAXERR + + CALL L1266 + LD A,(DE) + CP 00DH + RET Z + LD HL,(0490AH) + LD SP,HL +L12B8: CALL L146A + CALL L14F8 + LD HL,(04A10H) + LD A,L + OR H + JR NZ,L12D4 ; (+00fH) + LD HL,04A12H + LD (05051H),HL + CALL EXECNOTCHR + DB 00DH + DW L1B5F + JP L1262 + +L12D4: CALL L12DA + JP L1262 + +L12DA: CALL L145E + CALL L1459 + CALL L18B0 + RET PE + LD (DE),A + CALL Z,L1302 + LD A,(04A12H) + CP 00DH + RET Z + CALL L18B3 + DI + LD (DE),A + LD (04A0EH),HL + EX DE,HL + LD HL,04A0EH + CALL L18F2 + CALL L18A2 + JR L130C ; (+00aH) + +L1302: CALL L18F2 + EX DE,HL + CALL L1873 + CALL L1762 +L130C: CALL L19C3 + EX DE,HL + JP L18EA + +L1313: LD B,021H +L1315: LD A,0CFH + CALL PRNT + DJNZ L1315 ; (-007H) + JR L132C ; (+00eH) + +L131E: LD B,021H +L1320: LD A,0D7H + CALL PRNT + DJNZ L1320 ; (-007H) + JR L132C ; (+003H) + +L1329: CALL MSGX +L132C: CALL LETNL + JP LETNL + +MSGNL: CALL NL + JP MSGX + +L1338: CALL GETL + LD A,0C9H + CALL ?DPCT + LD A,000H + LD HL,SFTLK + LD (HL),A + RET + +TITLEMSG: DB " BASIC ",0A6H,0B0H,096H,092H,09DH,09EH,09DH,092H,096H,092H,09DH," SA-5510" + DB 00DH +COPYRMSG: DB " C",0B7H,09EH,0BDH,09DH,0A6H,097H,098H,096H," 1981 ",09AH,0BDH," SHARP C",0B7H,09DH,09EH,"." + DB 00DH +READYMSG: DB "R",092H,0A1H,09CH,0BDH + DB 00DH +ERRORMSG: DB "*E",09DH,09DH,0B7H,09DH + DB 00DH +INMSG: DB " ",0A6H,0B0H + DB 00DH +BREAKMSG: DB "*B",09DH,092H,0A1H,0A9H + DB 00DH +BYTESMSG: DB " B",0BDH,096H,092H,0A4H + DB 00DH +ERRCODE: DB 012H ; Storage of error code + DB 000H +L13A5: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + + ; Error table. A is loaded with code and the 01 is LD BC, so a 3E 01 would be LD A,01 and the next entry would be skipped as it would see 01 3E 02 or LB BC,023E. + ; Designed to save code, the error code is loaded into A then it falls all the way to the bottom of this table before returning. +SYNTAXERR: LD A,1 ; Syntax error + DB 001H +OVFLERR: LD A,2 ; Operation result overflow + DB 001H +ILDATERR: LD A,3 ; Illegal data + DB 001H +DATMISERR: LD A,4 ; Data type mismatch + DB 001H +STRLENERR: LD A,5 ; String length exceeded 255 characters + DB 001H +MEMERR: LD A,6 ; Insufficient memory capacity. + DB 001H + LD A,7 ; Size of array larger than previous definition. + DB 001H +LINELENERR: LD A,8 ; Length of text line too long. + DB 001H +GOSUBERR: LD A,10 ; GOSUB nest exceeds 16 deep. + DB 001H +FORNEXTERR: LD A,11 ; FOR-NEXT nest exceeds 16 deep. + DB 001H +FUNCERR: LD A,12 ; FUNC levels exceed depth of 6. + DB 001H +NEXTFORERR: LD A,13 ; NEXT without FOR + DB 001H +RETGOSBERR: LD A,14 ; RETURN without GOSUB + DB 001H +UNDEFFNERR: LD A,15 ; Undefined function + DB 001H +LINEERR: LD A,16 ; Unused reference line number + DB 001H +CONTERR: LD A,17 ; CONT cannot be executed + DB 001H +BADWRERR: LD A,18 ; Write statement to BASIC error + DB 001H +CMDSTMTERR: LD A,19 ; Direct mode and statements are mixed + DB 001H +READDATAERR:LD A,24 ; READ without DATA + DB 001H +OPENERR: LD A,43 ; OPEN issued on already open file. + DB 001H +UNKNWNERR: LD A,60 ; + DB 001H +OUTFILEERR: LD A,63 ; Out of file + DB 001H +PRTNRDYERR: LD A,65 ; Printer not ready + DB 001H +PRTHWERR: LD A,66 ; Printer hardware error + DB 001H +PRTPAPERERR:LD A,67 ; Out of paper + DB 001H +CHKSUMERR: LD A,70 ; Check sum error + JR L1403 ; (+009H) + +L13FA: LD IY,L1400 + RET + + NOP +L1400: LD A,(013FFH) +L1403: LD (ERRCODE),A + CALL L1ABF + CALL L1AB8 + JR Z,L142A ; (+01cH) + LD HL,05056H + LD A,(HL) + CP 001H + JR NZ,L1421 ; (+00bH) + INC (HL) + LD HL,(0490AH) + LD SP,HL + LD HL,(05057H) + JP L1EAA + +L1421: CALL L1991 + CALL L1978 + CALL L199E +L142A: LD DE,ERRORMSG + CALL MSGNL + LD HL,(ERRCODE) + CALL L1453 + JR L143E ; (+006H) + +L1438: LD DE,BREAKMSG + CALL MSGNL +L143E: LD BC,WARMSTRT + PUSH BC + XOR A + LD (L2A83),A + CALL BELL + CALL L1AB8 + RET Z + LD DE,INMSG + CALL MSGX +L1453: CALL L1841 + JP MSGX + +L1459: XOR A + LD (L1463),A + RET + +L145E: XOR A + LD (05059H),A + RET + +L1463: NOP +L1464: SBC A,C + LD H,D + RET Z + RRCA + SUB B + LD H,D +L146A: LD HL,LINEBUFR + CALL L17F6 + LD (04A10H),DE + LD DE,04A12H + LD C,000H +L1479: CALL L1561 + RET Z + OR A + JP M,SYNTAXERR + DEC DE + PUSH HL + LD HL,L1479 + EX (SP),HL + CP 03FH + LD B,088H + JR Z,L1498 ; (+00bH) + DEC HL + PUSH DE + LD DE,CMDWORDTBL + CALL L14C7 + JR NZ,L14A8 ; (+011H) + POP DE +L1498: LD A,080H + CALL L14B3 + CP 084H + RET NC +L14A0: CALL L1595 + CP ':' + RET Z + POP AF + RET + +L14A8: LD DE,UNUSEDTBL1 + CALL L14C7 + JR NZ,L14B9 ; (+009H) + POP DE + LD A,081H +L14B3: LD (DE),A + INC DE +L14B5: LD A,B + LD (DE),A + INC DE + RET + +L14B9: LD DE,OPERATORTBL + LD B,083H + CALL L14C9 + POP DE + JR Z,L14B5 ; (-00fH) + INC HL + INC DE + RET + +L14C7: LD B,080H +L14C9: PUSH HL +L14CA: CALL SKIPSPACE + OR A + JP M,L14F1 + EX DE,HL + CALL SKIPSPACE + EX DE,HL + SUB (HL) + INC HL + INC DE + JR Z,L14CA ; (-011H) + ADD A,080H + JR NZ,L14E2 ; (+003H) + INC SP + INC SP + RET + +L14E2: POP HL + DEC DE +L14E4: LD A,(DE) + INC DE + OR A + JR Z,L14EF ; (+006H) + JP P,L14E4 + INC B + JR L14C9 ; (-026H) + +L14EF: DEC A + RET + +L14F1: POP HL + CALL SKIPSPACE + DEC A + LD A,(HL) + RET + +L14F8: LD HL,(04A10H) + LD DE,LINEBUFR + LD C,0B2H + CALL L17FE + LD A,020H + LD (DE),A + INC DE + LD HL,04A12H +L150A: CALL L1561 + RET Z + SUB 080H + JR C,L150A ; (-008H) + DEC DE + DEC C + CP 003H + JR C,L1525 ; (+00dH) + SUB 002H + LD B,A + PUSH HL + LD HL,OPERATORTBL +L151F: CALL L1554 + POP HL + JR L150A ; (-01bH) + +L1525: EX AF,AF' + LD A,(HL) + INC HL + SUB 07FH + LD B,A + PUSH HL + EX AF,AF' + OR A + JR Z,L153D ; (+00dH) + LD HL,L151F + PUSH HL + LD HL,UNUSEDTBL1 + DEC A + RET Z + LD HL,UNUSEDTBL2 + RET + +L153D: PUSH BC + LD HL,CMDWORDTBL + CALL L1554 + POP AF + LD HL,L150A + EX (SP),HL + CP 004H + RET NC + JP L14A0 + +L154F: BIT 7,(HL) + INC HL + JR Z,L154F ; (-005H) +L1554: DJNZ L154F ; (-007H) +L1556: CALL L158A + ADD A,080H + JR NC,L1556 ; (-007H) + DEC DE + LD (DE),A + INC DE + RET + +L1561: CALL L158A + RET Z + CALL L1575 + JR Z,L1561 ; (-009H) + CP 022H + RET NZ + CALL L1581 + CP 00DH + JR NZ,L1561 ; (-013H) + RET + +L1575: CP 020H + RET Z + CP PRTD + RET Z + CP 028H + RET Z + CP 029H + RET + +L1581: CALL L158A + RET Z + CP 022H + JR NZ,L1581 ; (-008H) + RET + +L158A: LD A,(HL) + LD (DE),A + INC HL + INC DE + INC C + JP Z,LINELENERR + CP 00DH + RET + +L1595: CALL L158A + RET Z + CP ':' + RET Z + CP 022H + JR NZ,L1595 ; (-00bH) + CALL L1581 + CP 00DH + JR NZ,L1595 ; (-012H) + RET + + ; Reserved word table. +CMDWORDTBL: DB "RE", "M" | 080H + DB "DAT", "A" | 080H + DB 0FFH | 080H + DB 0FFH | 080H + DB "REA", "D" | 080H + DB "LIS", "T" | 080H + DB "RU", "N" | 080H + DB "NE", "W" | 080H + DB "PRIN", "T" | 080H + DB "LE", "T" | 080H + DB "FO", "R" | 080H + DB "I", "F" | 080H + DB "THE", "N" | 080H + DB "GOT", "O" | 080H + DB "GOSU", "B" | 080H + DB "RETUR", "N" | 080H + DB "NEX", "T" | 080H + DB "STO", "P" | 080H + DB "EN", "D" | 080H + DB 0FFH | 080H + DB "O", "N" | 080H + DB "LOA", "D" | 080H + DB "SAV", "E" | 080H + DB "VERIF", "Y" | 080H + DB "POK", "E" | 080H + DB "DI", "M" | 080H + DB "DEF F", "N" | 080H + DB "INPU", "T" | 080H + DB "RESTOR", "E" | 080H + DB "CL", "R" | 080H + DB "MUSI", "C" | 080H + DB "TEMP", "O" | 080H + DB "USR", "(" | 080H + DB "WOPE", "N" | 080H + DB "ROPE", "N" | 080H + DB "CLOS", "E" | 080H + DB "MO", "N" | 080H + DB "LIMI", "T" | 080H + DB "CON", "T" | 080H + DB "GE", "T" | 080H + DB "INP", "@" | 080H + DB "OUT", "@" | 080H + DB "CURSO", "R" | 080H + DB "SE", "T" | 080H + DB "RESE", "T" | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB "AUT", "O" | 080H + DB 0FFH | 080H + DB 0FFH | 080H + DB "COPY/", "P" | 080H + DB "PAGE/", "P" | 080H + IF BUILD_ORIG = 1 + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + ENDIF + IF BUILD_RFS = 1 + DB "DI", "R" | 080H ; New DIR command to list the SD card directory. + ENDIF + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 000H +UNUSEDTBL1: DB 07FH | 080H + DB 000H +UNUSEDTBL2: DB 07FH | 080H + DB 000H +OPERATORTBL:DB ">", "<" | 080H + DB "<", ">" | 080H + DB "=", "<" | 080H + DB "<", "=" | 080H + DB "=", ">" | 080H + DB ">", "=" | 080H + DB 07FH | 080H + DB ">" | 080H + DB "<" | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB "T", "O" | 080H + DB "STE", "P" | 080H + DB "LEFT$", "(" | 080H + DB "RIGHT$", "(" | 080H + DB "MID$", "(" | 080H + DB "LEN", "(" | 080H + DB "CHR$", "(" | 080H + DB "STR$", "(" | 080H + DB "ASC", "(" | 080H + DB "VAL", "(" | 080H + DB "PEEK", "(" | 080H + DB "TAB", "(" | 080H + DB "SPACE$", "(" | 080H + DB "SIZ", "E" | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB "STRING$", "(" | 080H + DB 07FH | 080H + DB "CHARACTER$", "(" | 080H + DB "CS", "R" | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB 07FH | 080H + DB "RND", "(" | 080H + DB "SIN", "(" | 080H + DB "COS", "(" | 080H + DB "TAN", "(" | 080H + DB "ATN", "(" | 080H + DB "EXP", "(" | 080H + DB "INT", "(" | 080H + DB "LOG", "(" | 080H + DB "LN", "(" | 080H + DB "ABS", "(" | 080H + DB "SGN", "(" | 080H + DB "SQR", "(" | 080H + DB 07FH | 080H + DB 000H +L173A: LD HL,(05051H) + DEC HL +INCSKIPSPCE:INC HL +SKIPSPACE: LD A,(HL) + CP 020H + RET NZ + JR INCSKIPSPCE ; (-007H) + +L1745: PUSH AF + LD A,00DH +L1748: CP (HL) + INC HL + JR NZ,L1748 ; (-004H) + POP AF + RET + +L174E: INC HL +L174F: CALL L193B + RET Z + CP 022H + JR NZ,L174E ; (-009H) +L1757: INC HL + LD A,(HL) + CP 00DH + RET Z + CP 022H + JR NZ,L1757 ; (-009H) + JR L174E ; (-014H) + +L1762: LD A,C + CPL + LD C,A + LD A,B + CPL + LD B,A + INC BC + RET + +L176A: CALL SKIPSPACE + SUB 030H + CP 00AH + LD A,(HL) + RET + +L1773: LD A,H + SUB D + RET NZ + LD A,L + SUB E + RET + +L1779: POP HL ; Get address after call and jump to it via a RET command. +L177A: EX (SP),HL +EXECHL: PUSH AF + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + POP AF + EX (SP),HL + RET + +L1783: POP HL +L1784: EX (SP),HL + INC HL + INC HL + EX (SP),HL + RET + +L1789: LD HL,(04E94H) + INC HL + INC HL + INC HL + INC HL + INC HL + RET + +L1792: LD HL,(05051H) +EXECNOTCHR: CALL SKIPSPACE ; Scan for character after command + EX (SP),HL + CP (HL) + INC HL + JR NZ,EXECHL ; (-022H) + INC HL + JR L17AB ; Move the return address pointer over the test character and function address. + +L17A0: LD HL,(05051H) +MATCHCHR: CALL SKIPSPACE + EX (SP),HL + CP (HL) + JP NZ,SYNTAXERR +L17AB: INC HL + EX (SP),HL + JR INCSKIPSPCE ; (-071H) + +L17AF: XOR A + CP H + JR Z,L17B7 ; (+004H) + EX DE,HL + CP H + JR NZ,L177A ; (-03dH) +L17B7: LD A,L + LD L,H +L17B9: OR A + JR Z,L17CC ; (+010H) + RRA + JR NC,L17C2 ; (+003H) + ADD HL,DE + JR C,L177A ; (-048H) +L17C2: OR A + JR Z,L17CC ; (+007H) + EX DE,HL + ADD HL,HL + EX DE,HL + JR NC,L17B9 ; (-011H) + JR L177A ; (-052H) + +L17CC: EX DE,HL + JR L1784 ; (-04bH) + +L17CF: CALL L17AF + OR C + INC DE + RET + +L17D5: LD DE,MONIT + LD B,D +L17D9: CALL L176A + JR NC,L1784 ; (-05aH) + AND 00FH + LD C,A + XOR A + PUSH HL + LD L,E + LD H,D + ADD HL,HL + RRA + ADD HL,HL + RRA + ADD HL,DE + RRA + ADD HL,HL + RRA + ADD HL,BC + EX DE,HL + POP HL + INC HL + ADC A,A + JR NC,L17D9 ; (-01bH) + JR L177A ; (-07cH) + +L17F6: CALL L17D5 + XOR E + INC DE + RET + + ; Method to convert a number in HL to a string. +STRTONUM: LD C,000H +L17FE: LD A,020H + LD (DE),A + INC DE + PUSH DE + LD B,000H + LD DE,L2710 + CALL L1827 + LD DE,003E8H + CALL L1827 + LD DE,00064H + CALL L1827 + LD DE,0000AH + CALL L1827 + LD A,L + POP HL + OR 030H + LD (HL),A + INC HL + LD (HL),00DH + EX DE,HL + RET + +L1827: LD A,0FFH +L1829: INC A + OR A + SBC HL,DE + JR NC,L1829 ; (-006H) + ADD HL,DE + OR A + JR NZ,L1836 ; (+003H) + OR B + RET Z + XOR A +L1836: INC B + OR 030H + POP DE + EX (SP),HL + LD (HL),A + INC HL + EX (SP),HL + PUSH DE + INC C + RET + + ; Convert a string into a numeric and store. +L1841: LD DE,04AB3H ; Conversion to be stored in location. + PUSH DE + CALL STRTONUM + POP DE + RET + +L184A: LD BC,MONIT +L184D: LD HL,(04E94H) + ADD HL,BC + JR C,L185C ; (+009H) + EX DE,HL + LD HL,0FF9CH + ADD HL,SP + XOR A + SBC HL,DE + RET NC +L185C: JP MEMERR + +L185F: PUSH HL + PUSH DE + CALL L184D + POP DE + POP HL + RET + +L1867: LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX DE,HL + LD A,L + OR H + RET + +L1873: PUSH BC + PUSH HL + PUSH DE + EX DE,HL + ADD HL,BC + EX DE,HL + CALL L1789 + LD A,L + SUB E + LD C,A + LD A,H + SBC A,D + LD B,A + INC BC + POP HL + PUSH HL + EX DE,HL + JR L18A8 ; (+020H) + +L1888: CALL L185F + PUSH BC + PUSH HL + PUSH DE + CALL L1789 + PUSH HL + ADD HL,BC + EX (SP),HL + LD A,L + SUB E + LD C,A + LD A,H + SBC A,D + LD B,A + INC BC + POP DE + LDDR +L189E: POP DE + POP HL + POP BC + RET + +L18A2: CALL L1888 +L18A5: PUSH BC + PUSH HL + PUSH DE +L18A8: LD A,C + OR B + JR Z,L189E ; (-00eH) + LDIR + JR L189E ; (-012H) + +L18B0: LD (L18BF),HL +L18B3: LD HL,0505CH +L18B6: PUSH HL + CALL L1867 + JP Z,L1779 + PUSH HL + DB 021H +L18BF: DB 0AAH + DB 00FH + CALL L1773 + POP HL + JP Z,L1783 + JP C,L1783 + POP AF + JR L18B6 ; (-018H) + +L18CE: PUSH HL + LD E,(HL) + INC HL + LD D,(HL) + LD A,E + OR D + JP Z,L1779 + DB 021H +L18D8: DB 042H + DB 04CH + CALL L1773 + POP HL + INC HL + INC HL + JP L1784 + +L18E3: ADD HL,BC + EX DE,HL + POP HL + LD (HL),E + INC HL + LD (HL),D + EX DE,HL +L18EA: PUSH HL + CALL L1867 + JR NZ,L18E3 ; (-00dH) + POP HL + RET + +L18F2: PUSH HL + LD BC,00004H + ADD HL,BC + CALL L1900 + INC BC + POP HL + RET + +L18FD: LD BC,MONIT +L1900: PUSH HL + LD A,00DH +L1903: CP (HL) + INC HL + INC BC + JR NZ,L1903 ; (-005H) + DEC BC + POP HL + RET + +L190B: CALL L1921 +L190E: LD A,E + EX DE,HL + LD BC,MONIT + LD HL,(04E92H) + DEC HL +L1917: INC HL + ADD HL,BC + CP (HL) + INC HL + LD C,(HL) + INC HL + JR NZ,L1917 ; (-008H) + EX DE,HL + RET + +L1921: LD A,D + OR A + RET NZ + JR L1929 ; (+003H) + +L1926: LD A,D + OR A + RET Z +L1929: JP DATMISERR + +L192C: LD HL,(04E94H) + EX DE,HL +L1930: LD BC,00005H + LDIR + RET + +L1936: LD HL,(04E94H) + JR L1930 ; (-00bH) + +L193B: CALL SKIPSPACE + CP 00DH + RET Z + CP ':' + RET + +L1944: LD HL,MONIT + LD (04E4CH),HL + CALL L1957 + CALL L199E + CALL L1978 + CALL L1459 + RET + +L1957: LD HL,0505CH + CALL L19BA + LD DE,04E4EH +L1960: PUSH HL + LD HL,04E96H + XOR A + SBC HL,DE + LD B,L + SRL B + POP HL + EX DE,HL +L196C: XOR A + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (DE),A + INC DE + LD (DE),A + INC DE + DJNZ L196C ; (-00bH) + RET + +L1978: LD HL,05040H + LD (04E9AH),HL + LD HL,04FD7H + LD (04E98H),HL + LD HL,04EBAH + LD (04E96H),HL + LD HL,05053H + CALL L19BA + LD (HL),A +L1991: XOR A + LD (05056H),A + RET + +L1996: LD HL,(04E84H) + LD DE,04E84H + JR L1960 ; (-03eH) + +L199E: LD HL,04DF2H + LD B,05AH +L19A3: LD (HL),000H + INC HL + DJNZ L19A3 ; (-005H) + LD B,01AH + LD HL,04E50H +L19AD: LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH HL + EX DE,HL + CALL L2E09 + POP HL + DJNZ L19AD ; (-00cH) + RET + +L19BA: XOR A +L19BB: LD (HL),A + INC HL + LD (HL),A + INC HL + RET + +L19C0: CALL L1888 +L19C3: PUSH HL + LD A,E + EX AF,AF' + LD A,D + LD HL,04E94H +L19CA: LD E,(HL) + INC HL + LD D,(HL) + CP D + JR C,L19D7 ; (+007H) + JR NZ,L19E2 ; (+010H) + EX AF,AF' + CP E + JR NC,L19E1 ; (+00bH) + EX AF,AF' +L19D7: EX DE,HL + ADD HL,BC + EX DE,HL + LD (HL),D + DEC HL + LD (HL),E + DEC HL + DEC HL + JR L19CA ; (-017H) + +L19E1: EX AF,AF' +L19E2: LD D,A + EX AF,AF' + LD E,A + POP HL + RET + +L19E7: CALL L1873 + PUSH BC + CALL L1762 + CALL L19C3 + POP BC + RET + +L19F3: CALL SKIPSPACE + LD DE,00D2CH + LD BC,MONIT + CP 022H + JR NZ,L1A02 ; (+002H) + LD E,A + INC HL +L1A02: PUSH HL +L1A03: LD A,(HL) + CP D + JR Z,L1A0F ; (+008H) + CP E + INC HL + JR Z,L1A0F ; (+004H) + INC BC + JR L1A03 ; (-00bH) + +L1A0E: PUSH HL +L1A0F: EX (SP),HL + PUSH HL + CALL L1A1E + EX DE,HL + EX (SP),HL + CALL L18A5 + POP DE + POP HL + JP SKIPSPACE + +L1A1E: PUSH BC + XOR A + LD E,A + LD HL,(04E92H) + JR L1A2B ; (+005H) + +L1A26: INC HL + LD C,(HL) + INC HL + INC HL + ADD HL,BC +L1A2B: INC E + CP (HL) + JR NZ,L1A26 ; (-009H) + POP BC + PUSH BC + INC BC + INC BC + INC BC + EX DE,HL + CALL L1888 + EX DE,HL + PUSH HL + ADD HL,BC + DEC HL + LD (HL),00DH + LD HL,(04E94H) + ADD HL,BC + LD (04E94H),HL + POP HL + POP BC + LD (HL),E + INC HL + LD (HL),C + INC HL + LD D,001H + RET + +L1A4E: PUSH HL + LD HL,(04E94H) + LD DE,MONIT + LD A,(HL) + OR A + JP P,L1779 + CP 0C1H + JR C,L1A72 ; (+014H) + SUB 0D1H + JP NC,L1779 + LD E,003H + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + JR L1A6F ; (+004H) + +L1A6B: SRL D + RR E +L1A6F: INC A + JR NZ,L1A6B ; (-007H) +L1A72: JP L1783 + +L1A75: CALL EXECNOTCHR + DB 00DH + DW L1A7E + JP L177A + +L1A7E: PUSH HL + DEC HL +L1A80: CALL L1A91 + JR Z,L1A80 ; (-005H) + CP 00DH + JP NZ,L1779 + POP HL + CALL L2333 + JP L1784 + +L1A91: CALL INCSKIPSPCE + CP 045H + RET Z +L1A97: CALL L176A + JR NC,L1A9E ; (+002H) + CP (HL) + RET + +L1A9E: CP 02EH + RET Z + CP '+' + RET Z + CP '-' + RET + +L1AA7: PUSH HL + CALL L1AB8 + POP HL + RET Z + JR L1AB5 ; Command statement error. + +L1AAF: PUSH HL + CALL L1AB8 + POP HL + RET NZ +L1AB5: JP CMDSTMTERR + +L1AB8: LD HL,(0504FH) + LD A,H + OR L + RET + +L1ABE: NOP +L1ABF: LD HL,L1ABE + XOR A + CP (HL) + LD (HL),A + JR NZ,L1AEE ; (+027H) +L1AC7: LD HL,0505CH +L1ACA: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + LD A,E + OR D + RET Z + CALL L1773 + RET C + EX DE,HL + ADD HL,DE + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + EX DE,HL + JR L1ACA ; (-014H) + +L1ADE: LD HL,(04E4EH) + LD DE,0505CH + DEC HL + DEC HL + XOR A + SBC HL,DE + LD B,H + LD C,L + JP L19E7 + +L1AEE: CALL L1ADE +L1AF1: CALL L1996 + CALL L199E + CALL L1978 + RET + + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + PUSH BC + CALL L1AEE + POP BC + LD A,B + OR A + JR NZ,L1B10 ; (+004H) + LD A,C + CP 003H + RET C +L1B10: PUSH BC + DEC BC + DEC BC + LD DE,0505CH + CALL L19C0 + POP BC + RET + +L1B1B: LD HL,0505CH +L1B1E: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + LD A,D + OR E + RET Z + CALL L1773 + RET NC + PUSH DE + EX DE,HL + XOR A + SBC HL,DE + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + POP HL + JR L1B1E ; (-017H) + +L1B35: LD HL,(05051H) +L1B38: CALL SKIPSPACE +L1B3B: CP 00DH + JR Z,L1B45 ; (+006H) + CALL MATCHCHR + DB ':' + JR L1B5C ; (+017H) + +L1B45: LD HL,(0504DH) + LD A,H + OR L + JP Z,WARMSTRT +L1B4D: LD A,(HL) + INC HL + OR (HL) + DEC HL + JP Z,L1D17 + LD DE,0504DH + LD BC,00004H + LDIR +L1B5C: LD (05051H),HL +L1B5F: LD A,(05056H) + DEC A + CALL Z,L1B9F + CALL BRKEY + JR NZ,L1B73 ; (+008H) + LD A,002H + CALL L29EB + JP L1438 + +L1B73: LD HL,(04E92H) + CALL L19BA + LD (04E94H),HL + CALL L173A +L1B7F: SUB 080H + JP C,CMDLET + INC HL + LD C,(HL) + INC HL + PUSH HL + LD HL,CMDJMPTBL + JP NZ,SYNTAXERR + LD A,C + ADD A,080H + JP NC,SYNTAXERR + LD C,A +L1B95: LD B,000H + ADD HL,BC + ADD HL,BC + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX (SP),HL + RET + +L1B9F: CALL L1AB8 + RET Z + LD DE,L13A5 + LD HL,0504DH + JR NZ,L1BAC ; (+001H) + EX DE,HL +L1BAC: LD BC,LETNL + LDIR + RET + +CMDJMPTBL: DW CMDREMDATA + DW CMDREMDATA + DW SYNTAXERR + DW SYNTAXERR + DW CMDREAD + DW CMDLIST + DW CMDRUN + DW CMDNEW + DW CMDPRINT + DW CMDLET + DW CMDFOR + DW CMDIF + DW SYNTAXERR + DW CMDGOTO + DW CMDGOSUB + DW CMDRETURN + DW CMDNEXT + DW CMDSTOP + DW CMDEND + DW SYNTAXERR + DW CMDON + DW CMDLOAD + DW CMDSAVE + DW CMDVERIFY + DW CMDPOKE + DW CMDDIM + DW CMDDEFFN + DW CMDINPUT + DW CMDRESTORE + DW CMDCLS + DW CMDMUSIC + DW CMDTEMPO + DW CMDUSRN + DW CMDWOPEN + DW CMDROPEN + DW CMDCLOSE + DW CMDMON + DW CMDLIMIT + DW CMDCONT + DW CMDGET + DW CMDINP + DW CMDOUT + DW CMDCURSOR + DW CMDSET + DW CMDRESET + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW CMDAUTO + DW SYNTAXERR + DW SYNTAXERR + DW CMDCOPY + DW CMDPAGE + IF BUILD_ORIG = 1 + DW SYNTAXERR + ENDIF + IF BUILD_RFS = 1 + DW CMDDIR + ENDIF + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR +L1C32: CALL L193B + JP NZ,SYNTAXERR + LD (05051H),HL + RET + +CMDREMDATA: CALL L174F + JP L1B38 + +CMDNEW: XOR A + LD (L1463),A + CALL L1944 +L1C49: JP WARMSTRT + +L1C4C: DB 006H +CMDLIST: XOR A + LD (L1CAB),A + CALL EXECNOTCHR + DB '/' + DW L1C60 + CALL MATCHCHR + DB 050H + LD A,001H + LD (L1CAB),A +L1C60: CALL L1AA7 + DB 03EH + LD A,(BC) + LD (L1C4C),A + PUSH HL + LD HL,04AB3H + CALL L19BA + DEC A + CALL L19BB + POP HL + CALL L193B + CALL NZ,L1CF3 + LD (05051H),HL + LD HL,0505CH +L1C80: PUSH HL + CALL L1867 + POP HL +L1C85: JR Z,L1C49 ; (-03eH) + CALL L18F2 + LD DE,04A0EH + LDIR + LD HL,(04AB3H) + EX DE,HL + LD HL,(04A10H) + CALL L1773 + JR C,L1CDF ; (+044H) + EX DE,HL + LD HL,(04AB5H) + CALL L1773 + JR C,L1CDF ; (+03bH) + CALL L14F8 + LD DE,LINEBUFR + DB 03EH +L1CAB: DB 000H + OR A + JR Z,L1CBA ; (+00bH) + CALL L31A2 + CALL L3246 + CALL L31A7 + JR L1CC7 ; (+00dH) + +L1CBA: CALL MSGNL + LD A,(L1C4C) + DEC A + LD (L1C4C),A + CALL Z,L1CE4 +L1CC7: CALL BRKEY + JR Z,L1C85 ; (-047H) +L1CCC: CALL GETKY + CP 020H + JR Z,L1CCC ; (-007H) + CP 03FH + JR NZ,L1CDF ; (+008H) + LD BC,L2000 +L1CDA: DEC BC + LD A,B + OR C + JR NZ,L1CDA ; (-005H) +L1CDF: LD HL,(04A0EH) + JR L1C80 ; (-064H) + +L1CE4: INC A + LD (L1C4C),A + PUSH BC + LD BC,00001H +L1CEC: DEC BC + LD A,B + OR C + JR NZ,L1CEC ; (-005H) + POP BC + RET + +L1CF3: CALL L17F6 + LD (04AB3H),DE + CALL L193B + JR Z,L1D0A ; (+00bH) + CALL MATCHCHR + DB '-' + CALL L193B + RET Z + CALL L17F6 +L1D0A: LD (04AB5H),DE + CALL L193B + RET Z + JP SYNTAXERR + +CMDEND: DB 0AFH + DB 001H +L1D17: LD A,001H + EX AF,AF' + CALL L1AAF + EX AF,AF' + OR A + CALL Z,L1D24 + JR L1D41 ; (+01dH) + +L1D24: CALL L1C32 + LD A,001H + JP L29EB + +CMDSTOP: CALL L1AAF + CALL L1D24 + LD HL,(0504FH) + LD DE,L1D44 + CALL MSGX + CALL L1841 + CALL MSGX +L1D41: JP WARMSTRT + +L1D44: DB "*S",096H,0B7H,09EH," ",0A6H,0B0H,00DH +CMDRESTORE: CALL L17F6 + CALL L1C32 + LD BC,L1B35 + PUSH BC + LD A,D + OR E + JP Z,L145E + LD BC,L2D46 + PUSH BC +L1D60: EX DE,HL +L1D61: CALL L18B0 + PUSH DE + INC DE + RET Z + JP LINEERR + +CMDLET: PUSH HL +L1D6B: CALL L193B + JP Z,SYNTAXERR + CP 03DH + INC HL + JR NZ,L1D6B ; (-00bH) + CALL L2293 + LD (05051H),HL + CALL L1D95 + POP HL + CALL L267F + CALL L24B2 + CALL MATCHCHR + DB 03DH + CALL L1D9A + CALL L1DA5 + DW DATMISERR + JP L1B35 + +L1D95: LD HL,04900H + JR L1D9D ; (+003H) + +L1D9A: LD HL,04904H +L1D9D: LD (HL),C + INC HL + LD (HL),B + INC HL + LD (HL),E + INC HL + LD (HL),D + RET + +L1DA5: LD HL,04903H + LD B,(HL) + INC HL + LD C,(HL) + INC HL + LD A,(HL) + LD DE,(04906H) + OR A + JR NZ,L1DBD ; (+009H) + OR B + JP NZ,L177A + CALL L1936 + JR L1DF2 ; (+035H) + +L1DBD: XOR A + OR B + JP Z,L177A + LD HL,L1DF5 + XOR A + LD B,A + SBC HL,DE + JR Z,L1DFE ; (+033H) + LD HL,(04900H) + XOR A + SBC HL,BC + LD B,H + LD C,L + JR C,L1DDA ; (+005H) + CALL L1888 + JR L1DE2 ; (+008H) + +L1DDA: PUSH BC + CALL L1762 + CALL L1873 + POP BC +L1DE2: CALL L19C3 + LD HL,(04902H) + EX DE,HL + CALL L190E + EX DE,HL + DEC DE + DEC HL + INC BC + LDIR +L1DF2: JP L1784 + +L1DF5: JR NC,L1E27 ; (+030H) + DEC C + JR NC,L1E2A ; (+030H) + DEC C + JR NC,L1E2D ; (+030H) + DEC C +L1DFE: LD HL,(04902H) + EX DE,HL + CALL L190B + EX DE,HL + LD DE,L1DF5 + PUSH DE + LD B,003H +L1E0C: LD C,002H +L1E0E: CALL L176A + JR NC,L1E5D ; (+04aH) + LD (DE),A + INC DE + INC HL + DEC C + JR NZ,L1E0E ; (-00bH) + LD A,00DH + LD (DE),A + INC DE + DEC B + JR NZ,L1E0C ; (-014H) + CALL EXECNOTCHR + DB 00DH + DW ILDATERR + POP HL +L1E27: CALL L1E69 +L1E2A: LD B,000H + LD A,E +L1E2D: CP 018H + JR NC,L1E5D ; (+02cH) + SUB 00CH + JR C,L1E37 ; (+002H) + LD E,A + INC B +L1E37: LD A,B + PUSH AF + PUSH HL + LD HL,00E10H + CALL L17CF + POP HL + PUSH DE + INC HL + CALL L1E69 + LD A,E + CP 03CH + JR NC,L1E5D ; (+012H) + PUSH HL + LD HL,0003CH + CALL L17CF + POP HL + EX (SP),HL + ADD HL,DE + EX (SP),HL + INC HL + CALL L1E69 + LD A,E + CP 03CH +L1E5D: JR NC,L1E8E ; (+02fH) + POP HL + ADD HL,DE + EX DE,HL + POP AF + CALL ?TMST + JP L1784 + +L1E69: EXX + LD BC,00005H + CALL L1E7F + CALL L2333 + CALL L1926 + CALL L1A4E + OR C + INC DE + EXX + LD BC,0FFFBH +L1E7F: LD HL,(04E94H) + ADD HL,BC + LD (04E94H),HL + EXX + RET + +GETNUM: CALL L1E69 + LD A,D + OR A + RET Z +L1E8E: JP ILDATERR + +CMDRUN: XOR A + LD (L2A83),A + LD (L30E2),A + CALL L2E94 + CALL L145E + CALL L1459 + CALL L176A + JR NC,L1EAF ; (+009H) +CMDGOTO: CALL L17F6 +L1EA9: EX DE,HL +L1EAA: CALL L1D61 + JR L1EC4 ; (+015H) + +L1EAF: CALL L193B + JP NZ,SYNTAXERR + CALL L1991 + CALL L1978 + CALL L1996 + CALL L199E + LD HL,0505CH +L1EC4: JP L1B4D + +CMDGOSUB: CALL L1AAF + CALL L17F6 +L1ECD: CALL L1C32 + CALL L1D60 + EXX + LD HL,05055H + LD A,(HL) + CP 00FH + JP Z,GOSUBERR + INC (HL) + DEC HL + DEC HL + LD DE,(04E9AH) + DEC DE + LD BC,00007H + LDDR + INC DE + LD (04E9AH),DE + LD C,007H + ADD HL,BC + LD (HL),000H + EXX + JP L1B4D + +CMDRETURN: CALL L1AAF + LD HL,05055H + XOR A + CP (HL) + JP Z,RETGOSBERR + DEC (HL) +L1F04: LD HL,05053H + LD A,(HL) + OR A + JR Z,L1F1A ; (+00fH) + DEC (HL) + INC HL + DEC (HL) + LD HL,(04E98H) + LD BC,00013H + ADD HL,BC + LD (04E98H),HL + JR L1F04 ; (-016H) + +L1F1A: LD HL,(04E9AH) + LD DE,0504DH + LD BC,00007H + LDIR + LD (04E9AH),HL + JP L1B35 + +CMDFOR: CALL L267F + CALL MATCHCHR + DB 03DH ; = + PUSH DE + CALL L1FB7 + POP HL + LD (05040H),HL + EX DE,HL + CALL L24BD + CALL L1936 + CALL L17A0 + SBC A,(HL) + CALL L1FB7 + LD DE,05048H + CALL L1936 + CALL L1792 + SBC A,A + LD E,H + RRA + CALL L1FB7 + LD HL,(04E94H) + JR L1F5F ; (+003H) + + LD HL,L2A88 +L1F5F: LD DE,05042H + LD A,(HL) + LD (05047H),A + LD BC,00005H + LDIR + LD HL,(04E98H) + LD DE,(05040H) + LD A,(05053H) + INC A +L1F76: DEC A + JR Z,L1F98 ; (+01fH) + EX AF,AF' + LD A,(HL) + SUB E + LD B,A + INC HL + LD A,(HL) + SUB D + OR B + LD BC,PRNT + ADD HL,BC + JR Z,L1F8A ; (+003H) + EX AF,AF' + JR L1F76 ; (-014H) + +L1F8A: LD (04E98H),HL + EX AF,AF' + DEC A + LD HL,05053H + LD B,(HL) + LD (HL),A + SUB B + INC HL + ADD A,(HL) + LD (HL),A +L1F98: LD HL,05054H + LD A,(HL) + CP 00FH + JP Z,FORNEXTERR + INC (HL) + DEC HL + INC (HL) + DEC HL + LD DE,(04E98H) + LD BC,00013H + DEC DE + LDDR + INC DE + EX DE,HL + LD (04E98H),HL + JP L1B35 + +L1FB7: CALL L2333 + LD (05051H),HL + JP L1926 + +CMDNEXT: LD A,(05053H) + OR A +L1FC4: JP Z,NEXTFORERR + CALL L2640 + LD (05051H),HL + LD HL,(04E98H) + CALL NC,L2039 +L1FD3: LD A,E + SUB (HL) + INC HL + LD B,A + LD A,D + SUB (HL) + OR B + JR Z,L1FF1 ; (+015H) + EXX + LD HL,05053H + LD A,(HL) + DEC A + JR Z,L1FC4 ; (-020H) + LD (HL),A + INC HL + DEC (HL) + EXX + LD BC,PRNT + ADD HL,BC + LD (04E98H),HL + JR L1FD3 ; (-01eH) + +L1FF1: INC HL + CALL L24BD + PUSH DE + PUSH HL + CALL L3405 + POP HL + POP DE + LD BC,00005H + ADD HL,BC +L2000: LD A,(HL) + INC HL + PUSH HL + OR A + JP P,L201B + EX DE,HL + CALL L3A66 + POP HL + LD BC,00005H + JR C,L2025 ; (+014H) +L2011: ADD HL,BC + LD DE,0504DH + INC C + LDIR + JP L1B35 + +L201B: CALL L3A66 + POP HL + LD BC,00005H + CCF + JR C,L2011 ; (-014H) +L2025: LD C,00BH + ADD HL,BC + LD (04E98H),HL + LD HL,05053H + DEC (HL) + INC HL + DEC (HL) + CALL L1792 + INC L + DEC (HL) + DEC DE + JR CMDNEXT ; (-079H) + +L2039: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + RET + +CMDON: CALL L1AAF + CALL L2333 + CALL L1926 + CALL L1A4E + DB 04CH + DB 020H + CALL MATCHCHR + DB 080H + SUB 08DH + CP 002H + JP NC,SYNTAXERR + EX AF,AF' + INC HL + LD A,E + OR A + JR Z,L2061 ; (+004H) + LD A,D + OR A + JR Z,L206F ; (+00eH) +L2061: JP CMDREMDATA + +L2064: CALL L193B + JP Z,L1B3B + CP ',' + INC HL + JR NZ,L2064 ; (-00bH) +L206F: DEC E + JR NZ,L2064 ; (-00eH) + CALL L17F6 + CALL L174F + EX AF,AF' + OR A + JP NZ,L1ECD + JP L1EA9 + +CMDDIM: CALL L267F + LD BC,MONIT + CP 024H + JR NZ,L208C ; (+002H) + INC HL + INC B +L208C: CALL MATCHCHR + DB 028H + CALL L2107 + JR NZ,L20E5 ; (+050H) + PUSH HL + LD HL,(L2105) + LD E,H + LD D,A + LD H,A + INC HL + INC DE + CALL L17AF + CP D + INC DE + LD A,(L2104) + OR A + POP HL + PUSH DE + PUSH HL + LD HL,00002H + JR NZ,L20B1 ; (+002H) + LD L,005H +L20B1: CALL L17AF + CP D + INC DE + LD HL,00004H + ADD HL,DE + JP C,MEMERR + LD B,H + LD C,L + POP DE + CALL L19C0 + LD HL,(L18D8) + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + LD DE,(02105H) + LD (HL),E + INC HL + LD (HL),D + INC HL + POP BC + LD A,(L2104) + OR A + JR Z,L20F0 ; (+016H) +L20DA: LD (HL),000H + INC HL + LD (HL),00DH + INC HL + DEC BC + LD A,B + OR C + JR NZ,L20DA ; (-00bH) +L20E5: LD HL,(L2102) + CALL EXECNOTCHR + DB ',' + DW L1B38 + JR CMDDIM ; (-070H) + +L20F0: EX DE,HL +L20F1: PUSH BC + LD HL,L2A8D + LD BC,00005H + LDIR + POP BC + DEC BC + LD A,B + OR C + JR NZ,L20F1 ; (-00fH) + JR L20E5 ; (-01dH) + +L2102: XOR (HL) + LD H,C +L2104: DB 001H +L2105: DB 00BH + DB 001H +L2107: PUSH DE + PUSH BC + CALL GETNUM + POP BC + LD A,(HL) + CP ',' + CALL Z,L2185 + CALL MATCHCHR + DB 029H + LD (L2102),HL + POP HL + LD (L18D8),HL + EX DE,HL + LD (L2105),HL + LD A,B + LD (L2104),A + LD HL,04E86H + LD DE,LETNL + OR A + JR Z,L2130 ; (+001H) + ADD HL,DE +L2130: LD A,C + LD E,002H + OR A + JR NZ,L2137 ; (+001H) + ADD HL,DE +L2137: LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL +L213B: CALL L18CE + LD L,(HL) + LD HL,L2E28 + LD E,(HL) + INC HL + PUSH HL + LD L,(HL) + LD D,000H + LD H,D + INC HL + INC DE + CALL L17CF + LD A,(L2104) + OR A + JR NZ,L215F ; (+00bH) + LD HL,00005H + CALL L17CF + POP HL + ADD HL,DE + INC HL + JR L213B ; (-024H) + +L215F: POP HL + INC HL + LD B,000H +L2163: LD C,(HL) + INC HL + INC HL + ADD HL,BC + DEC DE + LD A,D + OR E + JR NZ,L2163 ; (-009H) + JR L213B ; (-033H) + + XOR A + RET + + LD C,(HL) + INC HL + LD B,(HL) + INC HL + LD DE,(02105H) + LD A,B + CP D + JR C,L217E ; (+002H) + LD A,C + CP E +L217E: JP C,ILDATERR + LD A,001H + OR A + RET + +L2185: INC C + PUSH BC + PUSH DE + INC HL + CALL GETNUM + LD A,E + POP DE + LD D,A + POP BC + RET + +CMDPOKE: CALL L299F + CALL L2E94 + PUSH DE + CALL L299F + LD A,D + OR A + JP NZ,ILDATERR + EX (SP),HL + LD (HL),E + POP HL +L21A3: JP L1B38 + +CMDCLS: PUSH HL + CALL L1AF1 + POP HL + JR L21A3 ; (-00aH) + +CMDIF: CALL L1AAF + CALL EXECNOTCHR + DB 0AEH + DW L21D3 + CALL L2DBA + JP Z,SYNTAXERR + LD B,A + CALL L2712 + PUSH HL + LD A,B + CALL L2DC1 + RST 038H + RST 038H + LD BC,00008H + ADD HL,BC + LD A,(HL) + POP HL + OR A + JR NZ,L21E3 ; (+013H) +L21D0: JP L1B45 + +L21D3: CALL L2293 + CALL L1926 + LD IX,(04E94H) + BIT 7,(IX+004H) + JR Z,L21D0 ; (-013H) +L21E3: CALL MATCHCHR + ADD A,B + SUB 08CH + INC HL + CP 002H + JP Z,CMDGOSUB +L21EF: JP NC,SYNTAXERR + OR A + CALL Z,L21F9 + JP CMDGOTO + +L21F9: CALL L176A + RET C + POP BC + JP L1B7F + +CMDDEFFN: CALL SKIPSPACE + SUB 041H + CP 01AH + JR NC,L21EF ; (-01bH) + LD E,(HL) + INC HL + CALL MATCHCHR + DB 028H + SUB 041H + CP 01AH + JR NC,L21EF ; (-027H) + LD D,(HL) + INC HL + CALL MATCHCHR + DB 029H + CALL MATCHCHR + DB 03DH + PUSH HL + CALL L174F + POP BC + PUSH HL + XOR A + SBC HL,BC + PUSH BC + PUSH HL + LD HL,(04E84H) +L222E: LD A,(HL) + CP E + JR Z,L224D ; (+01bH) + OR A + JR Z,L223C ; (+007H) + INC HL + INC HL + CALL L1745 + JR L222E ; (-00eH) + +L223C: EX DE,HL + LD BC,GETL + CALL L19C0 + EX DE,HL + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (HL),00DH + EX DE,HL + JR L225D ; (+010H) + +L224D: INC HL + LD (HL),D + INC HL + PUSH HL + CALL L174F + POP DE + XOR A + SBC HL,DE + LD B,H + LD C,L + CALL L19E7 +L225D: POP BC + POP HL + CALL L18A2 + CALL L19C3 + POP HL +L2266: JP L1B38 + +CMDMUSIC: CALL L193B + JR Z,L2266 ; (-008H) + CALL L2333 + CALL L193B + JR Z,L2277 ; (+001H) + INC HL +L2277: CALL L190B + CALL MELDY + JP C,L1438 + JR CMDMUSIC ; (-019H) + +CMDTEMPO: CALL GETNUM + LD A,E + DEC A + CP 007H + JP NC,ILDATERR + INC A + CALL XTEMP + JR L2266 ; (-02cH) + +L2292: INC HL +L2293: CALL L2333 +L2296: CP 03DH + JR NZ,L229C ; (+002H) + LD A,089H +L229C: CP 083H + RET C + CP 090H + RET NC + SUB 083H + EX AF,AF' + LD A,D + OR A + JR NZ,L22B4 ; (+00bH) + EX AF,AF' + EXX + LD BC,L2296 + LD DE,L2332 + JP L23BB + +L22B4: EX AF,AF' + PUSH DE + PUSH AF + CALL L2332 + POP AF + EX AF,AF' + EX (SP),HL + CALL L190B + LD A,C + PUSH AF + EX DE,HL + CALL L190B + POP AF + LD B,A + CALL L2305 + LD HL,L22F3 + PUSH HL + LD HL,L22E1 + EX AF,AF' + LD C,A + LD B,000H + ADD HL,BC + ADD HL,BC + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX AF,AF' + OR A + LD A,001H + JP (HL) + +L22E1: DW L231B + DW L231B + DW L231E + DW L231E + DW L2322 + DW L2322 + DW L2325 + DW L2328 + DW L232F +L22F3: LD DE,L2A92 + OR A + JR NZ,L22FC ; (+003H) + LD DE,L2A8D +L22FC: CALL L192C + POP HL + CALL L23FA + JR L2296 ; (-06fH) + +L2305: LD A,B + OR C + RET Z + LD A,C + CP B + JR NZ,L2315 ; (+009H) +L230C: LD A,(DE) + SUB (HL) + JR NZ,L2315 ; (+005H) + INC HL + INC DE + DJNZ L230C ; (-008H) + RET + +L2315: LD A,001H + DB 0D0H + LD A,080H + RET + +L231B: RET NZ + XOR A + RET + +L231E: RET Z + RET M + XOR A + RET + +L2322: RET P + XOR A + RET + +L2325: RET Z + XOR A + RET + +L2328: LD A,000H + RET Z + RET M + LD A,001H + RET + +L232F: RET M + XOR A + RET + +L2332: INC HL +L2333: LD A,(HL) + CP 020H + JR Z,L2332 ; (-006H) + CP '+' + JR Z,L2348 ; (+00cH) + CP '-' + JR NZ,L2349 ; (+009H) + CALL L2392 + CALL L2410 + JR L234C ; (+004H) + +L2348: INC HL +L2349: CALL L2393 +L234C: CP '+' + JR Z,L2356 ; (+006H) + CP '-' + RET NZ + LD A,00DH + DB 001H ; Create a dummy LD BC, to preserve A +L2356: LD A,00CH + EX AF,AF' + LD A,D + OR A + JR NZ,L2367 ; (+00aH) + EX AF,AF' + EXX + LD BC,L234C + LD DE,L2392 + JR L23BB ; (+054H) + +L2367: EX AF,AF' + CP 00CH + JP NZ,SYNTAXERR + PUSH DE + CALL L2392 + EX (SP),HL + PUSH DE + CALL L190B + LD A,C + PUSH AF + EX DE,HL + CALL L190B + POP AF + ADD A,C + JP C,STRLENERR + PUSH AF + EX DE,HL + CALL L18A2 + CALL L19C3 + POP AF + LD C,A + DEC DE + LD (DE),A + POP DE + POP HL + LD A,(HL) + JR L234C ; (-046H) + +L2392: INC HL +L2393: CALL L23AC +L2396: CP '/' + JR Z,L23A0 ; (+006H) + CP 02AH + RET NZ + LD A,00EH + DB 001H +L23A0: LD A,00FH + EXX + LD BC,L2396 + LD DE,L23AB + JR L23BB ; (+010H) + +L23AB: INC HL +L23AC: CALL L2402 +L23AF: CP 05EH + RET NZ + LD A,010H + EXX + LD BC,L23AF + LD DE,L2401 +L23BB: PUSH BC + LD HL,(04E94H) + LD BC,00005H + ADD HL,BC + LD (04E94H),HL + LD HL,L2691 + LD C,A + ADD HL,BC + ADD HL,BC + LD C,(HL) + INC HL + LD B,(HL) + PUSH BC + LD HL,L23DC + PUSH HL + PUSH DE + EXX + LD A,D + OR A + RET Z +L23D9: JP DATMISERR + +L23DC: LD A,D + OR A + JR NZ,L23D9 ; (-007H) + POP IY + PUSH HL + LD HL,(04E94H) + LD BC,0FFFBH + LD E,L + LD D,H + ADD HL,BC + LD (04E94H),HL + EX DE,HL + LD BC,L23F9 + PUSH BC + JP (IY) + +L23F6: CALL L192C +L23F9: POP HL +L23FA: LD BC,00005H + LD D,B + LD E,B + LD A,(HL) + RET + +L2401: INC HL +L2402: CALL SKIPSPACE + CP '+' + JR Z,L2425 ; (+01cH) + CP '-' + JR NZ,L2426 ; (+019H) + CALL L2425 +L2410: EXX + LD HL,(04E94H) + PUSH HL + LD BC,00004H + ADD HL,BC + LD A,(HL) + POP HL + OR A + JR Z,L2422 ; (+004H) + LD A,(HL) + ADD A,080H + LD (HL),A +L2422: EXX + LD A,(HL) + RET + +L2425: INC HL +L2426: CALL L2640 + JR NC,L2447 ; (+01cH) + LD A,046H + CP E + JR NZ,L2436 ; (+006H) + LD A,04EH + CP D + JP Z,L24F0 +L2436: CALL L24B2 + PUSH HL + LD A,B + OR A + JR Z,L23F6 ; (-048H) + EX DE,HL + LD B,000H + CALL L1A0E + POP HL + LD A,(HL) + RET + +L2447: CP 080H + JR C,L2481 ; (+036H) + CP 0FFH + JR Z,L24A8 ; (+059H) + CP 0C0H + JR C,L2472 ; (+01fH) + SUB 0C0H + PUSH AF + CALL L2332 + CALL L1926 + CALL MATCHCHR + DB 029H + POP AF + PUSH HL + LD HL,L23F9 + PUSH HL + LD HL,(04E94H) + EX DE,HL + LD HL,L26DB + PUSH HL + LD C,A + JP L1B95 + +L2472: SUB 0A0H + JR C,L248F ; (+019H) + LD C,A + CALL INCSKIPSPCE + PUSH HL + LD HL,L26B3 + JP L1B95 + +L2481: CP 028H + JR Z,L2492 ; (+00dH) + CP 022H + JP Z,L19F3 + CALL L1A97 + JR Z,L249E ; (+00fH) +L248F: JP SYNTAXERR + +L2492: LD BC,MONIT + CALL L185F + CALL L2292 + JP L2712 + +L249E: LD DE,(04E94H) + CALL L3670 + JP L23FA + +L24A8: CALL INCSKIPSPCE + PUSH HL + LD DE,L2A97 + JP L23F6 + +L24B2: LD A,(HL) + CP 024H + JP Z,L256F + CP 028H + JP Z,L25FE +L24BD: PUSH HL + LD HL,(04E8AH) + LD BC,00005H +L24C4: LD A,(HL) + CP E + INC HL + JR NZ,L24CD ; (+004H) + LD A,(HL) + CP D + JR Z,L24EB ; (+01eH) +L24CD: OR A + JR Z,L24D4 ; (+004H) + INC HL + ADD HL,BC + JR L24C4 ; (-010H) + +L24D4: LD C,007H + DEC HL + PUSH DE + EX DE,HL + LD HL,L2A8D + DEC HL + DEC HL + CALL L18A2 + CALL L19C3 + EX DE,HL + POP DE + LD (HL),E + INC HL + LD (HL),D + LD C,005H +L24EB: INC HL + EX DE,HL + POP HL + LD A,(HL) + RET + +L24F0: LD A,(HL) + SUB 041H + CP 01AH + JP NC,SYNTAXERR + LD E,(HL) + INC HL + CALL MATCHCHR + DB 028H + PUSH DE + CALL L2333 + CALL L1926 + CALL L2712 + POP DE + PUSH HL + LD HL,(04E84H) +L250D: LD A,(HL) + OR A + JP Z,UNDEFFNERR + CP E + JR Z,L251C ; (+007H) + INC HL + INC HL + CALL L1745 + JR L250D ; (-00fH) + +L251C: INC HL + LD E,(HL) + INC HL + PUSH HL + PUSH DE + LD D,020H + CALL L24BD + POP HL + PUSH DE + PUSH HL + LD HL,(04E96H) + LD DE,04E9CH + CALL L1773 + JP Z,FUNCERR + LD BC,0FFFAH + ADD HL,BC + LD (04E96H),HL + POP DE + LD (HL),E + INC HL + POP DE + LD BC,00005H + EX DE,HL + CALL L18A5 + EX DE,HL + LD HL,(04E94H) + CALL L18A5 + POP HL + CALL L2333 + CALL L1926 + CALL L193B + JP NZ,SYNTAXERR + LD HL,(04E96H) + LD E,(HL) + INC HL + LD D,020H + CALL L24BD + CALL L18A5 + ADD HL,BC + LD (04E96H),HL + JP L23F9 + +L256F: CALL INCSKIPSPCE + CP 028H + JP Z,L25F9 + PUSH HL + LD HL,04954H + XOR A + SBC HL,DE + JR Z,L25B2 ; (+032H) + EX DE,HL + LD (L18D8),HL + LD HL,(04E90H) +L2587: CALL L18CE + SUB (HL) + DEC H + JR Z,L25AA ; (+01cH) + LD B,000H + LD C,(HL) + ADD HL,BC + INC HL + INC HL + JR L2587 ; (-00fH) + + LD BC,00004H + EX DE,HL + LD HL,L18D8 + CALL L18A2 + CALL L19C3 + EX DE,HL + ADD HL,BC + DEC HL + LD (HL),00DH + DEC HL + LD (HL),B +L25AA: LD C,(HL) + INC HL + LD B,001H + EX DE,HL + POP HL + LD A,(HL) + RET + +L25B2: CALL TIMRD + EX DE,HL + OR A + JR Z,L25BB ; (+002H) + LD A,00CH +L25BB: EXX + LD HL,L1DF5 + PUSH HL + EXX + LD DE,0F1F0H + CALL L25D9 + LD DE,0FFC4H + CALL L25D8 + LD A,L + CALL L25E2 + POP DE + LD BC,00106H + POP HL + LD A,(HL) + RET + +L25D8: XOR A +L25D9: ADD HL,DE + JR NC,L25DF ; (+003H) + INC A + JR L25D9 ; (-006H) + +L25DF: OR A + SBC HL,DE +L25E2: LD BC,L30F6 +L25E5: ADD A,C + JR NC,L25EB ; (+003H) + INC B + JR L25E5 ; (-006H) + +L25EB: ADD A,03AH + EX AF,AF' + LD A,B + EXX + LD (HL),A + INC HL + EX AF,AF' + LD (HL),A + INC HL + LD (HL),00DH + EXX + RET + +L25F9: LD BC,00100H + JR L2601 ; (+003H) + +L25FE: LD BC,MONIT +L2601: INC HL + CALL L2107 + JP Z,ILDATERR + PUSH HL + LD L,C + LD H,000H + LD C,E + LD E,D + LD B,H + LD D,H + PUSH BC + INC HL + CALL L17CF + POP HL + ADD HL,DE + EX DE,HL + LD A,(L2104) + OR A + JR NZ,L262B ; (+00dH) + LD HL,00005H + CALL L17CF + POP HL + ADD HL,DE + LD BC,00005H + JR L263A ; (+00fH) + +L262B: POP HL + LD B,000H +L262E: LD C,(HL) + INC HL + LD A,D + OR E + JR Z,L2639 ; (+005H) + ADD HL,BC + INC HL + DEC DE + JR L262E ; (-00bH) + +L2639: INC B +L263A: EX DE,HL + LD HL,(L2102) + LD A,(HL) + RET + +L2640: CALL SKIPSPACE + LD BC,L411A + SUB B + CP C + LD A,(HL) + RET NC + LD E,A + LD D,020H +L264D: INC HL + LD A,(HL) + CP D + JR Z,L264D ; (-005H) + SUB B + CP C + JR C,L265A ; (+004H) + SUB 0EFH + CP 00AH +L265A: LD A,(HL) + CCF + RET C + LD D,A + CP 04EH + JR NZ,L2667 ; (+005H) + LD A,046H + CP E + JR Z,L267A ; (+013H) +L2667: INC HL + LD A,(HL) + CP 020H + JR Z,L2667 ; (-006H) + SUB B + CP C + JR C,L2667 ; (-00aH) + SUB 0EFH + CP 00AH + JR C,L2667 ; (-010H) +L2677: LD A,(HL) + SCF + RET + +L267A: CALL INCSKIPSPCE + SCF + RET + +L267F: CALL L2640 + JR NC,L268E ; (+00aH) + LD A,046H + CP E + JR NZ,L268C ; (+003H) + LD A,04EH + CP D +L268C: JR NZ,L2677 ; (-017H) +L268E: JP SYNTAXERR + +L2691: DW L3B62 + DW L3B62 + DW L3B87 + DW L3B87 + DW L3B8B + DW L3B8B + DW L3B7F + DW L3B73 + DW L3B77 + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW L3405 + DW L3403 + DW L3500 + DW L35D0 + DW L4159 +L26B3: DW L26F3 + DW L270F + DW L273E + DW L2765 + DW L2772 + DW L277F + DW L27B4 + DW L279A + DW L27F9 + DW L2801 + DW L2804 + DW L2895 + DW SYNTAXERR + DW SYNTAXERR + DW SYNTAXERR + DW L2824 + DW SYNTAXERR + DW L2841 + DW L287C + DW SYNTAXERR +L26DB: DW L3B98 + DW L3C16 + DW L3D05 + DW L3D14 + DW L4076 + DW L3E03 + DW L3A86 + DW L4064 + DW L3F35 + DW L289D + DW L28A2 + DW L3D3F +L26F3: DB 0CDH + DB 033H + DB 023H + DB 0CDH + DB 094H + DB 02EH +L26F9: PUSH DE + CALL GETNUM + CALL L2712 + EX (SP),HL + PUSH HL + EX DE,HL + CALL L190B + LD A,C + SUB L + JR C,L273A ; (+030H) + PUSH HL + LD C,A + ADD HL,DE + JR L2732 ; (+023H) + +L270F: DB 0CDH +L2710: DB 017H + DB 027H +L2712: CALL MATCHCHR + DB 029H + RET + + CALL L2333 + CALL L2E94 + PUSH DE + CALL GETNUM + JR L2724 ; (+001H) + +L2723: PUSH BC +L2724: EX (SP),HL + PUSH HL + EX DE,HL + CALL L190B + LD A,C + SUB L + JR C,L273A ; (+00cH) + PUSH HL + LD C,A + LD L,E + LD H,D +L2732: EX DE,HL + CALL L19E7 + POP BC + DEC HL + LD (HL),C + INC HL +L273A: POP DE + POP HL + LD A,(HL) + RET + +L273E: CALL L2333 + CALL L2E94 + PUSH DE + PUSH BC + CALL GETNUM + POP BC + LD A,E + OR A + JP Z,ILDATERR + LD A,C + SUB E + JR NC,L2755 ; (+002H) + LD A,PRTD +L2755: INC A + LD E,A + POP BC + CALL L2723 + CALL L2E94 + CP '-' + JR NZ,L26F9 ; (-069H) + INC HL + JR L2712 ; (-053H) + +L2765: CALL L2333 + CALL L190B + CALL L2712 + PUSH HL + LD A,C + JR L27C4 ; (+052H) + +L2772: CALL L299F + CALL L2712 + LD A,E + LD BC,00001H + JP L280F + +L277F: CALL L2333 + CALL L1926 + CALL L2712 + PUSH HL + LD HL,(04E94H) + LD DE,04AB3H + PUSH DE + CALL L38BB + POP HL + CALL L19F3 + POP HL + LD A,(HL) + RET + +L279A: CALL L2333 + CALL L190B + CALL L2712 + PUSH HL + EX DE,HL + JR L27AA ; (+003H) + + LD HL,L27B2 +L27AA: CALL L1A75 + AND A + DAA + POP HL + LD A,(HL) + RET + +L27B2: DB 030H + DB 00DH +L27B4: CALL L2333 + CALL L190B + CALL L2712 + LD A,C + OR A + JP Z,ILDATERR +L27C2: LD A,(DE) + PUSH HL +L27C4: LD E,A + LD D,000H +L27C7: CALL L27CD + POP HL + LD A,(HL) + RET + +L27CD: LD B,080H + LD A,D + OR E + JR Z,L27E7 ; (+014H) + LD B,0D0H + LD A,D + OR A + JR NZ,L27DE ; (+005H) + LD B,0C8H + LD D,E + LD E,000H +L27DE: EX DE,HL +L27DF: BIT 7,H + JR NZ,L27E6 ; (+003H) + ADD HL,HL + DJNZ L27DF ; (-007H) +L27E6: EX DE,HL +L27E7: LD HL,(04E94H) + LD (HL),B + INC HL + CALL L19BA + LD (HL),E + INC HL + LD (HL),D + LD BC,00005H + LD DE,MONIT + RET + +L27F9: CALL L299F + CALL L2712 + JR L27C2 ; (-03fH) + +L2801: JP SYNTAXERR + +L2804: CALL GETNUM + CALL L2712 + LD A,020H + LD C,E + LD B,000H +L280F: PUSH HL + PUSH AF + CALL L1A1E + POP AF + PUSH DE + PUSH BC + LD B,C + INC B + JR L281D ; (+002H) + +L281B: LD (HL),A + INC HL +L281D: DJNZ L281B ; (-004H) + POP BC + POP DE + POP HL + LD A,(HL) + RET + +L2824: CALL L2333 + CALL L2E94 + PUSH DE + CALL GETNUM + CALL L2712 + EX (SP),HL + PUSH DE + EX DE,HL + CALL L190B + LD A,C + OR A + JP Z,ILDATERR + LD A,(DE) + POP BC + POP HL + JR L280F ; (-032H) + +L2841: CALL L1E69 + LD A,E + CP 028H +L2847: JP NC,ILDATERR + PUSH AF + CALL MATCHCHR + DB ',' + CALL GETNUM + CALL MATCHCHR + DB 029H + LD A,E + CP 019H + JR NC,L2847 ; (-014H) + POP AF + LD C,A + LD B,E + INC B + PUSH HL + LD HL,(PAGETP) + LD D,000H + LD E,028H + XOR A + SBC HL,DE +L286A: ADD HL,DE + DJNZ L286A ; (-003H) + ADD HL,BC + CALL L2878 + POP HL + LD BC,00001H + JP L280F + +L2878: LD A,(HL) + JP ?DACN + +L287C: CALL EXECNOTCHR + DB 056H + DW L288C + LD A,(01172H) +L2885: LD D,000H + LD E,A + PUSH HL + JP L27C7 + +L288C: CALL MATCHCHR + DB 048H + LD A,(DSPXY) + JR L2885 ; (-010H) + +L2895: PUSH HL + CALL L184A + EX DE,HL + JP L27C7 + +L289D: LD A,(DE) + OR 080H + LD (DE),A + RET + +L28A2: LD A,(DE) + LD DE,L192C + PUSH DE + LD DE,L2A92 + OR A + RET P + LD DE,L2A88 + CP 080H + RET NZ + LD DE,L2A8D + RET + +CMDMON: JP MONIT + +CMDCURSOR: CALL GETNUM + LD A,E + CP 028H +L28BF: JP NC,ILDATERR + PUSH AF + CALL MATCHCHR + DB ',' + CALL GETNUM + LD A,E + CP 019H + JR NC,L28BF ; (-010H) + PUSH HL + LD HL,(DSPXY) + LD A,E + SUB H + LD H,A + LD A,(MGPNT) + JP M,L28F8 + ADD A,H + SUB 032H + JR NC,L28E3 ; (+002H) + ADD A,032H +L28E3: LD (MGPNT),A + EX DE,HL + LD H,L + POP DE + POP AF + LD L,A + LD (DSPXY),HL + NOP + NOP + NOP + LD (DPRNT),A + EX DE,HL + JP L1B38 + +L28F8: ADD A,H + JP P,L28E3 + ADD A,032H + JR L28E3 ; (-01dH) + + NOP + NOP +CMDGET: CALL L267F + CALL L24B2 + LD (05051H),HL + CALL L1D9A + CALL GETKY + PUSH AF + LD A,(04905H) + OR A + JR Z,L292D ; (+015H) + POP AF + LD BC,MONIT + OR A + JR Z,L2920 ; (+001H) + INC BC +L2920: CALL L280F +L2923: CALL L1D95 + CALL L1DA5 + DW DATMISERR + JR L2998 ; (+06bH) + +L292D: POP AF + LD DE,MONIT + CALL L2939 +L2934: CALL L27CD + JR L2923 ; (-016H) + +L2939: OR A + RET Z + SUB 030H + CP 00AH + RET NC + LD E,A + RET + +CMDUSRN: CALL L299F + PUSH DE + CALL EXECNOTCHR + DB ',' + DW L2959 + CALL L267F + CALL L24B2 + LD A,B + OR A + JP Z,DATMISERR + LD B,000H +L2959: CALL L2712 + LD (05051H),HL + CALL L13FA + LD HL,L1B35 + EX (SP),HL + JP (HL) + +CMDLIMIT: LD DE,L299B + CALL L14C7 + JR NZ,L2977 ; (+008H) + LD (05051H),HL + LD HL,(04908H) + JR L2994 ; (+01dH) + +L2977: CALL L299F + LD (05051H),HL + LD HL,(04908H) + CALL L1773 + JP C,ILDATERR + LD HL,(04E94H) + LD BC,000C8H + ADD HL,BC + CALL L1773 + JP NC,BADWRERR + EX DE,HL +L2994: LD (0490AH),HL + LD SP,HL +L2998: JP L1B35 + +L299B: LD C,L + LD B,C + RET C + NOP +L299F: CALL EXECNOTCHR + DB 024H + DW L29CB + LD DE,MONIT +L29A8: CALL L176A + JR NC,L29C2 ; (+015H) +L29AD: AND 00FH + LD C,A + LD B,000H + LD A,D + AND 0F0H + JP NZ,ILDATERR + EX DE,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,BC + EX DE,HL + INC HL + JR L29A8 ; (-01aH) + +L29C2: SUB 041H + CP 006H + RET NC + ADD A,00AH + JR L29AD ; (-01eH) + +L29CB: JP L1E69 + +CMDCONT: CALL L1AA7 + LD A,(L1463) + OR A + JP Z,CONTERR + PUSH AF + XOR A + CALL L29EB + POP AF + LD HL,(05051H) + OR A + JP M,L2C56 + DEC A + JR Z,L2998 ; (-050H) + JP L1B5F + +L29EB: LD (L1463),A + LD DE,L1464 + LD BC,LETNL + LD HL,0504DH + OR A + JR NZ,L29FB ; (+001H) + EX DE,HL +L29FB: LDIR + RET + +CMDINP: CALL GETNUM + CALL L2E94 + LD A,E + LD (L2A15),A + CALL L267F + CALL L24B2 + LD (05051H),HL + CALL L1D9A + DB 0DBH +L2A15: DB 0FFH + LD E,A + LD D,000H + JP L2934 + +CMDOUT: CALL GETNUM + CALL L2E94 + LD A,E + LD (L2A2B),A + CALL GETNUM + LD A,E + DB 0D3H +L2A2B: DB 0FFH +L2A2C: JP L1B38 + +CMDAUTO: CALL L1AA7 + CALL L193B + JR Z,L2A5F ; (+028H) + CALL EXECNOTCHR + DB ',' + DW L2A3F + JR L2A71 ; (+032H) + +L2A3F: CALL L2A7A + LD (02A84H),DE + CALL L193B + JR Z,L2A6C ; (+021H) + CALL EXECNOTCHR + DB ',' + DW SYNTAXERR +L2A51: CALL L2A7A + LD (02A86H),DE +L2A58: LD A,001H + LD (L2A83),A + JR L2A2C ; (-033H) + +L2A5F: LD DE,0000AH + LD (02A84H),DE +L2A66: LD (02A86H),DE + JR L2A58 ; (-014H) + +L2A6C: LD DE,0000AH + JR L2A66 ; (-00bH) + +L2A71: LD DE,0000AH + LD (02A84H),DE + JR L2A51 ; (-029H) + +L2A7A: CALL L1E69 + LD A,D + OR E + RET NZ + JP SYNTAXERR + +L2A83: DB 000H +L2A84: DB 00AH + DB 000H + DB 00AH + DB 000H +L2A88: DB 0C1H + DB 000H + DB 000H + DB 000H + DB 080H +L2A8D: DB 080H + DB 000H + DB 000H + DB 000H + DB 000H +L2A92: DB 041H + DB 000H + DB 000H + DB 000H + DB 080H +L2A97: DB 0C2H + DB 0A1H + DB 0DAH + DB 00FH + DB 0C9H + AND 00FH + ADD A,030H + CP ':' + RET C + ADD A,007H + RET + +CMDSET: LD A,001H + JR L2AAB ; (+001H) + +CMDRESET: XOR A +L2AAB: PUSH AF + CALL GETNUM + PUSH DE + CALL MATCHCHR + DB ',' + CALL GETNUM + LD (05051H),HL + LD A,E +L2ABB: SUB 032H + JR NC,L2ABB ; (-004H) + ADD A,032H + LD E,A + POP BC + LD A,C +L2AC4: SUB 050H + JR NC,L2AC4 ; (-004H) + ADD A,050H + LD C,A + XOR A + SRL C + JR NC,L2ADE ; (+00eH) + SRL E + JR NC,L2AD8 ; (+004H) + ADD A,004H +L2AD6: ADD A,002H +L2AD8: ADD A,001H +L2ADA: ADD A,001H + JR L2AE4 ; (+006H) + +L2ADE: SRL E + JR NC,L2ADA ; (-008H) + JR L2AD6 ; (-00eH) + +L2AE4: PUSH AF + LD HL,(PAGETP) + LD A,028H +L2AEA: ADD HL,DE + DEC A + JR NZ,L2AEA ; (-004H) + ADD HL,BC + RES 3,H + LD A,(HL) + CP 0F0H + JR NC,L2AF8 ; (+002H) + LD A,0F0H +L2AF8: POP BC + LD C,A + POP AF + OR A + LD A,B + JR Z,L2B02 ; (+003H) + OR C + JR L2B04 ; (+002H) + +L2B02: CPL + AND C +L2B04: CP 0F0H + JR NZ,L2B09 ; (+001H) + XOR A +L2B09: LD (HL),A + JP L1B35 + +CMDPRINT: CALL EXECNOTCHR ; Check to see if a stream, ie. /T = Tape is given. The 02FH below is / and the function after is called if it doesnt match /. + DB '/' ; Execute below function IFF first non-space character after PRINT command is not a / + DW L2B18 + CALL L2E9B + JR L2B1E ; (+006H) + +L2B18: CALL L2DBA + CALL L2E94 +L2B1E: CALL L193B + JR NZ,L2B2F ; (+00cH) + LD (05051H),HL +L2B26: LD HL,L2BEF + CALL L2BE3 + JP L1B35 + +L2B2F: CALL EXECNOTCHR + DB 03BH + DW L2B35 +L2B35: LD BC,L2B4D + PUSH BC + CP ',' + RET NZ + INC HL + LD A,(04DD4H) + OR A + RET P + AND 07FH + JP Z,PRNTT + CP 002H + RET NZ + JP L326E + +L2B4D: CALL L193B + LD (05051H),HL + JP NZ,L2B60 + LD A,(04DD4H) + OR A + JP M,L1B35 + JP L2B26 + +L2B60: CP 03BH + JR Z,L2B66 ; (+002H) + CP ',' +L2B66: JP Z,L2B2F + CALL EXECNOTCHR + DB 0A9H + DW L2B9A + CALL GETNUM + CALL MATCHCHR + DB 029H + LD D,013H + LD A,(DPRNT) + LD B,A + LD A,(04DD4H) + CP 080H + JR Z,L2B8D ; (+00aH) + LD D,020H + CP 082H + JR NZ,L2BBD ; (+034H) + LD A,(L32D3) + LD B,A +L2B8D: LD A,E + SUB B + JR C,L2B2F ; (-062H) + LD C,A + LD B,000H + LD A,D + CALL L280F + JR L2B9D ; (+003H) + +L2B9A: CALL L2293 +L2B9D: PUSH HL + LD HL,LINEBUFR + LD A,D + OR A + CALL Z,L2BC0 + CALL NZ,L2BD0 + LD HL,L2BF7 + CALL L2BE3 + LD HL,L2B1E + EX (SP),HL + CALL L193B + RET Z + CP 03BH + RET Z + CP ',' + RET Z +L2BBD: JP SYNTAXERR + +L2BC0: PUSH AF + PUSH HL + EX DE,HL + LD HL,(04E94H) + CALL L38BB + POP HL + CALL L18FD + JP L2BD9 + +L2BD0: PUSH AF + CALL L190B + EX DE,HL + CALL L18A5 + EX DE,HL +L2BD9: DEC HL + LD (HL),C + INC HL + PUSH HL + ADD HL,BC + LD (HL),00DH + POP DE + POP AF +L2BE2: RET + +L2BE3: LD A,(04DD4H) + ADD A,080H + CALL L13FA + CALL L2E12 + JP (HL) + +L2BEF: LD B,000H + XOR E + INC DE + AND A + LD SP,L2BE2 +L2BF7: DEC D + NOP + XOR E + INC DE + OR H + LD SP,L3064 +CMDINPUT: CALL L1AAF + CALL EXECNOTCHR + DB '/' + DW L2C0E + CALL L2E9B + JP L2C62 + +L2C0E: CALL L2DBA + CALL SKIPSPACE + CP 022H + LD DE,L2C5F + JR NZ,L2C25 ; (+00aH) + CALL L2333 + CALL MATCHCHR + DB 03BH + CALL L190B +L2C25: LD (05051H),HL +L2C28: CALL MSG + LD A,(DPRNT) + LD B,A + LD L,A + LD H,000H + LD DE,LINEBUFR + ADD HL,DE + LD (L2C8C),HL + CALL GETL + EX DE,HL + LD A,(HL) + CP 01BH + JR NZ,L2C4A ; (+008H) + LD A,080H + CALL L29EB + JP L1438 + +L2C4A: INC B + LD A,00DH +L2C4D: CP (HL) + JR Z,L2C56 ; (+006H) + INC HL + DJNZ L2C4D ; (-006H) + JP L2C8E + +L2C56: CALL NL + LD DE,L2C5F + JP L2C28 + +L2C5F: CCF + JR NZ,L2C6F ; (+00dH) +L2C62: CALL L2E94 + LD (05051H),HL +L2C68: LD DE,LINEBUFR + PUSH DE + LD HL,L2C84 +L2C6F: CALL L2BE3 + POP HL + DEC HL + LD (HL),C + INC HL + LD A,B + OR A + JP NZ,STRLENERR + CALL L1A0E + LD HL,L2C68 + JP L2CC8 + +L2C84: XOR E + INC DE + XOR E + INC DE + XOR E + INC DE + ADC A,A + DB 030H +L2C8C: DB 00FH + DB 049H +L2C8E: LD A,(04DD4H) + CP 081H + JP Z,L2D1D + LD HL,(L2C8C) + CALL L18FD + LD DE,LINEBUFR + PUSH DE + INC BC + LDIR + POP HL + LD (L2C8C),HL + CALL SKIPSPACE + CP 00DH + JP Z,L2C56 + CALL EXECNOTCHR + DB ',' + DW L2CBF + PUSH HL + LD DE,L2D11 + CALL L19F3 + POP HL + JR L2CC2 ; (+003H) + +L2CBF: CALL L19F3 +L2CC2: LD (L2C8C),HL + LD HL,L2C8E +L2CC8: PUSH HL + CALL L1D95 + LD HL,(05051H) + CALL L267F + CALL L24B2 + LD (05051H),HL + CALL L1D9A +L2CDB: CALL L1DA5 + DW L2CF4 + LD HL,(05051H) + CALL L193B + JR NZ,L2CEC ; (+004H) + POP AF + JP L1B35 + +L2CEC: CALL MATCHCHR + DB ',' + LD (05051H),HL + RET + +L2CF4: LD DE,(04902H) + CALL L190B + EX DE,HL + CALL EXECNOTCHR + DB 00DH + DW L2D05 + LD HL,L2D10 +L2D05: CALL L1A75 + OR H + INC DE + CALL L1D95 + JP L2CDB + +L2D10: DB 030H +L2D11: DB 00DH +CMDREAD: LD (05051H),HL + LD A,081H + LD (04DD4H),A + CALL L1AAF +L2D1D: LD A,(05059H) + OR A + CALL Z,L2D43 + LD HL,(0505AH) + CALL L193B + JR NZ,L2D32 ; (+006H) + CALL L2D6B + JP L2D1D + +L2D32: CALL L19F3 + CALL L2E94 + LD (0505AH),HL + LD HL,LINEBUFR + LD (HL),00DH + JP L2CC2 + +L2D43: LD HL,0505CH +L2D46: XOR A + LD (05059H),A +L2D4A: LD A,(HL) + INC HL + OR (HL) + INC HL + JP Z,READDATAERR + INC HL + INC HL +L2D53: CALL EXECNOTCHR + DB 080H + DW L2D68 + CALL EXECNOTCHR + DB 081H + DW L2D68 + LD (0505AH),HL + LD A,001H + LD (05059H),A + RET + +L2D68: CALL L174F +L2D6B: INC HL + CP ':' + JP Z,L2D53 + JP L2D4A + +L2D74: DB 001H +CMDLOAD: CALL EXECNOTCHR + DB '/' + DW L2EDA + CALL MATCHCHR + DB 'T' + JP L2EDA + +CMDSAVE: CALL L1AA7 + CALL EXECNOTCHR + DB '/' + DW L2FE0 + CALL MATCHCHR + DB 'T' + JP L2FE0 + +CMDROPEN: CALL EXECNOTCHR + DB '/' + DW L311E + CALL MATCHCHR + DB 'T' + JP L311E + +CMDWOPEN: CALL EXECNOTCHR + DB '/' + DW L30E5 + CALL MATCHCHR + DB 'T' + JP L30E5 + + NOP +CMDCLOSE: CALL EXECNOTCHR + DB '/' + DW L3171 + CALL MATCHCHR + DB 'T' + JP L3171 + +L2DBA: LD A,080H + LD (04DD4H),A + OR A + RET + +L2DC1: LD HL,04DF2H + LD DE,NL + LD B,00AH +L2DC9: CP (HL) + JR Z,L2DD2 ; (+006H) + ADD HL,DE + DJNZ L2DC9 ; (-006H) + JP L177A + +L2DD2: LD A,00AH + SUB B + JP L1784 + +L2DD8: LD A,B + OR C + JR Z,L2DDE ; (+002H) + INC BC + INC BC +L2DDE: LD E,(HL) + INC HL + LD D,(HL) + DEC HL + PUSH HL + LD H,B + LD L,C + CALL L1773 + POP HL + JR Z,L2DF7 ; (+00cH) + EX DE,HL + PUSH BC + LD C,L + LD B,H + CALL L19E7 + POP BC + CALL L19C0 + EX DE,HL +L2DF7: LD D,H + LD E,L + LD A,C + OR B + RET Z + LD (HL),C + INC HL + LD (HL),B + DEC HL + DEC BC + DEC BC + RET + + CALL L2DD8 + INC HL + INC HL + RET + +L2E09: PUSH BC + LD BC,MONIT + CALL L2DD8 + POP BC + RET + +L2E12: ADD A,A + ADD A,L + LD L,A + JR NC,L2E18 ; (+001H) + INC H +L2E18: LD A,(HL) + INC HL + LD H,(HL) + LD L,A + RET + +L2E1D: LD DE,CMTFNAME ; Compare loaded filename against name given by user. + PUSH HL + INC HL + LD B,010H +L2E24: LD A,(DE) + CP (HL) + JR NZ,L2E31 ; (+009H) +L2E28: INC HL + INC DE + CP 00DH + JR Z,L2E31 ; (+003H) + DEC B + JR NZ,L2E24 ; (-00dH) +L2E31: POP HL + RET + +CMTBUF: DB 002H +CMTFNAME: DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + PUSH HL + LD HL,GETL + LD (04DD6H),HL + LD HL,04DD8H + LD B,005H +L2E5F: LD (HL),000H + INC HL + DJNZ L2E5F ; (-005H) + LD HL,CMTFNAME + LD B,011H +L2E69: LD (HL),00DH + INC HL + DJNZ L2E69 ; (-005H) + LD B,00EH +L2E70: LD (HL),000H + INC HL + DJNZ L2E70 ; (-005H) + POP HL + CALL L2E94 + CALL L2333 + LD A,D + OR A + JP Z,UNKNWNERR + LD A,C + DEC A + CP 010H + JP NC,UNKNWNERR + PUSH HL + CALL L190B + LD HL,CMTFNAME + EX DE,HL + LDIR + POP HL + RET + +L2E94: CALL EXECNOTCHR + DB ',' + DW L2E9A +L2E9A: RET + +L2E9B: LD B,000H + LD DE,L2EB0 + CALL L14C9 + JP NZ,SYNTAXERR + CALL L2E94 + LD A,B + ADD A,082H + LD (04DD4H),A + RET + +L2EB0: DB 0D0H + DB 0D4H + DB 000H +CMDVERIFY: CALL L1AA7 + XOR A + JR L2EDC ; (+023H) + +L2EB9: LD A,(ATRB) + CP 002H + JR NZ,L2EE6 ; (+026H) + CALL L2F62 + CALL L1B1B + CALL ?VRFY + PUSH AF + CALL L1AC7 + POP AF + JP C,L30B3 + LD DE,L2FDD + CALL MSGNL + JP L1B35 + +L2EDA: LD A,001H +L2EDC: LD (L2D74),A + LD BC,L2EE6 + PUSH BC + JP L2FE4 + +L2EE6: CALL QRDI ; Original ?RDI call + JP C,L30B3 + CALL L2F67 + LD HL,ATRB + LD A,(HL) + OR A + JR Z,L2EE6 ; (-010H) + CP 004H + JR NC,L2EE6 ; (-014H) + LD DE,CMTFNAME + LD A,(DE) + CP 00DH + JR Z,L2F07 ; (+005H) + CALL L2E1D + JR NZ,L2EE6 ; (-021H) +L2F07: LD A,(L2D74) + OR A + JR Z,L2EB9 ; (-054H) + LD A,(ATRB) + CP 001H + JP Z,L2F8E + CP 002H + JR NZ,L2EE6 ; (-033H) + CALL L1944 + LD HL,(SIZE) + DEC HL + DEC HL + LD C,L + LD B,H + LD DE,0505CH + CALL L1888 + CALL L19C3 + LD (DTADR),DE + CALL L2F6C + CALL QRDD ; Original ?RDD call + JR C,L2F3E ; (+006H) + CALL L1ABF + JP L1B35 + +L2F3E: PUSH AF + CALL L2F4B + POP AF + PUSH AF + CALL L1944 + POP AF + JP L30B3 + +L2F4B: LD DE,0505EH + LD HL,04E4EH + XOR A + SBC HL,DE + RET Z + LD C,L + LD B,H + DEC DE + DEC DE + CALL L1873 + CALL L1762 + JP L19C3 + +L2F62: LD DE,L2FD2 + JR L2F6F ; (+008H) + +L2F67: LD DE,L2FC2 + JR L2F6F ; (+003H) + +L2F6C: LD DE,L2FC9 +L2F6F: CALL MSGNL + LD DE,NAME + LD A,(DE) + CP 00DH + RET Z + PUSH DE + CALL L2F86 + POP DE + LD A,00DH + LD (01101H),A + CALL MSGX +L2F86: LD DE,L2F8C + JP MSGX + +L2F8C: DB 022H + DB 00DH +L2F8E: LD HL,(DTADR) + EX DE,HL + LD HL,(0490AH) + DEC HL + CALL L1773 + JR NC,L2FB6 ; (+01bH) + LD HL,(SIZE) + ADD HL,DE + JR C,L2FBC ; (+01bH) + EX DE,HL + LD HL,(04908H) + CALL L1773 + JR C,L2FBC ; (+012H) + CALL L2F6C + CALL QRDD ; Original ?RDD call + JP C,L30B3 + JP L1B35 + +L2FB6: CALL MSTOP + JP BADWRERR + +L2FBC: CALL MSTOP + JP MEMERR + +L2FC2: DB "F",0B7H,0A5H,0B0H,09CH," " + DB 00DH +L2FC9: DB "L",0B7H,0A1H,09CH,0A6H,0B0H,097H," " + DB 00DH +L2FD2: DB "V",092H,09DH,0A6H,0AAH,0BDH,0A6H,0B0H,097H," " + DB 00DH +L2FDD: DB "OK" + DB 00DH +L2FE0: LD BC,L3038 + PUSH BC +L2FE4: CALL EXECNOTCHR + DB ',' + DW L2FEA +L2FEA: PUSH HL + LD HL,CMTBUF + LD (HL),002H +L2FF0: LD B,011H +L2FF2: INC HL + LD (HL),00DH + DJNZ L2FF2 ; (-005H) + CALL L1459 + POP HL + CALL L193B ; Skip space to CR, ':' or char. + LD (05051H),HL + RET Z ; CR or ':' return. + CALL L2333 + CALL L193B ; Skip space to CR, ':' or char. + JP NZ,SYNTAXERR + LD (05051H),HL + LD A,D + OR A + JP Z,UNKNWNERR + CALL L190B + LD A,C + OR A + RET Z + CP 011H + JP NC,UNKNWNERR + EX DE,HL + LD DE,CMTFNAME + LDIR + RET + +L3025: LD DE,ATRB + LD HL,CMTBUF + LD BC,PRNT + LDIR + LD B,06EH +L3032: XOR A + LD (DE),A + INC DE + DJNZ L3032 ; (-005H) + RET + +L3038: CALL L3025 + LD HL,0505CH + LD (DTADR),HL + LD DE,0505CH + LD HL,(04E4EH) + XOR A + SBC HL,DE + LD (SIZE),HL + CALL QWRI ; Original ?WRI call + JP C,L30B8 + CALL L1B1B + CALL QWRD ; Original ?WRD call + PUSH AF + CALL L1ABF + POP AF + JP C,L30B8 + JP WARMSTRT + +L3064: CALL L1459 + LD A,(L30E2) + CP 001H + JR NZ,L309A ; (+02cH) + LD HL,(L30E3) +L3071: PUSH DE + LD DE,04DD3H + CALL L1773 + JR C,L3082 ; (+008H) + CALL QWRD ; Original ?WRD call + JR C,L30B8 ; (+039H) + LD HL,04CD3H +L3082: POP DE + LD A,(DE) + LD (HL),A + INC HL + INC DE + CP 00DH + JR NZ,L3071 ; (-01aH) + LD (L30E3),HL + RET + + CALL L1459 + LD A,(L30E2) + PUSH DE + LD C,000H + CP 002H +L309A: JP NZ,OUTFILEERR + LD (L2D74),A + LD HL,(L30E3) +L30A3: PUSH DE + LD DE,04DD3H + CALL L1773 + JR C,L30BE ; (+012H) + PUSH BC + CALL QRDD ; Original ?RDD call + POP BC + JR NC,L30BB ; (+008H) +L30B3: CP 002H + JP NZ,CHKSUMERR +L30B8: JP L1438 + +L30BB: LD HL,04CD3H +L30BE: LD A,(HL) + LD B,A + CP 0FFH + JR NZ,L30CC ; (+008H) + LD A,(L2D74) + CP 002H + JP Z,OUTFILEERR +L30CC: XOR A + LD (L2D74),A + LD A,B + POP DE + LD (DE),A + INC HL + INC DE + INC C + CP 00DH + JR NZ,L30A3 ; (-037H) + DEC C + POP DE + LD (L30E3),HL + LD B,000H + RET + +L30E2: NOP +L30E3: NOP + NOP +L30E5: CALL L1AAF + LD A,(L30E2) + OR A + JP NZ,OPENERR + LD BC,L30FC + PUSH BC + PUSH HL + DB 021H + DB 033H +L30F6: DB 02EH + LD (HL),003H + JP L2FF0 + +L30FC: CALL L3025 + LD HL,00100H + LD (SIZE),HL + LD HL,04CD3H + LD (L30E3),HL + LD (DTADR),HL + CALL QWRI ; Original ?WRI call +L3111: JR C,L30B8 ; (-05bH) + CALL MSTOP + LD A,001H + LD (L30E2),A +L311B: JP L1B35 + +L311E: CALL L1AAF + LD A,(L30E2) + OR A + JP NZ,OPENERR + LD BC,L313A + PUSH BC + LD A,002H + LD (L2D74),A + PUSH HL + LD HL,CMTBUF + LD (HL),004H + JP L2FF0 + +L313A: CALL QRDI ; Original ?RDI call. + JP C,L30B3 + LD HL,ATRB + LD A,(HL) + CP 003H + JR NZ,L313A ; (-00eH) + LD DE,CMTFNAME + LD A,(DE) + CP 00DH + JR Z,L3155 ; (+005H) + CALL L2E1D ; Compare filename. + JR NZ,L313A ; NZ - filename doesnt match, read next header. +L3155: LD A,002H + LD (L30E2),A + CALL MSTOP + LD HL,04CD3H + LD (DTADR),HL + LD HL,00100H + LD (SIZE),HL + LD HL,04DD3H + LD (L30E3),HL + JR L311B ; (-056H) + +L3171: CALL L1459 + LD A,(L30E2) + OR A + JR Z,L3195 ; (+01bH) + PUSH HL + DEC A + JR NZ,L3190 ; (+012H) + LD HL,(L30E3) + LD DE,04DD3H + CALL L1773 + JR NC,L3198 ; (+00fH) +L3189: LD (HL),0FFH + CALL QWRD ; Original ?WRD call +L318E: JR C,L3111 ; (-07fH) +L3190: XOR A + LD (L30E2),A + POP HL +L3195: JP CMDREMDATA + +L3198: CALL QWRD ; Original ?WRD call + JR C,L318E ; (-00fH) + LD HL,04CD3H + JR L3189 ; (-019H) + +L31A2: LD A,(L32D3) + OR A + RET Z +L31A7: CALL L32C2 + LD A,00DH + CALL L3291 + XOR A + LD (L32D3),A + RET + + PUSH BC + PUSH DE + LD A,(L32D3) + LD B,A +L31BA: LD A,(DE) + CP 00DH + JP Z,L3258 + CP 020H + CALL C,L31CC + CALL L3291 + INC B + INC DE + JR L31BA ; (-012H) + +L31CC: CP 005H + JR Z,L31F0 ; (+020H) + CP 006H + JR Z,L3200 ; (+02cH) + CP 010H + JR Z,L3221 ; (+049H) + CP 011H + JR Z,L31F9 ; (+01dH) + CP 012H + JR Z,L31F5 ; (+015H) + CP 013H + JR Z,L3226 ; (+042H) + CP 014H + JR Z,L322A ; (+042H) + CP 015H + JR Z,L3238 ; (+04cH) + POP AF + INC DE + JR L31BA ; (-036H) + +L31F0: LD A,00FH +L31F2: LD B,PRTD + RET + +L31F5: LD A,00BH + JR L31F2 ; (-007H) + +L31F9: LD A,009H + LD (L326D),A + JR L31F2 ; (-00eH) + +L3200: LD A,00CH + CALL L3291 + LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,00BH + CALL L3291 + LD A,00AH + CALL L3291 + CALL L3267 + CALL L3291 + JR L31F0 ; (-031H) + +L3221: CALL L3267 + JR L31F2 ; (-034H) + +L3226: LD A,00CH + JR L31F2 ; (-038H) + +L322A: LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,009H + JR L31F2 ; (-046H) + +L3238: LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,00BH + JR L31F2 ; (-054H) + +L3246: PUSH BC + PUSH DE + LD A,(L32D3) + LD B,A +L324C: LD A,(DE) + CP 00DH + JR Z,L3258 ; (+007H) + CALL L3291 + INC DE + INC B + JR L324C ; (-00cH) + +L3258: LD A,B + CP 0A0H + JR C,L325F ; (+002H) + SUB 0A0H +L325F: LD (L32D3),A + POP DE + POP BC + JP L32C2 + +L3267: LD A,00AH + LD (L326D),A + RET + +L326D: LD A,(BC) +L326E: PUSH BC + PUSH DE + LD A,(L32D3) + LD B,A +L3274: LD A,020H + CALL L3291 + INC B + LD A,B +L327B: SUB 00AH + JR C,L3274 ; (-00bH) + JR NZ,L327B ; (-006H) + JP L3258 + +L3284: CALL L3291 + CALL L32A5 + IN A,(PRTC) + RRCA + RRCA + RET + +L328F: LD A,01BH +L3291: PUSH AF + CALL L32A5 + POP AF + OUT (PRTD),A + LD A,080H + OUT (PRTC),A + LD A,001H + CALL L32A6 + XOR A + OUT (PRTC),A + RET + +L32A5: XOR A +L32A6: PUSH BC + PUSH DE + LD C,A + LD B,00FH + LD DE,MONIT +L32AE: IN A,(PRTC) + AND 00DH + CP C + JR Z,L32BF ; (+00aH) + DEC DE + LD A,D + OR E + JR NZ,L32AE ; (-00cH) + DJNZ L32AE ; (-00eH) + JP PRTNRDYERR + +L32BF: POP DE + POP BC + RET + +L32C2: LD A,007H + CALL L3284 + JP NC,PRTPAPERERR + LD A,008H + CALL L3284 + RET C + JP PRTHWERR + +L32D3: NOP +CMDPAGE: CALL GETNUM + LD A,E + OR A + JP Z,ILDATERR + LD A,009H + CALL L3291 + LD A,009H + CALL L3291 + LD A,E + PUSH AF + RRCA + RRCA + RRCA + RRCA + CALL ASC + CALL L3291 + POP AF + CALL ASC + CALL L3291 + JP L1B38 + +L32FC: CALL L31A7 + JP L1B35 + + CALL L193B + LD (05051H),HL + JR Z,L32FC ; (-00eH) + PUSH HL + CALL L338A + LD BC,00500H + CALL L2DD8 + POP HL +L3315: CALL L193B + LD (05051H),HL + JR Z,L3373 ; (+056H) + CALL L2E94 + CALL EXECNOTCHR + DB 03BH + DW L3326 +L3326: CALL L2293 + PUSH HL + LD HL,(04E80H) + PUSH BC + LD BC,003F0H + ADD HL,BC + POP BC + LD A,D + OR A + CALL Z,L2BC0 + CALL NZ,L2BD0 + LD A,B + OR C + JR Z,L3362 ; (+023H) + PUSH DE + LD HL,(04E80H) + INC HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + DEC HL + PUSH DE + PUSH HL + EX DE,HL + ADD HL,BC + XOR A + EX DE,HL + LD HL,003E8H + SBC HL,DE + JP C,ILDATERR + POP HL + LD (HL),E + INC HL + LD (HL),D + INC HL + POP DE + ADD HL,DE + POP DE + EX DE,HL + LDIR +L3362: LD HL,L3315 + EX (SP),HL + CALL L193B + RET Z + CP 03BH + RET Z + CP ',' + RET Z + JP SYNTAXERR + +L3373: LD HL,(04E80H) + INC HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + LD A,D + OR E + JR Z,L3387 ; (+008H) + INC HL + EX DE,HL + CALL L3390 + CALL L338A +L3387: JP L1B35 + +L338A: LD HL,(04E80H) + JP L2E09 + +L3390: CALL L328F + LD A,018H + CALL L3291 + LD A,L + CALL L3291 + LD A,H + CALL L3291 +L33A0: LD A,(DE) + CALL L3291 + INC DE + DEC HL + LD A,H + OR L + JR NZ,L33A0 ; (-00aH) + RET + +CMDCOPY: CALL L193B + JP Z,SYNTAXERR + INC HL + LD (05051H),HL + SUB 034H + JP Z,SYNTAXERR + INC A + JP Z,SYNTAXERR + INC A + JP Z,SYNTAXERR + INC A + JP NZ,SYNTAXERR + LD HL,(PAGETP) + LD C,019H +L33CB: CALL L31A7 + LD A,028H + LD B,A +L33D1: CALL L2878 + OR A + JR Z,L33DB ; (+004H) + CP 00DH + JR NZ,L33DD ; (+002H) +L33DB: LD A,020H +L33DD: CALL L3291 + CALL BRKEY + JR Z,L33FD ; (+018H) + INC HL + DJNZ L33D1 ; (-017H) + DEC C + JR NZ,L33CB ; (-020H) + CALL L31A7 + JP L1B35 + +L33F1: CALL L328F + LD A,(L326D) + JP L3291 + + CALL L33F1 +L33FD: JP L1438 + +L3400: DB 000H +L3401: DB 080H +L3402: DB 086H +L3403: XOR A + DB 001H +L3405: LD A,080H + PUSH DE + XOR (HL) + CPL + LD C,A + LD A,(DE) + AND 080H + LD B,A + XOR C + CPL + AND 080H + LD C,A +L3414: PUSH BC + LD B,(HL) + RES 7,B + LD A,(DE) + AND 07FH + CP B + JR NC,L3428 ; (+00aH) + POP BC + EX DE,HL + LD A,B + XOR C + CPL + AND 080H + LD B,A + JR L3414 ; (-014H) + +L3428: LD C,A + ADD A,040H + LD (L3402),A + LD A,C + SUB B + POP BC + LD (03400H),BC + PUSH DE + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + POP HL + INC HL + JR Z,L345C ; (+01aH) +L3442: CP 008H + JR NC,L3453 ; (+00dH) +L3446: SRL B + RR C + RR D + RR E + DEC A + JR NZ,L3446 ; (-00bH) + JR L345C ; (+009H) + +L3453: LD E,D + LD D,C + LD C,B + LD B,000H + SUB 008H + JR NZ,L3442 ; (-01aH) +L345C: LD A,(L3400) + OR A + JR Z,L349C ; (+03aH) + LD A,(HL) + INC HL + ADD A,E + LD E,A + LD A,(HL) + INC HL + ADC A,D + LD D,A + LD A,(HL) + INC HL + ADC A,C + LD C,A + LD A,(HL) + ADC A,B + LD B,A + JR NC,L347F ; (+00cH) + RR B + RR C + RR D + RR E + LD HL,L3402 + INC (HL) +L347F: LD HL,L3402 + LD A,(HL) + SUB 040H + JR C,L348E ; (+007H) + JP M,OVFLERR + DEC HL + OR (HL) + JR L3491 ; (+003H) + +L348E: CALL L3CDE +L3491: POP HL +L3492: LD (HL),A + INC HL + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (HL),C + INC HL + LD (HL),B + RET + +L349C: LD A,(HL) + INC HL + SUB E + LD E,A + LD A,(HL) + INC HL + SBC A,D + LD D,A + LD A,(HL) + INC HL + SBC A,C + LD C,A + LD A,(HL) + SBC A,B + LD B,A + CALL C,L34E4 + OR C + OR D + JR NZ,L34B7 ; (+005H) + LD A,E + CP 03FH + JR C,L348E ; (-029H) +L34B7: LD HL,L3402 +L34BA: LD A,B + OR A + JP M,L347F + JR NZ,L34D4 ; (+013H) + LD A,(HL) + SUB 008H + JR C,L348E ; (-038H) + LD (HL),A + LD A,C + OR D + OR E + JR Z,L348E ; (-03eH) + LD B,C + LD C,D + LD D,E + LD E,000H + JP L34BA + +L34D4: DEC (HL) + JR C,L348E ; (-049H) + SLA E + RL D + RL C + RL B + JP P,L34D4 + JR L347F ; (-065H) + +L34E4: LD HL,L3401 + LD A,(HL) + ADD A,080H + LD (HL),A + LD A,E + CPL + ADD A,001H + LD E,A + LD A,D + CPL + ADC A,000H + LD D,A + LD A,C + CPL + ADC A,000H + LD C,A + LD A,B + CPL + ADC A,000H + LD B,A + RET + +L3500: PUSH DE + LD A,(DE) + XOR (HL) + CPL + AND 080H + LD (L3401),A + LD B,(HL) + RES 7,B + LD A,(DE) + AND 07FH + ADD A,B + JP Z,L348E + DEC A +L3514: CP 030H + JP C,L348E + CP 0E0H + JP NC,OVFLERR + LD (L3402),A + XOR A + LD (L3400),A + LD BC,00004H + ADD HL,BC + LD A,(HL) + OR A + JP P,L348E + PUSH HL + POP IY + LD C,B + EX DE,HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH HL + LD H,B + LD L,B + EXX + POP HL + LD E,(HL) + INC HL + LD D,(HL) + LD HL,MONIT + LD A,D + OR A + JP P,L348E + LD C,004H +L354A: LD A,(IY+000H) + LD B,008H + OR A + JR Z,L35C5 ; (+073H) +L3552: RLA + JR NC,L3569 ; (+014H) + EX AF,AF' + EXX + LD A,B + ADD A,C + LD C,A + ADC HL,DE + EXX + ADC HL,DE + JR NC,L3568 ; (+007H) + LD A,(L3400) + INC A + LD (L3400),A +L3568: EX AF,AF' +L3569: SRL D + RR E + EXX + RR D + RR E + RR B + EXX + DJNZ L3552 ; (-025H) +L3577: DEC IY + DEC C + JR NZ,L354A ; (-032H) + LD A,(L3400) + OR A + JR Z,L3599 ; (+017H) + LD B,A + LD A,(L3402) + ADD A,B + LD (L3402),A +L358A: SCF + RR H + RR L + EXX + RR H + RR L + RR C + EXX + DJNZ L358A ; (-00fH) +L3599: EXX + LD A,C + OR A + JP P,L35BD + LD DE,00001H + ADD HL,DE + EXX + LD DE,MONIT + ADC HL,DE + JR NC,L35BC ; (+011H) + RR H + RR L + EXX + RR H + RR L + EXX + LD A,(L3402) + INC A + LD (L3402),A +L35BC: EXX +L35BD: PUSH HL + EXX + LD B,H + LD C,L + POP DE + JP L34B7 + +L35C5: LD A,E + LD E,D + LD D,000H + EXX + LD B,E + LD E,D + LD D,A + EXX + JR L3577 ; (-059H) + +L35D0: PUSH DE + LD A,(DE) + XOR (HL) + CPL + AND 080H + LD (L3401),A + LD B,(HL) + RES 7,B + LD A,(DE) + AND 07FH + SUB B + ADD A,081H +L35E2: CP 030H + JP C,L348E + CP 0E0H + JP NC,OVFLERR + LD (L3402),A + INC HL + INC DE + EX DE,HL + LD C,(HL) + INC HL + LD B,(HL) + INC HL + PUSH HL + EX DE,HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,L + EX AF,AF' + LD A,H + LD H,B + LD L,C + EXX + POP HL + LD C,(HL) + INC HL + LD B,(HL) + LD H,A + EX AF,AF' + LD L,A + LD E,(HL) + INC HL + LD D,(HL) + LD H,B + LD L,C + LD A,D + OR A + JP P,OVFLERR + LD C,004H +L3615: LD B,008H +L3617: BIT 7,H + JR NZ,L3633 ; (+018H) + OR A +L361C: RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + DJNZ L3617 ; (-00dH) + PUSH AF + DEC C + JR NZ,L3615 ; (-013H) +L3628: POP AF + LD E,A + POP AF + LD D,A + POP AF + LD C,A + POP AF + LD B,A + JP L34B7 + +L3633: EXX + OR A + SBC HL,DE + EXX + SBC HL,DE + CCF + JR C,L361C ; (-021H) + EXX + ADD HL,DE + EXX + ADC HL,DE + OR A + RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + DEC B + JR NZ,L3652 ; (+006H) + PUSH AF + LD B,008H + DEC C + JR Z,L3628 ; (-02aH) +L3652: EXX + OR A + SBC HL,DE + EXX + SBC HL,DE + SCF + RLA + DEC B + JR NZ,L3664 ; (+006H) + PUSH AF + LD B,008H + DEC C + JR Z,L3628 ; (-03cH) +L3664: EXX + ADD HL,HL + EXX + ADC HL,HL + JR NC,L3617 ; (-054H) + JR L3652 ; (-01bH) + +L366D: DEC E +L366E: XOR C + LD D,B +L3670: LD A,(HL) + PUSH HL + POP IX + EX DE,HL + LD (L366E),HL + EX AF,AF' + XOR A + LD (L366D),A + LD H,A + LD L,A + EXX + LD H,A + LD L,A + LD B,A + LD C,A + EX AF,AF' + CP 02EH + JR Z,L369D ; (+014H) + SUB 030H +L368B: CALL L3772 + CALL L3768 + SUB 030H + CP 00AH + JR C,L368B ; (-00cH) + ADD A,030H + CP 02EH + JR NZ,L36AD ; (+010H) +L369D: CALL L3768 + SUB 030H + CP 00AH + JR NC,L36AB ; (+005H) + CALL L3780 + JR L369D ; (-00eH) + +L36AB: ADD A,030H +L36AD: CP 045H + JR NZ,L36F5 ; (+044H) + EXX + CALL L3768 + LD B,001H + CP '+' + JR Z,L36C1 ; (+006H) + CP '-' + JP NZ,SYNTAXERR + DEC B +L36C1: LD A,B + OR A + EX AF,AF' + CALL L3768 + SUB 030H + NOP + NOP + CP 00AH + JR NC,L36EB ; (+01cH) + LD B,A + CALL L3768 + SUB 030H + CP 00AH + JR NC,L36EB ; (+012H) + LD C,A + CALL L3768 + SUB 030H + CP 00AH + JP C,OVFLERR + LD A,B + ADD A,A + ADD A,A + ADD A,B + ADD A,A + ADD A,C + LD B,A +L36EB: EX AF,AF' + LD A,B + JR NZ,L36F1 ; (+002H) + CPL + INC A +L36F1: LD (L366D),A + EXX +L36F5: PUSH IX + LD A,(L366D) + ADD A,01DH + ADD A,C + LD (L366D),A + CP 030H + JR C,L370B ; (+007H) + CP 080H + JP C,OVFLERR + JR L375D ; (+052H) + +L370B: LD A,080H + LD (L3401),A + LD A,0A0H + LD (L3402),A + PUSH HL + EXX + POP BC + LD D,H + LD E,L + LD HL,L3725 + PUSH HL + LD HL,(L366E) + PUSH HL + JP L34B7 + +L3725: LD A,(L366D) + LD L,A + LD C,A + LD H,000H + LD B,H + ADD HL,HL + ADD HL,HL + ADD HL,BC + LD BC,L37AE + ADD HL,BC + LD DE,(0366EH) + LD A,080H + LD (L3401),A + LD A,020H + ADD A,(HL) + LD B,A + LD A,(DE) + AND 07FH + ADD A,B + JP C,OVFLERR + SUB 021H + JR NC,L374D ; (+001H) + XOR A +L374D: LD BC,L3755 + PUSH BC + PUSH DE + JP L3514 + +L3755: POP HL + LD BC,00005H + LD D,B + LD E,B + LD A,(HL) + RET + +L375D: LD HL,L3755 + PUSH HL + LD HL,(L366E) + PUSH HL + JP L348E + +L3768: INC IX + LD A,(IX+000H) + CP 020H + RET NZ + JR L3768 ; (-00aH) + +L3772: OR A + JR NZ,L3778 ; (+003H) + OR B + RET Z + XOR A +L3778: EX AF,AF' + LD A,B + CP 009H + JR NZ,L378E ; (+010H) + INC C + RET + +L3780: OR A + JR NZ,L3788 ; (+005H) + DEC C + OR B + RET Z + INC C + XOR A +L3788: EX AF,AF' + LD A,B + CP 009H + RET Z + DEC C +L378E: INC B + LD D,H + LD E,L + EXX + LD D,H + LD E,L + XOR A + ADD HL,HL + RLA + ADD HL,HL + RLA + ADD HL,DE + LD D,000H + ADC A,D + ADD HL,HL + RLA + EX AF,AF' + LD E,A + EX AF,AF' + ADD HL,DE + ADC A,D + EXX + ADD HL,HL + ADD HL,HL + ADD HL,DE + ADD HL,HL + LD D,000H + LD E,A + ADD HL,DE + RET + +L37AE: DB 0E0H + DB 0F5H + DB 0F7H + DB 0D2H + DB 0CAH + DB 0E3H + DB 0F3H + DB 0B5H + DB 087H + DB 0FDH + DB 0E7H + DB 0B8H + DB 0D1H + DB 074H + DB 09EH + DB 0EAH + DB 025H + DB 006H + DB 012H + DB 0C6H + DB 0EDH + DB 0AFH + DB 087H + DB 096H + DB 0F7H + DB 0F1H + DB 0CDH + DB 014H + DB 0BEH + DB 09AH + DB 0F4H + DB 001H + DB 09AH + DB 06DH + DB 0C1H + DB 0F7H + DB 081H + DB 000H + DB 0C9H + DB 0F1H + DB 0FBH + DB 050H + DB 0A0H + DB 01DH + DB 097H +L37DB: DB 0FEH + DB 065H + DB 008H + DB 0E5H + DB 0BCH + DB 001H + DB 07EH + DB 04AH + DB 01EH + DB 0ECH + DB 005H + DB 08FH + DB 0EEH + DB 092H + DB 093H + DB 008H + DB 032H + DB 0AAH + DB 077H + DB 0B8H + DB 00BH + DB 0BFH + DB 094H + DB 095H + DB 0E6H + DB 00FH + DB 0F7H + DB 07CH + DB 01DH + DB 090H + DB 012H + DB 035H + DB 0DCH + DB 024H + DB 0B4H + DB 015H + DB 042H + DB 013H + DB 02EH + DB 0E1H + DB 019H + DB 009H + DB 0CCH + DB 0BCH + DB 08CH + DB 01CH + DB 00CH + DB 0FFH + DB 0EBH + DB 0AFH + DB 01FH + DB 0CFH + DB 0FEH + DB 0E6H + DB 0DBH + DB 023H + DB 041H + DB 05FH + DB 070H + DB 089H + DB 026H + DB 012H + DB 077H + DB 0CCH + DB 0ABH + DB 029H + DB 0D6H + DB 094H + DB 0BFH + DB 0D6H + DB 02DH + DB 006H + DB 0BDH + DB 037H + DB 086H + DB 030H + DB 047H + DB 0ACH + DB 0C5H + DB 0A7H + DB 033H + DB 059H + DB 017H + DB 0B7H + DB 0D1H + DB 037H + DB 098H + DB 06EH + DB 012H + DB 083H + DB 03AH + DB 03DH + DB 00AH + DB 0D7H + DB 0A3H + DB 03DH + DB 0CDH + DB 0CCH + DB 0CCH + DB 0CCH + DB 041H + DB 000H + DB 000H + DB 000H + DB 080H + DB 044H + DB 000H + DB 000H + DB 000H + DB 0A0H + DB 047H + DB 000H + DB 000H + DB 000H + DB 0C8H + DB 04AH + DB 000H + DB 000H + DB 000H + DB 0FAH + DB 04EH + DB 000H + DB 000H + DB 040H + DB 09CH + DB 051H + DB 000H + DB 000H + DB 050H + DB 0C3H + DB 054H + DB 000H + DB 000H + DB 024H + DB 0F4H + DB 058H + DB 000H + DB 080H + DB 096H + DB 098H + DB 05BH + DB 000H + DB 020H + DB 0BCH + DB 0BEH + DB 05EH + DB 000H + DB 028H + DB 06BH + DB 0EEH + DB 062H + DB 000H + DB 0F9H + DB 002H + DB 095H + DB 065H + DB 040H + DB 0B7H + DB 043H + DB 0BAH + DB 068H + DB 010H + DB 0A5H + DB 0D4H + DB 0E8H + DB 06CH + DB 02AH + DB 0E7H + DB 084H + DB 091H + DB 06FH + DB 0F5H + DB 020H + DB 0E6H + DB 0B5H + DB 072H + DB 032H + DB 0A9H + DB 05FH + DB 0E3H + DB 076H + DB 0BFH + DB 0C9H + DB 01BH + DB 08EH + DB 079H + DB 02FH + DB 0BCH + DB 0A2H + DB 0B1H + DB 07CH + DB 03AH + DB 06BH + DB 00BH + DB 0DEH + DB 080H + DB 005H + DB 023H + DB 0C7H + DB 08AH +L38A3: DB 08DH + DB 06CH +L38A5: DB 001H +L38A6: DB 020H +L38A7: DB 031H +L38A8: DB 02EH + DB 035H + DB 00DH + DB 00DH + DB 00DH + DB 00DH + DB 00DH +L38AF: DB 00DH +L38B0: DB 00DH +L38B1: DB 000H +L38B2: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L38BB: PUSH DE + CALL L3997 + LD A,(L38A5) + OR A + JP Z,L3960 + JP M,L38CF + CP 009H + JR C,L392B ; (+05eH) + JR L38D4 ; (+005H) + +L38CF: CP PRTD + JP NC,L395B +L38D4: LD A,02EH + LD (L38A7),A + LD HL,L38B0 + XOR A +L38DD: DEC HL + CP (HL) + JR Z,L38DD ; (-004H) + LD A,(HL) + CP 02EH + JP Z,L398A + INC HL + LD (HL),045H + INC HL + LD A,(L38A5) + LD B,'+' + OR A + JP P,L38FD + CP 0EDH + JP C,L398A + LD B,'-' + CPL + INC A +L38FD: LD (HL),B + INC HL + LD BC,0FF0AH +L3902: INC B + SUB C + JR NC,L3902 ; (-004H) + ADD A,C + LD (HL),B + INC HL + LD (HL),A + INC HL + LD (HL),00DH +L390D: LD HL,L38A6 +L3910: INC HL + LD A,(HL) + CP 00DH + JR Z,L391D ; (+007H) + JR NC,L3910 ; (-008H) + OR 030H + LD (HL),A + JR L3910 ; (-00dH) + +L391D: LD DE,L38A6 + XOR A + SBC HL,DE + LD B,H + LD C,L + POP HL + EX DE,HL + INC BC + LDIR + RET + +L392B: LD HL,L38A8 + LD DE,L38A7 + LD B,A + INC B +L3933: DEC B + JR Z,L393C ; (+006H) + LD A,(HL) + LD (DE),A + INC HL + INC DE + JR L3933 ; (-009H) + +L393C: LD A,02EH + LD (DE),A + LD HL,L38B0 +L3942: LD (HL),00DH + DEC HL + LD A,(HL) + OR A + JR Z,L3942 ; (-007H) + CP 02EH + JR NZ,L394F ; (+002H) + LD (HL),00DH +L394F: LD HL,L38A7 + LD A,(HL) + CP 00DH + JR NZ,L390D ; (-04aH) + LD (HL),000H + JR L390D ; (-04eH) + +L395B: LD DE,L38B2 + JR L3963 ; (+003H) + +L3960: LD DE,L38B1 +L3963: LD HL,L38AF + LD A,00DH + LD (DE),A + PUSH DE + DEC DE + LD BC,00008H + LDDR + EX DE,HL + LD A,(L38A5) + OR A + JR Z,L397A ; (+003H) + LD (HL),000H + DEC HL +L397A: LD (HL),02EH + DEC HL + LD (HL),000H + POP HL +L3980: DEC HL + LD A,(HL) + CP 000H + JR NZ,L390D ; (-079H) + LD (HL),00DH + JR L3980 ; (-00aH) + +L398A: LD HL,L3994 + LD BC,GETL + POP DE + LDIR + RET + +L3994: JR NZ,L39C6 ; (+030H) + DEC C +L3997: LD (L38A3),HL + LD A,(HL) + LD B,020H + OR A + JP M,L39A3 + LD B,'-' +L39A3: AND 07FH + LD (HL),A + LD A,B + LD (L38A6),A + EX DE,HL + LD HL,L37DB + LD A,0ECH + EX AF,AF' +L39B1: EX AF,AF' + INC A + EX AF,AF' + LD BC,00005H + ADD HL,BC + PUSH HL + PUSH DE + LD A,(DE) + CALL L3A73 + POP DE + POP HL + JR NC,L39B1 ; (-011H) + EX AF,AF' + LD (L38A5),A +L39C6: PUSH DE + LD BC,L39D8 + PUSH BC + PUSH DE + LD A,080H + LD (L3401),A + LD A,(DE) + SUB (HL) + ADD A,081H + JP L35E2 + +L39D8: LD HL,L38A7 + LD (HL),000H + INC HL + EX (SP),HL + LD A,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH HL + EX DE,HL + EXX + POP HL + LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL + SUB 0C0H + JR NC,L39FE ; (+00dH) +L39F1: SRL H + RR L + EXX + RR H + RR L + EXX + INC A + JR NZ,L39F1 ; (-00dH) +L39FE: POP BC + LD A,009H +L3A01: EX AF,AF' + XOR A + LD D,H + LD E,L + EXX + LD D,H + LD E,L + ADD HL,HL + EXX + ADC HL,HL + RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + RLA + EXX + ADD HL,DE + EXX + ADC HL,DE + LD D,000H + ADC A,D + EXX + ADD HL,HL + EXX + ADC HL,HL + RLA + LD (BC),A + INC BC + EX AF,AF' + DEC A + JR NZ,L3A01 ; (-026H) +L3A27: LD HL,L38B0 + LD A,(HL) + LD (HL),000H + CP 005H + LD C,000H + JR C,L3A34 ; (+001H) + INC C +L3A34: LD B,00AH +L3A36: DEC B + JR Z,L3A47 ; (+00eH) + DEC HL + LD A,(HL) + ADD A,C + LD (HL),A + SUB 00AH + LD C,000H + JR C,L3A36 ; (-00dH) + INC C + LD (HL),A + JR L3A36 ; (-011H) + +L3A47: LD A,(L38A7) + OR A + RET Z + LD HL,L38AF + LD DE,L38B0 + LD BC,NL + LDDR + EX DE,HL + LD (HL),000H + LD A,(L38A5) + INC A + LD (L38A5),A + JR L3A27 ; (-03cH) + +L3A63: LD BC,00005H +L3A66: LD A,(DE) + OR A + JP M,L3A73 + BIT 7,(HL) + JR Z,L3A71 ; (+002H) + SCF + RET + +L3A71: EX DE,HL + LD A,(DE) +L3A73: CP (HL) + RET NZ + DEC C + ADD HL,BC + EX DE,HL + ADD HL,BC + EX DE,HL + LD B,003H +L3A7C: LD A,(DE) + CP (HL) + RET NZ + DEC HL + DEC DE + DJNZ L3A7C ; (-007H) + LD A,(DE) + CP (HL) + RET + +L3A86: EX DE,HL + CALL L3997 + LD A,(L38A6) + LD B,080H + CP 020H + JR Z,L3A95 ; (+002H) + LD B,000H +L3A95: LD A,B + LD (L3401),A + OR A + JR Z,L3B1A ; (+07eH) + LD A,(L38A5) + DEC A + JP M,L3B50 + LD HL,L38B0 + LD B,00DH + LD (HL),B + SUB 008H + JR NC,L3AB3 ; (+006H) +L3AAD: LD (HL),B + DEC HL + INC A + JR NZ,L3AAD ; (-005H) + DEC A +L3AB3: INC A + LD (L366D),A + LD IX,L38A7 + XOR A + LD H,A + LD L,A + EXX + LD B,A + LD C,A + LD H,A + LD L,A +L3AC3: LD A,(IX+000H) + CP 00DH + JR Z,L3AD1 ; (+007H) + CALL L3772 + INC IX + JR L3AC3 ; (-00eH) + +L3AD1: LD A,(L366D) + ADD A,01DH + ADD A,C + LD (L366D),A + LD A,0A0H + LD (L3402),A + PUSH HL + EXX + POP BC + LD D,H + LD E,L + LD HL,L3AEF + PUSH HL + LD HL,(L38A3) + PUSH HL + JP L34B7 + +L3AEF: LD A,(L366D) + LD C,A + LD L,A + LD H,000H + LD B,H + ADD HL,HL + ADD HL,HL + ADD HL,BC + LD BC,L37AE + ADD HL,BC + LD DE,(038A3H) + XOR A + LD (L3400),A + LD A,020H + ADD A,(HL) + LD B,A + LD A,(DE) + AND 07FH + ADD A,B + JP C,OVFLERR + SUB 021H + JR NC,L3B16 ; (+001H) + XOR A +L3B16: PUSH DE + JP L3514 + +L3B1A: LD A,(L38A5) + DEC A + JP M,L3B55 + LD HL,L38B0 + LD BC,00D00H + LD (HL),B + SUB 008H + JR NC,L3B3B ; (+00fH) + JR L3B36 ; (+008H) + +L3B2E: EX AF,AF' + LD A,(HL) + OR A + JR Z,L3B34 ; (+001H) + INC C +L3B34: LD (HL),B + EX AF,AF' +L3B36: DEC HL + INC A + JR NZ,L3B2E ; (-00cH) + DEC A +L3B3B: EX AF,AF' + LD A,C + OR A + JR Z,L3B4C ; (+00cH) +L3B40: LD A,(HL) + INC A + LD (HL),A + CP 00AH + JR NZ,L3B4C ; (+005H) + LD (HL),000H + DEC HL + JR L3B40 ; (-00cH) + +L3B4C: EX AF,AF' + JP L3AB3 + +L3B50: LD DE,L2A8D + JR L3B58 ; (+003H) + +L3B55: LD DE,L2A92 +L3B58: LD HL,(L38A3) + EX DE,HL +L3B5C: LD BC,00005H + LDIR + RET + +L3B62: PUSH DE + CALL L3A63 + JR Z,L3B6D ; (+005H) +L3B68: LD HL,L2A92 + JR L3B70 ; (+003H) + +L3B6D: LD HL,L2A8D +L3B70: POP DE + JR L3B5C ; (-017H) + +L3B73: PUSH DE + EX DE,HL + JR L3B78 ; (+001H) + +L3B77: PUSH DE +L3B78: CALL L3A63 + JR C,L3B68 ; (-015H) + JR L3B6D ; (-012H) + +L3B7F: PUSH DE + CALL L3A63 + JR Z,L3B68 ; (-01dH) + JR L3B6D ; (-01aH) + +L3B87: PUSH DE + EX DE,HL + JR L3B8C ; (+001H) + +L3B8B: PUSH DE +L3B8C: CALL L3A63 + JR C,L3B6D ; (-024H) + JR L3B68 ; (-02bH) + +L3B93: CP (HL) + DEC (HL) + JR Z,L3B73 ; (-024H) + RST 008H +L3B98: PUSH DE + EX DE,HL + LD A,(HL) + LD BC,00004H + ADD HL,BC + XOR (HL) + JP M,L3BC4 + LD DE,L3B93 + PUSH DE + LD HL,L3BE9 + CALL L3500 + POP HL + PUSH HL + LD A,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + CP 0C1H + CALL NC,L3BD2 + POP HL + PUSH HL + CALL L3492 + JR L3BCE ; (+00aH) + +L3BC4: LD DE,L3B93 + LD HL,L3BE4 + PUSH DE + CALL L3B5C +L3BCE: POP HL + POP DE + JR L3B5C ; (-076H) + +L3BD2: SUB 0C0H +L3BD4: SLA E + RL D + RL C + RL B + DEC A + JR NZ,L3BD4 ; (-00bH) + LD A,0C0H + JP L3CC5 + +L3BE4: CP (HL) + DEC (HL) + JR Z,L3BC4 ; (-024H) + RST 008H +L3BE9: DB 0C5H + DB 000H + DB 000H + DB 000H + DB 0B8H +L3BEE: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3BF3: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3BF8: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3BFD: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L3C02: LD DE,L3BEE + JP L3405 + +L3C08: CALL L3C02 +L3C0B: LD HL,L3BF3 +L3C0E: LD DE,L3BEE + JP L3500 + +L3C14: NOP +L3C15: NOP +L3C16: PUSH DE + LD HL,L3CE7 + CALL L35D0 + POP HL + PUSH HL + LD A,(HL) + LD (L3C15),A + OR 080H + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + CP 0C3H + JR C,L3C43 ; (+012H) + SUB 0C2H +L3C33: SLA E + RL D + RL C + RL B + DEC A + JR NZ,L3C33 ; (-00bH) + LD A,0C2H + CALL L3CC5 +L3C43: LD HL,08000H + CP 0C2H + JR C,L3C50 ; (+006H) + LD H,L + RES 7,B + CALL L3CC5 +L3C50: CP 0C1H + JR C,L3C5A ; (+006H) + INC L + RES 7,B + CALL L3CC5 +L3C5A: EX AF,AF' + LD A,(L3C15) + XOR H + CPL + AND 080H + LD H,A + LD (L3C14),HL + EX AF,AF' + POP HL + PUSH HL + CALL L3492 + LD A,(L3C14) + OR A + JR Z,L3C7A ; (+008H) + POP DE + PUSH DE + LD HL,L2A88 + CALL L3403 +L3C7A: POP HL + PUSH HL + LD A,(HL) + AND 07FH + LD B,A + LD A,(L3C15) + OR B + LD (HL),A + LD DE,L3BEE + CALL L3B5C + LD DE,L3BF3 + LD HL,L3BEE + CALL L3B5C + CALL L3C0B + LD DE,L3BF3 + LD HL,L3BEE + CALL L3B5C + LD HL,L3CEC + CALL L3C0E + LD HL,L3CF1 + CALL L3C08 + LD HL,L3CF6 + CALL L3C08 + LD HL,L3CFB + CALL L3C08 + LD HL,L3D00 + CALL L3C02 + POP DE + LD HL,L3BEE + JP L3500 + +L3CC5: BIT 7,B + RET NZ + EX AF,AF' + LD A,B + OR C + OR E + OR D + JR Z,L3CDE ; (+00fH) + EX AF,AF' +L3CD0: BIT 7,B + RET NZ + SLA E + RL D + RL C + RL B + DEC A + JR NZ,L3CD0 ; (-00eH) +L3CDE: LD BC,MONIT + LD DE,MONIT + LD A,080H + RET + +L3CE7: DB 0C1H + DB 0A1H + DB 0DAH + DB 00FH + DB 0C9H +L3CEC: DB 0B4H + DB 0DCH + DB 00FH + DB 00AH + DB 09FH +L3CF1: DB 039H + DB 061H + DB 08FH + DB 029H + DB 099H +L3CF6: DB 0BDH + DB 0C8H + DB 077H + DB 034H + DB 0A3H +L3CFB: DB 040H + DB 085H + DB 0E1H + DB 05DH + DB 0A5H +L3D00: DB 0C1H + DB 094H + DB 0DAH + DB 00FH + DB 0C9H +L3D05: PUSH DE + LD HL,L3CE7 + CALL L3403 + POP HL + CALL L4193 + EX DE,HL + JP L3C16 + +L3D14: PUSH DE + EX DE,HL + LD DE,L3BFD + CALL L3B5C + POP DE + PUSH DE + CALL L3D05 + POP HL + PUSH HL + LD DE,L3BF8 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BFD + CALL L3B5C + POP DE + PUSH DE + CALL L3C16 + POP DE + LD HL,L3BF8 + JP L35D0 + +L3D3D: NOP +L3D3E: NOP +L3D3F: LD A,003H + LD (L3D3D),A + PUSH DE + EX DE,HL + LD A,(HL) + ADD A,080H + JP NC,ILDATERR + JR NZ,L3D5B ; (+00dH) + EX AF,AF' + LD BC,00004H + ADD HL,BC + LD A,(HL) + SBC HL,BC + OR A + JP P,L3DBA + EX AF,AF' +L3D5B: BIT 0,A + JR NZ,L3DD5 ; (+076H) + LD (L3D3E),A + LD (HL),0C0H + LD DE,L3BEE + CALL L3B5C + LD HL,L3DED + CALL L3C0E + LD HL,L3DF2 +L3D73: CALL L3C02 +L3D76: LD DE,L3BF3 + POP HL + PUSH HL + CALL L3B5C + LD DE,L3BF3 + LD HL,L3BEE + CALL L35D0 + LD HL,L3BF3 + CALL L3C02 + LD HL,L3BEE + LD A,(HL) + AND 07FH + DEC A + JR C,L3DBA ; (+024H) + OR 080H + LD (HL),A + LD A,(L3D3D) + DEC A + LD (L3D3D),A + JR NZ,L3D76 ; (-02cH) + LD A,(L3D3E) + CP 040H + CALL NZ,L3DC1 + LD B,(HL) + RES 7,B + ADD A,B + SUB 040H + JR C,L3DBA ; (+008H) + JP M,OVFLERR + OR 080H + LD (HL),A + JR L3DBD ; (+003H) + +L3DBA: LD HL,L2A8D +L3DBD: POP DE + JP L3B5C + +L3DC1: JR C,L3DCA ; (+007H) + SUB 040H + SRL A + ADD A,040H + RET + +L3DCA: LD B,A + LD A,040H + SUB B + SRL A + LD B,A + LD A,040H + SUB B + RET + +L3DD5: INC A + LD (L3D3E),A + LD (HL),0BFH + LD DE,L3BEE + CALL L3B5C + LD HL,L3DF7 + CALL L3C0E + LD HL,L3DFC + JP L3D73 + +L3DED: DB 0C0H + DB 000H + DB 000H + DB 000H + DB 090H +L3DF2: DB 0BFH + DB 000H + DB 000H + DB 000H + DB 0E0H +L3DF7: DB 0C0H + DB 000H + DB 000H + DB 000H + DB 0E0H +L3DFC: DB 0BFH + DB 000H + DB 000H + DB 000H + DB 090H +L3E01: NOP +L3E02: NOP +L3E03: PUSH DE + LD A,(DE) + AND 080H + LD (L3E01),A + LD A,(DE) + OR 080H + LD (DE),A + LD HL,L3F2D + CALL L35D0 + POP HL + PUSH HL + LD A,040H + LD (L3E02),A + LD A,(HL) + SUB 0C1H + CALL NC,L3EBB + POP DE + PUSH DE + LD HL,L3F28 + CALL L3403 + POP HL + PUSH HL + LD DE,L3BEE + CALL L3B5C + LD HL,L3F05 + CALL L3C0E + LD HL,L3F0A + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F0F + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F14 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F19 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F1E + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD HL,L3F23 + CALL L3C02 + LD HL,L3BEE + LD B,(HL) + RES 7,B + LD A,(L3E02) + ADD A,B + JP C,L3EFC + SUB 03FH + JR C,L3EEC ; (+067H) + JP M,L3EFC + OR 080H + LD (HL),A + LD A,(L3E01) + OR A + JR Z,L3E98 ; (+007H) + LD HL,L3BEE + POP DE + JP L3B5C + +L3E98: POP DE + PUSH DE + LD HL,L2A88 + CALL L3B5C + POP DE + PUSH DE + LD A,(DE) + CP 0FCH + PUSH AF + JR C,L3EAA ; (+002H) + DEC A + LD (DE),A +L3EAA: LD HL,L3BEE + CALL L35D0 + POP AF + POP HL + RET C + LD A,(HL) + DEC A + LD (HL),A + RET M + PUSH HL + JP L348E + +L3EBB: INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + PUSH HL + INC A + LD H,A + XOR A +L3EC7: SLA E + RL D + RL C + RL B + RLA + JR C,L3EFA ; (+028H) + DEC H + JR NZ,L3EC7 ; (-00eH) + ADD A,040H + JR C,L3EFA ; (+021H) + LD (L3E02),A + LD A,0C0H + CALL L3CC5 + POP HL + LD (HL),B + DEC HL + LD (HL),C + DEC HL + LD (HL),D + DEC HL + LD (HL),E + DEC HL + LD (HL),A + RET + +L3EEC: LD A,(L3E01) + OR A + JP Z,OVFLERR +L3EF3: LD HL,L2A8D + POP DE + JP L3B5C + +L3EFA: POP AF + POP AF +L3EFC: LD A,(L3E01) + OR A + JP NZ,OVFLERR + JR L3EF3 ; (-012H) + +L3F05: DB 0B3H + DB 07CH + DB 08CH + DB 090H + DB 0E3H +L3F0A: DB 0B6H + DB 01FH + DB 0DFH + DB 062H + DB 0F8H +L3F0F: DB 0B9H + DB 0E2H + DB 06DH + DB 0DDH + DB 0DEH +L3F14: DB 0BCH + DB 08BH + DB 033H + DB 0C1H + DB 0A0H +L3F19: DB 0BEH + DB 089H + DB 04AH + DB 0F1H + DB 0ADH +L3F1E: DB 0BFH + DB 034H + DB 033H + DB 0F2H + DB 0FAH +L3F23: DB 0C0H + DB 036H + DB 0F3H + DB 004H + DB 0B5H +L3F28: DB 0C0H + DB 000H + DB 000H + DB 000H + DB 080H +L3F2D: DB 0C0H + DB 0F8H + DB 017H + DB 072H + DB 0B1H +L3F32: DB 000H +L3F33: DB 000H +L3F34: DB 000H +L3F35: PUSH DE + LD A,080H + LD (L3F33),A + LD (L3F32),A + EX DE,HL + LD A,(HL) + OR A + JP P,OVFLERR + CP 08AH + JR NC,L3F53 ; (+00bH) + XOR A + LD (L3F32),A + EX DE,HL + CALL L3D3F + POP HL + PUSH HL + LD A,(HL) +L3F53: CP 0C1H + CALL C,L4011 + LD B,000H + CP 0C1H + JR Z,L3F64 ; (+006H) + SUB 0C1H + LD B,A + LD A,0C1H + LD (HL),A +L3F64: LD A,B + LD (L3F34),A + LD DE,L3BEE + CALL L3B5C + POP DE + PUSH DE + LD HL,L4055 + CALL L3403 + LD HL,L4055 + CALL L3C02 + POP DE + PUSH DE + LD HL,L3BEE + CALL L35D0 + POP DE + PUSH DE + LD HL,L405A + CALL L3500 + POP HL + PUSH HL + LD DE,L3BF3 + CALL L3B5C + POP HL + PUSH HL + LD DE,L3BF3 + CALL L3500 + LD DE,L3BEE + LD HL,L3BF3 + CALL L3B5C + LD HL,L4041 + CALL L3C0E + LD HL,L4046 + CALL L3C08 + LD HL,L404B + CALL L3C08 + LD HL,L4050 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + LD DE,L3BF3 + LD HL,L3BEE + CALL L3B5C + LD A,(L3F34) + ADD A,A + INC A + LD B,A + LD A,008H +L3FD3: BIT 7,B + JR NZ,L3FDC ; (+005H) + SLA B + DEC A + JR NZ,L3FD3 ; (-009H) +L3FDC: ADD A,0C0H + LD HL,L3BEE + LD (HL),A + INC HL + XOR A + LD (HL),A + INC HL + LD (HL),A + INC HL + LD (HL),A + INC HL + LD (HL),B + LD HL,L405F + CALL L3C0E + LD HL,L3BF3 + CALL L3C02 + LD HL,L3BEE + LD A,(L3F33) + CALL L4191 + POP DE + PUSH DE + CALL L3B5C + POP DE + LD A,(L3F32) + OR A + RET NZ + LD HL,L3BEE + JP L3405 + +L4011: PUSH HL + LD DE,L3BEE + CALL L3B5C + POP DE + PUSH DE + LD HL,L2A88 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BEE + CALL L35D0 + POP HL + LD A,(HL) + CP 0C1H + JR NC,L4039 ; (+00bH) + PUSH HL + EX DE,HL + LD HL,L2A88 + CALL L3B5C + POP HL + LD A,0C1H +L4039: EX AF,AF' + LD A,000H + LD (L3F33),A + EX AF,AF' + RET + +L4041: DB 0ADH + DB 0A4H + DB 062H + DB 0CCH + DB 0AFH +L4046: DB 0B2H + DB 09FH + DB 0E9H + DB 047H + DB 0F9H +L404B: DB 0B8H + DB 0A4H + DB 082H + DB 0AAH + DB 0DCH +L4050: DB 0BFH + DB 0BFH + DB 0CCH + DB 0B0H + DB 0AFH +L4055: DB 0C1H + DB 033H + DB 0F3H + DB 004H + DB 0B5H +L405A: DB 0C3H + DB 099H + DB 079H + DB 082H + DB 0BAH +L405F: DB 0BFH + DB 0F8H + DB 017H + DB 072H + DB 0B1H +L4064: PUSH DE + CALL L3F35 + POP DE + LD HL,L406F + JP L3500 + +L406F: DB 0BFH + DB 0A9H + DB 0D8H + DB 05BH + DB 0DEH +L4074: DB 000H +L4075: DB 000H +L4076: PUSH DE + EX DE,HL + LD A,(HL) + AND 080H + LD (L4074),A + SET 7,(HL) + LD DE,L2A88 + CALL L3A63 + LD A,080H + JR NC,L40A3 ; (+019H) + LD DE,L3BEE + POP HL + PUSH HL + CALL L3B5C + POP DE + PUSH DE + LD HL,L2A88 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BEE + CALL L35D0 + XOR A +L40A3: LD (L4075),A + POP HL + PUSH HL + LD DE,L3BEE + CALL L3B5C + POP HL + PUSH HL + CALL L3C0E + LD HL,L3BEE + LD DE,L3BF3 + CALL L3B5C + LD HL,L4121 + CALL L3C0E + LD HL,L4126 + CALL L3C08 + LD HL,L412B + CALL L3C08 + LD HL,L4130 + CALL L3C08 + LD HL,L4135 + CALL L3C08 + LD HL,L413A + CALL L3C08 + LD HL,L413F + CALL L3C08 + LD HL,L4144 + CALL L3C08 + LD HL,L4149 + CALL L3C08 + LD HL,L2A88 + CALL L3C02 + POP HL + PUSH HL + CALL L3C0E + POP DE + PUSH DE + LD HL,L3BEE + CALL L3B5C + LD A,(L4075) + OR A + JR NZ,L411B ; (+010H) + POP DE + PUSH DE + LD HL,L3CE7 + CALL L3B5C + POP DE + PUSH DE + LD HL,L3BEE + DB 0CDH + DB 003H +L411A: DB 034H +L411B: POP HL + LD A,(L4074) + JR L4191 ; (+070H) + +L4121: DB 037H + DB 0CAH + DB 09AH + DB 056H + DB 0DFH +L4126: DB 0BAH + DB 012H + DB 077H + DB 0CCH + DB 0ABH +L412B: DB 03BH + DB 023H + DB 0B2H + DB 05EH + DB 0F8H +L4130: DB 0BCH + DB 020H + DB 063H + DB 090H + DB 0E9H +L4135: DB 03DH + DB 0EEH + DB 03DH + DB 0E0H + DB 0AAH +L413A: DB 0BDH + DB 04FH + DB 01AH + DB 0D5H + DB 0DFH +L413F: DB 03EH + DB 0E3H + DB 0AFH + DB 003H + DB 092H +L4144: DB 0BEH + DB 02AH + DB 07BH + DB 0C7H + DB 0CCH +L4149: DB 03FH + DB 017H + DB 096H + DB 0AAH + DB 0AAH +L414E: DB 000H + DB 000H + DB 000H + DB 000H +L4152: DB 000H +L4153: DB 000H +L4154: DB 000H + DB 000H + DB 000H + DB 000H + DB 000H +L4159: PUSH DE + LD DE,L4154 + CALL L3B5C + POP HL + PUSH HL + LD BC,00004H + ADD HL,BC + LD A,(HL) + OR A + POP HL + PUSH HL + JP P,L348E + LD A,(HL) + AND 080H + LD (L4153),A + SET 7,(HL) + EX DE,HL + CALL L3F35 + LD A,(L4153) + OR A + CALL Z,L41A4 + POP DE + PUSH DE + LD HL,L4154 + CALL L3500 + POP DE + PUSH DE + CALL L3E03 + POP HL + LD A,(L4153) +L4191: OR A + RET NZ +L4193: LD BC,00004H + ADD HL,BC + BIT 7,(HL) + PUSH AF + XOR A + SBC HL,BC + POP AF + RET Z + LD A,(HL) + ADD A,080H + LD (HL),A + RET + +L41A4: LD HL,L4154 + LD DE,L414E + CALL L3B5C + LD DE,L4154 + CALL L3A86 + LD DE,L414E + LD HL,L4154 + CALL L3403 + LD HL,L4152 + LD A,(HL) + OR A + JP M,ILDATERR + LD HL,L4154 + LD A,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + AND 07FH + SUB 041H + JR C,L41E6 ; (+010H) + JR Z,L41E3 ; (+00bH) +L41D8: SLA E + RL D + RL C + RL B + DEC A + JR NZ,L41D8 ; (-00bH) +L41E3: RL B + RET C +L41E6: LD A,080H + LD (L4153),A + RET + +TAPECOPYPRG:IF BUILD_ORIG = 1 + ; Self duplicate code. This method is used to duplicate BASIC SA-5510 onto a new cassette. + NOP + LD DE,ATRB + LD HL,L4223 + LD BC,PRNT + LDIR + LD HL,TAPECOPY + LD (DTADR),HL + LD DE,TAPECOPYPRG + EX DE,HL + XOR A + SBC HL,DE + INC HL + LD (SIZE),HL + LD HL,COLDSTRT + LD (EXADR),HL + CALL ?WRI + RET C + LD HL,TAPECOPYPRG + LD A,0C9H + LD (HL),A + CALL ?WRD + PUSH AF + LD A,000H + LD (HL),A + POP AF + RET C + RET + +L4223: DB 001H,"BASIC SA-5510",00DH + ENDIF + + ; Define extensions under RFS. Each is in a seperate block due to Glass Z80 way of not evaluating labels inside IF statements when false. + ; +RFSRDI: IF BUILD_RFS = 1 + ; RFS extensions, call the RFS API to execute extended code. + LD DE,CMTFNAME + JP CMT_RDINF + ENDIF +CMDDIR: IF BUILD_RFS = 1 + CALL L193B ; Skip space to CR, ':' or char. + LD (05051H),HL + JR Z,CMDDIRNOSTR ; CR or ':' return. +CMDDIRNOSTR: EX DE,HL ; CMT_DIR expects DE to point to argument string. + CALL CMT_DIR + JP WARMSTRT + ENDIF + +BASICEND: diff --git a/software/asm/cbios.asm b/software/asm/cbios.asm index bbb96f7..cbbed3b 100644 --- a/software/asm/cbios.asm +++ b/software/asm/cbios.asm @@ -10,12 +10,13 @@ ;- ;- Credits: Some of the comments and parts of the standard CPM deblocking/blocking algorithm ;- come from the Z80-MBC2 project, (C) SuperFabius. -;- Copyright: (c) 2018-20 Philip Smart +;- Copyright: (c) 2018-21 Philip Smart ;- ;- History: Jan 2020 - Seperated Bank from RFS for dedicated use with CPM CBIOS. -; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the -; additional and different hardware. The SPI is now onboard the PCB and -; not using the printer interface card. +;- May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the +;- additional and different hardware. The SPI is now onboard the PCB and +;- not using the printer interface card. +;- Mar 2021 - Updates for the RFS v2.1 board. ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify ;- it under the terms of the GNU General Public License as published @@ -33,6 +34,19 @@ ORG CBIOSSTART + ;---------------------------------------------------------------------------------------------------------------------------------------------- + ; CBIOS organisation. + ; + ; Source File Size ROM Type Address Location Description + ; cbios.asm 4K MROM (relocated CBIOS providing the CP/M API, initialisation routines, ROM Disk + ; Monitor ROM from controller routines, Interrupt routines. + ; 0x0000 - 0x0FFF) 0xC000 - 0xCFFF MRON Bank 2 + ; cbios_bank1.asm 2K Paged ROM 0xE800 - 0xEFFF, UROM Bank 8 Basic Sound and Melody, RTC, Keyboard and helper functionality. + ; cbios_bank2.asm 2k Paged ROM 0xE800 - 0xEFFF, UROM Bank 9 Screen I/O and ANSI Terminal Parser. + ; cbios_bank2.asm 2k Paged ROM 0xE800 - 0xEFFF, UROM Bank 10 SD Card Controller functionality. + ; cbios_bank2.asm 2k Paged ROM 0xE800 - 0xEFFF, UROM Bank 11 Floppy Disk Controller functionality. + ;---------------------------------------------------------------------------------------------------------------------------------------------- + ;------------------------------------------------------------------------------- ; ; BIOS jump table @@ -312,8 +326,10 @@ INIT3: LD A,(BNKCTRLRST) LD (FLASHCTL),A ; Change to 80 character mode. + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 128 ; 80 char mode. - LD (DSPCTL), A + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A CALL ?MLDSP CALL ?NL LD DE,CBIOSSIGNON ; Start of sign on message, as devices are detected they are added to the sign on. @@ -2640,7 +2656,7 @@ KTBLC: ; CTRL ON -CBIOSSIGNON:DB "** CBIOS v1.22, (C) P.D. Smart, 2020. Drives:", NUL +CBIOSSIGNON:DB "** CBIOS v1.23, (C) P.D. Smart, 19-21. Drives:", NUL CBIOSIGNEND:DB " **", CR, NUL CPMSIGNON: DB "CP/M v2.23 (48K) COPYRIGHT(C) 1979, DIGITAL RESEARCH", CR, LF, NUL NOBDOS: DB "Failed to load BDOS, aborting!", CR, LF, NUL diff --git a/software/asm/cbios_bank1.asm b/software/asm/cbios_bank1.asm index ac53b3d..91a9322 100644 --- a/software/asm/cbios_bank1.asm +++ b/software/asm/cbios_bank1.asm @@ -9,12 +9,13 @@ ;- CPM TPA programs. ;- ;- Credits: -;- Copyright: (c) 2018-20 Philip Smart +;- Copyright: (c) 2018-21 Philip Smart ;- ;- History: Jan 2020 - Seperated Bank from RFS for dedicated use with CPM CBIOS. -; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the -; additional and different hardware. The SPI is now onboard the PCB and -; not using the printer interface card. +;- May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the +;- additional and different hardware. The SPI is now onboard the PCB and +;- not using the printer interface card. +;- Mar 2021 - Updates for the RFS v2.1 board. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -50,7 +51,7 @@ CBIOS1_0: LD A,(BNKCTRLRST) NOP NOP NOP - XOR A ; We shouldnt arrive here after a reset, if we do, select UROM bank 0 + XOR A ; We shouldnt arrive here after a reset, if we do, select MROM bank 0 LD (BNKSELMROM),A NOP NOP diff --git a/software/asm/cbios_bank2.asm b/software/asm/cbios_bank2.asm index 152d31c..7056380 100644 --- a/software/asm/cbios_bank2.asm +++ b/software/asm/cbios_bank2.asm @@ -12,12 +12,13 @@ ; Ansi Parser. ; ; (C) Oct 2000 - only the ansiterm.22b module was used with a lot stripped out. -;- Copyright: (c) 2018-20 Philip Smart +;- Copyright: (c) 2018-21 Philip Smart ;- ;- History: Jan 2020 - Seperated Bank from RFS for dedicated use with CPM CBIOS. -; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the -; additional and different hardware. The SPI is now onboard the PCB and -; not using the printer interface card. +;- May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the +;- additional and different hardware. The SPI is now onboard the PCB and +;- not using the printer interface card. +;- Mar 2021 - Updates for the RFS v2.1 board. ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify ;- it under the terms of the GNU General Public License as published @@ -52,7 +53,7 @@ CBIOS2_0: LD A,(BNKCTRLRST) NOP NOP NOP - XOR A ; We shouldnt arrive here after a reset, if we do, select UROM bank 0 + XOR A ; We shouldnt arrive here after a reset, if we do, select MROM bank 0 LD (BNKSELMROM),A NOP NOP diff --git a/software/asm/cbios_bank3.asm b/software/asm/cbios_bank3.asm index 3b505ea..7769758 100644 --- a/software/asm/cbios_bank3.asm +++ b/software/asm/cbios_bank3.asm @@ -9,12 +9,13 @@ ;- CPM TPA programs. ;- ;- Credits: -;- Copyright: (c) 2018-20 Philip Smart +;- Copyright: (c) 2018-21 Philip Smart ;- ;- History: Jan 2020 - Seperated Bank from RFS for dedicated use with CPM CBIOS. -; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the -; additional and different hardware. The SPI is now onboard the PCB and -; not using the printer interface card. +;- May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the +;- additional and different hardware. The SPI is now onboard the PCB and +;- not using the printer interface card. +;- Mar 2021 - Updates for the RFS v2.1 board. ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify ;- it under the terms of the GNU General Public License as published @@ -49,7 +50,7 @@ CBIOS3_0: LD A,(BNKCTRLRST) NOP NOP NOP - XOR A ; We shouldnt arrive here after a reset, if we do, select UROM bank 0 + XOR A ; We shouldnt arrive here after a reset, if we do, select MROM bank 0 LD (BNKSELMROM),A NOP NOP @@ -799,8 +800,17 @@ ADD32: LD BC,(SDSTARTSEC+2) CALL ADD3216 ; Now add the offset to account for the RFS image. - LD BC, RFS_IMGSZ/SD_SECSIZE ; Sector offset for the RFS Image. - CALL ADD3216 + IF RFS_IMGSZ/SD_SECSIZE < 010000H + LD BC, RFS_IMGSZ/SD_SECSIZE ; Sector offset for the RFS Image. + CALL ADD3216 + ELSE + LD BC,0 ; Padding is to an even address so lower word will always be zero. + ADD HL,BC + EX DE,HL + LD BC,(RFS_END_ADDR/SD_SECSIZE) / 010000H ; Upper word addition. + ADC HL,BC + EX DE,HL + ENDIF ; Store the final sum as the start sector. PUSH HL diff --git a/software/asm/cbios_bank4.asm b/software/asm/cbios_bank4.asm index dd223b2..950e1dd 100644 --- a/software/asm/cbios_bank4.asm +++ b/software/asm/cbios_bank4.asm @@ -9,12 +9,13 @@ ;- CPM TPA programs. ;- ;- Credits: -;- Copyright: (c) 2018-20 Philip Smart +;- Copyright: (c) 2018-21 Philip Smart ;- ;- History: Jan 2020 - Seperated Bank from RFS for dedicated use with CPM CBIOS. -; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the -; additional and different hardware. The SPI is now onboard the PCB and -; not using the printer interface card. +;- May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the +;- additional and different hardware. The SPI is now onboard the PCB and +;- not using the printer interface card. +;- Mar 2021 - Updates for the RFS v2.1 board. ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify ;- it under the terms of the GNU General Public License as published @@ -49,7 +50,7 @@ CBIOS1_0: LD A,(BNKCTRLRST) NOP NOP NOP - XOR A ; We shouldnt arrive here after a reset, if we do, select UROM bank 0 + XOR A ; We shouldnt arrive here after a reset, if we do, select MROM bank 0 LD (BNKSELMROM),A NOP NOP diff --git a/software/asm/cpm22-bios.asm b/software/asm/cpm22-bios.asm index 03a91dc..8130790 100644 --- a/software/asm/cpm22-bios.asm +++ b/software/asm/cpm22-bios.asm @@ -40,7 +40,7 @@ BOOTLDR2: LD A, (BNKCTRLRST) DJNZ BOOTLDR2 LD A, 0x07 LD (BNKCTRL), A ; Setup the User ROM Bank default. - LD A, (MEMSW) + LD A, (MEMSW) ; Swap 0000:0FFF to C000:CFFF so lower location uses DRAM. LD A, 0x02 LD (BNKSELMROM), A ; Setup the Monitor ROM bank default. JP CBIOSSTART ; Cold start the CBIOS. diff --git a/software/asm/include/CPM_Definitions.asm b/software/asm/include/CPM_Definitions.asm index 0456214..9cbe115 100644 --- a/software/asm/include/CPM_Definitions.asm +++ b/software/asm/include/CPM_Definitions.asm @@ -7,12 +7,13 @@ ;- Definitions for the Sharp MZ80A CPM v2.23 OS used in the RFS ;- ;- Credits: -;- Copyright: (c) 2019-20 Philip Smart +;- Copyright: (c) 2019-21 Philip Smart ;- ;- History: Jan 2020 - Initial version. ; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the ; additional and different hardware. The SPI is now onboard the PCB and ; not using the printer interface card. +; Mar 2021 - Changes to work with the RFS v2.1 board. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -32,224 +33,224 @@ ;----------------------------------------------- ; Features. ;----------------------------------------------- -HW_SPI_ENA EQU 1 ; Set to 1 if hardware SPI is present on the RFS PCB v2 board. -SW_SPI_ENA EQU 0 ; Set to 1 if software SPI is present on the RFS PCB v2 board. -PP_SPI_ENA EQU 0 ; Set to 1 if using the SPI interface via the Parallel Port, ie. for RFS PCB v1 which doesnt have SPI onboard. +HW_SPI_ENA EQU 1 ; Set to 1 if hardware SPI is present on the RFS PCB v2 board. +SW_SPI_ENA EQU 0 ; Set to 1 if software SPI is present on the RFS PCB v2 board. +PP_SPI_ENA EQU 0 ; Set to 1 if using the SPI interface via the Parallel Port, ie. for RFS PCB v1 which doesnt have SPI onboard. ;----------------------------------------------- ; Entry/compilation start points. ;----------------------------------------------- -CBIOSSTART EQU 0C000h -CBIOSDATA EQU CBIOSSTART - 0400H -UROMADDR EQU 0E800H ; Start of User ROM Address space. -FDCROMADDR EQU 0F000H -CBASE EQU 0A000H -CPMCCP EQU CBASE ; CP/M System entry -CPMBDOS EQU CPMCCP + 0806H ; BDOS entry -CPMBIOS EQU CPMCCP + 01600H ; Original CPM22 BIOS entry -BOOT EQU CBIOSSTART + 0 -WBOOT EQU CBIOSSTART + 3 -WBOOTE EQU CBIOSSTART + 3 -CONST EQU CBIOSSTART + 6 -CONIN EQU CBIOSSTART + 9 -CONOUT EQU CBIOSSTART + 12 -LIST EQU CBIOSSTART + 15 -PUNCH EQU CBIOSSTART + 18 -READER EQU CBIOSSTART + 21 -HOME EQU CBIOSSTART + 24 -SELDSK EQU CBIOSSTART + 27 -SETTRK EQU CBIOSSTART + 30 -SETSEC EQU CBIOSSTART + 33 -SETDMA EQU CBIOSSTART + 36 -READ EQU CBIOSSTART + 39 -WRITE EQU CBIOSSTART + 42 -FRSTAT EQU CBIOSSTART + 45 -SECTRN EQU CBIOSSTART + 48 -UNUSED EQU CBIOSSTART + 51 -BANKTOBANK EQU CBIOSSTART + 54 -CCP EQU CBASE -CCPCLRBUF EQU CBASE + 3 -DPBASE EQU CPMBIOS -CDIRBUF EQU CPMBIOS + (MAXDISKS * 16) -CSVALVMEM EQU CDIRBUF + 128 -CSVALVEND EQU CSVALVMEM + 1253 -IOBYT EQU 00003H ; IOBYTE address -CDISK EQU 00004H ; Address of Current drive name and user number -CPMUSERDMA EQU 00080h ; Default CPM User DMA address. -DPSIZE EQU 16 ; Size of a Disk Parameter Block -DPBLOCK0 EQU SCRN - (8 * DPSIZE) ; Location of the 1st DPB in the CBIOS Rom. -DPBLOCK1 EQU DPBLOCK0 + DPSIZE -DPBLOCK2 EQU DPBLOCK1 + DPSIZE -DPBLOCK3 EQU DPBLOCK2 + DPSIZE -DPBLOCK4 EQU DPBLOCK3 + DPSIZE -DPBLOCK5 EQU DPBLOCK4 + DPSIZE -DPBLOCK6 EQU DPBLOCK5 + DPSIZE -DPBLOCK7 EQU DPBLOCK6 + DPSIZE +CBIOSSTART EQU 0C000h +CBIOSDATA EQU CBIOSSTART - 0400H +UROMADDR EQU 0E800H ; Start of User ROM Address space. +FDCROMADDR EQU 0F000H +CBASE EQU 0A000H +CPMCCP EQU CBASE ; CP/M System entry +CPMBDOS EQU CPMCCP + 0806H ; BDOS entry +CPMBIOS EQU CPMCCP + 01600H ; Original CPM22 BIOS entry +BOOT EQU CBIOSSTART + 0 +WBOOT EQU CBIOSSTART + 3 +WBOOTE EQU CBIOSSTART + 3 +CONST EQU CBIOSSTART + 6 +CONIN EQU CBIOSSTART + 9 +CONOUT EQU CBIOSSTART + 12 +LIST EQU CBIOSSTART + 15 +PUNCH EQU CBIOSSTART + 18 +READER EQU CBIOSSTART + 21 +HOME EQU CBIOSSTART + 24 +SELDSK EQU CBIOSSTART + 27 +SETTRK EQU CBIOSSTART + 30 +SETSEC EQU CBIOSSTART + 33 +SETDMA EQU CBIOSSTART + 36 +READ EQU CBIOSSTART + 39 +WRITE EQU CBIOSSTART + 42 +FRSTAT EQU CBIOSSTART + 45 +SECTRN EQU CBIOSSTART + 48 +UNUSED EQU CBIOSSTART + 51 +BANKTOBANK EQU CBIOSSTART + 54 +CCP EQU CBASE +CCPCLRBUF EQU CBASE + 3 +DPBASE EQU CPMBIOS +CDIRBUF EQU CPMBIOS + (MAXDISKS * 16) +CSVALVMEM EQU CDIRBUF + 128 +CSVALVEND EQU CSVALVMEM + 1253 +IOBYT EQU 00003H ; IOBYTE address +CDISK EQU 00004H ; Address of Current drive name and user number +CPMUSERDMA EQU 00080h ; Default CPM User DMA address. +DPSIZE EQU 16 ; Size of a Disk Parameter Block +DPBLOCK0 EQU SCRN - (8 * DPSIZE) ; Location of the 1st DPB in the CBIOS Rom. +DPBLOCK1 EQU DPBLOCK0 + DPSIZE +DPBLOCK2 EQU DPBLOCK1 + DPSIZE +DPBLOCK3 EQU DPBLOCK2 + DPSIZE +DPBLOCK4 EQU DPBLOCK3 + DPSIZE +DPBLOCK5 EQU DPBLOCK4 + DPSIZE +DPBLOCK6 EQU DPBLOCK5 + DPSIZE +DPBLOCK7 EQU DPBLOCK6 + DPSIZE ;----------------------------------------------- ; Configurable settings. ;----------------------------------------------- -MAXRDRETRY EQU 002h -MAXWRRETRY EQU 002h -BLKSIZ EQU 4096 ; CP/M allocation size -HSTSIZ EQU 512 ; host disk sector size -HSTSPT EQU 32 ; host disk sectors/trk -HSTBLK EQU HSTSIZ/128 ; CP/M sects/host buff -CPMSPT EQU HSTBLK * HSTSPT ; CP/M sectors/track -SECMSK EQU HSTBLK-1 ; sector mask -WRALL EQU 0 ; write to allocated -WRDIR EQU 1 ; write to directory -WRUAL EQU 2 ; write to unallocated -TMRTICKINTV EQU 5 ; Number of 0.010mSec ticks per interrupt, ie. resolution of RTC. -MTROFFMSECS EQU 100 ; Time from last access to motor being switched off in seconds in TMRTICKINTV ticks. -COLW: EQU 80 ; Width of the display screen (ie. columns). -ROW: EQU 25 ; Number of rows on display screen. -SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area. -SCRLW: EQU COLW / 8 ; Number of 8 byte regions in a line for hardware scroll. -MODE80C: EQU 1 -ROMDRVSIZE: EQU 320 ; Size in K of the Rom RFS Drive, currently 240 or 320 are coded. Please set value in make_cpmdisks.sh when changing this parameter. +MAXRDRETRY EQU 002h +MAXWRRETRY EQU 002h +BLKSIZ EQU 4096 ; CP/M allocation size +HSTSIZ EQU 512 ; host disk sector size +HSTSPT EQU 32 ; host disk sectors/trk +HSTBLK EQU HSTSIZ/128 ; CP/M sects/host buff +CPMSPT EQU HSTBLK * HSTSPT ; CP/M sectors/track +SECMSK EQU HSTBLK-1 ; sector mask +WRALL EQU 0 ; write to allocated +WRDIR EQU 1 ; write to directory +WRUAL EQU 2 ; write to unallocated +TMRTICKINTV EQU 5 ; Number of 0.010mSec ticks per interrupt, ie. resolution of RTC. +MTROFFMSECS EQU 100 ; Time from last access to motor being switched off in seconds in TMRTICKINTV ticks. +COLW: EQU 80 ; Width of the display screen (ie. columns). +ROW: EQU 25 ; Number of rows on display screen. +SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area. +SCRLW: EQU COLW / 8 ; Number of 8 byte regions in a line for hardware scroll. +MODE80C: EQU 1 +ROMDRVSIZE: EQU 320 ; Size in K of the Rom RFS Drive, currently 240 or 320 are coded. Please set value in make_cpmdisks.sh when changing this parameter. ; BIOS equates -MAXDISKS EQU 7 ; Max number of Drives supported -KEYBUFSIZE EQU 16 ; Ensure this is a power of 2, max size 256. +MAXDISKS EQU 7 ; Max number of Drives supported +KEYBUFSIZE EQU 16 ; Ensure this is a power of 2, max size 256. ; Debugging -ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable +ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable ;------------------------------------------------------- ; Function entry points in the CBIOS ROMS ;------------------------------------------------------- -UROMJMPTBL EQU UROMADDR + 00020H ; Position at beginning of each bank of an API jump table of public methods in the bank +UROMJMPTBL EQU UROMADDR + 00020H ; Position at beginning of each bank of an API jump table of public methods in the bank ; Public functions in CBIOS User ROM Bank 1 - utility functions, ie. Audio. -QREBOOT EQU 0 + UROMJMPTBL -QMELDY EQU 3 + UROMJMPTBL -QTEMP EQU 6 + UROMJMPTBL -QMSTA EQU 9 + UROMJMPTBL -QMSTP EQU 12 + UROMJMPTBL -QBEL EQU 15 + UROMJMPTBL -QMODE EQU 18 + UROMJMPTBL -QTIMESET EQU 21 + UROMJMPTBL -QTIMEREAD EQU 24 + UROMJMPTBL -QCHKKY EQU 27 + UROMJMPTBL -QGETKY EQU 30 + UROMJMPTBL +QREBOOT EQU 0 + UROMJMPTBL +QMELDY EQU 3 + UROMJMPTBL +QTEMP EQU 6 + UROMJMPTBL +QMSTA EQU 9 + UROMJMPTBL +QMSTP EQU 12 + UROMJMPTBL +QBEL EQU 15 + UROMJMPTBL +QMODE EQU 18 + UROMJMPTBL +QTIMESET EQU 21 + UROMJMPTBL +QTIMEREAD EQU 24 + UROMJMPTBL +QCHKKY EQU 27 + UROMJMPTBL +QGETKY EQU 30 + UROMJMPTBL ; Public functions in CBIOS User ROM Bank 2 - Screen / ANSI terminal functions. -QPRNT EQU 0 + UROMJMPTBL -QPRTHX EQU 3 + UROMJMPTBL -QPRTHL EQU 6 + UROMJMPTBL -QANSITERM EQU 9 + UROMJMPTBL +QPRNT EQU 0 + UROMJMPTBL +QPRTHX EQU 3 + UROMJMPTBL +QPRTHL EQU 6 + UROMJMPTBL +QANSITERM EQU 9 + UROMJMPTBL ; Public functions in CBIOS User ROM Bank 3 - SD Card functions. -SD_INIT EQU 0 + UROMJMPTBL -SD_READ EQU 3 + UROMJMPTBL -SD_WRITE EQU 6 + UROMJMPTBL -SD_GETLBA EQU 9 + UROMJMPTBL -SDC_READ EQU 12 + UROMJMPTBL -SDC_WRITE EQU 15 + UROMJMPTBL +SD_INIT EQU 0 + UROMJMPTBL +SD_READ EQU 3 + UROMJMPTBL +SD_WRITE EQU 6 + UROMJMPTBL +SD_GETLBA EQU 9 + UROMJMPTBL +SDC_READ EQU 12 + UROMJMPTBL +SDC_WRITE EQU 15 + UROMJMPTBL ; Public functions in CBIOS User ROM Bank 4 - Floppy Disk Controller functions. -QDSKINIT EQU 0 + UROMJMPTBL -QSETDRVCFG EQU 3 + UROMJMPTBL -QSETDRVMAP EQU 6 + UROMJMPTBL -QSELDRIVE EQU 9 + UROMJMPTBL -QGETMAPDSK EQU 12 + UROMJMPTBL -QDSKREAD EQU 15 + UROMJMPTBL -QDSKWRITE EQU 18 + UROMJMPTBL +QDSKINIT EQU 0 + UROMJMPTBL +QSETDRVCFG EQU 3 + UROMJMPTBL +QSETDRVMAP EQU 6 + UROMJMPTBL +QSELDRIVE EQU 9 + UROMJMPTBL +QGETMAPDSK EQU 12 + UROMJMPTBL +QDSKREAD EQU 15 + UROMJMPTBL +QDSKWRITE EQU 18 + UROMJMPTBL ;----------------------------------------------- ; Memory mapped ports in hardware. ;----------------------------------------------- -SCRN: EQU 0D000H -ARAM: EQU 0D800H -DSPCTL: EQU 0DFFFH ; Screen 40/80 select register (bit 7) -KEYPA: EQU 0E000h -KEYPB: EQU 0E001h -KEYPC: EQU 0E002h -KEYPF: EQU 0E003h -CSTR: EQU 0E002h -CSTPT: EQU 0E003h -CONT0: EQU 0E004h -CONT1: EQU 0E005h -CONT2: EQU 0E006h -CONTF: EQU 0E007h -SUNDG: EQU 0E008h -TEMP: EQU 0E008h -MEMSW: EQU 0E00CH -MEMSWR: EQU 0E010H -INVDSP: EQU 0E014H -NRMDSP: EQU 0E015H -SCLDSP: EQU 0E200H -SCLBASE: EQU 0E2H -BNKCTRLRST: EQU 0EFF8H ; Bank control reset, returns all registers to power up default. -BNKCTRLDIS: EQU 0EFF9H ; Disable bank control registers by resetting the coded latch. -HWSPIDATA: EQU 0EFFBH ; Hardware SPI Data register (read/write). -HWSPISTART: EQU 0EFFCH ; Start an SPI transfer. -BNKSELMROM: EQU 0EFFDh ; Select RFS Bank1 (MROM) -BNKSELUSER: EQU 0EFFEh ; Select RFS Bank2 (User ROM) -BNKCTRL: EQU 0EFFFH ; Bank Control register (read/write). +SCRN: EQU 0D000H +ARAM: EQU 0D800H +DSPCTL: EQU 0DFFFH ; Screen 40/80 select register (bit 7) +KEYPA: EQU 0E000h +KEYPB: EQU 0E001h +KEYPC: EQU 0E002h +KEYPF: EQU 0E003h +CSTR: EQU 0E002h +CSTPT: EQU 0E003h +CONT0: EQU 0E004h +CONT1: EQU 0E005h +CONT2: EQU 0E006h +CONTF: EQU 0E007h +SUNDG: EQU 0E008h +TEMP: EQU 0E008h +MEMSW: EQU 0E00CH +MEMSWR: EQU 0E010H +INVDSP: EQU 0E014H +NRMDSP: EQU 0E015H +SCLDSP: EQU 0E200H +SCLBASE: EQU 0E2H +BNKCTRLRST: EQU 0EFF8H ; Bank control reset, returns all registers to power up default. +BNKCTRLDIS: EQU 0EFF9H ; Disable bank control registers by resetting the coded latch. +HWSPIDATA: EQU 0EFFBH ; Hardware SPI Data register (read/write). +HWSPISTART: EQU 0EFFCH ; Start an SPI transfer. +BNKSELMROM: EQU 0EFFDh ; Select RFS Bank1 (MROM) +BNKSELUSER: EQU 0EFFEh ; Select RFS Bank2 (User ROM) +BNKCTRL: EQU 0EFFFH ; Bank Control register (read/write). ; ; RFS v2 Control Register constants. ; -BBCLK EQU 1 ; BitBang SPI Clock. -SDCS EQU 2 ; SD Card Chip Select, active low. -BBMOSI EQU 4 ; BitBang MOSI (Master Out Serial In). -CDLTCH1 EQU 8 ; Coded latch up count bit 1 -CDLTCH2 EQU 16 ; Coded latch up count bit 2 -CDLTCH3 EQU 32 ; Coded latch up count bit 3 -BK2A19 EQU 64 ; User ROM Device Select Bit 0 (or Address bit 19). -BK2A20 EQU 128 ; User ROM Device Select Bit 1 (or Address bit 20). +BBCLK EQU 1 ; BitBang SPI Clock. +SDCS EQU 2 ; SD Card Chip Select, active low. +BBMOSI EQU 4 ; BitBang MOSI (Master Out Serial In). +CDLTCH1 EQU 8 ; Coded latch up count bit 1 +CDLTCH2 EQU 16 ; Coded latch up count bit 2 +CDLTCH3 EQU 32 ; Coded latch up count bit 3 +BK2A19 EQU 64 ; User ROM Device Select Bit 0 (or Address bit 19). +BK2A20 EQU 128 ; User ROM Device Select Bit 1 (or Address bit 20). ; BK2A20 : BK2A19 ; 0 0 = Flash RAM 0 (default). ; 0 1 = Flash RAM 1. ; 1 0 = Flasm RAM 2 or Static RAM 0. ; 1 1 = Reserved. -BNKCTRLDEF EQU BBMOSI+SDCS+BBCLK ; Default on startup for the Bank Control register. +BNKCTRLDEF EQU BBMOSI+SDCS+BBCLK ; Default on startup for the Bank Control register. ;----------------------------------------------- ; IO ports in hardware and values. ;----------------------------------------------- -SPI_OUT EQU 0FFH -SPI_IN EQU 0FEH +SPI_OUT EQU 0FFH +SPI_IN EQU 0FEH ; -DOUT_LOW EQU 000H -DOUT_HIGH EQU 004H -DOUT_MASK EQU 004H -DIN_LOW EQU 000H -DIN_HIGH EQU 001H -CLOCK_LOW EQU 000H -CLOCK_HIGH EQU 002H -CLOCK_MASK EQU 0FDH -CS_LOW EQU 000H -CS_HIGH EQU 001H +DOUT_LOW EQU 000H +DOUT_HIGH EQU 004H +DOUT_MASK EQU 004H +DIN_LOW EQU 000H +DIN_HIGH EQU 001H +CLOCK_LOW EQU 000H +CLOCK_HIGH EQU 002H +CLOCK_MASK EQU 0FDH +CS_LOW EQU 000H +CS_HIGH EQU 001H ;----------------------------------------------- ; Rom File System Header (MZF) ;----------------------------------------------- -RFS_ATRB: EQU 00000h ; Code Type, 01 = Machine Code. -RFS_NAME: EQU 00001h ; Title/Name (17 bytes). -RFS_SIZE: EQU 00012h ; Size of program. -RFS_DTADR: EQU 00014h ; Load address of program. -RFS_EXADR: EQU 00016h ; Exec address of program. -RFS_COMNT: EQU 00018h ; COMMENT -MZFHDRSZ EQU 128 ; Full MZF Header size -MZFHDRNCSZ EQU 24 ; Only the primary MZF data, no comment field. -RFSSECTSZ EQU 256 -MROMSIZE EQU 4096 -UROMSIZE EQU 2048 -BANKSPERTRACK EQU (ROMSECTORSIZE * ROMSECTORS) / UROMSIZE ; (8) We currently only use the UROM for disk images. -SECTORSPERBANK EQU UROMSIZE / ROMSECTORSIZE ; (16) -SECTORSPERBLOCK EQU RFSSECTSZ/ROMSECTORSIZE ; (2) -ROMSECTORSIZE EQU 128 -ROMSECTORS EQU 128 -;ROMBK1: EQU 01016H ; CURRENT MROM BANK -;ROMBK2: EQU 01017H ; CURRENT USERROM BANK -;WRKROMBK1: EQU 01018H ; WORKING MROM BANK -;WRKROMBK2: EQU 01019H ; WORKING USERROM BANK +RFS_ATRB: EQU 00000h ; Code Type, 01 = Machine Code. +RFS_NAME: EQU 00001h ; Title/Name (17 bytes). +RFS_SIZE: EQU 00012h ; Size of program. +RFS_DTADR: EQU 00014h ; Load address of program. +RFS_EXADR: EQU 00016h ; Exec address of program. +RFS_COMNT: EQU 00018h ; COMMENT +MZFHDRSZ EQU 128 ; Full MZF Header size +MZFHDRNCSZ EQU 24 ; Only the primary MZF data, no comment field. +RFSSECTSZ EQU 256 +MROMSIZE EQU 4096 +UROMSIZE EQU 2048 +BANKSPERTRACK EQU (ROMSECTORSIZE * ROMSECTORS) / UROMSIZE ; (8) We currently only use the UROM for disk images. +SECTORSPERBANK EQU UROMSIZE / ROMSECTORSIZE ; (16) +SECTORSPERBLOCK EQU RFSSECTSZ/ROMSECTORSIZE ; (2) +ROMSECTORSIZE EQU 128 +ROMSECTORS EQU 128 +;ROMBK1: EQU 01016H ; CURRENT MROM BANK +;ROMBK2: EQU 01017H ; CURRENT USERROM BANK +;WRKROMBK1: EQU 01018H ; WORKING MROM BANK +;WRKROMBK2: EQU 01019H ; WORKING USERROM BANK ;----------------------------------------------- ; ROM Banks, 0-7 are reserved for alternative @@ -260,303 +261,309 @@ ROMSECTORS EQU 128 ; 8-15 are reserved for CPM code in ; the User ROM bank. ;----------------------------------------------- -MROMPAGES EQU 8 -USRROMPAGES EQU 12 ; Monitor ROM : User ROM -ROMBANK0 EQU 0 ; MROM SA1510 40 Char : RFS Bank 0 - Main RFS Entry point and functions. -ROMBANK1 EQU 1 ; MROM SA1510 80 Char : RFS Bank 1 - Floppy disk controller and utilities. -ROMBANK2 EQU 2 ; CPM 2.2 CBIOS : RFS Bank 2 - SD Card controller and utilities. -ROMBANK3 EQU 3 ; RFS Utilities : RFS Bank 3 - Cmdline tools (Memory, Printer, Help) -ROMBANK4 EQU 4 ; Free : RFS Bank 4 - CMT Utilities. -ROMBANK5 EQU 5 ; Free : RFS Bank 5 -ROMBANK6 EQU 6 ; Free : RFS Bank 6 -ROMBANK7 EQU 7 ; Free : RFS Bank 7 - Memory and timer test utilities. -ROMBANK8 EQU 8 ; : CBIOS Bank 1 - Utilities -ROMBANK9 EQU 9 ; : CBIOS Bank 2 - Screen / ANSI Terminal -ROMBANK10 EQU 10 ; : CBIOS Bank 3 - SD Card -ROMBANK11 EQU 11 ; : CBIOS Bank 4 - Floppy disk controller. +MROMPAGES EQU 8 +USRROMPAGES EQU 12 ; Monitor ROM : User ROM +ROMBANK0 EQU 0 ; MROM SA1510 40 Char : RFS Bank 0 - Main RFS Entry point and functions. +ROMBANK1 EQU 1 ; MROM SA1510 80 Char : RFS Bank 1 - Floppy disk controller and utilities. +ROMBANK2 EQU 2 ; CPM 2.2 CBIOS : RFS Bank 2 - SD Card controller and utilities. +ROMBANK3 EQU 3 ; RFS Utilities : RFS Bank 3 - Cmdline tools (Memory, Printer, Help) +ROMBANK4 EQU 4 ; Free : RFS Bank 4 - CMT Utilities. +ROMBANK5 EQU 5 ; Free : RFS Bank 5 +ROMBANK6 EQU 6 ; Free : RFS Bank 6 +ROMBANK7 EQU 7 ; Free : RFS Bank 7 - Memory and timer test utilities. +ROMBANK8 EQU 8 ; : CBIOS Bank 1 - Utilities +ROMBANK9 EQU 9 ; : CBIOS Bank 2 - Screen / ANSI Terminal +ROMBANK10 EQU 10 ; : CBIOS Bank 3 - SD Card +ROMBANK11 EQU 11 ; : CBIOS Bank 4 - Floppy disk controller. -OBJCD EQU 001h +OBJCD EQU 001h ;----------------------------------------------- ; IO Registers ;----------------------------------------------- -FDC EQU 0D8h ; MB8866 IO Region 0D8h - 0DBh -FDC_CR EQU 000h + FDC ; Command Register -FDC_STR EQU 000h + FDC ; Status Register -FDC_TR EQU 001h + FDC ; Track Register -FDC_SCR EQU 002h + FDC ; Sector Register -FDC_DR EQU 003h + FDC ; Data Register -FDC_MOTOR EQU 004h + FDC ; DS[0-3] and Motor control. 4 drives DS= BIT 0 -> Bit 2 = Drive number, 2=1,1=0,0=0 DS0, 2=1,1=0,0=1 DS1 etc +FDC EQU 0D8h ; MB8866 IO Region 0D8h - 0DBh +FDC_CR EQU FDC + 000h ; Command Register +FDC_STR EQU FDC + 000h ; Status Register +FDC_TR EQU FDC + 001h ; Track Register +FDC_SCR EQU FDC + 002h ; Sector Register +FDC_DR EQU FDC + 003h ; Data Register +FDC_MOTOR EQU FDC + 004h ; DS[0-3] and Motor control. 4 drives DS= BIT 0 -> Bit 2 = Drive number, 2=1,1=0,0=0 DS0, 2=1,1=0,0=1 DS1 etc ; bit 7 = 1 MOTOR ON LOW (Active) -FDC_SIDE EQU 005h + FDC ; Side select, Bit 0 when set = SIDE SELECT LOW +FDC_SIDE EQU FDC + 005h ; Side select, Bit 0 when set = SIDE SELECT LOW ;----------------------------------------------- ; Common character definitions. ;----------------------------------------------- -SCROLL EQU 001H ;Set scroll direction UP. -BELL EQU 007H -SPACE EQU 020H -TAB EQU 009H ;TAB ACROSS (8 SPACES FOR SD-BOARD) -CR EQU 00DH -LF EQU 00AH -FF EQU 00CH -DELETE EQU 07FH -BACKS EQU 008H -SOH EQU 1 ; For XModem etc. -EOT EQU 4 -ACK EQU 6 -NAK EQU 015H -NUL EQU 000H -NULL EQU 000H -CTRL_A EQU 001H -CTRL_B EQU 002H -CTRL_C EQU 003H -CTRL_D EQU 004H -CTRL_E EQU 005H -CTRL_F EQU 006H -CTRL_G EQU 007H -CTRL_H EQU 008H -CTRL_I EQU 009H -CTRL_J EQU 00AH -CTRL_K EQU 00BH -CTRL_L EQU 00CH -CTRL_M EQU 00DH -CTRL_N EQU 00EH -CTRL_O EQU 00FH -CTRL_P EQU 010H -CTRL_Q EQU 011H -CTRL_R EQU 012H -CTRL_S EQU 013H -CTRL_T EQU 014H -CTRL_U EQU 015H -CTRL_V EQU 016H -CTRL_W EQU 017H -CTRL_X EQU 018H -CTRL_Y EQU 019H -CTRL_Z EQU 01AH -ESC EQU 01BH -CTRL_SLASH EQU 01CH -CTRL_RB EQU 01DH -CTRL_CAPPA EQU 01EH -CTRL_UNDSCR EQU 01FH -CTRL_AT EQU 000H -NOKEY EQU 0F0H -CURSRIGHT EQU 0F1H -CURSLEFT EQU 0F2H -CURSUP EQU 0F3H -CURSDOWN EQU 0F4H -DBLZERO EQU 0F5H -INSERT EQU 0F6H -CLRKEY EQU 0F7H -HOMEKEY EQU 0F8H -BREAKKEY EQU 0FBH +SCROLL EQU 001H ;Set scroll direction UP. +BELL EQU 007H +SPACE EQU 020H +TAB EQU 009H ;TAB ACROSS (8 SPACES FOR SD-BOARD) +CR EQU 00DH +LF EQU 00AH +FF EQU 00CH +CS EQU 0CH ; Clear screen +DELETE EQU 07FH +BACKS EQU 008H +SOH EQU 1 ; For XModem etc. +EOT EQU 4 +ACK EQU 6 +NAK EQU 015H +NUL EQU 000H +NULL EQU 000H +CTRL_A EQU 001H +CTRL_B EQU 002H +CTRL_C EQU 003H +CTRL_D EQU 004H +CTRL_E EQU 005H +CTRL_F EQU 006H +CTRL_G EQU 007H +CTRL_H EQU 008H +CTRL_I EQU 009H +CTRL_J EQU 00AH +CTRL_K EQU 00BH +CTRL_L EQU 00CH +CTRL_M EQU 00DH +CTRL_N EQU 00EH +CTRL_O EQU 00FH +CTRL_P EQU 010H +CTRL_Q EQU 011H +CTRL_R EQU 012H +CTRL_S EQU 013H +CTRL_T EQU 014H +CTRL_U EQU 015H +CTRL_V EQU 016H +CTRL_W EQU 017H +CTRL_X EQU 018H +CTRL_Y EQU 019H +CTRL_Z EQU 01AH +ESC EQU 01BH +CTRL_SLASH EQU 01CH +CTRL_LB EQU 01BH +CTRL_RB EQU 01DH +CTRL_CAPPA EQU 01EH +CTRL_UNDSCR EQU 01FH +CTRL_AT EQU 000H +NOKEY EQU 0F0H +CURSRIGHT EQU 0F1H +CURSLEFT EQU 0F2H +CURSUP EQU 0F3H +CURSDOWN EQU 0F4H +DBLZERO EQU 0F5H +INSERT EQU 0F6H +CLRKEY EQU 0F7H +HOMEKEY EQU 0F8H +BREAKKEY EQU 0FBH +GRAPHKEY EQU 0FCH +ALPHAKEY EQU 0FDH ; MMC/SD command (SPI mode) -CMD0 EQU 64 + 0 ; GO_IDLE_STATE -CMD1 EQU 64 + 1 ; SEND_OP_COND -ACMD41 EQU 0x40+41 ; SEND_OP_COND (SDC) -CMD8 EQU 64 + 8 ; SEND_IF_COND -CMD9 EQU 64 + 9 ; SEND_CSD -CMD10 EQU 64 + 10 ; SEND_CID -CMD12 EQU 64 + 12 ; STOP_TRANSMISSION -CMD13 EQU 64 + 13 ; SEND_STATUS -ACMD13 EQU 0x40+13 ; SD_STATUS (SDC) -CMD16 EQU 64 + 16 ; SET_BLOCKLEN -CMD17 EQU 64 + 17 ; READ_SINGLE_BLOCK -CMD18 EQU 64 + 18 ; READ_MULTIPLE_BLOCK -CMD23 EQU 64 + 23 ; SET_BLOCK_COUNT -ACMD23 EQU 0x40+23 ; SET_WR_BLK_ERASE_COUNT (SDC) -CMD24 EQU 64 + 24 ; WRITE_BLOCK -CMD25 EQU 64 + 25 ; WRITE_MULTIPLE_BLOCK -CMD32 EQU 64 + 32 ; ERASE_ER_BLK_START -CMD33 EQU 64 + 33 ; ERASE_ER_BLK_END -CMD38 EQU 64 + 38 ; ERASE -CMD55 EQU 64 + 55 ; APP_CMD -CMD58 EQU 64 + 58 ; READ_OCR +CMD0 EQU 64 + 0 ; GO_IDLE_STATE +CMD1 EQU 64 + 1 ; SEND_OP_COND +ACMD41 EQU 0x40+41 ; SEND_OP_COND (SDC) +CMD8 EQU 64 + 8 ; SEND_IF_COND +CMD9 EQU 64 + 9 ; SEND_CSD +CMD10 EQU 64 + 10 ; SEND_CID +CMD12 EQU 64 + 12 ; STOP_TRANSMISSION +CMD13 EQU 64 + 13 ; SEND_STATUS +ACMD13 EQU 0x40+13 ; SD_STATUS (SDC) +CMD16 EQU 64 + 16 ; SET_BLOCKLEN +CMD17 EQU 64 + 17 ; READ_SINGLE_BLOCK +CMD18 EQU 64 + 18 ; READ_MULTIPLE_BLOCK +CMD23 EQU 64 + 23 ; SET_BLOCK_COUNT +ACMD23 EQU 0x40+23 ; SET_WR_BLK_ERASE_COUNT (SDC) +CMD24 EQU 64 + 24 ; WRITE_BLOCK +CMD25 EQU 64 + 25 ; WRITE_MULTIPLE_BLOCK +CMD32 EQU 64 + 32 ; ERASE_ER_BLK_START +CMD33 EQU 64 + 33 ; ERASE_ER_BLK_END +CMD38 EQU 64 + 38 ; ERASE +CMD55 EQU 64 + 55 ; APP_CMD +CMD58 EQU 64 + 58 ; READ_OCR ; Card type flags (CardType) -CT_MMC EQU 001H ; MMC ver 3 -CT_SD1 EQU 002H ; SD ver 1 -CT_SD2 EQU 004H ; SD ver 2 -CT_SDC EQU CT_SD1|CT_SD2 ; SD -CT_BLOCK EQU 008H ; Block addressing +CT_MMC EQU 001H ; MMC ver 3 +CT_SD1 EQU 002H ; SD ver 1 +CT_SD2 EQU 004H ; SD ver 2 +CT_SDC EQU CT_SD1|CT_SD2 ; SD +CT_BLOCK EQU 008H ; Block addressing ; Disk types. -DSKTYP_FDC EQU 0 ; Type of disk is a Floppy disk and handled by the FDC controller. -DSKTYP_ROM EQU 1 ; Type of disk is a ROM and handled by the ROM methods. -DSKTYP_SDC EQU 2 ; Type of disk is an SD Card and handled by the SD Card methods. +DSKTYP_FDC EQU 0 ; Type of disk is a Floppy disk and handled by the FDC controller. +DSKTYP_ROM EQU 1 ; Type of disk is a ROM and handled by the ROM methods. +DSKTYP_SDC EQU 2 ; Type of disk is an SD Card and handled by the SD Card methods. ; ; Rom Filing System constants. ; -RFS_DIRENT EQU 256 ; Directory entries in the RFS directory. -RFS_DIRENTSZ EQU 32 ; Size of a directory entry. -RFS_DIRSIZE EQU RFS_DIRENT * RFS_DIRENTSZ ; Total size of the directory. -RFS_BLOCKSZ EQU 65536 ; Size of a file block per directory entry. -RFS_IMGSZ EQU RFS_DIRSIZE + (RFS_DIRENT * RFS_BLOCKSZ) ; Total size of the RFS image. +RFS_DIRENT EQU 256 ; Directory entries in the RFS directory. +RFS_DIRENTSZ EQU 32 ; Size of a directory entry. +RFS_DIRSIZE EQU RFS_DIRENT * RFS_DIRENTSZ ; Total size of the directory. +RFS_BLOCKSZ EQU 65536 ; Size of a file block per directory entry. +RFS_DRIVES EQU 10 ; Number of RFS Drives (Images). +RFS_IMGSZ EQU RFS_DIRSIZE + (RFS_DIRENT * RFS_BLOCKSZ) ; Total size of the RFS image. +RFS_END_ADDR EQU 010000000H ; End of RFS/Start of CP/M. ; ; CPM constants ; -CPM_SD_SEC EQU 32 -CPM_SD_TRK EQU 1024 -CPM_SD_IMGSZ EQU CPM_SD_TRK * CPM_SD_SEC * SD_SECSIZE +CPM_SD_SEC EQU 32 +CPM_SD_TRK EQU 1024 +CPM_SD_IMGSZ EQU CPM_SD_TRK * CPM_SD_SEC * SD_SECSIZE ; ; SD Card constants. ; -SD_SECSIZE EQU 512 ; Default size of an SD Sector -SD_SECPTRK EQU CPM_SD_SEC ; Sectors of SD_SECSIZE per virtual track. -SD_TRACKS EQU CPM_SD_TRK ; Number of virtual tracks per disk image. +SD_SECSIZE EQU 512 ; Default size of an SD Sector +SD_SECPTRK EQU CPM_SD_SEC ; Sectors of SD_SECSIZE per virtual track. +SD_TRACKS EQU CPM_SD_TRK ; Number of virtual tracks per disk image. ;----------------------------------------------- ; BIOS WORK AREA (MZ80A) ;----------------------------------------------- - ORG CBIOSDATA + ORG CBIOSDATA - ; Keyboard processing, ensure starts where LSB = 0. -VARSTART EQU $ ; Start of variables. -KEYBUF: DS virtual KEYBUFSIZE ; Interrupt driven keyboard buffer. -KEYCOUNT: DS virtual 1 -KEYWRITE: DS virtual 2 ; Pointer into the buffer where the next character should be placed. -KEYREAD: DS virtual 2 ; Pointer into the buffer where the next character can be read. -KEYLAST: DS virtual 1 ; KEY LAST VALUE -KEYRPT: DS virtual 1 ; KEY REPEAT COUNTER -USRBANKSAV: DS virtual 1 ; Save user bank number when calling another user bank. -HLSAVE: DS virtual 2 ; Space to save HL register when manipulating stack. -ROMCTL DS virtual 1 ; Rom Paging control register contents. + ; Keyboard processing, ensure starts where LSB = 0. +VARSTART EQU $ ; Start of variables. +KEYBUF: DS virtual KEYBUFSIZE ; Interrupt driven keyboard buffer. +KEYCOUNT: DS virtual 1 +KEYWRITE: DS virtual 2 ; Pointer into the buffer where the next character should be placed. +KEYREAD: DS virtual 2 ; Pointer into the buffer where the next character can be read. +KEYLAST: DS virtual 1 ; KEY LAST VALUE +KEYRPT: DS virtual 1 ; KEY REPEAT COUNTER +USRBANKSAV: DS virtual 1 ; Save user bank number when calling another user bank. +HLSAVE: DS virtual 2 ; Space to save HL register when manipulating stack. +ROMCTL DS virtual 1 ; Rom Paging control register contents. ; SPV: IBUFE: ; TAPE BUFFER (128 BYTES) -ATRB: DS virtual 1 ; ATTRIBUTE -NAME: DS virtual 17 ; FILE NAME -SIZE: DS virtual 2 ; BYTESIZE -DTADR: DS virtual 2 ; DATA ADDRESS -EXADR: DS virtual 2 ; EXECUTION ADDRESS -COMNT: DS virtual 92 ; Comment / code area of CMT header. -SWPW: DS virtual 10 ; SWEEP WORK -KDATW: DS virtual 2 ; KEY WORK -KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE) -DSPXY: DS virtual 2 ; DISPLAY COORDINATES -;DSPXYLST: DS virtual 2 ; Last known cursor position, to compare with DSPXY to detect changes. -MANG: DS virtual 6 ; COLUMN MANAGEMENT -MANGE: DS virtual 1 ; COLUMN MANAGEMENT END -PBIAS: DS virtual 1 ; PAGE BIAS -ROLTOP: DS virtual 1 ; ROLL TOP BIAS -MGPNT: DS virtual 1 ; COLUMN MANAG. POINTER -PAGETP: DS virtual 2 ; PAGE TOP -ROLEND: DS virtual 1 ; ROLL END - DS virtual 14 ; BIAS -FLASH: DS virtual 1 ; FLASHING DATA -SFTLK: DS virtual 1 ; SHIFT LOCK -REVFLG: DS virtual 1 ; REVERSE FLAG -FLSDT: DS virtual 1 ; CURSOR DATA -STRGF: DS virtual 1 ; STRING FLAG -DPRNT: DS virtual 1 ; TAB COUNTER -FLASHCTL: DS virtual 1 ; CURSOR FLASH CONTROL. BIT 0 = Cursor On/Off, BIT 1 = Cursor displayed. -DSPXYADDR: DS virtual 2 ; Address of last known position. -;AMPM: DS virtual 1 ; AMPM DATA -;TIMFG: DS virtual 1 ; TIME FLAG -SWRK: DS virtual 1 ; KEY SOUND FLAG -TEMPW: DS virtual 1 ; TEMPO WORK -ONTYO: DS virtual 1 ; ONTYO WORK -OCTV: DS virtual 1 ; OCTAVE WORK -RATIO: DS virtual 2 ; ONPU RATIO -;BUFER: DS virtual 81 ; GET LINE BUFFER -;KEYBUF: DS virtual 1 ; KEY BUFFER -DRVAVAIL DS virtual 1 ; Flag to indicate which drive controllers are available. Bit 2 = SD, Bit 1 = ROM, Bit 0 = FDC -TIMESEC DS virtual 6 ; RTC 48bit TIME IN MILLISECONDS -FDCCMD DS virtual 1 ; LAST FDC COMMAND SENT TO CONTROLLER. -MOTON DS virtual 1 ; MOTOR ON = 1, OFF = 0 -INVFDCDATA: DS virtual 1 ; INVERT DATA COMING FROM FDC, 1 = INVERT, 0 = AS IS -TRK0FD1 DS virtual 1 ; FD 1 IS AT TRACK 0 = BIT 0 set -TRK0FD2 DS virtual 1 ; FD 2 IS AT TRACK 0 = BIT 0 set -TRK0FD3 DS virtual 1 ; FD 3 IS AT TRACK 0 = BIT 0 set -TRK0FD4 DS virtual 1 ; FD 4 IS AT TRACK 0 = BIT 0 set -RETRIES DS virtual 2 ; DATA READ RETRIES -TMPADR DS virtual 2 ; TEMPORARY ADDRESS STORAGE -TMPSIZE DS virtual 2 ; TEMPORARY SIZE -TMPCNT DS virtual 2 ; TEMPORARY COUNTER +ATRB: DS virtual 1 ; ATTRIBUTE +NAME: DS virtual 17 ; FILE NAME +SIZE: DS virtual 2 ; BYTESIZE +DTADR: DS virtual 2 ; DATA ADDRESS +EXADR: DS virtual 2 ; EXECUTION ADDRESS +COMNT: DS virtual 92 ; Comment / code area of CMT header. +SWPW: DS virtual 10 ; SWEEP WORK +KDATW: DS virtual 2 ; KEY WORK +KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE) +DSPXY: DS virtual 2 ; DISPLAY COORDINATES +;DSPXYLST: DS virtual 2 ; Last known cursor position, to compare with DSPXY to detect changes. +MANG: DS virtual 6 ; COLUMN MANAGEMENT +MANGE: DS virtual 1 ; COLUMN MANAGEMENT END +PBIAS: DS virtual 1 ; PAGE BIAS +ROLTOP: DS virtual 1 ; ROLL TOP BIAS +MGPNT: DS virtual 1 ; COLUMN MANAG. POINTER +PAGETP: DS virtual 2 ; PAGE TOP +ROLEND: DS virtual 1 ; ROLL END + DS virtual 14 ; BIAS +FLASH: DS virtual 1 ; FLASHING DATA +SFTLK: DS virtual 1 ; SHIFT LOCK +REVFLG: DS virtual 1 ; REVERSE FLAG +FLSDT: DS virtual 1 ; CURSOR DATA +STRGF: DS virtual 1 ; STRING FLAG +DPRNT: DS virtual 1 ; TAB COUNTER +FLASHCTL: DS virtual 1 ; CURSOR FLASH CONTROL. BIT 0 = Cursor On/Off, BIT 1 = Cursor displayed. +DSPXYADDR: DS virtual 2 ; Address of last known position. +;AMPM: DS virtual 1 ; AMPM DATA +;TIMFG: DS virtual 1 ; TIME FLAG +SWRK: DS virtual 1 ; KEY SOUND FLAG +TEMPW: DS virtual 1 ; TEMPO WORK +ONTYO: DS virtual 1 ; ONTYO WORK +OCTV: DS virtual 1 ; OCTAVE WORK +RATIO: DS virtual 2 ; ONPU RATIO +;BUFER: DS virtual 81 ; GET LINE BUFFER +;KEYBUF: DS virtual 1 ; KEY BUFFER +DRVAVAIL DS virtual 1 ; Flag to indicate which drive controllers are available. Bit 2 = SD, Bit 1 = ROM, Bit 0 = FDC +TIMESEC DS virtual 6 ; RTC 48bit TIME IN MILLISECONDS +FDCCMD DS virtual 1 ; LAST FDC COMMAND SENT TO CONTROLLER. +MOTON DS virtual 1 ; MOTOR ON = 1, OFF = 0 +INVFDCDATA: DS virtual 1 ; INVERT DATA COMING FROM FDC, 1 = INVERT, 0 = AS IS +TRK0FD1 DS virtual 1 ; FD 1 IS AT TRACK 0 = BIT 0 set +TRK0FD2 DS virtual 1 ; FD 2 IS AT TRACK 0 = BIT 0 set +TRK0FD3 DS virtual 1 ; FD 3 IS AT TRACK 0 = BIT 0 set +TRK0FD4 DS virtual 1 ; FD 4 IS AT TRACK 0 = BIT 0 set +RETRIES DS virtual 2 ; DATA READ RETRIES +TMPADR DS virtual 2 ; TEMPORARY ADDRESS STORAGE +TMPSIZE DS virtual 2 ; TEMPORARY SIZE +TMPCNT DS virtual 2 ; TEMPORARY COUNTER ; -CPMROMLOC: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Image. -CPMROMDRV0: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Rom Drive Image Disk 0. -CPMROMDRV1: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Rom Drive Image Disk 1. -NDISKS: DS virtual 1 ; Dynamically calculated number of disks on boot. -DISKMAP: DS virtual MAXDISKS ; Disk map of CPM logical to physical controller disk. -FDCDISK: DS virtual 1 ; Physical disk number. -SECPERTRK: DS virtual 1 ; Sectors per track for 1 head. -SECPERHEAD: DS virtual 1 ; Sectors per head. -SECTORCNT: DS virtual 1 ; Sector size as a count of how many sectors make 512 bytes. -DISKTYPE: DS virtual 1 ; Disk type of current selection. -MTROFFTIMER:DS virtual 1 ; Second down counter for FDC motor off. +CPMROMLOC: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Image. +CPMROMDRV0: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Rom Drive Image Disk 0. +CPMROMDRV1: DS virtual 2 ; Upper Byte = ROM Bank, Lower Byte = Page of CPM Rom Drive Image Disk 1. +NDISKS: DS virtual 1 ; Dynamically calculated number of disks on boot. +DISKMAP: DS virtual MAXDISKS ; Disk map of CPM logical to physical controller disk. +FDCDISK: DS virtual 1 ; Physical disk number. +SECPERTRK: DS virtual 1 ; Sectors per track for 1 head. +SECPERHEAD: DS virtual 1 ; Sectors per head. +SECTORCNT: DS virtual 1 ; Sector size as a count of how many sectors make 512 bytes. +DISKTYPE: DS virtual 1 ; Disk type of current selection. +MTROFFTIMER: DS virtual 1 ; Second down counter for FDC motor off. ; -SEKDSK: DS virtual 1 ; Seek disk number -SEKTRK: DS virtual 2 ; Seek disk track -SEKSEC: DS virtual 1 ; Seek sector number -SEKHST: DS virtual 1 ; Seek sector host +SEKDSK: DS virtual 1 ; Seek disk number +SEKTRK: DS virtual 2 ; Seek disk track +SEKSEC: DS virtual 1 ; Seek sector number +SEKHST: DS virtual 1 ; Seek sector host ; -HSTDSK: DS virtual 1 ; Host disk number -HSTTRK: DS virtual 2 ; Host track number -HSTSEC: DS virtual 1 ; Host sector number -HSTWRT: DS virtual 1 ; Host write flag -HSTACT: DS virtual 1 ; +HSTDSK: DS virtual 1 ; Host disk number +HSTTRK: DS virtual 2 ; Host track number +HSTSEC: DS virtual 1 ; Host sector number +HSTWRT: DS virtual 1 ; Host write flag +HSTACT: DS virtual 1 ; ; -UNACNT: DS virtual 1 ; Unalloc rec cnt -UNADSK: DS virtual 1 ; Last unalloc disk -UNATRK: DS virtual 2 ; Last unalloc track -UNASEC: DS virtual 1 ; Last unalloc sector +UNACNT: DS virtual 1 ; Unalloc rec cnt +UNADSK: DS virtual 1 ; Last unalloc disk +UNATRK: DS virtual 2 ; Last unalloc track +UNASEC: DS virtual 1 ; Last unalloc sector ; -ERFLAG: DS virtual 1 ; Error number, 0 = no error. -READOP: DS virtual 1 ; If read operation then 1, else 0 for write. -RSFLAG: DS virtual 1 ; Read sector flag. -WRTYPE: DS virtual 1 ; Write operation type. -TRACKNO: DS virtual 2 ; Host controller track number -SECTORNO: DS virtual 1 ; Host controller sector number -DMAADDR: DS virtual 2 ; Last DMA address -HSTBUF: DS virtual 512 ; Host buffer for disk sector storage +ERFLAG: DS virtual 1 ; Error number, 0 = no error. +READOP: DS virtual 1 ; If read operation then 1, else 0 for write. +RSFLAG: DS virtual 1 ; Read sector flag. +WRTYPE: DS virtual 1 ; Write operation type. +TRACKNO: DS virtual 2 ; Host controller track number +SECTORNO: DS virtual 1 ; Host controller sector number +DMAADDR: DS virtual 2 ; Last DMA address +HSTBUF: DS virtual 512 ; Host buffer for disk sector storage HSTBUFE: -SDVER: DS virtual 1 ; SD Card version. -SDCAP: DS virtual 1 ; SD Card capabilities.. -SDSTARTSEC DS virtual 4 ; Starting sector of data to read/write from/to SD card. -SDBUF: DS virtual 11 ; SD Card command fram buffer for the command and response storage. +SDVER: DS virtual 1 ; SD Card version. +SDCAP: DS virtual 1 ; SD Card capabilities.. +SDSTARTSEC DS virtual 4 ; Starting sector of data to read/write from/to SD card. +SDBUF: DS virtual 11 ; SD Card command fram buffer for the command and response storage. -CURSORPSAV DS virtual 2 ; Cursor save position;default 0,0 -HAVELOADED DS virtual 1 ; To show that a value has been put in for Ansi emualtor. -ANSIFIRST DS virtual 1 ; Holds first character of Ansi sequence -NUMBERBUF DS virtual 20 ; Buffer for numbers in Ansi -NUMBERPOS DS virtual 2 ; Address within buffer -CHARACTERNO DS virtual 1 ; Byte within Ansi sequence. 0=first,255=other -CURSORCOUNT DS virtual 1 ; 1/50ths of a second since last change -FONTSET DS virtual 1 ; Ansi font setup. -JSW_FF DS virtual 1 ; Byte value to turn on/off FF routine -JSW_LF DS virtual 1 ; Byte value to turn on/off LF routine -CHARACTER DS virtual 1 ; To buffer character to be printed. -CURSORPOS DS virtual 2 ; Cursor position, default 0,0. -BOLDMODE DS virtual 1 -HIBRITEMODE DS virtual 1 ; 0 means on, &C9 means off -UNDERSCMODE DS virtual 1 -ITALICMODE DS virtual 1 -INVMODE DS virtual 1 -CHGCURSMODE DS virtual 1 -ANSIMODE DS virtual 1 ; 1 = on, 0 = off -COLOUR EQU 0 +CURSORPSAV DS virtual 2 ; Cursor save position;default 0,0 +HAVELOADED DS virtual 1 ; To show that a value has been put in for Ansi emualtor. +ANSIFIRST DS virtual 1 ; Holds first character of Ansi sequence +NUMBERBUF DS virtual 20 ; Buffer for numbers in Ansi +NUMBERPOS DS virtual 2 ; Address within buffer +CHARACTERNO DS virtual 1 ; Byte within Ansi sequence. 0=first,255=other +CURSORCOUNT DS virtual 1 ; 1/50ths of a second since last change +FONTSET DS virtual 1 ; Ansi font setup. +JSW_FF DS virtual 1 ; Byte value to turn on/off FF routine +JSW_LF DS virtual 1 ; Byte value to turn on/off LF routine +CHARACTER DS virtual 1 ; To buffer character to be printed. +CURSORPOS DS virtual 2 ; Cursor position, default 0,0. +BOLDMODE DS virtual 1 +HIBRITEMODE DS virtual 1 ; 0 means on, &C9 means off +UNDERSCMODE DS virtual 1 +ITALICMODE DS virtual 1 +INVMODE DS virtual 1 +CHGCURSMODE DS virtual 1 +ANSIMODE DS virtual 1 ; 1 = on, 0 = off +COLOUR EQU 0 -SPSAVE: DS virtual 2 ; CPM Stack save. -SPISRSAVE: DS virtual 2 - ; Stack space for the CBIOS. -MSGSTRBUF: DS virtual 128 ; Lower end of the stack space is for interbank message printing, ie.space for a string to print. -BIOSSTACK EQU $ - ; Stack space for the Interrupt Service Routine. - DS virtual 16 ; Max 8 stack pushes. -ISRSTACK EQU $ +SPSAVE: DS virtual 2 ; CPM Stack save. +SPISRSAVE: DS virtual 2 + ; Stack space for the CBIOS. +MSGSTRBUF: DS virtual 128 ; Lower end of the stack space is for interbank message printing, ie.space for a string to print. +BIOSSTACK EQU $ + ; Stack space for the Interrupt Service Routine. + DS virtual 16 ; Max 8 stack pushes. +ISRSTACK EQU $ -DBGSTACKP: DS virtual 2 - DS virtual 64 -DBGSTACK: EQU $ +DBGSTACKP: DS virtual 2 + DS virtual 64 +DBGSTACK: EQU $ -VAREND EQU $ ; End of variables +VAREND EQU $ ; End of variables diff --git a/software/asm/include/RFS_Definitions.asm b/software/asm/include/RFS_Definitions.asm index cb50e26..614f3bf 100644 --- a/software/asm/include/RFS_Definitions.asm +++ b/software/asm/include/RFS_Definitions.asm @@ -7,15 +7,17 @@ ;- Definitions for the RFS including SA1510 locations. ;- ;- Credits: -;- Copyright: (c) 2019-20 Philip Smart +;- Copyright: (c) 2019-21 Philip Smart ;- ;- History: Sep 2019 - Initial version. -; May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the -; additional and different hardware. The SPI is now onboard the PCB and -; not using the printer interface card. -; July 2020 - Updated for the v2.1 hardware. RFS can run with a tranZPUter board with -; or without the K64 I/O processor. RFS wont use the K64 processor all -; operations are done by the Z80 under RFS. +;- May 2020 - Advent of the new RFS PCB v2.0, quite a few changes to accommodate the +;- additional and different hardware. The SPI is now onboard the PCB and +;- not using the printer interface card. +;- July 2020 - Updated for the tranZPUter v2.1 hardware. RFS can run with a tranZPUter +;- board with or without the K64 I/O processor. RFS wont use the K64 +;- processor all operations are done by the Z80 under RFS. +;- March 2021- Updates to accommodate the RFS v2.1 board along with back porting TZFS +;- developments. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -47,6 +49,73 @@ UROMBSTBL EQU UROMADDR + 020H ; Entry RFSJMPTABLE EQU UROMADDR + 00080H ; Start of jump table. FDCROMADDR EQU 0F000H + +;----------------------------------------------- +; Common character definitions. +;----------------------------------------------- +SCROLL EQU 001H ;Set scroll direction UP. +BELL EQU 007H +SPACE EQU 020H +TAB EQU 009H ;TAB ACROSS (8 SPACES FOR SD-BOARD) +CR EQU 00DH +LF EQU 00AH +FF EQU 00CH +CS EQU 0CH ; Clear screen +DELETE EQU 07FH +BACKS EQU 008H +SOH EQU 1 ; For XModem etc. +EOT EQU 4 +ACK EQU 6 +NAK EQU 015H +NUL EQU 000H +NULL EQU 000H +CTRL_A EQU 001H +CTRL_B EQU 002H +CTRL_C EQU 003H +CTRL_D EQU 004H +CTRL_E EQU 005H +CTRL_F EQU 006H +CTRL_G EQU 007H +CTRL_H EQU 008H +CTRL_I EQU 009H +CTRL_J EQU 00AH +CTRL_K EQU 00BH +CTRL_L EQU 00CH +CTRL_M EQU 00DH +CTRL_N EQU 00EH +CTRL_O EQU 00FH +CTRL_P EQU 010H +CTRL_Q EQU 011H +CTRL_R EQU 012H +CTRL_S EQU 013H +CTRL_T EQU 014H +CTRL_U EQU 015H +CTRL_V EQU 016H +CTRL_W EQU 017H +CTRL_X EQU 018H +CTRL_Y EQU 019H +CTRL_Z EQU 01AH +ESC EQU 01BH +CTRL_SLASH EQU 01CH +CTRL_LB EQU 01BH +CTRL_RB EQU 01DH +CTRL_CAPPA EQU 01EH +CTRL_UNDSCR EQU 01FH +CTRL_AT EQU 000H +NOKEY EQU 0F0H +CURSRIGHT EQU 0F1H +CURSLEFT EQU 0F2H +CURSUP EQU 0F3H +CURSDOWN EQU 0F4H +DBLZERO EQU 0F5H +INSERT EQU 0F6H +CLRKEY EQU 0F7H +HOMEKEY EQU 0F8H +BREAKKEY EQU 0FBH +GRAPHKEY EQU 0FCH +ALPHAKEY EQU 0FDH + + ;------------------------------------------------------- ; Function entry points in the standard SA-1510 Monitor. ;------------------------------------------------------- @@ -93,7 +162,7 @@ WTAPE: EQU 00485H MSTOP: EQU 00700H ; Debugging -ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable +ENADEBUG EQU 1 ; Enable debugging logic, 1 = enable, 0 = disable ;----------------------------------------------- ; Memory mapped ports in hardware. @@ -168,15 +237,33 @@ SETXMHZ EQU 062H ; Selec SET2MHZ EQU 064H ; Select the system 2MHz clock frequency. CLKSELRD EQU 066H ; Read clock selected setting, 0 = 2MHz, 1 = XMHz SVCREQ EQU 068H ; I/O Processor service request. +CPUCFG EQU 06CH ; Version 2.2 CPU configuration register. +CPUSTATUS EQU 06CH ; Version 2.2 CPU runtime status register. +CPUINFO EQU 06DH ; Version 2.2 CPU information register. CPLDCFG EQU 06EH ; Version 2.1 CPLD configuration register. CPLDSTATUS EQU 06EH ; Version 2.1 CPLD status register. CPLDINFO EQU 06FH ; Version 2.1 CPLD version information register. +MMIO0 EQU 0E0H ; MZ-700/MZ-800 Memory Management Set 0 +MMIO1 EQU 0E1H ; MZ-700/MZ-800 Memory Management Set 1 +MMIO2 EQU 0E2H ; MZ-700/MZ-800 Memory Management Set 2 +MMIO3 EQU 0E3H ; MZ-700/MZ-800 Memory Management Set 3 +MMIO4 EQU 0E4H ; MZ-700/MZ-800 Memory Management Set 4 +MMIO5 EQU 0E5H ; MZ-700/MZ-800 Memory Management Set 5 +MMIO6 EQU 0E6H ; MZ-700/MZ-800 Memory Management Set 6 +MMIO7 EQU 0E7H ; MZ-700/MZ-800 Memory Management Set 7 ;----------------------------------------------- ; CPLD Configuration constants. ;----------------------------------------------- -SET_MODE_MZ80A EQU 1 ; Set to original unmodified hardware. -SET_MODE_MZ700 EQU 2 ; Map keyboard and memory mode settings to MZ700 mode. +MODE_MZ80K EQU 0 ; Set to MZ-80K mode. +MODE_MZ80C EQU 1 ; Set to MZ-80C mode. +MODE_MZ1200 EQU 2 ; Set to MZ-1200 mode. +MODE_MZ80A EQU 3 ; Set to MZ-80A mode (base mode on MZ-80A hardware). +MODE_MZ700 EQU 4 ; Set to MZ-700 mode (base mode on MZ-700 hardware). +MODE_MZ800 EQU 5 ; Set to MZ-800 mode. +MODE_MZ80B EQU 6 ; Set to MZ-80B mode. +MODE_MZ2000 EQU 7 ; Set to MZ-2000 mode. +MODE_VIDEO_FPGA EQU 8 ; Bit flag (bit 3) to switch CPLD into using the new FPGA video hardware. ;----------------------------------------------- ; tranZPUter SW Memory Management modes @@ -192,11 +279,16 @@ TZMM_CPM EQU 006H + TZMM_ENIOWAIT ; CPM m TZMM_CPM2 EQU 007H + TZMM_ENIOWAIT ; CPM main memory configuration, F000-FFFF are on the tranZPUter board in block 4, 0040-CFFF and E800-EFFF are in block 5, mainboard for D000-DFFF (video), E000-E800 (Memory control) selected. ; Special case for 0000:003F (interrupt vectors) which resides in block 4, F3C0:F3FF & F7C0:F7FF (floppy disk paging vectors) which resides on the mainboard. TZMM_COMPAT EQU 008H + TZMM_ENIOWAIT ; Original mode but with main DRAM in Bank 0 to allow bootstrapping of programs from other machines such as the MZ700. +TZMM_HOSTACCESS EQU 009H + TZMM_ENIOWAIT ; Mode to allow code running in Bank 0, address E800:FFFF to access host memory. Monitor ROM 0000-0FFF and Main DRAM 0x1000-0xD000, video and memory mapped I/O are on the host machine, User/Floppy ROM E800-FFFF are in tranZPUter memory. TZMM_MZ700_0 EQU 00AH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the mainboard. TZMM_MZ700_1 EQU 00BH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. TZMM_MZ700_2 EQU 00CH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. TZMM_MZ700_3 EQU 00DH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. TZMM_MZ700_4 EQU 00EH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. +TZMM_MZ800 EQU 00FH + TZMM_ENIOWAIT ; MZ800 Mode - Tracks original hardware mode offering MZ700/MZ800 configurations. +TZMM_FPGA EQU 015H + TZMM_ENIOWAIT ; Open up access for the K64F to the FPGA resources such as memory. All other access to RAM or mainboard is blocked. +TZMM_TZPUM EQU 016H + TZMM_ENIOWAIT ; Everything in on mainboard, no access to tranZPUter memory. +TZMM_TZPU EQU 017H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 0 is selected. TZMM_TZPU0 EQU 018H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 0 is selected. TZMM_TZPU1 EQU 019H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 1 is selected. TZMM_TZPU2 EQU 01AH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 2 is selected. @@ -259,69 +351,6 @@ ROMBANK9 EQU 9 ; ROMBANK10 EQU 10 ; : CBIOS Bank 3 - SD Card ROMBANK11 EQU 11 ; : CBIOS Bank 4 - Floppy disk controller. -OBJCD EQU 001h - -;----------------------------------------------- -; Common character definitions. -;----------------------------------------------- -SCROLL EQU 001H ; Set scrool direction UP. -BELL EQU 007H -SPACE EQU 020H -TAB EQU 009H ; TAB ACROSS (8 SPACES FOR SD-BOARD) -CR EQU 00DH -LF EQU 00AH -FF EQU 00CH -ESC EQU 01BH -DELETE EQU 07FH -BACKS EQU 008H -SOH EQU 1 ; For XModem etc. -EOT EQU 4 -ACK EQU 6 -NAK EQU 15H -NUL EQU 00H -NULL EQU 000H -CTRL_A EQU 001H -CTRL_B EQU 002H -CTRL_C EQU 003H -CTRL_D EQU 004H -CTRL_E EQU 005H -CTRL_F EQU 006H -CTRL_G EQU 007H -CTRL_H EQU 008H -CTRL_I EQU 009H -CTRL_J EQU 00AH -CTRL_K EQU 00BH -CTRL_L EQU 00CH -CTRL_M EQU 00DH -CTRL_N EQU 00EH -CTRL_O EQU 00FH -CTRL_P EQU 010H -CTRL_Q EQU 011H -CTRL_R EQU 012H -CTRL_S EQU 013H -CTRL_T EQU 014H -CTRL_U EQU 015H -CTRL_V EQU 016H -CTRL_W EQU 017H -CTRL_X EQU 018H -CTRL_Y EQU 019H -CTRL_Z EQU 01AH -CTRL_SLASH EQU 01CH -CTRL_RB EQU 01DH -CTRL_CAPPA EQU 01EH -CTRL_UNDSCR EQU 01FH -CTRL_AT EQU 000H -NOKEY EQU 0F0H -CURSRIGHT EQU 0F1H -CURSLEFT EQU 0F2H -CURSUP EQU 0F3H -CURSDOWN EQU 0F4H -DBLZERO EQU 0F5H -INSERT EQU 0F6H -CLRKEY EQU 0F7H -HOMEKEY EQU 0F8H -BREAKKEY EQU 0FBH - ; MMC/SD command (SPI mode) CMD0 EQU 64 + 0 ; GO_IDLE_STATE @@ -387,6 +416,18 @@ SDDIR_DIRSIZE EQU SDDIR_DIRENT * SDDIR_DIRENTSZ ; Total SDDIR_BLOCKSZ EQU 65536 ; Size of a file block per directory entry. SDDIR_IMGSZ EQU SDDIR_DIRSIZE + (SDDIR_DIRENT * SDDIR_BLOCKSZ) ; Total size of the RFS image. +OBJCD EQU 001H ; MZF contains a binary object. +BTX1CD EQU 002H ; MZF contains a BASIC program. +BTX2CD EQU 005H ; MZF contains a BASIC program. +TZOBJCD0 EQU 0F8H ; MZF contains a TZFS binary object for page 0. +TZOBJCD1 EQU 0F8H +TZOBJCD2 EQU 0F8H +TZOBJCD3 EQU 0F8H +TZOBJCD4 EQU 0F8H +TZOBJCD5 EQU 0F8H +TZOBJCD6 EQU 0F8H +TZOBJCD7 EQU 0F8H ; MZF contains a TZFS binary object for page 7. + ;----------------------------------------------- ; SA-1510 MONITOR WORK AREA (MZ80A) ;----------------------------------------------- @@ -447,7 +488,9 @@ TMPLINECNT: EQU 01022H ; Tempo TMPSTACKP: EQU 01024H ; Temporary stack pointer save. SDVER: EQU 01026H SDCAP: EQU 01027H -TZPU: EQU 01028H ; Tranzputer present flag (0 = not present, > 0 = present and version number). +SDDRIVENO EQU 01028H ; RFS SDCFS Active Drive Number +CMTFILENO EQU 01029H ; Next Sequential file number to read when file request given without name. +TZPU: EQU 0102AH ; Tranzputer present flag (0 = not present, > 0 = present and version number). ; Variables sharing the BUFER buffer, normally the BUFER is only used to get keyboard input and so long as data in BUFER is processed ; before calling the CMT/SD commands and not inbetween there shouldnt be any issue. Also the space used is at the top end of the buffer which is not used so often. ; This frees up memory needed by the CMT and SD card. diff --git a/software/asm/rfs.asm b/software/asm/rfs.asm index 0d1e518..8654f24 100644 --- a/software/asm/rfs.asm +++ b/software/asm/rfs.asm @@ -129,7 +129,14 @@ BKSWRET0: POP AF ; Get b ; Enhanced function Jump table. ; This table is generally used by the monitor ROM to call functions within the User ROM. ;------------------------------------------------------------------------------------------ -PRTMZF: JP _PRTMZF +PRTMZF: JP _PRTMZF ; UROMADDR+80H - Print out an MZF header stored in the IBUFE location. +PRTDBG: JP _PRTDBG ; UROMADDR+83H - Print out debug information, if enabled. +CMT_RDINF: JP _CMT_RDINF ; UROMADDR+86H - Tape/SD intercept handler - Read Header +CMT_RDDATA: JP _CMT_RDDATA ; UROMADDR+89H - Tape/SD intercept handler - Read Data +CMT_WRINF: JP _CMT_WRINF ; UROMADDR+80H - Tape/SD intercept handler - Write Header +CMT_WRDATA: JP _CMT_WRDATA ; UROMADDR+8FH - Tape/SD intercept handler - Write Data +CMT_VERIFY: JP _CMT_VERIFY ; UROMADDR+92H - Tape/SD intercept handler - Verify Data +CMT_DIR: JP _CMT_DIR ; UROMADDR+95H - SD card directory listing command. ;----------------------------------------- @@ -171,6 +178,10 @@ MONITOR: IN A,(CPLDINFO) ; See i XOR A CHKTZ1: AND 00FH LD (TZPU), A ; Flag = 0 if no tranZPUter present otherwise contains version (1 - 15). + LD HL,DSPCTL ; Setup address of display control register latch. + ; + XOR A ; Set the initial SDCFS active drive number. + LD (SDDRIVENO),A ; LD A, (ROMBK1) CP 1 @@ -179,13 +190,14 @@ CHKTZ1: AND 00FH JR NZ, SIGNON ; SET40CHAR: LD A, 0 ; Using MROM in Bank 0 = 40 char mode. - LD (DSPCTL), A - LD A, 0 + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A LD (SCRNMODE), A LD (SPAGE), A ; Allow MZ80A scrolling JR SIGNON SET80CHAR: LD A, 128 ; Using MROM in Bank 1 = 80 char mode. - LD (DSPCTL), A + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A LD A, 1 LD (SCRNMODE), A LD A, 0FFH @@ -221,6 +233,21 @@ ST1X: CALL NL ; Comma LD DE,BUFER CALL GETL ; + LD A,(BUFER+1) ; Drive change number 0..9. Each number represents an RFS SDCFS Drive number. + CP '0' + JR C,CMDCMP + CP ':' + JR NC,CMDCMP + SUB '0' + LD D,A + LD A,(BUFER+2) + CP CR ; If a CR is present then we match, a drive selection number was entered. + LD A,D + JR NZ,CMDCMP + ; Simple command, just update the active drive number. + LD (SDDRIVENO),A + JR ST1X + ; CMDCMP: LD HL,CMDTABLE CMDCMP0: LD DE,BUFER+1 ; First command byte after the * prompt. LD A,(HL) @@ -228,12 +255,14 @@ CMDCMP0: LD DE,BUFER+1 ; First JR Z,ST1X ; Skip processing on lines where just CR pressed. BIT 7,A ; Bit 7 set on command properties indicates table end, exit if needed. JR NZ,CMDNOCMP + LD C,A ; Command properties into C SET 6,C ; Assume command match. AND 007H ; Mask out bytes in command mask. LD B,A ; Number of bytes in command. INC HL CMDCMP1: LD A,(DE) ; Compare all bytes and reset match bit if we find a difference. + CP (HL) JR Z, CMDCMP2 RES 6,C ; No command match. @@ -287,11 +316,11 @@ CMDCMPEND: JP ST1X ; ; 7 6 5:3 2:0 ; END MATCH BANK SIZE -CMDTABLE: DB 000H | 000H | 000H | 001H ; Bit 2:0 = Command Size, 5:3 = Bank, 6 = Command match, 7 = Command table end. - DB '4' ; 40 Char screen mode. +CMDTABLE: DB 000H | 000H | 000H | 002H ; Bit 2:0 = Command Size, 5:3 = Bank, 6 = Command match, 7 = Command table end. + DB "40" ; 40 Char screen mode. DW SETMODE40 - DB 000H | 000H | 000H | 001H - DB '8' ; 80 Char screen mode. + DB 000H | 000H | 000H | 002H + DB "80" ; 80 Char screen mode. DW SETMODE80 DB 000H | 000H | 000H | 004H DB "7008" ; Switch to 80 column MZ700 mode. @@ -438,15 +467,19 @@ HIROM: LD A, (MEMSW) ; Swap SETMODE40: LD A, ROMBANK0 ; Switch to 40Char monitor. LD (ROMBK1),A LD (BNKSELMROM),A + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 0 - LD (DSPCTL), A + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A JP MONIT SETMODE80: LD A, ROMBANK1 ; Switch to 80char monitor. LD (ROMBK1),A LD (BNKSELMROM),A + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 128 - LD (DSPCTL), A + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A JP MONIT NOTZPU: LD DE,MSGNOTZINST ; No tranZPUter installed. @@ -475,13 +508,15 @@ SETCLR_1: LD (DE),A SETMODE7008:LD A,(TZPU) ; Check there is a tranZPUter card installed. OR A JR Z,NOTZPU + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 128 ; Setup for 80char display. - LD (DSPCTL), A + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A CALL SETMODECLR ; Set memory mode and clear variable area. LD A,ROMBANK5 ; Select the 80 column version of the 1Z-013A ROM. SETMODE_2: LD (ROMBK1),A LD (BNKSELMROM),A - LD A,SET_MODE_MZ700 ; Set the CPLD compatibility mode. + LD A,MODE_MZ700 ; Set the CPLD compatibility mode. SETMODE_3: OUT (CPLDCFG),A JP MONIT ; Cold start the monitor. @@ -490,8 +525,10 @@ SETMODE_3: OUT (CPLDCFG),A SETMODE700: LD A,(TZPU) ; Check there is a tranZPUter card installed. OR A JR Z,NOTZPU + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 0 ; Setup for 40char display. - LD (DSPCTL), A + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A CALL SETMODECLR ; Set memory mode and clear variable area. LD A,ROMBANK4 ; Select the 40 column version of the 1Z-013A ROM. JR SETMODE_2 @@ -509,7 +546,7 @@ ISMZF: PUSH BC PUSH HL ; LD A,(HL) - CP 001h ; Only interested in machine code images. + CP OBJCD ; Only interested in machine code images. JR NZ, ISMZFNOT ; INC HL @@ -517,21 +554,19 @@ ISMZF: PUSH BC LD B,FNSIZE ; Maximum of 17 characters, including terminator in filename. ISMZFNXT: LD A,(HL) LD (DE),A - CP 00Dh ; If we find a terminator then this indicates potentially a valid name. - JR Z, ISMZFVFY - CP 020h ; >= Space + CP 00DH ; If we find a terminator then this indicates potentially a valid name. + JR Z, ISMZFNXT3 + CP 000H ; Same applies for NULL terminator. + JR Z, ISMZFNXT3 + CP 020H ; >= Space JR C, ISMZFNOT - CP 05Dh ; =< ] + CP 05DH ; =< ] JR C, ISMZFNXT3 -ISMZFNXT2: CP 091h +ISMZFNXT2: CP 091H JR C, ISMZFNOT ; DEL or > 0x7F, cant be a valid filename so this is not an MZF header. ISMZFNXT3: INC DE INC HL DJNZ ISMZFNXT - JR ISMZFNOT ; No end of string terminator, this cant be a valid filename. -ISMZFVFY: LD A,B - CP FNSIZE - JR Z,ISMZFNOT ; If the filename has no length it cant be valid, so loop. ISMZFYES: CP A ; Set zero flag to indicate match. ISMZFNOT: POP HL @@ -540,7 +575,7 @@ ISMZFNOT: POP HL RET -PRTDBG: IF ENADEBUG = 1 +_PRTDBG: IF ENADEBUG = 1 PUSH HL PUSH DE PUSH BC @@ -608,7 +643,7 @@ PRTNOPAUSE: LD A,E ; LD A, D ; Print out file number and increment. CALL PRTHX - LD A, '.' + LD A, '.' ; File type is MACHINE CODE program. CALL PRNT LD DE,NAME ; Print out filename. LD B,FNSIZE ; Maximum size of filename. @@ -668,15 +703,25 @@ DIRROM: DI ; Disab LD DE,MSGRDIRLST ; Print out header. LD HL,PRINTMSG CALL BKSW0to6 + + ; D = File sequence number. + LD D,0 ; File numbering start. + + ; + ; Get directory of User ROM. + ; + LD A,ROMBANK3 + LD (WRKROMBK1),A + LD (BNKSELMROM),A + CALL DIRMROM + ; ; Scan MROM Bank ; B = Bank Page ; C = Block in page - ; D = File sequence number. ; LD B,MROMPAGES ; First 8 pages are reserved in MROM bank. LD C,0 ; Block in page. - LD D,0 ; File numbering start. ; DIRNXTPG: LD A,B LD (WRKROMBK1), A @@ -712,29 +757,24 @@ DIRNOTMZF: INC C ; Next DIRNXTPG2: LD A,B CP 080h ; MROM has 128 banks of 4K, so stop when we reach 128. JR NZ, DIRNXTPG - ; - ; Get directory of User ROM. - ; - LD A,ROMBANK3 - LD (WRKROMBK1),A - LD (BNKSELMROM),A - CALL DIRMROM + DIRNXTPGX: LD A,(ROMBK1) LD (BNKSELMROM),A ; Set the MROM bank back to original. EI ; No need to block interrupts now as MROM bank restored. RET ; End of scan, return to monitor - ; JP ST1X ; End of scan, return to monitor ; In: - ; DE = filename + ; HL = filename + ; D = File sequence number. ; Out: ; B = Bank Page file found ; C = Block where found. ; D = File sequence number. ; Z set if found. FINDMZF: PUSH DE - LD (TMPADR), DE ; Save name of program to load. + LD (TMPADR), HL ; Save name of program to load. + EX DE, HL ; String needed in DE for conversion. LD HL,0FFFFh ; Tag the filenumber as invalid. LD (TMPCNT), HL CALL ConvertStringToNumber ; See if a file number was given instead of a filename. @@ -744,11 +784,10 @@ FINDMZF: PUSH DE ; Scan MROM Bank ; B = Bank Page ; C = Block in page - ; D = File sequence number. ; -FINDMZF0: LD B,MROMPAGES ; First 4 pages are reserved in User ROM bank. +FINDMZF0: POP DE ; Get file sequence number in D. + LD B,MROMPAGES ; First 4 pages are reserved in User ROM bank. LD C,0 ; Block in page. - LD D,0 ; File numbering start. FINDMZF1: LD A,B LD (WRKROMBK1), A LD (BNKSELMROM),A ; Select bank. @@ -814,7 +853,6 @@ FINDMZFNO: PUSH AF LD A,(ROMBK1) LD (BNKSELMROM),A ; Set the MROM bank back to original. POP AF - POP HL RET @@ -827,16 +865,26 @@ LOADROMNX: LD L,0FFH LOADROM: LD L,000H LOADROM1: DI PUSH HL ; Preserve execute flag. - CALL FINDMZF ; Find the bank and block where the file resides. HL = filename. - JR Z, LROMLOAD + EX DE,HL ; User ROM expects HL to have the filename pointer. + PUSH HL ; Save pointer to filename for FINDMZF in Monitor ROM. + + ; D = File sequence number. + LD D,0 ; File numbering start. + ; LD A,ROMBANK3 ; Activate the RFS Utilities MROM bank. LD (WRKROMBK1), A LD (BNKSELMROM),A CALL MFINDMZF ; Try and find the file in User ROM via MROM utility. - JR NZ, LROMNTFND + POP HL + JR Z,MROMLOAD0 ; - PUSH BC ; Preserve bank and block where MZF file found. + CALL FINDMZF ; Find the bank and block where the file resides. HL = filename. + JR Z, LROMLOAD + ; + JR LROMNTFND ; Requested file not found. + ; +MROMLOAD0: PUSH BC ; Preserve bank and block where MZF file found. PUSH AF LD A,(ROMBK1) ; Page in monitor so we can print a message. LD (BNKSELMROM),A @@ -967,10 +1015,222 @@ LROMLOAD5: POP HL ; Retri JP (HL) ; Execution address. LROMLOAD9: RET + + ; Quick method to load CPM. So long as the filename doesnt change this method will load and boot CPM. +LOADCPM: LD DE,CPMFN48 ; Load up the 48K version of CPM +LOADPROG: LD HL,LOADSDCARD + CALL BKSW0to2 + RET + + ; Quick method to load the basic interpreter. So long as the filename doesnt change this method will load and boot Basic. +LOADBASIC: LD DE,BASICFILENM + JR LOADPROG + ;------------------------------------------------------------------------------- ; END OF RFS COMMAND FUNCTIONS. ;------------------------------------------------------------------------------- + ;------------------------------------------------------------------------------- + ; DEVICE DRIVERS - Intercept handlers to provide enhanced services to + ; existing MA-80A BIOS API functions. + ;------------------------------------------------------------------------------- + + ; Method to set the RFS Drive number from the Load/Save string provided. +SETDRIVE: PUSH AF + PUSH BC +SETDRV0: LD A,(DE) ; If a drive is given it will be in format : + OR A ; Exit if null or CR found, no drive specifier present. + JR Z,SETDRV2 + CP 00DH + JR Z,SETDRV2 + CP '"' ; String quotes, skip over. + JR NZ,SETDRV1 + INC DE + JR SETDRV0 + ; +SETDRV1: SUB '0' ; Check the drive number, should be in range 0..9 + CP 10 + JR NC,SETDRV2 + LD C,A + INC DE + LD A,(DE) + DEC DE + CP ':' ; Is the drive being specified? + JR NZ,SETDRV2 + LD A,C + LD (SDDRIVENO),A ; Store drive number for later use. + XOR A + LD (CMTFILENO),A ; Setup the starting file number for sequential file reads (ie. when no filename given). + ; + PUSH DE ; Need to remove the drive qualifier once processed. + PUSH DE + INC DE + INC DE ; Move onto filename. + EX DE,HL + POP DE + LD BC,SDDIR_FNSZ + LDIR + POP DE + ; +SETDRV2: POP BC + POP AF + RET + + ; Method to check if the active drive is the CMT. +CHECKCMT: LD A,(SDDRIVENO) + CP 'C' + RET + + ; Convert the lower 4 bits of A into a Hex character. +TOHEXDIGIT: AND 00FH ; Simple logic, add 30H to get 0..9, add additional 7 if value >= 10 to get digits A..F. + CP 00AH + JR C,NOADD + ADD A,007H +NOADD: ADD A,030H + RET + + ; Convert a number into Hex string and store in buffer pointed to by DE. + ; +TOHEX: PUSH DE + PUSH AF ; Save AF to retrieve lower 4 bits. + RRCA ; Shift upper 4 bits to lower to convert to hex. + RRCA + RRCA + RRCA + CALL TOHEXDIGIT + LD (DE),A ; Store and convert lower 4 bits. + INC DE + POP AF + CALL TOHEXDIGIT + LD (DE),A + INC DE + LD A,CR ; Terminate with a CR. + LD (DE),A + POP DE ; DE back to start of string. + RET + + ; Handler to intercept the CMT Read Header Information call and insert selectable + ; SD Card RFS Drive functionality. + ; DE contains a pointer to memory containing the file to load. If (DE) = NULL then + ; load the next sequential file from the SD card directory. + ; DE = Filename. Can contain a drive specifier in format : + ; + ; No registers or flags should be affected as we dont know the caller state. +_CMT_RDINF: CALL SETDRIVE ; Set drive if specified. + CALL CHECKCMT ; If drive is set to the CMT Unit exit with Z set so that the original CMT handlers are called. + JP Z,?RDI + LD A,(DE) ; Check to see if empty string given, if so expand the default Next file number into the buffer. + CP CR + JR NZ,_CMT_RDINF1 + LD A,(CMTFILENO) ; Get next sequential number and convert to hex. + PUSH AF + CALL TOHEX + POP AF + INC A ; Increment number so next call retrieves the next sequential file. + LD (CMTFILENO),A + ; +_CMT_RDINF1:PUSH DE + LD HL,LOADSDINF ; DE already points to the filename, call LOADSDINF to locate it on the SD card and setup the header. + CALL BKSW0to2 + ; Copy the filename into the Buffer provided allowing for file number to name expansion. + POP DE + LD HL,NAME + LD BC,SDDIR_FNSZ + LDIR + ; + LD A,(RESULT) + OR A + RET Z ; 0 = success, return with carry clear. + SCF ; > 0 = fail, return with carry set. + RET + + ; Handler to intercept the CMT Read Data call and insert selectable SD Card RFS + ; Drive functionality. + ; + ; No registers or flags should be affected as we dont know the caller state. +_CMT_RDDATA:LD HL,LOADSDDATA + CALL BKSW0to2 + LD A,(RESULT) + OR A + JR NZ,_CMT_RDERR + RET +_CMT_RDERR: SCF + RET + + ; Handler to intercept the CMT Write Header Information call and insert selectable + ; SD Card RFS Drive functionality. + ; + ; No registers or flags should be affected as we dont know the caller state. + ; + ; At the moment, the WRINF call only creates a filename if non specified. The actual write to file occurs in WRDATA. Once I have more understanding of + ; how the sequential data mode works I can adapt it to be compatible. +_CMT_WRINF: LD DE,NAME ; Caller has already setup the CMT header so we use this for processing. + ; + CALL SETDRIVE ; Set drive if specified. + CALL CHECKCMT + JP Z,?WRI + ; + LD A,(DE) ; Check to see if empty string given, if so create a default name. + CP CR + JR NZ,_CMT_WRINF1 + ; + LD HL,DEFAULTFN + LD BC,DEFAULTFNE - DEFAULTFN + LDIR + LD A,(CMTFILENO) ; Get next sequential number and convert to hex. + PUSH AF + CALL TOHEX + POP AF + INC A ; Increment number so next call retrieves the next sequential file. + LD (CMTFILENO),A + ; +_CMT_WRINF1:LD A,0 ; Always success as nothing is written. + OR A + RET + + ; Handler to intercept the CMT Write Data call and insert selectable SD Card RFS + ; Drive functionality. + ; + ; No registers or flags should be affected as we dont know the caller state. +_CMT_WRDATA: LD HL,SAVESDDATA + CALL BKSW0to2 + LD A,(RESULT) + OR A + JR NZ,_CMT_RDERR + RET + + ; Handler to intercept the CMT Verify Data call and insert selectable SD Card + ; RFS Drive functionality. + ; + ; No registers or flags should be affected as we dont know the caller state. +_CMT_VERIFY:CALL SETDRIVE ; Set drive if specified. + CALL CHECKCMT + JR Z,_VERIFY + ; + RET + +_VERIFY: JP ?VRFY + +SD_NOTFND: LD DE,MSGNOTFND +SD_ERRMSG: LD HL,PRINTMSG + CALL BKSW0to6 ; Print message that file wasnt found. + LD A,1 + OR A + RET + + ; Method to list the contents of the active RFS drive number. +_CMT_DIR: CALL SETDRIVE ; Change to the given drive. + CALL CHECKCMT ; Cannot DIR tape drive so give error. + JP Z,_CMT_NODIR + LD HL,DIRSDCARD + CALL BKSW0to2 ; Call the standard RFS directory command. + RET +_CMT_NODIR: LD DE,MSGNOCMTDIR + JR SD_ERRMSG + + ;------------------------------------------------------------------------------- + ; END OF DEVICE DRIVERS + ;------------------------------------------------------------------------------- ;-------------------------------------- ; @@ -978,6 +1238,12 @@ LROMLOAD9: RET ; all messages. ; ;-------------------------------------- + + ; Quick load program names. +CPMFN48: DB "CPM223RFS", 00DH +BASICFILENM:DB "BASIC SA-5510", 00DH +DEFAULTFN: DB "DEFAULT" +DEFAULTFNE: EQU $ ; Bring in additional resources. USE_CMPSTRING: EQU 1 diff --git a/software/asm/rfs_bank2.asm b/software/asm/rfs_bank2.asm index eb952f8..4660866 100644 --- a/software/asm/rfs_bank2.asm +++ b/software/asm/rfs_bank2.asm @@ -840,10 +840,12 @@ SD_WRITE11: POP HL ; ..loa ; ; Input: HL = Address of filename. ; D = File number. + ; A = File type. ; PRTDIR: PUSH BC PUSH DE PUSH HL + LD C,A ; Preseve file type. ; LD A,(SCRNMODE) CP 0 @@ -868,8 +870,20 @@ PRTNOWAIT: LD A,E ; LD A, D ; Print out file number and increment. CALL PRTHX - LD A, '.' - CALL PRNT + LD A,C + CP OBJCD + LD A, '.' ; File type is MACHINE CODE program. + JR Z,PRTDIR0A + LD A,C + CP BTX1CD + LD A,'-' ; File type is BASIC. + JR Z,PRTDIR0A + LD A,C + CP BTX2CD + LD A,'_' ; File type is BASIC. + JR Z,PRTDIR0A + LD A,'+' +PRTDIR0A: CALL PRNT POP DE PUSH DE ; Get pointer to the file name and print. @@ -909,6 +923,43 @@ PRTDIR4: OR A RET + ; Method to get the LBA sector for an RFS SDCFS image location according to drive. + ; Inputs: + ; A = Starting sector in a single image. + ; or + ; DEHL = starting sector. + ; Outputs: + ; DEHL = Sector number. +RFSGETSECT: LD DE,0 ; Load DEHL with a 32bit start sector. DE=0 as SDCFS starts from sector 0. + LD H,0 ; Set HL to sector number. + LD L,A +RFSGETSECTR:LD A,(SDDRIVENO) ; Entry point when DEHL is defined. +GETDIRDRV: OR A ; Multiply up according to drive number. + RET Z + CP 'C' ; If SDDRIVENO is set to 'C" - CMT, then default to SD Drive 0. CMT is valid in certain applications but not for SD access. + JR NZ,GETDIRDRV1 + LD A,1 +GETDIRDRV1: DEC A + LD BC,08010H ; Number of sectors in an SDCFS image, 2000H directory + (64 * 65536) file blocks. + CALL ADD3216 ; Add drive sector multiple to move to next drive. + JR GETDIRDRV + + ; Method to set the SD Card 32bit LBA sector address. + ; Inputs: + ; DEHL = 32bit sector number. +SETLBAADDR: PUSH HL + POP BC + LD HL,SDSTARTSEC ; Store the starting sector in the SD card buffer ready for retrieval. + LD (HL), D + INC HL + LD (HL), E + INC HL + LD (HL), B + INC HL + LD (HL), C + INC HL + RET + ; Method to get an SD Directory entry. ; The SD Card works in 512byte sectors so a sector is cached and each call evaluates if the required request is in cache, if it is not, a new sector ; is read. @@ -933,15 +984,13 @@ GETSDDIRENT:PUSH BC ; LD HL,SECTORBUF LD (SDLOADADDR),HL - LD HL,0 - LD (SDSTARTSEC),HL - LD B,C - LD C,0 - LD (SDSTARTSEC+2),BC - LD HL,SD_SECSIZE - LD (SDLOADSIZE),HL + ; + CALL RFSGETSECT ; Get the directory sector, offset by drive number. DEHL is returned as the full 32bit LBA sector address. + CALL SETLBAADDR ; Store the sector address into the SD command buffer. + ; + LD BC,SD_SECSIZE ; Set retrieval size to 1 sector. + LD (SDLOADSIZE),BC LD HL,(SDLOADADDR) - LD BC,SD_SECSIZE ; DI CALL SD_READ ; Read the sector. @@ -1006,9 +1055,10 @@ GETDIRFREE2:INC E ; Onto ; Normal use would be to call GERSDDIRENT to locate a required entry or slot, update it then call ; this method to flush it back to SD disk. WRSDDIRENT: LD A,(DIRSECBUF) ; Get the directory sector number of the cached directory sector. - LD B,A - LD C,0 - LD (SDSTARTSEC+2),BC ; Set the sector ready to perform the write. + ; + CALL RFSGETSECT ; Get the directory sector, offset by drive number. DEHL is returned as the full 32bit LBA sector address. + CALL SETLBAADDR ; Store the sector address into the SD command buffer. + ; LD HL,SECTORBUF ; Address of the sector. LD BC,SD_SECSIZE ; Set the size as one full sector. ; @@ -1054,10 +1104,11 @@ DIRSD0: LD E,0 ; Direc DIRSD1: CALL GETSDDIRENT ; Get SD Directory entry details for directory entry number stored in D. RET NZ DIRSD2: LD A,(HL) - INC HL - INC HL ; Hop over flags. BIT 7,A ; Is this entry active, ie. Bit 7 of lower flag = 1? JR Z,DIRSD3 + INC HL + LD A,(HL) ; Get file attribute for print identification. + INC HL ; Hop over flags. CALL PRTDIR ; Valid entry so print directory number and name pointed to by HL. JR NZ,DIRSD4 INC D @@ -1150,7 +1201,7 @@ FINDSD10: OR A RET - ; Method to erase a file in the SD RFS. This is a simple matter of resetting the valid entry flag (bit 7 of FLAG1) in the directory entry for + ; Method to erase a filCOSMIC_CRUISER1MC.256.bine in the SD RFS. This is a simple matter of resetting the valid entry flag (bit 7 of FLAG1) in the directory entry for ; the required file. ; Input: DE = String containing filenumber or filename to erase. ; Output: A = 0 Success, 1 = Fail. @@ -1167,24 +1218,15 @@ ERASESD: CALL FINDSDX POP BC ; Get the directory entry number. LD B,0 LD DE,MSGERASEDIR - LD HL,PRINTMSG - CALL BKSW2to6 ; Print out the filename. LD A,0 ; Success. - RET -ERASESD1: LD DE,MSGERAFAIL ; Fail, print out message. - LD HL,PRINTMSG + JR SDPRINTRES +ERASESD1: LD A,1 + LD DE,MSGERAFAIL ; Fail, print out message. +SDPRINTRES: LD (RESULT),A +SDPRINT: LD HL,PRINTMSG CALL BKSW2to6 ; Print out the filename. - LD A,1 RET - ; Quick method to load the basic interpreter. So long as the filename doesnt change this method will load and boot Basic. -LOADBASIC: LD DE,BASICFILENM - JR LOADSDCARD - - ; Quick method to load CPM. So long as the filename doesnt change this method will load and boot CPM. -LOADCPM: LD DE,CPMFN48 ; Load up the 48K version of CPM - JR LOADSDCARD - ; Entry point when copying the SD file. Setup flags to indicate copying to effect any special processing. ; The idea is to load the file into memory, dont execute and pass back the parameters within the CMT header. ; @@ -1197,6 +1239,7 @@ LOADSDCP: LD A,0FFH ; DE points to a number or filename to load. LOADSDCARDX:LD A,0FFH JR LOADSD1 + LOADSDCARD: LD A,000H LOADSD1: LD (SDAUTOEXEC),A XOR A ; Clear copying flag. @@ -1204,10 +1247,25 @@ LOADSD2: LD (SDCOPY),A LD A,0FFH ; For interbank calls, save result in a memory variable. LD (RESULT),A CALL FINDSDX - JR Z,LOADSD9 + JP Z,LOADSD10 LOADSD3: LD DE,MSGNOTFND - LD HL,PRINTMSG - CALL BKSW2to6 ; Print message that file wasnt found. + JR SDPRINT + + ; Helper method for the CMT replacement functions3. This method is inter bank called to locate a file pointed to by DE and set the header information. +LOADSDINF: CALL FINDSDX + JR Z,LOADSD9 ; Same as section above difference is we want to return after the header information has been extracted. + LD A,2 ; Return code for failure. + JR LOADSD9B + + ; Helper method for CMT replacement functions. This method is called to load data with details already set in the CMT header and SD command buffer. +LOADSDDATA: LD DE,(DTADR) ; Update the load address in case caller changed it after reading the header. + LD (SDLOADADDR),DE + CALL LOADSD11 + LD A,0 + JR C,LOADSDDAT1 + JR Z,LOADSDDAT1 + INC A +LOADSDDAT1: LD (RESULT),A RET ; We have found the directory entry, so use it to load the program into memory. @@ -1222,18 +1280,33 @@ LOADSD9: LD A,L LD (ATRB),A ; Type of file, store in the tape header memory. INC HL LD DE,NAME - LD BC,SDDIR_FNSZ - LDIR ; Copy the filename into the CMT area. - LD E,(HL) + LD B,SDDIR_FNSZ +LOADSD90: LD A,(HL) + OR A + JR NZ,LOADSD91 + LD A,CR ; Map NULL's to CR - applications use CR. +LOADSD91: LD (DE),A ; Copy the filename into the CMT area. INC HL - LD D,(HL) ; Start sector upper 16 bits, big endian. + INC DE + DJNZ LOADSD90 + ; + LD D,(HL) INC HL - LD (SDSTARTSEC),DE - LD E,(HL) + LD E,(HL) ; Start sector upper 16 bits, big endian. SDCFS under RFS this should always be zero. INC HL - LD D,(HL) ; Start sector lower 16 bits, big endian. + PUSH DE + + LD D,(HL) INC HL - LD (SDSTARTSEC+2),DE + LD E,(HL) ; Start sector lower 16 bits, big endian. + INC HL + ; + EX (SP),HL + EX DE,HL + CALL RFSGETSECTR ; Get the directory sector, offset by drive number. DEHL is returned as the full 32bit LBA sector address. + CALL SETLBAADDR ; Store the sector address into the SD command buffer. + POP HL + ; LD E,(HL) INC HL LD D,(HL) ; Size of file. @@ -1247,19 +1320,27 @@ LOADSD9: LD A,L LD A,D LD (DTADRSTORE),DE ; Save the original load address, use this to fill DTADR when complete if it has changed.. CP 001H - JR NC,LOADSD10 + JR NC,LOADSD9A LD DE,01200H ; If the file specifies a load address below 1000H then shift to 1200H as it is not valid. -LOADSD10: LD (DTADR),DE +LOADSD9A: LD (DTADR),DE LD (SDLOADADDR),DE LD E,(HL) INC HL LD D,(HL) ; Execution address, store in tape header memory. LD (EXADR),DE + XOR A ; Return code for success. +LOADSD9B: LD (RESULT),A ; Store result in memory as interbank calls dont preserve AF. + RET ; +LOADSD10 CALL LOADSD9 ; Modularised file find as the CMT replacement functions need it. LD DE,MSGLOAD+1 ; Skip initial CR. LD BC,NAME LD HL,PRINTMSG CALL BKSW2to6 ; Print out the filename. + CALL LOADSD11 + JR C,LOADSD14 + JR NZ,LOADSDERR + JR LOADSD14 ; LOADSD11: LD A,(SDLOADSIZE+1) CP 002H @@ -1271,7 +1352,7 @@ LOADSD12: LD HL,(SDLOADADDR) CALL SD_READ ; Read the sector. EI OR A - JP NZ,LOADSDERR ; Failure to read a sector, abandon with error message. + RET NZ ; Failure to read a sector, abandon with error message. LD (SDLOADADDR),HL ; Save the updated address. ; LD HL,SDSTARTSEC+3 @@ -1283,8 +1364,8 @@ LOADSD12A: LD HL,(SDLOADSIZE) LD DE,SD_SECSIZE OR A SBC HL,DE - JR C,LOADSD14 - JR Z,LOADSD14 + RET C + RET Z LD (SDLOADSIZE),HL JR LOADSD11 @@ -1310,8 +1391,6 @@ LOADSDX: LD A,0 ; Non e LOADSDX1: LD (RESULT),A RET LOADSD17: LD DE,MSGNOTBIN - LD HL,PRINTMSG - CALL BKSW2to6 ; Print out the filename. JR LOADSD16 LOADSDERR: LD DE,MSGSDRERR @@ -1338,23 +1417,21 @@ SAVESDCARD: LD HL,GETCMTPARM ; Get t LD A,C OR A RET NZ ; Exit if an error occurred. - - XOR A ; Disable the copy flag. + ; + LD A,OBJCD ; Set attribute: OBJ + LD (ATRB),A + ; +SAVESDDATA: XOR A ; Disable the copy flag. SAVESD1: LD (SDCOPY),A LD A,0FFH ; Interbank calls, pass result via a memory variable. Assume failure unless updated. LD (RESULT),A - LD A,OBJCD ; Set attribute: OBJ - LD (ATRB),A ; Find free slot. CALL GETDIRFREE JR NC,SAVESD4 LD DE,MSGDIRFULL ; Directory is full so abort command. - LD HL,PRINTMSG - CALL BKSW2to6 ; Print out the filename. LD A,1 ; Directory full code. - LD (RESULT),A - RET + JP SDPRINTRES ; SAVESD4: PUSH DE ; Save the directory entry number. PUSH HL @@ -1363,7 +1440,7 @@ SAVESD4: PUSH DE ; Save LD DE,MSGSVDIRENT LD HL,PRINTMSG CALL BKSW2to6 ; Print out the filename. - POP HL + POP HL ; HL points to the directory entry buffer. LD A,080H LD (HL),A ; Set directory entry flag indicating that the entry is in use. INC HL @@ -1386,20 +1463,24 @@ SAVESD4: PUSH DE ; Save PUSH HL POP BC ; 32bit LBA now in DEBC POP HL + ; Store the Big Endian LBA Sector into the directory entry. LD (HL),D ; Now save the 32bit LBA sector number into the directory entry. - LD (SDSTARTSEC),DE ; DE will always be 0 for RFS so we dont worry about endian, ie. (256 * 64K + 256 * 32)/512 = 0x00008010 INC HL LD (HL),E INC HL LD A,B LD (HL),A - LD (SDSTARTSEC+2),A INC HL LD A,C LD (HL),A - LD (SDSTARTSEC+3),A INC HL ; + PUSH BC ; Save BC and swap for HL so sector now in DEHL. + EX (SP),HL + CALL RFSGETSECTR ; Get the directory sector, offset by drive number. DEHL is returned as the full 32bit LBA sector address. + CALL SETLBAADDR ; Store the sector address into the SD command buffer. + POP HL + ; LD DE,(SIZE) ; Add in the size of the program. LD (SDLOADSIZE),DE LD (HL),E @@ -1473,11 +1554,8 @@ SAVESD8: ; Data written, now write out the directory entry. LD (RESULT),A RET SAVESD9: LD DE,MSGSVFAIL ; Fail, print out message. - LD HL,PRINTMSG - CALL BKSW2to6 ; Print out the filename. LD A,1 ; Write failed code. - LD (RESULT),A - RET + JP SDPRINTRES ; Print out the filename. ;------------------------------------------------------------------------------- ; END OF SD CONTROLLER FUNCTIONALITY @@ -1491,9 +1569,5 @@ SAVESD9: LD DE,MSGSVFAIL ; Fail, ; ;-------------------------------------- - ; Quick load program names. -CPMFN48: DB "CPM223RFS", 00DH -BASICFILENM:DB "BASIC SA-5510", 00DH - ALIGN 0EFFFh DB 0FFh diff --git a/software/asm/rfs_bank3.asm b/software/asm/rfs_bank3.asm index fa5ad6d..939cdc7 100644 --- a/software/asm/rfs_bank3.asm +++ b/software/asm/rfs_bank3.asm @@ -515,7 +515,6 @@ SLPT: DB 01H ; TEXT ; END OF PRINTER CMDLINE TOOLS FUNCTIONALITY ;------------------------------------------------------------------------------- - ;-------------------------------------- ; ; Message table - Refer to bank 6 for diff --git a/software/asm/rfs_bank6.asm b/software/asm/rfs_bank6.asm index e86fa5d..cd92a35 100644 --- a/software/asm/rfs_bank6.asm +++ b/software/asm/rfs_bank6.asm @@ -276,8 +276,9 @@ PRTSTRE: POP DE ; Help text. Use of lower case, due to Sharp's non standard character set, is not easy, you have to manually code each byte ; hence using upper case. -HELPSCR: DB "4 - 40 col mode.", 00DH - DB "8 - 80 col mode.", 00DH +HELPSCR: DB "0..9 - select RFS Drive.", 00DH + DB "40 - 40 col mode.", 00DH + DB "80 - 80 col mode.", 00DH DB "700 - Select MZ-700 Mode.", 00DH DB "7008 - Select MZ-700 80 col Mode.", 00DH DB "B - toggle keyboard bell.", 00DH @@ -480,6 +481,7 @@ MSGSD2TERR: DB "Copy from SD to Tape Failed", 00DH, 000H MSGT2SDOK: DB "Success, Tape to SD done.", 00DH, 000H MSGSD2TOK: DB "Success, SD to Tape done.", 00DH, 000H MSGNOTZINST:DB "No tranZPUter >=v2 card installed.", 00DH, 000H +MSGNOCMTDIR:DB "Cannot list CMT directory.", 00DH, 000H ALIGN 0EFFFh DB 0FFh diff --git a/software/asm/rfs_mrom.asm b/software/asm/rfs_mrom.asm index be94deb..6bad62d 100644 --- a/software/asm/rfs_mrom.asm +++ b/software/asm/rfs_mrom.asm @@ -178,6 +178,18 @@ ROMBANK9 EQU 9 ; ROMBANK10 EQU 10 ; : CBIOS Bank 3 - SD Card ROMBANK11 EQU 11 ; : CBIOS Bank 4 - Floppy disk controller. +; File types. +OBJCD EQU 001H ; MZF contains a binary object. +BTX1CD EQU 002H ; MZF contains a BASIC program. +BTX2CD EQU 005H ; MZF contains a BASIC program. +TZOBJCD0 EQU 0F8H ; MZF contains a TZFS binary object for page 0. +TZOBJCD1 EQU 0F8H +TZOBJCD2 EQU 0F8H +TZOBJCD3 EQU 0F8H +TZOBJCD4 EQU 0F8H +TZOBJCD5 EQU 0F8H +TZOBJCD6 EQU 0F8H +TZOBJCD7 EQU 0F8H ; MZF contains a TZFS binary object for page 7. ; Address definitions. ; @@ -188,6 +200,7 @@ MROMJMPTBL EQU 00070H ; Fixed ; RFSJMPTABLE EQU UROMADDR + 00080H ; Entry point to the bank switching table. PRTMZF EQU RFSJMPTABLE + 00000H ; Entry point into User ROM for the PRTMZF function. +PRTDBG EQU RFSJMPTABLE + 00003H ; Entry point into User ROM for the PRTDBG function. ; MZFHDRSZ EQU 128 RFSSECTSZ EQU 256 @@ -313,8 +326,10 @@ ISMZF: PUSH BC LD B,FNSIZE ; Maximum of 17 characters, including terminator in filename. ISMZFNXT: LD A,(HL) LD (DE),A - CP 00Dh ; If we find a terminator then this indicates potentially a valid name. - JR Z, ISMZFVFY + CP 00DH ; If we find a terminator then this indicates potentially a valid name. + JR Z, ISMZFNXT3 + CP 000H ; Same applies for NULL terminator. + JR Z, ISMZFNXT3 CP 020h ; >= Space JR C, ISMZFNOT CP 05Dh ; =< ] @@ -324,10 +339,6 @@ ISMZFNXT2: CP 091h ISMZFNXT3: INC DE INC HL DJNZ ISMZFNXT - JR ISMZFNOT ; No end of string terminator, this cant be a valid filename. -ISMZFVFY: LD A,B - CP FNSIZE - JR Z,ISMZFNOT ; If the filename has no length it cant be valid, so loop. ISMZFYES: CP A ; Set zero flag to indicate match. ISMZFNOT: POP HL POP DE @@ -335,14 +346,13 @@ ISMZFNOT: POP HL RET ; B contains Bank to select. + ; D = File sequence number. ; HL contains the Block page address. _DIRMROM: PUSH BC - PUSH DE ; ; Scan MROM Bank ; B = Bank Page ; C = Block in page - ; D = File sequence number. ; LD B,USRROMPAGES ; First 16x2K pages are reserved in User bank. LD A,(ROMCTL) @@ -392,7 +402,6 @@ DIRNXTPG2: LD A,B LD A,(ROMBK2) SCF ; Select the required user bank and Set carry so that the control registers remain enabled. CALL SELUSRBNK - POP DE POP BC RET @@ -403,6 +412,7 @@ _PRTMZF: LD A,(ROMBK2) SCF ; Select the required user bank and Set carry so that the control registers remain enabled. CALL SELUSRBNK CALL PRTMZF + ;CALL PRTDBG LD A,(WRKROMBK2) OR A ; Select the required user bank and Clear carry so that the control registers are disabled. CALL SELUSRBNK @@ -410,7 +420,8 @@ _PRTMZF: LD A,(ROMBK2) ; In: - ; HL = filename + ; HL = filename + ; D = File sequence number. ; Out: ; B = Bank Page file found ; C = Block where found. diff --git a/software/asm/sa1510_hiload.asm b/software/asm/sa1510_hiload.asm index ae00f92..f32a113 100644 --- a/software/asm/sa1510_hiload.asm +++ b/software/asm/sa1510_hiload.asm @@ -61,14 +61,16 @@ STRT1: CALL CLR8 ; Setup display to 40/80 characters depending upon config. IF MODE80C = 0 + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 0 ; Using MROM in Bank 0 = 40 char mode. - LD (DSPCTL), A - LD A, 0 + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A LD (SPAGE), A ; Allow MZ80A scrolling ELSE + LD HL,DSPCTL ; Setup address of display control register latch. LD A, 128 ; Using MROM in Bank 1 = 80 char mode. - LD (DSPCTL), A - LD A, 0FFH + LD E,(HL) ; Dummy operation to enable latch write via multivibrator. + LD (HL), A LD (SPAGE), A ; MZ80K Scrolling in 80 column mode for time being. ENDIF CALL MLDSP diff --git a/software/build.sh b/software/build.sh index 83e028a..43351f1 100755 --- a/software/build.sh +++ b/software/build.sh @@ -1,7 +1,7 @@ #!/bin/bash ROOT_DIR=/dvlp/Projects/dev/github/MZ80A_RFS/ -SW_DIR=${ROO_DIR}/software +SW_DIR=${ROOT_DIR}/software PROCESS_MZF_FILES=0 if [ "x$1" = '-m' ]; then PROCESS_MZF_FILES=1 diff --git a/software/roms/MROM_256.bin b/software/roms/MROM_256.bin index 2506f6a..91a5403 100644 Binary files a/software/roms/MROM_256.bin and b/software/roms/MROM_256.bin differ diff --git a/software/roms/SA-5510_RFS.MZF b/software/roms/SA-5510_RFS.MZF new file mode 100644 index 0000000..2e1da8c Binary files /dev/null and b/software/roms/SA-5510_RFS.MZF differ diff --git a/software/roms/USER_ROM_256.bin b/software/roms/USER_ROM_256.bin index a1b360a..27ded92 100644 Binary files a/software/roms/USER_ROM_256.bin and b/software/roms/USER_ROM_256.bin differ diff --git a/software/roms/cbios.rom b/software/roms/cbios.rom index d895438..80eb860 100644 Binary files a/software/roms/cbios.rom and b/software/roms/cbios.rom differ diff --git a/software/roms/monitor_80c_SA1510_hiload.rom b/software/roms/monitor_80c_SA1510_hiload.rom index 5fecb20..861f069 100644 Binary files a/software/roms/monitor_80c_SA1510_hiload.rom and b/software/roms/monitor_80c_SA1510_hiload.rom differ diff --git a/software/roms/monitor_SA1510_hiload.rom b/software/roms/monitor_SA1510_hiload.rom index 1284d2d..cc6e64f 100644 Binary files a/software/roms/monitor_SA1510_hiload.rom and b/software/roms/monitor_SA1510_hiload.rom differ diff --git a/software/roms/rfs.rom b/software/roms/rfs.rom index a3d5026..ba5b797 100644 Binary files a/software/roms/rfs.rom and b/software/roms/rfs.rom differ diff --git a/software/roms/rfs_mrom.rom b/software/roms/rfs_mrom.rom index 4ed87ac..c7f0e83 100644 Binary files a/software/roms/rfs_mrom.rom and b/software/roms/rfs_mrom.rom differ diff --git a/software/tools/assemble_cpm.sh b/software/tools/assemble_cpm.sh index 0a01f22..2d5a588 100755 --- a/software/tools/assemble_cpm.sh +++ b/software/tools/assemble_cpm.sh @@ -8,7 +8,7 @@ ## This script builds a CPM version compatible with the MZ-80A RFS system. ## ## Credits: -## Copyright: (c) 2020 Philip Smart +## Copyright: (c) 2020-21 Philip Smart ## ## History: January 2020 - Initial script written. ## @@ -37,7 +37,9 @@ ASMDIR=${ROOTDIR}/software/asm ASMTMPDIR=${ROOTDIR}/software/tmp INCDIR=${ROOTDIR}/software/asm/include ROMDIR=${ROOTDIR}/software/roms # Compiled or source ROM files. -MZFDIR=${ROOTDIR}/software/MZF # MZF Format source files. +MZFDIR=${ROOTDIR}/software/MZF/Common # MZF Format source files. +MZBDIR=${ROOTDIR}/software/MZB/Common +BLOCKSIZELIST="128 256" # Go through list and build images. # @@ -58,8 +60,21 @@ do echo "Copy ${ASMDIR}/${f}.obj to ${ROMDIR}/${f}.rom" cp ${ASMTMPDIR}/${f}.obj ${ROMDIR}/${f}.rom else + # Build standard MZF files for inclusion in the SD Drive. echo "Copy ${ASMDIR}/${f}.obj to ${MZFDIR}/${f}.mzf" cp ${ASMTMPDIR}/${f}.obj ${MZFDIR}/${f}.mzf + + # Create sectored versions of file for inclusion into the ROM Drives. + for BLOCKSIZE in ${BLOCKSIZELIST} + do + FILESIZE=$(stat -c%s "${ASMTMPDIR}/${f}.obj") + if [ $((${FILESIZE} % ${BLOCKSIZE})) -ne 0 ]; then + FILESIZE=$(( ((${FILESIZE} / ${BLOCKSIZE})+1 ) * ${BLOCKSIZE} )) + fi + + dd if=/dev/zero ibs=1 count=${FILESIZE} 2>/dev/null | tr "\000" "\377" > "${MZBDIR}/${f}.${BLOCKSIZE}.bin" + dd if="${ASMTMPDIR}/${f}.obj" of="${MZBDIR}/${f}.${BLOCKSIZE}.bin" conv=notrunc 2>/dev/null + done fi fi done diff --git a/software/tools/assemble_rfs.sh b/software/tools/assemble_rfs.sh index 19f8857..9e2dcd6 100755 --- a/software/tools/assemble_rfs.sh +++ b/software/tools/assemble_rfs.sh @@ -9,7 +9,7 @@ ## into a ROM file using the GLASS Z80 assembler. ## ## Credits: -## Copyright: (c) 2018 Philip Smart +## Copyright: (c) 2018-21 Philip Smart ## ## History: August 2018 - Initial script written. ## @@ -38,7 +38,7 @@ ASMDIR=${ROOTDIR}/software/asm ASMTMPDIR=${ROOTDIR}/software/tmp INCDIR=${ROOTDIR}/software/asm/include ROMDIR=${ROOTDIR}/software/roms -MZFDIR=${ROOTDIR}/software/MZB +MZFDIR=${ROOTDIR}/software/MZB/Common # Go through list and build image. # @@ -56,10 +56,10 @@ do then # The object file is binary, no need to link, copy according to build group. if [[ ${BUILDROMLIST} = *"${f}"* ]]; then - echo "Copy ${ASMDIR}/${f}.obj to ${ROMDIR}/${f}.rom" + echo "Copy ${ASMTMPDIR}/${f}.obj to ${ROMDIR}/${f}.rom" cp ${ASMTMPDIR}/${f}.obj ${ROMDIR}/${f}.rom else - echo "Copy ${ASMDIR}/${f}.obj to ${MZFDIR}/${f}.mzf" + echo "Copy ${ASMTMPDIR}/${f}.obj to ${MZFDIR}/${f}.mzf" cp ${ASMTMPDIR}/${f}.obj ${MZFDIR}/${f}.mzf fi fi diff --git a/software/tools/assemble_roms.sh b/software/tools/assemble_roms.sh index 42a2456..2e3a140 100755 --- a/software/tools/assemble_roms.sh +++ b/software/tools/assemble_roms.sh @@ -9,7 +9,7 @@ ## into a ROM file using the GLASS Z80 assembler. ## ## Credits: -## Copyright: (c) 2018 Philip Smart +## Copyright: (c) 2018-21 Philip Smart ## ## History: August 2018 - Initial script written. ## @@ -35,12 +35,14 @@ ASM=glass.jar #BUILDROMLIST="MZ80AFI rfs rfs_mrom IPL monitor_SA1510 monitor_80c_SA1510 monitor_mz-1r12 quickdisk_mz-1e05 quickdisk_mz-1e14 monitor_1Z-013A monitor_80c_1Z-013A" BUILDROMLIST="monitor_SA1510_hiload monitor_80c_SA1510_hiload monitor_80c_SA1510 MZ80AFI monitor_SA1510 monitor_80c_SA1510 monitor_1Z-013A monitor_80c_1Z-013A IPL" #BUILDMZFLIST="hi-ramcheck sharpmz-test" -BUILDMZFLIST="BASIC sharpmz-test" +BUILDMZFLIST="SA-5510_RFS sharpmz-test" ASMDIR=${ROOTDIR}/software/asm ASMTMPDIR=${ROOTDIR}/software/tmp INCDIR=${ROOTDIR}/software/asm/include ROMDIR=${ROOTDIR}/software/roms -MZFDIR=${ROOTDIR}/software/MZF +MZFDIR=${ROOTDIR}/software/MZF/Common +MZBDIR=${ROOTDIR}/software/MZB/Common +BLOCKSIZELIST="128 256" # Go through list and build image. # @@ -58,11 +60,26 @@ do then # The object file is binary, no need to link, copy according to build group. if [[ ${BUILDROMLIST} = *"${f}"* ]]; then - echo "Copy ${ASMDIR}/${f}.obj to ${ROMDIR}/${f}.rom" + echo "Copy ${ASMTMPDIR}/${f}.obj to ${ROMDIR}/${f}.rom" cp ${ASMTMPDIR}/${f}.obj ${ROMDIR}/${f}.rom else - echo "Copy ${ASMDIR}/${f}.obj to ${MZFDIR}/${f}.MZF" + # Build standard MZF files for inclusion in the SD Drive. + echo "Copy ${ASMTMPDIR}/${f}.obj to ${MZFDIR}/${f}.MZF" cp ${ASMTMPDIR}/${f}.obj ${MZFDIR}/${f}.MZF + + # Create sectored versions of file for inclusion into the ROM Drives. + for BLOCKSIZE in ${BLOCKSIZELIST} + do + FILESIZE=$(stat -c%s "${ASMTMPDIR}/${f}.obj") + if [ $((${FILESIZE} % ${BLOCKSIZE})) -ne 0 ]; then + FILESIZE=$(( ((${FILESIZE} / ${BLOCKSIZE})+1 ) * ${BLOCKSIZE} )) + fi + + dd if=/dev/zero ibs=1 count=${FILESIZE} 2>/dev/null | tr "\000" "\377" > "${MZBDIR}/${f}.${BLOCKSIZE}.bin" + dd if="${ASMTMPDIR}/${f}.obj" of="${MZBDIR}/${f}.${BLOCKSIZE}.bin" conv=notrunc 2>/dev/null + done fi fi done + + diff --git a/software/tools/dz80 b/software/tools/dz80 new file mode 100755 index 0000000..dc8f14c Binary files /dev/null and b/software/tools/dz80 differ diff --git a/software/tools/glass-0.5.1.jar b/software/tools/glass-0.5.1.jar new file mode 100755 index 0000000..db07912 Binary files /dev/null and b/software/tools/glass-0.5.1.jar differ diff --git a/software/tools/glass-0.5.jar b/software/tools/glass-0.5.jar new file mode 100755 index 0000000..7cb301c Binary files /dev/null and b/software/tools/glass-0.5.jar differ diff --git a/software/tools/glass.jar b/software/tools/glass.jar index 7cb301c..db07912 100755 Binary files a/software/tools/glass.jar and b/software/tools/glass.jar differ diff --git a/software/tools/make_cpmdisks.sh b/software/tools/make_cpmdisks.sh index e705dd2..8d50721 100755 --- a/software/tools/make_cpmdisks.sh +++ b/software/tools/make_cpmdisks.sh @@ -42,9 +42,9 @@ SOURCEDIRS="CPM_RFS_[1-2] CPM[0-9][0-9]_* CPM_MC_5 CPM_MC_C? CPM_MC_D? CPM_MC_E? ROOTDIR=`realpath ../../MZ80A_RFS` CPM_PATH=${ROOTDIR}/software/CPM ROMDIR=${ROOTDIR}/software/roms # Compiled or source ROM files. -MZFDIR=${ROOTDIR}/software/MZF # MZF Format source files. +MZFDIR=${ROOTDIR}/software/MZF/Common # MZF Format source files. HDRDIR=${ROOTDIR}/software/hdr # MZF Header directory for building images. -MZBDIR=${ROOTDIR}/software/MZB # MZF Binary sectored output files to go into ROMS. +MZBDIR=${ROOTDIR}/software/MZB/Common # MZF Binary sectored output files to go into ROMS. DISKSDIR=${ROOTDIR}/software/disks # MZF Binary sectored output files to go into ROMS. ROMRFSDIR=${ROOTDIR}/software/CPM/ROMRFS/RAW # ROM RFS Drive raw image. FD1M44_PATH=${CPM_PATH}/1M44 diff --git a/software/tools/make_roms.sh b/software/tools/make_roms.sh index 00b495e..f19e454 100755 --- a/software/tools/make_roms.sh +++ b/software/tools/make_roms.sh @@ -11,9 +11,10 @@ ## and flash the images created into the Flast ROMS. ## ## Credits: -## Copyright: (c) 2020 Philip Smart +## Copyright: (c) 2020-21 Philip Smart ## ## History: January 2020 - Initial script written. +## March 2021 - Updates for the RFS v2.1 board. ## ######################################################################################################### ## This source file is free software: you can redistribute it and#or modify @@ -33,41 +34,24 @@ ROOTDIR=../../MZ80A_RFS MZB_PATH=${ROOTDIR}/software/MZB ROM_PATH=${ROOTDIR}/software/roms/ +ROM_LIST_FILE=/tmp/ROMLIST SECTORSIZE=256 CPMDISKMODE=SPLIT +MZFTOOL=${ROOTDIR}/software/tools/mzftool.pl +MONITOR_ROM=/tmp/mrom.rom +USER_ROM_I=/tmp/user.rom +USER_ROM_II=/tmp/user2.rom +USER_ROM_III=/tmp/user3.rom -# Place the RFS rom into the User ROM at the beginning as it contains all the banked pages. -echo "cat ${ROM_PATH}/rfs.rom ${ROM_PATH}/cbios_bank1.rom ${ROM_PATH}/cbios_bank2.rom ${ROM_PATH}/cbios_bank3.rom ${ROM_PATH}/cbios_bank4.rom > /tmp/user.rom" -cat ${ROM_PATH}/rfs.rom ${ROM_PATH}/cbios_bank1.rom ${ROM_PATH}/cbios_bank2.rom \ - ${ROM_PATH}/cbios_bank3.rom ${ROM_PATH}/cbios_bank4.rom \ - > /tmp/user.rom +# Monitor/User ROM 1/2/3 = empty. +> ${MONITOR_ROM} +> ${USER_ROM_I} +> ${USER_ROM_II} +> ${USER_ROM_III} -# User ROM 2/3 = empty. -> /tmp/user2.rom -> /tmp/user3.rom - -# According to flag set above, either put the CPM Disks in the first ROM, or place one in each ROM allowing for better write spread and larger disks. -# -if [ "${CPMDISKMODE}" != "SPLIT" ]; then - # CPM RFS Disks currently only in User ROM. - for f in 1 2 - do - if [ -f ${MZB_PATH}/CPM_RFS_${f}.${SECTORSIZE}.bin ]; then - echo "cat ${MZB_PATH}/CPM_RFS_${f}.${SECTORSIZE}.bin >> /tmp/user.rom" - cat ${MZB_PATH}/CPM_RFS_${f}.${SECTORSIZE}.bin >> /tmp/user.rom - fi - done -else - if [ -f ${MZB_PATH}/CPM_RFS_1.${SECTORSIZE}.bin ]; then - echo "cat ${MZB_PATH}/CPM_RFS_1.${SECTORSIZE}.bin >> /tmp/user.rom" - cat ${MZB_PATH}/CPM_RFS_1.${SECTORSIZE}.bin >> /tmp/user.rom - fi - - if [ -f ${MZB_PATH}/CPM_RFS_2.${SECTORSIZE}.bin ]; then - echo "cat ${MZB_PATH}/CPM_RFS_2.${SECTORSIZE}.bin >> /tmp/user2.rom" - cat ${MZB_PATH}/CPM_RFS_2.${SECTORSIZE}.bin >> /tmp/user2.rom - fi -fi +# Create a file with a list of programs placed into the ROM. This list can then be used by the SD +# card script to ensure no duplication occurs when building the SD RFS program directory. +rm -f ${ROM_LIST_FILE} # Place the monitor roms into the MROM at the beginning for banked page usage. echo "cat ${ROM_PATH}/monitor_SA1510.rom ${ROM_PATH}/monitor_80c_SA1510.rom ${ROM_PATH}/cbios.rom ${ROM_PATH}/rfs_mrom.rom ${ROM_PATH}/monitor_1Z-013A.rom ${ROM_PATH}/monitor_80c_1Z-013A.rom ${ROM_PATH}/IPL.rom ${ROM_PATH}/blank_mrom.rom > /tmp/mrom.rom" @@ -75,8 +59,42 @@ cat ${ROM_PATH}/monitor_SA1510.rom ${ROM_PATH}/monitor_80c_SA1510.rom \ ${ROM_PATH}/cbios.rom ${ROM_PATH}/rfs_mrom.rom \ ${ROM_PATH}/monitor_1Z-013A.rom ${ROM_PATH}/monitor_80c_1Z-013A.rom \ ${ROM_PATH}/IPL.rom ${ROM_PATH}/blank_mrom.rom \ - > /tmp/mrom.rom -GENROM=0 + >> ${MONITOR_ROM} + +# Place the RFS rom into the User ROM at the beginning as it contains all the banked pages. +echo "cat ${ROM_PATH}/rfs.rom ${ROM_PATH}/cbios_bank1.rom ${ROM_PATH}/cbios_bank2.rom ${ROM_PATH}/cbios_bank3.rom ${ROM_PATH}/cbios_bank4.rom > ${USER_ROM_I}" +cat ${ROM_PATH}/rfs.rom ${ROM_PATH}/cbios_bank1.rom ${ROM_PATH}/cbios_bank2.rom \ + ${ROM_PATH}/cbios_bank3.rom ${ROM_PATH}/cbios_bank4.rom \ + >> ${USER_ROM_I} + +# For CPM, to be safe, we manually copy the required files rather than use the list below. The CP/M boot image must be in User ROM 1. +cat ${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin >> ${USER_ROM_I} + +# According to flag set above, either put the CPM Disks in the first ROM, or place one in each ROM allowing for better write spread and larger disks. +# +if [ "${CPMDISKMODE}" != "SPLIT" ]; then + # CPM RFS Disks currently only in User ROM. + for f in 1 2 + do + if [ -f ${MZB_PATH}/Common/CPM_RFS_${f}.${SECTORSIZE}.bin ]; then + echo "cat ${MZB_PATH}/Common/CPM_RFS_${f}.${SECTORSIZE}.bin >> ${USER_ROM_I}" + cat ${MZB_PATH}/Common/CPM_RFS_${f}.${SECTORSIZE}.bin >> ${USER_ROM_I} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + fi + done +else + if [ -f ${MZB_PATH}/Common/CPM_RFS_1.${SECTORSIZE}.bin ]; then + echo "cat ${MZB_PATH}/Common/CPM_RFS_1.${SECTORSIZE}.bin >> ${USER_ROM_I}" + cat ${MZB_PATH}/Common/CPM_RFS_1.${SECTORSIZE}.bin >> ${USER_ROM_I} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + fi + + if [ -f ${MZB_PATH}/Common/CPM_RFS_2.${SECTORSIZE}.bin ]; then + echo "cat ${MZB_PATH}/Common/CPM_RFS_2.${SECTORSIZE}.bin >> ${USER_ROM_II}" + cat ${MZB_PATH}/Common/CPM_RFS_2.${SECTORSIZE}.bin >> ${USER_ROM_II} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + fi +fi # Manually choose the programs you want installed into the ROMS. The files will be first placed into the USER ROM and when full into the # Monitor ROM. Thus order is important if you want a particular program in a particular ROM. @@ -87,35 +105,45 @@ ROM_INCLUDE="" # # Common # -ROM_INCLUDE+="${MZB_PATH}/Common/BASIC.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/CPM223.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/A-BASIC_SA-5510.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/BASIC_SP-5035MC.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/FORTRANSOSZ80.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/MZ700_FORTH1.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/SA-5510_COMPILER.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/XPATCH_5510_V2.2.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/RFSBASIC.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/Common/SEND-1.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/sharpmz-test.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/testtz.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/Common/APOLLO_CHESS_V2A.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/Common/5Z009-1B.MZF:" +#ROM_INCLUDE+="${MZB_PATH}/Common/BASIC.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/Common/CPM223.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/Common/sharpmz-test.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/Common/testtz.${SECTORSIZE}.bin:" # # MZ-80A # +ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SA-6510.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/3-D_MAZE.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/80A_PENCIL.A2_C2.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/80A_PENCIL.A2_S.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/A-BASIC_SA-5510.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/A-BASIC_SA-5510.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ADVENTUREGAME.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/AIR_LANDER.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ALIEN_ATTACK.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ALIEN_ATTACK_MACHINECODE.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ALIEN_EAGLE.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ALLIGATOR.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/APOLLO_CHESS_V2A.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/APOLLO_CHESS_V2A.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BASIC80A.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BASIC_SA-5510.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BASIC.SA-5510.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BASIC_SA-5510.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BASIC.SA-5510.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BLOCKING.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BOUNCING_BALL.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BREAKOUT.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BREAKOUT_MC.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BRICKSTOP.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BYTESAVER_SA5510.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/BYTESAVER_SA5510.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/CELLS_AND_SERPS.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/COLONY.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/COSMIAD-A.${SECTORSIZE}.bin:" @@ -168,9 +196,8 @@ ROM_INCLUDE+="${MZB_PATH}/MZ-80A/QBERT.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/QUEST.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/RACE_CHASE.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/RIBBIT_V2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SA-5510_COMPILER.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SA-5510_KN.COMM.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SA-6510.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SA-5510_COMPILER.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SA-5510_KN.COMM.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SARGON_2.71.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SCRAMBLE_A.${SECTORSIZE}.bin:" #ROM_INCLUDE+="${MZB_PATH}/MZ-80A/SEND-1.${SECTORSIZE}.bin:" @@ -189,7 +216,7 @@ ROM_INCLUDE+="${MZB_PATH}/MZ-80A/TUNNEL_RUN.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/UFO.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/WIGGLY_WORM.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80A/WITCHES.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/XPATCH_5510_V2.2.${SECTORSIZE}.bin:" +#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/XPATCH_5510_V2.2.${SECTORSIZE}.bin:" # # MZ-80K # @@ -198,7 +225,7 @@ ROM_INCLUDE+="${MZB_PATH}/MZ-80A/XPATCH_5510_V2.2.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80K/6502BETRMC.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80K/6502DEMO2MC.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80K/6502DEMOMC.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/8048_CPU_DISAS.MC.${SECTORSIZE}.bin:" +ROM_INCLUDE+="${MZB_PATH}/MZ-80K/8048_CPU_DISAS.MC.${SECTORSIZE}.bin:" #ROM_INCLUDE+="${MZB_PATH}/MZ-80K/A-BASIC_SA-5510.${SECTORSIZE}.bin:" #ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ABENTEUEBASIC.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ADVANCE-GUARDMC.${SECTORSIZE}.bin:" @@ -635,87 +662,95 @@ ROM_INCLUDE+="${MZB_PATH}/MZ-700/KUMA_INTERPR..${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-700/Z80_DESASSEMBLEUR.${SECTORSIZE}.bin:" ROM_INCLUDE+="${MZB_PATH}/MZ-700/ZEN.${SECTORSIZE}.bin:" -# Create a file with a list of programs placed into the ROM. This list can then be used by the SD -# card script to ensure no duplication occurs when building the SD RFS program directory. -ROM_LIST_FILE=/tmp/ROMLIST -rm -f ${ROM_LIST_FILE} +# Set the pointer which indicates the next ROM to be filled with applications. +GENROM=0 IFS=":"; for f in ${ROM_INCLUDE} do if [ -f ${f} ]; then - if (( ${GENROM} == 0 )); then - cat /tmp/user.rom "${f}" > /tmp/tmp.size - FILESIZE=$(stat -c%s "/tmp/tmp.size") - if (( ${FILESIZE} < 524288 )); then - echo "Adding $f to User I Rom" - cat "${f}" >> /tmp/user.rom - basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} - else - GENROM=1 - fi - fi - if (( ${GENROM} == 1 )); then - cat /tmp/mrom.rom "${f}" > /tmp/tmp.size - FILESIZE=$(stat -c%s "/tmp/tmp.size") - if (( ${FILESIZE} < 524288 )); then - echo "Adding $f to Monitor Rom" - cat "${f}" >> /tmp/mrom.rom - basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} - else - GENROM=2 - fi - fi + # Identify type of file. + ${MZFTOOL} --command=IDENT --mzffile=${f} >/dev/null + FILETYPE=$? - if (( ${GENROM} == 2 )); then - cat /tmp/user2.rom "${f}" > /tmp/tmp.size - FILESIZE=$(stat -c%s "/tmp/tmp.size") - if (( ${FILESIZE} < 524288 )); then - echo "Adding $f to User II Rom" - cat "${f}" >> /tmp/user2.rom - basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} - else - GENROM=3 - fi - fi + if [ ${FILETYPE} == 1 ]; then - if (( ${GENROM} == 3 )); then - cat /tmp/user3.rom "${f}" > /tmp/tmp.size - FILESIZE=$(stat -c%s "/tmp/tmp.size") - if (( ${FILESIZE} < 524288 )); then - echo "Adding $f to User III Rom" - cat "${f}" >> /tmp/user3.rom - basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} - else - GENROM=4 + if (( ${GENROM} == 0 )); then + cat ${MONITOR_ROM} "${f}" > /tmp/tmp.size + FILESIZE=$(stat -c%s "/tmp/tmp.size") + if (( ${FILESIZE} < 524288 )); then + echo "Adding $f to Monitor Rom" + cat "${f}" >> ${MONITOR_ROM} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + else + GENROM=1 + fi fi - fi - if (( ${GENROM} == 4 )); then - echo "Limit reached ROMS full, skipping from ${f}..." - break + if (( ${GENROM} == 1 )); then + cat ${USER_ROM_I} "${f}" > /tmp/tmp.size + FILESIZE=$(stat -c%s "/tmp/tmp.size") + if (( ${FILESIZE} < 524288 )); then + echo "Adding $f to User I Rom" + cat "${f}" >> ${USER_ROM_I} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + else + GENROM=2 + fi + fi + + if (( ${GENROM} == 2 )); then + cat ${USER_ROM_II} "${f}" > /tmp/tmp.size + FILESIZE=$(stat -c%s "/tmp/tmp.size") + if (( ${FILESIZE} < 524288 )); then + echo "Adding $f to User II Rom" + cat "${f}" >> ${USER_ROM_II} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + else + GENROM=3 + fi + fi + + if (( ${GENROM} == 3 )); then + cat ${USER_ROM_III} "${f}" > /tmp/tmp.size + FILESIZE=$(stat -c%s "/tmp/tmp.size") + if (( ${FILESIZE} < 524288 )); then + echo "Adding $f to User III Rom" + cat "${f}" >> ${USER_ROM_III} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + else + GENROM=4 + fi + fi + + if (( ${GENROM} == 4 )); then + echo "Limit reached ROMS full, skipping from ${f}..." + break + fi + else + echo "File:${f},Type:${FILETYPE} is not machine code, skipping.." fi else echo "ALERT! File:${f} not found." fi done -if [ -f /tmp/user.rom ]; then - mv /tmp/user.rom ${ROM_PATH}/USER_ROM_${SECTORSIZE}.bin +if [ -f ${USER_ROM_I} ]; then + mv ${USER_ROM_I} ${ROM_PATH}/USER_ROM_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}USER_ROM_${SECTORSIZE}.bin") echo "USER ROM I SIZE (${ROM_PATH}USER_ROM_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" fi -if [ -f /tmp/user2.rom ]; then - mv /tmp/user2.rom ${ROM_PATH}/USER_ROM_II_${SECTORSIZE}.bin +if [ -f ${USER_ROM_II} ]; then + mv ${USER_ROM_II} ${ROM_PATH}/USER_ROM_II_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}USER_ROM_II_${SECTORSIZE}.bin") echo "USER ROM II SIZE (${ROM_PATH}USER_ROM_II_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" fi -if [ -f /tmp/user3.rom ]; then - mv /tmp/user3.rom ${ROM_PATH}/USER_ROM_III_${SECTORSIZE}.bin +if [ -f ${USER_ROM_III} ]; then + mv ${USER_ROM_III} ${ROM_PATH}/USER_ROM_III_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}USER_ROM_III_${SECTORSIZE}.bin") echo "USER ROM III SIZE (${ROM_PATH}USER_ROM_III_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" fi -if [ -f /tmp/mrom.rom ]; then - mv /tmp/mrom.rom ${ROM_PATH}/MROM_${SECTORSIZE}.bin +if [ -f ${MONITOR_ROM} ]; then + mv ${MONITOR_ROM} ${ROM_PATH}/MROM_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}/MROM_${SECTORSIZE}.bin") echo "MROM SIZE (${ROM_PATH}/MROM_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" fi diff --git a/software/tools/make_sdcard.sh b/software/tools/make_sdcard.sh index 0b8f1fa..62f89e5 100755 --- a/software/tools/make_sdcard.sh +++ b/software/tools/make_sdcard.sh @@ -10,7 +10,7 @@ ## ie. + .. . ## ## Credits: -## Copyright: (c) 2020 Philip Smart +## Copyright: (c) 2020-21 Philip Smart ## ## History: March 2020 - Initial script written. ## March 2021 - Updated the file list and filter out files stored in the ROM Drives. @@ -36,419 +36,190 @@ TOOL_DIR=${ROOTDIR}/software/tools IMAGE_DIR=${ROOTDIR}/software/roms CPM_DIR=${ROOTDIR}/software/CPM/SDC16M/RAW SDTOOL=${TOOL_DIR}/sdtool -RFS_IMAGE_FILE=${IMAGE_DIR}/SHARP_MZ80A_RFS_IMAGE_1.img +RFS_IMAGE_FILE=${IMAGE_DIR}/SHARP_MZ80A_RFS_IMAGE_ +RFS_IMAGE_EXT=img +RFS_IMAGE_DRIVES=10 +RFS_IMAGE_DRIVE_LIST=`seq -s ' ' 0 $((${RFS_IMAGE_DRIVES}-1))` CPM_IMAGE_FILES="SDCDISK0.RAW SDCDISK1.RAW SDCDISK2.RAW SDCDISK3.RAW SDCDISK4.RAW SDCDISK5.RAW SDCDISK6.RAW" SD_IMAGE_FILE=${IMAGE_DIR}/SHARP_MZ80A_RFS_CPM_IMAGE_1.img ROM_LIST_FILE=/tmp/ROMLIST +MZFTOOL=${ROOTDIR}/software/tools/mzftool.pl -# Create the initial RFS image. -${SDTOOL} --image ${RFS_IMAGE_FILE} --create -if [ $? != 0 ]; then - echo "Failed to create initial RFS Image, aborting." +# Function to add a given file/type into an RFS Drive. +function addFileToImage +{ + # Parameters. + local DRIVENO=$1 + local FILETYPE=$2 + local FILTER=$3 + local FILENAME=$4 + local result=0 + + # Identify type of file. + ${MZFTOOL} --command=IDENT --mzffile=${FILENAME} >/dev/null + ft=$? + + # Use the File Type and ROM File List to filter out duplicates. + # + if [ ${FILETYPE} == $ft ]; then + grep `basename "${FILENAME}" .MZF` ${ROM_LIST_FILE} > /dev/null + if [ $? -eq 1 -o ${FILTER} -eq 0 ]; then + + # Filter out CPM ROM Drive images. + if [[ "${FILENAME}" != *CPM22-DRV* ]] && [[ "${FILENAME}" != *CPM_RFS_* ]]; then + echo "Adding ${FILENAME} to RFS Drive:${DRIVENO}..." + ${SDTOOL} --image ${RFS_IMAGE_FILE}${DRIVENO}.${RFS_IMAGE_EXT} --add ${FILENAME} + result=$? + if [ $result -ne 0 ]; then + if [ $result = 60 ]; then + result=10 + else + echo "Failed to add:${FILENAME} into the RFS Drive Image:${RFS_IMAGE_FILE}${DRIVENO}.${RFS_IMAGE_EXT}, aborting." + result=11 + fi + fi + fi + fi + else + result=1 + fi + return $result +} + +# Function to add a directory of files belonging to a machine type to a given RFS image. Machine code files are added to the requested +# image, BASIC are added onto drives 7..9 according to type. +# +function addMachineFiles +{ + # Parameters. + local DRIVENO=$1 + local SRCDIR=$2 + local FILTER=$3 + local result=0 + + for f in `(cd ${MZF_PATH}/${SRCDIR}; ls *.MZF)` + do + addFileToImage ${DRIVENO} 1 ${FILTER} ${MZF_PATH}/${SRCDIR}/${f} + result=$? + if [[ ${result} -eq 1 ]] && [[ "${SRCDIR}" = "MZ-80A" ]]; then + addFileToImage 5 2 ${FILTER} ${MZF_PATH}/${SRCDIR}/${f} + result=$? + fi + if [[ ${result} -eq 1 ]] && [[ "${SRCDIR}" = "MZ-80K" ]]; then + addFileToImage 6 2 ${FILTER} ${MZF_PATH}/${SRCDIR}/${f} + result=$? + fi + if [[ ${result} -eq 1 ]] && [[ "${SRCDIR}" = "MZ-700" ]]; then + addFileToImage 7 5 ${FILTER} ${MZF_PATH}/${SRCDIR}/${f} + result=$? + fi + if [[ ${result} -eq 1 ]] && [[ "${SRCDIR}" = "MZ-800" ]]; then + addFileToImage 7 5 ${FILTER} ${MZF_PATH}/${SRCDIR}/${f} + result=$? + fi + if [ ${result} -ne 0 -a ${result} -ne 1 ]; then + echo "Failed to add file:${MZF_PATH}/${SRCDIR}/${f} to Drive:0, aborting for manual check." + result=1 + fi + done + return $result +} + +# Initialise the target SD image. +> ${SD_IMAGE_FILE} + +# Create the initial RFS drive images. +for d in ${RFS_IMAGE_DRIVE_LIST} +do + ${SDTOOL} --image ${RFS_IMAGE_FILE}${d}.${RFS_IMAGE_EXT} --create + if [ $? != 0 ]; then + echo "Failed to create RFS Drive Image:${RFS_IMAGE_FILE}${d}.${RFS_IMAGE_EXT}, aborting." + exit 1 + fi +done + +# There are upto 10 RFS Drives so the software is apportioned as follows: +# Drive Description +# ----- ----------- +# 0 Common and MZ-80A Machine Code programs. +# 1 MZ-80K Machine Code programs. +# 2 MZ-700 Machine Code programs. +# 3 MZ-800 Machine Code programs. +# 3 MZ-1500 Machine Code programs. +# 4 MZ-2000 Machine Code programs. +# 4 MZ-80B Machine Code programs. +# 5 BASIC programs, type 2 (MZ80A) +# 6 BASIC programs, type 2 (MZ80K) +# 7 BASIC programs, type 5 (MZ700/800) +# 8 Other programs. +# 9 Other programs. +# +# Files are filtered out if they already exist in the Flash RAMS. The script make_roms.sh creates +# a list of files it adds into the Flash RAMS which is used by this script. +# NB: A maximum of 256 files can be added due to the limit of the RFS directory. +# +addMachineFiles 0 Common 0 +RESULT=$? +if [ ${RESULT} -eq 0 ]; then + addMachineFiles 0 MZ-80A 1 + RESULT=$? +fi +if [ ${RESULT} -eq 0 ]; then + addMachineFiles 1 MZ-80K 1 + RESULT=$? +fi +if [ ${RESULT} -eq 0 ]; then + addMachineFiles 2 MZ-700 1 + RESULT=$? +fi +if [ ${RESULT} -eq 0 ]; then + addMachineFiles 3 MZ-800 1 + RESULT=$? +fi +if [ ${RESULT} -eq 0 ]; then + addMachineFiles 3 MZ-1500 1 + RESULT=$? +fi +if [ ${RESULT} -eq 0 ]; then + addMachineFiles 4 MZ-2000 1 + RESULT=$? +fi +if [ ${RESULT} -eq 0 ]; then + addMachineFiles 4 MZ-80B 1 + RESULT=$? +fi +if [ ${RESULT} -ne 0 ]; then + echo "Aborting due to ealier errors..." exit 1 fi -# Manually choose the programs you want installed into the RFS image. The files will be first placed into -# the directory in the order they appear here, which initially is alphabetic order. -# -# NB: A maximum of 256 files can be added due to the limit of the RFS directory. -# -RFS_INCLUDE= -# -# Current Common files. -# -RFS_INCLUDE+="${MZF_PATH}/Common/BASIC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/Common/CPM223.MZF:" -RFS_INCLUDE+="${MZF_PATH}/Common/cpm22.MZF:" -RFS_INCLUDE+="${MZF_PATH}/Common/SEND-1.MZF:" -RFS_INCLUDE+="${MZF_PATH}/Common/sharpmz-test.MZF:" -RFS_INCLUDE+="${MZF_PATH}/Common/testtz.MZF:" -# -# MZ-80A files. -# -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/3-D_MAZE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/80A_PENCIL.A2_C2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/80A_PENCIL.A2_S.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/A-BASIC_SA-5510.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/ADVENTUREGAME.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/AIR_LANDER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/ALIEN_ATTACK_MACHINECODE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/ALIEN_ATTACK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/ALIEN_EAGLE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/ALLIGATOR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/APOLLO_CHESS_V2A.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BASIC80A.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BASIC_SA-5510.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BASIC.SA-5510.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BLOCKING.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BOUNCING_BALL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BREAKOUT_MC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BREAKOUT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BRICKSTOP.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/BYTESAVER_SA5510.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/CELLS_AND_SERPS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/COLONY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/COSMIAD-A.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/COSMIAD-K.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/CURSEDCHAMBER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DCS_MZ80A_APPEND.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DCS_MZ80A_RENUM.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DEFENDER(2).MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DEFENDER_BIZZARRI.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DEFENDER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DIAMOND.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DIGGER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DOG_AND_FLEA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DOG_STAR_2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/DUCK_SHOOT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/EPIDEMIC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/ESCAPE_FORCE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/ESCAPE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/FLYING_MISSION.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/FOREST_OF_DOOM.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/FRUIT_MACHINE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/GALAXY_INVADERS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/GREEDY_GREMLINS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/HANGMAN2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/HORSE_RACE2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/HUCALC_80A_C2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/HUCALC_80A_M.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/HUCALC_80A_S.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/LAND_ESCAPE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/LASER_DEFENCE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/LE_MANS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/LUDO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/LUNARLANDER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/MAD_MAX_2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/MAN-HUNT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/M_C_BREAKOUT_2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/M_C_RACE_CHASE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/MINOTAUR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/MISSILE_ATTACK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/MUNCHERS_2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/MZ80A_BASIC.DSK:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/MZ-80A_GALACTIC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/NAVVY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/NEW_INVADERS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/NOUGHTS_CROSSES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/NUMBERCRUNCH.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/OBSTACLES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/PINBALL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/PUCKMAN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/QBERT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/QUEST.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/RACE_CHASE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/RIBBIT_V2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SA-5510_COMPILER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SA-5510_KN.COMM.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SA-6510.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SARGON_2.71.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SCRAMBLE_A.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SERENDIPITY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SKI_RUN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SPACE_COMBAT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SPACE_FIGHTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SPACE_INVADERS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SPOOKS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/STARSHIP_MK2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/STAR_WARS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/SUPER_TILT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/THE_LILY_POND.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/THE_MEANIES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/TUNNEL_RUN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/UFO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/WIGGLY_WORM.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/WITCHES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-80A/XPATCH_5510_V2.2.MZF:" -# -# MZ-700 files. -# -RFS_INCLUDE+="${MZF_PATH}/MZ-700/1Z-013B.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/2Z009E.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/3-D_CAR_RACE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/3-D_GRAPHIKPAKET.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/3DMUEHLE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/3D-WAY_OUT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/6502_BETRIEBSSYS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/700_POKER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ACE_RACER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ADVANCEDCHESS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/AIRBUS_A_310.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ALIENS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/AMITYVILLE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ANTARES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ANTHILL_RAIDER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/APOLLO2_8-200785.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/APOLLO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/APPRENTISSAGE_NOMBRES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ASTEROID_BELT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ASTRO-BLASTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ATTACK-A-TANK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/AUTO_RUN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BACKGAMMON.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BAS700TUTORIAL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BASEZERO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BASIC_1Z-013B.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BASIC_700-VERS.4.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BASIC_MZ-5Z008_2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BASIC_MZ-5Z008.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BATTLE_GAME.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BIO-700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BLASTOFF.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BLOKTEKENINGEN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BOMBERMAN_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BOULDER_DASH.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/BREUKEN_1.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CADRE_DIABOLIQUE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CALENDRIER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CANNON_BALL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CATACOMBES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CATERPILLAR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CENTRO-ANL.DISK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CENTRO-ANLEITUNG.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CIRCUS_STAR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CLUB_GOLF.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/C-MASTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CODEWOORD.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/COMMANDO_PLAIN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/COMPETITIE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/COMPUT-A-SLOT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/COMPUTERTEKENEN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CONNECT_FOUR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CONVERTER_A_700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CONVEYOR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/COPY-CF.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/COSMO_BLASTER_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CRIBBAGE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CROAKER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/CYFAX.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DATABASE_FILER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DATEI_UNIVERSAL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DBP-701.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DELETE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DEMASASO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DEMO-LISSAJOU.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DEMO_SIN-BERG.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DESCENTE_AUX_ENFERS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DESTRUCTEURS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DOMINATION.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/DONKEY_GORILLA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/EXPLODING_ATOMS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/EXPRESS_BAS_700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/F1200.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FANTASTIC_GROVE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FDCOPY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FD_EDITOR_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FIGHTER_COMMAND.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FIRE!!!.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FISHERMAN_FRED.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FLUGSIM_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FLUGSIMULATOR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FORTRANSOSZ80.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/FULL_SPEED.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GATE-CRASHER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GDP9-BA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GEBOORTEDATUM.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GLOBAL_WAR_3.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GLOBULE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GOBBLER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GREEDY_GREMLINS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GRID.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/GUERRE_SPATIALE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/HDC_ORGEL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/HP4TMZ7L.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/HP4TMZ7.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/HUNCHY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/IMPOSSIBLE_MISSION.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ISOLA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/JEUX_INTERGALACTIQUES.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/JUMPING_RUNNER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/JUNGLE-JINKS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KALENDER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KAMERTJE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KASBOEK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/K-BASIC_V.5.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KENTUCKY_DERBY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KNIFORTH.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KNIGHT'S_CASTLE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KNIGHTS_UFO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KP_DBASIC.800B.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/K.S.M._PT._1.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/K.S.M._PT._2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/K.S.M._PT._3.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KUMA_INTERPR..MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KUP80Z354.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/KUP80Z355.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/LADY-BUG.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/LAND_ESCAPE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/LE_MANS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/LIGHTNING_PATROL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/LIJNENSPEL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/LOGO_V30.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MAC_PAC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MAD_MAZE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MAN-HUNT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MANZA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MASTERMIND.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MATH_PENDU.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MAZE_ESCAPE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MESSING.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MISSION_ALPHA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MISSION_A.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MISSION_DELTA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ML-SP_8002_BBG.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MOLEATTA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MONITOR3.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MONITOR6.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MONITOR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MORPION.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MORPIUS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MOTY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MOVING_SEARCHER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MUCMAC700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MUNROE_MANOR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MUSIC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MUSIQUE_SUISSE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ-1P01.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ-2Z009.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ700BAS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ-700_DEMO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ700_FORTH1.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ-700_FORTH.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ-700_KLAVIER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/MZ-700_PLOT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NAKAMOTO_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NAKAMOTO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NIBBLER_PART1.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NIBBLER_PART2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NIGHTMARE_PARK2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NIGHTMARE_PARK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NIGHTM_PRK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/NITE_FLITE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/OCTOPUSSY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PAC-MAN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PAINFUL_MAN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PANIQUE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PARA_SHOOT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PASCAL_SP-4015_C.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PASCAL_SP-4015.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PATROL_ALPHA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PCGAID_EUROPE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PCGAID.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PCG_BASIC_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PCG_BASIC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PENDU.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PRINTERFIGUREN1.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PUISSANCE_4.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/PUZZLE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/QD_BAS_5Z008_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/QDCOPY.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/QD-PASCAL_C.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/QUIXI.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/REALFORT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/REBOND.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/RESCUE_PLANE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/REVERSE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ROLLSROYCE1906.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ROUND_SHOOT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SAFE-CRACKER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/S-BASIC-CENT-2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/S-BASIC-COMP-CNT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/S-BASIC-COMPILER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/S-BASIC-COMPILER-ORIGINAL.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/S-BASICODE_2.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SCHACH2_MZ700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SCHACH700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SH7CED1.3G.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SHOGUN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SKY_CHAOS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/S-MASTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SNAKE-AND-SNAKE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SOUDARD.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SOUTH_PACIFIC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SPACE_FIGHTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SPACE_GUERILLA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SPACE_INVADERS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SPA_DATA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SQUASH_700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/STAR_FIGHTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/STARTREK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/STKEEPER2BAS700A.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/STRIP_POKER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUBMARINE_SHOOTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUB-MONITOR-700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUICIDE_RUN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUPER-BANDIT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUPER_BIORHYTHM.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUPER_HELICOPTER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUPER_PUCK-MAN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUPER_SPY_OBJ.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUPERTYPEN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUPER_VRAC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUTAM1F.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUTAMC9.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUTAPEBA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SUTAPEMO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/SYSTEME_EXPERT.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TAPEWORM.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TBASIC_BM_PK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/T-BASIC_(UITLEG).MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TELEFONTARIEVEN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/THREE_CARD_BRAG.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TOMAHAWK.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TRACKER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TRANS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TRUCKER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/TYPEN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/UFO.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/UNI700BASIC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/URANIA_II.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/URAS-700.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/VICIOUS_VIPER.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/VOL_676.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/VRAGENDMAKEN.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/WIZARD_CASTLE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/WONDERHOUSE.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/WOOKYA.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/WOOKYB.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/XANAGRAMS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/XBC_F_1_02.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/XBC.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/YAMS.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/Z80_DESASSEMBLEUR.MZF:" -RFS_INCLUDE+="${MZF_PATH}/MZ-700/ZEN.MZF:" -# -# -# -IFS=":"; for f in ${RFS_INCLUDE} +# Confirmation listing of the drives and contents. +IFS=" "; for d in ${RFS_IMAGE_DRIVE_LIST} do - # Use the ROM File List to filter out duplicates. - # - grep `basename "${f}" .MZF` ${ROM_LIST_FILE} > /dev/null - if [ $? = 1 ]; then - echo "Adding ${f}..." - ${SDTOOL} --image ${RFS_IMAGE_FILE} --add ${f} - RESULT=$? - if [ $RESULT != 0 ]; then - if [ $RESULT = 60 ]; then - break; - fi - echo "Failed to add:${f} into the RFS Image, aborting." - exit 2 - fi - fi + echo "RFS Drive: ${RFS_IMAGE_FILE}${d}.${RFS_IMAGE_EXT}" + ${SDTOOL} --image ${RFS_IMAGE_FILE}${d}.${RFS_IMAGE_EXT} --list-dir done -${SDTOOL} --image ${RFS_IMAGE_FILE} --list-dir # Concatenate the RFS and CPM images to make a final SD card image. # -echo "Adding RFS Image:$RFS_IMAGE_FILE} to start of SD Card image." -cat ${RFS_IMAGE_FILE} > ${SD_IMAGE_FILE} +IFS=" "; for d in ${RFS_IMAGE_DRIVE_LIST} +do + echo "Adding RFS Drive Image:${RFS_IMAGE_FILE}${d}.${RFS_IMAGE_EXT} to start of SD Card image." + cat ${RFS_IMAGE_FILE}${d}.${RFS_IMAGE_EXT} >> ${SD_IMAGE_FILE} +done +# Pad the file to 0x10000000 before adding CPM images. This takes into account the RFS Drives plus padding to a round address. +truncate -s 268435456 ${SD_IMAGE_FILE} IFS=" "; for f in ${CPM_IMAGE_FILES} do echo "Adding CPM Drive Image:${f} to SD Card image." cat ${CPM_DIR}/${f} >> ${SD_IMAGE_FILE} done echo "SD Card image generated, file:${SD_IMAGE_FILE}" +echo "" +echo "" +echo "Using a suitable tool, such as dd under Linux, copy the SD Card image onto an SD Card." +echo "ie. dd if=${SD_IMAGE_FILE} of=/dev/sdd bs=512" +echo "No disk partitioning is needed as the SDFS image starts at sector 0 on the SD Card." +echo "Once the image has been copied, place into the SD Card Reader on the RFS Board." exit 0 diff --git a/software/tools/mzftool.pl b/software/tools/mzftool.pl index aa70ada..996b588 100755 --- a/software/tools/mzftool.pl +++ b/software/tools/mzftool.pl @@ -10,9 +10,12 @@ ## Also useful to add headers to homegrow machine code programs. ## ## Credits: -## Copyright: (c) 2018 Philip Smart +## Copyright: (c) 2018-2021 Philip Smart ## ## History: August 2018 - Initial script written. +## March 2021 - Updated to fix MZF header files. Some programs have encoded ASCII +## into the header along with other strange characters, these need to +## be in Sharp ASCII format. ## ######################################################################################################### ## This source file is free software: you can redistribute it and#or modify @@ -32,8 +35,8 @@ # Title and Versioning. # $TITLE = "MZF Tool"; -$VERSION = "0.1"; -$VERSIONDATE = "25.09.2018"; +$VERSION = "0.2"; +$VERSIONDATE = "23.03.2021"; # Global Modules. # @@ -82,6 +85,407 @@ $errorMailSubject = "MZF Tool Errors..."; $PERL = "perl"; $PERLFLAGS = ""; +# ASCII to Sharp Display Code mapping table. +@ASCIIToSharpCode = ( + 0xCC, # NUL '\0' (null character) + 0xE0, # SOH (start of heading) + 0xF2, # STX (start of text) + 0xF3, # ETX (end of text) + 0xCE, # EOT (end of transmission) + 0xCF, # ENQ (enquiry) + 0xF6, # ACK (acknowledge) + 0xF7, # BEL '\a' (bell) + 0xF8, # BS '\b' (backspace) + 0xF9, # HT '\t' (horizontal tab) + 0xFA, # LF '\n' (new line) + 0xFB, # VT '\v' (vertical tab) + 0xFC, # FF '\f' (form feed) + 0xFD, # CR '\r' (carriage ret) + 0xFE, # SO (shift out) + 0xFF, # SI (shift in) + 0xE1, # DLE (data link escape) + 0xC1, # DC1 (device control 1) + 0xC2, # DC2 (device control 2) + 0xC3, # DC3 (device control 3) + 0xC4, # DC4 (device control 4) + 0xC5, # NAK (negative ack.) + 0xC6, # SYN (synchronous idle) + 0xE2, # ETB (end of trans. blk) + 0xE3, # CAN (cancel) + 0xE4, # EM (end of medium) + 0xE5, # SUB (substitute) + 0xE6, # ESC (escape) + 0xEB, # FS (file separator) + 0xEE, # GS (group separator) + 0xEF, # RS (record separator) + 0xF4, # US (unit separator) + 0x00, # SPACE + 0x61, # ! + 0x62, # " + 0x63, # # + 0x64, # $ + 0x65, # % + 0x66, # & + 0x67, # ' + 0x68, # ( + 0x69, # ) + 0x6B, # * + 0x6A, # + + 0x2F, # , + 0x2A, # - + 0x2E, # . + 0x2D, # / + 0x20, # 0 + 0x21, # 1 + 0x22, # 2 + 0x23, # 3 + 0x24, # 4 + 0x25, # 5 + 0x26, # 6 + 0x27, # 7 + 0x28, # 8 + 0x29, # 9 + 0x4F, # : + 0x2C, # ; + 0x51, # < + 0x2B, # = + 0x57, # > + 0x49, # ? + 0x55, # @ + 0x01, # A + 0x02, # B + 0x03, # C + 0x04, # D + 0x05, # E + 0x06, # F + 0x07, # G + 0x08, # H + 0x09, # I + 0x0A, # J + 0x0B, # K + 0x0C, # L + 0x0D, # M + 0x0E, # N + 0x0F, # O + 0x10, # P + 0x11, # Q + 0x12, # R + 0x13, # S + 0x14, # T + 0x15, # U + 0x16, # V + 0x17, # W + 0x18, # X + 0x19, # Y + 0x1A, # Z + 0x52, # [ + 0x59, # \ '\\' + 0x54, # ] + 0xBE, # ^ + 0x3C, # _ + 0xC7, # ` + 0x81, # a + 0x82, # b + 0x83, # c + 0x84, # d + 0x85, # e + 0x86, # f + 0x87, # g + 0x88, # h + 0x89, # i + 0x8A, # j + 0x8B, # k + 0x8C, # l + 0x8D, # m + 0x8E, # n + 0x8F, # o + 0x90, # p + 0x91, # q + 0x92, # r + 0x93, # s + 0x94, # t + 0x95, # u + 0x96, # v + 0x97, # w + 0x98, # x + 0x99, # y + 0x9A, # z + 0xBC, # { + 0x80, # | + 0x40, # } + 0xA5, # ~ + 0xC0 # DEL +); + +# Sharp Display Code to ASCII mapping tables. +# +@SharpCodeToASCII = ( + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0x0F + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0x1F + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + 0x27, + 0x28, + 0x29, + 0x2A, + 0x2B, + 0x2C, + 0x2D, + 0x2E, + 0x2F, # 0x2F + 0x30, + 0x31, + 0x32, + 0x33, + 0x34, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + 0x3A, + 0x3B, + 0x3C, + 0x3D, + 0x3E, + 0x3F, # 0x3F + 0x40, + 0x41, + 0x42, + 0x43, + 0x44, + 0x45, + 0x46, + 0x47, + 0x48, + 0x49, + 0x4A, + 0x4B, + 0x4C, + 0x4D, + 0x4E, + 0x4F, # 0x4F + 0x50, + 0x51, + 0x52, + 0x53, + 0x54, + 0x55, + 0x56, + 0x57, + 0x58, + 0x59, + 0x5A, + 0x5B, + 0x5C, + 0x5D, + 0x5E, + 0x5F, # 0x5F + 0x20, # 0x60 + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0x6F + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0x7F + + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0x8F + + 0x20, + 0x20, + 0x65, + 0x20, + 0x20, + 0x20, + 0x74, + 0x67, + 0x68, + 0x20, + 0x62, + 0x78, + 0x64, + 0x72, + 0x70, + 0x63, # 0x9F + + 0x71, + 0x61, + 0x7A, + 0x77, + 0x73, + 0x75, + 0x69, + 0x20, + 0x4F, # O with umlaut + 0x6B, + 0x66, + 0x76, + 0x20, + 0x75, # u with umlaut + 0x42, # Strasse S + 0x6A, # 0XAF + + 0x6E, + 0x20, + 0x55, # U with umlaut + 0x6D, + 0x20, + 0x20, + 0x20, + 0x6F, + 0x6C, + 0x41, # A with umlaut + 0x6F, # o with umlaut + 0x61, # a with umlaut + 0x20, + 0x79, + 0x20, + 0x20, # 0xBF + + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0XCF + + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0XDF + + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, # 0XEF + + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20 # 0XFF +); + ################################################################################## # GENERIC SUB-ROUTINES @@ -428,10 +832,10 @@ sub argOptions print STDOUT "Usage: $PROGNAME [] \n"; print STDOUT " commands= --help |\n"; print STDOUT " --verbose |\n"; - print STDOUT " --command= |\n"; - print STDOUT " --mzffile= {IDENT|ADDHEADER|DELHEADER} |\n"; + print STDOUT " --command= |\n"; + print STDOUT " --mzffile= {IDENT|ADDHEADER|DELHEADER|FIXHEADER}|\n"; print STDOUT " --srcfile= {ADDHEADER} |\n"; - print STDOUT " --dstfile= {DELHEADER} |\n"; + print STDOUT " --dstfile= {DELHEADER|FIXHEADER} |\n"; print STDOUT " --filename= (ADDHEADER} |\n"; print STDOUT " --loadaddr= (ADDHEADER} |\n"; print STDOUT " --execaddr= (ADDHEADER} |\n"; @@ -447,6 +851,22 @@ sub argOptions exit( $exitCode ); } +# Method to map an ASCII standard character, as a value, into a Sharp ASCII value. +# +sub getSharpASCIICode +{ + local($matchChar) = @_; + $matchcnt = 0; + foreach (@SharpCodeToASCII) + { + if($matchChar eq $_) + { + return($matchcnt); + } + $matchcnt = $matchcnt + 1; + } + return(0xF0); +} ################################################################################## # END OF GENERIC SUB-ROUTINES @@ -487,7 +907,7 @@ $comment = ""; GetOptions( "debug=n" => \$debugMode, # Debug Mode? "verbose" => \$verbose, # Show details? "mzffile=s" => \$mzfFile, # MZF file. - "dstfile=s" => \$dstFile, # Destination file (for header removal). + "dstfile=s" => \$dstFile, # Destination file (for header removal or MZF file with updated header). "srcfile=s" => \$srcFile, # Source file (for header adding). "filename=s" => \$fileName, # Filename to insert into header. "loadaddr=s" => \$s_loadAddr, # Tape load address. @@ -522,7 +942,7 @@ if($s_tapeType ne "") # Verify command. # -if($command eq "IDENT" || $command eq "ADDHEADER" || $command eq "DELHEADER") +if($command eq "IDENT" || $command eq "ADDHEADER" || $command eq "DELHEADER" || $command eq "FIXHEADER") { 1; } @@ -536,10 +956,14 @@ if($command eq "ADDHEADER" && ($fileName eq "" || !defined($loadAddr) || !define { argOptions(3, "ADDHEADER command requires the following parameters to be provided: --filename, --loadaddr, --execaddr, --tapetype\n",$ERR_BADARGUMENTS); } +if($command eq "FIXHEADER" && $dstFile eq "") +{ + argOptions(3, "FIXHEADER command requires the following parameter to be provided: --dstfile\n",$ERR_BADARGUMENTS); +} # For ident or delete header commands, we need to open and read the mzf file. # -if(($command eq "IDENT" || $command eq "DELHEADER") && defined($mzfFile) && $mzfFile ne "") +if(($command eq "IDENT" || $command eq "DELHEADER" || $command eq "FIXHEADER") && defined($mzfFile) && $mzfFile ne "") { # If defined, can we open it? # @@ -562,8 +986,10 @@ if(($command eq "IDENT" || $command eq "DELHEADER") && defined($mzfFile) && $mzf # Once the MZF is in memory, analyse the details and output. # - $mzf_header = pack('a'x128, @MZF); - ($mzf_type, $mzf_filename, $mzf_size, $mzf_loadaddr, $mzf_execaddr, $mzf_comment) = unpack 'c1 a17 v4 v4 v4 a104', $mzf_header; + $mzf_header = pack('a'x24, @MZF); + ($mzf_type, $mzf_filename, $mzf_size, $mzf_loadaddr, $mzf_execaddr) = unpack 'c1 a17 v4 v4 v4 a104', $mzf_header; + # Comment is unpacked seperately as there appears to be a perl bug where the first char becomes 0 when unpacking in the above list. + $mzf_comment = pack('a'x104, @MZF[24..128]); $mzf_filename =~ s/\r|\n//g; # Output detail if requested. @@ -578,14 +1004,50 @@ if(($command eq "IDENT" || $command eq "DELHEADER") && defined($mzfFile) && $mzf printf STDOUT "Comment : %s\n", $mzf_comment; } - # For the DELHEADER command, a destination needs to be provided and opened. - if($command eq "DELHEADER" && defined($dstFile) && $dstFile ne "") + # For the DELHEADER/FIXHEADER command, a destination needs to be provided and opened. + if(($command eq "DELHEADER" || $command eq "FIXHEADER") && defined($dstFile) && $dstFile ne "") { if( ! open(DSTFILE, ">".$dstFile) ) { argOptions(1, "Cannot open the destination file: $dstFile.\n",$ERR_BADFILENAME); } } + + # For the FIXHEADER, look at the filename and correct if it doesnt use Sharp ASCII. + # + if($command eq "FIXHEADER") + { + # Remove start and trailing space. + $mzf_filename = trim($mzf_filename); + + # Go through the string and convert the stored filename to Sharp format. + $new_mzf_filename = ""; + for $idx (0..length($mzf_filename)-1) + { + $hdrChar = substr($mzf_filename, $idx, 1); + $mapIdx = ord($hdrChar); + if($hdrChar =~ m/[^a-z]/) + { + $new_mzf_filename = $new_mzf_filename . pack("C1", $mapIdx); + } else + { + $new_mzf_filename = $new_mzf_filename . pack("C1", getSharpASCIICode($mapIdx)); + } + } + + # Remove start and trailing space. + $new_mzf_filename = trim($new_mzf_filename); + + # Pad to length of filename field with NULL bytes. + for $idx (length($new_mzf_filename)..17-1) + { + $new_mzf_filename = $new_mzf_filename . pack("C1", 0x00); + } + + # Repack the header with the updated filename. + $new_mzf_header = pack('c1 a17 v v v', $mzf_type, $new_mzf_filename, $mzf_size, $mzf_loadaddr, $mzf_execaddr); + $new_mzf_header .= pack('a104', $mzf_comment) ; + } } elsif($command eq "ADDHEADER" && defined($mzfFile) && $mzfFile ne "") { @@ -660,6 +1122,25 @@ elsif($command eq "DELHEADER") foreach my $byte (@MZF) { if($cnt++ >= 128) { print DSTFILE $byte; } } close DSTFILE; } +elsif($command eq "FIXHEADER") +{ + # Can we create the destination file, ie. the file containing the MZF program with a corrected header? + # + if( ! open(DSTFILE, ">".$dstFile) ) + { + argOptions(1, "Cannot open the destination file: $dstFile.\n",$ERR_BADFILENAME); + } + + # Strip off the old header. + splice(@MZF, 0, 128); + + # Now add the new header and source data into the destination file. + print DSTFILE $new_mzf_header; + foreach my $byte (@MZF) { print DSTFILE $byte; } + + # All done. + close DSTFILE; +} # Exit code is the type of MZF file. exit $mzf_type; diff --git a/software/tools/processMZFfiles.sh b/software/tools/processMZFfiles.sh index 3fe2ce4..bbd68e5 100755 --- a/software/tools/processMZFfiles.sh +++ b/software/tools/processMZFfiles.sh @@ -59,9 +59,11 @@ do IFS=' '; while read -r FSIZE FNAME; do - TNAME=`echo $FNAME | sed 's/mzf/MZF/g'` - if [ "$FNAME" != "$TNAME" ]; then - mv "$FNAME" "$TNAME" + FDIRNAME=`dirname ${FNAME}` + FILENAME=`basename ${FNAME}` + TNAME=`echo $FILENAME | sed 's/mzf/MZF/g'` + if [ "${FILENAME}" != "${TNAME}" ]; then + mv "${FILENAME}" "${TNAME}" fi set +x for BLOCKSIZE in ${BLOCKSIZELIST} @@ -72,8 +74,8 @@ do if [ `echo ${FSIZE} - ${SECTORSIZE} | bc` -le 0 ]; then echo $BASE $TNAME $SECTORSIZE - dd if=/dev/zero ibs=1 count=$SECTORSIZE 2>/dev/null | tr "\000" "\377" > "${MZBDIR}/${SUBDIR}/$BASE.${BLOCKSIZE}.bin" - dd if="${MZFDIR}/${SUBDIR}/$TNAME" of="${MZBDIR}/${SUBDIR}/$BASE.${BLOCKSIZE}.bin" conv=notrunc 2>/dev/null + dd if=/dev/zero ibs=1 count=$SECTORSIZE 2>/dev/null | tr "\000" "\377" > "${MZBDIR}/${FDIRNAME}/${BASE}.${BLOCKSIZE}.bin" + dd if="${MZFDIR}/${FDIRNAME}/$TNAME" of="${MZBDIR}/${FDIRNAME}/${BASE}.${BLOCKSIZE}.bin" conv=notrunc 2>/dev/null break; fi done