Updated and added SD to/from Tape copy commands and SD erase

This commit is contained in:
Philip Smart
2020-03-27 21:49:14 +00:00
parent 894fa40c2b
commit e7d35354e3
16 changed files with 1448 additions and 833 deletions

View File

@@ -1,19 +1,22 @@
## Overview
The Sharp MZ80A as with most vintage computers had limited storage. In order to expand the storage it is often the case that the resident software has to be enhanced which was impossible
given the storage space (ie. 4K Monitor rom). The Sharp MZ80A has a 4K Monitor ROM, a 2K User ROM/RAM and space within the memory map to add a further 4K ROM typically for the floppy disk
drive.
The Sharp MZ80A came with 48K RAM and 4K ROM and apart from the option to add a 2K User RAM/ROM and a 4K Floppy Drive ROM, there was no further possibility to expand the machine memory
capabilities at the hardware level and thus no additional firmware could be added for use at power-on. Add-ons had to rely on loading control firmware into RAM via tape or floppy, thus depleting valuable application space. Some machines of the same era
utilised a scheme called 'banking' whereby much larger memories would occupy a smaller block within the CPU address space and be selected according to features required and hardware attached. The
BBC Micro was such a machine with upto 16 banks of 16Kb, it made the machine much more useable.
One of the seperate projects I've been working on was a 40/80 Column switchable display and colour output. This upgrade requires different software, either a complete rewrite of the original
monitor or a patched copy for 80 column mode. Wanting to keep the machine as original as possible, using a rewritten ROM is out of the question thus I would need 2 ROMS, original for 40Column
and a patched one for 80Column.
Thus was born the need for Rom Paging, ie. Use a modern Flash RAM to house multiple 4K Roms which can be *switched in* according to the hardware upgrade.
Thus was born the need for Rom Paging in the Sharp MZ80A, ie. Use a modern Flash RAM to house multiple 4K Roms which can be *switched in* to the 4K Monitor ROM address space according to the
hardware upgrade being used.
It was also seen when using large Flash RAM's it was possible to store programs that would normally be present on tape or floppy and load at much higher speed making use of the computer that
much easier.
This upgrade uses the 4K Monitor ROM and 2K User ROM space to map in 2x512Kbyte Flash RAM's providing paged roms and a Rom Filing System storing most commonly used programs.
This upgrade goes a bit further and uses the 4K Monitor ROM and 2K User ROM space to map in 2x512Kbyte Flash RAM's providing multiple paged roms (theoretical 256 x 2K slots and 128 x 4K slots)
and the required custom software to control the banking called the Rom Filing System.
This page along with the [CP/M](/sharpmz-upgrades-cpm) page forms the start of the RFS documentation which is still in its infancy. Within this repository are the schematics, PCB Gerber files and the software to implement the Rom Filing
System hardware and software.

View File

@@ -2087,7 +2087,7 @@ SKIPDUMP: POP HL
; HL = Start
; DE = End
DUMPX: LD A,1
DUMPX: LD A,23
DUM1: LD (TMPCNT),A
DUM3: LD B,010h
LD C,02Fh
@@ -2102,9 +2102,7 @@ DUM2: CALL SPHEX
CP 020h
JR NC,L0D51
LD A,02Eh
L0D51: ;CALL ?ADCN
;CALL ?PRNT3
CALL ?PRNT
L0D51: CALL ?PRNT
LD A,(DSPXY)
INC C
SUB C
@@ -2116,12 +2114,6 @@ L0D51: ;CALL ?ADCN
SBC HL,DE
POP HL
JR NC,DUM7
LD A,0F8h
LD (0E000h),A
NOP
LD A,(0E001h)
CP 0FEh
JR NZ,L0D78
L0D78: DJNZ DUM2
LD A,(TMPCNT)
DEC A
@@ -2138,8 +2130,8 @@ DUM4: CALL ?CHKKY
DUM5: CP 'U'
JR NZ,DUM6
PUSH DE
LD DE,000FFH
SCF
LD DE,00100H
OR A
SBC HL,DE
POP DE
LD A,8

View File

@@ -55,15 +55,14 @@ MELDY EQU 00030h
MONIT: EQU 00000h
SS: EQU 00089h
ST1: EQU 00095h
MSGE1 EQU 00118h
HLHEX EQU 00410h
_2HEX EQU 0041Fh
?MODE: EQU 0074DH
?KEY EQU 008CAh
PRNT3 EQU 0096Ch
MSG?2 EQU 000F7h
?ADCN EQU 00BB9h
?DACN EQU 00BCEh
?DSP: EQU 00DB5H
?BLNK EQU 00DA6h
?DPCT EQU 00DDCh
PRTHL: EQU 003BAh
@@ -73,6 +72,11 @@ DPCT: EQU 00DDCh
DLY12: EQU 00DA7h
DLY12A: EQU 00DAAh
?RSTR1: EQU 00EE6h
MOTOR: EQU 006A3H
CKSUM: EQU 0071AH
GAP: EQU 0077AH
WTAPE: EQU 00485H
MSTOP: EQU 00700H
; Debugging
ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable
@@ -291,6 +295,15 @@ SDDIR_EXEC EQU 019H
SDDIR_FNSZ EQU FNSIZE
SDDIR_ENTSZ EQU 32
;
; Rom Filing System constants for the SD Card.
;
SDDIR_DIRENT EQU 256 ; Directory entries in the RFS directory.
SDDIR_DIRENTSZ EQU 32 ; Size of a directory entry.
SDDIR_DIRSIZE EQU SDDIR_DIRENT * SDDIR_DIRENTSZ ; Total size of the directory.
SDDIR_BLOCKSZ EQU 65536 ; Size of a file block per directory entry.
SDDIR_IMGSZ EQU SDDIR_DIRSIZE + (SDDIR_DIRENT * SDDIR_BLOCKSZ) ; Total size of the RFS image.
;-----------------------------------------------
; SA-1510 MONITOR WORK AREA (MZ80A)
;-----------------------------------------------
@@ -350,20 +363,23 @@ TMPLINECNT: EQU 01021H ; Tempo
TMPSTACKP: EQU 01023H ; Temporary stack pointer save.
SDVER: EQU 01025H
SDCAP: EQU 01026H
; Variables sharing the CMT buffer, normally the CMT and SD are not used at the same
; time. This frees up memory needed by the SD card.
; Variables sharing the BUFER buffer, normally the BUFER is only used to get keyboard input and so long as data in BUFER is processed
; before calling the CMT/SD commands and not inbetween there shouldnt be any issue. Also the space used is at the top end of the buffer which is not used so often.
; This frees up memory needed by the CMT and SD card.
SECTORBUF: EQU 0CE00H ; Working buffer to place an SD card sector.
SDBYTECNT EQU COMNT+2 ; Bytes to read/write to/from a sector.
SDOFFSET EQU COMNT+4 ; Offset into sector prior to data read/write.
SDSTARTSEC EQU COMNT+6 ; Starting sector of data to read/write from/to SD card.
SDLOADADDR EQU COMNT+10 ; Address to read/write data from/to SD card.
SDLOADSIZE EQU COMNT+12 ; Total remaining byte count data to read/write from/to SD card.
SDAUTOEXEC EQU COMNT+14 ; Flag to indicate if a loaded image should be executed (=0xFF)
SDBUF: EQU COMNT+15 ; SD Card command fram buffer for the command and response storage.
DIRSECBUF: EQU COMNT+26 ; Directory sector in cache.
RESULT: EQU COMNT+27
BYTECNT: EQU COMNT+29
WRITECNT: EQU COMNT+31
SDSTARTSEC EQU BUFER+50+0 ; Starting sector of data to read/write from/to SD card.
SDLOADADDR EQU BUFER+50+4 ; Address to read/write data from/to SD card.
SDLOADSIZE EQU BUFER+50+6 ; Total remaining byte count data to read/write from/to SD card.
SDAUTOEXEC EQU BUFER+50+8 ; Flag to indicate if a loaded image should be executed (=0xFF)
SDBUF: EQU BUFER+50+9 ; SD Card command fram buffer for the command and response storage.
DIRSECBUF: EQU BUFER+50+20 ; Directory sector in cache.
DUMPADDR: EQU BUFER+50+22 ; Address used by the D(ump) command so that calls without parameters go onto the next block.
CMTLOLOAD: EQU BUFER+50+24 ; Flag to indicate that a tape program is loaded into hi memory then shifted to low memory after ROM pageout.
CMTCOPY: EQU BUFER+50+25 ; Flag to indicate that a CMT copy operation is taking place.
CMTAUTOEXEC:EQU BUFER+50+26 ; Auto execution flag, run CMT program when loaded if flag clear.
DTADRSTORE: EQU BUFER+50+27 ; Backup for load address if actual load shifts to lo memory or to 0x1200 for copy.
SDCOPY: EQU BUFER+50+29 ; Flag to indicate an SD copy is taking place, either CMT->SD or SD->CMT.
RESULT: EQU BUFER+50+30 ; Result variable needed for interbank calls when a result is needed.
; Quickdisk work area
;QDPA EQU 01130h ; QD code 1

