From 517ee7cf88f81d72116a1cb7763d93f28838bd9b Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Wed, 7 Jan 2026 09:17:16 +0000 Subject: [PATCH] Updates and bug fixes. DASM fix still outstanding --- .gitignore | 10 +- .gitmodules | 3 + asm/include/macros.asm | 21 +- asm/include/msbasic_definitions.asm | 21 +- asm/include/rfs_definitions.asm | 14 +- asm/mz-1e05.asm | 534 ++++++++++++ asm/mz80afi.asm | 2 +- asm/rfs.asm | 77 +- asm/rfs_bank1.asm | 687 +++++++-------- asm/rfs_bank2.asm | 33 +- asm/rfs_bank3.asm | 25 +- asm/rfs_bank4.asm | 25 +- asm/rfs_bank5.asm | 27 +- asm/rfs_bank6.asm | 36 +- asm/rfs_bank7.asm | 24 +- asm/rfs_mrom.asm | 15 +- asm/sa-5510_rfs.asm | 24 +- build.sh | 99 ++- config/diskdefs | 2 +- cpmtools | 1 + roms/SHARP_MZ80A_RFS_IMAGE_0.img | Bin 16785408 -> 16785408 bytes roms/SHARP_MZ80A_RFS_IMAGE_2.img | Bin 16785408 -> 16785408 bytes roms/SHARP_MZ80A_RFS_IMAGE_6.img | Bin 16785408 -> 16785408 bytes roms/mz80afi_sfd700.rom | Bin 0 -> 2048 bytes roms/rfs.rom | Bin 40960 -> 40960 bytes test | Bin 0 -> 524288 bytes tools/make_cpmdisks.sh | 14 +- tools/make_roms.sh | 1247 ++++++++++++++------------- tools/processMZFfiles.sh | 8 +- 29 files changed, 1838 insertions(+), 1111 deletions(-) create mode 100644 .gitmodules create mode 100644 asm/mz-1e05.asm create mode 160000 cpmtools create mode 100644 roms/mz80afi_sfd700.rom diff --git a/.gitignore b/.gitignore index e28d553..41c78f7 100644 --- a/.gitignore +++ b/.gitignore @@ -204,4 +204,12 @@ MZ800_IOCS.ref asm/c2 asm/sa1510.asm.prekuma roms/test.rom - +tools/cpmchattr +tools/cpmchmod +tools/cpmcp +tools/cpmls +tools/cpmrm +tools/fsck.cpm +tools/fsed.cpm +tools/mkfs.cpm +tools/share/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4f756f9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "cpmtools"] + path = cpmtools + url = https://github.com/lipro-cpm4l/cpmtools.git diff --git a/asm/include/macros.asm b/asm/include/macros.asm index e7782cc..bbf6396 100644 --- a/asm/include/macros.asm +++ b/asm/include/macros.asm @@ -46,13 +46,21 @@ HWSEL1: LD A,(BNKCTRLRST) LD (BNKSELUSER),A ; and start up - ie. SA1510 Monitor - this occurs as User Bank 0 is enabled and the jmp to 0 is coded in it. ENDIF ; 22 bytes. + ; MODE_MZ1200 0 + ; MODE_MZ80A 0 + ; MODE_MZ700 1 + ; MODE_MZ80B 2 + ; MODE_MZ800 3 + ; MODE_MZ1500 4 + ; MODE_MZ2000 5 + ; MODE_MZ2200 6 IF BUILD_SFD700 = 1 IN A,(SFD700_MODE) OR A LD A,BNKDEFMROM_MZ80A ; Setup default MROM for an MZ80A, this is a 4K Window into the UROM at F000. - JR HWSEL11 -HWSEL11: LD A,BNKDEFMROM_MZ700 ; Setup default MROM for an MZ700, this is a 4K Window into the UROM at F000. - OUT (REG_FXXX),A + JR Z, HWSEL11 + LD A,BNKDEFMROM_MZ700 ; Setup default MROM for an MZ700, this is a 4K Window into the UROM at F000. +HWSEL11: OUT (REG_FXXX),A LD (ROMBK1),A LD A,BNKDEFUROM ; Setup default UROM, this is a 2K Window into the UROM at E800 and contains the RFS. OUT (REG_EXXX),A @@ -60,6 +68,7 @@ HWSEL11: LD A,BNKDEFMROM_MZ700 ; Setup default MROM NOP ENDIF ENDM + HWSELROM2: MACRO IF BUILD_ROMDISK = 1 LD B,16 ; If we read the bank control reset register 15 times then this will enable bank control and then the 16th read will reset all bank control registers to default. @@ -81,7 +90,7 @@ HWSEL2: LD A,(BNKCTRLRST) IN A,(SFD700_MODE) OR A LD A,BNKDEFMROM_MZ80A ; Setup default MROM for an MZ80A, this is a 4K Window into the UROM at F000. - JR HWSEL21 + JR Z,HWSEL21 LD A,BNKDEFMROM_MZ700 ; Setup default MROM for an MZ700, this is a 4K Window into the UROM at F000. HWSEL21: OUT (REG_FXXX),A LD A,BNKDEFUROM ; Setup default UROM, this is a 2K Window into the UROM at E800 and contains the RFS. @@ -118,10 +127,10 @@ BNKSWSEL: MACRO LD (BNKSELUSER),A ENDIF IF BUILD_SFD700 = 1 - OUT (REG_EXXX),A ; Execute active bank switch. + OUT (REG_EXXX),A ; Execute active bank switch for E000:EFFF. CP ROMBANK6 ; ROMBANK6/7 page in ROM from E300:FFFF JR C,BNKSWJMP - INC A + INC A ; FXXX are 4K banks, EXXX are 2K banks. JR BNKSWJMP2 BNKSWJMP: LD A,(ROMBK1) ; All other banks place the current active ROM into F000:FXXX space. BNKSWJMP2: OUT (REG_FXXX),A diff --git a/asm/include/msbasic_definitions.asm b/asm/include/msbasic_definitions.asm index 580c832..1b6bada 100644 --- a/asm/include/msbasic_definitions.asm +++ b/asm/include/msbasic_definitions.asm @@ -48,7 +48,7 @@ ; BASIC_build.asm which configures the equates below for the correct build. BUILD_KUMA EQU 1 ; Enable support for Kuma 40/80 column upgrade. -; NZ-80A Build +; MZ-80A Build IF BUILD_VERSION = 0 BUILD_MZ80A EQU 1 ; Build for the standard Sharp MZ80A, no lower memory. Manually change MAXMEM above. BUILD_RFS EQU 0 ; Build for standard RFS with SD enhancements. @@ -124,6 +124,11 @@ CTAPESAVE EQU 4 ; Debugging ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable +; RFS ROM addresses. +UROMADDR EQU 0E800H ; Start of User ROM Address space. +UROMBSTBL EQU UROMADDR + 020H ; Entry point to the bank switching table. +RFSJMPTABLE EQU UROMADDR + 000B0H ; Start of jump table. + ;----------------------------------------------- ; CMT Object types. ;----------------------------------------------- @@ -151,13 +156,13 @@ QVRFY EQU 0002Dh ;------------------------------------------------------- ; Function entry points in the RFS ROM. ;------------------------------------------------------- -CMT_RDINF EQU 0E886H ; UROMADDR+86H - Tape/SD intercept handler - Read Header -CMT_RDDATA EQU 0E889H ; UROMADDR+89H - Tape/SD intercept handler - Read Data -CMT_WRINF EQU 0E88CH ; UROMADDR+80H - Tape/SD intercept handler - Write Header -CMT_WRDATA EQU 0E88FH ; UROMADDR+8FH - Tape/SD intercept handler - Write Data -CMT_VERIFY EQU 0E892H ; UROMADDR+92H - Tape/SD intercept handler - Verify Data -CMT_DIR EQU 0E895H ; UROMADDR+95H - SD directory command. -CNV_ATOS EQU 0E898H ; UROMADDR+98H - Convert an ASCII string into Sharp ASCII +CMT_RDINF EQU RFSJMPTABLE + 06H ; UROMADDR+86H - Tape/SD intercept handler - Read Header +CMT_RDDATA EQU RFSJMPTABLE + 09H ; UROMADDR+89H - Tape/SD intercept handler - Read Data +CMT_WRINF EQU RFSJMPTABLE + 0CH ; UROMADDR+80H - Tape/SD intercept handler - Write Header +CMT_WRDATA EQU RFSJMPTABLE + 0FH ; UROMADDR+8FH - Tape/SD intercept handler - Write Data +CMT_VERIFY EQU RFSJMPTABLE + 12H ; UROMADDR+92H - Tape/SD intercept handler - Verify Data +CMT_DIR EQU RFSJMPTABLE + 15H ; UROMADDR+95H - SD directory command. +CNV_ATOS EQU RFSJMPTABLE + 18H ; UROMADDR+98H - Convert an ASCII string into Sharp ASCII ;----------------------------------------------- ; BASIC ERROR CODE VALUES diff --git a/asm/include/rfs_definitions.asm b/asm/include/rfs_definitions.asm index 9813bba..99cd1ad 100644 --- a/asm/include/rfs_definitions.asm +++ b/asm/include/rfs_definitions.asm @@ -19,6 +19,9 @@ ;- March 2021- Updates to accommodate the RFS v2.1 board along with back porting TZFS ;- developments. ;- May 2023 - Updates to accommodate RFS use on a FusionX board. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -62,7 +65,7 @@ FDCROMADDR EQU 0F000H IF BUILD_SFD700 = 1 BNKDEFMROM_MZ80A EQU 0 ; Default MROM (FDC) selected, 1st 4k slot.. -BNKDEFMROM_MZ700 EQU 1 ; Default MROM (FDC) selected, 1st 4k slot.. +BNKDEFMROM_MZ700 EQU 1 ; Default MROM (FDC) selected, 2nd 4k slot.. BNKDEFUROM EQU 2 ; Default UROM (RFS) selected, starts at 8K. ENDIF @@ -373,7 +376,12 @@ MROMLOAD: EQU MROMJMPTBL + 00006H ; 8-15 are reserved for CPM code in ; the User ROM bank. ;----------------------------------------------- -MROMPAGES EQU 8 + IF BUILD_ROMDISK = 1 +MROMPAGES EQU 8 + ENDIF + IF BUILD_SFD700 = 1 +MROMPAGES EQU 12 ; 10 Pages (8 but Bank6/7 are 2 pages) + 2 pages for ROMs + ENDIF USRROMPAGES EQU 12 ; Monitor ROM : User ROM IF BUILD_ROMDISK = 1 ROMBANK0 EQU 0 ; MROM SA1510 40 Char : RFS Bank 0 - Main RFS Entry point and functions. @@ -398,7 +406,7 @@ ROMBANK4 EQU 4 + BNKDEFUROM ; ROMBANK5 EQU 5 + BNKDEFUROM ; : RFS Bank 5 ROMBANK6 EQU 6 + BNKDEFUROM ; : RFS Bank 6 ROMBANK7 EQU 8 + BNKDEFUROM ; : RFS Bank 7 - Memory and timer test utilities. -ROMBANK8 EQU 10 + BNKDEFUROM ; : CBIOS Bank 1 - Utilities +ROMBANK8 EQU 10 + BNKDEFUROM ; : CBIOS Bank 1 - Utilities ROMBANK9 EQU 11 + BNKDEFUROM ; : CBIOS Bank 2 - Screen / ANSI Terminal ROMBANK10 EQU 12 + BNKDEFUROM ; : CBIOS Bank 3 - SD Card ROMBANK11 EQU 13 + BNKDEFUROM ; : CBIOS Bank 4 - Floppy disk controller. diff --git a/asm/mz-1e05.asm b/asm/mz-1e05.asm new file mode 100644 index 0000000..61e66d4 --- /dev/null +++ b/asm/mz-1e05.asm @@ -0,0 +1,534 @@ + ; V1.10 + ; + ; To compile use: + ; + ; AS80 [1.31] - Assembler for 8080/8085/Z80 microprocessor. + ; + ; Available from: + ; - http://www.falstaff.demon.co.uk/cross.html + ; - ftp://ftp.simtel.net/pub/simtelnet/msdos/crossasm/as80_131.zip + ; - and many Simtel mirrors. + ; + ; as80 -i -l -n -x2 -v -z mz-1e05.asm + + ; Bring in additional resources. + INCLUDE "rfs_definitions.asm" + INCLUDE "macros.asm" + + ; + ;----< MFM Minifloppy control >---- + ; + ; + ; Call condition + ; + ; Case of disk initialize + ; Drive N = IX+0 (0 - 3) + ; + ; + ; Case of sequential read & write + ; Drive N = IX+0 (0 - 3) + ; + ; Sector addrs = IX+1,2 (0 - $045F) H C S + ; (0 - 1119) -> 70 x 16 sectors -> 2 x 35 x 16 + ; Byte size = IX+3,4 + ; Address = IX+5,6 + ; Next track = IX+7 + ; Next sector = IX+8 + ; Start track = IX+9 + ; Start sector = IX+10 + ; + ; + ; I/O Port address + ; + + ; + ; Subroutine work + ; +BPRO EQU 0CF00H +BUF EQU 011A3H +BPARA EQU BPRO - 23 ; BootPARAmeter +CMD EQU BPARA + 11 ; CoMmanD +MTFG EQU CMD + 1 ; MoTorFlaG +CLBF0 EQU MTFG + 1 +CLBF1 EQU CLBF0 + 1 +CLBF2 EQU CLBF1 + 1 +CLBF3 EQU CLBF2 + 1 +VRFCNT EQU CLBF3 + 1 ; VeRiFyCouNT +STAFG EQU VRFCNT + 1 ; STAtusFlaG + + + ; + ; + ;--------< Ercode map >-------- + ; + ; 50 : Not ready + ; 41 : Data error + ; Track 80 err + ; Write protect err + ; Seek err + ; CRC err + ; Lost data + ; 54 : Unformat + ; Recode not found + ; 56 : Invalid data + ; + ; + + + ORG 0F000H + + +MZ_1E05: NOP + LD HL,000ADH + JR L_F007 +FDX: EX (SP),HL +L_F007: LD (BPARA + 21),HL + XOR A + LD DE,0 + CALL ?TMST + CALL FDCC ; FD i/o check + JP NZ,NOTIO + LD DE,BPARA ; destination address + LD HL,BOOT ; source address + LD BC,11 ; 11 bytes + LDIR ; copy +SJP: LD IX,BPARA + CALL BREAD ; read from drive 0, sector 0, + ; + LD HL,BPRO ; compare this address + LD DE,IPLMC ; with the IPL MasterCode + LD B,7 ; this are 7 bytes : 3,'IPLPRO' +MCHECK: LD C,(HL) + LD A,(DE) + CP C + JP NZ,MASTE ; not equal than MasterError + INC HL + INC DE + DJNZ MCHECK + ; else Master was found + LD DE,IPLM0 ; 'IPL IS LOADING' + RST 018H + LD DE,BPRO + 7 ; NAME + RST 018H + LD HL,(BPRO + 016H) ; TARGETADDRESS from BootBlock + LD A,H + OR L + JR NZ,L_F051 ; if it is != 0 than normal file + LD HL,(BPRO + 018H) ; TARGETADDRESS from BootBlock + LD A,H + OR L + JR Z,L_F057 ; if it is also 0 than ROM replace file +L_F051: XOR A ; else normal file, + LD HL,(BPRO + 018H) ; TARGETADDRESS from BootBlock + JR L_F05C +L_F057: LD A,0FFH ; target is at $0000, bankswitching is needed + LD HL,01200H ; for now use temporary buffer at $1200 +L_F05C: LD (0CEFDH),A + + LD (IX + 5),L ; set the TargetAddress + LD (IX + 6),H + + LD HL,(BPRO + 014H) ; BYTE SIZE from BootBlock + LD (IX + 3),L + LD (IX + 4),H + + LD HL,(BPRO + 01EH) ; START SECTOR from BootBlock + LD (IX + 1),L + LD (IX + 2),H + ; + CALL BREAD + CALL MOFF + + LD A,(0CEFDH) + CP 0FFH + JR NZ,L_F093 + OUT (0E0H),A + LD HL,01200H ; SourceAddress + LD DE,(BPRO + 016H) ; TargetAddress + LD BC,(BPRO + 014H) ; ByteCounter + LDIR ; copy +L_F093: LD BC,00200H ; Default code + LD HL,(BPRO + 018H) ; TARGET/EXECUTION ADDRESS from BootBlock + JP (HL) + +MASTE: CALL MOFF + LD DE,ERRM1 ; 'NOT MASTER' + JR ERRTR1 +ERRTRT: CP 50 +NOTIO: LD DE,IPLM3 ; 'MAKE READY FD' + JR Z,ERRTR1 + LD DE,ERRM0 ; 'FD:LOADING ERROR' +ERRTR1: CALL 00009H + RST 018H + LD SP,010EEH + LD HL,(BPARA + 21) + EX (SP),HL + RET + ; + ; + ; PARAMETER SETTING + ; +IPLMC: DB 003H ; IPL MASTER FLAG + DB "IPLPRO" + +BOOT: DB 000H ; DRIVE NO. + DW 00000H ; SECTOR ADDR. + DW 00100H ; IFM BYTE SIZE + DW BPRO ; IFM LOADING ADDR. + DW 00000H ; IX+7,8 (track 0, sector 0) + +ERRM1: DB "FD:NOT MASTER",00DH +IPLM0: DB "IPL IS LOADING ",00DH +IPLM3: DB "MAKE READY FD",00DH +ERRM0: DB "FD:LOADING ERROR",00DH + +FDCC: LD A,0A5H + LD B,A + OUT (FDC_TRACK),A + CALL DLY80U + IN A,(FDC_TRACK) + CP B + RET + +L_F111: DB 000H, 000H + ; + ; + ; READY CHECK + ; +READY: LD A,(MTFG) + RRCA + CALL NC,MTON + LD A,(IX + 0) ; DRIVE NO SET + OR 084H + OUT (FDC_DRIVE),A ; DRIVE SELECT MOTON + XOR A + LD (CMD),A + CALL DLY60M + LD HL,0 +REDY0: DEC HL + LD A,H + OR L + JR Z,REDY1 + IN A,(FDC_CMD) ; STATUS GET + CPL + RLCA + JR C,REDY0 + LD C,(IX + 0) + LD HL,CLBF0 + LD B,000H + ADD HL,BC + BIT 0,(HL) + JR NZ,REDY2 + CALL RCLB + SET 0,(HL) +REDY2: RET + +REDY1: LD A,032H + JP ERJMP + ; + ; + ; MOTOR ON + ; +MTON: LD A,080H + OUT (FDC_DRIVE),A + LD B,16 +MTD1: CALL DLY60M + DJNZ MTD1 + LD A,1 + LD (MTFG),A + RET + ; + ; + ; SEEK TREATMENT + ; +SEEK: LD A,01BH ; 1x = SEEK, + CALL CMDOT1 ; load head, no verify, max stepping rate + AND 099H + RET + ; + ; + ; MOTOR OFF + ; +MOFF: PUSH AF + CALL DLY1M ; 1000 US DELAY + XOR A + OUT (FDC_DRIVE),A + LD (CLBF0),A + LD (CLBF1),A + LD (CLBF2),A + LD (CLBF3),A + LD (MTFG),A + POP AF + RET + ; + ; + ; RECALIBRATION + ; +RCLB: LD A,00BH ; 0x = RESTORE (seek track 0) + CALL CMDOT1 ; load head, no verify, max stepping rate + AND 085H + XOR 004H + RET Z + +L_F189: JP ERRORX + ; + ; + ; COMMAND OUT ROUTINE + ; +CMDOT1: LD (CMD),A + CPL + OUT (FDC_CMD),A + CALL BSYON + CALL DLY60M + IN A,(FDC_CMD) + CPL + LD (STAFG),A + RET + ; + ; + ; BUSY AND WAIT + ; +BSYON: PUSH DE + PUSH HL + CALL BSY0 +BSYON2: LD HL,00000H +BSYON0: DEC HL + LD A,H + OR L + JR Z,BSYON1 + IN A,(FDC_CMD) + RRCA + JR NC,BSYON0 + POP HL + POP DE + RET + ; +BSYON1: DEC E + JR NZ,BSYON2 +BSYONE: LD A,029H + POP HL + POP DE + JP ERJMP + ; +BSYOFF: PUSH DE + PUSH HL + CALL BSY0 +BSYOF2: LD HL,00000H +BSYOF0: DEC HL + LD A,H + OR L + JR Z,BSYOF1 + IN A,(FDC_CMD) ; Status Register + RRCA + JR C,BSYOF0 + POP HL + POP DE + RET + ; +BSYOF1: DEC E + JR NZ,BSYOF2 + JR BSYONE + ; +BSY0: CALL DLY80U + LD E,007H + RET + ; + ; + ; SEQUENTIAL READ + ; +BREAD: CALL CNVRT + CALL PARST1 ; HL = IX + 5,6 (TargetAddress) +RE8: CALL SIDST + CALL SEEK + JP NZ,ERJMP + CALL PARST2 ; C = DataRegister + DI ; disable interrupts + LD A,094H ; 9x = READ SECTOR, multiple records + CALL CMDOT2 ; compare for side 0, 15ms delay, +RE6: ; disable side select compare + LD B,0 ; ByteCounter = 0, to load 256 bytes of the sector +RE4: IN A,(FDC_CMD) + RRCA + JR C,RE3 + RRCA + JR C,RE4 + INI ; (HL) = in(C), B = B - 1 , HL = HL + 1 + JR NZ,RE4 + + INC (IX + 8) ; NextSector = NextSector + 1 + LD A,(IX + 8) + CP 011H ; if NextSector = 17 + JR Z,L_F213 ; than end + DEC D ; else SectorCounter = SectorCounter - 1 + JR NZ,RE6 ; if SectorCounter = 0 + JR L_F214 ; than end +L_F213: DEC D +L_F214: CALL INTER +RE3: EI ; enable interrupts + IN A,(FDC_CMD) + CPL + LD (STAFG),A + AND 0FFH + JR NZ,ERRORX + CALL ADJ ; adjust sector and track + JP Z,REND + LD A,(IX + 7) ; track + JR RE8 +REND: LD A,080H + OUT (FDC_DRIVE),A ; motor on + RET + ; + ; + ; PARAMETER SET + ; + ; +PARST1: CALL READY + LD D,(IX + 4) ; D = bytes to read (highbyte) (256 bytes) + LD A,(IX + 3) ; A = bytes to read (lowbyte) + OR A ; if A = 0 + JR Z,L_F23F ; than it's ok + INC D ; else read 256 bytes more (1 sector) +L_F23F: LD A,(IX + 10) ; NextSector = StartSector + LD (IX + 8),A + + LD A,(IX + 9) ; NextTrack = StartTrack + LD (IX + 7),A + + LD L,(IX + 5) ; HL = TargetAddress + LD H,(IX + 6) + RET + + ; + ; + ; SIZE SEEK SET + ; +SIDST: SRL A + CPL + OUT (FDC_DATA),A + JR NC,L_F25D ; NC than Head 0 + LD A,1 ; else Head 1 + JR L_F25E +L_F25D: XOR A +L_F25E: CPL + OUT (FDC_SIDE),A ; set HeadSelect + RET + ; + ; + ; TRACK & SECTOR SET + ; +PARST2: LD C,FDC_DATA + LD A,(IX + 7) ; A = NextTrack + SRL A + CPL + OUT (FDC_TRACK),A + LD A,(IX + 8) ; A = NextSector + CPL + OUT (FDC_SECTOR),A + RET + ; + ; + ; ADJUST SECT & TRACK + ; +ADJ: LD A,(IX + 8) ; A = NextSector + CP 17 ; if NextSector = 17 + JR NZ,L_F282 ; than the border is not reached + LD A,001H ; else + LD (IX + 8),A ; NextSector = 1 + INC (IX + 7) ; NextTrack = NextTrack + 1 +L_F282: LD A,D + OR A + RET + ; + ; + ; COMMAND OUT & WAIT + ; +CMDOT2: LD (CMD),A + CPL + OUT (FDC_CMD),A + CALL BSYOFF + RET + ; + ; + ; FORCE INTERRUPT + ; +INTER: LD A,0D8H + CPL + OUT (FDC_CMD),A + CALL BSYON + RET + + ; + ; + ; STATUS CHECK + ; +ERRORX: LD A,(CMD) + CP 00BH ; Restore (seek track 0) + JR Z,ERCK1 + CP 01BH ; Seek + JR Z,ERCK1 + CP 0F4H ; Write track + JR Z,ERCK1 + LD A,(STAFG) + BIT 7,A + JR NZ,ERRET + BIT 6,A + JR NZ,ERRET1 + BIT 4,A + LD A,54 + JR NZ,ERJMP + JR ERRET1 +ERCK1: LD A,(STAFG) + BIT 7,A + JR NZ,ERRET +ERRET1: LD A,41 + JR ERJMP +ERRET: LD A,50 +ERJMP: CALL MOFF + JP ERRTRT + ; + ; + ; SECTOR TO TRACK & SECTOR CONVERT + ; +CNVRT: LD B,0 ; TrackCounter = 0 + LD DE,16 ; 16 sectors per track + LD L,(IX + 1) ; HL = SectorAddress + LD H,(IX + 2) + XOR A +TRANS0: SBC HL,DE ; SectorAddress - SectorPerTrack + JR C,TRANS1 ; if < 0 than ready + INC B ; else TrackCounter = TrackCounter + 1 + JR TRANS0 ; next try + +TRANS1: ADD HL,DE ; undo the last substraction + LD H,B + INC L ; adjust sector (sector is 1..16 and not 0..15) + LD (IX + 9),H ; set StartTrack + LD (IX + 10),L ; set StartSector + RET + + ; + ; + ; TIME DELAY ( 1m & 60m & 80u ) + ; +DLY80U: PUSH DE + LD DE,15 + JP DLYT + +DLY1M: PUSH DE + LD DE,160 + JP DLYT + +DLY60M: PUSH DE + LD DE,8230 +DLYT: DEC DE + LD A,E + OR D + JR NZ,DLYT + POP DE + RET + + + ALIGN 0FFF0H + ORG 0FFF0H + + DB " 84.03.14 V1.0A" diff --git a/asm/mz80afi.asm b/asm/mz80afi.asm index 5d6f6d1..24890fb 100644 --- a/asm/mz80afi.asm +++ b/asm/mz80afi.asm @@ -7,7 +7,7 @@ ; ; on Thursday, 06 of February 2020 at 01:38 PM ; -i ; Bring in additional resources. + ; Bring in additional resources. INCLUDE "rfs_definitions.asm" INCLUDE "macros.asm" SS: EQU 00089h diff --git a/asm/rfs.asm b/asm/rfs.asm index c6e4a4a..11ebe23 100644 --- a/asm/rfs.asm +++ b/asm/rfs.asm @@ -11,20 +11,22 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: v1.0 July 2019 - Merged 2 utilities to create this compilation. -; v2.0 May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. -; v2.0 July 2020 - Updated for the v2.1 hardware. RFS can run with a tranZPUter board with -; or without the K64 I/O processor. RFS wont use the K64 processor all -; operations are done by the Z80 under RFS. +;- v2.0 May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- v2.0 July 2020 - Updated for the v2.1 hardware. RFS can run with a tranZPUter board with +;- or without the K64 I/O processor. RFS wont use the K64 processor all +;- operations are done by the Z80 under RFS. ;- v2.1 April 2021- Updates for the v2.1 RFS board. ;- v2.2 June 2023 - Updates for the Kuma 40/80 upgrade and FusionX. ;- v2.3 Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. ;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when ;- RFS is built for the SFD700. +;- v2.31 Dec 2025 - Bug fixes. Disabled internal floppy control logic for SFD700 as it is not +;- needed, AFI ROM always needs to be present, especially for MZ-80A. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -49,7 +51,7 @@ ALIGN 0E300H ENDIF - ; Monitor command table. This table contains the list of recognised commands along with the + ; Monitor command table (SFD700). This table contains the list of recognised commands along with the ; handler function and bank in which it is located. ; ; 7 6 5:3 2:0 @@ -80,10 +82,7 @@ CMDTABLE2: IF BUILD_SFD700 = 1 DB 'D' ; Dump Memory. DW DUMPX DB 000H | 000H | 008H | 001H - DB 'F' ; RFS Floppy boot code. - DW FLOPPY - DB 000H | 000H | 008H | 001H - DB 0AAH ; Original Floppy boot code. + DB 'F' ; 'F' RFS Floppy boot code. DW FDCK DB 000H | 000H | 030H | 001H DB 'H' ; Help screen. @@ -388,7 +387,7 @@ CMDCMP: XOR A ; Clear LD HL,CMDTABLE ENDIF IF BUILD_SFD700 = 1 - LD HL,CMDTABLE2 + LD HL,CMDTABLE2 ; SFD700 Command table located in lower location. ENDIF CMDCMP0: LD DE,BUFER+1 ; First command byte after the * prompt. LD A,(HL) @@ -419,9 +418,9 @@ CMDCMP3: LD A,(HL) ; Comma INC HL LD H,(HL) LD L,A - PUSH HL + PUSH HL ; Push the address of the function to be called. LD (TMPADR),DE ; Store the key buffer location where arguments start. - LD A,C + LD A,C ; Get back command properties, ie. bank number SRL A SRL A SRL A @@ -433,7 +432,7 @@ CMDCMP3: LD A,(HL) ; Comma LD DE,BKSW0to1 - BKSW0to0 ; DE is the number of bytes between bank switch calls. OR A JR Z,CMDCMP5 -CMDCMP4: ADD HL,DE +CMDCMP4: ADD HL,DE ; Basically adding the bank size to the address to get ROM location. DJNZ CMDCMP4 CMDCMP5: EX DE,HL ; Address of bank switch function into DE. POP HL ; Get address of command into HL. @@ -441,7 +440,7 @@ CMDCMP5: EX DE,HL ; Addre PUSH BC ; Address to return to after command is executed. PUSH DE ; Now jump to DE which will switch to the correct bank and execute function at HL. LD DE,(TMPADR) - RET + RET ; Return to address in DE, which is the required bank. CMDCMP6: LD DE,CMDCMPEND ; Put return address onto stack. PUSH DE LD DE,(TMPADR) ; For the current bank, just jump to the function. @@ -461,7 +460,7 @@ CMDCMPEND: LD A,(RESULT) LD HL,(EXADR) JP (HL) - ; Monitor command table. This table contains the list of recognised commands along with the + ; Monitor command table (ROMDISK). This table contains the list of recognised commands along with the ; handler function and bank in which it is located. ; ; 7 6 5:3 2:0 @@ -501,10 +500,10 @@ CMDTABLE: IF BUILD_ROMDISK = 1 DB "EC" ; Erase file. DW ERASESD DB 000H | 000H | 008H | 001H - DB 'F' ; RFS Floppy boot code. + DB 'F' ; 'F' RFS Floppy boot code. DW FLOPPY DB 000H | 000H | 008H | 001H - DB 0AAH ; Original Floppy boot code. + DB 0AAH ; 'f' Original Floppy boot code. DW FDCK DB 000H | 000H | 030H | 001H DB 'H' ; Help screen. @@ -617,7 +616,7 @@ HIROM: IF BUILD_ROMDISK = 1 LD A, (MEMSW) ; Swap ROM into high range slot. LD A, ROMBANK2 LD (ROMBK1),A ; Save bank being enabled. - HWSELMROM ; Switch to the hiload rom in bank 2. + HWSELMROM ; Switch to the hiload rom in bank 2. JP 0C000H ENDIF @@ -874,7 +873,6 @@ PRTMZF4: OR A POP BC RET - ; Method to list the directory of the ROM devices. ; DIRROM: ;DI ; Disable interrupts as we are switching out the main rom. @@ -903,7 +901,7 @@ DIRROM: ;DI ; Disab ; B = Bank Page ; C = Block in page ; - LD B,MROMPAGES ; First 8 pages are reserved in MROM bank. + LD B,MROMPAGES ; First set of pages are reserved in MROM bank. LD C,0 ; Block in page. ; DIRNXTPG: LD A,B @@ -970,7 +968,7 @@ FINDMZF: PUSH DE ; C = Block in page ; FINDMZF0: POP DE ; Get file sequence number in D. - LD B,MROMPAGES ; First 4 pages are reserved in User ROM bank. + LD B,MROMPAGES ; First set of pages are reserved in User ROM bank. LD C,0 ; Block in page. FINDMZF1: LD A,B LD (WRKROMBK1), A @@ -1051,17 +1049,18 @@ LOADROM1: ;DI PUSH HL ; Preserve execute flag. EX DE,HL ; User ROM expects HL to have the filename pointer. - PUSH HL ; Save pointer to filename for FINDMZF in Monitor ROM. - ; D = File sequence number. LD D,0 ; File numbering start. ; - LD A,ROMBANK3 ; Activate the RFS Utilities MROM bank. - LD (WRKROMBK1), A - HWSELMROM - CALL MFINDMZF ; Try and find the file in User ROM via MROM utility. - POP HL - JR Z,MROMLOAD0 + IF BUILD_ROMDISK = 1 + PUSH HL ; Save pointer to filename for FINDMZF in Monitor ROM. + LD A,ROMBANK3 ; Activate the RFS Utilities MROM bank. + LD (WRKROMBK1), A + HWSELMROM + CALL MFINDMZF ; Try and find the file in User ROM via MROM utility. + POP HL + JR Z,MROMLOAD0 + ENDIF ; CALL FINDMZF ; Find the bank and block where the file resides. HL = filename. JR Z, LROMLOAD @@ -1098,7 +1097,7 @@ LOADROMEND:;EI ; LROMLOAD: PUSH BC ; - PUSH BC + PUSH BC ; Print Loading LD DE,MSGLOAD+1 LD BC,NAME LD HL,PRINTMSG @@ -1110,7 +1109,7 @@ LROMLOAD: PUSH BC HWSELMROM ; LD DE, IBUFE ; Copy the header into the work area. - LD HL, 00000h ; Add block offset to get the valid block. + LD HL, MROMSTART ; Add block offset to get the valid block. LD A,C IF RFSSECTSZ >= 512 RLCA @@ -1141,7 +1140,7 @@ LROMLOAD2: LD A, B HWSELMROM LROMLOAD3: PUSH BC - LD HL, 00000h + LD HL, MROMSTART LD A, C IF RFSSECTSZ >= 512 RLCA @@ -1483,6 +1482,10 @@ DEFAULTFNE: EQU $ ORG 0EFF8h DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0AAh + IF BUILD_SFD700 = 1 + ALIGN 0F000H + ENDIF + MEND: ; diff --git a/asm/rfs_bank1.asm b/asm/rfs_bank1.asm index 2b74a71..e3ef092 100644 --- a/asm/rfs_bank1.asm +++ b/asm/rfs_bank1.asm @@ -11,13 +11,16 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: July 2019 - Merged 2 utilities to create this compilation. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. -; Mar 2023 - Fixed Floppy bug where the driver letter entered wasnt recognised. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- Mar 2023 - Fixed Floppy bug where the driver letter entered wasnt recognised. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -34,19 +37,19 @@ ;- along with this program. If not, see . ;-------------------------------------------------------------------------------------------------------- - IF BUILD_SFD700 = 1 + IF BUILD_SFD700 = 1 ORG 0E000H + ALIGN 0E300H + DB "BANK1" ALIGN UROMADDR - - - ENDIF + ENDIF ;============================================================ ; ; USER ROM BANK 1 - Floppy Disk Controller functions. ; ;============================================================ - ORG UROMADDR + ORG UROMADDR ;-------------------------------- ; Common code spanning all banks. @@ -136,369 +139,371 @@ FDCKROM: LD A,(0F000h) OR A RET -FLOPPY: PUSH DE ; Preserve pointer to input buffer. - LD DE,BPARA ; Copy disk parameter block into RAM work area. (From) - LD HL,PRMBLK ; (To) - LD BC,0000BH ; 11 bytes of config data. - LDIR ; BC=0, HL=F0E8, DE=1013 - POP DE ; init 1001-1005, port $DC mit $00 - LD A,(DE) ; If not at the end of the line, then process as the boot disk number. - CP 00Dh ; - JR NZ,GETBOOTDSK ; - CALL DSKINIT ; Initialise disk and flags. -L000F: LD DE,MSGBOOTDRV ; - LD HL,PRINTMSG - CALL BKSW1to6 - LD DE,011A3H ; - CALL GETL ; - LD A,(DE) ; - CP 01BH ; BREAK pressed? - JP Z,ST1X ; - LD HL,19 ; Check input value is in range 1-4. - ADD HL,DE ; - LD A,(HL) ; - CP 00DH ; - JR Z,L003A ; -GETBOOTDSK:CALL HEX ; Convert number to binary - JR C,L000F ; If illegal, loop back and re-prompt. - DEC A ; - CP 004H ; Check in range, if not loop back. - JR NC,L000F ; - LD (BPARA),A ; Store in parameter block. -L003A: LD IX,BPARA ; Point to drive number., - CALL DSKREAD ; Read sector 1 of trk 0 - LD HL,0CE00H ; Now compare the first 7 bytes of what was read to see if this is a bootable disk. - LD DE,DSKID ; - LD B,007H ; -L0049: LD C,(HL) ; - LD A,(DE) ; - CP C ; - JP NZ,L008C ; If NZ then this is not a master disk, ie not bootable, so error exit with message. - INC HL ; - INC DE ; - DJNZ L0049 ; - LD DE,MSGIPLLOAD ; - LD HL,PRINTMSG - CALL BKSW1to6 - LD DE,0CE07H ; Program name stored at 8th byte in boot sector. - LD HL,PRTFN - CALL BKSW1to6 - LD HL,(0CE16H) ; Get the load address - LD (IX+005H),L ; And store in parameter block at 100D/100E - LD (IX+006H),H ; - INC HL - DEC HL - JR NZ, NOTCPM ; If load address is 0 then where loading CPM. - ; LD A,(MEMSW) ; Page out ROM. -NOTCPM: LD HL,(0CE14H) ; Get the size - LD (IX+003H),L ; And store in parameter block at 100B/100C - LD (IX+004H),H ; - LD HL,(0CE1EH) ; Get logical sector number - LD (IX+001H),L ; And store in parameter block at 1009/100A - LD (IX+002H),H ; - CALL DSKREAD ; Read the required data and store in memory. - CALL DSKINIT ; Reset the disk ready for next operation. - LD HL,(0CE18H) ; Get the execution address - JP (HL) ; And execute. +FLOPPY: IF BUILD_ROMDISK = 1 + PUSH DE ; Preserve pointer to input buffer. + LD DE,BPARA ; Copy disk parameter block into RAM work area. (From) + LD HL,PRMBLK ; (To) + LD BC,0000BH ; 11 bytes of config data. + LDIR ; BC=0, HL=F0E8, DE=1013 + POP DE ; init 1001-1005, port $DC mit $00 + LD A,(DE) ; If not at the end of the line, then process as the boot disk number. + CP 00Dh ; + JR NZ,GETBOOTDSK ; + CALL DSKINIT ; Initialise disk and flags. +L000F: LD DE,MSGBOOTDRV ; + LD HL,PRINTMSG + CALL BKSW1to6 + LD DE,011A3H ; + CALL GETL ; + LD A,(DE) ; + CP 01BH ; BREAK pressed? + JP Z,ST1X ; + LD HL,19 ; Check input value is in range 1-4. + ADD HL,DE ; + LD A,(HL) ; + CP 00DH ; + JR Z,L003A ; +GETBOOTDSK: CALL HEX ; Convert number to binary + JR C,L000F ; If illegal, loop back and re-prompt. + DEC A ; + CP 004H ; Check in range, if not loop back. + JR NC,L000F ; + LD (BPARA),A ; Store in parameter block. +L003A: LD IX,BPARA ; Point to drive number., + CALL DSKREAD ; Read sector 1 of trk 0 + LD HL,0CE00H ; Now compare the first 7 bytes of what was read to see if this is a bootable disk. + LD DE,DSKID ; + LD B,007H ; +L0049: LD C,(HL) ; + LD A,(DE) ; + CP C ; + JP NZ,L008C ; If NZ then this is not a master disk, ie not bootable, so error exit with message. + INC HL ; + INC DE ; + DJNZ L0049 ; + LD DE,MSGIPLLOAD ; + LD HL,PRINTMSG + CALL BKSW1to6 + LD DE,0CE07H ; Program name stored at 8th byte in boot sector. + LD HL,PRTFN + CALL BKSW1to6 + LD HL,(0CE16H) ; Get the load address + LD (IX+005H),L ; And store in parameter block at 100D/100E + LD (IX+006H),H ; + INC HL + DEC HL + JR NZ, NOTCPM ; If load address is 0 then where loading CPM. + ;LD A,(MEMSW) ; Page out ROM. +NOTCPM: LD HL,(0CE14H) ; Get the size + LD (IX+003H),L ; And store in parameter block at 100B/100C + LD (IX+004H),H ; + LD HL,(0CE1EH) ; Get logical sector number + LD (IX+001H),L ; And store in parameter block at 1009/100A + LD (IX+002H),H ; + CALL DSKREAD ; Read the required data and store in memory. + CALL DSKINIT ; Reset the disk ready for next operation. + LD HL,(0CE18H) ; Get the execution address + JP (HL) ; And execute. -DSKLOADERR:LD DE,MSGLOADERR ; Loading error message - JR L008F ; (+003h) +DSKLOADERR: LD DE,MSGLOADERR ; Loading error message + JR L008F ; (+003h) -L008C: LD DE,MSGDSKNOTMST ; This is not a boot/master disk message. -L008F: LD HL,PRINTMSG - CALL BKSW1to6 - LD DE,ERRTONE ; Play error tone. - CALL MELDY - ; - LD SP,(TMPSTACKP) ; Recover the correct stack pointer before exit. - RET ; JP SS +L008C: LD DE,MSGDSKNOTMST ; This is not a boot/master disk message. +L008F: LD HL,PRINTMSG + CALL BKSW1to6 + LD DE,ERRTONE ; Play error tone. + CALL MELDY + ; + LD SP,(TMPSTACKP) ; Recover the correct stack pointer before exit. + RET ; JP SS -L0104: LD A,(MOTON) ; motor on flag - RRCA ; motor off? - CALL NC,DSKMOTORON ; yes, set motor on and wait - LD A,(IX+000H) ;drive no - OR 084H ; - OUT (0DCH),A ; Motor on for drive 0-3 - XOR A ; - LD (FDCCMD),A ; clr latest FDC command byte - LD HL,00000H ; -L0119: DEC HL ; - LD A,H ; - OR L ; - JP Z,DSKERR ; Reset and print message that this is not a bootable disk. - IN A,(0D8H) ; Status register. - CPL ; - RLCA ; - JR C,L0119 ; Wait on motor off (bit 7) - LD C,(IX+000H) ; Drive number - LD HL,TRK0FD1 ; 1 track 0 flag for each drive - LD B,000H ; - ADD HL,BC ; Compute related flag 1002/1003/1004/1005 - BIT 0,(HL) ; - JR NZ,L0137 ; - CALL DSKSEEKTK0 ; Seek track 0. - SET 0,(HL) ; Set bit 0 of trk 0 flag -L0137: RET +L0104: LD A,(MOTON) ; motor on flag + RRCA ; motor off? + CALL NC,DSKMOTORON ; yes, set motor on and wait + LD A,(IX+000H) ;drive no + OR 084H ; + OUT (0DCH),A ; Motor on for drive 0-3 + XOR A ; + LD (FDCCMD),A ; clr latest FDC command byte + LD HL,00000H ; +L0119: DEC HL ; + LD A,H ; + OR L ; + JP Z,DSKERR ; Reset and print message that this is not a bootable disk. + IN A,(0D8H) ; Status register. + CPL ; + RLCA ; + JR C,L0119 ; Wait on motor off (bit 7) + LD C,(IX+000H) ; Drive number + LD HL,TRK0FD1 ; 1 track 0 flag for each drive + LD B,000H ; + ADD HL,BC ; Compute related flag 1002/1003/1004/1005 + BIT 0,(HL) ; + JR NZ,L0137 ; + CALL DSKSEEKTK0 ; Seek track 0. + SET 0,(HL) ; Set bit 0 of trk 0 flag +L0137: RET - ; Turn disk motor on. -DSKMOTORON:LD A,080H - OUT (0DCH),A ; Motor on - LD B,010H ; -L013E: CALL L02C7 ; - DJNZ L013E ; Wait until becomes ready. - LD A,001H ; Set motor on flag. - LD (MOTON),A ; - RET + ; Turn disk motor on. +DSKMOTORON: LD A,080H + OUT (0DCH),A ; Motor on + LD B,010H ; +L013E: CALL L02C7 ; + DJNZ L013E ; Wait until becomes ready. + LD A,001H ; Set motor on flag. + LD (MOTON),A ; + RET -L0149: LD A,01BH - CALL DSKCMD - AND 099H - RET +L0149: LD A,01BH + CALL DSKCMD + AND 099H + RET - ; Initialise drive and reset flags, Set motor off -DSKINIT: XOR A - OUT (0DCH),A ; Motor on/off - LD (TRK0FD1),A ; Track 0 flag drive 1 - LD (TRK0FD2),A ; Track 0 flag drive 2 - LD (TRK0FD3),A ; Track 0 flag drive 3 - LD (TRK0FD4),A ; Track 0 flag drive 4 - LD (MOTON),A ; Motor on flag - RET + ; Initialise drive and reset flags, Set motor off +DSKINIT: XOR A + OUT (0DCH),A ; Motor on/off + LD (TRK0FD1),A ; Track 0 flag drive 1 + LD (TRK0FD2),A ; Track 0 flag drive 2 + LD (TRK0FD3),A ; Track 0 flag drive 3 + LD (TRK0FD4),A ; Track 0 flag drive 4 + LD (MOTON),A ; Motor on flag + RET -DSKSEEKTK0:LD A,00BH ; Restore command, seek track 0. - CALL DSKCMD ; Send command to FDC. - AND 085H ; Process result. - XOR 004H - RET Z - JP DSKERR +DSKSEEKTK0: LD A,00BH ; Restore command, seek track 0. + CALL DSKCMD ; Send command to FDC. + AND 085H ; Process result. + XOR 004H + RET Z + JP DSKERR -DSKCMD: LD (FDCCMD),A ; Store latest FDC command. - CPL ; Compliment it (FDC bit value is reversed). - OUT (0D8H),A ; Send command to FDC. - CALL L017E ; Wait to become ready. - IN A,(0D8H) ; Get status register. - CPL ; Inverse (FDC is reverse bit logic). - RET +DSKCMD: LD (FDCCMD),A ; Store latest FDC command. + CPL ; Compliment it (FDC bit value is reversed). + OUT (0D8H),A ; Send command to FDC. + CALL L017E ; Wait to become ready. + IN A,(0D8H) ; Get status register. + CPL ; Inverse (FDC is reverse bit logic). + RET -L017E: PUSH DE - PUSH HL - CALL L02C0 - LD E,007H -L0185: LD HL,00000H -L0188: DEC HL - LD A,H - OR L - JR Z,L0196 ; (+009h) - IN A,(0D8H) - CPL - RRCA - JR C,L0188 ; (-00bh) - POP HL - POP DE - RET +L017E: PUSH DE + PUSH HL + CALL L02C0 + LD E,007H +L0185: LD HL,00000H +L0188: DEC HL + LD A,H + OR L + JR Z,L0196 ; (+009h) + IN A,(0D8H) + CPL + RRCA + JR C,L0188 ; (-00bh) + POP HL + POP DE + RET -L0196: DEC E - JR NZ,L0185 ; (-014h) - JP DSKERR +L0196: DEC E + JR NZ,L0185 ; (-014h) + JP DSKERR -L019C: PUSH DE - PUSH HL - CALL L02C0 - LD E,007H -L01A3: LD HL,00000H -L01A6: DEC HL - LD A,H - OR L - JR Z,L01B4 ; (+009h) - IN A,(0D8H) - CPL - RRCA - JR NC,L01A6 ; (-00bh) - POP HL - POP DE - RET +L019C: PUSH DE + PUSH HL + CALL L02C0 + LD E,007H +L01A3: LD HL,00000H +L01A6: DEC HL + LD A,H + OR L + JR Z,L01B4 ; (+009h) + IN A,(0D8H) + CPL + RRCA + JR NC,L01A6 ; (-00bh) + POP HL + POP DE + RET -L01B4: DEC E - JR NZ,L01A3 ; (-014h) - JP DSKERR +L01B4: DEC E + JR NZ,L01A3 ; (-014h) + JP DSKERR - ; Read disk starting at the first logical sector in param block 1009/100A - ; Continue reading for the given size 100B/100C and store in the location - ; Pointed to by the address stored in the parameter block. 100D/100E -DSKREAD: CALL L0220 ; Compute logical sector-no to track-no & sector-no, retries=10 -L01BD: CALL L0229 ; Set current track & sector, get load address to HL -L01C0: CALL L0249 ; Set side reg - CALL L0149 ; Command 1b output (seek) - JR NZ,L0216 ; - CALL L0259 ; Set track & sector reg - PUSH IX ; Save 1008H - LD IX, 0F3FEH ; As below. L03FE - LD IY,L01DF ; Read sector into memory. - ;DI - LD A,094H ; Latest FDC command byte - CALL L028A -L01DB: LD B,000H - JP (IX) + ; Read disk starting at the first logical sector in param block 1009/100A + ; Continue reading for the given size 100B/100C and store in the location + ; Pointed to by the address stored in the parameter block. 100D/100E +DSKREAD: CALL L0220 ; Compute logical sector-no to track-no & sector-no, retries=10 +L01BD: CALL L0229 ; Set current track & sector, get load address to HL +L01C0: CALL L0249 ; Set side reg + CALL L0149 ; Command 1b output (seek) + JR NZ,L0216 ; + CALL L0259 ; Set track & sector reg + PUSH IX ; Save 1008H + LD IX, 0F3FEH ; As below. L03FE + LD IY,L01DF ; Read sector into memory. + ;DI + LD A,094H ; Latest FDC command byte + CALL L028A +L01DB: LD B,000H + JP (IX) - ; Get data from disk sector to staging area (CE00). -L01DF: INI - LD A,(DE) ; If not at the end of the line, then process as the boot disk number. - JP NZ, 0F3FEH ; This is crucial, as the Z80 is running at 2MHz it is not fast enough so needs + ; Get data from disk sector to staging area (CE00). +L01DF: INI + LD A,(DE) ; If not at the end of the line, then process as the boot disk number. + JP NZ, 0F3FEH ; This is crucial, as the Z80 is running at 2MHz it is not fast enough so needs ; hardware acceleration in the form of a banked ROM, if disk not ready jumps to IX, if ; data ready, jumps to IY. L03FE - POP IX - INC (IX+008H) ; Increment current sector number - LD A,(IX+008H) ; Load current sector number - PUSH IX ; Save 1008H - LD IX, 0F3FEH ; As above. L03FE - CP 011H ; Sector 17? Need to loop to next track. - JR Z,L01FB - DEC D - JR NZ,L01DB - JR L01FC ; (+001h) + POP IX + INC (IX+008H) ; Increment current sector number + LD A,(IX+008H) ; Load current sector number + PUSH IX ; Save 1008H + LD IX, 0F3FEH ; As above. L03FE + CP 011H ; Sector 17? Need to loop to next track. + JR Z,L01FB + DEC D + JR NZ,L01DB + JR L01FC ; (+001h) -L01FB: DEC D -L01FC: CALL L0294 - CALL L02D2 - POP IX - IN A,(0D8H) - CPL - AND 0FFH - JR NZ,L0216 ; (+00bh) - CALL L0278 - JP Z,L021B - LD A,(IX+007H) - JR L01C0 ; (-056h) +L01FB: DEC D +L01FC: CALL L0294 + CALL L02D2 + POP IX + IN A,(0D8H) + CPL + AND 0FFH + JR NZ,L0216 ; (+00bh) + CALL L0278 + JP Z,L021B + LD A,(IX+007H) + JR L01C0 ; (-056h) -L0216: CALL L026A - JR L01BD ; (-05eh) +L0216: CALL L026A + JR L01BD ; (-05eh) -L021B: LD A,080H - OUT (0DCH),A ; Motor on - RET +L021B: LD A,080H + OUT (0DCH),A ; Motor on + RET -L0220: CALL L02A3 ; compute logical sector no to track no & sector no - LD A,00AH ; 10 retries - LD (RETRIES),A - RET +L0220: CALL L02A3 ; compute logical sector no to track no & sector no + LD A,00AH ; 10 retries + LD (RETRIES),A + RET - ; Set current track & sector, get load address to HL -L0229: CALL L0104 - LD D,(IX+004H) ; Number of sectors to read - LD A,(IX+003H) ; Bytes to read - OR A ; 0? - JR Z,L0236 ; Yes - INC D ; Number of sectors to read + 1 -L0236: LD A,(IX+00AH) ; Start sector number - LD (IX+008H),A ; To current sector number - LD A,(IX+009H) ; Start track number - LD (IX+007H),A ; To current track number - LD L,(IX+005H) ; Load address low byte - LD H,(IX+006H) ; Load address high byte - RET + ; Set current track & sector, get load address to HL +L0229: CALL L0104 + LD D,(IX+004H) ; Number of sectors to read + LD A,(IX+003H) ; Bytes to read + OR A ; 0? + JR Z,L0236 ; Yes + INC D ; Number of sectors to read + 1 +L0236: LD A,(IX+00AH) ; Start sector number + LD (IX+008H),A ; To current sector number + LD A,(IX+009H) ; Start track number + LD (IX+007H),A ; To current track number + LD L,(IX+005H) ; Load address low byte + LD H,(IX+006H) ; Load address high byte + RET - ; Compute side/head. -L0249: SRL A ; Track number even? - CPL ; - OUT (0DBH),A ; Output track no. - JR NC,L0254 ; Yes, even, set side/head 1 - LD A,001H ; No, odd, set side/head 0 - JR L0255 + ; Compute side/head. +L0249: SRL A ; Track number even? + CPL ; + OUT (0DBH),A ; Output track no. + JR NC,L0254 ; Yes, even, set side/head 1 + LD A,001H ; No, odd, set side/head 0 + JR L0255 - ; Set side/head register. -L0254: XOR A ; Side 0 -L0255: CPL ; Side 1 - OUT (0DDH),A ; Side/head register. - RET + ; Set side/head register. +L0254: XOR A ; Side 0 +L0255: CPL ; Side 1 + OUT (0DDH),A ; Side/head register. + RET - ; Set track and sector register. -L0259: LD C,0DBH - LD A,(IX+007H) ; Current track number - SRL A - CPL - OUT (0D9H),A ; Track reg - LD A,(IX+008H) ; Current sector number - CPL - OUT (0DAH),A ; Sector reg - RET + ; Set track and sector register. +L0259: LD C,0DBH + LD A,(IX+007H) ; Current track number + SRL A + CPL + OUT (0D9H),A ; Track reg + LD A,(IX+008H) ; Current sector number + CPL + OUT (0DAH),A ; Sector reg + RET -L026A: LD A,(RETRIES) - DEC A - LD (RETRIES),A - JP Z,DSKERR - CALL DSKSEEKTK0 - RET +L026A: LD A,(RETRIES) + DEC A + LD (RETRIES),A + JP Z,DSKERR + CALL DSKSEEKTK0 + RET -L0278: LD A,(IX+008H) - CP 011H - JR NZ,L0287 ; (+008h) - LD A,001H - LD (IX+008H),A - INC (IX+007H) -L0287: LD A,D - OR A - RET +L0278: LD A,(IX+008H) + CP 011H + JR NZ,L0287 ; (+008h) + LD A,001H + LD (IX+008H),A + INC (IX+007H) +L0287: LD A,D + OR A + RET -L028A: LD (FDCCMD),A - CPL - OUT (0D8H),A - CALL L019C - RET +L028A: LD (FDCCMD),A + CPL + OUT (0D8H),A + CALL L019C + RET -L0294: LD A,0D8H - CPL - OUT (0D8H),A - CALL L017E - RET +L0294: LD A,0D8H + CPL + OUT (0D8H),A + CALL L017E + RET -DSKERR: CALL DSKINIT - JP DSKLOADERR +DSKERR: CALL DSKINIT + JP DSKLOADERR - ; Logical sector number to physical track and sector. -L02A3: LD B,000H - LD DE,00010H ; No of sectors per trk (16) - LD L,(IX+001H) ; Logical sector number - LD H,(IX+002H) ; 2 bytes in length - XOR A -L02AF: SBC HL,DE ; Subtract 16 sectors/trk - JR C,L02B6 ; Yes, negative value - INC B ; Count track - JR L02AF ; Loop -L02B6: ADD HL,DE ; Reset HL to the previous - LD H,B ; Track - INC L ; Correction +1 - LD (IX+009H),H ; Start track no - LD (IX+00AH),L ; Start sector no - RET + ; Logical sector number to physical track and sector. +L02A3: LD B,000H + LD DE,00010H ; No of sectors per trk (16) + LD L,(IX+001H) ; Logical sector number + LD H,(IX+002H) ; 2 bytes in length + XOR A +L02AF: SBC HL,DE ; Subtract 16 sectors/trk + JR C,L02B6 ; Yes, negative value + INC B ; Count track + JR L02AF ; Loop +L02B6: ADD HL,DE ; Reset HL to the previous + LD H,B ; Track + INC L ; Correction +1 + LD (IX+009H),H ; Start track no + LD (IX+00AH),L ; Start sector no + RET -L02C0: PUSH DE - LD DE,00007H - JP L02CB +L02C0: PUSH DE + LD DE,00007H + JP L02CB -L02C7: PUSH DE - LD DE,01013H -L02CB: DEC DE - LD A,E - OR D - JR NZ,L02CB ; (-005h) - POP DE - RET +L02C7: PUSH DE + LD DE,01013H +L02CB: DEC DE + LD A,E + OR D + JR NZ,L02CB ; (-005h) + POP DE + RET -L02D2: PUSH AF - LD A,(0119CH) - CP 0F0H - JR NZ,L02DB ; (+001h) - ;EI -L02DB: POP AF - RET +L02D2: PUSH AF + LD A,(0119CH) + CP 0F0H + JR NZ,L02DB ; (+001h) + ;EI +L02DB: POP AF + RET -;wait on bit 0 and bit 1 = 0 of state reg -L0300: IN A,(0D8H) ; State reg - RRCA - JR C,L0300 ; Wait on not busy - RRCA - JR C,L0300 ; Wait on data reg ready - JP (IY) ; to f1df + ;wait on bit 0 and bit 1 = 0 of state reg +L0300: IN A,(0D8H) ; State reg + RRCA + JR C,L0300 ; Wait on not busy + RRCA + JR C,L0300 ; Wait on data reg ready + JP (IY) ; to f1df + ENDIF ;------------------------------------------------------------------------------- ; END OF FLOPPY DISK CONTROLLER FUNCTIONALITY diff --git a/asm/rfs_bank2.asm b/asm/rfs_bank2.asm index 49211cd..5b1e8be 100644 --- a/asm/rfs_bank2.asm +++ b/asm/rfs_bank2.asm @@ -11,16 +11,19 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: July 2019 - Merged 2 utilities to create this compilation. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. -; July 2020 - Bug fixes and additions. -; July 2020 - Updated for the v2.1 hardware. RFS can run with a tranZPUter board with -; or without the K64 I/O processor. RFS wont use the K64 processor all -; operations are done by the Z80 under RFS. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- July 2020 - Bug fixes and additions. +;- July 2020 - Updated for the v2.1 hardware. RFS can run with a tranZPUter board with +;- or without the K64 I/O processor. RFS wont use the K64 processor all +;- operations are done by the Z80 under RFS. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -37,9 +40,11 @@ ;- along with this program. If not, see . ;-------------------------------------------------------------------------------------------------------- - IF BUILD_SFD700 = 1 - ORG 0E000H - ALIGN UROMADDR + IF BUILD_SFD700 = 1 + ORG 0E000H + ALIGN 0E300H + DB "BANK2" + ALIGN UROMADDR ENDIF ;=========================================================== @@ -1591,5 +1596,5 @@ SAVESD9: LD DE,MSGSVFAIL ; Fail, ENDIF IF BUILD_SFD700 = 1 - ALIGN 0F000H + ALIGN 0F000H ENDIF diff --git a/asm/rfs_bank3.asm b/asm/rfs_bank3.asm index 1ffa424..9dd6608 100644 --- a/asm/rfs_bank3.asm +++ b/asm/rfs_bank3.asm @@ -11,12 +11,15 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: July 2019 - Merged 2 utilities to create this compilation. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -38,11 +41,11 @@ COLW EQU 40 SCRNSZ EQU COLW * ROW MODE80C EQU 0 - IF BUILD_SFD700 = 1 - ORG 0E000H - ALIGN UROMADDR - - + IF BUILD_SFD700 = 1 + ORG 0E000H + ALIGN 0E300H + DB "BANK3" + ALIGN UROMADDR ENDIF ;=========================================================== diff --git a/asm/rfs_bank4.asm b/asm/rfs_bank4.asm index d86cb9c..a314a61 100644 --- a/asm/rfs_bank4.asm +++ b/asm/rfs_bank4.asm @@ -11,12 +11,15 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: July 2019 - Merged 2 utilities to create this compilation. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -33,11 +36,11 @@ ;- along with this program. If not, see . ;-------------------------------------------------------------------------------------------------------- - IF BUILD_SFD700 = 1 - ORG 0E000H - ALIGN UROMADDR - - + IF BUILD_SFD700 = 1 + ORG 0E000H + ALIGN 0E300H + DB "BANK4" + ALIGN UROMADDR ENDIF ;=========================================================== diff --git a/asm/rfs_bank5.asm b/asm/rfs_bank5.asm index cda0fe1..b516ccb 100644 --- a/asm/rfs_bank5.asm +++ b/asm/rfs_bank5.asm @@ -11,13 +11,16 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: July 2019 - Merged 2 utilities to create this compilation. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. -; Mar 2021 - Add mapping utilities for Sharp<->ASCII conversion. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- Mar 2021 - Add mapping utilities for Sharp<->ASCII conversion. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -34,11 +37,11 @@ ;- along with this program. If not, see . ;-------------------------------------------------------------------------------------------------------- - IF BUILD_SFD700 = 1 - ORG 0E000H - ALIGN UROMADDR - - + IF BUILD_SFD700 = 1 + ORG 0E000H + ALIGN 0E300H + DB "BANK5" + ALIGN UROMADDR ENDIF ;====================================== diff --git a/asm/rfs_bank6.asm b/asm/rfs_bank6.asm index df7ce16..4d537ef 100644 --- a/asm/rfs_bank6.asm +++ b/asm/rfs_bank6.asm @@ -11,15 +11,18 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: July 2019 - Merged 2 utilities to create this compilation. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. -; July 2020 - Updated for the v2.1 hardware. RFS can run with a tranZPUter board with -; or without the K64 I/O processor. RFS wont use the K64 processor all -; operations are done by the Z80 under RFS. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- July 2020 - Updated for the v2.1 hardware. RFS can run with a tranZPUter board with +;- or without the K64 I/O processor. RFS wont use the K64 processor all +;- operations are done by the Z80 under RFS. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -36,11 +39,11 @@ ;- along with this program. If not, see . ;-------------------------------------------------------------------------------------------------------- - IF BUILD_SFD700 = 1 - ORG 0E000H - ALIGN UROMADDR - - + IF BUILD_SFD700 = 1 + ORG 0E000H + ALIGN 0E300H + DB "BANK6" + ALIGN UROMADDR ENDIF ;====================================== @@ -319,8 +322,7 @@ HELPSCR: IF BUILD_ROMDISK = 1 DB "DXXXX[YYYY] - dump mem XXXX to YYYY.", 00DH DB "DASMXXXX[YYYY]", 00DH DB " disassemble XXXX to YYYY", 00DH - DB "F[X] - boot fd drive X.", 00DH - DB "f - boot fd original rom.", 00DH + DB "F - boot fd.", 00DH DB "H - this help screen.", 00DH DB "IR - rfs rom dir listing.", 00DH DB "JXXXX - jump to location XXXX.", 00DH @@ -478,7 +480,7 @@ ATBL: DB 0CCH ; NUL '\0' (null character) ; ;-------------------------------------- MSGSONTZ: DB "+ TZ" ; Version 2.x with version 2.1+ of tranZPUter board installed. -MSGSON: DB "+ RFS ", 0ABh, "2.3 **", 00DH, 000H ; Version 2.x-> as we are now using the v2.x PCB with 4 devices on-board +MSGSON: DB "+ RFS ", 0ABh, "2.31a **", 00DH, 000H ; Version 2.x-> as we are now using the v2.x PCB with 4 devices on-board MSGNOTFND: DB "Not Found", 00DH, 000H MSGRDIRLST: DB "ROM Directory:", 00DH, 000H MSGTRM: DB 00DH, 000H diff --git a/asm/rfs_bank7.asm b/asm/rfs_bank7.asm index 8bf4b78..6936414 100644 --- a/asm/rfs_bank7.asm +++ b/asm/rfs_bank7.asm @@ -1,6 +1,6 @@ ;-------------------------------------------------------------------------------------------------------- ;- -;- Name: rfs_bank4.asm +;- Name: rfs_bank7.asm ;- Created: July 2019 ;- Author(s): Philip Smart ;- Description: Sharp MZ series Rom Filing System. @@ -11,12 +11,15 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: July 2019 - Merged 2 utilities to create this compilation. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -40,11 +43,11 @@ ADDR: ADDR_LO: DS virtual 1 ADDR_HI: DS virtual 1 ASM_ADDR: DS virtual 8 ; Assembler Destination address -ASM_BUF: DS virtual 16 ; 16 byte ASM Input Buffer +ASM_BUF: DS virtual 12 ; 16 byte ASM Input Buffer OUT_BUF: DS virtual 4 ; 4 byte test buffer(last part of ASM_BUF) INS_BUF: DS virtual 4 ; 4 Byte Instruction Buffer PARM_BUF: DS virtual 7 ; 7 Byte Parm Buffer -VAL_BUF: ; 5 Byte Value Buffer +VAL_BUF: ;DS virtual 5 ; 5 Byte Value Buffer VAL_BUF_HI: DS virtual 2 ; 2 Hi Bytes in Value Buffer VAL_BUF_LO: DS virtual 2 ; 2 Lo Bytes in Value Buffer DS virtual 1 @@ -59,6 +62,7 @@ ML_BUF: DS virtual 2 ; 3 byte ML buffer ML_BTCOUNT: DS virtual 1 ; Last byte of ML buffer(byte count) VAL_LO: DS virtual 1 ; Converted value LO VAL_HI: DS virtual 1 ; Converted value Hi +BUF_END: ORG 0E000H @@ -117,7 +121,7 @@ DASM_LOOP1: CALL NL ; Print CR & LF LD HL,ASM_BUF ; Clear ASM_BUF, INS_BUF, PARM_BUF & VAL_BUF LD A,020H - LD B,26 ; (Set to all spaces) + LD B,BUF_END-ASM_BUF; (Set to all spaces) DASM_FILL: LD (HL),A INC HL DEC B diff --git a/asm/rfs_mrom.asm b/asm/rfs_mrom.asm index c234b2a..4d42e8c 100644 --- a/asm/rfs_mrom.asm +++ b/asm/rfs_mrom.asm @@ -13,12 +13,15 @@ ;- Copyright: (c) 2018-2023 Philip Smart ;- ;- History: Sep 2019 - Initial version. -; May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded -; latch adds additional instruction overhead as the control latches share -; the same address space as the Flash RAMS thus the extra hardware to -; only enable the control registers if a fixed number of reads is made -; into the upper 8 bytes which normally wouldnt occur. Caveat - ensure -; that no loop instruction is ever placed into EFF8H - EFFFH. +;- May 2020 - Bank switch changes with release of v2 pcb with coded latch. The coded +;- latch adds additional instruction overhead as the control latches share +;- the same address space as the Flash RAMS thus the extra hardware to +;- only enable the control registers if a fixed number of reads is made +;- into the upper 8 bytes which normally wouldnt occur. Caveat - ensure +;- that no loop instruction is ever placed into EFF8H - EFFFH. +;- Aug 2023 - Updates to make RFS run under the SFD700 Floppy Disk Interface board. +;- UROM remains the same, a 2K paged ROM, MROM is located at F000 when +;- RFS is built for the SFD700. ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify diff --git a/asm/sa-5510_rfs.asm b/asm/sa-5510_rfs.asm index 342859d..f23c9cd 100644 --- a/asm/sa-5510_rfs.asm +++ b/asm/sa-5510_rfs.asm @@ -96,13 +96,23 @@ ONTYO EQU 0119FH OCTV EQU 011A0H RATIO EQU 011A1H BUFER EQU 011A3H -CMT_RDINF EQU 0E886H ; UROMADDR+86H - Tape/SD intercept handler - Read Header -CMT_RDDATA EQU 0E889H ; UROMADDR+89H - Tape/SD intercept handler - Read Data -CMT_WRINF EQU 0E88CH ; UROMADDR+80H - Tape/SD intercept handler - Write Header -CMT_WRDATA EQU 0E88FH ; UROMADDR+8FH - Tape/SD intercept handler - Write Data -CMT_VERIFY EQU 0E892H ; UROMADDR+92H - Tape/SD intercept handler - Verify Data -CMT_DIR EQU 0E895H ; UROMADDR+95H - SD directory command. -PRGSTART EQU 011FDH ; Build includes the tape copy code under original build. + +; RFS ROM addresses. +UROMADDR EQU 0E800H ; Start of User ROM Address space. +UROMBSTBL EQU UROMADDR + 020H ; Entry point to the bank switching table. +RFSJMPTABLE EQU UROMADDR + 000B0H ; Start of jump table. + +;------------------------------------------------------- +; Function entry points in the RFS ROM. +;------------------------------------------------------- +CMT_RDINF EQU RFSJMPTABLE + 06H ; UROMADDR+86H - Tape/SD intercept handler - Read Header +CMT_RDDATA EQU RFSJMPTABLE + 09H ; UROMADDR+89H - Tape/SD intercept handler - Read Data +CMT_WRINF EQU RFSJMPTABLE + 0CH ; UROMADDR+80H - Tape/SD intercept handler - Write Header +CMT_WRDATA EQU RFSJMPTABLE + 0FH ; UROMADDR+8FH - Tape/SD intercept handler - Write Data +CMT_VERIFY EQU RFSJMPTABLE + 12H ; UROMADDR+92H - Tape/SD intercept handler - Verify Data +CMT_DIR EQU RFSJMPTABLE + 15H ; UROMADDR+95H - SD directory command. +CNV_ATOS EQU RFSJMPTABLE + 18H ; UROMADDR+98H - Convert an ASCII string into Sharp ASCII +PRGSTART EQU 011FDH ; Build includes the tape copy code under original build. ; Original build set the tape handlers to original. IF BUILD_ORIG = 1 diff --git a/build.sh b/build.sh index 9780413..8edbb5e 100755 --- a/build.sh +++ b/build.sh @@ -3,54 +3,71 @@ ROOT_DIR=`pwd` SW_DIR=${ROOT_DIR}/ PROCESS_MZF_FILES=0 -if [ "x$1" = '-m' ]; then - PROCESS_MZF_FILES=1 +if [ "$1" = '-m' ]; then + PROCESS_MZF_FILES=1 fi +# Make sure cpmtools is compiled and available in the tools directory. +if [[ ! -f ${ROOT_DIR}/tools/cpmcp ]]; then + cd ${ROOT_DIR}/cpmtools + ./configure -prefix=${ROOT_DIR}/tools -libdir=${ROOT_DIR}/tools/lib -bindir=${ROOT_DIR}/tools + make all + make install + cp ${ROOT_DIR}/config/diskdefs ${ROOT_DIR}/tools/share/ +fi + +# Update path to ensure we use our locally compiled tools. +export PATH=${ROOT_DIR}/tools:${PATH} ( -cd $SW_DIR -tools/assemble_rfs.sh -if [ $? != 0 ]; then - echo "RFS assembly failed..." - exit 1 -fi -tools/assemble_cpm.sh -if [ $? != 0 ]; then - echo "CPM assembly failed..." - exit 1 -fi -tools/assemble_roms.sh -if [ $? != 0 ]; then - echo "ROMS assembly failed..." - exit 1 -fi + cd $SW_DIR + tools/assemble_rfs.sh + if [ $? != 0 ]; then + echo "RFS assembly failed..." + exit 1 + fi + tools/assemble_cpm.sh + if [ $? != 0 ]; then + echo "CPM assembly failed..." + exit 1 + fi + tools/assemble_roms.sh + if [ $? != 0 ]; then + echo "ROMS assembly failed..." + exit 1 + fi + + # Only needed if the program source tree changes, takes too long to run on every build! + if [[ ${PROCESS_MZF_FILES} -eq 1 ]]; then + tools/processMZFfiles.sh + if [ $? != 0 ]; then + echo "Failed to process MZF files into sectored variants...." + exit 1 + fi + fi -# Only needed if the program source tree changes, takes too long to run on every build! -if [[ ${PROCESS_MFZ_FILES} -eq 1 ]]; then - tools/processMZFfiles.sh - if [ $? != 0 ]; then - echo "Failed to process MZF files into sectored variants...." - exit 1 - fi -fi -tools/make_roms.sh -if [ $? != 0 ]; then - echo "ROM disk assembly failed..." - exit 1 -fi -tools/make_cpmdisks.sh -if [ $? != 0 ]; then - echo "CPM disks assembly failed..." - exit 1 -fi -tools/make_sdcard.sh -if [ $? != 0 ]; then - echo "SD card assembly failed..." - exit 1 -fi + tools/make_roms.sh + if [ $? != 0 ]; then + echo "ROM disk assembly failed..." + exit 1 + fi + tools/make_cpmdisks.sh + if [ $? != 0 ]; then + echo "CPM disks assembly failed..." + exit 1 + fi + tools/make_sdcard.sh + if [ $? != 0 ]; then + echo "SD card assembly failed..." + exit 1 + fi ) if [ $? != 0 ]; then exit 1 fi + +echo "" +echo "Program ROMS via TL866 or similar using command:" +echo " minipro --infoic /dvlp/Projects/minipro/infoic.xml -p SST39SF040 -s -w roms/SFD700_256.bin" +echo "" echo "Done!" diff --git a/config/diskdefs b/config/diskdefs index 3af24bb..938a244 100644 --- a/config/diskdefs +++ b/config/diskdefs @@ -55,7 +55,7 @@ diskdef MZ80A-RFS-320 tracks 20 sectrk 128 blocksize 2048 - maxdir 32 + maxdir 64 skew 0 boottrk 0 os 2.2 diff --git a/cpmtools b/cpmtools new file mode 160000 index 0000000..e534e20 --- /dev/null +++ b/cpmtools @@ -0,0 +1 @@ +Subproject commit e534e20c15973a9559e981efb498a102020e5db7 diff --git a/roms/SHARP_MZ80A_RFS_IMAGE_0.img b/roms/SHARP_MZ80A_RFS_IMAGE_0.img index a964bdd272293a814a38cc0e65ba65715c143ef0..49751e8f5dd2ff2bcea897805cde435508295ba5 100644 GIT binary patch delta 30396 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 M5%`(FF9fdtH$vgQv;Y7A diff --git a/roms/SHARP_MZ80A_RFS_IMAGE_2.img b/roms/SHARP_MZ80A_RFS_IMAGE_2.img index defdce18d72465d068ddc931a21654023aa80656..86cf66d831764ddb3010da222e649147626913ed 100644 GIT binary patch delta 1957 zcmeH_`I}XB9e`)ffOA=fdl_IDmO1ww5M*Zn8DwjJvQ1m8p|Ub*dy+(>8gi@A@{Jbq z#y7?`m%Jk*%7Y(mytOOvx|bLIK-8{$YE+0?Wyt2S2B<}A-f)zXFa#b7K(*V2Ld;&3d+ zMAlSnThWwfV{2($eX%(fEz#5$gH3s9Ty62FhSrAG)G?wxE645;c~*|yp-SAMP;3v4 zucX03agR`IB^@4-ms)EZn;%&aPxV~X6QUlOXA`0hO^muw)S*dH7m7O67ImR`#3S-- za&(2F3$;gAD7w&;=n6#_ni^f9=$i9vT6Be?3r&x%P;{Y==n6#_%A+e3T`4bBD-By3 zTIX&{9i{fH8g(hph&oPD+rDYvhIpUdrS`_oG*qevhl4Xx+o*!w!I`P2&fegWslU#F z;H)%M=WuX#Y8zd!J9t#;sk1jYC-v7k5S*Ka>KqZuJhY)xy+?b+(6VaGDqghJee;GWT7mQ#nL59WT`BZqh+~t%L+M0R>~?_Eo)@0 zyg*(kFOnC_OXQ{UGI_ZiE3c4O%B$qn@)|i#j+fWU>*V$F2020AC~uM;StoCnx5!)N zM0uOMUEU!l$vfp_SugLBcguU^z4AVJznmf)AQb*)PA7 z-^;CXo7^r#azOqdcgUS`m)tG)$h~qY@{l|%f0n<;Fy v$=~H4@=tkOo{%SHSPsim^0Yi7&&t2#Ir+CdzpJaVzx;pv&&*&)SEc+PTupTn delta 28389 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 UZNkq9mk5^$zaab%;R<2mm!nzMv;Y7A delta 914 zcmb8n_qz=Q0LJm>-kfud=$Q9f_kL~i7!5PBXDBO)jL=YKBxPI|U$Y#JkyZ94+_+Ts zOwl4yMj@lfNMs-W13$d)^L&1I-{j57>64>bnG%T13FL?gMbZL^vAM#LgMp+du0;_a zj>HG=qe3t-HX$5o^#J{%$Q_PMd4RMi@DC|Ex=Chl%RBotRP1&NVZc|_7l zK!Oq{=_P|?luYudWR@)Qn1m#&WRvWYLvl(kiI)V)EqNrbOGzmurKOCNl_%s$c}kv^a#CI@NJXh6mE{?!B30#CsV3E>hSZc=Qd{as zU8yJarGYe*=cJJ|mL~GNydX`bnKYLc(o$ZOR`QaxmY1cCw3Sz+owSz@(otTOPSRPr z$ZPVtydiH&S9wd`mTuBrdPq;{CB5Yx=_7sRUFj$9Nq>1?K9B)2PzK3hNtPj!B12`E z3>RgDjFeF_TE@s&`A|NRaT1pCGC?9TQ6|Y`nIa#{RGB8zWroa@PvldXC9`FY%$0dE zUlzzhStN^Pi7b_6vRqckXR=aO$!bZJ&t;9Ql{8r=>*WjiQofQ6vQak4X4xWJWt(i5 z9kNq)$!_^t_Q*H#t?ZS3@|}DyKgf^rlkArR^0OS2U*wP+mS5#JIU+~pm>ieiE+LaqNv2UBW*g_VI@I_9HB|O5aSD%Tio|VbVA%jiFQ7Y)3kqoSwy{)H z5mpd7ar4>Sq`g>;iHV<(L5c?pC{R8v`{-q>{F-RDj3oinH#XkZIF-Xh3)8FC>H|_V zmQ)W`y;$Y3>ce|hqifyy!M`m{+Ke7Es#z)+ekl0&0~{&hYn8u- zxK=uD)Au$kv$CtZawENF&xLI$h@nUHiXEDApGfGmtu?3uCX}~ekcWbICc?Eqp#er2 zG616@4Etb6AmyHzu^8tyF2ogM29U#xjO2=+Sml`UnRE%bn}JwUSqBLd9ZB|UoXhDH zug{R*jhV2BR^9IqVLwOdt|=f1BN*mj$WvU?6J9>F)pqG5+aNk0a32XwEzGB literal 0 HcmV?d00001 diff --git a/roms/rfs.rom b/roms/rfs.rom index f62c978909dea2ae41f541166bdf21e3d72b107e..2e1c39374ed93f73c1798b749461277812edfdb1 100644 GIT binary patch delta 1602 zcmYjPZ%h+s9KN^zj?#j6u&@G3?^-Qa{SoM;TnqDzQhoX!|E%OHzRm&}d? zaI&}dg5%|`9?NlW^##y7U;YanNzbY9(#Mm;9YX>z0dD? zp5LGM?TwpyXQm^aTBz=yS_C2JJ!#&O#TZg6>PISQ2&cMoZYDww5ocl(LO70}( z_tdz2Mom={6?zfl6#Udv`3E@T4DMeHutwlDc31->pQ{9ehe0>|dSf>(f!@>#zK8E@I>5!X{56Xb{1ZBkya8j-(?kBVKFXGgu6?Vh3amiC8yZ$XSz@{Y-lKc8i|2!1G+;}u%t%;peH2}rUFAc3HNs7BNd6=vUrx)Rj69rB*!zwgpI5T!DanBfe&`~Z&+c(@8#mW4+&h(TJR(6 zjT89cME|O`CUi9s%m~eBI-V%ZL>Ht6V-t3}-P2@7{xj{t12-fE8mROIGv4r z!BR-U`Gf&C&bMR08w{g%s~59$B6T8T^+t)SsqZqeMVm=$e(#OtY<(zM6Mz>7s>lG6 z9MeJ*oEQkMYDUTy^5>Lm8Wa+WU5QzBA~BXxJRzjS3UFp6X6M7O`q+u0N`%KK?^uxA z7l0eak8z**kjyW5YLT|B9?2i+!fISb!ZAZv%;j%})Hp3y=t4LLduHgmSK$3=8mlQw zc;ZuDKu7r&q_D4}d?R~jl*5GL)o&&C&InC-PAOw;7h2G*>fAdWzJw1@Sl)yTBF6Kp zkXv!OcI*ZFKJNpZNFH~Ul>`tjt((RTmggFK!Mb5+r0T5@l2+;XT*65DP*-9E_EciP z=-Gt9$+0`hyW=?Ch->SeRXhP4w(_|qQwjYATM18&lzUdAh*A?khWVR`A9bM-MX*9T TsvB~J^}*Cg9q@_IN9^E#0{y77 delta 2284 zcmZuxe{2)i9e>Y1?(8@rcZ6n_q$GDXSsdqw%>_2+aE_HQeslt|qE@J=W3VnORUsRr zWgFB%NLT7M)osC008y7svtl!t{u+pX&=Sv3VRyK`QL(nK+om-sJ(`nH?kL<%J;8%KfSVO z0cYNF!OCF;A5Qn<_tNnyP-+(N`BF7=4_`qy@&oP5fRF`N34bvl4U9`Uhx9^7tY&1; zrwA4EI4~pKW&8N+kI1}swq~Al#p(c?H&4pevs@$@_C0cmhYg|3Adw1tcaFQA6fVr* zZ8HglbW0Q)p4qay0KHjIU4F@^`TKA}37f$CrCH$p{JY$OxqsX|{_($g1&<)LV6%V3 zF!%7VsMM_XhD;$C#1jVpouX>;eAve6S^FAd=kZrYpd3#`Hm&G|k)=XteTR9{P8tt6 zL~~v3W2}P_YG=#C^E$lliwvs}W#jA9o2$Y1$VhZpBYfx)4ZGmyo z!Dxbm!SlKRhSLTT)t><}Tv%Demn|k_sMA$$28hD7aDAp0jCTYo8ac z(!zP#F+%Coj?vm-yVgo6gB$&$69JnHxpvs=AJvo<6ND;by+Ne?qc;_aVwwmOsVga> zLX0NMJ7kz4T1Wq;PgyR_u&&7Cxf&^?cQIb40LuXFFw|Nty~Z;^tBre5^5a_Vs8f42 zPZ?ur5CgMgY!Op-`~&{su(Il&^e5K*j0X$K#CT!wVPWvgMID{yCL?BQX3K+Msfg88D#PQCH-_W@{*{tl9w@?y_Rc%UF>bNw(ec$3q~(zmmwQKx9fbc z2f6CQ@GSam{j=~F=yrV>^@hRG?0p3Nbt`%ZS1e(SB`NR&b~6h3-=oWNrpSP_(y@G2 zf@i36nO(ULoe#RVzP*4PLyoRPe6SEO3{)bV)5h~9P%B6ML}8xdr;Z-gJC zA8voyJGFeUWFX#U71P4o$atOo+p<}~b>OC=v;T=qZeQ(uOctT{Jji=IL-b3XmeO?O zcQ0Ls>-O$>f#>V^18r?b`PLWt7mpl#?Wg>n`hr$I^L!1o9Xa^3gNOIO!XIfn6#2=^ z6_!ZnD|?DrYNG(uUVLB*Gq#)alWsp^I|6>c>V_(I0?DG{m{lU*F)Pjof=iWos`Qx0 z9^E(TgKAimR8LskfPUUlQSMX48kM9~tKwfL@%vMFZ4#fGk_&ecM=6AQI+`mU-G_?g zQ_Vn>nv!Z%6DU`cD*#3N)}zACeb9&6I=8IO;-6-4(Wgqa8EUCcCEP@y4vlnHHcRT| zXdo$VP^bH&c}aOGR-c^&D=I3c=_I}}mff4Qk9aElFskD^R&X z)ppV!#kpyi2Q;S^wwoY2kks7kRdRNSGC6)?2vwarT~MKtGUDf#@YW^hLH(z^?LHNY zOK!hv>|U$lBc>E2%ZR$}u=0HF0*$So#-*kd%9!1E*p_dY4^FWpnz02(PKdJly4a*@ zLYbONr1g$=3}_y6Fxq-Yl1QE6*>S7Xqz+bPe$&BAq=C|tlA3iS_S`6EMk2SBaG{Pj zIv^LJ-{gu{HmGE2Z7fN!B$L>p;6ZD<%fGi?ja8bYFCjH{*d#YI;ncz~o3n)&69dD_ z*j0izlC_ Mu7$qH7u`g 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. ######################################################################################################### +echo "--------------------------------------------------------------------------------" +echo "cpmtool package contains a bug. If cpmcp aborts with malloc issue," +echo "obtain and compile cpmtools locally and update path to point to your local copy." +echo "--------------------------------------------------------------------------------" + # These two variables configure which CPM images and disks to build. If only 1 CPM_RFS ROM Drive is needed, # remove it fro the lists. #BUILDCPMLIST="cpm22 CPM_RFS_1" @@ -125,10 +130,11 @@ echo "Creating CPM Disks from all the directories in:$CPM_PATH} matching this fi # Build the SD Card images, these images differ as they are larger and combine more programs in one disk under different user numbers. # Copy a blank image to create the new disk. - cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK1.RAW; + # cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK1.RAW; # Copy the CPM files from the linux filesystem into the CPM Disk under the CPM filesystem. cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK0.RAW; + echo "SDCDISK0.RAW..." cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK0.RAW ${CPM_PATH}/CPM00_SYSTEM/*.* 0: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK0.RAW ${CPM_PATH}/CPM01_TURBOP/*.* 1: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK0.RAW ${CPM_PATH}/CPM02_HI_C/*.* 2: @@ -146,6 +152,7 @@ echo "Creating CPM Disks from all the directories in:$CPM_PATH} matching this fi cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK0.RAW ${CPM_PATH}/CPM33_ZCPR3_COMMON/*.* 14: cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK1.RAW; + echo "SDCDISK1.RAW..." cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK1.RAW ${CPM_PATH}/CPM12_PASCALMTP_v561/*.* 0: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK1.RAW ${CPM_PATH}/CPM26_TPASCAL_v300a/*.* 1: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK1.RAW ${CPM_PATH}/CPM13_MTPUG_01/*.* 2: @@ -160,6 +167,7 @@ echo "Creating CPM Disks from all the directories in:$CPM_PATH} matching this fi cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK1.RAW ${CPM_PATH}/CPM22_MTPUG_10/*.* 11: cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK2.RAW; + echo "SDCDISK2.RAW..." cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK2.RAW ${CPM_PATH}/CPM23_PLI/*.* 0: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK2.RAW ${CPM_PATH}/CPM24_PLI80_v13/*.* 1: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK2.RAW ${CPM_PATH}/CPM25_PLI80_v14/*.* 2: @@ -169,6 +177,7 @@ echo "Creating CPM Disks from all the directories in:$CPM_PATH} matching this fi cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK2.RAW ${CPM_PATH}/CPM30_WORDSTAR_v400/*.* 6: cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK3.RAW; + echo "SDCDISK3.RAW..." cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK3.RAW ${CPM_PATH}/CPM_MC_C0/*.* 0: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK3.RAW ${CPM_PATH}/CPM_MC_C1/*.* 1: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK3.RAW ${CPM_PATH}/CPM_MC_C2/*.* 2: @@ -181,6 +190,7 @@ echo "Creating CPM Disks from all the directories in:$CPM_PATH} matching this fi cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK3.RAW ${CPM_PATH}/CPM_MC_C9/*.* 9: cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK4.RAW; + echo "SDCDISK4.RAW..." cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK4.RAW ${CPM_PATH}/CPM_MC_D0/*.* 0: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK4.RAW ${CPM_PATH}/CPM_MC_D1/*.* 1: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK4.RAW ${CPM_PATH}/CPM_MC_D2/*.* 2: @@ -194,6 +204,7 @@ echo "Creating CPM Disks from all the directories in:$CPM_PATH} matching this fi cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK4.RAW ${CPM_PATH}/CPM_MC_D9/*.* 9: cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK5.RAW; + echo "SDCDISK5.RAW..." cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK5.RAW ${CPM_PATH}/CPM_MC_E0/*.* 0: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK5.RAW ${CPM_PATH}/CPM_MC_E1/*.* 1: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK5.RAW ${CPM_PATH}/CPM_MC_E2/*.* 2: @@ -206,6 +217,7 @@ echo "Creating CPM Disks from all the directories in:$CPM_PATH} matching this fi cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK5.RAW ${CPM_PATH}/CPM_MC_E9/*.* 9: cp ${CPM_PATH}/BLANKFD/BLANK_16M.RAW ${SDC16M_PATH}/RAW/SDCDISK6.RAW; + echo "SDCDISK6.RAW..." cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK6.RAW ${CPM_PATH}/CPM_MC_F0/*.* 0: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK6.RAW ${CPM_PATH}/CPM_MC_F1/*.* 1: cpmcp -f MZ80A-SDC16M ${SDC16M_PATH}/RAW/SDCDISK6.RAW ${CPM_PATH}/CPM_MC_F2/*.* 2: diff --git a/tools/make_roms.sh b/tools/make_roms.sh index f5cafb8..29d135a 100755 --- a/tools/make_roms.sh +++ b/tools/make_roms.sh @@ -46,12 +46,36 @@ MONITOR_ROM=/tmp/mrom.rom USER_ROM_I=/tmp/user.rom USER_ROM_II=/tmp/user2.rom USER_ROM_III=/tmp/user3.rom +SFD700_ROM=/tmp/sfd700.rom -# Monitor/User ROM 1/2/3 = empty. +function addMZFToROMImageList +{ + local INCLUDE_RFS=$1 + local INCLUDE_SFD700=$2 + local INCLUDE_RSV1=$3 + local INCLUDE_RSV2=$4 + local MZFFILE=$5 + + if [[ ${INCLUDE_RFS} -eq 1 ]]; then + ROM_INCLUDE+="${MZFFILE}:" + fi + if [[ ${INCLUDE_SFD700} -eq 1 ]]; then + ROM_INCLUDE_SFD700+="${MZFFILE}:" + fi + if [[ ${INCLUDE_RSV1} -eq 1 ]]; then + ROM_INCLUDE_RSV1+="${MZFFILE}:" + fi + if [[ ${INCLUDE_RSV2} -eq 1 ]]; then + ROM_INCLUDE_RSV2+="${MZFFILE}:" + fi +} + +# Monitor/User ROM 1/2/3, SFD700 = empty. > ${MONITOR_ROM} > ${USER_ROM_I} > ${USER_ROM_II} > ${USER_ROM_III} +> ${SFD700_ROM} # Create a file with a list of programs placed into the ROM. This list can then be used by the SD # card script to ensure no duplication occurs when building the SD RFS program directory. @@ -73,6 +97,14 @@ cat ${ROM_PATH}/rfs.rom ${ROM_PATH}/cbios_bank1.rom ${ROM_PATH}/cbios_bank2.rom ${ROM_PATH}/cbios_bank3.rom ${ROM_PATH}/cbios_bank4.rom \ >> ${USER_ROM_I} +# The SFD700 ROM is built as follows: +# 0x00000 : 0x00FFF - MZ80A Floppy ROM MZ80AFI.rom (duplicated ROM at 0x00400) +# 0x01000 : 0x01FFF - MZ-1E05 MZ700 Floppy ROM mz-1e05.rom +# 0x02000 : 0x0BFFF - RFS rfs.rom +# 0x0C000 : 0x7FFFF - USER / ROM File System +cat ${ROM_PATH}/mz80afi_sfd700.rom ${ROM_PATH}/mz80afi_sfd700.rom ${ROM_PATH}/mz-1e05.rom ${ROM_PATH}/rfs.rom \ + >> ${SFD700_ROM} + # For CPM, to be safe, we manually copy the required files rather than use the list below. The CP/M boot image must be in User ROM 1. echo "cat ${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin >> ${USER_ROM_I}" cat ${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin >> ${USER_ROM_I} @@ -103,603 +135,614 @@ cat ${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin >> ${USER_ROM_I} # fi #fi -# Manually choose the programs you want installed into the ROMS. The files will be first placed into the USER ROM and when full into the -# Monitor ROM. Thus order is important if you want a particular program in a particular ROM. +# Manually choose the programs you want installed into the ROMS. +# For RFS on the ROMDISK: +# The files will be first placed into the USER ROM and when full into the Monitor ROM. Thus order is important +# if you want a particular program in a particular ROM. +# For RFS on the SFD700: +# The files will be added onto the end of the SFD700 ROM in order first placed. # # NB: A Double Hash (##) indicates a program found not to work on the Sharp MZ-80A. # +# addMZFToROMImageList +# +# ROM_INCLUDE="" +ROM_INCLUDE_SFD700="" +ROM_INCLUDE_RSV1="" +ROM_INCLUDE_RSV2="" # # Common # -ROM_INCLUDE+="${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_sa5510.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_sa6510.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/msbasic_mz80a.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/msbasic_rfs40.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/msbasic_rfs80.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/sa-5510_compiler.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/bas_mod_v374.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/xpatch_5510_v2.2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_sp5025.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_sp5030.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_sp-5035mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/solo_basic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_om-500.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_om-1000.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/basic_om-1001.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/hu-basic_v1.3_k.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/hucompilmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/compiler_a2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/express_compiler.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/k_a_converter.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/hisoft_pascal4.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/z80assembler2mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/editor-assembler_sp2202mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/zen.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/8048_cpu_disas.mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/6502betrmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/6502demo2mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/6502demomc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/fortransosz80.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/mz700_forth1.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/kniforth.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/tinylispmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/apollo_word_1.9mmc_.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/hucalc_80a_m.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/send-1.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/Common/apollo_chess_v2a.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/Common/5z009-1b.mzf:" -#ROM_INCLUDE+="${MZB_PATH}/Common/basic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/Common/cpm223.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/Common/sharpmz-test.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/Common/testtz.${SECTORSIZE}.bin:" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/basic_sa5510.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/basic_sa6510.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/msbasic_mz80a.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/msbasic_rfs40.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/msbasic_rfs80.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/sa-5510_compiler.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/bas_mod_v374.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/xpatch_5510_v2.2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/basic_sp5025.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/basic_sp5030.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/basic_sp-5035mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/solo_basic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/basic_om-500.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/basic_om-1000.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/basic_om-1001.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/hu-basic_v1.3_k.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/hucompilmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/compiler_a2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/express_compiler.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/k_a_converter.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/hisoft_pascal4.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/z80assembler2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/editor-assembler_sp2202mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/zen.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/8048_cpu_disas.mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/6502betrmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/6502demo2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/6502demomc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/fortransosz80.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/mz700_forth1.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/kniforth.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/tinylispmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/apollo_word_1.9mmc_.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/hucalc_80a_m.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/Common/send-1.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/Common/apollo_chess_v2a.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/Common/5z009-1b.mzf" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/Common/basic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/Common/cpm22.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/Common/cpm223.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/Common/sharpmz-test.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/Common/testtz.${SECTORSIZE}.bin" # # MZ-80A # -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/sa-6510.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/3-d_maze.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/80a_pencil.a2_c2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/80a_pencil.a2_s.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/a-basic_sa-5510.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/adventuregame.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/air_lander.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/alien_attack.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/alien_attack_machinecode.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/alien_eagle.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/alligator.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/apollo_chess_v2a.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/basic80a.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/basic_sa-5510.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/basic.sa-5510.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/blocking.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/bouncing_ball.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/breakout.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/breakout_mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/brickstop.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/bytesaver_sa5510.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/cells_and_serps.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/colony.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/cosmiad-a.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/cosmiad-k.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/cursedchamber.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/dcs_mz80a_append.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/dcs_mz80a_renum.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/defender(2).${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/defender_bizzarri.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/diamond.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/digger.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/dog_and_flea.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/dog_star_2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/duck_shoot.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/epidemic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/escape.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/escape_force.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/flying_mission.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/forest_of_doom.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/fruit_machine.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/galaxy_invaders.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/greedy_gremlins.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/hangman2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/horse_race2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/hucalc_80a_c2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/hucalc_80a_m.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/hucalc_80a_s.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/land_escape.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/laser_defence.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/le_mans.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ludo.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/lunarlander.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/mad_max_2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/man-hunt.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/m_c_breakout_2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/m_c_race_chase.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/minotaur.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/missile_attack.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/munchers_2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/MZ-80A_galactic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/navvy.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/new_invaders.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/noughts_crosses.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/numbercrunch.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/obstacles.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/pinball.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/puckman.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/qbert.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/quest.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/race_chase.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ribbit_v2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/sa-5510_compiler.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/sa-5510_kn.comm.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/sargon_2.71.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/scramble_a.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/send-1.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/serendipity.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ski_run.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/space_combat.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/space_fighter.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/space_invaders.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/spooks.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/starship_mk2.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/star_wars.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/super_tilt.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/the_lily_pond.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/the_meanies.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/tunnel_run.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/ufo.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/wiggly_worm.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80A/witches.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80A/xpatch_5510_v2.2.${SECTORSIZE}.bin:" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/sa-6510.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/3-d_maze.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/80a_pencil.a2_c2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/80a_pencil.a2_s.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/a-basic_sa-5510.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/adventuregame.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/air_lander.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/alien_attack.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/alien_attack_machinecode.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/alien_eagle.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/alligator.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/apollo_chess_v2a.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/basic80a.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/basic_sa-5510.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/basic.sa-5510.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/blocking.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/bouncing_ball.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/breakout.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/breakout_mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/brickstop.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/bytesaver_sa5510.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/cells_and_serps.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/colony.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/cosmiad-a.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/cosmiad-k.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/cursedchamber.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/dcs_mz80a_append.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/dcs_mz80a_renum.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/defender(2).${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/defender_bizzarri.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/diamond.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/digger.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/dog_and_flea.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/dog_star_2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/duck_shoot.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/epidemic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/escape.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/escape_force.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/flying_mission.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/forest_of_doom.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/fruit_machine.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/galaxy_invaders.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/greedy_gremlins.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/hangman2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/horse_race2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/hucalc_80a_c2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/hucalc_80a_m.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/hucalc_80a_s.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/land_escape.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/laser_defence.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/le_mans.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/ludo.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/lunarlander.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/mad_max_2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/man-hunt.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/m_c_breakout_2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/m_c_race_chase.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/minotaur.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/missile_attack.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/munchers_2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/MZ-80A_galactic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/navvy.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/new_invaders.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/noughts_crosses.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/numbercrunch.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/obstacles.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/pinball.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/puckman.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/qbert.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/quest.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/race_chase.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/ribbit_v2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/sa-5510_compiler.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/sa-5510_kn.comm.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/sargon_2.71.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/scramble_a.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/send-1.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/serendipity.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/ski_run.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/space_combat.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/space_fighter.${SECTORSIZE}.bin" +addMZFToROMImageList 1 1 0 0 "${MZB_PATH}/MZ-80A/space_invaders.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/spooks.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/starship_mk2.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/star_wars.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/super_tilt.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/the_lily_pond.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/the_meanies.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/tunnel_run.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/ufo.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/wiggly_worm.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80A/witches.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80A/xpatch_5510_v2.2.${SECTORSIZE}.bin" # # MZ-80K # -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/3dspacecbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/3-d_way_out_bbg_software.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/6502betrmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/6502demo2mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/6502demomc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/8048_cpu_disas.mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/a-basic_sa-5510.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/abenteuebasic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/advance-guardmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/advance_guard_wics_1983.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/aimemc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/alienmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/andromedamc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/apollo_word_1.9mmc_.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ascii_gamebasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/atcf_datamc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/attackerscramblemc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/barcode_reader_1basic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/barcode_reader_2basic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/barcode_reader_3basic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/barcode_reader_4basic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/base_ballbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/baseballbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/basic_sp-5035mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/block_kuzushimc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/bomberbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/bomberman_hudson_soft_1983.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/boueisakusenbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/boxing_mzmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/breakout_sharp_corporation.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/bugfire_1.1_wics.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/bugfire-newmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/bugfire-oldmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/bugfire_wics.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/cannon_ball_hudson_soft_1983.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/car-racemc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/clever_cribber.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/code_hu_convertmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/cosmic_cruiser1mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/cosmic_cruiser2mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/cosmic_cruiser3pr1mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/cowboy_duelmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/crazy-climber_pt1mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/crazy-climber_pt2mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/crystallmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/daikaisenbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/d-day_sharp_corporation.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/defendermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/defend_the_citybasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/don_chackbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/donkey_derby.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/editor-assembler_sp2202mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/elektronic_musicmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/empire_climbermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/empire_climber_wics.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/executivebasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/f-1_racemc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/fdcontromc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/filecardmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/form_map-listmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/formmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/forth_simulatorbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/fortressmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/galacticabasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/galaxianbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/gens3_1mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/gokiburibasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/goldminebasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/gomokumc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/hat_the_boxbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/home_budget_mk2basic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/hucompilermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/hucompilmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/identi-kit.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/jampacmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/jintorimc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/jumping_bunnymc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ladybugmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/laser_commandmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/loaderckmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/lunar_lander.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/lunar_landingmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/machine_language_sp2001mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/machin_lang.monmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/mannenbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/master_mindbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/mazemanmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/micropedemc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/minotaur's_cavemc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/miz-mazebasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/mogurabasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/monaco-gpmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/monitormc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/monitorrmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/munchiesmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/nautic_crisisbasic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/neptunmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/notutoribasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/nsc-rallymc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/one_key_organmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/othellomc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/otori_attackmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/pacmanmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/pascal_sp-6610mc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/phoenixmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/printmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/puckmanmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/racemc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ralleymc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ranger_specialpacmanmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/sargonchessmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/scashbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/schlogesmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/scramble.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/scramblemc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/shooting-ufobasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/shougibasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_defendermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_drivescramblemc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_fighter_sharp_corporation_1979.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_invader1mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_invader.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_invader2intro-jpnmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_invader2no_intromc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_invader3mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_invader4mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space-invadermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_mouse2mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_mousemc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_mouse_wics.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_panicmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_ruinerdeffendermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/space_ruiner_wics_1982.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/spider_maze.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/startrekbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/star_trek_jpnbasic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/star_trek_sharp_corporation.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/star_warsmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/star-warsmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/stoneworldbasic.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/sub-monitor_48kmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/superdefendermc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/super-monitormc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/supertargmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/superwurmmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/survivemc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/tankwarmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/tapecopymc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ten-pin_bowling.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/test_match.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/the_munchies_c_smith.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/time_bombbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/tinylispmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/tomahawk_hiroshi_masuko.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/tomahawkmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/toweringmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/trapmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/turtlegdemo1mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/turtlegdemo2mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/turtle-grafikmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/tycoonbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ubootjagmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ufo_cavesmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/ufo_huntermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/undameshibasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/videoflippermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/view-findermc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/view_finder_wics_1983.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/vikingmc.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-80K/voicemc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/war_of_conbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/westernmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/western_wics_1983.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/wilhelm-tellmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/willhelm_tellmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/yakyukenbasic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/z80assembler2mc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/zardosmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/zardos_mz_soft_group.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/zeichengmc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-80K/zeroidmc.${SECTORSIZE}.bin:" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/3dspacecbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/3-d_way_out_bbg_software.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/6502betrmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/6502demo2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/6502demomc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/8048_cpu_disas.mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/a-basic_sa-5510.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/abenteuebasic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/advance-guardmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/advance_guard_wics_1983.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/aimemc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/alienmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/andromedamc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/apollo_word_1.9mmc_.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/ascii_gamebasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/atcf_datamc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/attackerscramblemc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/barcode_reader_1basic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/barcode_reader_2basic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/barcode_reader_3basic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/barcode_reader_4basic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/base_ballbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/baseballbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/basic_sp-5035mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/block_kuzushimc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/bomberbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/bomberman_hudson_soft_1983.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/boueisakusenbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/boxing_mzmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/breakout_sharp_corporation.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/bugfire_1.1_wics.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/bugfire-newmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/bugfire-oldmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/bugfire_wics.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/cannon_ball_hudson_soft_1983.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/car-racemc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/clever_cribber.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/code_hu_convertmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/cosmic_cruiser1mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/cosmic_cruiser2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/cosmic_cruiser3pr1mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/cowboy_duelmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/crazy-climber_pt1mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/crazy-climber_pt2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/crystallmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/daikaisenbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/d-day_sharp_corporation.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/defendermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/defend_the_citybasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/don_chackbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/donkey_derby.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/editor-assembler_sp2202mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/elektronic_musicmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/empire_climbermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/empire_climber_wics.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/executivebasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/f-1_racemc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/fdcontromc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/filecardmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/form_map-listmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/formmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/forth_simulatorbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/fortressmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/galacticabasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/galaxianbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/gens3_1mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/gokiburibasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/goldminebasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/gomokumc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/hat_the_boxbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/home_budget_mk2basic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/hucompilermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/hucompilmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/identi-kit.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/jampacmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/jintorimc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/jumping_bunnymc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/ladybugmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/laser_commandmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/loaderckmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/lunar_lander.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/lunar_landingmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/machine_language_sp2001mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/machin_lang.monmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/mannenbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/master_mindbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/mazemanmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/micropedemc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/minotaur's_cavemc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/miz-mazebasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/mogurabasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/monaco-gpmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/monitormc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/monitorrmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/munchiesmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/nautic_crisisbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/neptunmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/notutoribasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/nsc-rallymc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/one_key_organmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/othellomc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/otori_attackmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/pacmanmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/pascal_sp-6610mc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/phoenixmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/printmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/puckmanmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/racemc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/ralleymc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/ranger_specialpacmanmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/sargonchessmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/scashbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/schlogesmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/scramble.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/scramblemc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/shooting-ufobasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/shougibasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_defendermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_drivescramblemc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/space_fighter_sharp_corporation_1979.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_invader1mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_invader.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_invader2intro-jpnmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_invader2no_intromc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_invader3mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_invader4mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space-invadermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_mouse2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_mousemc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_mouse_wics.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_panicmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_ruinerdeffendermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/space_ruiner_wics_1982.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/spider_maze.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/startrekbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/star_trek_jpnbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/star_trek_sharp_corporation.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/star_warsmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/star-warsmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/stoneworldbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/sub-monitor_48kmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/superdefendermc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/super-monitormc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/supertargmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/superwurmmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/survivemc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/tankwarmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/tapecopymc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/ten-pin_bowling.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/test_match.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/the_munchies_c_smith.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/time_bombbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/tinylispmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/tomahawk_hiroshi_masuko.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/tomahawkmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/toweringmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/trapmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/turtlegdemo1mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/turtlegdemo2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/turtle-grafikmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/tycoonbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/ubootjagmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/ufo_cavesmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/ufo_huntermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/undameshibasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/videoflippermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/view-findermc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/view_finder_wics_1983.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/vikingmc.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-80K/voicemc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/war_of_conbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/westernmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/western_wics_1983.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/wilhelm-tellmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/willhelm_tellmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/yakyukenbasic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/z80assembler2mc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/zardosmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/zardos_mz_soft_group.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/zeichengmc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-80K/zeroidmc.${SECTORSIZE}.bin" # # MZ-700 # -ROM_INCLUDE+="${MZB_PATH}/MZ-700/1z-013b.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/2z009e.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/3-d_car_race.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/3-d_graphikpaket.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/3dmuehle.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/3d-way_out.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/6502_betriebssys.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/700_poker.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/ace_racer.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/advancedchess.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/airbus_a_310.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/aliens.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/amityville.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/antares.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/anthill_raider.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/apollo.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/apollo2_8-200785.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/apprentissage_nombres.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/asteroid_belt.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/astro-blaster.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/attack-a-tank.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/auto_run.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/backgammon.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/bas700tutorial.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/basezero.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/basic_1z-013b.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/basic_700-vers.4.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/basic_mz-5z008_2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/basic_mz-5z008.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/battle_game.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/bio-700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/blastoff.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/bloktekeningen.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/bomberman_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/boulder_dash.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/breuken_1.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/cadre_diabolique.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/calendrier.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/cannon_ball.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/catacombes.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/caterpillar.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/centro-anl.disk.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/centro-anleitung.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/circus_star.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/club_golf.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/c-master.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/codewoord.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/commando_plain.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/competitie.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/comput-a-slot.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/computertekenen.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/connect_four.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/converter_a_700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/conveyor.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/copy-cf.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/cosmo_blaster_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/cribbage.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/croaker.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/cyfax.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/database_filer.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/datei_universal.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/dbp-701.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/delete.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/demasaso.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/demo-lissajou.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/demo_sin-berg.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/descente_aux_enfers.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/destructeurs.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/domination.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/donkey_gorilla.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/exploding_atoms.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/express_bas_700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/f1200.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/fantastic_grove.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/fdcopy.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/fd_editor_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/fighter_command.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/fire!!!.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/fisherman_fred.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/flugsim_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/flugsimulator.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/fortransosz80.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/full_speed.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/gate-crasher.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/gdp9-ba.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/geboortedatum.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/global_war_3.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/globule.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/gobbler.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/greedy_gremlins.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/grid.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/guerre_spatiale.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/hdc_orgel.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/hp4tmz7.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/hp4tmz7l.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/hunchy.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/impossible_mission.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/isola.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/jeux_intergalactiques.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/jumping_runner.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/jungle-jinks.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kalender.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kamertje.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kasboek.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/k-basic_v.5.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kentucky_derby.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kniforth.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/knight's_castle.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/knights_ufo.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kp_dbasic.800b.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/k.s.m._pt._1.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/k.s.m._pt._2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/k.s.m._pt._3.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-700/kuma_interpr..${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kup80z354.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/kup80z355.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/lady-bug.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/land_escape.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/le_mans.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/lightning_patrol.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/lijnenspel.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/logo_v30.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mac_pac.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mad_maze.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/man-hunt.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/manza.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mastermind.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/math_pendu.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/maze_escape.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/messing.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mission_a.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mission_alpha.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mission_delta.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/ml-sp_8002_bbg.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/moleatta.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/monitor.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/monitor3.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/monitor6.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/morpion.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/morpius.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/moty.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/moving_searcher.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mucmac700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/munroe_manor.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/music.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/musique_suisse.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mz-1p01.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mz-2z009.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mz700bas.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/MZ-700_demo.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/mz700_forth1.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/MZ-700_forth.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/MZ-700_klavier.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/MZ-700_plot.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nakamoto.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nakamoto_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nibbler_part1.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nibbler_part2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nightmare_park2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nightmare_park.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nightm_prk.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/nite_flite.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/octopussy.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pac-man.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/painful_man.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/panique.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/para_shoot.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pascal_sp-4015.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pascal_sp-4015_c.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/patrol_alpha.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pcgaid.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pcgaid_europe.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pcg_basic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pcg_basic_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/pendu.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/printerfiguren1.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/puissance_4.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/puzzle.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/qd_bas_5z008_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/qdcopy.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/qd-pascal_c.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/quixi.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/realfort.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/rebond.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/rescue_plane.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/reverse.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/rollsroyce1906.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/round_shoot.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/safe-cracker.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/s-basic-cent-2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/s-basic-comp-cnt.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/s-basic-compiler.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/s-basic-compiler-original.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/s-basicode_2.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/schach2_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/schach700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/send-1.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/send-1_mz700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/sh7ced1.3g.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/shogun.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/sky_chaos.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/s-master.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/snake-and-snake.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/snake_snake_exp1.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/soudard.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/south_pacific.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/space_fighter.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/space_guerilla.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/space_invaders.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/spa_data.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/squash_700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/star_fighter.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/startrek.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/stkeeper2bas700a.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/strip_poker.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/submarine_shooter.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/sub-monitor-700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/suicide_run.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/super-bandit.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/super_biorhythm.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/super_helicopter.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/super_puck-man.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/super_spy_obj.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/supertypen.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/super_vrac.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/sutam1f.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/sutamc9.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/sutapeba.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/sutapemo.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/systeme_expert.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/tapeworm.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/tbasic_bm_pk.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/t-basic_(uitleg).${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/telefontarieven.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/three_card_brag.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/tomahawk.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/tracker.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/trans.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/trucker.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/typen.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/ufo.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/uni700basic.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/urania_ii.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/uras-700.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/vicious_viper.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/vol_676.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/vragendmaken.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/wizard_castle.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/wonderhouse.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/wookya.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/wookyb.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/xanagrams.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/xbc.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/xbc_f_1_02.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/yams.${SECTORSIZE}.bin:" -ROM_INCLUDE+="${MZB_PATH}/MZ-700/z80_desassembleur.${SECTORSIZE}.bin:" -#ROM_INCLUDE+="${MZB_PATH}/MZ-700/zen.${SECTORSIZE}.bin:" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-700/1z-013b.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/2z009e.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/3-d_car_race.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/3-d_graphikpaket.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/3dmuehle.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/3d-way_out.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/6502_betriebssys.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/700_poker.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/ace_racer.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/advancedchess.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/airbus_a_310.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/aliens.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/amityville.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/antares.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/anthill_raider.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/apollo.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/apollo2_8-200785.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/apprentissage_nombres.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/asteroid_belt.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/astro-blaster.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/attack-a-tank.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/auto_run.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/backgammon.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/bas700tutorial.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/basezero.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/basic_1z-013b.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/basic_700-vers.4.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/basic_mz-5z008_2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/basic_mz-5z008.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/battle_game.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/bio-700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/blastoff.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/bloktekeningen.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/bomberman_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/boulder_dash.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/breuken_1.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/cadre_diabolique.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/calendrier.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/cannon_ball.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/catacombes.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/caterpillar.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/centro-anl.disk.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/centro-anleitung.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/circus_star.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/club_golf.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/c-master.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/codewoord.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/commando_plain.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/competitie.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/comput-a-slot.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/computertekenen.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/connect_four.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/converter_a_700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/conveyor.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/copy-cf.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/cosmo_blaster_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/cribbage.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/croaker.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/cyfax.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/database_filer.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/datei_universal.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/dbp-701.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/delete.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/demasaso.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/demo-lissajou.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/demo_sin-berg.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/descente_aux_enfers.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/destructeurs.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/domination.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/donkey_gorilla.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/exploding_atoms.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/express_bas_700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/f1200.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/fantastic_grove.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/fdcopy.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/fd_editor_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/fighter_command.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/fire!!!.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/fisherman_fred.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/flugsim_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/flugsimulator.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/fortransosz80.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/full_speed.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/gate-crasher.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/gdp9-ba.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/geboortedatum.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/global_war_3.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/globule.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/gobbler.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/greedy_gremlins.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/grid.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/guerre_spatiale.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/hdc_orgel.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/hp4tmz7.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/hp4tmz7l.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/hunchy.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/impossible_mission.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/isola.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/jeux_intergalactiques.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/jumping_runner.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/jungle-jinks.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kalender.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kamertje.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kasboek.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/k-basic_v.5.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kentucky_derby.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kniforth.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/knight's_castle.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/knights_ufo.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kp_dbasic.800b.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/k.s.m._pt._1.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/k.s.m._pt._2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/k.s.m._pt._3.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-700/kuma_interpr..${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kup80z354.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/kup80z355.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/lady-bug.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/land_escape.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/le_mans.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/lightning_patrol.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/lijnenspel.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/logo_v30.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mac_pac.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mad_maze.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/man-hunt.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/manza.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mastermind.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/math_pendu.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/maze_escape.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/messing.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mission_a.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mission_alpha.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mission_delta.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/ml-sp_8002_bbg.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/moleatta.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/monitor.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/monitor3.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/monitor6.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/morpion.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/morpius.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/moty.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/moving_searcher.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mucmac700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/munroe_manor.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/music.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/musique_suisse.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mz-1p01.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mz-2z009.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mz700bas.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/MZ-700_demo.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/mz700_forth1.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/MZ-700_forth.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/MZ-700_klavier.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/MZ-700_plot.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nakamoto.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nakamoto_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nibbler_part1.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nibbler_part2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nightmare_park2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nightmare_park.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nightm_prk.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/nite_flite.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/octopussy.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/pac-man.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/painful_man.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/panique.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/para_shoot.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/pascal_sp-4015.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/pascal_sp-4015_c.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/patrol_alpha.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/pcgaid.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/pcgaid_europe.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/pcg_basic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/pcg_basic_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/pendu.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/printerfiguren1.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/puissance_4.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/puzzle.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/qd_bas_5z008_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/qdcopy.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/qd-pascal_c.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/quixi.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/realfort.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/rebond.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/rescue_plane.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/reverse.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/rollsroyce1906.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/round_shoot.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/safe-cracker.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/s-basic-cent-2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/s-basic-comp-cnt.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/s-basic-compiler.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/s-basic-compiler-original.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/s-basicode_2.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/schach2_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/schach700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/send-1.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/send-1_mz700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/sh7ced1.3g.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/shogun.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/sky_chaos.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/s-master.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/snake-and-snake.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/snake_snake_exp1.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/soudard.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/south_pacific.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/space_fighter.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/space_guerilla.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/space_invaders.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/spa_data.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/squash_700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/star_fighter.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/startrek.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/stkeeper2bas700a.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/strip_poker.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/submarine_shooter.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/sub-monitor-700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/suicide_run.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/super-bandit.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/super_biorhythm.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/super_helicopter.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/super_puck-man.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/super_spy_obj.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/supertypen.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/super_vrac.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/sutam1f.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/sutamc9.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/sutapeba.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/sutapemo.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/systeme_expert.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/tapeworm.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/tbasic_bm_pk.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/t-basic_(uitleg).${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/telefontarieven.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/three_card_brag.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/tomahawk.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/tracker.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/trans.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/trucker.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/typen.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/ufo.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/uni700basic.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/urania_ii.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/uras-700.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/vicious_viper.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/vol_676.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/vragendmaken.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/wizard_castle.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/wonderhouse.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/wookya.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/wookyb.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/xanagrams.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/xbc.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/xbc_f_1_02.${SECTORSIZE}.bin" +addMZFToROMImageList 0 0 0 0 "${MZB_PATH}/MZ-700/yams.${SECTORSIZE}.bin" +addMZFToROMImageList 1 0 0 0 "${MZB_PATH}/MZ-700/z80_desassembleur.${SECTORSIZE}.bin" +addMZFToROMImageList 0 1 0 0 "${MZB_PATH}/MZ-700/zen.${SECTORSIZE}.bin" # Set the pointer which indicates the next ROM to be filled with applications. GENROM=0 +# Add files into the ROMDISK Rom set, incrementing to next ROM when previous is full. IFS=":"; for f in ${ROM_INCLUDE} do if [ -f ${f} ]; then @@ -771,24 +814,64 @@ do echo "ALERT! File:${f} not found." fi done + +# Add files into the SFD700 ROM, discard images when ROM is near full and image wont fit. +IFS=":"; for f in ${ROM_INCLUDE_SFD700} +do + if [ -f ${f} ]; then + + # Identify type of file. + ${MZFTOOL} --command=IDENT --mzffile=${f} >/dev/null + FILETYPE=$? + + if [ ${FILETYPE} == 1 ]; then + + cat ${SFD700_ROM} "${f}" > /tmp/tmp.size + FILESIZE=$(stat -c%s "/tmp/tmp.size") + if (( ${FILESIZE} < 524288 )); then + echo "Adding $f to SFD700 ROM" + cat "${f}" >> ${SFD700_ROM} + basename "${f}" .${SECTORSIZE}.bin >> ${ROM_LIST_FILE} + else + echo "Limit reached ROM full, skipping from ${f}..." + break + fi + else + echo "File:${f},Type:${FILETYPE} is not machine code, skipping.." + fi + else + echo "ALERT! File:${f} not found." + fi +done + +echo "----------------------------------------------------------------------------------------------" +echo "-- ROM Images --" +echo "-- --" if [ -f ${USER_ROM_I} ]; then mv ${USER_ROM_I} ${ROM_PATH}/USER_ROM_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}USER_ROM_${SECTORSIZE}.bin") - echo "USER ROM I SIZE (${ROM_PATH}USER_ROM_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" + echo "-- USER ROM I SIZE (${ROM_PATH}USER_ROM_${SECTORSIZE}.bin) = ${FILESIZE} Bytes --" fi if [ -f ${USER_ROM_II} ]; then mv ${USER_ROM_II} ${ROM_PATH}/USER_ROM_II_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}USER_ROM_II_${SECTORSIZE}.bin") - echo "USER ROM II SIZE (${ROM_PATH}USER_ROM_II_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" + echo "-- USER ROM II SIZE (${ROM_PATH}USER_ROM_II_${SECTORSIZE}.bin) = ${FILESIZE} Bytes --" fi if [ -f ${USER_ROM_III} ]; then mv ${USER_ROM_III} ${ROM_PATH}/USER_ROM_III_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}USER_ROM_III_${SECTORSIZE}.bin") - echo "USER ROM III SIZE (${ROM_PATH}USER_ROM_III_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" + echo "-- USER ROM III SIZE (${ROM_PATH}USER_ROM_III_${SECTORSIZE}.bin) = ${FILESIZE} Bytes --" fi if [ -f ${MONITOR_ROM} ]; then mv ${MONITOR_ROM} ${ROM_PATH}/MROM_${SECTORSIZE}.bin FILESIZE=$(stat -c%s "${ROM_PATH}/MROM_${SECTORSIZE}.bin") - echo "MROM SIZE (${ROM_PATH}/MROM_${SECTORSIZE}.bin) = ${FILESIZE} Bytes" + echo "-- MROM SIZE (${ROM_PATH}/MROM_${SECTORSIZE}.bin) = ${FILESIZE} Bytes --" fi +if [ -f ${SFD700_ROM} ]; then + mv ${SFD700_ROM} ${ROM_PATH}/SFD700_${SECTORSIZE}.bin + FILESIZE=$(stat -c%s "${ROM_PATH}/SFD700_${SECTORSIZE}.bin") + echo "-- SFD700 SIZE (${ROM_PATH}/SFD700_${SECTORSIZE}.bin) = ${FILESIZE} Bytes --" +fi +echo "----------------------------------------------------------------------------------------------" +echo "" exit 0 diff --git a/tools/processMZFfiles.sh b/tools/processMZFfiles.sh index a873945..d1e3bf6 100755 --- a/tools/processMZFfiles.sh +++ b/tools/processMZFfiles.sh @@ -39,7 +39,8 @@ MZBDIR=${ROOTDIR}/MZB BLOCKSIZELIST="128 256" # Build list of files to process. -for SUBDIR in Common MZ-80A MZ-80K MZ-700 MZ-800 MZ-1500 MZ-2000 MZ-80B +# for SUBDIR in Common MZ-80A MZ-80K MZ-700 MZ-800 MZ-1500 MZ-2000 MZ-80B +for SUBDIR in Common MZ-1200 MZ-1500 MZ-2000 MZ-2200 MZ-2500 MZ-2800 MZ-700 MZ-700-2 MZ-800 MZ-80A MZ-80B MZ-80C MZ-80K do cd ${MZFDIR} ls -l ${SUBDIR}/*.MZF ${SUBDIR}/*.mzf 2>/dev/null |\ @@ -82,4 +83,9 @@ do done done done