From 973fcd475ba22a713ce45e2e7d2f835a789cdb41 Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Fri, 21 May 2021 16:31:06 +0100 Subject: [PATCH] Converted filenames to lowercase to avoid MZF etc name clashes. --- .../asm/{1Z-013A-KM.asm => 1z-013a-km.asm} | 0 software/asm/{1Z-013A.asm => 1z-013a.asm} | 0 software/asm/{5Z009-1B.asm => 5z009-1b.asm} | 0 software/asm/basic_sp-5025.asm | 5908 +++++++++++++ ..._1Z-013A-KM.asm => monitor_1z-013a-km.asm} | 2 +- ...onitor_1Z-013A.asm => monitor_1z-013a.asm} | 2 +- ...013A-KM.asm => monitor_80c_1z-013a-km.asm} | 2 +- ...0c_1Z-013A.asm => monitor_80c_1z-013a.asm} | 2 +- ..._80c_SA1510.asm => monitor_80c_sa1510.asm} | 0 ...{monitor_SA1510.asm => monitor_sa1510.asm} | 0 software/asm/{MSBASIC.asm => msbasic.asm} | 0 software/asm/mz-xz009/BASIC.ASM | 2568 ++++++ software/asm/mz-xz009/CONV.ASM | 1514 ++++ software/asm/mz-xz009/EDIT.ASM | 546 ++ software/asm/mz-xz009/EXPR.ASM | 2038 +++++ software/asm/mz-xz009/FLOAT.ASM | 1945 +++++ software/asm/mz-xz009/GRPH.ASM | 716 ++ software/asm/mz-xz009/H-CMT.ASM | 910 ++ software/asm/mz-xz009/H-FD.ASM | 74 + software/asm/mz-xz009/H-QD.ASM | 1410 ++++ software/asm/mz-xz009/HLA | 39 + software/asm/mz-xz009/IOCS.ASM | 1643 ++++ software/asm/mz-xz009/MACRO.ASM | 83 + software/asm/mz-xz009/MON-EMM.ASM | 439 + software/asm/mz-xz009/MON-GRPH.ASM | 2983 +++++++ software/asm/mz-xz009/MON-IOCS.ASM | 1535 ++++ software/asm/mz-xz009/MON-PSG.ASM | 1067 +++ software/asm/mz-xz009/MON-RS.ASM | 469 + software/asm/mz-xz009/MON1.ASM | 3737 ++++++++ software/asm/mz-xz009/MON2.ASM | 640 ++ software/asm/mz-xz009/MON3.ASM | 941 +++ software/asm/mz-xz009/MON4.ASM | 83 + software/asm/mz-xz009/MONEQU.ASM | 356 + software/asm/mz-xz009/MUSIC.ASM | 463 + software/asm/mz-xz009/PLT.ASM | 754 ++ software/asm/mz-xz009/STMNT.ASM | 1346 +++ software/asm/mz-xz009/XSYS.ASM | 5 + software/asm/mz-xz009/XWORK.ASM | 9 + software/asm/mz2000_ipl.asm | 891 ++ .../{MZ800_1Z_013B.asm => mz800_1z_013b.asm} | 0 .../{MZ800_9Z_504M.asm => mz800_9z_504m.asm} | 0 .../asm/{MZ800_IOCS.asm => mz800_iocs.asm} | 0 software/asm/{MZ80AFI.asm => mz80afi.asm} | 0 software/asm/{MZ80B_IPL.asm => mz80b_ipl.asm} | 7 +- .../{SA-5510_TZFS.asm => sa-5510_tzfs.asm} | 0 software/asm/{SFD700.asm => sfd700.asm} | 0 software/dis/MZ2000_IPL/dz80.ini | 1 + software/dis/MZ2000_IPL/mz2000_ipl.asm | 889 ++ software/dis/MZ2000_IPL/mz2000_ipl.ini | 264 + software/dis/MZ2000_IPL/mz2000_ipl.ref | 466 + software/dis/MZ2000_IPL/mz2000_ipl.rom | Bin 0 -> 2048 bytes software/dis/SA-5510/SA-5510.asm | 7511 +++++++++++++++++ software/dis/SA-5510/SA-5510.ini | 568 ++ software/dis/SA-5510/SA-5510.ref | 2643 ++++++ software/dis/SA-5510/dz80.ini | 1 + software/dis/XPATCH/XPATCH-5510.asm | 1894 +++++ software/dis/XPATCH/XPATCH-5510.ref | 875 ++ software/dis/XPATCH/XPATCH.ini | 330 + software/dis/XPATCH/XPATCH_5510_V2.2.MZF | Bin 0 -> 3280 bytes software/dis/XPATCH/dz80.ini | 1 + software/hdr/{cpm22.HDR => cpm22.hdr} | Bin ...pm22_MZ700_80C.HDR => cpm22_mz700_80c.hdr} | Bin ...pm22_MZ80A_80C.HDR => cpm22_mz80a_80c.hdr} | Bin ...pm22_MZ80A_STD.HDR => cpm22_mz80a_std.hdr} | Bin software/hdr/{CPM_RFS_1.HDR => cpm_rfs_1.hdr} | Bin software/hdr/{CPM_RFS_2.HDR => cpm_rfs_2.hdr} | Bin software/hdr/{sdtest.HDR => sdtest.hdr} | Bin software/roms/{9Z_504M.ROM => 9z_504m.rom} | Bin software/roms/CPM223.BIN | Bin 17920 -> 0 bytes software/roms/CPM223_MZ700_80C.BIN | Bin 17920 -> 0 bytes software/roms/CPM223_MZ80A_80C.BIN | Bin 17920 -> 0 bytes software/roms/CPM223_MZ80A_STD.BIN | Bin 17920 -> 0 bytes ..._1Z-013A-KM.rom => monitor_1z-013a-km.rom} | Bin ...onitor_1Z-013A.rom => monitor_1z-013a.rom} | Bin ...013A-KM.rom => monitor_80c_1z-013a-km.rom} | Bin ...0c_1Z-013A.rom => monitor_80c_1z-013a.rom} | Bin ..._80c_SA1510.rom => monitor_80c_sa1510.rom} | Bin ...{monitor_SA1510.rom => monitor_sa1510.rom} | Bin software/roms/mz2000_ipl.rom | Bin 0 -> 2048 bytes .../roms/{MZ700_cgrom.rom => mz700_cgrom.rom} | Bin .../{MZ800_1Z_013B.ORI => mz800_1z_013b.ori} | Bin .../{MZ800_1Z_013B.rom => mz800_1z_013b.rom} | Bin .../{MZ800_9Z_504M.ORI => mz800_9z_504m.ori} | Bin .../{MZ800_9Z_504M.rom => mz800_9z_504m.rom} | Bin .../roms/{MZ800_CGROM.ORI => mz800_cgrom.ori} | Bin ...{MZ800_CGROM_JP.ORI => mz800_cgrom_jp.ori} | Bin .../roms/{MZ800_IOCS.ORI => mz800_iocs.ori} | Bin .../roms/{MZ800_IOCS.rom => mz800_iocs.rom} | Bin .../roms/{MZ800_IPL.rom => mz800_ipl.rom} | Bin software/roms/mz80afi.rom | Bin 0 -> 2048 bytes .../roms/{MZ80B_IPL.rom => mz80b_ipl.rom} | Bin software/roms/sa1510.orig | Bin 0 -> 4096 bytes software/tools/assemble_cpm.sh | 6 +- software/tools/assemble_roms.sh | 25 +- software/tools/assemble_tzfs.sh | 4 +- software/tools/copytosd.sh | 16 +- software/tools/dz80 | Bin 225408 -> 229504 bytes software/tools/dz80_v20 | Bin 0 -> 225408 bytes software/tools/make_cpmdisks.sh | 8 +- 99 files changed, 50594 insertions(+), 35 deletions(-) rename software/asm/{1Z-013A-KM.asm => 1z-013a-km.asm} (100%) rename software/asm/{1Z-013A.asm => 1z-013a.asm} (100%) rename software/asm/{5Z009-1B.asm => 5z009-1b.asm} (100%) create mode 100644 software/asm/basic_sp-5025.asm rename software/asm/{monitor_1Z-013A-KM.asm => monitor_1z-013a-km.asm} (91%) rename software/asm/{monitor_1Z-013A.asm => monitor_1z-013a.asm} (92%) rename software/asm/{monitor_80c_1Z-013A-KM.asm => monitor_80c_1z-013a-km.asm} (91%) rename software/asm/{monitor_80c_1Z-013A.asm => monitor_80c_1z-013a.asm} (92%) rename software/asm/{monitor_80c_SA1510.asm => monitor_80c_sa1510.asm} (100%) rename software/asm/{monitor_SA1510.asm => monitor_sa1510.asm} (100%) rename software/asm/{MSBASIC.asm => msbasic.asm} (100%) create mode 100644 software/asm/mz-xz009/BASIC.ASM create mode 100644 software/asm/mz-xz009/CONV.ASM create mode 100644 software/asm/mz-xz009/EDIT.ASM create mode 100644 software/asm/mz-xz009/EXPR.ASM create mode 100644 software/asm/mz-xz009/FLOAT.ASM create mode 100644 software/asm/mz-xz009/GRPH.ASM create mode 100644 software/asm/mz-xz009/H-CMT.ASM create mode 100644 software/asm/mz-xz009/H-FD.ASM create mode 100644 software/asm/mz-xz009/H-QD.ASM create mode 100644 software/asm/mz-xz009/HLA create mode 100644 software/asm/mz-xz009/IOCS.ASM create mode 100644 software/asm/mz-xz009/MACRO.ASM create mode 100644 software/asm/mz-xz009/MON-EMM.ASM create mode 100644 software/asm/mz-xz009/MON-GRPH.ASM create mode 100644 software/asm/mz-xz009/MON-IOCS.ASM create mode 100644 software/asm/mz-xz009/MON-PSG.ASM create mode 100644 software/asm/mz-xz009/MON-RS.ASM create mode 100644 software/asm/mz-xz009/MON1.ASM create mode 100644 software/asm/mz-xz009/MON2.ASM create mode 100644 software/asm/mz-xz009/MON3.ASM create mode 100644 software/asm/mz-xz009/MON4.ASM create mode 100644 software/asm/mz-xz009/MONEQU.ASM create mode 100644 software/asm/mz-xz009/MUSIC.ASM create mode 100644 software/asm/mz-xz009/PLT.ASM create mode 100644 software/asm/mz-xz009/STMNT.ASM create mode 100644 software/asm/mz-xz009/XSYS.ASM create mode 100644 software/asm/mz-xz009/XWORK.ASM create mode 100644 software/asm/mz2000_ipl.asm rename software/asm/{MZ800_1Z_013B.asm => mz800_1z_013b.asm} (100%) rename software/asm/{MZ800_9Z_504M.asm => mz800_9z_504m.asm} (100%) rename software/asm/{MZ800_IOCS.asm => mz800_iocs.asm} (100%) rename software/asm/{MZ80AFI.asm => mz80afi.asm} (100%) rename software/asm/{MZ80B_IPL.asm => mz80b_ipl.asm} (99%) rename software/asm/{SA-5510_TZFS.asm => sa-5510_tzfs.asm} (100%) rename software/asm/{SFD700.asm => sfd700.asm} (100%) create mode 120000 software/dis/MZ2000_IPL/dz80.ini create mode 100644 software/dis/MZ2000_IPL/mz2000_ipl.asm create mode 100644 software/dis/MZ2000_IPL/mz2000_ipl.ini create mode 100644 software/dis/MZ2000_IPL/mz2000_ipl.ref create mode 100644 software/dis/MZ2000_IPL/mz2000_ipl.rom create mode 100644 software/dis/SA-5510/SA-5510.asm create mode 100644 software/dis/SA-5510/SA-5510.ini create mode 100644 software/dis/SA-5510/SA-5510.ref create mode 120000 software/dis/SA-5510/dz80.ini create mode 100644 software/dis/XPATCH/XPATCH-5510.asm create mode 100644 software/dis/XPATCH/XPATCH-5510.ref create mode 100644 software/dis/XPATCH/XPATCH.ini create mode 100644 software/dis/XPATCH/XPATCH_5510_V2.2.MZF create mode 120000 software/dis/XPATCH/dz80.ini rename software/hdr/{cpm22.HDR => cpm22.hdr} (100%) rename software/hdr/{cpm22_MZ700_80C.HDR => cpm22_mz700_80c.hdr} (100%) rename software/hdr/{cpm22_MZ80A_80C.HDR => cpm22_mz80a_80c.hdr} (100%) rename software/hdr/{cpm22_MZ80A_STD.HDR => cpm22_mz80a_std.hdr} (100%) rename software/hdr/{CPM_RFS_1.HDR => cpm_rfs_1.hdr} (100%) rename software/hdr/{CPM_RFS_2.HDR => cpm_rfs_2.hdr} (100%) rename software/hdr/{sdtest.HDR => sdtest.hdr} (100%) rename software/roms/{9Z_504M.ROM => 9z_504m.rom} (100%) delete mode 100644 software/roms/CPM223.BIN delete mode 100644 software/roms/CPM223_MZ700_80C.BIN delete mode 100644 software/roms/CPM223_MZ80A_80C.BIN delete mode 100644 software/roms/CPM223_MZ80A_STD.BIN rename software/roms/{monitor_1Z-013A-KM.rom => monitor_1z-013a-km.rom} (100%) rename software/roms/{monitor_1Z-013A.rom => monitor_1z-013a.rom} (100%) rename software/roms/{monitor_80c_1Z-013A-KM.rom => monitor_80c_1z-013a-km.rom} (100%) rename software/roms/{monitor_80c_1Z-013A.rom => monitor_80c_1z-013a.rom} (100%) rename software/roms/{monitor_80c_SA1510.rom => monitor_80c_sa1510.rom} (100%) rename software/roms/{monitor_SA1510.rom => monitor_sa1510.rom} (100%) create mode 100644 software/roms/mz2000_ipl.rom rename software/roms/{MZ700_cgrom.rom => mz700_cgrom.rom} (100%) rename software/roms/{MZ800_1Z_013B.ORI => mz800_1z_013b.ori} (100%) rename software/roms/{MZ800_1Z_013B.rom => mz800_1z_013b.rom} (100%) rename software/roms/{MZ800_9Z_504M.ORI => mz800_9z_504m.ori} (100%) rename software/roms/{MZ800_9Z_504M.rom => mz800_9z_504m.rom} (100%) rename software/roms/{MZ800_CGROM.ORI => mz800_cgrom.ori} (100%) rename software/roms/{MZ800_CGROM_JP.ORI => mz800_cgrom_jp.ori} (100%) rename software/roms/{MZ800_IOCS.ORI => mz800_iocs.ori} (100%) rename software/roms/{MZ800_IOCS.rom => mz800_iocs.rom} (100%) rename software/roms/{MZ800_IPL.rom => mz800_ipl.rom} (100%) create mode 100644 software/roms/mz80afi.rom rename software/roms/{MZ80B_IPL.rom => mz80b_ipl.rom} (100%) create mode 100644 software/roms/sa1510.orig create mode 100755 software/tools/dz80_v20 diff --git a/software/asm/1Z-013A-KM.asm b/software/asm/1z-013a-km.asm similarity index 100% rename from software/asm/1Z-013A-KM.asm rename to software/asm/1z-013a-km.asm diff --git a/software/asm/1Z-013A.asm b/software/asm/1z-013a.asm similarity index 100% rename from software/asm/1Z-013A.asm rename to software/asm/1z-013a.asm diff --git a/software/asm/5Z009-1B.asm b/software/asm/5z009-1b.asm similarity index 100% rename from software/asm/5Z009-1B.asm rename to software/asm/5z009-1b.asm diff --git a/software/asm/basic_sp-5025.asm b/software/asm/basic_sp-5025.asm new file mode 100644 index 0000000..f9c08ea --- /dev/null +++ b/software/asm/basic_sp-5025.asm @@ -0,0 +1,5908 @@ +;---------------------------------------------------- +; Project: BASIC_SP-5025.MZF +; Main File: BASIC_SP-5025.MZF.ASM +; Date: 09/05/2021 10:03:22 +; +; Created with SUC vbDISX. +; +;---------------------------------------------------- +; With repeat autotrace from execute address +; With added unused space analysis +; includes find word tables (selected the 2 highest blocks) +; includes find all words with preceding JPs or CALL opcode value +; +; Followed by more unused space analysis for text +; includes keyword table search +; includes text search + +; Followed by more unused space analysis for text +; Finally more unused space analysis for unused block start address link search + + + ORG 01200H + + XOR A ;1200 AF + LD (L3D26),A ;1201 32263D + LD (0FFFFH),A ;1204 32FFFF + LD HL,043FFH ;1207 21FF43 + LD D,208 ;120A 16D0 +L120C: INC HL ;120C 23 + LD A,H ;120D 7C + CP D ;120E BA + JR Z,L121B ;120F 280A + LD A,255 ;1211 3EFF + LD (HL),A ;1213 77 + SUB (HL) ;1214 96 + JR NZ,L121B ;1215 2004 + LD (HL),A ;1217 77 + CP (HL) ;1218 BE + JR Z,L120C ;1219 28F1 +L121B: LD (04561H),HL ;121B 226145 + LD (04563H),HL ;121E 226345 + LD SP,HL ;1221 F9 + CALL CRLF2 ;1222 CD0600 + LD DE,L12E2 ;1225 11E212 + CALL MESSAGE ;1228 CD1500 + CALL L1832 ;122B CD3218 + LD BC,L000A ;122E 010A00 + CALL L173F ;1231 CD3F17 + LD DE,L4400 ;1234 110044 + PUSH DE ;1237 D5 + CALL L16F7 ;1238 CDF716 + POP DE ;123B D1 + CALL L1357 ;123C CD5713 + LD DE,L1326 ;123F 112613 + CALL MESSAGE ;1242 CD1500 + XOR A ;1245 AF + LD D,A ;1246 57 + LD E,A ;1247 5F + CALL SETCLOCK ;1248 CD3300 +L124B: LD DE,L12FE ;124B 11FE12 + CALL MUSIC ;124E CD3000 + LD DE,L12F9 ;1251 11F912 + CALL L1357 ;1254 CD5713 +L1257: LD A,(L4565) ;1257 3A6545 + OR A ;125A B7 + JP Z,L1274 ;125B CA7412 + LD HL,(L47FF) ;125E 2AFF47 + LD A,H ;1261 7C + OR L ;1262 B5 + JP Z,L1278 ;1263 CA7812 + LD BC,CRLF2 ;1266 010600 + LD DE,L4566 ;1269 116645 + LD HL,L47FD ;126C 21FD47 + CALL L1799 ;126F CD9917 + JR L1278 ;1272 1804 + +L1274: LD HL,(04563H) ;1274 2A6345 + LD SP,HL ;1277 F9 +L1278: CALL L184E ;1278 CD4E18 + CALL CRLF ;127B CD0900 + LD DE,L4400 ;127E 110044 + CALL USER ;1281 CD0300 + CALL L13CE ;1284 CDCE13 + CALL L1443 ;1287 CD4314 + LD HL,(L4457) ;128A 2A5744 + LD A,L ;128D 7D + OR H ;128E B4 + JR NZ,L12A0 ;128F 200F + LD HL,L4459 ;1291 215944 + LD (L4801),HL ;1294 220148 + CALL L168B ;1297 CD8B16 + DEC C ;129A 0D + POP HL ;129B E1 + ADD HL,DE ;129C 19 + JP L1278 ;129D C37812 + +L12A0: CALL L1987 ;12A0 CD8719 + CALL L13C1 ;12A3 CDC113 + CALL L17A5 ;12A6 CDA517 + CP (HL) ;12A9 BE + LD (DE),A ;12AA 12 + JR NZ,L12BE ;12AB 2011 + CALL L17E8 ;12AD CDE817 + EX DE,HL ;12B0 EB + CALL L1766 ;12B1 CD6617 + CALL L1651 ;12B4 CD5116 + CALL L189C ;12B7 CD9C18 + EX DE,HL ;12BA EB + CALL L17E0 ;12BB CDE017 +L12BE: LD A,(L4459) ;12BE 3A5944 + CP 13 ;12C1 FE0D + JP Z,L1257 ;12C3 CA5712 + CALL L17A8 ;12C6 CDA817 + RL D ;12C9 CB12 + LD (L4455),HL ;12CB 225544 + EX DE,HL ;12CE EB + LD HL,L4455 ;12CF 215544 + CALL L17E8 ;12D2 CDE817 + CALL L1796 ;12D5 CD9617 + CALL L189C ;12D8 CD9C18 + EX DE,HL ;12DB EB + CALL L17E0 ;12DC CDE017 + JP L1257 ;12DF C35712 + +L12E2: DB " * SHARP BAS" ;12E2 202A20534841525020424153 + DB "IC SP-5025" ;12EE 49432053502D35303235 + DB 0DH ;12F8 0D +L12F9: DB "READY" ;12F9 5245414459 +L12FE: DB 0DH ;12FE 0D +L12FF: DB " ERR" ;12FF 20455252 + DB 4FH,52H,0DH ;1303 4F520D +L1306: DB " IN" ;1306 20494E + DB 0DH ;1309 0D +L130A: DB "SYNTAX" ;130A 53594E544158 + DB 0DH ;1310 0D +L1311: DB "MEMORY" ;1311 4D454D4F5259 + DB 0DH ;1317 0D +L1318: DB "DATA" ;1318 44415441 + DB 0DH ;131C 0D +L131D: DB "MISMATCH" ;131D 4D49534D41544348 + DB 0DH ;1325 0D +L1326: DB " BYTES" ;1326 204259544553 + DB 0DH ;132C 0D +L132D: DB "BREAK" ;132D 425245414B + DB 0DH ;1332 0D +L1333: DB "16FOR" ;1333 3136464F52 + DB 0DH ;1338 0D +L1339: DB "16GOSUB" ;1339 3136474F535542 + DB 0DH ;1340 0D +L1341: DB "6FN" ;1341 36464E + DB 0DH ;1344 0D +L1345: DB "CONT" ;1345 434F4E54 + DB 0DH ;1349 0D +L134A: DB "FILE" ;134A 46494C45 + DB 0DH ;134E 0D +L134F: DB "OVERLAY" ;134F 4F5645524C4159 + DB 0DH ;1356 0D +L1357: CALL CRLF ;1357 CD0900 + JP MESSAGE ;135A C31500 + +L135D: CALL L187C ;135D CD7C18 + CALL L1357 ;1360 CD5713 + LD DE,L12FF ;1363 11FF12 +L1366: CALL MESSAGE ;1366 CD1500 + LD HL,(L47FF) ;1369 2AFF47 + LD A,L ;136C 7D + OR H ;136D B4 + JP Z,L124B ;136E CA4B12 + LD DE,L4400 ;1371 110044 + PUSH DE ;1374 D5 + CALL L16F7 ;1375 CDF716 + LD DE,L1306 ;1378 110613 + CALL MESSAGE ;137B CD1500 + POP DE ;137E D1 + CALL MESSAGE ;137F CD1500 + JP L124B ;1382 C34B12 + +L1385: CALL CRLF ;1385 CD0900 + LD DE,L132D ;1388 112D13 + JP L1366 ;138B C36613 + +L138E: LD DE,L130A ;138E 110A13 + JR L1396 ;1391 1803 + +L1393: LD DE,L1311 ;1393 111113 +L1396: JR L139B ;1396 1803 + +L1398: LD DE,L1318 ;1398 111813 +L139B: JR L13A0 ;139B 1803 + +L139D: LD DE,L131D ;139D 111D13 +L13A0: JR L13A5 ;13A0 1803 + +L13A2: LD DE,L1333 ;13A2 113313 +L13A5: JR L13AA ;13A5 1803 + +L13A7: LD DE,L1339 ;13A7 113913 +L13AA: JR L13AF ;13AA 1803 + +L13AC: LD DE,L1341 ;13AC 114113 +L13AF: JR L13B4 ;13AF 1803 + +L13B1: LD DE,L134A ;13B1 114A13 +L13B4: JR L13B9 ;13B4 1803 + +L13B6: LD DE,L134F ;13B6 114F13 +L13B9: JR L13BE ;13B9 1803 + +L13BB: LD DE,L1345 ;13BB 114513 +L13BE: JP L135D ;13BE C35D13 + +L13C1: XOR A ;13C1 AF + JR L13C6 ;13C2 1802 + +L13C4: LD A,1 ;13C4 3E01 +L13C6: JR L13CA ;13C6 1802 + +L13C8: LD A,2 ;13C8 3E02 +L13CA: LD (L4565),A ;13CA 326545 + RET ;13CD C9 + +L13CE: LD HL,L4400 ;13CE 210044 + CALL L16F1 ;13D1 CDF116 + EX DE,HL ;13D4 EB + LD (L4457),HL ;13D5 225744 + LD HL,L4459 ;13D8 215944 + LD C,0 ;13DB 0E00 + EX DE,HL ;13DD EB + CALL L162D ;13DE CD2D16 +L13E1: CALL L1491 ;13E1 CD9114 + RET Z ;13E4 C8 + DEC DE ;13E5 1B + CP 63 ;13E6 FE3F + JR NZ,L13F0 ;13E8 2006 + LD A,133 ;13EA 3E85 + LD (DE),A ;13EC 12 + INC DE ;13ED 13 + JR L13E1 ;13EE 18F1 + +L13F0: DEC HL ;13F0 2B + EX DE,HL ;13F1 EB + PUSH HL ;13F2 E5 + LD HL,L14D8 ;13F3 21D814 + LD B,128 ;13F6 0680 +L13F8: PUSH DE ;13F8 D5 +L13F9: CALL L162D ;13F9 CD2D16 + EX DE,HL ;13FC EB + CALL L162D ;13FD CD2D16 + EX DE,HL ;1400 EB + CP (HL) ;1401 BE + INC HL ;1402 23 + INC DE ;1403 13 + JR Z,L13F9 ;1404 28F3 + DEC HL ;1406 2B + CP 255 ;1407 FEFF + JP Z,L1415 ;1409 CA1514 + ADD A,128 ;140C C680 + JP C,L138E ;140E DA8E13 + CP (HL) ;1411 BE + JP Z,L1427 ;1412 CA2714 +L1415: INC B ;1415 04 + LD A,220 ;1416 3EDC + CP B ;1418 B8 + JP Z,L143B ;1419 CA3B14 + LD A,127 ;141C 3E7F +L141E: CP (HL) ;141E BE + INC HL ;141F 23 + JP NC,L141E ;1420 D21E14 + POP DE ;1423 D1 + JP L13F8 ;1424 C3F813 + +L1427: POP AF ;1427 F1 + POP HL ;1428 E1 + LD (HL),B ;1429 70 + INC HL ;142A 23 + EX DE,HL ;142B EB + LD A,B ;142C 78 + CP 130 ;142D FE82 + JP NC,L13E1 ;142F D2E113 + CALL L14C5 ;1432 CDC514 + CP 58 ;1435 FE3A + JP Z,L13E1 ;1437 CAE113 + RET ;143A C9 + +L143B: POP DE ;143B D1 + POP HL ;143C E1 + INC DE ;143D 13 + INC HL ;143E 23 + EX DE,HL ;143F EB + JP L13E1 ;1440 C3E113 + +L1443: LD HL,(L4457) ;1443 2A5744 + LD DE,L4400 ;1446 110044 + LD C,178 ;1449 0EB2 + CALL L16F9 ;144B CDF916 + LD A,32 ;144E 3E20 + LD (DE),A ;1450 12 + INC DE ;1451 13 + LD HL,L4459 ;1452 215944 +L1455: CALL L1491 ;1455 CD9114 + RET Z ;1458 C8 + SUB 128 ;1459 D680 + JP M,L1455 ;145B FA5514 + DEC C ;145E 0D + PUSH AF ;145F F5 + DEC DE ;1460 1B + PUSH HL ;1461 E5 + LD HL,L14D8 ;1462 21D814 +L1465: OR A ;1465 B7 + JP Z,L1475 ;1466 CA7514 + PUSH AF ;1469 F5 + LD A,127 ;146A 3E7F +L146C: CP (HL) ;146C BE + INC HL ;146D 23 + JR NC,L146C ;146E 30FC + POP AF ;1470 F1 + DEC A ;1471 3D + JP L1465 ;1472 C36514 + +L1475: CALL L14BA ;1475 CDBA14 + OR A ;1478 B7 + JP P,L1475 ;1479 F27514 + DEC DE ;147C 1B + AND 127 ;147D E67F + LD (DE),A ;147F 12 + INC DE ;1480 13 + POP HL ;1481 E1 + POP AF ;1482 F1 + CP 2 ;1483 FE02 + JP NC,L1455 ;1485 D25514 + CALL L14C5 ;1488 CDC514 + CP 58 ;148B FE3A + JP Z,L1455 ;148D CA5514 + RET ;1490 C9 + +L1491: CALL L14BA ;1491 CDBA14 + RET Z ;1494 C8 + CALL L14A5 ;1495 CDA514 + JR Z,L1491 ;1498 28F7 + CP 34 ;149A FE22 + RET NZ ;149C C0 + CALL L14B1 ;149D CDB114 + CP 13 ;14A0 FE0D + JR NZ,L1491 ;14A2 20ED + RET ;14A4 C9 + +L14A5: CP 32 ;14A5 FE20 + RET Z ;14A7 C8 + CP 255 ;14A8 FEFF + RET Z ;14AA C8 + CP 40 ;14AB FE28 + RET Z ;14AD C8 + CP 41 ;14AE FE29 + RET ;14B0 C9 + +L14B1: CALL L14BA ;14B1 CDBA14 + RET Z ;14B4 C8 + CP 34 ;14B5 FE22 + JR NZ,L14B1 ;14B7 20F8 + RET ;14B9 C9 + +L14BA: LD A,(HL) ;14BA 7E + LD (DE),A ;14BB 12 + INC HL ;14BC 23 + INC DE ;14BD 13 + INC C ;14BE 0C + JP Z,L1398 ;14BF CA9813 + CP 13 ;14C2 FE0D + RET ;14C4 C9 + +L14C5: CALL L14BA ;14C5 CDBA14 + RET Z ;14C8 C8 + CP 58 ;14C9 FE3A + RET Z ;14CB C8 + CP 34 ;14CC FE22 + JR NZ,L14C5 ;14CE 20F5 + CALL L14B1 ;14D0 CDB114 + CP 13 ;14D3 FE0D + JR NZ,L14C5 ;14D5 20EE + RET ;14D7 C9 + +L14D8: DB "RE" ;14D8 5245 + DB BRC ;14DA CD + DB "DAT" ;14DB 444154 + DB 0C1H ;14DE C1 + DB "LIS" ;14DF 4C4953 + DB 0D4H ;14E2 D4 + DB "RU" ;14E3 5255 + DB TLC ;14E5 CE + DB "NE" ;14E6 4E45 + DB 0D7H ;14E8 D7 + DB "PRIN" ;14E9 5052494E + DB 0D4H ;14ED D4 + DB "LE" ;14EE 4C45 + DB 0D4H ;14F0 D4 + DB "FO" ;14F1 464F + DB TCT ;14F3 D2 + DB "I" ;14F4 49 + DB 0C6H ;14F5 C6 + DB "GOT" ;14F6 474F54 + DB 0CFH ;14F9 CF + DB "REA" ;14FA 524541 + DB 0C4H ;14FD C4 + DB "GOSU" ;14FE 474F5355 + DB 0C2H ;1502 C2 + DB "RETUR" ;1503 5245545552 + DB TLC ;1508 CE + DB "NEX" ;1509 4E4558 + DB 0D4H ;150C D4 + DB "STO" ;150D 53544F + DB TRC ;1510 D0 + DB "EN" ;1511 454E + DB 0C4H ;1513 C4 + DB "O" ;1514 4F + DB TLC ;1515 CE + DB "LOA" ;1516 4C4F41 + DB 0C4H ;1519 C4 + DB "SAV" ;151A 534156 + DB 0C5H ;151D C5 + DB "VERIF" ;151E 5645524946 + DB 0D9H ;1523 D9 + DB "POK" ;1524 504F4B + DB 0C5H ;1527 C5 + DB "DI" ;1528 4449 + DB BRC ;152A CD + DB "DEF F" ;152B 4445462046 + DB TLC ;1530 CE + DB "INPU" ;1531 494E5055 + DB 0D4H ;1535 D4 + DB "RESTOR" ;1536 524553544F52 + DB 0C5H ;153C C5 + DB "CL" ;153D 434C + DB TCT ;153F D2 + DB "MUSI" ;1540 4D555349 + DB 0C3H ;1544 C3 + DB "TEMP" ;1545 54454D50 + DB 0CFH ;1549 CF + DB "USR" ;154A 555352 + DB 0A8H ;154D A8 + DB "WOPE" ;154E 574F5045 + DB TLC ;1552 CE + DB "ROPE" ;1553 524F5045 + DB TLC ;1557 CE + DB "CLOS" ;1558 434C4F53 + DB 0C5H ;155C C5 + DB "BY" ;155D 4259 + DB 0C5H ;155F C5 + DB "LIMI" ;1560 4C494D49 + DB 0D4H ;1564 D4 + DB "CON" ;1565 434F4E + DB 0D4H ;1568 D4 + DB "SE" ;1569 5345 + DB 0D4H ;156B D4 + DB "RESE" ;156C 52455345 + DB 0D4H ;1570 D4 + DB "GE" ;1571 4745 + DB 0D4H ;1573 D4 + DB "INP" ;1574 494E50 + DB 0A3H ;1577 A3 + DB "OUT" ;1578 4F5554 + DB 0A3H,0FFH,0FFH,0FFH ;157B A3FFFFFF + DB 0FFH,0FFH ;157F FFFF + DB "THE" ;1581 544845 + DB TLC ;1584 CE + DB "T" ;1585 54 + DB 0CFH ;1586 CF + DB "STE" ;1587 535445 + DB TRC ;158A D0 + DB ">" ;158B 3E + DB 0BCH ;158C BC + DB "<" ;158D 3C + DB 0BEH ;158E BE + DB "=" ;158F 3D + DB 0BCH ;1590 BC + DB "<" ;1591 3C + DB 0BDH ;1592 BD + DB "=" ;1593 3D + DB 0BEH ;1594 BE + DB ">" ;1595 3E + DB 0BDH,0BDH,0BEH,0BCH ;1596 BDBDBEBC + DB "AN" ;159A 414E + DB 0C4H ;159C C4 + DB "O" ;159D 4F + DB TCT ;159E D2 + DB "NO" ;159F 4E4F + DB 0D4H,0ABH,0ADH,0AAH ;15A1 D4ABADAA + DB 0AFH ;15A5 AF + DB "LEFT$" ;15A6 4C45465424 + DB 0A8H ;15AB A8 + DB "RIGHT$" ;15AC 524947485424 + DB 0A8H ;15B2 A8 + DB "MID$" ;15B3 4D494424 + DB 0A8H ;15B7 A8 + DB "LEN" ;15B8 4C454E + DB 0A8H ;15BB A8 + DB "CHR$" ;15BC 43485224 + DB 0A8H ;15C0 A8 + DB "STR$" ;15C1 53545224 + DB 0A8H ;15C5 A8 + DB "ASC" ;15C6 415343 + DB 0A8H ;15C9 A8 + DB "VAL" ;15CA 56414C + DB 0A8H ;15CD A8 + DB "PEEK" ;15CE 5045454B + DB 0A8H ;15D2 A8 + DB "TAB" ;15D3 544142 + DB 0A8H ;15D6 A8 + DB "SPC" ;15D7 535043 + DB 0A8H ;15DA A8 + DB "SIZ" ;15DB 53495A + DB 0C5H,0FFH,0FFH,0FFH ;15DE C5FFFFFF + DB 0DEH ;15E2 DE + DB "RND" ;15E3 524E44 + DB 0A8H ;15E6 A8 + DB "SIN" ;15E7 53494E + DB 0A8H ;15EA A8 + DB "COS" ;15EB 434F53 + DB 0A8H ;15EE A8 + DB "TAN" ;15EF 54414E + DB 0A8H ;15F2 A8 + DB "ATN" ;15F3 41544E + DB 0A8H ;15F6 A8 + DB "EXP" ;15F7 455850 + DB 0A8H ;15FA A8 + DB "INT" ;15FB 494E54 + DB 0A8H ;15FE A8 + DB "LOG" ;15FF 4C4F47 + DB 0A8H ;1602 A8 + DB "LN" ;1603 4C4E + DB 0A8H ;1605 A8 + DB "ABS" ;1606 414253 + DB 0A8H ;1609 A8 + DB "SGN" ;160A 53474E + DB 0A8H ;160D A8 + DB "SQR" ;160E 535152 + DB 0A8H,0FFH,0FFH ;1611 A8FFFF +L1614: DB 0C1H,00H,00H,00H ;1614 C1000000 + DB 80H ;1618 80 +L1619: DB 80H,00H,00H,00H ;1619 80000000 + DB 00H ;161D 00 +L161E: DB "A" ;161E 41 + DB 00H,00H,00H,80H ;161F 00000080 +L1623: DB 0C2H,0A1H,0DAH,0FH ;1623 C2A1DA0F + DB 0C9H ;1627 C9 + DB "*" ;1628 2A + DB 01H ;1629 01 + DB "H+" ;162A 482B +L162C: DB "#" ;162C 23 +L162D: DB "~" ;162D 7E + DB 0FEH ;162E FE + DB " " ;162F 20 + DB 0C0H,18H,0F9H ;1630 C018F9 +L1633: DB 0F5H ;1633 F5 + DB ">" ;1634 3E + DB 0DH ;1635 0D +L1636: DB 0BEH ;1636 BE + DB "# " ;1637 2320 + DB 0FCH,0F1H,0C9H ;1639 FCF1C9 +L163C: DB "#" ;163C 23 +L163D: DB BRC ;163D CD + DB ")" ;163E 29 + DB 18H,0C8H,0FEH,22H ;163F 18C8FE22 + DB " " ;1643 20 + DB 0F7H ;1644 F7 +L1645: DB BRC ;1645 CD + DB "," ;1646 2C + DB 16H,0FEH ;1647 16FE + DB 0DH ;1649 0D + DB 0C8H,0FEH,22H ;164A C8FE22 + DB " " ;164D 20 + DB 0F6H,18H,0EBH ;164E F618EB +L1651: DB "y/Ox/G" ;1651 792F4F782F47 + DB 03H,0C9H ;1657 03C9 +L1659: DB BRC ;1659 CD + DB "-" ;165A 2D + DB CSN,0D6H ;165B 16D6 + DB "0" ;165D 30 + DB 0FEH,0AH ;165E FE0A + DB "~" ;1660 7E + DB 0C9H ;1661 C9 +L1662: DB "|" ;1662 7C + DB 92H,0C0H ;1663 92C0 + DB "}" ;1665 7D + DB 93H,0C9H ;1666 93C9 +L1668: DB "{" ;1668 7B + DB 95H ;1669 95 + DB "oz" ;166A 6F7A + DB 9CH ;166C 9C + DB "g" ;166D 67 + DB 0C9H ;166E C9 +L166F: DB 0E1H ;166F E1 +L1670: DB 0E3H ;1670 E3 +L1671: DB 0F5H ;1671 F5 + DB "~#fo" ;1672 7E23666F + DB 0F1H,0E3H,0C9H ;1676 F1E3C9 +L1679: DB 0E1H ;1679 E1 +L167A: DB 0E3H ;167A E3 + DB "##" ;167B 2323 + DB 0E3H,0C9H ;167D E3C9 +L167F: DB "*DF#####" ;167F 2A44462323232323 + DB 0C9H ;1687 C9 +L1688: DB "*" ;1688 2A + DB 01H ;1689 01 + DB "H" ;168A 48 +L168B: DB BRC ;168B CD + DB "-" ;168C 2D + DB CSN,0E3H,0BEH ;168D 16E3BE + DB "#" ;1690 23 + DB 0C2H ;1691 C2 + DB "q" ;1692 71 + DB CSN ;1693 16 + DB "#" ;1694 23 + DB 18H,0BH ;1695 180B +L1697: DB "*" ;1697 2A + DB 01H ;1698 01 + DB "H" ;1699 48 +L169A: DB BRC ;169A CD + DB "-" ;169B 2D + DB CSN,0E3H,0BEH,0C2H ;169C 16E3BEC2 + DB 8EH,CMR ;16A0 8E13 +L16A2: DB "#" ;16A2 23 + DB 0E3H,0C3H ;16A3 E3C3 + DB "," ;16A5 2C + DB CSN ;16A6 16 +L16A7: DB 0AFH,0BCH ;16A7 AFBC + DB "(" ;16A9 28 + DB 05H,0EBH,0BCH,0C2H ;16AA 05EBBCC2 + DB "p" ;16AE 70 + DB CSN ;16AF 16 +L16B0: DB "}l" ;16B0 7D6C +L16B2: DB 0B7H ;16B2 B7 + DB " " ;16B3 20 + DB 04H,0EBH,0C3H ;16B4 04EBC3 + DB "z" ;16B7 7A + DB CSN ;16B8 16 +L16B9: DB LCT ;16B9 CB + DB "?0" ;16BA 3F30 + DB 04H,19H,0DAH ;16BC 0419DA + DB "p" ;16BF 70 + DB CSN ;16C0 16 +L16C1: DB LCT ;16C1 CB + DB "#" ;16C2 23 + DB LCT,CMU,0C3H,0B2H ;16C3 CB12C3B2 + DB CSN ;16C7 16 +L16C8: DB BRC,0A7H,CSN,98H ;16C8 CDA71698 + DB CMR,0C9H ;16CC 13C9 +L16CE: DB CMD,00H,00H ;16CE 110000 +L16D1: DB BRC ;16D1 CD + DB "Y" ;16D2 59 + DB CSN,TCT ;16D3 16D2 + DB "z" ;16D5 7A + DB CSN,0E5H ;16D6 16E5 + DB "!" ;16D8 21 + DB 0AH,00H,BRC,0A7H ;16D9 0A00CDA7 + DB CSN ;16DD 16 + DB "o" ;16DE 6F + DB CSN,0E1H ;16DF 16E1 + DB "~" ;16E1 7E + DB 0E6H,0FH,83H ;16E2 E60F83 + DB "_z" ;16E5 5F7A + DB TLC,00H ;16E7 CE00 + DB "W" ;16E9 57 + DB 0DAH ;16EA DA + DB "p" ;16EB 70 + DB CSN ;16EC 16 + DB "#" ;16ED 23 + DB 0C3H,BCT,CSN ;16EE C3D116 +L16F1: DB BRC,TLC,CSN,8EH ;16F1 CDCE168E + DB CMR,0C9H ;16F5 13C9 +L16F7: DB 0EH,00H ;16F7 0E00 +L16F9: DB "> " ;16F9 3E20 + DB CMU,CMR,0D5H,06H ;16FB 1213D506 + DB 00H,CMD,10H ;16FF 001110 + DB "'" ;1702 27 + DB BRC,22H,17H,CMD ;1703 CD221711 + DB 0E8H,03H,BRC,22H ;1707 E803CD22 + DB 17H,CMD ;170B 1711 + DB "d" ;170D 64 + DB 00H,BRC,22H,17H ;170E 00CD2217 + DB CMD,0AH,00H,BRC ;1712 110A00CD + DB 22H,17H ;1716 2217 + DB "}" ;1718 7D + DB BCT,0F6H ;1719 D1F6 + DB "0" ;171B 30 + DB CMU,CMR ;171C 1213 + DB ">" ;171E 3E + DB 0DH ;171F 0D + DB CMU,0C9H ;1720 12C9 +L1722: DB ">" ;1722 3E + DB 0FFH ;1723 FF +L1724: DB "<" ;1724 3C + DB 0B7H,0EDH ;1725 B7ED + DB "R0" ;1727 5230 + DB 0FAH,19H,0B7H ;1729 FA19B7 + DB " " ;172C 20 + DB 03H,0B0H,0C8H,0AFH ;172D 03B0C8AF +L1731: DB 04H,0F6H ;1731 04F6 + DB "0" ;1733 30 + DB BCT,0E3H ;1734 D1E3 + DB "w#" ;1736 7723 + DB 0E3H,0D5H,0CH,0C9H ;1738 E3D50CC9 +L173C: DB 01H,00H,00H ;173C 010000 +L173F: DB "*DF" ;173F 2A4446 +L1742: DB 09H,0DAH,93H,CMR ;1742 09DA9313 + DB 0EBH ;1746 EB + DB "!" ;1747 21 + DB 9CH,0FFH ;1748 9CFF + DB "9" ;174A 39 + DB 0AFH,0EDH ;174B AFED + DB "R" ;174D 52 + DB TRC,0C3H,93H,CMR ;174E D0C39313 +L1752: PUSH HL ;1752 E5 + PUSH DE ;1753 D5 + CALL L173F ;1754 CD3F17 + POP DE ;1757 D1 + POP HL ;1758 E1 + RET ;1759 C9 + +L175A: LD E,(HL) ;175A 5E + INC HL ;175B 23 + LD D,(HL) ;175C 56 + INC HL ;175D 23 + LD A,(HL) ;175E 7E + INC HL ;175F 23 + LD H,(HL) ;1760 66 + LD L,A ;1761 6F + EX DE,HL ;1762 EB + LD A,L ;1763 7D + OR H ;1764 B4 + RET ;1765 C9 + +L1766: PUSH BC ;1766 C5 + PUSH HL ;1767 E5 + PUSH DE ;1768 D5 + EX DE,HL ;1769 EB + ADD HL,BC ;176A 09 + EX DE,HL ;176B EB + CALL L167F ;176C CD7F16 + LD A,L ;176F 7D + SUB E ;1770 93 + LD C,A ;1771 4F + LD A,H ;1772 7C + SBC A,D ;1773 9A + LD B,A ;1774 47 + INC BC ;1775 03 + POP HL ;1776 E1 + PUSH HL ;1777 E5 + EX DE,HL ;1778 EB + JP L179C ;1779 C39C17 + +L177C: CALL L1752 ;177C CD5217 + PUSH BC ;177F C5 + PUSH HL ;1780 E5 + PUSH DE ;1781 D5 + CALL L167F ;1782 CD7F16 + PUSH HL ;1785 E5 + ADD HL,BC ;1786 09 + EX (SP),HL ;1787 E3 + LD A,L ;1788 7D + SUB E ;1789 93 + LD C,A ;178A 4F + LD A,H ;178B 7C + SBC A,D ;178C 9A + LD B,A ;178D 47 + INC BC ;178E 03 + POP DE ;178F D1 + LDDR ;1790 EDB8 +L1792: POP DE ;1792 D1 + POP HL ;1793 E1 + POP BC ;1794 C1 + RET ;1795 C9 + +L1796: CALL L177C ;1796 CD7C17 +L1799: PUSH BC ;1799 C5 + PUSH HL ;179A E5 + PUSH DE ;179B D5 +L179C: LD A,C ;179C 79 + OR B ;179D B0 + JR Z,L17A2 ;179E 2802 + LDIR ;17A0 EDB0 +L17A2: JP L1792 ;17A2 C39217 + +L17A5: LD (L462E),HL ;17A5 222E46 +L17A8: LD HL,L4806 ;17A8 210648 +L17AB: PUSH HL ;17AB E5 + CALL L175A ;17AC CD5A17 + JP Z,L166F ;17AF CA6F16 + PUSH HL ;17B2 E5 + LD HL,(L462E) ;17B3 2A2E46 + CALL L1662 ;17B6 CD6216 + POP HL ;17B9 E1 + JP Z,L1679 ;17BA CA7916 + JP C,L1679 ;17BD DA7916 + POP AF ;17C0 F1 + JP L17AB ;17C1 C3AB17 + +L17C4: PUSH HL ;17C4 E5 + LD E,(HL) ;17C5 5E + INC HL ;17C6 23 + LD D,(HL) ;17C7 56 + LD A,E ;17C8 7B + OR D ;17C9 B2 + JP Z,L166F ;17CA CA6F16 + LD HL,(L4630) ;17CD 2A3046 + CALL L1662 ;17D0 CD6216 + POP HL ;17D3 E1 + INC HL ;17D4 23 + INC HL ;17D5 23 + JP L167A ;17D6 C37A16 + +L17D9: ADD HL,BC ;17D9 09 + EX DE,HL ;17DA EB + POP HL ;17DB E1 + LD (HL),E ;17DC 73 + INC HL ;17DD 23 + LD (HL),D ;17DE 72 + EX DE,HL ;17DF EB +L17E0: PUSH HL ;17E0 E5 + CALL L175A ;17E1 CD5A17 + JR NZ,L17D9 ;17E4 20F3 + POP HL ;17E6 E1 + RET ;17E7 C9 + +L17E8: PUSH HL ;17E8 E5 + LD BC,L0004 ;17E9 010400 + ADD HL,BC ;17EC 09 + CALL L17F6 ;17ED CDF617 + INC BC ;17F0 03 + POP HL ;17F1 E1 + RET ;17F2 C9 + +L17F3: LD BC,COLDSTART ;17F3 010000 +L17F6: PUSH HL ;17F6 E5 + LD A,13 ;17F7 3E0D +L17F9: CP (HL) ;17F9 BE + INC HL ;17FA 23 + INC BC ;17FB 03 + JR NZ,L17F9 ;17FC 20FB + DEC BC ;17FE 0B + POP HL ;17FF E1 + RET ;1800 C9 + +L1801: LD A,E ;1801 7B + EX DE,HL ;1802 EB + LD HL,(L4642) ;1803 2A4246 + INC A ;1806 3C +L1807: DEC A ;1807 3D + CALL NZ,L1633 ;1808 C43316 + JR NZ,L1807 ;180B 20FA + EX DE,HL ;180D EB + RET ;180E C9 + +L180F: LD A,D ;180F 7A + OR A ;1810 B7 + RET NZ ;1811 C0 + JR L1817 ;1812 1803 + +L1814: LD A,D ;1814 7A + OR A ;1815 B7 + RET Z ;1816 C8 +L1817: JP L139D ;1817 C39D13 + +L181A: LD HL,(L4644) ;181A 2A4446 + EX DE,HL ;181D EB +L181E: LD BC,L0005 ;181E 010500 + LDIR ;1821 EDB0 + RET ;1823 C9 + +L1824: LD HL,(L4644) ;1824 2A4446 + JR L181E ;1827 18F5 + +L1829: CALL L162D ;1829 CD2D16 + CP 13 ;182C FE0D + RET Z ;182E C8 + CP 58 ;182F FE3A + RET ;1831 C9 + +L1832: LD HL,COLDSTART ;1832 210000 + LD (L4632),HL ;1835 223246 + LD HL,L4806 ;1838 210648 + CALL L1896 ;183B CD9618 + LD (L4634),HL ;183E 223446 + XOR A ;1841 AF + LD (L29B8),A ;1842 32B829 + CALL L13C1 ;1845 CDC113 + CALL L1857 ;1848 CD5718 + CALL L187C ;184B CD7C18 +L184E: LD HL,L47FD ;184E 21FD47 + CALL L1896 ;1851 CD9618 + JP L1896 ;1854 C39618 + +L1857: LD HL,(L4634) ;1857 2A3446 + LD B,9 ;185A 0609 +L185C: CALL L1896 ;185C CD9618 + DJNZ L185C ;185F 10FB + LD DE,L4636 ;1861 113646 + LD HL,(L4634) ;1864 2A3446 + EX DE,HL ;1867 EB + LD B,7 ;1868 0607 +L186A: INC DE ;186A 13 + INC DE ;186B 13 + LD (HL),E ;186C 73 + INC HL ;186D 23 + LD (HL),D ;186E 72 + INC HL ;186F 23 + DJNZ L186A ;1870 10F8 +L1872: LD HL,(L4642) ;1872 2A4246 + CALL L1896 ;1875 CD9618 + LD (L4644),HL ;1878 224446 + RET ;187B C9 + +L187C: LD HL,L47F0 ;187C 21F047 + LD (L464A),HL ;187F 224A46 + LD HL,L4787 ;1882 218747 + LD (L4648),HL ;1885 224846 + LD HL,L466A ;1888 216A46 + LD (L4646),HL ;188B 224646 + LD HL,L4803 ;188E 210348 + CALL L1896 ;1891 CD9618 + LD (HL),A ;1894 77 + RET ;1895 C9 + +L1896: XOR A ;1896 AF +L1897: LD (HL),A ;1897 77 + INC HL ;1898 23 + LD (HL),A ;1899 77 + INC HL ;189A 23 + RET ;189B C9 + +L189C: PUSH HL ;189C E5 + LD A,E ;189D 7B + EX AF,AF' ;189E 08 + LD A,D ;189F 7A + LD HL,L4644 ;18A0 214446 +L18A3: LD E,(HL) ;18A3 5E + INC HL ;18A4 23 + LD D,(HL) ;18A5 56 + CP D ;18A6 BA + JP C,L18B3 ;18A7 DAB318 + JP NZ,L18BF ;18AA C2BF18 + EX AF,AF' ;18AD 08 + CP E ;18AE BB + JP NC,L18BE ;18AF D2BE18 + EX AF,AF' ;18B2 08 +L18B3: EX DE,HL ;18B3 EB + ADD HL,BC ;18B4 09 + EX DE,HL ;18B5 EB + LD (HL),D ;18B6 72 + DEC HL ;18B7 2B + LD (HL),E ;18B8 73 + DEC HL ;18B9 2B + DEC HL ;18BA 2B + JP L18A3 ;18BB C3A318 + +L18BE: EX AF,AF' ;18BE 08 +L18BF: LD D,A ;18BF 57 + EX AF,AF' ;18C0 08 + LD E,A ;18C1 5F + POP HL ;18C2 E1 + RET ;18C3 C9 + +L18C4: CALL L162D ;18C4 CD2D16 +L18C7: LD BC,COLDSTART ;18C7 010000 + LD DE,L0D2C ;18CA 112C0D + CP 34 ;18CD FE22 + JR NZ,L18D3 ;18CF 2002 + LD E,A ;18D1 5F + INC HL ;18D2 23 +L18D3: PUSH HL ;18D3 E5 +L18D4: LD A,(HL) ;18D4 7E + CP D ;18D5 BA + JR Z,L18E0 ;18D6 2808 + CP E ;18D8 BB + INC HL ;18D9 23 + JR Z,L18E0 ;18DA 2804 + INC BC ;18DC 03 + JR L18D4 ;18DD 18F5 + +L18DF: PUSH HL ;18DF E5 +L18E0: EX (SP),HL ;18E0 E3 + EX DE,HL ;18E1 EB + LD HL,(L4642) ;18E2 2A4246 + XOR A ;18E5 AF +L18E6: PUSH AF ;18E6 F5 + LD A,(HL) ;18E7 7E + OR A ;18E8 B7 + JR Z,L18F2 ;18E9 2807 + CALL L1633 ;18EB CD3316 + POP AF ;18EE F1 + INC A ;18EF 3C + JR L18E6 ;18F0 18F4 + +L18F2: EX DE,HL ;18F2 EB + INC BC ;18F3 03 + CALL L1796 ;18F4 CD9617 + PUSH HL ;18F7 E5 + LD HL,(L4644) ;18F8 2A4446 + ADD HL,BC ;18FB 09 + LD (L4644),HL ;18FC 224446 + POP HL ;18FF E1 + EX DE,HL ;1900 EB + DEC BC ;1901 0B + ADD HL,BC ;1902 09 + LD (HL),13 ;1903 360D + POP AF ;1905 F1 + LD E,A ;1906 5F + LD D,1 ;1907 1601 + POP HL ;1909 E1 + JP L162D ;190A C32D16 + +L190D: CALL L162D ;190D CD2D16 + CP 13 ;1910 FE0D + JP Z,L1670 ;1912 CA7016 + PUSH HL ;1915 E5 + DEC HL ;1916 2B +L1917: INC HL ;1917 23 + CALL L162D ;1918 CD2D16 + CP 43 ;191B FE2B + JR NZ,L1921 ;191D 2002 + LD A,188 ;191F 3EBC +L1921: CP 45 ;1921 FE2D + JR NZ,L1927 ;1923 2002 + LD A,189 ;1925 3EBD +L1927: LD (HL),A ;1927 77 + CALL L193D ;1928 CD3D19 + JR Z,L1917 ;192B 28EA + CP 69 ;192D FE45 + JR Z,L1917 ;192F 28E6 + CP 13 ;1931 FE0D + JP NZ,L166F ;1933 C26F16 + POP HL ;1936 E1 + CALL L22AF ;1937 CDAF22 + JP L167A ;193A C37A16 + +L193D: CALL L1659 ;193D CD5916 + JR NC,L1944 ;1940 3002 + CP (HL) ;1942 BE + RET ;1943 C9 + +L1944: CP 46 ;1944 FE2E + RET Z ;1946 C8 + CP 189 ;1947 FEBD + RET Z ;1949 C8 + CP 188 ;194A FEBC + RET ;194C C9 + +L194D: PUSH HL ;194D E5 + LD HL,(L4644) ;194E 2A4446 + LD DE,COLDSTART ;1951 110000 + LD A,(HL) ;1954 7E + OR A ;1955 B7 + JP P,L1398 ;1956 F29813 + CP 193 ;1959 FEC1 + JP C,L1974 ;195B DA7419 + SUB 209 ;195E D6D1 + JP NC,L1398 ;1960 D29813 +L1963: LD E,3 ;1963 1E03 + ADD HL,DE ;1965 19 + LD E,(HL) ;1966 5E + INC HL ;1967 23 + LD D,(HL) ;1968 56 + JP L1970 ;1969 C37019 + +L196C: SRL D ;196C CB3A + RR E ;196E CB1B +L1970: INC A ;1970 3C + JP NZ,L196C ;1971 C26C19 +L1974: POP HL ;1974 E1 + RET ;1975 C9 + +L1976: LD HL,L456C ;1976 216C45 + JR L197E ;1979 1803 + +L197B: LD HL,L4570 ;197B 217045 +L197E: LD (HL),C ;197E 71 + INC HL ;197F 23 + LD (HL),B ;1980 70 + INC HL ;1981 23 + LD (HL),E ;1982 73 + INC HL ;1983 23 + LD (HL),D ;1984 72 + INC HL ;1985 23 + RET ;1986 C9 + +L1987: XOR A ;1987 AF + LD (L4577),A ;1988 327745 + RET ;198B C9 + +L198C: EXX ;198C D9 + LD BC,L0005 ;198D 010500 + CALL L19A0 ;1990 CDA019 + CALL L22AF ;1993 CDAF22 + CALL L1814 ;1996 CD1418 + CALL L194D ;1999 CD4D19 + EXX ;199C D9 + LD BC,LFFFB ;199D 01FBFF +L19A0: LD HL,(L4644) ;19A0 2A4446 + ADD HL,BC ;19A3 09 + LD (L4644),HL ;19A4 224446 + EXX ;19A7 D9 + RET ;19A8 C9 + +L19A9: CALL L198C ;19A9 CD8C19 + LD A,D ;19AC 7A + OR A ;19AD B7 + RET Z ;19AE C8 + JP L1398 ;19AF C39813 + +L19B2: LD HL,(L4801) ;19B2 2A0148 +L19B5: CALL L162D ;19B5 CD2D16 +L19B8: CP 13 ;19B8 FE0D + JP Z,L19C7 ;19BA CAC719 + CALL L169A ;19BD CD9A16 + LD A,(L0122) ;19C0 3A2201 + LD C,B ;19C3 48 + JP L19E1 ;19C4 C3E119 + +L19C7: LD HL,(L47FD) ;19C7 2AFD47 + XOR A ;19CA AF + OR H ;19CB B4 + JP Z,L124B ;19CC CA4B12 +L19CF: LD DE,L47FD ;19CF 11FD47 + LD BC,L0004 ;19D2 010400 + LDIR ;19D5 EDB0 + LD (L4801),HL ;19D7 220148 + LD A,(L47FE) ;19DA 3AFE47 + OR A ;19DD B7 + JP Z,L1B2D ;19DE CA2D1B +L19E1: LD HL,PORT0 ;19E1 2100E0 + LD (HL),248 ;19E4 36F8 + INC HL ;19E6 23 + LD A,(HL) ;19E7 7E + INC A ;19E8 3C + JP Z,L19F7 ;19E9 CAF719 + CALL BREAK ;19EC CD1E00 + JR NZ,L19F7 ;19EF 2006 + CALL L13C8 ;19F1 CDC813 + JP L1385 ;19F4 C38513 + +L19F7: LD HL,(L4642) ;19F7 2A4246 + XOR A ;19FA AF + LD (HL),A ;19FB 77 + INC HL ;19FC 23 + LD (HL),A ;19FD 77 + INC HL ;19FE 23 + LD (L4644),HL ;19FF 224446 + LD HL,(L4801) ;1A02 2A0148 + LD A,(HL) ;1A05 7E + OR A ;1A06 B7 + JP P,L1B3F ;1A07 F23F1B + CP 170 ;1A0A FEAA + JP NC,L138E ;1A0C D28E13 + LD DE,L1A1F ;1A0F 111F1A +L1A12: INC HL ;1A12 23 + EX DE,HL ;1A13 EB + ADD A,A ;1A14 87 + LD C,A ;1A15 4F + LD B,0 ;1A16 0600 + ADD HL,BC ;1A18 09 + LD C,(HL) ;1A19 4E + INC HL ;1A1A 23 + LD B,(HL) ;1A1B 46 + EX DE,HL ;1A1C EB + PUSH BC ;1A1D C5 + RET ;1A1E C9 + +L1A1F: DW L1B27 ;1A1F 271B + DW L1B27 ;1A21 271B + DW L1A76 ;1A23 761A + DW L1CCB ;1A25 CB1C + DW L1A6F ;1A27 6F1A + DW L1C2F ;1A29 2F1C + DW L1B3F ;1A2B 3F1B + DW L1D5C ;1A2D 5C1D + DW L2182 ;1A2F 8221 + DW L1CDB ;1A31 DB1C + DW L1FAF ;1A33 AF1F + DW L1CF6 ;1A35 F61C + DW L1D2A ;1A37 2A1D + DW L1DF4 ;1A39 F41D + DW L1B36 ;1A3B 361B + DW L1B2D ;1A3D 2D1B + DW L1FF6 ;1A3F F61F + DW L2A36 ;1A41 362A + DW L29BB ;1A43 BB29 + DW L298F ;1A45 8F29 + DW L2166 ;1A47 6621 + DW L2050 ;1A49 5020 + DW L21B0 ;1A4B B021 + DW L1E7C ;1A4D 7C1E + DW L1B24 ;1A4F 241B + DW L2177 ;1A51 7721 + DW L2226 ;1A53 2622 + DW L2246 ;1A55 4622 + DW L28B2 ;1A57 B228 + DW L2BA7 ;1A59 A72B + DW L2BD7 ;1A5B D72B + DW L2C05 ;1A5D 052C + DW L2854 ;1A5F 5428 + DW L28C2 ;1A61 C228 + DW L28FC ;1A63 FC28 + DW L292A ;1A65 2A29 + DW L292E ;1A67 2E29 + DW L2857 ;1A69 5728 + DW L2CD8 ;1A6B D82C + DW L2D2E ;1A6D 2E2D +L1A6F: CALL L1832 ;1A6F CD3218 + JP L124B ;1A72 C34B12 + +L1A75: DB 0FEH ;1A75 FE +L1A76: LD A,(L29B8) ;1A76 3AB829 + OR A ;1A79 B7 + JP NZ,L124B ;1A7A C24B12 + LD B,A ;1A7D 47 + CALL L168B ;1A7E CD8B16 + CP A ;1A81 BF + ADC A,H ;1A82 8C + LD A,(DE) ;1A83 1A + CALL L169A ;1A84 CD9A16 + LD D,B ;1A87 50 + CALL L3C85 ;1A88 CD853C + INC B ;1A8B 04 + LD A,B ;1A8C 78 + LD (L1A75),A ;1A8D 32751A + PUSH HL ;1A90 E5 + CALL L1B08 ;1A91 CD081B + LD HL,L457E ;1A94 217E45 + CALL L1896 ;1A97 CD9618 + DEC A ;1A9A 3D + CALL L1897 ;1A9B CD9718 + POP HL ;1A9E E1 + CALL L168B ;1A9F CD8B16 + DEC C ;1AA2 0D + PUSH HL ;1AA3 E5 + LD A,(DE) ;1AA4 1A + LD HL,L4806 ;1AA5 210648 +L1AA8: PUSH HL ;1AA8 E5 + CALL L175A ;1AA9 CD5A17 + POP HL ;1AAC E1 + JP Z,L124B ;1AAD CA4B12 + CALL L17E8 ;1AB0 CDE817 + LD DE,L4455 ;1AB3 115544 + CALL L1799 ;1AB6 CD9917 + LD HL,(L457E) ;1AB9 2A7E45 + EX DE,HL ;1ABC EB + LD HL,(L4457) ;1ABD 2A5744 + CALL L1662 ;1AC0 CD6216 + JP C,L1ADF ;1AC3 DADF1A + EX DE,HL ;1AC6 EB + LD HL,(L4580) ;1AC7 2A8045 + CALL L1662 ;1ACA CD6216 + JP C,L1ADF ;1ACD DADF1A + CALL L1443 ;1AD0 CD4314 + LD DE,L4400 ;1AD3 110044 + CALL L1B12 ;1AD6 CD121B + CALL BREAK ;1AD9 CD1E00 + JP Z,L124B ;1ADC CA4B12 +L1ADF: LD HL,(L4455) ;1ADF 2A5544 + JP L1AA8 ;1AE2 C3A81A + + DB 0CDH,0F1H,16H,0EDH ;1AE5 CDF116ED Link 1AE5 found at , $1AA3 + DB 53H,7EH,45H,0CDH ;1AE9 537E45CD + DB 8BH,16H,0DH,0F9H ;1AED 8B160DF9 + DB 1AH,0EBH,22H,80H ;1AF1 1AEB2280 + DB 45H,0C3H,0A5H,1AH ;1AF5 45C3A51A + DB 0CDH,9AH,16H,0BDH ;1AF9 CD9A16BD + DB 0FEH,0DH,0CAH,0A5H ;1AFD FE0DCAA5 + DB 1AH,0CDH,0F1H,16H ;1B01 1ACDF116 + DB 0C3H,0F2H,1AH ;1B05 C3F21A +L1B08: LD A,(L1A75) ;1B08 3A751A + OR A ;1B0B B7 + JP Z,CRLF ;1B0C CA0900 + JP L3BA1 ;1B0F C3A13B + +L1B12: LD A,(L1A75) ;1B12 3A751A + OR A ;1B15 B7 + JR NZ,L1B1E ;1B16 2006 + CALL STRING ;1B18 CD1800 + JP CRLF ;1B1B C30900 + +L1B1E: CALL L3C05 ;1B1E CD053C + JP L3BA1 ;1B21 C3A13B + +L1B24: CALL L1987 ;1B24 CD8719 +L1B27: CALL L163D ;1B27 CD3D16 + JP L19B8 ;1B2A C3B819 + +L1B2D: CALL L13C4 ;1B2D CDC413 + LD (L4801),HL ;1B30 220148 + JP L124B ;1B33 C34B12 + +L1B36: CALL L13C4 ;1B36 CDC413 +L1B39: LD (L4801),HL ;1B39 220148 + JP L1385 ;1B3C C38513 + +L1B3F: PUSH HL ;1B3F E5 +L1B40: CALL L1829 ;1B40 CD2918 + JP Z,L138E ;1B43 CA8E13 + CP 182 ;1B46 FEB6 + INC HL ;1B48 23 + JR NZ,L1B40 ;1B49 20F5 + CALL L22AF ;1B4B CDAF22 + LD (L4801),HL ;1B4E 220148 + CALL L1976 ;1B51 CD7619 + POP HL ;1B54 E1 + CALL L2613 ;1B55 CD1326 + CALL L2436 ;1B58 CD3624 + CALL L169A ;1B5B CD9A16 + OR (HL) ;1B5E B6 + CALL L197B ;1B5F CD7B19 + CALL L1B6A ;1B62 CD6A1B + SBC A,L ;1B65 9D + INC DE ;1B66 13 + JP L19B2 ;1B67 C3B219 + +L1B6A: LD HL,L456F ;1B6A 216F45 + LD B,(HL) ;1B6D 46 + INC HL ;1B6E 23 + LD C,(HL) ;1B6F 4E + INC HL ;1B70 23 + LD A,(HL) ;1B71 7E + LD DE,(L4572) ;1B72 ED5B7245 + OR A ;1B76 B7 + JP NZ,L1B84 ;1B77 C2841B + OR B ;1B7A B0 + JP NZ,L1670 ;1B7B C27016 + CALL L1824 ;1B7E CD2418 + JP L167A ;1B81 C37A16 + +L1B84: XOR A ;1B84 AF + OR B ;1B85 B0 + JP Z,L1670 ;1B86 CA7016 + LD HL,L4559 ;1B89 215945 + XOR A ;1B8C AF + LD B,A ;1B8D 47 + SBC HL,DE ;1B8E ED52 + JP Z,L1BC0 ;1B90 CAC01B + LD HL,(L456C) ;1B93 2A6C45 + PUSH HL ;1B96 E5 + XOR A ;1B97 AF + SBC HL,BC ;1B98 ED42 + LD B,H ;1B9A 44 + LD C,L ;1B9B 4D + JR C,L1BA3 ;1B9C 3805 + CALL L177C ;1B9E CD7C17 + JR L1BAB ;1BA1 1808 + +L1BA3: PUSH BC ;1BA3 C5 + CALL L1651 ;1BA4 CD5116 + CALL L1766 ;1BA7 CD6617 + POP BC ;1BAA C1 +L1BAB: CALL L189C ;1BAB CD9C18 + LD HL,(L456E) ;1BAE 2A6E45 + EX DE,HL ;1BB1 EB + CALL L1801 ;1BB2 CD0118 + EX DE,HL ;1BB5 EB + POP BC ;1BB6 C1 + LD A,C ;1BB7 79 + OR A ;1BB8 B7 + JR Z,L1BBD ;1BB9 2802 + LDIR ;1BBB EDB0 +L1BBD: JP L167A ;1BBD C37A16 + +L1BC0: LD HL,(L456E) ;1BC0 2A6E45 + EX DE,HL ;1BC3 EB + CALL L1801 ;1BC4 CD0118 + EX DE,HL ;1BC7 EB + LD DE,L4557 ;1BC8 115745 + PUSH DE ;1BCB D5 + LD B,3 ;1BCC 0603 +L1BCE: LD C,2 ;1BCE 0E02 +L1BD0: CALL L1659 ;1BD0 CD5916 + JP NC,L1398 ;1BD3 D29813 + LD (DE),A ;1BD6 12 + INC DE ;1BD7 13 + INC HL ;1BD8 23 + DEC C ;1BD9 0D + JR NZ,L1BD0 ;1BDA 20F4 + LD A,13 ;1BDC 3E0D + LD (DE),A ;1BDE 12 + INC DE ;1BDF 13 + DEC B ;1BE0 05 + JR NZ,L1BCE ;1BE1 20EB + CALL L168B ;1BE3 CD8B16 + DEC C ;1BE6 0D + SBC A,B ;1BE7 98 + INC DE ;1BE8 13 + POP HL ;1BE9 E1 + CALL L198C ;1BEA CD8C19 + LD B,0 ;1BED 0600 + LD A,E ;1BEF 7B + CP 24 ;1BF0 FE18 + JP NC,L1398 ;1BF2 D29813 + SUB 12 ;1BF5 D60C + JR C,L1BFB ;1BF7 3802 + LD E,A ;1BF9 5F + INC B ;1BFA 04 +L1BFB: LD A,B ;1BFB 78 + PUSH AF ;1BFC F5 + PUSH HL ;1BFD E5 + LD HL,L0E10 ;1BFE 21100E + CALL L16C8 ;1C01 CDC816 + POP HL ;1C04 E1 + PUSH DE ;1C05 D5 + INC HL ;1C06 23 + CALL L198C ;1C07 CD8C19 + LD A,E ;1C0A 7B + CP 60 ;1C0B FE3C + JP NC,L1398 ;1C0D D29813 + PUSH HL ;1C10 E5 + LD HL,L003C ;1C11 213C00 + CALL L16C8 ;1C14 CDC816 + POP HL ;1C17 E1 + EX (SP),HL ;1C18 E3 + ADD HL,DE ;1C19 19 + EX (SP),HL ;1C1A E3 + INC HL ;1C1B 23 + CALL L198C ;1C1C CD8C19 + LD A,E ;1C1F 7B + CP 60 ;1C20 FE3C + JP NC,L1398 ;1C22 D29813 + POP HL ;1C25 E1 + ADD HL,DE ;1C26 19 + EX DE,HL ;1C27 EB + POP AF ;1C28 F1 + CALL SETCLOCK ;1C29 CD3300 + JP L167A ;1C2C C37A16 + +L1C2F: LD B,0 ;1C2F 0600 + CALL L168B ;1C31 CD8B16 + CP A ;1C34 BF + LD B,L ;1C35 45 + INC E ;1C36 1C + INC HL ;1C37 23 + INC B ;1C38 04 + CP 84 ;1C39 FE54 + JP Z,L1C45 ;1C3B CA451C + CP 80 ;1C3E FE50 + JP NZ,L138E ;1C40 C28E13 + LD B,128 ;1C43 0680 +L1C45: LD A,B ;1C45 78 + LD (L457D),A ;1C46 327D45 + CALL L1829 ;1C49 CD2918 + JP NZ,L1C60 ;1C4C C2601C + LD A,(L457D) ;1C4F 3A7D45 + LD BC,L19B5 ;1C52 01B519 + PUSH BC ;1C55 C5 + CP 1 ;1C56 FE01 + RET Z ;1C58 C8 + OR A ;1C59 B7 + JP Z,CRLF2 ;1C5A CA0600 + JP L3BA6 ;1C5D C3A63B + +L1C60: CALL L168B ;1C60 CD8B16 + DEC SP ;1C63 3B + LD H,(HL) ;1C64 66 + INC E ;1C65 1C + CALL L168B ;1C66 CD8B16 + INC L ;1C69 2C + LD A,L ;1C6A 7D + INC E ;1C6B 1C + LD A,(L457D) ;1C6C 3A7D45 + LD BC,L1C7D ;1C6F 017D1C + PUSH BC ;1C72 C5 + CP 1 ;1C73 FE01 + RET Z ;1C75 C8 + OR A ;1C76 B7 + JP Z,TAB ;1C77 CA0F00 + JP L3C4A ;1C7A C34A3C + +L1C7D: DB 0CDH,29H,18H,0CAH ;1C7D CD2918CA Link 1C7D found at , $1C6A, $1C70 + DB 0B5H,19H,0FEH,3BH ;1C81 B519FE3B + DB 28H,02H,0FEH,2CH ;1C85 2802FE2C + DB 0CAH,60H,1CH,0CDH ;1C89 CA601CCD + DB 0AFH,22H,0E5H,7AH ;1C8D AF22E57A + DB 0B7H,0C2H,0C5H,1CH ;1C91 B7C2C51C + DB 2AH,44H,46H,11H ;1C95 2A444611 + DB 00H,44H,0D5H,0CDH ;1C99 0044D5CD + DB 2DH,32H,0D1H,3AH ;1C9D 2D32D13A + DB 7DH,45H,01H,0B3H ;1CA1 7D4501B3 + DB 1CH,0C5H,0FEH,01H ;1CA5 1CC5FE01 + DB 0CAH,4EH,2CH,0B7H ;1CA9 CA4E2CB7 + DB 0CAH,27H,3DH,0C3H ;1CAD CA273DC3 + DB 0B6H,3BH,0E1H,0CDH ;1CB1 B63BE1CD + DB 29H,18H,28H,06H ;1CB5 29182806 + DB 0FEH,3BH,28H,02H ;1CB9 FE3B2802 + DB 0FEH,2CH,0CAH,49H ;1CBD FE2CCA49 + DB 1CH,0C3H,8EH,13H ;1CC1 1CC38E13 + DB 0CDH,01H,18H,0C3H ;1CC5 CD0118C3 + DB 0A0H,1CH ;1CC9 A01C +L1CCB: CALL L1987 ;1CCB CD8719 + XOR A ;1CCE AF + LD (L457A),A ;1CCF 327A45 + LD (L4565),A ;1CD2 326545 + CALL L1659 ;1CD5 CD5916 + JP NC,L1CEA ;1CD8 D2EA1C +L1CDB: CALL L16F1 ;1CDB CDF116 +L1CDE: EX DE,HL ;1CDE EB + CALL L17A5 ;1CDF CDA517 + ADC A,(HL) ;1CE2 8E + INC DE ;1CE3 13 + JP NZ,L138E ;1CE4 C28E13 + JP L19CF ;1CE7 C3CF19 + +L1CEA: CALL L1857 ;1CEA CD5718 + CALL L187C ;1CED CD7C18 + LD HL,L4806 ;1CF0 210648 + JP L19CF ;1CF3 C3CF19 + +L1CF6: CALL L16F1 ;1CF6 CDF116 +L1CF9: LD (L4801),HL ;1CF9 220148 + EX DE,HL ;1CFC EB + CALL L17A5 ;1CFD CDA517 + ADC A,(HL) ;1D00 8E + INC DE ;1D01 13 + JP NZ,L138E ;1D02 C28E13 + EXX ;1D05 D9 + LD HL,L4805 ;1D06 210548 + LD A,(HL) ;1D09 7E + CP 15 ;1D0A FE0F + JP Z,L13A7 ;1D0C CAA713 + INC (HL) ;1D0F 34 + DEC HL ;1D10 2B + DEC HL ;1D11 2B + LD DE,(L464A) ;1D12 ED5B4A46 + DEC DE ;1D16 1B + LD BC,L0007 ;1D17 010700 + LDDR ;1D1A EDB8 + INC DE ;1D1C 13 + LD (L464A),DE ;1D1D ED534A46 + LD C,7 ;1D21 0E07 + ADD HL,BC ;1D23 09 + LD (HL),0 ;1D24 3600 + EXX ;1D26 D9 + JP L19CF ;1D27 C3CF19 + +L1D2A: LD HL,L4805 ;1D2A 210548 + XOR A ;1D2D AF + CP (HL) ;1D2E BE + JP Z,L138E ;1D2F CA8E13 + DEC (HL) ;1D32 35 +L1D33: LD HL,L4803 ;1D33 210348 + LD A,(HL) ;1D36 7E + OR A ;1D37 B7 + JP Z,L1D4B ;1D38 CA4B1D + DEC (HL) ;1D3B 35 + INC HL ;1D3C 23 + DEC (HL) ;1D3D 35 + LD HL,(L4648) ;1D3E 2A4846 + LD BC,L0013 ;1D41 011300 + ADD HL,BC ;1D44 09 + LD (L4648),HL ;1D45 224846 + JP L1D33 ;1D48 C3331D + +L1D4B: LD HL,(L464A) ;1D4B 2A4A46 + LD DE,L47FD ;1D4E 11FD47 + LD BC,L0007 ;1D51 010700 + LDIR ;1D54 EDB0 + LD (L464A),HL ;1D56 224A46 + JP L19B2 ;1D59 C3B219 + +L1D5C: CALL L2613 ;1D5C CD1326 + CALL L169A ;1D5F CD9A16 + OR (HL) ;1D62 B6 + PUSH DE ;1D63 D5 + CALL L1DEB ;1D64 CDEB1D + POP HL ;1D67 E1 + LD (L47F0),HL ;1D68 22F047 + EX DE,HL ;1D6B EB + CALL L2441 ;1D6C CD4124 + CALL L1824 ;1D6F CD2418 + CALL L1697 ;1D72 CD9716 + XOR (HL) ;1D75 AE + CALL L1DEB ;1D76 CDEB1D + LD DE,L47F8 ;1D79 11F847 + CALL L1824 ;1D7C CD2418 + CALL L1688 ;1D7F CD8816 + XOR A ;1D82 AF + ADC A,L ;1D83 8D + DEC E ;1D84 1D + CALL L1DEB ;1D85 CDEB1D + LD HL,(L4644) ;1D88 2A4446 + JR L1D90 ;1D8B 1803 + + DB 21H,14H,16H ;1D8D 211416 +L1D90: LD DE,L47F2 ;1D90 11F247 + LD A,(HL) ;1D93 7E + LD (L47F7),A ;1D94 32F747 + LD BC,L0005 ;1D97 010500 + LDIR ;1D9A EDB0 + LD HL,(L4648) ;1D9C 2A4846 + LD DE,(L47F0) ;1D9F ED5BF047 + LD A,(L4803) ;1DA3 3A0348 + INC A ;1DA6 3C +L1DA7: DEC A ;1DA7 3D + JP Z,L1DCC ;1DA8 CACC1D + EX AF,AF' ;1DAB 08 + LD A,(HL) ;1DAC 7E + SUB E ;1DAD 93 + LD B,A ;1DAE 47 + INC HL ;1DAF 23 + LD A,(HL) ;1DB0 7E + SUB D ;1DB1 92 + OR B ;1DB2 B0 + LD BC,VIDEO ;1DB3 011200 + ADD HL,BC ;1DB6 09 + JP Z,L1DBE ;1DB7 CABE1D + EX AF,AF' ;1DBA 08 + JP L1DA7 ;1DBB C3A71D + +L1DBE: LD (L4648),HL ;1DBE 224846 + EX AF,AF' ;1DC1 08 + DEC A ;1DC2 3D + LD HL,L4803 ;1DC3 210348 + LD B,(HL) ;1DC6 46 + LD (HL),A ;1DC7 77 + SUB B ;1DC8 90 + INC HL ;1DC9 23 + ADD A,(HL) ;1DCA 86 + LD (HL),A ;1DCB 77 +L1DCC: LD HL,L4804 ;1DCC 210448 + LD A,(HL) ;1DCF 7E + CP 15 ;1DD0 FE0F + JP Z,L13A2 ;1DD2 CAA213 + INC (HL) ;1DD5 34 + DEC HL ;1DD6 2B + INC (HL) ;1DD7 34 + DEC HL ;1DD8 2B + LD DE,(L4648) ;1DD9 ED5B4846 + LD BC,L0013 ;1DDD 011300 + DEC DE ;1DE0 1B + LDDR ;1DE1 EDB8 + INC DE ;1DE3 13 + EX DE,HL ;1DE4 EB + LD (L4648),HL ;1DE5 224846 + JP L19B2 ;1DE8 C3B219 + +L1DEB: CALL L22AF ;1DEB CDAF22 + LD (L4801),HL ;1DEE 220148 + JP L1814 ;1DF1 C31418 + +L1DF4: LD A,(L4803) ;1DF4 3A0348 + OR A ;1DF7 B7 + JP Z,L138E ;1DF8 CA8E13 + CALL L25CD ;1DFB CDCD25 + LD (L4801),HL ;1DFE 220148 + LD HL,(L4648) ;1E01 2A4846 + CALL NC,L1E77 ;1E04 D4771E +L1E07: LD A,E ;1E07 7B + SUB (HL) ;1E08 96 + INC HL ;1E09 23 + LD B,A ;1E0A 47 + LD A,D ;1E0B 7A + SUB (HL) ;1E0C 96 + OR B ;1E0D B0 + JP Z,L1E28 ;1E0E CA281E + EXX ;1E11 D9 + LD HL,L4803 ;1E12 210348 + LD A,(HL) ;1E15 7E + DEC A ;1E16 3D + JP Z,L138E ;1E17 CA8E13 + LD (HL),A ;1E1A 77 + INC HL ;1E1B 23 + DEC (HL) ;1E1C 35 + EXX ;1E1D D9 + LD BC,VIDEO ;1E1E 011200 + ADD HL,BC ;1E21 09 + LD (L4648),HL ;1E22 224846 + JP L1E07 ;1E25 C3071E + +L1E28: INC HL ;1E28 23 + CALL L2441 ;1E29 CD4124 + PUSH DE ;1E2C D5 + PUSH HL ;1E2D E5 + CALL L2D4D ;1E2E CD4D2D + POP HL ;1E31 E1 + POP DE ;1E32 D1 + LD BC,L0005 ;1E33 010500 + ADD HL,BC ;1E36 09 + LD A,(HL) ;1E37 7E + INC HL ;1E38 23 + PUSH HL ;1E39 E5 + OR A ;1E3A B7 + JP P,L1E57 ;1E3B F2571E + EX DE,HL ;1E3E EB + CALL L33EE ;1E3F CDEE33 + POP HL ;1E42 E1 + LD BC,L0005 ;1E43 010500 + JP C,L1E62 ;1E46 DA621E +L1E49: ADD HL,BC ;1E49 09 + LD DE,L47FD ;1E4A 11FD47 + INC C ;1E4D 0C + LDIR ;1E4E EDB0 + LD HL,(L4801) ;1E50 2A0148 + LD A,(HL) ;1E53 7E + JP L19B8 ;1E54 C3B819 + +L1E57: CALL L33EE ;1E57 CDEE33 + POP HL ;1E5A E1 + LD BC,L0005 ;1E5B 010500 + CCF ;1E5E 3F + JP C,L1E49 ;1E5F DA491E +L1E62: LD C,11 ;1E62 0E0B + ADD HL,BC ;1E64 09 + LD (L4648),HL ;1E65 224846 + LD HL,L4803 ;1E68 210348 + DEC (HL) ;1E6B 35 + INC HL ;1E6C 23 + DEC (HL) ;1E6D 35 + CALL L1688 ;1E6E CD8816 + INC L ;1E71 2C + OR D ;1E72 B2 + ADD HL,DE ;1E73 19 + JP L1DF4 ;1E74 C3F41D + +L1E77: LD E,(HL) ;1E77 5E + INC HL ;1E78 23 + LD D,(HL) ;1E79 56 + DEC HL ;1E7A 2B + RET ;1E7B C9 + +L1E7C: CALL L2C39 ;1E7C CD392C + PUSH HL ;1E7F E5 + LD HL,(L47FF) ;1E80 2AFF47 + LD A,L ;1E83 7D + OR H ;1E84 B4 + JP Z,L138E ;1E85 CA8E13 + XOR A ;1E88 AF + LD (L4574),A ;1E89 327445 + POP HL ;1E8C E1 + LD (L4801),HL ;1E8D 220148 + PUSH HL ;1E90 E5 + CALL L162D ;1E91 CD2D16 + CP 34 ;1E94 FE22 + LD DE,L1EAF ;1E96 11AF1E + JP NZ,L1EA9 ;1E99 C2A91E + CALL L2383 ;1E9C CD8323 + CALL L169A ;1E9F CD9A16 + DEC SP ;1EA2 3B + LD (L4801),HL ;1EA3 220148 + CALL L1801 ;1EA6 CD0118 +L1EA9: CALL L1EC1 ;1EA9 CDC11E + JP L1F06 ;1EAC C3061F + +L1EAF: DB "? " ;1EAF 3F20 + DB 0DH ;1EB1 0D +L1EB2: XOR A ;1EB2 AF + LD (CHARCOUNT),A ;1EB3 329411 + RET ;1EB6 C9 + +L1EB7: LD A,(L457D) ;1EB7 3A7D45 + OR A ;1EBA B7 + CALL Z,CRLF ;1EBB CC0900 + LD DE,L1EAF ;1EBE 11AF1E +L1EC1: LD A,(L457D) ;1EC1 3A7D45 + OR A ;1EC4 B7 + CALL Z,MESSAGE ;1EC5 CC1500 + CALL NZ,L1EB2 ;1EC8 C4B21E + LD DE,L4455 ;1ECB 115544 + LD A,(CHARCOUNT) ;1ECE 3A9411 + CALL L2C7A ;1ED1 CD7A2C + CALL USER ;1ED4 CD0300 + EX DE,HL ;1ED7 EB + LD A,(L457D) ;1ED8 3A7D45 + OR A ;1EDB B7 + JP NZ,L1EF8 ;1EDC C2F81E + LD A,27 ;1EDF 3E1B + CP (HL) ;1EE1 BE + JP Z,L1EFC ;1EE2 CAFC1E + LD A,13 ;1EE5 3E0D +L1EE7: CP (HL) ;1EE7 BE + JP Z,L1EB7 ;1EE8 CAB71E + INC HL ;1EEB 23 + DEC C ;1EEC 0D + JR NZ,L1EE7 ;1EED 20F8 + CALL L168B ;1EEF CD8B16 + DEC C ;1EF2 0D + RET M ;1EF3 F8 + LD E,195 ;1EF4 1EC3 + OR A ;1EF6 B7 + LD E,34 ;1EF7 1E22 + LD (HL),L ;1EF9 75 + LD B,L ;1EFA 45 + RET ;1EFB C9 + +L1EFC: LD A,129 ;1EFC 3E81 + LD (L4565),A ;1EFE 326545 + POP AF ;1F01 F1 + POP HL ;1F02 E1 + JP L1B39 ;1F03 C3391B + +L1F06: LD HL,(L4801) ;1F06 2A0148 + CALL L1829 ;1F09 CD2918 + JP Z,L1FA4 ;1F0C CAA41F + CALL L2613 ;1F0F CD1326 + CALL L2436 ;1F12 CD3624 + CALL L1829 ;1F15 CD2918 + JR Z,L1F1E ;1F18 2804 + CALL L169A ;1F1A CD9A16 + INC L ;1F1D 2C +L1F1E: LD (L4801),HL ;1F1E 220148 + CALL L197B ;1F21 CD7B19 + LD HL,(L4575) ;1F24 2A7545 + CALL L168B ;1F27 CD8B16 + INC L ;1F2A 2C + DEC L ;1F2B 2D + RRA ;1F2C 1F + LD (L4575),HL ;1F2D 227545 + LD A,(L457D) ;1F30 3A7D45 + OR A ;1F33 B7 + JP NZ,L1F3D ;1F34 C23D1F + CALL L1829 ;1F37 CD2918 + CALL Z,L1F9A ;1F3A CC9A1F +L1F3D: LD HL,(L4575) ;1F3D 2A7545 + CALL L18C4 ;1F40 CDC418 + LD A,(L4574) ;1F43 3A7445 + OR A ;1F46 B7 + JP Z,L1F4D ;1F47 CA4D1F + LD (L4578),HL ;1F4A 227845 +L1F4D: LD (L4575),HL ;1F4D 227545 + LD A,(L4571) ;1F50 3A7145 + OR A ;1F53 B7 + CALL Z,L1F72 ;1F54 CC721F + CALL L1976 ;1F57 CD7619 + CALL L1B6A ;1F5A CD6A1B + SBC A,L ;1F5D 9D + INC DE ;1F5E 13 + LD A,(L457D) ;1F5F 3A7D45 + OR A ;1F62 B7 + JP Z,L1F06 ;1F63 CA061F + LD HL,(L4801) ;1F66 2A0148 + CALL L1829 ;1F69 CD2918 + CALL NZ,L1EC1 ;1F6C C4C11E + JP L1F06 ;1F6F C3061F + +L1F72: CALL L1801 ;1F72 CD0118 + EX DE,HL ;1F75 EB + CALL L190D ;1F76 CD0D19 + LD A,H ;1F79 7C + RRA ;1F7A 1F + RET ;1F7B C9 + + DB 0F1H,3AH,74H,45H ;1F7C F13A7445 Link 1F7C found at , $1F79 + DB 0B7H,0C2H,98H,13H ;1F80 B7C29813 + DB 3AH,7DH,45H,0B7H ;1F84 3A7D45B7 + DB 0C2H,98H,13H,11H ;1F88 C2981311 + DB 18H,13H,0CDH,57H ;1F8C 1813CD57 + DB 13H,11H,0FFH,12H ;1F90 1311FF12 + DB 0CDH,15H,00H,0C3H ;1F94 CD1500C3 + DB 8CH,1EH ;1F98 8C1E +L1F9A: LD A,(L4574) ;1F9A 3A7445 + OR A ;1F9D B7 + JP Z,L1EB7 ;1F9E CAB71E + JP L1FD4 ;1FA1 C3D41F + +L1FA4: LD A,(L4574) ;1FA4 3A7445 + OR A ;1FA7 B7 + JP NZ,L19B2 ;1FA8 C2B219 + POP AF ;1FAB F1 + JP L19B2 ;1FAC C3B219 + +L1FAF: LD (L4801),HL ;1FAF 220148 + LD A,(L4577) ;1FB2 3A7745 + OR A ;1FB5 B7 + CALL Z,L1FCA ;1FB6 CCCA1F + LD HL,(L4578) ;1FB9 2A7845 + LD (L4575),HL ;1FBC 227545 + XOR A ;1FBF AF + LD (L457D),A ;1FC0 327D45 + INC A ;1FC3 3C + LD (L4574),A ;1FC4 327445 + JP L1F06 ;1FC7 C3061F + +L1FCA: INC A ;1FCA 3C + LD (L4577),A ;1FCB 327745 + LD HL,L4806 ;1FCE 210648 + JP L1FE0 ;1FD1 C3E01F + +L1FD4: LD HL,(L4575) ;1FD4 2A7545 + CALL L163D ;1FD7 CD3D16 + INC HL ;1FDA 23 + CP 58 ;1FDB FE3A + JP Z,L1FE9 ;1FDD CAE91F +L1FE0: LD A,(HL) ;1FE0 7E + INC HL ;1FE1 23 + OR (HL) ;1FE2 B6 + JP Z,L1385 ;1FE3 CA8513 + INC HL ;1FE6 23 + INC HL ;1FE7 23 + INC HL ;1FE8 23 +L1FE9: CALL L168B ;1FE9 CD8B16 + ADD A,C ;1FEC 81 + RST 10H ;16 ;1FED D7 + RRA ;1FEE 1F + LD (L4578),HL ;1FEF 227845 + LD (L4575),HL ;1FF2 227545 + RET ;1FF5 C9 + +L1FF6: CALL L22AF ;1FF6 CDAF22 + CALL L1814 ;1FF9 CD1418 + LD DE,(L4644) ;1FFC ED5B4446 + LD A,(DE) ;2000 1A + LD DE,COLDSTART ;2001 110000 + CP 193 ;2004 FEC1 + JP C,L2019 ;2006 DA1920 + SUB 209 ;2009 D6D1 + JP NC,L2019 ;200B D21920 + LD BC,L2019 ;200E 011920 + PUSH BC ;2011 C5 + PUSH HL ;2012 E5 + LD HL,(L4644) ;2013 2A4446 + JP L1963 ;2016 C36319 + +L2019: LD A,(HL) ;2019 7E + INC HL ;201A 23 + SUB 137 ;201B D689 + JR Z,L2024 ;201D 2805 + CP 2 ;201F FE02 + JP NZ,L138E ;2021 C28E13 +L2024: EX AF,AF' ;2024 08 + LD A,E ;2025 7B +L2026: OR A ;2026 B7 + JP Z,L1B27 ;2027 CA271B + LD A,D ;202A 7A + OR A ;202B B7 + JP NZ,L1B27 ;202C C2271B +L202F: DEC E ;202F 1D + JP Z,L2042 ;2030 CA4220 +L2033: CALL L1829 ;2033 CD2918 + JP Z,L19B8 ;2036 CAB819 + CP 44 ;2039 FE2C + INC HL ;203B 23 + JP NZ,L2033 ;203C C23320 + JP L202F ;203F C32F20 + +L2042: CALL L16F1 ;2042 CDF116 + CALL L163D ;2045 CD3D16 + EX AF,AF' ;2048 08 + OR A ;2049 B7 + JP NZ,L1CF9 ;204A C2F91C + JP L1CDE ;204D C3DE1C + +L2050: CALL L2613 ;2050 CD1326 + LD BC,COLDSTART ;2053 010000 + CP 36 ;2056 FE24 + JR NZ,L205C ;2058 2002 + INC HL ;205A 23 + INC B ;205B 04 +L205C: CALL L169A ;205C CD9A16 + JR Z,L202E ;205F 28CD + EXX ;2061 D9 + JR NZ,L2026 ;2062 20C2 + OR L ;2064 B5 + JR NZ,L204C ;2065 20E5 + LD HL,(L20D7) ;2067 2AD720 + LD E,H ;206A 5C + LD D,A ;206B 57 + LD H,A ;206C 67 + INC HL ;206D 23 + INC DE ;206E 13 + CALL L16A7 ;206F CDA716 + SUB E ;2072 93 + INC DE ;2073 13 + LD A,(L20D6) ;2074 3AD620 + OR A ;2077 B7 + POP HL ;2078 E1 + PUSH DE ;2079 D5 + PUSH HL ;207A E5 + JR NZ,L2085 ;207B 2008 + LD HL,L0005 ;207D 210500 + CALL L16A7 ;2080 CDA716 + SUB E ;2083 93 + INC DE ;2084 13 +L2085: LD HL,L0004 ;2085 210400 + ADD HL,DE ;2088 19 + JP C,L1393 ;2089 DA9313 + LD B,H ;208C 44 + LD C,L ;208D 4D + POP DE ;208E D1 + CALL L177C ;208F CD7C17 + CALL L189C ;2092 CD9C18 + LD HL,(L4630) ;2095 2A3046 + EX DE,HL ;2098 EB + LD (HL),E ;2099 73 + INC HL ;209A 23 + LD (HL),D ;209B 72 + INC HL ;209C 23 + LD DE,(L20D7) ;209D ED5BD720 + LD (HL),E ;20A1 73 + INC HL ;20A2 23 + LD (HL),D ;20A3 72 + INC HL ;20A4 23 + POP BC ;20A5 C1 + LD A,(L20D6) ;20A6 3AD620 + OR A ;20A9 B7 + JP Z,L20C1 ;20AA CAC120 +L20AD: LD (HL),13 ;20AD 360D + INC HL ;20AF 23 + DEC BC ;20B0 0B + LD A,B ;20B1 78 + OR C ;20B2 B1 + JR NZ,L20AD ;20B3 20F8 +L20B5: LD HL,(L20D4) ;20B5 2AD420 + CALL L168B ;20B8 CD8B16 + INC L ;20BB 2C + OR L ;20BC B5 + ADD HL,DE ;20BD 19 + JP L2050 ;20BE C35020 + +L20C1: EX DE,HL ;20C1 EB +L20C2: PUSH BC ;20C2 C5 + LD HL,L1619 ;20C3 211916 + LD BC,L0005 ;20C6 010500 + LDIR ;20C9 EDB0 + POP BC ;20CB C1 + DEC BC ;20CC 0B + LD A,B ;20CD 78 + OR C ;20CE B1 + JR NZ,L20C2 ;20CF 20F1 + JP L20B5 ;20D1 C3B520 + +L20D4: DW 0A323H ;20D4 23A3 +L20D6: DB 33H ;20D6 33 +L20D7: DW 09E3EH ;20D7 3E9E +L20D9: PUSH DE ;20D9 D5 + PUSH BC ;20DA C5 + CALL L19A9 ;20DB CDA919 + POP BC ;20DE C1 + LD A,(HL) ;20DF 7E + CP 44 ;20E0 FE2C + CALL Z,L215A ;20E2 CC5A21 + CALL L169A ;20E5 CD9A16 + ADD HL,HL ;20E8 29 + LD (L20D4),HL ;20E9 22D420 + POP HL ;20EC E1 + LD (L4630),HL ;20ED 223046 + EX DE,HL ;20F0 EB + LD (L20D7),HL ;20F1 22D720 + LD A,B ;20F4 78 + LD (L20D6),A ;20F5 32D620 + LD HL,L4636 ;20F8 213646 + LD DE,CRLF2 ;20FB 110600 + OR A ;20FE B7 + JR NZ,L2102 ;20FF 2001 + ADD HL,DE ;2101 19 +L2102: LD A,C ;2102 79 + LD E,2 ;2103 1E02 + OR A ;2105 B7 + JR NZ,L2109 ;2106 2001 + ADD HL,DE ;2108 19 +L2109: LD E,(HL) ;2109 5E + INC HL ;210A 23 + LD D,(HL) ;210B 56 + EX DE,HL ;210C EB +L210D: CALL L17C4 ;210D CDC417 + LD B,E ;2110 43 + LD HL,L45CA ;2111 21CA45 + LD HL,L235E ;2114 215E23 + PUSH HL ;2117 E5 + LD L,(HL) ;2118 6E + LD D,0 ;2119 1600 + LD H,D ;211B 62 + INC HL ;211C 23 + INC DE ;211D 13 + CALL L16C8 ;211E CDC816 + LD A,(L20D6) ;2121 3AD620 + OR A ;2124 B7 + JP NZ,L2134 ;2125 C23421 + LD HL,L0005 ;2128 210500 + CALL L16C8 ;212B CDC816 + POP HL ;212E E1 + ADD HL,DE ;212F 19 +L2130: INC HL ;2130 23 + JP L210D ;2131 C30D21 + +L2134: POP HL ;2134 E1 +L2135: LD A,13 ;2135 3E0D +L2137: INC HL ;2137 23 + CP (HL) ;2138 BE + JR NZ,L2137 ;2139 20FC + DEC DE ;213B 1B + LD A,D ;213C 7A + OR E ;213D B3 + JR NZ,L2135 ;213E 20F5 + JP L2130 ;2140 C33021 + + DB 0AFH,0C9H,4EH,23H ;2143 AFC94E23 Link 2143 found at , $2110 + DB 46H,23H,0EDH,5BH ;2147 4623ED5B + DB 0D7H,20H,78H,0BAH ;214B D72078BA + DB 38H,02H,79H,0BBH ;214F 380279BB + DB 0DAH,8EH,13H,3EH ;2153 DA8E133E + DB 01H,0B7H,0C9H ;2157 01B7C9 +L215A: INC C ;215A 0C + PUSH BC ;215B C5 + PUSH DE ;215C D5 + INC HL ;215D 23 + CALL L19A9 ;215E CDA919 + LD A,E ;2161 7B + POP DE ;2162 D1 + LD D,A ;2163 57 + POP BC ;2164 C1 + RET ;2165 C9 + +L2166: CALL L198C ;2166 CD8C19 + PUSH DE ;2169 D5 + CALL L169A ;216A CD9A16 + INC L ;216D 2C + CALL L19A9 ;216E CDA919 + EX (SP),HL ;2171 E3 + LD (HL),E ;2172 73 + POP HL ;2173 E1 + JP L19B5 ;2174 C3B519 + +L2177: PUSH HL ;2177 E5 + CALL L1857 ;2178 CD5718 + CALL L1872 ;217B CD7218 + POP HL ;217E E1 + JP L19B5 ;217F C3B519 + +L2182: CALL L2258 ;2182 CD5822 + CALL L1814 ;2185 CD1418 + LD IX,(L4644) ;2188 DD2A4446 + BIT 7,(IX+4) ;218C DDCB047E + JP Z,L19C7 ;2190 CAC719 + LD A,(HL) ;2193 7E + INC HL ;2194 23 + CP 137 ;2195 FE89 +L2197: JP Z,L1CDB ;2197 CADB1C + CP 139 ;219A FE8B + JP Z,L1CF6 ;219C CAF61C + CP 173 ;219F FEAD + JP NZ,L138E ;21A1 C28E13 + CALL L1659 ;21A4 CD5916 + JP C,L1CDB ;21A7 DADB1C + LD (L4801),HL ;21AA 220148 + JP L19E1 ;21AD C3E119 + +L21B0: CALL L162D ;21B0 CD2D16 + SUB 65 ;21B3 D641 + CP 26 ;21B5 FE1A + JP NC,L138E ;21B7 D28E13 + LD E,(HL) ;21BA 5E + INC HL ;21BB 23 + CALL L169A ;21BC CD9A16 + JR Z,L2197 ;21BF 28D6 + LD B,C ;21C1 41 + CP 26 ;21C2 FE1A + JP NC,L138E ;21C4 D28E13 + LD D,(HL) ;21C7 56 + INC HL ;21C8 23 + CALL L169A ;21C9 CD9A16 + ADD HL,HL ;21CC 29 + CALL L169A ;21CD CD9A16 + OR (HL) ;21D0 B6 + PUSH HL ;21D1 E5 + CALL L163D ;21D2 CD3D16 + POP BC ;21D5 C1 + PUSH HL ;21D6 E5 + XOR A ;21D7 AF + SBC HL,BC ;21D8 ED42 + PUSH BC ;21DA C5 + PUSH HL ;21DB E5 + LD HL,(L4634) ;21DC 2A3446 +L21DF: LD A,(HL) ;21DF 7E + CP E ;21E0 BB + JP Z,L2204 ;21E1 CA0422 + CP 0 ;21E4 FE00 + JR Z,L21EF ;21E6 2807 + INC HL ;21E8 23 + INC HL ;21E9 23 + CALL L1633 ;21EA CD3316 + JR L21DF ;21ED 18F0 + +L21EF: EX DE,HL ;21EF EB + LD BC,USER ;21F0 010300 + CALL L177C ;21F3 CD7C17 + CALL L189C ;21F6 CD9C18 + EX DE,HL ;21F9 EB + LD (HL),E ;21FA 73 + INC HL ;21FB 23 + LD (HL),D ;21FC 72 + INC HL ;21FD 23 + LD (HL),13 ;21FE 360D + EX DE,HL ;2200 EB + JP L221A ;2201 C31A22 + +L2204: INC HL ;2204 23 + LD (HL),D ;2205 72 + INC HL ;2206 23 + PUSH HL ;2207 E5 + CALL L163D ;2208 CD3D16 + POP DE ;220B D1 + XOR A ;220C AF + SBC HL,DE ;220D ED52 + LD B,H ;220F 44 + LD C,L ;2210 4D + CALL L1766 ;2211 CD6617 + CALL L1651 ;2214 CD5116 + CALL L189C ;2217 CD9C18 +L221A: POP BC ;221A C1 + POP HL ;221B E1 + CALL L1796 ;221C CD9617 + CALL L189C ;221F CD9C18 + POP HL ;2222 E1 + JP L19B5 ;2223 C3B519 + +L2226: CALL L1829 ;2226 CD2918 + JP Z,L19B5 ;2229 CAB519 + CALL L22AF ;222C CDAF22 + CALL L1829 ;222F CD2918 + JR Z,L2235 ;2232 2801 + INC HL ;2234 23 +L2235: PUSH HL ;2235 E5 + CALL L180F ;2236 CD0F18 + CALL L1801 ;2239 CD0118 + CALL MUSIC ;223C CD3000 + JP C,L1385 ;223F DA8513 + POP HL ;2242 E1 + JP L2226 ;2243 C32622 + +L2246: CALL L19A9 ;2246 CDA919 + LD A,E ;2249 7B + DEC A ;224A 3D + CP 7 ;224B FE07 + JP NC,L1398 ;224D D29813 + INC A ;2250 3C + CALL SPEED ;2251 CD4100 + JP L1B27 ;2254 C3271B + +L2257: INC HL ;2257 23 +L2258: CALL L22AF ;2258 CDAF22 +L225B: CP 176 ;225B FEB0 + RET C ;225D D8 + CP 188 ;225E FEBC + RET NC ;2260 D0 + EX AF,AF' ;2261 08 + LD A,D ;2262 7A + OR A ;2263 B7 + JP NZ,L2272 ;2264 C27222 + EX AF,AF' ;2267 08 + EXX ;2268 D9 + LD BC,L225B ;2269 015B22 + LD DE,L22AE ;226C 11AE22 + JP L2339 ;226F C33923 + +L2272: EX AF,AF' ;2272 08 + CP 182 ;2273 FEB6 + JP NZ,L138E ;2275 C28E13 + LD A,C ;2278 79 + PUSH DE ;2279 D5 + PUSH AF ;227A F5 + CALL L22AE ;227B CDAE22 + CALL L180F ;227E CD0F18 + POP AF ;2281 F1 + EX (SP),HL ;2282 E3 + LD B,A ;2283 47 + SUB C ;2284 91 + JP NZ,L22A1 ;2285 C2A122 + OR B ;2288 B0 + JP Z,L229C ;2289 CA9C22 + CALL L1801 ;228C CD0118 + EX DE,HL ;228F EB + CALL L1801 ;2290 CD0118 +L2293: LD A,(DE) ;2293 1A + CP (HL) ;2294 BE + INC HL ;2295 23 + INC DE ;2296 13 + JP NZ,L22A1 ;2297 C2A122 + DJNZ L2293 ;229A 10F7 +L229C: LD DE,L161E ;229C 111E16 + JR Z,L22A4 ;229F 2803 +L22A1: LD DE,L1619 ;22A1 111916 +L22A4: CALL L181A ;22A4 CD1A18 + POP HL ;22A7 E1 + CALL L237B ;22A8 CD7B23 + JP L225B ;22AB C35B22 + +L22AE: INC HL ;22AE 23 +L22AF: LD A,(HL) ;22AF 7E + CP 32 ;22B0 FE20 + JR Z,L22AE ;22B2 28FA + CP 188 ;22B4 FEBC + JP Z,L22C7 ;22B6 CAC722 + CP 189 ;22B9 FEBD + JP NZ,L22C8 ;22BB C2C822 + CALL L2315 ;22BE CD1523 + CALL L2393 ;22C1 CD9323 + JP L22CB ;22C4 C3CB22 + +L22C7: INC HL ;22C7 23 +L22C8: CALL L2316 ;22C8 CD1623 +L22CB: CP 188 ;22CB FEBC + RET C ;22CD D8 + CP 190 ;22CE FEBE + RET NC ;22D0 D0 + EX AF,AF' ;22D1 08 + LD A,D ;22D2 7A + OR A ;22D3 B7 + JP NZ,L22E2 ;22D4 C2E222 + EX AF,AF' ;22D7 08 + EXX ;22D8 D9 + LD BC,L22CB ;22D9 01CB22 + LD DE,L2315 ;22DC 111523 + JP L2339 ;22DF C33923 + +L22E2: EX AF,AF' ;22E2 08 + CP 188 ;22E3 FEBC + JP NZ,L138E ;22E5 C28E13 + PUSH DE ;22E8 D5 + PUSH BC ;22E9 C5 + CALL L2315 ;22EA CD1523 + CALL L180F ;22ED CD0F18 + LD A,C ;22F0 79 + EXX ;22F1 D9 + POP BC ;22F2 C1 + POP DE ;22F3 D1 + ADD A,C ;22F4 81 + JP C,L1398 ;22F5 DA9813 + LD H,B ;22F8 60 + LD L,A ;22F9 6F + PUSH HL ;22FA E5 + EXX ;22FB D9 + PUSH HL ;22FC E5 + PUSH DE ;22FD D5 + EXX ;22FE D9 + POP HL ;22FF E1 + PUSH HL ;2300 E5 + CALL L1801 ;2301 CD0118 + EX DE,HL ;2304 EB + CALL L1801 ;2305 CD0118 + CALL L1796 ;2308 CD9617 + CALL L189C ;230B CD9C18 + POP DE ;230E D1 + POP HL ;230F E1 + POP BC ;2310 C1 + LD A,(HL) ;2311 7E + JP L22CB ;2312 C3CB22 + +L2315: INC HL ;2315 23 +L2316: CALL L232A ;2316 CD2A23 +L2319: CP 190 ;2319 FEBE + RET C ;231B D8 + CP 192 ;231C FEC0 + RET NC ;231E D0 + EXX ;231F D9 + LD BC,L2319 ;2320 011923 + LD DE,L2329 ;2323 112923 + JP L2339 ;2326 C33923 + +L2329: DB 23H ;2329 23 +L232A: CALL L2383 ;232A CD8323 +L232D: CP 207 ;232D FECF + RET NZ ;232F C0 + LD A,192 ;2330 3EC0 + EXX ;2332 D9 + LD BC,L232D ;2333 012D23 + LD DE,L2382 ;2336 118223 +L2339: PUSH BC ;2339 C5 + LD HL,(L4644) ;233A 2A4446 + LD BC,L0005 ;233D 010500 + ADD HL,BC ;2340 09 + LD (L4644),HL ;2341 224446 + SUB 176 ;2344 D6B0 + ADD A,A ;2346 87 + LD HL,L2628 ;2347 212826 + LD C,A ;234A 4F + ADD HL,BC ;234B 09 + LD C,(HL) ;234C 4E + INC HL ;234D 23 + LD B,(HL) ;234E 46 + PUSH BC ;234F C5 + LD HL,L235C ;2350 215C23 + PUSH HL ;2353 E5 + PUSH DE ;2354 D5 + EXX ;2355 D9 + LD A,D ;2356 7A + OR A ;2357 B7 + RET Z ;2358 C8 + JP L139D ;2359 C39D13 + +L235C: DB 7AH,0B7H ;235C 7AB7 Link 235C found at , $2351 +L235E: DB 0C2H,9DH,13H,0FDH ;235E C29D13FD + DB 0E1H,0E5H,2AH,44H ;2362 E1E52A44 + DB 46H,01H,0FBH,0FFH ;2366 4601FBFF + DB 5DH,54H,09H,22H ;236A 5D540922 + DB 44H,46H,0EBH,01H ;236E 4446EB01 + DB 7AH,23H,0C5H,0FDH ;2372 7A23C5FD + DB 0E9H ;2376 E9 +L2377: CALL L181A ;2377 CD1A18 +L237A: POP HL ;237A E1 +L237B: LD BC,L0005 ;237B 010500 + LD D,B ;237E 50 + LD E,B ;237F 58 + LD A,(HL) ;2380 7E + RET ;2381 C9 + +L2382: DB 23H ;2382 23 +L2383: CALL L162D ;2383 CD2D16 + CP 188 ;2386 FEBC + JP Z,L23A8 ;2388 CAA823 + CP 189 ;238B FEBD + JP NZ,L23A9 ;238D C2A923 + CALL L23A8 ;2390 CDA823 +L2393: EXX ;2393 D9 + LD HL,(L4644) ;2394 2A4446 + PUSH HL ;2397 E5 + LD BC,L0004 ;2398 010400 + ADD HL,BC ;239B 09 + LD A,(HL) ;239C 7E + POP HL ;239D E1 + OR A ;239E B7 + JR Z,L23A5 ;239F 2804 + LD A,(HL) ;23A1 7E + ADD A,128 ;23A2 C680 + LD (HL),A ;23A4 77 +L23A5: EXX ;23A5 D9 + LD A,(HL) ;23A6 7E + RET ;23A7 C9 + +L23A8: INC HL ;23A8 23 +L23A9: CALL L25CD ;23A9 CDCD25 + JP NC,L23CC ;23AC D2CC23 + LD A,70 ;23AF 3E46 + CP E ;23B1 BB + JR NZ,L23BA ;23B2 2006 + LD A,78 ;23B4 3E4E + CP D ;23B6 BA + JP Z,L2476 ;23B7 CA7624 +L23BA: CALL L2436 ;23BA CD3624 + PUSH HL ;23BD E5 + LD A,B ;23BE 78 + OR A ;23BF B7 + JP Z,L2377 ;23C0 CA7723 + EX DE,HL ;23C3 EB + LD B,0 ;23C4 0600 + CALL L18DF ;23C6 CDDF18 + POP HL ;23C9 E1 + LD A,(HL) ;23CA 7E + RET ;23CB C9 + +L23CC: CP 40 ;23CC FE28 + JP Z,L23F2 ;23CE CAF223 + CP 34 ;23D1 FE22 + JP Z,L18C4 ;23D3 CAC418 + CALL L193D ;23D6 CD3D19 + JP NZ,L23E3 ;23D9 C2E323 + LD DE,(L4644) ;23DC ED5B4446 + JP L2FD9 ;23E0 C3D92F + +L23E3: CP 255 ;23E3 FEFF + JP NZ,L2400 ;23E5 C20024 + CALL L162C ;23E8 CD2C16 + PUSH HL ;23EB E5 + LD DE,L1623 ;23EC 112316 + JP L2377 ;23EF C37723 + +L23F2: LD BC,COLDSTART ;23F2 010000 + CALL L1752 ;23F5 CD5217 + CALL L2257 ;23F8 CD5722 + CALL L169A ;23FB CD9A16 + ADD HL,HL ;23FE 29 + RET ;23FF C9 + +L2400: SUB 192 ;2400 D6C0 + CP 15 ;2402 FE0F + JP NC,L240D ;2404 D20D24 + LD DE,L264A ;2407 114A26 + JP L1A12 ;240A C3121A + +L240D: SUB 16 ;240D D610 + CP 15 ;240F FE0F + JP NC,L138E ;2411 D28E13 + PUSH AF ;2414 F5 + CALL L22AE ;2415 CDAE22 + CALL L1814 ;2418 CD1418 + CALL L169A ;241B CD9A16 + ADD HL,HL ;241E 29 + POP AF ;241F F1 + PUSH HL ;2420 E5 + LD HL,L237A ;2421 217A23 + PUSH HL ;2424 E5 + LD HL,(L4644) ;2425 2A4446 + EX DE,HL ;2428 EB + LD HL,L2662 ;2429 216226 + ADD A,A ;242C 87 + LD C,A ;242D 4F + LD B,0 ;242E 0600 + ADD HL,BC ;2430 09 + LD A,(HL) ;2431 7E + INC HL ;2432 23 + LD H,(HL) ;2433 66 + LD L,A ;2434 6F + JP (HL) ;2435 E9 + +L2436: LD A,(HL) ;2436 7E + CP 36 ;2437 FE24 + JP Z,L24F7 ;2439 CAF724 + CP 40 ;243C FE28 + JP Z,L2585 ;243E CA8525 +L2441: PUSH HL ;2441 E5 + LD HL,(L4640) ;2442 2A4046 + LD BC,L0005 ;2445 010500 +L2448: LD A,(HL) ;2448 7E + CP E ;2449 BB + INC HL ;244A 23 + JR NZ,L2452 ;244B 2005 + LD A,(HL) ;244D 7E + CP D ;244E BA + JP Z,L2471 ;244F CA7124 +L2452: OR A ;2452 B7 + JR Z,L245A ;2453 2805 + INC HL ;2455 23 + ADD HL,BC ;2456 09 + JP L2448 ;2457 C34824 + +L245A: LD C,7 ;245A 0E07 + DEC HL ;245C 2B + PUSH DE ;245D D5 + EX DE,HL ;245E EB + LD HL,L1619 ;245F 211916 + DEC HL ;2462 2B + DEC HL ;2463 2B + CALL L1796 ;2464 CD9617 + CALL L189C ;2467 CD9C18 + EX DE,HL ;246A EB + POP DE ;246B D1 + LD (HL),E ;246C 73 + INC HL ;246D 23 + LD (HL),D ;246E 72 + LD C,5 ;246F 0E05 +L2471: INC HL ;2471 23 + EX DE,HL ;2472 EB + POP HL ;2473 E1 + LD A,(HL) ;2474 7E + RET ;2475 C9 + +L2476: LD A,(HL) ;2476 7E + SUB 65 ;2477 D641 + CP 26 ;2479 FE1A + JP NC,L138E ;247B D28E13 + LD E,(HL) ;247E 5E + INC HL ;247F 23 + CALL L169A ;2480 CD9A16 + JR Z,L245A ;2483 28D5 + CALL L22AF ;2485 CDAF22 + CALL L1814 ;2488 CD1418 + CALL L169A ;248B CD9A16 + ADD HL,HL ;248E 29 + POP DE ;248F D1 + PUSH HL ;2490 E5 + LD HL,(L4634) ;2491 2A3446 +L2494: LD A,(HL) ;2494 7E + CP 0 ;2495 FE00 + JP Z,L138E ;2497 CA8E13 + CP E ;249A BB + JR Z,L24A4 ;249B 2807 + INC HL ;249D 23 + INC HL ;249E 23 + CALL L1633 ;249F CD3316 + JR L2494 ;24A2 18F0 + +L24A4: INC HL ;24A4 23 + LD E,(HL) ;24A5 5E + INC HL ;24A6 23 + PUSH HL ;24A7 E5 + PUSH DE ;24A8 D5 + LD D,32 ;24A9 1620 + CALL L2441 ;24AB CD4124 + POP HL ;24AE E1 + PUSH DE ;24AF D5 + PUSH HL ;24B0 E5 + LD HL,(L4646) ;24B1 2A4646 + LD DE,L464C ;24B4 114C46 + CALL L1662 ;24B7 CD6216 + JP Z,L13AC ;24BA CAAC13 + LD BC,LFFFA ;24BD 01FAFF + ADD HL,BC ;24C0 09 + LD (L4646),HL ;24C1 224646 + POP DE ;24C4 D1 + LD (HL),E ;24C5 73 + INC HL ;24C6 23 + POP DE ;24C7 D1 + LD BC,L0005 ;24C8 010500 + EX DE,HL ;24CB EB + CALL L1799 ;24CC CD9917 + EX DE,HL ;24CF EB + LD HL,(L4644) ;24D0 2A4446 + CALL L1799 ;24D3 CD9917 + POP HL ;24D6 E1 + CALL L22AF ;24D7 CDAF22 + CALL L1814 ;24DA CD1418 + CALL L1829 ;24DD CD2918 + JP NZ,L138E ;24E0 C28E13 + LD HL,(L4646) ;24E3 2A4646 + LD E,(HL) ;24E6 5E + INC HL ;24E7 23 + LD D,32 ;24E8 1620 + CALL L2441 ;24EA CD4124 + CALL L1799 ;24ED CD9917 + ADD HL,BC ;24F0 09 + LD (L4646),HL ;24F1 224646 + JP L237A ;24F4 C37A23 + +L24F7: CALL L162C ;24F7 CD2C16 + CP 40 ;24FA FE28 + JP Z,L2580 ;24FC CA8025 + PUSH HL ;24FF E5 + LD HL,L4954 ;2500 215449 + XOR A ;2503 AF + SBC HL,DE ;2504 ED52 + JP Z,L2539 ;2506 CA3925 + EX DE,HL ;2509 EB + LD (L4630),HL ;250A 223046 + LD HL,(L463A) ;250D 2A3A46 +L2510: CALL L17C4 ;2510 CDC417 + LD E,37 ;2513 1E25 + JP Z,L2530 ;2515 CA3025 + CALL L1633 ;2518 CD3316 + JP L2510 ;251B C31025 + + DB 01H,03H,00H,0EBH ;251E 010300EB Link 251E found at , $2513 + DB 21H,30H,46H,0CDH ;2522 213046CD + DB 96H,17H,0CDH,9CH ;2526 9617CD9C + DB 18H,0EBH,23H,23H ;252A 18EB2323 + DB 36H,0DH ;252E 360D +L2530: CALL L17F3 ;2530 CDF317 + EX DE,HL ;2533 EB + LD B,1 ;2534 0601 + POP HL ;2536 E1 + LD A,(HL) ;2537 7E + RET ;2538 C9 + +L2539: CALL READTIME ;2539 CD3B00 + EX DE,HL ;253C EB + OR A ;253D B7 + JR Z,L2542 ;253E 2802 + LD A,12 ;2540 3E0C +L2542: EXX ;2542 D9 + LD HL,L4559 ;2543 215945 + PUSH HL ;2546 E5 + EXX ;2547 D9 + LD DE,LF1F0 ;2548 11F0F1 + CALL L2560 ;254B CD6025 + LD DE,LFFC4 ;254E 11C4FF + CALL L255F ;2551 CD5F25 + LD A,L ;2554 7D + CALL L2569 ;2555 CD6925 + POP DE ;2558 D1 + LD BC,L0106 ;2559 010601 + POP HL ;255C E1 + LD A,(HL) ;255D 7E + RET ;255E C9 + +L255F: XOR A ;255F AF +L2560: ADD HL,DE ;2560 19 + JR NC,L2566 ;2561 3003 + INC A ;2563 3C + JR L2560 ;2564 18FA + +L2566: OR A ;2566 B7 + SBC HL,DE ;2567 ED52 +L2569: LD BC,L30F6 ;2569 01F630 +L256C: ADD A,C ;256C 81 + JR NC,L2572 ;256D 3003 + INC B ;256F 04 + JR L256C ;2570 18FA + +L2572: ADD A,58 ;2572 C63A + EX AF,AF' ;2574 08 + LD A,B ;2575 78 + EXX ;2576 D9 + LD (HL),A ;2577 77 + INC HL ;2578 23 + EX AF,AF' ;2579 08 + LD (HL),A ;257A 77 + INC HL ;257B 23 + LD (HL),13 ;257C 360D + EXX ;257E D9 + RET ;257F C9 + +L2580: LD BC,L0100 ;2580 010001 + JR L2588 ;2583 1803 + +L2585: LD BC,COLDSTART ;2585 010000 +L2588: INC HL ;2588 23 + CALL L20D9 ;2589 CDD920 + JP Z,L138E ;258C CA8E13 + PUSH HL ;258F E5 + LD L,C ;2590 69 + LD H,0 ;2591 2600 + LD C,E ;2593 4B + LD E,D ;2594 5A + LD B,H ;2595 44 + LD D,H ;2596 54 + PUSH BC ;2597 C5 + INC HL ;2598 23 + CALL L16C8 ;2599 CDC816 + POP HL ;259C E1 + ADD HL,DE ;259D 19 + EX DE,HL ;259E EB + LD A,(L20D6) ;259F 3AD620 + OR A ;25A2 B7 + JP NZ,L25B5 ;25A3 C2B525 + LD HL,L0005 ;25A6 210500 + CALL L16C8 ;25A9 CDC816 + POP HL ;25AC E1 + ADD HL,DE ;25AD 19 + EX DE,HL ;25AE EB + LD BC,L0005 ;25AF 010500 + JP L25C7 ;25B2 C3C725 + +L25B5: POP HL ;25B5 E1 +L25B6: LD A,D ;25B6 7A + OR E ;25B7 B3 + JP Z,L25C1 ;25B8 CAC125 + DEC DE ;25BB 1B + CALL L1633 ;25BC CD3316 + JR L25B6 ;25BF 18F5 + +L25C1: CALL L17F3 ;25C1 CDF317 + EX DE,HL ;25C4 EB + LD B,1 ;25C5 0601 +L25C7: LD HL,(L20D4) ;25C7 2AD420 + LD A,(HL) ;25CA 7E + RET ;25CB C9 + +L25CC: INC HL ;25CC 23 +L25CD: LD A,(HL) ;25CD 7E + CP 32 ;25CE FE20 + JR Z,L25CC ;25D0 28FA + SUB 65 ;25D2 D641 + CP 26 ;25D4 FE1A + LD A,(HL) ;25D6 7E + RET NC ;25D7 D0 + LD E,(HL) ;25D8 5E + LD D,32 ;25D9 1620 +L25DB: INC HL ;25DB 23 + LD A,(HL) ;25DC 7E + CP D ;25DD BA + JR Z,L25DB ;25DE 28FB + SUB 48 ;25E0 D630 + CP 10 ;25E2 FE0A + JR C,L25ED ;25E4 3807 + SUB 17 ;25E6 D611 + CP 26 ;25E8 FE1A + LD A,(HL) ;25EA 7E + CCF ;25EB 3F + RET C ;25EC D8 +L25ED: LD D,(HL) ;25ED 56 + LD A,70 ;25EE 3E46 + CP E ;25F0 BB + JR NZ,L25F9 ;25F1 2006 + LD A,78 ;25F3 3E4E + CP D ;25F5 BA + JP Z,L260E ;25F6 CA0E26 +L25F9: INC HL ;25F9 23 + LD A,(HL) ;25FA 7E + CP 32 ;25FB FE20 + JR Z,L25F9 ;25FD 28FA + SUB 48 ;25FF D630 + CP 10 ;2601 FE0A + JR C,L25F9 ;2603 38F4 + SUB 17 ;2605 D611 + CP 26 ;2607 FE1A + JR C,L25F9 ;2609 38EE +L260B: LD A,(HL) ;260B 7E + SCF ;260C 37 + RET ;260D C9 + +L260E: CALL L162C ;260E CD2C16 + SCF ;2611 37 + RET ;2612 C9 + +L2613: CALL L25CD ;2613 CDCD25 + JP NC,L138E ;2616 D28E13 + LD A,70 ;2619 3E46 + CP E ;261B BB + JP NZ,L260B ;261C C20B26 + LD A,78 ;261F 3E4E + CP D ;2621 BA + JP NZ,L260B ;2622 C20B26 + JP L138E ;2625 C38E13 + +L2628: DW L34F1 ;2628 F134 + DW L34F1 ;262A F134 + DW L351C ;262C 1C35 + DW L351C ;262E 1C35 + DW L3520 ;2630 2035 + DW L3520 ;2632 2035 + DW L3512 ;2634 1235 + DW L3504 ;2636 0435 + DW L3508 ;2638 0835 + DW L270B ;263A 0B27 + DW L270E ;263C 0E27 + DW L2711 ;263E 1127 + DW L2D4D ;2640 4D2D + DW L2D4A ;2642 4A2D + DW L2E59 ;2644 592E + DW L2F30 ;2646 302F + DW L3B0B ;2648 0B3B +L264A: DW L267A ;264A 7A26 + DW L26AC ;264C AC26 + DW L26D0 ;264E D026 + DW L2714 ;2650 1427 + DW L2723 ;2652 2327 + DW L273D ;2654 3D27 + DW L2776 ;2656 7627 + DW L2759 ;2658 5927 + DW L27B8 ;265A B827 + DW L27D9 ;265C D927 + DW L2801 ;265E 0128 + DW L2827 ;2660 2728 +L2662: DW L352F ;2662 2F35 + DW L35B0 ;2664 B035 + DW L36A2 ;2666 A236 + DW L36B1 ;2668 B136 + DW L3A25 ;266A 253A + DW L37A6 ;266C A637 + DW L340E ;266E 0E34 + DW L3A13 ;2670 133A + DW L38DF ;2672 DF38 + DW L2839 ;2674 3928 + DW L283E ;2676 3E28 + DW L36DC ;2678 DC36 +L267A: CALL L22AF ;267A CDAF22 + CALL L180F ;267D CD0F18 + PUSH DE ;2680 D5 + PUSH BC ;2681 C5 +L2682: CALL L169A ;2682 CD9A16 + INC L ;2685 2C + CALL L19A9 ;2686 CDA919 + CALL L169A ;2689 CD9A16 + ADD HL,HL ;268C 29 + POP BC ;268D C1 + EX (SP),HL ;268E E3 + EX DE,HL ;268F EB + LD A,C ;2690 79 + SUB L ;2691 95 + JP C,L26A8 ;2692 DAA826 + PUSH HL ;2695 E5 + LD C,A ;2696 4F + PUSH DE ;2697 D5 + CALL L1801 ;2698 CD0118 + ADD HL,DE ;269B 19 + EX DE,HL ;269C EB +L269D: CALL L1766 ;269D CD6617 + CALL L1651 ;26A0 CD5116 + CALL L189C ;26A3 CD9C18 + POP DE ;26A6 D1 + POP BC ;26A7 C1 +L26A8: POP HL ;26A8 E1 + JP L162D ;26A9 C32D16 + +L26AC: CALL L22AF ;26AC CDAF22 + CALL L180F ;26AF CD0F18 + PUSH DE ;26B2 D5 + PUSH BC ;26B3 C5 + CALL L169A ;26B4 CD9A16 + INC L ;26B7 2C + CALL L19A9 ;26B8 CDA919 + CALL L169A ;26BB CD9A16 + ADD HL,HL ;26BE 29 + POP BC ;26BF C1 + EX (SP),HL ;26C0 E3 + EX DE,HL ;26C1 EB + LD A,C ;26C2 79 + SUB L ;26C3 95 + JP C,L26A8 ;26C4 DAA826 + PUSH HL ;26C7 E5 + LD C,A ;26C8 4F + PUSH DE ;26C9 D5 + CALL L1801 ;26CA CD0118 + JP L269D ;26CD C39D26 + +L26D0: CALL L22AF ;26D0 CDAF22 + CALL L180F ;26D3 CD0F18 + PUSH DE ;26D6 D5 + PUSH BC ;26D7 C5 + CALL L169A ;26D8 CD9A16 + INC L ;26DB 2C + CALL L19A9 ;26DC CDA919 + LD A,E ;26DF 7B + DEC A ;26E0 3D + JP Z,L2708 ;26E1 CA0827 + JP C,L2708 ;26E4 DA0827 + POP BC ;26E7 C1 + LD E,A ;26E8 5F + LD A,C ;26E9 79 + SUB E ;26EA 93 + JP NC,L26F0 ;26EB D2F026 + XOR A ;26EE AF + LD E,C ;26EF 59 +L26F0: LD C,E ;26F0 4B + LD B,D ;26F1 42 + POP DE ;26F2 D1 + PUSH DE ;26F3 D5 + PUSH AF ;26F4 F5 + PUSH BC ;26F5 C5 + CALL L1801 ;26F6 CD0118 + POP BC ;26F9 C1 + CALL L1766 ;26FA CD6617 + CALL L1651 ;26FD CD5116 + CALL L189C ;2700 CD9C18 + POP AF ;2703 F1 + LD C,A ;2704 4F + LD B,0 ;2705 0600 + PUSH BC ;2707 C5 +L2708: JP L2682 ;2708 C38226 + +L270B: JP L138E ;270B C38E13 + +L270E: JP L138E ;270E C38E13 + +L2711: JP L138E ;2711 C38E13 + +L2714: CALL L22AF ;2714 CDAF22 + CALL L180F ;2717 CD0F18 + CALL L169A ;271A CD9A16 + ADD HL,HL ;271D 29 + PUSH HL ;271E E5 + LD A,C ;271F 79 + JP L278A ;2720 C38A27 + +L2723: CALL L19A9 ;2723 CDA919 + CALL L169A ;2726 CD9A16 + ADD HL,HL ;2729 29 + PUSH HL ;272A E5 + LD A,E ;272B 7B + CP 32 ;272C FE20 + JR NC,L2732 ;272E 3002 + LD E,13 ;2730 1E0D +L2732: LD HL,L4400 ;2732 210044 + PUSH HL ;2735 E5 + LD (HL),E ;2736 73 + INC HL ;2737 23 + LD (HL),13 ;2738 360D + JP L2752 ;273A C35227 + +L273D: CALL L22AF ;273D CDAF22 + CALL L1814 ;2740 CD1418 + CALL L169A ;2743 CD9A16 + ADD HL,HL ;2746 29 + PUSH HL ;2747 E5 + LD HL,(L4644) ;2748 2A4446 + LD DE,L4400 ;274B 110044 + PUSH DE ;274E D5 + CALL L322D ;274F CD2D32 +L2752: POP HL ;2752 E1 + CALL L18C4 ;2753 CDC418 + POP HL ;2756 E1 + LD A,(HL) ;2757 7E + RET ;2758 C9 + +L2759: CALL L22AF ;2759 CDAF22 + CALL L180F ;275C CD0F18 + CALL L169A ;275F CD9A16 + ADD HL,HL ;2762 29 + PUSH HL ;2763 E5 + CALL L1801 ;2764 CD0118 + EX DE,HL ;2767 EB + CALL L190D ;2768 CD0D19 + LD (HL),B ;276B 70 + DAA ;276C 27 + JP L26A8 ;276D C3A826 + + DB 11H,19H,16H,0C3H ;2770 111916C3 Link 2770 found at , $276B + DB 77H,23H ;2774 7723 +L2776: CALL L22AF ;2776 CDAF22 + CALL L180F ;2779 CD0F18 + CALL L169A ;277C CD9A16 + ADD HL,HL ;277F 29 + PUSH HL ;2780 E5 + CALL L1801 ;2781 CD0118 + LD A,(DE) ;2784 1A + CP 13 ;2785 FE0D + JP Z,L1398 ;2787 CA9813 +L278A: OR A ;278A B7 + LD BC,L8000 ;278B 010080 + CALL NZ,L27A6 ;278E C4A627 + LD HL,(L4644) ;2791 2A4446 + LD DE,USER ;2794 110300 + LD (HL),B ;2797 70 + INC HL ;2798 23 +L2799: LD (HL),D ;2799 72 + INC HL ;279A 23 + DEC E ;279B 1D + JR NZ,L2799 ;279C 20FB + LD (HL),C ;279E 71 + LD BC,L0005 ;279F 010500 + POP HL ;27A2 E1 + JP L162D ;27A3 C32D16 + +L27A6: LD E,8 ;27A6 1E08 +L27A8: OR A ;27A8 B7 + JP M,L27B1 ;27A9 FAB127 + RLA ;27AC 17 + DEC E ;27AD 1D + JP L27A8 ;27AE C3A827 + +L27B1: LD C,A ;27B1 4F + LD A,192 ;27B2 3EC0 + ADD A,E ;27B4 83 + LD B,A ;27B5 47 + RET ;27B6 C9 + +L27B7: DB 00H ;27B7 00 +L27B8: CALL L198C ;27B8 CD8C19 + CALL L169A ;27BB CD9A16 + ADD HL,HL ;27BE 29 + PUSH HL ;27BF E5 + LD A,(L27B7) ;27C0 3AB727 + OR A ;27C3 B7 + JP NZ,L27D1 ;27C4 C2D127 + LD HL,(04563H) ;27C7 2A6345 + DEC HL ;27CA 2B + CALL L1662 ;27CB CD6216 + JP NC,L27D4 ;27CE D2D427 +L27D1: LD A,(DE) ;27D1 1A + JR L27D6 ;27D2 1802 + +L27D4: LD A,32 ;27D4 3E20 +L27D6: JP L278A ;27D6 C38A27 + +L27D9: CALL L19A9 ;27D9 CDA919 + LD B,19 ;27DC 0613 + CALL L169A ;27DE CD9A16 + ADD HL,HL ;27E1 29 + LD A,39 ;27E2 3E27 + ADD A,A ;27E4 87 + SUB E ;27E5 93 + JP C,L1398 ;27E6 DA9813 + LD A,(L457D) ;27E9 3A7D45 + OR A ;27EC B7 + LD A,(CHARCOUNT) ;27ED 3A9411 + JR Z,L27F7 ;27F0 2805 + LD B,32 ;27F2 0620 + LD A,(L3D26) ;27F4 3A263D +L27F7: LD D,A ;27F7 57 + LD A,E ;27F8 7B + SUB D ;27F9 92 + JP NC,L27FE ;27FA D2FE27 + XOR A ;27FD AF +L27FE: JP L280B ;27FE C30B28 + +L2801: CALL L19A9 ;2801 CDA919 + LD B,32 ;2804 0620 + CALL L169A ;2806 CD9A16 + ADD HL,HL ;2809 29 + LD A,E ;280A 7B +L280B: PUSH HL ;280B E5 + LD HL,L4400 ;280C 210044 + PUSH HL ;280F E5 + LD C,A ;2810 4F +L2811: OR A ;2811 B7 + JP Z,L281B ;2812 CA1B28 + LD (HL),B ;2815 70 + INC HL ;2816 23 + DEC A ;2817 3D + JP L2811 ;2818 C31128 + +L281B: LD (HL),13 ;281B 360D + LD B,0 ;281D 0600 + POP HL ;281F E1 + CALL L18DF ;2820 CDDF18 + POP HL ;2823 E1 + JP L162D ;2824 C32D16 + +L2827: PUSH HL ;2827 E5 + CALL L173C ;2828 CD3C17 + LD DE,L4400 ;282B 110044 + PUSH DE ;282E D5 + CALL L16F7 ;282F CDF716 + POP HL ;2832 E1 + CALL L22AF ;2833 CDAF22 + POP HL ;2836 E1 + LD A,(HL) ;2837 7E + RET ;2838 C9 + +L2839: LD A,(DE) ;2839 1A + OR 128 ;283A F680 + LD (DE),A ;283C 12 + RET ;283D C9 + +L283E: LD A,(DE) ;283E 1A + LD DE,L161E ;283F 111E16 + OR A ;2842 B7 + JP P,L2851 ;2843 F25128 + LD DE,L1614 ;2846 111416 + CP 128 ;2849 FE80 + JP NZ,L2851 ;284B C25128 + LD DE,L1619 ;284E 111916 +L2851: JP L181A ;2851 C31A18 + +L2854: JP COLDSTART ;2854 C30000 + +L2857: CALL L2613 ;2857 CD1326 + CALL L2436 ;285A CD3624 + LD (L4801),HL ;285D 220148 + CALL L197B ;2860 CD7B19 + CALL KEYBOARD ;2863 CD1B00 + CP 27 ;2866 FE1B + JP Z,L124B ;2868 CA4B12 + LD HL,L45A2 ;286B 21A245 + OR A ;286E B7 + JP NZ,L28A3 ;286F C2A328 + LD (L45A4),A ;2872 32A445 +L2875: LD A,(L4571) ;2875 3A7145 + LD B,48 ;2878 0630 + OR A ;287A B7 + JP Z,L2880 ;287B CA8028 + LD B,13 ;287E 060D +L2880: LD (HL),B ;2880 70 + INC HL ;2881 23 + LD (HL),13 ;2882 360D + DEC HL ;2884 2B + CALL L18C7 ;2885 CDC718 + LD A,(L4571) ;2888 3A7145 + OR A ;288B B7 + JP NZ,L2898 ;288C C29828 + CALL L1801 ;288F CD0118 + EX DE,HL ;2892 EB + CALL L190D ;2893 CD0D19 +L2896: OR D ;2896 B2 + ADD HL,DE ;2897 19 +L2898: CALL L1976 ;2898 CD7619 + CALL L1B6A ;289B CD6A1B + SBC A,L ;289E 9D + INC DE ;289F 13 + JP L19B2 ;28A0 C3B219 + +L28A3: LD B,A ;28A3 47 + LD A,(L45A4) ;28A4 3AA445 + CP B ;28A7 B8 + JP Z,L2875 ;28A8 CA7528 + LD A,B ;28AB 78 + LD (L45A4),A ;28AC 32A445 + JP L2880 ;28AF C38028 + +L28B2: CALL L198C ;28B2 CD8C19 + CALL L169A ;28B5 CD9A16 + ADD HL,HL ;28B8 29 + LD (L4801),HL ;28B9 220148 + LD HL,L19B2 ;28BC 21B219 + PUSH HL ;28BF E5 + EX DE,HL ;28C0 EB + JP (HL) ;28C1 E9 + +L28C2: CALL L168B ;28C2 CD8B16 + LD C,L ;28C5 4D + RET C ;28C6 D8 + JR Z,L2896 ;28C7 28CD + SBC A,D ;28C9 9A + LD D,65 ;28CA 1641 + CALL L169A ;28CC CD9A16 + LD E,B ;28CF 58 + LD (L4801),HL ;28D0 220148 + LD HL,(04561H) ;28D3 2A6145 + JR L28F5 ;28D6 181D + + DB 0CDH,8CH,19H,22H ;28D8 CD8C1922 Link 28D8 found at , $28C6 + DB 01H,48H,2AH,61H ;28DC 01482A61 + DB 45H,0CDH,62H,16H ;28E0 45CD6216 + DB 0DAH,93H,13H,2AH ;28E4 DA93132A + DB 44H,46H,01H,0C8H ;28E8 444601C8 + DB 00H,09H,0CDH,62H ;28EC 0009CD62 + DB 16H,0D2H,93H,13H ;28F0 16D29313 + DB 0EBH ;28F4 EB +L28F5: LD (04563H),HL ;28F5 226345 + LD SP,HL ;28F8 F9 + JP L19B2 ;28F9 C3B219 + +L28FC: LD HL,(L47FF) ;28FC 2AFF47 + LD A,L ;28FF 7D + OR H ;2900 B4 + JP NZ,L13BB ;2901 C2BB13 + LD A,(L4565) ;2904 3A6545 + OR A ;2907 B7 + JP Z,L13BB ;2908 CABB13 + PUSH AF ;290B F5 + CALL L13C1 ;290C CDC113 + LD BC,CRLF2 ;290F 010600 + LD DE,L47FD ;2912 11FD47 + LD HL,L4566 ;2915 216645 + CALL L1799 ;2918 CD9917 + POP AF ;291B F1 + LD HL,(L4801) ;291C 2A0148 + OR A ;291F B7 + JP M,L1E7C ;2920 FA7C1E + DEC A ;2923 3D + JP Z,L19B2 ;2924 CAB219 + JP L19E1 ;2927 C3E119 + +L292A: LD A,1 ;292A 3E01 + JR L292F ;292C 1801 + +L292E: XOR A ;292E AF +L292F: PUSH AF ;292F F5 + CALL L19A9 ;2930 CDA919 + PUSH DE ;2933 D5 + CALL L169A ;2934 CD9A16 + INC L ;2937 2C + CALL L19A9 ;2938 CDA919 + LD (L4801),HL ;293B 220148 + LD A,E ;293E 7B +L293F: SUB 50 ;293F D632 + JR NC,L293F ;2941 30FC + ADD A,50 ;2943 C632 + LD E,A ;2945 5F + POP BC ;2946 C1 + LD A,C ;2947 79 +L2948: SUB 80 ;2948 D650 + JR NC,L2948 ;294A 30FC + ADD A,80 ;294C C650 + LD C,A ;294E 4F + XOR A ;294F AF + SRL C ;2950 CB39 + JR NC,L2962 ;2952 300E + SRL E ;2954 CB3B + JR NC,L295C ;2956 3004 + ADD A,4 ;2958 C604 +L295A: ADD A,2 ;295A C602 +L295C: ADD A,1 ;295C C601 +L295E: ADD A,1 ;295E C601 + JR L2968 ;2960 1806 + +L2962: SRL E ;2962 CB3B + JR NC,L295E ;2964 30F8 + JR L295A ;2966 18F2 + +L2968: PUSH AF ;2968 F5 + LD HL,VIDRAM ;2969 2100D0 + LD A,40 ;296C 3E28 +L296E: ADD HL,DE ;296E 19 + DEC A ;296F 3D + JR NZ,L296E ;2970 20FC + ADD HL,BC ;2972 09 + LD A,(HL) ;2973 7E + CP 240 ;2974 FEF0 + JR NC,L297A ;2976 3002 + LD A,240 ;2978 3EF0 +L297A: POP BC ;297A C1 + LD C,A ;297B 4F + POP AF ;297C F1 + OR A ;297D B7 + LD A,B ;297E 78 + JR Z,L2984 ;297F 2803 + OR C ;2981 B1 + JR L2986 ;2982 1802 + +L2984: CPL ;2984 2F + AND C ;2985 A1 +L2986: CP 240 ;2986 FEF0 + JR NZ,L298B ;2988 2001 + XOR A ;298A AF +L298B: LD (HL),A ;298B 77 + JP L19B2 ;298C C3B219 + +L298F: XOR A ;298F AF + JP L2A38 ;2990 C3382A + +L2993: LD A,(STACK) ;2993 3AF010 + CP 2 ;2996 FE02 + JP NZ,L2A66 ;2998 C2662A + CALL L2B08 ;299B CD082B + CALL L2B48 ;299E CD482B + CALL CHECK ;29A1 CD2D00 + PUSH AF ;29A4 F5 + CALL L2B60 ;29A5 CD602B + POP AF ;29A8 F1 + JP C,L2B41 ;29A9 DA412B + LD DE,L29B5 ;29AC 11B529 + CALL L1357 ;29AF CD5713 + JP L19B2 ;29B2 C3B219 + +L29B5: DB "OK" ;29B5 4F4B + DB 0DH ;29B7 0D +L29B8: DB 00H ;29B8 00 +L29B9: DW 00000H ;29B9 0000 +L29BB: EX DE,HL ;29BB EB + CALL L2B9C ;29BC CD9C2B + LD HL,L0D02 ;29BF 21020D + LD (STACK),HL ;29C2 22F010 + XOR A ;29C5 AF + PUSH AF ;29C6 F5 + LD HL,L4806 ;29C7 210648 +L29CA: LD (FILESTART),HL ;29CA 220411 + LD HL,COLDSTART ;29CD 210000 + LD (EXECUTE),HL ;29D0 220611 + LD (L1108),HL ;29D3 220811 + EX DE,HL ;29D6 EB + CALL L1829 ;29D7 CD2918 + JP Z,L29FB ;29DA CAFB29 + CALL L2383 ;29DD CD8323 + LD A,D ;29E0 7A + OR A ;29E1 B7 + JP Z,L138E ;29E2 CA8E13 + LD A,C ;29E5 79 + CP 17 ;29E6 FE11 + JP NC,L138E ;29E8 D28E13 + CALL L1801 ;29EB CD0118 + PUSH HL ;29EE E5 + LD HL,HEADBUFFER ;29EF 21F110 + EX DE,HL ;29F2 EB + CALL L1799 ;29F3 CD9917 + EX DE,HL ;29F6 EB + ADD HL,BC ;29F7 09 + LD (HL),13 ;29F8 360D + POP HL ;29FA E1 +L29FB: LD (L4801),HL ;29FB 220148 + POP AF ;29FE F1 + JP NZ,L2BC6 ;29FF C2C62B + LD HL,(L29B9) ;2A02 2AB929 + LD (L1108),HL ;2A05 220811 + LD A,(L29B8) ;2A08 3AB829 + OR A ;2A0B B7 + JP NZ,L124B ;2A0C C24B12 + LD HL,(L4634) ;2A0F 2A3446 + LD DE,L4806 ;2A12 110648 + EX DE,HL ;2A15 EB + CALL L1668 ;2A16 CD6816 + LD (FILESIZE),HL ;2A19 220211 + CALL PHEAD ;2A1C CD2100 + JP C,L1385 ;2A1F DA8513 + CALL CRLF ;2A22 CD0900 + CALL L2B48 ;2A25 CD482B + CALL PDATA ;2A28 CD2400 + PUSH AF ;2A2B F5 + CALL L2B60 ;2A2C CD602B + POP AF ;2A2F F1 + JP NC,L19B2 ;2A30 D2B219 + JP L1385 ;2A33 C38513 + +L2A36: LD A,1 ;2A36 3E01 +L2A38: LD (L4592),A ;2A38 329245 + XOR A ;2A3B AF + LD (L458E),A ;2A3C 328E45 +L2A3F: CALL L1829 ;2A3F CD2918 + JP Z,L2A63 ;2A42 CA632A + CALL L2383 ;2A45 CD8323 + CALL L180F ;2A48 CD0F18 + CALL L1829 ;2A4B CD2918 + JP NZ,L138E ;2A4E C28E13 + CALL L1801 ;2A51 CD0118 + LD A,C ;2A54 79 + CP 17 ;2A55 FE11 + JP NC,L138E ;2A57 D28E13 + LD A,1 ;2A5A 3E01 + LD (L458E),A ;2A5C 328E45 + LD (L458F),DE ;2A5F ED538F45 +L2A63: LD (L4801),HL ;2A63 220148 +L2A66: CALL LHEAD ;2A66 CD2700 + JP C,L2B41 ;2A69 DA412B + CALL L2B0D ;2A6C CD0D2B + LD HL,STACK ;2A6F 21F010 + LD A,(HL) ;2A72 7E + OR A ;2A73 B7 + JP Z,L2A66 ;2A74 CA662A + CP 4 ;2A77 FE04 + JP NC,L2A66 ;2A79 D2662A + LD A,(L458E) ;2A7C 3A8E45 + OR A ;2A7F B7 + JP Z,L2A99 ;2A80 CA992A + LD HL,(L458F) ;2A83 2A8F45 + LD DE,HEADBUFFER ;2A86 11F110 + LD C,16 ;2A89 0E10 +L2A8B: LD A,(DE) ;2A8B 1A + CP (HL) ;2A8C BE + JP NZ,L2A66 ;2A8D C2662A + CP 13 ;2A90 FE0D + JR Z,L2A99 ;2A92 2805 + INC HL ;2A94 23 + INC DE ;2A95 13 + DEC C ;2A96 0D + JR NZ,L2A8B ;2A97 20F2 +L2A99: LD A,(STACK) ;2A99 3AF010 + LD C,A ;2A9C 4F + LD A,(L4592) ;2A9D 3A9245 + OR A ;2AA0 B7 + JP Z,L2993 ;2AA1 CA9329 + CP 2 ;2AA4 FE02 + JP NZ,L2AB1 ;2AA6 C2B12A + DEC C ;2AA9 0D + CP C ;2AAA B9 + JP Z,L2BEA ;2AAB CAEA2B + JP L2A66 ;2AAE C3662A + +L2AB1: LD A,C ;2AB1 79 + CP 1 ;2AB2 FE01 + JP Z,L2B74 ;2AB4 CA742B + CP 2 ;2AB7 FE02 + JP NZ,L2A66 ;2AB9 C2662A + CALL L2B9C ;2ABC CD9C2B + LD BC,L0064 ;2ABF 016400 + LD HL,L4806 ;2AC2 210648 + CALL L1742 ;2AC5 CD4217 + EX DE,HL ;2AC8 EB + LD HL,(FILESIZE) ;2AC9 2A0211 + CALL L1662 ;2ACC CD6216 + JP NC,L1393 ;2ACF D29313 + CALL L2B12 ;2AD2 CD122B + LD A,(L1108) ;2AD5 3A0811 + LD (L29B8),A ;2AD8 32B829 + LD HL,L4806 ;2ADB 210648 + LD (FILESTART),HL ;2ADE 220411 + CALL LDATA ;2AE1 CD2A00 + JP C,L2B3C ;2AE4 DA3C2B + LD DE,L4806 ;2AE7 110648 + LD HL,(FILESIZE) ;2AEA 2A0211 + ADD HL,DE ;2AED 19 + LD (L4634),HL ;2AEE 223446 + CALL L2B60 ;2AF1 CD602B + CALL L1857 ;2AF4 CD5718 + CALL L187C ;2AF7 CD7C18 + LD A,(L1109) ;2AFA 3A0911 + OR A ;2AFD B7 + JP Z,L19B2 ;2AFE CAB219 + LD HL,L2B07 ;2B01 21072B + JP L1CCB ;2B04 C3CB1C + +L2B07: DB 0DH ;2B07 0D +L2B08: LD DE,L2B31 ;2B08 11312B + JR L2B15 ;2B0B 1808 + +L2B0D: LD DE,L2B21 ;2B0D 11212B + JR L2B15 ;2B10 1803 + +L2B12: LD DE,L2B28 ;2B12 11282B +L2B15: CALL L1357 ;2B15 CD5713 + LD DE,HEADBUFFER ;2B18 11F110 + CALL MESSAGE ;2B1B CD1500 + JP CRLF ;2B1E C30900 + +L2B21: DB "FOUND " ;2B21 464F554E4420 + DB 0DH ;2B27 0D +L2B28: DB "LOADING " ;2B28 4C4F4144494E4720 + DB 0DH ;2B30 0D +L2B31: DB "VERIFYING " ;2B31 564552494659494E4720 + DB 0DH ;2B3B 0D +L2B3C: PUSH AF ;2B3C F5 + CALL L1832 ;2B3D CD3218 + POP AF ;2B40 F1 +L2B41: DEC A ;2B41 3D + JP Z,L1398 ;2B42 CA9813 + JP L1385 ;2B45 C38513 + +L2B48: LD HL,L4806 ;2B48 210648 +L2B4B: LD E,(HL) ;2B4B 5E + INC HL ;2B4C 23 + LD D,(HL) ;2B4D 56 + LD A,E ;2B4E 7B + OR D ;2B4F B2 + RET Z ;2B50 C8 + PUSH DE ;2B51 D5 + DEC HL ;2B52 2B + LD A,E ;2B53 7B + SUB L ;2B54 95 + LD E,A ;2B55 5F + LD A,D ;2B56 7A + SBC A,H ;2B57 9C + LD D,A ;2B58 57 + LD (HL),E ;2B59 73 + INC HL ;2B5A 23 + LD (HL),D ;2B5B 72 + POP HL ;2B5C E1 + JP L2B4B ;2B5D C34B2B + +L2B60: LD HL,L4806 ;2B60 210648 +L2B63: LD E,(HL) ;2B63 5E + INC HL ;2B64 23 + LD D,(HL) ;2B65 56 + LD A,E ;2B66 7B + OR D ;2B67 B2 + RET Z ;2B68 C8 + DEC HL ;2B69 2B + EX DE,HL ;2B6A EB + ADD HL,DE ;2B6B 19 + EX DE,HL ;2B6C EB + LD (HL),E ;2B6D 73 + INC HL ;2B6E 23 + LD (HL),D ;2B6F 72 + EX DE,HL ;2B70 EB + JP L2B63 ;2B71 C3632B + +L2B74: LD HL,(FILESTART) ;2B74 2A0411 + EX DE,HL ;2B77 EB + LD HL,(04563H) ;2B78 2A6345 + DEC HL ;2B7B 2B + CALL L1662 ;2B7C CD6216 + JP NC,L13B6 ;2B7F D2B613 + LD HL,(FILESIZE) ;2B82 2A0211 + ADD HL,DE ;2B85 19 + JP C,L1393 ;2B86 DA9313 + EX DE,HL ;2B89 EB + LD HL,(04561H) ;2B8A 2A6145 + CALL L1662 ;2B8D CD6216 + JP C,L1393 ;2B90 DA9313 + CALL L2B12 ;2B93 CD122B + CALL LDATA ;2B96 CD2A00 + JP L19B2 ;2B99 C3B219 + +L2B9C: PUSH HL ;2B9C E5 + LD HL,(L47FF) ;2B9D 2AFF47 + LD A,H ;2BA0 7C + OR L ;2BA1 B5 + JP NZ,L138E ;2BA2 C28E13 + POP HL ;2BA5 E1 + RET ;2BA6 C9 + +L2BA7: LD A,(L457A) ;2BA7 3A7A45 + OR A ;2BAA B7 + JP NZ,L13B1 ;2BAB C2B113 + INC A ;2BAE 3C + PUSH AF ;2BAF F5 + EX DE,HL ;2BB0 EB + LD HL,L0D03 ;2BB1 21030D + LD (STACK),HL ;2BB4 22F010 + LD HL,L0080 ;2BB7 218000 + LD (FILESIZE),HL ;2BBA 220211 + LD HL,L45AE ;2BBD 21AE45 + LD (L457B),HL ;2BC0 227B45 + JP L29CA ;2BC3 C3CA29 + +L2BC6: CALL PHEAD ;2BC6 CD2100 + JP C,L1385 ;2BC9 DA8513 + CALL CRLF ;2BCC CD0900 + LD A,1 ;2BCF 3E01 + LD (L457A),A ;2BD1 327A45 + JP L19B2 ;2BD4 C3B219 + +L2BD7: LD A,(L457A) ;2BD7 3A7A45 + OR A ;2BDA B7 + JP NZ,L13B1 ;2BDB C2B113 + LD A,2 ;2BDE 3E02 + LD (L4592),A ;2BE0 329245 + XOR A ;2BE3 AF + LD (L458E),A ;2BE4 328E45 + JP L2A3F ;2BE7 C33F2A + +L2BEA: LD (L457A),A ;2BEA 327A45 + CALL L2B12 ;2BED CD122B + LD HL,L45AE ;2BF0 21AE45 + LD (FILESTART),HL ;2BF3 220411 + LD HL,L0080 ;2BF6 218000 + LD (FILESIZE),HL ;2BF9 220211 + LD HL,L462E ;2BFC 212E46 + LD (L457B),HL ;2BFF 227B45 + JP L19B2 ;2C02 C3B219 + +L2C05: LD A,(L457A) ;2C05 3A7A45 + OR A ;2C08 B7 + JP Z,L1B27 ;2C09 CA271B + PUSH HL ;2C0C E5 + DEC A ;2C0D 3D + JP NZ,L2C25 ;2C0E C2252C + LD HL,(L457B) ;2C11 2A7B45 + LD DE,L462E ;2C14 112E46 + CALL L1662 ;2C17 CD6216 + JP NC,L2C2D ;2C1A D22D2C +L2C1D: LD (HL),255 ;2C1D 36FF + CALL PDATA ;2C1F CD2400 + JP C,L1385 ;2C22 DA8513 +L2C25: XOR A ;2C25 AF + LD (L457A),A ;2C26 327A45 + POP HL ;2C29 E1 + JP L1B27 ;2C2A C3271B + +L2C2D: CALL PDATA ;2C2D CD2400 + JP C,L1385 ;2C30 DA8513 + LD HL,L45AE ;2C33 21AE45 + JP L2C1D ;2C36 C31D2C + +L2C39: CALL L168B ;2C39 CD8B16 + CP A ;2C3C BF + LD C,C ;2C3D 49 + INC L ;2C3E 2C + CALL L168B ;2C3F CD8B16 + LD D,H ;2C42 54 + LD C,C ;2C43 49 + INC L ;2C44 2C + LD A,1 ;2C45 3E01 + JR L2C4A ;2C47 1801 + + DB 0AFH ;2C49 AF +L2C4A: LD (L457D),A ;2C4A 327D45 + RET ;2C4D C9 + + DB 3AH,7AH,45H,0FEH ;2C4E 3A7A45FE Link 2C4E found at , $1CAA + DB 01H,0C2H,0B1H,13H ;2C52 01C2B113 + DB 2AH,7BH,45H,0D5H ;2C56 2A7B45D5 + DB 11H,2EH,46H,0CDH ;2C5A 112E46CD + DB 62H,16H,0DAH,6CH ;2C5E 6216DA6C + DB 2CH,0CDH,24H,00H ;2C62 2CCD2400 + DB 0DAH,85H,13H,21H ;2C66 DA851321 + DB 0AEH,45H,0D1H,1AH ;2C6A AE45D11A + DB 77H,23H,13H,0FEH ;2C6E 772313FE + DB 0DH,0C2H,59H,2CH ;2C72 0DC2592C + DB 22H,7BH,45H,0C9H ;2C76 227B45C9 +L2C7A: LD C,A ;2C7A 4F + CALL L2CD0 ;2C7B CDD02C + RET Z ;2C7E C8 + PUSH DE ;2C7F D5 + LD C,0 ;2C80 0E00 + CP 2 ;2C82 FE02 + JP NZ,L13B1 ;2C84 C2B113 + LD (L4592),A ;2C87 329245 + LD HL,(L457B) ;2C8A 2A7B45 +L2C8D: PUSH DE ;2C8D D5 + LD DE,L462E ;2C8E 112E46 + CALL L1662 ;2C91 CD6216 + JP C,L2CA7 ;2C94 DAA72C + CALL LDATA ;2C97 CD2A00 + JP NC,L2CA4 ;2C9A D2A42C + DEC A ;2C9D 3D + JP Z,L1398 ;2C9E CA9813 + JP L1385 ;2CA1 C38513 + +L2CA4: LD HL,L45AE ;2CA4 21AE45 +L2CA7: LD A,(HL) ;2CA7 7E + LD B,A ;2CA8 47 + CP 255 ;2CA9 FEFF + JP NZ,L2CB6 ;2CAB C2B62C + LD A,(L4592) ;2CAE 3A9245 + CP 2 ;2CB1 FE02 + JP Z,L13B1 ;2CB3 CAB113 +L2CB6: XOR A ;2CB6 AF + LD (L4592),A ;2CB7 329245 + LD A,B ;2CBA 78 + POP DE ;2CBB D1 + LD (DE),A ;2CBC 12 + INC HL ;2CBD 23 + INC DE ;2CBE 13 + INC C ;2CBF 0C + CP 13 ;2CC0 FE0D + JP NZ,L2C8D ;2CC2 C28D2C + DEC C ;2CC5 0D + POP DE ;2CC6 D1 + LD (L457B),HL ;2CC7 227B45 + POP HL ;2CCA E1 + INC HL ;2CCB 23 + INC HL ;2CCC 23 + INC HL ;2CCD 23 + PUSH HL ;2CCE E5 + RET ;2CCF C9 + +L2CD0: LD A,(L457D) ;2CD0 3A7D45 + OR A ;2CD3 B7 + LD A,(L457A) ;2CD4 3A7A45 + RET ;2CD7 C9 + +L2CD8: CALL L19A9 ;2CD8 CDA919 + PUSH DE ;2CDB D5 + CALL L169A ;2CDC CD9A16 + INC L ;2CDF 2C + CALL L2613 ;2CE0 CD1326 + CALL L2436 ;2CE3 CD3624 + LD A,B ;2CE6 78 + OR A ;2CE7 B7 + JP NZ,L139D ;2CE8 C29D13 + LD (L4801),HL ;2CEB 220148 + CALL L197B ;2CEE CD7B19 + POP DE ;2CF1 D1 + LD A,E ;2CF2 7B + CP 240 ;2CF3 FEF0 + JP NC,L1398 ;2CF5 D29813 + LD (L2CFC),A ;2CF8 32FC2C + IN A,(PTRDATA) ;2CFB DBFF + OR A ;2CFD B7 + LD B,A ;2CFE 47 + JP Z,L2D0F ;2CFF CA0F2D + LD A,200 ;2D02 3EC8 +L2D04: BIT 7,B ;2D04 CB78 + JP NZ,L2D11 ;2D06 C2112D + SLA B ;2D09 CB20 + DEC A ;2D0B 3D + JP L2D04 ;2D0C C3042D + +L2D0F: LD A,128 ;2D0F 3E80 +L2D11: LD HL,(L4644) ;2D11 2A4446 + LD (HL),A ;2D14 77 + INC HL ;2D15 23 + XOR A ;2D16 AF + LD (HL),A ;2D17 77 + INC HL ;2D18 23 + LD (HL),A ;2D19 77 + INC HL ;2D1A 23 + LD (HL),A ;2D1B 77 + INC HL ;2D1C 23 + LD (HL),B ;2D1D 70 + LD D,A ;2D1E 57 + LD E,A ;2D1F 5F + LD B,A ;2D20 47 + LD C,5 ;2D21 0E05 + CALL L1976 ;2D23 CD7619 + CALL L1B6A ;2D26 CD6A1B + SBC A,L ;2D29 9D + INC DE ;2D2A 13 + JP L19B2 ;2D2B C3B219 + +L2D2E: CALL L19A9 ;2D2E CDA919 + LD A,E ;2D31 7B + CP 240 ;2D32 FEF0 + JP NC,L1398 ;2D34 D29813 + LD (L2D43),A ;2D37 32432D + CALL L169A ;2D3A CD9A16 + INC L ;2D3D 2C + CALL L19A9 ;2D3E CDA919 + LD A,E ;2D41 7B + OUT (PTRDATA),A ;2D42 D3FF + JP L19B5 ;2D44 C3B519 + +L2D47: DW 032AFH ;2D47 AF32 +L2D49: DB 7AH ;2D49 7A +L2D4A: XOR A ;2D4A AF + JR L2D4F ;2D4B 1802 + +L2D4D: LD A,128 ;2D4D 3E80 +L2D4F: PUSH DE ;2D4F D5 + XOR (HL) ;2D50 AE + CPL ;2D51 2F + LD C,A ;2D52 4F + LD A,(DE) ;2D53 1A + AND 128 ;2D54 E680 + LD B,A ;2D56 47 + XOR C ;2D57 A9 + CPL ;2D58 2F + AND 128 ;2D59 E680 + LD C,A ;2D5B 4F +L2D5C: PUSH BC ;2D5C C5 + LD B,(HL) ;2D5D 46 + RES 7,B ;2D5E CBB8 + LD A,(DE) ;2D60 1A + AND 127 ;2D61 E67F + CP B ;2D63 B8 + JP NC,L2D72 ;2D64 D2722D + POP BC ;2D67 C1 + EX DE,HL ;2D68 EB + LD A,B ;2D69 78 + XOR C ;2D6A A9 + CPL ;2D6B 2F + AND 128 ;2D6C E680 + LD B,A ;2D6E 47 + JP L2D5C ;2D6F C35C2D + +L2D72: LD C,A ;2D72 4F + ADD A,64 ;2D73 C640 + LD (L2D49),A ;2D75 32492D + LD A,C ;2D78 79 + SUB B ;2D79 90 + POP BC ;2D7A C1 + LD (L2D47),BC ;2D7B ED43472D + PUSH DE ;2D7F D5 + INC HL ;2D80 23 + LD E,(HL) ;2D81 5E + INC HL ;2D82 23 + LD D,(HL) ;2D83 56 + INC HL ;2D84 23 + LD C,(HL) ;2D85 4E + INC HL ;2D86 23 + LD B,(HL) ;2D87 46 + POP HL ;2D88 E1 + INC HL ;2D89 23 + JP Z,L2DAB ;2D8A CAAB2D +L2D8D: CP 8 ;2D8D FE08 + JP NC,L2DA1 ;2D8F D2A12D +L2D92: SRL B ;2D92 CB38 + RR C ;2D94 CB19 + RR D ;2D96 CB1A + RR E ;2D98 CB1B + DEC A ;2D9A 3D + JP NZ,L2D92 ;2D9B C2922D + JP L2DAB ;2D9E C3AB2D + +L2DA1: LD E,D ;2DA1 5A + LD D,C ;2DA2 51 + LD C,B ;2DA3 48 + LD B,0 ;2DA4 0600 + SUB 8 ;2DA6 D608 + JP NZ,L2D8D ;2DA8 C28D2D +L2DAB: LD A,(L2D47) ;2DAB 3A472D + OR A ;2DAE B7 + JP Z,L2DEE ;2DAF CAEE2D + LD A,(HL) ;2DB2 7E + INC HL ;2DB3 23 + ADD A,E ;2DB4 83 + LD E,A ;2DB5 5F + LD A,(HL) ;2DB6 7E + INC HL ;2DB7 23 + ADC A,D ;2DB8 8A + LD D,A ;2DB9 57 + LD A,(HL) ;2DBA 7E + INC HL ;2DBB 23 + ADC A,C ;2DBC 89 + LD C,A ;2DBD 4F + LD A,(HL) ;2DBE 7E + ADC A,B ;2DBF 88 + LD B,A ;2DC0 47 + JP NC,L2DD0 ;2DC1 D2D02D + RR B ;2DC4 CB18 + RR C ;2DC6 CB19 + RR D ;2DC8 CB1A + RR E ;2DCA CB1B + LD HL,L2D49 ;2DCC 21492D + INC (HL) ;2DCF 34 +L2DD0: LD HL,L2D49 ;2DD0 21492D + LD A,(HL) ;2DD3 7E + SUB 64 ;2DD4 D640 + JP C,L2DE0 ;2DD6 DAE02D + JP M,L1398 ;2DD9 FA9813 + DEC HL ;2DDC 2B + OR (HL) ;2DDD B6 + JR L2DE3 ;2DDE 1803 + +L2DE0: CALL L367B ;2DE0 CD7B36 +L2DE3: POP HL ;2DE3 E1 +L2DE4: LD (HL),A ;2DE4 77 + INC HL ;2DE5 23 + LD (HL),E ;2DE6 73 + INC HL ;2DE7 23 + LD (HL),D ;2DE8 72 + INC HL ;2DE9 23 + LD (HL),C ;2DEA 71 + INC HL ;2DEB 23 + LD (HL),B ;2DEC 70 + RET ;2DED C9 + +L2DEE: LD A,(HL) ;2DEE 7E + INC HL ;2DEF 23 + SUB E ;2DF0 93 + LD E,A ;2DF1 5F + LD A,(HL) ;2DF2 7E + INC HL ;2DF3 23 + SBC A,D ;2DF4 9A + LD D,A ;2DF5 57 + LD A,(HL) ;2DF6 7E + INC HL ;2DF7 23 + SBC A,C ;2DF8 99 + LD C,A ;2DF9 4F + LD A,(HL) ;2DFA 7E + SBC A,B ;2DFB 98 + LD B,A ;2DFC 47 + CALL C,L2E3D ;2DFD DC3D2E + OR C ;2E00 B1 + OR D ;2E01 B2 + JP NZ,L2E0B ;2E02 C20B2E + LD A,E ;2E05 7B + CP 63 ;2E06 FE3F + JP C,L2DE0 ;2E08 DAE02D +L2E0B: LD HL,L2D49 ;2E0B 21492D +L2E0E: LD A,B ;2E0E 78 + OR A ;2E0F B7 + JP M,L2DD0 ;2E10 FAD02D + JP NZ,L2E2B ;2E13 C22B2E + LD A,(HL) ;2E16 7E + SUB 8 ;2E17 D608 + JP C,L2DE0 ;2E19 DAE02D + LD (HL),A ;2E1C 77 + LD A,C ;2E1D 79 + OR D ;2E1E B2 + OR E ;2E1F B3 + JP Z,L2DE0 ;2E20 CAE02D + LD B,C ;2E23 41 + LD C,D ;2E24 4A + LD D,E ;2E25 53 + LD E,0 ;2E26 1E00 + JP L2E0E ;2E28 C30E2E + +L2E2B: DEC (HL) ;2E2B 35 + JP C,L2DE0 ;2E2C DAE02D + SLA E ;2E2F CB23 + RL D ;2E31 CB12 + RL C ;2E33 CB11 + RL B ;2E35 CB10 + JP P,L2E2B ;2E37 F22B2E + JP L2DD0 ;2E3A C3D02D + +L2E3D: LD HL,L2D48 ;2E3D 21482D + LD A,(HL) ;2E40 7E + ADD A,128 ;2E41 C680 + LD (HL),A ;2E43 77 + LD A,E ;2E44 7B + CPL ;2E45 2F + ADD A,1 ;2E46 C601 + LD E,A ;2E48 5F + LD A,D ;2E49 7A + CPL ;2E4A 2F + ADC A,0 ;2E4B CE00 + LD D,A ;2E4D 57 + LD A,C ;2E4E 79 + CPL ;2E4F 2F + ADC A,0 ;2E50 CE00 + LD C,A ;2E52 4F + LD A,B ;2E53 78 + CPL ;2E54 2F + ADC A,0 ;2E55 CE00 + LD B,A ;2E57 47 + RET ;2E58 C9 + +L2E59: PUSH DE ;2E59 D5 + LD A,(DE) ;2E5A 1A + XOR (HL) ;2E5B AE + CPL ;2E5C 2F + AND 128 ;2E5D E680 + LD (L2D48),A ;2E5F 32482D + LD B,(HL) ;2E62 46 + RES 7,B ;2E63 CBB8 + LD A,(DE) ;2E65 1A + AND 127 ;2E66 E67F + ADD A,B ;2E68 80 + JP Z,L2DE0 ;2E69 CAE02D + DEC A ;2E6C 3D + CP 48 ;2E6D FE30 + JP C,L2DE0 ;2E6F DAE02D + CP 224 ;2E72 FEE0 + JP NC,L1398 ;2E74 D29813 + LD (L2D49),A ;2E77 32492D + XOR A ;2E7A AF + LD (L2D47),A ;2E7B 32472D + LD BC,L0004 ;2E7E 010400 + ADD HL,BC ;2E81 09 + LD A,(HL) ;2E82 7E + OR A ;2E83 B7 + JP P,L2DE0 ;2E84 F2E02D + PUSH HL ;2E87 E5 + POP IY ;2E88 FDE1 + LD C,B ;2E8A 48 + EX DE,HL ;2E8B EB + INC HL ;2E8C 23 + LD E,(HL) ;2E8D 5E + INC HL ;2E8E 23 + LD D,(HL) ;2E8F 56 + INC HL ;2E90 23 + PUSH HL ;2E91 E5 + LD H,B ;2E92 60 + LD L,B ;2E93 68 + EXX ;2E94 D9 + POP HL ;2E95 E1 + LD E,(HL) ;2E96 5E + INC HL ;2E97 23 + LD D,(HL) ;2E98 56 + LD HL,COLDSTART ;2E99 210000 + LD A,D ;2E9C 7A + OR A ;2E9D B7 + JP P,L2DE0 ;2E9E F2E02D + LD C,4 ;2EA1 0E04 +L2EA3: LD A,(IY+0) ;2EA3 FD7E00 + LD B,8 ;2EA6 0608 + OR A ;2EA8 B7 + JP Z,L2F24 ;2EA9 CA242F +L2EAC: RLA ;2EAC 17 + JP NC,L2EC5 ;2EAD D2C52E + EX AF,AF' ;2EB0 08 + EXX ;2EB1 D9 + LD A,B ;2EB2 78 + ADD A,C ;2EB3 81 + LD C,A ;2EB4 4F + ADC HL,DE ;2EB5 ED5A + EXX ;2EB7 D9 + ADC HL,DE ;2EB8 ED5A + JP NC,L2EC4 ;2EBA D2C42E + LD A,(L2D47) ;2EBD 3A472D + INC A ;2EC0 3C + LD (L2D47),A ;2EC1 32472D +L2EC4: EX AF,AF' ;2EC4 08 +L2EC5: SRL D ;2EC5 CB3A + RR E ;2EC7 CB1B + EXX ;2EC9 D9 + RR D ;2ECA CB1A + RR E ;2ECC CB1B + RR B ;2ECE CB18 + EXX ;2ED0 D9 + DJNZ L2EAC ;2ED1 10D9 +L2ED3: DEC IY ;2ED3 FD2B + DEC C ;2ED5 0D + JP NZ,L2EA3 ;2ED6 C2A32E + LD A,(L2D47) ;2ED9 3A472D + OR A ;2EDC B7 + JP Z,L2EF7 ;2EDD CAF72E + LD B,A ;2EE0 47 + LD A,(L2D49) ;2EE1 3A492D + ADD A,B ;2EE4 80 + LD (L2D49),A ;2EE5 32492D +L2EE8: SCF ;2EE8 37 + RR H ;2EE9 CB1C + RR L ;2EEB CB1D + EXX ;2EED D9 + RR H ;2EEE CB1C + RR L ;2EF0 CB1D + RR C ;2EF2 CB19 + EXX ;2EF4 D9 + DJNZ L2EE8 ;2EF5 10F1 +L2EF7: EXX ;2EF7 D9 + LD A,C ;2EF8 79 + OR A ;2EF9 B7 + JP P,L2F1C ;2EFA F21C2F + LD DE,L0001 ;2EFD 110100 + ADD HL,DE ;2F00 19 + EXX ;2F01 D9 + LD DE,COLDSTART ;2F02 110000 + ADC HL,DE ;2F05 ED5A + JP NC,L2F1B ;2F07 D21B2F + RR H ;2F0A CB1C + RR L ;2F0C CB1D + EXX ;2F0E D9 + RR H ;2F0F CB1C + RR L ;2F11 CB1D + EXX ;2F13 D9 + LD A,(L2D49) ;2F14 3A492D + INC A ;2F17 3C + LD (L2D49),A ;2F18 32492D +L2F1B: EXX ;2F1B D9 +L2F1C: PUSH HL ;2F1C E5 + EXX ;2F1D D9 + LD B,H ;2F1E 44 + LD C,L ;2F1F 4D + POP DE ;2F20 D1 + JP L2E0B ;2F21 C30B2E + +L2F24: LD A,E ;2F24 7B + LD E,D ;2F25 5A + LD D,0 ;2F26 1600 + EXX ;2F28 D9 + LD B,E ;2F29 43 + LD E,D ;2F2A 5A + LD D,A ;2F2B 57 + EXX ;2F2C D9 + JP L2ED3 ;2F2D C3D32E + +L2F30: PUSH DE ;2F30 D5 + LD A,(DE) ;2F31 1A + XOR (HL) ;2F32 AE + CPL ;2F33 2F + AND 128 ;2F34 E680 + LD (L2D48),A ;2F36 32482D + LD B,(HL) ;2F39 46 + RES 7,B ;2F3A CBB8 + LD A,(DE) ;2F3C 1A + AND 127 ;2F3D E67F + SUB B ;2F3F 90 + ADD A,129 ;2F40 C681 +L2F42: CP 48 ;2F42 FE30 + JP C,L2DE0 ;2F44 DAE02D + CP 224 ;2F47 FEE0 + JP NC,L1398 ;2F49 D29813 + LD (L2D49),A ;2F4C 32492D + INC HL ;2F4F 23 + INC DE ;2F50 13 + EX DE,HL ;2F51 EB + LD C,(HL) ;2F52 4E + INC HL ;2F53 23 + LD B,(HL) ;2F54 46 + INC HL ;2F55 23 + PUSH HL ;2F56 E5 + EX DE,HL ;2F57 EB + LD E,(HL) ;2F58 5E + INC HL ;2F59 23 + LD D,(HL) ;2F5A 56 + INC HL ;2F5B 23 + LD A,L ;2F5C 7D + EX AF,AF' ;2F5D 08 + LD A,H ;2F5E 7C + LD H,B ;2F5F 60 + LD L,C ;2F60 69 + EXX ;2F61 D9 + POP HL ;2F62 E1 + LD C,(HL) ;2F63 4E + INC HL ;2F64 23 + LD B,(HL) ;2F65 46 + LD H,A ;2F66 67 + EX AF,AF' ;2F67 08 + LD L,A ;2F68 6F + LD E,(HL) ;2F69 5E + INC HL ;2F6A 23 + LD D,(HL) ;2F6B 56 + LD H,B ;2F6C 60 + LD L,C ;2F6D 69 + LD A,D ;2F6E 7A + OR A ;2F6F B7 + JP P,L1398 ;2F70 F29813 + LD C,4 ;2F73 0E04 +L2F75: LD B,8 ;2F75 0608 +L2F77: BIT 7,H ;2F77 CB7C + JP NZ,L2F95 ;2F79 C2952F + OR A ;2F7C B7 +L2F7D: RLA ;2F7D 17 + EXX ;2F7E D9 + ADD HL,HL ;2F7F 29 + EXX ;2F80 D9 + ADC HL,HL ;2F81 ED6A + DJNZ L2F77 ;2F83 10F2 + PUSH AF ;2F85 F5 + DEC C ;2F86 0D + JP NZ,L2F75 ;2F87 C2752F +L2F8A: POP AF ;2F8A F1 + LD E,A ;2F8B 5F + POP AF ;2F8C F1 + LD D,A ;2F8D 57 + POP AF ;2F8E F1 + LD C,A ;2F8F 4F + POP AF ;2F90 F1 + LD B,A ;2F91 47 + JP L2E0B ;2F92 C30B2E + +L2F95: EXX ;2F95 D9 + OR A ;2F96 B7 + SBC HL,DE ;2F97 ED52 + EXX ;2F99 D9 + SBC HL,DE ;2F9A ED52 + CCF ;2F9C 3F + JP C,L2F7D ;2F9D DA7D2F + EXX ;2FA0 D9 + ADD HL,DE ;2FA1 19 + EXX ;2FA2 D9 + ADC HL,DE ;2FA3 ED5A + OR A ;2FA5 B7 + RLA ;2FA6 17 + EXX ;2FA7 D9 + ADD HL,HL ;2FA8 29 + EXX ;2FA9 D9 + ADC HL,HL ;2FAA ED6A + DEC B ;2FAC 05 + JP NZ,L2FB7 ;2FAD C2B72F + PUSH AF ;2FB0 F5 + LD B,8 ;2FB1 0608 + DEC C ;2FB3 0D + JP Z,L2F8A ;2FB4 CA8A2F +L2FB7: EXX ;2FB7 D9 + OR A ;2FB8 B7 + SBC HL,DE ;2FB9 ED52 + EXX ;2FBB D9 + SBC HL,DE ;2FBC ED52 + SCF ;2FBE 37 + RLA ;2FBF 17 + DEC B ;2FC0 05 + JP NZ,L2FCB ;2FC1 C2CB2F + PUSH AF ;2FC4 F5 + LD B,8 ;2FC5 0608 + DEC C ;2FC7 0D + JP Z,L2F8A ;2FC8 CA8A2F +L2FCB: EXX ;2FCB D9 + ADD HL,HL ;2FCC 29 + EXX ;2FCD D9 + ADC HL,HL ;2FCE ED6A + JP NC,L2F77 ;2FD0 D2772F + JP L2FB7 ;2FD3 C3B72F + +L2FD6: DB 9DH ;2FD6 9D +L2FD7: DW 03A23H ;2FD7 233A +L2FD9: LD A,(HL) ;2FD9 7E + PUSH HL ;2FDA E5 + POP IX ;2FDB DDE1 + EX DE,HL ;2FDD EB + LD (L2FD7),HL ;2FDE 22D72F + EX AF,AF' ;2FE1 08 + XOR A ;2FE2 AF + LD (L2FD6),A ;2FE3 32D62F + LD H,A ;2FE6 67 + LD L,A ;2FE7 6F + EXX ;2FE8 D9 + LD H,A ;2FE9 67 + LD L,A ;2FEA 6F + LD B,A ;2FEB 47 + LD C,A ;2FEC 4F + EX AF,AF' ;2FED 08 + CP 46 ;2FEE FE2E + JP Z,L3008 ;2FF0 CA0830 + SUB 48 ;2FF3 D630 +L2FF5: CALL L30E3 ;2FF5 CDE330 + CALL L30D9 ;2FF8 CDD930 + SUB 48 ;2FFB D630 + CP 10 ;2FFD FE0A + JR C,L2FF5 ;2FFF 38F4 + ADD A,48 ;3001 C630 + CP 46 ;3003 FE2E + JP NZ,L3019 ;3005 C21930 +L3008: CALL L30D9 ;3008 CDD930 + SUB 48 ;300B D630 + CP 10 ;300D FE0A + JP NC,L3017 ;300F D21730 + CALL L30F2 ;3012 CDF230 + JR L3008 ;3015 18F1 + +L3017: ADD A,48 ;3017 C630 +L3019: CP 69 ;3019 FE45 + JP NZ,L3064 ;301B C26430 + EXX ;301E D9 + CALL L30D9 ;301F CDD930 + LD B,1 ;3022 0601 + CP 188 ;3024 FEBC + JR Z,L302E ;3026 2806 + CP 189 ;3028 FEBD + JP NZ,L138E ;302A C28E13 + DEC B ;302D 05 +L302E: LD A,B ;302E 78 + OR A ;302F B7 + EX AF,AF' ;3030 08 +L3031: CALL L30D9 ;3031 CDD930 + SUB 48 ;3034 D630 + JR Z,L3031 ;3036 28F9 + CP 10 ;3038 FE0A + JP NC,L305A ;303A D25A30 + LD B,A ;303D 47 + CALL L30D9 ;303E CDD930 + SUB 48 ;3041 D630 + CP 10 ;3043 FE0A + JP NC,L305A ;3045 D25A30 + LD C,A ;3048 4F + CALL L30D9 ;3049 CDD930 + SUB 48 ;304C D630 + CP 10 ;304E FE0A + JP C,L1398 ;3050 DA9813 + LD A,B ;3053 78 + ADD A,A ;3054 87 + ADD A,A ;3055 87 + ADD A,B ;3056 80 + ADD A,A ;3057 87 + ADD A,C ;3058 81 + LD B,A ;3059 47 +L305A: EX AF,AF' ;305A 08 + LD A,B ;305B 78 + JR NZ,L3060 ;305C 2002 + CPL ;305E 2F + INC A ;305F 3C +L3060: LD (L2FD6),A ;3060 32D62F + EXX ;3063 D9 +L3064: PUSH IX ;3064 DDE5 + LD A,(L2FD6) ;3066 3AD62F + ADD A,29 ;3069 C61D + ADD A,C ;306B 81 + LD (L2FD6),A ;306C 32D62F + CP 48 ;306F FE30 + JP C,L307C ;3071 DA7C30 + CP 128 ;3074 FE80 + JP C,L1398 ;3076 DA9813 + JP L30CE ;3079 C3CE30 + +L307C: LD A,128 ;307C 3E80 + LD (L2D48),A ;307E 32482D + LD A,160 ;3081 3EA0 + LD (L2D49),A ;3083 32492D + PUSH HL ;3086 E5 + EXX ;3087 D9 + POP BC ;3088 C1 + LD D,H ;3089 54 + LD E,L ;308A 5D + LD HL,L3096 ;308B 219630 + PUSH HL ;308E E5 + LD HL,(L2FD7) ;308F 2AD72F + PUSH HL ;3092 E5 + JP L2E0B ;3093 C30B2E + +L3096: DB 3AH,0D6H,2FH,6FH ;3096 3AD62F6F Link 3096 found at , $308C + DB 4FH,26H,00H,44H ;309A 4F260044 + DB 29H,29H,09H,01H ;309E 29290901 + DB 20H,31H,09H,0EDH ;30A2 203109ED + DB 5BH,0D7H,2FH,3EH ;30A6 5BD72F3E + DB 80H,32H,48H,2DH ;30AA 8032482D + DB 3EH,20H,86H,47H ;30AE 3E208647 + DB 1AH,0E6H,7FH,80H ;30B2 1AE67F80 + DB 0DAH,98H,13H,0D6H ;30B6 DA9813D6 + DB 21H,30H,01H,0AFH ;30BA 213001AF + DB 01H,0C6H,30H,0C5H ;30BE 01C630C5 + DB 0D5H,0C3H,6DH,2EH ;30C2 D5C36D2E +L30C6: DB 0E1H,01H,05H,00H ;30C6 E1010500 + DB 50H,58H,7EH,0C9H ;30CA 50587EC9 +L30CE: LD HL,L30C6 ;30CE 21C630 + PUSH HL ;30D1 E5 + LD HL,(L2FD7) ;30D2 2AD72F + PUSH HL ;30D5 E5 + JP L2DE0 ;30D6 C3E02D + +L30D9: INC IX ;30D9 DD23 + LD A,(IX+0) ;30DB DD7E00 + CP 32 ;30DE FE20 + RET NZ ;30E0 C0 + JR L30D9 ;30E1 18F6 + +L30E3: OR A ;30E3 B7 + JR NZ,L30E9 ;30E4 2003 + OR B ;30E6 B0 + RET Z ;30E7 C8 + XOR A ;30E8 AF +L30E9: EX AF,AF' ;30E9 08 + LD A,B ;30EA 78 + CP 9 ;30EB FE09 + JP NZ,L3100 ;30ED C20031 + INC C ;30F0 0C + RET ;30F1 C9 + +L30F2: OR A ;30F2 B7 + JR NZ,L30FA ;30F3 2005 + DEC C ;30F5 0D +L30F6: OR B ;30F6 B0 + RET Z ;30F7 C8 + INC C ;30F8 0C + XOR A ;30F9 AF +L30FA: EX AF,AF' ;30FA 08 + LD A,B ;30FB 78 + CP 9 ;30FC FE09 + RET Z ;30FE C8 + DEC C ;30FF 0D +L3100: INC B ;3100 04 + LD D,H ;3101 54 + LD E,L ;3102 5D + EXX ;3103 D9 + LD D,H ;3104 54 + LD E,L ;3105 5D + XOR A ;3106 AF + ADD HL,HL ;3107 29 + RLA ;3108 17 + ADD HL,HL ;3109 29 + RLA ;310A 17 + ADD HL,DE ;310B 19 + LD D,0 ;310C 1600 + ADC A,D ;310E 8A + ADD HL,HL ;310F 29 + RLA ;3110 17 + EX AF,AF' ;3111 08 + LD E,A ;3112 5F + EX AF,AF' ;3113 08 + ADD HL,DE ;3114 19 + ADC A,D ;3115 8A + EXX ;3116 D9 + ADD HL,HL ;3117 29 + ADD HL,HL ;3118 29 + ADD HL,DE ;3119 19 + ADD HL,HL ;311A 29 + LD D,0 ;311B 1600 + LD E,A ;311D 5F + ADD HL,DE ;311E 19 + RET ;311F C9 + + DB 0E0H,0F5H,0F7H,0D2H ;3120 E0F5F7D2 Link 3120 found at , $30A2, $3487 + DB 0CAH,0E3H,0F3H,0B5H ;3124 CAE3F3B5 + DB 87H,0FDH,0E7H,0B8H ;3128 87FDE7B8 + DB 0D1H,74H,9EH,0EAH ;312C D1749EEA + DB 25H,06H,12H,0C6H ;3130 250612C6 + DB 0EDH,0AFH,87H,96H ;3134 EDAF8796 + DB 0F7H,0F1H,0CDH,14H ;3138 F7F1CD14 + DB 0BEH,9AH,0F4H,01H ;313C BE9AF401 + DB 9AH,6DH,0C1H,0F7H ;3140 9A6DC1F7 + DB 81H,00H,0C9H,0F1H ;3144 8100C9F1 + DB 0FBH,50H,0A0H,1DH ;3148 FB50A01D + DB 97H ;314C 97 +L314D: DB 0FEH,65H,08H,0E5H ;314D FE6508E5 + DB 0BCH,01H,7EH,4AH ;3151 BC017E4A + DB 1EH,0ECH,05H,8FH ;3155 1EEC058F + DB 0EEH,92H,93H,08H ;3159 EE929308 + DB 32H,0AAH,77H,0B8H ;315D 32AA77B8 + DB 0BH,0BFH,94H,95H ;3161 0BBF9495 + DB 0E6H,0FH,0F7H,7CH ;3165 E60FF77C + DB 1DH,90H,12H,35H ;3169 1D901235 + DB 0DCH,24H,0B4H,15H ;316D DC24B415 + DB 42H,13H,2EH,0E1H ;3171 42132EE1 + DB 19H,09H,0CCH,0BCH ;3175 1909CCBC + DB 8CH,1CH,0CH,0FFH ;3179 8C1C0CFF + DB 0EBH,0AFH,1FH,0CFH ;317D EBAF1FCF + DB 0FEH,0E6H,0DBH,23H ;3181 FEE6DB23 + DB 41H,5FH,70H,89H ;3185 415F7089 + DB 26H,12H,77H,0CCH ;3189 261277CC + DB 0ABH,29H,0D6H,94H ;318D AB29D694 + DB 0BFH,0D6H,2DH,06H ;3191 BFD62D06 + DB 0BDH,37H,86H,30H ;3195 BD378630 + DB 47H,0ACH,0C5H,0A7H ;3199 47ACC5A7 + DB 33H,59H,17H,0B7H ;319D 335917B7 + DB 0D1H,37H,98H,6EH ;31A1 D137986E + DB 12H,83H,3AH,3DH ;31A5 12833A3D + DB 0AH,0D7H,0A3H,3DH ;31A9 0AD7A33D + DB 0CDH,0CCH,0CCH,0CCH ;31AD CDCCCCCC + DB 41H,00H,00H,00H ;31B1 41000000 + DB 80H,44H,00H,00H ;31B5 80440000 + DB 00H,0A0H,47H,00H ;31B9 00A04700 + DB 00H,00H,0C8H,4AH ;31BD 0000C84A + DB 00H,00H,00H,0FAH ;31C1 000000FA + DB 4EH,00H,00H,40H ;31C5 4E000040 + DB 9CH,51H,00H,00H ;31C9 9C510000 + DB 50H,0C3H,54H,00H ;31CD 50C35400 + DB 00H,24H,0F4H,58H ;31D1 0024F458 + DB 00H,80H,96H,98H ;31D5 00809698 + DB 5BH,00H,20H,0BCH ;31D9 5B0020BC + DB 0BEH,5EH,00H,28H ;31DD BE5E0028 + DB 6BH,0EEH,62H,00H ;31E1 6BEE6200 + DB 0F9H,02H,95H,65H ;31E5 F9029565 + DB 40H,0B7H,43H,0BAH ;31E9 40B743BA + DB 68H,10H,0A5H,0D4H ;31ED 6810A5D4 + DB 0E8H,6CH,2AH,0E7H ;31F1 E86C2AE7 + DB 84H,91H,6FH,0F5H ;31F5 84916FF5 + DB 20H,0E6H,0B5H,72H ;31F9 20E6B572 + DB 32H,0A9H,5FH,0E3H ;31FD 32A95FE3 + DB 76H,0BFH,0C9H,1BH ;3201 76BFC91B + DB 8EH,79H,2FH,0BCH ;3205 8E792FBC + DB 0A2H,0B1H,7CH,3AH ;3209 A2B17C3A + DB 6BH,0BH,0DEH,80H ;320D 6B0BDE80 + DB 05H,23H,0C7H,8AH ;3211 0523C78A +L3215: DW 02D54H ;3215 542D +L3217: DB 22H ;3217 22 Link 3217 found at , $3232, $325F, $32EE, $3344, $33E2, $33E6, $3427, $34 +L3218: DB 03H ;3218 03 +L3219: DB 64H ;3219 64 +L321A: DB 0C3H,0FFH,29H,0CDH ;321A C3FF29CD + DB 42H,26H,0D6H ;321E 4226D6 +L3221: DB "A" ;3221 41 +L3222: DB 0FEH ;3222 FE +L3223: DB 1AH ;3223 1A Link 3223 found at , $32DD, $3DFD, $3E3C +L3224: DB 0D2H,8EH,23H,5EH ;3224 D28E235E + DB 23H,0CDH,0B2H,26H ;3228 23CDB226 + DB 28H ;322C 28 +L322D: PUSH DE ;322D D5 + CALL L3316 ;322E CD1633 + LD A,(L3217) ;3231 3A1732 + OR A ;3234 B7 + JP Z,L32DC ;3235 CADC32 + JP M,L3242 ;3238 FA4232 + CP 9 ;323B FE09 + JP C,L32A1 ;323D DAA132 + JR L3247 ;3240 1805 + +L3242: CP 255 ;3242 FEFF + JP NC,L32D6 ;3244 D2D632 +L3247: LD A,46 ;3247 3E2E + LD (L3219),A ;3249 321932 + LD HL,L3222 ;324C 212232 + XOR A ;324F AF +L3250: DEC HL ;3250 2B + CP (HL) ;3251 BE + JR Z,L3250 ;3252 28FC + LD A,(HL) ;3254 7E + CP 46 ;3255 FE2E + JP Z,L3309 ;3257 CA0933 + INC HL ;325A 23 + LD (HL),69 ;325B 3645 + INC HL ;325D 23 + LD A,(L3217) ;325E 3A1732 + LD B,43 ;3261 062B + OR A ;3263 B7 + JP P,L3270 ;3264 F27032 + CP 237 ;3267 FEED + JP C,L3309 ;3269 DA0933 + LD B,45 ;326C 062D + CPL ;326E 2F + INC A ;326F 3C +L3270: LD (HL),B ;3270 70 + INC HL ;3271 23 + LD BC,LFF0A ;3272 010AFF +L3275: INC B ;3275 04 + SUB C ;3276 91 + JR NC,L3275 ;3277 30FC + ADD A,C ;3279 81 + LD (HL),B ;327A 70 + INC HL ;327B 23 + LD (HL),A ;327C 77 + INC HL ;327D 23 + LD (HL),13 ;327E 360D +L3280: LD HL,L3218 ;3280 211832 +L3283: INC HL ;3283 23 + LD A,(HL) ;3284 7E + CP 13 ;3285 FE0D + JP Z,L3293 ;3287 CA9332 + JP NC,L3283 ;328A D28332 + OR 48 ;328D F630 + LD (HL),A ;328F 77 + JP L3283 ;3290 C38332 + +L3293: LD DE,L3218 ;3293 111832 + XOR A ;3296 AF + SBC HL,DE ;3297 ED52 + LD B,H ;3299 44 + LD C,L ;329A 4D + POP HL ;329B E1 + EX DE,HL ;329C EB + INC BC ;329D 03 + LDIR ;329E EDB0 + RET ;32A0 C9 + +L32A1: LD HL,L321A ;32A1 211A32 + LD DE,L3219 ;32A4 111932 + LD B,A ;32A7 47 + INC B ;32A8 04 +L32A9: DEC B ;32A9 05 + JP Z,L32B4 ;32AA CAB432 + LD A,(HL) ;32AD 7E + LD (DE),A ;32AE 12 + INC HL ;32AF 23 + INC DE ;32B0 13 + JP L32A9 ;32B1 C3A932 + +L32B4: LD A,46 ;32B4 3E2E + LD (DE),A ;32B6 12 + LD HL,L3222 ;32B7 212232 +L32BA: LD (HL),13 ;32BA 360D + DEC HL ;32BC 2B + LD A,(HL) ;32BD 7E + OR A ;32BE B7 + JR Z,L32BA ;32BF 28F9 + CP 46 ;32C1 FE2E + JP NZ,L32C8 ;32C3 C2C832 + LD (HL),13 ;32C6 360D +L32C8: LD HL,L3219 ;32C8 211932 + LD A,(HL) ;32CB 7E + CP 13 ;32CC FE0D + JP NZ,L3280 ;32CE C28032 + LD (HL),0 ;32D1 3600 + JP L3280 ;32D3 C38032 + +L32D6: LD DE,L3224 ;32D6 112432 + JP L32DF ;32D9 C3DF32 + +L32DC: LD DE,L3223 ;32DC 112332 +L32DF: LD HL,L3221 ;32DF 212132 + LD A,13 ;32E2 3E0D + LD (DE),A ;32E4 12 + PUSH DE ;32E5 D5 + DEC DE ;32E6 1B + LD BC,L0008 ;32E7 010800 + LDDR ;32EA EDB8 + EX DE,HL ;32EC EB + LD A,(L3217) ;32ED 3A1732 + OR A ;32F0 B7 + JP Z,L32F7 ;32F1 CAF732 + LD (HL),0 ;32F4 3600 + DEC HL ;32F6 2B +L32F7: LD (HL),46 ;32F7 362E + DEC HL ;32F9 2B + LD (HL),0 ;32FA 3600 + POP HL ;32FC E1 +L32FD: DEC HL ;32FD 2B + LD A,(HL) ;32FE 7E + CP 0 ;32FF FE00 + JP NZ,L3280 ;3301 C28032 + LD (HL),13 ;3304 360D + JP L32FD ;3306 C3FD32 + +L3309: LD HL,L3313 ;3309 211333 + LD BC,USER ;330C 010300 + POP DE ;330F D1 + LDIR ;3310 EDB0 + RET ;3312 C9 + +L3313: DB " 0" ;3313 2030 + DB 0DH ;3315 0D +L3316: LD (L3215),HL ;3316 221532 + LD A,(HL) ;3319 7E + LD B,32 ;331A 0620 + OR A ;331C B7 + JP M,L3322 ;331D FA2233 + LD B,45 ;3320 062D +L3322: AND 127 ;3322 E67F + LD (HL),A ;3324 77 + LD A,B ;3325 78 + LD (L3218),A ;3326 321832 + EX DE,HL ;3329 EB + LD HL,L314D ;332A 214D31 + LD A,236 ;332D 3EEC + EX AF,AF' ;332F 08 +L3330: EX AF,AF' ;3330 08 + INC A ;3331 3C + EX AF,AF' ;3332 08 + LD BC,L0005 ;3333 010500 + ADD HL,BC ;3336 09 + PUSH HL ;3337 E5 + PUSH DE ;3338 D5 + LD A,(DE) ;3339 1A + CALL L33FB ;333A CDFB33 + POP DE ;333D D1 + POP HL ;333E E1 + JP NC,L3330 ;333F D23033 + EX AF,AF' ;3342 08 + LD (L3217),A ;3343 321732 + PUSH DE ;3346 D5 + LD BC,L3358 ;3347 015833 + PUSH BC ;334A C5 + PUSH DE ;334B D5 + LD A,128 ;334C 3E80 + LD (L2D48),A ;334E 32482D + LD A,(DE) ;3351 1A + SUB (HL) ;3352 96 + ADD A,129 ;3353 C681 + JP L2F42 ;3355 C3422F + +L3358: DB 21H,19H,32H,36H ;3358 21193236 Link 3358 found at , $3348 + DB 00H,23H,0E3H,7EH ;335C 0023E37E + DB 23H,5EH,23H,56H ;3360 235E2356 + DB 23H,0E5H,0EBH,0D9H ;3364 23E5EBD9 + DB 0E1H,5EH,23H,56H ;3368 E15E2356 + DB 0EBH,0D6H,0C0H,0D2H ;336C EBD6C0D2 + DB 80H,33H,0CBH,3CH ;3370 8033CB3C + DB 0CBH,1DH,0D9H,0CBH ;3374 CB1DD9CB + DB 1CH,0CBH,1DH,0D9H ;3378 1CCB1DD9 + DB 3CH,0C2H,72H,33H ;337C 3CC27233 + DB 0C1H,3EH,09H,08H ;3380 C13E0908 + DB 0AFH,54H,5DH,0D9H ;3384 AF545DD9 + DB 54H,5DH,29H,0D9H ;3388 545D29D9 + DB 0EDH,6AH,17H,0D9H ;338C ED6A17D9 + DB 29H,0D9H,0EDH,6AH ;3390 29D9ED6A + DB 17H,0D9H,19H,0D9H ;3394 17D919D9 + DB 0EDH,5AH,16H,00H ;3398 ED5A1600 + DB 8AH,0D9H,29H,0D9H ;339C 8AD929D9 + DB 0EDH,6AH,17H,02H ;33A0 ED6A1702 + DB 03H,08H,3DH,0C2H ;33A4 03083DC2 + DB 83H,33H,21H,22H ;33A8 83332122 + DB 32H,7EH,36H,00H ;33AC 327E3600 + DB 0FEH,05H,0EH,00H ;33B0 FE050E00 + DB 0DAH,0B8H,33H,0CH ;33B4 DAB8330C + DB 06H,0AH,05H,0CAH ;33B8 060A05CA + DB 0CEH,33H,2BH,7EH ;33BC CE332B7E + DB 81H,77H,0D6H,0AH ;33C0 8177D60A + DB 0EH,00H,0DAH,0BAH ;33C4 0E00DABA + DB 33H,0CH,77H,0C3H ;33C8 330C77C3 + DB 0BAH,33H,3AH,19H ;33CC BA333A19 + DB 32H,0B7H,0C8H,21H ;33D0 32B7C821 + DB 21H,32H,11H,22H ;33D4 21321122 + DB 32H,01H,09H,00H ;33D8 32010900 + DB 0EDH,0B8H,0EBH,36H ;33DC EDB8EB36 + DB 00H,3AH,17H,32H ;33E0 003A1732 + DB 3CH,32H,17H,32H ;33E4 3C321732 + DB 0C3H,0AAH,33H ;33E8 C3AA33 +L33EB: LD BC,L0005 ;33EB 010500 +L33EE: LD A,(DE) ;33EE 1A + OR A ;33EF B7 + JP M,L33FB ;33F0 FAFB33 + BIT 7,(HL) ;33F3 CB7E + JR Z,L33F9 ;33F5 2802 + SCF ;33F7 37 + RET ;33F8 C9 + +L33F9: EX DE,HL ;33F9 EB + LD A,(DE) ;33FA 1A +L33FB: CP (HL) ;33FB BE + RET NZ ;33FC C0 + DEC C ;33FD 0D + ADD HL,BC ;33FE 09 + EX DE,HL ;33FF EB + ADD HL,BC ;3400 09 + EX DE,HL ;3401 EB + LD B,3 ;3402 0603 +L3404: LD A,(DE) ;3404 1A + CP (HL) ;3405 BE + RET NZ ;3406 C0 + DEC HL ;3407 2B + DEC DE ;3408 1B + DJNZ L3404 ;3409 10F9 + LD A,(DE) ;340B 1A + CP (HL) ;340C BE + RET ;340D C9 + +L340E: EX DE,HL ;340E EB + CALL L3316 ;340F CD1633 + LD A,(L3218) ;3412 3A1832 + LD B,128 ;3415 0680 + CP 32 ;3417 FE20 + JP Z,L341E ;3419 CA1E34 + LD B,0 ;341C 0600 +L341E: LD A,B ;341E 78 + LD (L2D48),A ;341F 32482D + OR A ;3422 B7 + JP Z,L34A7 ;3423 CAA734 + LD A,(L3217) ;3426 3A1732 + DEC A ;3429 3D + JP M,L34DF ;342A FADF34 + LD HL,L3222 ;342D 212232 + LD B,13 ;3430 060D + LD (HL),B ;3432 70 + SUB 8 ;3433 D608 + JR NC,L343D ;3435 3006 +L3437: LD (HL),B ;3437 70 + DEC HL ;3438 2B + INC A ;3439 3C + JR NZ,L3437 ;343A 20FB + DEC A ;343C 3D +L343D: INC A ;343D 3C + LD (L2FD6),A ;343E 32D62F + LD IX,L3219 ;3441 DD211932 + XOR A ;3445 AF + LD H,A ;3446 67 + LD L,A ;3447 6F + EXX ;3448 D9 + LD B,A ;3449 47 + LD C,A ;344A 4F + LD H,A ;344B 67 + LD L,A ;344C 6F +L344D: LD A,(IX+0) ;344D DD7E00 + CP 13 ;3450 FE0D + JP Z,L345D ;3452 CA5D34 + CALL L30E3 ;3455 CDE330 + INC IX ;3458 DD23 + JP L344D ;345A C34D34 + +L345D: LD A,(L2FD6) ;345D 3AD62F + ADD A,29 ;3460 C61D + ADD A,C ;3462 81 + LD (L2FD6),A ;3463 32D62F + LD A,160 ;3466 3EA0 + LD (L2D49),A ;3468 32492D + PUSH HL ;346B E5 + EXX ;346C D9 + POP BC ;346D C1 + LD D,H ;346E 54 + LD E,L ;346F 5D + LD HL,L347B ;3470 217B34 + PUSH HL ;3473 E5 + LD HL,(L3215) ;3474 2A1532 + PUSH HL ;3477 E5 + JP L2E0B ;3478 C30B2E + +L347B: DB 3AH,0D6H,2FH,4FH ;347B 3AD62F4F Link 347B found at , $3471 + DB 6FH,26H,00H,44H ;347F 6F260044 + DB 29H,29H,09H,01H ;3483 29290901 + DB 20H,31H,09H,0EDH ;3487 203109ED + DB 5BH,15H,32H,0AFH ;348B 5B1532AF + DB 32H,47H,2DH,3EH ;348F 32472D3E + DB 20H,86H,47H,1AH ;3493 2086471A + DB 0E6H,7FH,80H,0DAH ;3497 E67F80DA + DB 98H,13H,0D6H,21H ;349B 9813D621 + DB 0D2H,0A3H,34H,0AFH ;349F D2A334AF + DB 0D5H,0C3H,6DH,2EH ;34A3 D5C36D2E +L34A7: LD A,(L3217) ;34A7 3A1732 + DEC A ;34AA 3D + JP M,L34E4 ;34AB FAE434 + LD HL,L3222 ;34AE 212232 + LD BC,L0D00 ;34B1 01000D + LD (HL),B ;34B4 70 + SUB 8 ;34B5 D608 + JP NC,L34CA ;34B7 D2CA34 + JP L34C5 ;34BA C3C534 + +L34BD: EX AF,AF' ;34BD 08 + LD A,(HL) ;34BE 7E + OR A ;34BF B7 + JR Z,L34C3 ;34C0 2801 + INC C ;34C2 0C +L34C3: LD (HL),B ;34C3 70 + EX AF,AF' ;34C4 08 +L34C5: DEC HL ;34C5 2B + INC A ;34C6 3C + JR NZ,L34BD ;34C7 20F4 + DEC A ;34C9 3D +L34CA: EX AF,AF' ;34CA 08 + LD A,C ;34CB 79 + OR A ;34CC B7 + JR Z,L34DB ;34CD 280C +L34CF: LD A,(HL) ;34CF 7E + INC A ;34D0 3C + LD (HL),A ;34D1 77 + CP 10 ;34D2 FE0A + JR NZ,L34DB ;34D4 2005 + LD (HL),0 ;34D6 3600 + DEC HL ;34D8 2B + JR L34CF ;34D9 18F4 + +L34DB: EX AF,AF' ;34DB 08 + JP L343D ;34DC C33D34 + +L34DF: LD DE,L1619 ;34DF 111916 + JR L34E7 ;34E2 1803 + +L34E4: LD DE,L161E ;34E4 111E16 +L34E7: LD HL,(L3215) ;34E7 2A1532 + EX DE,HL ;34EA EB +L34EB: LD BC,L0005 ;34EB 010500 + LDIR ;34EE EDB0 + RET ;34F0 C9 + +L34F1: PUSH DE ;34F1 D5 + CALL L33EB ;34F2 CDEB33 + JP Z,L34FD ;34F5 CAFD34 +L34F8: LD HL,L161E ;34F8 211E16 + JR L3500 ;34FB 1803 + +L34FD: LD HL,L1619 ;34FD 211916 +L3500: POP DE ;3500 D1 + JP L34EB ;3501 C3EB34 + +L3504: PUSH DE ;3504 D5 + EX DE,HL ;3505 EB + JR L3509 ;3506 1801 + +L3508: PUSH DE ;3508 D5 +L3509: CALL L33EB ;3509 CDEB33 + JP C,L34F8 ;350C DAF834 + JP L34FD ;350F C3FD34 + +L3512: PUSH DE ;3512 D5 + CALL L33EB ;3513 CDEB33 + JP Z,L34F8 ;3516 CAF834 + JP L34FD ;3519 C3FD34 + +L351C: PUSH DE ;351C D5 + EX DE,HL ;351D EB + JR L3521 ;351E 1801 + +L3520: PUSH DE ;3520 D5 +L3521: CALL L33EB ;3521 CDEB33 + JP C,L34FD ;3524 DAFD34 + JP L34F8 ;3527 C3F834 + +L352A: DB 0BEH,35H,28H,0DCH ;352A BE3528DC Link 352A found at , $353B, $355D + DB 0CFH ;352E CF +L352F: PUSH DE ;352F D5 + EX DE,HL ;3530 EB + LD A,(HL) ;3531 7E + LD BC,L0004 ;3532 010400 + ADD HL,BC ;3535 09 + XOR (HL) ;3536 AE + JP M,L355C ;3537 FA5C35 + LD DE,L352A ;353A 112A35 + PUSH DE ;353D D5 + LD HL,L3583 ;353E 218335 + CALL L2E59 ;3541 CD592E + POP HL ;3544 E1 + PUSH HL ;3545 E5 + LD A,(HL) ;3546 7E + INC HL ;3547 23 + LD E,(HL) ;3548 5E + INC HL ;3549 23 + LD D,(HL) ;354A 56 + INC HL ;354B 23 + LD C,(HL) ;354C 4E + INC HL ;354D 23 + LD B,(HL) ;354E 46 + CP 193 ;354F FEC1 + CALL NC,L356B ;3551 D46B35 + POP HL ;3554 E1 + PUSH HL ;3555 E5 + CALL L2DE4 ;3556 CDE42D + JP L3566 ;3559 C36635 + +L355C: LD DE,L352A ;355C 112A35 + LD HL,L357E ;355F 217E35 + PUSH DE ;3562 D5 + CALL L34EB ;3563 CDEB34 +L3566: POP HL ;3566 E1 + POP DE ;3567 D1 + JP L34EB ;3568 C3EB34 + +L356B: SUB 192 ;356B D6C0 +L356D: SLA E ;356D CB23 + RL D ;356F CB12 + RL C ;3571 CB11 + RL B ;3573 CB10 + DEC A ;3575 3D + JP NZ,L356D ;3576 C26D35 + LD A,192 ;3579 3EC0 + JP L3661 ;357B C36136 + +L357E: DB 0BEH,35H,28H,0DCH ;357E BE3528DC Link 357E found at , $3560 + DB 0CFH ;3582 CF +L3583: DB 0C5H,00H,00H,00H ;3583 C5000000 + DB 0B8H ;3587 B8 +L3588: DB 0CDH,8EH,27H,0CDH ;3588 CD8E27CD + DB 0B5H ;358C B5 +L358D: DB 28H,2AH,30H,62H ;358D 282A3062 + DB 0EBH ;3591 EB +L3592: DB 73H,23H,72H,23H ;3592 73237223 + DB 36H ;3596 36 +L3597: DB 0DH,0CDH,03H,28H ;3597 0DCD0328 + DB 0EBH ;359B EB +L359C: LD DE,L3588 ;359C 118835 + JP L2D4D ;359F C34D2D + +L35A2: CALL L359C ;35A2 CD9C35 +L35A5: LD HL,L358D ;35A5 218D35 +L35A8: LD DE,L3588 ;35A8 118835 + JP L2E59 ;35AB C3592E + +L35AE: DW 0AFF1H ;35AE F1AF +L35B0: PUSH DE ;35B0 D5 + LD HL,L3684 ;35B1 218436 + CALL L2F30 ;35B4 CD302F + POP HL ;35B7 E1 + PUSH HL ;35B8 E5 + LD A,(HL) ;35B9 7E + LD (L35AF),A ;35BA 32AF35 + OR 128 ;35BD F680 + INC HL ;35BF 23 + LD E,(HL) ;35C0 5E + INC HL ;35C1 23 + LD D,(HL) ;35C2 56 + INC HL ;35C3 23 + LD C,(HL) ;35C4 4E + INC HL ;35C5 23 + LD B,(HL) ;35C6 46 + CP 195 ;35C7 FEC3 + JP C,L35DF ;35C9 DADF35 + SUB 194 ;35CC D6C2 +L35CE: SLA E ;35CE CB23 + RL D ;35D0 CB12 + RL C ;35D2 CB11 + RL B ;35D4 CB10 + DEC A ;35D6 3D + JP NZ,L35CE ;35D7 C2CE35 + LD A,194 ;35DA 3EC2 + CALL L3661 ;35DC CD6136 +L35DF: LD HL,L8000 ;35DF 210080 + CP 194 ;35E2 FEC2 + JR C,L35EC ;35E4 3806 + LD H,L ;35E6 65 + RES 7,B ;35E7 CBB8 + CALL L3661 ;35E9 CD6136 +L35EC: CP 193 ;35EC FEC1 + JR C,L35F6 ;35EE 3806 + INC L ;35F0 2C + RES 7,B ;35F1 CBB8 + CALL L3661 ;35F3 CD6136 +L35F6: EX AF,AF' ;35F6 08 + LD A,(L35AF) ;35F7 3AAF35 + XOR H ;35FA AC + CPL ;35FB 2F + AND 128 ;35FC E680 + LD H,A ;35FE 67 + LD (L35AE),HL ;35FF 22AE35 + EX AF,AF' ;3602 08 + POP HL ;3603 E1 + PUSH HL ;3604 E5 + CALL L2DE4 ;3605 CDE42D + LD A,(L35AE) ;3608 3AAE35 + OR A ;360B B7 + JR Z,L3616 ;360C 2808 + POP DE ;360E D1 + PUSH DE ;360F D5 + LD HL,L1614 ;3610 211416 + CALL L2D4A ;3613 CD4A2D +L3616: POP HL ;3616 E1 + PUSH HL ;3617 E5 + LD A,(HL) ;3618 7E + AND 127 ;3619 E67F + LD B,A ;361B 47 + LD A,(L35AF) ;361C 3AAF35 + OR B ;361F B0 + LD (HL),A ;3620 77 + LD DE,L3588 ;3621 118835 + CALL L34EB ;3624 CDEB34 + LD DE,L358D ;3627 118D35 + LD HL,L3588 ;362A 218835 + CALL L34EB ;362D CDEB34 + CALL L35A5 ;3630 CDA535 + LD DE,L358D ;3633 118D35 + LD HL,L3588 ;3636 218835 + CALL L34EB ;3639 CDEB34 + LD HL,L3689 ;363C 218936 + CALL L35A8 ;363F CDA835 + LD HL,L368E ;3642 218E36 + CALL L35A2 ;3645 CDA235 + LD HL,L3693 ;3648 219336 + CALL L35A2 ;364B CDA235 + LD HL,L3698 ;364E 219836 + CALL L35A2 ;3651 CDA235 + LD HL,L369D ;3654 219D36 + CALL L359C ;3657 CD9C35 + POP DE ;365A D1 + LD HL,L3588 ;365B 218835 + JP L2E59 ;365E C3592E + +L3661: BIT 7,B ;3661 CB78 + RET NZ ;3663 C0 + EX AF,AF' ;3664 08 + LD A,B ;3665 78 + OR C ;3666 B1 + OR E ;3667 B3 + OR D ;3668 B2 + JP Z,L367B ;3669 CA7B36 + EX AF,AF' ;366C 08 +L366D: BIT 7,B ;366D CB78 + RET NZ ;366F C0 + SLA E ;3670 CB23 + RL D ;3672 CB12 + RL C ;3674 CB11 + RL B ;3676 CB10 + DEC A ;3678 3D + JR NZ,L366D ;3679 20F2 +L367B: LD BC,COLDSTART ;367B 010000 + LD DE,COLDSTART ;367E 110000 + LD A,128 ;3681 3E80 + RET ;3683 C9 + +L3684: DB 0C1H,0A1H,0DAH,0FH ;3684 C1A1DA0F Link 3684 found at , $35B2, $36A4, $3ABF + DB 0C9H ;3688 C9 +L3689: DB 0B4H,0DCH,0FH,0AH ;3689 B4DC0F0A + DB 9FH ;368D 9F +L368E: DB 39H,61H,8FH,29H ;368E 39618F29 + DB 99H ;3692 99 +L3693: DB 0BDH,0C8H,77H,34H ;3693 BDC87734 + DB 0A3H ;3697 A3 +L3698: DB 40H,85H,0E1H,5DH ;3698 4085E15D + DB 0A5H ;369C A5 +L369D: DB 0C1H,94H,0DAH,0FH ;369D C194DA0F + DB 0C9H ;36A1 C9 +L36A2: PUSH DE ;36A2 D5 + LD HL,L3684 ;36A3 218436 + CALL L2D4A ;36A6 CD4A2D + POP HL ;36A9 E1 + CALL L3B45 ;36AA CD453B + EX DE,HL ;36AD EB + JP L35B0 ;36AE C3B035 + +L36B1: PUSH DE ;36B1 D5 + EX DE,HL ;36B2 EB + LD DE,L3597 ;36B3 119735 + CALL L34EB ;36B6 CDEB34 + POP DE ;36B9 D1 + PUSH DE ;36BA D5 + CALL L36A2 ;36BB CDA236 + POP HL ;36BE E1 + PUSH HL ;36BF E5 + LD DE,L3592 ;36C0 119235 + CALL L34EB ;36C3 CDEB34 + POP DE ;36C6 D1 + PUSH DE ;36C7 D5 + LD HL,L3597 ;36C8 219735 + CALL L34EB ;36CB CDEB34 + POP DE ;36CE D1 + PUSH DE ;36CF D5 + CALL L35B0 ;36D0 CDB035 + POP DE ;36D3 D1 + LD HL,L3592 ;36D4 219235 + JP L2F30 ;36D7 C3302F + +L36DA: DB 0FEH ;36DA FE +L36DB: DB 0AH ;36DB 0A +L36DC: LD A,3 ;36DC 3E03 + LD (L36DA),A ;36DE 32DA36 + PUSH DE ;36E1 D5 + EX DE,HL ;36E2 EB + LD A,(HL) ;36E3 7E + ADD A,128 ;36E4 C680 + JP NC,L1398 ;36E6 D29813 + JP NZ,L36F9 ;36E9 C2F936 + EX AF,AF' ;36EC 08 + LD BC,L0004 ;36ED 010400 + ADD HL,BC ;36F0 09 + LD A,(HL) ;36F1 7E + SBC HL,BC ;36F2 ED42 + OR A ;36F4 B7 + JP P,L375C ;36F5 F25C37 + EX AF,AF' ;36F8 08 +L36F9: BIT 0,A ;36F9 CB47 + JP NZ,L3778 ;36FB C27837 + LD (L36DB),A ;36FE 32DB36 + LD (HL),192 ;3701 36C0 + LD DE,L3588 ;3703 118835 + CALL L34EB ;3706 CDEB34 + LD HL,L3790 ;3709 219037 + CALL L35A8 ;370C CDA835 + LD HL,L3795 ;370F 219537 +L3712: CALL L359C ;3712 CD9C35 +L3715: LD DE,L358D ;3715 118D35 + POP HL ;3718 E1 + PUSH HL ;3719 E5 + CALL L34EB ;371A CDEB34 + LD DE,L358D ;371D 118D35 + LD HL,L3588 ;3720 218835 + CALL L2F30 ;3723 CD302F + LD HL,L358D ;3726 218D35 + CALL L359C ;3729 CD9C35 + LD HL,L3588 ;372C 218835 + LD A,(HL) ;372F 7E + AND 127 ;3730 E67F + DEC A ;3732 3D + JP C,L375C ;3733 DA5C37 + OR 128 ;3736 F680 + LD (HL),A ;3738 77 + LD A,(L36DA) ;3739 3ADA36 + DEC A ;373C 3D + LD (L36DA),A ;373D 32DA36 + JP NZ,L3715 ;3740 C21537 + LD A,(L36DB) ;3743 3ADB36 + CP 64 ;3746 FE40 + CALL NZ,L3763 ;3748 C46337 + LD B,(HL) ;374B 46 + RES 7,B ;374C CBB8 + ADD A,B ;374E 80 + SUB 64 ;374F D640 + JP C,L375C ;3751 DA5C37 + JP M,L1398 ;3754 FA9813 + OR 128 ;3757 F680 + LD (HL),A ;3759 77 + JR L375F ;375A 1803 + +L375C: LD HL,L1619 ;375C 211916 +L375F: POP DE ;375F D1 + JP L34EB ;3760 C3EB34 + +L3763: JP C,L376D ;3763 DA6D37 + SUB 64 ;3766 D640 + SRL A ;3768 CB3F + ADD A,64 ;376A C640 + RET ;376C C9 + +L376D: LD B,A ;376D 47 + LD A,64 ;376E 3E40 + SUB B ;3770 90 + SRL A ;3771 CB3F + LD B,A ;3773 47 + LD A,64 ;3774 3E40 + SUB B ;3776 90 + RET ;3777 C9 + +L3778: INC A ;3778 3C + LD (L36DB),A ;3779 32DB36 + LD (HL),191 ;377C 36BF + LD DE,L3588 ;377E 118835 + CALL L34EB ;3781 CDEB34 + LD HL,L379A ;3784 219A37 + CALL L35A8 ;3787 CDA835 + LD HL,L379F ;378A 219F37 + JP L3712 ;378D C31237 + +L3790: DB 0C0H,00H,00H,00H ;3790 C0000000 Link 3790 found at , $370A + DB 90H ;3794 90 +L3795: DB 0BFH,00H,00H,00H ;3795 BF000000 + DB 0E0H ;3799 E0 +L379A: DB 0C0H,00H,00H,00H ;379A C0000000 + DB 0E0H ;379E E0 +L379F: DB 0BFH,00H,00H,00H ;379F BF000000 + DB 90H ;37A3 90 +L37A4: DB BRC ;37A4 CD +L37A5: DB 02H ;37A5 02 +L37A6: PUSH DE ;37A6 D5 + LD A,(DE) ;37A7 1A + AND 128 ;37A8 E680 + LD (L37A4),A ;37AA 32A437 + LD A,(DE) ;37AD 1A + OR 128 ;37AE F680 + LD (DE),A ;37B0 12 + LD HL,L38D7 ;37B1 21D738 + CALL L2F30 ;37B4 CD302F + POP HL ;37B7 E1 + PUSH HL ;37B8 E5 + LD A,64 ;37B9 3E40 + LD (L37A5),A ;37BB 32A537 + LD A,(HL) ;37BE 7E + SUB 193 ;37BF D6C1 + CALL NC,L3861 ;37C1 D46138 + POP DE ;37C4 D1 + PUSH DE ;37C5 D5 + LD HL,L38D2 ;37C6 21D238 + CALL L2D4A ;37C9 CD4A2D + POP HL ;37CC E1 + PUSH HL ;37CD E5 + LD DE,L3588 ;37CE 118835 + CALL L34EB ;37D1 CDEB34 + LD HL,L38AF ;37D4 21AF38 + CALL L35A8 ;37D7 CDA835 + LD HL,L38B4 ;37DA 21B438 + CALL L359C ;37DD CD9C35 + POP HL ;37E0 E1 + PUSH HL ;37E1 E5 + CALL L35A8 ;37E2 CDA835 + LD HL,L38B9 ;37E5 21B938 + CALL L359C ;37E8 CD9C35 + POP HL ;37EB E1 + PUSH HL ;37EC E5 + CALL L35A8 ;37ED CDA835 + LD HL,L38BE ;37F0 21BE38 + CALL L359C ;37F3 CD9C35 + POP HL ;37F6 E1 + PUSH HL ;37F7 E5 + CALL L35A8 ;37F8 CDA835 + LD HL,L38C3 ;37FB 21C338 + CALL L359C ;37FE CD9C35 + POP HL ;3801 E1 + PUSH HL ;3802 E5 + CALL L35A8 ;3803 CDA835 + LD HL,L38C8 ;3806 21C838 + CALL L359C ;3809 CD9C35 + POP HL ;380C E1 + PUSH HL ;380D E5 + CALL L35A8 ;380E CDA835 + LD HL,L38CD ;3811 21CD38 + CALL L359C ;3814 CD9C35 + LD HL,L3588 ;3817 218835 + LD B,(HL) ;381A 46 + RES 7,B ;381B CBB8 + LD A,(L37A5) ;381D 3AA537 + ADD A,B ;3820 80 + JP C,L38A5 ;3821 DAA538 + SUB 63 ;3824 D63F + JP C,L3895 ;3826 DA9538 + JP M,L38A5 ;3829 FAA538 + OR 128 ;382C F680 + LD (HL),A ;382E 77 + LD A,(L37A4) ;382F 3AA437 + OR A ;3832 B7 + JP Z,L383D ;3833 CA3D38 + LD HL,L3588 ;3836 218835 + POP DE ;3839 D1 + JP L34EB ;383A C3EB34 + +L383D: POP DE ;383D D1 + PUSH DE ;383E D5 + LD HL,L1614 ;383F 211416 + CALL L34EB ;3842 CDEB34 + POP DE ;3845 D1 + PUSH DE ;3846 D5 + LD A,(DE) ;3847 1A + CP 252 ;3848 FEFC + PUSH AF ;384A F5 + JP C,L3850 ;384B DA5038 + DEC A ;384E 3D + LD (DE),A ;384F 12 +L3850: LD HL,L3588 ;3850 218835 + CALL L2F30 ;3853 CD302F + POP AF ;3856 F1 + POP HL ;3857 E1 + RET C ;3858 D8 + LD A,(HL) ;3859 7E + DEC A ;385A 3D + LD (HL),A ;385B 77 + RET M ;385C F8 + PUSH HL ;385D E5 + JP L2DE0 ;385E C3E02D + +L3861: INC HL ;3861 23 + LD E,(HL) ;3862 5E + INC HL ;3863 23 + LD D,(HL) ;3864 56 + INC HL ;3865 23 + LD C,(HL) ;3866 4E + INC HL ;3867 23 + LD B,(HL) ;3868 46 + PUSH HL ;3869 E5 + INC A ;386A 3C + LD H,A ;386B 67 + XOR A ;386C AF +L386D: SLA E ;386D CB23 + RL D ;386F CB12 + RL C ;3871 CB11 + RL B ;3873 CB10 + RLA ;3875 17 + JP C,L38A3 ;3876 DAA338 + DEC H ;3879 25 + JP NZ,L386D ;387A C26D38 + ADD A,64 ;387D C640 + JP C,L38A3 ;387F DAA338 + LD (L37A5),A ;3882 32A537 + LD A,192 ;3885 3EC0 + CALL L3661 ;3887 CD6136 + POP HL ;388A E1 + LD (HL),B ;388B 70 + DEC HL ;388C 2B + LD (HL),C ;388D 71 + DEC HL ;388E 2B + LD (HL),D ;388F 72 + DEC HL ;3890 2B + LD (HL),E ;3891 73 + DEC HL ;3892 2B + LD (HL),A ;3893 77 + RET ;3894 C9 + +L3895: LD A,(L37A4) ;3895 3AA437 + OR A ;3898 B7 + JP Z,L1398 ;3899 CA9813 +L389C: LD HL,L1619 ;389C 211916 + POP DE ;389F D1 + JP L34EB ;38A0 C3EB34 + +L38A3: POP AF ;38A3 F1 + POP AF ;38A4 F1 +L38A5: LD A,(L37A4) ;38A5 3AA437 + OR A ;38A8 B7 + JP NZ,L1398 ;38A9 C29813 + JP L389C ;38AC C39C38 + +L38AF: DB 0B3H,7CH,8CH,90H ;38AF B37C8C90 Link 38AF found at , $37D5 + DB 0E3H ;38B3 E3 +L38B4: DB 0B6H,1FH,0DFH,62H ;38B4 B61FDF62 + DB 0F8H ;38B8 F8 +L38B9: DB 0B9H,0E2H,6DH,0DDH ;38B9 B9E26DDD + DB 0DEH ;38BD DE +L38BE: DB 0BCH,8BH,33H,0C1H ;38BE BC8B33C1 + DB 0A0H ;38C2 A0 +L38C3: DB 0BEH,89H,4AH,0F1H ;38C3 BE894AF1 + DB 0ADH ;38C7 AD +L38C8: DB 0BFH,34H,33H,0F2H ;38C8 BF3433F2 + DB 0FAH ;38CC FA +L38CD: DB 0C0H,36H,0F3H,04H ;38CD C036F304 + DB 0B5H ;38D1 B5 +L38D2: DB 0C0H,00H,00H,00H ;38D2 C0000000 + DB 80H ;38D6 80 +L38D7: DB 0C0H,0F8H,17H,72H ;38D7 C0F81772 + DB 0B1H ;38DB B1 +L38DC: DB 0DAH ;38DC DA +L38DD: DB 98H ;38DD 98 +L38DE: DB 23H ;38DE 23 +L38DF: PUSH DE ;38DF D5 + LD A,128 ;38E0 3E80 + LD (L38DD),A ;38E2 32DD38 + LD (L38DC),A ;38E5 32DC38 + EX DE,HL ;38E8 EB + LD A,(HL) ;38E9 7E + OR A ;38EA B7 + JP P,L1398 ;38EB F29813 + CP 138 ;38EE FE8A + JP NC,L38FE ;38F0 D2FE38 + XOR A ;38F3 AF + LD (L38DC),A ;38F4 32DC38 + EX DE,HL ;38F7 EB + CALL L36DC ;38F8 CDDC36 + POP HL ;38FB E1 + PUSH HL ;38FC E5 + LD A,(HL) ;38FD 7E +L38FE: CP 193 ;38FE FEC1 + CALL C,L39BF ;3900 DCBF39 + LD B,0 ;3903 0600 + CP 193 ;3905 FEC1 + JP Z,L3910 ;3907 CA1039 + SUB 193 ;390A D6C1 + LD B,A ;390C 47 + LD A,193 ;390D 3EC1 + LD (HL),A ;390F 77 +L3910: LD A,B ;3910 78 + LD (L38DE),A ;3911 32DE38 + LD DE,L3588 ;3914 118835 + CALL L34EB ;3917 CDEB34 + POP DE ;391A D1 + PUSH DE ;391B D5 + LD HL,L3A04 ;391C 21043A + CALL L2D4A ;391F CD4A2D + LD HL,L3A04 ;3922 21043A + CALL L359C ;3925 CD9C35 + POP DE ;3928 D1 + PUSH DE ;3929 D5 + LD HL,L3588 ;392A 218835 + CALL L2F30 ;392D CD302F + POP DE ;3930 D1 + PUSH DE ;3931 D5 + LD HL,L3A09 ;3932 21093A + CALL L2E59 ;3935 CD592E + POP HL ;3938 E1 + PUSH HL ;3939 E5 + LD DE,L358D ;393A 118D35 + CALL L34EB ;393D CDEB34 + POP HL ;3940 E1 + PUSH HL ;3941 E5 + LD DE,L358D ;3942 118D35 + CALL L2E59 ;3945 CD592E + LD DE,L3588 ;3948 118835 + LD HL,L358D ;394B 218D35 + CALL L34EB ;394E CDEB34 + LD HL,L39F0 ;3951 21F039 + CALL L35A8 ;3954 CDA835 + LD HL,L39F5 ;3957 21F539 + CALL L35A2 ;395A CDA235 + LD HL,L39FA ;395D 21FA39 + CALL L35A2 ;3960 CDA235 + LD HL,L39FF ;3963 21FF39 + CALL L359C ;3966 CD9C35 + POP HL ;3969 E1 + PUSH HL ;396A E5 + CALL L35A8 ;396B CDA835 + LD DE,L358D ;396E 118D35 + LD HL,L3588 ;3971 218835 + CALL L34EB ;3974 CDEB34 + LD A,(L38DE) ;3977 3ADE38 + ADD A,A ;397A 87 + INC A ;397B 3C + LD B,A ;397C 47 + LD A,8 ;397D 3E08 +L397F: BIT 7,B ;397F CB78 + JP NZ,L398A ;3981 C28A39 + SLA B ;3984 CB20 + DEC A ;3986 3D + JP NZ,L397F ;3987 C27F39 +L398A: ADD A,192 ;398A C6C0 + LD HL,L3588 ;398C 218835 + LD (HL),A ;398F 77 + INC HL ;3990 23 + XOR A ;3991 AF + LD (HL),A ;3992 77 + INC HL ;3993 23 + LD (HL),A ;3994 77 + INC HL ;3995 23 + LD (HL),A ;3996 77 + INC HL ;3997 23 + LD (HL),B ;3998 70 + LD HL,L3A0E ;3999 210E3A + CALL L35A8 ;399C CDA835 + LD HL,L358D ;399F 218D35 + CALL L359C ;39A2 CD9C35 + LD HL,L3588 ;39A5 218835 + LD A,(L38DD) ;39A8 3ADD38 + CALL L3B43 ;39AB CD433B + POP DE ;39AE D1 + PUSH DE ;39AF D5 + CALL L34EB ;39B0 CDEB34 + POP DE ;39B3 D1 + LD A,(L38DC) ;39B4 3ADC38 + OR A ;39B7 B7 + RET NZ ;39B8 C0 + LD HL,L3588 ;39B9 218835 + JP L2D4D ;39BC C34D2D + +L39BF: PUSH HL ;39BF E5 + LD DE,L3588 ;39C0 118835 + CALL L34EB ;39C3 CDEB34 + POP DE ;39C6 D1 + PUSH DE ;39C7 D5 + LD HL,L1614 ;39C8 211416 + CALL L34EB ;39CB CDEB34 + POP DE ;39CE D1 + PUSH DE ;39CF D5 + LD HL,L3588 ;39D0 218835 + CALL L2F30 ;39D3 CD302F + POP HL ;39D6 E1 + LD A,(HL) ;39D7 7E + CP 193 ;39D8 FEC1 + JP NC,L39E8 ;39DA D2E839 + PUSH HL ;39DD E5 + EX DE,HL ;39DE EB + LD HL,L1614 ;39DF 211416 + CALL L34EB ;39E2 CDEB34 + POP HL ;39E5 E1 + LD A,193 ;39E6 3EC1 +L39E8: EX AF,AF' ;39E8 08 + LD A,0 ;39E9 3E00 + LD (L38DD),A ;39EB 32DD38 + EX AF,AF' ;39EE 08 + RET ;39EF C9 + +L39F0: DB 0ADH,0A4H,62H,0CCH ;39F0 ADA462CC Link 39F0 found at , $3952 + DB 0AFH ;39F4 AF +L39F5: DB 0B2H,9FH,0E9H,47H ;39F5 B29FE947 + DB 0F9H ;39F9 F9 +L39FA: DB 0B8H,0A4H,82H,0AAH ;39FA B8A482AA + DB 0DCH ;39FE DC +L39FF: DB 0BFH,0BFH,0CCH,0B0H ;39FF BFBFCCB0 + DB 0AFH ;3A03 AF +L3A04: DB 0C1H,33H,0F3H,04H ;3A04 C133F304 + DB 0B5H ;3A08 B5 +L3A09: DB 0C3H,99H,79H,82H ;3A09 C3997982 + DB 0BAH ;3A0D BA +L3A0E: DB 0BFH,0F8H,17H,72H ;3A0E BFF81772 + DB 0B1H ;3A12 B1 +L3A13: PUSH DE ;3A13 D5 + CALL L38DF ;3A14 CDDF38 + POP DE ;3A17 D1 + LD HL,L3A1E ;3A18 211E3A + JP L2E59 ;3A1B C3592E + +L3A1E: DB 0BFH,0A9H,0D8H,5BH ;3A1E BFA9D85B Link 3A1E found at , $1EC0, $1F99, $3A19 + DB 0DEH ;3A22 DE +L3A23: DB 03H ;3A23 03 +L3A24: DB 64H ;3A24 64 +L3A25: PUSH DE ;3A25 D5 + EX DE,HL ;3A26 EB + LD A,(HL) ;3A27 7E + AND 128 ;3A28 E680 + LD (L3A23),A ;3A2A 32233A + SET 7,(HL) ;3A2D CBFE + LD DE,L1614 ;3A2F 111416 + CALL L33EB ;3A32 CDEB33 + LD A,128 ;3A35 3E80 + JP NC,L3A53 ;3A37 D2533A + LD DE,L3588 ;3A3A 118835 + POP HL ;3A3D E1 + PUSH HL ;3A3E E5 + CALL L34EB ;3A3F CDEB34 + POP DE ;3A42 D1 + PUSH DE ;3A43 D5 + LD HL,L1614 ;3A44 211416 + CALL L34EB ;3A47 CDEB34 + POP DE ;3A4A D1 + PUSH DE ;3A4B D5 + LD HL,L3588 ;3A4C 218835 + CALL L2F30 ;3A4F CD302F + XOR A ;3A52 AF +L3A53: LD (L3A24),A ;3A53 32243A + POP HL ;3A56 E1 + PUSH HL ;3A57 E5 + LD DE,L3588 ;3A58 118835 + CALL L34EB ;3A5B CDEB34 + POP HL ;3A5E E1 + PUSH HL ;3A5F E5 + CALL L35A8 ;3A60 CDA835 + LD HL,L3588 ;3A63 218835 + LD DE,L358D ;3A66 118D35 + CALL L34EB ;3A69 CDEB34 + LD HL,L3AD3 ;3A6C 21D33A + CALL L35A8 ;3A6F CDA835 + LD HL,L3AD8 ;3A72 21D83A + CALL L35A2 ;3A75 CDA235 + LD HL,L3ADD ;3A78 21DD3A + CALL L35A2 ;3A7B CDA235 + LD HL,L3AE2 ;3A7E 21E23A + CALL L35A2 ;3A81 CDA235 + LD HL,L3AE7 ;3A84 21E73A + CALL L35A2 ;3A87 CDA235 + LD HL,L3AEC ;3A8A 21EC3A + CALL L35A2 ;3A8D CDA235 + LD HL,L3AF1 ;3A90 21F13A + CALL L35A2 ;3A93 CDA235 + LD HL,L3AF6 ;3A96 21F63A + CALL L35A2 ;3A99 CDA235 + LD HL,L3AFB ;3A9C 21FB3A + CALL L35A2 ;3A9F CDA235 + LD HL,L1614 ;3AA2 211416 + CALL L359C ;3AA5 CD9C35 + POP HL ;3AA8 E1 + PUSH HL ;3AA9 E5 + CALL L35A8 ;3AAA CDA835 + POP DE ;3AAD D1 + PUSH DE ;3AAE D5 + LD HL,L3588 ;3AAF 218835 + CALL L34EB ;3AB2 CDEB34 + LD A,(L3A24) ;3AB5 3A243A + OR A ;3AB8 B7 + JP NZ,L3ACC ;3AB9 C2CC3A + POP DE ;3ABC D1 + PUSH DE ;3ABD D5 + LD HL,L3684 ;3ABE 218436 + CALL L34EB ;3AC1 CDEB34 + POP DE ;3AC4 D1 + PUSH DE ;3AC5 D5 + LD HL,L3588 ;3AC6 218835 + CALL L2D4A ;3AC9 CD4A2D +L3ACC: POP HL ;3ACC E1 + LD A,(L3A23) ;3ACD 3A233A + JP L3B43 ;3AD0 C3433B + +L3AD3: DB 37H,0CAH,9AH,56H ;3AD3 37CA9A56 Link 3AD3 found at , $3A6D + DB 0DFH ;3AD7 DF +L3AD8: DB 0BAH,12H,77H,0CCH ;3AD8 BA1277CC + DB 0ABH ;3ADC AB +L3ADD: DB 3BH,23H,0B2H,5EH ;3ADD 3B23B25E + DB 0F8H ;3AE1 F8 +L3AE2: DB 0BCH,20H,63H,90H ;3AE2 BC206390 + DB 0E9H ;3AE6 E9 +L3AE7: DB 3DH,0EEH,3DH,0E0H ;3AE7 3DEE3DE0 Link 3AE7 found at , $3A85 + DB 0AAH ;3AEB AA +L3AEC: DB 0BDH,4FH,1AH,0D5H ;3AEC BD4F1AD5 + DB 0DFH ;3AF0 DF +L3AF1: DB 3EH,0E3H,0AFH,03H ;3AF1 3EE3AF03 + DB 92H ;3AF5 92 +L3AF6: DB 0BEH,2AH,7BH,0C7H ;3AF6 BE2A7BC7 + DB 0CCH ;3AFA CC +L3AFB: DB 3FH,17H,96H,0AAH ;3AFB 3F1796AA + DB 0AAH ;3AFF AA +L3B00: DB 0E1H,22H,03H,64H ;3B00 E1220364 +L3B04: DB 0F1H ;3B04 F1 +L3B05: DB 0C2H ;3B05 C2 +L3B06: DB 0CCH ;3B06 CC + DB 3CH,2AH,0BFH,3AH ;3B07 3C2ABF3A +L3B0B: PUSH DE ;3B0B D5 + LD DE,L3B06 ;3B0C 11063B + CALL L34EB ;3B0F CDEB34 + POP HL ;3B12 E1 + PUSH HL ;3B13 E5 + LD BC,L0004 ;3B14 010400 + ADD HL,BC ;3B17 09 + LD A,(HL) ;3B18 7E + OR A ;3B19 B7 + POP HL ;3B1A E1 + PUSH HL ;3B1B E5 + JP P,L2DE0 ;3B1C F2E02D + LD A,(HL) ;3B1F 7E + AND 128 ;3B20 E680 + LD (L3B05),A ;3B22 32053B + SET 7,(HL) ;3B25 CBFE + EX DE,HL ;3B27 EB + CALL L38DF ;3B28 CDDF38 + LD A,(L3B05) ;3B2B 3A053B + OR A ;3B2E B7 + CALL Z,L3B56 ;3B2F CC563B + POP DE ;3B32 D1 + PUSH DE ;3B33 D5 + LD HL,L3B06 ;3B34 21063B + CALL L2E59 ;3B37 CD592E + POP DE ;3B3A D1 + PUSH DE ;3B3B D5 + CALL L37A6 ;3B3C CDA637 + POP HL ;3B3F E1 + LD A,(L3B05) ;3B40 3A053B +L3B43: OR A ;3B43 B7 + RET NZ ;3B44 C0 +L3B45: LD BC,L0004 ;3B45 010400 + ADD HL,BC ;3B48 09 + BIT 7,(HL) ;3B49 CB7E + PUSH AF ;3B4B F5 + XOR A ;3B4C AF + SBC HL,BC ;3B4D ED42 + POP AF ;3B4F F1 + RET Z ;3B50 C8 + LD A,(HL) ;3B51 7E + ADD A,128 ;3B52 C680 + LD (HL),A ;3B54 77 + RET ;3B55 C9 + +L3B56: LD HL,L3B06 ;3B56 21063B + LD DE,L3B00 ;3B59 11003B + CALL L34EB ;3B5C CDEB34 + LD DE,L3B06 ;3B5F 11063B + CALL L340E ;3B62 CD0E34 + LD DE,L3B00 ;3B65 11003B + LD HL,L3B06 ;3B68 21063B + CALL L2D4A ;3B6B CD4A2D + LD HL,L3B04 ;3B6E 21043B + LD A,(HL) ;3B71 7E + OR A ;3B72 B7 + JP M,L1398 ;3B73 FA9813 + LD HL,L3B06 ;3B76 21063B + LD A,(HL) ;3B79 7E + INC HL ;3B7A 23 + LD E,(HL) ;3B7B 5E + INC HL ;3B7C 23 + LD D,(HL) ;3B7D 56 + INC HL ;3B7E 23 + LD C,(HL) ;3B7F 4E + INC HL ;3B80 23 + LD B,(HL) ;3B81 46 + AND 127 ;3B82 E67F + SUB 65 ;3B84 D641 + JP C,L3B9B ;3B86 DA9B3B + JP Z,L3B98 ;3B89 CA983B +L3B8C: SLA E ;3B8C CB23 + RL D ;3B8E CB12 + RL C ;3B90 CB11 + RL B ;3B92 CB10 + DEC A ;3B94 3D + JP NZ,L3B8C ;3B95 C28C3B +L3B98: RL B ;3B98 CB10 + RET C ;3B9A D8 +L3B9B: LD A,128 ;3B9B 3E80 + LD (L3B05),A ;3B9D 32053B + RET ;3BA0 C9 + +L3BA1: LD A,(L3D26) ;3BA1 3A263D + OR A ;3BA4 B7 + RET Z ;3BA5 C8 +L3BA6: CALL L3C66 ;3BA6 CD663C + RET C ;3BA9 D8 + LD A,13 ;3BAA 3E0D + CALL L3C87 ;3BAC CD873C + XOR A ;3BAF AF + LD (L3D26),A ;3BB0 32263D + JP L3CC6 ;3BB3 C3C63C + + DB 0CDH,66H,3CH,0D8H ;3BB6 CD663CD8 Link 3BB6 found at , $1CB1 + DB 0C5H,0D5H,3AH,26H ;3BBA C5D53A26 + DB 3DH,47H,1AH,0FEH ;3BBE 3D471AFE + DB 0DH,0CAH,1DH,3CH ;3BC2 0DCA1D3C + DB 0FEH,20H,0DCH,0D3H ;3BC6 FE20DCD3 + DB 3BH,0CDH,87H,3CH ;3BCA 3BCD873C + DB 04H,13H,0C3H,0C0H ;3BCE 0413C3C0 + DB 3BH,0FEH,15H,0CAH ;3BD2 3BFE15CA + DB 0ECH,3BH,0FEH,12H ;3BD6 EC3BFE12 + DB 0CAH,0F1H,3BH,0FEH ;3BDA CAF13BFE + DB 11H,0CAH,0F6H,3BH ;3BDE 11CAF63B + DB 0FEH,16H,0CAH,0FBH ;3BE2 FE16CAFB + DB 3BH,0F1H,13H,0C3H ;3BE6 3BF113C3 + DB 0C0H,3BH,3EH,0FH ;3BEA C03B3E0F + DB 06H,0FFH,0C9H,3EH ;3BEE 06FFC93E + DB 0BH,06H,0FFH,0C9H ;3BF2 0B06FFC9 + DB 3EH,09H,06H,0FFH ;3BF6 3E0906FF + DB 0C9H,3EH,0CH,0CDH ;3BFA C93E0CCD + DB 87H,3CH,3EH,0AH ;3BFE 873C3E0A + DB 06H,0FFH,0C9H ;3C02 06FFC9 +L3C05: CALL L3C66 ;3C05 CD663C + RET C ;3C08 D8 + PUSH BC ;3C09 C5 + PUSH DE ;3C0A D5 + LD A,(L3D26) ;3C0B 3A263D + LD B,A ;3C0E 47 +L3C0F: LD A,(DE) ;3C0F 1A + CP 13 ;3C10 FE0D + JP Z,L3C1D ;3C12 CA1D3C + CALL L3C87 ;3C15 CD873C + INC B ;3C18 04 + INC DE ;3C19 13 + JP L3C0F ;3C1A C30F3C + +L3C1D: LD A,B ;3C1D 78 + CP 80 ;3C1E FE50 + JP C,L3C25 ;3C20 DA253C + SUB 80 ;3C23 D650 +L3C25: LD (L3D26),A ;3C25 32263D + POP DE ;3C28 D1 + POP BC ;3C29 C1 + JP L3CC6 ;3C2A C3C63C + + DB 0FEH,0DH,0CAH,0A6H ;3C2D FE0DCAA6 Link 3C2D found at , $2EBF, $2F16 + DB 3BH,0C5H,0D5H,4FH ;3C31 3BC5D54F + DB 3AH,26H,3DH,47H ;3C35 3A263D47 + DB 0CDH,66H,3CH,0D2H ;3C39 CD663CD2 + DB 42H,3CH,0D1H,0C1H ;3C3D 423CD1C1 + DB 0C9H,79H,0CDH,87H ;3C41 C979CD87 + DB 3CH,04H,0C3H,1DH ;3C45 3C04C31D + DB 3CH ;3C49 3C +L3C4A: CALL L3C66 ;3C4A CD663C + RET C ;3C4D D8 + PUSH BC ;3C4E C5 + PUSH DE ;3C4F D5 + LD A,(L3D26) ;3C50 3A263D + LD B,A ;3C53 47 +L3C54: LD A,32 ;3C54 3E20 + CALL L3C87 ;3C56 CD873C + INC B ;3C59 04 + LD A,B ;3C5A 78 +L3C5B: SUB 10 ;3C5B D60A + JP C,L3C54 ;3C5D DA543C + JP NZ,L3C5B ;3C60 C25B3C + JP L3C1D ;3C63 C31D3C + +L3C66: LD A,5 ;3C66 3E05 + CALL L3C78 ;3C68 CD783C + RET C ;3C6B D8 + LD A,6 ;3C6C 3E06 + CALL L3C78 ;3C6E CD783C + JP NC,L3C76 ;3C71 D2763C + XOR A ;3C74 AF + RET ;3C75 C9 + +L3C76: SCF ;3C76 37 + RET ;3C77 C9 + +L3C78: CALL L3C87 ;3C78 CD873C + LD A,0 ;3C7B 3E00 + CALL L3C9D ;3C7D CD9D3C + IN A,(PTRSTATUS) ;3C80 DBFE + RRCA ;3C82 0F + RRCA ;3C83 0F + RET ;3C84 C9 + +L3C85: LD A,15 ;3C85 3E0F +L3C87: PUSH AF ;3C87 F5 + LD A,0 ;3C88 3E00 + CALL L3C9D ;3C8A CD9D3C + POP AF ;3C8D F1 + OUT (PTRDATA),A ;3C8E D3FF + LD A,128 ;3C90 3E80 + OUT (PTRSTROBE),A ;3C92 D3FE + LD A,1 ;3C94 3E01 + CALL L3C9D ;3C96 CD9D3C + XOR A ;3C99 AF + OUT (PTRSTROBE),A ;3C9A D3FE + RET ;3C9C C9 + +L3C9D: PUSH BC ;3C9D C5 + PUSH DE ;3C9E D5 + LD D,A ;3C9F 57 + LD E,6 ;3CA0 1E06 + LD BC,COLDSTART ;3CA2 010000 +L3CA5: IN A,(PTRSTATUS) ;3CA5 DBFE + AND 13 ;3CA7 E60D + CP D ;3CA9 BA + JP NZ,L3CB0 ;3CAA C2B03C + POP DE ;3CAD D1 + POP BC ;3CAE C1 + RET ;3CAF C9 + +L3CB0: DEC BC ;3CB0 0B + LD A,B ;3CB1 78 + OR C ;3CB2 B1 + JP NZ,L3CA5 ;3CB3 C2A53C + DEC E ;3CB6 1D + JP NZ,L3CA5 ;3CB7 C2A53C + CALL CRLF ;3CBA CD0900 + LD DE,L3CF0 ;3CBD 11F03C + CALL MESSAGE ;3CC0 CD1500 + JP L124B ;3CC3 C34B12 + +L3CC6: LD A,7 ;3CC6 3E07 + CALL L3C78 ;3CC8 CD783C + JP NC,L3CDA ;3CCB D2DA3C + LD A,8 ;3CCE 3E08 + CALL L3C78 ;3CD0 CD783C + RET C ;3CD3 D8 + LD DE,L3D14 ;3CD4 11143D + JP L3CDD ;3CD7 C3DD3C + +L3CDA: LD DE,L3D1A ;3CDA 111A3D +L3CDD: CALL CRLF ;3CDD CD0900 + CALL MESSAGE ;3CE0 CD1500 + LD DE,L3D09 ;3CE3 11093D + CALL MESSAGE ;3CE6 CD1500 + XOR A ;3CE9 AF + LD (L3D26),A ;3CEA 32263D + JP L124B ;3CED C34B12 + +L3CF0: DB "NO POWER OR " ;3CF0 4E4F20504F574552204F5220 + DB "NO CONNECTIO" ;3CFC 4E4F20434F4E4E454354494F + DB "N" ;3D08 4E +L3D09: DB " (PRINTER)" ;3D09 20285052494E54455229 + DB 0DH ;3D13 0D +L3D14: DB "ALARM" ;3D14 414C41524D + DB 0DH ;3D19 0D +L3D1A: DB "PAPER EM" ;3D1A 504150455220454D + DB 50H,54H,59H,0DH ;3D22 5054590D +L3D26: DB 0FFH,0F5H,0C5H,0D5H ;3D26 FFF5C5D5 + DB 0E5H,01H,00H,00H ;3D2A E5010000 + DB 2AH,71H,11H,3EH ;3D2E 2A71113E + DB 28H,95H,47H,21H ;3D32 28954721 + DB 0C4H,3DH,1AH,0FEH ;3D36 C43D1AFE + DB 0DH,0C2H,46H,3DH ;3D3A 0DC2463D + DB 0CDH,69H,3DH,0E1H ;3D3E CD693DE1 + DB 0D1H,0C1H,0F1H,0C9H ;3D42 D1C1F1C9 + DB 0FEH,20H,0D2H,57H ;3D46 FE20D257 + DB 3DH,0CDH,69H,3DH ;3D4A 3DCD693D + DB 1AH,13H,4FH,0CDH ;3D4E 1A134FCD + DB 46H,09H,0C3H,2BH ;3D52 4609C32B + DB 3DH,1AH,13H,0CDH ;3D56 3D1A13CD + DB 0B9H,0BH,77H,23H ;3D5A B90B7723 + DB 0CH,05H,0C2H,38H ;3D5E 0C05C238 + DB 3DH,0CDH,69H,3DH ;3D62 3DCD693D + DB 0C3H,2BH,3DH,79H ;3D66 C32B3D79 + DB 0B7H,0C8H,0D5H,06H ;3D6A B7C8D506 + DB 00H,3AH,94H,11H ;3D6E 003A9411 + DB 81H,0FEH,50H,0DAH ;3D72 81FE50DA + DB 7AH,3DH,0D6H,50H ;3D76 7A3DD650 + DB 32H,94H,11H,0CDH ;3D7A 329411CD + DB 0B1H,0FH,3AH,71H ;3D7E B10F3A71 + DB 11H,81H,32H,71H ;3D82 11813271 + DB 11H,0EBH,21H,0C4H ;3D86 11EB21C4 + DB 3DH,0CDH,0A6H,0DH ;3D8A 3DCDA60D + DB 0EDH,0B0H,0D1H,2AH ;3D8E EDB0D12A + DB 71H,11H,7DH,0FEH ;3D92 71117DFE + DB 28H,0C0H,0D5H,5CH ;3D96 28C0D55C + DB 16H,00H,21H,73H ;3D9A 16002173 + DB 11H,19H,7EH,0B7H ;3D9E 11197EB7 + DB 0C2H,0ABH,3DH,23H ;3DA2 C2AB3D23 + DB 36H,01H,23H,36H ;3DA6 36012336 + DB 00H,2AH,71H,11H ;3DAA 002A7111 + DB 2EH,00H,24H,22H ;3DAE 2E002422 + DB 71H,11H,0D1H,7CH ;3DB2 7111D17C + DB 0FEH,19H,0C0H,26H ;3DB6 FE19C026 + DB 18H,22H,71H,11H ;3DBA 18227111 + DB 3EH,0C0H,0CDH,0DCH ;3DBE 3EC0CDDC + DB 0DH,0C9H,13H,0CH ;3DC2 0DC9130C + DB 0FEH,0DH,0C2H,93H ;3DC6 FE0DC293 + DB 3DH,0DH,0D1H,22H ;3DCA 3D0DD122 + DB 7BH,61H,0E1H,23H ;3DCE 7B61E123 + DB 23H,23H,0E5H,0C9H ;3DD2 2323E5C9 + DB 3AH,7DH,61H,0B7H ;3DD6 3A7D61B7 + DB 3AH,7AH,61H,0C9H ;3DDA 3A7A61C9 + DB 0CDH,0C7H,29H,0D5H ;3DDE CDC729D5 + DB 0CDH,0B2H,26H,2CH ;3DE2 CDB2262C + DB 0CDH,0BH,37H,0CDH ;3DE6 CD0B37CD + DB 97H,34H,78H,0B7H ;3DEA 973478B7 + DB 0C2H,9DH,23H,22H ;3DEE C29D2322 + DB 03H,64H,0CDH,94H ;3DF2 0364CD94 + DB 29H,0D1H,7BH,0FEH ;3DF6 29D17BFE + DB 0F0H,0D2H,98H,23H ;3DFA F0D29823 + DB 32H,02H,3EH,0DBH ;3DFE 32023EDB + DB 0FFH,0B7H,47H,0CAH ;3E02 FFB747CA + DB 15H,3EH,3EH,0C8H ;3E06 153E3EC8 + DB 0CBH,78H,0C2H,17H ;3E0A CB78C217 + DB 3EH,0CBH,20H,3DH ;3E0E 3ECB203D + DB 0C3H,0AH,3EH,3EH ;3E12 C30A3E3E + DB 80H,2AH,46H,62H ;3E16 802A4662 + DB 77H,23H,0AFH,77H ;3E1A 7723AF77 + DB 23H,77H,23H,77H ;3E1E 23772377 + DB 23H,70H,57H,5FH ;3E22 2370575F + DB 47H,0EH,05H,0CDH ;3E26 470E05CD + DB 8FH,29H,0CDH,8EH ;3E2A 8F29CD8E + DB 2BH,9DH,23H,0C3H ;3E2E 2B9D23C3 + DB 0D0H,29H,0CDH,0C7H ;3E32 D029CDC7 + DB 29H,7BH,0FEH,0F0H ;3E36 297BFEF0 + DB 0D2H,98H,23H,32H ;3E3A D2982332 + DB 49H,3EH,0CDH,0B2H ;3E3E 493ECDB2 + DB 26H,2CH,0CDH,0C7H ;3E42 262CCDC7 + DB 29H,7BH,0D3H,0FFH ;3E46 297BD3FF + DB 0C3H,0D3H,29H,0CDH ;3E4A C3D329CD + DB 0C7H,29H,7BH,0FEH ;3E4E C7297BFE + DB 0FFH,0CAH,98H,23H ;3E52 FFCA9823 + DB 0D5H,0CDH,0B2H,26H ;3E56 D5CDB226 + DB 2CH,0CDH,0BH,37H ;3E5A 2CCD0B37 + DB 0CDH,97H,34H,22H ;3E5E CD973422 + DB 03H,64H,78H,0B7H ;3E62 036478B7 + DB 0CAH,8EH,23H,21H ;3E66 CA8E2321 + DB 3FH,3FH,0C1H,06H ;3E6A 3F3FC106 + DB 0AH,7EH,0FEH,0FFH ;3E6E 0A7EFEFF + DB 28H,0EH,79H,0BEH ;3E72 280E79BE + DB 28H,0AH,23H,23H ;3E76 280A2323 + DB 23H,23H,23H,10H ;3E7A 23232310 + DB 0F0H,0C3H,98H,23H ;3E7E F0C39823 + DB 23H,23H,23H,73H ;3E82 23232373 + DB 23H,72H,2AH,03H ;3E86 23722A03 + DB 64H,0CDH,52H,26H ;3E8A 64CD5226 + DB 0C3H,0D3H,29H,0CDH ;3E8E C3D329CD + DB 0C7H,29H,7BH,0FEH ;3E92 C7297BFE + DB 0FFH,0CAH,98H,23H ;3E96 FFCA9823 + DB 0D5H,0CDH,0B2H,26H ;3E9A D5CDB226 + DB 2CH,0CDH,03H,27H ;3E9E 2CCD0327 + DB 22H,03H,64H,21H ;3EA2 22036421 + DB 3FH,3FH,0C1H,06H ;3EA6 3F3FC106 + DB 0AH,7EH,0FEH,0FFH ;3EAA 0A7EFEFF + DB 28H,14H,79H,0BEH ;3EAE 281479BE + DB 28H,0AH,23H,23H ;3EB2 280A2323 + DB 23H,23H,23H,10H ;3EB6 23232310 + DB 0F0H,0C3H,98H,23H ;3EBA F0C39823 + DB 06H,02H,3EH,0FFH ;3EBE 06023EFF + DB 18H,03H,06H,03H ;3EC2 18030603 + DB 71H,23H,73H,23H ;3EC6 71237323 + DB 72H,23H,77H,10H ;3ECA 72237710 + DB 0FCH,0C3H,88H,3EH ;3ECE FCC3883E + DB 22H,03H,64H,21H ;3ED2 22036421 + DB 3EH,3FH,23H,7EH ;3ED6 3E3F237E + DB 0FEH,0FFH,0CAH,88H ;3EDA FEFFCA88 + DB 3EH,23H,23H,23H ;3EDE 3E232323 + DB 23H,7EH,0FEH,0F0H ;3EE2 237EFEF0 + DB 28H,0F0H,7EH,0FEH ;3EE6 28F07EFE + DB 0FFH,28H,0DH,23H ;3EEA FF280D23 + DB 7EH,0FEH,0FFH,0CAH ;3EEE 7EFEFFCA + DB 1BH,4FH,23H,23H ;3EF2 1B4F2323 + DB 23H,23H,18H,0EEH ;3EF6 232318EE + DB 2BH,2BH,56H,2BH ;3EFA 2B2B562B + DB 5EH,0C3H,00H,00H ;3EFE 5EC30000 + + + + END + diff --git a/software/asm/monitor_1Z-013A-KM.asm b/software/asm/monitor_1z-013a-km.asm similarity index 91% rename from software/asm/monitor_1Z-013A-KM.asm rename to software/asm/monitor_1z-013a-km.asm index 78d3fea..0130051 100644 --- a/software/asm/monitor_1Z-013A-KM.asm +++ b/software/asm/monitor_1z-013a-km.asm @@ -4,4 +4,4 @@ ROW: EQU 25 ; Number of rows on display screen. SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area. MODE80C:EQU 0 - INCLUDE "1Z-013A-KM.asm" + INCLUDE "1z-013a-km.asm" diff --git a/software/asm/monitor_1Z-013A.asm b/software/asm/monitor_1z-013a.asm similarity index 92% rename from software/asm/monitor_1Z-013A.asm rename to software/asm/monitor_1z-013a.asm index 7bb488b..7b02f6e 100644 --- a/software/asm/monitor_1Z-013A.asm +++ b/software/asm/monitor_1z-013a.asm @@ -4,4 +4,4 @@ ROW: EQU 25 ; Number of rows on display screen. SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area. MODE80C:EQU 0 - INCLUDE "1Z-013A.asm" + INCLUDE "1z-013a.asm" diff --git a/software/asm/monitor_80c_1Z-013A-KM.asm b/software/asm/monitor_80c_1z-013a-km.asm similarity index 91% rename from software/asm/monitor_80c_1Z-013A-KM.asm rename to software/asm/monitor_80c_1z-013a-km.asm index aaf1380..0524c2e 100644 --- a/software/asm/monitor_80c_1Z-013A-KM.asm +++ b/software/asm/monitor_80c_1z-013a-km.asm @@ -4,4 +4,4 @@ ROW: EQU 25 ; Number of rows on display screen. SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area. MODE80C:EQU 1 - INCLUDE "1Z-013A-KM.asm" + INCLUDE "1z-013a-km.asm" diff --git a/software/asm/monitor_80c_1Z-013A.asm b/software/asm/monitor_80c_1z-013a.asm similarity index 92% rename from software/asm/monitor_80c_1Z-013A.asm rename to software/asm/monitor_80c_1z-013a.asm index 3c1f57e..4a6b8ae 100644 --- a/software/asm/monitor_80c_1Z-013A.asm +++ b/software/asm/monitor_80c_1z-013a.asm @@ -4,4 +4,4 @@ ROW: EQU 25 ; Number of rows on display screen. SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area. MODE80C:EQU 1 - INCLUDE "1Z-013A.asm" + INCLUDE "1z-013a.asm" diff --git a/software/asm/monitor_80c_SA1510.asm b/software/asm/monitor_80c_sa1510.asm similarity index 100% rename from software/asm/monitor_80c_SA1510.asm rename to software/asm/monitor_80c_sa1510.asm diff --git a/software/asm/monitor_SA1510.asm b/software/asm/monitor_sa1510.asm similarity index 100% rename from software/asm/monitor_SA1510.asm rename to software/asm/monitor_sa1510.asm diff --git a/software/asm/MSBASIC.asm b/software/asm/msbasic.asm similarity index 100% rename from software/asm/MSBASIC.asm rename to software/asm/msbasic.asm diff --git a/software/asm/mz-xz009/BASIC.ASM b/software/asm/mz-xz009/BASIC.ASM new file mode 100644 index 0000000..2ff997f --- /dev/null +++ b/software/asm/mz-xz009/BASIC.ASM @@ -0,0 +1,2568 @@ +; -------------------------- +; MZ-800 BASIC Main program +; FI:BASIC ver 1.0A 9.06.84 +; Programed by T.Miho +; -------------------------- +; + INCLD MACRO +; +%YEN: EQU 7DH +; +$BASIC: ENT + PUSH BC + CALL CLSHET + POP BC + LD HL,NEWAD0 + LD (TEXTST),HL + LD HL,CLSST + LD (SYSSTA),HL + LD A,B + OR A +COLDRT: JP Z,$BAS2 ;JP $BAS3 Change + CP 1 + JR Z,$BAS2 + LD HL,ARUN + LD DE,INBUFL + LD BC,16 + LDIR +$BAS2: LD DE,IMDBUF + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + SVC .BELL + RST 3 + DEFB .BELL + ENDM + LD A,C3H + LD (COLDRT),A + LD HL,$BAS3 + LD (COLDRT+1),HL +; +$BAS3: LD HL,NEWAD0 +MEMCLI: LD M,0 + INC HL + LD A,H + CP FFH ;mem max + JR C,MEMCLI + CALL MEMSET + CALL NEWTXT + CALL IOINIT + JR HOTENT +; +ARUN: DEFB 15 + DEFM 'RUN "AUTO RUN"' + + + + DEFB 0DH +; +; + +CLSHET: LD A,1 ;INIT "CRT:M1" + SVC .DSMOD + RST 3 + DEFB .DSMOD + ENDM + XOR A + LD (PWMODE),A + INC A + LD (CRTMD2),A + LD (CRTMD1),A + SVC .ICRT + RST 3 + DEFB .ICRT + ENDM + RET +; +CLSST: CALL CLSHET +; +HOTENT: LD HL,ERRORA + LD (ERRORP),HL +; +; +OK: ENT + SVC .CR2 + RST 3 + DEFB .CR2 + ENDM + LD DE,OKMES + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + SVC .CR1 + RST 3 + DEFB .CR1 + ENDM +INPAGN: ENT + LD A,(CONTFG) + OR A + JR NZ,INPAG2 + LD SP,(INTFAC) + LD HL,FFFFH + PUSH HL + LD (STACK),SP +INPAG2: LD HL,0 ;Set direct-mode + LD (LNOBUF),HL + XOR A + LD (CMTMSG),A + CALL AUTODS + SVC .ERCVR ;FD,QD motor off + RST 3 + DEFB .ERCVR + ENDM + LD DE,KEYBUF + SVC .GETL + RST 3 + DEFB .GETL + ENDM + JR NC,NORINP +AUTOFF: LD HL,AUTOFG + + LD A,M + OR A + LD M,0 + JR NZ,OK + JR INPAGN +; +; +NORINP: CALL SKPDE + OR A + JR Z,INPAGN + CALL TSTNUM + JP NC,EDITOR + LD HL,IMDBUF ;Direct command + PUSH HL + CALL CVIMTX + INC HL + LD (NXTLPT),HL + CALL LDHL00 + POP HL + JR MAIN +; +; Execute +; +MAIN9: CALL ENDZ +; +MAIN: ENT + LD (STACK),SP +MAIN0: ENT + LD DE,MAIN9 + PUSH DE +MAIN2: LD (TEXTPO),HL + CALL BRKCHK + JP Z,BREAKZ +MAIN4: LD A,M + INC HL + CP 80H + JR NC,STATEM + CP "'" + JP Z,DATA + CP " " + JR Z,MAIN4 + CP ":" + JR Z,MAIN2 + OR A + JR Z,ENDLIN ;END OF LINE + DEC HL + SUB "A" + CP 26 + JP C,LET + JP ER01 +; +ENDLIN: ENT + LD HL,(NXTLPT) +NXLINE: ENT + LD E,M + INC HL + LD D,M + LD A,D + OR E + JR Z,ENDPRG ;END OF PROGRAM + + LD (CMTMSG),A + EX DE,HL + ADD HL,DE + DEC HL + LD (NXTLPT),HL + EX DE,HL + INC HL + CALL LDDEMI + LD (LNOBUF),DE + CALL TRDISP + POP DE + JR MAIN +; +ENDPRG: POP HL + CALL ?DIRECT + JP Z,OK + XOR A + LD (CONTFG),A + LD A,(ERRORF) + CP 2 + JP Z,ER20 + PUSH HL + JP END ;end command +; +; +STATEM: CP FFH ;command jp + JP Z,PFUNCT + LD DE,GJPTBL + CP FEH + JR NZ,NROSTM + LD A,M + INC HL + JR MIDFJP +NROSTM: CP E0H + JP NC,ER01 + LD DE,SJPTBL +MIDFJP: ADD A,A + PUSH HL + EX DE,HL + LD E,A + LD D,0 + ADD HL,DE + LD A,M + INC HL + LD H,M + LD L,A + EX (SP),HL +ENDCHK: ENT + CALL HLFTCH +ENDCK0: ENT + OR A + RET Z + CP ":" + RET +; +?DIRECT:ENT ;Direct mode ? + PUSH HL + LD HL,(LNOBUF) + LD A,L + OR H + + POP HL + RET +; + SKP H + +; +; TABLE +; +; +CTBL1: ENT + TBL GOT,O ; 80 + DEFM "GOT" + DEFB "O"+80H + ENDM + TBL GOSU,B + DEFM "GOSU" + DEFB "B"+80H + ENDM + DEFB 80H + TBL RU,N + DEFM "RU" + DEFB "N"+80H + ENDM + TBL RETUR,N + DEFM "RETUR" + + DEFB "N"+80H + ENDM + TBL RESTOR,E + DEFM "RESTOR" + + DEFB "E"+80H + ENDM + TBL RESUM,E + DEFM "RESUM" + + DEFB "E"+80H + ENDM + TBL LIS,T + DEFM "LIS" + DEFB "T"+80H + ENDM + DEFB 80H ; 88 + TBL DELET,E + DEFM "DELET" + + DEFB "E"+80H + ENDM + TBL RENU,M + DEFM "RENU" + DEFB "M"+80H + ENDM + TBL AUT,O + DEFM "AUT" + DEFB "O"+80H + ENDM + TBL EDI,T + DEFM "EDI" + DEFB "T"+80H + ENDM + TBL FO,R + + DEFM "FO" + DEFB "R"+80H + ENDM + TBL NEX,T + DEFM "NEX" + DEFB "T"+80H + ENDM + TBL PRIN,T + DEFM "PRIN" + DEFB "T"+80H + ENDM +; + DEFB 80H ; 90 + TBL INPU,T + DEFM "INPU" + DEFB "T"+80H + ENDM + DEFB 80H + TBL I,F + DEFM "I" + DEFB "F"+80H + ENDM + TBL DAT,A + DEFM "DAT" + DEFB "A"+80H + ENDM + TBL REA,D + DEFM "REA" + DEFB "D"+80H + ENDM + TBL DI,M + DEFM "DI" + DEFB "M"+80H + ENDM + TBL RE,M + DEFM "RE" + DEFB "M"+80H + ENDM + TBL EN,D ; 98 + DEFM "EN" + DEFB "D"+80H + ENDM + TBL STO,P + DEFM "STO" + DEFB "P"+80H + ENDM + TBL CON,T + DEFM "CON" + DEFB "T"+80H + ENDM + TBL CL,S + DEFM "CL" + DEFB "S"+80H + ENDM + DEFB 80H + TBL O,N + DEFM "O" + DEFB "N"+80H + ENDM + TBL LE,T + + DEFM "LE" + DEFB "T"+80H + ENDM + TBL NE,W + DEFM "NE" + DEFB "W"+80H + ENDM +; + TBL POK,E ; A0 + DEFM "POK" + DEFB "E"+80H + ENDM + TBL OF,F + DEFM "OF" + DEFB "F"+80H + ENDM + TBL PMOD,E + DEFM "PMOD" + DEFB "E"+80H + ENDM + TBL PSKI,P + DEFM "PSKI" + DEFB "P"+80H + ENDM + TBL PLO,T + DEFM "PLO" + DEFB "T"+80H + ENDM + TBL PLIN,E + DEFM "PLIN" + DEFB "E"+80H + ENDM + TBL RLIN,E + DEFM "RLIN" + DEFB "E"+80H + ENDM + TBL PMOV,E + DEFM "PMOV" + DEFB "E"+80H + ENDM + TBL RMOV,E ; A8 + DEFM "RMOV" + DEFB "E"+80H + ENDM + TBL TRO,N + DEFM "TRO" + DEFB "N"+80H + ENDM + TBL TROF,F + DEFM "TROF" + DEFB "F"+80H + ENDM + TBL INP,@ + DEFM "INP" + DEFB "@"+80H + ENDM + TBL DEFAUL,T + DEFM "DEFAUL" + + DEFB "T"+80H + + ENDM + TBL GE,T + DEFM "GE" + DEFB "T"+80H + ENDM + TBL PCOLO,R + DEFM "PCOLO" + + DEFB "R"+80H + ENDM + TBL PHOM,E + DEFM "PHOM" + DEFB "E"+80H + ENDM +; + TBL HSE,T ; B0 + DEFM "HSE" + DEFB "T"+80H + ENDM + TBL GPRIN,T + DEFM "GPRIN" + + DEFB "T"+80H + ENDM + TBL KE,Y + DEFM "KE" + DEFB "Y"+80H + ENDM + TBL AXI,S + DEFM "AXI" + DEFB "S"+80H + ENDM + TBL LOA,D + DEFM "LOA" + DEFB "D"+80H + ENDM + TBL SAV,E + DEFM "SAV" + DEFB "E"+80H + ENDM + TBL MERG,E + DEFM "MERG" + DEFB "E"+80H + ENDM + TBL CHAI,N + DEFM "CHAI" + DEFB "N"+80H + ENDM + TBL CONSOL,E ; B8 + DEFM "CONSOL" + + DEFB "E"+80H + ENDM + TBL SEARC,H + DEFM "SEARC" + + DEFB "H"+80H + ENDM + TBL OUT,@ + DEFM "OUT" + + DEFB "@"+80H + ENDM + TBL PCIRCL,E + DEFM "PCIRCL" + + DEFB "E"+80H + ENDM + TBL PTES,T + DEFM "PTES" + DEFB "T"+80H + ENDM + TBL PAG,E + DEFM "PAG" + DEFB "E"+80H + ENDM + TBL WAI,T + DEFM "WAI" + DEFB "T"+80H + ENDM + TBL SWA,P + DEFM "SWA" + DEFB "P"+80H + ENDM +; + DEFB 80H ; C0 + TBL ERRO,R + DEFM "ERRO" + DEFB "R"+80H + ENDM + TBL ELS,E + DEFM "ELS" + DEFB "E"+80H + ENDM + TBL US,R + DEFM "US" + DEFB "R"+80H + ENDM + TBL BY,E + DEFM "BY" + DEFB "E"+80H + ENDM + DEFB 80H + DEFB 80H + TBL DE,F + DEFM "DE" + DEFB "F"+80H + ENDM + DEFB 80H ; C8 + DEFB 80H + TBL LABE,L + DEFM "LABE" + DEFB "L"+80H + ENDM + DEFB 80H + DEFB 80H + DEFB 80H + TBL WOPE,N + DEFM "WOPE" + DEFB "N"+80H + ENDM + + TBL CLOS,E + DEFM "CLOS" + DEFB "E"+80H + ENDM +; + TBL ROPE,N ; D0 + DEFM "ROPE" + DEFB "N"+80H + ENDM + TBL XOPE,N + DEFM "XOPE" + DEFB "N"+80H + ENDM + DEFB 80H + DEFB 80H + DEFB 80H + TBL DI,R + DEFM "DI" + DEFB "R"+80H + ENDM + DEFB 80H + DEFB 80H + TBL RENAM,E ; D8 + DEFM "RENAM" + + DEFB "E"+80H + ENDM + TBL KIL,L + DEFM "KIL" + DEFB "L"+80H + ENDM + TBL LOC,K + DEFM "LOC" + DEFB "K"+80H + ENDM + TBL UNLOC,K + DEFM "UNLOC" + + DEFB "K"+80H + ENDM + TBL INI,T + DEFM "INI" + DEFB "T"+80H + ENDM + DEFB 80H + DEFB 80H + DEFB 80H +; + TBL T,O ; E0 + DEFM "T" + DEFB "O"+80H + ENDM + TBL STE,P + DEFM "STE" + DEFB "P"+80H + ENDM + TBL THE,N + DEFM "THE" + DEFB "N"+80H + ENDM + + TBL USIN,G + DEFM "USIN" + DEFB "G"+80H + ENDM + DEFB 80H ;PI + TBL AL,L + DEFM "AL" + DEFB "L"+80H + ENDM + TBL TA,B + DEFM "TA" + DEFB "B"+80H + ENDM + TBL SP,C + DEFM "SP" + DEFB "C"+80H + ENDM + DEFB 80H ; E8 + DEFB 80H + TBL .XO,R + DEFM ".XO" + DEFB "R"+80H + ENDM + TBL .O,R + DEFM ".O" + DEFB "R"+80H + ENDM + TBL .AN,D + DEFM ".AN" + DEFB "D"+80H + ENDM + TBL .NO,T + DEFM ".NO" + DEFB "T"+80H + ENDM + TBL >,< + DEFM ">" + DEFB "<"+80H + ENDM + TBL <,> + DEFM "<" + DEFB ">"+80H + ENDM +; + TBL =,< ; F0 + DEFM "=" + DEFB "<"+80H + ENDM + TBL <,= + DEFM "<" + DEFB "="+80H + ENDM + TBL =,> + DEFM "=" + DEFB ">"+80H + ENDM + TBL >,= + DEFM ">" + DEFB "="+80H + ENDM + + DEFB "="+80H + DEFB ">"+80H + DEFB "<"+80H + DEFB "+"+80H + DEFB "-"+80H ; F8 + DEFB %YEN+80H + TBL .MO,D + DEFM ".MO" + DEFB "D"+80H + ENDM + DEFB "/"+80H + DEFB "*"+80H + DEFB "^"+80H +; + DEFB FFH +; +GTABL: ENT + DEFB 80H ; FE 80 + TBL CSE,T + DEFM "CSE" + DEFB "T"+80H + ENDM + TBL CRESE,T + DEFM "CRESE" + + DEFB "T"+80H + ENDM + TBL CCOLO,R + DEFM "CCOLO" + + DEFB "R"+80H + ENDM + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H ; FE 88 + DEFB 80H + TBL SOUN,D + DEFM "SOUN" + DEFB "D"+80H + ENDM + DEFB 80H + TBL NOIS,E + DEFM "NOIS" + DEFB "E"+80H + ENDM + TBL BEE,P + DEFM "BEE" + DEFB "P"+80H + ENDM + DEFB 80H ; MZ-1500 VOICE + DEFB 80H +; + TBL COLO,R ; FE 90 + DEFM "COLO" + DEFB "R"+80H + ENDM + DEFB 80H ; MZ-1500 PRTY + TBL SE,T + + DEFM "SE" + DEFB "T"+80H + ENDM + TBL RESE,T + DEFM "RESE" + DEFB "T"+80H + ENDM + TBL LIN,E + DEFM "LIN" + DEFB "E"+80H + ENDM + TBL BLIN,E + DEFM "BLIN" + DEFB "E"+80H + ENDM + TBL PA,L + DEFM "PA" + DEFB "L"+80H + ENDM + TBL CIRCL,E + DEFM "CIRCL" + + DEFB "E"+80H + ENDM + TBL BO,X ; FE 98 + DEFM "BO" + DEFB "X"+80H + ENDM + TBL PAIN,T + DEFM "PAIN" + DEFB "T"+80H + ENDM + TBL POSITIO,N + DEFM "POSITIO" + + DEFB "N"+80H + ENDM + TBL PATTER,N + DEFM "PATTER" + + DEFB "N"+80H + ENDM + TBL HCOP,Y + DEFM "HCOP" + DEFB "Y"+80H + ENDM + DEFB 80H ; MZ-1500 KPATTERN + DEFB 80H ; MZ-1500 FPRINT + DEFB 80H +; + TBL SYMBO,L ; FE A0 + DEFM "SYMBO" + + DEFB "L"+80H + ENDM + DEFB 80H + TBL MUSI,C + DEFM "MUSI" + DEFB "C"+80H + ENDM + + TBL TEMP,O + DEFM "TEMP" + DEFB "O"+80H + ENDM + TBL CURSO,R + DEFM "CURSO" + + DEFB "R"+80H + ENDM + TBL VERIF,Y + DEFM "VERIF" + + DEFB "Y"+80H + ENDM + TBL CL,R + DEFM "CL" + DEFB "R"+80H + ENDM + TBL LIMI,T + DEFM "LIMI" + DEFB "T"+80H + ENDM + DEFB 80H ; FE A8 + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + TBL BOO,T + DEFM "BOO" + DEFB "T"+80H + ENDM +; +; + DEFB FFH +; +; +; +CTBL2: ENT + TBL IN,T ; FF 80 + DEFM "IN" + DEFB "T"+80H + ENDM + TBL AB,S + DEFM "AB" + DEFB "S"+80H + ENDM + TBL SI,N + DEFM "SI" + DEFB "N"+80H + ENDM + TBL CO,S + DEFM "CO" + DEFB "S"+80H + ENDM + TBL TA,N + DEFM "TA" + DEFB "N"+80H + ENDM + TBL L,N + + DEFM "L" + DEFB "N"+80H + ENDM + TBL EX,P + DEFM "EX" + DEFB "P"+80H + ENDM + TBL SQ,R + DEFM "SQ" + DEFB "R"+80H + ENDM + TBL RN,D ; FF 88 + DEFM "RN" + DEFB "D"+80H + ENDM + TBL PEE,K + DEFM "PEE" + DEFB "K"+80H + ENDM + TBL AT,N + DEFM "AT" + DEFB "N"+80H + ENDM + TBL SG,N + DEFM "SG" + DEFB "N"+80H + ENDM + TBL LO,G + DEFM "LO" + DEFB "G"+80H + ENDM + TBL FRA,C + DEFM "FRA" + DEFB "C"+80H + ENDM + TBL PA,I + DEFM "PA" + DEFB "I"+80H + ENDM + TBL RA,D + DEFM "RA" + DEFB "D"+80H + ENDM +; + DEFB 80H ; FF 90 + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H ; FF 98 + DEFB 80H + DEFB 80H + DEFB 80H + TBL STIC,K + DEFM "STIC" + DEFB "K"+80H + ENDM + + TBL STRI,G + DEFM "STRI" + DEFB "G"+80H + ENDM + DEFB 80H ; MZ-1500 JOY + DEFB 80H +; + TBL CHR,$ ; FF A0 + DEFM "CHR" + DEFB "$"+80H + ENDM + TBL STR,$ + DEFM "STR" + DEFB "$"+80H + ENDM + TBL HEX,$ + DEFM "HEX" + DEFB "$"+80H + ENDM + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + DEFB 80H + TBL SPACE,$ ; FF A8 + DEFM "SPACE" + + DEFB "$"+80H + ENDM + DEFB 80H + DEFB 80H ; MZ-1500 ASCCHR$ + TBL AS,C + DEFM "AS" + DEFB "C"+80H + ENDM + TBL LE,N + DEFM "LE" + DEFB "N"+80H + ENDM + TBL VA,L + DEFM "VA" + DEFB "L"+80H + ENDM + DEFB 80H + DEFB 80H +; + DEFB 80H ; FF B0 + DEFB 80H + DEFB 80H ; MZ-1500 HEXCHR$ + TBL ER,N + DEFM "ER" + DEFB "N"+80H + ENDM + TBL ER,L + DEFM "ER" + DEFB "L"+80H + ENDM + TBL SIZ,E + DEFM "SIZ" + DEFB "E"+80H + + ENDM + TBL CSR,H + DEFM "CSR" + DEFB "H"+80H + ENDM + TBL CSR,V + DEFM "CSR" + DEFB "V"+80H + ENDM + TBL POS,H ; FF B8 + DEFM "POS" + DEFB "H"+80H + ENDM + TBL POS,V + DEFM "POS" + DEFB "V"+80H + ENDM + TBL LEFT,$ + DEFM "LEFT" + DEFB "$"+80H + ENDM + TBL RIGHT,$ + DEFM "RIGHT" + + DEFB "$"+80H + ENDM + TBL MID,$ + DEFM "MID" + DEFB "$"+80H + ENDM + DEFB 80H ; MZ-1500 FONT$ + DEFB 80H + DEFB 80H +; + DEFB 80H ; FF C0 + DEFB 80H + DEFB 80H + DEFB 80H + TBL TI,$ + DEFM "TI" + DEFB "$"+80H + ENDM + TBL POIN,T + DEFM "POIN" + DEFB "T"+80H + ENDM + TBL EO,F + DEFM "EO" + DEFB "F"+80H + ENDM + TBL F,N + DEFM "F" + DEFB "N"+80H + ENDM +; + DEFB FFH +; +; JPTABLE +; +SJPTBL: ENT + + DEFW GOTO ; 80 + DEFW GOSUB + DEFW ER01 + DEFW RUN + DEFW RETURN + DEFW RESTOR + DEFW RESUME + DEFW LIST + DEFW ER01 ; 88 + DEFW DELETE + DEFW RENUM + DEFW AUTO + DEFW EDIT + DEFW FOR + DEFW NEXT + DEFW PRINT +; + DEFW ER01 ; 90 + DEFW INPUT + DEFW ER01 + DEFW IF + DEFW DATA + DEFW READ + DEFW DIM + DEFW REM + DEFW END ; 98 + DEFW STOP + DEFW CONT + DEFW CLS + DEFW ER01 + DEFW ON + DEFW LET + DEFW NEW +; + DEFW POKE ; A0 + DEFW ER01 + DEFW MODE + DEFW SKIP + DEFW PLOT + DEFW PLINE + DEFW RLINE + DEFW PMOVE + DEFW RMOVE ; A8 + DEFW TRON + DEFW TROFF + DEFW INP@ + DEFW DEFAULT + DEFW GETOP + DEFW PCOLOR + DEFW PHOME +; + DEFW HSET ; B0 + DEFW GPRINT + DEFW KLIST + DEFW AXIS + DEFW LOAD + DEFW SAVE + DEFW MERGE + DEFW CHAIN + DEFW CONSOL ; B8 + + DEFW SEARCH + DEFW OUT@ + DEFW PCIRCLE + DEFW TEST + DEFW PAGE + DEFW PAUSE + DEFW SWAP +; + DEFW ER01 ; C0 + DEFW ERROR + DEFW ELSE + DEFW USR + DEFW BYE + DEFW ER01 + DEFW ER01 + DEFW DEFOP + DEFW ER01 ; C8 + DEFW ER01 + DEFW LABEL + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW WOPEN + DEFW CLOSE +; + DEFW ROPEN ; D0 + DEFW XOPEN + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW DIR + DEFW ER01 + DEFW ER01 + DEFW RENAME ; D8 + DEFW KILL + DEFW LOCK + DEFW UNLOCK + DEFW INIT + DEFW ER01 + DEFW ER01 + DEFW ER01 +; +; +GJPTBL: ENT + DEFW ER01 ; FE 80 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 ; FE 88 + DEFW ER01 + DEFW SOUND + DEFW ER01 + DEFW NOISE + DEFW BEEP +; MZ-1500 .VOICE:ENT + DEFW ER01 + + DEFW ER01 +; + DEFW COLOR ; FE 90 + DEFW ER01 + DEFW SET + DEFW RESET + DEFW LINE + DEFW BLINE + DEFW PALET + DEFW CIRCLE + DEFW BOX ; FE 98 + DEFW PAINT + DEFW POSITION + DEFW PATTERN + DEFW HCOPY + DEFW ER01 + DEFW ER01 + DEFW ER01 +; + DEFW SMBOL ; FE A0 + DEFW ER01 + DEFW MUSIC + DEFW TEMPO + DEFW CURSOR + DEFW VERIFY + DEFW CLR + DEFW LIMIT + DEFW ER01 ; FE A8 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW BOOT +; +; +FJPTBL: ENT + DEFW INTOPR ; FF 80 + DEFW ABS + DEFW SIN + DEFW COS + DEFW TAN + DEFW LOG ;LN + DEFW EXP + DEFW SQR + DEFW RND ; FF 88 + DEFW PEEK + DEFW ATN + DEFW SGN + DEFW LOGD ;LOG + DEFW FRACT + DEFW PAI + DEFW RAD +; + DEFW ER01 ; FF 90 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + + DEFW ER01 + DEFW ER01 + DEFW ER01 ; FF 98 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW STCK + DEFW STIG + DEFW ER01 + DEFW ER01 +; + DEFW ER01 ; FF A0 CHR$ + DEFW STR$ + DEFW HEX$ + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW SPACE$ ; FF A8 + DEFW ER01 + DEFW ER01 + DEFW ASC + DEFW LEN + DEFW VAL + DEFW ER01 + DEFW ER01 +; + DEFW ER01 ; FF B0 + DEFW ER01 + DEFW ER01 + DEFW ERR + DEFW ERL + DEFW SIZE + DEFW CSRH + DEFW CSRV + DEFW POSH ; FF B8 + DEFW POSV + DEFW LEFT$ + DEFW RIGHT$ + DEFW MID$ + DEFW ER01 + DEFW ER01 + DEFW ER01 +; + DEFW ER01 ; FF C0 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW TI$ + DEFW POINT + DEFW EOF + DEFW FNEXP ;FN + DEFW ER01 ; FF C8 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + DEFW ER01 + + DEFW ER01 + SKP H + +; +; GET LINE ADRS +; +GETLIN: ENT + TEST1 0CH + CALL TEST1 + DEFB 0CH + ENDM + JR NZ,GLIN2 + CALL LDDEMI + OR FFH + RET +GLIN2: INC HL + CP 0BH + JR NZ,GLIN4 + LD E,M + INC HL + LD D,M + INC HL + LD A,E + OR D + RET Z + EX DE,HL + CALL LNOSER + JP C,ER16 + EX DE,HL + DEC HL + LD M,D + DEC HL + LD M,E + DEC HL + LD M,0CH + INC HL + INC HL + INC HL + OR FFH + LD (REFFLG),A + RET +GLIN4: CP '"' + JP NZ,ER01 + LD (LABA+1),HL + LD B,0 +GLIN6: LD A,M + OR A + JR Z,GLIN8 + INC HL + CP '"' + JR Z,GLIN8 + INC B + JR GLIN6 +GLIN8: LD A,B + OR A + JP Z,ER01 + LD (LABN+1),A + EX DE,HL + CALL LABSER + JP C,ER16 + EX DE,HL + OR FFH + RET + + SKP H + +; +; LABSER .. Label search +; LNOSER .. Line# search +; +LABSER: PUSH BC + LD BC,LABSUB + JR LNOSR0 +LNOSER: PUSH BC + LD BC,LNOSUB +LNOSR0: LD (LNOSR?+1),BC + PUSH DE + EX DE,HL + LD HL,(TEXTST) +LNOSR2: LD C,M + INC HL + LD B,M + LD A,B + OR C + SCF + JR Z,LNOSR9 + DEC HL + PUSH HL + ADD HL,BC + EX (SP),HL +LNOSR?: CALL 0 + JR C,LNOSR8 + JR Z,LNOSR8 + POP HL + JR LNOSR2 +LNOSR8: POP DE ;DMY +LNOSR9: POP DE + POP BC + RET +; +LNOSUB: INC HL + INC HL + INC HL + LD A,D + CP M + RET NZ + DEC HL + LD A,E + CP M + DEC HL + DEC HL + RET +; +LABSUB: PUSH HL + INC HL + INC HL + INC HL + INC HL + TEST1 CAH ;LABEL + CALL TEST1 + DEFB CAH + ENDM + JR NZ,LABSR9 + TEST1 '"' + CALL TEST1 + DEFB '"' + + ENDM + JR NZ,LABSR9 +LABN: LD B,0 ;Label length +LABA: LD DE,0 ;Label adrs +LABSR2: LD A,(DE) + CP M + JR NZ,LABSR9 + INC HL + INC DE + DJNZ LABSR2 + LD A,M + CP '"' + JR Z,LABSR9 + OR A +LABSR9: SCF + CCF + POP HL + RET +; +; START.LINE - END.LINE +; +GTSTED: ENT + LD DE,0000H + LD BC,FFFFH + CALL END2C + RET Z + CP "-" + JR Z,GTNXNM + CP "." + LD DE,(EDLINE) + JR Z,NX2C2D + TESTX 0BH + CALL TESTX + DEFB 0BH + ENDM + LD E,M + INC HL + LD D,M +NX2C2D: INC HL + CALL END2C + JR Z,ONELLN + CP "-" + JR Z,GTNXNM +ONELLN: LD C,E + LD B,D + RET +; +GTNXNM: INC HL + CALL END2C + RET Z + CP "." + JR NZ,GTEDNO + LD BC,(EDLINE) + INC HL + RET +; +GTEDNO: TESTX 0BH + CALL TESTX + DEFB 0BH + ENDM + + LD C,M + INC HL + LD B,M + INC HL + RET +; +END2C: ENT + CALL ENDCHK + RET Z + CP "," + RET + SKP H + +; +; REFADR ... Line ref = Adrs +; REFLNO ... Line ref = Number +; +REFADR: CALL PUSHR + LD A,FFH + LD (REFFLG),A + LD HL,CVASUB + JR REFL2 +; +REFLNO: ENT + CALL PUSHR + CALL CLRFLG +REFLNX: ENT + LD A,(REFFLG) + OR A + RET Z + XOR A + LD (REFFLG),A + LD HL,CVLSUB +REFL2: LD (CVRTLN+1),HL + LD HL,(TEXTST) + DEC HL +REFL4: INC HL + LD A,M + INC HL + OR M + RET Z + INC HL + LD E,M + INC HL + LD D,M + LD (CVALN+1),DE +REFL6: CALL IFSKSB + OR A + JR Z,REFL4 +CVRTLN: JP 0 +; +CVLSUB: CP 0CH + JR NZ,REFL6 + DEC HL + LD E,M + INC HL + LD D,M + PUSH HL + EX DE,HL + INC HL + INC HL + LD E,M + INC HL + LD D,M + POP HL + LD M,D + DEC HL + LD M,E + DEC HL + LD M,0BH + INC HL + INC HL + JR REFL6 + +; +CVASUB: CP 0BH + JR NZ,REFL6 + DEC HL + PUSH HL + CALL INDRCT + LD E,L + LD D,H + LD A,L + OR H + JR Z,CVAS9 + CALL LNOSER + JR C,CVASE + EX DE,HL + POP HL + DEC HL + LD M,0CH + INC HL + LD M,E + INC HL + LD M,D + JR REFL6 +; +CVASE: PUSH DE + LD A,16 ;UNDEF LINE + SVC .ERRX + RST 3 + DEFB .ERRX + ENDM + LD A," " + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + POP HL + CALL ASCFIV + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM +CVALN: LD HL,0 ;xxx + CALL P.ERL + SVC .CR2 + RST 3 + DEFB .CR2 + ENDM +CVAS9: POP HL + INC HL + JR REFL6 +; +REFFLG: DEFB 0 + SKP H + +EDITOR: SVC .CLRIO + RST 3 + DEFB .CLRIO + ENDM + CALL REFLNO + CALL CVBCAS + LD A,B + OR C + JP Z,INPAGN + LD (EDLINE),BC + LD A,(DE) + CP 20H + JR NZ,+3 + INC DE + PUSH AF + LD HL,IMDBUF + CALL CVIMTX + PUSH HL + LD HL,(EDLINE) + LD E,L + LD D,H + CALL DELSUB + POP HL ; END POINT + POP AF + OR A + JR Z,EDIT9 + LD DE,IMDBUF + OR A + SBC HL,DE + LD DE,5 + ADD HL,DE + LD BC,HL + LD HL,IMDBUF + CALL INSTLIN +EDIT9: LD A,(AUTOFG) + OR A + JP Z,INPAGN + LD DE,(EDSTEP) + LD HL,(EDLINE) + ADD HL,DE + LD (EDLINE),HL + JP NC,INPAGN + JP AUTOFF +; +; INSTLIN HL .. IMD ADRS +; BC .. IMD LENGTH +; +INSTLIN:ENT + LD (INS.P+1),HL + PUSH BC + LD BC,(EDLINE) + LD HL,(TEXTST) + JR INSL4 +INSL2: CALL LDDEMD + ADD HL,DE +INSL4: CALL LDDEMD + LD A,D + OR E + JR Z,INSL6 + INC HL + + INC HL + CALL LDDEMD + EX DE,HL + SBC HL,BC + DEC DE + DEC DE + EX DE,HL + JR C,INSL2 +INSL6: POP DE ;DE:=open bytes + PUSH HL ;Push inst-point + PUSH DE + LD HL,40 ;memory check ofset + ADD HL,DE + LD BC,(VARED) + LD (TMPEND),BC + ADD HL,BC + JP C,ER06' + EX DE,HL + CALL MEMECK + POP DE ;DE=open bytes + SVC .ADDP0 + RST 3 + DEFB .ADDP0 + ENDM + POP HL ;HL=inst point + PUSH DE ;DE=open bytes + PUSH BC + EX (SP),HL ;HL=old VARED + POP BC ;BC=inst point + PUSH HL + OR A + SBC HL,BC + LD BC,HL ;BC=xfer bytes + POP HL ;HL=old VARED + LD DE,(VARED) ;DE=new VARED + INC BC + LDDR + INC HL ;HL=inst point + POP BC ;BC=open bytes + LD M,C + INC HL + LD M,B + INC HL + LD DE,(EDLINE) + LD M,E + INC HL + LD M,D + INC HL + EX DE,HL +INS.P: LD HL,IMDBUF ;xxx + DEC BC + DEC BC + DEC BC + DEC BC + LDIR + RET + SKP H + +; +RUN: JR Z,RUN0 ;RUN + CALL LINE?2 + JP Z,GOTO ;RUN linenumber + JP FRUN ;RUN "filename" +RUN0: CALL CLR +RUNX: ENT + CALL RUNINT + LD DE,(TEXTST) + LD SP,(INTFAC) + LD HL,FFFFH + PUSH HL + PUSH HL + EX DE,HL + JP NXLINE +; +RUNINT: ENT + PUSH HL + CALL CLRFLG + LD (AUTOFG),A + LD HL,10 + LD (EDLINE),HL + LD (EDSTEP),HL + POP HL + RET +; +CLRFLG: ENT + LD HL,0 + LD (ERRLNO),HL + XOR A + LD (DATFLG),A + LD (CONTFG),A + LD (ERRORF),A + LD (ERRCOD),A + LD (LSWAP),A + RET +; +; +; +END: LD A,(LSWAP) + OR A + JP NZ,BSWAP + SVC .CLRIO ;END command + RST 3 + DEFB .CLRIO + ENDM + XOR A + LD (CONTFG),A + POP BC + JP OK + SKP H + +; +AUTO: CALL CKCOM + LD DE,10 ;AUTO start,step + LD BC,10 + JR Z,AUTO6 + CP "," + JR NZ,AUTO2 + INC HL + CALL IDEEXP + LD B,D + LD C,E + LD DE,10 + JR AUTO6 +; +AUTO2: CP "." + LD DE,(EDLINE) + JR Z,AUTO4 + CP 0BH + JP NZ,ER01 + INC HL + LD E,M + INC HL + LD D,M +; +AUTO4: INC HL + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR NZ,AUTO6 + PUSH DE + CALL IDEEXP + LD C,E + LD B,D + POP DE +AUTO6: CALL ENDZ + LD A,C + OR B + JP Z,ER03 +; + LD (EDLINE),DE + LD (EDSTEP),BC + LD A,1 + LD (AUTOFG),A + POP AF + JP INPAGN +; +AUTOFG: DEFS 1 + SKP H + +; +AUTODS: LD A,(AUTOFG) ;Disp auto line + OR A + RET Z + XOR A + JR EDITL +; +EDIT: CALL EDITL ;EDIT linenumber + JP INPAGN +; +EDITL: LD DE,(EDLINE) + CALL NZ,GTSTED + PUSH DE + EX DE,HL + CALL LNOSER + POP DE + INC HL + INC HL + INC HL + INC HL + JR NC,+5 + LD HL,.NOP + EX DE,HL + PUSH DE + LD (EDLINE),HL + CALL ASCFIV + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + LD A," " + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + POP HL + LD DE,KEYBUF + PUSH DE + CALL CVTXIM + POP DE + LD B,0 +EDL2: LD A,(DE) + OR A + JR Z,EDL6 + INC B + SVC .CRT1X + RST 3 + DEFB .CRT1X + ENDM + INC DE + JR EDL2 +EDL6: LD A,B + OR A + RET Z + LD A,14H ; CURSOR BACK + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + DJNZ -3 + + RET + SKP H + +; +MEMSET: ENT + PUSH DE + LD DE,-16 + ADD HL,DE + POP DE + LD (MEMLMT),HL + DEC H + LD (INTFAC),HL + XOR A + LD (LSWAP),A + RET +; +NEWTXT: ENT + LD HL,(TEXTST) + CALL LDHL00 + LD (POOL),HL + CALL RUNINT + JR CLR +; +NEW: TEST1 9DH ;NEW command + CALL TEST1 + DEFB 9DH + ENDM + CALL Z,NEWON + CALL NEWTXT + JP HOTENT +; +; +CLR: ENT ;CLR command + PUSH HL + CALL CLPTR2 + POP HL + SVC .CLRIO + RST 3 + DEFB .CLRIO + ENDM + RET + SKP H + +; +CLPTR: ENT + LD HL,(TEXTST) + CALL LDHL00 + LD (POOL),HL +CLPTR2: LD HL,(POOL) + LD M,0 + INC HL + LD (VARST),HL + LD M,0 + INC HL + LD (STRST),HL + CALL LDHL00 + LD (VARED),HL + LD (TMPEND),HL + RET +; +LDHL00: ENT + LD M,0 + INC HL + LD M,0 + INC HL + RET +; +; +TRON: CALL ENDCHK + LD A,1 + JR Z,TROFF+1 + TESTX FBH ;/ + CALL TESTX + DEFB FBH + ENDM + TESTX "P" + CALL TESTX + DEFB "P" + ENDM + LD A,2 + JR +3 +TROFF: XOR A ;TROFF + LD (TRDISP+1),A + RET +; +TRDISP: LD A,0 ;0,1,2 + OR A + RET Z + DEC A + LD (FILOUT),A + JR Z,TRDSP2 + LD A,(PNMODE) + CP 2 + JR Z,TRDSP9 ;MODE GR +TRDSP2: PUSH HL + LD A,"[" + SVC .&1C + RST 3 + DEFB .&1C + ENDM + LD HL,(LNOBUF) + CALL ASCFIV + SVC .&MSG + + RST 3 + DEFB .&MSG + ENDM + LD A,"]" + SVC .&1C + RST 3 + DEFB .&1C + ENDM + POP HL +TRDSP9: XOR A + LD (FILOUT),A + RET + SKP H + +; +DELETE: CALL END2C + JP Z,ER01 ;DELETE + CALL LINE?2 + JR Z,DELLIN + CP "-" + JR Z,DELLIN + CP "." + JP NZ,FDEL ;DELETE "filename" +DELLIN: ENT + CALL GTSTED ;DELETE xxx-yyy + EX DE,HL + LD E,C + LD D,B + CALL DELSUB + JP OK +; +; Delete (HL)-(DE) +; +DELSUB: ENT + PUSH AF + PUSH BC + PUSH HL + PUSH DE + CALL REFLNO + LD C,L + LD B,H + LD HL,(TEXTST) +FSTLOP: CALL LDDEMI + LD A,E + OR D + JR NZ,FDDLST +RTDLTE: POP DE + POP HL + POP BC + POP AF + RET +; +POPDLR: POP DE + JR RTDLTE +; +FDDLST: EX DE,HL + ADD HL,DE + DEC HL + DEC HL + EX DE,HL + PUSH DE + LD E,M + INC HL + LD D,M + EX DE,HL + LD (LNOTBF),HL + SBC HL,BC + POP HL + JR C,FSTLOP + DEC DE + DEC DE + DEC DE + POP BC ; DELSUB END LINE NO. + PUSH BC + + PUSH DE ; DELSUB START ADRS + PUSH HL ; NEXT LINE ADRS + DEFB 21H +LNOTBF: DEFS 2 + SBC HL,BC + POP HL + JR Z,DLSTRT ; DEL-LINE END FOUND + JR NC,POPDLR ; NOTHING OCCUR +SNDDLP: CALL LDDEMI + LD A,D + OR E + JR Z,DLEFD' + EX DE,HL + ADD HL,DE + EX DE,HL + DEC DE + DEC DE + PUSH DE + LD E,M + INC HL + LD D,M + EX DE,HL + SBC HL,BC + POP HL + JR C,SNDDLP + JR Z,DLSTRT + EX DE,HL + DEC HL +DLEFD': DEC HL + DEC HL +DLSTRT: POP DE + PUSH DE ;Delete (DE)-(HL) + PUSH HL + OR A + EX DE,HL + SBC HL,DE + EX DE,HL ;DE = - bytes + LD BC,(VARED) ;old VARED + SVC .ADDP0 + RST 3 + DEFB .ADDP0 + ENDM + POP DE ;DE = del end + LD HL,BC ;HL = old VARED + OR A + SBC HL,DE + LD BC,HL ;BC = move bytes + EX DE,HL ;HL = del end + POP DE ;DE = del start + LDIR + JR RTDLTE +; +IDEEX0: CALL IDEEXP + LD A,D + OR E + RET NZ + JP ER03 + SKP H + +; +RENUM: CALL CKCOM + LD DE,10 ;RENUM xxx,yyy,zzz + LD (NEWNO),DE + LD (ADDNO),DE + LD E,0 + LD (STLNO),DE + JR Z,RNSTRT + CP "," + JR Z,SKIRE1 + CALL IDEEX0 + LD (NEWNO),DE + CALL ENDCHK + JR Z,RNSTRT + CALL HCH2CH + DEC HL +SKIRE1: CALL INCHLF + CP "," + JR Z,SKMRNU + CALL IDEEX0 + LD (STLNO),DE + CALL ENDCHK + JR Z,RNSTRT + CALL HCH2CH + DEC HL +SKMRNU: INC HL + CALL IDEEX0 + LD (ADDNO),DE +RNSTRT: PUSH HL + LD HL,(STLNO) + EX DE,HL + LD HL,(NEWNO) + OR A + SBC HL,DE + JP C,ER03 + CALL REFADR + LD HL,(TEXTST) +BEGRNS: LD E,M + INC HL + LD D,M + LD A,D + OR E + JR Z,RNUMED + EX DE,HL + ADD HL,DE + DEC HL + EX DE,HL + INC HL + LD C,M + INC HL + LD B,M + PUSH HL + DEFB 21H +STLNO: DEFS 2 + OR A + SBC HL,BC + POP HL + JR Z,BEGREN + JR C,BEGREN + EX DE,HL + + JR BEGRNS +; +BEGREN: DEC HL + DEC HL + DEC HL + DEFB 01H +NEWNO: DEFS 2 + OR A + PUSH AF +RENUML: LD E,M + INC HL + LD D,M + LD A,D + OR E + JR Z,RNUMED + EX DE,HL + ADD HL,DE + DEC HL + EX DE,HL + POP AF + JR C,RENOVR + INC HL + LD M,C + INC HL + LD M,B + DEFB 21H +ADDNO: DEFS 2 + ADD HL,BC + PUSH AF + LD C,L + LD B,H + EX DE,HL + JR RENUML +; +RNUMED: POP AF + CALL REFLNX + POP HL + RET +; +RENOVR: LD HL,10 + LD (ADDNO),HL + LD (NEWNO),HL + LD L,0 + LD (STLNO),HL + CALL RNSTRT + JP ER03 + SKP H + +; +; +; Error message & exeption +; +MAXERR: EQU 70 +; + ENTRY 01 +ER01: ENT + LD A,01 + DEFB 21H + ENDM + ENTRY 02 +ER02: ENT + LD A,02 + DEFB 21H + ENDM + ENTRY 03 +ER03: ENT + LD A,03 + DEFB 21H + ENDM + ENTRY 04 +ER04: ENT + LD A,04 + DEFB 21H + ENDM + ENTRY 05 +ER05: ENT + LD A,05 + DEFB 21H + ENDM + ENTRY 06 +ER06: ENT + LD A,06 + DEFB 21H + ENDM + ENTRY 07 +ER07: ENT + LD A,07 + DEFB 21H + ENDM + ENTRY 08 +ER08: ENT + LD A,08 + DEFB 21H + ENDM + ENTRY 13 +ER13: ENT + LD A,13 + DEFB 21H + ENDM + ENTRY 14 +ER14: ENT + LD A,14 + + DEFB 21H + ENDM + ENTRY 15 +ER15: ENT + LD A,15 + DEFB 21H + ENDM + ENTRY 16 +ER16: ENT + LD A,16 + DEFB 21H + ENDM + ENTRY 17 +ER17: ENT + LD A,17 + DEFB 21H + ENDM + ENTRY 18 +ER18: ENT + LD A,18 + DEFB 21H + ENDM + ENTRY 19 +ER19: ENT + LD A,19 + DEFB 21H + ENDM + ENTRY 20 +ER20: ENT + LD A,20 + DEFB 21H + ENDM + ENTRY 21 +ER21: ENT + LD A,21 + DEFB 21H + ENDM + ENTRY 22 +ER22: ENT + LD A,22 + DEFB 21H + ENDM + ENTRY 24 +ER24: ENT + LD A,24 + DEFB 21H + ENDM + ENTRY 25 +ER25: ENT + LD A,25 + DEFB 21H + ENDM + ENTRY 58 +ER58: ENT + LD A,58 + DEFB 21H + ENDM +ER64: ENT + LD A,64 + JR ERRJ2 + +; +ER06': ENT ;Nesting error + LD A,6 +NESTER: ENT + LD SP,(INTFAC) + LD HL,FFFFH + PUSH HL + LD (STACK),SP +ERRJ2: JR ERRJ1 + SKP H + +; +LPTMER: ENT ;LPT:mode error + LD HL,(.$LPT) + DEFB DDH +CRTMER: ENT ;CRT:mode error + LD HL,(.$CRT) + LD (ZEQT),HL + XOR A + LD (ZFLAG2),A + LD A,68+80H ;+80H is I/O err + DEFB 21H +ER59: ENT + LD A,59+80H + DEFB 21H +ER59': ENT + LD A,59 + DEFB 21H +ER60: ENT + LD A,60+80H + DEFB 21H +ER61: ENT + LD A,61+80H +ERRJ1: JP ERRORJ +; +; +P.ERL: LD A,L ;Print "IN line#" + OR H + RET Z + LD DE,MESIN + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + CALL ASCFIV + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + RET +; +; +MESIN: DEFM " IN " + DEFB 0 +MESBR: DEFM "BREAK" + + DEFB 0 +; +OKMES: ENT + DEFM "READY" + +CONTFG: ENT + DEFB 0 + DEFB 0 + SKP H + +; +ERROR: CALL IBYTE ;"ERROR" command + DEC A + CP MAXERR + JR C,+4 + LD A,69-1 + INC A +; +ERRORA: LD SP,(STACK) ;jump from monitor + PUSH AF + SVC .ERCVR + RST 3 + DEFB .ERCVR + ENDM + CALL LDEND + POP AF + OR A + JR Z,.BRKX + CP 80H + JR Z,.BRKZ + LD C,A + LD HL,0 + LD (FNVRBF),HL + CALL ?DIRECT + LD A,C + JR Z,ERR2 + LD HL,(LNOBUF) + LD (ERRLNO),HL + LD (EDLINE),HL + LD HL,(NXTLPT) + LD (ERRLPT),HL + LD HL,(TEXTPO) + LD (ERRPNT),HL + AND 7FH + LD (ERRCOD),A + LD A,(ERRORF) + INC A + CP 02H + JR Z,ERROPR + XOR A + LD (CONTFG),A + LD (LSWAP),A + LD A,C +ERR2: SVC .ERRX + RST 3 + DEFB .ERRX + ENDM +ERR4: LD HL,(LNOBUF) + CALL P.ERL + JP OK +; +; +ERROPR: LD (ERRORF),A ;Error trap + LD HL,(ERRORV) + PUSH HL + JP NXLINE +; + SKP H + +.BRKZ: LD A,"." ;Can CONT +.BRKX: ;Can't CONT + LD HL,(TEXTPO) + JR BREAK2 +; +STOP: ;"STOP" command + LD A,"." ;Can CONT + POP DE ;Dummy POP +BREAK2: PUSH AF + PUSH HL + SVC .CR2 + RST 3 + DEFB .CR2 + ENDM + SVC .BELL + RST 3 + DEFB .BELL + ENDM + LD DE,MESBR + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + POP HL + CALL ?DIRECT + JR Z,BREAK4 + LD (BREAKT+1),HL ;Text pointer + LD HL,(NXTLPT) + LD (BREAKN+1),HL ;Next line + LD HL,(LNOBUF) + LD (BREAKL+1),HL ;Line No. + LD (EDLINE),HL + POP AF + LD (CONTFG),A + JP ERR4 +BREAK4: POP AF + JP OK +; +; +CONT: POP DE ;"CONT" command + LD HL,CONTFG + LD A,M + OR A + JP Z,ER17 + LD M,0 +BREAKL: LD HL,0 ;Line No. + LD (LNOBUF),HL +BREAKN: LD HL,0 ;Next line + LD (NXTLPT),HL +BREAKT: LD HL,0 ;Text pointer + JP MAIN +; +; + SKP H + +; +RESUME: ;"RESUME" command + LD A,(ERRORF) + CP 2 + JP C,ER21 + DEC A + LD (ERRORF),A + CALL ENDCHK + EX DE,HL + LD HL,(ERRLNO) + LD (LNOBUF),HL + LD HL,(ERRLPT) + LD (NXTLPT),HL + LD HL,(ERRPNT) + JR NZ,RESUM2 + POP BC + JP MAIN0 ;RESUME +RESUM2: CP 8EH + JP Z,DATA ;RESUME NEXT + EX DE,HL + JP GOTO ;RESUME line# +; +ONERRG: ENT + TESTX 80H ;GOTO + CALL TESTX + DEFB 80H + ENDM + CALL GETLIN + JR Z,OFFER + LD (ERRORV),DE + LD A,1 +ONER9: LD (ERRORF),A + RET +; +; +OFFER: LD A,(ERRORF) + DEC A + JR Z,ONER9 + XOR A + LD (ERRORF),A + LD HL,(ERRLNO) + LD (LNOBUF),HL + LD A,(ERRCOD) + JP ERRORA +; + END diff --git a/software/asm/mz-xz009/CONV.ASM b/software/asm/mz-xz009/CONV.ASM new file mode 100644 index 0000000..332f118 --- /dev/null +++ b/software/asm/mz-xz009/CONV.ASM @@ -0,0 +1,1514 @@ +; ----------------------------- +; MZ-800 BASIC Data conversion +; FI:CONV ver 1.0A 7.18.84 +; Programed by T.Miho +; ----------------------------- +; + INCLD MACRO +; +; +%BAR: EQU C4H +%YEN: EQU 7DH +%POND: EQU FBH +; +ENDZ: ENT + CALL ENDCHK + RET Z + JP ER01 +; +TESTP: ENT + XOR A + LD (FILOUT),A + TEST1 FBH ;/ + CALL TEST1 + DEFB FBH + ENDM + RET NZ ;ZF=0 + TESTX "P" + CALL TESTX + DEFB "P" + ENDM + CALL LPTTMD ;Check text mode + LD A,"P" + LD (FILOUT),A + CP A ;ZF=1 + RET +; +ASCFIV: ENT + LD DE,DGBF00 + LD B,0 ;Zero sup. + PUSH DE + SVC .ASCHL + RST 3 + DEFB .ASCHL + ENDM + POP DE + RET + SKP H + +; +; Fetch subroutines +; +ICH28H: ENT + INC HL +HCH28H: ENT + CALL HLFTCH +CH28H: ENT + CP "(" + JR CHXX2 +; +HCH29H: ENT + CALL HLFTCH +CH29H: ENT + CP ")" + JR CHXX2 +; +HCH2CH: ENT + CALL HLFTCH +CH2CH: ENT + CP ',' +; +CHXX2: INC HL + RET Z + JP ER01 +; +SKPDI: ENT + INC DE +SKPDE: ENT + LD A,(DE) + CP ' ' + JR Z,SKPDI + RET +; +; +;(DE)=1.0 +LDIR1: ENT + LD HL,FLONE +;(DE)=(HL) 5BYTES SET +LDIR5: ENT + LD BC,5 + LDIR + RET + SKP H + +; +;(HL)=DE +FLTHEX: ENT + CALL CLRFAC ;EXT(FLOAT) + LD A,E + OR D + RET Z + BIT 7,D + LD A,7FH + JR Z,NORFLH + LD A,D + CPL + LD D,A + LD A,E + CPL + LD E,A + INC DE + LD A,FFH +; +NORFLH: LD B,91H +SFL: DEC B + BIT 7,D + JR NZ,FLHXRT + RL E + RL D + JR SFL +FLHXRT: LD M,B + INC HL + AND D + LD M,A + INC HL + LD M,E + DEC HL + DEC HL + RET +; +;0-9 THEN CY=0 +TSTNUM: ENT + CP "0" + RET C + CP ":" + CCF + RET +; +;VAR THEN CY=0 +TSTVAR: ENT + CP 5FH + RET Z + CP "0" + RET C + CP 5BH + CCF + RET C + CP ":" + CCF + RET NC + CP 41H + RET + SKP H + +; +;CONV FLOAT(HL)_ASC(DE) +CVFLAS: ENT + CALL CLRFAC ;EXT + LD (DGITCO),A + LD (DGITFG),A + LD (EXPFLG),A + LD (PRODFL+1),A + LD A,5 + LD (PRCSON),A +DEFTCL: CALL SKPDE + INC DE + CP "+" + JR Z,DEFTCL + CP "-" + JR NZ,CHKAND + CALL DEFTCL + JP TOGLE +; +CHKAND: CP "$" + JR NZ,ZRSKIP + PUSH HL + EX DE,HL + SVC .DEHEX + RST 3 + DEFB .DEHEX + ENDM + EX (SP),HL + CALL FLTHEX + POP DE + LD A,5 + RET +; +ZRSKIP: CP "0" + JR NZ,MDLAG + LD A,(DE) + INC DE + JR ZRSKIP +; +FTCHL: LD A,(DE) + INC DE +MDLAG: CP " " + JR Z,FTCHL + CP "." + JR Z,POINTS + CALL TSTNUM + JR C,TST23H + SUB "0" + CALL MULTEN + CALL MULDEC + LD A,1 + LD (DGITFG),A + LD A,(DGITCO) + INC A + LD (DGITCO),A + JR FTCHL +; +POINTS: LD A,1 + LD (PRODFL+1),A + LD C,A + +POINT: LD A,(DE) + INC DE + CP " " + JR Z,POINT + CALL TSTNUM + JR C,PESC + INC C + SUB "0" + JR Z,SDFGRE + PUSH AF + LD A,1 + LD (DGITFG),A + POP AF +SDFGRE: PUSH AF + LD A,(DGITFG) + LD B,A + LD A,(DGITCO) + ADD A,B + LD (DGITCO),A + POP AF + CALL MULTEN + CALL MULDEC + JR POINT +; +PESC: DEC C + JR Z,TST23H + CALL DIVTEN + JR PESC +; +; +TST23H: CP "E" + JR Z,EXPON! +; +TSTPRC: DEC DE + LD A,(EXPFLG) + OR A + RET NZ +PRODFL: LD A,0 ;xxx + OR A + RET NZ + LD A,5 + RET +; +EXPON!: LD A,(DE) + CP "-" + JR Z,EXPON + CP "+" + JR Z,EXPON + CALL TSTNUM + JR C,TSTPRC +EXPON: LD A,1 + LD (PRODFL+1),A + PUSH HL + LD HL,MUL + LD (EXJPVC),HL + LD HL,0000H + LD A,(DE) + INC DE + CP "+" + JR Z,CBEGIN + + CP "-" + JR NZ,CLMIDL + PUSH HL + LD HL,DIV + LD (EXJPVC),HL + POP HL +CBEGIN: LD A,(DE) + INC DE +CLMIDL: SUB "0" + JR C,ESCPER + CP 0AH + JR NC,ESCPER + PUSH DE + CALL ADHLCK + LD E,L + LD D,H + CALL ADHLCK + CALL ADHLCK + CALL ADDECK + LD E,A + LD D,0 + CALL ADDECK + POP DE + JR CBEGIN +ESCPER: LD A,H + OR A + JR NZ,OVERF' + LD A,L + POP HL + PUSH DE + PUSH BC + PUSH HL + LD DE,ZFAC + PUSH DE + CALL LDIR1 + POP HL + LD B,A + INC B + JR +5 + CALL MULTEN + DJNZ -3 + EX DE,HL + POP HL + DEFB CDH +EXJPVC: DEFS 2 + POP BC + POP DE + JP TSTPRC +; +DIVTEN: PUSH AF + PUSH BC + PUSH DE + LD DE,FLTEN + CALL DIV + POP DE + POP BC + POP AF + RET +; +ADDECK: ADD HL,DE + + RET NC + JR OVERF' +; +ADHLCK: ADD HL,HL + RET NC +OVERF': JP ER02 ;OVERFLOW +; +MULDEC: PUSH DE + PUSH HL + LD HL,ZFAC ;***** + LD E,A + LD D,0 + CALL FLTHEX + EX DE,HL + POP HL + PUSH BC + CALL ADD + POP BC + POP DE + RET +; +; +;CONV ASC(DE)_FLOAT(HL) +CVNMFL: ENT + LD A,5 + LD (PRCSON),A + LD A,M + OR A + JR Z,ONLYZ# + INC HL + LD A,M + DEC HL + RLCA +ONLYZ#: LD A,20H + JR NC,PLUS + CALL TOGLE + LD A,"-" +PLUS: PUSH AF + CALL CVASF1 + CALL ADJDGT + POP AF + DEC DE + LD (DE),A + RET +; +; +CMP2: PUSH BC + CALL CMP + POP BC + RET + SKP H + +; +INT: ENT + CALL PUSHR + LD A,M + CP 81H + JP C,CLRFAC + LD A,M + CP A0H + RET NC + INC HL + CALL RCHLBC + PUSH HL + LD L,M + LD B,0 +INTSFL: SRL E + RR D + RR C + RR L + INC A + INC B + CP A0H + JR NZ,INTSFL +INTSBL: SLA L + RL C + RL D + RL E + DJNZ INTSBL + LD A,L + POP HL + LD M,A + DEC HL + LD M,C + DEC HL + LD M,D + DEC HL + LD M,E + RET +; +RCHLBC: LD E,M + INC HL + LD D,M + INC HL + LD C,M + INC HL + RET + SKP H + +; +FRACT: ENT + LD A,M + CP 81H + RET C + PUSH DE + PUSH HL + LD DE,FRACW + PUSH DE + CALL LDIR5 + POP HL + CALL INT + EX DE,HL + POP HL + CALL SUB + POP DE + RET +; +FRACW: DEFS 5 +; +; +MULTEN: PUSH AF + PUSH BC + PUSH DE + LD DE,FLTEN + CALL MUL + POP DE + POP BC + POP AF + RET + SKP H + +; +HLFLT: ENT + INC HL + BIT 7,M + JR Z,NORHLC + CALL NORHLC + LD A,H + CPL + LD H,A + LD A,L + CPL + LD L,A + INC HL + RET +; +NORHLC: DEC HL + LD A,M + CP 91H + JP NC,ER02 ;OVERFLOW + CP 81H + JR C,HXZRRT + PUSH AF + INC HL + LD A,M + INC HL + LD L,M + LD H,A + POP AF + SET 7,H +HXFLSL: CP 90H + RET Z + INC A + SRL H + RR L + JR HXFLSL +; +HXZRRT: CCF + LD HL,0 + RET +; +; +SNGMXO: DEF5 9B,3E,BC,20,00 + DEFW 3E9BH + DEFW 20BCH + DEFB 00H + ENDM +SNGMXP: DEF5 98,18,96,80,00 + DEFW 1898H + DEFW 8096H + DEFB 00H + ENDM + DEF5 94,74,24,00,00 + DEFW 7494H + DEFW 0024H + DEFB 00H + ENDM + DEF5 91,43,50,00,00 + DEFW 4391H + DEFW 0050H + DEFB 00H + + ENDM + DEF5 8E,1C,40,00,00 + DEFW 1C8EH + DEFW 0040H + DEFB 00H + ENDM + DEF5 8A,7A,00,00,00 + DEFW 7A8AH + DEFW 0000H + DEFB 00H + ENDM + DEF5 87,48,00,00,00 + DEFW 4887H + DEFW 0000H + DEFB 00H + ENDM +FLTEN: ENT + DEF5 84,20,00,00,00 + DEFW 2084H + DEFW 0000H + DEFB 00H + ENDM +FLONE: ENT + DEF5 81,00,00,00,00 + DEFW 0081H + DEFW 0000H + DEFB 00H + ENDM + DEF5 7D,4C,CC,CC,CD + DEFW 4C7DH + DEFW CCCCH + DEFB CDH + ENDM +SLLMT: DEF5 66,2B,CC,77,12 + DEFW 2B66H + DEFW 77CCH + DEFB 12H + ENDM + SKP H + +; +EXPASC: LD HL,(HLBUF2) + LD B,0 +TENCOM: LD DE,FLTEN + CALL CMP2 + JR C,ONECOM + CALL DIVTEN + INC B + JR TENCOM +ONECOM: LD DE,FLONE + CALL CMP2 + JR NC,COMOK + CALL MULTEN + DEC B + JR ONECOM +COMOK: PUSH BC + CALL CVASF1 + CALL ADJDGT + POP BC + PUSH DE + EX DE,HL +SERNOP: LD A,M + OR A + JR Z,SEROK + INC HL + JR SERNOP +SEROK: DEC HL + LD A,M + INC HL + CP "0" + JR NZ,USEXPE + INC B + DEC HL +USEXPE: LD A,"E" + LD M,A + INC HL + LD A,B + LD B,"+" + BIT 7,A + JR Z,EXSGPT + NEG + LD B,"-" +EXSGPT: LD M,B + INC HL + LD M,"0" +EXTNPT: SUB 0AH + JR C,EXONPT + INC M + JR EXTNPT +EXONPT: ADD A,3AH + INC HL + LD M,A + INC HL + LD M,0 + POP DE + RET + SKP H + +; +INTPAR: PUSH HL + CALL HLFLT + LD DE,DGBF11 + PUSH DE + LD B,1 ;Non zero-sup. + SVC .ASCHL + RST 3 + DEFB .ASCHL + ENDM + POP HL + LD A,"0" + LD B,5 + CP M + JR NZ,INTDGO + INC HL + DJNZ -4 + JR INTDGE +INTDGO: LD A,B + LD (DGITCO),A + LD A,1 + LD (DGITFG),A +INTDGE: LD A,"." + LD (DGBF16),A + POP HL + CALL FRACT + JP FRACDG +; +; +CVASF1: LD (HLBUF2),HL + XOR A + LD (DGITCO),A + LD (DGITFG),A + PUSH HL + LD HL,DGBF07 + LD M,FFH + LD B,33 + LD A,"0" + INC HL + LD M,A + DJNZ -2 + LD A,"." + LD (DGBF16),A + POP HL + LD A,M + OR A + RET Z + LD DE,SNGMXO + CALL CMP + CCF + RET C + LD DE,SLLMT + CALL CMP + RET C + LD DE,ZFAC1 + PUSH DE + CALL LDIR5 + POP HL + LD A,M + CP 81H + + JR C,FRACDG ; + CP 90H + JP C,INTPAR ; + LD IX,DGBF08 + LD DE,SNGMXP + CALL GENDGT + CALL GEND? + RET NC ;C=0 +FRACDG: LD IX,DGBF17 +FRCAGN: LD DE,SNGMXO + PUSH BC + PUSH IX + CALL MUL + POP IX + POP BC + REP5 INC,DE + INC DE + INC DE + INC DE + INC DE + INC DE + ENDM + CALL GENDGT + CALL GEND? + JR C,FRCAGN + RET +; +; +CVASFL: ENT + LD A,5 + LD (PRCSON),A + PUSH HL + LD DE,ZFAC2 + PUSH DE + CALL LDIR5 + POP HL + CALL CVASF1 + CALL ADJDG2 + POP HL + RET +; +ZERADJ: LD DE,DGBF16 + LD (DE),A + DEC DE + RET +; +ADJDG2: JP C,EXPASC +ADJDGT: LD HL,(HLBUF2) + LD A,M + OR A + JR Z,ZERADJ + LD DE,DGBF08 + DEC DE + EX DE,HL + LD DE,1 +SSNTO1: INC HL + LD A,M + CP "." + JR NZ,TST30H + LD DE,0 + + JR SSNTO1 +TST30H: CP "0" + JR Z,SSNTO1 + ADD HL,DE + LD DE,8 + ADD HL,DE + LD A,M +FRCASL: LD M,"0" + CP 35H + JR C,BCKSER +ADDLOP: DEC HL + LD A,M + CP "." + JR Z,ADDLOP + INC A + JR Z,MAXNO + LD M,A + CP ":" + JR Z,FRCASL + INC HL +BCKSER: LD DE,DGBF16 + EX DE,HL + OR A + SBC HL,DE + EX DE,HL + JR C,KUMI + LD HL,DGBF16 + JR INTDI2 +KUMI: DEC HL + LD A,M + CP "." + DEC HL + JR Z,INTDIS + INC HL + CP "0" + JR Z,BCKSER + PUSH HL + LD DE,DGBF25 + SBC HL,DE + POP HL + JP NC,EXPASC +INTDIS: INC HL +INTDI2: LD M,0 + LD DE,DGBF08 +TSTFST: LD A,(DE) + CP "0" + JR NZ,ZEONLY + INC DE + JR TSTFST +ZEONLY: OR A + RET NZ + DEC DE + LD A,"0" + LD (DE),A + RET +; +; +MAXNO: LD HL,DGBF00 + LD DE,M1E08 + PUSH BC + + LD BC,6 + LDIR + POP BC + LD DE,DGBF00 + RET +; +M1E08: DEFM "1E+08" + + DEFB 0 +; +; +GENDGT: LD A,(DE) + CP 7DH + RET Z +INTGDL: CALL CMP + JR C,GTESTB + INC (IX+0) + PUSH IX + PUSH BC + CALL SUB + POP BC + POP IX + LD A,1 + LD (DGITFG),A + JR INTGDL +; +GTESTB: INC IX + REP5 INC,DE + INC DE + INC DE + INC DE + INC DE + INC DE + ENDM + LD A,(DGITFG) + LD B,A + LD A,(DGITCO) + ADD A,B + LD (DGITCO),A + CALL GEND? + RET NC + JR GENDGT +; +GEND?: LD A,M + OR A + RET Z + LD A,(DGITCO) + CP 9 + RET +; +DGITCO: DEFS 1 +DGITFG: DEFS 1 +EXPFLG: DEFS 1 +HLBUF2: DEFS 2 +; + SKP H + +; +; USING CONVERSION +; +USINGS: ENT + DEFS 2 ;USING START +USINGP: ENT + DEFS 2 ;USING POINTER +; +USNGSB: ENT + LD HL,(USINGP) + PUSH DE +USNGS2: LD A,M + OR A + JP Z,ER03 + CALL USGCD? + JR Z,USNGS4 + LD (BC),A + INC BC + INC HL + JR USNGS2 +USNGS4: EX AF,AF' + LD A,(PRCSON) + CP 3 + JP NZ,FLTUSG + EX AF,AF' + CP "!" + JP Z,1CHOUT + CP "&" + JP Z,2CHOUT + JP ER04 +; +1CHOUT: EX (SP),HL + PUSH BC + CALL CVTSDC + OR A + LD A," " + JR Z,+3 + LD A,(DE) + POP BC + LD (BC),A + INC BC +AFTPR': POP HL + INC HL +AFTPRT: LD A,M + OR A + JR Z,BRTUSG + CALL USGCD? + JR Z,RETUSG + LD (BC),A + INC BC + INC HL + JR AFTPRT + SKP H + +BRTUSG: LD HL,(USINGS) +RETUSG: LD (USINGP),HL + XOR A + LD (BC),A + RET +; +2CHOUT: LD D,2 +AG2CH&: INC HL + LD A,M + CP "&" + JR Z,26FOUN + INC D + CP " " + JR Z,AG2CH& + JP ER03 +26FOUN: EX (SP),HL + LD A,M + CP D + JR C,TRIZ&& + INC HL + CALL INDRCT + PUSH BC + LD BC,(STRST) + ADD HL,BC + POP BC +&PRLOP: LD A,M + LD (BC),A + INC BC + INC HL + DEC D + JR NZ,&PRLOP + JP AFTPR' +; +TRIZ&&: LD E,M + INC HL + CALL INDRCT + LD A,E + OR A + JR Z,&&SPCF + PUSH BC + LD BC,(STRST) + ADD HL,BC + POP BC +PR&&L1: LD A,M + LD (BC),A + INC BC + INC HL + DEC E + JR Z,&&SPC' + DEC D + JR NZ,PR&&L1 + JP AFTPR' +&&SPCF: LD A," " + LD (BC),A + INC BC +&&SPC': DEC D + JR NZ,&&SPCF + JP AFTPR' + SKP H + +; +; Check using code +; +USGCD?: CALL CHKACC + DEFB 4 + DEFM "!&#+" + RET Z + LD E,A + CP "*" + JR Z,USGCD2 + CALL ?POND + JR Z,USGCD2 + CP "." + LD E,"#" + JR Z,USGCD2 + CP %BAR + RET NZ + INC HL + LD A,M + OR A + JP Z,ER03 + RET +USGCD2: INC HL + LD A,M + CP E + DEC HL + LD A,M + RET +; +; +FLTUSG: XOR A + LD (FPLUSF),A + LD (PUASTF),A ;PUT * FLG + LD (PUYENF),A ;] + LD (PUAFMF),A ;AFTER-FLG + LD (PUCOMF),A ;PUT , FLG + LD (INTLEN),A ;INT LENGTH + LD (RPLUSF),A ;###+ + LD (PUEXPF),A ;^^^^ + DEC A + LD (FRCLEN),A ;FRAC LENGTH + EX AF,AF' + LD D,0 + CP "#" + JP Z,PFLENG + CP "*" + JP Z,ASTRSK + CALL ?POND + JP Z,YENUSG + CP "." + JP Z,PULSLS + CP "+" + JP Z,PLUSUS + JP ER04 +; +ASTRSK: LD A,1 + LD (PUASTF),A + INC HL + INC D + INC HL + + INC D + LD A,M + CALL ?POND + JR NZ,PULSLS + JR YENUS2 +; +YENUSG: INC HL + INC D +YENUS2: INC HL + INC D + LD (PUYENF),A + JR PULSLS +; +PLUSUS: LD A,1 + LD (FPLUSF),A +; +PFLENG: INC HL + INC D +; +PULSLS: EX DE,HL + DEC H +PUGTFC: INC H + LD A,(DE) + INC DE + CP "#" + JR Z,PUGTFC + CP "," + JR NZ,PUCONP + LD A,1 + LD (PUCOMF),A + JR PUGTFC +PUCONP: CP "." + JR Z,PUPOIT + CP "-" + JR NZ,PUAFMO + LD A,1 + LD (PUAFMF),A + INC DE + JR PUAFQO +PUAFMO: CP "+" + JR NZ,PUAFQO + LD A,(FPLUSF) + OR A + JR NZ,PUAFQO + LD A,1 + LD (RPLUSF),A + INC DE +PUAFQO: DEC DE + LD A,H + LD (INTLEN),A + JR BEGUSG +; +PUPOIT: LD A,H + LD (INTLEN),A + LD H,FFH +PUPOFC: INC H + LD A,(DE) + INC DE + CP "#" + JR Z,PUPOFC + + CP "-" + JR NZ,PUCOPQ + LD A,1 + LD (PUAFMF),A + INC DE + JR PUCOPP +PUCOPQ: CP "+" + JR NZ,PUCOPP + LD A,(FPLUSF) + OR A + JR NZ,PUCOPP + LD A,1 + LD (RPLUSF),A + INC DE +PUCOPP: DEC DE + LD A,H + LD (FRCLEN),A + JR BEGUSG +; +NEXPP': POP DE + JR NEXPPU +; +BEGUSG: LD H,4 + PUSH DE +CHEXPU: LD A,(DE) + INC DE + CP "^" + JR NZ,NEXPP' + DEC H + JR NZ,CHEXPU + POP AF + LD A,1 + LD (PUEXPF),A +NEXPPU: POP HL + PUSH DE + INC HL + LD A,M + RES 7,M + DEC HL + LD (USGSGN),A + LD A,(INTLEN) + LD D,A + DEFB 3EH +FRCLEN: DEFS 1 + LD E,A + DEFB 3EH +PUEXPF: DEFS 1 + PUSH BC + CALL USNGCV + POP BC + DEFB 3EH +PUCOMF: DEFS 1 + OR A + JR Z,LADJS1 + PUSH BC + PUSH DE + LD A,(INTLEN) + LD L,A + LD H,0 + ADD HL,DE + + LD DE,DGBF00 + LD C,0 + DEC HL +COMN3D: LD B,3 +COMSK3: LD A,M + CP " " + JR Z,ESCPUC + INC C + LD (DE),A + INC DE + DEC HL + DJNZ COMSK3 + LD A,M + CP " " + JR Z,ESCPUC + LD A,"," + LD (DE),A + INC DE + INC C + JR COMN3D +; +ESCPUC: DEFB 3EH +INTLEN: DEFS 1 + CP C + JP C,ER02 + LD B,C + LD L,A + LD H,0 + POP DE + PUSH DE + ADD HL,DE + LD DE,DGBF00 + DEC HL + LD A,(DE) + LD M,A + DEC HL + INC DE + DJNZ -4 + POP DE + POP BC +LADJS1: DEFB 3EH +PUAFMF: DEFS 1 + OR A + JR NZ,LADJS2 + DEFB 3EH +RPLUSF: DEFS 1 + OR A + JR NZ,LADJS2 + DEFB 3EH +FPLUSF: DEFS 1 + OR A + JR NZ,PTPLS1 + LD A,(USGSGN) + RLCA + JR NC,LADJS2 + LD A,(DE) + CP " " + LD H,"-" + JR Z,FPUTER + CP 30H + + JP NZ,ER02 +FPUTER: PUSH DE +PUPTML: LD A,(DE) + INC DE + CP " " + JR Z,PUPTML + CP 30H + JR Z,PUPTML + OR A + JR NZ,+3 + DEC DE + DEC DE + DEC DE + LD A,H + LD (DE),A + POP DE + JR LADJS2 +; +PTPLS1: DEFB 3EH +USGSGN: DEFS 1 + RLCA + LD H,"+" + JR NC,FPUTER + LD H,"-" + JR FPUTER +; +LADJS2: DEFB 3EH +PUYENF: DEFS 1 + OR A + JR Z,LADJS3 + LD A,(DE) + CP " " + JR NZ,LADJS3 + PUSH DE + LD A,(DE) + INC DE + CP " " + JR Z,-4 + DEC DE + DEC DE + LD A,(PUYENF) + LD (DE),A + POP DE +LADJS3: DEFB 3EH +PUASTF: DEFS 1 + OR A + JR Z,LADJS4 + PUSH DE +ASTFIL: LD A,(DE) + CP " " + JR NZ,LADJ4' + LD A,"*" + LD (DE),A + INC DE + JR ASTFIL +LADJ4': POP DE +LADJS4: LD A,(DE) + OR A + JR Z,USPRL8 + LD (BC),A + + INC BC + INC DE + JR LADJS4 +USPRL8: LD A,(RPLUSF) + OR A + JR Z,TST2DH ;- + LD A,(USGSGN) + RLCA + LD A,"+" +LSDVZR: JR NC,PULSTX + LD A,"-" +PULSTX: LD (BC),A + INC BC + JR RETPU$ +; +TST2DH: LD A,(PUAFMF) ;- + OR A + JR Z,RETPU$ + LD A,(USGSGN) + RLCA + LD A," " + JR LSDVZR +; +RETPU$: POP HL + JP AFTPRT +; +; +?POND: CP %POND ;EX + RET Z + CP "$" + RET + SKP H + +; +USNGCV: OR A + JP Z,USGCV2 + PUSH DE + LD A,M + OR A + JR Z,USCMOK + PUSH HL + LD A,D + LD DE,ZFAC1 + PUSH AF + CALL LDIR1 + POP AF + OR A + JR Z,BMULED + LD B,A + LD HL,ZFAC1 + JR +5 + CALL MULTEN + DJNZ -3 +BMULED: POP HL + LD B,0 +USTNCM: LD DE,ZFAC1 + CALL CMP2 + JR C,USTOCM + CALL DIVTEN + INC B + JR USTNCM +USTOCM: PUSH HL + LD HL,ZFAC1 + CALL DIVTEN + POP HL +USONCM: LD DE,ZFAC1 + CALL CMP2 + JR NC,USCMOK + CALL MULTEN + DEC B + JR USONCM +USCMOK: POP DE + PUSH BC + CALL USGCV1 + POP BC + PUSH DE + LD A,(DE) + CP "." + JR NZ,FLADSR + LD DE,DGBF16 + DEC DE + LD A,(DE) + CP 31H + POP DE + PUSH DE + JR NZ,USEX0C + EX DE,HL + INC HL + LD M,31H + DEC HL + JR MIDDCX +; +FLADSR: LD A,(DE) + + CP 31H + JR NZ,USEX0C + EX DE,HL + INC HL + LD A,M + DEC HL + CP "." + LD A,"0" + JR Z,+4 + LD A," " + LD M,A + INC HL + LD A,M + CP "." + JR Z,-4 + LD M,31H +MIDDCX: EX DE,HL + INC B +USEX0C: LD A,(DE) + INC DE + OR A + JR NZ,USEX0C + DEC DE + JP USEXPE +; +USGCV2: PUSH DE + CALL USGCV1 + POP AF + OR A + RET NZ + PUSH HL + LD HL,DGBF16 + DEC HL + LD A,"0" + CP M +FOVVXC: JP NZ,ER02 + DEC HL + LD A," " + CP M + JR NZ,FOVVXC + POP HL + RET +; +USGCV1: PUSH DE + CALL CVASF1 + JP C,ER02 + POP HL + PUSH HL + LD H,0 + INC L + JR Z,+3 + DEC L + LD DE,DGBF17 + ADD HL,DE + LD A,M + LD M,0 + DEFB 11H +FRCASU: LD M,"0" + CP 35H + JR C,BCKSEU + + DEC HL + LD A,M + CP "." + JR Z,-4 + INC A + JP Z,ER02 + LD M,A + CP ":" + JR Z,FRCASU +BCKSEU: LD HL,KEYBM1 ;¯¯KEYBUF + LD DE,2000H + LD M,D + INC HL + DEC E + JR NZ,-3 + POP HL + PUSH HL + LD E,H + LD D,0 + LD HL,KEYBUF + ADD HL,DE + PUSH HL + LD HL,DGBF07 + LD M," " + INC HL + LD D,7 +BF00SP: LD A,M + CP "0" + JR NZ,BF00ED + LD M," " + INC HL + DEC D + JR NZ,BF00SP +BF00ED: POP HL + PUSH HL + LD B,E + LD A,B + OR A + JR Z,BFST11 + LD DE,DGBF16 +BFSTL1: DEC HL + DEC DE + LD A,(DE) + LD M,A + CP " " + JR Z,BFST11 + DJNZ BFSTL1 + DEC DE + LD A,(DE) + CP " " + JR Z,BFST11 + INC A + JP NZ,ER02 +; +BFST11: POP HL + POP DE + INC E + JR Z,EDSTRT + LD B,E + LD DE,DGBF17 + + LD M,"." +BFSTL2: INC HL + DEC B + JR Z,EDSTRT + LD A,(DE) + INC DE + LD M,A + JR BFSTL2 +EDSTRT: LD M,0 + LD DE,KEYBUF + RET +; + END diff --git a/software/asm/mz-xz009/EDIT.ASM b/software/asm/mz-xz009/EDIT.ASM new file mode 100644 index 0000000..f9b0bfa --- /dev/null +++ b/software/asm/mz-xz009/EDIT.ASM @@ -0,0 +1,546 @@ +; ------------------------------------ +; MZ-800 BASIC Interm.code conversion +; FI:EDIT ver 1.0A 7.18.84 +; Programed by T.Miho +; ------------------------------------ +; + INCLD MACRO +; +CVIMTX: ENT + PUSH DE + PUSH BC + LD C,0 + DEC DE +CVIM10: INC DE +CVIM12: CALL IMSPACE + OR A + JR Z,IMEND + CP FFH + JR Z,IMPAI + CP 80H + JP NC,ER01 + CP 20H + JR C,CVIM10 + LD IX,CVIM12 + PUSH IX + CP '"' + JR Z,IMSTR + CP "'" + JR Z,IMREM + CP "?" + JR Z,IMPRT + CP "." + JP Z,IMFLT + CP "$" + JP Z,IMHEX + CALL TSTNUM + JR C,IMRSV + JP IMNUM +; +IMEND: LD M,A + POP BC + POP DE + RET +; +IMPAI: LD M,E4H + CALL IM3R + JR CVIM12 +; +IMPRT: LD A,8FH + CALL IM3RS + JR IMRSV6 +; +IMREM: LD M,":" + CALL IM3R + LD M,"'" + CALL IM3RH + JP IMDATA + SKP H + +; +IMSTR: LD M,A + CALL IM3R +IMSTR2: LD A,(DE) + OR A + RET Z + CP '"' + JR NZ,IMSTR +IM3RS: LD M,A +IM3R: INC DE +IM3RH: INC HL +IM3RC: INC C + RET NZ + JP ER08 ;LINE LENGTH +; +IMVAR: POP BC + LD A,(DE) + CALL TSTVAR + JR C,IM3RS +IMVAR2: CALL IM3RS + LD A,(DE) + CP "$" + JR Z,IM3RS + CALL TSTNUM + RET C + JR IMVAR2 +; +IMRSV: PUSH BC + LD BC,CTBL1 + CALL IMSER + JR NC,IMRSV4 + LD BC,GTABL + CALL IMSER + LD C,FEH + JR NC,IMRSV2 + LD BC,CTBL2 + CALL IMSER + LD C,FFH + JR C,IMVAR +IMRSV2: LD M,C + INC HL + LD M,A + POP BC + CALL IM3RC + CALL IM3RH + CP B4H ; ERL ****** + RET NZ + CALL IMSPACE + CP "=" + RET NZ + LD M,F4H ; = ****** + CALL IM3R + JR IMLNO + SKP H + +; +IMRSV4: POP BC + CALL IM3RH +IMRSV6: CP 97H ; REM + JR Z,IMDATA + CP 94H ; DATA + JR Z,IMDATA + CP C2H ; ELSE + JR Z,IMELSE + CP E2H ; THEN + JR Z,IMLNO + CP E0H + RET NC + PUSH AF + CALL IMSPACE + CP "/" + JR NZ,IMRSV7 + LD M,FBH ;/ + CALL IM3R + CALL SKPDE + CALL IM3RS + JR IMRSV8 +IMRSV7: CP "#" + JR NZ,IMRSV8 + CALL IM3RS + CALL SKPDE + CALL TSTNUM + CALL NC,IMNUM +IMRSV8: POP AF + CP 8DH ; FOR + RET NC +; +IMLNO: CALL IMSPACE + CP '"' + JR NZ,IMLNO2 + CALL IMSTR + JR IMLNO +IMLNO2: CP 2CH + RET C + CP 2FH + JR C,IMLNO4 ;",-." + CALL TSTNUM + RET C + CALL IMINT + JR IMLNO +IMLNO4: CALL IM3RS + JR IMLNO +; +IMELSE: DEC HL + LD M,":" + INC HL + LD M,A + CALL IM3RH + JR IMLNO +; +IMDATA: LD A,(DE) + CALL ENDCK0 + RET Z + CALL IM3RS + CP '"' + + CALL Z,IMSTR2 + JR IMDATA +; +; +IMSER: PUSH HL ;Search in tabale + PUSH DE + LD HL,BC + LD B,7FH +IMSER2: POP DE + PUSH DE + INC B + LD A,M + CP FFH + JR NZ,IMSER3 + POP DE ;Table end + POP HL + SCF + RET +; +IMSER3: CP "." + JR NZ,IMSER4 + INC HL ;AND OR XOR NOT + DEC DE + LD A,(DE) + INC DE + CALL TSTVAR + JR NC,IMSER6 +IMSER4: LD A,(DE) + CP " " + JR NZ,IMSER5 + LD A,M + AND 7FH + SUB "A" + CP 26 + JR C,IMSER6 + CALL SKPDI +IMSER5: LD C,M + INC HL + INC DE + CP "." + JR Z,IMSER8 + SUB C + JR Z,IMSER4 + CP 80H + JR Z,IMSER9 +IMSER6: DEC HL ;Not match + BIT 7,M + INC HL + JR Z,-3 + JR IMSER2 +IMSER8: LD A,B + CP E8H ;operator + JR NC,IMSER6 + CCF +IMSER9: POP HL ;Found + POP HL + LD M,B + LD A,B + RET +; + +IMSPACE:LD A,(DE) + CP " " + RET NZ + LD M,A + CALL IM3R + JR IMSPACE + SKP H + +; +IMNUM: EX AF,AF' + PUSH DE + CALL SKPDI + POP DE + CALL TSTNUM ;check if one-digit + JR NC,IMFLT + CP "." + JR Z,IMFLT + CP "E" + JR Z,IMFLT + EX AF,AF' + SUB "0"-1 + JP IMFLT ;ok, JP IM3RS +; +IMFLT: PUSH BC + LD M,15H + INC HL + PUSH HL + CALL CVFLAS + POP HL + LD BC,5 + ADD HL,BC + LD A,6 + JR BCKSPS +; +IMINT: PUSH BC + CALL CVBCAS + LD M,0BH + INC HL + JR PPOLNO +; +IMHEX: LD M,A + INC DE + LD A,(DE) + SVC .CKHEX + RST 3 + DEFB .CKHEX + ENDM + JP C,IM3RH + PUSH BC + LD M,11H + INC HL + PUSH HL + EX DE,HL + SVC .DEHEX + RST 3 + DEFB .DEHEX + ENDM + LD BC,DE + EX DE,HL + POP HL +PPOLNO: LD A,3 + LD M,C + INC HL + LD M,B + INC HL +BCKSPS: POP BC + ADD A,C + JP C,ER08 ;LINE LENGTH + + LD C,A +BCKSKP: DEC DE + LD A,(DE) + CP " " + JR Z,-4 + INC DE + RET + SKP H + +; +CVTXIM: ENT + PUSH HL + PUSH DE + PUSH BC + EXX + LD B,0 + EXX + LD C,0 +CVTX10: LD A,M + OR A + JR Z,TXEND + LD BC,CVTX10 + PUSH BC + CP "'" + JR Z,TXDAT2 + INC HL + LD BC,CTBL1 + CP 20H + JR C,TXNUM + CP '"' + JR Z,TXSTR + CP ":" + JR Z,TX3AH + CP 97H ;REM + JR Z,TXDATA + CP 94H ;DATA + JR Z,TXDATA + CP E4H ;PI + JR Z,TXPAI + CP FEH + JR NC,TXRSV0 + CP 80H + JP NC,TXRSV + JP STRDE +; +TXEND: LD (DE),A + POP BC + POP DE + POP HL + RET +; +TXPAI: LD A,FFH + JP STRDE +; +TXRSV0: LD BC,CTBL2 + JR NZ,+5 + LD BC,GTABL + LD A,M + INC HL + JR TXRSV +; +TXDATA: CALL TXRSV + RET Z +TXDAT2: LD A,M + CALL ENDCK0 + RET Z + CALL STRDE + LD A,M + INC HL + + CP '"' + CALL Z,TXSTR2 + JR TXDAT2 +; +TXSTR: CALL STRDE +TXSTR2: LD A,M + OR A + RET Z + INC HL + CP '"' + JR NZ,TXSTR + JR STRDE +; +TX3AH: LD (DE),A + LD A,M + CP C2H ; ELSE + RET Z + CP "'" + RET Z + JR STRDE' +; +TXNUM: CP 15H + JR Z,TXFLT + CP 0BH + JR NC,TXINT + DEC A + OR 30H + JR STRDE +; +TXINT: PUSH DE + LD E,M + INC HL + LD D,M + INC HL + PUSH HL + CP 12H + JR Z,TXINT2 + CP 0CH + JR C,TXINT2 + JR NZ,TXHEX + EX DE,HL + INC HL + INC HL + LD E,M + INC HL + LD D,M +TXINT2: EX DE,HL + CALL ASCFIV + LD BC,DE + POP HL + POP DE +TXINT4: LD A,(BC) + OR A + RET Z + CALL STRDE + INC BC + JR TXINT4 +; +TXFLT: PUSH HL + PUSH DE + + CALL CVASFL + LD BC,DE + POP DE + POP HL + REP5 INC,HL + INC HL + INC HL + INC HL + INC HL + INC HL + ENDM + JR TXINT4 +; +TXRSV: CP 80H + JR Z,TXRSV4 + EX AF,AF' +TXRSV2: LD A,(BC) + RLCA + INC BC + JR NC,TXRSV2 + EX AF,AF' + DEC A + JR TXRSV +TXRSV4: LD A,(BC) + BIT 7,A + JR NZ,STRDES + CP "." + CALL NZ,STRDE + INC BC + JR TXRSV4 +; +STRDES: AND 7FH +STRDE: LD (DE),A + OR A + RET Z +STRDE': INC DE + EXX + INC B + EXX + RET NZ + XOR A + LD (DE),A + DEC DE + EXX + DEC B + EXX + RET +; +TXHEX: LD A,"$" + EX AF,AF' + EX DE,HL + CALL HEXHL + LD BC,DE + POP HL + POP DE + EX AF,AF' + CALL STRDE + JR TXINT4 +; +HEXHL: ENT + + LD DE,DGBF12 + PUSH DE + LD A,H + CALL HEXACC + LD A,L + CALL HEXACC + XOR A + LD (DE),A + POP DE + LD B,3 +; +ZRSUP: LD A,(DE) + CP "0" + RET NZ + INC DE + DJNZ ZRSUP + RET +; +HEXACC: ENT + PUSH AF + RRCA + RRCA + RRCA + RRCA + AND 0FH + CALL HEXAC2 + POP AF + AND 0FH +HEXAC2: ADD A,30H + CP 3AH + JR C,+4 + ADD A,7 + LD (DE),A + INC DE + RET +; +CVBCAS: ENT + PUSH HL + EX DE,HL + SVC .DEASC + RST 3 + DEFB .DEASC + ENDM + LD BC,DE + EX DE,HL + POP HL + JP BCKSKP +; + END diff --git a/software/asm/mz-xz009/EXPR.ASM b/software/asm/mz-xz009/EXPR.ASM new file mode 100644 index 0000000..79b966c --- /dev/null +++ b/software/asm/mz-xz009/EXPR.ASM @@ -0,0 +1,2038 @@ +; ----------------------------- +; MZ-800 BASIC Expression part +; FI:EXPR ver 1.0A 8.25.84 +; Programed by T.Miho +; ----------------------------- +; +; + INCLD MACRO +; +IBYTE: ENT ;0..255 + CALL IDEEXP +DCHECK: ENT + LD A,D + OR A + JP NZ,ER03 + LD A,E + RET +; +DEEXP: ENT + CALL EXPR8 + REP5 DEC,DE + DEC DE + DEC DE + DEC DE + DEC DE + DEC DE + ENDM + JR STDEFC +; +IDEEXP: ENT ;DE=(HL) + CALL EXPR +STDEFC: ENT + PUSH AF + PUSH HL + EX DE,HL + CALL STROMT + CALL HLFLT + EX DE,HL + POP HL + POP AF + RET +; +STREXP: ENT + CALL EXPR + PUSH AF + CALL STROK + PUSH HL + EX DE,HL + CALL CVTSDC + POP HL + POP AF + RET +; +CVTSDC: ENT + LD B,M + INC HL + LD E,M + INC HL + LD D,M + LD HL,(STRST) + + ADD HL,DE + EX DE,HL + LD A,B + RET + SKP H + +; +EXPR: ENT + LD DE,(VARED) + LD (TMPEND),DE +EXPRNX: ENT + LD DE,(INTFAC) + PUSH DE + CALL EXPR8 + POP DE + RET +; +EXPR8: PUSH DE + LD DE,(TMPEND) + CALL MEMECK + POP DE +; +; +EXPR7: CALL EXPR6 +EXPR7L: CP EAH ;XOR + RET NZ + LD A,(PRCSON) + PUSH AF + INC HL + CALL EXPR6 + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL .XOR. + POP HL + POP AF + JR EXPR7L +; +EXPR6: CALL EXPR5 +EXPR6L: CP EBH ;OR + RET NZ + LD A,(PRCSON) + PUSH AF + INC HL + CALL EXPR5 + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL .OR. + POP HL + POP AF + JR EXPR6L +; +EXPR5: CALL EXPR4 +EXPR5L: CP ECH ;AND + RET NZ + LD A,(PRCSON) + PUSH AF + INC HL + CALL EXPR4 + POP BC + PUSH AF + PUSH HL + CALL ADJUST + + CALL .AND. + POP HL + POP AF + JR EXPR5L +; +EXPR4: TEST1 EDH ;NOT + CALL TEST1 + DEFB EDH + ENDM + JR NZ,EXPR3 + CALL EXPR3 + PUSH AF + PUSH HL + LD HL,-5 + ADD HL,DE + CALL .NOT. + POP HL + POP AF + RET + +EXPR3: CALL EXPR2 +EXPR3L: CP EEH ;>< + RET C + PUSH AF ;stk OPC + LD A,(PRCSON) + PUSH AF ;stk OPC, PRCSON + INC HL + CALL EXPR2 + POP BC ;stk OPC; B=PRCSON + EX (SP),HL ;stk RJOB; HL=OPC + PUSH AF ;stk RJOB,NEXT + PUSH HL ;stk RJOB,NEXT,OPC + CALL ADJUST + CALL CMP + EX AF,AF' ;AF' = result + POP AF ;stk RJOB,NEXT; A=OPC + CP F6H ;< + JR NZ,NXTCP1 + EX AF,AF' + JR C,TRUE +FALSE: LD BC,0 +RLBACK: LD M,C + INC HL + LD M,B + INC HL + XOR A + LD M,A + INC HL + LD M,A + INC HL + LD M,A + LD A,5 + LD (PRCSON),A + POP AF ;POP NEXT + POP HL ;POP RJOB + JR EXPR3L +; +TRUE: LD BC,8081H + JR RLBACK +; + +NXTCP1: CP F5H ;> + JR NZ,NXTCP2 + EX AF,AF' + JR Z,FALSE + JR C,FALSE + JR TRUE +; +NXTCP2: CP F4H ;= + JR NZ,NXTCP3 + EX AF,AF' + JR Z,TRUE + JR FALSE +; +NXTCP3: CP F2H ;=>,>= + JR C,NXTCP4 + EX AF,AF' + JR NC,TRUE + JR FALSE +; +NXTCP4: CP F0H ;=<,<= + JR C,NXTCP5 + EX AF,AF' + JR Z,TRUE + JR C,TRUE + JR FALSE +; +NXTCP5: EX AF,AF' ;<>,>< + JR Z,FALSE + JR TRUE +; +; +EXPR2: CALL EXPR1 +EXPR2L: CP F7H ;+,- + RET C + LD A,(PRCSON) + PUSH AF + INC HL + JR Z,EXPR2A ;+ + CALL EXPR1 + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL SUB +EXPR2X: POP HL + POP AF + JR EXPR2L +EXPR2A: CALL EXPR1 + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL ADD + JR EXPR2X +; +; +EXPR1: CALL EXPR0 +EXPR1L: CP F9H ;MOD, YEN + RET C + LD A,(PRCSON) + + PUSH AF + INC HL + JR Z,EXPR1A ;YEN + CALL EXPR0 + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL MOD +EXPR1X: POP HL + POP AF + JR EXPR1L +EXPR1A: CALL EXPR0 + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL YEN + JR EXPR1X +; +; +EXPR0: CALL EXPRZ +EXPR0L: CP FBH ;/,* + RET C + LD A,(PRCSON) + PUSH AF + INC HL + JR Z,EXPR0A ;/ + CALL EXPRZ + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL MUL +EXPR0X: POP HL + POP AF + JR EXPR0L +EXPR0A: CALL EXPRZ + POP BC + PUSH AF + PUSH HL + CALL ADJUST + CALL DIV + JR EXPR0X +; +EXPRZ: TEST1 F7H ;+ + CALL TEST1 + DEFB F7H + ENDM + JR Z,EXPRZ + CP F8H ;- + JR NZ,EXPRY + INC HL + CALL EXPRY + JR EXPRX2 +; +EXPRY: CALL FACTOR +EXPRYL: CP FDH ;^ + RET NZ + LD A,(PRCSON) + + PUSH AF + INC HL + CALL EXPRX + POP BC + PUSH AF + PUSH HL + CALL ADJUST ; + CALL POWERS ;(HL)^(DE) + POP HL + POP AF + JR EXPRYL +; +EXPRX: TEST1 F7H ;+ + CALL TEST1 + DEFB F7H + ENDM + JR Z,EXPRX + CP F8H ;- + JR NZ,FACTOR + INC HL + CALL FACTOR +EXPRX2: PUSH AF + PUSH HL + LD HL,-5 + ADD HL,DE + CALL NEG + POP HL + POP AF + RET +; + SKP H + +FACTOR: CALL ENDCHK + JP Z,ER01 + CALL FAC0 + JP HLFTCH +; +FAC0: PUSH HL + LD HL,(MEMLMT) + SCF + SBC HL,DE + JP C,ER06 ;TOO COMPLEX EXPR + POP HL + CP E4H ;PI + JR Z,FACPAI + CP 20H + JR NC,VARFNC ;IM 20 .... +; +FACNUM: ENT ;Factor(numeric) + INC HL + CP 15H + JR C,FACINT + CALL LDIR5 ;IM 15 + JR FACR5 +FACPAI: INC HL + PUSH HL + LD HL,FLTPAI + CALL LDIR5 + POP HL +FACR5: LD A,5 +FACRX: LD (PRCSON),A + RET +; +FACINT: CP 0BH ;IM 00 .. 14 + JR NC,FACI4 + DEC A + JP M,ER01 ;IM 00 + LD B,0 + LD C,A + JR FACI6 +; +FACI4: LD C,M ;IM 0B .. 14 + INC HL + LD B,M + INC HL + CP 0CH + JR NZ,FACI6 + INC BC + INC BC + LD A,(BC) + INC BC + EX AF,AF' + LD A,(BC) + LD B,A + EX AF,AF' + LD C,A +FACI6: PUSH HL + PUSH DE + EX DE,HL + LD E,C + LD D,B + CALL FLTHEX + + POP DE + POP HL + LD A,5 +FACRX5: REP5 INC,DE + INC DE + INC DE + INC DE + INC DE + INC DE + ENDM + JR FACRX +; +VARFNC: CP '"' + JR NZ,VARFN1 + INC HL + PUSH HL + CALL STRLCK ;B=len(HL str.) + EX (SP),HL ;New text point + PUSH HL ;Old text point + LD HL,(TMPEND) + PUSH BC + LD BC,(STRST) + OR A + SBC HL,BC ;HL=OFSET+ADR + POP BC + EX DE,HL + LD M,B ;FAC set len. + INC HL + LD M,E ;FAC set adrs + INC HL + LD M,D + INC HL + INC HL + INC HL + POP DE ;Old text point + PUSH HL ;New expr point + LD HL,(TMPEND) + CALL STRENT ;(HL)_(DE),B + LD (TMPEND),HL + POP DE ;New expr point + POP HL ;New text point + LD A,3 + LD (PRCSON),A + RET +; +VARFN1: CP "(" + JR NZ,FUNC + INC HL ;( ... ) + CALL EXPR8 + JP CH29H +; +; +; +FUNC: OR A ;Function + JP P,VARFN2 + CP E7H ;SPC ==> + INC HL + JR NZ,FUNC1 + LD B,5 ;param is numeric + LD A,A8H ; SPACE$ + + PUSH AF + JR FUNC2 +FUNC1: CP FFH + JP NZ,ER01 + LD A,M + INC HL + CP A0H + JP Z,CHR$OP ;CHR$ + CP C8H + JP NC,ER01 + CP BAH + JR NC,GETJPA ;complex + CP 9CH ;JOY STICK + JR Z,GETJPA + CP 9DH ;JOY STRIG + JP Z,GETJPA + PUSH AF + CP B3H + JR NC,SYSV ;system var + LD B,3 + CP ABH + JR NC,FUNC2 ;param is string + LD B,5 ;param is numeric + CP 88H ;RND + JR Z,RNDONL +FUNC2: CALL HCH28H +FUNC4: PUSH BC + CALL EXPR8 + CALL CH29H + POP AF + CALL STRCK +FUNC6: POP AF + PUSH DE + PUSH HL + LD HL,-5 + ADD HL,DE + CALL GETJPA + POP HL + POP DE + RET +; +; +RNDONL: TEST1 "(" + CALL TEST1 + DEFB "(" + ENDM + JR Z,FUNC4 +SYSV: LD A,5 + LD (PRCSON),A + PUSH HL + LD HL,FLONE + CALL LDIR5 + POP HL + JR FUNC6 + SKP H + +; +GETJPA: PUSH HL + ADD A,A + LD L,A + LD H,0 + LD BC,FJPTBL + ADD HL,BC + LD A,M + INC HL + LD H,M + LD L,A + EX (SP),HL + RET +; +SIZE: ENT + EX DE,HL + LD HL,-527 + ADD HL,SP + LD BC,(TMPEND) + OR A + SBC HL,BC + EX DE,HL + JR NC,PUT2B + XOR A + JR PUT1B +; +CSRH: ENT + LD A,(CURX) + JR PUT1B +CSRV: ENT + LD A,(CURY) + JR PUT1B +POSH: ENT + LD DE,(POINTX) + JR PUT2B +POSV: ENT + LD DE,(POINTY) + JR PUT2B +ERR: ENT + LD A,(ERRCOD) +PUT1B: LD E,A + LD D,0 +PUT2B: LD A,5 + LD (PRCSON),A + JP FLTHEX +; +ERL: ENT + LD DE,(ERRLNO) + CALL FLTHEX + INC HL + BIT 7,M + DEC HL + RET Z + LD DE,FL64K + JP ADD +; +FL64K: DEF5 91,00,00,00,00 ;65536 + DEFW 0091H + DEFW 0000H + DEFB 00H + + ENDM + SKP H + +; +CHR$OP: CALL HCH28H + LD B,0 +CHR$LP: PUSH BC ;counter + PUSH DE ;FAC + CALL DEEXP + CALL DCHECK + POP DE ;FAC + POP BC ;counter + PUSH AF ;data + INC B + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR Z,CHR$LP + CALL CH29H + LD A,B ;length + EXX + LD B,A + LD HL,(TMPEND) ;string start + CALL ADDHLA + LD DE,HL ;string end+1 + CALL MEMECK +CHR$4: DEC HL + POP AF ;data + LD M,A + DJNZ CHR$4 + EXX + LD A,B ;length + EXX + LD B,A +; +;HL=String start +;DE=String end+1 +;B =String length +;DE'=FAC +;HL'=TEXT,?? +; +STEXR2: LD (TMPEND),DE + LD DE,(STRST) + OR A + SBC HL,DE + PUSH HL + LD A,B + EXX + EX DE,HL + LD M,A + INC HL + POP BC + LD M,C + INC HL + LD M,B + LD BC,3 ; + ADD HL,BC +STRPRS: EX DE,HL + LD A,3 + LD (PRCSON),A + RET + SKP H + +; +HEX$: ENT + PUSH HL + CALL HLFLT + CALL HEXHL + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM +; +; DE:adrs +; B:length +; (SP):Text pointer +; +PUTSTR: ENT + LD A,B + OR A + JR Z,NULSPC + LD HL,(TMPEND) + PUSH HL + PUSH BC + CALL STRENT + POP BC + EX DE,HL + POP HL + EXX + POP DE + EXX + JR STEXR2 +NULSPC: POP HL + CALL CLRFAC + JR STRPRS +; +SPACE$: ENT + PUSH HL + CALL HLINCK + LD B,A + LD C,A + OR A + LD A," " + PUSH DE + CALL NZ,?SETDE + POP DE + LD B,C + JR PUTSTR +; +HLINCK: CALL HLFLT + LD DE,KEYBUF + LD A,H + OR A + JP NZ,ER03 + LD A,L + RET + SKP H + +; +; +STR$: ENT + PUSH HL + CALL CVNMFL + LD A,(DE) + CP " " + JR NZ,+3 + INC DE + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + JR PUTSTR +; + SKP H + +EOF: ENT + CALL HCH28H + CALL GETLU + LD B,A + CALL HCH29H + LD A,B + PUSH HL + PUSH DE + SVC .SEGAD + RST 3 + DEFB .SEGAD + ENDM + LD DE,-1 + JR C,EOF2 + INC HL + BIT ##EOF,M + JR NZ,EOF2 + LD DE,0 +EOF2: POP HL + CALL FLTHEX + LD A,5 + LD (PRCSON),A +EOF8: REP5 INC,HL + INC HL + INC HL + INC HL + INC HL + INC HL + ENDM + EX DE,HL + POP HL + RET +; +POINT: ENT + CALL HCH28H + PUSH DE ;EXPR pointer + CALL DEEXP ;X + LD BC,DE ;X + POP DE ;EXPR pointer + PUSH DE ;EXPR pointer + PUSH BC ;X + CALL CH2CH + CALL DEEXP ;Y + CALL CH29H + EX (SP),HL ;HL=X + EX DE,HL + SVC .POINT + RST 3 + DEFB .POINT + ENDM + INC A + JP Z,ER03 ;Out of range + DEC A + POP DE ;TEXT pointer + POP HL ;EXPR pointer + PUSH DE ;TEXT pointer + CALL PUT1B + JR EOF8 + SKP H + +; +ASC: ENT + PUSH HL + CALL CVTSDC + OR A + JR Z,+3 + LD A,(DE) + JR LEN2 +; +LEN: ENT + PUSH HL + CALL CVTSDC +LEN2: POP HL + JP PUT1B +; +VAL: ENT + PUSH HL + CALL CVTSDC + LD HL,(TMPEND) + PUSH HL + CALL STRENT + LD M,0 + POP DE + POP HL + JP CVFLAS + SKP H + +; +LEFT$: ENT + CALL CH28EX + CALL CH29H + CALL BCHECK + EX DE,HL + LD A,M + CP C + JR NC,+3 + LD C,A + LD M,C + LD BC,5 +FACSTR: LD A,3 + ADD HL,BC + EX DE,HL + LD (PRCSON),A + JP HLFTCH +; +RIGHT$: ENT + CALL CH28EX + CALL CH29H + CALL BCHECK + EX DE,HL + LD A,M + SUB C + JR NC,MID$EE + XOR A + LD C,M +MID$EE: LD M,C + INC HL + ADD A,M + LD M,A + INC HL + JR NC,+3 + INC M + LD BC,3 ; + JR FACSTR + SKP H + +; +MID$: ENT + CALL CH28EX + CALL BCHECK + OR A + JP Z,ER03 + PUSH AF + TEST1 ")" + CALL TEST1 + DEFB ")" + ENDM + LD A,FFH + JR Z,MID$2 + CALL HCH2CH + PUSH DE + EX DE,HL + LD BC,5 + ADD HL,BC + EX DE,HL + CALL DEEXP + CALL CH29H + CALL DCHECK + POP DE +MID$2: POP BC + LD C,A + EX DE,HL + LD A,M + SUB B + JR C,MIDNUL + INC A + CP C + JR NC,+3 + LD C,A + LD A,B + DEC A + JR MID$EE +; +MIDNUL: XOR A + LD C,A + JR MID$EE +; +BCHECK: LD A,B + OR A + JP NZ,ER03 + LD A,C + RET +; +CH28EX: CALL HCH28H + PUSH DE + CALL EXPR8 + CALL CH2CH + CALL STROK + CALL DEEXP + LD C,E + LD B,D + POP DE + RET + SKP H + +; +TI$: ENT + PUSH HL + PUSH DE + LD HL,(TMPEND) + PUSH HL + LD A,"0" + LD B,6 + CALL ?SETHL + SVC .TIMRD ;A,DE + RST 3 + DEFB .TIMRD + ENDM + POP HL + OR A + JR Z,TI$2 + INC M + INC HL + INC M + INC M + DEC HL +TI$2: EX DE,HL + LD BC,8CA0H ;10H + CALL CLDGIT + LD BC,E10H ;1H + CALL CLDGIT + CP 3AH + JR C,TI$4 + SUB 10 + DEC DE + LD (DE),A + DEC DE + LD A,(DE) + INC A + LD (DE),A + INC DE + INC DE +TI$4: DEC DE + DEC DE + LD A,(DE) + INC DE + LD B,A + LD A,(DE) + INC DE + LD C,A + LD A,B + CP 32H + JR NZ,TI$6 + LD A,C + CP 34H + JR NZ,TI$6 + LD HL,(TMPEND) + LD A,"0" + LD B,6 + CALL ?SETHL + JR TI$8 +TI$6: LD BC,258H ;10M + CALL CLDGIT + LD BC,3CH ;1M + CALL CLDGIT + + LD BC,0AH ;10S + CALL CLDGIT + LD A,30H + ADD A,L + LD (DE),A +TI$8: LD HL,(TMPEND) + LD DE,6 + EX DE,HL + ADD HL,DE + LD (TMPEND),HL + EX DE,HL + LD DE,(STRST) + OR A + SBC HL,DE + EX DE,HL + POP HL + LD M,6 + INC HL + LD M,E + INC HL + LD M,D + INC HL + INC HL + INC HL + EX DE,HL + POP HL + LD A,3 + LD (PRCSON),A + JP HLFTCH +; +CLDGIT: OR A + SBC HL,BC + JR C,CLDGRT + LD A,(DE) + INC A + LD (DE),A + JR CLDGIT +CLDGRT: ADD HL,BC + INC DE + RET +; +TIMDAI: ENT + TESTX F4H ;TI$=.... + CALL TESTX + DEFB F4H + ENDM + CALL STREXP + LD A,B + CP 6 + JP NZ,ER03 + PUSH HL + PUSH DE + LD HL,0 + CALL TIMASC + CP 24 + JP NC,ER03 + CP 12 + LD A,0 + JR C,TIMDA2 + PUSH DE + + LD DE,12 + OR A + SBC HL,DE + POP DE + INC A +TIMDA2: PUSH AF + CALL TIMASC + CP 60 + JP NC,ER03 + CALL TIMASC + CP 60 + JP NC,ER03 + POP AF + EX DE,HL + SVC .TIMST + RST 3 + DEFB .TIMST + ENDM + POP DE + POP HL + RET +; +TIMASC: PUSH DE + LD D,H + LD E,L + ADD HL,HL + ADD HL,HL + ADD HL,DE + LD D,H + LD E,L + ADD HL,HL + ADD HL,DE + ADD HL,HL + ADD HL,HL + POP DE + LD A,(DE) + INC DE + SUB 30H + JP C,ER03 + CP 0AH + JP NC,ER03 + PUSH BC + LD C,A + ADD A,A + ADD A,A + ADD A,C + ADD A,A + LD C,A + LD A,(DE) + INC DE + SUB 30H + JP C,ER03 + CP 0AH + JP NC,ER03 + ADD A,C + LD C,A + LD B,0 + ADD HL,BC + POP BC + RET + + SKP H + +; +INTGTV: ENT + LD DE,(VARED) + LD (TMPEND),DE + LD DE,(INTFAC) +GETVAR: PUSH DE + CALL VSRTST +GETFNV: LD A,M + CP "(" + JP Z,ARRAY + PUSH HL + CALL CHVRNM + JR NC,CRNVAR + LD A,C + LD C,L + LD B,H + POP HL + POP DE + RET +; +CRNVAR: LD A,(DE) + ADD A,C ;VAR.LEN.+TYPE + ADD A,2 + PUSH BC + EX DE,HL + LD HL,(TMPEND) + PUSH HL + OR A + SBC HL,DE + INC HL + LD C,L + LD B,H + POP HL + PUSH DE + EX DE,HL + LD L,A + LD H,0 + ADD HL,DE + EX DE,HL + CALL MEMECK + LDDR + LD E,A + LD D,0 + SVC .ADDP2 + RST 3 + DEFB .ADDP2 + ENDM + POP HL + POP BC + LD DE,KEYBUF + LD M,C ;TYPE SET + INC HL + SCF + SBC A,C ;B=A-C-1 + LD B,A +VARSL1: LD A,(DE) ;VAR.LEN.&NAME + LD M,A + INC DE + INC HL + DJNZ VARSL1 + + PUSH HL + LD B,C + CALL ?CLRHL ;VAR.CLR + LD M,A ;VAR.END MARK + LD A,C + POP BC + POP HL + POP DE + RET +; +VSRTST: CALL HLFTCH + SUB "A" + CP 26 + JP NC,ER01 + LD DE,KEYBUF + LD B,0 +VSRTS1: INC DE + LD A,M + CALL TSTVAR + JR C,TSTTYP + LD (DE),A + INC B + LD A,B + CP 3 + JR C,+3 + DEC B + INC HL + JR VSRTS1 +TSTTYP: LD DE,KEYBUF + EX DE,HL + LD M,B + EX DE,HL + LD C,5 + CP 24H ;$ + RET NZ + LD C,3 + INC HL + RET +; +ADJUST: LD HL,-5 + EX DE,HL + ADD HL,DE + EX DE,HL + ADD HL,DE + LD A,B + JP STRCK +; +; +STRLCK: LD B,FFH +STRLL1: INC B + LD A,M + OR A + RET Z + INC HL + CP '"' + RET Z + JR STRLL1 +; +STRENT: ENT + LD A,B + + OR A + RET Z + CALL LDHLDE + EX DE,HL + CALL MEMECK + EX DE,HL + RET +; +; +MEMECK: ENT ;SBC SP,DE + PUSH HL + LD HL,-512 + ADD HL,SP + SBC HL,DE + POP HL + RET NC + JP ER06' +; +; +; +; PUSH DE +; KEYBUF..LEN. NAME +; HL=( +; +ARRAY0: LD DE,(INTFAC) + PUSH DE + JR ARRAY2 +; +ARRAY: XOR A + LD (AUTDIM),A + INC HL + LD (ARYTXT),HL +ARRAY2: LD B,0 + EXX + POP HL ;POP FAC + PUSH HL ;PUSH FAC + PUSH HL ;PUSH FAC1 + LD HL,(TMPEND) + LD DE,KEYBUF + PUSH HL + LD A,(DE) + LD M,A + INC DE + INC HL + LD B,A + CALL STRENT + POP DE + LD (TMPEND),HL + LD HL,(STRST) + EX DE,HL + OR A + SBC HL,DE + EX (SP),HL ;NAME ADR. + PUSH HL ;PUSH FAC1 + EXX +TSALOP: POP DE ;POP FAC1 + PUSH DE ;PUSH FAC1 + PUSH BC ;PUSH B,TYPE(C) + LD BC,(ARYTXT) + LD A,(AUTDIM) + + PUSH BC + PUSH AF + LD BC,(DGBF00) + PUSH BC + CALL DEEXP ;¯¯DE=EXP(INT) + BIT 7,D + JP NZ,ER03 + EX AF,AF' + POP BC + LD (DGBF00),BC + POP AF + LD (AUTDIM),A + POP BC + LD (ARYTXT),BC + EX AF,AF' + INC HL + CP ")" + JR Z,TSFARY + CP "," + JP NZ,ER01 + POP BC ;POP B,TYPE(C) + INC B ;(.,.,.,.) + LD A,B + CP 4 + JP NC,ER03 + EXX + POP HL ;POP FAC1 + POP DE ;POP NAME ADR. + EXX + PUSH DE ;ANS + EXX + PUSH DE ;PUSH NAME ADR. + PUSH HL ;PUSH FAC1 + EXX + JR TSALOP +; +TSFARY: POP BC ;POP B,TYPE(C) + EXX + POP HL ;POP FAC1 + POP DE ;POP NAME ADR. + EXX + INC B ;ARRAY POINT + PUSH DE ;ANS + PUSH HL ;PUSH TEXT POINT + EXX + LD HL,(STRST) + ADD HL,DE + LD B,M + INC B + LD DE,KEYBUF + CALL LDDEHL + EXX + SET 7,C + CALL CHVRNM + RES 7,C + JR NC,ARYDIM + LD A,B + CP M + JP NZ,ER07 ;DUPLICATE +;LD A,(AUTDIM) + +;OR A +;JP NZ,ER07 + INC HL + EX DE,HL + POP HL + LD (DGBF00),HL ;TEXT END + EXX + LD HL,0000H + EXX + EX DE,HL +ADRCL: LD E,M + INC HL + LD D,M + INC HL + EX (SP),HL + PUSH DE + EXX + POP DE + CALL DIMMUL + EXX + PUSH HL + OR A + SBC HL,DE + JP NC,ER03 + EXX + POP DE + CALL DIMADD + EXX + POP HL + DJNZ ADRCL + PUSH HL + EXX + LD A,C + LD D,B + BIT 6,A + JR NZ,VARDIM + AND 0FH + LD E,A + PUSH AF + CALL DIMMUL + PUSH HL + EXX + POP BC + POP AF + POP HL + ADD HL,BC + LD C,L + LD B,H +VARDME: LD HL,(DGBF00) + POP DE + RET +; +VARDIM: LD E,M + INC HL + LD D,M + POP HL + LD C,L + LD B,H + LD M,E + INC HL + + LD M,D + AND 0FH + JR VARDME +; +; +ARYDIM: EXX + LD A,(AUTDIM) + OR A + JP Z,ER03 + POP HL ;TEXT POINT + LD (DGBF00),HL + EXX + LD DE,(TMPEND) + LD L,B + LD H,0 + ADD HL,HL + ADD HL,DE + EX DE,HL + INC DE + CALL MEMECK + LD M,B + INC HL + EXX + LD HL,1 + EXX +ADRCL': POP DE + LD A,(AUTDIM) + OR A + JR NZ,ADRC'' + PUSH HL ;1 + EX DE,HL + LD DE,10 + SCF + SBC HL,DE + JP NC,ER03 + POP HL ;1 +ADRC'': INC DE + LD M,E + INC HL + LD M,D + INC HL + PUSH DE + EXX + POP DE + CALL DIMMUL + EXX + DJNZ ADRCL' + LD E,C + LD D,0 + PUSH BC + PUSH DE + EXX + POP DE + CALL DIMMUL + PUSH HL + EXX + POP BC + PUSH BC ;2 A*B*C*D + EX DE,HL + LD HL,(TMPEND) ;(.,.,.)*2 + + LD L,M + LD H,0 + ADD HL,HL + LD A,(KEYBUF) ;+NAME + ADD A,5 ;+TY+LN+NL+(.,.) + ADD A,L + LD L,A + LD A,0 + ADC A,H + LD H,A + JR C,DIMOVM + ADD HL,BC + JR C,DIMOVM + PUSH HL ;3 LEN + ADD HL,DE ;+TEMPEND +DIMOVM: JP C,ER06' + EX DE,HL + CALL MEMECK + PUSH HL ;4 TMPEND + EXX + POP HL ;4 TMPEND + LD BC,(STRST) ;VAR END + DEC BC + OR A + SBC HL,BC + PUSH HL ;4 TRANS LEN + EXX + POP BC ;4 TRANS LEN + LDDR + POP DE ;3 LEN + SVC .ADDP2 + RST 3 + DEFB .ADDP2 + ENDM + POP BC ;2 CLR LEN + PUSH DE ;2 LEN + EXX + POP DE ;2 LEN + LD H,B + LD L,C + POP BC ;1 TYPE + LD A,C + OR 80H + LD M,A + INC HL + DEC DE + LD M,E + INC HL + LD M,D + INC HL + LD DE,KEYBUF + LD A,(DE) + INC A + LD B,A + CALL LDHLDE + LD DE,(TMPEND) + LD A,(DE) + LD M,A + INC HL + INC DE + + ADD A,A + LD B,A + CALL LDHLDE + PUSH HL + EXX + POP HL +DIMCLR: XOR A + LD M,A + INC HL + DEC BC + LD A,B + OR C + JR NZ,DIMCLR + LD M,A + EXX + POP DE + LD A,(AUTDIM) + OR A + JR Z,VARCUL + LD HL,(DGBF00) + RET +; +VARCUL: LD HL,(ARYTXT) + PUSH DE + JP ARRAY2 + SKP H + +; +DIM: ENT + LD A,FFH + LD (AUTDIM),A +NXTDIM: CALL VSRTST + LD A,M + CALL CH28H + CALL ARRAY0 + CALL HLFTCH + CP "," + RET NZ + INC HL + JR NXTDIM +; +DIMADD: ADD HL,DE + RET NC + JR SORDIM +; +DIMMUL: PUSH BC + EX DE,HL + LD C,L + LD A,H + LD HL,0 + CALL DMMULS + LD A,C + CALL DMMULS + POP BC + RET +; +DMMULS: OR A + JR Z,SKPMUL + LD B,8 +DMMULP: ADD HL,HL + JR C,SORDIM + RLCA + JR NC,DMMULE + ADD HL,DE + JR C,SORDIM +DMMULE: DJNZ DMMULP + RET +; +SKPMUL: LD A,H + LD H,L + LD L,0 + OR A + RET Z +SORDIM: JP ER06 +; +; +ARYTXT: DEFS 2 +AUTDIM: DEFS 1 + SKP H + +; +VARFN2: SUB "A" + CP 26 + JP NC,ER01 + LD BC,(FNVRBF) + LD A,B + OR C + JR NZ,FNGTVR + CALL GETVAR +FNGTV2: PUSH DE + PUSH HL + LD L,C + LD H,B + LD B,A + LD C,A + CALL LDDEHL + POP HL + LD A,C + POP DE + JP FACRX5 +; +FNGTVR: PUSH DE + CALL VSRTST + PUSH HL + INC B + LD DE,KEYBUF + LD HL,(TMPEND) + CALL STRENT + LD B,0 + LD HL,(FNVRBF) + CALL HLFTCH + CP F4H + JR Z,FNSHNO + CP "(" + JR NZ,SERROL ;¯¯JP NZ,ER01 +FNGTL1: INC HL + INC B + PUSH BC + CALL VSRTST + LD A,C + POP DE + CP E ;TYPE + LD C,E ;¯¯ + JR NZ,FNGTL2 + PUSH DE + LD C,B + INC C + PUSH HL + LD HL,(TMPEND) + LD DE,KEYBUF + CALL HLDECK + POP HL + POP BC + JR Z,FNSHOK +FNGTL2: CALL HLFTCH + CP ")" + JR Z,FNSHNO + CP "," + JR Z,FNGTL1 ;¯¯¯ +SERROL: JP ER01 ;¯¯ + +FNSHNO: LD HL,(TMPEND) + LD DE,KEYBUF + LD A,M + LD (DE),A + LD B,A + INC HL + INC DE + LD A,M + LD (DE),A + DJNZ -4 + POP HL + POP DE + CALL FNGTV1 + JR FNGTV2 +; +FNSHOK: LD HL,(FNTXBF) + CALL HCH28H + DEC B + JR Z,FNSH13 + DEC HL +FNSH11: PUSH BC +FNSH12: CALL IFSKSB + CALL ENDCHK + JP Z,ER01 + CP ")" + JP Z,ER01 + CP "," + JR NZ,FNSH12 + POP BC + DJNZ FNSH11 + INC HL +FNSH13: EX DE,HL + POP HL + EX (SP),HL + EX DE,HL + LD BC,(FNVRBF) + PUSH BC + LD BC,0 + LD (FNVRBF),BC + CALL EXPR8 + POP HL + LD (FNVRBF),HL + POP HL + JP HLFTCH +; +FNGTV1: PUSH DE + JP GETFNV + SKP H + +; +CHVRNM: ENT + LD HL,(VARST) +ASLOP: LD DE,KEYBUF + LD A,M + OR A + RET Z + CP 40H + JR NC,ARYATA + CP C + JR NZ,SKIPUS + INC HL + LD A,(DE) + CP M + JR NZ,SKIPU2 + LD B,A +VARCL1: INC DE + INC HL + LD A,(DE) ;ÛÛ + CP M ;ÛÛ +;CALL NZ,SMALCH + JR NZ,SKIPU3 + DJNZ VARCL1 + INC HL + SCF + RET +SKIPU3: INC HL + DJNZ SKIPU3 + LD A,C + JR ARSKFN +SKIPU2: LD A,C + DEC HL +SKIPUS: AND 0FH ;TYPE + INC HL + ADD A,M ;NAME LEN. + INC HL +ARSKFN: LD E,A + LD D,0 + ADD HL,DE + JR ASLOP +; +; +ARYATA: CP C ;TYPE + JR Z,ARMSN1 + INC HL +MIDNAM: LD E,M + INC HL + LD D,M + DEC HL + ADD HL,DE + JR ASLOP +; +NXTVR1: LD A,C + SUB B + CPL + LD C,A + LD B,FFH + ADD HL,BC + POP BC +NXTVR: DEC HL + + DEC HL + JR MIDNAM +; +; +ARMSN1: LD A,M + EXX + LD C,A + LD B,00H + EXX + INC HL + PUSH DE + LD E,M + INC HL + LD D,M + INC HL + EX DE,HL + ADD HL,DE +;LD (ARYEDA),HL + EX DE,HL + POP DE + LD A,(DE) + CP M ;NAME LEN. + JR NZ,NXTVR + PUSH BC + LD B,A + LD C,A +AYNMCK: INC HL + INC DE + LD A,(DE) ;ÛÛ + CP M ;ÛÛ + JR NZ,NXTVR1 + DJNZ AYNMCK + INC HL + POP BC + SCF + RET + SKP H + +; +DEFFN: ENT + CALL VSRTST + SET 6,C + PUSH HL + CALL CHVRNM + JP C,ER07 ;ARY DEF ERR + LD M,C + EX (SP),HL + PUSH HL + DEC HL +FNSKP1: CALL IFSKSB + OR A + JR Z,FNSKED + CP 3AH ;: + JR NZ,FNSKP1 +FNSKED: POP DE + PUSH HL + INC HL + SBC HL,DE + LD A,(KEYBUF) + ADD A,4 + LD C,A + LD B,0 + LD A,L + ADD HL,BC + LD B,A + PUSH HL + EXX + POP BC + PUSH BC + PUSH HL + PUSH DE + PUSH BC + LD HL,0 + ADD HL,SP + LD DE,(TMPEND) + DEC H + OR A + SBC HL,DE + LD A,12 + JP C,NESTER + POP BC + POP DE + POP HL + LD HL,(TMPEND) + PUSH HL + ADD HL,BC + EX (SP),HL + PUSH HL + LD DE,(STRST) ;VAR END + OR A + SBC HL,DE + LD C,L + LD B,H + POP HL + POP DE + LDDR + POP DE + SVC .ADDP2 + + RST 3 + DEFB .ADDP2 + ENDM + DEC DE + POP HL + EX (SP),HL + INC HL + LD M,E + INC HL + LD M,D + INC HL + LD DE,KEYBUF + LD A,(DE) + LD M,A + LD B,A + INC DE + INC HL + LD A,(DE) + LD M,A + DJNZ -4 + INC HL + PUSH HL + EXX + POP HL + CALL LDHLDE + LD M,0 + POP HL + RET +; +FNEXP: ENT + PUSH DE + CALL VSRTST + POP IX + PUSH BC + SET 6,C + LD DE,(FNTXBF) + LD (FNTXBF),HL + PUSH DE + CALL CHVRNM + JP NC,ER15 ;UNDEF FN + LD DE,(FNVRBF) + LD (FNVRBF),HL + PUSH DE + PUSH IX + DEC HL +FNEQSK: CALL IFSKSB + CALL ENDCHK + JP Z,ER01 + CP F4H ;= + JR NZ,FNEQSK + INC HL + POP DE + PUSH DE + CALL EXPR8 + POP DE + LD HL,(FNTXBF) + POP BC + LD (FNVRBF),BC + POP BC + LD (FNTXBF),BC + + EX DE,HL + POP BC + LD A,C + CALL STRCK + LD BC,5 + ADD HL,BC + EX DE,HL + CALL HLFTCH + CP "(" + RET NZ + PUSH DE + LD B,1 +SK29LP: PUSH BC + CALL IFSKSB + POP BC + CALL ENDCK0 + JP Z,ER01 + CP "(" + JR NZ,+3 + INC B + CP ")" + JR NZ,SK29LP + DJNZ SK29LP + INC HL + CALL HLFTCH + POP DE + RET +; +STRCK: CP 3 + JR NZ,STROMT +STROK: ENT + LD A,(PRCSON) + CP 3 + RET Z + JP ER04 ;TYPE MISMATCH +STROMT: ENT + LD A,(PRCSON) + CP 3 + RET NZ + JP ER04 +; +FNVRBF: ENT + DEFW 0 +FNTXBF: DEFS 2 + SKP H + +; +; +; +HLDECK: LD A,(DE) + CP M + RET NZ + PUSH BC + PUSH DE + PUSH HL + LD B,C +HLDEC1: LD A,(DE) + CP M + JR NZ,HLDEC2 + INC DE + INC HL + DJNZ HLDEC1 + XOR A +HLDEC2: POP HL + POP DE + POP BC + RET +; +; Joy stick command +; +STCK: ENT + CALL HCH28H + PUSH DE + CALL DEEXP + CALL DCHECK + CP 3 + JP NC,ER03 + POP DE + PUSH AF + CALL HCH29H + POP AF + SVC .STICK + RST 3 + DEFB .STICK + ENDM + EX DE,HL + PUSH DE + CALL PUT1B + JP EOF8 +; +STIG: ENT + CALL HCH28H + PUSH DE + CALL DEEXP + CALL DCHECK + CP 5 + JP NC,ER03 + POP DE + PUSH AF + CALL HCH29H + POP AF + SVC .STRIG + RST 3 + DEFB .STRIG + ENDM + EX DE,HL + + PUSH DE + CALL PUT1B + JP EOF8 +; + END diff --git a/software/asm/mz-xz009/FLOAT.ASM b/software/asm/mz-xz009/FLOAT.ASM new file mode 100644 index 0000000..1d6ab1f --- /dev/null +++ b/software/asm/mz-xz009/FLOAT.ASM @@ -0,0 +1,1945 @@ +; ---------------------------- +; MZ-800 BASIC Floating point +; FI:FLOAT ver 1.0A 7.18.84 +; Programed by T.Miho +; ---------------------------- +; + INCLD MACRO +; +; +CLRFAC: ENT + PUSH HL + LD B,5 + CALL ?CLRHL + POP HL + RET +; +NEG: ENT + CALL STROMT +TOGLE: ENT + LD A,M + OR A + RET Z + INC HL + LD A,M + XOR 80H + LD M,A + DEC HL + RET +; +; +;(HL)=(HL)-(DE) +; +SUB: ENT + CALL STROMT + LD C,A + LD A,80H + JP ADDSUB +; +;(HL)=(HL)+(DE) +; +ADD: ENT + LD A,(PRCSON) + CP 03H + JP Z,STRADD + LD C,A + XOR A +ADDSUB: LD (HLBUF),HL + PUSH DE + PUSH HL + LD (SPBUF),SP + INC HL + INC DE + LD B,M ; + XOR M + EX DE,HL + XOR M + DEC HL + DEC DE + EX DE,HL + RLCA + + LD A,B + LD (SIGN),A + JP C,FSUB ;HL-DE +; +FADD: XOR A ;HL+DE + CP M + JP Z,TRANS ;(HL)_(DE) + LD A,(DE) + OR A + JR Z,FLEXIT ;SIGN SET RET + SUB M ;DE-HL + JP SFADD +; +; +FLEXIT: LD SP,(SPBUF) + POP HL + POP DE + EI + LD A,M + OR A + JP Z,ABS + LD A,(SIGN) + AND 80H + INC HL + RES 7,M + OR M + LD M,A + DEC HL + RET +; +TRANS: LD B,0 + LD A,5 + LD C,A + EX DE,HL + LDIR + JP FLEXIT +; +STRADD: LD B,M + LD A,(DE) + ADD A,B + JP C,ER05 ;STRING TOO LONG + LD C,A + PUSH DE + PUSH HL + PUSH DE + INC HL + LD E,M + INC HL + LD D,M + LD HL,(STRST) + ADD HL,DE + EX DE,HL + LD HL,(TMPEND) + CALL STRENT + EX (SP),HL + LD B,M + INC HL + LD E,M + INC HL + LD D,M + + LD HL,(STRST) + ADD HL,DE + EX DE,HL + POP HL + CALL STRENT + LD A,C + LD DE,(TMPEND) + LD BC,(STRST) + EX DE,HL + OR A + SBC HL,BC + EX DE,HL + LD (TMPEND),HL + POP HL + LD M,A + INC HL + LD M,E + INC HL + LD M,D + DEC HL + DEC HL + POP DE + RET +; +; +CMP: ENT + LD A,(PRCSON) + CP 3 + JR NZ,FLTCP2 + PUSH DE + PUSH HL + LD A,(DE) + OR M + JR Z,STCMPE + LD A,(DE) + CP M + JR C,+3 + LD A,M + OR A + JR Z,STCMPF + INC HL + LD C,M + INC HL + LD B,M + EX DE,HL + INC HL + LD E,M + INC HL + LD D,M + LD HL,(STRST) + EX DE,HL + ADD HL,DE + EX DE,HL + ADD HL,BC + EX DE,HL + LD B,A + OR A + JR Z,STCMPE +STCMPL: LD A,(DE) + CP M + + JR NZ,STCMPE + INC DE + INC HL + DJNZ STCMPL +STCMPF: POP DE + POP HL + LD A,(DE) + CP M + EX DE,HL + RET +; +STCMPE: POP HL + POP DE + RET +; +; +; +FLTCP2: INC DE + INC HL + LD A,(DE) + DEC DE + XOR M + RLCA + JR NC,FLTCP3 + LD A,M + DEC HL + RLCA + RET +FLTCP3: LD A,M + DEC HL + RLCA + JR NC,FLTCMP + CALL FLTCMP + RET Z + CCF + RET +; +FLTCMP: PUSH DE + PUSH HL + EX DE,HL + LD A,(DE) + CP M + JR NZ,SUBNZ + INC DE + INC HL + LD A,M + OR 80H + LD B,A + LD A,(DE) + OR 80H + CP B + JR NZ,SUBNZ + LD A,(PRCSON) + LD B,A + DEC B + DEC B +CMPL: INC DE + INC HL + LD A,(DE) + CP M + + JR NZ,SUBNZ + DJNZ CMPL +SUBNZ: POP HL + POP DE + RET +; +ZERO: POP HL + PUSH HL + CALL CLRFAC + JP FLEXIT +; +FSUB: CALL FLTCMP + JR Z,ZERO + JR NC,SUBOK + LD A,(SIGN) + XOR 80H + LD (SIGN),A + SCF +SUBOK: EX AF,AF' + LD A,M + OR A + JP Z,TRANS + LD A,(DE) + OR A + JP Z,FLEXIT + SUB M + JR C,FSUB11 + CP 32 + JP NC,TRANS + JR SUBOK2 +FSUB11: NEG + CP 32 + JP NC,FLEXIT +SUBOK2: EX AF,AF' + JR C,SUBOK' + EX DE,HL +SUBOK': EX AF,AF' + JP SSUB +; +OVERF: LD SP,(SPBUF) + EI + POP HL + POP DE + LD A,(OFLAG) + OR A + JP Z,ER02 +;SET MAX NUM HERE ***** + RET +; +; +; +; +SFADD: JR NC,SNSH + NEG + CP 32 + JP NC,FLEXIT + EX DE,HL + JR SADD1 +SNSH: CP 32 + JP NC,TRANS + +SADD1: CALL SSHIFT + LD A,H + EXX + ADC A,H ; ADJUST WITH CARRY + EXX + LD H,A ; + LD A,L + EXX + ADC A,L + EXX + LD L,A + LD A,D + EXX + ADC A,D + EXX + LD D,A + LD A,E + EXX + ADC A,E + EXX + JR NC,SSTORE + RRA + RR D + RR L + RR H + INC C + JP Z,OVERF +SSTORE: LD E,A + LD A,C + EXX + LD BC,5 + LD HL,(HLBUF) + LD M,A + ADD HL,BC + DI + LD SP,HL + EXX + PUSH HL + PUSH DE + JP FLEXIT +; +SSHIFT: DI + LD (SPBF),SP + EX AF,AF' + INC HL + LD SP,HL + EXX + POP DE ;E,D,L,H + SET 7,E ;CY=0 + POP HL + OR A +SHFLP2: EX AF,AF' + CP 8 + JR C,BITET2 + SUB 8 + EX AF,AF' + RL H + LD H,L + LD L,D + LD D,E + + LD E,0 + JR SHFLP2 +BITET2: OR A + JR Z,BITSE2 +BITST2: EX AF,AF' + OR A + RR E + RR D + RR L + RR H + EX AF,AF' + DEC A + JR NZ,BITST2 +BITSE2: EXX + EX DE,HL + LD C,M + INC HL + LD SP,HL + POP DE + SET 7,E + POP HL + EX AF,AF' + LD SP,(SPBF) + EI + RET +; +SSUB: CP 32 + JP NC,FLEXIT + CALL SSHIFT + LD A,H + EXX + SBC A,H + EXX + LD H,A + LD A,L + EXX + SBC A,L + EXX + LD L,A + LD A,D + EXX + SBC A,D + EXX + LD D,A + LD A,E + EXX + SBC A,E + EXX +SSFL2: OR A + JR Z,BSIFT +SSFL3: BIT 7,A + JR NZ,SSTOR2 + RL H + RL L + RL D + RLA + DEC C + JP NZ,SSFL3 + JP ZERO +SSTOR2: LD E,A + + JP SSTORE +BSIFT: LD A,C + SUB 8 + LD C,A + LD A,D + LD D,L + LD L,H + LD H,0 + JR Z,+4 + JR NC,SSFL2 + JP ZERO +; +;--------------------- +; +EXPCHK: LD C,A + INC HL + INC DE + LD A,(DE) + XOR M + LD (SIGN),A + DEC HL + DEC DE + RET +; +MUL: ENT + CALL STROMT + CALL EXPCHK + PUSH DE + PUSH HL + LD (SPBUF),SP + LD A,M + OR A + JP Z,ZERO + LD A,(DE) + OR A + JP Z,ZERO + INC DE + PUSH DE + POP IX + ADD A,M + LD E,A + LD A,0 + ADC A,A + LD D,A + LD (EXPSGN),DE + INC HL + XOR A + LD (CYFLG),A + LD D,M + SET 7,D + INC HL + LD E,M + INC HL + PUSH HL + LD H,A + LD L,A + EXX + POP HL + LD D,M + INC HL + + LD E,M + LD B,A + LD C,A + LD H,A + LD L,A + EXX + LD A,(IX+0) + OR 80H + LD C,4 ;BYTES COUNTER +SMULL1: LD B,8 ;BIT COUNTER + OR A + JP Z,SMULL5 +SMULL2: RLCA + JR NC,SMULL4 + EX AF,AF' + EXX + LD A,C + ADD A,B + LD C,A + ADC HL,DE + EXX + ADC HL,DE + JR NC,SMULL3 + LD A,1 + LD (CYFLG),A +SMULL3: EX AF,AF' +SMULL4: SRL D + RR E + EXX + RR D + RR E + RR B + EXX + DJNZ SMULL2 +SMULL6: INC IX + LD A,(IX+0) + DEC C + JR NZ,SMULL1 + EXX + LD A,(CYFLG) + OR A + JR Z,SMULL7 + LD DE,(EXPSGN) + INC DE + LD (EXPSGN),DE + EXX + SCF + RR H + RR L + EXX + RR H + RR L + RR C +SMULL7: BIT 7,C + JR Z,SMULL8 + LD DE,1 + ADD HL,DE + EXX + LD DE,0 + ADC HL,DE + + EXX + JR NC,SMULL8 + LD DE,(EXPSGN) + INC DE + LD (EXPSGN),DE + EXX + LD H,80H + EXX +SMULL8: POP IX + PUSH IX + LD (IX+4),L + LD (IX+3),H + EXX + LD (IX+2),L + LD (IX+1),H + LD HL,(EXPSGN) + OR A + LD DE,81H + SBC HL,DE + LD A,H + ADD A,0 + JP M,UNDRFL + JP NZ,OVERF + LD (IX+0),L + JP FLEXIT +; +SMULL5: LD A,E + EXX + LD B,E + LD E,D + LD D,A + EXX + LD E,D + LD D,0 + JP SMULL6 +; +; +UNDRFL: LD SP,(SPBUF) ;**** + JP ZERO +; +DIV: ENT + CALL STROMT + CALL EXPCHK + PUSH DE + PUSH HL + LD (SPBUF),SP + LD A,(DE) + OR A + JP Z,ER02 ;DIVID BY ZERO + EX AF,AF' + LD A,M + OR A + JP Z,ZERO + EXX + ADD A,81H + LD B,A + LD A,0 + ADC A,A + EX AF,AF' + LD C,A + + LD A,B + SUB C + LD C,A + EX AF,AF' + LD B,A + EX AF,AF' + LD A,B + SBC A,0 + JP C,UNDRFL + JP NZ,OVERF + LD A,C + PUSH AF ;PUSH A(EXP) + EXX + INC DE + INC HL + LD B,M + SET 7,B + INC HL + LD C,M + INC HL + PUSH HL + EX DE,HL + LD D,M + SET 7,D + INC HL + LD E,M + INC HL + PUSH HL + LD H,B + LD L,C + EXX + POP HL + LD D,M + INC HL + LD E,M + POP HL + LD A,M + INC HL + LD L,M + LD H,A + EXX ;HLH'L'/DED'E' + LD C,5 ;C=5 +SDIVL1: LD B,8 ;B=8 + XOR A +SDIVL2: BIT 7,H + JR NZ,SDIVL3 + OR A +SDIVL4: RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + DJNZ SDIVL2 + PUSH AF + DEC C + JR NZ,SDIVL1 + JP SDIVED +; +SDIVL3: OR A + EXX + + SBC HL,DE + EXX + SBC HL,DE + CCF + JR C,SDIVL4 + EXX + ADD HL,DE + EXX + ADC HL,DE + OR A + RLA + EXX + ADD HL,HL + EXX + ADC HL,HL + DJNZ SDIVL5 + PUSH AF + LD B,8 + DEC C + JP Z,SDIVED +SDIVL5: EXX + OR A + SBC HL,DE + EXX + SBC HL,DE + SCF + RLA + DJNZ SDIVL6 + PUSH AF + LD B,8 + DEC C + JR Z,SDIVED +SDIVL6: EXX + ADD HL,HL + EXX + ADC HL,HL + JR C,SDIVL5 + JP SDIVL2 +; +SDIVED: POP AF + LD H,A ;H' + EXX + POP AF + LD E,A ;E + POP AF + LD D,A ;D + POP AF + LD C,A ;C + POP AF + LD B,A ;B + POP AF ;A(EXP) +SDIVL9: BIT 7,B + JR NZ,SDIVE2 + EXX + SLA H + EXX + RL E + RL D + RL C + RL B + + DEC A + JP NZ,SDIVL9 + JP ZERO +SDIVE2: EXX + RL H + EXX + JR NC,SDIVL8 + LD HL,1 + ADD HL,DE + EX DE,HL + LD HL,0 + ADC HL,BC + LD B,H + LD C,L + JR NC,SDIVL8 + LD B,80H + INC A +SDIVL8: POP HL + PUSH HL + LD M,A + INC HL + LD M,B + INC HL + LD M,C + INC HL + LD M,D + INC HL + LD M,E + JP FLEXIT +; +HLBUF: DEFS 2 +SIGN: DEFS 1 +SPBUF: DEFS 2 +SPBF: DEFS 2 +CYFLG: DEFS 1 +EXPSGN: DEFS 2 +OFLAG: DEFS 1 +; + SKP H + +; +TSTSGN: INC HL + BIT 7,M + DEC HL + RET +; +MULTWO: INC M + RET NZ + JP ER02 +; +DIVTWO: LD A,M + OR A + RET Z + DEC M + RET NZ + JP CLRFAC +; +ADDHL5: PUSH HL + INC HL + INC HL + INC HL + INC HL + INC HL + EX DE,HL + LD HL,(MEMMAX) + DEC HL + SBC HL,DE + JP C,ER06 + POP HL + RET +; +FACSET: PUSH HL + LD (SNFAC0),HL + CALL ADDHL5 + EX DE,HL + LD (SNFAC1),HL + CALL ADDHL5 + EX DE,HL + LD (SNFAC2),HL + CALL ADDHL5 + LD (SNFAC3),DE + POP HL + RET +; +; +POWERS: ENT ;(HL)^(DE) + CALL STROMT + EX DE,HL + LD A,M + OR A + JP Z,POWR1 + EX DE,HL + LD A,M + OR A + JP Z,CLRFAC + CALL TSTSGN + JR Z,POWER1 + CALL TOGLE + EX DE,HL + PUSH DE + + PUSH HL + LD DE,ZFAC1 + CALL LDIR5 ;(ZFAC1)=(DE) + LD HL,ZFAC1 + CALL FRACT + LD A,M + OR A + JP NZ,ER03 + POP HL + PUSH HL + CALL HLFLT + BIT 0,L + POP DE + POP HL + JR Z,POWER1 + CALL POWER1 + JP TOGLE +; +POWER1: EX DE,HL + LD A,M + OR A + JR Z,POWR1 + CALL TSTSGN + JR Z,POWER2 + CALL TOGLE + CALL POWER2 + PUSH DE + PUSH HL + LD DE,ZFAC1 + CALL LDIR1 ;(ZFAC1)=1 + LD HL,ZFAC1 + POP DE + CALL DIV ;(ZFAC1)/(HL) + PUSH DE + CALL LDIR5 ;(HL)=(ZFAC1) + POP HL + POP DE + RET +; +POWR1: PUSH DE + CALL LDIR1 + POP HL + RET +; +POWER2: PUSH DE + LD DE,ZFAC1 + CALL LDIR5 ;(ZFAC1)=(DE) + POP HL + CALL LOG ;LOG(HL) + LD DE,ZFAC1 + CALL MUL ;(HL)*(DE) + JP EXP ;EXP(HL) + SKP H + +; +.NOT.: ENT + CALL STROMT + PUSH DE + PUSH HL + CALL HLFLT + LD A,L + CPL + LD E,A + LD A,H + CPL + LD D,A + JR AND9 +; +.AND.: ENT + LD A,A2H ;AND D + DEFB 1 +.OR.: ENT + LD A,B2H ;OR D + DEFB 1 +.XOR.: ENT + LD A,AAH ;XOR D +; + LD (AND2),A + INC A + LD (AND4),A + CALL STROMT + PUSH DE + PUSH HL + CALL HLFLT + EX DE,HL + CALL HLFLT + LD A,H +AND2: AND D ;AND, OR, XOR + LD D,A + LD A,L +AND4: AND E ;AND, OR, XOR + LD E,A +AND9: POP HL + CALL FLTHEX + POP DE + RET + SKP H + +; +ABS: ENT + INC HL + RES 7,M + DEC HL + RET +; +INTOPR: ENT + CALL TSTSGN + JP Z,INT + CALL MVFAC1 + CALL INT + LD DE,ZFAC1 + CALL CMP + RET Z +ONESUB: LD DE,FLONE + JP SUB +; +ONEADD: LD DE,FLONE + JP ADD +; +ONECMP: LD DE,FLONE + JP CMP +; +MVFAC1: PUSH HL + PUSH DE + LD DE,ZFAC1 + CALL LDIR5 + POP DE + POP HL + RET +; +; +MOD: ENT + CALL INT + EX DE,HL + CALL INT + EX DE,HL + CALL MVFAC1 + CALL DIV + CALL INT + CALL MUL + PUSH DE + LD DE,ZFAC1 + CALL SUB + POP DE + JP TOGLE +; +; +YEN: ENT + CALL INT + EX DE,HL + CALL INT + EX DE,HL + CALL DIV + JP INT +; +; +SQR: ENT + LD A,M + + OR A + RET Z + CALL TSTSGN + JP NZ,ER03 + CALL LOG + CALL DIVTWO + JP EXP +; +RETONE: PUSH HL + EX DE,HL + CALL LDIR1 + POP HL + POP BC + RET +; +ATNLM1: DEFB 7EH + DEFB 4CH +; +ATNLM2: DEFB 80H + DEFB 2BH +; +ATN: ENT + PUSH BC + INC HL + LD A,M + RES 7,M + DEC HL + PUSH AF + CALL ATN'' + POP AF + POP BC + RLCA + RET NC + JP TOGLE +; +ATN'': CALL ONECMP + JR C,ATN' + CALL ADDHL5 + PUSH DE + PUSH HL + CALL LDIR5 + POP DE + PUSH DE + CALL LDIR1 + POP HL + POP DE + CALL DIV + CALL ATN' + LD DE,FLTHPI ;PI/2 + CALL SUB + JP ABS +; +ATN': LD A,FFH + LD (SINSGN),A + LD DE,ATNLM1 + CALL CMP + JR C,ATNCUL + LD DE,ATNLM2 + CALL CMP + PUSH AF + + CALL ADDHL5 + POP AF + PUSH HL + PUSH DE + CALL LDIR5 + POP HL + JR C,ATNMID + CALL ONEADD + EX (SP),HL + CALL SUB + POP DE + CALL DIV + CALL ATNCUL + LD DE,FLTQPI ;PI/4 + JP ADD +; +ATNMID: LD DE,SQRTMO + CALL MUL + CALL ONEADD + EX (SP),HL + LD DE,SQRTMO + CALL SUB + POP DE + CALL DIV + CALL ATNCUL + CALL MULTWO + LD DE,FLTQPI ;PI/4 + CALL ADD + JP DIVTWO +; +SQRTMO: DEF5 7F,54,13,CC,D0 + DEFW 547FH + DEFW CC13H + DEFB D0H + ENDM +; +ATNCUL: PUSH BC + PUSH HL + CALL FACSET + POP HL + PUSH HL + PUSH DE + CALL LDIR5 + POP HL + LD E,L + LD D,H + CALL MUL + LD DE,(SNFAC2) + POP HL + PUSH HL + CALL LDIR5 + LD A,(PRCSON) + DEC A + CP 04H + LD B,A + LD HL,TANTBL + JP Z,SIN6 + LD B,10 + JP SIN6 +; + +COS: ENT + PUSH BC + LD A,M + OR A + JP Z,RETONE + LD DE,FLTHPI ;PI/2 + CALL SUB + CALL TOGLE + POP BC +; +SIN: ENT + PUSH BC + INC HL + LD A,M + RES 7,M + AND 80H + CPL + LD (SINSGN),A + DEC HL + LD DE,FLT2PI ;PI*2 + PUSH HL + CALL CMP + JR C,SIN1 + CALL DIV + CALL FRACT + CALL MUL +SIN1: LD DE,FLTPAI + CALL CMP + JR C,SIN2 + CALL SUB + LD A,(SINSGN) + XOR 80H + LD (SINSGN),A +SIN2: LD DE,FLTHPI ;PI/2 + CALL CMP + JR C,SIN4 + LD DE,FLTPAI + CALL SUB + CALL ABS +SIN4: CALL FACSET + POP HL + PUSH DE + LD DE,FLTQPI ;PI/4 + CALL CMP + JR NC,COSCUL + POP DE + PUSH HL + PUSH DE + CALL LDIR5 + POP HL + LD E,L + LD D,H + CALL MUL + LD DE,(SNFAC2) + POP HL + PUSH HL + CALL LDIR5 + LD A,(PRCSON) + LD B,A + LD HL,SINTBL + +SIN6: PUSH BC + PUSH HL + LD HL,(SNFAC2) + LD DE,(SNFAC3) + CALL MUL + POP HL + PUSH HL + LD DE,(SNFAC1) + PUSH DE + CALL LDIR5 + POP HL + LD DE,(SNFAC2) + CALL MUL + EX DE,HL + LD HL,(SNFAC0) + CALL ADD + POP HL + LD DE,5 + ADD HL,DE + POP BC + DJNZ SIN6 + POP HL + POP BC + LD A,(SINSGN) + INC HL + XOR M + CPL + LD M,A + DEC HL + LD A,(PRCSON) + CP 08H + LD A,M + JR Z,SIN9 + CP 5CH ; ADJUST +SIN8: RET NC + JP CLRFAC +; +SIN9: CP 4DH ; ADJUST + JR SIN8 +; +COSCUL: LD DE,FLTHPI ;PI/2 + CALL SUB + CALL ABS + POP DE + PUSH HL + PUSH DE + CALL LDIR5 + POP HL + LD E,L + LD D,H + CALL MUL + LD DE,(SNFAC2) + CALL LDIR1 + POP DE + PUSH DE + CALL LDIR1 + LD A,(PRCSON) + LD B,A + LD HL,COSTBL + JR SIN6 + +; +SINSGN: DEFS 1 +; +; +TAN: ENT + PUSH BC + PUSH HL + CALL ADDHL5 + EX DE,HL + LD (SNFAC4),HL + CALL ADDHL5 + LD (SNFAC5),DE + POP HL + PUSH HL + CALL LDIR5 + LD HL,(SNFAC4) + EX DE,HL + POP HL + PUSH HL + CALL LDIR5 + LD HL,(SNFAC5) + CALL SIN + POP DE + PUSH DE + CALL LDIR5 + LD HL,(SNFAC4) + CALL COS + EX DE,HL + POP HL + CALL DIV + POP BC + RET +; +SINTBL: DEF5 7E,AA,AA,AA,AB + DEFW AA7EH + DEFW AAAAH + DEFB ABH + ENDM + DEF5 7A,08,88,88,89 + DEFW 087AH + DEFW 8888H + DEFB 89H + ENDM + DEF5 74,D0,0D,00,D0 + DEFW D074H + DEFW 000DH + DEFB D0H + ENDM + DEF5 6E,38,EF,1D,2B + DEFW 386EH + DEFW 1DEFH + DEFB 2BH + ENDM + DEF5 67,D7,32,2B,40 + DEFW D767H + DEFW 2B32H + DEFB 40H + ENDM + DEF5 60,30,92,30,9D + DEFW 3060H + + DEFW 3092H + DEFB 9DH + ENDM + DEF5 58,D7,3F,9F,3A + DEFW D758H + DEFW 9F3FH + DEFB 3AH + ENDM + DEF5 50,4A,96,3B,82 + DEFW 4A50H + DEFW 3B96H + DEFB 82H + ENDM +; +COSTBL: DEF5 80,80,00,00,00 + DEFW 8080H + DEFW 0000H + DEFB 00H + ENDM + DEF5 7C,2A,AA,AA,AB + DEFW 2A7CH + DEFW AAAAH + DEFB ABH + ENDM + DEF5 77,B6,0B,60,B6 + DEFW B677H + DEFW 600BH + DEFB B6H + ENDM + DEF5 71,50,0D,00,D0 + DEFW 5071H + DEFW 000DH + DEFB D0H + ENDM + DEF5 6B,93,F2,7D,BC + DEFW 936BH + DEFW 7DF2H + DEFB BCH + ENDM + DEF5 64,0F,76,C7,80 + DEFW 0F64H + DEFW C776H + DEFB 80H + ENDM + DEF5 5C,C9,CB,A5,46 + DEFW C95CH + DEFW A5CBH + DEFB 46H + ENDM + DEF5 54,57,3F,9F,3A + DEFW 5754H + DEFW 9F3FH + DEFB 3AH + ENDM +; +TANTBL: DEF5 7F,AA,AA,AA,AB + DEFW AA7FH + DEFW AAAAH + DEFB ABH + ENDM + + DEF5 7E,4C,CC,CC,CD + DEFW 4C7EH + DEFW CCCCH + DEFB CDH + ENDM + DEF5 7E,92,49,24,92 + DEFW 927EH + DEFW 2449H + DEFB 92H + ENDM + DEF5 7D,63,8E,38,E4 + DEFW 637DH + DEFW 388EH + DEFB E4H + ENDM + DEF5 7D,BA,2E,8B,A3 + DEFW BA7DH + DEFW 8B2EH + DEFB A3H + ENDM + DEF5 7D,1D,89,D8,9E + DEFW 1D7DH + DEFW D889H + DEFB 9EH + ENDM + DEF5 7D,88,88,88,89 + DEFW 887DH + DEFW 8888H + DEFB 89H + ENDM + DEF5 7C,70,F0,F0,F1 + DEFW 707CH + DEFW F0F0H + DEFB F1H + ENDM + DEF5 7C,D7,94,35,E5 + DEFW D77CH + DEFW 3594H + DEFB E5H + ENDM + DEF5 7C,43,0C,30,C3 + DEFW 437CH + DEFW 300CH + DEFB C3H + ENDM +; +; +SGN: ENT + LD DE,0 + LD A,M + OR A + JR Z,SGNSET + CALL TSTSGN + INC DE + JR Z,SGNSET + DEC DE + DEC DE +SGNSET: CALL FLTHEX + RET +; + +; +RAD: ENT + LD DE,FLTRAD + JR +5 +PAI: ENT + LD DE,FLTPAI + PUSH BC + CALL MUL + POP BC + RET +; +FLT2PI: ENT + DEF5 83,49,0F,DA,A2 ;PI*2 + DEFW 4983H + DEFW DA0FH + DEFB A2H + ENDM +FLTPAI: ENT + DEF5 82,49,0F,DA,A2 ;PI + DEFW 4982H + DEFW DA0FH + DEFB A2H + ENDM +FLTHPI: DEF5 81,49,0F,DA,A2 ;PI/2 + DEFW 4981H + DEFW DA0FH + DEFB A2H + ENDM +FLTQPI: DEF5 80,49,0F,DA,A2 ;PI/4 + DEFW 4980H + DEFW DA0FH + DEFB A2H + ENDM +; +FLTRAD: DEF5 7B,0E,FA,35,13 + DEFW 0E7BH + DEFW 35FAH + DEFB 13H + ENDM +; +; +PEEK: ENT + PUSH HL + CALL HLFLT + LD E,(HL) + LD D,0 + POP HL + CALL FLTHEX + RET +; +; +RND: ENT + LD A,M + OR A + JR Z,RNDMIZ + CALL TSTSGN + JR Z,NORRND +RNDMIZ: PUSH HL + LD HL,4193H + LD (SEED),HL + + POP HL + XOR A + LD R,A +NORRND: PUSH BC + LD DE,(SEED) + LD A,R + XOR D + RRC A + RRC A + RRC A + LD D,A + LD A,R + XOR E + RLC A + RLC A + LD E,D + LD D,A + LD (SEED),DE + PUSH HL + INC HL + RES 7,D + LD M,D + INC HL + LD M,E + INC HL + LD A,R + LD M,A + POP HL + LD M,81H + CALL ONESUB + POP BC + RET +SEED: DEFW 4193H +; +EXP: ENT + PUSH BC + LD A,M + OR A + JP Z,RETONE + INC HL + LD A,M + LD (EXPSIN),A + RES 7,M + DEC HL + LD DE,LNTWO' + CALL MUL + PUSH HL + CALL ADDHL5 + PUSH DE + CALL LDIR5 + POP HL + CALL INT + PUSH HL + CALL HLFLT + XOR A + CP H + JP NZ,ER02 + LD A,L + LD (EXPOFF),A + POP DE + + POP HL + PUSH HL + CALL SUB + PUSH DE + PUSH HL + CALL LDIR1 + POP DE + POP HL + CALL DIVTWO + EX DE,HL + XOR A + LD B,8 +EXPLP1: PUSH BC + PUSH AF + CALL CMP + JR C,EXPNL1 + CALL SUB + POP AF + SET 7,A + PUSH AF +EXPNL1: POP AF + RLC A + EX DE,HL + PUSH AF + CALL DIVTWO + POP AF + EX DE,HL + POP BC + DJNZ EXPLP1 + LD (EXPHBT),A + PUSH DE + LD DE,LNTWO + LD A,(PRCSON) + BIT 3,A + JR NZ,+5 + LD DE,LNTWOF + CALL MUL + POP DE + PUSH DE + CALL LDIR5 + POP HL + LD A,(PRCSON) + BIT 3,A + JP Z,EXPSKP + CALL MULTWO + LD DE,FLTEN + CALL ADD + CALL DIVTWO + POP DE + PUSH DE + CALL MUL + LD DE,FLTEN + CALL DIVTWO + CALL ADD + CALL MULTWO + POP DE + PUSH DE + CALL MUL + LD DE,FLT120 + CALL MUL + + CALL MULTWO + CALL ONEADD + CALL DIVTWO + POP DE + PUSH DE + CALL MUL + CALL ONEADD + POP DE + PUSH DE + CALL MUL +EXPSK': CALL ONEADD + EX (SP),HL + EX DE,HL + PUSH DE + CALL LDIR1 + POP HL + LD DE,EXDTBL + LD A,(EXPHBT) + LD B,8 +EXPCLP: RLC A + JR NC,SKPEXP + PUSH AF + PUSH BC + CALL MUL + POP BC + POP AF +SKPEXP: REP5 INC,DE + INC DE + INC DE + INC DE + INC DE + INC DE + ENDM + DJNZ EXPCLP + LD A,(EXPOFF) + ADD A,M + JP C,ER02 + LD M,A + POP DE + CALL MUL + POP BC + LD A,(EXPSIN) + RLC A + RET NC + PUSH BC + PUSH DE + PUSH HL + CALL LDIR5 + POP DE + PUSH DE + CALL LDIR1 + POP HL + POP DE + CALL DIV + POP BC + RET +; +EXPSKP: POP DE + PUSH DE + CALL MUL + + LD A,M + OR A + CALL NZ,DIVTWO + CALL ADD + JP EXPSK' +; +EXPOFF: DEFS 1 +EXPSIN: DEFS 1 +EXPHBT: DEFS 1 +; +LOGD: ENT + PUSH BC + CALL LOG + LD DE,LOGE10 + CALL MUL + POP BC + RET +; +LOG: ENT ;LN(HL) + PUSH BC + CALL TSTSGN + JP NZ,ER03 + LD A,M + OR A + JP Z,ER03 + SUB 81H + LD (LOGEXP),A + LD M,81H + XOR A + LD B,8 + LD DE,EXDTBL +LOGCLL: PUSH BC + PUSH AF + CALL CMP + JR C,LOGNCL + PUSH HL + LD HL,40 + ADD HL,DE + EX DE,HL + EX (SP),HL + CALL MUL + POP DE + POP AF + SET 7,A + PUSH AF +LOGNCL: POP AF + RLC A + REP5 INC,DE + INC DE + INC DE + INC DE + INC DE + INC DE + ENDM + POP BC + DJNZ LOGCLL + LD (SNFAC0),HL + CALL ADDHL5 + EX DE,HL + LD E,A + + LD D,0 + CALL FLTHEX + LD A,M + OR A + JR Z,NOTDCR + SUB 08H + LD M,A +NOTDCR: LD A,(LOGEXP) + CP 80H + JR C,+4 + NEG + PUSH HL + CALL ADDHL5 + EX DE,HL + LD (SNFAC1),HL + LD E,A + LD D,0 + CALL FLTHEX + LD A,(LOGEXP) + AND 80H + INC HL + OR M + LD M,A + DEC HL + EX DE,HL + POP HL + CALL ADD + LD A,(PRCSON) + LD DE,LNTWO! + CP 05H + JR Z,+5 + LD DE,LNTWO + CALL MUL + PUSH HL + LD DE,(SNFAC1) + LD HL,(SNFAC0) + PUSH HL + PUSH DE + CALL LDIR5 + POP HL + CALL ONEADD + EX (SP),HL + CALL SUB + POP DE + CALL DIV + PUSH DE + CALL LDIR5 + POP HL + PUSH DE + LD E,L + LD D,H + CALL MUL + POP DE + PUSH HL + PUSH DE + CALL LDIR5 + POP HL + LD DE,LOGDAT + CALL ADD + EX DE,HL + + POP HL + CALL MUL + LD DE,FLTEN + CALL MULTWO + CALL ADD + CALL DIVTWO + EX DE,HL + LD HL,(SNFAC0) + CALL MUL + LD DE,FLTHR' + CALL MUL + POP DE + CALL ADD + POP BC + RET +; +LOGEXP: DEFS 1 +; +; +LOGE10: DEF5 7F,5E,5B,D8,A9 + DEFW 5E7FH + DEFW D85BH + DEFB A9H + ENDM +; +; +FLTHR': DEF5 7F,4C,CC,CC,CD + DEFW 4C7FH + DEFW CCCCH + DEFB CDH + ENDM +; +LOGDAT: DEF5 81,55,55,55,56 + DEFW 5581H + DEFW 5555H + DEFB 56H + ENDM +; +EXDTBL: DEF5 81,35,04,F3,34 ;2^(1/2) + DEFW 3581H + DEFW F304H + DEFB 34H + ENDM + DEF5 81,18,37,F0,52 ;2^(1/4) + DEFW 1881H + DEFW F037H + DEFB 52H + ENDM + DEF5 81,0B,95,C1,E4 ;2^(1/8) + DEFW 0B81H + DEFW C195H + DEFB E4H + ENDM + DEF5 81,05,AA,C3,68 ;2^(1/16) + DEFW 0581H + DEFW C3AAH + DEFB 68H + ENDM + DEF5 81,02,CD,86,99 ;2^(1/32) + DEFW 0281H + + DEFW 86CDH + DEFB 99H + ENDM + DEF5 81,01,64,D1,F4 ;2^(1/64) + DEFW 0181H + DEFW D164H + DEFB F4H + ENDM + DEF5 81,00,B1,ED,50 ;2^(1/128) + DEFW 0081H + DEFW EDB1H + DEFB 50H + ENDM + DEF5 81,00,58,D7,D3 ;2^(1/256) + DEFW 0081H + DEFW D758H + DEFB D3H + ENDM + DEF5 80,35,04,F3,34 + DEFW 3580H + DEFW F304H + DEFB 34H + ENDM + DEF5 80,57,44,FC,CB + DEFW 5780H + DEFW FC44H + DEFB CBH + ENDM + DEF5 80,6A,C0,C6,E8 + DEFW 6A80H + DEFW C6C0H + DEFB E8H + ENDM + DEF5 80,75,25,7D,16 + DEFW 7580H + DEFW 7D25H + DEFB 16H + ENDM + DEF5 80,7A,83,B2,DC + DEFW 7A80H + DEFW B283H + DEFB DCH + ENDM + DEF5 80,7D,3E,0C,0D + DEFW 7D80H + DEFW 0C3EH + DEFB 0DH + ENDM + DEF5 80,7E,9E,11,5D + DEFW 7E80H + DEFW 119EH + DEFB 5DH + ENDM + DEF5 80,7F,4E,CB,5A + DEFW 7F80H + DEFW CB4EH + DEFB 5AH + ENDM +; +FLT120: DEF5 7A,08,88,88,89 + + DEFW 087AH + DEFW 8888H + DEFB 89H + ENDM +; +LNTWO: DEF5 80,31,72,17,F8 + DEFW 3180H + DEFW 1772H + DEFB F8H + ENDM +; +LNTWOF: DEF5 80,31,72,17,F8 + DEFW 3180H + DEFW 1772H + DEFB F8H + ENDM +; +LNTWO': DEF5 81,38,AA,3B,2A ;1/LN(2) + DEFW 3881H + DEFW 3BAAH + DEFB 2AH + ENDM +; +LNTWO!: DEF5 80,31,72,17,F8 ; * + DEFW 3180H + DEFW 1772H + DEFB F8H + ENDM +; +; +SNFAC0: DEFS 2 +SNFAC1: DEFS 2 +SNFAC2: DEFS 2 +SNFAC3: DEFS 2 +SNFAC4: DEFS 2 +SNFAC5: DEFS 2 +; + END diff --git a/software/asm/mz-xz009/GRPH.ASM b/software/asm/mz-xz009/GRPH.ASM new file mode 100644 index 0000000..fbc20d1 --- /dev/null +++ b/software/asm/mz-xz009/GRPH.ASM @@ -0,0 +1,716 @@ +; ----------------------------- +; MZ-800 BASIC Graphic command +; FI:GRPH ver 1.0B 9.21.84 +; Programed by T.Miho +; ----------------------------- +; + INCLD MACRO +; +BITFU2: DEFB 0 ;Default W0/W1 +COL: ENT ;Color code + DEFB 03H +; +;;;;;;;;;;;;;;; +; +; SET/RESET [c,w]x,y +; +SET: ENT + DEFB F6H +RESET: ENT + XOR A + PUSH AF + CALL COORD0 + SVC .POSSV + RST 3 + DEFB .POSSV + ENDM + POP AF ;SET/RESET + PUSH HL + EXX + SVC .PSET + RST 3 + DEFB .PSET + ENDM + POP HL + RET +; +;;;;;;;;;;;;;;;;;; +; +; LINE/BLINE [c,w] x0,y0,x1,y1,..... +; +LINE: ENT + DEFB F6H +BLINE: ENT + XOR A + LD (LINE4+1),A + CALL COORD0 + CALL HCH2CH +LINE2: EXX + PUSH HL ;YS + PUSH DE ;XS + EXX + CALL COORD + POP DE ;XS + EX (SP),HL ;YS,Text + EXX +LINE4: LD A,0 ;LINE/BLINE + SVC .LINE + RST 3 + DEFB .LINE + ENDM + + POP HL + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR Z,LINE2 + SVC .POSSV + RST 3 + DEFB .POSSV + ENDM + RET + SKP H + +; +;;;;;;;;;;;;;;;;;;;;;;;; +; +; PATTERN [C,W] N,X$ +; +PATTER: ENT + CALL COLCON + CALL IDEEXP + XOR A + BIT 7,D + JR Z,GRDSP4 + PUSH HL + LD H,A + LD L,A + SBC HL,DE + EX DE,HL + POP HL + LD A,1 +GRDSP4: EX AF,AF' + LD A,D + OR A + JR NZ,ER03A + LD A,E + PUSH AF + EX AF,AF' + PUSH AF + CALL HCH2CH + CALL STREXP + POP AF + LD C,A + POP AF + PUSH HL + LD H,C + SVC .PATTR + RST 3 + DEFB .PATTR + ENDM + POP HL + CALL ENDCHK + JR NZ,PATTER + RET + SKP H + +;;;;;;;;;;;;;;;;;;; +; +; POSITION x,y +; +POSITI: ENT + CALL COORD + SVC .POSSV + RST 3 + DEFB .POSSV + ENDM + RET +; +; Get X-Y coordinate +; +COORD0: CALL COLCON +COORD: CALL COORD1 ;Get x,y coordinate + PUSH DE + TEST1 ',' + CALL TEST1 + DEFB ',' + ENDM + CALL COORD1 + PUSH DE + EXX + POP HL + POP DE + EXX + RET +; +; +COORD1: CALL IDEEXP + LD A,D ;0000 ... 3FFF + ADD A,40H ;C000 ... FFFF + RET P +ER03A: JP ER03 + SKP H + +;;;;;;;;;;;;;;;;;;;;;;; +; +; color palette +; +PALET: ENT + CALL ENDCHK + JP Z,ER01 + CALL PALRD + CALL COLCK2 + AND 03H + PUSH AF + LD A,(PALBK) + LD D,E + SRL D + SRL D + CP D + JP NZ,ER22 + TESTX ',' + CALL TESTX + DEFB ',' + ENDM + CALL PALRD + LD B,A + POP AF + SVC .DPLST + RST 3 + DEFB .DPLST + ENDM + RET +; +PALRD: CALL IBYTE + CP 16 ;0 .. 15 check + JR NC,ER03A + RET +; + SKP H + +;;;;;;;;;;;;;;;;;;;; +; +; BOX [c,w] xs,ys,xe,ye +BOX: ENT + CALL COORD0 + EXX + PUSH HL ;YS + PUSH DE ;XS + EXX + CALL HCH2CH + CALL COORD + EXX + PUSH HL ;YE + PUSH DE ;XE + EXX + CALL ENDCHK + JR Z,BOX9 + CALL CH2CH + CALL ENDCHK + LD A,(COL) + CALL NZ,COLCHK + SCF +BOX9: EXX + POP DE + POP HL + EXX + POP DE + EX (SP),HL + SVC .BOX + RST 3 + DEFB .BOX + ENDM + POP HL + RET + SKP H + +; +;;;;;;;;;;;;;;;;;; +; +; COLOR c,w +; +COLOR: ENT + CALL COLSUB + LD A,(COL) + SVC .DCOL + RST 3 + DEFB .DCOL + ENDM + LD (SELCOL),A + LD A,(PWMODE) + LD (BITFU2),A + CALL ENDZ + RET +; +;;;;;;;;;;;;;;;; +; +; COLOR CONTROL EXP +; +COLCON: ENT + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + TEST1 "[" + CALL TEST1 + DEFB "[" + ENDM + JR NZ,COLCN1 + CALL COLSUB + LD A,(COL) + SVC .DGCOL + RST 3 + DEFB .DGCOL + ENDM + TESTX "]" + CALL TESTX + DEFB "]" + ENDM + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + RET +; +COLCN1: LD A,(SELCOL) + LD (COL),A + SVC .DGCOL + RST 3 + DEFB .DGCOL + ENDM +COLCN2: LD A,(BITFU2) + LD (PWMODE),A + RET +; +COLSUB: TEST1 "," + CALL TEST1 + + DEFB "," + ENDM + JR Z,COLC8 + CALL COLCHK + LD (COL),A + TEST1 ',' + CALL TEST1 + DEFB ',' + ENDM + JR NZ,COLCN2 +COLC9: CALL IBYTE + CP 2 + JR NC,ER03B + LD (PWMODE),A + RET +; +COLC8: LD A,(SELCOL) + LD (COL),A + JR COLC9 +; +COLCHK: ENT + PUSH BC + CALL IBYTE + POP BC +COLCK2: LD A,(CRTMD1) + RRA + JR C,CMD1 + RRA + JR C,CMD2 + RRA + JR C,CMD3 +CMD1: LD A,E + CP 4 + JR NC,ER03B + RET +CMD2: LD A,E + CP 16 + JR NC,ER03B + RET +CMD3: LD A,E + CP 2 + RET C +ER03B: JP ER03 +; + SKP H + +;;;;;;;;;;;;;;;;;;;; +; +;PAINT COMMAND +; +PAINT: ENT + CALL COLCON + CALL POSITI + LD B,0 + LD DE,PAINTB + PUSH DE + CALL ENDCHK + JR Z,PAINT3 +PAINT1: CALL CH2CH + PUSH DE + CALL COLCHK + POP DE + LD (DE),A + INC DE + INC B + LD A,B + CP 16 + JP Z,ER01 + CALL ENDCHK + JR NZ,PAINT1 +PAINT2: EX (SP),HL ;data adrs + PUSH HL + LD HL,-527 + ADD HL,SP + LD (PAIWED),HL + POP HL + SVC .PAINT + RST 3 + DEFB .PAINT + ENDM + JP C,ER06 + POP HL + RET +; +PAINT3: LD A,(COL) + LD (DE),A + INC B ; data count + JR PAINT2 +PAINTB: DEFS 16 + SKP H + +;;;;;;;;;;;;;;;;;;;; +; +;CIRCLE COMMAND +; +CIRCLE: ENT + PUSH HL + LD HL,0 + LD (CW.H+1),HL + LD (CW.XS+1),HL + LD (CW.YS+1),HL + LD (CW.XE+1),HL + LD (CW.YE+1),HL + LD HL,KK + CALL CLRFAC + LD HL,FLT2PI + LD DE,SK ;\mßám\l=2PAI + CALL LDIR5 + POP HL +;\s\ºl yÝ-Ä + CALL COORD0 + SVC .POSSV + RST 3 + DEFB .POSSV + ENDM + CALL HCH2CH + CALL IDEEXP + PUSH HL + LD A,D + AND C0H + JP NZ,ER03 + EX DE,HL + LD (CW.R+2),HL ;ÞÙZs + LD (CW.XS+1),HL + LD (CW.XE+1),HL + LD HL,(INTFAC) + LD DE,CIR.R + CALL LDIR5 + POP HL + CALL ENDCHK + JP Z,CW + CALL CH2CH + TEST1 ',' + CALL TEST1 + DEFB ',' + ENDM + JR Z,CIRCL2 + CALL HIRIT + CALL ENDCHK + JP Z,CW + CALL CH2CH +CIRCL2: TEST1 ',' + CALL TEST1 + DEFB ',' + ENDM + JR Z,CIRCL8 + LD IX,CW.XS+1 + LD IY,KK + CALL STX + CALL ENDCHK + JP Z,CW + + CALL CH2CH +CIRCL8: TEST1 ',' + CALL TEST1 + DEFB ',' + ENDM + JR Z,CIRCL4 + LD IX,CW.XE+1 + LD IY,SK + CALL STX + CALL ENDCHK + JP Z,CW + CALL CH2CH +CIRCL4: TESTX 'O' + CALL TESTX + DEFB 'O' + ENDM + SCF + JR +3 +CW: XOR A + PUSH HL + PUSH AF + LD HL,KK + LD DE,SK + CALL SUB + CALL LDIR5 + LD A,(KK) + OR A + LD B,0 + JR Z,CW2 ;KK=SK + LD HL,KK+1 + RES 7,M + DEC HL ;HL:= ABS(KK-SK) + LD DE,FLTPAI + CALL CMP + LD B,1 + JR C,CW2 ; ABS() < PI + LD DE,FLT2PI + CALL CMP + LD B,2 + JR C,CW2 ; PI <= ABS() < 2*PI + LD B,3 ;2*PI <= ABS() +CW2: LD A,(SK+1) + AND 80H + OR B + LD B,A + POP AF ;CF='O' + LD A,B + EXX +CW.XS: LD DE,0 ;Start X +CW.YS: LD HL,0 ;Start Y +CW.H: LD BC,0 ;HIRITU + EXX +CW.XE: LD DE,0 ;End X +CW.YE: LD HL,0 ;End Y +CW.R: LD IX,0 ;R + SVC .CIRCL + RST 3 + DEFB .CIRCL + ENDM + POP HL + + OR A + RET +; +HIRIT: CALL IDEEXP + CALL PUSHR + LD HL,(INTFAC) + INC HL + BIT 7,M + JP NZ,ER03 + DEC HL + LD DE,FLONE + CALL CMP + RET Z + LD A,1 + JR C,HI + LD HL,FLONE + LD DE,CIRW3 + PUSH DE + CALL LDIR5 + POP HL + LD DE,(INTFAC) + CALL DIV + LD A,2 +HI: LD (CW.H+1),A + LD DE,256DT + CALL MUL + LD DE,0.5DT + CALL ADD + CALL HLFLT + LD A,L + LD (CW.H+2),A + BIT 0,H + RET Z + XOR A + LD (CW.H+1),A + RET +; +STX: PUSH IX + PUSH IY + CALL IDEEXP + POP DE ;KK/SK + POP IX + PUSH HL + PUSH IX + LD HL,(INTFAC) + CALL LDIR5 + LD HL,(INTFAC) + LD DE,HL + REP5 INC,DE + INC DE + INC DE + INC DE + INC DE + INC DE + ENDM + CALL LDIR5 + CALL COS ;HL=(INTFAC)+5 + LD DE,CIR.R + CALL MUL + CALL STXSUB + + LD HL,(INTFAC) + CALL SIN + LD DE,CIR.R + CALL MUL + CALL NEG + CALL STXSUB + POP IX + POP HL + RET +; +STXSUB: INC HL + BIT 7,M + PUSH AF + RES 7,M + DEC HL + LD DE,0.5DT + CALL ADD + POP AF + INC HL + JR Z,+4 + SET 7,M + DEC HL + CALL HLFLT + EX DE,HL + POP HL ;RET ADRS + EX (SP),HL ;Save coordinate + LD M,E + INC HL + LD M,D + INC HL + INC HL + EX (SP),HL + JP (HL) +; +; +;CIRCLE WORK AREA PART-2 +; +CIR.R: DEFS 5 +; +CIRW3: DEFS 5 +; +256DT: DEF5 89,00,00,00,00 + DEFW 0089H + DEFW 0000H + DEFB 00H + ENDM +0.5DT: DEF5 80,00,00,A7,C6 + DEFW 0080H + DEFW A700H + DEFB C6H + ENDM +; +KK: DEFS 5 +SK: DEFS 5 +; +; SYMBOL command +; +DIRARE: EQU 27D0H +; +SMBOL: ENT + + CALL COORD0 ;position load + SVC .POSSV ;position input + RST 3 + DEFB .POSSV + ENDM + CALL HCH2CH +;string pointer load + CALL STREXP +;string zero check + LD A,B + OR A + PUSH BC + PUSH HL + LD C,B + LD B,0 + LD HL,DIRARE + EX DE,HL + JR Z,SMBL2 + LDIR ;string data xfer +SMBL2: POP HL + CALL HCH2CH + CALL IBYTE ;yoko bairitsu + LD A,D + OR E + JR Z,ERJP3 ;zero error + PUSH DE + CALL HCH2CH + CALL IBYTE ;tate bairitsu + LD A,D + OR E +ERJP3: JP Z,ER03 ;zero error + LD A,E + POP DE + LD D,A + CALL ENDCHK ;end check + PUSH DE + JR Z,SMBL1 + CALL HCH2CH + CALL IBYTE ;angle load + LD A,3 + CP E + JP C,ER03 + LD A,E + DEFB 06H +SMBL1: XOR A + POP DE + POP BC + LD C,A ;angle push + LD A,B ;string length + OR A + RET Z ;zero return + LD A,C ;angle pop + PUSH HL + EX DE,HL + LD DE,DIRARE + SVC .SYMBL + RST 3 + DEFB .SYMBL + ENDM + POP HL + + RET +; + SKP H + +; +;;;;;;;;;;;;;; +; +; HCOPY 1/2/3 +; CLS 1/2/3 +; +HCOPY: ENT + CALL ENDZ + PUSH HL + LD A,00H ;ASAHI modify + SVC .HCPY + RST 3 + DEFB .HCPY + ENDM + POP HL + RET +; +CLS: ENT + CALL ENDZ + PUSH HL + SVC .CLS + RST 3 + DEFB .CLS + ENDM + POP HL + RET +; + END diff --git a/software/asm/mz-xz009/H-CMT.ASM b/software/asm/mz-xz009/H-CMT.ASM new file mode 100644 index 0000000..5b7b0a6 --- /dev/null +++ b/software/asm/mz-xz009/H-CMT.ASM @@ -0,0 +1,910 @@ +; ----------------------------- +; PLE-monitor CMT-driver +; FI:M-CMT ver 0.1 6.05.84 +; ----------------------------- +; + INCLD MACRO +; +$CMT: ENT + DEFW $RS ;###diff Lx + DEFM "CMT" + DEFB 0 + DEFB 5FH ;Seq, W, R +$CMTF2: DEFB C0H ;CMT, 1OPN + DEFB 0 + DEFW CTINI ;INIT + DEFW CTRINF ;RO + DEFW CTWINF ;WO + DEFW .RET ;START + DEFW 256 ;Block/byte + DEFW CTRDAT ;INP + DEFW CTWDAT ;OUT + DEFW 0 ;DELETE + DEFW 0 ;WDIR + DEFW ER59 ;FREE +; +CTINI: TEST1 "T" ; Change EOF process + CALL TEST1 + DEFB "T" + ENDM + LD HL,$CMTF2 + SET ##EOFE,M ; Tape BASIC mode + RET Z + RES ##EOFE,M ; Disk BASIC mode + OR A + RET +; +CTWINF: CALL PUSHR + LD DE,IBUFE + LD A,M + LD C,5 + CP 2 ; BTX 2 ==> 5 + JR Z,CTWF2 + LD C,4 + CP 3 ; BSD 3 ==> 4 + JR Z,CTWF2 + LD C,A +; +CTWF2: LD A,C + LD (DE),A + INC HL + INC DE + LD BC,17 + LDIR + INC HL + INC HL + LD BC,6 + LDIR + LD B,128-24 + CALL ?CLRDE + LD HL,IBUFE + + LD BC,128 + CALL SAVE1 + JR CTWD9 +; +CTWDAT: CALL SAVE2 +; +CTWD9: JP C,BREAKX ; break! + RET ; ok! +;------------------------------- +; +; read inf +; ent HL:adrs +;------------------------------- +CTRINF: LD A,37H ; SCF + LD (CTRDAT),A + PUSH HL + LD HL,IBUFE + LD BC,128 + CALL LOAD1 + JR C,CTERR ; error or break + LD DE,FINMES ; "Found" + CALL FNMPRT ; ? file name + POP DE + LD A,(ZLOG) + OR A ; ROPEN or LOAD? + LD A,M + JP NZ,CTRI1 ; R + LD C,2 ; L BTX 5 ==> 2 + CP 5 + JR Z,CTRI2 +CTRI1: LD C,3 ; BSD 4 ==> 3 + CP 4 + JR Z,CTRI2 + LD C,A + SUB 2 + CP 2 + JP C,ER61 ; file mode error! +; +CTRI2: LD A,C + LD (DE),A + INC HL + INC DE + LD BC,17 + LDIR + XOR A + LD B,2 + CALL ?CLRDE + LD BC,6 + LDIR + LD B,32-18-2-6 + JP ?CLRDE +;---------------------------------- +; +; read data +; ent HL:adrs +; BC:byte size +;---------------------------------- +CTRDAT: XOR A ; XOR A / SCF + JR NC,CTRD2 + LD A,AFH ;XOR A + + LD (CTRDAT),A + PUSH HL ; first time only + LD HL,ELMD + LD DE,LDNGMS ; "Loading" + CALL FNMPRT ; ? file name + POP HL +; +CTRD2: CALL LOAD2 + RET NC ; ok! +; +CTERR: CP 2 + JP NZ,BREAKX ; break! + LD A,70+80H + JP ERRORJ ; error! +;----------------------------------- +; +; CMT SAVE +; +;----------------------------------- +SAVE1: ENT ; Inf. + LD A,CCH + JR SAVE3 +; +SAVE2: ENT ; Data + LD A,53H +; +SAVE3: LD (SPSV+1),SP ;;; + LD SP,IBUFE ;;; + PUSH DE + LD E,A + LD D,D7H ; 'W'=Dreg. + LD A,B + OR C + JR Z,RET1 + CALL CKSUM ; check sum set + CALL MOTOR ; motor on + JR C,WRI3 ; break! + LD A,E + CP CCH + JR NZ,WRI2 ; write Data + PUSH DE + LD DE,WRTMES ; "Writing" + CALL FNMPRT ; ? file name + POP DE +; +WRI2: DI + CALL GAP ; write gap + CALL NC,WTAPE ; write Inf. or Data +; +WRI3: DI + CALL MSTOP ; motor off +; +RET1: POP DE +; +SPSV: LD SP,0 ;xxx + PUSH AF + SVC .EI + RST 3 + DEFB .EI + ENDM + + POP AF + RET +;-------------------------------- +; +; CMT LOAD +; +;-------------------------------- +LOAD1: ENT ; Inf. + LD A,CCH + JR LOAD3 +; +LOAD2: ENT ; Data + LD A,53H +LOAD3: LD (SPSV+1),SP ;;; + LD SP,IBUFE ;;; + PUSH DE + LD D,D2H ; 'L'->Dreg + LD E,A + LD A,B + OR C + JR Z,RET1 + CALL MOTOR ; motor on + DI + CALL NC,TMARK ; read gap & tape mark + CALL NC,RTAPE ; read Inf. or Data + JR WRI3 +;------------------------------------- +; +; CMT VERIFY +; +;------------------------------------- +CMTVRF: ENT ; Data + PUSH HL + LD DE,VFNGMS ; "Verifying" + LD HL,ELMD + CALL FNMPRT ; ? file name + POP HL + CALL LOAD?2 + RET NC ; ok! + CP 2 + JP NZ,BREAKX ; break! + LD A,3+80H + JP ERRORJ ; error! +; +LOAD?2: ENT + LD (SPSV+1),SP ;;; + LD SP,IBUFE ;;; + PUSH DE + LD D,D2H + LD E,53H + LD A,B + OR C + JR Z,RET1 + CALL CKSUM ; check sum set + CALL MOTOR ; motor on + DI +; + CALL NC,TMARK ; read gap & tape mark + CALL NC,TVRFY ; verify + JR WRI3 + +;---------------------------------------- +; motor on +; exit CF=0:ok +; CF=1:break +;---------------------------------------- +MOTOR: CALL PUSHR + SVC .DI + RST 3 + DEFB .DI + ENDM + LD A,F8H + OUT (LSD0),A ; break set + LD B,10 +; +MOT1: IN A,(LSD2) + AND 10H + JR Z,MOT4 +; +MOT2: LD B,FFH ; 2sec delay +; +MOT3: CALL DLY7 ; 7ms delay + DJNZ MOT3 ; motor entry adjust + XOR A ; CF=0 + RET +; +MOT4: LD A,6 + OUT (LSD3),A + INC A + OUT (LSD3),A + DJNZ MOT1 + LD A,(CMTMSG) + OR A + JR NZ,MOT6 + SVC .CR2 + RST 3 + DEFB .CR2 + ENDM + LD A,7FH ; Play mark + SVC .CRT1X + RST 3 + DEFB .CRT1X + ENDM + LD A," " + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + LD A,D + CP D7H ; 'W' + LD DE,RECMES ; "RECORD." + JR Z,MOT5 ; write + LD DE,PLYMES ; "PLAY" +; +MOT5: SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + SVC .CR2 + RST 3 + DEFB .CR2 + + ENDM +; +MOT6: IN A,(LSD2) + AND 10H + JR NZ,MOT2 + IN A,(LSD1) + AND 80H + JR NZ,MOT6 + SCF ; CF=1,break! + RET +;----------------------------------- +; +; write tape +; +; in BC=byte size +; HL=adr. +; +; exit CF=0:ok. +; CF=1:break +;----------------------------------- +WTAPE: PUSH DE + PUSH BC + PUSH HL + LD D,2 ; repeat set + LD A,F8H + OUT (LSD0),A ; break set +; +WTAP1: LD A,M + CALL WBYTE ; 1 byte write + IN A,(LSD1) + AND 80H ; break check + SCF + JR Z,RTP5 ; break! + INC HL + DEC BC + LD A,B + OR C + JR NZ,WTAP1 + LD HL,(SUMDT) ; check sum write + LD A,H + CALL WBYTE ; high + LD A,L + CALL WBYTE ; low + CALL LONG + XOR A + DEC D + JR Z,RTP5 ; ok! + LD B,A ; Breg=256 +; +WTAP2: CALL SHORT ; write short 256 + DJNZ WTAP2 + POP HL + POP BC + PUSH BC + PUSH HL + JR WTAP1 ; repeat +;------------------------------------- +; +; read tape +; + +; in BC=byte size +; HL=load adr. +; +; exit CF=0:ok +; CF=1,Acc=2:error +; else:break +;------------------------------------- +RTAPE: PUSH DE + PUSH BC + PUSH HL + LD D,2 ; repeat set +; +RTP1: CALL EDGE ; edge search:(49c) + JR C,RTP5 ; break!:7c +; reading point search + CALL DLY3 ; 17c (1232c) + IN A,(LSD2) + AND 20H + JR Z,RTP1 ; again + LD HL,0 + LD (SUMDT),HL + POP HL + POP BC + PUSH BC + PUSH HL +; +RTP3: CALL RBYTE ; 1 byte read + JR C,RTP5 ; error! + LD M,A ; data->(mem.) + INC HL + DEC BC + LD A,B + OR C + JR NZ,RTP3 + LD HL,(SUMDT) ; check sum + CALL RBYTE ; high + JR C,RTP5 ; error! + CP H + JR NZ,RTP6 ; error! + CALL RBYTE ; low + JR C,RTP5 ; error! + CP L + JR NZ,RTP6 ; error! +; +RTP4: XOR A +; +RTP5: POP HL + POP BC + POP DE + RET +; +RTP6: DEC D + JR NZ,RTP1 ; repeat +; +VFERR: LD A,2 ; error + SCF + JR RTP5 +;------------------------------------- +; +; verify tape + +; +; in BC=byte size +; HL=adr. +; +; exit CF=0:ok +; CF=1,Acc=2:error +; else:break +;------------------------------------- +TVRFY: PUSH DE + PUSH BC + PUSH HL + LD D,2 ; repeat set +; +TVF1: CALL EDGE ; edge search:(49c) + JR C,RTP5 ; break!:7c +; reading point search + CALL DLY3 ; 17c (1232c) + IN A,(LSD2) + AND 20H + JR Z,TVF1 ; again + POP HL + POP BC + PUSH BC + PUSH HL +; +TVF2: CALL RBYTE ; 1 byte read + JR C,RTP5 ; error! + CP M ; CP A.(mem.) + JR NZ,VFERR ; verify error! + INC HL + DEC BC + LD A,B + OR C + JR NZ,TVF2 + LD HL,(CSMDT) ; Check sum. + CALL RBYTE ; high + JR C,RTP5 ; error! + CP H + JR NZ,VFERR ; error! + CALL RBYTE ; low + JR C,RTP5 ; error! + CP L + JR NZ,VFERR ; error! + DEC D + JR NZ,TVF1 ; repeat + JR RTP4 ; ok! +; +RECMES: DEFM 'RECORD.' + +PLYMES: DEFM 'PLAY' + DEFB 0 +;-------------------------------------- +; +; file name print +;-------------------------------------- +FNMPRT: LD A,(CMTMSG) + OR A + RET NZ + SVC .CR2 + RST 3 + + DEFB .CR2 + ENDM + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + PUSH HL + INC HL + LD A,'"' + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + LD D,16 +; +FNMLP: LD A,M + CP 0DH + JR Z,FNMLE + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + INC HL + DEC D + JR NZ,FNMLP +; +FNMLE: LD A,'"' + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + SVC .CR2 + RST 3 + DEFB .CR2 + ENDM + POP HL + RET +; +WRTMES: DEFM 'WRITING ' + + + DEFB 0 +FINMES: DEFM 'FOUND ' + + + DEFB 0 +LDNGMS: DEFM 'LOADING ' + + + DEFB 0 +VFNGMS: DEFM 'VERIFYING ' + + + DEFB 0 +; +; +;----------------------------------------- +; +; tape format +; + +; +; <460us><496us><240us> <264us> +; b b b b b b +; gxxxxxx° gxx° gxx° g +; xxxxxt b hxxxxxxt hxxt hxxt +; b b b b +; b b b b +; / / / / / / +; ! ! Read point! ! Read point +; ! 368us ! 368us +; Read edge Read edge +; +;----------------------------------------- +; +; Information format : Data format +; : +; * gap : * gap +; short 10 sec : short 5 sec +; (22000) : (11000) +; * tape mark : * tape mark +; long 40 : long 20 +; short 40 : short 20 +; * long 1 : * long 1 +; * Information : * Data +; block : block +; (128 bytes) : (???? bytes) +; * check sum : * check sum +; (2 bytes) : (2 bytes) +; * long 1 : * long 1 +; * short 256 : * short 256 +; * Information : * Data +; block : block +; (128 bytes) : (???? bytes) +; * check sum : * check sum +; (2 bytes) : (2 bytes) +; * long 1 : * long 1 +; +;----------------------------------------- +; +; +; EDGE (tape data edge search) +; (85c+111c)/4= 49 clock +; +; exit CF=0:ok +; CF=1:break +; +EDGE: LD A,F8H + OUT (LSD0),A ; break set + NOP +; +EDG1: IN A,(LSD1) + AND 81H ; shift & break + JR NZ,EDG2 + SCF + RET +; +EDG2: IN A,(LSD2) ; 11c + AND 20H ; 7c + JR NZ,EDG1 ; CSTR D5=0: 7c/12c +; + +EDG3: IN A,(LSD1) ; 11c + AND 81H ; 7c + JR NZ,EDG4 ; 7c/12c + SCF + RET +; +EDG4: IN A,(LSD2) ; 7c + AND 20H ; 7c + JR Z,EDG3 ; CSTR D5=1: 7c/12c + RET ; 10c +;-------------------------------------- +; +; 1 byte read +; +; exit SUMDT=Store +; CF=1:break +; CF=0:data=Acc +;-------------------------------------- +RBYTE: PUSH DE + PUSH BC + PUSH HL + LD HL,0800H ; 8 repeat set +; +RBY1: CALL EDGE ; edge search:(49c) + JP C,TM4 ; break!:7c +; reading point search:17c(1232c) + CALL DLY3 ; 17c (1232c) + IN A,(LSD2) ; data read + AND 20H ; CF=0 + JP Z,RBY2 ; again + PUSH HL + LD HL,(SUMDT) ; check sum set + INC HL + LD (SUMDT),HL + POP HL + SCF ; CF=1 +; +RBY2: LD A,L + RLA ; rotate left + LD L,A + DEC H + JP NZ,RBY1 ; repeat + CALL EDGE + LD A,L + JR TM4 ; ok! +;------------------------------------- +; +; 1 byte write +; in Acc=data +;------------------------------------- +WBYTE: PUSH BC + LD B,8 ; 8 repeat set + CALL LONG ; write long +; +WBY1: RLCA ; rotate left + CALL C,LONG ; 'H' long + CALL NC,SHORT ; 'L' short + DEC B + JP NZ,WBY1 ; repeat + POP BC + + RET +;------------------------------------- +; +; tape mark read +; +; in E=CCH:Inf. long40,short40 +; else:Data long20,short20 +; +; exit CF=0:ok +; CF=1:break +; +;------------------------------------- +TMARK: CALL GAPCK +; + PUSH DE + PUSH BC + PUSH HL + LD HL,2828H ; H=40,L=40 + LD A,E + CP CCH ;'L' + JR Z,TM0 + LD HL,1414H ; H=20,L=20 +; +TM0: LD (TMCNT),HL +; +TM1: LD HL,(TMCNT) +; +TM2: CALL EDGE ; edge search:(49c) + JR C,TM4 ; break!:7c +; reading point search:17c(1232c) + CALL DLY3 ; 17c (1232c) + IN A,(LSD2) + AND 20H + JR Z,TM1 ; again + DEC H + JR NZ,TM2 +; +TM3: CALL EDGE ; edge search:(49c) + JR C,TM4 ; break!:7c +; reading point search:17c(1232c) + CALL DLY3 ; 17c (1232c) + IN A,(LSD2) + AND 20H + JR NZ,TM1 ; again + DEC L + JR NZ,TM3 + CALL EDGE +; +TM4: POP HL +; +TM5: POP BC + POP DE + RET +;------------------------------------ +; +; check sum set +; +; in BC=byte size +; HL=adr. +; + +; exit SUMDT=store +; CSMDT=store +;------------------------------------ +CKSUM: PUSH DE + PUSH BC + PUSH HL + LD DE,0 +; +CKS1: LD A,B + OR C + JR NZ,CKS2 + EX DE,HL + LD (SUMDT),HL + LD (CSMDT),HL + JR TM4 ; ret +; +CKS2: LD A,(HL) + PUSH BC + LD B,8 ; 8 bits +; +CKS3: RLCA ; rotate left + JR NC,CKS4 + INC DE +; +CKS4: DJNZ CKS3 + POP BC + INC HL + DEC BC + JR CKS1 +;-------------------------------------- +; +; gap + tape mark +; +; in E=CCH:short gap (10 sec) +; else:short GAP ( 5 sec) +;-------------------------------------- +GAP: PUSH DE + PUSH BC + LD A,E + LD BC,55F0H ; Inf. 22000(10 sec) + LD DE,2828H ; short40,long40 + CP CCH ;'L' + JP Z,GAP1 + LD BC,2AF8H ; Data 11000( 5 sec) + LD DE,1414H ;short20,long20 +; +GAP1: CALL SHORT ; write short + DEC BC + LD A,B + OR C + JR NZ,GAP1 +; +GAP2: CALL LONG ; write long + DEC D + JR NZ,GAP2 +; +GAP3: CALL SHORT ; write short + DEC E + JR NZ,GAP3 + CALL LONG + + JR TM5 +;----------------------------------------- +; +; GAP check +; (long100 search) +;----------------------------------------- +GAPCK: PUSH DE + PUSH BC + PUSH HL +; +GAPCK1: LD H,100 ; 100 repeat set +; +GAPCK2: CALL EDGE ; edge search:(49c) + JR C,TM4 ; error!:7c + CALL DLY3 ; reading point search:17c(1232c) + IN A,(LSD2) + AND 20H + JR NZ,GAPCK1 ; again + DEC H + JR NZ,GAPCK2 + JR TM4 +;---------------------------------------- +; +; SHORT AND LONG PULSE FOR 1 BIT WRITE +;---------------------------------------- +SHORT: PUSH AF ; 11c + LD A,03H ; 7c + OUT (LSD3),A ; 11c + CALL DLY1 ; 17c (408c) + CALL DLY1 ; 17c (408c) + LD A,02H ; 7c + OUT (LSD3),A ; 11c + CALL DLY1 ; 17c (408c) + CALL DLY1 ; 17c (408c) + POP AF ; 10c + RET ; 10c +; +; +LONG: PUSH AF ; 11c + LD A,03H ; 7c + OUT (LSD3),A ; 11c + CALL DLY4 ; 17c (1704c) + LD A,02H ; 7c + OUT (LSD3),A ; 11c + CALL DLY4 ; 17c (1704c) + POP AF ; 10c + RET ; 10c +;---------------------------------------- +; +; MOTOR STOP +;---------------------------------------- +MSTOP: PUSH AF + PUSH BC + PUSH DE + LD B,10 +; +MST1: IN A,(LSD2) ; motor check + AND 10H + JR Z,MST3 ; ok + LD A,06H ; motor off + + OUT (LSD3),A + INC A + OUT (LSD3),A + DJNZ MST1 +; +MST3: POP DE + POP BC + POP AF + RET +;------------------------------------------- +; +; 7.046 ms delay ... 24989c +;------------------------------------------- +DLY7: ENT + PUSH BC ; 11c + LD B,20 ; 7c +; +DLY.7: CALL DLY3 ; 17*19+17 (23332c) + CALL DLY0 ; 17*19+17 ( 226c) + DJNZ DLY.7 ; 13*19+8 + POP BC ; 10c + RET ; 10c +;------------------------------------------- +; +; 14 clock delay +;------------------------------------------- +DLY0: NOP ; 4c + RET ; 10c +;------------------------------------------- +; +; 347.4 us delay ... 1232c +;------------------------------------------- +DLY3: NOP ; 4c + LD A,76 ; 7c +; +DLYA: DEC A ; 4*XX+4 + JR NZ,DLYA ; 12*XX+7 + RET ; 10c +;----------------------------------- +; +; Delay for short. +; 115.0 us delay ... 408c +;----------------------------------- +DLY1: ENT + LD A,24 ; 7c + JR DLYA ; 12c +;----------------------------------- +; +; Delay for long. +; 480.4 us delay ... 1704c +;----------------------------------- +DLY4: ENT + LD A,105 ; 7c + JR DLYA ; 12c +; + END diff --git a/software/asm/mz-xz009/H-FD.ASM b/software/asm/mz-xz009/H-FD.ASM new file mode 100644 index 0000000..e2cf427 --- /dev/null +++ b/software/asm/mz-xz009/H-FD.ASM @@ -0,0 +1,74 @@ +; ---------------------------- +; PL-monitor FD dummy +; FI:DMY-FD ver 003 3.28.84 +; ---------------------------- +; + INCLD MACRO +; +; +$FD: ENT + DEFW $QD + DEFB 0 +; +CLX: ENT ;dummy routines +DUST: ENT +FLOFF: ENT +FREEX: ENT +INREC: ENT +INX1B: ENT +LD.DIR: ENT +LDX: ENT +LOPX: ENT +OPX: ENT +PRREC: ENT +PRX1B: ENT +RECST: ENT +SVX: ENT + OR A + RET +; +FLOCK: ENT +FSWAP: ENT + JP ER59 + SKP H + +; +; SVC .DELET +; +FDELET: ENT + CALL PUSHR + LD HL,(ZDELT) ;SEQ + LD A,L + OR H + JR Z,FREN2 + PUSH HL + SVC .LOPEN + RST 3 + DEFB .LOPEN + ENDM + LD A,2 + LD (ZRWX),A + CALL ?OPEND + JR FREN4 +; +; SVC .RENAM +; +FRENAM: ENT + CALL PUSHR + LD HL,(ZWDIR) + LD A,L + OR H +FREN2: JP Z,ER59 + PUSH HL + SVC .LOPEN + RST 3 + DEFB .LOPEN + ENDM + LD HL,ELMD + CALL SETFNAM + LD HL,200H + LD (ZLOG),HL + CALL SERFLW ;check already exist +FREN4: POP IX + JP IOCALL + END diff --git a/software/asm/mz-xz009/H-QD.ASM b/software/asm/mz-xz009/H-QD.ASM new file mode 100644 index 0000000..cd4d97e --- /dev/null +++ b/software/asm/mz-xz009/H-QD.ASM @@ -0,0 +1,1410 @@ +; ---------------------------- +; MZ-800 Monitor QD driver +; FI:M-QD ver 0.2A 9.5.84 +; ---------------------------- +; + INCLD MACRO +; +; +; +$QD: ENT + DEFW $USR + DEFM "QD" + DEFW 0 + DEFB 5FH ;Seq, W, R + DEFB 40H ;1OPN + DEFB 32 ;Max dir + DEFW Q.INI + DEFW Q.RINF + DEFW Q.WINF + DEFW Q.ON + DEFW 1024 + DEFW Q.RDAT + DEFW Q.WDAT + DEFW 0 ;DELETE + DEFW 0 ;WRDIR + DEFW Q.FREE +; +; +Q.FREE: XOR A + SCF + RET +; +; +Q.INI: RET C + TEST1 "Y" + CALL TEST1 + DEFB "Y" + ENDM + JR Z,Q.INI2 + OR A + JP NZ,ER03 + CALL OKYN +Q.INI2: CALL Q.RDY + RET C + SVC .DI + RST 3 + DEFB .DI + ENDM + LD C,2 + JR QDIOX + SKP H + +; +; Dir search start +; +Q.ON: OR A + JR NZ,QDOFF + SVC .DI + RST 3 + DEFB .DI + ENDM + XOR A + LD (FNUPS),A ;KILL # + LD C,5 + CALL QDIOR + LD BC,1 +; +QDIOR: LD (QDPC),HL + LD (QDPE),DE + LD HL,QDPB + LD M,B + DEC HL + LD M,C + JR QDIO +; +QDOFF: ENT + CALL PUSHR + LD C,6 + JR QDIOX +; +; Read inf +; ent HL:adrs +; +Q.RINF: LD BC,3 + LD DE,64 + CALL QDIOR + RET NC + CP 40 ;not found + SCF + RET NZ + LD A,0 + RET +; +; Read data +; ent HL:buffer adars +; BC:byte size +; +Q.RDAT: SVC .DI + RST 3 + DEFB .DI + ENDM + LD DE,BC + LD BC,0103H +; +QDIOX: CALL QDIOR + SVC .EI + RST 3 + DEFB .EI + ENDM + RET + SKP H + +; +; Write inf +; +Q.WINF: LD A,37H ;SCF + LD (Q.WD1),A +Q.RDY: LD BC,0101H + JR QDIOR +; +; Write data +; +Q.WDAT: PUSH AF + SVC .DI + RST 3 + DEFB .DI + ENDM +Q.WD1: XOR A ;XOR A / SCF + JR NC,Q.WD2 + LD A,AFH ;XOR A + LD (Q.WD1),A + CALL SERFLW ;First time only + LD (QDPG),HL + LD HL,ELMD + LD DE,64 + POP AF + JR Q.WD3 +; +Q.WD2: LD (QDPG),HL + POP AF + SET 0,A +Q.WD3: LD (QDPI),BC + LD B,A + LD C,4 + JR QDIOX +; +; +;QD WORK +; +; +QDTBL: ENT +QDPA: ENT + DEFB 0 +QDPB: ENT + DEFB 0 +QDPC: ENT + DEFW 0 +QDPE: ENT + DEFW 0 +QDPG: ENT + DEFW 0 +QDPI: ENT + DEFW 0 +; +HDPT: ENT + DEFB 0 +HDPT0: ENT + DEFB 0 +; +FNUPS: DEFB 0 +FNUPS1: DEFB 0 +FNUPF: DEFB 0 + +; +FNA: ENT + DEFB 0 +FNB: ENT + DEFB 0 +; +MTF: ENT + DEFB 0 +RTYF: ENT + DEFB 0 +SYNCF: ENT + DEFB 0 +; +RETSP: ENT + DEFW 0 +; +FMS: EQU EFFFH +; + SKP H + +; +;------------------------------ +; +; QDIO +; +;------------------------------ +; +; +QDIO: ENT + LD A,5 ;Retry 5 + LD (RTYF),A +; +RTY: DI + CALL QMEIN + EI + RET NC + PUSH AF + CP 40 + JR Z,RTY4 + CALL MTOF + LD A,(QDPA) + CP 4 ;Write ? + JR NZ,RTY3 + LD A,(FNUPF) + OR A + JR Z,RTY5 + XOR A ;FNUPF CLR + LD (FNUPF),A + LD A,(FNA) + PUSH HL ;RETSP <= SP-2 + LD (RETSP),SP + POP HL +; + DI + CALL QDSVFN + EI + JR C,RTY2 + CALL MTOF +; +RTY3: CP 3 ;Read ? + JR NZ,RTY5 + LD HL,HDPT + DEC (HL) +; +RTY5: POP AF + PUSH AF + CP 41 + JR NZ,RTY2 +; + LD HL,RTYF + DEC (HL) + JR Z,RTY2 + POP AF + LD A,(FNUPS1) + LD (FNUPS),A + JR RTY +; +RTY2: CALL WRCAN + CALL QDHPC +RTY4: POP AF + + RET +; + SKP H + +; +QMEIN: LD (RETSP),SP + LD A,(QDPA) + DEC A + JR Z,QDRC ;Ready Check + DEC A + JR Z,QDFM ;Format + DEC A + JR Z,QDRD ;Read + DEC A + JP Z,QDWR ;Write + DEC A + JR Z,QDHPC ;Head Point Clear + JR MTOFX ;Motor Off +; +;------------------------- +; +; Head Point Clear +; +;------------------------- +; +QDHPC: ENT + PUSH AF + XOR A + LD (HDPT),A + POP AF + RET +; +;------------------------- +; +; Ready Check +; +;------------------------- +; +QDRC: ENT + LD A,(QDPB) + JP QREDY +; + SKP H + +; +;------------------------- +; +; Format +; +;------------------------- +; +QDFM: ENT + XOR A + CALL QDSVFN + CALL SYNCS2 + LD BC,FMS + LD A,AAH +; +QDFM1: CPL + LD D,A + CALL TRANS + DEC BC + LD A,B + OR C + JR Z,QDFM2 + LD A,D + JR QDFM1 +; +QDFM2: CALL EOM + CALL MTOF + CALL MTON + LD A,(FNB) + DEC A + JR NZ,FMERR + CALL SYNCL2 + LD BC,FMS + LD E,55H +QDFM3: CP E + JR NZ,FMERR + DEC BC + LD A,B + OR C + JR Z,QDFM4 + LD A,E + CPL + LD E,A + CALL RDATA + JR QDFM3 +; +QDFM4: CALL RDCRC +MTOFX: JP MTOF +; +FMERR: LD A,41 ;Hard Err + SCF + RET +; + SKP H + +; +;------------------------- +; +; Read +; +;------------------------- +; +QDRD: ENT + LD A,(MTF) + OR A + CALL Z,MTON + CALL HPS + RET C + CALL BRKC +; + CALL RDATA + LD C,A + CALL RDATA + LD B,A + OR C ;Byte size zero check + JP Z,QDWE1 + LD HL,(QDPE) ;Byte size check + SBC HL,BC + JP C,QDWE1 + LD HL,(QDPC) +; +;Block Data Read +; +BDR: CALL RDATA + LD (HL),A + INC HL + DEC BC + LD A,B + OR C + JR NZ,BDR + CALL RDCRC + LD A,(QDPB) + BIT 0,A + JR NZ,MTOFX + RET +; + SKP H + +; +;Head Point Search +; +HPS: ENT + LD HL,FNB + DEC (HL) + JR Z,HPNFE ;Not Found + CALL SYNCL2 + LD C,A ;BLKFLG => C reg + LD A,(HDPT) + LD HL,HDPT0 + CP (HL) ;Search ok ? + JR NZ,HPS1 + INC A ;HDPT count up + LD (HDPT),A + LD (HL),A ;HDPT0 count up + LD A,(QDPB) + XOR C + RRA + RET NC ;= +; +;Dummy read +; +DMR: CALL RDATA + LD C,A + CALL RDATA + LD B,A +; +DMR1: CALL RDATA + DEC BC + LD A,B + OR C + JR NZ,DMR1 + CALL RDCRC + JR HPS ;next +; +HPS1: INC (HL) + JR DMR +; +HPNFE: LD A,40 ;Not Found + SCF + RET +; + SKP H + +; +;------------------------- +; +; Write +; +;------------------------- +; +QDWR: ENT + LD A,(FNUPS) + LD (FNUPS1),A + LD A,(MTF) + OR A + JR NZ,QDWR1 + CALL MTON + LD A,(FNUPS) + LD HL,FNB + ADD A,(HL) + LD (FNB),A + INC A + LD (HDPT),A + CALL HPS + JP NC,QDWE1 ;Hard err +QDWR1: LD A,(QDPB) + LD B,A + AND 1 + JR NZ,QDWR2 + LD DE,QDPC + LD A,B + RES 2,A + CALL BDW + CALL BRKC +; +QDWR2: LD DE,QDPG + LD A,(QDPB) + SET 0,A + CALL BDW + CALL MTOF + CALL BRKC +; + LD A,(QDPB) + AND 4 + JR Z,NFNUP + LD A,(FNA) + LD HL,FNUPS + ADD A,(HL) + CALL QDSVFN + LD A,1 + LD (FNUPF),A +QDWR4: LD A,(FNA) + LD HL,FNUPS1 + ADD A,(HL) + INC A + LD (FNB),A + INC A + LD (HDPT),A + CALL HPS + JR NC,QDWE1 + LD A,(QDPB) + AND 1 + JR NZ,QDWR3 + + LD DE,QDPC + CALL BDV + RET C +QDWR3: LD DE,QDPG + CALL BDV + RET C + LD A,(FNUPF) + OR A + JR Z,QDWR5 +WRCAN: XOR A + LD (FNUPS),A + LD (FNUPF),A +; +QDWR5: JP MTOF +; +QDWE1: LD A,41 + SCF + RET +; +NFNUP: CALL MTON + JR QDWR4 +; +;Block Data Write +; +BDW: PUSH AF + LD HL,FNUPS + INC (HL) + CALL SYNCS2 + POP AF + CALL TRANS + CALL RSET + LD A,C + CALL TRANS + LD A,B + CALL TRANS +; +BDW1: LD A,(HL) + CALL TRANS + INC HL + DEC BC + LD A,B + OR C + JR NZ,BDW1 + JP EOM +; +;HL,BC SET +; +RSET: EX DE,HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + EX DE,HL + RET +; +;Block Data Verify +; + +BDV: CALL SYNCL2 + CALL RSET + CALL RDATA + CP C + JR NZ,QDWE1 + CALL RDATA + CP B + JR NZ,QDWE1 +; +BDV1: CALL RDATA + CP (HL) + JR NZ,QDWE1 + INC HL + DEC BC + LD A,B + OR C + JR NZ,BDV1 + JP RDCRC +; +; +; i/o port adrs +; +SIOAD: EQU F4H ; sio A data +SIOBD: EQU F5H ; sio B data +SIOAC: EQU F6H ; sio A control +SIOBC: EQU F7H ; sio B control +; +; +; +; Ready & Write protect +; Acc = '0' : Ready check +; Acc = '1' : & Write Protect +; +QREDY: ENT + LD B,A + LD A,02H ;SIO hard check + OUT (SIOBC),A + LD A,81H + OUT (SIOBC),A + LD A,02H + OUT (SIOBC),A + IN A,(SIOBC) + AND 81H + CP 81H + JP NZ,IOE50 ;Not ready + LD A,10H + OUT (SIOAC),A + IN A,(SIOAC) + LD C,A + AND 08H + JP Z,IOE50 ;Not ready + LD A,B + OR A + RET Z ;No err + LD A,C + AND 20H + RET NZ ;No err + JP IOE46 ;Write protect +; + SKP H + +; +; +; Write FN +; +QDSVFN: ENT + PUSH AF + LD HL,SIOSD + LD B,09H + CALL LSINT ;save init +; +SREDY: LD A,10H + OUT (SIOAC),A + IN A,(SIOAC) + AND 8 + JP Z,IOE50 ;Not ready + LD A,10H + OUT (SIOBC),A + IN A,(SIOBC) + AND 8 + JR Z,SREDY + LD BC,00E9H ;Wait 160ms + CALL TIMW + CALL SBRK ;Send Break + CALL SYNCS1 ;FN Only SYNC + POP AF + CALL TRANS ;FN=A + CALL EOM ;CRC FLAG(7EH) + JR FNEND +; +; +; +; MTON -- QD MOTOR ON +; READ FILE NUMBER +; READ &CHECK CRC,FLAG +; +MTON: ENT + LD HL,SIOLD + LD B,0BH + CALL LSINT ;load init +; +LREDY: LD A,10H + OUT (SIOAC),A + IN A,(SIOAC) + AND 8 + JP Z,IOE50 ;Not ready + CALL BRKC + LD A,10H + OUT (SIOBC),A + IN A,(SIOBC) + AND 8 + JR Z,LREDY + LD BC,00E9H ;Wait 160ms + CALL TIMW + CALL SYNCL1 ;LOAD SYNC + LD (FNA),A + INC A + LD (FNB),A + CALL RDCRC +FNEND: LD HL,SYNCF + SET 3,(HL) + + XOR A + LD (HDPT0),A + RET +; + SKP H + +; +; sio initial +; +; +LSINT: LD C,SIOAC + OTIR + LD A,05H + LD (MTF),A + OUT (SIOBC),A + LD A,80H + OUT (SIOBC),A + RET +; +; Motor off +; +MTOF: ENT + PUSH AF + LD A,05H + OUT (SIOAC),A + LD A,60H + OUT (SIOAC),A ;WRGT OFF,TRANS DISABLE + LD A,05H + OUT (SIOBC),A + XOR A + LD (MTF),A + OUT (SIOBC),A + POP AF + RET +; +; + SKP H + +; +; SYNCL1 -- LOAD F.N SYNC ONLY +; (SEND BREAK 110ms) +; SYNCL2 -- LOAD FIRST FILE SYNC +; (SEND BREAK 110ms) +; SYNCL3 -- LOAD FILES SYNC +; (SEND BREAK 002ms) +; +SYNCL2: ENT + LD A,58H + LD B,0BH + LD HL,SIOLD + CALL SYNCA + LD HL,SYNCF + BIT 3,(HL) + LD BC,3 ;WAIT 2ms + JR Z,TMLPL + RES 3,(HL) +SYNCL1: LD BC,00A0H ;WAIT 110ms +; +TMLPL: CALL TIMW + LD A,05H + OUT (SIOBC),A + LD A,82H + OUT (SIOBC),A + LD A,03H + OUT (SIOAC),A + LD A,D3H + OUT (SIOAC),A + LD BC,2CC0H ;loop 220ms +; +SYNCW0: LD A,10H + OUT (SIOAC),A + IN A,(SIOAC) + AND 10H + JR Z,SYNCW1 + DEC BC + LD A,B + OR C + JR NZ,SYNCW0 + JP IOE54 ;Un format +; +SYNCW1: LD A,03H + OUT (SIOAC),A + LD A,C3H + OUT (SIOAC),A + LD B,9FH ;loop 3ms +; +SYNCW2: LD A,10H + OUT (SIOAC),A + IN A,(SIOAC) + AND 01H + JR NZ,SYNCW3 + DEC B + JR NZ,SYNCW2 + JP IOE54 ;Un format +; +SYNCW3: LD A,03H + OUT (SIOAC),A + LD A,C9H + + OUT (SIOAC),A + CALL RDATA + JP RDATA +; +; +; +; SYNCS1 -- SAVE F.N SYNC +; (SEND BREAK 220ms) +; SYNCS2 -- SAVE FIRST FILE SYNC +; (SEND BREAK 220ms) +; SYNCS3 -- SAVE FILES SYNC +; (SEND BREAK 020ms) +; +SYNCS2: ENT + LD A,98H + LD B,09H + LD HL,SIOSD + CALL SYNCA + CALL SBRK +; + LD HL,SYNCF + BIT 3,(HL) + LD BC,001DH ;WAIT 20ms + JR Z,TMLPS + RES 3,(HL) +SYNCS1: LD BC,0140H ;WAIT 220ms +; +TMLPS: CALL TIMW + LD A,05H + OUT (SIOAC),A + LD A,EFH + OUT (SIOAC),A + LD BC,1 ;WAIT 0.7ms + CALL TIMW + LD A,C0H + OUT (SIOAC),A + LD A,A5H + JR TRANS +; +; +; +; SBRK -- SEND BREAK (00H) +; +SBRK: ENT + LD A,05H + OUT (SIOAC),A + LD A,FFH + OUT (SIOAC),A + RET +; +; +; +SYNCA: LD C,SIOAC + OUT (C),A + LD A,5 + OUT (SIOBC),A + LD A,80H + OUT (SIOBC),A + OTIR + RET + +; + SKP H + +; +; +; +; EOM -- End off message +; Save CRC#1,#2,FLAG +; File space check +; +; +EOM: ENT + LD BC,1 ;WAIT 0.7ms + CALL TIMW + LD A,10H + OUT (SIOBC),A + IN A,(SIOBC) + AND 8 + RET NZ + JP IOE53 ;NO file space +; +; RDCRC -- READ CRC & CHECK +; +RDCRC: ENT + LD B,3 +RDCR1: CALL RDATA + DJNZ RDCR1 +RDCR2: IN A,(SIOAC) + RRCA + JR NC,RDCR2 ; Rx Available + LD A,01H + OUT (SIOAC),A + IN A,(SIOAC) + AND 40H + JR NZ,IOE41 ;Hard err + OR A + RET +; + SKP H + +; +; Save 1 chr by Acc +; & ready check +; +TRANS: ENT + PUSH AF +TRA1: IN A,(SIOAC) + AND 4 ;TRANS buf null + JR Z,TRA1 + POP AF + OUT (SIOAD),A +NRCK: LD A,10H + OUT (SIOAC),A + IN A,(SIOAC) + AND 08H + JP Z,IOE50 ;Not ready + RET +; +; Read data (1 chr) +; +RDATA: ENT + CALL NRCK + IN A,(SIOAC) ;RR0 + RLCA + JR C,IOE41 ;Hard err + RRCA + RRCA + JR NC,RDATA + IN A,(SIOAD) + OR A + RET +; + SKP H + +; +; i/o err +; +IOE41: LD A,41 ;Hard err + DEFB 21H +IOE46: LD A,46 ;Write protect + DEFB 21H +IOE50: LD A,50 ;Not ready + DEFB 21H +IOE53: LD A,53 ;No file space + DEFB 21H +IOE54: LD A,54 ;Un format + LD SP,(RETSP) + SCF + RET +; +; +;--------------------------------- +; +; wait timer clock 3.54368MHz +; +; BC=001H= 0.7ms( 0.698ms) +; 003H= 2.0ms( 2.072ms) +; 01DH= 20.0ms( 19.929ms) +; 0A0H=110.0ms(109.899ms) +; 0E9H=160.0ms(160.036ms) +; 140H=220.0ms(219.787ms) +; +;--------------------------------- +; +TIMW: PUSH AF +TIMW1: LD A,150 ;MZ-1500=152 +TIMW2: DEC A + JR NZ,TIMW2 + DEC BC + LD A,B + OR C + JR NZ,TIMW1 + POP AF + RET +; + SKP H + +; +;-------------------------------- +; +; SIO CH A COMMAND CHAIN +; +; SIOLD -- LOAD INIT. DATA +; SIOSD -- SAVE INIT. DATA +; +;-------------------------------- +; +SIOLD: DEFB 58H ;CHANNEL RESET + DEFB 04H ;POINT WR4 + DEFB 10H ;X1 CLOCK + DEFB 05H ;POINT WR1 + DEFB 04H ;CRC-16 + DEFB 03H ;POINT WR3 + DEFB D0H ;ENTER HUNT PHASE +;Rx 8bits + DEFB 06H ;POINT WR6 + DEFB 16H ;SYNC CHR(1) + DEFB 07H ;POINT WR7 + DEFB 16H ;SYNC CHR(2) +; +SIOSD: DEFB 98H ;CHANNEL RESET +;Tx CRC Generator reset + DEFB 04H ;POINT WR4 + DEFB 10H ;X1 CLOCK + DEFB 06H ;POINT WR6 + DEFB 16H ;SYNC CHR(1) + DEFB 07H ;POINT WR7 + DEFB 16H ;SYNC CHR(2) + DEFB 05H ;POINT WR5 + DEFB 6DH ;Tx CRC ENABLE +; +; +; BREAK CHECK +; +BRKC: LD A,E8H + OUT (LSD0),A + NOP + IN A,(LSD1) + AND 81H + RET NZ + CALL WRCAN + JP BREAKX ;Can't CONT +; +; +; ----------------------------- +; MZ-800 monitor +; LDALL +; SVALL +; ver 0.1A 08.08.84 +; ----------------------------- +; +; RAM i/o port +; +RCADR: EQU EBH ;RAM file ctrl port +RDADR: EQU EAH ;RAM file data port +; +; RAM equ table + +; +RMLIM: EQU 0000H ;RAM file limit +RMADR: EQU 0002H ;RAM file usage +RMTOP: EQU 0010H ;RAM file top adrs +; +; LDAL,SVAL WORK +; +RMFRE: DEFW 0 +FAS: DEFW 0 +NFT: DEFW 0 ;1 File top +NBT: DEFW 0 ;1 Block top +; +FLAGF: DEFB 0 +FNUPB: DEFB 0 +; +BLKF: DEFB 0 +BLKSL: DEFB 0 +BLKSH: DEFB 0 +; +; SVC .LSALL +; ent A=0 ... LOAD ALL +; A=1 ... SAVE ALL +; +LSALL: ENT + CALL PUSHR + LD HL,LDALM + OR A + JR Z,+5 + LD HL,SVALM + LD (LSAL1+1),HL + SVC .CLRIO + RST 3 + DEFB .CLRIO + ENDM + CALL QDHPC + PUSH HL + LD (RETSP),SP + POP HL + XOR A + CALL QREDY + JR C,LSAL2 + LD A,5 ;max retry + LD (RTYF),A +LSAL3: SVC .DI + RST 3 + DEFB .DI + ENDM +LSAL1: CALL 0 ;xxx LDALM or SVALM + CALL MTOF + SVC .EI + RST 3 + DEFB .EI + ENDM + RET NC + CP 41 + JR NZ,LSAL2 + LD HL,RTYF + DEC M + JR NZ,LSAL3 + LD A,41 + +LSAL2: JP ERRORJ + SKP H + +; +; LDALL main roution +; +; +LDALM: LD (RETSP),SP + LD HL,RMLIM + CALL EMLD2 + DEC DE ;RMFRE-end point buffer + DEC DE ;end point buffer(2byte) + LD (RMFRE),DE ;RAM buffer MAX adrs + LD HL,RMADR + CALL EMLD2 + LD HL,RMTOP + OR A + SBC HL,DE + JP NZ,RMER ;RAM Not init + LD (NFT),DE ;first NFT set(0010H) + INC DE + INC DE + LD (NBT),DE ;first NBT set(0012H) + LD HL,FAS + LD M,0 ;1 file byte size clear + INC HL + LD M,0 + CALL MTON +; +LDALN: LD HL,FNB + DEC M + JP Z,LDEND + CALL SYNCL2 + LD (BLKF),A + CALL RDATA + LD (BLKSL),A + CALL RDATA + LD (BLKSH),A +; + LD HL,(BLKSL) + LD DE,(NBT) + ADD HL,DE ;NBT+Block size + JR C,LDALEE ;over + LD BC,2 + ADD HL,BC ;HL+BLKF+BLKS(H,L) +LDALEE: JP C,LDALE ;64K over + LD BC,(RMFRE) + SBC HL,BC ;usedadrs-maxused + JR Z,FBUF0 ;free just + JP NC,LDALE ;NTB+lodingsize+3>free +FBUF0: LD HL,BLKF + LD BC,3 + CALL EMSVD + EX DE,HL + LD DE,(BLKSL) + LD A,D ;size zero check + OR E + JP Z,IOE41 ;size zero error +; +; +LEQM: IN A,(SIOAC) + RLCA + JR C,LEQME + + RRCA + RRCA + JR NC,LEQM + IN A,(SIOAD) + LD C,RCADR + LD B,H + OUT (C),L + DEC C + OUT (C),A + INC HL + DEC DE + LD A,D + OR E + JR NZ,LEQM + CALL RDCRC + LD (NBT),HL + LD HL,(FAS) ;1 file all size + LD DE,(BLKSL) + ADD HL,DE + INC HL + INC HL + INC HL + LD (FAS),HL + LD A,(BLKF) + BIT 2,A + JR NZ,LDALO ;end block ? +; +LDALP: CALL BRKCHK + JP NZ,LDALN + JP BREAKZ +; +LDALO: LD DE,(NFT) + ADD HL,DE + INC HL + INC HL + LD (NFT),HL ;next NFT + PUSH HL + EX DE,HL + LD DE,(FAS) + CALL EMSV2 + LD HL,0 + LD (FAS),HL + POP HL + INC HL + INC HL + LD (NBT),HL + JR LDALP +; +LDEND: LD HL,(NFT) + LD DE,RMADR + EX DE,HL + CALL EMSV2 + EX DE,HL + NOP + LD DE,0 + CALL EMSV2 + RET +; +LDALE: CALL LDEND + LD A,53 + +LEQME: SCF + RET +; + SKP H + +; +; SVALL main roution +; +SVALM: LD (RETSP),SP + XOR A + LD (FNUPB),A + LD (FLAGF),A + LD (FNUPS),A + LD HL,RMTOP + CALL EMLD2 + LD A,D + OR E + RET Z ;RAM Not file +; + CALL MTON + LD A,(FNB) + DEC A + JP NZ,QDER ;QD Not init + LD HL,RMTOP +; +SVALN: CALL EMLD2 + LD (FAS),DE + LD A,D + OR E + JR Z,SVALQ + INC HL + INC HL +; +; +SVALO: PUSH HL + CALL SYNCS2 + POP HL + CALL EMLD1 + CALL TRANS + INC HL + CALL EMLD2 + LD (BLKSL),DE + LD A,E + CALL TRANS + LD A,D + CALL TRANS + INC HL + INC HL +SEQM: LD C,RCADR + LD B,H + OUT (C),L + DEC C + IN B,(C) +; +SEQM1: IN A,(SIOAC) + AND 4 + JR Z,SEQM1 + LD A,B + OUT (SIOAD),A + INC HL + DEC DE + LD A,D + OR E + JR NZ,SEQM +; + +; check EOM +; + LD BC,1 + CALL TIMW + LD A,10H + OUT (SIOBC),A + IN A,(SIOBC) + AND 8 + JR NZ,SEQM2 + LD A,53 + LD (FLAGF),A + JP SVALQ +; +SEQM2: PUSH HL + LD HL,FNUPS + INC M + CALL BRKCHK + JP Z,BREAKZ + LD HL,(FAS) + LD DE,(BLKSL) + LD BC,3 + XOR A + SBC HL,DE + SBC HL,BC + JR Z,SVALP + LD (FAS),HL + POP HL + JR SVALO +; +SVALP: POP HL + LD A,(FNUPS) + LD (FNUPB),A + JP SVALN +; + SKP H + +; +SVALQ: LD A,(FNUPB) + LD (FNUPS),A + CALL MTOF + CALL MTON + LD HL,RMTOP +; +SVALT: CALL EMLD2 + LD (FAS),DE + INC HL + INC HL +; +SVALR: LD A,(FNUPB) + DEC A + JP Z,SVALU + LD (FNUPB),A +; + PUSH HL + CALL SYNCL2 + POP HL + LD D,A + CALL EMLD1 + CP D + JR NZ,QDHER + INC HL + CALL EMLD2 + LD (BLKSL),DE + CALL RDATA + CP E + JR NZ,QDHER + CALL RDATA + CP D + JR NZ,QDHER + INC HL + INC HL +; +; +VEQM: IN A,(SIOAC) + RLCA + JR C,QDHER + RRCA + RRCA + JR NC,VEQM + IN A,(SIOAD) +; + LD C,RCADR + LD B,H + OUT (C),L + DEC C + IN B,(C) + CP B + JR NZ,QDHER + INC HL + DEC DE + LD A,D + OR E + JR NZ,VEQM + CALL RDCRC + PUSH HL + CALL BRKCHK + + JP Z,BREAKZ + LD HL,(FAS) + LD DE,(BLKSL) + LD BC,3 + XOR A + SBC HL,DE + SBC HL,BC + JR Z,SVALS + LD (FAS),HL + POP HL + JR SVALR +; +SVALS: POP HL + JR SVALT +; +SVALU: CALL MTOF + LD A,(FNUPS) + CALL QDSVFN + XOR A + LD (FNUPS),A + LD A,(FLAGF) + OR A + RET Z + SCF + RET +; +; +QDER: +RMER: LD A,54 + SCF + RET +; +QDHER: + LD A,41 + SCF + RET +; +; + END diff --git a/software/asm/mz-xz009/HLA b/software/asm/mz-xz009/HLA new file mode 100644 index 0000000..2cad21e --- /dev/null +++ b/software/asm/mz-xz009/HLA @@ -0,0 +1,39 @@ +# This viminfo file was generated by Vim 8.0. +# You may edit it if you are careful! + +# Viminfo version +|1,4 + +# Value of 'encoding' when this file was written +*encoding=utf-8 + + +# hlsearch on (H) or off (h): +~h +# Command Line History (newest to oldest): +:q +|2,0,1616620341,,"q" + +# Search String History (newest to oldest): + +# Expression History (newest to oldest): + +# Input Line History (newest to oldest): + +# Debug Line History (newest to oldest): + +# Registers: + +# File marks: +'0 1 0 /srv/dvlp/Projects/dev/github/tranZPUter/software/asm/MZ-XZ009/fgrep +|4,48,1,0,1616620341,"/srv/dvlp/Projects/dev/github/tranZPUter/software/asm/MZ-XZ009/fgrep" + +# Jumplist (newest first): +-' 1 0 /srv/dvlp/Projects/dev/github/tranZPUter/software/asm/MZ-XZ009/fgrep +|4,39,1,0,1616620341,"/srv/dvlp/Projects/dev/github/tranZPUter/software/asm/MZ-XZ009/fgrep" + +# History of marks within files (newest to oldest): + +> /srv/dvlp/Projects/dev/github/tranZPUter/software/asm/MZ-XZ009/fgrep + * 1616620340 0 + " 1 0 diff --git a/software/asm/mz-xz009/IOCS.ASM b/software/asm/mz-xz009/IOCS.ASM new file mode 100644 index 0000000..6eb64dd --- /dev/null +++ b/software/asm/mz-xz009/IOCS.ASM @@ -0,0 +1,1643 @@ +; -------------------------- +; MZ-800 BASIC IOCS command +; FI:IOCS ver 1.0B 9.20.84 +; Programed by T.Miho +; -------------------------- +; + INCLD MACRO +; +; +RUNRFL: EQU 11A4H ;KEYBUF label +BKEYBF: EQU 11A5H ;KEYBUF+1 label +; +; ZFLAG1 bit position +; +##RND: EQU 5 ;FD +##SEQ: EQU 6 ;CMT, QD, RAM +##STRM: EQU 7 ;CRT, KB, LPT, RS, USR +; +; ZRWX bit position +; +##ROPN: EQU 0 ;R.opened +##WOPN: EQU 1 ;W.opened +##XOPN: EQU 2 ;X.opened +##EOF: EQU 7 ;End of file +; +; +CMTLU: EQU 80H +LDALU: EQU 81H +CRTLU: EQU 88H +LPTLU: EQU 89H +DATLU: EQU 8AH +; +; +CRTLU?: LD A,(ZLOG) + CP CRTLU + RET +; +PRTEXP: ENT + CALL EXPR + LD A,(PRCSON) + CP 3 + PUSH HL + EX DE,HL + JR Z,PRTEX2 + CALL CVNMFL + POP HL + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + RET +PRTEX2: CALL CVTSDC + POP HL + RET + SKP H + +; +; PRINT command +; +PRINT: ENT + XOR A + LD (DISPX),A + CALL GETLU + SVC .LUCHK + RST 3 + DEFB .LUCHK + ENDM + JP C,ER44 ;not open + BIT 2,A ;X? + JP NZ,PRX + BIT 1,A ;W? + JP Z,ER59 ;can't exec + CALL LU2CH + CALL CRTLU? + JR NZ,PRT04 + LD A,(SELCOL) + LD (COL),A + TEST1 "[" + CALL TEST1 + DEFB "[" + ENDM + JR NZ,PRT04 + CALL COLCHK + LD (COL),A + TESTX "]" + CALL TESTX + DEFB "]" + ENDM +PRT04: CALL ENDCHK + JP Z,PRTCR +PRT10: LD A,M + CP E3H ;USING + JR Z,PRUSNG + LD BC,PRT20 + PUSH BC ;Return adrs + CP ";" + RET Z + CP "," + RET Z + CP E6H ;TAB + JR Z,PRTAB + CALL PRTEXP + JP PRTMS2 +; +PRT20: CALL ENDCHK + JP Z,PRTCR + CP "," + JR NZ,PRT30 + CALL CRTLU? + JR C,PRT25 + IOCALL ZPOS ;TAB10 + LD IX,(ZPOS) + CALL IOCALL + ENDM + LD B,A + SUB 10 + + JR NC,-2 + NEG + LD B,A + CALL PRTAB2 + JR PRT30 +PRT25: CALL PRTCR +PRT30: LD A,M + CP "," + JR Z,+4 + CP ";" + JR NZ,+3 + INC HL + CALL ENDCHK + RET Z + JR PRT10 +; +PRTAB: CALL CRTLU? + JP C,ER59 + CALL ICH28H + CALL IBYTE + CALL HCH29H + IOCALL ZPOS + LD IX,(ZPOS) + CALL IOCALL + ENDM + SUB E + RET NC + NEG + LD B,A + CALL CRTLU? + LD A,13H ;Cursor right + JR Z,+4 +PRTAB2: LD A," " + LD DE,BKEYBF + PUSH BC + PUSH DE + CALL ?SETDE + POP DE + POP BC + JR PRTMS2 + SKP 3 +; +PRUSNG: INC HL ;PRINT USING + CALL STREXP + LD A,B + OR A + JP Z,ER03 + PUSH HL + LD HL,BKEYBF + PUSH HL + PUSH BC + CALL LDHLDE + POP BC + LD A,F0H + LD E,B + LD D,0 + INC DE + + SVC .OPSEG + RST 3 + DEFB .OPSEG + ENDM + LD (USINGS),HL + LD (USINGP),HL + POP DE + CALL LDHLDE + LD M,0 + POP HL +PRUSG2: CALL ENDCHK + JR Z,PRUSG8 + INC HL + CP "," + JR Z,PRUSG4 + CP ";" + JP NZ,ER01 +PRUSG4: CALL ENDCHK + JR Z,PRUSG9 + CALL EXPRNX + PUSH HL + LD BC,(TMPEND) + PUSH BC + CALL USNGSB + POP DE + CALL PRTMSG + POP HL + JR PRUSG2 +PRUSG8: CALL PRTCR +PRUSG9: LD A,F0H + SVC .DLSEG + RST 3 + DEFB .DLSEG + ENDM + RET +; +; +.CR: DEFW 0DH ;FMP +PRTCR: ENT + LD DE,.CR +; +PRTMSG: ENT + SVC .COUNT ;print message + RST 3 + DEFB .COUNT + ENDM +PRTMS2: CALL CRTLU? + JR Z,PRTMC + SVC .PRSTR + RST 3 + DEFB .PRSTR + ENDM + RET +; +PRTMC: PUSH AF + LD A,(COL) + SVC .DCOL + RST 3 + DEFB .DCOL + ENDM + + POP AF + SVC .PRSTR + RST 3 + DEFB .PRSTR + ENDM + LD A,(SELCOL) + SVC .DCOL + RST 3 + DEFB .DCOL + ENDM + RET +; + SKP H + +; +; READ command +; +READ: ENT + LD A,DATLU + LD (ZLOG),A + JR INP10 +; +; INPUT command +; +INPUT: ENT ;INPUT command + CALL GETLU + SVC .LUCHK + RST 3 + DEFB .LUCHK + ENDM + JP C,ER44 ;not open + BIT 2,A ;X? + JP NZ,INX + BIT 0,A ;R? + JP Z,ER59 ;can't exec + CALL LU2CH + CALL CRTLU? + JR NZ,INP10 + CALL HLFTCH + CP '"' + LD DE,MEM?IN + LD B,2 + JR NZ,INP05 + CALL STREXP + TESTX ";" + CALL TESTX + DEFB ";" + ENDM +INP05: LD A,B + OR A + JR Z,INP10 +INP07: LD A,(DE) + INC DE + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + DJNZ INP07 +INP10: LD (INPSP+1),SP + LD DE,(VARED) + LD (TMPEND),DE +INP15: LD DE,(TMPEND) + CALL MEMECK + CALL INTGTV + PUSH AF + PUSH BC + CALL ENDCHK + JR Z,INP20 + CALL CH2CH + JR INP15 +; +ER44: LD A,44 ;not opened + DEFB 21H +ER59: LD A,59+80H ;can't exec + + JP ERRORJ +; +MEM?IN: DEFM "? " +; +; +INP20: XOR A + PUSH AF ;END=00 + PUSH HL + SVC .INSTT + RST 3 + DEFB .INSTT + ENDM + LD HL,(INPSP+1) + DEC HL +INP24: LD A,M + OR A + JR Z,INP30 + DEC HL + DEC HL + LD B,M + DEC HL + LD C,M + DEC HL + PUSH HL + PUSH AF ;Type + PUSH BC ;Adrs + LD DE,(TMPEND) + CALL INPMX + LD H,0 + LD L,B + ADD HL,DE + LD M,0 + POP DE ;Adrs + POP AF ;Type + CALL INSUB + POP HL + JR INP24 +INP30: POP HL +INPSP: LD SP,0 ;xxx + RET +; +INPMX: LD A,(ZLOG) + CP DATLU + JR Z,DATINP + SVC .INMSG + RST 3 + DEFB .INMSG + ENDM + RET + SKP H + +; +; +INSUB: CP 3 ;String ? + JR NZ,INSUB4 ; No + LD HL,(TMPEND) ; Yes + LD A,B + JP STRLET +; +INSUB4: PUSH DE + LD HL,(INTFAC) + LD DE,(TMPEND) + EX DE,HL + CALL HLFTCH + CP "E" + JP Z,ER03 + EX DE,HL + CALL CVFLAS + EX DE,HL + TEST1 0 + CALL TEST1 + DEFB 0 + ENDM + JP NZ,ER03 + EX DE,HL + POP DE + JP LDIR5 + SKP H + +; +; RESTORE command +; +RESTOR: ENT + XOR A + LD (DATFLG),A + CALL ENDCHK + CALL NZ,GETLIN + EX DE,HL + CALL NZ,DTSRCX + EX DE,HL + JP DATA ;ON RESTORE +; +DATINP: PUSH HL + PUSH DE + CALL DATINX + POP DE + POP HL + RET +; +DATIN0: LD HL,(TEXTST) + CALL DTSRCX +DATINX: LD A,(DATFLG) ;read flag + CP 1 ;0 is restore top + JP Z,ER24 ;1 is out of data + JR C,DATIN0 ;2 is ok + LD HL,(DATPTR) ;read pointer + LD C,":" + SVC .INDAT + RST 3 + DEFB .INDAT + ENDM + LD (DATPTR),HL ;read pointer + CALL ENDCHK + SCF + CCF + RET NZ + DEC HL +DTSRCH: CALL DTSKSB ;DATA search + OR A + JR NZ,DTSRC4 + INC HL +DTSRCX: LD A,M + INC HL + OR M + LD A,1 + JR Z,DTSRC9 + INC HL + INC HL + JR DTSRCH +DTSRC4: CP 94H ;DATA + JR NZ,DTSRCH + INC HL + LD (DATPTR),HL ;read pointer + LD A,2 +DTSRC9: LD (DATFLG),A ;read flag + RET + SKP H + +; +; GETLU ... interpret #n, /P, /T +; ent HL: pointer +; ext HL: pointer +; A: LU# +; +GETLU: ENT + TEST1 "#" + CALL TEST1 + DEFB "#" + ENDM + JR NZ,GETLU2 + CALL HLFTCH + CP 20H + JP NC,ER01 + PUSH DE + PUSH BC + LD DE,ZFAC + PUSH DE + CALL FACNUM + EX (SP),HL + CALL HLFLT + LD A,H + OR A + JP NZ,ER64 + OR L + JP Z,ER64 + JP M,ER64 + POP HL + POP BC + POP DE + RET +GETLU2: TEST1 FBH ;/ + CALL TEST1 + DEFB FBH + ENDM + LD A,CRTLU + RET NZ + TEST1 "P" + CALL TEST1 + DEFB "P" + ENDM + LD A,LPTLU + RET Z + TESTX "T" + CALL TESTX + DEFB "T" + ENDM + LD A,CMTLU + RET +; +; +LU2CH: LD A,(ZLOG) + OR A + RET M + JP HCH2CH + SKP H + +; +; DEFAULT "dev:" +; +DEFAULT:ENT + CALL DEVNAM + SVC .SETDF + RST 3 + DEFB .SETDF + ENDM + RET +; +; INIT "dev:command" +; +INIT: ENT + CALL ENDCHK + LD B,0 + CALL NZ,STREXP +; +INIT2: PUSH HL + SVC .DEVNM + RST 3 + DEFB .DEVNM + ENDM + SVC .FINIT + RST 3 + DEFB .FINIT + ENDM + POP HL + RET +; +; +; ROPEN, WOPEN, XOPEN +; +ROPEN: ENT + LD A,1 + DEFB 1 +WOPEN: ENT + LD A,2 + DEFB 1 +XOPEN: ENT + LD A,4 + PUSH AF + LD (ZRWX),A + CALL GETLU + CP CRTLU + JR NZ,+4 + LD A,CMTLU + LD (ZLOG),A + CALL LU2CH + CALL ELMT + POP AF + CP 4 ;X + JR Z,+4 +OPN.B: LD A,3 ;BSD + LD (ELMD),A + PUSH AF + SVC .RWOPN + RST 3 + DEFB .RWOPN + ENDM + + LD A,(ELMD) + POP BC + CP B + JP NZ,ER61 + RET + SKP H + +; +; CLOSE/KILL command +; +CLOSE: ENT + DEFB F6H +KILL: ENT + XOR A + LD B,A + CALL ENDCHK + JR Z,CLALL ;all files +CLKL2: CALL GETLU + CP CRTLU + RET NC + SVC .CLKL + RST 3 + DEFB .CLKL + ENDM + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR CLKL2 +; +CLALL: XOR A + SVC .CLKL + RST 3 + DEFB .CLKL + ENDM + RET +; +; +ELMT: ENT + CALL END2C + LD B,0 + CALL NZ,STREXP + PUSH HL + SVC .DEVFN + RST 3 + DEFB .DEVFN + ENDM + POP HL + RET + SKP H + +; +DEVNAM: PUSH HL + CALL HLFTCH + LD DE,ELMWRK + LD B,1 + CALL ELMCK + CALL NC,ELMCK + JR C,DEVNM2 + CALL ELMCK + CALL TSTNUM + CALL ELMCK2 + CALL ENDCHK + JR NZ,DEVNM2 + LD A,":" + LD (DE),A + POP AF ;dummy + LD DE,ELMWRK + JR DEVNM4 +DEVNM2: POP HL + CALL ENDCHK + LD B,0 + CALL NZ,STREXP +DEVNM4: PUSH HL + SVC .DEVNM + RST 3 + DEFB .DEVNM + ENDM + INC M + DEC M + JP NZ,ER58 + POP HL + RET +; +ELMCK: CP "A" + RET C + CP "Z"+1 + CCF +ELMCK2: RET C + LD (DE),A + INC HL + INC DE + LD A,M + INC B + RET +; +ELMWRK: DEFS 4 + SKP H + +; +; LOAD "dev:filename" +; +LOAD: ENT + TEST1 E5H ;ALL + CALL TEST1 + DEFB E5H + ENDM + JR NZ,LOAD2 + XOR A +LSALL: SVC .LSALL + RST 3 + DEFB .LSALL + ENDM + RET +LOAD2: CALL ELMT + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JP Z,LOADA + PUSH HL + CALL LDRDY + DEC A + JR Z,LDOBJ + DEC A + JP NZ,ER61 ;il file mode + CALL CKCOM + CALL CLRVAR + CALL LDFIL + JR LOAD9 +LDOBJ: LD HL,(ELMD22) ;load addr + PUSH HL + LD DE,(MEMLMT) + CALL COMPR + LD DE,(ELMD20) ;size + LD BC,(MEMMAX) + CALL NC,MEMOBJ + JP C,ER18 + POP HL + SVC .LOADF + RST 3 + DEFB .LOADF + ENDM +LOAD9: CALL LDEND + POP HL + RET +; +MEMOBJ: ADD HL,DE + RET C + EX DE,HL + LD HL,BC +COMPR: ENT + PUSH HL + OR A + SBC HL,DE + POP HL + RET +; +; CHAIN "dev:filename" + +; +CHAIN: ENT + CALL ELMT + CALL LDRDY + CP 2 + JP NZ,ER61 ;il file mode + LD A,(LSWAP) + OR A + JP Z,RUN2 + JP SWAP2 + SKP H + +; +; MERGE "dev:filename" +; +MERGE: ENT + CALL CKCOM + CALL ELMT + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR Z,MERGEA + SVC .LOPEN + RST 3 + DEFB .LOPEN + ENDM + CP 2 + JP NZ,ER61 + PUSH HL + LD HL,(VARED) + LD (TMPEND),HL + LD BC,1000 + ADD HL,BC + JP C,ER06' + PUSH HL + LD BC,(ELMD20) ;size + INC B + ADD HL,BC + JP C,ER06' + SBC HL,SP + JP NC,ER06' + POP HL + PUSH HL + SVC .LOADF + RST 3 + DEFB .LOADF + ENDM + POP HL + CALL MERGE0 + POP HL + RET +; +MERGE0: CALL LDDEMI + LD A,D + OR E + RET Z + PUSH DE + CALL LDDEMI + PUSH HL + LD HL,DE + LD (EDLINE),HL + CALL DELSUB + POP HL + POP BC + PUSH BC + PUSH HL + CALL INSTLIN + POP HL + POP BC + ADD HL,BC + DEC HL + + DEC HL + DEC HL + DEC HL + JR MERGE0 + SKP H + +; +; LOAD/MERGE/RUN ascii +; +LOADA: CALL CKCOM + LD A,1 + DEFB 1 +MERGEA: LD A,0 + DEFB 1 +RUNA: LD A,2 + PUSH AF + TESTX "A" + CALL TESTX + DEFB "A" + ENDM + CALL ENDZ + LD A,1 + LD (ZRWX),A + LD A,LDALU + LD (ZLOG),A + CALL OPN.B + POP AF + PUSH AF + PUSH HL ;RJOB + LD HL,0 + LD DE,FFFFH + OR A + CALL NZ,DELSUB ;load/run only + LD A,LDALU + SVC .LUCHK + RST 3 + DEFB .LUCHK + ENDM + LD HL,(VARED) + LD (TMPEND),HL + LD BC,1000 + ADD HL,BC + JP C,ER06 + PUSH HL ;load start adrs + LD (LDAPTR),HL +LDA2: LD HL,-512 + ADD HL,SP + LD DE,(LDAPTR) + SBC HL,DE + JP C,ER06 + LD DE,(TMPEND) + SVC .INMSG + RST 3 + DEFB .INMSG + ENDM + LD A,B + OR A + JR Z,LDA4 + CALL CVBCAS + LD A,B + OR C + JP Z,ER03 + LD HL,(LDAPTR) + PUSH HL ;load pointer + INC HL + INC HL + + LD M,C + INC HL + LD M,B + INC HL + PUSH HL + LD HL,DE + TEST1 0 + CALL TEST1 + DEFB 0 + ENDM + JP Z,ER03 + POP HL + LD A,(DE) + CP " " + JR NZ,+3 + INC DE + CALL CVIMTX + LD M,0 + INC HL + LD (LDAPTR),HL + POP DE ;old load pointer + OR A + SBC HL,DE + EX DE,HL ;DE := length + LD M,E + INC HL + LD M,D + JR LDA2 +LDA4: LD HL,(LDAPTR) + CALL LDHL00 + CALL CLR + POP HL ;load start adrs + CALL MERGE0 + POP HL ;RJOB + POP AF + CP 2 ;RUN ? + RET NZ ;no (load/merge) + JP RUNX ;RUN from text-top +; +LDAPTR: DEFS 2 + SKP H + +; +; RUN "dev:filename" +; +FRUN: ENT + CALL ELMT + PUSH HL + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR NZ,RUN1 + CALL HLFTCH + CP "A" + JP Z,RUNA +RUN1: CALL LDRDY + POP HL + DEC A + JR Z,RUNOBJ + DEC A + JP NZ,ER61 ;il file mode + CALL CLRVAR +RUN2: CALL LDFIL ;jump from CHAIN + CALL LDEND + JP RUNX +; +RUNOBJ: LD D,0 ; normal + LD BC,FF00H + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR NZ,RUNOB2 + TESTX "R" + CALL TESTX + DEFB "R" + ENDM + LD D,1 ;,R + LD BC,CFF0H +RUNOB2: LD A,D + LD (RUNRFL),A ;,R flag + LD HL,(ELMD20) ;size + LD DE,(ELMD22) ;load addr + PUSH HL + CALL MEMOBJ + POP DE ;size + LD HL,$BASIC ;load file area + LD BC,FF00H + CALL NC,MEMOBJ + JP C,ER06' + LD SP,0 + CALL CLPTR + XOR A + LD (LOADFG),A + LD A,36H ;count0 mode3 + OUT (D7H),A ;8253 mode set + LD A,1 + OUT (D3H),A ;8253 music enable + LD HL,(ELMD22) ;load addr + LD DE,(TMPEND) + CALL COMPR + + JR NC,RUNOB3 +; +; destroy BASIC +; + PUSH HL + LD HL,$BASIC ;load file area + LD (TEXTST),HL + CALL CLPTR + LD HL,RUNOBE-PRXFER+BKEYBF + LD (ERRORP),HL + POP HL +; +RUNOB3: LD DE,(TMPEND) + CALL COMPR + JR NC,+3 + EX DE,HL + PUSH AF + PUSH HL + LD HL,PRXFER + LD DE,BKEYBF + PUSH DE + LD BC,RUNTBE-PRXFER + LDIR + RET ;JP BKEYBF +; +; +; ORG BKEYBF +; +PRXFER: POP HL + SVC .LOADF + RST 3 + DEFB .LOADF + ENDM + LD A,C3H ;int tbl make + LD HL,038DH + LD (1038H),A + LD (1039H),HL + LD A,01H ;320*200 4 color + SVC .DSMOD + RST 3 + DEFB .DSMOD + ENDM + SVC .DI + RST 3 + DEFB .DI + ENDM + EX AF,AF' + LD A,(RUNRFL) ;run" " ,r + OR A + CALL NZ,INITIO-PRXFER+BKEYBF + EX AF,AF' + LD HL,(ELMD24) ;exec addr + LD A,H + OR L + EXX + LD HL,(TMPEND) ;data store addr + LD DE,(ELMD22) ;load addr + LD BC,(ELMD20) ;size + OR D + OR E + + JR Z,PROX0 + LD A,E9H ;jp (hl) + LD (PRO70P-PRXFER+BKEYBF),A +PROX0: EXX + POP AF ;ldir flg + PUSH HL ;store exec addr + LD HL,PROFF-PRXFER+BKEYBF + LD DE,FF00H + LD BC,PRO80E-PROFF + LDIR + EXX + JP FF00H +; +; ORG FF00H +; +PROFF: JR NC,RUNOB4 + LDIR +RUNOB4: EX AF,AF' + RET Z ;,R + IN A,(LSDMD) ;check dipsw + AND 2 + LD A,0 ;mode 800 + OUT (LSDMD),A ; 800 mode + LD HL,PRO800-PROFF+FF00H + LD BC,PRO80E-PRO800 + JR NZ,MODSET +; + LD A,8 ;mode 700 + OUT (LSDMD),A ;700 or 800 mode + IN A,(LSE0) ;CG xfer + LD HL,1000H + LD DE,C000H + LD BC,1000H + LDIR + IN A,(LSE1) +; + LD HL,PRO700-PROFF+FF00H + LD BC,PRO70E-PRO700 +MODSET: + LD DE,CFF0H + LDIR + POP HL + LD SP,IBUFE + LD DE,D800H ;vram2 for 700 mode + JP CFF0H +; +RUNOBE: SVC .ERRX + RST 3 + DEFB .ERRX + ENDM + SVC .ERCVR + RST 3 + DEFB .ERCVR + ENDM + SVC .DI + RST 3 + DEFB .DI + ENDM + HALT +; ORG CFF0H + +PRO700: + OUT (LSE4),A +PRO701: LD A,71H ;blue and white + LD (DE),A ;vram2 clr + INC DE + LD A,D + CP E0H + JR NZ,PRO701 +PRO70P: OUT (LSE0),A ;jp (hl) + JP (HL) +PRO70E: +; +; ORG CFF0H +PRO800: + OUT (LSE0),A ;700mon rom bank off + OUT (LSE3),A ;800mon rom bank on + JP (HL) +PRO80E: +; +; +; +INITIO: + PUSH AF + DI ;run "file name",r + IM 1 + LD HL,RUNTBL-PRXFER+BKEYBF + LD B,17 + SVC .IOOUT ;io dev init + RST 3 + DEFB .IOOUT + ENDM + POP AF + RET +; +; +; +RUNTBL: +; pio channel a + DEFW FC00H ; int vecter + DEFW FCCFH ; mode 3 (bit mode) + DEFW FC3FH ; i/o reg. set + DEFW FC07H ; int seqence (disenable) +; pio channel b + DEFW FD00H ; int vecter + DEFW FDCFH ; mode 3 (bit mode) + DEFW FD00H ; i/o reg. set + DEFW FD07H ; int seqence (disenable) +; + DEFW D774H ;8253 C1 mode 2 + DEFW D7B0H ; C2 mode 0 + DEFW D6C0H ;counter2 12h + DEFW D6A8H ; + DEFW D5FBH ;counter1 1s + DEFW D53CH ; + DEFW D305H ;8253 int ok + DEFW CD01H ;RF mode 700 + DEFW CC01H ;WF mode 700 +RUNTBE: +; + SKP H + +; +LDRDY0: LD HL,(VARED) + LD (TMPEND),HL + LD DE,(POOL) + LD (OLDPOOL),DE + OR A + SBC HL,DE + LD (VARLN),HL + LD HL,-256 + ADD HL,SP + LD (LAST),HL + LD DE,(VARED) + PUSH HL + OR A + SBC HL,DE + JP C,ER06' + EX (SP),HL + EX DE,HL + LD BC,(VARLN) + INC BC + LDDR + POP DE + SVC .ADDP0 + RST 3 + DEFB .ADDP0 + ENDM + LD A,1 + LD (LOADFG),A + RET +; +LDRDY: CALL LDRDY0 + SVC .LOPEN + RST 3 + DEFB .LOPEN + ENDM + LD A,(ELMD) + RET +; +CLRVAR: LD HL,(VARED) + XOR A + DEC HL + LD M,A + DEC HL + LD M,A + LD (STRST),HL + DEC HL + LD M,A + LD (VARST),HL + DEC HL + LD M,A + LD (POOL),HL + LD HL,4 + LD (VARLN),HL + RET +; +OLDPOOL:DEFS 2 +VARLN: DEFS 2 +LAST: DEFS 2 +LOADFG: DEFB 0 +; + +CKCOM: ENT + PUSH AF + CALL ?DIRECT + JP NZ,ER19 + POP AF + RET + SKP H + +; +LDFIL: LD BC,(ELMD20) + PUSH BC + LD HL,(POOL) + LD DE,(TEXTST) + OR A + SBC HL,DE ;HL := text area size + LD L,0 + SBC HL,BC + JP C,ER06' + LD HL,0 + LD (OLDPOOL),HL + CALL RUNINT + LD HL,0 + LD (LNOBUF),HL + LD HL,(TEXTST) + SVC .LOADF + RST 3 + DEFB .LOADF + ENDM + POP BC + LD HL,(TEXTST) + ADD HL,BC + LD (OLDPOOL),HL + RET +; +LDEND: ENT + LD A,LDALU + LD B,0 + SVC .CLKL + RST 3 + DEFB .CLKL + ENDM + LD HL,LOADFG + LD A,M + OR A + RET Z + LD M,0 + LD HL,(OLDPOOL) + LD A,H + OR L + JR NZ,LDEND2 + LD HL,(TEXTST) + CALL LDHL00 +LDEND2: EX DE,HL + LD HL,(POOL) + LD BC,(VARLN) + LDIR + EX DE,HL + OR A + SBC HL,DE + EX DE,HL + SVC .ADDP0 + RST 3 + DEFB .ADDP0 + ENDM + RET + SKP H + +; +; VERIFY "CMT:filename" +; +VERIFY: ENT + PUSH HL + CALL REFLNX + POP HL + CALL ELMT + PUSH HL + SVC .LOPEN + RST 3 + DEFB .LOPEN + ENDM + CP 2 + JP NZ,ER61 + LD HL,(TEXTST) + SVC .VRFYF + RST 3 + DEFB .VRFYF + ENDM + POP HL + RET +; +; SAVE "dev:filename" +; +SAVE: ENT + TEST1 E5H ;ALL + CALL TEST1 + DEFB E5H + ENDM + LD A,1 + JP Z,LSALL + PUSH HL + CALL REFLNX + POP HL + CALL ELMT + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR Z,SAVEA + PUSH HL + LD A,2 + LD (ELMD),A + LD HL,(TEXTED) + LD DE,(TEXTST) + OR A + SBC HL,DE + LD (ELMD20),HL + LD A,(ELMD1) + CP 0DH + JP Z,ER60 + SVC .SAVEF + RST 3 + DEFB .SAVEF + ENDM + POP HL + RET +; +SAVEA: TESTX "A" + + CALL TESTX + DEFB "A" + ENDM + PUSH HL + LD A,2 + LD (ZRWX),A + LD A,LDALU + LD (ZLOG),A + CALL OPN.B + POP HL + CALL LIST0 + CALL PRTCR + LD B,1 + LD A,LDALU + SVC .CLKL + RST 3 + DEFB .CLKL + ENDM + RET + SKP H + +; +; LOCK/UNLOCK "dev:filename" +; +UNLOCK: ENT + XOR A + DEFB 1 +LOCK: ENT + LD A,1 + PUSH AF + CALL STREXP + SVC .DEVFN + RST 3 + DEFB .DEVFN + ENDM + POP AF + SVC .LOCK + RST 3 + DEFB .LOCK + ENDM + RET +; +; DIR[#n] "dev:" +; DIR[/P] dev +; +DIR: ENT + CALL GETLU + PUSH AF ;lu# + SVC .LUCHK + RST 3 + DEFB .LUCHK + ENDM + JP C,ER44 + BIT 1,A ;W? + JP Z,ER59 + CALL LU2CH + CALL DEVNAM + LD B,A ;ch# + XOR A + SVC .DIR ;read directory + RST 3 + DEFB .DIR + ENDM + LD A,B ;A=ch# + SVC .SETDF ;set default + RST 3 + DEFB .SETDF + ENDM + POP AF ;A=lu# + SVC .DIR ;print directory + RST 3 + DEFB .DIR + ENDM + RET +; +; DELETE "dev:filename" +; +FDEL: ENT + CALL STREXP + SVC .DEVFN + RST 3 + + DEFB .DEVFN + ENDM + SVC .DELET + RST 3 + DEFB .DELET + ENDM + RET +; +; RENAME "dev:oldname","newnae" +; +RENAME: ENT + CALL STREXP + SVC .DEVFN + RST 3 + DEFB .DEVFN + ENDM + CALL HCH2CH + CALL STREXP + SVC .RENAM + RST 3 + DEFB .RENAM + ENDM + RET + SKP H + +; +; random file access +; +PRX: CALL RAN0 +PRX2: CALL PRTEXP + SVC .PRREC + RST 3 + DEFB .PRREC + ENDM + CALL ENDCHK + RET Z + CALL CH2CH + JR PRX2 +; +; +INX: CALL RAN0 + LD DE,(TMPEND) + CALL MEMECK +INX2: CALL INTGTV + PUSH HL + PUSH AF + PUSH BC + LD DE,(TMPEND) + SVC .INREC + RST 3 + DEFB .INREC + ENDM + POP DE + POP AF + CALL INSUB + POP HL + CALL ENDCHK + RET Z + CALL CH2CH + JR INX2 +; +RAN0: TEST1 "(" + CALL TEST1 + DEFB "(" + ENDM + RET NZ + CALL IDEEXP + LD A,D + OR E + JP Z,ER03 + SVC .RECST + RST 3 + DEFB .RECST + ENDM + CALL HCH29H + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + RET +; + SKP H + +; +; SWAP "dev:filename" +; +SWAP: ENT + LD A,(LSWAP) + OR A + JP NZ,ER25 + PUSH HL + LD B,0 + SVC .DEVNM + RST 3 + DEFB .DEVNM + ENDM + LD (SWAPDV),DE + LD (SWAPCH),A + LD HL,(TEXTED) + LD DE,(TEXTST) + XOR A + SBC HL,DE + LD (ELMD20),HL + SVC .SWAP + RST 3 + DEFB .SWAP + ENDM + POP HL + CALL ELMT + CALL ENDZ + LD A,(ZFLAG1) + BIT ##RND,A + JP Z,ER59 + PUSH HL ;RJOB + LD HL,(SWAPNB) + ADD HL,SP + LD SP,HL + EX DE,HL + LD HL,SWAPDS + LD BC,(SWAPBY) + LDIR + CALL LDRDY + CP 2 + JP NZ,ER61 + LD (SWAP2+1),SP +SWAP2: LD SP,0 ;jump from CHAIN + CALL LDFIL + CALL LDEND + LD HL,FFFDH + PUSH HL ;SWAP flag + PUSH HL + LD A,1 + LD (LSWAP),A + LD HL,(TEXTST) + JP NXLINE +; +; Recover SWAP +; +BSWAP: ENT + XOR A + LD (LSWAP),A + POP IX +BSWAP2: POP BC + + LD A,B + CP FFH + JP NZ,ER25 + LD A,C + CP FDH + JR Z,BSWAP6 + CP FEH + LD HL,4 + JR Z,BSWAP4 + CP 12H + LD HL,10H + JP NZ,ER25 +BSWAP4: ADD HL,SP + LD SP,HL + JR BSWAP2 +; +BSWAP6: LD DE,(SWAPDV) + LD A,(SWAPCH) + SVC .SETDF + RST 3 + DEFB .SETDF + ENDM + LD B,0 + SVC .DEVNM + RST 3 + DEFB .DEVNM + ENDM + CALL LDRDY0 + OR FFH + SVC .SWAP + RST 3 + DEFB .SWAP + ENDM + CALL LDFIL + CALL LDEND + LD HL,0 + ADD HL,SP + LD DE,SWAPDS + LD BC,(SWAPBY) + LDIR + LD SP,HL + POP HL ;RJOB + RET +; +SWAPDV: DEFS 2 +SWAPCH: DEFS 1 +; +; I/O initial for cold-start +; +IOINIT: ENT + POP HL + PUSH HL + LD (ERRORP),HL + LD A,"1" + CALL IOINI2 + LD A,"2" + CALL IOINI2 + LD DE,INITD3 + LD B,INITD4-INITD3 + JR IOINI4 + +IOINI2: LD (INITD1+2),A + LD DE,INITD1 + LD B,INITD3-INITD1 +IOINI4: JP INIT2 +; +INITD1: DEFM "RS?:0,$8C,13" + + +INITD3: DEFM "CMT:T" + +INITD4: +; + END diff --git a/software/asm/mz-xz009/MACRO.ASM b/software/asm/mz-xz009/MACRO.ASM new file mode 100644 index 0000000..7abfa70 --- /dev/null +++ b/software/asm/mz-xz009/MACRO.ASM @@ -0,0 +1,83 @@ +; --------------------------- +; MZ-800 Macro define +; FI:MACRO ver 1.0 7.26.84 +; --------------------------- +; +; + MACRO SVC + RST 3 + DEFB @1 + ENDM +; + MACRO IOCALL + LD IX,(@1) + CALL IOCALL + ENDM +; + MACRO TEST1 + CALL TEST1 + DEFB @1 + ENDM +; + MACRO TESTX + CALL TESTX + DEFB @1 + ENDM +; + MACRO DEF8 + DEFW @2@1H + DEFW @4@3H + DEFW @6@5H + DEFW @8@7H + ENDM +; + MACRO DEF5 + DEFW @2@1H + DEFW @4@3H + DEFB @5H + ENDM +; + MACRO REP5 + @1 @2 + @1 @2 + @1 @2 + @1 @2 + @1 @2 + ENDM +; + MACRO SVCT +@2: EQU @1H + DEFW @3 + ENDM + END + + MACRO TBL + DEFM "@1" + DEFB "@2"+80H + ENDM + + MACRO ENTRY +ER@1: ENT + LD A,@1 + DEFB 21H + ENDM + + MACRO FKEY + DEFB FNB@1E-FNB@1S +FNB@1S: DEFM @2 + IFD @3 + DEFB @3 + ENDIF +FNB@1E: DEFS FNB@1S+15-FNB@1E + ENDM + + MACRO ERENT +ER@1: ENT + IFD @2 + LD A,@1+80H + ENDIF + IFU @2 + LD A,@1 + ENDIF + DEFB 21H + ENDM diff --git a/software/asm/mz-xz009/MON-EMM.ASM b/software/asm/mz-xz009/MON-EMM.ASM new file mode 100644 index 0000000..9c37cd6 --- /dev/null +++ b/software/asm/mz-xz009/MON-EMM.ASM @@ -0,0 +1,439 @@ +; ---------------------------- +; Lx-monitor EMM driver +; FI:MON-EMM ver 005 4.27.84 +; ---------------------------- +; + INCLD MACRO +; +$RAM: ENT + DEFW $FD + DEFM "RAM" + DEFB 0 + DEFB 5FH + DEFB 20H ;1WOPN + DEFB 32 ;Max dir + DEFW EMINI ;INIT + DEFW EMRINF + DEFW EMWINF + DEFW EMON + DEFW 1024 + DEFW EMRDAT + DEFW EMWDAT + DEFW EMDEL + DEFW EMWDIR + DEFW EMFRKB +; +EMFRKB: CALL EMFRB + LD C,H + LD B,0 ;/256 + SRL C ;/512 + SRL C ;/1024 + OR A + RET +; +EMFRB: PUSH DE + LD HL,0 ;free area(bytes) + CALL EMLD2 ;max + PUSH DE + INC HL + INC HL + CALL EMLD2 ;use + POP HL + SBC HL,DE + JP C,ER41 ;I/O ERR + POP DE + RET +; +; +EMCLR: LD DE,10H +EMSETU: LD HL,2 + CALL EMSV2 ;Set used mem + EX DE,HL + LD DE,0 + JP EMSV2 ;File end mark + SKP H + +; +EMINI: RET C + LD A,(EMFLG) + OR A + JP Z,ER50 + CALL OKYN + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + PUSH HL + CALL EMCLR + POP HL + TEST1 0 + CALL TEST1 + DEFB 0 + ENDM + RET Z ;INIT "EM:" + SVC .DEASC ;INIT "EM:$hhhh" + RST 3 + DEFB .DEASC + ENDM +EMINI2: LD HL,0 + DI + LD B,1 + LD A,D + AND FCH + CP FCH + LD HL,FFFFH + JR Z,EMINI3 ;if >=FC00 then FFFF + LD B,3 + LD A,D + OR A + LD HL,20H + JR NZ,+3 ;if <=00FF then 0020 +EMINI3: EX DE,HL + LD A,B + LD (EMFLG),A + LD HL,0 + CALL EMSV2 ;Set max mem + CALL PBCCLR + EI + RET + SKP H + +; +; EMM power on routine +; +EMMPWR: ENT + LD HL,8 + LD B,L + LD C,0 +EMPWR2: CALL EMLD1 + SUB L + OR C + LD C,A + LD A,L + CALL EMSV1 + INC L + DJNZ EMPWR2 + LD A,C + OR A + JR NZ,EMPWR4 + LD HL,0 ;already initialized + CALL EMLD2 + LD A,2 + INC D + JR Z,+3 + INC A + LD (EMFLG),A + JP PBCCLR +EMPWR4: CALL EMCLR + LD HL,0 ;check EMM installed? + LD A,5AH + CALL EMSV1 + CALL EMLD1 + SUB 5AH + LD DE,C000H ;Initial set 48KB + JR Z,EMINI2 + XOR A + LD (EMFLG),A + RET + SKP H + +; +; Dir search start +; +EMON: LD A,(EMFLG) + OR A + JP Z,ER50 + LD HL,10H + LD (EMPTR),HL + RET +; +; Read inf +; ent HL:adrs +; +EMRINF: LD BC,HL + LD HL,(EMPTR) + CALL EMLD2 + LD A,D + OR E + SCF + RET Z + INC HL + INC HL + PUSH HL + ADD HL,DE + JP C,ER41 ;I/O ERR + LD (EMPTR),HL + POP HL + INC HL + INC HL + INC HL + LD DE,BC + LD BC,32-2 + CALL EMLDD + LD BC,32+2 + ADD HL,BC + EX DE,HL + LD M,E ;Save data area adrs + INC HL + LD M,D + OR A + RET +; +; Read data +; ent HL:buffer adrs +; BC:byte size +; +EMRDAT: EX DE,HL + LD L,(IY+30) + LD H,(IY+31) + INC HL + INC HL + INC HL + CALL EMLDD + LD (IY+30),L + LD (IY+31),H + OR A + RET + SKP H + +; +; Write file +; HL:inf adrs +; +EMWINF: PUSH AF + CALL SERFLW + PUSH HL + LD HL,2 + CALL EMLD2 + LD (EMWP0),DE + PUSH DE + LD HL,64+7 + ADD HL,DE + CALL EMFRE? ;Check file space + POP DE + INC DE + INC DE + POP HL ;inf adrs + LD BC,64 + POP AF + CALL EMSVB + LD (EMWP1),DE + RET + SKP H + +; +; Write data +; HL:data adrs +; BC:data bytes +; A0:close flag +; +; +EMWDAT: PUSH AF + PUSH HL + PUSH BC + LD HL,(EMWP1) + INC BC + INC BC + INC BC + ADD HL,BC + CALL EMFRE? + POP BC + POP HL + LD DE,(EMWP1) + POP AF + PUSH AF + OR 01H ;data block + CALL EMSVB + LD (EMWP1),DE + POP AF + BIT 2,A ;close ? + RET Z ;no + PUSH DE ;yes + CALL EMSETU + POP HL + LD DE,(EMWP0) + DEC HL + DEC HL + OR A + SBC HL,DE + EX DE,HL + JP EMSV2 +; +; +EMFRE?: JR C,ER53A + PUSH HL + LD HL,0 + CALL EMLD2 + OR A + POP HL + SBC HL,DE + RET C +ER53A: JP ER53 ;No file pace + SKP H + +; +; delete file +; +EMDEL: LD HL,(ELMD30) + LD DE,-64-5 + ADD HL,DE ;HL:=move destination + CALL EMLD2 ;DE:=delete size - 2 + EX DE,HL ;DE:=move destination + ADD HL,DE + INC HL + INC HL ;HL:=move source + PUSH DE + PUSH HL + LD HL,2 + CALL EMLD2 + EX DE,HL ;HL:=last use + POP DE ;DE:=move source + PUSH DE + OR A + SBC HL,DE + INC HL + INC HL + LD BC,HL ;BC:=move bytes + POP HL ;HL:=move source + POP DE ;DE:=move destination + CALL EMLDIR + DEC DE + DEC DE ;DE:=new last-use + LD HL,2 + JP EMSV2 +; +; write dir +; +EMWDIR: LD HL,(ELMD30) + LD DE,-64 + ADD HL,DE + EX DE,HL + LD HL,ELMD + LD BC,32 + JP EMSVD + SKP H + +; +EM.P0: EQU EAH +EM.P1: EQU EBH +; +; EMM 1 Byte Write +; ent A: data +; HL:EMM adrs +; +EMSV1: ENT + PUSH BC + LD C,EM.P1 + LD B,H + OUT (C),L + OUT (EM.P0),A + POP BC + OR A + RET +; +; EMM 1 Byte Read +; ent HL:EMM adrs +; ext A: dat +; +EMLD1: ENT + PUSH BC + LD C,EM.P1 + LD B,H + OUT (C),L + IN A,(EM.P0) + POP BC + OR A + RET +; +; EMM 2 Byte Write +; ent DE:data +; HL:EMM adrs +; +EMSV2: ENT + LD A,E + CALL EMSV1 + INC HL + LD A,D + CALL EMSV1 + DEC HL + RET +; +; EMM 2 Byte Read +; ent HL:EMM adrs +; DE:data +; +EMLD2: ENT + CALL EMLD1 + LD E,A + INC HL + CALL EMLD1 + LD D,A + DEC HL + RET + SKP H + +; +; EMM write block +; ent HL :data Top +; DE :EMM Adrs +; BC :byte Size +; A :block flag +; +EMSVB: EX DE,HL + CALL EMSV1 + INC HL + LD A,C + CALL EMSV1 + INC HL + LD A,B + CALL EMSV1 + INC HL + EX DE,HL +EMSVD: ENT + EX DE,HL +EMSVE: LD A,(DE) + CALL EMSV1 + INC HL + INC DE + DEC BC + LD A,B + OR C + JR NZ,EMSVE + EX DE,HL + RET +; +; EMM BC Byte Read +; ent DE :Store Top +; HL :EMM Adrs +; BC :Byte Size +; +EMLDD: ENT + CALL EMLD1 + LD (DE),A + INC HL + INC DE + DEC BC + LD A,B + OR C + RET Z + JR EMLDD +; +; EMM BC Byte LDIR +; ent HL :EMM source top +; DE :EMM destination top +; BC :Byte Size +; +EMLDIR: ENT + CALL EMLD1 ;EMM (HL) Data => Acc + EX DE,HL + CALL EMSV1 ;Acc => (DE) EMM + EX DE,HL + INC HL + INC DE + DEC BC + LD A,B + + OR C + RET Z ;End + JR EMLDIR + END diff --git a/software/asm/mz-xz009/MON-GRPH.ASM b/software/asm/mz-xz009/MON-GRPH.ASM new file mode 100644 index 0000000..d134a50 --- /dev/null +++ b/software/asm/mz-xz009/MON-GRPH.ASM @@ -0,0 +1,2983 @@ +; ------------------------------- +; MZ-800 Monitor Graphic-package +; FI:MON-GRPH ver 1.0A 9.05.84 +; +; ------------------------------- +; +; + INCLD MACRO +KEYBF: EQU 11A4H ;KEYBUF label +;------------------------------- +; +; INIT "CRT: +; +;------------------------------- +CRTINI: ENT + TEST1 'M' + CALL TEST1 + DEFB 'M' + ENDM + JR Z,CRMD + OR A + JR Z,ICRT + CP 'B' + JP NZ,ER03 +;------------------------------- +; +; CRT palette block +; +;------------------------------- +; +PBLOCK: XOR A + LD (PALBK),A + LD A,(CRTMD2) + CP 2 + JP NZ,ER68 + INC HL + LD B,4 + CALL DEVASC + LD (PALBK),A + SVC .DPLBK + RST 3 + DEFB .DPLBK + ENDM + JR CRTLP +; +;--------------------------------- +; +; CRT mode +; +; 1.....320x200 4 Color +; 2.....320x200 16 Color +; 3.....640x200 2 Color +; 4.....640x200 4 Color +; +;--------------------------------- +; +CRMD: LD B,5 + CALL DEVASC + OR A + JR Z,ER3JP + + LD B,A + SVC .DSMOD + RST 3 + DEFB .DSMOD + ENDM + JP C,ER68 + LD A,B + LD (CRTMD2),A + XOR A + LD (INPFLG),A + SCF + ADC A,A + DJNZ -1 + LD (CRTMD1),A + CALL ICRT2 +; +CRTLP: TEST1 0 + CALL TEST1 + DEFB 0 + ENDM + RET Z + CP ',' + INC HL + JR Z,CRTINI +ER3JP: JP ER03 +; +ICRT: ENT + LD A,(CRTMD2) + SVC .DSMOD + RST 3 + DEFB .DSMOD + ENDM +ICRT2: CALL COLINI + XOR A + LD (PALBK),A + SVC .DPLBK + RST 3 + DEFB .DPLBK + ENDM + RET +; +COLINI: LD A,(CRTMD1) + LD B,3 + RRA + JR C,CI1 + LD B,15 + RRA + JR C,CI1 + LD B,1 + RRA + JR C,CI1 + LD B,3 +CI1: LD A,B + LD (SELCOL),A + SVC .DCOL + RST 3 + DEFB .DCOL + ENDM + RET + SKP H + +;------------------------ +; +; +; BYTE CONVERT TABLE +; +;----------------------- +TDOTL: ENT + DEFB FFH + DEFB FEH + DEFB FCH + DEFB F8H + DEFB F0H + DEFB E0H + DEFB C0H + DEFB 80H +; +TDOTR: ENT + DEFB 01H + DEFB 03H + DEFB 07H + DEFB 0FH + DEFB 1FH + DEFB 3FH + DEFB 7FH + DEFB FFH +; +TDOTN: ENT + DEFB 01H + DEFB 02H + DEFB 04H + DEFB 08H + DEFB 10H + DEFB 20H + DEFB 40H + DEFB 80H +;------------------------------- +; +; // 64 - 32 TRANS // +; +;------------------------------- +; +CHGRPH: ENT + LD BC,703H + LD HL,CHGTBL + JP PATCH +; +; +CHGTBL: +; word patch table +; + DEFW SYMS42+1 + DEFW BE80H + DEFW 9F40H +; + DEFW RNGCK0+1 + DEFW -640 + DEFW -320 +; + DEFW LRBSR + DEFW 640 + + DEFW 320 +; + DEFW BFL0+1 + DEFW 80 + DEFW 40 +; + DEFW BFL1+1 + DEFW 80 + DEFW 40 +; + DEFW BFC0+1 + DEFW -640 + DEFW -320 +; + DEFW BFC1+1 + DEFW 639 + DEFW 319 +; +; byte patch table +; + DEFW ADCH ;adrs + DEFB 29H ;640 ADD HL,HL + DEFB 00H ;320 +; + DEFW SYMS21+1 + DEFB 80 + DEFB 40 +; + DEFW SYMS41+1 + DEFB 80 + DEFB 40 +; + SKP H + +;---------------------------------- +; +; address calc +; +; +; ent. de=x (0-13FH,27FH) +; hl=y (0-C7H) +; +; ext. hl=vram addr +; a=vram bit +; c=de/8 +;---------------------------------- +ADCH: ADD HL,HL ;NOP + LD A,E + AND 7 + LD B,A +; + LD A,E + AND F8H + ADD A,D + RRCA + RRCA + RRCA + LD C,A + LD A,B + LD B,80H ;vramh + LD D,H + LD E,L + ADD HL,HL + ADD HL,HL + ADD HL,DE + ADD HL,HL + ADD HL,HL + ADD HL,HL ;HL=HL*40 + ADD HL,BC + RET +;----------------------------- +; +; READ POINT +; +; Ent:DE=X (0-13FH,27EH) +; HL=Y (0-C7H) +; +;----------------------------- +?POINT: ENT + CALL RNGCK + JP C,OVER + CALL ADCH +; + RLCA + RLCA + RLCA + OR 46H + LD (PNT2+1),A + LD C,LSRF + LD A,(MAXCF) + LD B,A +; + DI + IN A,(LSE0) + + XOR A +PNT1: RR B + JR C,PNT4 + OUT (C),B + OR A +PNT2: BIT 0,(HL) ;bit n,(hl) + JR Z,PNT3 + SCF +PNT3: RLA + JR PNT1 +; +PNT4: LD B,A + IN A,(LSE1) + EI + LD A,(CPLANE) + AND B + LD B,A + LD A,(DMD) + CP 6 + LD A,B + RET NZ +; + CP 4 + RET C +; + SUB 2 + RET + SKP H + +;--------------------------------- +; +; +; MODE SET (PWMODE,GMODE) +; +; ent. A= 0 RESET +; A<>0 SET +;--------------------------------- +SETW: LD A,FFH +MODSET: PUSH BC + OR A + LD A,(GMODE) + LD C,A + LD A,(PWMODE) + JR Z,RESET +; +SET: OR A + LD A,C0H ;w0 pset + JR Z,SET1 + LD A,40H ;w1 or +; +SET1: OR C + OUT (LSWF),A ;Write mode set + POP BC + RET +; +; +RESET: OR A + LD A,60H ;w1 reset + JR NZ,SET1 +; + LD A,(CPLANE) + LD B,A + LD A,C ;reverse color + CPL + AND B ;mask color + OR C0H ;w0 pset mode + OUT (LSWF),A ;Write mode set + POP BC + RET + SKP H + +;----------------------------- +; +; Point Write/Erase +; +; Ent:DE=X (0-13FH,27EH) +; HL=Y (0-C7H) +; +;----------------------------- +PSET: ENT + CALL MODSET +PSET0: CALL RNGCK + JP C,OVER + CALL ADCH + EX DE,HL + LD HL,TDOTN + LD B,0 + LD C,A + ADD HL,BC + DI + IN A,(LSE0) + LDI + IN A,(LSE1) + EI + XOR A + RET +; +; +;-------------------------------- +; +; RANGE CHECK +; +; Ent:DE=X (0-13FH,27EH) +; HL=Y (0-C7H) +; +; ext:if over then CF=1 +; +;-------------------------------- +RNGCK: ENT + PUSH BC + PUSH DE + PUSH HL + LD A,H + RLCA + JR C,RNGER +; + LD BC,-200 + ADD HL,BC + JR C,RNGER +; + LD A,D + RLCA + JR C,RNGER +; + EX DE,HL +RNGCK0: LD BC,-640 ;-320 + ADD HL,BC +RNGER: POP HL + POP DE + POP BC + RET + +; +; + SKP H + +;------------------------------ +; +; Draw line +; +; ent DE':X0, DE:X +; HL':Y0, HL:Y +; A := 0 BLINE +; <>0 LINE +; +; ext DE':X +; HL':Y +;------------------------------- +; +; +X0: EQU KEYBF ;2 +DX: EQU X0+2 ;2 +XDIRE: EQU DX+2 ;1 +Y0: EQU XDIRE+1 ;2 +DY: EQU Y0+2 ;2 +YDIRE: EQU DY+2 ;1 +; +; +WLINE0: LD A,FFH +WLINE: ENT + CALL MODSET + PUSH DE + PUSH HL + EXX + LD (X0),DE + LD (Y0),HL + EXX + PUSH HL ;y + PUSH DE ;x + EX DE,HL + LD HL,(Y0) + CALL PLS + LD (YDIRE),A + LD (DY),HL + POP DE ;x + JP NC,WYLIN ;skip if y=y0 + PUSH HL ;dy + LD HL,(X0) + CALL PLS + LD (XDIRE),A + LD (DX),HL + POP BC ;dy + POP DE ;y + JP NC,WTLIN ;skip if x=x0 + XOR A + SBC HL,BC + JR NC,WLIN04 ;skip if dx>dy + LD HL,X0 ;parameter change + LD DE,Y0 + LD B,5 +WLIN02: LD A,(DE) + LD C,M + LD M,A + LD A,C + LD (DE),A + INC HL + + INC DE + DJNZ WLIN02 +; + LD A,0EBH ;ex de,hl +WLIN04: LD (PLOT),A + LD (PLOT1),A + LD A,(YDIRE) + AND A + LD A,23H ;inc hl + JR Z,DIRE1 + LD A,2BH ;dec hl +DIRE1: LD (PP2),A +; + LD A,(XDIRE) + AND A + LD A,13H ;inc de + JR Z,DIRE2 + LD A,1BH ;dec de +DIRE2: LD (PP1),A +; + EXX + LD HL,(DX) ;initial parm set + LD D,H + LD E,L + SRL H + RR L + LD BC,(DY) + EXX +; + LD HL,(Y0) ;first point set + LD DE,(X0) + LD BC,(DX) +; +PLOT: EX DE,HL ;nop + PUSH HL + PUSH DE + PUSH BC + CALL PSET0 + POP BC + POP DE + POP HL +PLOT1: EX DE,HL ;nop +; +; + DEC BC + LD A,B + INC A + JR Z,FINW ;skip if end of line +; +; pointer calc . +; +PP1: DEFS 1 ;inc de/dec de + EXX + OR A + SBC HL,BC + EXX + JP NC,PLOT + EXX + ADD HL,DE + EXX + +PP2: DEFS 1 ;inc hl/dec hl + JP PLOT +; +; +FINW: EXX + POP HL + POP DE + EXX + RET +; +WYLIN: POP HL ;Y +WYLIN0: CALL WBOXSB + CALL WBOXSB + CALL YLINE + JR FINW +; +WTLIN: EX DE,HL + LD DE,(X0) + JR WYLIN0 +; +; +; +PLS: LD A,H + ADD A,40H + LD H,A + LD A,D + ADD A,40H + LD D,A +; + OR A + SBC HL,DE + JR C,PLS1 + LD A,H + OR L + RET Z +OVER: LD A,FFH + SCF + RET +; +PLS1: OR A + EX DE,HL + LD HL,0 + SBC HL,DE + XOR A + SCF + RET + SKP H + +;------------------------- +; +; +; Write sector +; +;------------------------- +; +WSECTR: CALL WSPUT + LD HL,(POINTX) + PUSH HL + PUSH BC ;POINTY + EXX + CALL WSPUT + LD B,2 + JP WBOX2 +; +WSPUT: POP IX ;Ret adrs + EX DE,HL + CP 2 + CALL Z,WSCTRH + LD BC,(POINTX) + ADD HL,BC + PUSH HL ;X + EX DE,HL + CP 1 + CALL Z,WSCTRH + LD BC,(POINTY) + ADD HL,BC + PUSH HL ;Y + JP (IX) +; +WSCTRH: BIT 7,H + JP Z,HIRITU + CALL WSCTRV + CALL HIRITU +WSCTRV: EX AF,AF' + CALL NEGHL + EX AF,AF' + RET + SKP H + +; +;----------------------------- +; +; Circle Write +; ent DE:End X DE':Start X +; HL:End Y HL':Start Y +; IX:R BC':Hiritu +; A:Angle flag +; if CF then sector +; +; uses KEYBUF +;----------------------------- +WCIRCL: ENT + PUSH AF + CALL SETW ;set pwmode + POP AF + PUSH AF + LD (CIR3+1),IX ;R + LD (SYUX),DE + LD (SYUY),HL + EXX + LD (CIR.HF),BC + LD (KAIX),DE + LD (KAIY),HL + LD A,C ;CIR.HF + CALL C,WSECTR + LD HL,(KAIX) + LD DE,(KAIY) +;Å BLOCK NO."Ù\Ü/BL \ÄÙ + CALL BLCKRU + LD (KBL),A + LD HL,(SYUX) + LD DE,(SYUY) +;Å BLOCK NO."Ù\Ü/SBL \mÄÙ + CALL BLCKRU + LD (SBL),A +; + LD HL,CIR.BK + LD B,8 + CALL ?CLRHL + LD HL,KBL + POP AF + LD B,A + AND 0FH + JR Z,CIR4 ;KK=SK + CP 3 + JR Z,CIR15 ;2PI <= ABS(KK-SK) + LD A,M + INC HL + CP M + JR NZ,CIR4 + LD A,B + CP 81H + JR Z,CIR4 + JR CIR14 +; +CIR15: LD A,9 + LD M,A + INC HL + LD M,A + +CIR14: LD B,8 + LD HL,CIR.BK + INC A + CALL ?SETHL + LD A,B0H ;OR B + CALL CHENGE + JR CIR3 +; +CIR4: LD A,A0H ;AND B + CALL CHENGE + LD D,00H + LD HL,(KBL) + LD B,H + LD A,L +CIR2: LD HL,CIR.BK-1 + LD E,A + ADD HL,DE + LD M,1 + CP B ;\s\ÛÛÚjlÄ \mÛÛÚjli Ã\l + JR Z,CIR3 + AND 7 + INC A + JR CIR2 +CIR3: LD HL,0 ;;;R + LD (DYY),HL + LD (XX),HL + LD HL,1 + LD (CI.D),HL + LD (YY),HL +CIR7: LD HL,(DYY) + LD DE,(CI.D) + XOR A + SBC HL,DE + LD (DYY),HL +; + LD HL,(YY) + DEC HL + LD (CYE),HL + LD A,(CIR.HF) + OR A + LD DE,HL + CALL NZ,HIRITU + CP 1 + JR Z,+3 + EX DE,HL + LD (YYY),DE + LD (YYHI),HL +; + LD HL,(XX) + OR A + LD DE,HL + CALL NZ,HIRITU + CP 1 + JR Z,+3 + EX DE,HL + LD (XXX),DE + LD (XXHI),HL +; + LD HL,(XXX) + CALL NEGHL + + LD (FUXX),HL ;FUXX = -XXX + LD HL,(YYY) + CALL NEGHL + LD (FUYE),HL ;FUYE = -YYY + LD HL,(YYHI) + CALL NEGHL + LD (FUYYHI),HL ;FUYYHI = -YYHI + LD HL,(XXHI) + CALL NEGHL + LD (FUXXHI),HL ;FUXXHI = -XXHI + LD HL,(CYE) + CALL NEGHL + LD (FUNOYE),HL ;FUNOYE = -YE +; + LD HL,CIR.BK + LD A,M ;BLOCK NO.1 + OR A + INC HL + JR Z,P222 + EXX + LD HL,(XXX) + LD (PL1+1),HL + LD B,0 + LD DE,(FUNOYE) + BIT 7,D + JR Z,P12 + LD A,(KBL) + CP 1 + JR NZ,P11 + LD HL,(KAIY) + XOR A + SBC HL,DE + JR Z,P11 + JR C,P12 +P11: INC B +P12: LD A,(SBL) + CP 1 + JR NZ,P13 + LD HL,(SYUY) + XOR A + SBC HL,DE + JR Z,P13 + JR NC,P14 +P13: LD A,1 +P14: AND B + JR Z,P15 + LD HL,(FUYYHI) + CALL PLALL +P15: EXX +; +P222: LD A,M ;BLOCK NO.2 + OR A + INC HL + JR Z,P3 + EXX + LD B,0 + LD HL,(YYY) + LD (PL1+1),HL + LD DE,(CYE) + LD A,(KBL) + + CP 2 + JR NZ,P21 + LD HL,(KAIX) + XOR A + SBC HL,DE + JR Z,P21 + JR C,P22 +P21: INC B +P22: LD A,(SBL) + CP 2 + JR NZ,P23 + LD HL,(SYUX) + XOR A + SBC HL,DE + JR Z,P23 + JR NC,P24 +P23: LD A,1 +P24: AND B + JR Z,P25 + LD HL,(FUXXHI) + CALL PLALL +P25: EXX +; +P3: LD A,M ;BLOCK NO.3 + OR A + INC HL + JR Z,P4 + EXX + LD B,0 + LD HL,(FUYE) + LD (PL1+1),HL + LD DE,(FUNOYE) + BIT 7,D + JR Z,P32 + LD A,(KBL) + CP 3 + JR NZ,P31 + LD HL,(KAIX) + XOR A + SBC HL,DE + JR Z,P31 + JR C,P32 +P31: INC B +P32: LD A,(SBL) + CP 3 + JR NZ,P33 + LD HL,(SYUX) + XOR A + SBC HL,DE + JR Z,P33 + JR NC,P34 +P33: LD A,1 +P34: AND B + JR Z,P35 + LD HL,(FUXXHI) + CALL PLALL +P35: EXX +; +P4: LD A,M ;BLOCK NO.4 + OR A + + INC HL + JR Z,P5 + EXX + LD B,0 + LD HL,(FUXX) + LD (PL1+1),HL + LD DE,(FUNOYE) + LD A,(KBL) + CP 4 + JR NZ,P41 + LD HL,(KAIY) + XOR A + SBC HL,DE + JR Z,P41 + JR NC,P42 +P41: INC B +P42: XOR A + BIT 7,D + JR Z,P44 + LD A,(SBL) + CP 4 + JR NZ,P43 + LD HL,(SYUY) + XOR A + SBC HL,DE + JR Z,P43 + JR C,P44 +P43: LD A,1 +P44: AND B + JR Z,P45 + LD HL,(FUYYHI) + CALL PLALL +P45: EXX +; +P5: LD A,M ;BLOCK NO.5 + OR A + INC HL + JR Z,P6 + EXX + LD B,0 + LD HL,(FUXX) + LD (PL1+1),HL + LD DE,(CYE) + LD A,(KBL) + CP 5 + JR NZ,P51 + LD HL,(KAIY) + XOR A + SBC HL,DE + JR Z,P51 + JR NC,P52 +P51: INC B +P52: LD A,(SBL) + CP 5 + JR NZ,P53 + LD HL,(SYUY) + XOR A + SBC HL,DE + JR Z,P53 + JR C,P54 + +P53: LD A,1 +P54: AND B + JR Z,P55 + LD HL,(YYHI) + CALL PLALL +P55: EXX +; +P6: LD A,M ;BLOCK NO.6 + OR A + INC HL + JR Z,P7 + EXX + LD B,0 + LD HL,(FUYE) + LD (PL1+1),HL + LD DE,(FUNOYE) + LD A,(KBL) + CP 6 + JR NZ,P61 + LD HL,(KAIX) + XOR A + SBC HL,DE + JR Z,P61 + JR NC,P62 +P61: INC B +P62: XOR A + BIT 7,D + JR Z,P64 + LD A,(SBL) + CP 6 + JR NZ,P63 + LD HL,(SYUX) + XOR A + SBC HL,DE + JR Z,P63 + JR C,P64 +P63: LD A,1 +P64: AND B + JR Z,P65 + LD HL,(XXHI) + CALL PLALL +P65: EXX +; +P7: LD A,M ;BLOCK NO.7 + OR A + INC HL + JR Z,P8 + EXX + LD HL,(YYY) + LD (PL1+1),HL + LD DE,(CYE) + LD B,0 + LD A,(KBL) + CP 7 + JR NZ,P71 + LD HL,(KAIX) + XOR A + SBC HL,DE + JR Z,P71 + JR NC,P72 + +P71: INC B +P72: LD A,(SBL) + CP 7 + JR NZ,P73 + LD HL,(SYUX) + XOR A + SBC HL,DE + JR Z,P73 + JR C,P74 +P73: LD A,1 +P74: AND B + JR Z,P75 + LD HL,(XXHI) + CALL PLALL +P75: EXX +; +P8: LD A,M ;BLOCK NO.8 + OR A + INC HL + JR Z,PE + EXX + LD HL,(XXX) + LD (PL1+1),HL + LD DE,(CYE) + LD B,0 + LD A,(KBL) + CP 8 + JR NZ,P81 + LD HL,(KAIY) + XOR A + SBC HL,DE + JR Z,P81 + JR C,P82 +P81: INC B +P82: LD A,(SBL) + CP 8 + JR NZ,P83 + LD HL,(SYUY) + XOR A + SBC HL,DE + JR Z,P83 + JR NC,P84 +P83: LD A,1 +P84: AND B + JR Z,P85 + LD HL,(YYHI) + CALL PLALL +P85: EXX +; +PE: LD HL,(DYY) ;Zs"Ù\o + BIT 7,H + JR Z,CIR10 + LD DE,(YY) + LD HL,(XX) + DEC HL + LD (XX),HL + BIT 7,H + RET NZ + XOR A + SBC HL,DE + + RET C + LD HL,(XX) + ADD HL,HL + LD DE,(DYY) + ADD HL,DE + LD (DYY),HL +CIR10: LD HL,(YY) + INC HL + LD (YY),HL + LD HL,(CI.D) + INC HL + INC HL + LD (CI.D),HL + JP CIR7 +; +;CIRCLE "ÛÛÜ-ÞÙ +; +;BLOCK NUMBER ZÙ\Ü "ÛÛÜ-ÞÙ +BLCKRU: PUSH HL + PUSH DE + CALL ABSHL + EX DE,HL + CALL ABSHL + EX DE,HL + OR A + SBC HL,DE + POP DE + POP HL + JR C,BLCK1 + BIT 7,H + JR NZ,BLCK2 + BIT 7,D + LD A,8 + RET Z + LD A,1 + RET +BLCK2: BIT 7,D + LD A,5 + RET Z + LD A,4 + RET +BLCK1: BIT 7,H + JR NZ,BLCK5 + BIT 7,D + LD A,7 + RET Z + LD A,2 + RET +BLCK5: BIT 7,D + LD A,6 + RET Z + LD A,3 + RET +; +ABSHL: BIT 7,H + RET Z +NEGHL: LD A,H + CPL + LD H,A + LD A,L + + CPL + LD L,A + INC HL + RET +; +;PLOT Ü-ÞÙ +PLALL: LD DE,(POINTY) + ADD HL,DE + LD DE,65336 + LD B,H + LD C,L + ADD HL,DE + RET C +PL1: LD HL,0000H ;LKD HL,XXXXH + LD DE,(POINTX) + ADD HL,DE + EX DE,HL + LD HL,64896 + ADD HL,DE + RET C + LD H,B + LD L,C + JP PSET0 +; +; +;ÃßÜ Zs"Ù Ü-ÞÙ +HIRITU: ENT + PUSH AF + PUSH DE + LD B,8 + LD C,L + LD E,H + XOR A + LD D,A + LD H,A + LD L,A + EX AF,AF' + LD A,(CIR.HD) +HR1: RRA + JR NC,HR2 + ADD HL,DE + EX AF,AF' + ADD A,C + JR NC,HR3 + INC HL +HR3: EX AF,AF' +HR2: SLA C + RL E + RL D + DJNZ HR1 + EX AF,AF' + BIT 7,A + JR Z,+3 + INC HL + POP DE + POP AF + RET +; +CHENGE: LD (P14),A + LD (P24),A + + LD (P34),A + LD (P44),A + LD (P54),A + LD (P64),A + LD (P74),A + LD (P84),A + RET +; +; work area +; +CI.D: EQU KEYBF ;2 +DYY: EQU CI.D+2 ;2 +XX: EQU DYY+2 ;2 +YY: EQU XX+2 ;2 +CYE: EQU YY+2 ;2 +KBL: EQU CYE+2 ;1 \ÄÙÛ BLOCK NO. +SBL: EQU KBL+1 ;1 \mÄÙÛ BLOCK NO. +; +; +;ÛÛ CYE oÛºlym ÀÙ\ +FUYE: EQU SBL+1 ;2 +;ÛÛ XX oÛºlym ÀÙ\ +FUXX: EQU FUYE+2 ;2 +;ÛÛ CYE ÃßÜ oÛºlym ÀÙ\ +FUYYHI: EQU FUXX+2 ;2 +;ÛÛ XX ÃßÜ oÛºlym ÀÙ\ +FUXXHI: EQU FUYYHI+2 ;2 +; +FUNOYE: EQU FUXXHI+2 ;2 +; +CIR.BK: EQU FUNOYE+2 ;9 Block data +; +; +KAIX: EQU CIR.BK+9 ;2 \ÄÙ X +KAIY: EQU KAIX+2 ;2 \ÄÙ Y +SYUX: EQU KAIY+2 ;2 \mÄÙ X +SYUY: EQU SYUX+2 ;2 \mÄÙ Y +XXHI: EQU SYUY+2 ;2 XXÛ ÃßÜ DATA +YYHI: EQU XXHI+2 ;2 YEÛ ÃßÜ DATA +; +XXX: EQU YYHI+2 ;2 +YYY: EQU XXX+2 ;2 +; +CIR.HF: EQU YYY+2 ;1 +CIR.HD: EQU CIR.HF+1 ;1 +; + SKP H + +; ---------------------------- +; +; Box Write +; ext DE':xs, DE:xe +; HL':ys, HL:ye +; +; if CF then A:fill color +; +; ---------------------------- +LSTA: EQU KEYBF +RSTA: EQU LSTA+2 +SPBOX: EQU RSTA+2 +; +WBOX: ENT + LD (SPBOX),SP + EX AF,AF' + CALL WBOXSB + CALL WBOXSB + EXX + PUSH DE ;XS Upper + PUSH HL ;YS + PUSH DE ;XS Lower + EXX + PUSH HL ;YE + PUSH DE ;XE Lower + PUSH HL ;YE + PUSH DE ;XE Upper + EXX + PUSH HL ;YS + PUSH DE ;XS Upper Left + PUSH HL ;YS + EXX + EX AF,AF' + CALL C,BOXF ;Box fill + LD B,4 +WBOX2: EXX + POP HL + POP DE + EXX +WBOX4: POP HL + POP DE + PUSH BC + CALL WLINE0 ;Box bound + POP BC + DJNZ WBOX4 + RET +; +WBOXSB: EX DE,HL + LD A,H ;Compare HL,HL' + EXX + EX DE,HL + CP H + EXX + JR Z,WBOXS2 + RET P + JR WBOXS4 +WBOXS2: LD A,L + EXX + CP L + EXX + + RET NC +WBOXS4: PUSH HL + EXX + EX (SP),HL + EXX + POP HL + RET +; +;-------------------------- +; +; BOX FILL +; +; ent DE':xs, DE:xe +; HL':ys, HL:ye +; A:fill color +; +;-------------------------- +BOXF: + CALL COLS ;Fill Color Set + LD B,A + LD A,(GMODE) + CP B + JR NZ,BOXC + LD SP,(SPBOX) ;line routions pop +BOXC: LD A,(PWMODE) + OR A + LD A,C0H ;w0 pset + JR Z,BOXF0 + LD A,40H ;w0 or +BOXF0: OR B + OUT (LSWF),A ;Write mode set +; +YLINE: LD A,H + OR D + RET M + CALL BFCHK + LD A,L ;ye +; + EXX ;hl=ys,de=xs + BIT 7,H + JR Z,+5 + LD HL,0 + BIT 7,D + JR Z,+5 +; + LD DE,0 + EX AF,AF' + CALL BFCHK + RET C + EX AF,AF' ;ye +; + INC A + SUB L ;acc=lines(ye-ys+1) + RET C + RET Z + EX AF,AF' ;acc'=lines +; + PUSH HL ;ye + CALL ADCH + LD (LSTA),HL + + EXX + POP HL ;ye + LD B,A ;left + PUSH BC + CALL ADCH + POP BC + LD (RSTA),HL + LD C,A ;right + LD DE,(LSTA) +; +HLINE: OR A + SBC HL,DE + JR Z,BOXI + DEC HL + INC DE ;next point + LD A,L + OR A + CALL NZ,BOXL ;a' reserve +; +BOXH: LD HL,TDOTR + LD A,B + LD B,0 + ADD HL,BC + LD L,(HL) + LD C,A + LD A,L + LD HL,TDOTL + ADD HL,BC + LD B,(HL) +; +; + LD DE,(RSTA) + PUSH BC + CALL BOXW + POP BC + LD DE,(LSTA) + LD A,B + JR BOXW +; +; +; +; +BOXI: LD HL,TDOTR + LD A,B + LD B,0 + ADD HL,BC + LD C,A + LD A,FFH + AND (HL) + LD HL,TDOTL + ADD HL,BC + AND (HL) +; +; +BOXW: + LD C,A + EX AF,AF' + LD B,A + EX AF,AF' + EX DE,HL + + DI +BFL0: LD DE,80 ;40 + IN A,(LSE0) +BOXW1: LD (HL),C + ADD HL,DE + DJNZ BOXW1 + IN A,(LSE1) + EI + RET +; +; +; +; +BOXL: PUSH BC + EX DE,HL ;hl=start + LD B,A ;yoko counter + EX AF,AF' + LD C,A ;tate counter + EX AF,AF' +BFL1: LD DE,80 ;40 + DI +BOXL1: PUSH HL + PUSH BC + IN A,(LSE0) + LD A,FFH +BOXL0: LD (HL),A + INC HL + DJNZ BOXL0 + IN A,(LSE1) + POP BC + POP HL + ADD HL,DE + DEC C + JR NZ,BOXL1 + EI + POP BC + RET +; +; + SKP H + +;----------------------------- +; +; box fill range check +; +;----------------------------- +; +BFCHK: LD A,H + OR A + JR NZ,BFCHK0 + LD A,199 + CP L + JR NC,BFCHK1 ;skip if hl>199 +BFCHK0: LD HL,199 + SCF +BFCHK1: RRA ;push cf + PUSH HL +BFC0: LD HL,-640 ;-320 + ADD HL,DE + POP HL + JR NC,BFCHK3 ;skip if de>639,319 +BFC1: LD DE,639 ;319 + RET +; +BFCHK3: RLA ;pop cf + RET +;----------------------------- +; +; Position check +; +;----------------------------- +POSCK: ENT + EXX + CALL RNGCK + EXX + RET NC ;OK + LD A,3 + JP ERRORJ +;----------------------------- +; +; Position save +; +;----------------------------- +POSSV: ENT + EXX ;Position save + LD (POINTX),DE + LD (POINTY),HL + EXX + RET + SKP H + +;---------------------------- +; +; SYMBOL +; +; Ent. A:angle +; B:string length +; H:Y ratio +; L:X ratio +; DE:string address +; +;---------------------------- +; +; +SBDTAP: DEFS 8 +; +SDT0: EQU 1200H +SDT7: EQU 1207H +; +SCNT: EQU 1208H ;1 +HCNT: EQU SCNT+1 ;1 +VCNT: EQU HCNT+1 ;1 +BCNT: EQU VCNT+1 ;1 +; +STRAP: EQU BCNT+1 ;2 +SDTAP: EQU STRAP+2 ;2 +BDTAP: EQU SDTAP+2 ;2 +; +DEFX0: EQU BDTAP+2 ;1 +DEFY0: EQU DEFX0+1 ;1 +DEFX8: EQU DEFY0+1 ;2 +DEFY8: EQU DEFX8+2 ;2 +; +PX: EQU DEFY8+2 ;2 +PY: EQU PX+2 ;2 +; +VADD: EQU PY+2 ;2 +LDOT: EQU VADD+2 ;1 +; +DEFX: EQU LDOT+1 ;1 +DEFY: EQU DEFX+1 ;1 +DEF8: EQU DEFY+1 ;2 +; +NSDT: EQU DEF8+2 ;2 +; +; +CLLADD: DEFW LOD00 + DEFW LOD90 + DEFW LOD18 + DEFW LOD27 +; +; +SYMBOL: ENT + PUSH BC ;string length + PUSH DE ;string address + LD BC,PX + LD D,L + LD E,H + BIT 0,A + JR Z,SYMB10 ;skip acc=0,2 +; + + EX DE,HL ;exchange milti + INC BC + INC BC ;bc=py +; +SYMB10: LD (SYMB18+1),BC + LD (DEFX0),HL + LD H,0 + ADD HL,HL + ADD HL,HL + ADD HL,HL ;defx8=defx*8 + LD (DEFX8),HL +; + LD L,E + LD H,0 + ADD HL,HL + ADD HL,HL + ADD HL,HL ;defy8=defy*8 + LD (DEFY8),HL +; +; +; set py ,def8 +; + LD DE,0 + EX DE,HL ;de=defy8 + SBC HL,DE ;hl=-defy8 + LD (DEF8),HL ;def8=-defy8 + BIT 1,A + JR Z,SYMB11 ;skip if acc=0,1 +; + LD (DEF8),DE ;def8=defy8 +SYMB11: OR A ;HL=-defy8 + JP PO,SYMB12 ;skip if acc=1,2 +; + LD HL,0 +SYMB12: LD DE,(POINTY) + ADD HL,DE ;pointy or pointy-defy8 + LD (PY),HL ;set py +; +; +; set px def8 +; +; + LD DE,(DEFX8) + LD HL,0 + OR A ;de=defx8 + SBC HL,DE ;hl=-defx8 + BIT 0,A + JR NZ,SYMB13 ;skip if acc=1,3 + BIT 1,A + LD (DEF8),DE ;DE=defx8 + JR Z,SYMB13 ;skip if acc=0 + LD (DEF8),HL ;hl=-defx8 +SYMB13: EX DE,HL ;de=-defx8 + LD HL,(POINTX) + BIT 1,A + JR Z,SYMB15 ;skip if acc=0,1 + ADD HL,DE ;pointx or pointx-defx8 +SYMB15: LD (PX),HL ;set px +; +; calc rotation program addr + +; + ADD A,A + LD HL,CLLADD + LD D,0 + LD E,A + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + LD (SYMS10+1),DE +; + CALL SETW ;set pwmode + POP HL + POP BC +; +SYMB17: DEC B ;string count down + RET M +; + PUSH HL + PUSH BC + CALL SYMS +SYMB18: LD HL,PX ;py + LD E,(HL) ;calc px(py)=px(py)+def8 + INC HL + LD D,(HL) + PUSH HL + LD HL,(DEF8) + ADD HL,DE + EX DE,HL + POP HL + LD (HL),D + DEC HL + LD (HL),E ;set next disp addr + POP BC + POP HL + INC HL ;next string pointer + JR SYMB17 + SKP H + +; +; // SYMBOL SUB. // +; +; +; +SYMS: LD IY,SCNT + LD A,(HL) ;mz ascii -> display + SVC .?ADCN ;font addr calc + RST 3 + DEFB .?ADCN + ENDM + LD H,0 + LD L,A + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD A,10H + ADD A,H + LD H,A ;hl=hl+1000H +; + LD DE,SBDTAP ;xfer cg data + LD BC,8 + DI + IN A,(LSE0) + LDIR + IN A,(LSE1) + EI +; + LD B,8 ;rotation pro. +SYMS10: CALL LOD00 ;LODXX +; +; + LD HL,808H + LD (HCNT),HL ;set hcnt,vcnt + LD DE,(DEFX0) + LD (DEFX),DE + LD HL,(PX) + BIT 7,H + JR Z,SYMS20 ;skip if PX>=0 +; + CALL SSYMB + RET C ;error position +; +; +SYMS11: EXX ;data area rotate + LD B,8 + LD HL,SDT0 +SYMS12: RLC (HL) + INC HL + DJNZ SYMS12 + EXX + DJNZ SYMS11 +; + LD HL,0 +SYMS20: LD (SYMS23+1),HL + LD A,F8H + AND L + OR H + RRC A + RRC A + + RRC A +SYMS21: SUB 80 ;40 + RET NC ;buffer full check? +; + LD L,A ;SEND DATA ADD. + LD H,11H + LD (BDTAP),HL + LD HL,(PY) + XOR A + BIT 7,H + JR Z,SYMS22 +; + INC IY + CALL SSYMB + DEC IY + RET C ;error position +; +; + LD HL,0 + LD A,8 + SUB B +SYMS22: LD (SYMS24+1),A +SYMS23: LD DE,0 ;XXH + PUSH HL + PUSH DE + CALL RNGCK + POP DE + POP HL + RET C ;error position +; + CALL ADCH + LD (VADD),HL + LD HL,TDOTN + LD D,0 + LD E,A + ADD HL,DE + LD A,(HL) + LD (LDOT),A +SYMS24: LD HL,SDT0 +SYMS25: LD DE,(BDTAP) + LD BC,(LDOT) ;b defx c ldot + XOR A + EXX + LD B,(IY+1) ;hcnt +; +SYMS30: EXX + LD (DE),A + XOR A +; + RRC (HL) + JR NC,SYMS31 +; + LD A,B1H ;OR C +SYMS31: LD (SYMS32),A + LD A,(DE) +; +SYMS32: OR C ;nop + RLC C + JR NC,SYMS33 + LD (DE),A + + INC E ;next data addr + JR Z,SYMS34 ;skip if buffer full + XOR A +SYMS33: DJNZ SYMS32 +; +SYMS3A: LD B,(IY+0AH) ;defx0 + EXX + DJNZ SYMS30 ;hcnt +; + EXX + LD (DE),A + INC E +; +SYMS34: DEC E + INC L + LD (SDTAP),HL + LD HL,(BDTAP) + EX DE,HL + XOR A + SBC HL,DE + INC HL + LD (NSDT),HL + LD A,(DEFY) + LD B,A ;loop counter set +; +SYMS40: EXX + LD DE,(VADD) + LD HL,(BDTAP) + LD BC,(NSDT) + DI + IN A,(LSE0) + OUT (LSE0),A + LDIR + IN A,(LSE1) + EI +SYMS41: LD DE,80 ;40 + LD HL,(VADD) + ADD HL,DE + LD (VADD),HL ;next disp addr +SYMS42: LD DE,BE80H ;9F40H + OR A + SBC HL,DE + RET NC ;position error check +; + EXX + DJNZ SYMS40 +; +SYMS43: LD A,(DEFY0) ; + LD (DEFY),A ;set loop counter + LD HL,(SDTAP) + DEC (IY+2) ;VCNT + JP NZ,SYMS25 + RET + SKP H + +; +; // rotation sub . // +; +LOD00: LD HL,SBDTAP + LD DE,SDT0 + LD C,B + LD B,0 + LDIR + RET +; +; +LOD90: LD DE,SDT0 +LOD901: EXX + LD HL,SBDTAP + LD B,8 + XOR A +; +LOD902: RLC (HL) + RRA + INC HL + DJNZ LOD902 +; + EXX + LD (DE),A + INC DE + DJNZ LOD901 +; + RET +; +; +LOD18: LD DE,SDT7 + LD HL,SBDTAP +; +LOD181: LD A,(HL) + EXX + LD C,A + LD B,8 + XOR A +; +LOD182: RR C + RL A + DJNZ LOD182 +; + EXX + LD (DE),A + INC HL + DEC DE + DJNZ LOD181 +; + RET +; +; +LOD27: LD DE,SDT7 +LOD271: EXX + LD HL,SBDTAP + XOR A + LD B,8 +; +LOD272: RLC (HL) + RLA + + INC HL + DJNZ LOD272 +; + EXX + LD (DE),A + DEC DE + DJNZ LOD271 + RET +; +; calc position +; +; +SSYMB: LD B,8 + LD E,(IY+0AH) ;defx0,defy0 + LD D,0 +; +SSYMB1: ADD HL,DE + BIT 7,H + JR Z,SSYMB2 + DJNZ SSYMB1 +SSYMB4: SCF + RET +; +SSYMB2: LD A,H + OR L + JR NZ,SSYMB3 + LD L,E + DEC B + JR Z,SSYMB4 +SSYMB3: LD (IY+17H),L ;defx,defy + LD (IY+1),B ;HCNT,VCNT + OR A + RET + SKP H + +; +;------------------------------- +; +; +; PATTERN +; ent A:Heighth +; B:String length +; H:Direction +; DE:String adrs +; +;------------------------------- +POINTW: EQU KEYBF ;2 +STRAD: EQU POINTW+2 ;2 +PATDA1: EQU POINTW+250 +PATDA2: EQU POINTW+251 +PATDA3: EQU POINTW+252 +PATDA4: EQU POINTW+263 +; +; +CHARW: ENT + OR A ;no mode ? + RET Z ;yes + LD (STRAD),DE + LD E,A ;E'=Height + LD C,A ;C'=Height(work) + LD A,H + OR A + LD A,23H ;INC HL + JR NZ,PATT1 ;DOWN +; + LD A,2BH ;DEC HL +PATT1: LD (PATTA),A + LD (PATTC),A + LD A,B + OR A ;no string ? + RET Z ;yes +; + LD HL,(POINTX) + LD A,07H + AND L + LD D,A + EXX ;keep c',e',b',d' + LD HL,TDOTL + LD D,0 + LD E,A + ADD HL,DE + LD A,(HL) +; + LD (PATTB+1),A ;MASK DATA +; +PATT3: LD HL,(POINTY) +PATT4: LD (POINTW),HL ;save (POINTY) +; +PATTB: LD C,FFH ;C=mask data + LD HL,(STRAD) ;read DATA + LD A,(HL) +; + EXX ;keep c',e',b',d' + LD H,A + LD A,D + + OR A ;X=0 ? + JR Z,PATT6 ;yeS +PATT7: RRC H + DEC A + JR NZ,PATT7 +PATT6: LD A,H + EXX ;A=pattern data +; + LD HL,PATDA1 +; + LD B,8 ;DATA sift + LD D,A +PATT80: SRL D + RLA + DJNZ PATT80 +; + LD D,A ;C^D + AND C + LD (HL),A ;left set data +; + LD A,D + CPL + LD B,A ;B=CPL(D)=CPL(STRAD) + AND C ;C^CPL(D) + INC HL + LD (HL),A ;left reset data +; + LD A,C + CPL + LD C,A + AND D ;CPL(C)^D + INC HL + LD (HL),A ;right set data +; + LD A,C + AND B ;CPL(C)^CPL(D) + INC HL + LD (HL),A ;right reset data +; + LD DE,(POINTX) + LD HL,(POINTW) +; +; + PUSH DE + PUSH HL + EX DE,HL ;X=X+1 + LD BC,8 + ADD HL,BC + EX DE,HL + LD A,1 ;right mode + CALL PATT90 + POP HL + POP DE +; + XOR A ;left mode + CALL PATT90 +; +; + LD HL,(STRAD) ;next data + INC HL + + LD (STRAD),HL + EXX + DJNZ PATT5 ;B' +; + DEC C ;C' X-->END + EXX + JP Z,PATT70 ;X=X+8 & END + LD HL,(POINTW) +PATTC: INC HL ;DEC HL + LD (POINTY),HL +; + XOR A ;end + RET +; +PATT5: DEC C ;C' + JR NZ,PATT2 ;next Xposition + LD C,E ;C' E' + EXX + CALL PATT70 ;X=X+8 + JR PATT3 +; +; +PATT2: EXX + LD HL,(POINTW) +PATTA: INC HL ;DEC HL + JR PATT4 +; +; pointx+8 +; +PATT70: LD HL,(POINTX) + LD BC,8 + ADD HL,BC + LD (POINTX),HL + RET +; +;--------------------------- +; +; V-RAM write +; non keep +; +; A=0 ---->left +; 1 ---->right +; DE=X positin +; HL=y position +;--------------------------- +ATT90: EX AF,AF' ;push AF + CALL RNGCK + RET C ;address err +; + CALL ADCH ;get V-RAM address + LD B,A ;B=0 -->no right data +; HL=V-RAM address +; + LD DE,PATDA1 ;(DE)=write data + EX AF,AF' ;pop AF + OR A ;left data ? + JR Z,PATT91 ;yes +; + LD A,B ;non right data + OR A + + RET Z +; + INC DE ;DE,PATDA3 + INC DE +PATT91: CALL SETW ;mode set + DI + IN A,(LSE0) + OUT (LSE0),A ;get V-RAM + LD A,(DE) ;B=right data + LD (HL),A + LD A,(PWMODE) + OR A ;OR mode ? + JR NZ,PATT92 ;YES +; + LD A,(CPLANE) ;read color data + OR 60H + OUT (LSWF),A + INC DE + LD A,(DE) ;C=reset data + LD (HL),A +PATT92: IN A,(LSE1) + EI + RET +; + LIST + INCLD PAINT +; +; -------------------------------- +; +; PAINT ROUTINE ( 9.5/84 ) +; +; +; HL: COLOR ADD. +; B : NUM. of COLOR +; +; ------------------------------- +; +DIRAR: EQU 27D0H +ENKYB: EQU 12A0H +NDSP: EQU KEYBF ;2 +DSP: EQU NDSP+2 ;2 +NSSP: EQU DSP+2 ;1 +SSP: EQU NSSP+1 ;2 +PBXL: EQU SSP+2 ;2 +PBXR: EQU PBXL+2 ;2 +; +Y: EQU PBXR+2 ;2 +BXL: EQU Y+2 ;2 +BXR: EQU BXL+2 ;2 +DIRECT: EQU BXR+2 ;1 +JCONT: EQU DIRECT+1 ;1 +JSAVE: EQU JCONT+1 ;1 +JSAVE1: EQU JSAVE+1 ;1 +BUFF: EQU JSAVE1+1 ;11 DATA BUFF. +; +PEEK: EQU DIRAR ;PROGRAM AREA +; +WORK: EQU Y +; +; + +; // MAIN ROUTINE // +; +; +WPAINT: ENT + LD A,(GMODE) + OR C0H + OUT (LSWF),A ;Write mode set + EXX + LD DE,PEEK ;MAKE PEEK ROUTINE + LD HL,DPEEK + LD BC,DPEEK1-DPEEK + LDIR + EXX +; +PAIN0: LD A,(HL) ; COLOR SELECT + CALL COLS ;Bound Color Set + OR 80H ;SEARCH MODE SET + LD (DPEEK1+1),A + INC HL + EXX + LD HL,DPEEK1 + LD BC,DPEEK2-DPEEK1 + LDIR + EXX + DJNZ PAIN0 +; + EXX + LD BC,DPEEK3-DPEEK2+1 + LDIR + LD HL,(TMPEND) + LD (DSP),HL + LD (CSAVE+2),HL + LD HL,(PAIWED) + LD DE,-6 + ADD HL,DE + LD (SVDT0+1),HL +; +; + LD HL,(POINTX) + DEC HL + LD (BXL),HL ;BXL=POINTX-1 + INC HL + INC HL + LD (BXR),HL ;BXR=POINTX+1 + DEC HL + EX DE,HL + LD HL,0 + LD (NDSP),HL + LD HL,(POINTY) + LD (Y),HL + CALL RNGCK + CCF + RET NC ;START OUT RANGE +; + LD (SOVER1),SP + LD SP,DIRAR+700H +; +; + CALL ADCH + LD DE,TDOTN + + PUSH HL + LD H,0 + LD L,A + ADD HL,DE + LD C,(HL) + POP HL + CALL PEEK + AND C + JP NZ,PAINCE ;ON BOUND +; + CALL RBSR + LD (BXR),IX ;SET R.BOUND + CALL LBSR + LD (BXL),IX ;SET L.BOUND + LD A,FFH + LD (DIRECT),A ;DOWN + CALL SVDT + LD HL,ENKYB + LD (SSP),HL + XOR A + LD (DIRECT),A + LD (NSSP),A +; +PAIN1: LD A,(DIRECT) + CALL CHDIR0 + LD A,199 + CP L + JR C,PAINA ;OUT RANGE +; + CALL NBSRCH + JR C,PAINA ;CLOSE +; + LD (JCONT),A + AND 9 + CALL NZ,PAIND +; + CALL CSAVE + LD A,(JSAVE) + OR A + JR NZ,PAINA +; +PAIN3: CALL PSRCH + JR Z,PAIN1 +; + LD HL,(BXR) + PUSH HL + PUSH DE + CALL RBSR0 + LD (BXR),IX + CALL SVDT + POP HL + LD (BXL),HL + POP HL + LD (BXR),HL + JR PAIN1 +; +; +PAINA: LD HL,(DSP) + DEC HL + LD DE,-7 + + LD BC,(NDSP) +PAINA1: LD A,B + OR C + JR Z,PAINC +; + LD A,0FH + DEC BC + CP (HL) + ADD HL,DE + JR Z,PAINA1 +; + INC HL + PUSH HL + LD (PAINA2+1),HL + LD DE,WORK + LD BC,7 + LDIR + EX DE,HL + LD HL,(DSP) + XOR A + POP BC + LD (DSP),BC + SBC HL,DE + JR Z,PAINA3 +; + LD B,H + LD C,L +PAINA2: LD HL,00H ;XXH + EX DE,HL + LDIR + LD (DSP),DE +; +PAINA3: LD HL,(NDSP) + DEC HL + LD (NDSP),HL + JP PAIN3 +; +; +PAINC: LD HL,(NDSP) + LD A,L + OR H + JR NZ,PAINC0 +; +PAINCE: LD SP,(SOVER1) ;END JOB + RET +; +; +PAINC0: DEC HL + LD (NDSP),HL + LD HL,(DSP) + DEC HL + LD DE,WORK+6 + LD BC,7 + LDDR + INC HL + LD (DSP),HL +; +PAINC1: CALL PSRCH + JR Z,PAINC +; + + CALL RBSR0 + LD (BXR),IX + JR PAINC1 +; +; +PAIND: LD HL,PBXL ;DATA SAVE + LD DE,BUFF + CALL PAIND3 + LD A,(JCONT) + BIT 0,A + JR Z,PAIND1 +; +LTW: LD HL,(PBXL) + LD (BXR),HL + CALL TWR + JR C,LTW1 ;CLOSE +; + BIT 0,A + JR NZ,LTW +; +LTW1: CALL PAIND2 + LD A,(JCONT) + CP 9 + RET NZ +; +PAIND1: LD HL,(PBXR) + LD (BXL),HL + CALL TWR + JR C,PAIND2 +; + BIT 3,A + JR NZ,PAIND1 +; +PAIND2: LD HL,BUFF + LD DE,PBXL +PAIND3: LD BC,11 + LDIR + RET +; +; +; +; CHECK SAVE DATA +; +; +CSAVE: LD IY,00H ;XXH + LD BC,(NDSP) + LD HL,00H + LD (JSAVE),HL ;STATUS CLEAR +; +CSAVE1: CALL DSAVE + LD A,(NSSP) + OR A + RET Z +; + DEC A + LD (NSSP),A + LD (CSAVE2+1),SP + LD SP,(SSP) + POP IY + POP BC + + POP HL + LD (BXR),HL + POP HL + LD (BXL),HL + LD (SSP),SP +CSAVE2: LD SP,00H ;XXH + JR CSAVE1 +; +; +DSAVE: LD A,B + OR C + LD (DSAVEC+1),BC + JP Z,DSAVE3 +; + LD HL,(Y) + LD E,(IY+0) + LD D,(IY+1) + XOR A + SBC HL,DE + JR NZ,DSAVE2 +; + CALL COMP + CP 5 + JR Z,DSAVE1 +; + CP 0FH + JR NZ,DSAVE4 +; + LD L,(IY+2) ;SBXL + LD H,(IY+3) + LD DE,(BXR) + XOR A + SBC HL,DE + JR NC,DSAVE2 +; + LD HL,(BXL) + PUSH HL + LD L,(IY+2) + LD H,(IY+3) + PUSH HL + LD (BXL),HL + LD A,3 + CALL ESAVE + POP HL + LD (BXR),HL + POP HL + LD (BXL),HL + CALL RBSR + LD (BXR),IX + JR DSAVE2 +; +DSAVE1: LD E,(IY+4) ;SBXR + LD D,(IY+5) + LD HL,(BXL) + XOR A + SBC HL,DE + JR NC,DSAVE2 +; + LD HL,(BXR) + PUSH HL + + LD L,(IY+4) + LD H,(IY+5) + PUSH HL + LD (BXR),HL + LD A,4 + CALL ESAVE + POP HL + LD (BXL),HL + POP HL + LD (BXR),HL + CALL LBSR + LD (BXL),IX +; +DSAVE2: LD DE,7 + ADD IY,DE +DSAVEC: LD BC,00H ;XXH + DEC BC + JP DSAVE +; +DSAVE3: LD A,(JSAVE1) + OR A + CALL NZ,SVDT + RET +; +DSAVE4: EX AF,AF' + LD A,0FH + LD (JSAVE),A + EX AF,AF' + OR A + JR NZ,DSAVE5 +; + LD A,0FH + LD (IY+6),A + RET +; +DSAVE5: CP 1 + JR NZ,DSAVE6 +; + LD L,(IY+4) ;SBXR + LD H,(IY+5) + LD (BXL),HL + CALL LBSR + LD (BXL),IX + JR DSAVE8 +; +DSAVE6: CP 0CH + JR NZ,DSAVE9 +; +DSAVE7: LD L,(IY+2) ;SBXL + LD H,(IY+3) + LD (BXR),HL + CALL RBSR + LD (BXR),IX +DSAVE8: LD A,0FH + LD (IY+6),A + LD (JSAVE1),A ;SAVE DATA AFTER JOB + JR DSAVE2 +; +; +DSAVE9: CP 0DH + + JP NZ,ESAVE +; + LD A,(NSSP) + INC A + CP 27 + CCF + JP C,SOVER ;STACK OVER +; + LD (NSSP),A + LD HL,(BXL) + PUSH HL ;SAVE BXL + LD L,(IY+4) + LD H,(IY+5) + LD (BXL),HL + CALL LBSR + LD (DSAVEB+2),IY + LD DE,7 + ADD IY,DE + LD BC,(DSAVEC+1) + DEC BC + LD (DSAVEA+1),SP + LD SP,(SSP) + PUSH IX ;BXL + LD DE,(BXR) + PUSH DE + PUSH BC + PUSH IY + LD (SSP),SP +DSAVEA: LD SP,00H ;XXH +DSAVEB: LD IY,00H ;XXH + POP HL + LD (BXL),HL + JP DSAVE7 +; +; +ESAVE: EX AF,AF' + CALL SVDT + DEC DE + LD A,0FH + LD (DE),A + EX AF,AF' + CP 3 + JR NZ,ESAVE2 +; +ESAVE1: LD HL,(BXR) + LD (BXL),HL + LD L,(IY+4) + LD H,(IY+5) ;SBXR + LD (BXR),HL + CALL LBSR + PUSH IX + POP HL + LD (IY+2),L + LD (IY+3),H + RET +; +ESAVE2: CP 4 + JR Z,ESAVE3 +; + LD HL,(DSP) + + PUSH HL + LD (SVDT1+1),IY + CALL SVDT + LD HL,WORK + LD (SVDT1+1),HL + LD HL,(BXL) + PUSH HL + CALL ESAVE1 + POP HL + LD (BXR),HL + POP IY + JR ESAVE4 +; +; +ESAVE3: LD HL,(BXL) + LD (BXR),HL +ESAVE4: LD L,(IY+2) + LD H,(IY+3) + LD (BXL),HL + CALL RBSR + PUSH IX + POP HL + LD (IY+4),L + LD (IY+5),H + RET +; +; +; NEXT BOUNS SEARCH +; +; +NBSRCH: LD HL,(BXL) + LD (PBXL),HL + LD HL,(BXR) + LD (PBXR),HL + CALL LBSR + RET C ;CLOSE +; + LD (BXL),IX + CALL RBSR + LD (BXR),IX + CALL CONT ;CF=0 + LD A,B + RET +; +; CHANGE Y DIRECTON +; & +; NEXT Y CO-ORDINATE +; +CHDIR: LD A,(DIRECT) + CPL + LD (DIRECT),A +CHDIR0: LD HL,(Y) + INC L + OR A + JR NZ,CHDIR1 +; + DEC L + DEC L +CHDIR1: LD (Y),HL + RET + +; +; +TWR: CALL CHDIR + CALL NBSRCH + RET C +; + PUSH AF + LD HL,(BXL) + PUSH HL + LD HL,(BXR) + PUSH HL + CALL CSAVE + LD A,(JSAVE) + OR A + CALL Z,SVDT +; + POP HL + LD (BXR),HL + POP HL + LD (BXL),HL + POP AF + RET +; +; +; *** BOUND SEARCH **** +; +; +; +; // LEFT BOUNS SEARCH // +; +LBSR: LD DE,(BXR) + LD HL,(BXL) + PUSH HL + LD (BSRCH4+1),DE + LD HL,00H + LD (BSRCH6+1),HL + LD A,2BH ;DEC IX + LD (BSRCH3+1),A + LD A,2FH ;CPL + LD (BSRCH5),A + XOR A + LD (BSRCH7),A + LD HL,BSRCHL + LD (BSRCH1+1),HL + LD HL,BSRCHR + LD (BSRCH2+1),HL + POP DE + INC DE + JR BSRCH +; +; // RIGHT BOUNS SEARCH // +; +RBSR: LD DE,(BXR) +RBSR0: LD HL,(BXL) + LD (BSRCH6+1),HL + DEFB 21H ;LD HL,640 or 320 +LRBSR: ENT + DEFW 8002H + LD (BSRCH4+1),HL + LD A,23H ;INC IX + + LD (BSRCH3+1),A + LD A,2FH ;CPL + LD (BSRCH7),A + XOR A + LD (BSRCH5),A + LD HL,BSRCHR + LD (BSRCH1+1),HL + LD HL,BSRCHL + LD (BSRCH2+1),HL + DEC DE +; +; +; // SEARCH ROUTINE // +; +BSRCH: LD HL,(Y) + PUSH DE + POP IX + CALL ADCH + LD DE,TDOTN + PUSH HL + LD H,0 + LD L,A + ADD HL,DE + LD C,(HL) + POP HL + CALL PEEK + LD E,A + AND C +BSRCH1: JP Z,BSRCHL ;JP BSRCHR +; +BSRCH2: CALL BSRCHR ;CALL BSRCHL +BSRCH3: DEC IX ;INC IX + RET +; +; ++ SEARCH LEFT +++ +; +BSRCHL: DEC IX + RRC C + JR NC,BSRCHC +; + PUSH IX + EXX + POP DE + INC DE +BSRCH6: LD HL,00H ;BX + INC HL + SBC HL,DE + EXX + RET NC +; + DEC HL + CALL PEEK + LD E,A +BSRCHC: LD A,E +BSRCH7: NOP ;CPL + AND C + JP Z,BSRCHL + RET +; +; ++ SEARCH RIGHT +++ + +; +BSRCHR: INC IX + RLC C + JR NC,BSRCHA +; + CALL BSRCHD + RET C +; + INC HL + CALL PEEK + LD E,A +BSRCHA: LD A,E +BSRCH5: CPL ;NOP + AND C + JR Z,BSRCHR + +BSRCHD: PUSH IX + EXX + POP HL +BSRCH4: LD DE,BXR + XOR A + SBC HL,DE + EXX + CCF + RET +; +; +; +; // CONT. CHECK // +; +CONT: LD B,0H + LD HL,(PBXR) + LD DE,(BXR) + CALL CONT1 + LD HL,(PBXL) + LD DE,(BXL) + INC HL ;FOR HL=FFH + INC DE ;FOR DE=FFH +; +CONT1: PUSH HL + XOR A + INC HL + SBC HL,DE + POP HL + RL B + INC DE + EX DE,HL + SBC HL,DE + RL B + RET +; +; +; *** POINT DATA +; +; SAVE & LOAD **** +; +; +; // DATA SAVE // +; +SVDT: LD DE,(DSP) + +SVDT0: LD HL,0000 ; XX END ADD + XOR A + SBC HL,DE + JR NC,SVDT1 +; +SOVER: ENT + DEFB 31H ;STACK POINTER +SOVER1: ENT ;LD SP,XXH + DEFW 00H + SCF + RET +; +SVDT1: LD HL,WORK + LD BC,0007H + LDIR + LD (DSP),DE + LD HL,(NDSP) + INC HL + LD (NDSP),HL + RET +; +; +; *** PAINT & SEARCH **** +; +; +PSRCH: LD HL,(Y) + LD DE,(BXR) + DEC DE + CALL ADCH + LD DE,TDOTR + PUSH HL + LD H,0 + LD L,A + ADD HL,DE + INC C + LD B,C + LD C,(HL) + POP HL +; +PSRCH1: CALL PEEK + AND C + JR NZ,PSRCH2 ;BOUND +; + DI + IN A,(LSE0) + LD (HL),C + IN A,(LSE1) + EI + LD C,FFH + DEC HL + DJNZ PSRCH1 +; + LD DE,-1 + JR PSRCH5 +; +PSRCH2: LD E,B + LD B,7H + LD D,00H +PSRCH3: RLC A + JR C,PSRCH4 + +; + SCF + RR D + DJNZ PSRCH3 +; +PSRCH4: IN A,(LSE0) + LD A,C + AND D + LD (HL),A + IN A,(LSE1) +; + LD A,E + DEC A + RLC A + RLC A + RLC A + LD C,A + LD A,07H + AND C + LD D,A + LD A,F8H + AND C + OR B + LD E,A +PSRCH5: XOR A + LD HL,(BXL) + SBC HL,DE + RET +; +; +; // PEEK DATA // +; +DPEEK: PUSH HL + EXX + POP HL + DI + IN A,(LSE0) + LD C,LSRF + XOR A +; +DPEEK1: LD B,00H ;RE DATA + OUT (C),B + OR (HL) +; +DPEEK2: LD E,A + IN A,(LSE1) + EI + LD A,E + EXX +DPEEK3: RET +; +; +; // COMP. BXL,BXR // +; +COMP: LD HL,(BXL) + LD E,(IY+2) + LD D,(IY+3) + INC HL + INC DE + XOR A + + CALL COMP1 + LD HL,(BXR) + LD E,(IY+4) + LD D,(IY+5) +; +COMP1: SBC HL,DE + RLA + RLA + RET Z +; + OR 1 + RET +; + END +; + END diff --git a/software/asm/mz-xz009/MON-IOCS.ASM b/software/asm/mz-xz009/MON-IOCS.ASM new file mode 100644 index 0000000..880e97c --- /dev/null +++ b/software/asm/mz-xz009/MON-IOCS.ASM @@ -0,0 +1,1535 @@ +; ----------------------------- +; Lx-monitor IOCS-part +; FI:MON-IOCS ver 1.01 5.24.84 +; ----------------------------- +; + INCLD MACRO + ORG 1800H +; +$IOCS: ENT + JP $START +; +; FALG1 bit position +; +##REN: EQU 0 ;ROPEN enable +##WEN: EQU 1 ;WOPEN enable +##RCHR: EQU 2 ;Read at 1 char +##WCHR: EQU 3 ;Write at 1 char +##FNM: EQU 4 ;File name exist +##RND: EQU 5 ;FD +##SEQ: EQU 6 ;CMT, QD, XM +##STRM: EQU 7 ;CRT, LPT, RS, USR +; +; FLAG2 bit position +; +##CMT: EQU 7 ;Disp filename +##1OPN: EQU 6 ;1 file only open +##1WOP: EQU 5 ;1 file only wopen +##EOFE: EQU 4 ;select EOF process +; bit 0,1,2 ..... max channel +; +; ZRWX bit position +; +##ROPN: EQU 0 ;R.opened +##WOPN: EQU 1 ;W.opened +##XOPN: EQU 2 ;X.opened +##LOPN: EQU 3 ;L.opened +##EOF: EQU 7 ;End of file +; +; DIR offset +; +#SIZE: EQU 20 +#PTR: EQU 64 ;BSD block pointer +#BLKNO: EQU 64+16-2 ;BSD block number +; +CMTLU: EQU 80H +CRTLU: EQU 88H +LPTLU: EQU 89H +; +; +CRTLU?: LD A,(ZLOG) + CP CRTLU + RET +; +ZMODE: DEFW 0 ;File mode +ZBUFF: ENT + DEFW 0 ;Buffer adrs +ZBUFE: ENT + DEFW 0 ;Buffer end + SKP H + +; +; SVC .PRSTR ;print string into file +; ent DE:adrs +; B: length +; +PRTSTR: ENT + CALL IO.RDY + CALL PRTST0 +IO.OK: ENT + XOR A + LD (QSEG),A + RET +; +IO.RDY: ENT + LD A,(ZLOG) + LD (QSEG),A + RET +; +PRTST0: CALL PUSHR + LD A,(ZFLAG1) + BIT ##STRM,A + LD HL,PRT1C + JR Z,PRTST2 + BIT ##WCHR,A ;Output at + LD HL,.ZOUT + JR NZ,PRTST2 ; 1 char +.ZOUT: IOCALL ZOUT ; 1 line + LD IX,(ZOUT) + CALL IOCALL + ENDM + RET +; +PRTST2: LD A,B ;SEQ/RND + OR A + RET Z + LD A,(DE) +PRTST4: CALL .HL ;PRT1C or .ZOUT + INC DE + DEC B + JR PRTST2 +; +PRT1C: CALL PUSHR + LD E,(IY+#PTR) + LD D,(IY+#PTR+1) + LD HL,(ZBUFF) + ADD HL,DE + LD M,A + INC DE + LD HL,(ZBLK) + OR A + SBC HL,DE + CALL Z,PRT1B ;Buffer full + LD (IY+#PTR),E + LD (IY+#PTR+1),D + INC (IY+#SIZE) + RET NZ + INC (IY+#SIZE+1) + RET NZ + JP ER55 ;too long file + SKP H + +; +PRT1B: PUSH BC ;Output 1 block + LD B,02H ;F# not update, blocked +PRT1B0: CALL ?RND + LD IX,.ZOUT + JR Z,+6 + LD IX,PRX1B + LD A,B + CALL SEQSET + CALL .IX +PRT1B9: INC (IY+#BLKNO) + LD DE,0 + POP BC + RET +; +.IX: JP (IX) +; +PRT1BX: LD A,1AH ;Output last block + LD E,(IY+#PTR) + LD D,(IY+#PTR+1) +PRT1X2: LD HL,(ZBUFF) + ADD HL,DE + LD M,A + INC DE + LD HL,(ZBLK) + XOR A + SBC HL,DE + JR NZ,PRT1X2 + PUSH BC + LD HL,(ZBUFF) + DEC HL + LD M,FFH ;EOF mark + DEC HL + LD M,FFH + LD B,06H ;F# update, blocked + JR PRT1B0 +; +; +SEQSET: LD BC,(ZBLK) + INC BC + INC BC + LD HL,(ZBUFF) + DEC HL + DEC HL + LD DE,(ZMODE) + RET +; +; +.ZEND: DEFB F6H +.ZSTRT: XOR A + IOCALL ZSTRT + LD IX,(ZSTRT) + CALL IOCALL + ENDM + RET + SKP H + +; +; SVC .INSTT ;INPUT command start +; +INPSTRT:ENT + CALL CRTLU? ;input start + RET NZ + PUSH DE + LD DE,KEYBUF + CALL BINPUT + LD (INPKB+1),DE + POP DE + RET NC + JP BREAKZ +; +; SVC .INMSG ;input from file +; ent DE:adrs +; ext B: length +; +INPMSG: ENT + PUSH HL + PUSH DE + CALL IO.RDY + LD HL,(ZTOP) + INC HL + BIT ##EOF,M + PUSH HL + LD B,0 + SCF + CALL Z,INPMS0 + POP HL + CALL C,INEOF + POP DE + PUSH AF + CALL IO.OK + LD L,B + LD H,0 + ADD HL,DE + LD M,0 + POP AF + POP HL + RET +; +INEOF: SET ##EOF,M + LD HL,ZFLAG2 + BIT ##EOFE,M + RET Z ;nomally + JP ER63 ;old method +; +INPMS0: CALL CRTLU? ;input 1 record + JR Z,INPKB + LD A,(ZFLAG1) + BIT ##STRM,A + LD HL,INP1C + JR Z,INPMC + BIT ##RCHR,A + LD HL,.ZINP + JR NZ,INPMC +.ZINP: IOCALL ZINP + LD IX,(ZINP) + CALL IOCALL + + ENDM + RET +; +INPKB0: LD A,"?" + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + LD A," " + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + SVC .INSTT + RST 3 + DEFB .INSTT + ENDM +INPKB: LD HL,0 ;xxx + CALL HLFTCH + OR A + JR Z,INPKB0 + LD C,0 + SVC .INDATA + RST 3 + DEFB .INDATA + ENDM + LD (INPKB+1),HL + RET +; +; SVC .INDAT ;read 1 item from buffer +; ent HL:data pointer +; DE:input buffer +; C: separater(nomaly 00H or ":") +; ext B: length +; HL:data pointert +; +INPDT: ENT + LD B,0 + TEST1 '"' + CALL TEST1 + DEFB '"' + ENDM + JR NZ,INPDT6 +INPDT2: LD A,M + OR A + RET Z + INC HL + CP '"' + JR Z,INPDT4 + LD (DE),A + INC DE + INC B + JR INPDT2 +INPDT4: TEST1 "," + CALL TEST1 + DEFB "," + ENDM + OR A ;Reset CF + RET +; + +INPDT6: LD A,M + OR A + RET Z + CP C + RET Z + INC HL + CP "," + RET Z + LD (DE),A + INC DE + INC B + JR INPDT6 +; +INPMC: LD (INPMC2+1),HL ;input by chr + LD B,0 +INPMC2: CALL 0 ;INP1C or (ZINP) + RET C + CP 0DH + RET Z + LD (DE),A + INC DE + INC B + JR NZ,INPMC2 + JP ER41 ;I/O error + SKP H + +; +INP1C0: ENT + LD A,(ZFLAG1) + BIT ##STRM,A + JP NZ,ER59 ;STRM ommit +INP1C: CALL PUSHR + LD E,(IY+#PTR) + LD D,(IY+#PTR+1) + LD HL,(ZBLK) + OR A + SBC HL,DE + CALL Z,INP1B + RET C + LD L,(IY+#BLKNO) + LD H,(IY+#BLKNO+1) + XOR A + SBC HL,DE + SCF + RET Z ;EOF + LD HL,(ZBUFF) + ADD HL,DE + LD A,M + INC DE + LD (IY+#PTR),E + LD (IY+#PTR+1),D + RET +; +INP1B: CALL ?RND + JP NZ,INX1B + DEFB F6H ;not first block +INP1B0: XOR A ;first block + CALL SEQSET + CALL .ZINP + RET C + LD A,M + INC HL + AND M + LD M,FFH + INC A + LD DE,0 + RET NZ ;Nomal block + PUSH HL ;EOF block + LD HL,(ZBUFE) + LD BC,(ZBLK) +INP1B2: DEC HL + DEC BC + LD A,M + OR A + JR Z,INP1B2 + POP HL + LD M,B ;#BLKNO := Block length + DEC HL + LD M,C + RET + SKP H + +; +; SVC .LUCHK ;check lu & set Z-area +; ent A: lu +; ext A: 1:R, 2:W +; if CF then not-found +; +LUCHK: ENT + CALL PUSHR + LD HL,CRTTBL + CP CRTLU + JR Z,LUCHK4 + LD HL,LPTTBL + CP LPTLU + JR Z,LUCHK4 + SVC .SEGAD + RST 3 + DEFB .SEGAD + ENDM + RET C ;LU# not found +LUCHK4: LD (ZTOP),HL + LD DE,ZLOG + LD BC,8 + LDIR + LD (ZMODE),HL + LD IY,HL + LD DE,ELMD + CALL LDIR64 + PUSH HL + LD HL,(ZEQT) + LD DE,ZNXT + LD BC,ZBYTES + LDIR + POP HL + LD BC,16 + ADD HL,BC + LD (ZBUFF),HL + LD BC,(ZBLK) + ADD HL,BC + LD (ZBUFE),HL + LD A,(ZRWX) + AND 0FH + RET +; +; +CRTTBL: DEFB CRTLU + DEFB 3 ;W R + DEFW $CRT + DEFW 0 + DEFW 0 +; +LPTTBL: DEFB LPTLU + DEFB 2 ;W + DEFW $LPT + DEFW 0 + DEFW 0 +; + SKP H + +; +; SVC .DEVNM ;Interp. dev name +; ent DE:device name pointer +; ext DE:equipment table +; HL:file name pointer +; A: channel +; +DEV: ENT + LD HL,KEYBUF + PUSH HL + LD A,B + OR A + CALL NZ,LDHLDE + LD M,0 + LD HL,EQTBL + JR +5 +DEV1: LD HL,0 ;xxx + LD A,L + OR H + JR Z,DEV8 ;Not found + LD (DEV7+1),HL + CALL LDDEMI + LD (DEV1+1),DE + LD DE,KEYBUF + EX DE,HL +DEV2: LD A,(DE) + OR A + JR Z,DEV4 + CP M + JR NZ,DEV1 ;Mismatch + INC HL + INC DE + JR DEV2 +DEV4: LD A,M + INC HL + CP ":" + LD C,0 + JR Z,DEV5 ;Match + SUB "1" + CP 9 + JR NC,DEV1 ;Mismatch + LD C,A + LD A,M + INC HL + CP ":" + JR NZ,DEV1 ;Mismatch +DEV5: EX (SP),HL ;Found +DEV7: LD HL,0 ;xxx + LD A,C + JR DEV9 +DEV8: POP HL ;Not found + PUSH HL +DEV82: LD A,M + INC HL + CP ":" + JP Z,ER58 ;Dev name err + OR A + JR NZ,DEV82 + LD HL,(DDEV) + LD A,(DCHAN) + +DEV9: LD (ZEQT),HL + PUSH HL + LD (ZCH),A + LD DE,ZNXT + LD BC,ZBYTES + LDIR + LD B,A + LD A,(ZFLAG2) + AND 07H ;bit 0,1,2 + CP B + JP C,ER58 ;Dev name err (CH#) + LD A,B + POP DE + POP HL + RET +; +; SVC .DEVFN ;Interp. dev&file name +; ent DE:pointer +; B: length +; +DEV&FN: ENT + CALL PUSHR + SVC .DEVNM + RST 3 + DEFB .DEVNM + ENDM + EX DE,HL + LD HL,ELMD1 + LD B,31 + CALL ?CLRHL + LD HL,ELMD + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + CALL SETFNAM + LD HL,ZFLAG1 + BIT ##FNM,M + RET Z + INC HL + BIT ##CMT,M + RET NZ + LD A,(ELMD1) ;except CMT, + CP 0DH ; no filename is + JP Z,ER60 ; error 60. + RET + SKP H + +; +; SVC .RWOPEN ;ROPEN/WOPEN/XOPEN +; +RWOPEN: ENT + CALL PUSHR + CALL OPEN00 + LD B,0 + CALL TYPECK + JP DUST +; +OPEN00: LD A,(ZLOG) + SVC .SEGAD + RST 3 + DEFB .SEGAD + ENDM + JP NC,ER43 ;LU already opened + CALL ?OPEND ;Check already opened + LD HL,8+64+16+5 ;LU, DIR and work + LD A,(ZFLAG1) + LD DE,(ZBLK) + INC DE + INC DE + BIT ##STRM,A + JR NZ,+3 + ADD HL,DE ;SEQ,RND + LD A,(ZRWX) + BIT 2,A + JR Z,+3 + ADD HL,DE ;XO + EX DE,HL + LD A,(ZLOG) + SVC .OPSEG ;open segment + RST 3 + DEFB .OPSEG + ENDM + LD (QSEG),A + LD (ZTOP),HL + EX DE,HL + LD HL,ZLOG + LD BC,8 + LDIR ;xfer ZLOG to seg + LD (ZMODE),DE + LD IY,DE + LD HL,ELMD + CALL LDIR64 ;xfer ELMD to seg + LD HL,16 + ADD HL,DE + LD (ZBUFF),HL + LD DE,(ZBLK) + ADD HL,DE + LD (ZBUFE),HL + CALL ?RND + JP NZ,OPX ;RND + LD A,(ZRWX) ;SEQ/STRM + BIT ##XOPN,A + JP NZ,ER59 + BIT ##WOPN,A + LD IX,(ZWO) + JR NZ,OPEN20 + LD A,(ZFLAG1) + + BIT ##STRM,A + JR Z,OPEN30 + LD IX,(ZRO) ;STRM RO +OPEN20: LD HL,ELMD ;SEQ/STRM WO + JP IOCALL +OPEN30: LD B,(IY+0) ;SEQ RO + CALL SERFLR + LD A,(ELMD) + CP B + JP NZ,ER61 + JP INP1B0 ;First call +; +; SVC .LOPEN ;Search for LOAD +; +LOPEN: ENT + CALL PUSHR + LD IY,0100H ;(ZLOG)=0 + LD (ZLOG),IY ;(ZRWX)=1 ;R + LD IY,ELMD + CALL ?RND + LD HL,LOPX + JR NZ,+5 + LD HL,SERFLR + CALL .HL + LD B,80H + CALL TYPECK + LD A,(ELMD) + RET +; +; type check (chained or contiguas) +; +TYPECK: LD A,(ELMD) + CP 5 + RET C + LD A,(ELMD18) + AND 80H + CP B + RET Z + JP ER61 + SKP H + +; +; SVC .CLKL ;CLOSE/KILL +; ent A: lu, if A=0 then all-files +; B: B=0:KILL, B<>0:CLOSE +; +CLKL: ENT ;CLOSE/KILL file + CALL PUSHR + OR A + JR Z,CLKLA + CALL CL1F + JP DUST +; +CL1F: SVC .LUCHK + RST 3 + DEFB .LUCHK + ENDM + RET C ;LU# not found + CALL IO.RDY + PUSH AF + CALL ?RND + JR NZ,CL1FR + BIT ##STRM,A + LD A,B + JR Z,CL1FB + OR A ;Streem I/O + LD IX,(ZKL) + JR Z,+6 + LD IX,(ZCL) + CALL IOCALL + JR CL1F8 +CL1FB: OR A ;SEQ I/O + JR Z,CL1F8 + LD A,(ZRWX) + BIT ##WOPN,A + CALL NZ,PRT1BX + JR CL1F8 +CL1FR: CALL CLX ;RND I/O +CL1F8: POP AF + SVC .DLSEG + RST 3 + DEFB .DLSEG + ENDM + RET +; +; SVC .CLRIO ;clear all i/o +; +CLRIO: ENT + CALL PUSHR + LD B,0 +CLKLA: LD C,8EH ;all files +CLKLA2: LD A,C + PUSH BC + SVC .SEGAD + RST 3 + DEFB .SEGAD + ENDM + CALL NC,CL1F + POP BC + DEC C + JR NZ,CLKLA2 + + JP ERRCVR + SKP H + +; +; search file (SEQ device) +; +SERFIL: ENT + CALL PUSHR ;Search file + LD A,(ZFLAG1) + BIT ##SEQ,A + JP Z,ER59 ;SEQ only ok + CALL .ZSTRT + LD A,(ZDIRMX) + LD B,A +SERFL2: LD HL,KEYBUF + PUSH BC + IOCALL ZRO ;RDINF + LD IX,(ZRO) + CALL IOCALL + ENDM + POP BC + SET 0,A ;A<>0 + RET C ;Not found + LD DE,IY + CALL FNMTCH + LD A,M + RET Z + DJNZ SERFL2 + XOR A ;end of dir + SCF + RET +; +; search file for WOPEN, SAVE +; (SEQ device) +; +SERFLW: ENT + CALL ?OPEND + CALL SERFIL + JP NC,ER42 ;already exist + OR A + JP Z,ER51 ;too many files + RET +; +; search file for ROPEN +; (SEQ device) +; +SERFLR: CALL ?OPEND + CALL SERFIL + JP C,ER40 ;not found + CALL PUSHR + LD HL,KEYBUF + LD DE,IY + PUSH HL + CALL LDIR64 + POP HL + LD DE,ELMD + LD A,M +LDIR64: LD BC,64 + LDIR + OR A + RET + SKP H + +; +; CALL ?OPEND ; Check already opened +; +?OPEND: ENT + LD IX,?OPCKX +?OPEN0: ENT + LD (?OPEN6+1),IX + CALL PUSHR + LD A,(ZLOG) + LD C,A + LD HL,(POOL) + PUSH HL +?OPEN2: POP HL + LD A,M + OR A + RET Z + LD B,A + INC HL + CALL LDDEMI + PUSH HL + ADD HL,DE + EX (SP),HL + CP 8FH + JR NC,?OPEN2 ;non i/o seg. + CP C + JR Z,?OPEN2 ;same lu + INC HL ;ZRWX + LD A,M + EX AF,AF' + INC HL + LD DE,ZEQT + PUSH BC + LD BC,300H +?OPEN4: LD A,(DE) + SUB M + OR C + LD C,A + INC DE + INC HL + DJNZ ?OPEN4 + POP BC + JR NZ,?OPEN2 ;Diff. device + LD A,B +?OPEN6: CALL 0 ;xxx + JR ?OPEN2 +; +?OPCKX: LD A,(ZFLAG2) ;Same device + BIT ##1OPN,A ;1 file only ? + JP NZ,ER43 ; Yes, already open + BIT ##1WOP,A ;1 file only W ? + RET Z ; No, ok + EX AF,AF' + LD B,A + LD A,(ZRWX) + AND B + BIT ##WOPN,A + RET Z + JP ER43 + SKP H + +; +; SVC .LOADFL +; ent HL:loaging adrs +; call after .DEVFN and .LOPEN +; +LOADFL: ENT + CALL ?RND + JP NZ,LDX + LD BC,(ELMD20) + PUSH BC + XOR A ;first block + IOCALL ZINP + LD IX,(ZINP) + CALL IOCALL + ENDM + POP BC + RET +; +; SVC .VRFYF ;verify file +; ent HL:adrs +; call after .DEVFN, .LOPEN +; +VRFYFL: ENT + LD A,(ZFLAG2) + BIT ##CMT,A + JP Z,ER59 + LD BC,(ELMD20) + JP CMTVRF +; +; SVC .SAVEF ;save file +; ent DE:adrs +; call after .DEVFN +; +SAVEFL: ENT + LD A,(ELMD) + CP 5 + JR C,SAVEF2 + LD A,80H + LD (ELMD18),A ;contiguas flag +SAVEF2: CALL ?RND + JP NZ,SVX + BIT ##STRM,A + JP NZ,ER59 + PUSH DE + LD HL,0200H + LD (ZLOG),HL + CALL ?OPEND + LD HL,ELMD + LD IY,HL + IOCALL ZWO + LD IX,(ZWO) + CALL IOCALL + ENDM + LD BC,(ELMD20) + POP HL + LD A,04H ;F# update,unblocked + IOCALL ZOUT + LD IX,(ZOUT) + CALL IOCALL + ENDM + + RET +; +; +?RND: ENT + LD A,(ZFLAG1) + BIT ##RND,A + RET + SKP H + +; +; SVC .DIR +; ent A=0 ... read dir +; A>0 ... output dir +; +FDIR: ENT + CALL PUSHR + OR A + JR NZ,FDIR3 + LD HL,100H + LD (ZLOG),HL + CALL ?OPEND + LD HL,ZFLAG1 + BIT ##STRM,M + JP NZ,ER59 ;Streem i/o omit + BIT ##RND,M + JP NZ,LD.DIR ;RND + INC HL ;SEQ + BIT ##CMT,M + JP NZ,ER59 ;CMT ommit + CALL MWAIT ;MUSIC WAIT + LD HL,DIRARE + LD BC,8 ;clear 0800H bytes + CALL ?CLRHL + DEC C + JR NZ,-4 + CALL .ZSTRT + LD A,(ZDIRMX) + LD B,A + LD HL,DIRARE +FDIR2: PUSH BC + IOCALL ZRO ;read infomation + LD IX,(ZRO) + CALL IOCALL + ENDM + PUSH AF + LD BC,32 + ADD HL,BC + LD M,0 + POP AF + POP BC + JR C,+4 + DJNZ FDIR2 + JP .ZEND +; +FDIR3: LD (FDIROT+1),A + XOR A + LD (DISPX),A + LD HL,KEYBUF + PUSH HL + LD DE,DIRM1 + LD B,DIRM2-DIRM1 + CALL LDHLDE + CALL SETDNM ;set device name + LD M," " + INC HL + LD M," " + INC HL + EX DE,HL + CALL ?RND + + LD IX,(ZFREE) ;SEQ + JR Z,+6 + LD IX,FREEX ;RND + CALL IOCALL + JR C,FDIR4 + LD HL,BC + LD B,0 + SVC .ASCHL + RST 3 + DEFB .ASCHL + ENDM + LD HL,DIRM2 + LD B,DIRM3-DIRM2 + CALL LDDEHL +FDIR4: EX DE,HL + LD M,0DH + INC HL + LD M,0 + POP DE + CALL FDIROT ;DIR OF dd: xxx KB FREE +; + LD B,64 ;max dir + LD HL,DIRARE +FDIR6: CALL FDIRS ;mod "name" + LD DE,32 + ADD HL,DE + DJNZ FDIR6 + JP DUST +; +FDIRS: CALL PUSHR + LD A,M + OR A + RET Z + RET M + LD DE,KEYBUF + PUSH DE + LD A," " + LD B,38 + CALL ?SETDE + LD A,M + CP MAXMOD+1 + JR C,+4 + LD A,MAXMOD+1 + LD IY,HL + POP DE + PUSH DE + INC DE + LD HL,DIRM3-3 + LD BC,3 + ADD HL,BC + DEC A + JR NZ,-2 + LDIR + EX DE,HL + BIT 0,(IY+18) + JR Z,+4 + LD M,"*" + INC HL + INC HL + LD M,'"' + + INC HL +FDIRS2: LD A,(IY+1) + CP 0DH + JR Z,FDIRS4 + LD M,A + INC IY + INC HL + JR FDIRS2 +FDIRS4: LD M,'"' + INC HL + LD M,0DH + INC HL + LD M,0 + POP DE +FDIROT: LD A,0 ;xxx output lu + SVC .LUCHK + RST 3 + DEFB .LUCHK + ENDM + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + SVC .PRSTR + RST 3 + DEFB .PRSTR + ENDM + SVC .HALT + RST 3 + DEFB .HALT + ENDM + RET +; +DIRM1: DEFB 0DH + DEFM "DIRECTORY OF " + + + +DIRM2: DEFM " KB FREE." + + +DIRM3: DEFM "OBJ" ;1 + DEFM "BTX" ;2 + DEFM "BSD" ;3 + DEFM "BRD" ;4 + DEFM "RB " ;5 + DEFM " ? " ;6 + DEFM "LIB" ;7 + DEFM " ? " ;8 + DEFM " ? " ;9 + DEFM "SYS" ;10 + DEFM "GR " ;11 + DEFM " ? " ;12 +MAXMOD: EQU 11 + SKP H + +; +; INIT "dev:command" +; +FINIT: ENT + PUSH HL +FINIT2: XOR A + LD (ZLOG),A + LD IX,?OPCKY + LD (?OPCKY+1),SP + CALL ?OPEN0 + POP HL + IOCALL ZINIT + LD IX,(ZINIT) + CALL IOCALL + ENDM + RET +; +?OPCKY: LD SP,0 + LD B,0 + SVC .CLKL ;KILL + RST 3 + DEFB .CLKL + ENDM + JR FINIT2 +; +; Ask Y or N +; +OKYN: ENT + TEST1 "Y" + CALL TEST1 + DEFB "Y" + ENDM + RET Z + LD DE,OK?MSG + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + LD A,1 + SVC .INKEY + RST 3 + DEFB .INKEY + ENDM + CP "Y" + RET Z + JP BREAKZ +OK?MSG: DEFM "OK ? [Y/N]" + + + DEFB 19H ;alpha + DEFB 0 + SKP H + +; +; Filename check +; +CKFIL: ENT + LD DE,ELMD +FNMTCH: ENT + CALL PUSHR + INC HL + INC DE + LD A,(DE) + CP 0DH + RET Z + LD B,17 +FNMTLP: LD A,(DE) + CP M + RET NZ + CP 0DH + RET Z + INC HL + INC DE + DJNZ FNMTLP + OR A + RET +; +; +SETFNAM:ENT + INC HL + LD C,16 +SETFN2: LD A,B + OR A + JR Z,SETFN4 + LD A,(DE) + INC DE + DEC B + OR A + JR Z,SETFN4 + CP '"' + JR Z,SETFN2 + CP ":" + JP Z,ER60 ;file name err + LD M,A + INC HL + DEC C + JR NZ,SETFN2 +SETFN4: LD M,0DH + INC HL +SETFN6: LD A,C + OR A + RET Z + LD M," " + INC HL + DEC C + JR SETFN6 + SKP H + +; +; SVC .SEGAD ;get segment adrs +; ent A .... Seg No. +; ext HL ... Buffer adrs +; +SEGADR: ENT + LD HL,(POOL) +SEGAD2: INC M + DEC M + SCF + RET Z ;not found + CP M + INC HL + JR Z,SEGAD9 + PUSH DE + CALL LDDEMI + ADD HL,DE + POP DE + JR SEGAD2 +SEGAD9: INC HL + INC HL + RET +; +; SVC .DLSEG ;delete segment +; ent A .... Seg No. +; +DELSEG: ENT + CALL PUSHR + SVC .SEGAD + RST 3 + DEFB .SEGAD + ENDM + RET C ;Not exist + DEC HL + LD B,M + DEC HL + LD C,M ;BC = length + DEC HL ;HL = del start + LD DE,HL ;DE = del start + INC BC + INC BC + INC BC ;BC = del size + PUSH BC + ADD HL,BC ;HL = del end + PUSH HL + LD BC,HL + LD HL,(TMPEND) + OR A + SBC HL,BC + LD BC,HL ;BC = Move bytes + POP HL ;HL = del end + LDIR + POP DE ;DE = del size + LD HL,0 + OR A + SBC HL,DE + EX DE,HL ;DE= - delete size + SVC .ADDP1 + RST 3 + DEFB .ADDP1 + + ENDM + OR A + RET +; + SKP H + +; +; SVC .OPSEG ;open segment +; ent A .... Seg No. +; DE ... Buffer length +; ext HL ... Buffer adrs +; +OPSEG: ENT + PUSH AF + PUSH BC + PUSH DE + PUSH DE + INC DE + INC DE + INC DE + LD HL,(TMPEND) + EX DE,HL ; + ADD HL,DE ; ADD DE,HL + EX DE,HL ; DE = new TMPEND + JP C,ER06 + PUSH HL + LD HL,-512 + ADD HL,SP + SBC HL,DE + JR C,ER06 + LD HL,(MEMLMT) + DEC H + DEC H + SBC HL,DE + JR C,ER06 + POP HL + PUSH HL ;old TMPEND + LD BC,(VARST) ;POOL END + OR A + SBC HL,BC + LD BC,HL ;BC = move bytes + POP HL ;HL = old TMPEND + INC BC + LDDR + POP DE ;Buffer length + LD M,A ;Seg No. + INC HL + LD M,E ;Size + INC HL + LD M,D + INC HL + PUSH HL + INC DE ;LEN+1 + PUSH DE +OPSEG2: LD M,0 + INC HL + DEC DE + LD A,D + OR E + JR NZ,OPSEG2 + POP DE ;LEN+1 + INC DE + INC DE ;LEN+3 + SVC .ADDP1 + RST 3 + DEFB .ADDP1 + + ENDM + POP HL + POP DE + POP BC + POP AF + RET + SKP H + +; + ERENT 03 +ER03: ENT + IFD @2 + ENDIF + IFU @2 + LD A,03 + ENDIF + DEFB 21H + ENDM + ERENT 06 +ER06: ENT + IFD @2 + ENDIF + IFU @2 + LD A,06 + ENDIF + DEFB 21H + ENDM + ERENT 28,1 +ER28: ENT + IFD 1 + LD A,28+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 40,1 +ER40: ENT + IFD 1 + LD A,40+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 41,1 +ER41: ENT + IFD 1 + LD A,41+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 42,1 +ER42: ENT + IFD 1 + + LD A,42+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 43,1 +ER43: ENT + IFD 1 + LD A,43+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 46,1 +ER46: ENT + IFD 1 + LD A,46+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 50,1 +ER50: ENT + IFD 1 + LD A,50+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 51,1 +ER51: ENT + IFD 1 + LD A,51+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 52,1 +ER52: ENT + IFD 1 + LD A,52+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 53,1 +ER53: ENT + IFD 1 + LD A,53+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + + ERENT 54,1 +ER54: ENT + IFD 1 + LD A,54+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 55,1 +ER55: ENT + IFD 1 + LD A,55+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 58 +ER58: ENT + IFD @2 + ENDIF + IFU @2 + LD A,58 + ENDIF + DEFB 21H + ENDM + ERENT 59,1 +ER59: ENT + IFD 1 + LD A,59+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 60,1 +ER60: ENT + IFD 1 + LD A,60+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 61,1 +ER61: ENT + IFD 1 + LD A,61+80H + ENDIF + IFU 1 + ENDIF + DEFB 21H + ENDM + ERENT 63,1 +ER63: ENT + IFD 1 + LD A,63+80H + ENDIF + IFU 1 + + ENDIF + DEFB 21H + ENDM + ERENT 64 +ER64: ENT + IFD @2 + ENDIF + IFU @2 + LD A,64 + ENDIF + DEFB 21H + ENDM +ER68: ENT + LD A,68+80H + JP ERRORJ +; +; +; Error recover routine +; +ERRCVR: ENT + LD A,(QSEG) + OR A + LD B,0 + CALL NZ,CLKL ;KILL + CALL FLOFF ;FD motor off + CALL QDOFF ;QD motor off + XOR A + LD (QSEG),A + JP DUST ;I/O open check +;JP MLDSP + DEFS 3 +; +QSEG: ENT + DEFB 0 +; + END diff --git a/software/asm/mz-xz009/MON-PSG.ASM b/software/asm/mz-xz009/MON-PSG.ASM new file mode 100644 index 0000000..bd2a4fa --- /dev/null +++ b/software/asm/mz-xz009/MON-PSG.ASM @@ -0,0 +1,1067 @@ +; ---------------------------- +; MZ800-monitor PSG handlar +; FI:MON-PSG ver 001 7.26.84 +; ---------------------------- +; + INCLD MACRO +; +SYS: EQU 1 ;0 MZ-1500 1 PLE +; +NMAX: EQU 83 ;/ÙÄs max +PSGA: EQU F2H +PSG3: EQU 3F2H +PSG9: EQU 9F2H +; + IF SYS +MUSCH: EQU 6 +MAXCH: EQU 8 +PSGALL: EQU E9H +PSGOFF: EQU 4E9H + ENDIF +; + IF SYS-1 +MUSCH: EQU 3 +MAXCH: EQU 4 +PSGALL: EQU F2H +PSGOFF: EQU 4F2H + ENDIF +;---------------------------------- +; +; INTM (music interrupt mode ) +;0 no operation +;1 music or noise +;2 sound n.time +; +;---------------------------------- +; +INTM: ENT + DEFB 0 +SBUSY: DEFB 0 ;music or noise only +INTC: DEFB 0 +;---------------------------------- +; +; sound out current tabel +; +; +;---------------------------------- +; tone 1a +; +STBL: DEFB 80H ;frequency (l) + DEFB 00H ;frequency (h) + DEFB 9FH ;attenation +; tone 2a + DEFB A0H ;frequency (l) + DEFB 00H ;frequency (h) + DEFB BFH ;attenation +; tone 3a + DEFB C0H ;frequency (l) + DEFB 00H ;frequency (h) +STN0: DEFB DFH ;attenation +; + + IF SYS +; tone 1b +; + DEFB 80H ;frequency (l) + DEFB 00H ;frequency (h) + DEFB 9FH ;attenation +; tone 2b + DEFB A0H ;frequency (l) + DEFB 00H ;frequency (h) + DEFB BFH ;attenation +; tone 3b + DEFB C0H ;frequency (l) + DEFB 00H ;frequency (h) +STN1: DEFB DFH ;attenation + ENDIF + SKP H + +;---------------------------------- +; +; play table +; +;---------------------------------- +PTBL: DEFB 00H ;ch no. + DEFB 00H ;atc0 + DEFB 00H ;atc1 + DEFB 00H ;emva(l) + DEFB 00H ;emva(h) + DEFB 00H ;att + DEFB 00H ;length0 + DEFB 00H ;tempo0 + DEFB 00H ;length1 + DEFB 00H ;tempo1 + DEFB 00H ;qbuf(l) + DEFB 00H ;qbuf(h) + DEFB 00H ;emvp + DEFB 00H ;status + DEFB 00H ;vol + DEFB 00H ;reserve + DEFB 01H ;ch no. + DEFS 15 ;ch1 + DEFB 02H ;ch no. + DEFS 15 ;ch2 + DEFB 03H ;ch no. + DEFS 15 ;noise1 +; + IF SYS + DEFB 04H ;ch no. + DEFS 15 ;ch3 + DEFB 05H ;ch no. + DEFS 15 ;ch4 + DEFB 06H ;ch no. + DEFS 15 ;ch5 + DEFB 07H ;ch no. + DEFS 15 ;noise2 + ENDIF +;---------------------------------- +; +; +; ontyo tabel +; +;---------------------------------- +LTBL: DEFB 1 ;0 + DEFB 2 ;1 + DEFB 3 ;2 + DEFB 4 ;3 + DEFB 6 ;4 + DEFB 8 ;5 + DEFB 12 ;6 + DEFB 16 ;7 + DEFB 24 ;8 + DEFB 32 ;9 +;---------------------------------- +; +; +; tempo tabel +; +;---------------------------------- + + DEFB 23 ;1 64 + DEFB 20 ;2 74 + DEFB 17 ;3 90 + DEFB 13 ;4 114 + DEFB 10 ;5 152 + DEFB 7 ;6 222 + DEFB 3 ;7 450 + SKP H + +;---------------------------------- +; emvelop pattern tabel +; +; ATT ÀÙÛÛÙ code +; +; 0 3 +; -1 4 +; +1 5 +; r 0 +; max 1 +; min 2 +;---------------------------------- +ETBL: DEFB 00H ;emvp 0 + DEFB 05H + DEFB 03H + DEFB 03H ;dummy +; + DEFB 0FH ;emvp 1 + DEFB 04H + DEFB 01H + DEFB 03H ;dummy +; + DEFB 00H ;emvp 2 + DEFB 05H + DEFB 02H + DEFB 00H +; + DEFB 0FH ;emvp 3 + DEFB 04H + DEFB 01H + DEFB 00H +; + DEFB 00H ;emvp 4 + DEFB 05H + DEFB 02H + DEFB 03H +; + DEFB 0FH ;emvp 5 + DEFB 04H + DEFB 03H + DEFB 03H ;dummy +; + DEFB 00H ;emvp 6 + DEFB 05H + DEFB 04H + DEFB 00H +; + DEFB 0FH ;emvp 7 + DEFB 04H + DEFB 05H + DEFB 00H +; + DEFB 00H ;emvp 8 + DEFB 03H + DEFB 03H + DEFB 00H + SKP H + +;---------------------------------- +; +; frequency tabel +; +;---------------------------------- +NTBL: DEFW 3F00H ; A + DEFW 3B07H ; A# + DEFW 3802H ; B +; +; octave 1 +; + DEFW 340FH ; C + DEFW 3200H ; C# + DEFW 2F03H ; D + DEFW 2C09H ; D# + DEFW 2A01H ; E + DEFW 270BH ; F + DEFW 2507H ; F# + DEFW 2306H ; G + DEFW 2106H ; G# + DEFW 1F08H ; A + DEFW 1D0CH ; A# + DEFW 1C01H ; B +; +; octave 2 +; + DEFW 1A08H ; C + DEFW 1900H ; C# + DEFW 1709H ; D + DEFW 1604H ; D# + DEFW 1500H ; E + DEFW 130DH ; F + DEFW 120CH ; F# + DEFW 110BH ; G + DEFW 100BH ; G# + DEFW 0F0CH ; A + DEFW 0E0EH ; A# + DEFW 0E00H ; B +; +; octave 3 +; + DEFW 0D04H ; C + DEFW 0C08H ; C# + DEFW 0B0DH ; D + DEFW 0B02H ; D# + DEFW 0A08H ; E + DEFW 090FH ; F + DEFW 0906H ; F# + DEFW 080DH ; G + DEFW 0805H ; G# + DEFW 070EH ; A + DEFW 0707H ; A# + DEFW 0700H ; B +; +; octave 4 +; + DEFW 060AH ; C + DEFW 0604H ; C# + DEFW 050EH ; D + DEFW 0509H ; D# + + DEFW 0504H ; E + DEFW 040FH ; F + DEFW 040BH ; F# + DEFW 0407H ; G + DEFW 0403H ; G# + DEFW 030FH ; A + DEFW 030BH ; A# + DEFW 0308H ; B +; +; octave 5 +; + DEFW 0305H ; C + DEFW 0302H ; C# + DEFW 020FH ; D + DEFW 020DH ; D# + DEFW 020AH ; E + DEFW 0208H ; F + DEFW 0205H ; F# + DEFW 0203H ; G + DEFW 0201H ; G# + DEFW 010FH ; A + DEFW 010EH ; A# + DEFW 010CH ; B +; +; octave 6 +; + DEFW 010AH ; C + DEFW 0109H ; C# + DEFW 0108H ; D + DEFW 0106H ; D# + DEFW 0105H ; E + DEFW 0104H ; F + DEFW 0103H ; F# + DEFW 0102H ; G + DEFW 0101H ; G# + DEFW 0100H ; A + DEFW 000FH ; A# + DEFW 000EH ; B +; +; +; +MSTBL: DEFW BF9FH + DEFW FFDFH +; +; +; +TSOUT: DEFB 80H ;ch 0 + DEFB 00H + DEFB 90H ;att +TSOUTC: DEFB 00H ;counter(l) + DEFB 00H ;counter(h) + SKP H + +;---------------------------------- +; +; +; Music interrupt routine +; +; +;---------------------------------- +PSGINT: ENT + PUSH IY + CALL INT0 + POP IY + EI + RETI +; +INT0: CALL PUSHRA + CALL MSTART ;8253 intialize +; + LD A,(INTM) + OR A + JP Z,MSTOP0 + DEC A + JP NZ,SDINT ;skip if sound out +; + LD BC,PSG9 ;psg data out + LD HL,STBL + OTIR +; + IF SYS + LD B,9 + INC C + OTIR + ENDIF +; + LD B,8 + LD A,(SBUSY) + OR A + JP Z,MSTOP0 ;channel all close + LD C,A +INT1: DEC B + RET M + RLC C + JR NC,INT1 + PUSH BC + LD A,B + CALL INTER + BIT 0,(IY+13) + CALL Z,NINT + CALL MINT + POP BC + JR INT1 + SKP H + +;---------------------------------- +; +; Emvelop control +; +;---------------------------------- +NINT: DEC (HL) ;HL=chx act0 + RET NZ + INC HL ;new couter set + LD A,(HL) ;load atc1 + DEC HL + LD (HL),A ;save atc0 + INC HL + INC HL + LD E,(HL) ;HL=enva + INC HL + LD D,(HL) ;HL=enva+1 + EX DE,HL +NINT1: LD A,(HL) ;env ÀÙÛÛÙ data + OR A ;data check 0 + JR NZ,NINT2 ;noskip if repeat + DEC HL + DEC HL + JR NINT1 +; +; +NINT2: EX DE,HL ;de=curent emva + INC HL + DEC A + JR Z,NINT3 ;skip if max Acc=1 + DEC A + JR Z,NINT5 ;skip if min Acc=2 + DEC A + RET Z ;ÀÙÛÛÙ 0 Acc=3 +; + DEC A ;Acc=4 + LD A,(HL) ;att data + JR Z,NINT4 ;skip if dec att + INC A ;Acc=5 + CP 15 ;max + JR Z,NINT7 + JR C,NINT7 +NINT3: LD A,15 ;maximam + JR NINT6 +NINT4: DEC A ;dec att + JP M,NINT5 + LD C,(IY+14) ;vol minimum + CP C + JR NC,NINT7 +NINT5: LD A,(IY+14) ;minimum +NINT6: INC DE ;de=next curent emva +NINT7: LD (HL),A ;new att data + DEC HL + LD (HL),D + DEC HL + LD (HL),E +; +ATTSET: AND 0FH + LD B,A ;acc=att data +ATTS1: LD A,(IX+2) ;stbl att + AND F0H + + OR B + LD (IX+2),A ;stbl att + RET + SKP H + +;---------------------------------- +; +; new data interpret routine +; +;---------------------------------- +; +MINT: DEC (IY+6) ;length0 + RET NZ + DEC (IY+7) ;tempo0 + LD A,(IY+8) ;length1 + LD (IY+6),A ;length counter preset + RET NZ + LD A,(IY+9) ;tempo1 + LD (IY+7),A ;tempo counter preset + LD E,(IY+10) ;que addr(l) + LD D,(IY+11) ;que addr(h) +; +; +MINT1: LD A,(DE) + INC DE + CP FFH + JR Z,MINT2 + CP A0H + JR Z,MINT3 + CP 90H + JR NC,MINT4 + CP 80H + JR NC,MINT5 + CP 60H + JR NC,MINT6 + SUB 9 + LD (IY+10),E ;que addr (l) + LD (IY+11),D ;que addr (h) + SET 0,(IY+13) ;rflag set + JR C,MINT7 + RES 0,(IY+13) ;rflag reset + CALL SETNO ;Nn +MINT7: LD A,(IY+2) ;att + LD (IY+1),A + LD A,(IY+8) ;length + LD (IY+6),A + LD A,(IY+9) ;tempo + LD (IY+7),A + BIT 0,(IY+13) + JR NZ,MEND +; +; + LD A,(IY+12) ;emv pattern + LD BC,ETBL + ADD A,A ;*2 + ADD A,A ;*4 + LD H,0 + LD L,A + ADD HL,BC ;HL=ETBL+4*A + LD A,(HL) + OR A + JR NZ,MINT71 + LD A,(IY+14) ;vol minimum +MINT71: LD (IY+5),A ;att + CALL ATTSET + + INC HL + LD (IY+3),L ;emva (l) + LD (IY+4),H ;emva (h) + RET +; +; +; +MINT3: LD A,(DE) ;Mn + INC DE + LD (IY+2),A ;atc1 +MINT11: JR MINT1 +; +MINT2: CALL BRESET ;channel reset +MEND: LD A,0FH + JP ATTSET +; +; +MINT4: SUB 90H ;Sn + LD (IY+12),A ;curent emv no. + JR MINT11 +; +; +MINT5: SUB 80H ;Vn + CPL + AND 0FH + LD (IY+14),A ;vol minimum + JR MINT11 +; +; +; tempo & length +; +; +MINT6: SUB 60H ;Tn,Ln + LD B,0 + LD C,A + LD HL,LTBL + ADD HL,BC + CP 0AH + LD A,(HL) + JR NC,MINT61 + LD (IY+8),A ;length1 + JR MINT11 +MINT61: LD (IY+9),A ;tempo1 + JR MINT11 + SKP H + +;-------------------------------- +; +; +; onpu set +; +; acc = onpu map data +; ix = set mout tbladdr +;-------------------------------- +; +SETNO: ADD A,A ;*2 + LD HL,NTBL + LD B,0 + LD C,A + ADD HL,BC + LD B,(HL) + LD A,(IX+0) + AND F0H + OR B + LD (IX+0),A + INC HL + LD A,(HL) + LD (IX+1),A + RET +;---------------------------------- +; +; SOUND=(reg,data) +; +; ent A.... reg+80H +; DE... data +; +; +; SOUND n,time +; +; ent A.... n +; DE... time +; +;---------------------------------- +; +MSOUND: ENT + OR A + JP P,SOUT + AND 0FH + LD C,PSGA ;psg-a +; + IF SYS +; + CP 8 + JR C,+5 + SUB 8 + INC C ;C=psg sel, A=reg#. +; + ENDIF +; + ADD A,A + ADD A,A + ADD A,A + ADD A,A + OR 80H + LD B,A ;B = 1rrr0000 +; + + BIT 4,A + JR NZ,MSND.A ;att + CP E0H + JR Z,MSND.N ;noise ctrl + LD A,D ;freq + CP 04H + JR NC,MER3 + LD A,E + AND 0FH + OR B ;1rrrffff + OUT (C),A + LD A,D + LD B,4 + RL E + RLA + DJNZ -3 + OUT (C),A ;0fffffff + RET +; +MSND.N: BIT 3,E + JR NZ,MER3 +MSND.A: LD A,E + AND F0H + OR D + JR NZ,MER3 + LD A,E + OR B + OUT (C),A ;1rrrcccc + RET +; +MER3: JP ER03 +; +;-------------------------------- +; +; sout +; +;-------------------------------- +; +SDINT: LD HL,(TSOUTC) + DEC HL + LD (TSOUTC),HL + LD A,L + OR H + RET NZ + JP MSTOP0 +; +; +; SOUND n,l +; +; +SOUT: ENT + LD C,A + LD A,D + OR E + RET Z + LD A,C +; + LD IX,TSOUT + CP NMAX+1 + RET NC + + SUB 9 + PUSH AF + LD A,90H + JR NC,SOUT1 + LD A,9FH +SOUT1: LD (IX+2),A ;TSOUT att + CALL MWAIT0 + POP AF + CALL NC,SETNO ;skip if not rest + DI + LD A,2 + LD (INTM),A + LD (TSOUTC),DE + LD HL,TSOUT + LD BC,PSG3 ;psg-a out + OTIR + CALL MSTART + EI + RET +; +;-------------------------------- +; +; Interpret point set +; +; +; in Acc=channel +; +; exit ix:stbl +; iy:ptbl +; hl:ptbl+1 +; +;---------------------------------- +INTER: PUSH BC + PUSH AF + CP 3 + JR C,INTER1 + DEC A +; + IF SYS + CP 6 + JR NZ,INTER1 + DEC A + ENDIF +; +INTER1: LD HL,STBL + LD B,A + ADD A,A ;*2 + ADD A,B ;*3 + LD C,A + LD B,0 + ADD HL,BC + PUSH HL + POP IX +; + POP AF + ADD A,A ;*2 + ADD A,A ;*4 + ADD A,A ;*8 + ADD A,A ;*16 + LD HL,PTBL + + LD B,0 + LD C,A + ADD HL,BC + PUSH HL + POP IY + INC HL + POP BC + RET + SKP H + +;-------------------------------- +; +; play,noise +; +;-------------------------------- +; +; +PLAY: ENT + CP FFH + JR NZ,PLY0 + LD A,MAXCH-1 +PLYALL: PUSH AF + PUSH DE + CALL PLY0 + POP DE + POP AF + DEC A + JP M,PSGON + JR PLYALL +; +PLY0: PUSH AF + LD HL,STN0 + IF SYS + CP 4 + JR C,PLY00 + LD HL,STN1 + ENDIF +; +PLY00: CP 3 + JR Z,PLY1 +; + IF SYS + CP 7 + JR Z,PLY1 + ENDIF +; + LD A,DFH + JR PLY2 +; +PLY1: LD A,E7H ;noise channel out + OUT (PSGALL),A + LD A,FFH +PLY2: LD (HL),A ;STN0 or STN1 + DI + LD A,1 + LD (INTM),A + POP AF + CALL INTER + CALL BSET + CALL MINT1 + EI + RET +; +; +PSGON: ENT + DI + LD A,(INTM) + OR A + CALL NZ,MSTART + EI + + RET +; +BRESET: LD B,86H + JR BSET0 +; +BSET: LD B,C6H +BSET0: LD HL,SBUSY + LD A,(IY+0) + OR A + RLCA + RLCA + RLCA ;00xxx000 + OR B ;10xxx110 or 11xxx110 + LD (BSET1),A + DEFB CBH ;SET n,(HL) or reset +BSET1: DEFB 0 + RET + SKP H + +;---------------------------------- +; +; sft+break or error or music stop +; +;---------------------------------- +; +MLDSP: ENT +MSTOP: CALL PUSHR +; +MSTOP0: XOR A + LD (INTM),A + LD (SBUSY),A +; + LD BC,PSGOFF + LD HL,MSTBL + OTIR + LD B,MUSCH + LD HL,STBL+2 +MSTOP1: LD A,(HL) + AND F0H + OR 0FH + LD (HL),A + INC HL + INC HL + INC HL + DJNZ MSTOP1 + LD A,3 + OUT (FCH),A ;pio disenable + XOR A + IF SYS-1 + RET ;8253 gate no effect + ENDIF +; + IF SYS + LD HL,E008H ;mz-700 compatible mode + JP LDHLA ;8253 gate disable + ENDIF +; +;---------------------------------- +; +; music wait +; +;---------------------------------- +; +MWAIT: ENT +; +MWAIT0: LD A,(INTM) + OR A + RET Z +MWAIT1: SVC .BREAK + RST 3 + DEFB .BREAK + ENDM + JR NZ,MWAIT + JP BREAKZ + SKP H + +;---------------------------------- +; SVC .MCTRL ; music control +; B=0: init +; B=1: psgon +; B=2: stop +; B=3: wait +;---------------------------------- +; +MCTRL: ENT + DEC B + JP Z,PSGON + DEC B + JR Z,MSTOP ;1 + DEC B + JR Z,MWAIT0 ;2 +;---------------------------------- +; +; PSG power on init +; +; +;---------------------------------- +PSGPWR: ENT + CALL MSTOP + LD BC,5FCH + LD HL,PIOTBL + OTIR + LD DE,MUINID + LD A,FFH + JP PLAY +; +; + IF SYS +PIOTBL: DEFB FCH ;Vector + DEFB FFH ;mode 3 (bit mode) + DEFB 3FH ;I/O + DEFB 37H ;interrupt control + DEFB EFH ;interrupt mask +; +; +MSTART: OUT (E3H),A + LD A,30H + LD HL,E007H + LD (HL),A ;8253 control + LD BC,22A5H ;10ms =22F6H + LD L,4 ;HL=E004H + LD (HL),C ;8253 time const + LD (HL),B + DEC HL ;HL=E003H + LD (HL),4 ;8253 int disable + LD (HL),0 ;8253 music disable + LD A,01H + LD L,8 ;HL=E008H + LD (HL),A ;8253 gate enable + LD A,83H + OUT (FCH),A ;pio int enable + OUT (E1H),A + RET + ENDIF +; + IF SYS-1 + +MSTART: + LD HL,PIOTBL + LD BC,5FCH + OTIR + LD HL,CTCTBL + LD B,6 + JP IOOUT +; +; +PIOTBL: DEFB FCH ;Vector + DEFB FFH ;mode 3 (bit mode) + DEFB 3FH ;I/O + DEFB 17H ;interrupt control + DEFB EFH ;interrupt mask +; +CTCTBL: DEFW D730H + DEFW D4B0H ;10 ms =2B4CH + DEFW D42AH + DEFW D304H + DEFW D300H + DEFW FC83H + ENDIF +; +MUINID: DEFB 65H ;L5 + DEFB 6DH ;T4 + DEFB 98H ;S8 + DEFW FFA0H ;M255 + DEFB FFH ;END + IF SYS +;---------------------------------- +; +; +; BELL (BEEP) use 8253 +;---------------------------------- +CTRLG: ENT + CALL PUSHR + LD (CTRLG9+1),SP + SVC .DI + LD SP,IBUFE + OUT (E4H),A ;K/C mapping + CALL 02BEH ;ROM MLDSP + LD A,1 + LD DE,E003H + LD (DE),A ;8253 music gate on + LD HL,03F9H + CALL 02AEH ;ROM MLDST+3 + LD BC,18H + EX (SP),HL ;wait + DJNZ -1 + DEC C + JR NZ,-4 + CALL 02BEH ;ROM MLDSP + XOR A + LD (DE),A ;8253 music gate off + OUT (E0H),A ;K/C mapping + OUT (E1H),A + SVC .EI +CTRLG9: LD SP,0 ;xxx + RET + ENDIF + +; + IF SYS-1 +; +CTRLG: ENT + CALL PUSHR + SVC .DI + RST 3 + DEFB .DI + ENDM + LD HL,BEEP0 + LD B,4 + CALL IOOUT + LD BC,18H + EX (SP),HL + DJNZ -1 + DEC C + JR NZ,-4 + LD HL,BEEP1 + LD B,2 + CALL IOOUT + SVC .EI + RST 3 + DEFB .EI + ENDM + RET +; +; +BEEP0: + DEFW D736H + DEFW D301H + DEFW D4F9H + DEFW D403H +; +BEEP1: + DEFW D736H + DEFW D300H +;-------------------------------- +; +; tempo set +; acc=1-7 +;-------------------------------- +?TEMP: ENT + CALL PUSHRA + LD DE,TEMPOW + AND 0FH + ADD A,69H + LD (DE),A + LD B,3 + SVC .MCTRL ;MWAIT + RST 3 + DEFB .MCTRL + ENDM + LD A,FFH ;Channel all + SVC .PLAY + RST 3 + DEFB .PLAY + ENDM + LD B,1 + SVC .MCTRL ;PSGON + RST 3 + + DEFB .MCTRL + ENDM + RET +; +TEMPOW: DEFS 1 + DEFB FFH +; + ENDIF + END diff --git a/software/asm/mz-xz009/MON-RS.ASM b/software/asm/mz-xz009/MON-RS.ASM new file mode 100644 index 0000000..74b8199 --- /dev/null +++ b/software/asm/mz-xz009/MON-RS.ASM @@ -0,0 +1,469 @@ +; ---------------------------- +; MZ-800 RS-232C driver +; FI:MON-RS ver 001 8.02.84 +; ---------------------------- +; + INCLD MACRO +RSYS: EQU 1 ;0 700,1500 +; 1 800 + IF RSYS +RMCH: EQU 3 + ENDIF +; + IF RSYS-1 +RMCH: EQU 1 + ENDIF +; +; +$RS: ENT + DEFW $RAM + DEFM "RS" + DEFW 0 + DEFB 8FH ;Streem, O1C, I1C, W, R + DEFB RMCH ;ch. + DEFB 0 + DEFW RSINI ;INIT + DEFW RSRO ;ROPEN + DEFW RSWO ;WOPEN + DEFW RSCL ;CLOSE + DEFW RSKL ;KILL + DEFW RSINP ;INP1C + DEFW RSOUT ;OUT1C + DEFW .RET ;POS +; +RSINI: RET C + PUSH IY + CALL SETIY + CALL RSINT0 + CALL RSPARM + JR RETIY +; +RSINT0: SVC .DEASC + RST 3 + DEFB .DEASC + ENDM + LD (IY+#MONIT),E + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JP NZ,ER03 + SVC .DEASC + RST 3 + DEFB .DEASC + ENDM + LD (IY+#INIT),E + TEST1 0 + CALL TEST1 + DEFB 0 + ENDM + RET Z + + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JP NZ,ER03 + SVC .DEASC + RST 3 + DEFB .DEASC + ENDM + LD (IY+#CRLF),E + RET + SKP H + +; +RSRO: +RSWO: PUSH IY + CALL SETIY + LD A,(IY+#STAT) + INC (IY+#STAT) + OR A + CALL Z,RSOPEN + JR RETIY +; +; +RSCL: +RSKL: PUSH IY + CALL SETIY + DEC (IY+#STAT) + LD A,(IY+#STAT) + OR A + CALL Z,RCLOSE + JR RETIY2 +; +; +; +RSINP: PUSH IY + CALL SETIY + CALL RSINP0 + JP C,IOERR + CP (IY+#CRLF) + JR NZ,+4 + LD A,0DH +RETIY2: OR A +RETIY: POP IY + RET +; +RSINP0: BIT 6,(IY+#INIT) + JP Z,GET1C + LD IX,GET1C + LD HL,IY + LD DE,#JISR + ADD HL,DE + JP JISR +; +RSOUT: PUSH IY + CALL SETIY + CP 0DH + JR NZ,+5 + LD A,(IY+#CRLF) + CALL RSOUT0 + JR RETIY +; +RSOUT0: BIT 6,(IY+#INIT) + JP Z,PUT1C + LD IX,PUT1C + LD HL,IY + LD DE,#JISX + ADD HL,DE + LD DE,(DISPX) + JP JISX + SKP H + +; +SETIY: PUSH AF + PUSH DE + LD A,(ZCH) + INC A + LD IY,$A-TBLN + LD DE,TBLN +SETIY2: ADD IY,DE + DEC A + JR NZ,SETIY2 + LD C,(IY+0) + POP DE + POP AF + RET +; +; +;*** PORT ADDRESS EQU *** +; +CHADT: EQU B0H +CHACT: EQU B1H +CHBDT: EQU B2H +CHBCT: EQU B3H +; +; +CHCDT: EQU D0H +CHCCT: EQU D1H +CHDDT: EQU D2H +CHDCT: EQU D3H +; +#CRLF: EQU -8 +#JISX: EQU -7 +#JISR: EQU -5 +#MONIT: EQU -3 +#INIT: EQU -2 +#STAT: EQU -1 + SKP H + +; +; + DEFS 1 ;CR or LF + DEFS 2 ;for JISX + DEFS 2 ;for JISR + DEFS 1 ;monitor + DEFS 1 ;init code + DEFS 1 ;status +$A: DEFB CHACT ;0 + DEFB CHADT ;1 + DEFS 1 ;2 Mask Pattern + DEFW 1010H ;3,4 + DEFW 4004H ;5,6 WR4 + DEFW C003H ;7,8 WR3 + DEFW 6005H ;9,10 WR5 + DEFB 30H + DEFB 3 +; +; + DEFS 8 +$B: DEFB CHBCT + DEFB CHBDT + DEFS 1 + DEFW 1010H + DEFW 4004H + DEFW C003H + DEFW 6005H + DEFB 30H + DEFB 3 +; +; + IF RSYS + DEFS 8 +$C: DEFB CHCCT ;0 + DEFB CHCDT ;1 + DEFS 1 ;2 Mask Pattern + DEFW 1010H ;3,4 + DEFW 4004H ;5,6 WR4 + DEFW C003H ;7,8 WR3 + DEFW 6005H ;9,10 WR5 + DEFB 30H + DEFB 3 +; +; + DEFS 8 +$D: DEFB CHDCT + DEFB CHDDT + DEFS 1 + DEFW 1010H + DEFW 4004H + DEFW C003H + DEFW 6005H + DEFB 30H + DEFB 3 + ENDIF +; +TBLN: EQU $B-$A +; + SKP H + +; +; +; Break Check +; +BRK: CALL BRKCHK + RET NZ + JP BREAKZ +; +; sio parameter set +; +; +; +RSPARM: + LD A,18H ;channel reset + OUT (C),A + LD A,30H ;err reset + OUT (C),A + LD A,(IY+#INIT) ;inital bit + AND 0CH ;stop bit + JR NZ,RSP0 + SET 2,(IY+#INIT) ;1 bit/chr +RSP0: LD A,(IY+#INIT) ;initial bit + LD B,A ;B=init code + AND 0FH ;mask + OR 40H ;clock rate *16 + LD (IY+6),A ;wr4 + LD A,B + AND 80H ;rx disable d7 bit/chr + OR 40H + LD (IY+8),A ;wr3 + RRA + AND 7FH ;dtroff + OR 0AH ;tx enable rtson dtroff + LD (IY+10),A ;wr5 + LD A,B + OR 7FH + LD (IY+2),A ;bit mask + CALL RSSUB +RSTBUF: + IN A,(C) + RRCA + RET NC + DEC C + IN A,(C) + INC C + LD A,1 + OUT (C),A + IN A,(C) + AND 70H + JR Z,RSTBUF + RET +; +; +; +; +; SIO close +; +; +RCLOSE: RES 0,(IY+8) ;rx disable + RES 7,(IY+10) ;rdy off + + LD (IY+#STAT),0 +RSSUB: LD B,10 + PUSH IY + POP HL + LD DE,3 + ADD HL,DE + OTIR + RET +; +; +; SIO open +; +; +RSOPEN: LD A,30H + OUT (C),A ;err reset + RET + SKP H + +; +; +; in IY=channel data +; C=channel control port +; +; +; +RSEN: SET 0,(IY+8) ;wr3 RX enable + LD A,13H + OUT (C),A ;ext/int reset + LD A,(IY+8) ;wr3 + OUT (C),A ;wr5 + LD A,35H ;err reset + OUT (C),A + LD A,(IY+10) ;wr5 + OR 88H ;dtr,rts on tx enable + LD (IY+10),A ;wr5 + OUT (C),A + RET +; +; +RSDIS: LD A,3 + OUT (C),A + RES 0,(IY+8) ;wr3 RX disenable + LD A,(IY+8) ;wr3 + OUT (C),A +; +RDYOF: RES 7,(IY+10) ;wr5 dtr reset + JR WR5OUT +; +; +RTSON: SET 1,(IY+10) ;wr5 rts set + JR WR5OUT +; +; +RTSOFF: RES 1,(IY+10) ;wr5 rts reset + JR WR5OUT +; +; +RDYON: SET 7,(IY+10) ;wr5 dtr set +WR5OUT: LD A,5 + OUT (C),A + LD A,(IY+10) ;wr5 + OUT (C),A + OR A + RET + SKP H + +; +; +; Receive 1 char +; +; +GET1C: CALL PUSHR + LD C,(IY+0) +GET1: CALL BRK + CALL DRCKR + JR C,GET1 + CALL RSEN +CHIN: CALL BRK + IN A,(C) + RRCA + JR NC,CHIN ;skip if no data + DEC C + IN A,(C) ;data input + INC C + AND (IY+2) ;mask + PUSH AF + LD A,1 + OUT (C),A + IN A,(C) + AND 70H + JR NZ,RSER ;skip if err + CALL RDYOF + POP AF + RET +; +; +; +RSER: LD B,A + POP AF + PUSH BC + CALL RSPARM + POP BC + LD A,29 ;framing err + RLC B + RLC B + RET C + INC A ;overrun err + RLC B + RET C + INC A ;parity err + SCF + RET + SKP H + +; +; +; Send 1 char +; +; +PUT1C: CALL PUSHR + LD C,(IY+0) + LD D,A + CALL RTSON +PUT1: CALL BRK + CALL DRCKS + CALL NC,CTSCK + JR C,PUT1 + IN A,(C) + BIT 2,A ;tx buf empty ? + JR Z,PUT1 + BIT 7,(IY+#MONIT) ;all chr send? + JR Z,PUT2 + LD A,1 + OUT (C),A + IN A,(C) + RRCA + JR NC,PUT1 +PUT2: DEC C + OUT (C),D ;data out + INC C + BIT 6,(IY+#MONIT) ;rts on/off? + JR Z,PUT3 + CALL RTSOFF +PUT3: OR A + RET +; +; DCD check +; +DRCKR: OR A + BIT 0,(IY+#MONIT) ;moniter dr ? + JR DRCK1 +; +DRCKS: OR A ;carry clear + BIT 1,(IY+#MONIT) ;moniter dr ? +DRCK1: RET Z + LD A,10H ;ext/int reset + OUT (C),A + IN A,(C) + AND 8 + RET NZ ;cy=0 + SCF + RET +; +; CTS check +; +CTSCK: OR A + BIT 2,(IY+#MONIT) ;moniter cts ? + RET Z + LD A,10H + OUT (C),A + IN A,(C) + AND 20H + RET NZ + SCF + + RET +; + END diff --git a/software/asm/mz-xz009/MON1.ASM b/software/asm/mz-xz009/MON1.ASM new file mode 100644 index 0000000..631e3b2 --- /dev/null +++ b/software/asm/mz-xz009/MON1.ASM @@ -0,0 +1,3737 @@ + LIST + INCLD MACRO + +; --------------------------- +; MZ-800 crt port define +; FI:CRTEQU ver 1.0 7.26.84 +; --------------------------- +; + +; +; custom lsi ports +; +; +; +LSPAL: EQU 0F0H ;pallet +LSFC: EQU 0FCH +LSE0: EQU 0E0H +LSE1: EQU 0E1H +LSE2: EQU 0E2H +LSE3: EQU 0E3H +LSE4: EQU 0E4H +LSE5: EQU 0E5H +LSE6: EQU 0E6H +LSD0: EQU 0D0H +LSD1: EQU 0D1H +LSD2: EQU 0D2H +LSD3: EQU 0D3H +; +LSWF: EQU 0CCH +LSRF: EQU 0CDH +LSDMD: EQU 0CEH +LSSCR: EQU 0CFH +; +; +; +; work area +; +TEXTBF: EQU 2000H +BITBUF: EQU 8000H +FONTBF: EQU 1000H +ERRTXT: EQU FDA0H + END + SKP H + + INCLD XPL1 +; ---------------------------- +; MZ-800 Monitor part-1 +; FI:PL1 ver 1.0 7.30.84 +; ---------------------------- +; +; +; + ORG 0 + JP STARTP + JP GETL + JP CR1 + JP CR2 + JP CRT1S + JP PRNTT + JP CRT1C + JP CRTMSG +; +.IOSVC: EQU 3 + JP IOSVC ;RST3 superviser call entry +; + JP INKEY0 +BRKCHK: ENT + JP BRKEY + JP SAVE1 + JP SAVE2 + JP LOAD1 + JP LOAD2 + JP LOAD?2 + JP .RET ;RST6 + JP TIMST +; +; + DEFS 2 ;dummy +; + JP .RET ;RST7 debuger reserve +; + JP TIMRD +BEEP: JP CTRLG +$TEMPO: ENT + JP ?TEMP + JP MLDSP + JP MLDSP + JP GETL +; +SYSSTA: ENT + DEFW $START +ERRORP: ENT + DEFS 2 +; + JP CRTMSG ;org 51H +; + DEFS 4 +; + JP INKEY$ ;org 58H +;--------------------------------- +; +; crt driver contrl code tabel +; +;--------------------------------- + +CONTTB: DEFW .RET ;@ 00 + DEFW .RET ;A 01 + DEFW .RET ;B 02 + DEFW CTR.M ;C 03 + DEFW .RET ;D 04 + DEFW CTR.E ;E 05 sft lock + DEFW CTR.F ;F 06 sft normal + DEFW .RET ;G 07 beep + DEFW .RET ;H 08 + DEFW CTAB ;I 09 + DEFW .RET ;J 0A + DEFW .RET ;K 0B + DEFW .RET ;L 0C + DEFW CTR.M ;M 0D cr + DEFW SPLSW ;N 0E spool exec/stop + DEFW .RET ;O 0F + DEFW DEL ;P 10 del + DEFW CDOWN ;Q 11 cursor down + DEFW CUP ;R 12 cursor up + DEFW CRIGHT ;S 13 cursor right + DEFW CLEFT ;T 14 cursor left + DEFW HOME ;U 15 home + DEFW HCLSW ;V 16 clr + DEFW CTR.W ;W 17 graph + DEFW INST ;X 18 inst + DEFW CTR.Y ;Y 19 alpha + DEFW .RET ;Z 1A + DEFW CTR.M ;[ 1B esc + DEFW .RET ;\ 1C + DEFW .RET ;] 1D + DEFW .RET ;^ 1E + DEFW .RET ;_ 1F + SKP H + +; +CTRLJB: ADD A,A + LD HL,CONTTB + CALL ADDHLA + CALL INDRCT + JP (HL) +; +; +.NOP: ENT + NOP +; +.HL: ENT + JP (HL) +; +; +DI: + EI + PUSH AF + CALL MWAIT + CALL SPLOFF + POP AF + DI +.RET: ENT + RET +; +; +EI: + PUSH AF + CALL SPLON + POP AF + EI + RET +;---------------------------------- +; +; register all push program +; +; PUSHRA : PUSH IX,HL,BC,DE,AF +; PUSHR : PUSH IX,HL,BC,DE +; Destroy IX +; +;---------------------------------- +PUSHRA: ENT + EX (SP),IX + PUSH HL + PUSH BC + PUSH DE + PUSH AF + PUSH HL + LD HL,POPRA + EX (SP),HL + JP (IX) +PUSHR: ENT + EX (SP),IX + PUSH HL + PUSH BC + PUSH DE + PUSH HL + LD HL,POPR + EX (SP),HL + JP (IX) + +POPRA: POP AF +POPR: POP DE + POP BC + POP HL + POP IX + RET +; +; +; +;--------------------------------- +; +; cold startup routine +; +;--------------------------------- +;ORG DAH +; +COLDST: DI + LD SP,0000H + IM 2 + OUT (LSE1),A + LD HL,(SYSSTA) + JP (HL) ;system entry jump +; +; +; +;--------------------------------- +; +; BREAK,can't cont +;--------------------------------- +BREAKX: ENT + XOR A + DEFB 21H +;--------------------------------- +; BREAK,can cont +;--------------------------------- +BREAKZ: ENT + LD A,80H + DEFB 21H +;--------------------------------- +; I/O error +;--------------------------------- +IOERR: ENT + OR 80H +;--------------------------------- +; Error occur +;--------------------------------- +ERRORJ: ENT + PUSH AF + CALL MLDSP + POP AF + LD HL,(ERRORP) + JP (HL) ;error jump +; + SKP H + +; +;--------------------------------- +; +; B = String bytes (till 00H) +; +;--------------------------------- +COUNT: PUSH DE + LD B,0 +COUNT2: LD A,(DE) + OR A + JR Z,COUNT9 + INC DE + INC B + JR NZ,COUNT2 + DEC B +COUNT9: POP DE + RET +;--------------------------------- +; +; IOOUT +; +; Ent. HL=I/O data tabel +; B =counter +; +;--------------------------------- +IOOUT: ENT + LD A,(HL) + INC HL + LD C,(HL) + INC HL + OUT (C),A + DJNZ IOOUT + RET +; +; +; +; +; +DEVASC: ENT + SVC .DEASC + RST 3 + DEFB .DEASC + ENDM + LD A,D + OR A + JP NZ,ER03 + LD A,E + CP B + RET C + JP ER03 +; + SKP H + +; +; + ORG 011BH +;--------------------------------- +; +; +; CHECK ACC +; CALL CHKACC +; DEFB N +; DEFB X1 +; DEFB X2 +; : : +; DEFB XN +;--------------------------------- +CHKACC: ENT + EX (SP),HL + PUSH BC + LD B,M + INC HL + CP M + JR Z,CHACC1 + DJNZ -4 + INC HL + JR CHACC9 +CHACC1: INC HL + DJNZ -1 +CHACC9: POP BC + EX (SP),HL + RET +;--------------------------------- +; LD DE,(HL+) +;--------------------------------- +LDDEMI: ENT + LD E,M + INC HL + LD D,M + INC HL + RET +;--------------------------------- +; LD DE,(HL) +;--------------------------------- +LDDEMD: ENT + LD E,M + INC HL + LD D,M + DEC HL + RET +;--------------------------------- +; Clear (HL) B bytes +;--------------------------------- +?CLRHL: ENT + XOR A +;--------------------------------- +; Set (HL) B bytes +;--------------------------------- +?SETHL: ENT + LD M,A + INC HL + DJNZ -2 + RET + + SKP H + +;--------------------------------- +; Clear (DE) B bytes +;--------------------------------- +?CLRDE: ENT + XOR A +;--------------------------------- +; Set (DE) B bytes +;--------------------------------- +?SETDE: ENT + LD (DE),A + INC DE + DJNZ -2 + RET +;--------------------------------- +; LD (DE),(HL) B bytes +;--------------------------------- +LDDEHL: ENT + LD A,M + LD (DE),A + INC HL + INC DE + DJNZ -4 + RET +;--------------------------------- +; LD (HL),(DE) B bytes +;--------------------------------- +LDHLDE: ENT + LD A,(DE) + LD M,A + INC HL + INC DE + DJNZ -4 + RET +;--------------------------------- +; LD HL,(HL) +;--------------------------------- +INDRCT: ENT + PUSH AF + LD A,M + INC HL + LD H,M + LD L,A + POP AF + RET +;--------------------------------- +; ADD HL,A +;--------------------------------- +ADDHLA: ENT + ADD A,L + LD L,A + RET NC + INC H + RET + SKP H + +;--------------------------------- +; Fetch subroutines +;--------------------------------- +INCHLF: ENT + INC HL +HLFTCH: ENT + LD A,M + CP " " + JR Z,INCHLF + RET +;--------------------------------- +; TEST1 "x" ;test 1 char +;--------------------------------- +TEST1: ENT + CALL HLFTCH + EX (SP),HL + CP M + INC HL + EX (SP),HL + RET NZ + INC HL + RET +;--------------------------------- +; TESTX "x" ;check 1 char +;--------------------------------- +TESTX: ENT + CALL HLFTCH + EX (SP),HL + CP M + INC HL + EX (SP),HL + INC HL + RET Z ;OK + LD A,1 + JP ERRORJ ;Syntax error +; +; +; +; + SKP H + +;--------------------------------- +; SVC(RST3) table +;--------------------------------- +;MACRO SVCT +;@2:EQU @1H +;DEFW @3 +; +; +IOSVCT: + SVCT 00, .MONOP, MONOP ;00 +.MONOP: EQU 00H + DEFW MONOP + ENDM + SVCT 01, .CR1 , CR1 +.CR1: EQU 01H + DEFW CR1 + ENDM + SVCT 02, .CR2 , CR2 +.CR2: EQU 02H + DEFW CR2 + ENDM + SVCT 03, .CRT1C, CRT1C +.CRT1C: EQU 03H + DEFW CRT1C + ENDM + SVCT 04, .CRT1X, CRT1CX ;04 +.CRT1X: EQU 04H + DEFW CRT1CX + ENDM + SVCT 05, .CRTMS, CRTSIMU +.CRTMS: EQU 05H + DEFW CRTSIMU + ENDM + SVCT 06, .LPTOT, LPTOUT +.LPTOT: EQU 06H + DEFW LPTOUT + ENDM + SVCT 07, .LPT1C, LPT1C +.LPT1C: EQU 07H + DEFW LPT1C + ENDM + SVCT 08, .&CR , &CR ;08 +.&CR: EQU 08H + DEFW &CR + ENDM + SVCT 09, .&1C , &1C +.&1C: EQU 09H + DEFW &1C + ENDM + SVCT 0A, .&1CX , &1CX +.&1CX: EQU 0AH + DEFW &1CX + ENDM + SVCT 0B, .&MSG , &MSG +.&MSG: EQU 0BH + DEFW &MSG + ENDM + SVCT 0C, .GETL , GETL ;0C +.GETL: EQU 0CH + DEFW GETL + + ENDM + SVCT 0D, .INKEY, INKEY$ +.INKEY: EQU 0DH + DEFW INKEY$ + ENDM + SVCT 0E, .BREAK, BRKEY +.BREAK: EQU 0EH + DEFW BRKEY + ENDM + SVCT 0F, .HALT , HALT +.HALT: EQU 0FH + DEFW HALT + ENDM + SVCT 10, .DI , DI ;10 +.DI: EQU 10H + DEFW DI + ENDM + SVCT 11, .EI , EI +.EI: EQU 11H + DEFW EI + ENDM + SVCT 12, .CURMV, CURMOV +.CURMV: EQU 12H + DEFW CURMOV + ENDM + SVCT 13, .DEASC, DEASC +.DEASC: EQU 13H + DEFW DEASC + ENDM + SVCT 14, .DEHEX, DEHEX ;14 +.DEHEX: EQU 14H + DEFW DEHEX + ENDM + SVCT 15, .CKHEX, CKHEX +.CKHEX: EQU 15H + DEFW CKHEX + ENDM + SVCT 16, .ASCHL, ASCHL +.ASCHL: EQU 16H + DEFW ASCHL + ENDM + SVCT 17, .COUNT, COUNT +.COUNT: EQU 17H + DEFW COUNT + ENDM + SVCT 18, .ADDP0, ADDP0 ;18 +.ADDP0: EQU 18H + DEFW ADDP0 + ENDM + SVCT 19, .ADDP1, ADDP1 +.ADDP1: EQU 19H + DEFW ADDP1 + ENDM + SVCT 1A, .ADDP2, ADDP2 +.ADDP2: EQU 1AH + DEFW ADDP2 + ENDM + SVCT 1B, .ERRX , ERRX +.ERRX: EQU 1BH + DEFW ERRX + + ENDM + SVCT 1C, .?DACN, ?DACN ;1C +.?DACN: EQU 1CH + DEFW ?DACN + ENDM + SVCT 1D, .?ADCN, ?ADCN +.?ADCN: EQU 1DH + DEFW ?ADCN + ENDM + SVCT 1E, .STICK, STICK ;no ope +.STICK: EQU 1EH + DEFW STICK + ENDM + SVCT 1F, .STRIG, STRIG ;no ope +.STRIG: EQU 1FH + DEFW STRIG + ENDM + SVCT 20, .BELL , CTRLG ;20 +.BELL: EQU 20H + DEFW CTRLG + ENDM + SVCT 21, .PLAY , PLAY +.PLAY: EQU 21H + DEFW PLAY + ENDM + SVCT 22, .SOUND, MSOUND +.SOUND: EQU 22H + DEFW MSOUND + ENDM + SVCT 23, .MCTRL, MCTRL +.MCTRL: EQU 23H + DEFW MCTRL + ENDM + SVCT 24, .IOOUT, IOOUT ;24 +.IOOUT: EQU 24H + DEFW IOOUT + ENDM + SVCT 25, .TIMRD, TIMRD +.TIMRD: EQU 25H + DEFW TIMRD + ENDM + SVCT 26, .TIMST, TIMST +.TIMST: EQU 26H + DEFW TIMST + ENDM + SVCT 27, .INP1C, INP1C0 +.INP1C: EQU 27H + DEFW INP1C0 + ENDM + SKP H + +; + SVCT 28, .CLRIO, CLRIO ;28 +.CLRIO: EQU 28H + DEFW CLRIO + ENDM + SVCT 29, .SEGAD, SEGADR +.SEGAD: EQU 29H + DEFW SEGADR + ENDM + SVCT 2A, .OPSEG, OPSEG +.OPSEG: EQU 2AH + DEFW OPSEG + ENDM + SVCT 2B, .DLSEG, DELSEG +.DLSEG: EQU 2BH + DEFW DELSEG + ENDM + SVCT 2C, .DEVNM, DEV ;2C +.DEVNM: EQU 2CH + DEFW DEV + ENDM + SVCT 2D, .DEVFN, DEV&FN +.DEVFN: EQU 2DH + DEFW DEV&FN + ENDM + SVCT 2E, .LUCHK, LUCHK +.LUCHK: EQU 2EH + DEFW LUCHK + ENDM + SVCT 2F, .LOPEN, LOPEN +.LOPEN: EQU 2FH + DEFW LOPEN + ENDM + SVCT 30, .LOADF, LOADFL ;30 +.LOADF: EQU 30H + DEFW LOADFL + ENDM + SVCT 31, .SAVEF, SAVEFL +.SAVEF: EQU 31H + DEFW SAVEFL + ENDM + SVCT 32, .VRFYF, VRFYFL +.VRFYF: EQU 32H + DEFW VRFYFL + ENDM + SVCT 33, .RWOPN, RWOPEN +.RWOPN: EQU 33H + DEFW RWOPEN + ENDM + SVCT 34, .INSTT, INPSTRT;34 +.INSTT: EQU 34H + DEFW INPSTRT + ENDM + SVCT 35, .INMSG, INPMSG +.INMSG: EQU 35H + DEFW INPMSG + ENDM + SVCT 36, .INDAT, INPDT +.INDAT: EQU 36H + DEFW INPDT + + ENDM + SVCT 37, .PRSTR, PRTSTR +.PRSTR: EQU 37H + DEFW PRTSTR + ENDM + SVCT 38, .CLKL , CLKL ;38 +.CLKL: EQU 38H + DEFW CLKL + ENDM + SVCT 39, .DIR , FDIR +.DIR: EQU 39H + DEFW FDIR + ENDM + SVCT 3A, .SETDF, SETDFL +.SETDF: EQU 3AH + DEFW SETDFL + ENDM + SVCT 3B, .LSALL, LSALL +.LSALL: EQU 3BH + DEFW LSALL + ENDM + SVCT 3C, .FINIT, FINIT ;3C +.FINIT: EQU 3CH + DEFW FINIT + ENDM + SVCT 3D, .DELET, FDELET +.DELET: EQU 3DH + DEFW FDELET + ENDM + SVCT 3E, .RENAM, FRENAM +.RENAM: EQU 3EH + DEFW FRENAM + ENDM + SVCT 3F, .LOCK , FLOCK +.LOCK: EQU 3FH + DEFW FLOCK + ENDM + SVCT 40, .RECST, RECST ;40 +.RECST: EQU 40H + DEFW RECST + ENDM + SVCT 41, .INREC, INREC +.INREC: EQU 41H + DEFW INREC + ENDM + SVCT 42, .PRREC, PRREC +.PRREC: EQU 42H + DEFW PRREC + ENDM + SVCT 43, .ERCVR, ERRCVR +.ERCVR: EQU 43H + DEFW ERRCVR + ENDM + SVCT 44, .SWAP , FSWAP ;44 +.SWAP: EQU 44H + DEFW FSWAP + ENDM + SVCT 45, .CLS , HCLS +.CLS: EQU 45H + DEFW HCLS + + ENDM + SVCT 46, .POSCK, POSCK +.POSCK: EQU 46H + DEFW POSCK + ENDM + SVCT 47, .POSSV, POSSV +.POSSV: EQU 47H + DEFW POSSV + ENDM + SVCT 48, .PSET , PSET ;48 +.PSET: EQU 48H + DEFW PSET + ENDM + SVCT 49, .LINE , WLINE +.LINE: EQU 49H + DEFW WLINE + ENDM + SVCT 4A, .PATTR, CHARW +.PATTR: EQU 4AH + DEFW CHARW + ENDM + SVCT 4B, .BOX , WBOX +.BOX: EQU 4BH + DEFW WBOX + ENDM + SVCT 4C, .PAINT, WPAINT ;4C +.PAINT: EQU 4CH + DEFW WPAINT + ENDM + SVCT 4D, .CIRCL, WCIRCL +.CIRCL: EQU 4DH + DEFW WCIRCL + ENDM + SVCT 4E, .POINT, ?POINT +.POINT: EQU 4EH + DEFW ?POINT + ENDM + SVCT 4F, .HCPY , HCPY +.HCPY: EQU 4FH + DEFW HCPY + ENDM + SVCT 50, .DSMOD, DSMODE ;50 +.DSMOD: EQU 50H + DEFW DSMODE + ENDM + SVCT 51, .DPLBK, DPALBK +.DPLBK: EQU 51H + DEFW DPALBK + ENDM + SVCT 52, .DPLST, DPALST +.DPLST: EQU 52H + DEFW DPALST + ENDM + SVCT 53, .DWIND, DWIND +.DWIND: EQU 53H + DEFW DWIND + ENDM + SVCT 54, .DCOL , DCOLOR +.DCOL: EQU 54H + DEFW DCOLOR + + ENDM + SVCT 55, .DGCOL, DGCOL ;55 +.DGCOL: EQU 55H + DEFW DGCOL + ENDM + SVCT 56, .ICRT , ICRT +.ICRT: EQU 56H + DEFW ICRT + ENDM + SVCT 57, .SYMBL, SYMBOL +.SYMBL: EQU 57H + DEFW SYMBOL + ENDM + SKP H + +;--------------------------------- +; +; SVC handlar (RST3) +; +;--------------------------------- +IOSVC: EX (SP),HL + PUSH AF + LD A,M + INC HL + PUSH HL + LD HL,IOSVCT + ADD A,A + ADD A,L + JR NC,+3 + INC H + LD L,A + LD A,M + INC HL + LD H,M + LD L,A + LD (IOSVCX+1),HL + POP HL + POP AF + EX (SP),HL +IOSVCX: JP 0 ;xxx +; +; I/O device call (RST5) +; +IOCALL: ENT + PUSH HL + PUSH DE + LD (IOCALX+1),IX + LD IX,IOERR + OR A +IOCALX: CALL 0 ;xxx + POP DE + POP HL + RET NC + OR A + SCF + RET Z + JP IOERR +; +; + END + SKP H + + INCLD XMUTI +; +; Convert BINARY(HL) to ASCII(DE) +; +ASCHL: ENT + PUSH HL + PUSH BC + PUSH DE + LD DE,10000 + CALL ASCHL2 + LD DE,1000 + CALL ASCHL2 + LD DE,100 + CALL ASCHL2 + LD DE,10 + CALL ASCHL2 + LD A,L + POP DE + OR "0" + LD (DE),A + INC DE + XOR A + LD (DE),A + POP BC + POP HL + RET +; +ASCHL2: LD A,FFH +ASCHL4: INC A + OR A + SBC HL,DE + JR NC,ASCHL4 + ADD HL,DE + OR A + JR NZ,ASCHL6 + OR B + RET Z ;Zero sup. + XOR A +ASCHL6: LD B,1 + OR "0" + POP DE + EX (SP),HL + LD M,A + INC HL + EX (SP),HL + PUSH DE + RET + SKP H + +; +; Convert ASCII(HL) to BINARY(DE) +; +DEASC: ENT + TEST1 "$" + CALL TEST1 + DEFB "$" + ENDM + JR Z,DEHEX + LD DE,0 +DEASC2: CALL HLFTCH + SUB "0" + CP 10 + RET NC + INC HL + PUSH HL + LD HL,DE + ADD HL,HL ;2 + JR C,ER02' + ADD HL,HL ;4 + JR C,ER02' + ADD HL,DE ;5 + JR C,ER02' + ADD HL,HL ;10 + JR C,ER02' + LD E,A + LD D,0 + ADD HL,DE + JR C,ER02' + EX DE,HL + POP HL + JR DEASC2 +; +ER02': LD A,2 + JP ERRORJ + SKP H + +; +; Convert HEX(HL) to BINARY(DE) +; +DEHEX: ENT + LD DE,0 +DEHEX2: LD A,M + CALL CKHEX + RET C + INC HL + EX DE,HL + ADD HL,HL ;2 + JR C,ER02' + ADD HL,HL ;4 + JR C,ER02' + ADD HL,HL ;8 + JR C,ER02' + ADD HL,HL ;16 + JR C,ER02' + ADD A,L + LD L,A + EX DE,HL + JR DEHEX2 +; +; Chck hex +; +CKHEX: ENT + SUB "0" + CP 10 + CCF + RET NC + SUB "A"-"0" + CP 6 + CCF + RET C + ADD A,10 + RET +; +; SVC .HALT ;Halt if SPACE, +; ;and break check +; +HALT: ENT + CALL HALTSB + CP " " + RET NZ + CALL HALTSB + OR A + JR Z,-4 + RET +HALTSB: SVC .BREAK + RST 3 + DEFB .BREAK + ENDM + JR Z,HALTBR + LD A,FFH + SVC .INKEY + RST 3 + DEFB .INKEY + ENDM + CP 1BH + RET NZ + +HALTBR: JP BREAKZ + RET + SKP H + +; +; SVC .SETDF ;set default +; ent DE:equipment table +; A: channel +; +SETDFL: ENT + LD (DDEV),DE + LD (DCHAN),A + RET +; +; Pointer update +; +ADDP0: ENT + LD HL,(POOL) + ADD HL,DE + LD (POOL),HL +ADDP1: ENT + LD HL,(VARST) + ADD HL,DE + LD (VARST),HL +ADDP2: ENT + LD HL,(STRST) + ADD HL,DE + LD (STRST),HL + LD HL,(VARED) + ADD HL,DE + LD (VARED),HL + LD HL,(TMPEND) + ADD HL,DE + LD (TMPEND),HL + RET +; + SKP H + +; +; SVC .ERRX ;Print error message +; +ERRX: ENT + LD C,A + SVC .BELL + RST 3 + DEFB .BELL + ENDM + SVC .CR2 + RST 3 + DEFB .CR2 + ENDM + BIT 7,C + JR Z,ERRX1 + LD HL,KEYBUF + PUSH HL + CALL SETDNM + POP DE + SVC .CRTMS ;Device name + RST 3 + DEFB .CRTMS + ENDM +ERRX1: LD A,C + AND 7FH + LD C,A + SVC .DI + RST 3 + DEFB .DI + ENDM + OUT (LSE3),A ;bank change + JR ERRX0 +; +ERRXU: LD C,69 +ERRX0: LD DE,ERRTXT +ERRX2: DEC C + JR Z,ERRX4 + LD A,(DE) + INC DE + OR A + JP P,-3 + JR Z,ERRXU + JR ERRX2 +; +ERRX4: LD A,(DE) + CP 80H + JR Z,ERRXU + EX DE,HL + LD DE,KEYBUF +ERRX6: LD A,(HL) + OR A + JP M,ERRX8 + LDI + JR ERRX6 +ERRX8: AND 7FH + LD (DE),A + OUT (LSE1),A ;bank change + SVC .EI + RST 3 + DEFB .EI + + ENDM + INC DE + LD HL,MESER + LD B,8 + CALL LDDEHL + LD DE,KEYBUF + SVC .CRTMS + RST 3 + DEFB .CRTMS + ENDM + RET +; + SKP H + +; +SETDNM: ENT + LD DE,(ZEQT) + INC DE + INC DE + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + CALL LDHLDE + LD A,(ZCH) + ADD A,"1" + LD M,A ;ch# + LD A,(ZFLAG2) + AND 0FH ;max ch# + JR Z,+3 + INC HL + LD M,":" + INC HL + LD M,0 + RET +; +MESER: DEFM " ERROR" + + DEFB 0 +; +; + END + SKP H + + INCLD XPARM +;----------------------------------- +; +; +; display mode +; +; +; ent. acc mode colors dmd +; 1 320*200 4 0 +; 2 320*200 16 2 +; 3 640*200 2 4 +; 4 640*200 4 6 +; +; +;----------------------------------- +; +DSMODE: ENT + CALL PUSHR + LD B,A +; + LD A,(MEMOP) ;option vram exist ? + OR A + LD A,B + JR NZ,DSM0 + CP 2 + JR Z,CERR + CP 4 + JR Z,CERR +; +; +; +DSM0: PUSH AF + DEC A + LD D,FFH + LD HL,PAL4T + LD BC,0403H + JR Z,DSM00 ;skip if 320*200 4 colors + DEC A + LD HL,PAL16T + LD BC,100FH + JR Z,DSM00 ;skip if 320*200 16 colors + DEC A + LD HL,PAL2T + LD BC,0201H + JR Z,DSM00 ;skip if 640*200 2 colors + LD HL,PAL4T ; 640 *200 4 colors + LD BC,0805H + LD D,FDH +; +DSM00: LD (CPLANE),BC ;c cplane + LD A,D + LD (PMASK),A ;plane mask + LD (PALAD),HL + CALL PALOFF + POP AF + DEC A + RLCA + LD (DMD),A + OUT (LSDMD),A + AND 4 ;bit 2 only + + CALL DWIDTH ;acc=0 -->40 chr + CALL CONSOI ;(YS,YE)=0,24 palint + OR A + RET +; +; +CERR: + SCF + RET + SKP H + +;----------------------------------- +; +; +; console & palette & color init +; +;----------------------------------- +CONSOI: LD HL,1800H ;(ys,ye)=(0,24) + CALL DWIND +; +;JR PALINT +; +PALINT: LD A,(CPLANE) + LD (CMODE),A + XOR A + CALL DPALBK ;init palette block reg. + LD HL,PALAD + LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL + LD DE,PALTBL ;init palette reg. + PUSH DE + LD BC,4 + LDIR + POP HL +PALOUT: LD B,4 + LD C,LSPAL + OTIR + RET +;-------------------------------- +; +; Palette all clr +; +; +;-------------------------------- +PALOFF: ENT + PUSH BC + XOR A + LD B,5 + LD C,LSPAL +PALOF1: OUT (C),A + ADD A,10H + DJNZ PALOF1 + POP BC + RET +; +; + SKP H + +;---------------------------------- +; +; +; pallet block regster set +; +; ent acc=pal block number +; +;---------------------------------- +DPALBK: ENT + CALL PUSHR + LD (PALBK),A + LD E,A + LD A,(DMD) + CP 2 + JR NZ,PALBK1 ;skip if not 320*200 16 col +; + LD A,E + RLCA ;*2 + RLCA ;*4 + LD HL,PALTBL + LD B,4 + PUSH HL +PALBK0: LD (HL),A + ADD A,11H + INC HL + DJNZ PALBK0 + POP HL + CALL PALOUT +PALBK1: LD A,E + OR 40H + OUT (LSPAL),A + RET +; + SKP H + +;---------------------------------- +; +; pallet regster set +; +; ent acc=pal register number +; b =pal color code +; +;---------------------------------- +; +DPALST: ENT + CALL PUSHR + LD HL,PALTBL + LD D,0 + LD E,A ;pallet register number + ADD HL,DE + OR A + RLCA + RLCA + RLCA + RLCA + OR B ;pallet color code + LD (HL),A + OUT (LSPAL),A + RET +; + SKP H + +; +;---------------------------------- +; +; +; display color set +; +; Acc=col code +;---------------------------------- +; +DCOLOR: ENT + PUSH AF + CALL COLS + LD (CMODE),A + POP AF + RET +; +; +DGCOL: ENT + PUSH AF + CALL COLS + LD (GMODE),A + POP AF + RET +; +COLS: ENT + PUSH BC + LD B,A + LD A,(DMD) + CP 6 + LD A,B + JR NZ,COLS1 ;skip if not 640*200 4 + CP 2 + JR C,COLS1 + ADD A,2 ;2 or 3 only +COLS1: POP BC + RET +; + SKP H + +;---------------------------------- +; +; +; display window set +; +; +; +;---------------------------------- +DWIND: ENT + CALL PUSHR + LD (YS),HL ;save YS,YE + LD A,H + SUB L + INC A + LD (YW),A ;YW=YE-YS+1 :lines + LD B,A + ADD A,A + ADD A,A + ADD A,B + LD (SW),A ;SW=YW*5 + EX DE,HL + LD H,0 + LD L,A + ADD HL,HL ;*2 + ADD HL,HL ;*4 + ADD HL,HL ;*8 + LD (SSW),HL + EX DE,HL + INC H + LD A,H + ADD A,A + ADD A,A + ADD A,H + LD (SEA),A ;SEA=(YE+1)*5 + LD A,L + ADD A,A + ADD A,A + ADD A,L + LD (SSA),A ;SSA=YS*5 + LD HL,0 + LD (SOF),HL ;SOF=0 + LD HL,SEA + LD BC,6CFH ;B counter C scrool reg + OTDR + CALL HCLS + JP HOME + SKP H + +;---------------------------------- +; +; +; display chracter size change +; +; if acc=1 then 640 chr +; if acc=0 then 320 chr +;---------------------------------- +; +DWIDTH: ENT + CALL PUSHR + OR A + LD A,40 + LD DE,2300H + JR Z,DWID1 + ADD A,A ;80 chr + LD DE,0023H +DWID1: LD (CWIDTH),A + LD H,0 + LD L,A + ADD HL,HL ;*2 + ADD HL,HL ;*4 + ADD HL,HL ;*8 + LD (CSIZE),HL + DEC A + LD (XE),A +; + LD A,D + LD (PTW0),A + LD (PTW0+1),A + LD (PTB0),A + LD A,E + LD (PTW1),A + LD (PTW1+1),A + LD (PTB1),A + LD BC,0B07H ;patch counter + LD HL,CHTBL ;patch table addr + CALL PATCH + CALL CHGRPH ;mon-grph + JP HCLS +; +; +PATCH: ENT +; +; word patch +; +PATCHW: LD E,(HL) ;addr read + INC HL + LD D,(HL) + INC HL +PTW0: INC HL ;nop + INC HL ;nop + LD A,(HL) ;data read + INC HL + LD (DE),A + INC DE + LD A,(HL) + INC HL + LD (DE),A +PTW1: NOP ;inc hl + + NOP ;inc hl + DJNZ PATCHW +; +; byte patch +; + LD B,C +PATCHB: LD E,(HL) ;addr read + INC HL + LD D,(HL) + INC HL +PTB0: INC HL ;nop + LD A,(HL) + INC HL + LD (DE),A +PTB1: NOP ;inc hl + DJNZ PATCHB + RET +; + SKP H + +;-------------------------------- +; +; +; PL-EX crt driver patch tabel +; +; +;-------------------------------- +; +CHTBL: +; +; word patch +; + DEFW XPD1+1 ;ld de,xxxxh + DEFW 80 + DEFW 40 + DEFW XPC1 ;sla c + DEFW 21CBH + DEFW 0 ;nop + DEFW XPC2+1 ;ld bc,xxxxh + DEFW 400 + DEFW 200 + DEFW XPC3+1 ;ld hl,xxxxh + DEFW BITBUF+16000 + DEFW BITBUF+8000 + DEFW XPDE3+1 ;ld de,xxxxh + DEFW 80 + DEFW 40 + DEFW XPDE4+1 ;ld bc,xxxxh + DEFW 560 + DEFW 280 + DEFW XPIN2+1 ;ld de,xxxxh + DEFW 80 + DEFW 40 + DEFW XPIN3+1 ;ld de,xxxxh + DEFW FFB0H + DEFW FFD8H + DEFW XPIN4+1 ;ld bc,xxxxh + DEFW FDD0H + DEFW FEE8H + DEFW XPLI2+1 ;ld de,xxxxh + DEFW 80 + DEFW 40 + DEFW XPSC2+1 ;ld bc,xxxxh + DEFW 639 + DEFW 319 +; +; +; +;byte patch +; +; + DEFW XPDE1+1 ;ld l,xxh + DEFB 79 + DEFB 39 + DEFW XPDE2+1 ;ld c,xxh + DEFB 79 + DEFB 39 + DEFW XPIN1+1 ;ld c,xxh + DEFB 79 + DEFB 39 + + DEFW XPLI1+1 ;ld a,xxh + DEFB 79 + DEFB 39 + DEFW XPSC1+1 ;ld c,xxh + DEFB 80 + DEFB 40 + DEFW XPCU1 ;add hl,hl + DEFB 29H + DEFB 0 ;nop + DEFW XPCU2 ;add hl,hl + DEFB 29H + DEFB 0 ;nop +; +; + END + SKP H + + INCLD XDSP +; +;--------------------------------- +; +; +; crt 1 character display +; +; acc=ascii code +; +; +;--------------------------------- +; +ACCDI: ENT + CALL PUSHRA + LD HL,(POSADR) + LD C,A + CP 20H ;convert space + JR NZ,ACCDI0 + XOR A +ACCDI0: LD (HL),A + LD HL,(BITADR) + LD A,C + CALL BITMAP + XOR A ;patch cursor + LD (CDOWN2+2),A + CALL CRIGHT + LD A,7 + LD (CDOWN2+2),A + RET +; + SKP H + +;---------------------------------- +; +; bitmap extention +; +; ent Acc:ascii code +; HL :bitadr +; +;---------------------------------- +; +BITMAP: ENT +; + SVC .?ADCN ;ascii->display + RST 3 + DEFB .?ADCN + ENDM + DI + EXX + PUSH HL + LD H,0 + LD L,A ;display code + LD A,(CMODE) + OR 80H ;replace mode + OUT (LSWF),A +; + ADD HL,HL ;*2 + ADD HL,HL ;*4 + ADD HL,HL ;*8 + SET 4,H ;offset fontbuf $1000 + EXX + LD B,8 +XPD1: LD DE,40 ;cwidth 80<--80 chr + IN A,(LSE0) ;bank change !! +BITM1: EXX + LD A,(HL) ;font pattern read + INC HL ;next pointer + EXX + LD (HL),A ;font pattern write + ADD HL,DE ;next laster + DJNZ BITM1 + IN A,(LSE1) ; bank reset !! + EI + EXX + POP HL + EXX + RET + SKP H + +;---------------------------------- +; +; +; manegement utility +; +; +;---------------------------------- + +; exit D=begin line +; E=end line+1 +; +LBOUND: ENT + CALL TBCALC +LBOUN1: LD A,M + OR A + JR Z,LBOUN2 + DEC HL + DEC E + LD A,(YS) + CP E + JR C,LBOUN1 +LBOUN2: LD D,E +LBOUN3: INC E + INC HL + LD A,M + OR A + RET Z + LD A,(YE) + CP E + JR NC,LBOUN3 + RET +; +; +TBCALC: ENT + LD E,H + LD D,0 + LD HL,SCRNT0 + ADD HL,DE + RET +; + END + SKP H + + INCLD XCLS +;----------------------------------- +; +; clear window +; +; +; +;----------------------------------- +HCLSW: ENT + CALL PUSHR + LD A,(YS) + LD H,A + CALL TBCALC + LD A,(YW) ;YW=YE-YS+1 + LD B,A ;lines + LD E,A ;store YW +; + CALL ?CLRHL ;mangement buf clr +; +CLSWT: LD C,E ;restore YW + LD A,(YE) +;JR CLSLT +; +; +;----------------------------------- +; +; +; clear line +; +; C=lines Acc=line no. +; +;----------------------------------- +; +CLSLT: + INC A + LD L,0 + LD H,A + PUSH HL ;start pos x,y + CALL PONT + LD B,0 +XPC1: NOP ;40 SLA C<--80 + NOP + PUSH BC + CALL PUSHW + POP HL ;pop counter + ADD HL,HL ;*2 + ADD HL,HL ;*4 + ADD HL,HL ;*8 + LD C,L + LD B,H + POP HL ;start pos x,y + CALL PONTB + CALL PUSHW + JR CLRSCR +; +;----------------------------------- +; +; clear screen +; +; + +; +; +;----------------------------------- +HCLS: ENT + CALL PUSHRA +CLST: LD HL,TEXTBF+2000 + LD BC,50 + CALL PUSHW + LD B,25 + LD HL,SCRNT0 + CALL ?CLRHL ;manegement buf clr +CLSB: +; +; color mode +; +XPC2: LD BC,200 ;or 400 +XPC3: LD HL,BITBUF+8000 ;or +16000 + CALL PUSHW + JR CLRSCR +;----------------------------------- +; +; PUSH Write +; +; +; Ent:HL=cls point addr +; BC=counts *40 +; +;----------------------------------- +; +PUSHW: ENT + LD (PUSHW1+1),SP + LD (PUSHW2+1),HL + LD HL,0 + LD A,(CPLANE) ;display active plane + OR 80H ;replace mode + OUT (LSWF),A +; +PUSHW0: DI +PUSHW2: LD SP,0 ;xx + IN A,(LSE0) ;bank +; + PUSH HL + PUSH HL + PUSH HL + PUSH HL + PUSH HL ;10 + PUSH HL + PUSH HL + PUSH HL + PUSH HL + PUSH HL ;20 + PUSH HL + PUSH HL + PUSH HL + PUSH HL + PUSH HL ;30 + PUSH HL + PUSH HL + PUSH HL + PUSH HL + + PUSH HL ;40 + IN A,(LSE1) ;bank + LD (PUSHW2+1),SP +PUSHW1: LD SP,0 ;xxx + EI +; + DEC BC + LD A,C + OR B + JR NZ,PUSHW0 + RET +;---------------------------------- +; +; scrool parameter initial +; +; +;---------------------------------- +; +CLRSCR: + LD HL,0 + LD (SOF),HL + LD B,2 + LD C,LSSCR ;lsi scrool register + OUT (C),H + DEC B + OUT (C),L + JP HOME +; +; + END + SKP H + + INCLD XDEL +;---------------------------------- +; +; +; +; delete chacter +; +; +;---------------------------------- +; +; +DEL: + EXX + PUSH HL + PUSH DE + PUSH BC + EXX + CALL DEL0 + EXX + POP BC + POP DE + POP HL + EXX + RET +; +DEL0: + LD HL,(CURXY) + DEC L + JP P,DEL1 +; + CALL TBCALC + LD A,(HL) + LD H,E + LD L,0 + OR A + JR Z,DEL1 + LD A,(YS) + CP H + JR Z,DEL1 + DEC H +XPDE1: LD L,39 ;XE 39 or 79 +DEL1: + LD (CURXY),HL + CALL LINCAL +;BC lines HL' counts HL last curxy + CALL PONTC + PUSH BC ;lines store + LD D,H + LD E,L + INC HL + EXX + PUSH HL ;HL' counts + EXX + POP BC + LDIR + XOR A + LD (DE),A ;last addr space + POP BC ;lines pop + LD HL,(CURXY) + INC HL + + CALL PONTB ;bitmap addr +DELB11: EXX + LD D,9 ;laster set + LD HL,(MAXCF) + DEC D + EXX + JR DELB2 ;line first time only + SKP H + +;---------------------------------- +; DELB +; +; ent. +; BC lines +; HL start address +;---------------------------------- +DELB: +; +XPDE2: LD C,39 ;79 xe + DEC B ;last line ? + JR Z,DELB0 ;skip if end of func. + INC DE ;next addr calc + INC DE + LD H,D + LD L,E + JR DELB11 +; +DELB1: LD HL,(MAXCF) ; + DEC D ;last laster ? + EXX + JR Z,DELB ;skip if next line +XPDE3: LD DE,40 ;cwidth 80 + ADD HL,DE +; +DELB2: EXX ;next plane ? + RRC L + JR C,DELB1 + LD A,L + AND H ;pmask + EXX + JR Z,DELB2 ;skip if warp + DI + PUSH HL + PUSH BC + OUT (LSRF),A ;read plane + OUT (LSWF),A ;write plane + IN A,(LSE0) ;bank change + OUT (LSE0),A ;cg off + LD D,H + LD E,L + DEC DE + LD A,C + OR A + JR Z,XPDE4 + LD A,B ;line counter + LD B,0 + LDIR + DEC A + JR Z,DELB3 ;skip if last counter +XPDE4: LD BC,280 ; 560 + ADD HL,BC + LD A,(HL) + LD (DE),A +DELB3: IN A,(LSE1) ;bank off + EI + POP BC + POP HL + JP DELB2 +; + +; +DELB0: + EX DE,HL + INC C + LD E,C + LD D,B + LD B,8 + DI + IN A,(LSE0) ;bank change + OUT (LSE0),A ;cg off + LD A,(CPLANE) + OR 80H ;replace mode + OUT (LSWF),A +DELB01: XOR A + LD (HL),A ;space fill + SBC HL,DE + DJNZ DELB01 + IN A,(LSE1) ;bank off + EI + LD HL,(CURXY) + JP CURMOV +; + SKP H + +;---------------------------------- + +; +; +; insert chacter +; +; +;---------------------------------- +; +; +INST: +; + EXX + PUSH HL + PUSH DE + PUSH BC + EXX + CALL INST0 + EXX + POP BC + POP DE + POP HL + EXX + RET +; +; +INST0: + LD HL,(CURXY) + CALL LINCAL +;BC lines HL' counts HL last curxy + PUSH HL ;store last-next pos x,y + CALL PONT + DEC HL ;last addr + LD A,(HL) + OR A + JR NZ,INSTE ;no insert space + PUSH BC ;lines store + LD D,H + LD E,L + DEC HL + EXX + PUSH HL ;HL' counts + EXX + POP BC + LDDR + XOR A + LD (DE),A ;last addr space + POP BC ;lines pop + POP HL + CALL PONTB ;bitmap addr + DEC HL + LD A,C + LD (LASTC+1),A + DEC B + JR Z,INSEF ;first time ended + JR INSB1 +; +INSTE: POP HL + RET +; + +; +;---------------------------------- +; +; +; insert operation +; +; <> +; +; ent. B =line counter +; +;---------------------------------- +; +INSB: + DEC B ;last line ? + JR Z,INSEND ;skip if end of func. +INSB1: +XPIN1: LD C,39 ;79 xe + CALL INSLIN + JR INSB +; +;--------------------------------- +; +; +; insert operation +; +; <> +; +;--------------------------------- +INSEND: +LASTC: LD C,0 ;patch +INSEF: CALL INSLIN + CALL PONTCB +XPIN2: LD DE,40 ;cwidth 80 + LD B,8 + DI + LD A,(CPLANE) + OR 80H ;replace mode + OUT (LSWF),A + IN A,(LSE0) ;bank change + OUT (LSE0),A ;cg off +INSB01: XOR A + LD (HL),A ;space fill + ADD HL,DE + DJNZ INSB01 + IN A,(LSE1) ;bank off + EI + RET +; + SKP H + +;---------------------------------- +; +; insert operation +; +; 1 line only +; +; ent. +; HL=first destination addr +; C =bytes +; +;---------------------------------- +INSLIN: + EXX + LD D,9 ;laster counter set +INSL1: LD HL,(MAXCF) ; + DEC D ;last laster ? + EXX + RET Z + CALL INSLAS +XPIN3: LD DE,FFD8H ;FFB0h <--80 + ADD HL,DE + EXX + JR INSL1 +; +; +; +; +;--------------------------------- +; +; insert operation +; +; 1 laster only +; +; +; ent. E'=plane data(maxcf) +; HL=first destination addr +; C=bytes +; +;--------------------------------- +INSLAS: EXX ;next plane ? + RRC L + LD A,L + EXX + RET C ;next laster + EXX + AND H ;pmask + EXX + JR Z,INSLAS ;skip if warp + PUSH HL + PUSH BC + DI + OUT (LSRF),A ;read plane + OUT (LSWF),A ;write plane + IN A,(LSE0) ;bank change + OUT (LSE0),A ;cg off + LD D,H + LD E,L + DEC HL + LD A,C + OR A + + JR Z,XPIN4 + LD A,B ;line counter + LD B,0 + LDDR + OR A + JR Z,INSLA1 ;skip if last line +XPIN4: LD BC,FEE8H ;FDD0H <--80 + ADD HL,BC + LD A,(HL) + LD (DE),A +INSLA1: IN A,(LSE1) ;bank off + EI + POP BC + POP HL + JP INSLAS +; +;------------------------------- +; +; +; line cal +; +; +;------------------------------- +; +LINCAL: + LD B,1 +XPLI1: LD A,39 ;xe 39 or 79 + SUB L + LD C,A + EXX +XPLI2: LD DE,40 ;cwidth 80 + LD H,0 + LD L,A + EXX +LINC1: INC H ;next line check + LD A,(YE) + CP H + JR C,LINC2 ;scrool end check + CALL TBCALC + LD A,(HL) + OR A + LD H,E + JR Z,LINC2 ;manage ment check + INC B + EXX + ADD HL,DE + EXX + JR LINC1 +; +; +LINC2: LD L,0 + RET +; +; +; + END + SKP H + + INCLD XSCR +;---------------------------------- +; +; scrool main logic +; +; +; +; +;---------------------------------- +SCROOL: CALL PUSHRA +;--------------------------------- +; +; text buf scrool & clr +; +;--------------------------------- +SCRTX: LD A,(YS) + LD H,A + LD L,0 + CALL PONT ;start addr cal + LD D,H + LD E,L ;DE destination addr + LD B,0 +XPSC1: LD C,40 ;cwidth 80 + ADD HL,BC ;HL source addr +; + LD A,(YW) ;scrool lines + DEC A + JR Z,SCR0 ;skip if 1 line mode + PUSH BC + PUSH HL + LD HL,0 +SCR1: ADD HL,BC + DEC A + JR NZ,SCR1 + LD B,H ;scrool bytes + LD C,L + POP HL ;pop source addr + LDIR + POP BC +SCR0: LD B,C + CALL ?CLRDE ;last line clr +;----------------------------------- +; +; maneger buf scrool & clr +; +;----------------------------------- + LD A,(YS) + LD H,A + CALL TBCALC ;exit HL maneger addr + LD A,(YW) ;scrool lines + DEC A ;1 line mode check + LD B,A + LD (HL),0 + INC HL + LD D,H + LD E,L + INC DE + CALL NZ,LDHLDE ;(hl)<--(de) + LD (HL),0 ;last line manegement +; + +;---------------------------------- +; +; calculation xferad +; +;---------------------------------- +SCRCAL: LD A,(YE) + LD H,A + LD L,0 ;HL=(0,YE) + CALL PONTB + LD (XFERAD+1),HL ;xferad data +;---------------------------------- +; +; scrool offset calc +; +;---------------------------------- +SCXFER: + LD DE,40 + LD HL,(SOF) ;lsi scrool offset + ADD HL,DE + PUSH HL + LD DE,(SSW) ;lsi scrool width + OR A + SBC HL,DE + POP HL + JR NZ,SCXF1 ;sof> graphic ram +; +;---------------------------------- + IN A,(LSE0) ; bank change + OUT (LSE0),A ; cg off +XFERAD: LD HL,0 ;LD HL,xxxxh + LD (HL),0 + LD D,H + LD E,L + INC DE +XPSC2: LD BC,319 ;xfer bytes + LDIR + + IN A,(LSE1) ; bank reset + EI +;---------------------------------- +; +; +; scrool operation ended +; +; cursor window end pos +; +;---------------------------------- +BOS: + LD A,(YE) + LD H,A + LD L,0 + JP CURMOV +; + END + SKP H + + INCLD XCURSOR +;------------------------------- +; +; cursor routines +; +; +; +; +; +;------------------------------- +; +CURSOR: + CALL PUSHRA +; +;cursor data pattern + EXX + PUSH HL ;push hl' + LD HL,CURDT1 + LD A,(CURMAK) + OR A + JR Z,CURS0 + LD HL,CURDT2 + DEC A + JR Z,CURS0 + LD HL,CURDT3 +CURS0: EXX +; + DI + LD A,(CURFLG) + XOR 1 + LD (CURFLG),A + LD HL,(BITADR) + LD D,0 + LD A,(CWIDTH) + LD E,A + LD B,8 ;counter + LD A,(CMODE) + OR 20H ;xor mode + OUT (LSWF),A ;wf + IN A,(LSE0) ;bank change + OUT (LSE0),A ;cg off +; +CURS1: EXX + LD A,(HL) + INC HL + EXX + LD (HL),A + ADD HL,DE + DJNZ CURS1 + IN A,(LSE1) ;bank reset + EXX + POP HL ;pop hl' + EXX + EI + RET +; +; +; +HCURON: ENT + CALL PUSHRA + + XOR A + OUT (LSD0),A ;reset 556 + CPL + OUT (LSD0),A + LD A,(CURFLG) + OR A + RET NZ + JR CURSOR +; +; +HCUROF: ENT + CALL PUSHRA + LD A,(CURFLG) + OR A + RET Z + JR CURSOR +; +; +FLASH: ENT + IN A,(LSD2) ;bit 6 + RLCA + RLCA + JR NC,HCURON + JR HCUROF +; +;-------------------------------- +; +; cursor move +; +; ent HL x,y +; +;-------------------------------- +; +CURMOV: ENT + CALL PUSHR + LD (CURXY),HL + CALL PONT ;cursor addr cal + LD (POSADR),HL + CALL PONTCB ;bitmap cursor pos cal + LD (BITADR),HL + RET + SKP H + +;------------------------------- +; +; poniter calc +; +; ent hl=curxy +; hl=text addr +;------------------------------- +PONTC: ENT + LD HL,(CURXY) +PONT: ENT + PUSH DE + PUSH AF + LD D,20H ;offset textbuf + LD E,L + LD A,H + ADD A,A ;2 + ADD A,A ;4 + ADD A,H ;5 + LD L,A + LD H,0 + ADD HL,HL ;10 + ADD HL,HL ;20 + ADD HL,HL ;40 +XPCU1: NOP ;ADD HL,HL *80 + ADD HL,DE + POP AF + POP DE + RET + SKP H + +;---------------------------------- +; +; pointer cal +; +; ent hl=curxy +; hl=bitmap addr +; +;---------------------------------- +PONTCB: ENT + LD HL,(CURXY) +PONTB: ENT + PUSH DE + PUSH AF + LD D,H + LD E,0 ;de=h*256 + LD A,L + LD L,H ;l=curx + LD H,E ;h=0 + ADD HL,HL ;*2 + ADD HL,HL ;*4 + ADD HL,HL ;*8 + ADD HL,HL ;*16 + ADD HL,HL ;*32 + ADD HL,HL ;*64 + ADD HL,DE ;*320 +XPCU2: NOP ;ADD HL,HL *640 + CALL ADDHLA + SET 7,H ;offset bitmap addr + POP AF + POP DE + RET +; +;------------------------------ +; +; +; +; cursor left,right,down,up +; +; +;------------------------------ +; +HOME: LD L,0 + LD A,(YS) + LD H,A + JP CSET +; +; +CR2: CALL PUSHR + LD HL,(CURXY) + LD A,L + OR A + JR NZ,CR1 + CALL TBCALC + LD A,(HL) + OR A + RET Z +CR1: LD A,0DH + JP CRT1C +; +; + +CTR.M: XOR A + LD (CRTSFG+1),A ;sft mode reset + LD HL,(CURXY) + PUSH HL + INC H + CALL TBCALC + LD A,(YE) + LD D,A +CTR.ML: LD A,M + OR A + JR Z,CTR.M4 + INC HL + INC E + LD A,D + CP E + JR NC,CTR.ML +CTR.M4: DEC E + POP HL + LD H,E + JR CTR.M2 +; +CDOWN: LD HL,(CURXY) + JR CDOWN2 +; +CRIGHT: LD HL,(CURXY) + INC L + LD A,(XE) + CP L + JR NC,CSET +CTR.M2: + LD L,0 +CDOWN2: INC H + JR CDOWN3 ;patch + PUSH HL + CALL TBCALC + LD (HL),1 + POP HL +CDOWN3: + LD A,(YE) + CP H + JR NC,CSET + LD H,A + PUSH HL + CALL SCROOL + POP HL +CSET: JP CURMOV +; +; +CUP: LD HL,(CURXY) + JR CUP2 +; +CLEFT: LD HL,(CURXY) + LD A,L + OR A + JR NZ,CSET2 + LD A,(XE) + LD L,A +CUP2: LD A,(YS) + CP H + JR C,CSET3 + + LD A,(YS) + LD H,A + DEFB 3EH +CSET2: DEC L + DEFB 3EH +CSET3: DEC H + JR CSET +; +; +CTR.F: +CTR.Y: XOR A ;ALPHA + DEFB 21H +CTR.E: LD A,1 ;Shift lock + DEFB 21H +CTR.W: LD A,2 ;GRAPH + LD (CURMAK),A + RET +; +;---------------------------------- +; +; +; +; tab function +; +; +;---------------------------------- +; +CTAB: LD B,0 ;tab + LD HL,(CURXY) + INC L + LD A,L +CTAB1: INC B + SUB 10 + JR NC,CTAB1 + XOR A +CTAB2: ADD A,10 + DJNZ CTAB2 + LD L,A +; + LD A,(XE) ;boader check + CP L + RET C +; + PUSH HL + LD A,(INPFLG) + OR A + JR Z,CTAB4 + LD A,(CURX) +; + LD H,A + LD A,L + SUB H + JR Z,CTAB4 + LD B,A +CTAB3: PUSH BC + LD A,20H ;space + CALL PLTOUT + POP BC + DJNZ CTAB3 +CTAB4: POP HL + + JP CURMOV +;------------------------------ +; +; tab print function +; +; +;------------------------------ +RNTT: ENT + CALL CRT1S + LD A,(CURX) + SUB 10 + JR NC,-2 + ADD A,10 + RET Z + JR PRNTT +; +; + END + SKP H + + INCLD XKB +;------------------------------ +; +; GET LINE V0.1A +; +; '84.7.11 +; +;------------------------------ +; +BINPUT: ENT + PUSH HL + LD HL,(CURXY) + PUSH HL + PUSH DE + CALL TBCALC + POP DE + LD M,0 + POP HL + CALL GETL + JR C,BINERT + LD A,L + OR A + JR Z,BINERT + LD H,0 + ADD HL,DE + EX DE,HL + OR A +BINERT: POP HL + RET +; +; +GETL: ENT + PUSH BC + PUSH HL + PUSH DE +LINP02: CALL INKEY1 + CP 0DH ;CR? + JP Z,GCRT + CP 1BH ;Break? + JR Z,LINP.B + PUSH AF + LD A,(CURMAK) + CP 2 ;Graph mode? + JR NZ,LINP10 + POP AF + CP 17H + JR NC,LINP11 + CP 11H + JR C,LINP11 +; + LD HL,(CTRSFT) + BIT 6,L ;Ctrl? + JR Z,LINP11 +; +LINP32: SVC .CRT1X + RST 3 + DEFB .CRT1X + ENDM + JR LINP02 +; + +LINP10: POP AF +LINP11: SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + JR LINP02 +; +LINP.B: SCF ;break key on +LINP80: + SVC .CR1 + RST 3 + DEFB .CR1 + ENDM + POP DE + POP HL + POP BC + RET +; +GCRT: LD HL,(CURXY) + CALL LBOUND ;begin end search + LD A,E + SUB D + LD E,A ;E:Y.length + LD H,D ;H:line count + LD L,0 + CALL PONT ;calc start address + LD A,(CWIDTH) ;X size + LD D,A + POP BC ;store address set + PUSH BC + EXX + PUSH HL + LD HL,(LINLIM) ;L:line inp limit + EXX +; +GCRT10: + LD A,(HL) ;A<--ascii code +GCRT36: INC HL + LD (BC),A ;(BC)<--ascii code + INC BC + EXX + DEC L + JR Z,GCRT40 ;line limit? + EXX + DEC D + JR NZ,GCRT10 ;X right end ? + LD A,(CWIDTH) + LD D,A + DEC E + JR NZ,GCRT10 ;line count=0 ? + EXX +GCRT40: POP HL + EXX + XOR A + LD (BC),A ;end address=0 + LD L,C + LD H,B + POP DE + PUSH DE + PUSH HL + + OR A + SBC HL,DE + LD B,L + POP HL + LD A,20H ;clschr? + LD D,A + JP Z,LINP80 + DEC HL +GCRT50: LD A,M + OR A + JR Z,GCRT52 + CP D + JR NZ,GCRT54 + LD M,0 +GCRT52: DEC HL + DJNZ GCRT50 + JR GCRT56 +GCRT54: LD A,M + OR A + JR NZ,+4 + LD M," " + DEC HL + DJNZ GCRT54 +GCRT56: OR A + JP LINP80 +; +;------------------------------- +; +; KEY V0.1A +; +; '84.7.11 +; +;------------------------------- +; +; INKEY$[(ACC)] +; A=FF : INKEY$ =GET +; A=0 : INKEY$(0)=KEY DATA +; A>0 : INKEY$(1)=FLASH GET +; +INKEY$: ENT + INC A + JR Z,INKEYFF + DEC A + JP Z,INKEY0 +; +; +INKEY1: ENT + CALL KBFCHR + CALL PUSHR + CALL HCURON + EX AF,AF' + PUSH AF + CALL KEYSNS + LD A,(REPTF) +?KEY10: EX AF,AF' +?KEY12: LD B,16 ;chattering +?KEY14: CALL FLASH + CALL KEYSNS + BIT 1,A + JR NZ,?KEY12 ;same key ? + + DJNZ ?KEY14 + BIT 0,A + JR Z,?KEY20 ;key on ? + BIT 2,A + JR NZ,?KEY24 ;new key ? + EX AF,AF' + DEC A + JR NZ,?KEY10 + LD A,6 ;Repeat step time + JR ?KEY26 +?KEY20: PUSH HL + PUSH DE + PUSH BC + LD HL,KYDTB2 + LD DE,KYDTB1 + LD BC,10 + LDIR ;(KYDTB1)<--(KYDTB2) + POP BC + POP DE + POP HL +?KEY24: LD A,40H ;Repeat init time +?KEY26: LD (REPTF),A +?KEY28: CALL FLASH + CALL KEYGET + OR A + JR Z,?KEY29 + LD (KEYDAT),A + LD C,A + CALL HCUROF + POP AF + EX AF,AF' + LD A,C + RET +; +?KEY29: + PUSH HL + PUSH BC + LD B,10 + LD HL,KYDTB1 +?KEY30: LD (HL),FFH + INC HL + DJNZ ?KEY30 + POP BC + POP HL + JR ?KEY28 +; +INKEYFF:ENT + CALL KBFCHR + PUSH HL + CALL KEYGET + LD HL,KEYDAT + OR A + JR Z,INKEY9 + CP M + JR NZ,INKEY9 + POP HL + XOR A + RET +INKEY9: LD M,A + POP HL + + RET +; +INKEY0: ENT + CALL KBFCHR + CALL KEYGET + LD (KEYDAT),A + RET +; +KBFCHR: PUSH HL ;function key buffer + LD HL,(INBUFC) + LD A,L ;INBUFC + CP H ;INBUFL + POP HL + RET Z + EX (SP),HL + INC A + LD (INBUFC),A + LD HL,INBUFL ;INBUF-1 + CALL ADDHLA + LD A,M + POP HL + RET +; +; +; +KEYSNS: CALL PUSHR + LD DE,KYDTB2 + LD HL,KYDTB1 + LD BC,0A00H + DI +KEYSN0: LD A,B + ADD A,EFH + OUT (D0H),A + CP F8H ;special strobe + IN A,(D1H) + JR NZ,+4 + OR 7FH + CP FFH + JR Z,+4 + SET 0,C ;bit 0=key on + EX DE,HL + CP M + LD M,A + EX DE,HL + JR Z,+4 + SET 1,C ;bit 1=not same key + CPL + AND M + JR Z,+4 + SET 2,C ;bit 2=new key + INC HL + INC DE + DJNZ KEYSN0 + LD A,C +KEYSNE: EI + RET +; +KEYGET: CALL PUSHR + LD HL,KYDTB1 + LD DE,KYDTB2 + + PUSH HL + PUSH DE + LD BC,10 + LDIR ;(KYDTB2)<--(KYDTB1) + POP HL + POP DE + LD BC,0AF9H + DI + LD A,C + OUT (D0H),A + NOP + IN A,(D1H) + LD (DE),A +KEYGL1: LD A,C + OUT (D0H),A + CP F8H ;special strobe + IN A,(D1H) + LD (DE),A + JR Z,KEYG13 + CPL + AND M ;same--->Acc=0 +KEYGL3: LD M,A + INC DE + INC HL + DEC C + DJNZ KEYGL1 + EI + LD BC,0A00H +KYSTCK: DEC HL + LD A,M + OR A + JR NZ,KEYGIN ;not same-->KEYGIN + INC C + DJNZ KYSTCK + LD B,10 +KEYGL2: DEC DE + LD A,(DE) + CP FFH + JR NZ,REPKIN +REPKI3: DJNZ KEYGL2 +KEYNUL: XOR A + JR KEYSNE +; +KEYG13: XOR A + JR KEYGL3 +; +REPKIN: LD A,B + CP 2 + JR NZ,REPKI2 + LD A,(DE) + AND 81H + JR NZ,REPKI3 + LD A,1BH ;break key + JR KEYSNE +REPKI2: CP 1 + JR Z,KEYNUL + LD A,(REPCD1) + CP B + JR NZ,REPKI3 + LD A,(DE) + + PUSH DE + LD D,A + LD A,(REPCD2) + AND D + POP DE + JR NZ,REPKI3 + LD A,(KEYDAT) + JR KEYSNE +; +KEYGIN: PUSH AF + LD A,B + LD (REPCD1),A + LD A,M + LD (REPCD2),A + POP AF + DEC B + JR NZ,KEYGI6 + CALL ABITB ;function key + LD A,(CTRSFT) + BIT 6,A + JR Z,KEYNUL + BIT 0,A + LD A,B + JR NZ,+4 + ADD A,5 + CP 10 + JR NC,KEYNUL + LD L,A + LD H,0 + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD BC,FUNBUF + ADD HL,BC + LD A,M + OR A + JR Z,KEYNUL + LD DE,INBUFC + LD A,1 + LD (DE),A + INC DE + LD BC,16 + LDIR + LD A,(INBUF) + JP KEYSNE +KEYGI6: CALL ABITB + LD A,C + ADD A,A + ADD A,A + ADD A,A + ADD A,B + LD L,A + LD H,0 + LD A,(CTRSFT) + BIT 6,A ;ctrl key + LD BC,NOMALB + JR Z,CTRLIN + PUSH AF + LD A,(CURMAK) + + CP 1 ;shift+lock + JR NZ,SFTLKL + POP AF + XOR 1 + PUSH AF +SFTLKL: POP AF + BIT 0,A ;shift key + JR NZ,+5 + LD BC,SHIFTB + LD A,(CURMAK) + CP 2 ;graph + JR NZ,CHRSET + LD BC,GRPHB + LD A,(CTRSFT) + BIT 0,A + JR Z,CHRSET + LD BC,GRPHS +CHRSET: CALL ?KYTBL + LD A,C + JP KEYSNE +CTRLIN: CALL ?KYTBL + LD A,C + CP 20H + JP C,KEYSNE + LD HL,CTKYTB + LD B,5 + CP M + JR Z,CTRLC1 + INC HL + DJNZ -4 + CP 40H + JP C,KEYNUL + CP 5BH + JP NC,KEYNUL + SUB 40H + JP KEYSNE +CTRLC1: LD A,32 + SUB B + JP KEYSNE +; +ABITB: LD B,8 + RRCA + JR C,ABITB2 + DJNZ -3 + RET +ABITB2: DEC B + RET +; +; +BRKEY: ENT + LD A,E8H + OUT (D0H),A + NOP + IN A,(D1H) + AND 81H + RET Z + RLCA + RET C + JR BRKEY +; + +KYDTB1: DEFS 1 +CTRSFT: DEFS 9 +KYDTB2: DEFS 10 +REPTF: DEFB 0 +REPCD1: DEFB 0 +REPCD2: DEFB 1 +; +; +NOMALB: DEFW 0BEAH + DEF8 90,17,FC,19,09,3B,3A,0D + DEFW 1790H + DEFW 19FCH + DEFW 3B09H + DEFW 0D3AH + ENDM + DEF8 18,10,12,11,13,14,3F,2F + DEFW 1018H + DEFW 1112H + DEFW 1413H + DEFW 2F3FH + ENDM +; +SHIFTB: DEFW 0C2AH + DEF8 90,17,FB,05,09,2B,2A,0D + DEFW 1790H + DEFW 05FBH + DEFW 2B09H + DEFW 0D2AH + ENDM + DEF8 16,15,12,11,13,14,C6,5F + DEFW 1516H + DEFW 1112H + DEFW 1413H + DEFW 5FC6H + ENDM +; +GRPHB: DEFW 0CE9H + DEF8 90,17,68,05,09,84,E9,0D + DEFW 1790H + DEFW 0568H + DEFW 8409H + DEFW 0DE9H + ENDM + DEF8 16,15,12,11,13,14,8F,8B + DEFW 1516H + DEFW 1112H + DEFW 1413H + DEFW 8B8FH + ENDM +; +GRPHS: DEFW 0C6AH + DEF8 90,17,6C,19,09,FE,89,0D + DEFW 1790H + DEFW 196CH + DEFW FE09H + DEFW 0D89H + ENDM + DEF8 16,15,12,11,13,14,8A,7B + DEFW 1516H + DEFW 1112H + + DEFW 1413H + DEFW 7B8AH + ENDM +; +CTKYTB: DEFB 5BH ; [ + DEFB 5CH ; \ + DEFB 5DH ; ] + DEFB 5EH ; ^ + DEFB 2FH ; / + END + SKP H + + INCLD XPL2 +;----------------------------------- +; +; +; CRT message out +; +; 05H,06H simulated +; +; ent. DE=msg top addr +; eof is NULL +; mode code 05h,06h +; CR is reset mode +;----------------------------------- +; +CRTSIMU:CALL PUSHR +CRTSI2: LD A,(DE) ;get msg data + INC DE ;next pointer + OR A + RET Z ;eof code is NULL + LD C,A + CP 05H ;sft lock in + JR Z,CRTSIE ;CTR.E + CP 06H ;normal mode + JR Z,CRTSIF ;CTR.F + SUB "A" + CP 26 + JR NC,CRTSI4 ;skip not if code A-Z +CRTSFG: LD A,0 ;xxx + OR A + JR Z,CRTSI4 + LD HL,SMLTBL-"A" ;sftlock code trans. + LD B,0 + ADD HL,BC + LD C,M +; +CRTSI4: LD A,C + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + CP 0DH + JR NZ,CRTSI2 +CRTSIF: XOR A +CRTSIE: LD (CRTSFG+1),A + JR CRTSI2 +; +SMLTBL: + DEFB 0A1H ;a + DEFB 09AH ;b + DEFB 09FH ;c + DEFB 09CH ;d + DEFB 092H ;e + DEFB 0AAH ;f + DEFB 097H ;g + DEFB 098H ;h + DEFB 0A6H ;i + DEFB 0AFH ;j + DEFB 0A9H ;k + DEFB 0B8H ;l + DEFB 0B3H ;m + + DEFB 0B0H ;n + DEFB 0B7H ;o + DEFB 09EH ;p + DEFB 0A0H ;q + DEFB 09DH ;r + DEFB 0A4H ;s + DEFB 096H ;t + DEFB 0A5H ;u + DEFB 0ABH ;v + DEFB 0A3H ;w + DEFB 09BH ;x + DEFB 0BDH ;y + DEFB 0A2H ;z + SKP H + +EQTBL: ENT +;--------------------------------- +; +; +; +; CRT/KB driver +; +; +;--------------------------------- +$CRT: ENT + DEFW $KB + DEFM "CRT" + DEFB 0 + DEFB 8AH ;Streem, O1C, W + DEFW 0 + DEFW CRTINI + DEFW .RET ;ROPEN + DEFW .RET ;WOPEN + DEFW .RET ;CLOSE + DEFW .RET ;KILL + DEFW CRTIN + DEFW CRTOUT + DEFW CRTPOS +$KB: ENT + DEFW $LPT + DEFM "KB" + DEFW 0 + DEFB 81H ;Streem, R + DEFW 0 + DEFW .RET ;INIT + DEFW .RET ;ROPEN + DEFW .RET ;WOPEN + DEFW .RET ;CLOSE + DEFW .RET ;KILL + DEFW CRTIN + DEFW .RET + DEFW .RET +; +CRTIN: SVC .GETL + RST 3 + DEFB .GETL + ENDM + LD A,80H ;BREAKZ + RET C + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + RET +CRTOUT: EX AF,AF' + LD HL,CRT1C + LD A,(DISPX) ;0=msg/1=msgx + OR A + JR Z,+5 + LD HL,CRT1CX + EX AF,AF' + JP (HL) +CRTPOS: LD A,(CURX) + RET + SKP H + +; +;---------------------------------- +; +; +; CRT(LPT) routine +; +; CRT1C &1C +; CRT1CX &1CX +; CRTMSG &MSG +; &CR +; +;--------------------------------- +; +&CR: LD A,0DH +; +&1C: PUSH AF + LD A,(FILOUT) ;0=crt/1=lpt + OR A + JR NZ,&1CL + POP AF + JR CRT1C +&1CL: POP AF + JP LPT1C +; +&1CX: PUSH AF + LD A,(FILOUT) ;0=crt/1=lpt + OR A + JR NZ,&1CXL + POP AF + JR CRT1CX +&1CXL: POP AF + JP LPT1CX +; +&MSG: CALL PUSHR + LD HL,&1C + JR CRTMS2 +; +CRTMSG: CALL PUSHR + LD HL,CRT1C +CRTMS2: LD A,(DE) + OR A + RET Z + CALL .HL + INC DE + JR CRTMS2 + SKP H + +; +CRT1S: LD A," " +CRT1C: ENT + CALL PUSHRA +CRT1C0: + LD C,A + LD A,(INPFLG) ;plot on/off + OR A + JR Z,CRT1C9 ;skip if plot off + LD A,C + CP 20H + JR NC,CRT1C4 ;skip if normal ascii + LD DE,(CURXY) ;control code only + LD HL,(XS) + CP 14H + JR Z,CRT1C1 ;skip if left code + CP 12H + JR NZ,CRT1C2 ; + LD HL,(YS) ;skip if up code + LD E,D +CRT1C1: LD A,L + CP E + JP NC,BEEP ;error range +CRT1C2: + LD HL,PLTCOD ;plotter code trans. + LD B,0 + ADD HL,BC + LD A,M + INC A + JR Z,CRT1C9 ; no operation when ffh + DEC A + JP Z,BEEP ;beep when null code +CRT1C4: CALL PLTOUT +CRT1C9: LD A,C + CP 20H + JP C,CTRLJB ;control code trans. + JP ACCDI ;1 byte disply ent.=acc +; +CRT1CX: CALL PUSHRA + LD C,A + CP 0DH + JR Z,CRT1C0 + CALL ACCDI + LD A,(INPFLG) ;plot on/off + OR A + RET Z + LD A,C +; JR PLTOTX + SKP H + +; +PLTOTX: ENT + CP 11H + JR C,PLT2E + CP 17H + JR C,PLTOK + CP 20H + JR C,PLT2E +PLTOUT: CP 60H + JR C,PLTOK + CP 70H + JR C,PLT2E + CP C1H + JR C,PLTOK + CALL CHKACC + DEFB 3 + DEFW CFD7H + DEFB FFH + JR Z,PLTOK +PLT2E: LD A,2EH +PLTOK: JP LPTOUT +; +PLTCOD: DEFB 0 ;00 + DEFB 0 ;01 + DEFB 0 ;02 + DEFB 0 ;03 + DEFB FFH ;04 CTR.D + DEFB FFH ;05 CTR.E + DEFB FFH ;06 CTR.F + DEFB 1DH ;07 + DEFB 0 ;08 + DEFB FFH ;09 CTAB + DEFB 0 ;0A + DEFB 0 ;0B + DEFB 0 ;0C + DEFB 0DH ;0D + DEFB 0 ;0E + DEFB 0 ;0F + DEFB 0 ;10 DEL + DEFB 0AH ;11 DOWN + DEFB 03H ;12 UP + DEFB 20H ;13 RIGHT + DEFB 0EH ;14 LEFT + DEFB 0 ;15 HOME + DEFB 0 ;16 CLR + DEFB FFH ;17 GRAPH + DEFB 0 ;18 INST + DEFB FFH ;19 ALPHA + DEFB FFH ;1A KANA + DEFB 0DH ;1B + DEFB FFH ;1C hirakana + DEFB 0 ;1D + DEFB 0 ;1E + DEFB 0 ;1F + SKP H + +; +;-------------------------------- +; +; Monitor hot start +; +; +;-------------------------------- +STARTP: + DI + XOR A + OUT (LSDMD),A ;mz-800 320*200 4col + LD (INPFLG),A ;plot on/off + LD (FILOUT),A ;0=crt/1=lpt + LD SP,0000H ;stack pointer set + IM 2 ;interruptt mode 2 + LD A,4 + OUT (LSD3),A ;8253 int disable + OUT (LSE0),A ;bank dram + OUT (LSE1),A ;bank dram + CALL PALOFF ;palette all off + LD A,0FH ;interrupt vector + LD I,A + LD A,FEH ;interrupt addrs + OUT (FDH),A ;PIO int vector set + LD A,0FH + OUT (FDH),A ;PIO mode 0 + PUSH BC + CALL CRTPWR ;CRT power on init + CALL PSGPWR ;PSG power on init + CALL EMMPWR ;EMM power on init + POP BC +STRTP2: DEFB 21H ;dummy byte + JR STRTP9 + XOR A + LD (STRTP2),A + LD D,A + LD E,A + SVC .TIMST + RST 3 + DEFB .TIMST + ENDM + LD DE,$CMT + LD A,B + OR A + JR Z,STRTP4 + DEC A + JR Z,STRTP4 + LD DE,$FD + DEC A + JR Z,STRTP4 + LD DE,$QD +STRTP4: LD A,C + SVC .SETDF + RST 3 + DEFB .SETDF + ENDM +STRTP9: JP COLDST +; +; +; + +; +CRTPWR: +; check vram option ? +; + DI + XOR A + OUT (LSDMD),A ;320*200 4 color + LD A,14H + OUT (LSRF),A + LD A,94H + OUT (LSWF),A + IN A,(LSE0) + OUT (LSE0),A ;cg off + LD HL,9FFFH + LD A,(HL) ;read + LD C,A + CPL + LD (HL),A ;write + CP (HL) ;verify + LD (HL),C ;pop mem + LD A,0 + JR NZ,CRTPW0 + INC A +CRTPW0: LD (MEMOP),A + IN A,(LSE1) + EI +; + LD A,1 ;window (0,24) + CALL DSMODE ;320*200 4 color +; +; data free area init +; +; + XOR A + LD (CURFLG),A ;cursor off + LD (CURMAK),A ;nomal char + RET +; +; + END + SKP H + + INCLD XMON-USR +; ----------------------------- +; MZ-2Z009 User I/O driver +; FI:MON-USR ver 1.0A 03.17.84 +; ----------------------------- +; +; +; +$USR: ENT + DEFW 0 + DEFM "USR" + DEFB 0 + DEFB 9FH ;STRM, FNM, W1C, R1C, W, R + DEFW 0 + DEFW .RET ;INIT + DEFW USRRO ;ROPEN + DEFW USRWO ;WOPEN + DEFW .RET ;CLOSE + DEFW .RET ;KILL + DEFW USRIN ;INP + DEFW USROUT ;OUT + DEFW .RET ;POS +; +USRRO: +USRWO: LD HL,ELMD1 + SVC .DEASC + RST 3 + DEFB .DEASC + ENDM + LD A,D + OR E + JP Z,ER60 + LD (ZWRK1),DE + RET +; +USRIN: +USROUT: LD HL,(ZWRK1) + JP (HL) + END + END diff --git a/software/asm/mz-xz009/MON2.ASM b/software/asm/mz-xz009/MON2.ASM new file mode 100644 index 0000000..73c73ff --- /dev/null +++ b/software/asm/mz-xz009/MON2.ASM @@ -0,0 +1,640 @@ +; ------------------------- +; MZ-800 monitor Work area +; FI:MON2 ver 1.0A 9.05.84 +; ------------------------- +; + INCLD MACRO + INCLD XCRTEQU +; +; +; Interrupt vector +; +; + ORG 0FF0H + DEFS 12 ;interrupt reserve +; + ORG 0FFCH + DEFW PSGINT ;PSG(timer) interrupt + DEFW LPTINT ;Printer intrrupt +; +; Directry entry +; + ORG 1000H +ELMD: ENT ;file mode + DEFS 1 +ELMD1: ENT ;file name + DEFS 17 +ELMD18: ENT ;protection, type + DEFS 2 +ELMD20: ENT ;size + DEFS 2 +ELMD22: ENT ;adrs + DEFS 2 +ELMD24: ENT ;exec + DEFS 2 +ELMD26: ENT + DEFS 4 +ELMD30: ENT + DEFS 2 +ELMD32: ENT + DEFS 32 +; +; LU table entry +; +ZTOP: ENT ;LU block top + DEFW 2 +ZLOG: ENT ;LU# + DEFB 0 +ZRWX: ENT ;1:R, 2:W, 3:X + DEFB 0 +ZEQT: ENT ;Address of EQTBL + DEFW 0 +ZCH: ENT ;CH# + DEFB 0 +ZEOF: ENT ;EOF? + DEFB 0 +ZWRK1: ENT ;Work 1 + DEFB 0 +ZWRK2: ENT ;Work 2 + DEFB 0 +; + + SKP H + +; +; EQT table entry +; +ZNXT: ENT ;STRM SQR RND + DEFW 0 +ZDEVNM: ENT ;-- device name -- + DEFS 4 +ZFLAG1: ENT ;----- flag 1 ---- + DEFB 1 +ZFLAG2: ENT ;----- flag 2 ---- + DEFB 0 +ZDIRMX: ENT ;---- max dir ---- + DEFB 0 +ZINIT: ENT ;--- initialize -- + DEFW 0 +ZRO: ENT ;ROPEN RDINF +ZMAPS: ENT ; Map.start + DEFW 0 +ZWO: ENT ;WOPEN WRFIL +ZMAPB: ENT ; Map.bytes + DEFW 0 +ZCL: ENT ;CLOSE +ZSTRT: ENT ; START +ZDIRS: ENT ; Dir.start + DEFW 0 +ZKL: ENT ;KILL +ZBLK: ENT ; - Block/byte - + DEFW 0 +ZINP: ENT ;INP RDDAT BREAD + DEFW 0 +ZOUT: ENT ;OUT WRDAT BWRIT + DEFW 0 +ZPOS: ENT ;Position +ZDELT: ENT ; DELETE + DEFW 0 +ZWDIR: ENT ; WR DIR + DEFW 0 +ZFREE: ENT ; - free bytes - + DEFW 0 +; +ZBYTES: EQU ZFREE+2-ZNXT ;Z-area bytes +; + DEFS 2 +; +DCHAN: ENT ;default channel + DEFS 1 +DDEV: ENT ;default device + DEFS 2 +; +; +.$CRT: ENT + DEFW $CRT +.$LPT: ENT + DEFW $LPT +; + SKP H + +; +; Work area pointers +; +TEXTST: ENT ;Text starat + DEFS 2 +TEXTED: ENT +POOL: ENT ;I/O work + DEFS 2 +POOLED: ENT +VARST: ENT ;Variable start + DEFS 2 +STRST: ENT ;String start + DEFS 2 +VARED: ENT ;Var & string end + DEFS 2 +TMPEND: ENT ;Temporaly end + DEFS 2 +INTFAC: ENT ;Initial FAC + DEFS 2 +MEMLMT: ENT ;LIMIT command + DEFS 2 +MEMMAX: ENT ;Last avairable memory + DEFW FF00H +; +; +; cursor / position work +; +; +; +CURXY: ENT ;cursor position +CURX: ENT + DEFB 0 +CURY: ENT + DEFB 0 +POSADR: ENT ;text buf addr + DEFW 2000H +BITADR: ENT ;bitmap mem addr + DEFW 8000H +; +POINTX: ENT ;Graphic x-coordinate + DEFS 2 +POINTY: ENT ;Graphic y-coordinate + DEFS 2 +; +CURFLG: ENT ;0:off 1:on + DEFB 0 +CURMAK: ENT ;cursor mark 0=normal + DEFB 0 ; 1=sftlock +; 2=graph + SKP H + +; +; CRT/LPT work +; +CMTMSG: ENT ;if =0 disp cmt-msg + DEFS 1 +INPFLG: ENT ;0=plot off 1=plot on + DEFB 0 +DISPX: ENT ;0=MSG 1=MSGX + DEFS 1 +FILOUT: ENT ;0=CRT 1=LPT + DEFB 0 +PSEL: ENT ;Printer select + DEFB 1 +PCRLF: ENT ;LPT CRLF CODE + DEFB 0DH +LPT.TM: ENT ;LPT wait time + DEFB 14 +LPOSB: ENT ;LPT position + DEFB 0 +PSMAL: ENT ;LPT small/capital + DEFB 0 +PNMODE: ENT ;LPT mode + DEFB 1 ; 1..text, 2..graph +; +; +; crt dispmode work +; +; +DMD: ENT ;disp mode 0 320 4 col + DEFB 0 ; 2 320 16 col +; 4 640 2 col +; 6 640 4 col +MEMOP: ENT ;option mem exit + DEFB 0 ;0= off 1= on +PWMODE: ENT ;graphic operation mode + DEFB 0 +CMODE: ENT ;color mode + DEFB 3 +CPLANE: ENT ;curent active plane + DEFB 3 +MAXCF: ENT ;maximum plane data + DEFB 4 +PMASK: ENT ;mask plane data + DEFB FFH +GMODE: ENT ;graphic color mode + DEFB 3 +; + DEFS 50H ;10A0 -- 10EF monitor stack +; +; +; +IBUFE: ENT ;CMT work + DEFS 128 +; + DEFS 34 + DEFB EFH ;FLSDT + DEFS 2 ;STRFG, DPRNT +TMCNT: ENT + DEFS 2 +SUMDT: ENT + + DEFS 2 ;SUMDT +CSMDT: ENT + DEFS 2 ;CSMDT + DEFS 2 ;AMPM, TIMFG + DEFB 1 ;SWRK +TEMPW: ENT + DEFB 4 ;TEMPW + DEFB 5 ;ONTYO + DEFS 3 ;OCTV, RATIO +; +KEYBM1: ENT + DEFS 1 +KEYBUF: ENT + DEFS 262 +KEY262: ENT + DEFS 2 +KEY264: ENT + DEFS 2 +KEY266: ENT + DEFS 4 +; +FUNBUF: ENT + FKEY 1,"RUN ",0DH + DEFB FNB1E-FNB1S +FNB1S: DEFM "RUN " + + IFD 0DH + DEFB 0DH + ENDIF +FNB1E: DEFS FNB1S+15-FNB1E + ENDM + FKEY 2,"LIST " + DEFB FNB2E-FNB2S +FNB2S: DEFM "LIST " + + IFD @3 + ENDIF +FNB2E: DEFS FNB2S+15-FNB2E + ENDM + FKEY 3,"AUTO " + DEFB FNB3E-FNB3S +FNB3S: DEFM "AUTO " + + IFD @3 + ENDIF +FNB3E: DEFS FNB3S+15-FNB3E + ENDM + FKEY 4,"RENUM " + DEFB FNB4E-FNB4S +FNB4S: DEFM "RENUM " + + + IFD @3 + ENDIF +FNB4E: DEFS FNB4S+15-FNB4E + ENDM + FKEY 5,"COLOR " ;QD FD ->"DIR " + DEFB FNB5E-FNB5S +FNB5S: DEFM "COLOR " + + IFD @3 + ENDIF +FNB5E: DEFS FNB5S+15-FNB5E + ENDM + FKEY 6,"CHR$(" + DEFB FNB6E-FNB6S +FNB6S: DEFM "CHR$(" + + IFD @3 + ENDIF +FNB6E: DEFS FNB6S+15-FNB6E + ENDM + FKEY 7,"DEF KEY(" + DEFB FNB7E-FNB7S +FNB7S: DEFM "DEF KEY(" + + IFD @3 + ENDIF +FNB7E: DEFS FNB7S+15-FNB7E + ENDM + FKEY 8,"CONT" + DEFB FNB8E-FNB8S +FNB8S: DEFM "CONT" + IFD @3 + ENDIF +FNB8E: DEFS FNB8S+15-FNB8E + ENDM + FKEY 9,"SAVE " + DEFB FNB9E-FNB9S +FNB9S: DEFM "SAVE " + + IFD @3 + ENDIF +FNB9E: DEFS FNB9S+15-FNB9E + ENDM + FKEY 10,"LOAD " + DEFB FNB10E-FNB10S +FNB10S: DEFM "LOAD " + + IFD @3 + ENDIF +FNB10E: DEFS FNB10S+15-FNB10E + ENDM +; +INBUFC: ENT ;INBUF counter + DEFB 0 +INBUFL: ENT ;INBUF length + DEFB 0 +INBUF: ENT ;pending key 16 + DEFS 16 +; +LINLIM: ENT ;getline buffer limit + + DEFB 255 ;const +KEYDAT: ENT + DEFB 0 +; +; timer work +; +AMPM: ENT + DEFB 0 +SECD: ENT + DEFW 0 +; +; scrool work +; +XS: ENT ;console X start const=0 + DEFB 0 +XE: ENT ;console X end + DEFB 39 +CWIDTH: ENT ;console width + DEFW 40 ;cwidth=xe+1 +CSIZE: ENT ;csize=cwidth*8 + DEFW 320 +YS: ENT ;console Y start + DEFB 0 +YE: ENT ;console Y end + DEFB 24 +YW: ENT ;console Y width + DEFB 25 ;yw=ye-ys+1 +; +; scrool custom data +; +SOF: ENT ;scrool offset + DEFW 0 +SW: ENT ;scrool width + DEFB 7DH ;sw = yw*5 +SSA: ENT ;scrool start + DEFB 0 ;ssa = ys*5 +SEA: ENT ;scrool end + DEFB 7DH ;sea =(ye+1)*5 +SSW: ENT ;scrool offset limit + DEFW 3E8H ;ssw = sw *8 +; +; crt work (basic used) +; +CRTMD1: ENT ;crt bit data + DEFB 1 +CRTMD2: ENT ;crt mode no. data + DEFB 1 +SELCOL: ENT ;default color + DEFB 3 +PAIWED: ENT + DEFW 0 ;paint stack end +; +; +; +; palette work +; +PALBK: ENT ;palette block number + DEFB 0 +PALAD: ENT ;palette init addr + DEFW PAL4T + +PALTBL: ENT ;palette data table + DEFS 4 +; +; +; palette init data table +; +PAL2T: ENT ;palette + DEFB 00H ;PAL 0 black + DEFB 1FH ;PAL 1 white + DEFB 2FH ;PAL 2 white + DEFB 3FH ;PAL 3 white +; +PAL4T: ENT ;palette + DEFB 00H ;PAL 0 black + DEFB 11H ;PAL 1 blue + DEFB 22H ;PAL 2 red + DEFB 3FH ;PAL 3 white +; +PAL16T: ENT ;palette + DEFB 00H ;PAL 0 black + DEFB 11H ;PAL 1 blue + DEFB 22H ;PAL 2 red + DEFB 33H ;PAL 3 purple +; +; +; cursor init data table +; +CURDT1: ENT ;cursor normal + DEFB FFH ;0 + DEFB FFH ;1 + DEFB FFH ;2 + DEFB FFH ;3 + DEFB FFH ;4 + DEFB FFH ;5 + DEFB FFH ;6 + DEFB FFH ;7 +; +CURDT2: ENT ;cursor sftlock + DEFB 7EH ;0 + DEFB FFH ;1 + DEFB FFH ;2 + DEFB FFH ;3 + DEFB FFH ;4 + DEFB FFH ;5 + DEFB FFH ;6 + DEFB 7EH ;7 +; +CURDT3: ENT ;cursor graph + DEFB 00H ;0 + DEFB 00H ;1 + DEFB 00H ;2 + DEFB 00H ;3 + DEFB 00H ;4 + DEFB 00H ;5 + DEFB 00H ;6 + DEFB FFH ;7 +; +; screen management buffer +; +SCRNT0: ENT + + DEFS 25 +SCRNTE: DEFB 0 +; +; +; emm work +; +; +EMFLG: ENT + DEFS 1 +EMPTR: ENT + DEFS 2 +EMWP0: ENT + DEFS 2 +EMWP1: ENT + DEFS 2 + SKP H + +; ------------------------------ +; +; lpt work +; +; ------------------------------ +; +WPULSE: DEFB 0 +WSTROB: DEFB 0 +PBCMAW: DEFW 3FF0H +PBCN: ENT + DEFW 0 ; +PBCIP: DEFW C000H ;FIFO inp pointer +PBCOP: DEFW C000H ;FIFO out pointer +PBCTOP: DEFW C000H ;buffer top +SPLFLG: DEFB 0 ;spool on/stop/off +OUTIMF: DEFB 0 ;output image flag +HPCOUN: DEFB 4 ;printer counter +HERRF: ENT + DEFB 0 ;ROM error flag +; +; +;--------------------------------- +; +; +; code translation table +; +;--------------------------------- +; +CTABLE: ENT + DEFW CTABL1 ;change table address +; +; +CTABL1: DEFB 39 ;change number +; +; + DEFB 023H ;# + DEFB 023H +; + DEFB 040H ;@ + DEFB 040H +; + DEFB 05BH ;[ + DEFB 05BH +; + DEFB 05CH ;\ + DEFB 05CH +; + DEFB 05DH ;] + DEFB 05DH +; + DEFB 08BH ;^ + DEFB 05EH +; + DEFB 090H ;under_ + DEFB 05FH +; + DEFB 093H ;' + DEFB 060H +; + DEFB 0A1H ;a + + DEFB 061H +; + DEFB 09AH ;b + DEFB 062H +; + DEFB 09FH ;c + DEFB 063H +; + DEFB 09CH ;d + DEFB 064H +; + DEFB 092H ;e + DEFB 065H +; + DEFB 0AAH ;f + DEFB 066H +; + DEFB 097H ;g + DEFB 067H +; + DEFB 098H ;h + DEFB 068H +; + DEFB 0A6H ;i + DEFB 069H +; + DEFB 0AFH ;j + DEFB 06AH +; + DEFB 0A9H ;k + DEFB 06BH +; + DEFB 0B8H ;l + DEFB 6CH +; + DEFB 0B3H ;m + DEFB 6DH +; + DEFB 0B0H ;n + DEFB 6EH +; + DEFB 0B7H ;o + DEFB 6FH +; + DEFB 09EH ;p + DEFB 70H +; + DEFB 0A0H ;q + DEFB 71H +; + DEFB 09DH ;r + DEFB 72H +; + DEFB 0A4H ;s + DEFB 73H +; + DEFB 096H ;t + DEFB 74H +; + DEFB 0A5H ;u + + DEFB 75H +; + DEFB 0ABH ;v + DEFB 76H +; + DEFB 0A3H ;w + DEFB 77H +; + DEFB 09BH ;x + DEFB 78H +; + DEFB 0BDH ;y + DEFB 79H +; + DEFB 0A2H ;z + DEFB 7AH +; + DEFB 0BEH ;{ + DEFB 7BH +; + DEFB 0C0H ;Ý + DEFB 7CH +; + DEFB 080H ;} + DEFB 7DH +; + DEFB 094H ;~ + DEFB 7EH +; + DEFB 07FH ; + DEFB 7FH +; +; + END diff --git a/software/asm/mz-xz009/MON3.ASM b/software/asm/mz-xz009/MON3.ASM new file mode 100644 index 0000000..e3ce9a6 --- /dev/null +++ b/software/asm/mz-xz009/MON3.ASM @@ -0,0 +1,941 @@ + INCLD MACRO + LIST + INCLD XMON-ROM +; +;--------------------------------- +; XMON-ROM 8.30.84 +; +; JISX MZ-800 --> ASC +; ent A :data +; IX :output sub +; (HL) :tab counter +; E :DISPX +; +;--------------------------------- +; +; +JISX: ENT + CP 0DH + JR Z,JISXCR + CP 0AH + JR Z,JISXCR + CALL AJISX ;code change + CP 20H + JR NC,.IX + BIT 0,E ;print/p ? + JR Z,.IX ;no + LD A," " +.IX: JP (IX) +; +JISXCR: CALL .IX + LD M,0 + RET +; +AJISX: PUSH BC + LD C,0 + CALL AJISX1 + POP BC + RET +; +; +AJISX1: CALL PUSHR + LD HL,(CTABLE) + LD B,(HL) ;code counter set + INC HL ;HL=MZ-800 + LD D,H ;DE=JIS + LD E,L + INC DE + BIT 0,C ;MZ-800 --> JIS ? + JR Z,AJISX2 ;yes + EX DE,HL +AJISX2: CP (HL) + JR Z,AJISX3 ;code match + INC HL + INC HL + INC DE + INC DE + DJNZ AJISX2 + RET +; +AJISX3: LD A,(DE) + + RET +; +; +;--------------------------------- +; +; +; JISR ASC --> MZ-800 +; ent (A) :data +; IX :input sub +; +;--------------------------------- +; +; +JISR: ENT + CALL .IX ;input sub :A set + RET C +; + PUSH BC + LD C,1 + CALL AJISX1 + POP BC + OR A + RET +;--------------------------------- +; +$LPT: ENT + DEFW $CMT + DEFM "LPT" + DEFB 0 + DEFB 8AH ;Streem, O1C, W + DEFW 0 + DEFW LPTINI + DEFW ER59 ;ROPEN + DEFW .RET ;WOPEN + DEFW .RET ;CLOSE + DEFW .RET ;KILL + DEFW 0 ;INP + DEFW LPT1C? + DEFW LPTPOS +; +; +PIO.AC: EQU FCH ;Port-A control +PIO.AD: EQU FEH ;Port-A data +PIO.BC: EQU FDH ;Port-B control +PIO.BD: EQU FFH ;Port-B data +; +P.PLT: EQU 0 ;1P01, 1P09 +P.KP5: EQU 1 ;KP5 +P.JIS: EQU 2 ;JIS code +P.THRU: EQU 3 ;thrue +; +; +LPTPOS: LD A,(INPFLG) + OR A + LD A,(LPOSB) + RET Z + LD A,(CURX) + RET +; +; + +; +;---------------------------------- +; +; PL ROM CALL +; +;---------------------------------- +ROMST: EQU 03H ;F403H +ROMST1: EQU F400H +; +; +TIMST: ENT + CALL ROMJP2 + DEFB ROMST +; +TIMRD: ENT + CALL ROMJP2 + DEFB ROMST+3 +; +STICK: ENT + CALL ROMJP2 + DEFB ROMST+6 +; +STRIG: ENT + CALL ROMJP2 + DEFB ROMST+9 +; +HCPY: ENT + CALL ROMJP + DEFB ROMST+12 +; +LPT1C?: ENT + LD HL,DISPX + BIT 0,M + JR NZ,LPT1CX +; +LPT1C: ENT + PUSH IY + EX AF,AF' + LD A,3+15 ;F003+15 + LD (APL1CD),A + LD A,.CRT1C +APL1CF: LD (APL1CE),A + EX AF,AF' + CALL APL1C + POP IY + PUSH BC + LD B,A + LD A,(INPFLG) + OR A + LD A,B + POP BC + RET Z + RST 3 +APL1CE: DEFB .CRT1C + RET +APL1C: LD IY,JISX + CALL ROMJP +APL1CD: DEFB ROMST+15 +; +LPT1CX: ENT + + PUSH IY + EX AF,AF' + LD A,3+18 ;F003+18 + LD (APL1CD),A + LD A,.CRT1CX + JR APL1CF +; +LPTINI: ENT + CALL ROMJP + DEFB ROMST+21 +; +LPTOUT: ENT + CALL ROMJP + DEFB ROMST+24 +; +PBCCLR: ENT + CALL ROMJP + DEFB ROMST+27 +; +SPLOFF: ENT + CALL ROMJP + DEFB ROMST+30 +; +SPLON: ENT + CALL ROMJP + DEFB ROMST+33 +; +SPLSW: ENT + CALL ROMJP + DEFB ROMST+36 +; +LPTM02: ENT + CALL ROMJP + DEFB ROMST+39 +; +;--------------------------- +; +; +; +ROMJP: EX AF,AF' + LD A,(PSEL) + BIT P.KP5,A + JR Z,ROMJP1 +; + PUSH BC + LD B,3 + SVC .MCTRL + RST 3 + DEFB .MCTRL + ENDM + POP BC +; +ROMJP1: EX AF,AF' +ROMJP2: EX AF,AF' + XOR A + LD (KEY266),HL + LD (HERRF),A + EX AF,AF' + DI + LD (KEY264),SP + + EX (SP),HL ;HL=call stored address + LD SP,HL ; + POP HL ;HL=call address + OUT (LSE3),A + LD SP,KEY262 + CALL HLJP + OUT (LSE1),A + LD SP,(KEY264) + EX (SP),HL + INC SP + INC SP + EI + EX AF,AF' + LD A,(HERRF) + OR A + JR NZ,ROMERR + EX AF,AF' + RET +HLJP: LD H,0F4H ;HL=F4??H + JP (HL) +; +; +ROMERR: + LD B,A ;B=0 + EX AF,AF' + DEC B ;B=1 + JP Z,BREAKZ + DEC B ;B=2 + JP NZ,ERRORJ +ROMER1: LD HL,(PBCN) ;INIT M2 + LD A,H + OR L + JR Z,LPTM02 + CALL SPLON + SVC .BREAK + RST 3 + DEFB .BREAK + ENDM + JP Z,BREAKZ + JR ROMER1 +; +; +LPTINT: ENT + DI + PUSH AF + PUSH HL + PUSH BC + LD (WKLINT),SP + LD SP,WKLINT + OUT (LSE3),A + CALL ROMST1 + OUT (LSE1),A + LD SP,(WKLINT) + POP BC + POP HL + POP AF + EI + RETI + DEFS 8 +WKLINT: DEFW 0 + +; + END + SKP H + + INCLD MONOP +; --------------------------- +; MZ-800 Monitor command +; FI:MONOP ver 1.0A 8.04.84 +; --------------------------- +; +MONOP: ENT + PUSH HL + LD DE,(ERRORP) + PUSH DE + LD DE,MONERR + LD (ERRORP),DE ;error ret adr set + LD A,(LINLIM) + PUSH AF + LD A,100 ;getline max set + LD (LINLIM),A + LD (MONSP+1),SP ;stack pointer push + XOR A + LD (FILOUT),A ;crt mode +MONCLD: LD SP,0000H ;stack initize +MONHOT: LD BC,MONHOT + PUSH BC ;last return addrs set + SVC .CR2 ;linefeed & cr + RST 3 + DEFB .CR2 + ENDM + LD A,"*" ;prompt disp + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + CALL MONEDT ;memory corretion ? + JR NC,-3 + LD A,(DE) + CP "*" + RET NZ ;prompt check + INC DE + LD A,(DE) ;acc=next interpret data + INC DE ;next interpret data addr +; +; +; moniter tabel command jump +; + EXX ;parameter push + LD HL,MNCMTB + LD B,10 ;commands counter +MNCMCP: CP M + INC HL + JR Z,MNCMOK ;skip if just command + INC HL ;next search + INC HL + DJNZ MNCMCP + EXX + RET +; +MONERR: LD C,A + AND 7FH + JR Z,MONCLD ;Break + LD A,C ;acc=errcode + SVC .ERRX ;display error messege + + RST 3 + DEFB .ERRX + ENDM + SVC .ERCVR ;error recover fd/qd + RST 3 + DEFB .ERCVR + ENDM + JR MONCLD +; +; +MNCMOK: LD E,M + INC HL + LD D,M + PUSH DE ;commnd addr set + EXX ;parameter pop + RET +; +MNCMTB: DEFM 'D' + DEFW MONDMP + DEFM 'M' + DEFW MONSET + DEFM 'P' + DEFW MONPRT + DEFM 'G' + DEFW MONGOT + DEFM 'F' + DEFW MONSCH + DEFM 'R' + DEFW MONSP + DEFM 'S' + DEFW MONSAV + DEFM 'L' + DEFW MONLOD + DEFM 'V' + DEFW MONVRY + DEFM 'T' + DEFW MONTRN +; +MONPRT: LD A,(FILOUT) ;lpt/crt + XOR 1 + LD (FILOUT),A + RET +;--------------------------------- +; +; moniter save commnd +; +;--------------------------------- +MONSAV: CALL SAVTRN ;set addrs + RET C + EXX + CALL FNMST ;file name set + EXX + LD (ELMD20),BC ;bytes + LD (ELMD22),DE ;data adrs + LD (ELMD24),HL ;exec adrs + SVC .SAVEF ;save file + RST 3 + DEFB .SAVEF + ENDM + RET + +;--------------------------------- +; +; moniter load command +; +;--------------------------------- +MONLOD: CALL HLSET ;load addr set + PUSH HL ;hl=load addrs + PUSH AF + CALL LOAVRY ;filename set & open + POP AF + POP HL + JR NC,+5 ;user load addr set ?? + LD HL,(ELMD22) + SVC .LOADF ;load file + RST 3 + DEFB .LOADF + ENDM + RET +;--------------------------------- +; +; filename set & open +; +;--------------------------------- +LOAVRY: CALL FNMST ;file name set + SVC .LOPEN ;ropen + RST 3 + DEFB .LOPEN + ENDM + CP 1 + RET Z + JP ER61 ;File mode error +;--------------------------------- +; +; moniter verify command +; +;--------------------------------- +MONVRY: CALL LOAVRY ;filename set + LD HL,(ELMD22) + SVC .VRFYF ;file verify + RST 3 + DEFB .VRFYF + ENDM + RET +;--------------------------------- +; +; moniter rerturn command +; +; to BASIC +;--------------------------------- +MONSP: LD SP,0000H + POP AF + LD (LINLIM),A + POP HL + LD (ERRORP),HL + POP HL + RET +;--------------------------------- +; +; moniter operation +; + +;--------------------------------- +MONEDT: LD DE,FF00H ;moniter work + SVC .GETL + RST 3 + DEFB .GETL + ENDM + JR C,MONEDE +; +; check ':xxxx=' +; + LD A,(DE) + CP ":" ;mem correct ?? + SCF + RET NZ +; + INC DE + CALL HLSET ;addrs input ? + RET C + LD A,(DE) + INC DE + XOR 3DH ;"=" input ? + RET NZ +; +; +NEXTAC: CALL ACSET ;data read + CCF + RET NC + LD M,A ;mem correction ! + INC HL ;next pointer + JR NEXTAC +; +; +MONEDE: LD (DE),A ;error + RET +;---------------------------------- +; +; 4 ascii to binary (word) +; +; ent. de=ascii data pointer +; ext hl=xxxxH +; +;---------------------------------- +HLSET: PUSH HL + CALL SPCTAC ;separater search + PUSH DE + CALL ACSETH ;2 ascii to binary + JR C,HLSETE + LD H,A + CALL ACSETH ;2 ascii to binary + JR C,HLSETE + LD L,A + POP AF + POP AF + XOR A + RET +; +HLSETE: POP DE + POP HL + SCF + RET + +;---------------------------------- +; +; separater search +; +;---------------------------------- +SPCTA2: INC DE +SPCTAC: LD A,(DE) + CP 20H + JR Z,SPCTA2 + RET +;--------------------------------- +; +; 1 ascii to binary (nible) +; +; ent. de=ascii data pointer +; ext acc= 0xH +; +;--------------------------------- +ACSETS: LD A,(DE) + SVC .CKHEX ;0-9 a-f check + RST 3 + DEFB .CKHEX + ENDM + INC DE ;next pointer + RET +;--------------------------------- +; +; 2 ascii to binary (byte) +; +; ent. de=ascii data pointer +; ext acc= xxH +; +;--------------------------------- +ACSET: CALL SPCTAC ;separeter search + CP ";" + JR Z,SEMIOK ;skip if ascii input +ACSETH: + PUSH BC + PUSH DE + CALL ACSETS ;1 ascii to binary(nible) + JR C,ACSTER + LD C,A ;high nible + CALL ACSETS ;1 ascii to binary(nible) + JR C,ACSTER + LD B,A ;low nible + LD A,C + RLCA + RLCA + RLCA + RLCA + ADD A,B + LD C,A + LD A,C + POP BC + POP BC + OR A + RET +; +ACSTER: POP DE + POP BC + + SCF + RET +;---------------------------------- +; +; ascii code input mode +; +;---------------------------------- +SEMIOK: INC DE + LD A,(DE) + INC DE + OR A ;¯¯JR ACSETO + RET ;¯¯ +;---------------------------------- +; +; moniter jump commnd +; +;---------------------------------- +MONGOT: CALL HLSET ;addrs set + RET C + JP (HL) +;---------------------------------- +; +; moniter dump commnd +; +;---------------------------------- +MONDMP: CALL HLSET ;top addrs set + JR C,MONDP1 ;skip if 'd' only + PUSH HL + CALL HLSET ;end addrs set + JR C,MONDP2 ;skip if top addrs only + POP DE + EX DE,HL + JR MONDP3 +; +; +; +MONDP2: POP HL ; +MONDP1: EX DE,HL + LD HL,80H + ADD HL,DE ;last addrs calc + EX DE,HL +MONDP3: LD C,8 ;counter set + CALL MONDPS ;dump list disp + RET C + PUSH HL + SBC HL,DE ;dump end calc + POP HL + RET NC + JR MONDP3 +; +MONDPS: CALL HLHXPR ;addrs disp + LD B,C + PUSH HL +MONDP4: LD A,M ;data read + CALL ACHXPR ;1 byte disp + INC HL + LD A,20H ;space disp + SVC .&1C + RST 3 + DEFB .&1C + + ENDM + DJNZ MONDP4 + POP HL +; + LD A,"/" ;separater disp + SVC .&1C + RST 3 + DEFB .&1C + ENDM + LD B,C +MONDP5: LD A,M ;data read + CP 20H ;contol code + JR NC,+4 + LD A,"." ;yes, control code + SVC .&1C + RST 3 + DEFB .&1C + ENDM + INC HL ;next pointer + DJNZ MONDP5 +; + SVC .&CR ; + RST 3 + DEFB .&CR + ENDM + SVC .HALT ;braek & stop + RST 3 + DEFB .HALT + ENDM + OR A + RET +;-------------------------------- +; +; disp addrs +; +; ent. hl=addrs +; ':xxxx=' +; +;-------------------------------- +HLHXPR: LD A,":" + SVC .&1C + RST 3 + DEFB .&1C + ENDM + LD A,H + CALL ACHXPR ;acc disp + LD A,L + CALL ACHXPR ;acc disp + LD A,"=" + SVC .&1C + RST 3 + DEFB .&1C + ENDM + RET +;-------------------------------- +; +; acc disp +; +; ent. acc = disp data +; + +;-------------------------------- +ACHXPR: PUSH AF + RLCA + RLCA + RLCA + RLCA + CALL AC1HXP ;nible disp + POP AF +AC1HXP: AND 0FH ;ascii trans + ADD A,30H + CP ":" + JR C,+4 + ADD A,7 + SVC .&1C ;disp acc(nible) + RST 3 + DEFB .&1C + ENDM + RET +;--------------------------------- +; +; moniter mem correction comd +; +;--------------------------------- +MONSET: CALL HLSET ; + LD A,(FILOUT) ;lpt/crt switch + PUSH AF + XOR A + LD (FILOUT),A ;crt mode +MONSTL: SVC .CR2 + RST 3 + DEFB .CR2 + ENDM + CALL HLHXPR ;addrs disp + LD A,M ;data read + CALL ACHXPR ;data disp + LD A,20 ;back space + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + CALL MONEDT ;moniter operation + JR NC,MONSTL + POP AF + LD (FILOUT),A + RET +;-------------------------------- +; +; moniter search command +; +;-------------------------------- +MONSCH: CALL HLSET ;start addrs + RET C + PUSH HL + CALL HLSET ;end addrs + POP BC + RET C + + PUSH HL ;hl end addr + PUSH BC ;bc start addr + LD HL,FF00H ;check data read + CALL NEXTAC ;(hl)<--data + LD DE,FF00H + OR A + SBC HL,DE ;check data bytes + LD C,L + POP HL + PUSH HL + EXX + POP HL ;hl start addr + POP DE ;de end addr + EXX + RET Z +MNSHLP: CALL HLDECK ;de=FF00h + JR NZ,SKPSCH ;de check databuf + CALL MONDPS ;data disp + RET C +SKPSCH: SVC .BREAK + RST 3 + DEFB .BREAK + ENDM + RET Z + EXX + INC HL ;next check pointer + PUSH HL + SCF + SBC HL,DE ;end check ? + POP HL + RET NC + PUSH HL + EXX + POP HL ;next check pointer + JR MNSHLP +;---------------------------------- +; +; 3 pointer data interpret +; +; ent de=ascii data top addr +; +; ext de=first data +; bc=(second-first) data +; hl=last data +; +; used save,xfer commnd +; +; command : save : xfer +; +; de : start: source +; bc : bytes: bytes +; hl : end : destination +;---------------------------------- +SAVTRN: CALL HLSET ;first + PUSH HL + CALL NC,HLSET ;second + POP BC ;first + RET C + SBC HL,BC ;calc bytes + INC HL + + PUSH HL ;bytes + PUSH BC ;first + CALL HLSET ;last + PUSH HL ;last + EXX + POP HL ;last + POP DE ;first + POP BC ;bytes + RET +;------------------------------- +; +; moniter xfer command +; +;------------------------------- +MONTRN: CALL SAVTRN ; + RET C + EX DE,HL + PUSH HL + SBC HL,DE ;direction check + POP HL + JR C,LDDRTR + LDIR + RET +LDDRTR: ADD HL,BC ;last addrs calc + DEC HL + EX DE,HL + ADD HL,BC + DEC HL + EX DE,HL + LDDR + RET +;---------------------------------- +; +; filename set +; +;---------------------------------- +FNMST: LD A,(DE) + OR A + JR Z,FNMST2 + INC DE + CP ":" ;demiliter seach + JR NZ,FNMST +FNMST2: SVC .COUNT ;count string length + RST 3 + DEFB .COUNT + ENDM + SVC .DEVFN ;interpret dev. file name + RST 3 + DEFB .DEVFN + ENDM + LD A,1 + LD (ELMD),A ;.OBJ atribut + RET +;--------------------------------- +; +; check (de) (hl) ? +; +; hl,de check data point +; c counter +; + +;--------------------------------- +HLDECK: LD A,(DE) + CP M + RET NZ + PUSH BC + PUSH DE + PUSH HL + LD B,C +HLDEC1: LD A,(DE) + CP M + JR NZ,HLDEC2 + INC DE + INC HL + DJNZ HLDEC1 + XOR A +HLDEC2: POP HL + POP DE + POP BC + RET +; + END + END diff --git a/software/asm/mz-xz009/MON4.ASM b/software/asm/mz-xz009/MON4.ASM new file mode 100644 index 0000000..99b588d --- /dev/null +++ b/software/asm/mz-xz009/MON4.ASM @@ -0,0 +1,83 @@ + ORG 3C00H + INCLD MACRO + LIST + INCLD XROM +;---------------------------------- +; +; ascii display code trans +; +;---------------------------------- +?ADCN: ENT + CP 10H ;EX only + JR C,?AD3 ; <10H ==> F0H + CP 80H + JR Z,?AD7 ; 80H ==> 40H + CP C0H + JR Z,?AD7 ; C0H ==> 80H + DI + OUT (LSE2),A + CALL 0BB9H + OUT (LSE0),A + EI + RET +?AD3: LD A,F0H + RET +?AD7: SUB 40H + RET +; +?DACN: ENT + CP F0H + JR NC,?DA3 + CP 73H + JR Z,?AD3 ; 73H ==> F0H + CP 40H ;EX only + JR Z,?DA7 ; 40H ==> 80H + CP 80H + JR Z,?DA7 ; 80H ==> C0H + DI + OUT (LSE2),A + CALL 0BCEH + OUT (LSE0),A + EI + CP F0H + RET NZ +?DA3: LD A," " + RET +?DA7: ADD A,40H + RET +; +; +; +?KYTBL: ENT + PUSH AF + LD A,L + SUB 8 + JR C,?KY0 + SUB 48 + JR C,?KY1 +?KY0: ADD A,10 + LD L,A + ADD HL,BC + + LD C,M + POP AF + RET +?KY1: LD A,(BC) + PUSH AF + INC BC + LD A,(BC) + LD B,A + POP AF + LD C,A ;BC=ROM adrs + ADD HL,BC + DI + OUT (LSE2),A + LD A,M + OUT (LSE0),A + EI + CALL ?DACN + LD C,A + POP AF + RET + END + END diff --git a/software/asm/mz-xz009/MONEQU.ASM b/software/asm/mz-xz009/MONEQU.ASM new file mode 100644 index 0000000..c32e0e2 --- /dev/null +++ b/software/asm/mz-xz009/MONEQU.ASM @@ -0,0 +1,356 @@ + LIST + + INCLD XE1 +IOOUT: EQU 0104H +DEASC: EQU 029EH +PATCH: EQU 0531H +INKEY0: EQU 0BA1H +IOERR: EQU 00EBH +TEST1: EQU 0164H +ERRX: EQU 0340H +COLS: EQU 049CH +HCLSW: EQU 061DH +PONT: EQU 0963H +INKEY1: EQU 0B21H +$KB: EQU 0DF6H +.HL: EQU 00A7H +PUSHR: EQU 00C7H +SETDFL: EQU 0314H +BINPUT: EQU 0A67H +PUSHRA: EQU 00BAH +CKHEX: EQU 02E9H +DCOLOR: EQU 048AH +PONTB: EQU 097AH +ERRORJ: EQU 00EDH +?CLRHL: EQU 0137H +?SETDE: EQU 013EH +INDRCT: EQU 0151H +INCHLF: EQU 015DH +IOCALL: EQU 0247H +DWIDTH: EQU 04EFH +ACCDI: EQU 05ADH +LBOUND: EQU 05F9H +PONTC: EQU 0960H +INKEY$: EQU 0B1AH +BRKCHK: EQU 001EH +DEVASC: EQU 010DH +DWIND: EQU 04AEH +PONTCB: EQU 0977H +INKEYF: EQU 0B8BH +SYSSTA: EQU 004DH +PUSHW: EQU 0671H +HCUROF: EQU 093BH +TESTX: EQU 016EH +PALOFF: EQU 0441H +DPALST: EQU 0476H +PRNTT: EQU 0A58H +EQTBL: EQU 0DDDH +$TEMPO: EQU 0041H +.RET: EQU 00B2H +?CLRDE: EQU 013DH +HLFTCH: EQU 015EH +HALT: EQU 02F8H +ADDP0: EQU 031CH +DGCOL: EQU 0493H +TBCALC: EQU 0615H +ERRORP: EQU 004FH +LDDEMD: EQU 0132H +ADDP1: EQU 0323H +HCLS: EQU 0652H +.NOP: EQU 00A6H + +ASCHL: EQU 025EH +ADDP2: EQU 032AH +SETDNM: EQU 0397H +PLTOTX: EQU 0EB3H +DSMODE: EQU 03BEH +CURMOV: EQU 094DH +GETL: EQU 0A84H +BREAKX: EQU 00E6H +CHKACC: EQU 011BH +LDDEHL: EQU 0143H +LDHLDE: EQU 014AH +BITMAP: EQU 05CEH +BRKEY: EQU 0D22H +$CRT: EQU 0DDDH +CRT1C: EQU 0E61H +ADDHLA: EQU 0158H +DEHEX: EQU 02CEH +DPALBK: EQU 044FH +FLASH: EQU 0945H +$USR: EQU 0F7FH +BREAKZ: EQU 00E8H +LDDEMI: EQU 012DH +?SETHL: EQU 0138H +HCURON: EQU 092BH +LSPAL: EQU 00F0H +LSFC: EQU 00FCH +LSE0: EQU 00E0H +LSE1: EQU 00E1H +LSE2: EQU 00E2H +LSE3: EQU 00E3H +LSE4: EQU 00E4H +LSE5: EQU 00E5H +LSE6: EQU 00E6H +LSD0: EQU 00D0H +LSD1: EQU 00D1H +LSD2: EQU 00D2H +LSD3: EQU 00D3H +LSWF: EQU 00CCH +LSRF: EQU 00CDH +LSDMD: EQU 00CEH +LSSCR: EQU 00CFH +TEXTBF: EQU 2000H +BITBUF: EQU 8000H +FONTBF: EQU 1000H +ERRTXT: EQU FDA0H +.IOSVC: EQU 0003H +.MONOP: EQU 0000H +.CR1: EQU 0001H +.CR2: EQU 0002H +.CRT1C: EQU 0003H +.CRT1X: EQU 0004H +.CRTMS: EQU 0005H +.LPTOT: EQU 0006H +.LPT1C: EQU 0007H +.&CR: EQU 0008H +.&1C: EQU 0009H +.&1CX: EQU 000AH +.&MSG: EQU 000BH +.GETL: EQU 000CH +.INKEY: EQU 000DH + +.BREAK: EQU 000EH +.HALT: EQU 000FH +.DI: EQU 0010H +.EI: EQU 0011H +.CURMV: EQU 0012H +.DEASC: EQU 0013H +.DEHEX: EQU 0014H +.CKHEX: EQU 0015H +.ASCHL: EQU 0016H +.COUNT: EQU 0017H +.ADDP0: EQU 0018H +.ADDP1: EQU 0019H +.ADDP2: EQU 001AH +.ERRX: EQU 001BH +.?DACN: EQU 001CH +.?ADCN: EQU 001DH +.STICK: EQU 001EH +.STRIG: EQU 001FH +.BELL: EQU 0020H +.PLAY: EQU 0021H +.SOUND: EQU 0022H +.MCTRL: EQU 0023H +.IOOUT: EQU 0024H +.TIMRD: EQU 0025H +.TIMST: EQU 0026H +.INP1C: EQU 0027H +.CLRIO: EQU 0028H +.SEGAD: EQU 0029H +.OPSEG: EQU 002AH +.DLSEG: EQU 002BH +.DEVNM: EQU 002CH +.DEVFN: EQU 002DH +.LUCHK: EQU 002EH +.LOPEN: EQU 002FH +.LOADF: EQU 0030H +.SAVEF: EQU 0031H +.VRFYF: EQU 0032H +.RWOPN: EQU 0033H +.INSTT: EQU 0034H +.INMSG: EQU 0035H +.INDAT: EQU 0036H +.PRSTR: EQU 0037H +.CLKL: EQU 0038H +.DIR: EQU 0039H +.SETDF: EQU 003AH +.LSALL: EQU 003BH +.FINIT: EQU 003CH +.DELET: EQU 003DH +.RENAM: EQU 003EH +.LOCK: EQU 003FH +.RECST: EQU 0040H +.INREC: EQU 0041H +.PRREC: EQU 0042H +.ERCVR: EQU 0043H +.SWAP: EQU 0044H +.CLS: EQU 0045H +.POSCK: EQU 0046H +.POSSV: EQU 0047H +.PSET: EQU 0048H +.LINE: EQU 0049H + +.PATTR: EQU 004AH +.BOX: EQU 004BH +.PAINT: EQU 004CH +.CIRCL: EQU 004DH +.POINT: EQU 004EH +.HCPY: EQU 004FH +.DSMOD: EQU 0050H +.DPLBK: EQU 0051H +.DPLST: EQU 0052H +.DWIND: EQU 0053H +.DCOL: EQU 0054H +.DGCOL: EQU 0055H +.ICRT: EQU 0056H +.SYMBL: EQU 0057H + END + INCLD XE2 +ZWRK2: EQU 1049H +ZWO: EQU 1057H +ZWDIR: EQU 1063H +VARST: EQU 1074H +STRST: EQU 1076H +INPFLG: EQU 108FH +LPOSB: EQU 1095H +INBUFL: EQU 1353H +YW: EQU 1371H +ZKL: EQU 105BH +ZINP: EQU 105DH +ELMD: EQU 1000H +ZOUT: EQU 105FH +.$LPT: EQU 106EH +VARED: EQU 1078H +CURX: EQU 1082H +POINTX: EQU 1088H +KEYDAT: EQU 1365H +SELCOL: EQU 137BH +PALAD: EQU 137FH +ELMD1: EQU 1001H +ZBLK: EQU 105BH +ZDELT: EQU 1061H +DDEV: EQU 106AH +POOLED: EQU 1074H +CURY: EQU 1083H +POINTY: EQU 108AH +CURFLG: EQU 108CH +CURMAK: EQU 108DH +FILOUT: EQU 1091H +PNMODE: EQU 1097H +CPLANE: EQU 109CH +KEY262: EQU 12AAH +CWIDTH: EQU 136BH +PAL2T: EQU 1385H +CURDT1: EQU 1391H +PBCN: EQU 13CEH +ELMD20: EQU 1014H +ZEQT: EQU 1044H +ZEOF: EQU 1047H +ZNXT: EQU 104AH +ZDEVNM: EQU 104CH +PSEL: EQU 1092H +INBUF: EQU 1354H + +CURDT2: EQU 1399H +ELMD30: EQU 101EH +ZCH: EQU 1046H +ZFLAG1: EQU 1050H +INTFAC: EQU 107CH +MEMMAX: EQU 1080H +DMD: EQU 1098H +KEY264: EQU 12ACH +LINLIM: EQU 1364H +PAL4T: EQU 1389H +CURDT3: EQU 13A1H +ELMD22: EQU 1016H +ZFLAG2: EQU 1051H +BITADR: EQU 1086H +TMCNT: EQU 1195H +KEYBUF: EQU 11A4H +FUNBUF: EQU 12B2H +ELMD32: EQU 1020H +ZSTRT: EQU 1059H +PCRLF: EQU 1093H +KEY266: EQU 12AEH +INBUFC: EQU 1352H +SSA: EQU 1375H +HERRF: EQU 13D9H +ELMD24: EQU 1018H +TMPEND: EQU 107AH +DISPX: EQU 1090H +CMODE: EQU 109BH +SOF: EQU 1372H +PAL16T: EQU 138DH +EMPTR: EQU 13C4H +ZCL: EQU 1059H +POSADR: EQU 1084H +KEYBM1: EQU 11A3H +SEA: EQU 1376H +EMWP0: EQU 13C6H +ELMD26: EQU 101AH +ZMAPB: EQU 1057H +POOL: EQU 1072H +SW: EQU 1374H +PAIWED: EQU 137CH +PALBK: EQU 137EH +SCRNT0: EQU 13A9H +EMWP1: EQU 13C8H +ELMD18: EQU 1012H +ZRWX: EQU 1043H +ZRO: EQU 1055H +ZMAPS: EQU 1055H +.$CRT: EQU 106CH +CURXY: EQU 1082H +CMTMSG: EQU 108EH +IBUFE: EQU 10F0H +CSMDT: EQU 1199H +AMPM: EQU 1366H +XS: EQU 1369H +CRTMD1: EQU 1379H +EMFLG: EQU 13C3H +CTABLE: EQU 13DAH +ZLOG: EQU 1042H +ZDIRS: EQU 1059H + +ZPOS: EQU 1061H +ZFREE: EQU 1065H +TEXTST: EQU 1070H +MEMLMT: EQU 107EH +PWMODE: EQU 109AH +PMASK: EQU 109EH +GMODE: EQU 109FH +YS: EQU 136FH +CRTMD2: EQU 137AH +ZTOP: EQU 1040H +PSMAL: EQU 1096H +SUMDT: EQU 1197H +TEMPW: EQU 119EH +XE: EQU 136AH +SSW: EQU 1377H +ZDIRMX: EQU 1052H +ZINIT: EQU 1053H +DCHAN: EQU 1069H +TEXTED: EQU 1072H +MEMOP: EQU 1099H +CSIZE: EQU 136DH +YE: EQU 1370H +ZWRK1: EQU 1048H +LPT.TM: EQU 1094H +MAXCF: EQU 109DH +SECD: EQU 1367H +PALTBL: EQU 1381H +LSPAL: EQU 00F0H +LSFC: EQU 00FCH +LSE0: EQU 00E0H +LSE1: EQU 00E1H +LSE2: EQU 00E2H +LSE3: EQU 00E3H +LSE4: EQU 00E4H +LSE5: EQU 00E5H +LSE6: EQU 00E6H +LSD0: EQU 00D0H +LSD1: EQU 00D1H +LSD2: EQU 00D2H +LSD3: EQU 00D3H +LSWF: EQU 00CCH +LSRF: EQU 00CDH +LSDMD: EQU 00CEH +LSSCR: EQU 00CFH +TEXTBF: EQU 2000H +BITBUF: EQU 8000H +FONTBF: EQU 1000H +ERRTXT: EQU FDA0H +ZBYTES: EQU 001DH + END + END diff --git a/software/asm/mz-xz009/MUSIC.ASM b/software/asm/mz-xz009/MUSIC.ASM new file mode 100644 index 0000000..db75dca --- /dev/null +++ b/software/asm/mz-xz009/MUSIC.ASM @@ -0,0 +1,463 @@ +; --------------------------- +; MZ-800 BASIC Music command +; FI:MUSIC ver 1.0A 7.18.84 +; Programed by T.Miho +; --------------------------- +; + INCLD MACRO +; +DIRARE: EQU 27D0H +NMAX: EQU 83 ;/ÙÄs max +; +; +; SOUND m,l / SOUND=(r,d) +; +SOUND: ENT + TEST1 0F4H ;= + CALL TEST1 + DEFB 0F4H + ENDM + JR NZ,SOUND1 + CALL HCH28H ;( + CALL IBYTE + CP 16 + SET 7,A + JR SOUND2 +; +SOUND1: CALL IBYTE + CP NMAX+1 +SOUND2: JP NC,ER03 + PUSH AF + CALL HCH2CH ;, + CALL IDEEXP + POP AF + PUSH AF + OR A + CALL M,HCH29H ;) + POP AF + PUSH HL + SVC .SOUND + RST 3 + DEFB .SOUND + ENDM + POP HL + RET +; +; TEMPO n (n= 1 to 7 ) +; +TEMPO: ENT + CALL IBYTE + DEC A + CP 7 + INC A + JP $TEMPO + SKP H + +; +;;;;;;;;;;;;;;;;;;;;; +; +; NOISE A1$;A2$,B1$;... +; MUSIC A1$;A2$;...;A6$,B1$;... +; +NOISE: ENT + LD A,08H ;pattern (3) + DEFB 1 +; +MUSIC: ENT + LD A,07H ;pattern (0,1,2) + LD (MUNOF),A ;channel pattern + CALL HLFTCH + LD B,3 + CP BEH ;WAIT + JR Z,MCTRL + DEC B + CP 99H ;STOP + JR Z,MCTRL + CP DCH ;INIT + JR NZ,MUSIC1 +; + LD DE,MUSCHO + LD B,4 + LD A,2 + CALL ?SETDE +MCTRL: PUSH HL + SVC .MCTRL + RST 3 + DEFB .MCTRL + ENDM + POP HL + INC HL + RET +; +MUSIC1: CALL ENDCHK + RET Z + XOR A + LD (MUDNO),A + LD (MUCHNO),A + LD B,A + LD A,0DH + LD DE,DIRARE + LD (MMBU1A),DE + LD (DE),A + CALL ?SETDE + LD A,(MUNOF) + LD (MUNOF2),A +MUSI1: LD DE,MUNOF2 + LD A,(DE) + RRC A + LD (DE),A + PUSH AF + LD B,0 + JR NC,MUSI3 + CALL HLFTCH + CP ";" + JR Z,MUSI3 + CALL STREXP + +MUSI3: PUSH HL + LD A,(MUCHNO) + CP 4 + JP Z,ER01 ;Ch no over + INC A + LD (MUCHNO),A + INC B + JP Z,ER05 + LD A,(MUDNO) + ADD A,B + JP C,ER05 ;data no. over + LD (MUDNO),A + LD HL,(MMBU1A) + CALL LDHLDE + LD (MMBU1A),HL + DEC HL + LD M,0DH + POP HL + POP AF + JR NC,MUSI1 + CALL ENDCHK + JR Z,MUSI4 + TEST1 ',' + CALL TEST1 + DEFB ',' + ENDM + JR Z,MUSI4 + TEST1 ';' + CALL TEST1 + DEFB ';' + ENDM + JR MUSI1 +MUSI4: PUSH HL + LD HL,DIRARE + LD IX,HL + LD IY,MUSCHO + LD B,4 +MUSI5: PUSH BC + PUSH HL + LD HL,IX + LD DE,DIRARE + XOR A + SBC HL,DE + LD (IY+4),L + POP HL + LD (MUSI6+1),SP + CALL MML.EN +MUSI6: LD SP,0 ;xxx + POP BC + INC HL + INC IY + DJNZ MUSI5 + LD B,3 + SVC .MCTRL ;MWAIT + RST 3 + DEFB .MCTRL + ENDM +MUSI8: LD BC,100H + LD HL,DIRARE + LD DE,DIRARE+700H + + LDIR + LD B,4 + LD HL,MMCHDA +MUSDS: LD E,M + LD D,0 + INC HL + PUSH HL + LD HL,DIRARE+700H + ADD HL,DE + LD A,M + CP 0FFH + JR Z,MUSDS1 + LD A,4 + SUB B + PUSH BC + EX DE,HL + SVC .PLAY + RST 3 + DEFB .PLAY + ENDM + POP BC +MUSDS1: POP HL + DJNZ MUSDS + LD B,1 + SVC .MCTRL ;PSGON + RST 3 + DEFB .MCTRL + ENDM +; + POP HL + JP MUSIC1 +; +MUSCHO: DEFW 0202H ;Oct data eny ch. + DEFW 0202H +MMCHDA: DEFS 4 ;Play & Noise Data addr +; +MUDNO: DEFS 1 ;total data No. +MUCHNO: DEFS 1 ;ch no. +MMBU1A: DEFS 2 ;MML data buffer +MUNOF: DEFS 1 ;07:MUSIC 08:NOISE +MUNOF2: DEFS 1 ;rotate(MUNOF) +; + SKP H + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; MML(HL) => IOCSM(IX) trans +; END code=00H or 0DH or C8H +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +MML.EN: CALL MML.WC +MML.E0: CALL HLFTCH + CALL MMAGCH + JR C,MMTCAL + LD C,0 + CALL MML.AG ;String:A-G + JR MMTCA9 +; +MMTCAL: CALL MMENCH + JP Z,MMLEND + LD B,12 + EX DE,HL + LD HL,MMTCAT ;Call address table +MMTCA0: CP M ;cmp chr + INC HL + JR Z,MMTCAJ + DEC B + JP Z,ER03 + INC HL + INC HL + JR MMTCA0 +MMTCAJ: LD C,M + INC HL + LD B,M + EX DE,HL + INC HL + CALL .BC +MMTCA9: JP C,ER03 + JR MML.E0 +; +.BC: PUSH BC + RET +; +MMTCAT: DEFM '#' + DEFW MML.SH + DEFM '+' + DEFW MML.UO + DEFB D7H + DEFW MML.UO + DEFM '-' + DEFW MML.DO + DEFB CFH + DEFW MML.DO + DEFM 'O' + DEFW MML.O + DEFM 'N' + DEFW MML.N + DEFM 'T' + DEFW MML.T + DEFM 'V' + DEFW MML.V + DEFM 'S' + DEFW MML.S + + DEFM 'M' + DEFW MML.M + DEFM 'L' + DEFW MML.L +; +MML.DO: LD C,-12 ;- + DEFB 11H +; +MML.UO: LD C,12 ;+ + TEST1 "#" + CALL TEST1 + DEFB "#" + ENDM + JR NZ,+3 + INC C + DEFB 11H +; +MML.SH: LD C,1 ;# + CALL HLFTCH + CALL MMAGCH + RET C +MML.AG: LD B,A + INC HL + CALL MML.DL + CCF + CALL C,MML.L1 + RET C + LD A,B + CP 'R' + JR Z,MML.R + PUSH HL + LD HL,ONCTT-41H ;A-G + CALL ADDHLA + LD B,(IY+0) + INC B + LD A,M + POP HL + ADD A,C + SUB 12 + ADD A,12 + DJNZ -2 + JR MML.N0 +; +MML.R: XOR A +MML.R0: PUSH AF + CALL MML.WO + POP AF +MML.W1: LD (IX+0),A + INC IX + RET +; +MML.O: CALL MML.DL ;O + JR NC,+4 + LD A,2 + CP 7 + CCF + RET C + LD (IY+0),A ;oct No. + RET +; + +MML.N: CALL MML.DL ;N + RET C +MML.N0: CP NMAX+1 + CCF + RET C + JR MML.R0 +; +MML.T: CALL MML.DL ;T + JR NC,+4 + LD A,4 + DEC A + CP 7 + CCF + RET C + ADD A,6AH + LD (MML.W),A + RET +; +MML.V: CALL MML.DL ;V + JR NC,+4 + LD A,15 + CP 16 + CCF + RET C + ADD A,80H + LD (MML.W+1),A + RET +; +MML.L: CALL MML.DL ;L + JR NC,+4 + LD A,5 +MML.L1: CP 10 + CCF + RET C +MML.L2: ADD A,60H + LD (MML.W+2),A + RET +; +MML.S: CALL MML.DL ;S + RET C + CP 9 + CCF + RET C + ADD A,90H + LD (MML.W+3),A + RET +; +MML.M: CALL MML.DL ;M + RET C + OR A + SCF + RET Z + LD B,A + LD C,0A0H + LD (MML.W+4),BC + OR A + RET +; +; +MML.DL: CALL HLFTCH + + CALL MMENCH + SCF + CALL NZ,TSTNUM + RET C ;RET not number + SVC .DEASC + RST 3 + DEFB .DEASC + ENDM + JP DCHECK +; +MMAGCH: CP 'R' ;A-G & R check + RET Z + CP 'A' + RET C + CP 'H' + CCF + RET +; +MMENCH: OR A + RET Z + CP 0DH + RET Z + CP 0C8H + RET +; +MMLEND: CALL MML.WO + LD A,FFH ;Music Data end + CALL MML.W1 + JP MUSI6 +; +MML.WO: LD DE,MML.W + LD B,6 + LD A,(DE) + OR A + CALL NZ,MML.W1 + INC DE + DJNZ -6 +; +MML.WC: LD DE,MML.W + LD B,6 + JP ?CLRDE +; +; +ONCTT: DEFB 9 ;A + DEFB 11 ;B + DEFB 0 ;C + DEFB 2 ;D + DEFB 4 ;E + DEFB 5 ;F + DEFB 7 ;G +; +MML.W: DEFB 0 ;T + DEFB 0 ;V + DEFB 0 ;L + DEFB 0 ;S + DEFB 0 ;Mn + DEFB 0 +; + END diff --git a/software/asm/mz-xz009/PLT.ASM b/software/asm/mz-xz009/PLT.ASM new file mode 100644 index 0000000..317946e --- /dev/null +++ b/software/asm/mz-xz009/PLT.ASM @@ -0,0 +1,754 @@ +; ----------------------------- +; MZ-800 BASIC Plotter package +; FI:PLT ver 1.0A 8.25.84 +; Programed by T.Miho +; ----------------------------- +; + INCLD MACRO +; +P.PLT: EQU 0 +PNCHNM: DEFB "N" ;N,S,L +; +NEWON: ENT + LD BC,ER59' + LD DE,NEWONT ;NEW ON +NEWON2: LD A,(DE) ; omit plotter + INC DE + ADD A,A + JR Z,NEWON4 + LD HL,SJPTBL + CALL ADDHLA + LD M,C + INC HL + LD M,B + JR NEWON2 +NEWON4: XOR A ; PLOT OFF + LD (INPFLG),A + LD A,(PNMODE) + DEC A + CALL NZ,MODETX ; PMODE TX + LD HL,NEWAD2 +NEWON9: LD (TEXTST),HL + RET + SKP H + +; +NEWONT: DEFB A2H ;PMODE + DEFB A3H ;PSKIP + DEFB A4H ;PLOT + DEFB A5H ;PLINE + DEFB A6H ;RLINE + DEFB A7H ;PMOVE + DEFB A8H ;RMOVE + DEFB AEH ;PCOLOR + DEFB AFH ;PHOME + DEFB B0H ;HSET + DEFB B1H ;GPRINT + DEFB B3H ;AXIS + DEFB BBH ;PCIRCLE + DEFB BCH ;PTEST + DEFB BDH ;PAGE + DEFB 0 +; +LPTTMD: ENT + LD B,1 ;Check text mode + JR +4 +LPTGMD: ENT + LD B,2 ;Check graph mode + LD A,(PNMODE) + CP B + RET Z + JP LPTMER +; + SKP H + +; +NEWAD2: ENT +; +MODE: ENT + CALL MODE0 ;"PMODE" command + XOR A + LD (LPOSB),A ;LPT TAB + RET +; +MODE0: LD A,(INPFLG) + OR A + JP NZ,LPTMER + CALL PPCHCK + TEST1 "G" + CALL TEST1 + DEFB "G" + ENDM + JP Z,PGRAPH + TESTX "T" + CALL TESTX + DEFB "T" + ENDM + TEST1 "N" + CALL TEST1 + DEFB "N" + ENDM + JR Z,TEXTN + TEST1 "L" + CALL TEST1 + DEFB "L" + ENDM + JR Z,TEXTN + TESTX "S" + CALL TESTX + DEFB "S" + ENDM +TEXTN: LD (PNCHNM),A + CALL ENDZ + CALL OUTA3H +MODETX: LD A,1 + LD (PNMODE),A + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + LD A,(PNCHNM) + CP "N" + RET Z + CP "L" + LD A,0BH + JR Z,XLPTOT +T80CH: LD A,9 + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + +XLPTOT: SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + RET +; +OUTA3H: LD A,0AH + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + LD A,3 + JR XLPTOT +; +PGRAPH: INC HL ;Graphic mode + CALL ENDZ + LD A,2 + LD (PNMODE),A + JR XLPTOT + SKP H + +; +SKIP: ENT + CALL PPCHCK + CALL LPTTMD ;SKIP n + CALL IDEEXP + LD A,E + OR A + RET Z + CP -20 + JR NC,SKIPPS + CP 21 + JP NC,ER03 +SKIPPS: CALL ENDZ + BIT 7,E + JR NZ,SKIPD +SKIPI: LD A,0AH + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + DEC E + JR NZ,SKIPI + RET +; +SKIPD: LD A,03H + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + INC E + JR NZ,SKIPD + RET +; +PNMX99: PUSH HL + LD HL,999 + JR +6 +PNMX48: PUSH HL + LD HL,480 + PUSH HL + ADD HL,DE + POP HL + JR C,PNMX2 + SBC HL,DE + JP C,ER03 +PNMX2: POP HL + RET + SKP H + +; +PLINE: ENT ; PLINE %n,x,y + LD C,"D" + DEFB 11H +RLINE: ENT ; RLINE %n,x,y" + LD C,"J" + DEFB 11H +PMOVE: ENT ; PMOVE x,y + LD C,"M" + DEFB 11H +RMOVE: ENT ; RMOVE x,y + LD C,"R" + CALL PPCHCK + CALL LPTGMD + LD A,C + LD (LINEC+1),A + CP "M" + JR NC,LINE5 ;"M","R" + TEST1 "%" + CALL TEST1 + DEFB "%" + ENDM + JR NZ,LINE5 + CALL IBYTE + LD A,E + DEC A + CP 16 + JP NC,ER03 + DEC DE + LD A,"L" + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + CALL NUMPLT + CALL LPTCR + CALL ENDCHK + RET Z + CALL CH2CH +LINE5: CALL IDEEXP + CALL CH2CH + CALL PNMX48 + PUSH DE + CALL IDEEXP + CP "," + JR Z,LINEXY + CALL ENDZ +LINEXY: CALL PNMX99 + POP BC + PUSH DE +LINEC: LD A,0 ;Plotter command + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + LD E,C + LD D,B + CALL NUMPLT ;X + CALL LPTCOM + POP DE + + CALL NUMPLT ;Y + CALL LPTCR + CALL ENDCHK + RET Z + INC HL + JR LINE5 + SKP H + +; +PCOLOR: ENT + CALL PPCHCK + CALL IBYTE ;PCOLOR n + LD A,E + CP 4 + JP NC,ER03 + CALL ENDZ + LD A,(PNMODE) + CP 2 + JR Z,PNMBR2 + CALL OUTA3H + LD A,2 + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + CALL PNMBR2 + JP PRTTX +; +PNMBR2: LD A,"C" + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + LD A,E + OR 30H + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM +LPTCR: LD A,0DH + JR +4 +LPTCOM: LD A,"," +YLPTOT: SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + RET +; +PHOME: ENT + LD C,"H" + DEFB 11H +HSET: ENT + LD C,"I" + CALL LPTGMD ;PHOME / HSET + CALL ENDZ + LD A,C + JR YLPTOT +; + SKP H + +; +GPRINT: ENT + CALL PPCHCK + CALL LPTGMD ;GPRINT [n,s],x$ + TEST1 "[" + CALL TEST1 + DEFB "[" + ENDM + JR NZ,SYMBL2 + CALL IBYTE + CP 64 + JP NC,ER03 + PUSH DE + CALL HCH2CH + CALL IBYTE + CP 4 + JP NC,ER03 + PUSH DE + TESTX "]" + CALL TESTX + DEFB "]" + ENDM + POP BC + POP DE + PUSH BC + LD A,"S" + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + CALL NUMPLT + CALL LPTCOM + POP DE + LD A,"Q" + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + CALL NUMPLT + CALL LPTCR + CALL ENDCHK + RET Z + CALL CH2CH +SYMBL2: CALL STREXP + CALL ENDCHK + JR Z,SYMBL5 + CALL CH2CH + DEC HL +SYMBL5: LD A,B + OR A + JR Z,SYMBL4 + LD A,"P" + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM +SYMBL3: LD A,(DE) + SVC .LPTOT + RST 3 + DEFB .LPTOT + + ENDM + INC DE + DJNZ SYMBL3 + CALL LPTCR +SYMBL4: CALL ENDCHK + RET Z + INC HL + JR SYMBL2 + SKP H + +; +AXIS: ENT + CALL LPTGMD ;AXIS x,p,r + CALL IBYTE + CP 2 + JP NC,ER03 + PUSH AF + CALL HCH2CH + CALL IDEEXP + PUSH DE + CALL CH2CH + CALL IBYTE + OR A + JP Z,ER03 + CALL ENDZ + LD A,"X" + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + POP BC + POP AF + PUSH DE + PUSH BC + OR 30H + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + CALL LPTCOM + POP DE + CALL PNMX99 + CALL NUMPLT + CALL LPTCOM + POP DE + CALL NUMPLT + JP LPTCR + SKP H + +; +PCIRCLE:ENT + CALL LPTGMD ;PCIRCLE x,y,r,s,e,d + PUSH HL + LD DE,0 + LD HL,CRS + CALL FLTHEX + LD DE,360 + LD HL,CRE + CALL FLTHEX + LD HL,FLTEN + LD DE,CRTEN + CALL LDIR5 + POP HL + CALL EXPR ;X + CALL CH2CH + PUSH HL + LD HL,CRX + EX DE,HL + CALL LDIR5 + POP HL + CALL EXPR ;Y + CALL CH2CH + PUSH HL + LD HL,CRY + EX DE,HL + CALL LDIR5 + POP HL + CALL EXPR ;R + PUSH HL + PUSH AF + LD HL,CRR + EX DE,HL + CALL LDIR5 + LD A,(CRR+1) + RLCA + JP C,ER03 + POP AF + CP "," + JR NZ,CIREND + POP HL + INC HL + CALL EXPR ;S + PUSH HL + PUSH AF + LD HL,CRS + EX DE,HL + CALL LDIR5 + POP AF + CP "," + JR NZ,CIREND + POP HL + INC HL + CALL EXPR ;E + PUSH HL + PUSH AF + LD HL,CRE + EX DE,HL + CALL LDIR5 + POP AF + + CP "," + JR NZ,CIREND + POP HL + INC HL + CALL EXPR ;D + PUSH HL + LD HL,CRTEN + EX DE,HL + CALL LDIR5 + LD A,(CRTEN+1) + RLCA + JP C,ER03 +CIREND: + POP HL + CALL ENDZ + PUSH HL +; + LD HL,CRE + LD DE,CRS + LD A,(CRTEN) + OR A + CALL NZ,CMP + JP C,ER03 +; + CALL CRXYRS ;CAL X,Y +; + LD HL,CRXX ;MOVE X,Y + LD (CRMOVX+1),HL + LD HL,CRYY + LD (CRMOVY+1),HL + CALL CRMOVE + LD A,(CRTEN) + OR A + JR Z,CREDLI +; +CRCLP: LD HL,CRS ;S+D + LD DE,CRTEN + CALL ADD + LD DE,CRE + CALL CMP + JR NC,EDLINE + CALL CRXYRS + CALL CRLINE +; + SVC .BREAK + RST 3 + DEFB .BREAK + ENDM + JR NZ,CRCLP +; + POP HL + RET +; +EDLINE: CALL CREDST + CALL CRLINE + POP HL + RET +; +CREDST: LD HL,CRE + LD DE,CRS + + LD BC,5 + LDIR + JR CRXYRS +; +CREDLI: LD HL,CRX + LD (CRMOVX+1),HL + LD HL,CRY + LD (CRMOVY+1),HL + CALL CRLINE + CALL CREDST + LD HL,CRXX + LD (CRMOVX+1),HL + LD HL,CRYY + LD (CRMOVY+1),HL + CALL CRLINE + POP HL + RET +; +CRLINE: LD A,"D" + DEFB 21H +CRMOVE: LD A,"M" + PUSH AF +CRMOVX: LD HL,CRX + CALL HLFLT + PUSH HL + EX DE,HL + CALL PNMX99 +CRMOVY: LD HL,CRY + CALL HLFLT + PUSH HL + EX DE,HL + CALL PNMX99 + POP HL + POP DE + POP AF + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + PUSH HL + CALL NUMPLT + CALL LPTCOM + POP DE + CALL NUMPLT + JP LPTCR +; +CRXYRS: LD DE,(INTFAC) + LD HL,CRS + CALL LDIR5 + LD HL,(INTFAC) + CALL RAD + CALL COS + LD DE,CRR + CALL MUL + LD DE,CRX + CALL ADD + LD DE,CRXX + CALL LDIR5 + LD DE,(INTFAC) + LD HL,CRS + + CALL LDIR5 + LD HL,(INTFAC) + CALL RAD + CALL SIN + LD DE,CRR + CALL MUL + LD DE,CRY + CALL ADD + LD DE,CRYY + JP LDIR5 +; +CRX: DEFS 5 +CRY: DEFS 5 +CRR: DEFS 5 +CRS: DEFS 5 +CRE: DEFS 5 +CRTEN: DEFS 5 +CRXX: DEFS 5 +CRYY: DEFS 5 + DEFS 5 +; +; +; +NUMPLT: PUSH AF + PUSH HL + LD HL,(INTFAC) + CALL FLTHEX + CALL CVNMFL + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM +NUMPL2: LD A,(DE) + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + INC DE + DJNZ NUMPL2 + POP HL + POP AF + RET +; + SKP H + +; +TEST: ENT + CALL PPCHCK + CALL LPTTMD ;TEST command + CALL ENDZ + LD A,04H + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + RET +; +PAGE: ENT + CALL LPTTMD ;PAGE n + CALL IDEEXP + LD A,E + OR A + JP Z,ER03 + CP 73 + JP NC,ER03 + CALL ENDZ + LD A,9 + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + LD A,(PSEL) + BIT P.PLT,A + JR Z,PAGE2 + CALL NUMPLT ;Plotter only + JP LPTCR +PAGE2: LD A,E ;Except plotter + LD DE,KEYBUF + CALL HEXACC + DEC DE + DEC DE + LD A,(DE) + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + INC DE + LD A,(DE) + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + RET +; +PLOT: ENT + LD A,M + CP 9DH ;PLOT ON/OFF + JR Z,PLOTO' + CP A1H ;OFF + JP NZ,ER01 + XOR A + +PLOTOK: LD (INPFLG),A + INC HL + RET +PLOTO': CALL LPTTMD + CALL PPCHCK + LD A,(PNCHNM) + CP "L" + JP Z,LPTMER + CALL PRTTX +PL40C: LD A,(INPFLG) + OR A + JR NZ,PLOTOK + CALL CONSOI + LD A,16H + SVC .CRT1C + RST 3 + DEFB .CRT1C + ENDM + OR 01H + JR PLOTOK +; +PRTTX: LD A,1 + SVC .LPTOT + RST 3 + DEFB .LPTOT + ENDM + LD A,(CRTMD2) + CP 3 + RET C + CALL T80CH + RET +; +PPCHCK: LD A,(PSEL) + BIT P.PLT,A ;if not plotter + JP Z,LPTMER ; then err + RET +; +NEWAD0: ENT +; + END diff --git a/software/asm/mz-xz009/STMNT.ASM b/software/asm/mz-xz009/STMNT.ASM new file mode 100644 index 0000000..48d67f3 --- /dev/null +++ b/software/asm/mz-xz009/STMNT.ASM @@ -0,0 +1,1346 @@ +; --------------------------------- +; MZ-800 BASIC Statement interprit +; FI:STMNT ver 1.0A 9.06.84 +; Programed by T.Miho +; --------------------------------- +; + INCLD MACRO +; +LET: ENT + TEST1 FFH + CALL TEST1 + DEFB FFH + ENDM + JP Z,PFUNCT + CALL INTGTV + PUSH BC + PUSH BC + PUSH AF + TESTX F4H ;= + CALL TESTX + DEFB F4H + ENDM + CALL EXPR + POP BC + LD A,(PRCSON) + CP B + JP NZ,ER04 + EX (SP),HL ; VAR ADRS<>TEXTPOINT + EX DE,HL + CP 05H + JR Z,DAIBCK + PUSH BC + CALL STRDAI + POP AF + POP HL + POP BC + RET +; +DAIBCK: LD C,A + LD B,0 + LDIR + POP HL + POP BC + RET +; +PFUNCT: ENT + TESTX C4H + CALL TESTX + DEFB C4H + ENDM + JP TIMDAI ;TI$=... +; +STRLET: ENT + PUSH DE + EX DE,HL + JR STRDI2 +; +STRDAI: ENT + PUSH DE + CALL CVTSDC + +STRDI2: LD HL,KEYBM1 + LD M,A + LD B,A + LD C,A + INC HL + CALL LDHLDE + POP HL + LD A,M + CP C + JR Z,SMLNST + PUSH HL + OR A + CALL NZ,DELSTR + POP HL + LD A,(KEYBM1) + OR A + JR Z,STRNL1 + PUSH HL + LD BC,(VARST) + SBC HL,BC + EX DE,HL + LD HL,(VARED) + DEC HL + DEC HL + LD M,E + INC HL + LD M,D + INC HL + LD BC,(STRST) + OR A + POP DE + PUSH HL + SBC HL,BC + EX DE,HL + LD M,A + LD B,A + INC HL + LD M,E + INC HL + LD M,D + POP HL + LD DE,KEYBM1 + INC DE + CALL STRENT + CALL LDHL00 + LD (TMPEND),HL + LD (VARED),HL + RET +; +STRNL1: LD M,0 + RET +; +SMLNST: INC HL + LD E,M + INC HL + LD D,M + LD HL,(STRST) + ADD HL,DE + LD DE,KEYBM1 + LD B,C + + INC DE + JP STRENT +; +DELSTR: LD C,M + LD B,0 + INC BC + INC BC + INC HL + LD E,M + INC HL + LD D,M + LD HL,(STRST) + ADD HL,DE + DEC HL + DEC HL + LD E,L + LD D,H + ADD HL,BC + PUSH BC + PUSH DE + EX DE,HL + LD HL,(VARED) + OR A + SBC HL,DE + LD C,L + LD B,H + EX DE,HL + POP DE + PUSH DE + JR Z,+4 + LDIR + POP DE + POP BC + LD HL,(VARED) + OR A + SBC HL,BC + LD (VARED),HL + EX DE,HL +STRDE1: LD E,M + INC HL + LD D,M + LD A,D + OR E + RET Z + LD HL,(VARST) + ADD HL,DE + LD A,M + INC HL + LD E,M + INC HL + LD D,M + OR A + EX DE,HL + SBC HL,BC + EX DE,HL + LD M,D + DEC HL + LD M,E + PUSH BC + LD C,A + + LD B,0 + LD HL,(STRST) + ADD HL,DE + ADD HL,BC + POP BC + JR STRDE1 + SKP H + +; +FOR: ENT ;FOR TO STEP + POP BC + LD (FORRTA),BC + CALL LET + LD IX,0 + ADD IX,SP + LD (FRTXPT),HL + CALL VAROFST + LD (FORVAD+1),BC +FOR3: LD E,(IX+0) + LD D,(IX+1) + LD HL,FF12H + OR A + SBC HL,DE + JR NZ,FOR1 + LD E,(IX+6) + LD D,(IX+7) + EX DE,HL + OR A + SBC HL,BC + JR Z,FOR2 ;EQL FORVAR + LD DE,012H + ADD IX,DE + JR FOR3 +FOR2: LD DE,012H + ADD IX,DE + LD SP,IX +FOR1: LD HL,(FRTXPT) + TESTX E0H ;TO + CALL TESTX + DEFB E0H + ENDM + CALL EXPR + PUSH AF + PUSH HL + EX DE,HL + LD DE,TODTBF + CALL LDIR5 + POP HL + POP AF + CP E1H ;STEP + LD DE,FLONE + JR NZ,SSTEP1 + INC HL + CALL EXPR +SSTEP1: LD (FRTXPT),HL + LD HL,FFF6H ;-10 + ADD HL,SP + LD SP,HL + EX DE,HL + CALL LDIR5 + LD HL,TODTBF + CALL LDIR5 +FORVAD: LD HL,0 + PUSH HL + DEFB 21H +FRTXPT: DEFS 2 + PUSH HL + LD HL,(NXTLPT) + + PUSH HL + LD HL,FF12H ;FOR MARK + PUSH HL + LD HL,-512 + ADD HL,SP + LD DE,(TMPEND) + SBC HL,DE + LD A,11 ;FOR..NEXT ERR + JP C,NESTER + LD HL,(FRTXPT) + DEFB C3H +FORRTA: DEFS 2 +; +; +NEXT: ENT ;NEXT + LD A,5 + LD (PRCSON),A + POP BC + LD (NEXRTA),BC +NEXT6: PUSH AF + POP BC + LD (FRTXPT),HL + LD IX,0 + ADD IX,SP + LD (FORSTK),IX + LD E,(IX+0) + LD D,(IX+1) + LD HL,FF12H + OR A + SBC HL,DE + JP NZ,ER13 + PUSH BC + POP AF + JR NZ,NEXT1 +; + LD E,(IX+4) ;FOR TEXTPO + LD D,(IX+5) + EX DE,HL + LD (NEXT4+1),HL +; + LD E,(IX+6) ;FORVAD + LD D,(IX+7) + LD HL,(VARST) + ADD HL,DE +; + LD BC,8 ;STEP ADR + ADD IX,BC + PUSH IX + POP DE + CALL ADD + INC DE + LD A,(DE) + LD IX,(FORSTK) + LD DE,0DH + ADD IX,DE + PUSH IX + POP DE + BIT 7,A + JR NZ,+3 + EX DE,HL + + CALL CMP + JR C,NEXT3 ;END + DEFB 31H +FORSTK: DEFS 2 + LD HL,2 + ADD HL,SP + LD A,M + INC HL + LD H,M + LD L,A + LD (NXTLPT),HL +NEXT4: LD HL,0 ;TEXTPO +NEXT5: DEFB C3H +NEXRTA: DEFS 2 +NEXT3: LD DE,012H + LD HL,(FORSTK) + ADD HL,DE + LD SP,HL + LD HL,(FRTXPT) + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR NZ,NEXT5 +; + LD (FRTXPT),HL +NEXT1: LD IX,0 + ADD IX,SP + LD (FORSTK),IX + LD HL,(FRTXPT) + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JP Z,NEXT6 + CALL INTGTV + LD (FRTXPT),HL + CALL VAROFST + LD IX,(FORSTK) +NEXT12: LD E,(IX+0) + LD D,(IX+1) + LD HL,FF12H + OR A + SBC HL,DE + JP NZ,ER13 + LD L,(IX+6) + LD H,(IX+7) + OR A + SBC HL,BC + LD HL,(FRTXPT) + JP Z,NEXT6 + LD DE,012H + ADD IX,DE + LD (FORSTK),IX + LD SP,(FORSTK) + JR NEXT12 +; +VAROFST:LD HL,BC + LD BC,(VARST) + OR A + + SBC HL,BC + LD BC,HL + RET +; +TODTBF: DEFS 5 +; +FRLNBF: DEFS 2 +FRNLPT: DEFS 2 +; +FORSKS: CALL IFSKSB + OR A + RET NZ + INC HL + PUSH DE + LD E,M + INC HL + LD D,M + LD A,D + OR E + INC HL + LD (FRNLPT+1),DE + LD E,M + INC HL + LD D,M + LD (FRLNBF+1),DE + POP DE + SCF + RET Z + JR FORSKS + SKP H + +; +USR: ENT ;USR(adrs,source$,dest$) + CALL CH28H + CALL IDEEXP ;adrs + LD (USRADR+1),DE + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR NZ,USR2 + CALL EXPR ;source$ + CALL STROK + LD (USRSRC+1),DE + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR NZ,USR2 + CALL INTGTV ;dest$ + CALL STROK + LD (USRDST+1),BC + XOR A +USR2: PUSH HL + PUSH AF +USRSRC: LD HL,0 ;xxx + CALL CVTSDC + LD IX,ERRORJ + XOR A +USRADR: CALL 0 ;xxx + POP AF + JR NZ,USR8 + LD A,B ;dest$ exist + EX DE,HL +USRDST: LD DE,0 ;xxx + CALL STRLET +USR8: POP HL + JP HCH29H + SKP H + +; +; +PAUSE: ENT ;PAUSE command + CALL IDEEXP +PAUSE2: LD A,D + OR E + RET Z + LD B,FBH ;JAPAN 00H + DJNZ +0 + SVC .BREAK + RST 3 + DEFB .BREAK + ENDM + RET Z + DEC DE + JR PAUSE2 +; +REM: ENT ;REM command +LABEL: ENT ;LABEL command +DATA: ENT ;DATA command +GSUB: ENT ;GOSUB command + DEC HL +DATA0: CALL IFSKSB + OR A + SCF + RET Z + CP ":" + RET Z + JR DATA0 +; +OUT@: ENT ;OUT @port,data + CALL IBYTE + SUB E0H + CP 7 + JP C,ER03 ;E0H .. E6H + CALL HCH2CH + PUSH DE + CALL IBYTE + POP BC + OUT (C),A + RET +; +INP@: ENT ;INP @port,vara + CALL IBYTE + CALL HCH2CH + PUSH DE + CALL INTGTV + CP 5 + JP NZ,ER04 + EX (SP),HL + PUSH BC + EX (SP),HL + POP BC + IN E,(C) + LD D,0 + CALL FLTHEX + POP HL + RET + SKP H + +; +CURSOR: ENT ;CURSOR x,y + CALL CSRXY + EX DE,HL + SVC .CURMV + RST 3 + DEFB .CURMV + ENDM + EX DE,HL + RET +; +CSRXY: ENT + LD B,24 + LD C,39 + LD A,(CRTMD2) ;80 char. mode change + CP 3 + JR C,CSRXY3 + LD C,79 +CSRXY3: CALL CSRXY2 + JP C,ER03 + RET +; +CSRXY2: PUSH BC + CALL IBYTE + PUSH AF + CALL HCH2CH + CALL IBYTE + LD D,E + POP AF + LD E,A + POP BC + LD A,C + CP E + RET C + LD A,B + CP D + RET +; +GETOP: ENT ;GET var + CALL INTGTV + LD (PRCSON),A + CP 5 + JR Z,GETSUJ + PUSH HL ;GET STR + PUSH BC + LD A,FFH + SVC .INKEY + RST 3 + DEFB .INKEY + ENDM + OR A + JR Z,NLGTKY + LD HL,(TMPEND) + LD M,A + LD A,1 +NLGTKY: POP DE + CALL STRLET + POP HL + RET +; + +GETSUJ: PUSH HL + PUSH BC + LD A,FFH + SVC .INKEY + RST 3 + DEFB .INKEY + ENDM + SUB 30H + CP 0AH + JR C,+3 + XOR A + LD E,A + LD D,0 + POP HL + CALL FLTHEX + POP HL + RET + SKP H + +; +POKE: ENT ;POKE ad,d1,d2,d3,... + CALL IDEEXP + CALL CH2CH +POKELP: PUSH DE + CALL IBYTE + POP DE + LD (DE),A + INC DE + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + RET NZ + JR POKELP +; +LIMIT: ENT ;LIMIT adrs + PUSH HL + TEST1 "M" + CALL TEST1 + DEFB "M" + ENDM + JR NZ,LIMIT1 + TEST1 "A" + CALL TEST1 + DEFB "A" + ENDM + JR NZ,LIMIT1 + TEST1 "X" + CALL TEST1 + DEFB "X" + ENDM + JR NZ,LIMIT1 + EX (SP),HL + LD HL,(MEMMAX) + JR LIMIT2 +LIMIT1: POP HL + CALL IDEEXP + PUSH HL + LD HL,(MEMMAX) + OR A + SBC HL,DE + JP C,ER06' + LD HL,(TMPEND) + INC H + INC H + INC H + INC H + OR A + SBC HL,DE + JP NC,ER03 + EX DE,HL +LIMIT2: CALL MEMSET + POP HL + POP DE + LD SP,(INTFAC) + LD BC,FFFFH + PUSH BC + PUSH DE + RET + + SKP H + +; +RETURN: ENT ;RETURN linenumber + POP IX +RETRN2: POP BC + PUSH BC + LD A,B + INC A + JP NZ,ER14 + LD A,C + CP 12H + JR Z,RETRN6 + CP FEH + JP NZ,ER14 + POP BC + CALL ENDCHK + EX DE,HL + POP HL + LD (LNOBUF),HL + POP HL + LD (NXTLPT),HL + POP HL + PUSH IX + RET Z + EX DE,HL + JP GOTO +RETRN6: EX DE,HL + LD HL,12H + ADD HL,SP + LD SP,HL + EX DE,HL + JR RETRN2 +; +GOSUB: ENT ;GOSUB linenumber + PUSH HL + CALL GSUB + EX DE,HL + POP HL + POP BC + PUSH DE + EXX + LD HL,(NXTLPT) + PUSH HL + LD HL,(LNOBUF) + PUSH HL + LD HL,FFFEH + PUSH HL + LD HL,-512 + ADD HL,SP + LD DE,(TMPEND) + SBC HL,DE + LD A,10 + JP C,NESTER + EXX + PUSH BC + JR GOTO + SKP H + +; +ON: ENT ;ON command + TEST1 C1H + CALL TEST1 + DEFB C1H + ENDM + JP Z,ONERRG ;ON ERROR + CALL IDEEXP + LD C,E + LD B,D + CP 87H + JP NC,ER01 + CP 82H + JR NZ,ON.4 + CALL INCHLF + LD E,81H + CP E4H + JR Z,ON.2 + CP E0H + JP NZ,ER01 + DEC E +ON.2: LD A,E +ON.4: PUSH HL + LD HL,SJPTBL + SUB 80H + ADD A,A + LD E,A + LD D,0 + ADD HL,DE + CALL INDRCT + EX (SP),HL + INC HL + LD A,B + OR A + JR NZ,ON.9 + LD A,C + OR A + JR Z,ON.9 + LD B,A +ON.6: DEC B + RET Z + CALL HLFTCH + CALL LINE? + JP NZ,ER01 + CALL DTSKL1 + OR A + RET Z + INC HL + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR Z,ON.6 + POP DE + JP ENDZ +ON.9: POP DE + JP DATA + SKP H + +; +GOTO: ENT ;GOTO linenumber + CALL GETLIN + EX DE,HL + JR NZ,+5 + LD HL,(TEXTST) ;GOTO 0 + LD (NXTLPT),HL + XOR A + LD (CONTFG),A + JP NXLINE +; +IF: ENT ;IF THEN ELSE + CALL EXPR + EX AF,AF' + LD A,(DE) + OR A + JR Z,IFALSE + EX AF,AF' + CP E2H ;THEN + JR NZ,IF.4 +IF.2: CALL INCHLF + CALL LINE? + JR Z,GOTO +IF.4: POP AF + JP MAIN +; +LINE?: ENT + CP '"' + RET Z +LINE?2: ENT + CP 0BH + RET Z + CP 0CH + RET +; +ELSE: ENT + CALL IFSKIP + JR NC,-3 + RET +; +IFALSE: DEC HL + CALL IFSKIP + JR NC,IF.2 + JP ENDLIN +; +IFSKIP: CALL IFSKSB + OR A + SCF + RET Z + CP C2H ;ELSE + RET Z + CP 93H ;IF + JR NZ,IFSKIP + CALL IFSKIP + RET C + JR IFSKIP +; +DTSKSB: ENT + INC HL + LD A,M + + JR DTSKL1 +; +IFSKSB: ENT + INC HL + LD A,M + CP 94H ;DATA + JR Z,IFDASK +DTSKL1: OR A + RET Z + CP '"' + JR Z,IFDQSK + CP FEH ;FUNC/OPTION + JR NC,IFFNRT + CP 97H ;REM + JR Z,IFDASK + CP 27H ;' + JR Z,IFDASK + CP 20H + RET NC + CP 0BH + RET C + CP 15H + JR NC,ISKFLT + INC HL +IFFNRT: INC HL + RET +; +; +IFDASK: LD A,M + OR A + RET Z + CP 3AH + RET Z + CP '"' + JR Z,DADQSK + INC HL + JR IFDASK +; +DADQSK: CALL IFDQSK + OR A + RET Z + INC HL + JR IFDASK +; +ISKFLT: AND 0FH + ADD A,L + LD L,A + LD A,20H + RET NC + INC H + RET +; +IFDQSK: INC HL + LD A,M + OR A + RET Z + CP '"' + RET Z + JR IFDQSK + SKP H + +; +; +BEEP: ENT ;BEEP command + SVC .BELL + RST 3 + DEFB .BELL + ENDM + RET +; +BYE: ENT ;BYE command + CALL ENDZ + SVC .CLRIO + RST 3 + DEFB .CLRIO + ENDM + SVC .MONOP + RST 3 + DEFB .MONOP + ENDM + RET + SKP H + +; +CONSOL: ENT ;CONSOLE x,xl,y,yl + JR Z,CONSOI + LD A,(YS) +; +;CONSCK + LD D,0 + LD E,A + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + JR Z,CONSOK + CALL IBYTE + CALL HCH2CH +CONSOK: LD C,E + PUSH BC + CALL IBYTE + POP BC + DEC A + JP M,ER03 + ADD A,C + CP 25 + JP NC,ER03 + LD B,A +; + PUSH HL + LD H,B + LD L,C + SVC .DWIND + RST 3 + DEFB .DWIND + ENDM + POP HL + RET +CONSOI: ENT ;CONSOLE INIT + PUSH HL + LD HL,1800H + SVC .DWIND + RST 3 + DEFB .DWIND + ENDM + POP HL + RET +; +BOOT: ENT ;BOOT command + DI + OUT (E4H),A + JP 0 + SKP H + +; +; +SEARCH: ENT ;SEARCH#n "xxxx" + XOR A + DEFB 1 +LIST: ENT ;LIST#n Start-End + LD A,1 + LD (SELTF),A + PUSH AF + CALL GETLU + SVC .LUCHK + RST 3 + DEFB .LUCHK + ENDM + JP C,ER64 + BIT 1,A ;W? + JP Z,ER64 + TEST1 "," + CALL TEST1 + DEFB "," + ENDM + POP AF + OR A + JR NZ,LIST10 + CALL STREXP ;SEARCH command only + LD A,B + LD (SECLEN),A + LD (SESTR),DE + CALL ENDZ + JR LIST10 +; +LIST0: ENT + LD A,2 + LD (SELTF),A +LIST10: CALL GTSTED + LD (LISTSN),DE + LD (LISTEN),BC + LD A,FFH + LD (DISPX),A + CALL PUSHR + LD HL,(TEXTST) +LIST20: CALL LDDEMI + LD A,D + OR E + RET Z + EX DE,HL + ADD HL,DE + DEC HL + DEC HL + EX DE,HL + PUSH DE + CALL LDDEMI + PUSH HL + DEFB 21H +LISTSN: DEFS 2 + OR A + SBC HL,DE + JR C,LIST30 + JR Z,LIST30 + POP HL + + POP HL + JR LIST20 +; +LIST30: DEFB 21H +LISTEN: DEFS 2 + OR A + SBC HL,DE + JR NC,LIST40 + POP HL + POP HL + RET +; +; +LIST40: EX DE,HL + CALL ASCFIV + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + LD HL,KEYBUF + CALL LDHLDE + LD M," " + INC HL + EX DE,HL + POP HL + CALL CVTXIM + LD A,(SELTF) + OR A + JR NZ,LIST50 + CALL SSEST + JR NC,LIST60 +LIST50: LD DE,KEYBUF + SVC .COUNT + RST 3 + DEFB .COUNT + ENDM + SVC .PRSTR + RST 3 + DEFB .PRSTR + ENDM + CALL PRTCR +LIST60: POP HL + LD A,(SELTF) + CP 2 + JR Z,LIST20 ;ASCII SAVE + SVC .HALT + RST 3 + DEFB .HALT + ENDM + JR LIST20 +; +; +; +; HL=TEXT START ADDRESS +; +SSEST: EX DE,HL +SSESTL: PUSH HL + CALL SSESTS + POP HL + RET C + + RET Z + INC HL + JR SSESTL +; +;;;;;;;;;;;;;;;;;;;;;; +; +; ent HL:CMP pointer +; +; ext CY=1 sane string +; CY=0 Acc=0 not same & text end +; Acc=FFH not same chr +; +SSESTS: LD A,(SECLEN) ;String Length + LD B,A + LD DE,(SESTR) ;String address +SSEST0: LD A,(HL) + INC HL + OR A + RET Z + CP 5 + JR Z,SSEST1 + CP 6 + JR NZ,SSEST2 +SSEST1: JR SSEST0 +; +SSEST2: PUSH HL + LD C,A +SSEST4: LD A,(DE) + INC DE + CP 5 + JR Z,SSEST3 + CP 6 + JR NZ,SSEST5 +SSEST3: DEC B + SCF + POP HL + RET Z + PUSH HL + JR SSEST4 +SSEST5: SUB C + POP HL + OR A + RET NZ ;1 Chr not same + DEC B + SCF + RET Z + JR SSEST0 +; +; +SECLEN: DEFS 1 ;Stling length +; +SESTR: DEFS 2 ;Stling Addrsess +; +SSESTW: DEFS 2 ;Line No. +; +SELTF: DEFS 1 ;0:SEARCH , 1:LIST +; + SKP H + +; +KLIST: ENT ;KEY LIST + TESTX 87H ;LIST + CALL TESTX + DEFB 87H + ENDM + CALL TESTP + PUSH HL + LD C,0 +KLSTLP: SVC .&CR + RST 3 + DEFB .&CR + ENDM + LD A,C + ADD A,"1" + LD D,A + LD E," " + CP 3AH + JR NZ,+5 + LD DE,"01" + LD (KEYME2),DE + LD DE,KEYME1 ;'DEF KEY(' + SVC .&MSG + RST 3 + DEFB .&MSG + ENDM + LD A,C + CALL KEYBCL + LD B,M + INC HL + PUSH BC + CALL STKYMS ;(DE)=MSTRING + POP BC + INC C + LD A,C + CP 10 + JR NZ,KLSTLP + SVC .&CR + RST 3 + DEFB .&CR + ENDM + POP HL + RET +; +STKYMS: LD A,B + OR A + LD C,0 + JR NZ,STKYM1 + LD A,'"' + SVC .&1CX + RST 3 + DEFB .&1CX + ENDM + SVC .&1CX + RST 3 + DEFB .&1CX + ENDM + RET +STKYM1: LD A,M + CP 20H + + JR C,CHRME1 + CP '"' + JR Z,CHRME1 + LD A,C + CP 1 + JR Z,CHRM22 + OR A + LD DE,KEYME3 + JR NZ,+4 + INC DE + INC DE + SVC .&MSG + RST 3 + DEFB .&MSG + ENDM +CHRM22: LD A,M + SVC .&1CX + RST 3 + DEFB .&1CX + ENDM + INC HL + LD C,1 + DJNZ STKYM1 +STKYE2: LD A,'"' +..&1CX: SVC .&1CX + RST 3 + DEFB .&1CX + ENDM + RET +; +CHRME1: LD A,C + CP FFH + JR Z,CHRM12 + OR A + LD DE,KEYME4 + JR NZ,+4 + INC DE + INC DE + SVC .&MSG + RST 3 + DEFB .&MSG + ENDM +CHRM16: PUSH BC + PUSH HL + LD L,M + LD H,0 + CALL ASCFIV + SVC .&MSG + RST 3 + DEFB .&MSG + ENDM + POP HL + POP BC + INC HL + LD C,FFH + DJNZ STKYM1 + LD A,")" + JP ..&1CX +; +CHRM12: LD A,"," + + SVC .&1CX + RST 3 + DEFB .&1CX + ENDM + JR CHRM16 +; +KEYME1: DEFM 'DEF KEY(' + +KEYME2: DEFS 2 + DEFM ')=' + DEFB 0 +KEYME3: DEFM ')+"' + DEFB 0 +KEYME4: DEFM '"+CHR$(' + + DEFB 0 + SKP H + +; +DEFOP: ENT ;DEF command + TEST1 B2H + CALL TEST1 + DEFB B2H + ENDM + JR Z,DEFKEY ;DEF KEY(n)="..." + TESTX FFH + CALL TESTX + DEFB FFH + ENDM + TESTX C7H + CALL TESTX + DEFB C7H + ENDM + JP DEFFN ;DEF FNx(x)=expr +; +DEFKEY: TESTX "(" + CALL TESTX + DEFB "(" + ENDM + CALL IBYTE + TESTX ")" + CALL TESTX + DEFB ")" + ENDM + TESTX F4H ;= + CALL TESTX + DEFB F4H + ENDM + LD A,E + DEC A + CP 10 + JP NC,ER03 + PUSH HL + CALL KEYBCL + EX (SP),HL + CALL STREXP ;A,DE + EX (SP),HL + LD A,B + CP 16 + JR C,+4 + LD A,15 + LD M,A + OR A + JR Z,ESCKPT + LD B,A + INC HL + LD A,(DE) + LD M,A + INC DE + INC HL + DJNZ -4 +ESCKPT: POP HL + EI + RET +; +; +KEYBCL: ADD A,A + ADD A,A + + ADD A,A + ADD A,A + LD HL,FUNBUF + JP ADDHLA +; + END diff --git a/software/asm/mz-xz009/XSYS.ASM b/software/asm/mz-xz009/XSYS.ASM new file mode 100644 index 0000000..5979f4d --- /dev/null +++ b/software/asm/mz-xz009/XSYS.ASM @@ -0,0 +1,5 @@ +; +; + ORG 5800H +$START: ENT + END diff --git a/software/asm/mz-xz009/XWORK.ASM b/software/asm/mz-xz009/XWORK.ASM new file mode 100644 index 0000000..a0f5ee5 --- /dev/null +++ b/software/asm/mz-xz009/XWORK.ASM @@ -0,0 +1,9 @@ + ORG 2000H +TEXTBF: + DEFS 2000 +; +; work area +; +DIRARE: ENT ;DIR area + DEFS 800H + END diff --git a/software/asm/mz2000_ipl.asm b/software/asm/mz2000_ipl.asm new file mode 100644 index 0000000..5853e4a --- /dev/null +++ b/software/asm/mz2000_ipl.asm @@ -0,0 +1,891 @@ + ;**************************************************************** + ; + ; MZ-2000 Initial Program Loader Firmware. + ; + ; Disassembled with dz80 v2.1 and comments copied from the + ; MZ-80B IPL disassembly. + ; + ;**************************************************************** + ; +CR EQU 0D8H +TR EQU 0D9H +SCR EQU 0DAH +DR EQU 0DBH +DM EQU 0DCH +HS EQU 0DDH +PPIA EQU 0E0H +PPIB EQU 0E1H +PPIC EQU 0E2H +PPICTL EQU 0E3H +PIOA EQU 0E8H +PIOCTLA EQU 0E9H +PIOB EQU 0EAH +PIOCTLB EQU 0EBH +GRPHCTL EQU 0F4H +IBUFE EQU 0CF00H +ATRB EQU 0CF00H +NAME EQU 0CF01H +SIZE EQU 0CF12H +DTADR EQU 0CF14H +SUMDT EQU 0FFE0H +TMCNT EQU 0FFE2H +IBADR1 EQU 0CF00H +IBADR2 EQU 08000H +NTRACK EQU 0FFE0H +NSECT EQU 0FFE1H +BSIZE EQU 0FFE2H +STTR EQU 0FFE4H +STSE EQU 0FFE5H +MTFG EQU 0FFE6H +CLBF0 EQU 0FFE7H +CLBF1 EQU 0FFE8H +CLBF2 EQU 0FFE9H +CLBF3 EQU 0FFEAH +RETRY EQU 0FFEBH +DRINO EQU 0FFECH +PRGSTART EQU 00000H + + ORG PRGSTART + +L0000: JR START + ; + ; NST RESET + ; +NST: LD A,003H ;Set PC1 NST=1 + OUT (PPICTL),A +START: LD A,082H ;8255 A=OUT B=IN C=OUT + OUT (PPICTL),A + LD A,058H ;PIO A=OUT + OUT (PPIC),A + LD SP,SUMDT ;PIO B=IN + LD A,0F7H + OUT (PPIA),A + LD A,00FH + OUT (PIOCTLA),A ;BST=1 NST=0 OPEN=1 WRITE=1 + LD A,0CFH + OUT (PIOCTLB),A + LD A,0FFH + OUT (PIOCTLB),A + XOR A ;Set Graphics VRAM to default, input to GRPH I, no output. + OUT (0F6H),A + OUT (GRPHCTL),A + INC A + OUT (0F7H),A + LD A,007H + OUT (0F5H),A + LD A,0D3H + OUT (PIOA),A + LD HL,0D000H + LD A,CR +CLEAR: LD (HL),000H ; DISPLAY CLEAR + INC HL + CP H + JR NZ,CLEAR + LD A,0FFH + OUT (PPIA),A + LD A,003H + OUT (0F7H),A + CALL L006E + LD A,002H + OUT (0F7H),A + CALL L006E + LD A,001H + OUT (0F7H),A + CALL L006E + LD A,013H + OUT (PIOA),A + XOR A + LD (DRINO),A + LD (MTFG),A +KEYIN: CALL KEYS1 + BIT 3,A ;C - Cassette. + JR Z,CMT + BIT 0,A ;/ - Boot external rom. + JP Z,EXROMT + JR NKIN ;No selection, so standard startup, try FDC then CMT. + +L006E: LD HL,0C000H + DI + IN A,(PIOA) + SET 7,A + RES 6,A + OUT (PIOA),A + LD DE,0C001H + LD (HL),000H + LD BC,03E7FH +L0082: LDIR + RES 7,A + SET 6,A + OUT (PIOA),A + EI + RET + +KEYS1: LD B,014H ;Preserve A4-A7, set A4 to prevent all strobes low, the select line 5 (0-4). +KEYS: IN A,(PIOA) + AND 0F0H + OR B + OUT (PIOA),A + IN A,(PIOB) ;Read the strobed key. + RET + +NKIN: CALL FDCC + JP Z,FD + JR CMT + +FDCC: LD A,0A5H + LD B,A + OUT (TR),A + CALL DLY80U + IN A,(TR) + CP B + RET + ; + ; ; + ; CMT CONTROL ; + ; ; + ; +CMT: CALL MSTOP + CALL KYEMES + CALL RDINF + JR C,ST1 + CALL LDMSG + LD HL,NAME + LD E,010H + LD C,010H + CALL DISP2 + LD A,(IBUFE) + CP 001H + JR NZ,MISMCH + CALL RDDAT +ST1: PUSH AF + CALL FR + POP AF + JP C,TRYAG + JP NST + +MISMCH: LD HL,MES16 + LD E,00AH + LD C,00FH + CALL DISP + CALL MSTOP + SCF + JR ST1 + ; + ;READ INFORMATION + ; CF=1:ERROR +?RDI: +RDINF: DI + IN A,(PPIC) + SET 5,A + OUT (PPIC),A + LD D,004H + LD BC,0080H + LD HL,IBUFE +RD1: CALL MOTOR + JR C,STPEIR + CALL TMARK + JR C,STPEIR + CALL RTAPE + JR C,STPEIR + BIT 3,D + JR Z,EIRTN +STPEIR: CALL MSTOP +EIRTN: EI + RET + ; + ; + ;READ DATA + ; +?RDD: +RDDAT: DI + LD D,008H + LD BC,(0CF12H) + LD HL,IBADR2 + JR RD1 + ; + ; + ;READ TAPE + ; BC=SIZE + ; DE=LOAD ADDRSS +RTAPE: PUSH DE + PUSH BC + PUSH HL + LD H,002H +RTP2: CALL SPDIN + JR C,TRTN1 ; BREAK + JR Z,RTP2 + LD D,H + LD HL,L0000 + LD (SUMDT),HL + POP HL + POP BC + PUSH BC + PUSH HL +RTP3: CALL RBYTE + JR C,TRTN1 + LD (HL),A + INC HL + DEC BC + LD A,B + OR C + JR NZ,RTP3 + LD HL,(SUMDT) + CALL RBYTE + JR C,TRTN1 + LD E,A + CALL RBYTE + JR C,TRTN1 + CP L + JR NZ,RTP5 + LD A,E + CP H + JR Z,TRTN1 +RTP5: DEC D + JR Z,RTP6 + LD H,D + JR RTP2 + +RTP6: CALL BOOTER + SCF +TRTN1: POP HL + POP BC + POP DE + RET + +EDGE: IN A,(PPIB) + CPL + RLCA + RET C ; BREAK + RLCA + JR NC,EDGE ; WAIT ON LOW +L016A: IN A,(PPIB) + CPL + RLCA + RET C ; BREAK + RLCA + JR C,L016A ; WAIT ON HIGH + RET + ; 1 BYTE READ + ; DATA=A + ; SUMDT STORE +RBYTE: PUSH HL + LD HL,00800H ; 8 BITS +RBY1: CALL SPDIN + JR C,RBY3 ; BREAK + JR Z,RBY2 ; BIT=0 + PUSH HL + LD HL,(SUMDT) ;CHECKSUM + INC HL + LD (SUMDT),HL + POP HL + SCF +RBY2: RL L + DEC H + JR NZ,RBY1 + CALL EDGE + LD A,L +RBY3: POP HL + RET + ;TAPE MARK DETECT + ; E=L:INFORMATION + ; E=S:DATA +TMARK: PUSH HL + LD HL,01414H + BIT 3,D + JR NZ,TM0 + ADD HL,HL +TM0: LD (TMCNT),HL +TM1: LD HL,(TMCNT) +TM2: CALL SPDIN + JR C,RBY3 + JR Z,TM1 + DEC H + JR NZ,TM2 +TM3: CALL SPDIN + JR C,RBY3 + JR NZ,TM1 + DEC L + JR NZ,TM3 + CALL EDGE + JR RBY3 + +SPDIN: CALL EDGE ;WAIT ON HIGH + RET C ;BREAK + CALL DLY2 + IN A,(PPIB) ;READ BIT + AND 040H + RET + ; + ; + ;MOTOR ON +MOTOR: PUSH DE + PUSH BC + PUSH HL + IN A,(PPIB) + AND 020H + JR Z,MOTRD + LD HL,MES6 + LD E,00AH + LD C,00EH + CALL DISP + CALL OPEN +MOT1: IN A,(PIOB) + CPL + RLCA + JR C,MOTR + IN A,(PPIB) + AND 020H + JR NZ,MOT1 + CALL KYEMES + CALL DEL1M +MOTRD: CALL PLAY +MOTR: POP HL + POP BC + POP DE + RET + ; + ; + ;MOTOR STOP +MSTOP: LD A,0F7H + OUT (PPIA),A + CALL DEL6 + LD A,0FFH + OUT (PPIA),A + RET + ;EJECT +OPEN: LD A,008H ;Reset PC4 - EJECT activate + OUT (PPICTL),A + CALL DEL6 + LD A,009H + OUT (PPICTL),A ;Set PC4 - Deactivate EJECT + RET + +KYEMES: LD HL,MES3 + LD E,004H + LD C,01CH + CALL DISP + RET + ; + ;PLAY +PLAY: LD A,0FBH + OUT (PPIA),A + CALL DEL6 + LD A,0FFH + OUT (PPIA),A + RET + +FR: LD A,0FEH +FR1: OUT (PPIA),A + CALL DEL6 + LD A,0FFH + OUT (PPIA),A + IN A,(PPIC) + RES 5,A + OUT (PPIC),A + RET + ; + ;TIMING DEL +DM1: PUSH AF +DM1A: XOR A +DM1B: DEC A + JR NZ,DM1B + DEC BC + LD A,B + OR C + JR NZ,DM1A + POP AF + POP BC + RET + +DEL6: PUSH BC + LD BC,RDINF + JR DM1 + +DEL1M: PUSH BC + LD BC,060FH + JR DM1 + ; + ;TAPE DELAY TIMING + ; + ; +DLY2: LD A,031H +DLY2A: DEC A + JP NZ,DLY2A + RET + +LDMSG: LD HL,MES1 + LD E,000H + LD C,00EH + JR DISP + +DISP2: LD A,0D3H + OUT (PIOA),A + JR DISP1 + +BOOTER: LD HL,MES8 + LD E,00AH + LD C,00DH +DISP: LD A,0D3H + OUT (PIOA),A + EXX + LD HL,0D000H + LD A,CR +DISP3: LD (HL),000H + INC HL + CP H + JR NZ,DISP3 + EXX +DISP1: XOR A + LD B,A + LD D,0D0H + LDIR + LD A,013H + OUT (PIOA),A + RET + + ; +MES1: DB "IPL is loading" +MES3: DB "IPL is looking for a program" +MES6: DB "Make ready CMT" +MES8: DB "Loading error" +MES9: DB "Make ready FD" +MES10: DB "Press F or C" +MES11: DB "F:Floppy disk " +MES12: DB "C:Cassette tape" +MES13: DB "Drive No? (1-4)" +MES14: DB "This disk is not master " +MES15: DB "Pressing S key starts the CMT" +MES16: DB "File mode error" + ; +IPLMC: DB 01H + DB "IPLPRO" + + ; + ; + ;FD +FD: LD IX,IBUFE + XOR A + LD (0CF1EH),A + LD (0CF1FH),A + LD IY,SUMDT + LD HL,0100H + LD (IY+002H),L + LD (IY+003H),H + CALL BREAD ;INFORMATION INPUT + LD HL,IBUFE ;MASTER CHECK + LD DE,IPLMC + LD B,006H +MCHECK: LD C,(HL) + LD A,(DE) + CP C + JP NZ,NMASTE + INC HL + INC DE + DJNZ MCHECK + CALL LDMSG + LD HL,0CF07H + LD E,010H + LD C,00AH + CALL DISP2 + LD IX,IBADR2 + LD HL,(0CF14H) + LD (IY+002H),L + LD (IY+003H),H + CALL BREAD + CALL MOFF + JP NST + +NODISK: LD HL,MES9 + LD E,00AH + LD C,00DH + CALL DISP + JP ERR1 + ; + ; READY CHECK + ; +READY: LD A,(MTFG) + RRCA + CALL NC,MTON + LD A,(DRINO) ;DRIVE NO GET + OR 084H + OUT (DM),A ;DRIVE SELECT MOTON + XOR A + CALL DLY60M + LD HL,L0000 +REDY0: DEC HL + LD A,H + OR L + JR Z,NODISK + RET C + RET C + CPL + RLCA + JR C,REDY0 + LD A,(DRINO) + LD C,A + LD HL,CLBF0 + LD B,000H + ADD HL,BC + BIT 0,(HL) + RET NZ + CALL RCLB + SET 0,(HL) + RET + ; + ; MOTOR ON + ; +MTON: LD A,080H + OUT (DM),A + LD B,00AH ;1SEC DELAY +MTD1: LD HL,03C19H +MTD2: DEC HL + LD A,L + OR H + JR NZ,MTD2 + DJNZ MTD1 + LD A,001H + LD (MTFG),A + RET + ; + ; Track SEEK + ; +SEEK: LD A,01BH + CPL + OUT (CR),A + CALL BUSY + CALL DLY60M + IN A,(CR) + CPL + AND 099H + RET + ; + ;MOTOR OFF + ; +MOFF: CALL DLY1M + XOR A + OUT (DM),A + LD (CLBF0),A + LD (CLBF1),A + LD (CLBF2),A + LD (CLBF3),A + LD (MTFG),A + RET + ; + ; RECALIBRATION + ; +RCLB: PUSH HL + LD A,00BH + CPL + OUT (CR),A + CALL BUSY + CALL DLY60M + IN A,(CR) + CPL + AND 085H + XOR 004H + POP HL + RET Z + JP ERR + ; + ; BUSY AND WAIT + ; +BUSY: PUSH DE + PUSH HL + CALL DLY80U + LD E,007H +BUSY2: LD HL,L0000 +BUSY0: DEC HL + LD A,H + OR L + JR Z,BUSY1 + IN A,(CR) + CPL + RRCA + JR C,BUSY0 + POP HL + POP DE + RET + +BUSY1: DEC E + JR NZ,BUSY2 + JP ERR + ; + ; DATA CHECK + ; +CONVRT: LD B,000H + LD DE,0010H + LD HL,(0CF1EH) + XOR A +TRANS: SBC HL,DE + JR C,TRANS1 + INC B + JR TRANS + +TRANS1: ADD HL,DE + LD H,B + INC L + LD (IY+004H),H + LD (IY+005H),L +DCHK: LD A,(DRINO) + CP 004H + JR NC,DTCK1 + LD A,(IY+004H) + CP 046H + JR NC,DTCK1 + LD A,(IY+005H) + OR A + JR Z,DTCK1 + CP 011H + JR NC,DTCK1 + LD A,(IY+002H) + OR (IY+003H) + RET NZ +DTCK1: JP ERR + ; + ; SEQUENTIAL READ + ; +BREAD: DI + CALL CONVRT + LD A,00AH + LD (RETRY),A +READ1: CALL READY + LD D,(IY+003H) + LD A,(IY+002H) + OR A + JR Z,RE0 + INC D +RE0: LD A,(IY+005H) + LD (IY+001H),A + LD A,(IY+004H) + LD (IY+000H),A + PUSH IX + POP HL +RE8: SRL A + CPL + OUT (DR),A + JR NC,RE1 + LD A,001H + JR RE2 + +RE1: LD A,000H +RE2: CPL + OUT (HS),A + CALL SEEK + JR NZ,REE + LD C,DR + LD A,(IY+000H) + SRL A + CPL + OUT (TR),A + LD A,(IY+001H) + CPL + OUT (SCR),A + EXX + LD HL,RE3 + PUSH HL + EXX + LD A,094H + CPL + OUT (CR),A + CALL WAIT +RE6: LD B,000H +RE4: IN A,(CR) + RRCA + RET C + RRCA + JR C,RE4 + INI + JR NZ,RE4 + INC (IY+001H) + LD A,(IY+001H) + CP 011H + JR Z,RETS + DEC D + JR NZ,RE6 + JR RE5 + +RETS: DEC D +RE5: LD A,CR + CPL + OUT (CR),A + CALL BUSY +RE3: IN A,(CR) + CPL + AND 0FFH + JR NZ,REE + EXX + POP HL + EXX + LD A,(IY+001H) + CP 011H + JR NZ,REX + LD A,001H + LD (IY+001H),A + INC (IY+000H) +REX: LD A,D + OR A + JR NZ,RE7 + LD A,080H + OUT (DM),A + RET + +RE7: LD A,(IY+000H) + JR RE8 + +REE: LD A,(RETRY) + DEC A + LD (RETRY),A + JR Z,ERR + CALL RCLB + JP READ1 + ; + ; WAIT AND BUSY OFF + ; +WAIT: PUSH DE + PUSH HL + CALL DLY80U + LD E,008H +WAIT2: LD HL,L0000 +WAIT0: DEC HL + LD A,H + OR L + JR Z,WAIT1 + IN A,(CR) + CPL + RRCA + JR NC,WAIT0 + POP HL + POP DE + RET + +WAIT1: DEC E + JR NZ,WAIT2 + JR ERR + +NMASTE: LD HL,MES14 + LD E,007H + LD C,01BH + CALL DISP + JR ERR1 + ; + ; ; + ; ERRROR OR BREAK ; + ; ; + ; +ERR: CALL BOOTER +ERR1: CALL MOFF + LD SP,SUMDT +TRYAG: CALL FDCC + JR NZ,TRYAG3 + LD HL,MES10 + LD E,05AH + LD C,00CH + CALL DISP2 + LD E,0ABH + LD C,011H + CALL DISP2 + LD E,0D3H + LD C,00FH + CALL DISP2 +TRYAG1: CALL KEYS1 + BIT 3,A + JP Z,CMT + BIT 6,A + JR Z,DNO + JR TRYAG1 + +DNO: LD HL,MES13 + LD E,00AH + LD C,00FH + CALL DISP +DNO10: LD D,012H + CALL DNO0 + JR NC,DNO3 + LD D,018H + CALL DNO0 + JR NC,DNO3 + JR DNO10 + +DNO3: LD A,B + LD (DRINO),A + JP FD + +TRYAG3: LD HL,MES15 + LD E,054H + LD C,01DH + CALL DISP2 +TRYAG4: LD B,006H +TRYAG5: CALL KEYS + BIT 3,A + JP Z,CMT + JR TRYAG5 + +DNO0: IN A,(PIOA) + AND 0F0H + OR D + OUT (PIOA),A + IN A,(PIOB) + LD B,000H + LD C,004H + RRCA +DNO1: RRCA + RET NC + INC B + DEC C + JR NZ,DNO1 + RET + ; + ; TIME DELAY (1M &60M &80U ) + ; +DLY80U: PUSH DE + LD DE,000DH + JP DLYT + +DLY1M: PUSH DE + LD DE,L0082 + JP DLYT + +DLY60M: PUSH DE + LD DE,01A2CH +DLYT: DEC DE + LD A,E + OR D + JR NZ,DLYT + POP DE + RET + ; + ; + ; ; + ; INTRAM EXROM ; + ; ; + ; +EXROMT: LD HL,IBADR2 + LD IX,EROM1 + JR SEROMA + +EROM1: IN A,(0F9H) + CP 000H + JP NZ,NKIN + LD IX,EROM2 +ERMT1: JR SEROMA + +EROM2: IN A,(0F9H) + LD (HL),A + INC HL + LD A,L + OR H + JR NZ,ERMT1 + OUT (0F8H),A + JP NST + +SEROMA: LD A,H + OUT (0F8H),A + LD A,L + OUT (0F9H),A + LD D,004H +SEROMD: DEC D + JR NZ,SEROMD + JP (IX) + + ; Align to rom size. + DS 0800H - 1 - ($ + 0800H - 1) % 0800H, 0FFh diff --git a/software/asm/MZ800_1Z_013B.asm b/software/asm/mz800_1z_013b.asm similarity index 100% rename from software/asm/MZ800_1Z_013B.asm rename to software/asm/mz800_1z_013b.asm diff --git a/software/asm/MZ800_9Z_504M.asm b/software/asm/mz800_9z_504m.asm similarity index 100% rename from software/asm/MZ800_9Z_504M.asm rename to software/asm/mz800_9z_504m.asm diff --git a/software/asm/MZ800_IOCS.asm b/software/asm/mz800_iocs.asm similarity index 100% rename from software/asm/MZ800_IOCS.asm rename to software/asm/mz800_iocs.asm diff --git a/software/asm/MZ80AFI.asm b/software/asm/mz80afi.asm similarity index 100% rename from software/asm/MZ80AFI.asm rename to software/asm/mz80afi.asm diff --git a/software/asm/MZ80B_IPL.asm b/software/asm/mz80b_ipl.asm similarity index 99% rename from software/asm/MZ80B_IPL.asm rename to software/asm/mz80b_ipl.asm index dacf307..3912dc9 100644 --- a/software/asm/MZ80B_IPL.asm +++ b/software/asm/mz80b_ipl.asm @@ -54,7 +54,7 @@ KEYS: IN A,(PIOA) AND 0F0H OR B OUT (PIOA),A - IN A,(PIOB) ;Read the strobed key. + IN A,(PIOB) ;Read the strobed key. RET ; ; @@ -237,7 +237,7 @@ TM3: CALL SPDIN JR RBY3 ;READ 1 BIT SPDIN: CALL EDGE ;WAIT ON HIGH - RET C ;BREAK + RET C ;BREAK CALL DLY2 IN A,(PPIB) ;READ BIT @@ -823,6 +823,9 @@ SEROMD: DEC D JR NZ,SEROMD JP (IX) + ; Align to ROM size. + DS 0800H - 1 - ($ + 0800H - 1) % 0800H, 0FFh + ;---------------------------------------------------------- ; Variables/Work area ;---------------------------------------------------------- diff --git a/software/asm/SA-5510_TZFS.asm b/software/asm/sa-5510_tzfs.asm similarity index 100% rename from software/asm/SA-5510_TZFS.asm rename to software/asm/sa-5510_tzfs.asm diff --git a/software/asm/SFD700.asm b/software/asm/sfd700.asm similarity index 100% rename from software/asm/SFD700.asm rename to software/asm/sfd700.asm diff --git a/software/dis/MZ2000_IPL/dz80.ini b/software/dis/MZ2000_IPL/dz80.ini new file mode 120000 index 0000000..49e8b82 --- /dev/null +++ b/software/dis/MZ2000_IPL/dz80.ini @@ -0,0 +1 @@ +mz2000_ipl.ini \ No newline at end of file diff --git a/software/dis/MZ2000_IPL/mz2000_ipl.asm b/software/dis/MZ2000_IPL/mz2000_ipl.asm new file mode 100644 index 0000000..b999754 --- /dev/null +++ b/software/dis/MZ2000_IPL/mz2000_ipl.asm @@ -0,0 +1,889 @@ + ;**************************************************************** + ; + ; MZ-2000 Initial Program Loader Firmware. + ; + ; Disassembled with dz80 v2.1 and comments copied from the + ; MZ-80B IPL disassembly. + ; + ;**************************************************************** + ; +CR EQU 0D8H +TR EQU 0D9H +SCR EQU 0DAH +DR EQU 0DBH +DM EQU 0DCH +HS EQU 0DDH +PPIA EQU 0E0H +PPIB EQU 0E1H +PPIC EQU 0E2H +PPICTL EQU 0E3H +PIOA EQU 0E8H +PIOCTLA EQU 0E9H +PIOB EQU 0EAH +PIOCTLB EQU 0EBH +GRPHCTL EQU 0F4H +IBUFE EQU 0CF00H +ATRB EQU 0CF00H +NAME EQU 0CF01H +SIZE EQU 0CF12H +DTADR EQU 0CF14H +SUMDT EQU 0FFE0H +TMCNT EQU 0FFE2H +IBADR1 EQU 0CF00H +IBADR2 EQU 08000H +NTRACK EQU 0FFE0H +NSECT EQU 0FFE1H +BSIZE EQU 0FFE2H +STTR EQU 0FFE4H +STSE EQU 0FFE5H +MTFG EQU 0FFE6H +CLBF0 EQU 0FFE7H +CLBF1 EQU 0FFE8H +CLBF2 EQU 0FFE9H +CLBF3 EQU 0FFEAH +RETRY EQU 0FFEBH +DRINO EQU 0FFECH +PRGSTART EQU 00000H + + ORG PRGSTART + +L0000: JR START + ; + ; NST RESET + ; +NST: LD A,003H ;Set PC1 NST=1 + OUT (PPICTL),A +START: LD A,082H ;8255 A=OUT B=IN C=OUT + OUT (PPICTL),A + LD A,058H ;PIO A=OUT + OUT (PPIC),A + LD SP,SUMDT ;PIO B=IN + LD A,0F7H + OUT (PPIA),A + LD A,00FH + OUT (PIOCTLA),A ;BST=1 NST=0 OPEN=1 WRITE=1 + LD A,0CFH + OUT (PIOCTLB),A + LD A,0FFH + OUT (PIOCTLB),A + XOR A ;Set Graphics VRAM to default, input to GRPH I, no output. + OUT (0F6H),A + OUT (GRPHCTL),A + INC A + OUT (0F7H),A + LD A,007H + OUT (0F5H),A + LD A,0D3H + OUT (PIOA),A + LD HL,0D000H + LD A,CR +CLEAR: LD (HL),000H ; DISPLAY CLEAR + INC HL + CP H + JR NZ,CLEAR + LD A,0FFH + OUT (PPIA),A + LD A,003H + OUT (0F7H),A + CALL L006E + LD A,002H + OUT (0F7H),A + CALL L006E + LD A,001H + OUT (0F7H),A + CALL L006E + LD A,013H + OUT (PIOA),A + XOR A + LD (DRINO),A + LD (MTFG),A +KEYIN: CALL KEYS1 + BIT 3,A ;C - Cassette. + JR Z,CMT + BIT 0,A ;/ - Boot external rom. + JP Z,EXROMT + JR NKIN ;No selection, so standard startup, try FDC then CMT. + +L006E: LD HL,0C000H + DI + IN A,(PIOA) + SET 7,A + RES 6,A + OUT (PIOA),A + LD DE,0C001H + LD (HL),000H + LD BC,03E7FH +L0082: LDIR + RES 7,A + SET 6,A + OUT (PIOA),A + EI + RET + +KEYS1: LD B,014H ;Preserve A4-A7, set A4 to prevent all strobes low, the select line 5 (0-4). +KEYS: IN A,(PIOA) + AND 0F0H + OR B + OUT (PIOA),A + IN A,(PIOB) ;Read the strobed key. + RET + +NKIN: CALL FDCC + JP Z,FD + JR CMT + +FDCC: LD A,0A5H + LD B,A + OUT (TR),A + CALL DLY80U + IN A,(TR) + CP B + RET + ; + ; ; + ; CMT CONTROL ; + ; ; + ; +CMT: CALL MSTOP + CALL KYEMES + CALL RDINF + JR C,ST1 + CALL LDMSG + LD HL,NAME + LD E,010H + LD C,010H + CALL DISP2 + LD A,(IBUFE) + CP 001H + JR NZ,MISMCH + CALL RDDAT +ST1: PUSH AF + CALL FR + POP AF + JP C,TRYAG + JP NST + +MISMCH: LD HL,MES16 + LD E,00AH + LD C,00FH + CALL DISP + CALL MSTOP + SCF + JR ST1 + ; + ;READ INFORMATION + ; CF=1:ERROR +?RDI: +RDINF: DI + IN A,(PPIC) + SET 5,A + OUT (PPIC),A + LD D,004H + LD BC,0080H + LD HL,IBUFE +RD1: CALL MOTOR + JR C,STPEIR + CALL TMARK + JR C,STPEIR + CALL RTAPE + JR C,STPEIR + BIT 3,D + JR Z,EIRTN +STPEIR: CALL MSTOP +EIRTN: EI + RET + ; + ; + ;READ DATA + ; +?RDD: +RDDAT: DI + LD D,008H + LD BC,(0CF12H) + LD HL,IBADR2 + JR RD1 + ; + ; + ;READ TAPE + ; BC=SIZE + ; DE=LOAD ADDRSS +RTAPE: PUSH DE + PUSH BC + PUSH HL + LD H,002H +RTP2: CALL SPDIN + JR C,TRTN1 ; BREAK + JR Z,RTP2 + LD D,H + LD HL,L0000 + LD (SUMDT),HL + POP HL + POP BC + PUSH BC + PUSH HL +RTP3: CALL RBYTE + JR C,TRTN1 + LD (HL),A + INC HL + DEC BC + LD A,B + OR C + JR NZ,RTP3 + LD HL,(SUMDT) + CALL RBYTE + JR C,TRTN1 + LD E,A + CALL RBYTE + JR C,TRTN1 + CP L + JR NZ,RTP5 + LD A,E + CP H + JR Z,TRTN1 +RTP5: DEC D + JR Z,RTP6 + LD H,D + JR RTP2 + +RTP6: CALL BOOTER + SCF +TRTN1: POP HL + POP BC + POP DE + RET + +EDGE: IN A,(PPIB) + CPL + RLCA + RET C ; BREAK + RLCA + JR NC,EDGE ; WAIT ON LOW +L016A: IN A,(PPIB) + CPL + RLCA + RET C ; BREAK + RLCA + JR C,L016A ; WAIT ON HIGH + RET + ; 1 BYTE READ + ; DATA=A + ; SUMDT STORE +RBYTE: PUSH HL + LD HL,00800H ; 8 BITS +RBY1: CALL SPDIN + JR C,RBY3 ; BREAK + JR Z,RBY2 ; BIT=0 + PUSH HL + LD HL,(SUMDT) ;CHECKSUM + INC HL + LD (SUMDT),HL + POP HL + SCF +RBY2: RL L + DEC H + JR NZ,RBY1 + CALL EDGE + LD A,L +RBY3: POP HL + RET + ;TAPE MARK DETECT + ; E=L:INFORMATION + ; E=S:DATA +TMARK: PUSH HL + LD HL,01414H + BIT 3,D + JR NZ,TM0 + ADD HL,HL +TM0: LD (TMCNT),HL +TM1: LD HL,(TMCNT) +TM2: CALL SPDIN + JR C,RBY3 + JR Z,TM1 + DEC H + JR NZ,TM2 +TM3: CALL SPDIN + JR C,RBY3 + JR NZ,TM1 + DEC L + JR NZ,TM3 + CALL EDGE + JR RBY3 + +SPDIN: CALL EDGE ;WAIT ON HIGH + RET C ;BREAK + CALL DLY2 + IN A,(PPIB) ;READ BIT + AND 040H + RET + ; + ; + ;MOTOR ON +MOTOR: PUSH DE + PUSH BC + PUSH HL + IN A,(PPIB) + AND 020H + JR Z,MOTRD + LD HL,MES6 + LD E,00AH + LD C,00EH + CALL DISP + CALL OPEN +MOT1: IN A,(PIOB) + CPL + RLCA + JR C,MOTR + IN A,(PPIB) + AND 020H + JR NZ,MOT1 + CALL KYEMES + CALL DEL1M +MOTRD: CALL PLAY +MOTR: POP HL + POP BC + POP DE + RET + ; + ; + ;MOTOR STOP +MSTOP: LD A,0F7H + OUT (PPIA),A + CALL DEL6 + LD A,0FFH + OUT (PPIA),A + RET + ;EJECT +OPEN: LD A,008H ;Reset PC4 - EJECT activate + OUT (PPICTL),A + CALL DEL6 + LD A,009H + OUT (PPICTL),A ;Set PC4 - Deactivate EJECT + RET + +KYEMES: LD HL,MES3 + LD E,004H + LD C,01CH + CALL DISP + RET + ; + ;PLAY +PLAY: LD A,0FBH + OUT (PPIA),A + CALL DEL6 + LD A,0FFH + OUT (PPIA),A + RET + +FR: LD A,0FEH +FR1: OUT (PPIA),A + CALL DEL6 + LD A,0FFH + OUT (PPIA),A + IN A,(PPIC) + RES 5,A + OUT (PPIC),A + RET + ; + ;TIMING DEL +DM1: PUSH AF +DM1A: XOR A +DM1B: DEC A + JR NZ,DM1B + DEC BC + LD A,B + OR C + JR NZ,DM1A + POP AF + POP BC + RET + +DEL6: PUSH BC + LD BC,RDINF + JR DM1 + +DEL1M: PUSH BC + LD BC,060FH + JR DM1 + ; + ;TAPE DELAY TIMING + ; + ; +DLY2: LD A,031H +DLY2A: DEC A + JP NZ,DLY2A + RET + +LDMSG: LD HL,MES1 + LD E,000H + LD C,00EH + JR DISP + +DISP2: LD A,0D3H + OUT (PIOA),A + JR DISP1 + +BOOTER: LD HL,MES8 + LD E,00AH + LD C,00DH +DISP: LD A,0D3H + OUT (PIOA),A + EXX + LD HL,0D000H + LD A,CR +DISP3: LD (HL),000H + INC HL + CP H + JR NZ,DISP3 + EXX +DISP1: XOR A + LD B,A + LD D,0D0H + LDIR + LD A,013H + OUT (PIOA),A + RET + + ; +MES1: DB "IPL is loading" +MES3: DB "IPL is looking for a program" +MES6: DB "Make ready CMT" +MES8: DB "Loading error" +MES9: DB "Make ready FD" +MES10: DB "Press F or C" +MES11: DB "F:Floppy disk " +MES12: DB "C:Cassette tape" +MES13: DB "Drive No? (1-4)" +MES14: DB "This disk is not master " +MES15: DB "Pressing S key starts the CMT" +MES16: DB "File mode error" + ; +IPLMC: DB 01H + DB "IPLPRO" + + ; + ; + ;FD +FD: LD IX,IBUFE + XOR A + LD (0CF1EH),A + LD (0CF1FH),A + LD IY,SUMDT + LD HL,0100H + LD (IY+002H),L + LD (IY+003H),H + CALL BREAD ;INFORMATION INPUT + LD HL,IBUFE ;MASTER CHECK + LD DE,IPLMC + LD B,006H +MCHECK: LD C,(HL) + LD A,(DE) + CP C + JP NZ,NMASTE + INC HL + INC DE + DJNZ MCHECK + CALL LDMSG + LD HL,0CF07H + LD E,010H + LD C,00AH + CALL DISP2 + LD IX,IBADR2 + LD HL,(0CF14H) + LD (IY+002H),L + LD (IY+003H),H + CALL BREAD + CALL MOFF + JP NST + +NODISK: LD HL,MES9 + LD E,00AH + LD C,00DH + CALL DISP + JP ERR1 + ; + ; READY CHECK + ; +READY: LD A,(MTFG) + RRCA + CALL NC,MTON + LD A,(DRINO) ;DRIVE NO GET + OR 084H + OUT (DM),A ;DRIVE SELECT MOTON + XOR A + CALL DLY60M + LD HL,L0000 +REDY0: DEC HL + LD A,H + OR L + JR Z,NODISK + RET C + RET C + CPL + RLCA + JR C,REDY0 + LD A,(DRINO) + LD C,A + LD HL,CLBF0 + LD B,000H + ADD HL,BC + BIT 0,(HL) + RET NZ + CALL RCLB + SET 0,(HL) + RET + ; + ; MOTOR ON + ; +MTON: LD A,080H + OUT (DM),A + LD B,00AH ;1SEC DELAY +MTD1: LD HL,03C19H +MTD2: DEC HL + LD A,L + OR H + JR NZ,MTD2 + DJNZ MTD1 + LD A,001H + LD (MTFG),A + RET + ; + ; Track SEEK + ; +SEEK: LD A,01BH + CPL + OUT (CR),A + CALL BUSY + CALL DLY60M + IN A,(CR) + CPL + AND 099H + RET + ; + ;MOTOR OFF + ; +MOFF: CALL DLY1M + XOR A + OUT (DM),A + LD (CLBF0),A + LD (CLBF1),A + LD (CLBF2),A + LD (CLBF3),A + LD (MTFG),A + RET + ; + ; RECALIBRATION + ; +RCLB: PUSH HL + LD A,00BH + CPL + OUT (CR),A + CALL BUSY + CALL DLY60M + IN A,(CR) + CPL + AND 085H + XOR 004H + POP HL + RET Z + JP ERR + ; + ; BUSY AND WAIT + ; +BUSY: PUSH DE + PUSH HL + CALL DLY80U + LD E,007H +BUSY2: LD HL,L0000 +BUSY0: DEC HL + LD A,H + OR L + JR Z,BUSY1 + IN A,(CR) + CPL + RRCA + JR C,BUSY0 + POP HL + POP DE + RET + +BUSY1: DEC E + JR NZ,BUSY2 + JP ERR + ; + ; DATA CHECK + ; +CONVRT: LD B,000H + LD DE,0010H + LD HL,(0CF1EH) + XOR A +TRANS: SBC HL,DE + JR C,TRANS1 + INC B + JR TRANS + +TRANS1: ADD HL,DE + LD H,B + INC L + LD (IY+004H),H + LD (IY+005H),L +DCHK: LD A,(DRINO) + CP 004H + JR NC,DTCK1 + LD A,(IY+004H) + CP 046H + JR NC,DTCK1 + LD A,(IY+005H) + OR A + JR Z,DTCK1 + CP 011H + JR NC,DTCK1 + LD A,(IY+002H) + OR (IY+003H) + RET NZ +DTCK1: JP ERR + ; + ; SEQUENTIAL READ + ; +BREAD: DI + CALL CONVRT + LD A,00AH + LD (RETRY),A +READ1: CALL READY + LD D,(IY+003H) + LD A,(IY+002H) + OR A + JR Z,RE0 + INC D +RE0: LD A,(IY+005H) + LD (IY+001H),A + LD A,(IY+004H) + LD (IY+000H),A + PUSH IX + POP HL +RE8: SRL A + CPL + OUT (DR),A + JR NC,RE1 + LD A,001H + JR RE2 + +RE1: LD A,000H +RE2: CPL + OUT (HS),A + CALL SEEK + JR NZ,REE + LD C,DR + LD A,(IY+000H) + SRL A + CPL + OUT (TR),A + LD A,(IY+001H) + CPL + OUT (SCR),A + EXX + LD HL,RE3 + PUSH HL + EXX + LD A,094H + CPL + OUT (CR),A + CALL WAIT +RE6: LD B,000H +RE4: IN A,(CR) + RRCA + RET C + RRCA + JR C,RE4 + INI + JR NZ,RE4 + INC (IY+001H) + LD A,(IY+001H) + CP 011H + JR Z,RETS + DEC D + JR NZ,RE6 + JR RE5 + +RETS: DEC D +RE5: LD A,CR + CPL + OUT (CR),A + CALL BUSY +RE3: IN A,(CR) + CPL + AND 0FFH + JR NZ,REE + EXX + POP HL + EXX + LD A,(IY+001H) + CP 011H + JR NZ,REX + LD A,001H + LD (IY+001H),A + INC (IY+000H) +REX: LD A,D + OR A + JR NZ,RE7 + LD A,080H + OUT (DM),A + RET + +RE7: LD A,(IY+000H) + JR RE8 + +REE: LD A,(RETRY) + DEC A + LD (RETRY),A + JR Z,ERR + CALL RCLB + JP READ1 + ; + ; WAIT AND BUSY OFF + ; +WAIT: PUSH DE + PUSH HL + CALL DLY80U + LD E,008H +WAIT2: LD HL,L0000 +WAIT0: DEC HL + LD A,H + OR L + JR Z,WAIT1 + IN A,(CR) + CPL + RRCA + JR NC,WAIT0 + POP HL + POP DE + RET + +WAIT1: DEC E + JR NZ,WAIT2 + JR ERR + +NMASTE: LD HL,MES14 + LD E,007H + LD C,01BH + CALL DISP + JR ERR1 + ; + ; ; + ; ERRROR OR BREAK ; + ; ; + ; +ERR: CALL BOOTER +ERR1: CALL MOFF + LD SP,SUMDT +TRYAG: CALL FDCC + JR NZ,TRYAG3 + LD HL,MES10 + LD E,05AH + LD C,00CH + CALL DISP2 + LD E,0ABH + LD C,011H + CALL DISP2 + LD E,0D3H + LD C,00FH + CALL DISP2 +TRYAG1: CALL KEYS1 + BIT 3,A + JP Z,CMT + BIT 6,A + JR Z,DNO + JR TRYAG1 + +DNO: LD HL,MES13 + LD E,00AH + LD C,00FH + CALL DISP +DNO10: LD D,012H + CALL DNO0 + JR NC,DNO3 + LD D,018H + CALL DNO0 + JR NC,DNO3 + JR DNO10 + +DNO3: LD A,B + LD (DRINO),A + JP FD + +TRYAG3: LD HL,MES15 + LD E,054H + LD C,01DH + CALL DISP2 +TRYAG4: LD B,006H +TRYAG5: CALL KEYS + BIT 3,A + JP Z,CMT + JR TRYAG5 + +DNO0: IN A,(PIOA) + AND 0F0H + OR D + OUT (PIOA),A + IN A,(PIOB) + LD B,000H + LD C,004H + RRCA +DNO1: RRCA + RET NC + INC B + DEC C + JR NZ,DNO1 + RET + ; + ; TIME DELAY (1M &60M &80U ) + ; +DLY80U: PUSH DE + LD DE,000DH + JP DLYT + +DLY1M: PUSH DE + LD DE,L0082 + JP DLYT + +DLY60M: PUSH DE + LD DE,01A2CH +DLYT: DEC DE + LD A,E + OR D + JR NZ,DLYT + POP DE + RET + ; + ; + ; ; + ; INTRAM EXROM ; + ; ; + ; +EXROMT: LD HL,IBADR2 + LD IX,EROM1 + JR SEROMA + +EROM1: IN A,(0F9H) + CP 000H + JP NZ,NKIN + LD IX,EROM2 +ERMT1: JR SEROMA + +EROM2: IN A,(0F9H) + LD (HL),A + INC HL + LD A,L + OR H + JR NZ,ERMT1 + OUT (0F8H),A + JP NST + +SEROMA: LD A,H + OUT (0F8H),A + LD A,L + OUT (0F9H),A + LD D,004H +SEROMD: DEC D + JR NZ,SEROMD + JP (IX) + diff --git a/software/dis/MZ2000_IPL/mz2000_ipl.ini b/software/dis/MZ2000_IPL/mz2000_ipl.ini new file mode 100644 index 0000000..b16c60e --- /dev/null +++ b/software/dis/MZ2000_IPL/mz2000_ipl.ini @@ -0,0 +1,264 @@ +---------------------------------------- +-- dZ80 configuration file +---------------------------------------- + +---------------------------------------- +-- Disassembly control +---------------------------------------- + +cpu="z80" +inputfile="mz2000_ipl.rom" +outputfile="mz2000_ipl.asm" +--fileheadersize=27 +filebaseaddr=0 +disstart=0 +disend=1606 +--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="mz2000_ipl.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(0, 1606) + +-- 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("0289"), 218) + +d_SetStringRegion( hex("0289"), 13) +d_SetStringRegion( hex("0297"), 27) +d_SetStringRegion( hex("02B3"), 13) +d_SetStringRegion( hex("02C1"), 12) +d_SetStringRegion( hex("02CE"), 12) +d_SetStringRegion( hex("02DB"), 11) +d_SetStringRegion( hex("02E7"), 31) +d_SetStringRegion( hex("0307"), 14) +d_SetStringRegion( hex("0316"), 22) +d_SetStringRegion( hex("032D"), 3) +d_SetStringRegion( hex("0331"), 28) +d_SetStringRegion( hex("034E"), 14) +d_SetStringRegion( hex("035D"), 7) + +-- 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("0002"), 1, "NST" ) +d_SetWordEquate(hex("0006"), 1, "START" ) + +d_SetWordEquate(hex("0036"), 1, "CLEAR" ) +d_SetWordEquate(hex("0060"), 1, "KEYIN" ) +d_SetWordEquate(hex("008C"), 1, "KEYS1" ) +d_SetWordEquate(hex("008E"), 1, "KEYS" ) +d_SetWordEquate(hex("0098"), 1, "NKIN" ) +d_SetWordEquate(hex("00A0"), 1, "FDCC" ) +d_SetWordEquate(hex("0364"), 1, "FD" ) +d_SetWordEquate(hex("00AC"), 1, "CMT" ) +d_SetWordEquate(hex("00CE"), 1, "ST1" ) +d_SetWordEquate(hex("00D9"), 1, "MISMCH" ) +d_SetWordEquate(hex("026D"), 1, "DISP" ) +d_SetWordEquate(hex("01F6"), 1, "MSTOP" ) +d_SetWordEquate(hex("00E9"), 1, "RDINF" ) +d_SetWordEquate(hex("00F8"), 1, "RD1" ) +d_SetWordEquate(hex("01C7"), 1, "MOTOR" ) +d_SetWordEquate(hex("0193"), 1, "TMARK" ) +d_SetWordEquate(hex("010B"), 1, "STPEIR" ) +d_SetWordEquate(hex("010E"), 1, "EIRTN" ) +d_SetWordEquate(hex("0110"), 1, "RDDAT" ) +d_SetWordEquate(hex("011C"), 1, "RTAPE" ) +d_SetWordEquate(hex("0121"), 1, "RTP2" ) +d_SetWordEquate(hex("01BB"), 1, "SPDIN" ) +d_SetWordEquate(hex("015E"), 1, "TRTN1" ) +d_SetWordEquate(hex("0121"), 1, "RTP2" ) +d_SetWordEquate(hex("0133"), 1, "RTP3" ) +d_SetWordEquate(hex("0173"), 1, "RBYTE" ) +d_SetWordEquate(hex("0154"), 1, "RTP5" ) +d_SetWordEquate(hex("015A"), 1, "RTP6" ) +d_SetWordEquate(hex("0266"), 1, "BOOTER" ) +d_SetWordEquate(hex("0162"), 1, "EDGE" ) +d_SetWordEquate(hex("0177"), 1, "RBY1" ) +d_SetWordEquate(hex("0188"), 1, "RBY2" ) +d_SetWordEquate(hex("0191"), 1, "RBY3" ) +d_SetWordEquate(hex("019C"), 1, "TM0" ) +d_SetWordEquate(hex("019F"), 1, "TM1" ) +d_SetWordEquate(hex("01A2"), 1, "TM2" ) +d_SetWordEquate(hex("01AC"), 1, "TM3" ) +d_SetWordEquate(hex("01DD"), 1, "MOT1" ) +d_SetWordEquate(hex("01EF"), 1, "MOTRD" ) +d_SetWordEquate(hex("01F2"), 1, "MOTR" ) +d_SetWordEquate(hex("0202"), 1, "OPEN" ) +d_SetWordEquate(hex("020E"), 1, "KYEMES" ) +d_SetWordEquate(hex("0219"), 1, "PLAY" ) +d_SetWordEquate(hex("0237"), 1, "DM1" ) +d_SetWordEquate(hex("0238"), 1, "DM1A" ) +d_SetWordEquate(hex("0239"), 1, "DM1B" ) +d_SetWordEquate(hex("0244"), 1, "DEL6" ) +d_SetWordEquate(hex("024A"), 1, "DEL1M" ) +d_SetWordEquate(hex("0250"), 1, "DLY2" ) +d_SetWordEquate(hex("0252"), 1, "DLY2A" ) +d_SetWordEquate(hex("0257"), 1, "LDMSG" ) +d_SetWordEquate(hex("027E"), 1, "DISP1" ) +d_SetWordEquate(hex("0260"), 1, "DISP2" ) +d_SetWordEquate(hex("0277"), 1, "DISP3" ) +d_SetWordEquate(hex("0289"), 1, "MES1" ) +d_SetWordEquate(hex("0297"), 1, "MES3" ) +d_SetWordEquate(hex("02B3"), 1, "MES6" ) +d_SetWordEquate(hex("02C1"), 1, "MES8" ) +d_SetWordEquate(hex("02CE"), 1, "MES9" ) +d_SetWordEquate(hex("02DB"), 1, "MES10" ) +d_SetWordEquate(hex("0307"), 1, "MES13" ) +d_SetWordEquate(hex("0316"), 1, "MES14" ) +d_SetWordEquate(hex("034E"), 1, "MES16" ) +d_SetWordEquate(hex("035D"), 1, "IPLMC" ) +d_SetWordEquate(hex("0387"), 1, "MCHECK" ) +d_SetWordEquate(hex("03B4"), 1, "NODISK" ) +d_SetWordEquate(hex("03C1"), 1, "READY" ) +d_SetWordEquate(hex("03D6"), 1, "REDY0" ) +d_SetWordEquate(hex("03F4"), 1, "MTON" ) +d_SetWordEquate(hex("03FA"), 1, "MTD1" ) +d_SetWordEquate(hex("03FD"), 1, "MTD2" ) +d_SetWordEquate(hex("040A"), 1, "SEEK" ) +d_SetWordEquate(hex("041B"), 1, "MOFF" ) +d_SetWordEquate(hex("0431"), 1, "RCLB" ) +d_SetWordEquate(hex("0449"), 1, "BUSY" ) +d_SetWordEquate(hex("0450"), 1, "BUSY2" ) +d_SetWordEquate(hex("0453"), 1, "BUSY0" ) +d_SetWordEquate(hex("0461"), 1, "BUSY1" ) +d_SetWordEquate(hex("0467"), 1, "CONVRT" ) +d_SetWordEquate(hex("0470"), 1, "TRANS" ) +d_SetWordEquate(hex("0477"), 1, "TRANS1" ) +d_SetWordEquate(hex("0480"), 1, "DCHK" ) +d_SetWordEquate(hex("049F"), 1, "DTCK1" ) +d_SetWordEquate(hex("04A2"), 1, "BREAD" ) +d_SetWordEquate(hex("04AB"), 1, "READ1" ) +d_SetWordEquate(hex("04B8"), 1, "RE0" ) +d_SetWordEquate(hex("04C7"), 1, "RE8" ) +d_SetWordEquate(hex("04D2"), 1, "RE1" ) +d_SetWordEquate(hex("04D4"), 1, "RE2" ) +d_SetWordEquate(hex("04FA"), 1, "RE6" ) +d_SetWordEquate(hex("04FC"), 1, "RE4" ) +d_SetWordEquate(hex("0516"), 1, "RETS" ) +d_SetWordEquate(hex("0517"), 1, "RE5" ) +d_SetWordEquate(hex("051F"), 1, "RE3" ) +d_SetWordEquate(hex("0538"), 1, "REX" ) +d_SetWordEquate(hex("0541"), 1, "RE7" ) +d_SetWordEquate(hex("0546"), 1, "REE" ) +d_SetWordEquate(hex("0555"), 1, "WAIT" ) +d_SetWordEquate(hex("055C"), 1, "WAIT2" ) +d_SetWordEquate(hex("055F"), 1, "WAIT0" ) +d_SetWordEquate(hex("056D"), 1, "WAIT1" ) +d_SetWordEquate(hex("0572"), 1, "NMASTE" ) +d_SetWordEquate(hex("057E"), 1, "ERR" ) +d_SetWordEquate(hex("0581"), 1, "ERR1" ) +d_SetWordEquate(hex("0583"), 1, "TRYAG2" ) +d_SetWordEquate(hex("0587"), 1, "TRYAG" ) +d_SetWordEquate(hex("05A4"), 1, "TRYAG1" ) +d_SetWordEquate(hex("05B2"), 1, "DNO" ) +d_SetWordEquate(hex("05BC"), 1, "DNO10" ) +d_SetWordEquate(hex("05CC"), 1, "DNO3" ) +d_SetWordEquate(hex("05D3"), 1, "TRYAG3" ) +d_SetWordEquate(hex("05DD"), 1, "TRYAG4" ) +d_SetWordEquate(hex("05DF"), 1, "TRYAG5" ) +d_SetWordEquate(hex("0331"), 1, "MES15" ) +d_SetWordEquate(hex("05E9"), 1, "DNO0" ) +d_SetWordEquate(hex("05F7"), 1, "DNO1" ) +d_SetWordEquate(hex("05FE"), 1, "DLY80U" ) +d_SetWordEquate(hex("0605"), 1, "DLY1M" ) +d_SetWordEquate(hex("060C"), 1, "DLY60M" ) +d_SetWordEquate(hex("0610"), 1, "DLYT" ) +d_SetWordEquate(hex("0617"), 1, "EXROMT" ) +d_SetWordEquate(hex("0620"), 1, "EROM1" ) +d_SetWordEquate(hex("062B"), 1, "ERMT1" ) +d_SetWordEquate(hex("062D"), 1, "EROM2" ) +d_SetWordEquate(hex("063A"), 1, "SEROMA" ) +d_SetWordEquate(hex("0642"), 1, "SEROMD" ) + +d_SetWordEquate(hex("CF00"), 1, "IBUFE" ) +d_SetWordEquate(hex("CF00"), 1, "ATRB" ) +d_SetWordEquate(hex("CF01"), 1, "NAME" ) +d_SetWordEquate(hex("CF12"), 1, "SIZE" ) +d_SetWordEquate(hex("CF14"), 1, "DTADR" ) +d_SetWordEquate(hex("FFE0"), 1, "SUMDT" ) +d_SetWordEquate(hex("FFE2"), 1, "TMCNT" ) +d_SetWordEquate(hex("CF00"), 1, "IBADR1" ) +d_SetWordEquate(hex("8000"), 1, "IBADR2" ) +d_SetWordEquate(hex("FFE0"), 1, "NTRACK" ) +d_SetWordEquate(hex("FFE1"), 1, "NSECT" ) +d_SetWordEquate(hex("FFE2"), 1, "BSIZE" ) +d_SetWordEquate(hex("FFE4"), 1, "STTR" ) +d_SetWordEquate(hex("FFE5"), 1, "STSE" ) +d_SetWordEquate(hex("FFE6"), 1, "MTFG" ) +d_SetWordEquate(hex("FFE7"), 1, "CLBF0" ) +d_SetWordEquate(hex("FFE8"), 1, "CLBF1" ) +d_SetWordEquate(hex("FFE9"), 1, "CLBF2" ) +d_SetWordEquate(hex("FFEA"), 1, "CLBF3" ) +d_SetWordEquate(hex("FFEB"), 1, "RETRY" ) +d_SetWordEquate(hex("FFEC"), 1, "DRINO" ) +d_SetByteEquate(hex("D8"), 1, "CR" ) +d_SetByteEquate(hex("D9"), 1, "TR" ) +d_SetByteEquate(hex("DA"), 1, "SCR" ) +d_SetByteEquate(hex("DB"), 1, "DR" ) +d_SetByteEquate(hex("DC"), 1, "DM" ) +d_SetByteEquate(hex("DD"), 1, "HS" ) +d_SetByteEquate(hex("E0"), 1, "PPIA" ) +d_SetByteEquate(hex("E1"), 1, "PPIB" ) +d_SetByteEquate(hex("E2"), 1, "PPIC" ) +d_SetByteEquate(hex("E3"), 1, "PPICTL" ) +d_SetByteEquate(hex("E8"), 1, "PIOA" ) +d_SetByteEquate(hex("E9"), 1, "PIOCTLA" ) +d_SetByteEquate(hex("EA"), 1, "PIOB" ) +d_SetByteEquate(hex("EB"), 1, "PIOCTLB" ) +d_SetByteEquate(hex("F4"), 1, "GRPHCTL" ) + +-- 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." ) + +---------------------------------------- +-- End of configuration file +---------------------------------------- diff --git a/software/dis/MZ2000_IPL/mz2000_ipl.ref b/software/dis/MZ2000_IPL/mz2000_ipl.ref new file mode 100644 index 0000000..04d8f3d --- /dev/null +++ b/software/dis/MZ2000_IPL/mz2000_ipl.ref @@ -0,0 +1,466 @@ +dZ80 2.1 Reference file from the disassembly of "mz2000_ipl.rom". + +Input Port Reference (22 entries) +--------------------------------- + +Input Port 000d8H. 6 references: +-------------------------------- + + 00415H: IN A,(0D8H) + 0043dH: IN A,(0D8H) + 00458H: IN A,(0D8H) + 004fcH: IN A,(0D8H) + 0051fH: IN A,(0D8H) + 00564H: IN A,(0D8H) + +Input Port 000d9H. 1 references: +-------------------------------- + + 000a8H: IN A,(0D9H) + +Input Port 000e1H. 5 references: +-------------------------------- + + 00162H: IN A,(0E1H) + 0016aH: IN A,(0E1H) + 001c2H: IN A,(0E1H) + 001caH: IN A,(0E1H) + 001e3H: IN A,(0E1H) + +Input Port 000e2H. 2 references: +-------------------------------- + + 000eaH: IN A,(0E2H) + 00230H: IN A,(0E2H) + +Input Port 000e8H. 3 references: +-------------------------------- + + 00072H: IN A,(0E8H) + 0008eH: IN A,(0E8H) + 005e9H: IN A,(0E8H) + +Input Port 000eaH. 3 references: +-------------------------------- + + 00095H: IN A,(0EAH) + 001ddH: IN A,(0EAH) + 005f0H: IN A,(0EAH) + +Input Port 000f9H. 2 references: +-------------------------------- + + 00620H: IN A,(0F9H) + 0062dH: IN A,(0F9H) + + +Output Port Reference (50 entries) +---------------------------------- + +Output Port 000d8H. 4 references: +--------------------------------- + + 0040dH: OUT (0D8H),A + 00435H: OUT (0D8H),A + 004f5H: OUT (0D8H),A + 0051aH: OUT (0D8H),A + +Output Port 000d9H. 2 references: +--------------------------------- + + 000a3H: OUT (0D9H),A + 004e4H: OUT (0D9H),A + +Output Port 000daH. 1 references: +--------------------------------- + + 004eaH: OUT (0DAH),A + +Output Port 000dbH. 1 references: +--------------------------------- + + 004caH: OUT (0DBH),A + +Output Port 000dcH. 4 references: +--------------------------------- + + 003cdH: OUT (0DCH),A + 003f6H: OUT (0DCH),A + 0041fH: OUT (0DCH),A + 0053eH: OUT (0DCH),A + +Output Port 000ddH. 1 references: +--------------------------------- + + 004d5H: OUT (0DDH),A + +Output Port 000e0H. 8 references: +--------------------------------- + + 00013H: OUT (0E0H),A + 0003eH: OUT (0E0H),A + 001f8H: OUT (0E0H),A + 001ffH: OUT (0E0H),A + 0021bH: OUT (0E0H),A + 00222H: OUT (0E0H),A + 00227H: OUT (0E0H),A + 0022eH: OUT (0E0H),A + +Output Port 000e2H. 3 references: +--------------------------------- + + 0000cH: OUT (0E2H),A + 000eeH: OUT (0E2H),A + 00234H: OUT (0E2H),A + +Output Port 000e3H. 4 references: +--------------------------------- + + 00004H: OUT (0E3H),A + 00008H: OUT (0E3H),A + 00204H: OUT (0E3H),A + 0020bH: OUT (0E3H),A + +Output Port 000e8H. 9 references: +--------------------------------- + + 0002fH: OUT (0E8H),A + 00057H: OUT (0E8H),A + 00078H: OUT (0E8H),A + 00088H: OUT (0E8H),A + 00093H: OUT (0E8H),A + 00262H: OUT (0E8H),A + 0026fH: OUT (0E8H),A + 00286H: OUT (0E8H),A + 005eeH: OUT (0E8H),A + +Output Port 000e9H. 1 references: +--------------------------------- + + 00017H: OUT (0E9H),A + +Output Port 000ebH. 2 references: +--------------------------------- + + 0001bH: OUT (0EBH),A + 0001fH: OUT (0EBH),A + +Output Port 000f4H. 1 references: +--------------------------------- + + 00024H: OUT (0F4H),A + +Output Port 000f5H. 1 references: +--------------------------------- + + 0002bH: OUT (0F5H),A + +Output Port 000f6H. 1 references: +--------------------------------- + + 00022H: OUT (0F6H),A + +Output Port 000f7H. 4 references: +--------------------------------- + + 00027H: OUT (0F7H),A + 00042H: OUT (0F7H),A + 00049H: OUT (0F7H),A + 00050H: OUT (0F7H),A + +Output Port 000f8H. 2 references: +--------------------------------- + + 00635H: OUT (0F8H),A + 0063bH: OUT (0F8H),A + +Output Port 000f9H. 1 references: +--------------------------------- + + 0063eH: OUT (0F9H),A + + +Direct address Reference (47 entries) +------------------------------------- + +Direct address 00000H. 4 references: +------------------------------------ + + 00129H: LD HL,00000H + 003d3H: LD HL,00000H + 00450H: LD HL,00000H + 0055cH: LD HL,00000H + +Direct address 0000dH. 1 references: +------------------------------------ + + 005ffH: LD DE,0000DH + +Direct address 00010H. 1 references: +------------------------------------ + + 00469H: LD DE,00010H + +Direct address 00080H. 1 references: +------------------------------------ + + 000f2H: LD BC,00080H + +Direct address 00082H. 1 references: +------------------------------------ + + 00606H: LD DE,00082H + +Direct address 000e9H. 1 references: +------------------------------------ + + 00245H: LD BC,000E9H + +Direct address 00100H. 1 references: +------------------------------------ + + 00373H: LD HL,00100H + +Direct address 00289H. 1 references: +------------------------------------ + + 00257H: LD HL,00289H + +Direct address 00297H. 1 references: +------------------------------------ + + 0020eH: LD HL,00297H + +Direct address 002b3H. 1 references: +------------------------------------ + + 001d0H: LD HL,002B3H + +Direct address 002c1H. 1 references: +------------------------------------ + + 00266H: LD HL,002C1H + +Direct address 002ceH. 1 references: +------------------------------------ + + 003b4H: LD HL,002CEH + +Direct address 002dbH. 1 references: +------------------------------------ + + 0058cH: LD HL,002DBH + +Direct address 00307H. 1 references: +------------------------------------ + + 005b2H: LD HL,00307H + +Direct address 00316H. 1 references: +------------------------------------ + + 00572H: LD HL,00316H + +Direct address 00331H. 1 references: +------------------------------------ + + 005d3H: LD HL,00331H + +Direct address 0034eH. 1 references: +------------------------------------ + + 000d9H: LD HL,0034EH + +Direct address 0035dH. 1 references: +------------------------------------ + + 00382H: LD DE,0035DH + +Direct address 0051fH. 1 references: +------------------------------------ + + 004edH: LD HL,0051FH + +Direct address 0060fH. 1 references: +------------------------------------ + + 0024bH: LD BC,0060FH + +Direct address 00620H. 1 references: +------------------------------------ + + 0061aH: LD IX,00620H + +Direct address 0062dH. 1 references: +------------------------------------ + + 00627H: LD IX,0062DH + +Direct address 00800H. 1 references: +------------------------------------ + + 00174H: LD HL,00800H + +Direct address 01414H. 1 references: +------------------------------------ + + 00194H: LD HL,01414H + +Direct address 01a2cH. 1 references: +------------------------------------ + + 0060dH: LD DE,01A2CH + +Direct address 03c19H. 1 references: +------------------------------------ + + 003faH: LD HL,03C19H + +Direct address 03e7fH. 1 references: +------------------------------------ + + 0007fH: LD BC,03E7FH + +Direct address 08000H. 3 references: +------------------------------------ + + 00117H: LD HL,08000H + 0039eH: LD IX,08000H + 00617H: LD HL,08000H + +Direct address 0c000H. 1 references: +------------------------------------ + + 0006eH: LD HL,0C000H + +Direct address 0c001H. 1 references: +------------------------------------ + + 0007aH: LD DE,0C001H + +Direct address 0cf00H. 3 references: +------------------------------------ + + 000f5H: LD HL,0CF00H + 00364H: LD IX,0CF00H + 0037fH: LD HL,0CF00H + +Direct address 0cf01H. 1 references: +------------------------------------ + + 000baH: LD HL,0CF01H + +Direct address 0cf07H. 1 references: +------------------------------------ + + 00394H: LD HL,0CF07H + +Direct address 0cf12H. 1 references: +------------------------------------ + + 00113H: LD BC,(0CF12H) + +Direct address 0d000H. 2 references: +------------------------------------ + + 00031H: LD HL,0D000H + 00272H: LD HL,0D000H + +Direct address 0ffe0H. 3 references: +------------------------------------ + + 0000eH: LD SP,0FFE0H + 0036fH: LD IY,0FFE0H + 00584H: LD SP,0FFE0H + +Direct address 0ffe7H. 1 references: +------------------------------------ + + 003e5H: LD HL,0FFE7H + + +Indirect address Reference (27 entries) +--------------------------------------- + +Indirect address 0cf00H. 1 references: +-------------------------------------- + + 000c4H: LD A,(0CF00H) + +Indirect address 0cf14H. 1 references: +-------------------------------------- + + 003a2H: LD HL,(0CF14H) + +Indirect address 0cf1eH. 2 references: +-------------------------------------- + + 00369H: LD (0CF1EH),A + 0046cH: LD HL,(0CF1EH) + +Indirect address 0cf1fH. 1 references: +-------------------------------------- + + 0036cH: LD (0CF1FH),A + +Indirect address 0ffe0H. 4 references: +-------------------------------------- + + 0012cH: LD (0FFE0H),HL + 0013fH: LD HL,(0FFE0H) + 0017fH: LD HL,(0FFE0H) + 00183H: LD (0FFE0H),HL + +Indirect address 0ffe2H. 2 references: +-------------------------------------- + + 0019cH: LD (0FFE2H),HL + 0019fH: LD HL,(0FFE2H) + +Indirect address 0ffe6H. 4 references: +-------------------------------------- + + 0005dH: LD (0FFE6H),A + 003c1H: LD A,(0FFE6H) + 00406H: LD (0FFE6H),A + 0042dH: LD (0FFE6H),A + +Indirect address 0ffe7H. 1 references: +-------------------------------------- + + 00421H: LD (0FFE7H),A + +Indirect address 0ffe8H. 1 references: +-------------------------------------- + + 00424H: LD (0FFE8H),A + +Indirect address 0ffe9H. 1 references: +-------------------------------------- + + 00427H: LD (0FFE9H),A + +Indirect address 0ffeaH. 1 references: +-------------------------------------- + + 0042aH: LD (0FFEAH),A + +Indirect address 0ffebH. 3 references: +-------------------------------------- + + 004a8H: LD (0FFEBH),A + 00546H: LD A,(0FFEBH) + 0054aH: LD (0FFEBH),A + +Indirect address 0ffecH. 5 references: +-------------------------------------- + + 0005aH: LD (0FFECH),A + 003c8H: LD A,(0FFECH) + 003e1H: LD A,(0FFECH) + 00480H: LD A,(0FFECH) + 005cdH: LD (0FFECH),A + + +End of reference file for "mz2000_ipl.rom" + diff --git a/software/dis/MZ2000_IPL/mz2000_ipl.rom b/software/dis/MZ2000_IPL/mz2000_ipl.rom new file mode 100644 index 0000000000000000000000000000000000000000..90e05c2fcdf084689f8da676d3ed843e056ee0ec GIT binary patch literal 2048 zcmeHH>rWI{6uSy*9~Rlreny(7_#s9D$;-4Gp{V3*kXAeKI2(&!pirHD&**P>M^ znl??7reE5m?YG9nPc~U=AGE1WK|<{~xn0dI&8`Cpi&sCc@sV%?jeGnMW=zv<_(iKD{v;}ov^$k7Wx3_N0jIF`a3HHsY(XjQ$|L&^e&un zG2Pn%^R_y9UH?g+#hC?7C^a%8kFMj4F{Yu!}_0ixSVG? zfehm4Hsce~M~tr!tzmq;epum1+=4b$UNHIM^0*8-rGfsw^hOr_!1#R1e4`A&`XMXT z)0ajO#<#J(a@pB0;dIrIMYk)D(68%9$e+KdILZ|6m~xZqXVT*>2DcKD$OIJg1Vk=o4 zW2E27CxIGRBQ^4zMoJ|XD(mF0SaNKU9-C#2F^}Enqz*VunR|gnt5{kSZ8F-!(gtd3 z0e(Q&h4_Icf5N(XaScIh>cWzc+_N=dF@}e=nbc)7`>Y#?qEt*JBS~@(t!im{OsZgM)`SgiryHE?+ z!Q-JY48XQ<=tMZsxlXR)~ zlC5^ca{e~W)lOL1ckn3E~xis{~ZJR~_AAMtSp$jg*(; zt0l98&-treW{0gyS(bBE+szKv{Fdt`&?$6+R~_DQ3-xg3D;#ljDNHGeG}{>hGuy#n zI;HRSV56E>8HrVa2M;0#58n_Cvjb31((GV7_tGvV~jPhNpD z<~EXx$+;9;861(AGBuGuBxS;aFqxt$axPe)GW56Gz*}9=MtRi8FQiMg@kTof$jqWUQpQjuKFx$R;F>7K-q89`b~rY;$GuwFJ;_hGS!^xb_;bWwxJ06WSq z&d@tw0KHvdrN3nRKZC7&IU2Q97nV!Zu+pQmWaRcXadHjkZWPxNpdg?R$@nEuDN9G| z4LVu{Ao5P" + 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 0000000000000000000000000000000000000000..14c0ce305d04356b557d51c825742c3556f3207a GIT binary patch literal 3280 zcmc&$eQX=$89zIT6E|_%vz_|#A@tr|fveNjj-${c>n`NOiIcSU)jlUq0&J*iLk6sT zNK3j>tJO9%5UbQuzO*rQLX1h(a7v*DI
  • ZJhE#UFOn7E8_4D%8naNQJ_QQy64<5 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 ArvLx| literal 0 HcmV?d00001 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/hdr/cpm22.HDR b/software/hdr/cpm22.hdr similarity index 100% rename from software/hdr/cpm22.HDR rename to software/hdr/cpm22.hdr diff --git a/software/hdr/cpm22_MZ700_80C.HDR b/software/hdr/cpm22_mz700_80c.hdr similarity index 100% rename from software/hdr/cpm22_MZ700_80C.HDR rename to software/hdr/cpm22_mz700_80c.hdr diff --git a/software/hdr/cpm22_MZ80A_80C.HDR b/software/hdr/cpm22_mz80a_80c.hdr similarity index 100% rename from software/hdr/cpm22_MZ80A_80C.HDR rename to software/hdr/cpm22_mz80a_80c.hdr diff --git a/software/hdr/cpm22_MZ80A_STD.HDR b/software/hdr/cpm22_mz80a_std.hdr similarity index 100% rename from software/hdr/cpm22_MZ80A_STD.HDR rename to software/hdr/cpm22_mz80a_std.hdr diff --git a/software/hdr/CPM_RFS_1.HDR b/software/hdr/cpm_rfs_1.hdr similarity index 100% rename from software/hdr/CPM_RFS_1.HDR rename to software/hdr/cpm_rfs_1.hdr diff --git a/software/hdr/CPM_RFS_2.HDR b/software/hdr/cpm_rfs_2.hdr similarity index 100% rename from software/hdr/CPM_RFS_2.HDR rename to software/hdr/cpm_rfs_2.hdr diff --git a/software/hdr/sdtest.HDR b/software/hdr/sdtest.hdr similarity index 100% rename from software/hdr/sdtest.HDR rename to software/hdr/sdtest.hdr diff --git a/software/roms/9Z_504M.ROM b/software/roms/9z_504m.rom similarity index 100% rename from software/roms/9Z_504M.ROM rename to software/roms/9z_504m.rom diff --git a/software/roms/CPM223.BIN b/software/roms/CPM223.BIN deleted file mode 100644 index 8f6ba8c224f46ae2a488a9f57a76debacc54b264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 N7y4hYzz;3({{VNl>x=*Z diff --git a/software/roms/CPM223_MZ700_80C.BIN b/software/roms/CPM223_MZ700_80C.BIN deleted file mode 100644 index e7fc3b7c4c18263d4596328a002507b476a79452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 afMofy0`Rwg_xt1j>zk^}?f;`R@c#fZ*}$Rz diff --git a/software/roms/CPM223_MZ80A_80C.BIN b/software/roms/CPM223_MZ80A_80C.BIN deleted file mode 100644 index 6af870fdf2288cdc10891c4093f6e7f4629a29b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 SKmDrsUwtWcvHgF)2L2ah?5R@# diff --git a/software/roms/monitor_1Z-013A-KM.rom b/software/roms/monitor_1z-013a-km.rom similarity index 100% rename from software/roms/monitor_1Z-013A-KM.rom rename to software/roms/monitor_1z-013a-km.rom diff --git a/software/roms/monitor_1Z-013A.rom b/software/roms/monitor_1z-013a.rom similarity index 100% rename from software/roms/monitor_1Z-013A.rom rename to software/roms/monitor_1z-013a.rom diff --git a/software/roms/monitor_80c_1Z-013A-KM.rom b/software/roms/monitor_80c_1z-013a-km.rom similarity index 100% rename from software/roms/monitor_80c_1Z-013A-KM.rom rename to software/roms/monitor_80c_1z-013a-km.rom diff --git a/software/roms/monitor_80c_1Z-013A.rom b/software/roms/monitor_80c_1z-013a.rom similarity index 100% rename from software/roms/monitor_80c_1Z-013A.rom rename to software/roms/monitor_80c_1z-013a.rom diff --git a/software/roms/monitor_80c_SA1510.rom b/software/roms/monitor_80c_sa1510.rom similarity index 100% rename from software/roms/monitor_80c_SA1510.rom rename to software/roms/monitor_80c_sa1510.rom diff --git a/software/roms/monitor_SA1510.rom b/software/roms/monitor_sa1510.rom similarity index 100% rename from software/roms/monitor_SA1510.rom rename to software/roms/monitor_sa1510.rom diff --git a/software/roms/mz2000_ipl.rom b/software/roms/mz2000_ipl.rom new file mode 100644 index 0000000000000000000000000000000000000000..250ae6f9cfa7c636626cba95b296f2284f4f2b23 GIT binary patch literal 2048 zcmeHH>rWI{6uSy*9~Rlreny(7_#s9D$;-4Gp{V3*kXAeKI2(&!pirHD&**P>M^ znl??7reE5m?YG9nPc~U=AGE1WK|<{~xn0dI&8`Cpi&sCc@sV%?jeGnMW=zv<_(iKD{v;}ov^$k7Wx3_N0jIF`a3HHsY(XjQ$|L&^e&un zG2Pn%^R_y9UH?g+#hC?7C^a%8kFMj4F{Yu!}_0ixSVG? zfehm4Hsce~M~tr!tzmq;epum1+=4b$UNHIM^0*8-rGfsw^hOr_!1#R1e4`A&`XMXT z)0ajO#<#J(a@pB0;dIrIMYk)D(68%9$e+KdILZ|6m~xZqXVT*>2DcKD$OIJg1Vk=o4 zW2E27CxIGRBQ^4zMoJ|XD(mF0SaNKU9-C#2F^}Enqz*VunR|gnt5{kSZ8F-!(gtd3 z0e(Q&h4_Icf5N(XaScIh>cWzc+_N=dF@}e=nbc)7`>Y#?qEt*JBS~@(t!im{OsZgM)`SgiryHE?+ z!Q-JY48XQ<=tMZsxlXR)~ zlC5^ca{e~W)lOL1ckn3E~xis{~ZJR~_AAMtSp$jg*(; zt0l98&-treW{0gyS(bBE+szKv{Fdt`&?$6+R~_DQ3-xg3D;#ljDNHGeG}{>hGuy#n zI;HRSV56E>8HrVa2M;0#58n_Cvjb31((GV7_tGvV~jPhNpD z<~EXx$+;9;861(AGBuGuBxS;aFqxt$axPe)GW56Gz*}9=MtRi8FQiMg@kTof$jqWUQpQjuKFx$R;F>7K-q89`b~rY;$GuwFJ;_hGS!^xb_;bWwxJ06WSq z&d@tw0KHvdrN3nRKZC7&IU2Q97nV!Zu+pQmWaRcXadHjkZWPxNpdg?R$@nEuDN9G| z4LVu{Ao5PsT|~bQv%97;=@9qDQK9)JOADw1r>1G%rRw_(h<34{zr)qoJy; zJhDPw#jP0IKehJIgD3(*x&Hxm?Qa%4Bosd~zU{GJ;(KYaeBJnr|Cr$Pl9|RCU&N)X(-0eVp875}@{aamHDrOSIEZ3;z8AM~V1a(Q-&= zCF6{|V|0m+UEM{EC56NW~D!Na^WQyqxnglTsZ8|8@f_FM1w9rBW9plIV z9h2#Zj}A+?(i1Zm;-W5ugi_3;`0xTJx#CAYIc9#sT@vi(ARa1D5OdK{kY5*EPN#fr z8vhPv!p3@SKOxM2j`AH#0ty6lM4-c-(z=oGilMExizjJ5Kt~(!ydr~gh0QC?Fns+9 l+MdH3T@#A)4GG)d@os$`oWPEKuwQrU3Dgt#e-qfTe*vF!U`7A{ literal 0 HcmV?d00001 diff --git a/software/roms/MZ80B_IPL.rom b/software/roms/mz80b_ipl.rom similarity index 100% rename from software/roms/MZ80B_IPL.rom rename to software/roms/mz80b_ipl.rom diff --git a/software/roms/sa1510.orig b/software/roms/sa1510.orig new file mode 100644 index 0000000000000000000000000000000000000000..d904e16bb7e686cae4e8d995b2492d458ce4ca60 GIT binary patch literal 4096 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 literal 0 HcmV?d00001 diff --git a/software/tools/assemble_cpm.sh b/software/tools/assemble_cpm.sh index f5007b2..c97dc72 100755 --- a/software/tools/assemble_cpm.sh +++ b/software/tools/assemble_cpm.sh @@ -38,7 +38,7 @@ INCDIR=${ROOTDIR}/software/asm/include ROMDIR=${ROOTDIR}/software/roms # Compiled or source ROM files. HDRDIR=${ROOTDIR}/software/hdr # MZF headers directory. MZFDIR=${ROOTDIR}/software/MZF/Common # MZF Format source files. -CPMVERSIONS="MZ700_80C:0 MZ80A_80C:1 MZ80A_STD:2" +CPMVERSIONS="mz700_80c:0 mz80a_80c:1 mz80a_std:2" # As the tranZPUter project has eveolved different variants of CP/M are needed, so this loop along with the CPMVERSIONS string builds the versions as needed. for ver in ${CPMVERSIONS} @@ -70,6 +70,6 @@ do # Manual tinkering to produce the loadable MZF file... # - cat ${ROMDIR}/cpm22.bin ${ROMDIR}/cbios.bin > ${ROMDIR}/CPM223_${FILEEXT}.BIN - cat ${HDRDIR}/cpm22_${FILEEXT}.HDR ${ROMDIR}/CPM223_${FILEEXT}.BIN > ${MZFDIR}/CPM223_${FILEEXT}.MZF + cat ${ROMDIR}/cpm22.bin ${ROMDIR}/cbios.bin > ${ROMDIR}/cpm223_${FILEEXT}.bin + cat ${HDRDIR}/cpm22_${FILEEXT}.hdr ${ROMDIR}/cpm223_${FILEEXT}.bin > ${MZFDIR}/cpm223_${FILEEXT}.mzf done diff --git a/software/tools/assemble_roms.sh b/software/tools/assemble_roms.sh index 21a3f45..a255b7c 100755 --- a/software/tools/assemble_roms.sh +++ b/software/tools/assemble_roms.sh @@ -34,9 +34,10 @@ ROOTDIR=../../tranZPUter TOOLDIR=${ROOTDIR}/software/tools JARDIR=${ROOTDIR}/software/tools ASM=glass-0.5.jar -BUILDROMLIST="MZ800_1Z_013B MZ800_9Z_504M MZ800_IOCS MZ80AFI monitor_SA1510 monitor_80c_SA1510 monitor_1Z-013A monitor_80c_1Z-013A monitor_1Z-013A-KM monitor_80c_1Z-013A-KM MZ80B_IPL" +BUILDROMLIST="mz2000_ipl mz800_1z_013b mz800_9z_504m mz800_iocs mz80afi monitor_sa1510 monitor_80c_sa1510 monitor_1z-013a monitor_80c_1z-013a monitor_1z-013a-km monitor_80c_1z-013a-km mz80b_ipl" #BUILDMZFLIST="hi-ramcheck sharpmz-test" -BUILDMZFLIST="5Z009-1B SA-5510_TZFS MSBASIC_MZ80A MSBASIC_MZ700 MSBASIC_TZ40 MSBASIC_TZ80 sharpmz-test" +#BUILDMZFLIST="basic_sp-5025 5z009-1b sa-5510_tzfs msbasic_mz80a msbasic_mz700 msbasic_tz40 msbasic_tz80 sharpmz-test" +BUILDMZFLIST="5z009-1b sa-5510_tzfs msbasic_mz80a msbasic_mz700 msbasic_tz40 msbasic_tz80 sharpmz-test" ASMDIR=${ROOTDIR}/software/asm ASMTMPDIR=${ROOTDIR}/software/tmp INCDIR=${ROOTDIR}/software/asm/include @@ -54,20 +55,20 @@ do OBJNAME=${f}.obj SYMNAME=${f}.sym ROMNAME=${f}.rom - MZFNAME=${f}.MZF + MZFNAME=${f}.mzf # Special handling for the 4 version of MS BASIC. - if [[ ${SRCNAME} = "MSBASIC_MZ80A" ]]; then - ASMNAME="MSBASIC.asm" + if [[ ${SRCNAME} = "msbasic_mz80a" ]]; then + ASMNAME="msbasic.asm" echo "BUILD_VERSION EQU 0" > ${INCDIR}/MSBASIC_BuildVersion.asm - elif [[ ${SRCNAME} = "MSBASIC_MZ700" ]]; then - ASMNAME="MSBASIC.asm" + elif [[ ${SRCNAME} = "msbasic_mz700" ]]; then + ASMNAME="msbasic.asm" echo "BUILD_VERSION EQU 1" > ${INCDIR}/MSBASIC_BuildVersion.asm - elif [[ ${SRCNAME} = "MSBASIC_TZ40" ]]; then - ASMNAME="MSBASIC.asm" + elif [[ ${SRCNAME} = "msbasic_tz40" ]]; then + ASMNAME="msbasic.asm" echo "BUILD_VERSION EQU 2" > ${INCDIR}/MSBASIC_BuildVersion.asm - elif [[ ${SRCNAME} = "MSBASIC_TZ80" ]]; then - ASMNAME="MSBASIC.asm" + elif [[ ${SRCNAME} = "msbasic_tz80" ]]; then + ASMNAME="msbasic.asm" echo "BUILD_VERSION EQU 3" > ${INCDIR}/MSBASIC_BuildVersion.asm fi @@ -104,4 +105,4 @@ do done # Manual tinkering to build the MZ800 Rom. -cat ${ROMDIR}/MZ800_1Z_013B.rom ${ROMDIR}/MZ800_CGROM.ORI ${ROMDIR}/MZ800_9Z_504M.rom ${ROMDIR}/MZ800_IOCS.rom > ${ROMDIR}/MZ800_IPL.rom +cat ${ROMDIR}/mz800_1z_013b.rom ${ROMDIR}/mz800_cgrom.ori ${ROMDIR}/mz800_9z_504m.rom ${ROMDIR}/mz800_iocs.rom > ${ROMDIR}/mz800_ipl.rom diff --git a/software/tools/assemble_tzfs.sh b/software/tools/assemble_tzfs.sh index 3c7ea27..ec41d2c 100755 --- a/software/tools/assemble_tzfs.sh +++ b/software/tools/assemble_tzfs.sh @@ -65,8 +65,8 @@ do # Uncomment if your not using my modified version 0.5.1 which fixes the bug # echo -n -e '\xff' >> ${ROMDIR}/${f}.rom else - echo "Copy ${ASMDIR}/${f}.obj to ${MZFDIR}/${f}.MZF" - cp ${ASMTMPDIR}/${f}.obj ${MZFDIR}/${f}.MZF + echo "Copy ${ASMDIR}/${f}.obj to ${MZFDIR}/${f}.mzf" + cp ${ASMTMPDIR}/${f}.obj ${MZFDIR}/${f}.mzf fi fi done diff --git a/software/tools/copytosd.sh b/software/tools/copytosd.sh index 0a5f761..de11a04 100755 --- a/software/tools/copytosd.sh +++ b/software/tools/copytosd.sh @@ -197,14 +197,14 @@ done # Manually copy required files. cp ${rootdir}/${softwaredir}/roms/tzfs.rom $media/TZFS/; -cp ${rootdir}/${softwaredir}/roms/monitor_SA1510.rom $media/TZFS/SA1510.rom; -cp ${rootdir}/${softwaredir}/roms/monitor_80c_SA1510.rom $media/TZFS/SA1510-8.rom; -cp ${rootdir}/${softwaredir}/roms/monitor_1Z-013A.rom $media/TZFS/1Z-013A.rom; -cp ${rootdir}/${softwaredir}/roms/monitor_80c_1Z-013A.rom $media/TZFS/1Z-013A-8.rom; -cp ${rootdir}/${softwaredir}/roms/monitor_1Z-013A-KM.rom $media/TZFS/1Z-013A-KM.rom; -cp ${rootdir}/${softwaredir}/roms/monitor_80c_1Z-013A-KM.rom $media/TZFS/1Z-013A-KM-8.rom; -cp ${rootdir}/${softwaredir}/roms/MZ80B_IPL.rom $media/TZFS/MZ80B_IPL.rom; -cp ${rootdir}/${softwaredir}/roms/MZ800_* $media/TZFS/; +cp ${rootdir}/${softwaredir}/roms/monitor_sa1510.rom $media/TZFS/sa1510.rom; +cp ${rootdir}/${softwaredir}/roms/monitor_80c_sa1510.rom $media/TZFS/sa1510-8.rom; +cp ${rootdir}/${softwaredir}/roms/monitor_1z-013a.rom $media/TZFS/1z-013a.rom; +cp ${rootdir}/${softwaredir}/roms/monitor_80c_1z-013a.rom $media/TZFS/1z-013a-8.rom; +cp ${rootdir}/${softwaredir}/roms/monitor_1z-013a-km.rom $media/TZFS/1z-013a-km.rom; +cp ${rootdir}/${softwaredir}/roms/monitor_80c_1z-013a-km.rom $media/TZFS/1z-013a-km-8.rom; +cp ${rootdir}/${softwaredir}/roms/mz80b_ipl.rom $media/TZFS/mz80b_ipl.rom; +cp ${rootdir}/${softwaredir}/roms/mz800_* $media/TZFS/; cp ${rootdir}/${softwaredir}/roms/cpm22.bin $media/CPM/; cp ${rootdir}/${softwaredir}/CPM/SDC16M/RAW/* $media/CPM/; cp ${rootdir}/${softwaredir}/MZF/Common/* $media/MZF/; diff --git a/software/tools/dz80 b/software/tools/dz80 index b47a24a985a3766144cebd741b7b6e13ac29ff13..64daa866d0e1c53ce87d47111c4de0e9305fa8bd 100755 GIT binary patch delta 90792 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�=@y1n)+}NYg{6Z5Ss*B`THStyz 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 Dg;h;s diff --git a/software/tools/dz80_v20 b/software/tools/dz80_v20 new file mode 100755 index 0000000000000000000000000000000000000000..b47a24a985a3766144cebd741b7b6e13ac29ff13 GIT binary patch literal 225408 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 z z0Lhk^k~bSG$(_F$mTASog`DZQMBsvJI zCYE;;?eR4bJM@=45ei6voJtL zKo@%`U{kjzff>7b7SS3Qd}>&7{v;3|zk$;g$ghT3LGvCNnw?Of8koc$5|G%W z)x!=(e(Typ3|Y!s=M&nK_zaS^@$J|{o7IwPR6w_29VH1$h6{JnuKn&s49LXM`W?qZ zq$leUDW{{Y73UOd&PlYeijt72xoR~P$d3h!6Hm&sFuRBaNQICa9Sjm1VtvZZt~Q^m z$V~Yr$}ka^B@^XKr4k5sL`zak{Kc+WD%Yuc1dNguiGQdyk%T6f*9v7dg@|>=#vq2P z;W)2}G2FU{hHQ}{V#hHuZUo5Pi9@NT`J25e-BJ%;dG7y_Yj~Bs-9pH)Bac6m@L|5# z-U_4X4PMxi*6u5@j8`H^56^6()u#?IUtKHjGO^E}Uy_|T zUi4ftpPzD4o3`Q3`5wK$H;sr8+%j`Y1|MMD%IRcm zL5k1zq0aauCW-;g&R&>%1bc6(a~bvpBwE-rk2T=*$6)MWQZMZGpPQW@J|z$zdtk7N zQ#3Q44aA?hU1QyPqzK(gKM!gAwXb#hi*yV$qW@yBatwgX#Wm#7r_RrUfr1zHkP1q? z?tP?Kg7HhTyJ<^Izb=r_ z%5J|eJD)bgoDbRPa5-)e){m(Cus?WiA+HTYELMH%>Qc7}39{>eyr$L#7WxZ{W3`(rjap=72j$MRUw%+|SexE@*J zQQJsGwTp}rHI?6fJLHv+tbz7;RQ%Y<_x|o!i3k7bB@9Y?9gV#p;t{{A)o~^4IH8y& zbL7WE8@>{{!6%~Seboo^bNNHbeGVcZaN?C;{lJxyZ;K8fEJ>>YAX9=H8NC<7-<8pS zrNdMiU7J}(_hnRFW%MO`mHgDg^VmZv&_za9Q|0I6@p7q?6#SKjZZ9d1-y#^R{c&v< z#}B>!?hJDH0hT3N4*Nt7FV?Z*PQI@n)s*5nnSdS)1Z;H^NbU81Kvz&{0Z!Y%pBK_A z{5iqaeIj*S{C zRo&a-!Pz(ec|6{j(r9ICN2*@Ct!tCjSp+Tizw6kn1zTLj#+H6;P@8quRKX}pTe(3N zs7zbr44U7&dg1W3qq60+3VN0llS1C{-WwJln}sp0)M87bw^Zh~g`_?l%V9JXUUClT zpI6>Gs_013q!L0v2q%k~KEn-*P(c29vG9U#YHuc zN5_Kd02IPG<4=?{@)Xj?hS+P0*JMXJ<{P*Div883V?*KP6*asCtEHxM5?b9r=*X|G zP;y&N0pm>(qbHgtwLjp$}uDPx;9JD{}k68=}gY@&LuKSbJbtf^smr zso_I);i1Auh)4~5dy#o!`Ak(O0xu|E*ds%0!_&JD#s8`hZ|3MdS>Ud+!j~%rKIDSI z#%%+^za;LAuE7fu>6m0hL+XLU4A1aD5MOz1{5soK=t3Sww2<0e23%#CIko1Fh6ki- zu=}bo~u&u=iR@99$NDa011}vvtI`RD$WIRBp!_wX`qV0%y%O;V70Rdn@>B%<1mmL)`HebAnG!*Xpk}2 zn)otwZ#Ui@j6Z+7h!D=jmi0!fEwJT*^?1D)No#Or<91+cG7#wyRA2~HY->M{{T;>? z>l=zUWH0PjngIsPjxI195+s4&?%Z?p5q1Ye_Fh76W6G$;Lvj{j+<|P^-T1da{5cKL zX6yG%Z2LW0&!*%1Gcb`hN<}CAWRaa-VN?2qLnns|oqVB=5oD&5oNoJ(OHVTNvnXRf zMbgjBKhw|4>1=P)y+3n5zs%UrFQlJC+etA2 z1n1;O>|V_sGjb{DqolYr)!@@a)D`JCA^7$Iw_U9V)eZ*>hMe8GsLG~78jW;ZVnloK zpeRTv7!qLjSTuz7x5?;&X~iT|GVVMUL8%1OD}5P}NT*?{`6%QnU(#SIlVU0Q3O#X| zQ2i-1Wh{D?YLSi`jA*|6dFO!?k917Md9NO>HJYvfX(AkzXvS7QFmVZQoOO(T?=0WN zmKPu}xw%}yS;yb1M1Z5}4n1v$T4lBIgSx9|#+E{eTZ@sEv7E%K42Q<`c#%vg19XaK6W@9LJ5HxkqablYvLEmJ0}=-B z{qbpS8D_6<8ucGy_7$I+)&COVGFB^OphIk`H8U%S@URa-<~y+1+v!M87%UtVYDO1TGe8WZj%SYThN2BJZ`wdCVQ87KcY+260bkD;<32lZ~>}baK(wkQjZV| z61&A3kTRgkxiTOYu0^%xH+q>j1c{XB@1eW#T176*Wrs0MR;)^w6=Gn0od^@Zq5U~7 zJ|<>pAfDbpq(d1G57L5QQ=*=Tc#>6rai$h_WWs3TJ2mIko^`|;kzmJtCz2Bq=q<+6 zq5Ng*=>=={!~2P2)f*)jE;X7SppcjGdL{1Vjn<>ubFta^+gq%6;yPZZ$~z(I{KR

    0(nOT{jFw`}boWxnoIfR;N+P!RfWAA~7t9 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 a@VQ)Z!qBDd6Y=sFP5%@}sFAT?>VE({85m^% literal 0 HcmV?d00001 diff --git a/software/tools/make_cpmdisks.sh b/software/tools/make_cpmdisks.sh index 857e96e..32ac4be 100755 --- a/software/tools/make_cpmdisks.sh +++ b/software/tools/make_cpmdisks.sh @@ -36,7 +36,7 @@ # remove it fro the lists. #BUILDCPMLIST="cpm22" #SOURCEDIRS="CPM_RFS_[1] CPM[0-9][0-9]_* CPM_MC_5 CPM_MC_C? CPM_MC_D? CPM_MC_E? CPM_MC_F? CPM[0-9][0-9]_MZ800*" -SOURCEDIRS="CPM_RFS_[1-2] CPM[0-9][0-9]_* CPM_MC_5 CPM_MC_C? CPM_MC_D? CPM_MC_E? CPM_MC_F? CPM[0-9][0-9]_MZ800*" +SOURCEDIRS="cpm_rfs_[1-2] CPM[0-9][0-9]_* CPM_MC_5 CPM_MC_C? CPM_MC_D? CPM_MC_E? CPM_MC_F? CPM[0-9][0-9]_MZ800*" ROOTDIR=`realpath ../../tranZPUter` CPM_PATH=${ROOTDIR}/software/CPM @@ -187,15 +187,15 @@ do CPMIMAGE="${DISKSDIR}/${f}.RAW" else CPMIMAGE="" - echo "ALERT! ALERT! Couldnt find CPM image:${f}.RAW, not creating MZF file!" + echo "ALERT! ALERT! Couldnt find CPM image:${f}.raw, not creating MZF file!" fi if [ "${CPMIMAGE}" != "" ]; then # Building is just a matter of concatenating together the heaader and the rom image. - cat "${HDRDIR}/${f}.HDR" "${CPMIMAGE}" > "${MZFDIR}/${f}.MZF" + cat "${HDRDIR}/${f}.hdr" "${CPMIMAGE}" > "${MZFDIR}/${f}.mzf" # Place the name of the file into the MZF list so that we create an MZF format binary from this image. - (cd ${MZFDIR}; ls -l ${f}.MZF ${f}.mzf 2>/dev/null | sed 's/ / /g' | sed 's/ / /g' | cut -d' ' -f5,9- >> /tmp/filelist 2>/dev/null) + (cd ${MZFDIR}; ls -l ${f}.mzf ${f}.mzf 2>/dev/null | sed 's/ / /g' | sed 's/ / /g' | cut -d' ' -f5,9- >> /tmp/filelist 2>/dev/null) fi done