View File

@@ -109,14 +109,13 @@ BKSW0to7: PUSH AF
PUSH AF
LD A, ROMBANK7 ; Required bank to call.
;
BKSW0_0: PUSH BC ; Save BC for caller.
LD BC, BKSWRET0 ; Place bank switchers return address on stack.
PUSH BC
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
BKSW0_0: PUSH HL ; Place function to call on stack
LD HL, BKSWRET0 ; Place bank switchers return address on stack.
EX (SP),HL
LD (TMPSTACKP),SP ; Save the stack pointer as some old code corrupts it.
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
JP (HL) ; Jump to required function.
BKSWRET0: POP BC
POP AF ; Get bank which called us.
BKSWRET0: POP AF ; Get bank which called us.
LD (RFSBK2), A ; Return to that bank.
POP AF
RET ; Return to caller.
@@ -161,7 +160,8 @@ SIGNON1: CALL DPCT
DEC E
JR NZ,SIGNON1
LD DE,MSGSON ; Sign on message,
RST 018h
LD HL,PRINTMSG
CALL BKSW0to6
LD HL, SDINIT ; SD Card Initialisation
CALL BKSW0to2 ; Call the initialisation routine.
@@ -180,7 +180,7 @@ ST1X: CALL NL ; Comma
CMDCMP: LD HL,CMDTABLE
CMDCMP0: LD DE,BUFER+1 ; First command byte after the * prompt.
LD A,(HL)
CP 00DH
CP 000H
JR Z,ST1X ; Skip processing on lines where just CR pressed.
BIT 7,A ; Bit 7 set on command properties indicates table end, exit if needed.
JR NZ,CMDNOCMP
@@ -234,7 +234,8 @@ CMDCMP6: LD DE,CMDCMPEND ; Put r
JP (HL)
CMDNOCMP: LD DE,MSGBADCMD
RST 018H
LD HL,PRINTMSG
CALL BKSW0to6
CMDCMPEND: JP ST1X
; Monitor command table. This table contains the list of recognised commands along with the
@@ -257,13 +258,16 @@ CMDTABLE: DB 000H | 000H | 000H | 001H ; Bit 2
DB 000H | 000H | 018H | 001H
DB 'D' ; Dump Memory.
DW DUMPX
DB 000H | 000H | 010H | 002H
DB "EC" ; Erase file.
DW ERASESD
DB 000H | 000H | 008H | 001H
DB 'F' ; RFS Floppy boot code.
DW FLOPPY
DB 000H | 000H | 008H | 001H
DB 0AAH ; Original Floppy boot code.
DW FDCK
DB 000H | 000H | 018H | 001H
DB 000H | 000H | 030H | 001H
DB 'H' ; Help screen.
DW HELP
DB 000H | 000H | 000H | 002H
@@ -287,10 +291,10 @@ CMDTABLE: DB 000H | 000H | 000H | 001H ; Bit 2
DB 000H | 000H | 000H | 002H
DB "LR" ; Load from ROM
DW LOADROM
DB 000H | 000H | 000H | 004H
DB 000H | 000H | 010H | 004H
DB "LCNX" ; Load from SDCARD without auto execution.
DW LOADSDCARDX
DB 000H | 000H | 000H | 002H
DB 000H | 000H | 010H | 002H
DB "LC" ; Load from SD CARD
DW LOADSDCARD
DB 000H | 000H | 020H | 001H
@@ -305,6 +309,9 @@ CMDTABLE: DB 000H | 000H | 000H | 001H ; Bit 2
DB 000H | 000H | 038H | 001H
DB 'R' ; Memory test.
DW MEMTEST
DB 000H | 000H | 018H | 004H
DB "SD2T" ; Copy SD Card to Tape.
DW SD2TAPE
DB 000H | 000H | 010H | 002H
DB "SC" ; Save to SD CARD
DW SAVESDCARD
@@ -314,6 +321,9 @@ CMDTABLE: DB 000H | 000H | 000H | 001H ; Bit 2
DB 000H | 000H | 020H | 001H
DB 'S' ; Save to CMT
DW SAVEX
DB 000H | 000H | 018H | 004H
DB "T2SD" ; Copy Tape to SD Card.
DW TAPE2SD
DB 000H | 000H | 038H | 001H
DB 'T' ; Timer test.
DW TIMERTST
@@ -540,8 +550,8 @@ DIRROM: DI ; Disab
LD (TMPLINECNT),A
;
LD DE,MSGRDIRLST ; Print out header.
RST 018h
CALL NL
LD HL,PRINTMSG
CALL BKSW0to6
;
; Scan MROM Bank
; B = Bank Page
@@ -712,11 +722,10 @@ LOADROM1: DI
;
LD A,(ROMBK1)
LD (RFSBK1), A
LD DE,MSGLDROM
RST 018H
LD DE,NAME
RST 018H
CALL NL
LD DE,MSGLOAD+1 ; Skip initial CR.
LD BC,NAME
LD HL,PRINTMSG
CALL BKSW0to6
LD A,(WRKROMBK1)
LD (RFSBK1), A
@@ -727,9 +736,9 @@ LOADROM1: DI
LROMNTFND: POP HL ; Dont need execute flag anymore so waste it.
LD A,(ROMBK1)
LD (RFSBK1),A
LD HL,PRINTMSG
LD DE,MSGNOTFND ; Not found
RST 018h
CALL BKSW0to6
LOADROMEND: EI
RET
@@ -738,11 +747,12 @@ LOADROMEND: EI
;
LROMLOAD: PUSH BC
;
LD DE,MSGLDROM
RST 018H
LD DE,NAME
RST 018H
CALL NL
PUSH BC
LD DE,MSGLOAD+1
LD BC,NAME
LD HL,PRINTMSG
CALL BKSW0to6
POP BC
;
LD A,B
LD (WRKROMBK1),A
@@ -838,25 +848,6 @@ LROMLOAD5: POP HL ; Retri
JP (HL) ; Execution address.
LROMLOAD9: RET
; Load a program from the SD Card into RAM and/or execute it.
;
; DE points to a number or filename to load.
LOADSDCARDX:LD A,0FFH
JR LOADSDCARD0
LOADSDCARD: LD A,000H
LOADSDCARD0:LD (SDAUTOEXEC),A
PUSH DE
LD HL,0FFFFh ; Tag the filenumber as invalid.
LD (TMPCNT), HL
CALL ConvertStringToNumber ; See if a file number was given instead of a filename.
JR NZ, LOADSDCARD1 ;
LD (TMPCNT), HL ; Store filenumber making load by filenumber valid.
LOADSDCARD1:POP DE
LD HL,LOADSDE
CALL BKSW0to2 ; Call the main functionality in Bank2.
LOADSDCARD2:RET
;-------------------------------------------------------------------------------
; END OF RFS COMMAND FUNCTIONS.
;-------------------------------------------------------------------------------
@@ -864,21 +855,11 @@ LOADSDCARD2:RET
;--------------------------------------
;
; Message table
; Message table - Refer to bank 6 for
; all messages.
;
;--------------------------------------
MSGSON: DB "+ RFS ", 0ABh, "1.1 **",00DH
MSGOK: DB "OK!", 00DH
MSGNOTFND: DB "NOT FOUND", 00DH
MSGRDIRLST: DB "ROM DIRECTORY:", 00DH
MSGTRM: DB 00DH
MSGSV: DB "FILENAME? ", 00DH
MSGBADCMD: DB "???", 00DH
MSGLDROM: DB "LOADING ", 00DH
; Bring in additional resources.
USE_CMPSTRING: EQU 1
USE_SUBSTRING: EQU 0

View File

@@ -89,14 +89,13 @@ BKSW1to7: PUSH AF
PUSH AF
LD A, ROMBANK7 ; Required bank to call.
;
BKSW1_0: PUSH BC ; Save BC for caller.
LD BC, BKSWRET1 ; Place bank switchers return address on stack.
PUSH BC
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
BKSW1_0: PUSH HL ; Place function to call on stack
LD HL, BKSWRET1 ; Place bank switchers return address on stack.
EX (SP),HL
LD (TMPSTACKP),SP ; Save the stack pointer as some old code corrupts it.
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
JP (HL) ; Jump to required function.
BKSWRET1: POP BC
POP AF ; Get bank which called us.
BKSWRET1: POP AF ; Get bank which called us.
LD (RFSBK2), A ; Return to that bank.
POP AF
RET ; Return to caller.
@@ -133,9 +132,9 @@ FLOPPY: PUSH DE ; P
CP 00Dh ;
JR NZ,GETBOOTDSK ;
CALL DSKINIT ; Initialise disk and flags.
L000F: CALL NL ; Prompt for the boot drive as non given in call.
LD DE,BOOTDRV ;
CALL MSG ;
L000F: LD DE,MSGBOOTDRV ;
LD HL,PRINTMSG
CALL BKSW1to6
LD DE,011A3H ;
CALL GETL ;
LD A,(DE) ;
@@ -164,11 +163,12 @@ L0049: LD C,(HL) ;
INC HL ;
INC DE ;
DJNZ L0049 ;
CALL NL ; Ok, we have a bootable disk, so indicate we are booting it...
LD DE,IPLLOAD ;
CALL MSG ;
LD DE,MSGIPLLOAD ;
LD HL,PRINTMSG
CALL BKSW1to6
LD DE,0CE07H ; Program name stored at 8th byte in boot sector.
CALL MSG ;
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 ;
@@ -187,13 +187,12 @@ NOTCPM: LD HL,(0CE14H) ; G
LD HL,(0CE18H) ; Get the execution address
JP (HL) ; And execute.
DSKLOADERR:LD DE,LOADERR ; Loading error message
DSKLOADERR:LD DE,MSGLOADERR ; Loading error message
JR L008F ; (+003h)
L008C: LD DE,DSKNOTMST ; This is not a boot/master disk message.
L008F: CALL NL
CALL MSG
CALL NL
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
;
@@ -493,14 +492,13 @@ L0300: IN A,(0D8H) ; Sta
;--------------------------------------
;
; Message table
; Message table - Refer to bank 6 for
; all messages.
;
;--------------------------------------
BOOTDRV: DB "FLOPPY BOOT DRIVE ?", 00DH
LOADERR: DB "DISK LOADING ERROR", 00DH
IPLLOAD: DB "DISK LOADING ", 00DH
; Error tone.
ERRTONE: DB "A0", 0D7H, "ARA", 0D7H, "AR", 00DH
DSKNOTMST: DB "THIS IS NOT A BOOT DISK", 00Dh
; Identifier to indicate this is a valid boot disk
DSKID: DB 002H, "IPLPRO"

File diff suppressed because it is too large Load Diff

View File

@@ -34,7 +34,7 @@ MODE80C EQU 0
;===========================================================
;
; USER ROM BANK 3 - Monitor memory and help utilities.
; USER ROM BANK 3 - Monitor memory utilities.
;
;===========================================================
ORG UROMADDR
@@ -92,48 +92,110 @@ BKSW3to7: PUSH AF
PUSH AF
LD A, ROMBANK7 ; Required bank to call.
;
BKSW3_0: PUSH BC ; Save BC for caller.
LD BC, BKSWRET3 ; Place bank switchers return address on stack.
PUSH BC
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
BKSW3_0: PUSH HL ; Place function to call on stack
LD HL, BKSWRET3 ; Place bank switchers return address on stack.
EX (SP),HL
LD (TMPSTACKP),SP ; Save the stack pointer as some old code corrupts it.
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
JP (HL) ; Jump to required function.
BKSWRET3: POP BC
POP AF ; Get bank which called us.
BKSWRET3: POP AF ; Get bank which called us.
LD (RFSBK2), A ; Return to that bank.
POP AF
RET ; Return to caller.
;-------------------------------------------------------------------------------
; START OF MEMORY CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; START OF TAPE/SD CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
;
; Memory correction
; command 'M'
;
MCORX: CALL GETHEX ; correction address
; Method to copy an application on a tape to an SD stored application. The tape drive is read and the first
; encountered program is loaded into memory at 0x1200. The CMT header is populated with the correct details (even if
; the load address isnt 0x1200, the CMT Header contains the correct value).
; A call is then made to write the application to the SD card.
;
TAPE2SD: ; Load from tape into memory, filling the tape CMT header and loading data into location 0x1200.
LD HL,LOADTAPECP ; Call the Loadtape command, non execute version to get the tape contents into memory.
CALL BKSW3to4
LD A,(RESULT)
OR A
JR NZ,TAPE2SDERR
; Save to SD Card.
LD HL,SAVESDCARDX
CALL BKSW3to2
LD A,(RESULT)
OR A
JR NZ,TAPE2SDERR
LD DE,MSGT2SDOK
JR TAPE2SDERR2
TAPE2SDERR: LD DE,MSGT2SDERR
TAPE2SDERR2:LD HL,PRINTMSG
CALL BKSW3to6
RET
; Method to copy an SD stored application to a Cassette tape in the CMT.
; The directory entry number or filename is passed to the command and the entry is located within the SD
; directory structure. The file is then loaded into memory and the CMT header populated. A call is then made
; to write out the data to tap.
;
SD2TAPE: ; Load from SD, fill the CMT header then call CMT save.
LD HL,LOADSDCP
CALL BKSW3to2
LD A,(RESULT)
OR A
JR NZ,SD2TAPEERR
LD HL,SAVECMT
CALL BKSW3to4
LD A,(RESULT)
OR A
JR NZ,SD2TAPEERR
RET
SD2TAPEERR: LD DE,MSGSD2TERR
JR TAPE2SDERR2
RET
;-------------------------------------------------------------------------------
; END OF TAPE/SD CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; START OF MEMORY CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
;
; Memory correction
; command 'M'
;
MCORX: CALL READ4HEX ; correction address
RET C
MCORX1: CALL NLPHL ; corr. adr. print
CALL SPHEX ; ACC ASCII display
CALL PRNTS ; space print
CALL BGETLX ; get data & check data
CALL HLHEX ; HLASCII(DE)
JR C,MCRX3
CALL DOT4DE ; INC DE * 4
INC DE
CALL _2HEX ; data check
JR C,MCORX1
CP (HL)
JR NZ,MCORX1
INC DE
LD DE,BUFER ; Input the data.
CALL GETL
LD A,(DE)
CP 01Bh ; If . pressed, exit.
RET Z
PUSH HL
POP BC
CALL HLHEX ; If the existing address is no longer hex, reset. HLASCII(DE). If it is hex, take as the address to store data into.
JR C,MCRX3 ; Line is corrupted as the address is no longer in Hex, reset.
INC DE
INC DE
INC DE
INC DE
INC DE ;
CALL _2HEX ; Get value entered.
JR C,MCORX1 ; Not hex, reset.
CP (HL) ; Not same as memory, reset.
JR NZ,MCORX1
INC DE ;
LD A,(DE) ; Check if no data just CR, if so, move onto next address.
CP 00Dh ; not correction
JR Z,MCRX2
CALL _2HEX ; ACCHL(ASCII)
JR C,MCORX1
LD (HL),A ; data correct
CALL _2HEX ; Get the new entered data. ACCHL(ASCII)
JR C,MCORX1 ; New data not hex, reset.
LD (HL),A ; data correct so store.
MCRX2: INC HL
JR MCORX1
MCRX3: LD H,B ; memory address
@@ -141,17 +203,52 @@ MCRX3: LD H,B ; memor
JR MCORX1
DUMPX: CALL GETHEX
CALL DOT4DE
; Dump method when called interbank as HL cannot be passed.
;
; BC = Start
; DE = End
DUMPBC: PUSH BC
POP HL
JR DUMP
; Command line utility to dump memory.
; Get start and optional end addresses from the command line, ie. XXXX[XXXX]
; Paging is implemented, 23 lines at a time, pressing U goes back 100H, pressing D scrolls down 100H
;
DUMPX: CALL HLHEX ; Get start address if present into HL
JR NC,DUMPX1
LD DE,(DUMPADDR) ; Setup default start and end.
JR DUMPX2
DUMPX1: INC DE
INC DE
INC DE
INC DE
PUSH HL
CALL HLHEX
POP DE
JR C,DUM4
DUM1: EX DE,HL
DUM3: LD B,008h
LD C,017h
CALL NLPHL
DUM2: CALL SPHEX
CALL HLHEX ; Get end address if present into HL
POP DE ; DE = Start address
JR NC,DUMPX4 ; Both present? Then display.
DUMPX2: LD A,(SCRNMODE)
OR A
LD HL,000A0h ; Make up an end address based on 160 bytes from start for 40 column mode.
JR Z,DUMPX3
LD HL,00140h ; Make up an end address based on 320 bytes from start for 80 column mode.
DUMPX3: ADD HL,DE
DUMPX4: EX DE,HL
;
; HL = Start
; DE = End
DUMP: LD A,23
DUMP0: LD (TMPCNT),A
LD A,(SCRNMODE) ; Configure output according to screen mode, 40/80 chars.
OR A
JR NZ,DUMP1
LD B,008H ; 40 Char, output 23 lines of 40 char.
LD C,017H
JR DUMP2
DUMP1: LD B,010h ; 80 Char, output 23 lines of 80 char.
LD C,02Fh
DUMP2: CALL NLPHL
DUMP3: CALL SPHEX
INC HL
PUSH AF
LD A,(DSPXY)
@@ -159,9 +256,9 @@ DUM2: CALL SPHEX
LD (DSPXY),A
POP AF
CP 020h
JR NC,L0D51
JR NC,DUMP4
LD A,02Eh
L0D51: CALL ?ADCN
DUMP4: CALL ?ADCN
CALL PRNT3
LD A,(DSPXY)
INC C
@@ -173,32 +270,49 @@ L0D51: CALL ?ADCN
PUSH HL
SBC HL,DE
POP HL
JR Z,L0D85
LD A,0F8h
LD (0E000h),A
NOP
LD A,(0E001h)
CP 0FEh
JR NZ,L0D78
CALL ?BLNK
L0D78: DJNZ DUM2
L0D7A: CALL ?KEY
JR NC,DUMP9
DUMP5: DJNZ DUMP3
LD A,(TMPCNT)
DEC A
JR NZ,DUMP0
DUMP6: CALL GETKY ; Pause, X to quit, D to go down a block, U to go up a block.
OR A
JR Z,L0D7A
CALL BRKEY
JP NZ,DUM3
L0D85: RET ; JR LEA76
DUM4: LD HL,000A0h
ADD HL,DE
JR DUM1
JR Z,DUMP6
CP 'D'
JR NZ,DUMP7
LD A,8
JR DUMP0
DUMP7: CP 'U'
JR NZ,DUMP8
PUSH DE
LD DE,00100H
OR A
SBC HL,DE
POP DE
LD A,8
JR DUMP0
DUMP8: CP 'X'
JR Z,DUMP9
JR DUMP
DUMP9: LD (DUMPADDR),HL ; Store last address so we can just press D for next page,
CALL NL
RET
; Clear memory.
INITMEMX: LD DE,MSG_INITM
CALL MSG
CALL LETNL
; Cmd tool to clear memory.
; Read cmd line for an init byte, if one not present, use 00H
;
INITMEMX: CALL _2HEX
JR NC,INITMEMX1
LD A,000H
INITMEMX1: PUSH AF
LD DE,MSGINITM
LD HL,PRINTMSG
CALL BKSW1to6
LD HL,1200h
LD BC,0D000h - 1200h
CLEAR1: LD A,00h
POP DE
CLEAR1: LD A,D
LD (HL),A
INC HL
DEC BC
@@ -207,79 +321,107 @@ CLEAR1: LD A,00h
JP NZ,CLEAR1
RET
BGETLX: EX (SP),HL
POP BC
; Method to get the CMT parameters from the command line.
; The parameters which should be given are:
; XXXXYYYYZZZZ - where XXXX = Start Address, YYYY = End Address, ZZZZ = Execution Address.
; If the start, end and execution address parameters are correct, prompt for a filename which will be written into the CMT header.
; Output: Reg C = 0 - Success
; = 1 - Error.
GETCMTPARM: CALL READ4HEX ; Start address
JR C,GETCMT1
LD (DTADR),HL ; data adress buffer
LD B,H
LD C,L
CALL READ4HEX ; End address
JR C,GETCMT1
LD (SIZE),HL ; byte size buffer
CALL READ4HEX ; Execution address
JR C,GETCMT1
LD (EXADR),HL ; buffer
CALL NL
LD DE,MSGSAVE ; 'FILENAME? '
LD HL,PRINTMSG
CALL BKSW2to6 ; Print out the filename.
LD DE,BUFER
CALL GETL
LD A,(DE)
CP 01Bh
JP Z,GETHEX2
JP (HL)
GETHEX: EX (SP),IY
POP AF
CALL HLHEX
JR C,GETHEX2
JP (IY)
GETHEX2: POP AF ; Waste the intermediate caller address
RET
LD HL,BUFER+10
LD DE,NAME ; name buffer
LD BC,FNSIZE
LDIR ; C = 0 means success.
RET
GETCMT1: LD C,1 ; C = 1 means an error occured.
RET
; INCREMENT DE REG.
DOT4DE: INC DE
INC DE
INC DE
INC DE
RET
; Method to read 4 bytes from a buffer pointed to by DE and attempt to convert to a 16bit number. If it fails, print out an error
; message and return with C set.
;
; Input: DE = Address of digits to conver.
; Output: HL = 16 bit number.
; SPACE PRINT AND DISP ACC
; INPUT:HL=DISP. ADR.
SPHEX: CALL PRNTS ; SPACE PRINT
LD A,(HL)
CALL PRTHX ; DSP OF ACC (ASCII)
LD A,(HL)
RET
READ4HEX: CALL HLHEX
JR C,READ4HEXERR
INC DE
INC DE
INC DE
INC DE
OR A ; Clear carry flag.
RET
READ4HEXERR:LD DE,MSGREAD4HEX ; Load up error message, print and exit.
LD HL,PRINTMSG
CALL BKSW1to6
SCF
RET
; NEW LINE AND PRINT HL REG (ASCII)
NLPHL: CALL NL
CALL PRTHL
RET
;-------------------------------------------------------------------------------
; END OF MEMORY CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
; SPACE PRINT AND DISP ACC
; INPUT:HL=DISP. ADR.
SPHEX: CALL PRNTS ; SPACE PRINT
LD A,(HL)
CALL PRTHX ; DSP OF ACC (ASCII)
LD A,(HL)
RET
;-------------------------------------------------------------------------------
; START OF PRINTER CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
PTESTX: LD A,(DE)
CP '&' ; plotter test
JR NZ,PTST1X
PTST0X: INC DE
LD A,(DE)
CP 'L' ; 40 in 1 line
JR Z,.LPTX
CP 'S' ; 80 in 1 line
JR Z,..LPTX
CP 'C' ; Pen change
JR Z,PENX
CP 'G' ; Graph mode
JR Z,PLOTX
CP 'T' ; Test
JR Z,PTRNX
; NEW LINE AND PRINT HL REG (ASCII)
NLPHL: CALL NL
CALL PRTHL
RET
;-------------------------------------------------------------------------------
; END OF MEMORY CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; START OF PRINTER CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
PTESTX: LD A,(DE)
CP '&' ; plotter test
JR NZ,PTST1X
PTST0X: INC DE
LD A,(DE)
CP 'L' ; 40 in 1 line
JR Z,.LPTX
CP 'S' ; 80 in 1 line
JR Z,..LPTX
CP 'C' ; Pen change
JR Z,PENX
CP 'G' ; Graph mode
JR Z,PLOTX
CP 'T' ; Test
JR Z,PTRNX
;
PTST1X: CALL PMSGX
ST1X2: RET
.LPTX: LD DE,LLPT ; 01-09-09-0B-0D
JR PTST1X
..LPTX: LD DE,SLPT ; 01-09-09-09-0D
JR PTST1X
PTRNX: LD A,004h ; Test pattern
JR LE999
PLOTX: LD A,002h ; Graph mode
LE999: CALL LPRNTX
JR PTST0X
PENX: LD A,01Dh ; 1 change code (text mode)
JR LE999
PTST1X: CALL PMSGX
ST1X2: RET
.LPTX: LD DE,LLPT ; 01-09-09-0B-0D
JR PTST1X
..LPTX: LD DE,SLPT ; 01-09-09-09-0D
JR PTST1X
PTRNX: LD A,004h ; Test pattern
JR LE999
PLOTX: LD A,002h ; Graph mode
LE999: CALL LPRNTX
JR PTST0X
PENX: LD A,01Dh ; 1 change code (text mode)
JR LE999
;
;
; 1 char print to $LPT
@@ -287,36 +429,36 @@ PENX: LD A,01Dh ; 1 cha
; in: ACC print data
;
;
LPRNTX: LD C,000h ; RDAX test
LD B,A ; print data store
CALL RDAX
LD A,B
OUT (0FFh),A ; data out
LD A,080h ; RDP high
OUT (0FEh),A
LD C,001h ; RDA test
CALL RDAX
XOR A ; RDP low
OUT (0FEh),A
RET
LPRNTX: LD C,000h ; RDAX test
LD B,A ; print data store
CALL RDAX
LD A,B
OUT (0FFh),A ; data out
LD A,080h ; RDP high
OUT (0FEh),A
LD C,001h ; RDA test
CALL RDAX
XOR A ; RDP low
OUT (0FEh),A
RET
;
; $LPT msg.
; in: DE data low address
; 0D msg. end
;
PMSGX: PUSH DE
PUSH BC
PUSH AF
PMSGX1: LD A,(DE) ; ACC = data
CALL LPRNTX
LD A,(DE)
INC DE
CP 00Dh ; end ?
JR NZ,PMSGX1
POP AF
POP BC
POP DE
RET
PMSGX: PUSH DE
PUSH BC
PUSH AF
PMSGX1: LD A,(DE) ; ACC = data
CALL LPRNTX
LD A,(DE)
INC DE
CP 00Dh ; end ?
JR NZ,PMSGX1
POP AF
POP BC
POP DE
RET
;
; RDA check
@@ -351,86 +493,13 @@ SLPT: DB 01H ; TEXT
; END OF PRINTER CMDLINE TOOLS FUNCTIONALITY
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; START OF HELP SCREEN FUNCTIONALITY
;-------------------------------------------------------------------------------
; Simple help screen to display commands.
HELP: CALL NL
LD DE, HELPSCR
CALL PRTSTR
RET
; Modification of original MSG function, use NULL terminated strings not CR terminated and include page pause.
PRTSTR: PUSH AF
PUSH BC
PUSH DE
LD A,0
LD (TMPLINECNT),A
PRTSTR1: LD A,(DE)
CP 000H
JR Z,PRTSTRE
CP 00DH
JR Z,PRTSTR3
PRTSTR2: CALL PRNT
INC DE
JR PRTSTR1
PRTSTR3: PUSH AF
LD A,(TMPLINECNT)
CP 24
JR Z,PRTSTR5
INC A
PRTSTR4: LD (TMPLINECNT),A
POP AF
JR PRTSTR2
PRTSTR5: CALL GETKY
CP ' '
JR NZ,PRTSTR5
XOR A
JR PRTSTR4
PRTSTRE: POP DE
POP BC
POP AF
RET
; Help text. Use of lower case, due to Sharp's non standard character set, is not easy, you have to manually code each byte
; hence using upper case.
HELPSCR: DB "4 - 40 COL MODE.", 00DH
DB "8 - 80 COL MODE.", 00DH
DB "B - TOGGLE KEYBOARD BELL.", 00DH
DB "C - CLEAR MEMORY $1200-$D000.", 00DH
DB "DXXXX[YYYY] - DUMP MEM XXXX TO YYYY.", 00DH
DB "F[X] - BOOT FD DRIVE X.", 00DH
DB 0AAH," - BOOT FD ORIGINAL ROM.", 00DH
DB "H - THIS HELP SCREEN.", 00DH
DB "IR/IC - RFS DIR LISTING ROM/SD CARD.", 00DH
DB "JXXXX - JUMP TO LOCATION XXXX.", 00DH
DB "LT[FN]- LOAD TAPE, FN=FILENAME", 00DH
DB "LR[FN]- LOAD ROM, FN=NO OR NAME", 00DH
DB "LC[FN]- LOAD SDCARD, FN=NO OR NAME", 00DH
DB " - ADD NX FOR NO EXEC, IE.LRNX.", 00DH
DB "MXXXX - EDIT MEMORY STARTING AT XXXX.", 00DH
DB "P - TEST PRINTER.", 00DH
DB "R - TEST DRAM MEMORY.", 00DH
DB "ST[XXXXYYYYZZZZ] - SAVE MEM TO TAPE.", 00DH
DB "SC[XXXXYYYYZZZZ] - SAVE MEM TO CARD.", 00DH
DB " XXXX=START,YYYY=END,ZZZZ=EXEC", 00DH
DB "T - TEST TIMER.", 00DH
DB "V - VERIFY TAPE SAVE.", 00DH
DB 000H
;-------------------------------------------------------------------------------
; END OF HELP SCREEN FUNCTIONALITY
;-------------------------------------------------------------------------------
;--------------------------------------
;
; Message table
; Message table - Refer to bank 6 for
; all messages.
;
;--------------------------------------
MSG_INITM: DB "INIT MEMORY", 00DH
ALIGN 0EFFFh
DB 0FFh

View File

@@ -88,14 +88,13 @@ BKSW4to7: PUSH AF
PUSH AF
LD A, ROMBANK7 ; Required bank to call.
;
BKSW4_0: PUSH BC ; Save BC for caller.
LD BC, BKSWRET4 ; Place bank switchers return address on stack.
PUSH BC
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
BKSW4_0: PUSH HL ; Place function to call on stack
LD HL, BKSWRET4 ; Place bank switchers return address on stack.
EX (SP),HL
LD (TMPSTACKP),SP ; Save the stack pointer as some old code corrupts it.
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
JP (HL) ; Jump to required function.
BKSWRET4: POP BC
POP AF ; Get bank which called us.
BKSWRET4: POP AF ; Get bank which called us.
LD (RFSBK2), A ; Return to that bank.
POP AF
RET ; Return to caller.
@@ -105,42 +104,61 @@ BKSWRET4: POP BC
; START OF CMT CONTROLLER FUNCTIONALITY
;-------------------------------------------------------------------------------
; Programm load
;
; cmd. 'L'
;
LOADTAPENX: LD L,0FFH
; CMT Utility to Load a program from tape.
;
; Three entry points:
; LOADTAPE = Load the first program shifting to lo memory if required and execute.
; LOADTAPENX = Load the first program and return without executing.
; LOADTAPECP = Load the first program to address 0x1200 and return.
;
LOADTAPECP: LD A,0FFH
LD (CMTAUTOEXEC),A
JR LOADTAPE2
LOADTAPENX: LD A,0FFH
JR LOADTAPE1
LOADTAPE: LD L,000H
LOADTAPE1: PUSH HL ; Preserve auto execute flag.
LOADTAPE: LD A,000H
LOADTAPE1: LD (CMTAUTOEXEC),A
XOR A
LOADTAPE2: LD (CMTCOPY),A ; Set cmt copy mode, 0xFF if we are copying.
LD A,0FFH ; If called interbank, set a result code in memory to detect success.
LD (RESULT),A
CALL ?RDI
JP C,?ERX2
CALL NL
LD DE,MSG?2 ; 'LOADING '
RST 018h
LD DE,NAME
RST 018h
LD DE,MSGLOAD ; 'LOADING '
LD BC,NAME
LD HL,PRINTMSG
CALL BKSW4to6
XOR A
LD (BUFER),A
LD HL,(DTADR)
LD (CMTLOLOAD),A
LD HL,(DTADR) ; Common code, store load address in case we shift or manipulate loading.
LD (DTADRSTORE),HL
LD A,(CMTCOPY) ; If were copying we always load at 0x1200.
OR A
JR Z,LOADTAPE3
LD HL,01200H
LD (DTADR),HL
LOADTAPE3: LD HL,(DTADR) ; If were loading and the load address is below 0x1200, shift it to 0x1200 to load then move into correct location.
LD A,H
OR L
JR NZ,LE941
LD HL,(EXADR)
LD A,H
OR L
JR NZ,LE941
JR NZ,LOADTAPE4
LD A,0FFh
LD (BUFER),A
LD (CMTLOLOAD),A
LD HL,01200h
LD (DTADR),HL
LE941: CALL ?RDD
LOADTAPE4: CALL ?RDD
JP C,?ERX2
POP HL ; Get back the auto execute flag.
LD A,L
LD HL,(DTADRSTORE) ; Restore the original load address into the CMT header.
LD (DTADR),HL
LD A,(CMTCOPY)
OR A
JR Z,LOADTAPE4 ; Dont execute.
LD A,(BUFER)
JR NZ,LOADTAPE6
LOADTAPE5: LD A,(CMTAUTOEXEC) ; Get back the auto execute flag.
OR A
JR NZ,LOADTAPE6 ; Dont execute..
LD A,(CMTLOLOAD)
CP 0FFh
JR Z,LOADTAPELM ; Execute at low memory?
LD BC,00100h
@@ -152,56 +170,127 @@ LOADTAPELM: LD A,(MEMSW) ; Perfo
LD BC,(SIZE)
LDIR
LD BC,00100h
JP 00000h
LOADTAPE4: RET
;
; Programm save
;
; cmd. 'S'
;
SAVEX: CALL HEXIY ; Start address
LD (DTADR),HL ; data adress buffer
LD B,H
LD C,L
CALL INC4DE
CALL HEXIY ; End address
SBC HL,BC ; byte size
INC HL
LD (SIZE),HL ; byte size buffer
CALL INC4DE
CALL HEXIY ; execute address
LD (EXADR),HL ; buffer
CALL NL
LD DE,MSGSAVE ; 'FILENAME? '
RST 018h
CALL GETLHEX ; filename input
CALL INC4DE
CALL INC4DE
LD HL,NAME ; name buffer
SAVX1: INC DE
LD A,(DE)
LD (HL),A ; filename trans.
INC HL
CP 00Dh ; end code
JR NZ,SAVX1
LD A,OBJCD ; attribute: OBJ
LD (ATRB),A
CALL ?WRI
?ERX1: JP C,?ERX2
CALL ?WRD ; data
JR C,?ERX1
CALL NL
LD DE,MSGOK ; 'OK!'
RST 018h
LD HL,(EXADR) ; Fetch exec address and run.
JP (HL)
LOADTAPE6: LD DE,MSGCMTDATA
PUSH HL ; Load address as parameter 2.
LD HL,(EXADR)
PUSH HL ; Execution address as parameter 1.
LD BC,(SIZE) ; Size as BC parameter.
LD HL,PRINTMSG
CALL BKSW4to6
POP BC
POP BC ; Waste parameters.
XOR A ; Success.
LD (RESULT),A
RET
; SA1510 Routine to write a tape header. Copied into the RFS and modified to merge better
; with the RFS interface.
;
CMTWRI: DI
PUSH DE
PUSH BC
PUSH HL
LD D,0D7H
LD E,0CCH
LD HL,IBUFE
LD BC,00080H
CALL CKSUM
CALL MOTOR
JR C,CMTWRI2
LD A,E
CP 0CCH
JR NZ,CMTWRI1
PUSH HL
PUSH DE
PUSH BC
LD DE,MSGCMTWRITE
LD BC,NAME
LD HL,PRINTMSG
CALL BKSW4to6
POP BC
POP DE
POP HL
CMTWRI1: CALL GAP
CALL WTAPE
CMTWRI2: POP HL
POP BC
POP DE
CALL MSTOP
PUSH AF
LD A,(TIMFG)
CP 0F0H
JR NZ,CMTWRI3
EI
CMTWRI3: POP AF
RET
; Method to save an application stored in memory to a cassette in the CMT. The start, size and execution address are either given in BUFER via the
; command line and the a filename is prompted for and read, or alternatively all the data is passed into the function already set in the CMT header.
; The tape is then opened and the header + data are written out.
;
SAVECMT: LD A,0FFH ; Set SDCOPY to indicate this is a copy command and not a command line save.
JR SAVEX1
;
; Normal entry point, the cmdline contains XXXXYYYYZZZZ where XXXX=start, YYYY=size, ZZZZ=exec addr. A filenname is prompted for and read.
; The data is stored in the CMT header prior to writing out the header and data..
;
SAVEX: LD HL,GETCMTPARM ; Get the CMT parameters.
CALL BKSW4to3
LD A,C
OR A
RET NZ ; Exit if an error occurred.
XOR A
SAVEX1: LD (SDCOPY),A
LD A,0FFH
LD (RESULT),A ; For interbank calls, pass result via a memory variable. Assume failure unless updated.
LD A,OBJCD ; Set attribute: OBJ
LD (ATRB),A
CALL CMTWRI ; Commence header write. Header doesnt need updating for header write.
?ERX1: JP C,?ERX2
LD A,(SDCOPY)
OR A
JR Z,SAVEX2
LD DE,(DTADR)
LD A,D ; If copying and address is below 1000H, then data is held at 1200H so update header for write.
CP 001H
JR NC,SAVEX2
LD DE,01200H
LD (DTADR),DE
SAVEX2: CALL ?WRD ; data
JR C,?ERX1
LD DE,MSGSAVEOK ; 'OK!'
LD HL,PRINTMSG
CALL BKSW4to6
LD A,0 ; Success.
LD (RESULT),A
RET
?ERX2: CP 002h
JR NZ,?ERX3
LD (RESULT),A ; Set break key pressed code.
RET Z
?ERX3: LD DE,MSGE1 ; 'CHECK SUM ER.'
LD HL,PRINTMSG
CALL BKSW4to6
RET
; Method to verify that a tape write occurred free of error. After a write, the tape is read and compared with the memory that created it.
;
VRFYX: CALL ?VRFY
JP C,?ERX2
LD DE,MSGOK ; 'OK!'
RST 018h
LD HL,PRINTMSG
CALL BKSW4to6
RET
; Method to toggle the audible key press sound, ie a beep when a key is pressed.
;
SGX: LD A,(SWRK)
RRA
CCF
@@ -209,90 +298,16 @@ SGX: LD A,(SWRK)
LD (SWRK),A
RET
?ERX2: CP 002h
RET Z
CALL NL
LD DE,MSGE1 ; 'CHECK SUM ER.'
RST 018h
RET
HEXIY: EX (SP),IY
POP AF
CALL HLHEX
JR C,HEXIY ; Exit if the input is invalid
JP (IY)
HEXIY2: POP AF ; Waste the intermediate caller address
RET ; Return to command processor.
; INCREMENT DE REG.
INC4DE: INC DE
INC DE
INC DE
INC DE
RET
GETLHEX: EX (SP),HL
POP BC
LD DE,BUFER
CALL GETL
LD A,(DE)
CP 01Bh
JR Z,HEXIY2
JP (HL)
;FNINP: CALL NL
; LD DE,MSGSV ; 'FILENAME? '
; RST 018h
; LD DE,BUFER
; CALL GETL
; LD A,(DE)
; CP #1B
; JR NZ,LEAF3
; ;LD HL,ST1X
; ;EX (SP),HL
; RET
;
;LEAF3: LD B,000h
; LD DE,011ADh
; LD HL,BUFER
; LD A,(DE)
; CP 00Dh
; JR Z,LEB20
;LEB00: CP 020h
; JR NZ,LEB08
; INC DE
; LD A,(DE)
; JR LEB00
;LEB08: CP 022h
; JR Z,LEB14
;LEB0C: LD (HL),A
; INC HL
; INC B
; LD A,011h
; CP B
; JR Z,FNINP
;LEB14: INC DE
; LD A,(DE)
; CP 022h
; JR Z,LEB1E
; CP 00Dh
; JR NZ,LEB0C
;LEB1E: LD A,00dh
;LEB20: LD (HL),A
; RET
;
;-------------------------------------------------------------------------------
; END OF CMT CONTROLLER FUNCTIONALITY
;-------------------------------------------------------------------------------
;--------------------------------------
;
; Message table
; Message table - Refer to bank 6 for
; all messages.
;
;--------------------------------------
MSGSAVE: DB "FILENAME? ", 00DH
ALIGN 0EFFFh
DB 0FFh

View File

@@ -88,14 +88,13 @@ BKSW5to7: PUSH AF
PUSH AF
LD A, ROMBANK7 ; Required bank to call.
;
BKSW5_0: PUSH BC ; Save BC for caller.
LD BC, BKSWRET5 ; Place bank switchers return address on stack.
PUSH BC
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
BKSW5_0: PUSH HL ; Place function to call on stack
LD HL, BKSWRET5 ; Place bank switchers return address on stack.
EX (SP),HL
LD (TMPSTACKP),SP ; Save the stack pointer as some old code corrupts it.
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
JP (HL) ; Jump to required function.
BKSWRET5: POP BC
POP AF ; Get bank which called us.
BKSWRET5: POP AF ; Get bank which called us.
LD (RFSBK2), A ; Return to that bank.
POP AF
RET ; Return to caller.

View File

@@ -88,19 +88,369 @@ BKSW6to7: PUSH AF
PUSH AF
LD A, ROMBANK7 ; Required bank to call.
;
BKSW6_0: PUSH BC ; Save BC for caller.
LD BC, BKSWRET6 ; Place bank switchers return address on stack.
PUSH BC
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
BKSW6_0: PUSH HL ; Place function to call on stack
LD HL, BKSWRET6 ; Place bank switchers return address on stack.
EX (SP),HL
LD (TMPSTACKP),SP ; Save the stack pointer as some old code corrupts it.
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
JP (HL) ; Jump to required function.
BKSWRET6: POP BC
POP AF ; Get bank which called us.
BKSWRET6: POP AF ; Get bank which called us.
LD (RFSBK2), A ; Return to that bank.
POP AF
RET ; Return to caller.
;-------------------------------------------------------------------------------
; START OF PRINT ROUTINE METHODS
;-------------------------------------------------------------------------------
; Method to print out a true ASCII character, not the Sharp values. This is done using the mapping table ATBL for the
; range 0..127, 128.. call the original Sharp routine.
; Input: A = Ascii character.
PRINTASCII: PUSH HL
PUSH BC
CP 080H ; Anything above 080H isnt ascii so call original routine.
JR NC,PRINTASCII1
CP 00DH ; Carriage Return? Dont map just execute via original Sharp call.
JR Z,PRINTASCII1
LD HL,ATBL
LD C,A
LD B,0
ADD HL,BC
LD A,(HL)
CALL ?DSP
PRINTASCII0:POP BC
POP HL
RET
PRINTASCII1:CALL PRNT
JR PRINTASCII0
; Method to print out a string residing in this bank.
;
; As string messages take up space and banks are limited, it makes sense to locate all strings in one
; bank and print them out from here, hence this method.
;
; Also, as strings often require embedded values to be printed (aka printf), a basic mechanism for printing out stack
; parameters is provided. A PUSH before calling this method followed by an embedded marker (ie. 0xFF) will see the stack
; value printed in hex at the point in the string where the marker appears.
;
; Input: DE = Address, in this bank or any other location EXCEPT another bank.
; BC = Value to print with marker 0xFB if needed.
; Upto 4 stack values accessed by markers 0xFF, 0xFE, 0xFD, 0xFC
PRINTMSG: LD A,(DE)
CP 000H ; End of string?
RET Z
CP 0FFH ; Marker to print out first stack parameter.
JR Z,PRINTMSG3
CP 0FEH ; Marker to print out second stack parameter.
JR Z,PRINTMSG6
CP 0FDH ; Marker to print out third stack parameter.
JR Z,PRINTMSG7
CP 0FCH ; Marker to print out fourth stack parameter.
JR Z,PRINTMSG8
CP 0FBH ; Marker to print out BC.
JR Z,PRINTMSG9
CP 0FAH ; Marker to print out a filename with filename address stored in BC.
JR Z,PRINTMSG10
CALL PRINTASCII
PRINTMSG2: INC DE
JR PRINTMSG
PRINTMSG3: LD HL,8+0 ; Get first stack parameter, there are 2 pushes on the stack plus return address before the parameters.
PRINTMSG4: ADD HL,SP
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
PRINTMSG5: CALL PRTHL
JR PRINTMSG2
PRINTMSG6: LD HL,8+2
JR PRINTMSG4
PRINTMSG7: LD HL,8+4
JR PRINTMSG4
PRINTMSG8: LD HL,8+6
JR PRINTMSG4
PRINTMSG9: PUSH BC ; Print out contents of BC as 4 digit hex.
POP HL
JR PRINTMSG5
PRINTMSG10: PUSH DE ; Print out a filename with pointer stored in BC.
PUSH BC
POP DE
CALL PRTFN
POP DE
JR PRINTMSG2
; Method to print out the filename within an MZF header or SD Card header.
; The name may not be terminated as the full 17 chars are used, so this needs
; to be checked. Also, the filename uses Sharp Ascii so call the original Sharp
; print routine.
;
; Input: DE = Address of filename.
;
PRTFN: PUSH BC
LD B,FNSIZE ; Maximum size of filename.
PRTMSG: LD A,(DE)
INC DE
CP 000H ; If there is a valid terminator, exit.
JR Z,PRTMSGE
CP 00DH
JR Z,PRTMSGE
CALL PRNT
DJNZ PRTMSG ; Else print until 17 chars have been processed.
CALL NL
PRTMSGE: POP BC
RET
;-------------------------------------------------------------------------------
; END OF PRINT ROUTINE METHODS
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; START OF HELP SCREEN FUNCTIONALITY
;-------------------------------------------------------------------------------
; Simple help screen to display commands.
HELP: CALL NL
LD DE, HELPSCR
CALL PRTSTR
RET
; A modified print string routine with full screen pause to print out the help screen text. The routine prints out true ascii
; as opposed to Sharp modified ascii.
; A string is NULL terminated.
PRTSTR: PUSH AF
PUSH BC
PUSH DE
LD A,0
LD (TMPLINECNT),A
PRTSTR1: LD A,(DE)
CP 000H ; NULL terminates the string.
JR Z,PRTSTRE
CP 00DH ; As does CR.
JR Z,PRTSTR3
PRTSTR2: CALL PRINTASCII
INC DE
JR PRTSTR1
PRTSTR3: PUSH AF
LD A,(TMPLINECNT)
CP 24
JR Z,PRTSTR5
INC A
PRTSTR4: LD (TMPLINECNT),A
POP AF
JR PRTSTR2
PRTSTR5: CALL GETKY
CP ' '
JR NZ,PRTSTR5
XOR A
JR PRTSTR4
PRTSTRE: POP DE
POP BC
POP AF
RET
; Help text. Use of lower case, due to Sharp's non standard character set, is not easy, you have to manually code each byte
; hence using upper case.
HELPSCR: DB "4 - 40 col mode.", 00DH
DB "8 - 80 col mode.", 00DH
DB "B - toggle keyboard bell.", 00DH
DB "C - clear memory $1200-$D000.", 00DH
DB "DXXXX[YYYY] - dump mem XXXX to YYYY.", 00DH
DB "EC[FN]- erase file, FN=No, or Filename", 00DH
DB "F[X] - boot fd drive X.", 00DH
DB "f - boot fd original rom.", 00DH
DB "H - this help screen.", 00DH
DB "IR/IC - rfs dir listing rom/sd card.", 00DH
DB "JXXXX - jump to location XXXX.", 00DH
DB "LT[FN]- load tape, FN=Filename", 00DH
DB "LR[FN]- load rom, FN=No. or Filename", 00DH
DB "LC[FN]- load sdcard, FN=No. or Filename", 00DH
DB " - add NX for no exec, ie.LRNX.", 00DH
DB "MXXXX - edit memory starting at XXXX.", 00DH
DB "P - test printer.", 00DH
DB "R - test dram memory.", 00DH
DB "SD2T - copy sd card to tape.", 00DH
DB "ST[XXXXYYYYZZZZ] - save mem to tape.", 00DH
DB "SC[XXXXYYYYZZZZ] - save mem to card.", 00DH
DB " XXXX=start,YYYY=end,ZZZZ=exec", 00DH
DB "T - test timer.", 00DH
DB "T2SD - copy tape to sd card.", 00DH
DB "V - verify tape save.", 00DH
DB 000H
;-------------------------------------------------------------------------------
; END OF HELP SCREEN FUNCTIONALITY
;-------------------------------------------------------------------------------
; TRUE ASCII TO DISPLAY CODE TABLE
;
ATBL: DB 0CCH ; NUL '\0' (null character)
DB 0E0H ; SOH (start of heading)
DB 0F2H ; STX (start of text)
DB 0F3H ; ETX (end of text)
DB 0CEH ; EOT (end of transmission)
DB 0CFH ; ENQ (enquiry)
DB 0F6H ; ACK (acknowledge)
DB 0F7H ; BEL '\a' (bell)
DB 0F8H ; BS '\b' (backspace)
DB 0F9H ; HT '\t' (horizontal tab)
DB 0FAH ; LF '\n' (new line)
DB 0FBH ; VT '\v' (vertical tab)
DB 0FCH ; FF '\f' (form feed)
DB 0FDH ; CR '\r' (carriage ret)
DB 0FEH ; SO (shift out)
DB 0FFH ; SI (shift in)
DB 0E1H ; DLE (data link escape)
DB 0C1H ; DC1 (device control 1)
DB 0C2H ; DC2 (device control 2)
DB 0C3H ; DC3 (device control 3)
DB 0C4H ; DC4 (device control 4)
DB 0C5H ; NAK (negative ack.)
DB 0C6H ; SYN (synchronous idle)
DB 0E2H ; ETB (end of trans. blk)
DB 0E3H ; CAN (cancel)
DB 0E4H ; EM (end of medium)
DB 0E5H ; SUB (substitute)
DB 0E6H ; ESC (escape)
DB 0EBH ; FS (file separator)
DB 0EEH ; GS (group separator)
DB 0EFH ; RS (record separator)
DB 0F4H ; US (unit separator)
DB 000H ; SPACE
DB 061H ; !
DB 062H ; "
DB 063H ; #
DB 064H ; $
DB 065H ; %
DB 066H ; &
DB 067H ; '
DB 068H ; (
DB 069H ; )
DB 06BH ; *
DB 06AH ; +
DB 02FH ; ,
DB 02AH ; -
DB 02EH ; .
DB 02DH ; /
DB 020H ; 0
DB 021H ; 1
DB 022H ; 2
DB 023H ; 3
DB 024H ; 4
DB 025H ; 5
DB 026H ; 6
DB 027H ; 7
DB 028H ; 8
DB 029H ; 9
DB 04FH ; :
DB 02CH ; ;
DB 051H ; <
DB 02BH ; =
DB 057H ; >
DB 049H ; ?
DB 055H ; @
DB 001H ; A
DB 002H ; B
DB 003H ; C
DB 004H ; D
DB 005H ; E
DB 006H ; F
DB 007H ; G
DB 008H ; H
DB 009H ; I
DB 00AH ; J
DB 00BH ; K
DB 00CH ; L
DB 00DH ; M
DB 00EH ; N
DB 00FH ; O
DB 010H ; P
DB 011H ; Q
DB 012H ; R
DB 013H ; S
DB 014H ; T
DB 015H ; U
DB 016H ; V
DB 017H ; W
DB 018H ; X
DB 019H ; Y
DB 01AH ; Z
DB 052H ; [
DB 059H ; \ '\\'
DB 054H ; ]
DB 0BEH ; ^
DB 03CH ; _
DB 0C7H ; `
DB 081H ; a
DB 082H ; b
DB 083H ; c
DB 084H ; d
DB 085H ; e
DB 086H ; f
DB 087H ; g
DB 088H ; h
DB 089H ; i
DB 08AH ; j
DB 08BH ; k
DB 08CH ; l
DB 08DH ; m
DB 08EH ; n
DB 08FH ; o
DB 090H ; p
DB 091H ; q
DB 092H ; r
DB 093H ; s
DB 094H ; t
DB 095H ; u
DB 096H ; v
DB 097H ; w
DB 098H ; x
DB 099H ; y
DB 09AH ; z
DB 0BCH ; {
DB 080H ; |
DB 040H ; }
DB 0A5H ; ~
DB 0C0H ; DEL
;--------------------------------------
;
; Message table
;
;--------------------------------------
MSGSON: DB "+ RFS ", 0ABh, "1.2 **" ,00DH, 000H
MSGNOTFND: DB "Not Found", 00DH, 000H
MSGRDIRLST: DB "ROM Directory:", 00DH, 000H
MSGTRM: DB 00DH, 000H
MSGBADCMD: DB "???", 00DH, 000H
MSGCDIRLST: DB "SD Card Directory:", 00DH, 000H
MSGSDRERR: DB "SD Read error, Sec:",0FBH, 000H
MSGSDWERR: DB "SD Write error, Sec:",0FBH, 000H
MSGSVFAIL: DB "SD Error, save failed.", 00DH, 000H
MSGERAFAIL: DB "SD Dir update failed.", 00DH, 000H
MSGSVDIRENT:DB "Saving into dir entry:",0FBH, 00DH, 000H
MSGERASEDIR:DB "Deleted dir entry:",0FBH, 000H
MSGCMTDATA: DB "Load:",0FEH,",Exec:",0FFH, ",Size:",0FBH, 00DH, 000H
MSGNOTBIN: DB "Not binary", 00DH, 000H
MSGLOAD: DB 00DH, "Loading ",'"',0FAH,'"', 00DH, 000H
MSGSAVE: DB 00DH, "Filename: ", 000H
MSGDIRFULL: DB "Directory full", 00DH, 000H
MSGE1: DB 00DH, "Check sum error!", 00DH, 000H ; Check sum error.
MSGCMTWRITE:DB 00DH, "Writing ", '"',0FAH,'"', 00DH, 000H
MSGOK: DB 00DH, "OK!", 00DH, 000H
MSGSAVEOK: DB "Tape image saved.", 00DH, 000H
MSGBOOTDRV: DB 00DH, "Floppy boot drive ?", 000H
MSGLOADERR: DB 00DH, "Disk loading error", 00DH, 000H
MSGIPLLOAD: DB 00DH, "Disk loading ", 000H
MSGDSKNOTMST:DB 00DH, "This is not a boot disk",00Dh, 000H
MSGINITM: DB "Init memory", 00DH, 000H
MSGREAD4HEX:DB "Bad hex number", 00DH, 000H
MSGT2SDERR: DB "Copy from Tape to SD Failed", 00DH, 000H
MSGSD2TERR: DB "Copy from SD to Tape Failed", 00DH, 000H
MSGT2SDOK: DB "Success, Tape to SD done.", 00DH, 000H
MSGSD2TOK: DB "Success, SD to Tape done.", 00DH, 000H
ALIGN 0EFFFh
DB 0FFh

View File

@@ -88,14 +88,13 @@ BKSW7to7: PUSH AF
PUSH AF
LD A, ROMBANK7 ; Required bank to call.
;
BKSW7_0: PUSH BC ; Save BC for caller.
LD BC, BKSWRET7 ; Place bank switchers return address on stack.
PUSH BC
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
BKSW7_0: PUSH HL ; Place function to call on stack
LD HL, BKSWRET7 ; Place bank switchers return address on stack.
EX (SP),HL
LD (TMPSTACKP),SP ; Save the stack pointer as some old code corrupts it.
LD (RFSBK2), A ; Bank switch in user rom space, A=bank.
JP (HL) ; Jump to required function.
BKSWRET7: POP BC
POP AF ; Get bank which called us.
BKSWRET7: POP AF ; Get bank which called us.
LD (RFSBK2), A ; Return to that bank.
POP AF
RET ; Return to caller.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -56,17 +56,13 @@ RFS_INCLUDE+="${MZF_PATH}/2z-046a.MZF:"
RFS_INCLUDE+="${MZF_PATH}/5Z-009A.MZF:"
RFS_INCLUDE+="${MZF_PATH}/5Z-009B.MZF:"
RFS_INCLUDE+="${MZF_PATH}/6502_Betriebssys.MZF:"
RFS_INCLUDE+="${MZF_PATH}/80A PENCIL.A2_C2.MZF:"
RFS_INCLUDE+="${MZF_PATH}/80A_PENCIL.A2_C2.MZF:"
RFS_INCLUDE+="${MZF_PATH}/80A PENCIL.A2_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/80A_PENCIL.A2_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/80zbasic.MZF:"
RFS_INCLUDE+="${MZF_PATH}/A-BASIC_SA-5510.MZF:"
RFS_INCLUDE+="${MZF_PATH}/AIP_-_LOGO_xrr.MZF:"
RFS_INCLUDE+="${MZF_PATH}/APOLLO CHESS v2a.MZF:"
RFS_INCLUDE+="${MZF_PATH}/APOLLO_CHESS_v2a.MZF:"
RFS_INCLUDE+="${MZF_PATH}/B880.A3_P6.MZF:"
RFS_INCLUDE+="${MZF_PATH}/B880 MASTER.MZF:"
RFS_INCLUDE+="${MZF_PATH}/B880_MASTER.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_MZ-5Z008_2.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_MZ-5Z008.MZF:"
@@ -77,37 +73,25 @@ RFS_INCLUDE+="${MZF_PATH}/BASIC_OM-1001.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_OM-500.MZF:"
RFS_INCLUDE+="${MZF_PATH}/basic_sa-5510.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC.SA-5510.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC SA-5575_C.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_SA-5575_C.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC SA-5575_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_SA-5575_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC SA-5577_C.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_SA-5577_C.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC SA-5577_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_SA-5577_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC SA-5580.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_SA-5580.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BASIC_SP-5025.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BAS MOD v3.74.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BAS_MOD_v3.74.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BATTLE_GAME.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BINARY COUNT.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BINARY_COUNT.MZF:"
RFS_INCLUDE+="${MZF_PATH}/bomberman_MZ700.m12:"
RFS_INCLUDE+="${MZF_PATH}/BYTESAVER SA5510.MZF:"
RFS_INCLUDE+="${MZF_PATH}/BYTESAVER_SA5510.MZF:"
RFS_INCLUDE+="${MZF_PATH}/cannon_ball.m12:"
RFS_INCLUDE+="${MZF_PATH}/clock1.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CLUB COPY.U1.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CLUB_COPY.U1.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CLUB MON.A1_M.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CLUB_MON.A1_M.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CLUB MON.A1_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CLUB_MON.A1_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/cmttofd.MZF:"
RFS_INCLUDE+="${MZF_PATH}/COLONY.MZF:"
RFS_INCLUDE+="${MZF_PATH}/COMPILER_A2.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CONVERTER A_700.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CONVERTER_A_700.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CONVERTER.MZF:"
RFS_INCLUDE+="${MZF_PATH}/COPIER.MZF:"
@@ -116,26 +100,19 @@ RFS_INCLUDE+="${MZF_PATH}/cpm22.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CPM_RFS_1.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CPM_RFS_2.MZF:"
RFS_INCLUDE+="${MZF_PATH}/CRUISER3_MZ1500.M12:"
RFS_INCLUDE+="${MZF_PATH}/DCS MZ80A APPEND.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DCS_MZ80A_APPEND.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DCS MZ80A RENUM.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DCS_MZ80A_RENUM.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DELETE.MZF:"
RFS_INCLUDE+="${MZF_PATH}/diamond.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DISASM 8800.A15.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DISASM_8800.A15.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DISASM B800.A15.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DISASM_B800.A15.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DISKEDIT.A4B.MZF:"
RFS_INCLUDE+="${MZF_PATH}/DISKEDIT.A7_40T.MZF:"
RFS_INCLUDE+="${MZF_PATH}/diskutility.MZF:"
RFS_INCLUDE+="${MZF_PATH}/doordoor:"
RFS_INCLUDE+="${MZF_PATH}/Doordoor.mzt:"
RFS_INCLUDE+="${MZF_PATH}/EXPRESS BAS_700.MZF:"
RFS_INCLUDE+="${MZF_PATH}/EXPRESS_BAS_700.MZF:"
RFS_INCLUDE+="${MZF_PATH}/EXPRESS COMPILER.MZF:"
RFS_INCLUDE+="${MZF_PATH}/EXPRESS_COMPILER.MZF:"
RFS_INCLUDE+="${MZF_PATH}/EXPRESS PLUS.MZF:"
RFS_INCLUDE+="${MZF_PATH}/EXPRESS_PLUS.MZF:"
RFS_INCLUDE+="${MZF_PATH}/EXT.BASIC_OM-500.MZF:"
RFS_INCLUDE+="${MZF_PATH}/FDCOPY.MZF:"
@@ -220,7 +197,6 @@ RFS_INCLUDE+="${MZF_PATH}/ROUND_SHOOT.MZF:"
RFS_INCLUDE+="${MZF_PATH}/sa-5510_Bas_MZ80K.MZF:"
RFS_INCLUDE+="${MZF_PATH}/SA-5510_Compiler.MZF:"
RFS_INCLUDE+="${MZF_PATH}/SA-5510+KN.COMM..MZF:"
RFS_INCLUDE+="${MZF_PATH}/SA-6510.DSK:"
RFS_INCLUDE+="${MZF_PATH}/sa-6510.MZF:"
RFS_INCLUDE+="${MZF_PATH}/SARGON_2.71.MZF:"
RFS_INCLUDE+="${MZF_PATH}/S-Basic-Cent-2.MZF:"
@@ -283,7 +259,6 @@ RFS_INCLUDE+="${MZF_PATH}/Z80MACHINE.A3_C2.MZF:"
RFS_INCLUDE+="${MZF_PATH}/Z80_MACHINE.A3_S.MZF:"
RFS_INCLUDE+="${MZF_PATH}/ZEN7E.A2.MZF:"
RFS_INCLUDE+="${MZF_PATH}/Zexas_MZ800.MZF:"
RFS_INCLUDE+="${MZF_PATH}/ZSP:"
RFS_INCLUDE+="${MZF_PATH}/ZSP.MZF"
IFS=":"; for f in ${RFS_INCLUDE}