Bug fixes and changes to coexist with the tranZPUterSW v2.1

This commit is contained in:
Philip Smart
2020-07-24 12:27:10 +01:00
parent 6a5e5bf5f0
commit 372a1f8e55
33 changed files with 4981 additions and 513 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

3307
software/asm/1Z-013A.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -43,19 +43,21 @@ HEADER1: IF BUILD_MZ80A = 1
DW CODESTART ; Load address of program.
DW CODESTART ; Exec address of program.
ENDIF
HEADER2: IF BUILD_TZFS = 1
IF BUILD_RFS = 1
HEADER2: IF BUILD_RFS = 1
DB "RFS BASIC V1.1" , 0DH, 0DH, 0DH ; Title/Name (17 bytes).
DW (CODEEND - CODESTART) + (RELOCEND - RELOC) + (RELOCRFS2END - RELOCRFS2) ; Size of program.
DW 01200H ; Load address of program.
DW RELOCRFS ; Exec address of program.
ELSE
ENDIF
HEADER3: IF BUILD_TZFS = 1
DB "TZFS BASIC V1.1", 0DH, 0DH ; Title/Name (17 bytes).
DW (CODEEND - CODESTART) + (RELOCEND - RELOC) ; Size of program.
DW 01200H ; Load address of program.
DW RELOC ; Exec address of program.
ENDIF
ENDIF
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h ; Comment (104 bytes).
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
@@ -6833,6 +6835,41 @@ MEMSW5: IF BUILD_TZFS+BUILD_RFS > 0
EI
RET
; A print string method but without memory mode change, for use when the hardware is already switched in and doesnt want to be changed.
;
PRNTSTR: LD A,(DE)
OR A
JR Z,PRNTSTR6
INC DE
;
CALL CURSRSTR ; Restore char under cursor.
CP 00DH
JR NZ,PRNTSTR2
PRNTSTR1: LD A,(DPRNT)
OR A
JR Z,PRNTSTR5
LD A,0CDH
CALL DPCT
JR PRNTSTR5
PRNTSTR2: CP 00AH
JR Z,PRNTSTR1
CP 07FH
JR NZ,PRNTSTR4
PRNTSTR3: LD A,0C7H
CALL DPCT
JR PRNTSTR5
PRNTSTR4: CP BACKS
JR Z,PRNTSTR3
PUSH BC
LD C,A
LD B,A
CALL PRT
LD A,B
POP BC
PRNTSTR5: CALL DSPXYTOADDR
JR PRNTSTR
PRNTSTR6: RET
;
; Function to print out the contents of HL as 4 digit Hexadecimal.
;
@@ -7431,7 +7468,7 @@ WRI1: CALL CKSUM
CMIWRI1: DI
CALL GAP
CALL WTAPE
CMIWRI2: JP L0552
CMIWRI2: JP RET2
?WRD: DI
@@ -7444,7 +7481,7 @@ CMIWRI2: JP L0552
LD HL,(DTADR)
LD A,B
OR C
JR Z,L04CB
JR Z,WTAP3
JR WRI1
WTAPE: PUSH DE
@@ -7453,38 +7490,39 @@ WTAPE: PUSH DE
LD D,002H
LD A,0F0H
LD (KEYPA),A
L048F: LD A,(HL)
CALL L0767
WTAP1: LD A,(HL)
CALL WBYTE
LD A,(KEYPB)
AND 081H
JP NZ,L049E
JP NZ,WTAP2
SCF
JR L04CB
L049E: INC HL
JR WTAP3
WTAP2: INC HL
DEC BC
LD A,B
OR C
JP NZ,L048F
JP NZ,WTAP1
LD HL,(SUMDT)
LD A,H
CALL L0767
CALL WBYTE
LD A,L
CALL L0767
CALL L0D57
CALL WBYTE
CALL LONG
DEC D
JP NZ,L04BB
JP NZ,WTAP4
OR A
JP L04CB
L04BB: LD B,000H
L04BD: CALL L0D3E
JP WTAP3
WTAP4: LD B,000H
WTAP5: CALL SHORT
DEC B
JP NZ,L04BD
JP NZ,WTAP5
POP HL
POP BC
PUSH BC
PUSH HL
JP L048F
L04CB: POP HL
JP WTAP1
WTAP3: POP HL
POP BC
POP DE
RET
@@ -7496,16 +7534,23 @@ L04CB: POP HL
LD E,0CCH
LD BC,00080H
LD HL,IBUFE
L04DD: CALL MOTOR
JP C,L0570
RD1: DI
MEMSWRT0: IF BUILD_TZFS+BUILD_RFS > 0
LD (SPISRSAVE),SP ; Share the interrupt stack whilst accessing hardware as the BASIC stack goes out of scope.
LD SP,ISRSTACK ; Interrupts are disabled so we can safely use this stack.
LD A,TZMM_MZ700_0 ; We meed to be in memory mode 10 to access the tape hardware.
OUT (MMCFG),A
ENDIF
;
CALL MOTOR
JP C,RTP6
DI
CALL TMARK
JP C,L0570
CALL L0505
JP L0552
JP C,RTP6
CALL RTAPE
JP RET2
?RDD: DI
PUSH DE
?RDD: PUSH DE
PUSH BC
PUSH HL
LD D,0D2H
@@ -7514,20 +7559,21 @@ L04DD: CALL MOTOR
LD HL,(DTADR)
LD A,B
OR C
JP Z,L0552
JR L04DD
L0505: PUSH DE
JP Z,RET2
JR RD1
RTAPE: PUSH DE
PUSH BC
PUSH HL
LD H,002H
L050A: LD BC,KEYPB
RTP1: LD BC,KEYPB
LD DE,KEYPC
L0510: CALL EDGE
JP C,L0570
RTP2: CALL EDGE
JP C,RTP6
CALL DLY3
LD A,(DE)
AND 020H
JP Z,L0510
JP Z,RTP2
LD D,H
LD HL,00000H
LD (SUMDT),HL
@@ -7535,45 +7581,65 @@ L0510: CALL EDGE
POP BC
PUSH BC
PUSH HL
L052A: CALL RBYTE
JP C,L0570
LD (HL),A
RTP3: CALL RBYTE
JP C,RTP6
; For TZFS/RFS page in top bank of memory for potential data store.
MEMSWRT1: IF BUILD_TZFS+BUILD_RFS > 0
EX AF,AF'
LD A,TZMM_MZ700_2
OUT (MMCFG),A
EX AF,AF'
LD (HL),A ; Save the byte just read once memory has been paged in.
LD A,TZMM_MZ700_0
OUT (MMCFG),A
ELSE
LD (HL),A ; Save the byte just read.
ENDIF
INC HL
DEC BC
LD A,B
OR C
JP NZ,L052A
JP NZ,RTP3
LD HL,(SUMDT)
CALL RBYTE
JP C,L0570
JP C,RTP6
LD E,A
CALL RBYTE
JP C,L0570
JP C,RTP6
CP L
JP NZ,L0563
JP NZ,RTP5
LD A,E
CP H
JP NZ,L0563
L0551: XOR A
L0552: POP HL
JP NZ,RTP5
RTP8: XOR A
RET2: CALL MSTOP
MEMSWRT4: IF BUILD_TZFS+BUILD_RFS > 0
EX AF,AF'
LD A,TZMM_MZ700_2 ; Return to the full 64K memory mode.
OUT (MMCFG),A
EX AF,AF'
LD SP,(SPISRSAVE) ; Restore the BASIC stack to exit.
ENDIF
;
POP HL
POP BC
POP DE
CALL MSTOP
PUSH AF
EI
POP AF
RET
L0563: DEC D
JR Z,L056C
RTP5: DEC D
JR Z,RTP7
LD H,D
CALL GAPCK
JR L050A
L056C: LD A,001H
JR L0572
L0570: LD A,002H
L0572: SCF
JR L0552
JR RTP1
RTP7: LD A,001H
JR RTP9
RTP6: LD A,002H
RTP9: SCF
JR RET2
?VRFY: DI
@@ -7586,14 +7652,14 @@ L0572: SCF
LD E,053H
LD A,B
OR C
JR Z,L0552
JR Z,RET2
CALL CKSUM
CALL MOTOR
JR C,L0570
JR C,RTP6
CALL TMARK
JP C,L0570
JP C,RTP6
CALL TVRFY
JR L0552
JR RET2
TVRFY: PUSH DE
PUSH BC
@@ -7602,7 +7668,7 @@ TVRFY: PUSH DE
TVF1: LD BC,KEYPB
LD DE,KEYPC
TVF2: CALL EDGE
JP C,L0570
JP C,RTP6
CALL DLY3
LD A,(DE)
AND 020H
@@ -7613,9 +7679,9 @@ TVF2: CALL EDGE
PUSH BC
PUSH HL
TVF3: CALL RBYTE
JP C,L0570
JP C,RTP6
CP (HL)
JP NZ,L056C
JP NZ,RTP7
INC HL
DEC BC
LD A,B
@@ -7624,12 +7690,12 @@ TVF3: CALL RBYTE
LD HL,(CSMDT)
CALL RBYTE
CP H
JR NZ,L056C
JR NZ,RTP7
CALL RBYTE
CP L
JR NZ,L056C
JR NZ,RTP7
DEC D
JP Z,L0551
JP Z,RTP8
LD H,D
JR TVF1
@@ -7728,8 +7794,8 @@ MOT1: LD A,(KEYPC)
AND 010H
JR Z,MOT4
MOT2: LD B,0A6H
L06B1: CALL DLY12
DJNZ L06B1
MOT3: CALL DLY12
DJNZ MOT3
XOR A
MOT7: JR RET3
MOT4: LD A,006H
@@ -7738,14 +7804,13 @@ MOT4: LD A,006H
INC A
LD (HL),A
DJNZ MOT1
CALL NL
LD A,D
CP 0D7H
JR Z,MOT8
LD DE,MSGPLAY
JR MOT9
MOT8: LD DE,MSGRECORD ; RECORD message.
MOT9: CALL MONPRTSTR
MOT9: CALL PRNTSTR
MOT5: LD A,(KEYPC)
AND 010H
JR NZ,MOT2
@@ -7758,23 +7823,23 @@ MSTOP: PUSH AF
PUSH BC
PUSH DE
LD B,00AH
L0705: LD A,(KEYPC)
MST1: LD A,(KEYPC)
AND 010H
JR Z,L0717
LD A,006H
JR Z,MST3
MST2: LD A,006H
LD (KEYPF),A
INC A
LD (KEYPF),A
DJNZ L0705
L0717: JP RSTR1
DJNZ MST1
MST3: JP RSTR1
CKSUM: PUSH BC
PUSH DE
PUSH HL
LD DE,00000H
L0720: LD A,B
CKS1: LD A,B
OR C
JR NZ,L072F
JR NZ,CKS2
EX DE,HL
LD (SUMDT),HL
LD (CSMDT),HL
@@ -7783,48 +7848,41 @@ L0720: LD A,B
POP BC
RET
L072F: LD A,(HL)
CKS2: LD A,(HL)
PUSH BC
LD B,008H
L0733: RLCA
JR NC,L0737
CKS3: RLCA
JR NC,CKS4
INC DE
L0737: DJNZ L0733
CKS4: DJNZ CKS3
POP BC
INC HL
DEC BC
JR L0720
L073E: RLCA
RLCA
RLCA
LD C,A
LD A,E
L0743: DEC H
RRCA
JR NC,L0743
LD A,H
ADD A,C
LD C,A
JP SWEP01
JR CKS1
L0759: LD A,00EH
L075B: DEC A
JP NZ,L075B
DLY1: LD A,00EH
DLY1A: DEC A
JP NZ,DLY1A
RET
L0760: LD A,00DH
L0762: DEC A
JP NZ,L0762
DLY2: LD A,00DH
DLY2A: DEC A
JP NZ,DLY2A
RET
L0767: PUSH BC
DLY3: NEG
NEG
LD A,02AH
JP DLY2A
WBYTE: PUSH BC
LD B,008H
CALL L0D57
L076D: RLCA
CALL C,L0D57
CALL NC,L0D3E
CALL LONG
WBY1: RLCA
CALL C,LONG
CALL NC,SHORT
DEC B
JP NZ,L076D
JP NZ,WBY1
POP BC
RET
@@ -7834,58 +7892,53 @@ GAP: PUSH BC
LD BC,055F0H
LD DE,02828H
CP 0CCH
JP Z,L078E
JP Z,GAP1
LD BC,02AF8H
LD DE,01414H
L078E: CALL L0D3E
GAP1: CALL SHORT
DEC BC
LD A,B
OR C
JR NZ,L078E
L0796: CALL L0D57
JR NZ,GAP1
GAP2: CALL LONG
DEC D
JR NZ,L0796
L079C: CALL L0D3E
JR NZ,GAP2
GAP3: CALL SHORT
DEC E
JR NZ,L079C
CALL L0D57
JR NZ,GAP3
CALL LONG
POP DE
POP BC
RET
L0D3E: PUSH AF
SHORT: PUSH AF
LD A,003H
LD (KEYPF),A
CALL L0759
CALL L0759
CALL DLY1
CALL DLY1
LD A,002H
LD (KEYPF),A
CALL L0759
CALL L0759
CALL DLY1
CALL DLY1
POP AF
RET
L0D57: PUSH AF
LONG: PUSH AF
LD A,003H
LD (KEYPF),A
CALL L0759
CALL L0759
CALL L0759
CALL L0759
CALL DLY1
CALL DLY1
CALL DLY1
CALL DLY1
LD A,002H
LD (KEYPF),A
CALL L0759
CALL L0759
CALL L0759
CALL L0760
CALL DLY1
CALL DLY1
CALL DLY1
CALL DLY2
POP AF
RET
DLY3: NEG
NEG
LD A,02AH
JP L0762
L09AB: ADD A,C
DJNZ L09AB
POP BC
@@ -8605,8 +8658,8 @@ SIGNON: DB "MZ-80A BASIC Ver 4.7b",CR,LF
DB " 1978 by Microsoft",CR,LF,0,0
SVCRESPERR: DB "I/O Response Error, time out!", CR, NUL
SVCIOERR: DB "I/O Error, time out!", CR, NUL
MSGRECORD: DB "Press RECORD+PLAY", CR, NUL
MSGPLAY: DB "Press PLAY", CR, NUL
MSGRECORD: DB CR, "Press RECORD+PLAY", CR, NUL
MSGPLAY: DB CR, "Press PLAY", CR, NUL
MSGWRITING: DB "Writing \"", NUL
MSGWRITING2:DB "\"", CR, NUL
ANSIERR: DB "Bad value!", CR, NUL

901
software/asm/IPL.asm Normal file
View File

@@ -0,0 +1,901 @@
ORG 0000H
;****************************************************************
;
; Personal Computer
; MZ-80B
;
; Initial Program Loader
;****************************************************************
;
JR START
;
; NST RESET
;
NST: LD A,03H
OUT (PPICTL),A ;Set PC1 NST=1
;
START: LD A,82H ;8255 A=OUT B=IN C=OUT
OUT (PPICTL),A
LD A,0FH ;PIO A=OUT
OUT (PIOCTLA),A
LD A,0CFH ;PIO B=IN
OUT (PIOCTLB),A
LD A,0FFH
OUT (PIOCTLB),A
LD A,58H ;BST=1 NST=0 OPEN=1 WRITE=1
OUT (PPIC),A
LD A,12H
OUT (PPIA),A
XOR A
OUT (GRPHCTL),A ;Set Graphics VRAM to default, input to GRPH I, no output.
LD SP,0FFE0H
LD HL,0D000H
LD A,0B3H
OUT (PIOA),A
CLEAR: LD (HL),00H ;DISPLAY CLEAR
INC HL
LD A,H
OR L
JR NZ,CLEAR
LD A,13H
OUT (PIOA),A
XOR A
LD (DRINO),A
LD (MTFG),A
KEYIN: CALL KEYS1
BIT 3,A ;C - Cassette.
JR Z,CMT
BIT 0,A ;/ - Boot external rom.
JP Z,EXROMT
JR NKIN ;No selection, so standard startup, try FDC then CMT.
;
KEYS1: LD B,14H ;Preserve A4-A7, set A4 to prevent all strobes low, the select line 5 (0-4).
KEYS: IN A,(PIOA)
AND 0F0H
OR B
OUT (PIOA),A
IN A,(PIOB) ;Read the strobed key.
RET
;
;
NKIN: CALL FDCC
JP Z,FD
JR CMT
;
FDCC: LD A,0A5H
LD B,A
OUT (0D9H),A
CALL DLY80U
IN A,(0D9H)
CP B
RET
;
; ;
; CMT CONTROL ;
; ;
;
CMT: CALL MSTOP
CALL DEL6
CALL KYEMES
CALL ?RDI
JR C,ST1
CALL LDMSG
LD HL,NAME
LD E,010H
LD C,010H
CALL DISP2
LD A,(ATRB)
CP 01H
JR NZ,MISMCH
CALL ?RDD
ST1: PUSH AF
CALL DEL6
CALL REW
POP AF
JP C,TRYAG
JP NST
;
MISMCH: LD HL,MES16
LD E,0AH
LD C,0FH
CALL DISP
CALL MSTOP
SCF
JR ST1
;
;READ INFORMATION
; CF=1:ERROR
RDINF:
?RDI: DI
LD D,04H
LD BC,0080H
LD HL,IBUFE
RD1: CALL MOTOR
JR C,STPEIR
CALL TMARK
JR C,STPEIR
CALL RTAPE
JR C,STPEIR
RET2S: BIT 3,D
JR Z,EIRTN
STPEIR: CALL MSTOP
EIRTN: EI
RET
;
;
;READ DATA
RDDAT:
?RDD: DI
LD D,08H
LD BC,(SIZE)
LD HL,8000H
JR RD1
;
;
;READ TAPE
; BC=SIZE
; DE=LOAD ADDRSS
RTAPE: PUSH DE
PUSH BC
PUSH HL
LD H,02H
RTP2: CALL SPDIN
JR C,TRTN1 ;BREAK
JR Z,RTP2
LD D,H
LD HL,0000H
LD (SUMDT),HL
POP HL
POP BC
PUSH BC
PUSH HL
RTP3: CALL RBYTE
JR C,TRTN1
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,RTP3
LD HL,(SUMDT)
CALL RBYTE
JR C,TRTN1
LD E,A
CALL RBYTE
JR C,TRTN1
CP L
JR NZ,RTP5
LD A,E
CP H
JR Z,TRTN1
RTP5: DEC D
JR Z,RTP6
LD H,D
JR RTP2
RTP6: CALL BOOTER
SCF
TRTN1: POP HL
POP BC
POP DE
RET
;EDGE
EDGE: IN A,(PPIB)
CPL
RLCA
RET C ;BREAK
RLCA
JR NC,EDGE ;WAIT ON LOW
EDGE1: IN A,(PPIB)
CPL
RLCA
RET C ;BREAK
RLCA
JR C,EDGE1 ;WAIT ON HIGH
RET
; 1 BYTE READ
; DATA=A
; SUMDT STORE
RBYTE: PUSH HL
LD HL,0800H ; 8 BITS
RBY1: CALL SPDIN
JR C,RBY3 ;BREAK
JR Z,RBY2 ;BIT=0
PUSH HL
LD HL,(SUMDT) ;CHECKSUM
INC HL
LD (SUMDT),HL
POP HL
SCF
RBY2: RL L
DEC H
JR NZ,RBY1
CALL EDGE
LD A,L
RBY3: POP HL
RET
;TAPE MARK DETECT
; E=L:INFORMATION
; E=S:DATA
TMARK: PUSH HL
LD HL,1414H
BIT 3,D
JR NZ,TM0
ADD HL,HL
TM0: LD (TMCNT),HL
TM1: LD HL,(TMCNT)
TM2: CALL SPDIN
JR C,RBY3
JR Z,TM1
DEC H
JR NZ,TM2
TM3: CALL SPDIN
JR C,RBY3
JR NZ,TM1
DEC L
JR NZ,TM3
CALL EDGE
JR RBY3
;READ 1 BIT
SPDIN: CALL EDGE ;WAIT ON HIGH
RET C ;BREAK
CALL DLY2
IN A,(PPIB) ;READ BIT
AND 40H
RET
;
;
;MOTOR ON
MOTOR: PUSH DE
PUSH BC
PUSH HL
IN A,(PPIB)
AND 20H
JR Z,MOTRD
LD HL,MES6
LD E,0AH
LD C,0EH
CALL DISP
CALL OPEN
MOT1: IN A,(PIOB)
CPL
RLCA
JR C,MOTR
IN A,(PPIB)
AND 20H
JR NZ,MOT1
CALL KYEMES
CALL DEL1M
MOTRD: CALL PLAY
MOTR: POP HL
POP BC
POP DE
RET
;
;
;MOTOR STOP
MSTOP: LD A,0DH
OUT (PPICTL),A ;Set PC6 - READ MODE
LD A,1AH
OUT (PPIA),A
CALL DEL6
JR BLK3
;EJECT
OPEN: LD A,08H ;Reset PC4 - EJECT activate
OUT (PPICTL),A
CALL DEL6
LD A,09H
OUT (PPICTL),A ;Set PC4 - Deactivate EJECT
RET
;
;
KYEMES: LD HL,MES3
LD E,04H
LD C,1CH
CALL DISP
RET
;
;PLAY
PLAY: CALL FR
CALL DEL6
LD A,16H
OUT (PPIA),A
JR BLK3
BLK1: CALL DEL6
CALL BLK3
LD A,13H
BLK2: OUT (PPIA),A
BLK3: LD A,12H
OUT (PPIA),A
RET
;
;
FR: LD A,12H
FR1: OUT (PPIA),A
CALL DEL6
LD A,0BH
OUT (PPICTL),A ;Set PC5
CALL DEL6
LD A,0AH
OUT (PPICTL),A ;Reset PC5
RET
RRW: LD A,010H
JR FR1
;REWIND
REW: CALL RRW
JR BLK1
;
;TIMING DEL
DM1: PUSH AF
L0211: XOR A
L0212: DEC A
JR NZ,L0212
DEC BC
LD A,B
OR C
JR NZ,L0211
POP AF
POP BC
RET
DEL6: PUSH BC
LD BC,00E9H ;233D
JR DM1
DEL1M: PUSH BC
LD BC,060FH ;1551D
JR DM1
;
;TAPE DELAY TIMING
;
;
DLY2: LD A,31H
L022B: DEC A
JP NZ,L022B
RET
;
;
;
;
;
LDMSG: LD HL,MES1
LD E,00H
LD C,0EH
JR DISP
;
DISP2: LD A,93H
OUT (PIOA),A
JR DISP1
;
BOOTER: LD HL,MES8
LD E,0AH
LD C,0DH
;
DISP: LD A,93H
OUT (PIOA),A
EXX
LD HL,0D000H
DISP3: LD (HL),00H
INC HL
LD A,H
OR L
JR NZ,DISP3
EXX
DISP1: XOR A
LD B,A
LD D,0D0H
LDIR
LD A,13H
OUT (PIOA),A
RET
;
;
MES1: DB "IPL is loading"
MES3: DB "IPL is looking for a program"
MES6: DB "Make ready CMT"
MES8: DB "Loading error"
MES9: DB "Make ready FD"
MES10: DB "Press F or C"
MES11: DB "F:Floppy diskette"
MES12: DB "C:Cassette tape"
MES13: DB "Drive No? (1-4)"
MES14: DB "This diskette is not master"
MES15: DB "Pressing S key starts the CMT"
MES16: DB "File mode error"
;
IPLMC: DB 01H
DB "IPLPRO"
;
;
;FD
FD: LD IX,IBADR1
XOR A
LD (0CF1EH),A
LD (0CF1FH),A
LD IY,0FFE0H
LD HL,0100H
LD (IY+2),L
LD (IY+3),H
CALL BREAD ;INFORMATION INPUT
LD HL,0CF00H ;MASTER CHECK
LD DE,IPLMC
LD B,06H
MCHECK: LD C,(HL)
LD A,(DE)
CP C
JP NZ,NMASTE
INC HL
INC DE
DJNZ MCHECK
CALL LDMSG
LD HL,0CF07H
LD E,010H
LD C,0AH
CALL DISP2
LD IX,IBADR2
LD HL,(0CF14H)
LD (IY+2),L
LD (IY+3),H
CALL BREAD
CALL MOFF
JP NST
;
;
NODISK: LD HL,MES9
LD E,0AH
LD C,0DH
CALL DISP
JP ERR1
;
; READY CHECK
;
READY: LD A,(MTFG)
RRCA
CALL NC,MTON
LD A,(DRINO) ;DRIVE NO GET
OR 84H
OUT (DM),A ;DRIVE SELECT MOTON
XOR A
CALL DLY60M
LD HL,0000H
REDY0: DEC HL
LD A,H
OR L
JR Z,NODISK
IN A,(CR) ;STATUS GET
CPL
RLCA
JR C,REDY0
LD A,(DRINO)
LD C,A
LD HL,CLBF0
LD B,00H
ADD HL,BC
BIT 0,(HL)
RET NZ
CALL RCLB
SET 0,(HL)
RET
;
; MOTOR ON
;
MTON: LD A,80H
OUT (DM),A
LD B,0AH ;1SEC DELAY
MTD1: LD HL,3C19H
MTD2: DEC HL
LD A,L
OR H
JR NZ,MTD2
DJNZ MTD1
LD A,01H
LD (MTFG),A
RET
;
;SEEK TREATMENT
;
SEEK: LD A,1BH
CPL
OUT (CR),A
CALL BUSY
CALL DLY60M
IN A,(CR)
CPL
AND 99H
RET
;
;MOTOR OFF
;
MOFF: CALL DLY1M
XOR A
OUT (DM),A
LD (CLBF0),A
LD (CLBF1),A
LD (CLBF2),A
LD (CLBF3),A
LD (MTFG),A
RET
;
;RECALIBRATION
;
RCLB: PUSH HL
LD A,0BH
CPL
OUT (CR),A
CALL BUSY
CALL DLY60M
IN A,(CR)
CPL
AND 85H
XOR 04H
POP HL
RET Z
JP ERR
;
;BUSY AND WAIT
;
BUSY: PUSH DE
PUSH HL
CALL DLY80U
LD E,07H
BUSY2: LD HL,0000H
BUSY0: DEC HL
LD A,H
OR L
JR Z,BUSY1
IN A,(CR)
CPL
RRCA
JR C,BUSY0
POP HL
POP DE
RET
;
BUSY1: DEC E
JR NZ,BUSY2
JP ERR
;
;DATA CHECK
;
CONVRT: LD B,00H
LD DE,0010H
LD HL,(0CF1EH)
XOR A
TRANS: SBC HL,DE
JR C,TRANS1
INC B
JR TRANS
TRANS1: ADD HL,DE
LD H,B
INC L
LD (IY+4),H
LD (IY+5),L
DCHK: LD A,(DRINO)
CP 04H
JR NC,DTCK1
LD A,(IY+4)
CP 46H ;70D
JR NC,DTCK1
LD A,(IY+5)
OR A
JR Z,DTCK1
CP 11H ;17D
JR NC,DTCK1
LD A,(IY+2)
OR (IY+3)
RET NZ
DTCK1: JP ERR
;
;SEQUENTIAL READ
;
BREAD: DI
CALL CONVRT
LD A,0AH
LD (RETRY),A
READ1: CALL READY
LD D,(IY+3)
LD A,(IY+2)
OR A
JR Z,RE0
INC D
RE0: LD A,(IY+5)
LD (IY+1),A
LD A,(IY+4)
LD (IY+0),A
PUSH IX
POP HL
RE8: SRL A
CPL
OUT (DR),A
JR NC,RE1
LD A,01H
JR RE2
RE1: LD A,00H
RE2: CPL
OUT (HS),A
CALL SEEK
JR NZ,REE
LD C,0DBH
LD A,(IY+0)
SRL A
CPL
OUT (TR),A
LD A,(IY+1)
CPL
OUT (SCR),A
EXX
LD HL,RE3
PUSH HL
EXX
LD A,94H
CPL
OUT (CR),A
CALL WAIT
RE6: LD B,00H
RE4: IN A,(CR)
RRCA
RET C
RRCA
JR C,RE4
INI
JR NZ,RE4
INC (IY+1)
LD A,(IY+1)
CP 11H ;17D
JR Z,RETS
DEC D
JR NZ,RE6
JR RE5
RETS: DEC D
RE5: LD A,0D8H ;FORCE INTERRUPT
CPL
OUT (CR),A
CALL BUSY
RE3: IN A,(CR)
CPL
AND 0FFH
JR NZ,REE
EXX
POP HL
EXX
LD A,(IY+1)
CP 11H ;17D
JR NZ,REX
LD A,01H
LD (IY+1),A
INC (IY+0)
REX: LD A,D
OR A
JR NZ,RE7
LD A,80H
OUT (DM),A
RET
RE7: LD A,(IY+0)
JR RE8
REE: LD A,(RETRY)
DEC A
LD (RETRY),A
JR Z,ERR
CALL RCLB
JP READ1
;
; WAIT AND BUSY OFF
;
WAIT: PUSH DE
PUSH HL
CALL DLY80U
LD E,08H
WAIT2: LD HL,0000H
WAIT0: DEC HL
LD A,H
OR L
JR Z,WAIT1
IN A,(CR)
CPL
RRCA
JR NC,WAIT0
POP HL
POP DE
RET
WAIT1: DEC E
JR NZ,WAIT2
JR ERR
;
NMASTE: LD HL,MES14
LD E,07H
LD C,1BH ;27D
CALL DISP
JR ERR1
;
; ;
; ERRROR OR BREAK ;
; ;
;
ERR: CALL BOOTER
ERR1: CALL MOFF
TRYAG2: LD SP,0FFE0H
;
;TRYAG
;
TRYAG: CALL FDCC
JR NZ,TRYAG3
LD HL,MES10
LD E,5AH
LD C,0CH ;12D
CALL DISP2
LD E,0ABH
LD C,11H ;17D
CALL DISP2
LD E,0D3H
LD C,0FH ;15D
CALL DISP2
TRYAG1: CALL KEYS1
BIT 3,A
JP Z,CMT
BIT 6,A
JR Z,DNO
JR TRYAG1
DNO: LD HL,MES13 ;DRIVE NO SELECT
LD E,0AH
LD C,0FH
CALL DISP
DNO10: LD D,12H
CALL DNO0
JR NC,DNO3
LD D,18H
CALL DNO0
JR NC,DNO3
JR DNO10
DNO3: LD A,B
LD (DRINO),A
JP FD
;
TRYAG3: LD HL,MES15
LD E,54H
LD C,1DH ;29D
CALL DISP2
TRYAG4: LD B,06H
TRYAG5: CALL KEYS
BIT 3,A
JP Z,CMT
JR TRYAG5
;
DNO0: IN A,(PIOA)
AND 0F0H
OR D
OUT (PIOA),A
IN A,(PIOB)
LD B,00H
LD C,04H
RRCA
DNO1: RRCA
RET NC
INC B
DEC C
JR NZ,DNO1
RET
;
; TIME DELAY (1M &60M &80U )
;
DLY80U: PUSH DE
LD DE,000DH ;13D
JP DLYT
DLY1M: PUSH DE
LD DE,0082H ;130D
JP DLYT
DLY60M: PUSH DE
LD DE,1A2CH ;6700D
DLYT: DEC DE
LD A,E
OR D
JR NZ,DLYT
POP DE
RET
;
;
; ;
; INTRAM EXROM ;
; ;
;
EXROMT: LD HL,8000H
LD IX,EROM1
JR SEROMA
EROM1: IN A,(0F9H)
CP 00H
JP NZ,NKIN
LD IX,EROM2
ERMT1: JR SEROMA
EROM2: IN A,(0F9H)
LD (HL),A
INC HL
LD A,L
OR H
JR NZ,ERMT1
OUT (0F8H),A
JP NST
;
SEROMA: LD A,H
OUT (0F8H),A
LD A,L
OUT (0F9H),A
LD D,04H
SEROMD: DEC D
JR NZ,SEROMD
JP (IX)
; Pad to 4K as this is the standard MROM Bank size.
DS 01000H - $
;----------------------------------------------------------
; Variables/Work area
;----------------------------------------------------------
IBUFE: EQU 0CF00H
ATRB: EQU 0CF00H
NAME: EQU 0CF01H
SIZE: EQU 0CF12H
DTADR: EQU 0CF14H
SUMDT: EQU 0FFE0H
TMCNT: EQU 0FFE2H
;
;
;INPUT BUFFER ADDRESS
;
IBADR1: EQU 0CF00H
IBADR2: EQU 8000H
;
; SUBROUTINE WORK
;
NTRACK: EQU 0FFE0H
NSECT: EQU 0FFE1H
BSIZE: EQU 0FFE2H
STTR: EQU 0FFE4H
STSE: EQU 0FFE5H
MTFG: EQU 0FFE6H
CLBF0: EQU 0FFE7H
CLBF1: EQU 0FFE8H
CLBF2: EQU 0FFE9H
CLBF3: EQU 0FFEAH
RETRY: EQU 0FFEBH
DRINO: EQU 0FFECH
;
;
;
;
;
; MFM MINIFLOPPY CONTROL
;
;
;
; CASE OF DISK INITIALIZE
; DRIVE NO=DRINO (0-3)
;
; CASE OF SEQUENTIAL READ
; DRIVE NO=DRINO (0-3)
; BYTE SIZE =IY+2,3
; ADDRESS =IX+0,1
; NEXT TRACK =IY+0
; NEXT SECTOR =IY+1
; START TRACK =IY+4
; START SECTOR =IY+5
;
;
; I/O PORT ADDRESS
;
CR: EQU 0D8H ;STATUS/COMMAND PORT
TR: EQU 0D9H ;TRACK REG PORT
SCR: EQU 0DAH ;SECTOR REG PORT
DR: EQU 0DBH ;DATA REG PORT
DM: EQU 0DCH ;MOTOR/DRIVE PORT
HS: EQU 0DDH ;HEAD SIDE SELECT PORT
PPIA: EQU 0E0H
PPIB: EQU 0E1H
PPIC: EQU 0E2H
PPICTL: EQU 0E3H
PIOA: EQU 0E8H
PIOCTLA:EQU 0E9H
PIOB: EQU 0EAH
PIOCTLB:EQU 0EBH
GRPHCTL:EQU 0F4H

View File

@@ -251,8 +251,8 @@ BOOT_: DI ; Disab
;
LD SP,BIOSSTACK ; Setup to use local stack until CPM takes over.
;
LD HL,VARSTART ; Start of variable area
LD BC,VAREND-VARSTART ; Size of variable area.
LD HL,CPMBIOS ; Start of CPM disk table and variable area
LD BC,VAREND-CPMBIOS ; Size of CPM disk table and variable area.
XOR A
LD D,A
INIT1: LD (HL),D ; Clear variable memory including stack space.
@@ -261,6 +261,7 @@ INIT1: LD (HL),D ; Clear
LD A,B
OR C
JR NZ,INIT1
;
LD HL,00000H
LD BC,CBASE
INIT2: LD (HL),D ; Clear TPA space.
@@ -299,8 +300,8 @@ INIT3: LD A,(BNKCTRLRST)
; Setup keyboard rate control and set to CAPSLOCK mode.
; (0 = Off, 1 = CAPSLOCK, 2 = SHIFTLOCK).
LD HL,00002H ; Initialise key repeater.
LD (KEYRPT),HL
LD A,002H ; Initialise key repeater.
LD (KEYRPT),A
LD A,001H
LD (SFTLK),A ; Setup shift lock, default = off.
@@ -333,7 +334,6 @@ INIT3: LD A,(BNKCTRLRST)
;
CALL ?SDINIT
LD A,0 ; No drives yet detected so zero available mask.
RES 2,A ; No SD Card is present.
JR NZ,STRT2
SET 2,A ; Assume the SD Card is present.
;
@@ -351,7 +351,7 @@ STRT2: LD (DRVAVAIL),A
JP NZ,ROMFINDERR ; Failed to find CPM in the ROM! This shouldnt happen as we boot from ROM.
LD (CPMROMLOC),BC
; Locate the ROMFS CPM Disk Image to be mapped as drive D.
; Locate the ROMFS CPM Disk Images.
LD HL,0FFFFh
LD (CPMROMDRV0),HL
LD (CPMROMDRV1),HL
@@ -529,9 +529,9 @@ CPMINIT1: LD A, 0C3H ; C3 IS
LD (CDISK), A ; Save User/Disk
WBTDSKOK2: CALL ?SETDRVMAP ; Refresh the map of physical floppies to CPM drive number.
CALL ?SETDRVCFG
LD A,(DISKTYPE)
OR A
CALL Z,?SELDRIVE ; Select and start disk drive motor if floppy disk.
; LD A,(DISKTYPE)
; OR A
; CALL Z,?SELDRIVE ; Select and start disk drive motor if floppy disk.
;
LD A,05H ; Enable interrupts at hardware level.
LD (KEYPF),A
@@ -582,8 +582,10 @@ WBOOT_: DI
CALL UROMLOAD
LD A,ROMBANK9 ; Screen Bank.
LD (BNKSELUSER),A
;
JP CPMINIT ; Initialise CPM and run.
JP Z,CPMINIT ; Initialise CPM and run.
LD DE,NOBDOS
CALL MONPRTSTR
WBOOT2: JR WBOOT2 ; Nowhere to go!
;-------------------------------------------------------------------------------
@@ -1577,7 +1579,15 @@ UROMLOAD: PUSH BC
LD C,0
ADD HL,BC
LD BC, MZFHDRNCSZ
LDIR
LROMLOAD0: LD A,(HL) ; Issues with LDIR and a signal artifact from the mainboard, so manual copy.
INC HL
LD (DE),A
INC DE
DEC BC
LD A,B
OR C
JR NZ,LROMLOAD0
;LDIR
LD DE,MZFHDRSZ - MZFHDRNCSZ ; Account for the full MZF header (we only load the initial part to save RAM).
ADD HL,DE
POP DE
@@ -1590,6 +1600,7 @@ LROMLOAD1: PUSH HL
LD DE, (DTADR)
LD HL, (SIZE)
LD BC, RFSSECTSZ - MZFHDRSZ
OR A
SBC HL, BC
JR NC, LROMLOAD4
LD HL, (SIZE)
@@ -1630,7 +1641,17 @@ LROMLOAD4: LD (TMPSIZE), HL ; HL co
LD A, B ; Pre check to ensure BC is not zero.
OR C
JR Z, LROMLOAD8
LDIR
LROMLOAD9: LD A,(HL) ; Issues with LDIR and a signal artifact from the mainboard, so manual copy.
INC HL
LD (DE),A
INC DE
DEC BC
LD A,B
OR C
JR NZ,LROMLOAD9
;LDIR
LD BC, (TMPSIZE)
LD A, B ; Post check to ensure we still have bytes
OR C
@@ -1641,7 +1662,7 @@ LROMLOAD4: LD (TMPSIZE), HL ; HL co
LROMLOAD6: INC C
LD A, C
CP UROMSIZE/RFSSECTSZ ; Max blocks per page reached?
JR C, LROMLOAD7
JR C, LROMLOAD3
LD C, 0
INC B
;
@@ -1800,7 +1821,17 @@ ROMREAD14: LD (TMPSIZE), HL ; HL co
LD A, B ; Pre check to ensure BC is not zero.
OR C
JR Z, ROMREAD16
LDIR
ROMREAD18: LD A,(HL) ; Issues with LDIR and a signal artifact from the mainboard, so manual copy.
INC HL
LD (DE),A
INC DE
DEC BC
LD A,B
OR C
JR NZ,ROMREAD18
;LDIR
LD BC, (TMPSIZE)
LD A, B ; Post check to ensure we still have bytes
OR C
@@ -2609,10 +2640,11 @@ KTBLC: ; CTRL ON
CBIOSSIGNON:DB "** CBIOS v1.20, (C) P.D. Smart, 2020. Drives:", NUL
CBIOSSIGNON:DB "** CBIOS v1.22, (C) P.D. Smart, 2020. Drives:", NUL
CBIOSIGNEND:DB " **", CR, NUL
CPMSIGNON: DB "CP/M v2.23 (48K) COPYRIGHT(C) 1979, DIGITAL RESEARCH", CR, LF, NUL
CPMROMFNAME:DB "CPM223", NUL
NOBDOS: DB "Failed to load BDOS, aborting!", CR, LF, NUL
CPMROMFNAME:DB "CPM223RFS", NUL
CPMRDRVFN0: DB "CPM22-DRV0", NUL
CPMRDRVFN1: DB "CPM22-DRV1", NUL
ROMLDERRMSG:DB "ROM LOAD ERR", CR, NUL

View File

@@ -31,6 +31,20 @@
ORG CPMBIOS
; Boot strap code to setup the machine in order to run CPM and the CBIOS.
; Previously this used to be in the comment field of the tape header but with the
; advent of the SDCFS which doesnt store the comment, the bootstrap needs to be relocated.
; This code will be overwritten with the DP Headers on cold boot.
BOOTLDR: LD B, 0x10 ; Need to read the same location 16 times to enable I/O operations.
BOOTLDR2: LD A, (BNKCTRLRST)
DJNZ BOOTLDR2
LD A, 0x07
LD (BNKCTRL), A ; Setup the User ROM Bank default.
LD A, (MEMSW)
LD A, 0x02
LD (BNKSELMROM), A ; Setup the Monitor ROM bank default.
JP CBIOSSTART ; Cold start the CBIOS.
;------------------------------------------------------------------------------------------------------------
; DISK PARAMETER HEADER
;
@@ -55,7 +69,7 @@
; -ALV Address of a scratch pad area used by the BDOS to keep disk storage allocation information.
; This address is different for each DPH.
;------------------------------------------------------------------------------------------------------------
ALIGN_NOPS DPBASE ; Space for 2xROM, 2xFD, 3xSD or upto 7 drives
;ALIGN_NOPS DPBASE ; Space for 2xROM, 2xFD, 3xSD or upto 7 drives
; These entries are created dynamically based on hardware available.
; NB. The Disk Parameter Blocks are stored in CBIOS ROM to save RAM space.
@@ -67,3 +81,4 @@
ALIGN_NOPS CSVALVMEM
ALIGN_NOPS CSVALVEND
ALIGN CBIOSDATA

View File

@@ -48,8 +48,8 @@ MODE80C: EQU 1
; BIOS equates
KEYBUFSIZE EQU 64 ; Ensure this is a power of 2, max size 256.
;MAXMEM EQU 10000H - TZSVCSIZE ; Top of RAM on the tranZPUter/
MAXMEM EQU 0CFFFH ; Top of RAM on a standard Sharp MZ80A.
MAXMEM EQU 10000H - TZSVCSIZE ; Top of RAM on the tranZPUter/
;MAXMEM EQU 0CFFFH ; Top of RAM on a standard Sharp MZ80A.
; Tape load/save modes. Used as a flag to enable common code.
TAPELOAD EQU 1
@@ -58,8 +58,8 @@ TAPESAVE EQU 3
CTAPESAVE EQU 4
; Build options. Set just one to '1' the rest to '0'.
BUILD_MZ80A EQU 1 ; Build for the standard Sharp MZ80A, no lower memory. Manually change MAXMEM above.
BUILD_RFS EQU 0 ; Build for RFS where the tranZPUter board is available without the K64F and running under RFS.
BUILD_MZ80A EQU 0 ; Build for the standard Sharp MZ80A, no lower memory. Manually change MAXMEM above.
BUILD_RFS EQU 1 ; Build for RFS where the tranZPUter board is available without the K64F and running under RFS.
BUILD_TZFS EQU 0 ; Build for TZFS where extended memory is available.
INCLUDE_ANSITERM EQU 1 ; Include the Ansi terminal emulation processor in the build.

View File

@@ -437,13 +437,12 @@ NAME: DS virtual 17 ; FILE
SIZE: DS virtual 2 ; BYTESIZE
DTADR: DS virtual 2 ; DATA ADDRESS
EXADR: DS virtual 2 ; EXECUTION ADDRESS
COMNT: DS virtual 92 ; Comment / code area of CMT header.
SWPW: DS virtual 10 ; SWEEP WORK
KDATW: DS virtual 2 ; KEY WORK
;KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE)
KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE)
DSPXY: DS virtual 2 ; DISPLAY COORDINATES
;DSPXYLST: DS virtual 2 ; Last known cursor position, to compare with DSPXY to detect changes.
FLASHCTL: DS virtual 1 ; CURSOR FLASH CONTROL. BIT 0 = Cursor On/Off, BIT 1 = Cursor displayed.
DSPXYADDR: DS virtual 2 ; Address of last known position.
MANG: DS virtual 6 ; COLUMN MANAGEMENT
MANGE: DS virtual 1 ; COLUMN MANAGEMENT END
PBIAS: DS virtual 1 ; PAGE BIAS
@@ -458,6 +457,8 @@ REVFLG: DS virtual 1 ; REVER
FLSDT: DS virtual 1 ; CURSOR DATA
STRGF: DS virtual 1 ; STRING FLAG
DPRNT: DS virtual 1 ; TAB COUNTER
FLASHCTL: DS virtual 1 ; CURSOR FLASH CONTROL. BIT 0 = Cursor On/Off, BIT 1 = Cursor displayed.
DSPXYADDR: DS virtual 2 ; Address of last known position.
;AMPM: DS virtual 1 ; AMPM DATA
;TIMFG: DS virtual 1 ; TIME FLAG
SWRK: DS virtual 1 ; KEY SOUND FLAG

View File

@@ -32,162 +32,205 @@
;-----------------------------------------------
; Features.
;-----------------------------------------------
HW_SPI_ENA EQU 1 ; Set to 1 if hardware SPI is present on the RFS PCB v2 board.
SW_SPI_ENA EQU 0 ; Set to 1 if software SPI is present on the RFS PCB v2 board.
PP_SPI_ENA EQU 0 ; Set to 1 if using the SPI interface via the Parallel Port, ie. for RFS PCB v1 which doesnt have SPI onboard.
HW_SPI_ENA EQU 1 ; Set to 1 if hardware SPI is present on the RFS PCB v2 board.
SW_SPI_ENA EQU 0 ; Set to 1 if software SPI is present on the RFS PCB v2 board.
PP_SPI_ENA EQU 0 ; Set to 1 if using the SPI interface via the Parallel Port, ie. for RFS PCB v1 which doesnt have SPI onboard.
;-----------------------------------------------
; Entry/compilation start points.
;-----------------------------------------------
UROMADDR EQU 0E800H ; Start of User ROM Address space.
UROMBSTBL EQU UROMADDR + 020H ; Entry point to the bank switching table.
RFSJMPTABLE EQU UROMADDR + 00080H ; Start of jump table.
FDCROMADDR EQU 0F000H
UROMADDR EQU 0E800H ; Start of User ROM Address space.
UROMBSTBL EQU UROMADDR + 020H ; Entry point to the bank switching table.
RFSJMPTABLE EQU UROMADDR + 00080H ; Start of jump table.
FDCROMADDR EQU 0F000H
;-------------------------------------------------------
; Function entry points in the standard SA-1510 Monitor.
;-------------------------------------------------------
GETL: EQU 00003h
LETNL: EQU 00006h
NL: EQU 00009h
PRNTS: EQU 0000Ch
PRNT: EQU 00012h
MSG: EQU 00015h
MSGX: EQU 00018h
GETKY EQU 0001Bh
BRKEY EQU 0001Eh
?WRI EQU 00021h
?WRD EQU 00024h
?RDI EQU 00027h
?RDD EQU 0002Ah
?VRFY EQU 0002Dh
MELDY EQU 00030h
?TMST EQU 00033h
MONIT: EQU 00000h
SS: EQU 00089h
ST1: EQU 00095h
HLHEX EQU 00410h
_2HEX EQU 0041Fh
?MODE: EQU 0074DH
?KEY EQU 008CAh
PRNT3 EQU 0096Ch
?ADCN EQU 00BB9h
?DACN EQU 00BCEh
?DSP: EQU 00DB5H
?BLNK EQU 00DA6h
?DPCT EQU 00DDCh
PRTHL: EQU 003BAh
PRTHX: EQU 003C3h
HEX: EQU 003F9h
DPCT: EQU 00DDCh
DLY12: EQU 00DA7h
DLY12A: EQU 00DAAh
?RSTR1: EQU 00EE6h
MOTOR: EQU 006A3H
CKSUM: EQU 0071AH
GAP: EQU 0077AH
WTAPE: EQU 00485H
MSTOP: EQU 00700H
GETL: EQU 00003h
LETNL: EQU 00006h
NL: EQU 00009h
PRNTS: EQU 0000Ch
PRNT: EQU 00012h
MSG: EQU 00015h
MSGX: EQU 00018h
GETKY EQU 0001Bh
BRKEY EQU 0001Eh
?WRI EQU 00021h
?WRD EQU 00024h
?RDI EQU 00027h
?RDD EQU 0002Ah
?VRFY EQU 0002Dh
MELDY EQU 00030h
?TMST EQU 00033h
MONIT: EQU 00000h
SS: EQU 00089h
ST1: EQU 00095h
HLHEX EQU 00410h
_2HEX EQU 0041Fh
?MODE: EQU 0074DH
?KEY EQU 008CAh
PRNT3 EQU 0096Ch
?ADCN EQU 00BB9h
?DACN EQU 00BCEh
?DSP: EQU 00DB5H
?BLNK EQU 00DA6h
?DPCT EQU 00DDCh
PRTHL: EQU 003BAh
PRTHX: EQU 003C3h
HEX: EQU 003F9h
DPCT: EQU 00DDCh
DLY12: EQU 00DA7h
DLY12A: EQU 00DAAh
?RSTR1: EQU 00EE6h
MOTOR: EQU 006A3H
CKSUM: EQU 0071AH
GAP: EQU 0077AH
WTAPE: EQU 00485H
MSTOP: EQU 00700H
; Debugging
ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable
ENADEBUG EQU 0 ; Enable debugging logic, 1 = enable, 0 = disable
;-----------------------------------------------
; Memory mapped ports in hardware.
;-----------------------------------------------
SCRN: EQU 0D000H
ARAM: EQU 0D800H
DSPCTL: EQU 0DFFFH ; Screen 40/80 select register (bit 7)
KEYPA: EQU 0E000h
KEYPB: EQU 0E001h
KEYPC: EQU 0E002h
KEYPF: EQU 0E003h
CSTR: EQU 0E002h
CSTPT: EQU 0E003h
CONT0: EQU 0E004h
CONT1: EQU 0E005h
CONT2: EQU 0E006h
CONTF: EQU 0E007h
SUNDG: EQU 0E008h
TEMP: EQU 0E008h
MEMSW: EQU 0E00CH
MEMSWR: EQU 0E010H
INVDSP: EQU 0E014H
NRMDSP: EQU 0E015H
SCLDSP: EQU 0E200H
SCLBASE: EQU 0E2H
BNKCTRLRST: EQU 0EFF8H ; Bank control reset, returns all registers to power up default.
BNKCTRLDIS: EQU 0EFF9H ; Disable bank control registers by resetting the coded latch.
HWSPIDATA: EQU 0EFFBH ; Hardware SPI Data register (read/write).
HWSPISTART: EQU 0EFFCH ; Start an SPI transfer.
BNKSELMROM: EQU 0EFFDh ; Select RFS Bank1 (MROM)
BNKSELUSER: EQU 0EFFEh ; Select RFS Bank2 (User ROM)
BNKCTRL: EQU 0EFFFH ; Bank Control register (read/write).
SCRN: EQU 0D000H
ARAM: EQU 0D800H
DSPCTL: EQU 0DFFFH ; Screen 40/80 select register (bit 7)
KEYPA: EQU 0E000h
KEYPB: EQU 0E001h
KEYPC: EQU 0E002h
KEYPF: EQU 0E003h
CSTR: EQU 0E002h
CSTPT: EQU 0E003h
CONT0: EQU 0E004h
CONT1: EQU 0E005h
CONT2: EQU 0E006h
CONTF: EQU 0E007h
SUNDG: EQU 0E008h
TEMP: EQU 0E008h
MEMSW: EQU 0E00CH
MEMSWR: EQU 0E010H
INVDSP: EQU 0E014H
NRMDSP: EQU 0E015H
SCLDSP: EQU 0E200H
SCLBASE: EQU 0E2H
BNKCTRLRST: EQU 0EFF8H ; Bank control reset, returns all registers to power up default.
BNKCTRLDIS: EQU 0EFF9H ; Disable bank control registers by resetting the coded latch.
HWSPIDATA: EQU 0EFFBH ; Hardware SPI Data register (read/write).
HWSPISTART: EQU 0EFFCH ; Start an SPI transfer.
BNKSELMROM: EQU 0EFFDh ; Select RFS Bank1 (MROM)
BNKSELUSER: EQU 0EFFEh ; Select RFS Bank2 (User ROM)
BNKCTRL: EQU 0EFFFH ; Bank Control register (read/write).
;
; RFS v2 Control Register constants.
;
BBCLK EQU 1 ; BitBang SPI Clock.
SDCS EQU 2 ; SD Card Chip Select, active low.
BBMOSI EQU 4 ; BitBang MOSI (Master Out Serial In).
CDLTCH1 EQU 8 ; Coded latch up count bit 1
CDLTCH2 EQU 16 ; Coded latch up count bit 2
CDLTCH3 EQU 32 ; Coded latch up count bit 3
BK2A19 EQU 64 ; User ROM Device Select Bit 0 (or Address bit 19).
BK2A20 EQU 128 ; User ROM Device Select Bit 1 (or Address bit 20).
BBCLK EQU 1 ; BitBang SPI Clock.
SDCS EQU 2 ; SD Card Chip Select, active low.
BBMOSI EQU 4 ; BitBang MOSI (Master Out Serial In).
CDLTCH1 EQU 8 ; Coded latch up count bit 1
CDLTCH2 EQU 16 ; Coded latch up count bit 2
CDLTCH3 EQU 32 ; Coded latch up count bit 3
BK2A19 EQU 64 ; User ROM Device Select Bit 0 (or Address bit 19).
BK2A20 EQU 128 ; User ROM Device Select Bit 1 (or Address bit 20).
; BK2A20 : BK2A19
; 0 0 = Flash RAM 0 (default).
; 0 1 = Flash RAM 1.
; 1 0 = Flasm RAM 2 or Static RAM 0.
; 1 1 = Reserved.`
BNKCTRLDEF EQU CDLTCH2+CDLTCH1+BBMOSI+SDCS+BBCLK ; Default on startup for the Bank Control register.
BNKCTRLDEF EQU BBMOSI+SDCS+BBCLK ; Default on startup for the Bank Control register.
;-----------------------------------------------
; IO ports in hardware and values.
;-----------------------------------------------
SPI_OUT EQU 0FFH
SPI_IN EQU 0FEH
SPI_OUT EQU 0FFH
SPI_IN EQU 0FEH
;
DOUT_LOW EQU 000H
DOUT_HIGH EQU 004H
DOUT_MASK EQU 004H
DIN_LOW EQU 000H
DIN_HIGH EQU 001H
CLOCK_LOW EQU 000H
CLOCK_HIGH EQU 002H
CLOCK_MASK EQU 0FDH
CS_LOW EQU 000H
CS_HIGH EQU 001H
DOUT_LOW EQU 000H
DOUT_HIGH EQU 004H
DOUT_MASK EQU 004H
DIN_LOW EQU 000H
DIN_HIGH EQU 001H
CLOCK_LOW EQU 000H
CLOCK_HIGH EQU 002H
CLOCK_MASK EQU 0FDH
CS_LOW EQU 000H
CS_HIGH EQU 001H
;
MMCFG EQU 060H ; Memory management configuration latch.
SETXMHZ EQU 062H ; Select the alternate clock frequency.
SET2MHZ EQU 064H ; Select the system 2MHz clock frequency.
CLKSELRD EQU 066H ; Read clock selected setting, 0 = 2MHz, 1 = XMHz
SVCREQ EQU 068H ; I/O Processor service request.
CPLDCFG EQU 06EH ; Version 2.1 CPLD configuration register.
CPLDSTATUS EQU 06EH ; Version 2.1 CPLD status register.
CPLDINFO EQU 06FH ; Version 2.1 CPLD version information register.
;-----------------------------------------------
; CPLD Configuration constants.
;-----------------------------------------------
SET_MODE_MZ80A EQU 1 ; Set to original unmodified hardware.
SET_MODE_MZ700 EQU 2 ; Map keyboard and memory mode settings to MZ700 mode.
;-----------------------------------------------
; tranZPUter SW Memory Management modes
;-----------------------------------------------
TZMM_ENIOWAIT EQU 020H ; Memory management IO Wait State enable - insert a wait state when an IO operation to E0-FF is executed.
TZMM_ORIG EQU 000H ; Original Sharp MZ80A mode, no tranZPUter features are selected except the I/O control registers (default: 0x60-063).
TZMM_BOOT EQU 001H ; Original mode but E800-EFFF is mapped to tranZPUter RAM so TZFS can be booted.
TZMM_TZFS EQU 002H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-FFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected.
TZMM_TZFS2 EQU 003H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-EFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected, F000-FFFF is in 64K Block 1.
TZMM_TZFS3 EQU 004H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-EFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected, F000-FFFF is in 64K Block 2.
TZMM_TZFS4 EQU 005H + TZMM_ENIOWAIT ; TZFS main memory configuration. all memory is in tranZPUter RAM, E800-EFFF is used by TZFS, SA1510 is at 0000-1000 and RAM is 1000-CFFF, 64K Block 0 selected, F000-FFFF is in 64K Block 3.
TZMM_CPM EQU 006H + TZMM_ENIOWAIT ; CPM main memory configuration, all memory on the tranZPUter board, 64K block 4 selected. Special case for F3C0:F3FF & F7C0:F7FF (floppy disk paging vectors) which resides on the mainboard.
TZMM_CPM2 EQU 007H + TZMM_ENIOWAIT ; CPM main memory configuration, F000-FFFF are on the tranZPUter board in block 4, 0040-CFFF and E800-EFFF are in block 5, mainboard for D000-DFFF (video), E000-E800 (Memory control) selected.
; Special case for 0000:003F (interrupt vectors) which resides in block 4, F3C0:F3FF & F7C0:F7FF (floppy disk paging vectors) which resides on the mainboard.
TZMM_COMPAT EQU 008H + TZMM_ENIOWAIT ; Original mode but with main DRAM in Bank 0 to allow bootstrapping of programs from other machines such as the MZ700.
TZMM_MZ700_0 EQU 00AH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the mainboard.
TZMM_MZ700_1 EQU 00BH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6.
TZMM_MZ700_2 EQU 00CH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6.
TZMM_MZ700_3 EQU 00DH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible.
TZMM_MZ700_4 EQU 00EH + TZMM_ENIOWAIT ; MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible.
TZMM_TZPU0 EQU 018H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 0 is selected.
TZMM_TZPU1 EQU 019H + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 1 is selected.
TZMM_TZPU2 EQU 01AH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 2 is selected.
TZMM_TZPU3 EQU 01BH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 3 is selected.
TZMM_TZPU4 EQU 01CH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 4 is selected.
TZMM_TZPU5 EQU 01DH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 5 is selected.
TZMM_TZPU6 EQU 01EH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 6 is selected.
TZMM_TZPU7 EQU 01FH + TZMM_ENIOWAIT ; Everything is in tranZPUter domain, no access to underlying Sharp mainboard unless memory management mode is switched. tranZPUter RAM 64K block 7 is selected.
;-----------------------------------------------
; Rom File System Header (MZF)
;-----------------------------------------------
RFS_ATRB: EQU 00000h ; Code Type, 01 = Machine Code.
RFS_NAME: EQU 00001h ; Title/Name (17 bytes).
RFS_SIZE: EQU 00012h ; Size of program.
RFS_DTADR: EQU 00014h ; Load address of program.
RFS_EXADR: EQU 00016h ; Exec address of program.
RFS_COMNT: EQU 00018h ; COMMENT
RFS_ATRB: EQU 00000h ; Code Type, 01 = Machine Code.
RFS_NAME: EQU 00001h ; Title/Name (17 bytes).
RFS_SIZE: EQU 00012h ; Size of program.
RFS_DTADR: EQU 00014h ; Load address of program.
RFS_EXADR: EQU 00016h ; Exec address of program.
RFS_COMNT: EQU 00018h ; COMMENT
;-----------------------------------------------
; Entry/compilation start points.
;-----------------------------------------------
TPSTART: EQU 010F0h
MEMSTART: EQU 01200h
MSTART: EQU 0E900h
MZFHDRSZ EQU 128
RFSSECTSZ EQU 256
MROMSIZE EQU 4096
UROMSIZE EQU 2048
FNSIZE EQU 17
TPSTART: EQU 010F0h
MEMSTART: EQU 01200h
MSTART: EQU 0E900h
MZFHDRSZ EQU 128
RFSSECTSZ EQU 256
MROMSIZE EQU 4096
UROMSIZE EQU 2048
FNSIZE EQU 17
;
; Monitor ROM Jump Table definitions.
;
MROMJMPTBL: EQU 00070H
DIRMROM: EQU MROMJMPTBL + 00000H
MFINDMZF: EQU MROMJMPTBL + 00003H
MROMLOAD: EQU MROMJMPTBL + 00006H
MROMJMPTBL: EQU 00070H
DIRMROM: EQU MROMJMPTBL + 00000H
MFINDMZF: EQU MROMJMPTBL + 00003H
MROMLOAD: EQU MROMJMPTBL + 00006H
;-----------------------------------------------
; ROM Banks, 0-7 are reserved for alternative
@@ -198,115 +241,115 @@ MROMLOAD: EQU MROMJMPTBL + 00006H
; 8-15 are reserved for CPM code in
; the User ROM bank.
;-----------------------------------------------
MROMPAGES EQU 8
USRROMPAGES EQU 12 ; Monitor ROM : User ROM
ROMBANK0 EQU 0 ; MROM SA1510 40 Char : RFS Bank 0 - Main RFS Entry point and functions.
ROMBANK1 EQU 1 ; MROM SA1510 80 Char : RFS Bank 1 - Floppy disk controller and utilities.
ROMBANK2 EQU 2 ; CPM 2.2 CBIOS : RFS Bank 2 - SD Card controller and utilities.
ROMBANK3 EQU 3 ; RFS Utilities : RFS Bank 3 - Cmdline tools (Memory, Printer, Help)
ROMBANK4 EQU 4 ; Free : RFS Bank 4 - CMT Utilities.
ROMBANK5 EQU 5 ; Free : RFS Bank 5
ROMBANK6 EQU 6 ; Free : RFS Bank 6
ROMBANK7 EQU 7 ; Free : RFS Bank 7 - Memory and timer test utilities.
ROMBANK8 EQU 8 ; : CBIOS Bank 1 - Utilities
ROMBANK9 EQU 9 ; : CBIOS Bank 2 - Screen / ANSI Terminal
ROMBANK10 EQU 10 ; : CBIOS Bank 3 - SD Card
ROMBANK11 EQU 11 ; : CBIOS Bank 4 - Floppy disk controller.
MROMPAGES EQU 8
USRROMPAGES EQU 12 ; Monitor ROM : User ROM
ROMBANK0 EQU 0 ; MROM SA1510 40 Char : RFS Bank 0 - Main RFS Entry point and functions.
ROMBANK1 EQU 1 ; MROM SA1510 80 Char : RFS Bank 1 - Floppy disk controller and utilities.
ROMBANK2 EQU 2 ; CPM 2.2 CBIOS : RFS Bank 2 - SD Card controller and utilities.
ROMBANK3 EQU 3 ; RFS Utilities : RFS Bank 3 - Cmdline tools (Memory, Printer, Help)
ROMBANK4 EQU 4 ; MZ700 1Z-013A 40C : RFS Bank 4 - CMT Utilities.
ROMBANK5 EQU 5 ; MZ700-1Z-013A 80C : RFS Bank 5
ROMBANK6 EQU 6 ; MZ-80B IPL : RFS Bank 6
ROMBANK7 EQU 7 ; Free : RFS Bank 7 - Memory and timer test utilities.
ROMBANK8 EQU 8 ; : CBIOS Bank 1 - Utilities
ROMBANK9 EQU 9 ; : CBIOS Bank 2 - Screen / ANSI Terminal
ROMBANK10 EQU 10 ; : CBIOS Bank 3 - SD Card
ROMBANK11 EQU 11 ; : CBIOS Bank 4 - Floppy disk controller.
OBJCD EQU 001h
OBJCD EQU 001h
;-----------------------------------------------
; Common character definitions.
;-----------------------------------------------
SCROLL EQU 001H ; Set scrool direction UP.
BELL EQU 007H
SPACE EQU 020H
TAB EQU 009H ; TAB ACROSS (8 SPACES FOR SD-BOARD)
CR EQU 00DH
LF EQU 00AH
FF EQU 00CH
ESC EQU 01BH
DELETE EQU 07FH
BACKS EQU 008H
SOH EQU 1 ; For XModem etc.
EOT EQU 4
ACK EQU 6
NAK EQU 15H
NUL EQU 00H
NULL EQU 000H
CTRL_A EQU 001H
CTRL_B EQU 002H
CTRL_C EQU 003H
CTRL_D EQU 004H
CTRL_E EQU 005H
CTRL_F EQU 006H
CTRL_G EQU 007H
CTRL_H EQU 008H
CTRL_I EQU 009H
CTRL_J EQU 00AH
CTRL_K EQU 00BH
CTRL_L EQU 00CH
CTRL_M EQU 00DH
CTRL_N EQU 00EH
CTRL_O EQU 00FH
CTRL_P EQU 010H
CTRL_Q EQU 011H
CTRL_R EQU 012H
CTRL_S EQU 013H
CTRL_T EQU 014H
CTRL_U EQU 015H
CTRL_V EQU 016H
CTRL_W EQU 017H
CTRL_X EQU 018H
CTRL_Y EQU 019H
CTRL_Z EQU 01AH
CTRL_SLASH EQU 01CH
CTRL_RB EQU 01DH
CTRL_CAPPA EQU 01EH
CTRL_UNDSCR EQU 01FH
CTRL_AT EQU 000H
NOKEY EQU 0F0H
CURSRIGHT EQU 0F1H
CURSLEFT EQU 0F2H
CURSUP EQU 0F3H
CURSDOWN EQU 0F4H
DBLZERO EQU 0F5H
INSERT EQU 0F6H
CLRKEY EQU 0F7H
HOMEKEY EQU 0F8H
BREAKKEY EQU 0FBH
SCROLL EQU 001H ; Set scrool direction UP.
BELL EQU 007H
SPACE EQU 020H
TAB EQU 009H ; TAB ACROSS (8 SPACES FOR SD-BOARD)
CR EQU 00DH
LF EQU 00AH
FF EQU 00CH
ESC EQU 01BH
DELETE EQU 07FH
BACKS EQU 008H
SOH EQU 1 ; For XModem etc.
EOT EQU 4
ACK EQU 6
NAK EQU 15H
NUL EQU 00H
NULL EQU 000H
CTRL_A EQU 001H
CTRL_B EQU 002H
CTRL_C EQU 003H
CTRL_D EQU 004H
CTRL_E EQU 005H
CTRL_F EQU 006H
CTRL_G EQU 007H
CTRL_H EQU 008H
CTRL_I EQU 009H
CTRL_J EQU 00AH
CTRL_K EQU 00BH
CTRL_L EQU 00CH
CTRL_M EQU 00DH
CTRL_N EQU 00EH
CTRL_O EQU 00FH
CTRL_P EQU 010H
CTRL_Q EQU 011H
CTRL_R EQU 012H
CTRL_S EQU 013H
CTRL_T EQU 014H
CTRL_U EQU 015H
CTRL_V EQU 016H
CTRL_W EQU 017H
CTRL_X EQU 018H
CTRL_Y EQU 019H
CTRL_Z EQU 01AH
CTRL_SLASH EQU 01CH
CTRL_RB EQU 01DH
CTRL_CAPPA EQU 01EH
CTRL_UNDSCR EQU 01FH
CTRL_AT EQU 000H
NOKEY EQU 0F0H
CURSRIGHT EQU 0F1H
CURSLEFT EQU 0F2H
CURSUP EQU 0F3H
CURSDOWN EQU 0F4H
DBLZERO EQU 0F5H
INSERT EQU 0F6H
CLRKEY EQU 0F7H
HOMEKEY EQU 0F8H
BREAKKEY EQU 0FBH
; MMC/SD command (SPI mode)
CMD0 EQU 64 + 0 ; GO_IDLE_STATE
CMD1 EQU 64 + 1 ; SEND_OP_COND
ACMD41 EQU 0x40+41 ; SEND_OP_COND (SDC)
CMD8 EQU 64 + 8 ; SEND_IF_COND
CMD9 EQU 64 + 9 ; SEND_CSD
CMD10 EQU 64 + 10 ; SEND_CID
CMD12 EQU 64 + 12 ; STOP_TRANSMISSION
CMD13 EQU 64 + 13 ; SEND_STATUS
ACMD13 EQU 0x40+13 ; SD_STATUS (SDC)
CMD16 EQU 64 + 16 ; SET_BLOCKLEN
CMD17 EQU 64 + 17 ; READ_SINGLE_BLOCK
CMD18 EQU 64 + 18 ; READ_MULTIPLE_BLOCK
CMD23 EQU 64 + 23 ; SET_BLOCK_COUNT
ACMD23 EQU 0x40+23 ; SET_WR_BLK_ERASE_COUNT (SDC)
CMD24 EQU 64 + 24 ; WRITE_BLOCK
CMD25 EQU 64 + 25 ; WRITE_MULTIPLE_BLOCK
CMD32 EQU 64 + 32 ; ERASE_ER_BLK_START
CMD33 EQU 64 + 33 ; ERASE_ER_BLK_END
CMD38 EQU 64 + 38 ; ERASE
CMD55 EQU 64 + 55 ; APP_CMD
CMD58 EQU 64 + 58 ; READ_OCR
SD_SECSIZE EQU 512 ; Default size of an SD Sector
CMD0 EQU 64 + 0 ; GO_IDLE_STATE
CMD1 EQU 64 + 1 ; SEND_OP_COND
ACMD41 EQU 0x40+41 ; SEND_OP_COND (SDC)
CMD8 EQU 64 + 8 ; SEND_IF_COND
CMD9 EQU 64 + 9 ; SEND_CSD
CMD10 EQU 64 + 10 ; SEND_CID
CMD12 EQU 64 + 12 ; STOP_TRANSMISSION
CMD13 EQU 64 + 13 ; SEND_STATUS
ACMD13 EQU 0x40+13 ; SD_STATUS (SDC)
CMD16 EQU 64 + 16 ; SET_BLOCKLEN
CMD17 EQU 64 + 17 ; READ_SINGLE_BLOCK
CMD18 EQU 64 + 18 ; READ_MULTIPLE_BLOCK
CMD23 EQU 64 + 23 ; SET_BLOCK_COUNT
ACMD23 EQU 0x40+23 ; SET_WR_BLK_ERASE_COUNT (SDC)
CMD24 EQU 64 + 24 ; WRITE_BLOCK
CMD25 EQU 64 + 25 ; WRITE_MULTIPLE_BLOCK
CMD32 EQU 64 + 32 ; ERASE_ER_BLK_START
CMD33 EQU 64 + 33 ; ERASE_ER_BLK_END
CMD38 EQU 64 + 38 ; ERASE
CMD55 EQU 64 + 55 ; APP_CMD
CMD58 EQU 64 + 58 ; READ_OCR
SD_SECSIZE EQU 512 ; Default size of an SD Sector
; Card type flags (CardType)
CT_MMC EQU 001H ; MMC ver 3
CT_SD1 EQU 002H ; SD ver 1
CT_SD2 EQU 004H ; SD ver 2
CT_SDC EQU CT_SD1|CT_SD2 ; SD
CT_BLOCK EQU 008H ; Block addressing
CT_MMC EQU 001H ; MMC ver 3
CT_SD1 EQU 002H ; SD ver 1
CT_SD2 EQU 004H ; SD ver 2
CT_SDC EQU CT_SD1|CT_SD2 ; SD
CT_BLOCK EQU 008H ; Block addressing
; SD Card Directory structure. The directory entries are based on the MZF Header format and constraints.
;
@@ -322,148 +365,149 @@ CT_BLOCK EQU 008H ; Block
; LOAD ADDR : Start address in memory where data should be loaded.
; EXEC ADDR : If a binary then this parameter specifies the location to auto execute once loaded.
; RESERVED : Not used at the moemnt.
SDDIR_FLAG1 EQU 000H
SDDIR_FLAG2 EQU 001H
SDDIR_FILEN EQU 002H
SDDIR_SSEC EQU 013H
SDDIR_SIZE EQU 015H
SDDIR_LOAD EQU 017H
SDDIR_EXEC EQU 019H
SDDIR_FNSZ EQU FNSIZE
SDDIR_ENTSZ EQU 32
SDDIR_FLAG1 EQU 000H
SDDIR_FLAG2 EQU 001H
SDDIR_FILEN EQU 002H
SDDIR_SSEC EQU 013H
SDDIR_SIZE EQU 015H
SDDIR_LOAD EQU 017H
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.
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)
;-----------------------------------------------
STACK: EQU 010F0H
STACK: EQU 010F0H
;
ORG STACK
ORG STACK
;
SPV:
IBUFE: ; TAPE BUFFER (128 BYTES)
ATRB: DS virtual 1 ; ATTRIBUTE
NAME: DS virtual FNSIZE ; FILE NAME
SIZE: DS virtual 2 ; BYTESIZE
DTADR: DS virtual 2 ; DATA ADDRESS
EXADR: DS virtual 2 ; EXECUTION ADDRESS
COMNT: DS virtual 92 ; COMMENT
SWPW: DS virtual 10 ; SWEEP WORK
KDATW: DS virtual 2 ; KEY WORK
KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE)
DSPXY: DS virtual 2 ; DISPLAY COORDINATES
MANG: DS virtual 6 ; COLUMN MANAGEMENT
MANGE: DS virtual 1 ; COLUMN MANAGEMENT END
PBIAS: DS virtual 1 ; PAGE BIAS
ROLTOP: DS virtual 1 ; ROLL TOP BIAS
MGPNT: DS virtual 1 ; COLUMN MANAG. POINTER
PAGETP: DS virtual 2 ; PAGE TOP
ROLEND: DS virtual 1 ; ROLL END
DS virtual 14 ; BIAS
FLASH: DS virtual 1 ; FLASHING DATA
SFTLK: DS virtual 1 ; SHIFT LOCK
REVFLG: DS virtual 1 ; REVERSE FLAG
SPAGE: DS virtual 1 ; PAGE CHANGE
FLSDT: DS virtual 1 ; CURSOR DATA
STRGF: DS virtual 1 ; STRING FLAG
DPRNT: DS virtual 1 ; TAB COUNTER
TMCNT: DS virtual 2 ; TAPE MARK COUNTER
SUMDT: DS virtual 2 ; CHECK SUM DATA
CSMDT: DS virtual 2 ; FOR COMPARE SUM DATA
AMPM: DS virtual 1 ; AMPM DATA
TIMFG: DS virtual 1 ; TIME FLAG
SWRK: DS virtual 1 ; KEY SOUND FLAG
TEMPW: DS virtual 1 ; TEMPO WORK
ONTYO: DS virtual 1 ; ONTYO WORK
OCTV: DS virtual 1 ; OCTAVE WORK
RATIO: DS virtual 2 ; ONPU RATIO
BUFER: DS virtual 81 ; GET LINE BUFFER
ATRB: DS virtual 1 ; ATTRIBUTE
NAME: DS virtual FNSIZE ; FILE NAME
SIZE: DS virtual 2 ; BYTESIZE
DTADR: DS virtual 2 ; DATA ADDRESS
EXADR: DS virtual 2 ; EXECUTION ADDRESS
COMNT: DS virtual 92 ; COMMENT
SWPW: DS virtual 10 ; SWEEP WORK
KDATW: DS virtual 2 ; KEY WORK
KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE)
DSPXY: DS virtual 2 ; DISPLAY COORDINATES
MANG: DS virtual 6 ; COLUMN MANAGEMENT
MANGE: DS virtual 1 ; COLUMN MANAGEMENT END
PBIAS: DS virtual 1 ; PAGE BIAS
ROLTOP: DS virtual 1 ; ROLL TOP BIAS
MGPNT: DS virtual 1 ; COLUMN MANAG. POINTER
PAGETP: DS virtual 2 ; PAGE TOP
ROLEND: DS virtual 1 ; ROLL END
DS virtual 14 ; BIAS
FLASH: DS virtual 1 ; FLASHING DATA
SFTLK: DS virtual 1 ; SHIFT LOCK
REVFLG: DS virtual 1 ; REVERSE FLAG
SPAGE: DS virtual 1 ; PAGE CHANGE
FLSDT: DS virtual 1 ; CURSOR DATA
STRGF: DS virtual 1 ; STRING FLAG
DPRNT: DS virtual 1 ; TAB COUNTER
TMCNT: DS virtual 2 ; TAPE MARK COUNTER
SUMDT: DS virtual 2 ; CHECK SUM DATA
CSMDT: DS virtual 2 ; FOR COMPARE SUM DATA
AMPM: DS virtual 1 ; AMPM DATA
TIMFG: DS virtual 1 ; TIME FLAG
SWRK: DS virtual 1 ; KEY SOUND FLAG
TEMPW: DS virtual 1 ; TEMPO WORK
ONTYO: DS virtual 1 ; ONTYO WORK
OCTV: DS virtual 1 ; OCTAVE WORK
RATIO: DS virtual 2 ; ONPU RATIO
BUFER: DS virtual 81 ; GET LINE BUFFER
; Starting 1000H - Generally unused bytes not cleared by the monitor.
ROMBK1: EQU 01016H ; CURRENT MROM BANK
ROMBK2: EQU 01017H ; CURRENT USERROM BANK
WRKROMBK1: EQU 01018H ; WORKING MROM BANK
WRKROMBK2: EQU 01019H ; WORKING USERROM BANK
ROMCTL: EQU 0101AH ; Current Bank control register setting.
SCRNMODE: EQU 0101BH ; Mode of screen, 0 = 40 char, 1 = 80 char.
TMPADR: EQU 0101CH ; TEMPORARY ADDRESS STORAGE
TMPSIZE: EQU 0101EH ; TEMPORARY SIZE
TMPCNT: EQU 01020H ; TEMPORARY COUNTER
TMPLINECNT: EQU 01022H ; Temporary counter for displayed lines.
TMPSTACKP: EQU 01024H ; Temporary stack pointer save.
SDVER: EQU 01026H
SDCAP: EQU 01027H
ROMBK1: EQU 01016H ; CURRENT MROM BANK
ROMBK2: EQU 01017H ; CURRENT USERROM BANK
WRKROMBK1: EQU 01018H ; WORKING MROM BANK
WRKROMBK2: EQU 01019H ; WORKING USERROM BANK
ROMCTL: EQU 0101AH ; Current Bank control register setting.
SCRNMODE: EQU 0101BH ; Mode of screen, 0 = 40 char, 1 = 80 char.
TMPADR: EQU 0101CH ; TEMPORARY ADDRESS STORAGE
TMPSIZE: EQU 0101EH ; TEMPORARY SIZE
TMPCNT: EQU 01020H ; TEMPORARY COUNTER
TMPLINECNT: EQU 01022H ; Temporary counter for displayed lines.
TMPSTACKP: EQU 01024H ; Temporary stack pointer save.
SDVER: EQU 01026H
SDCAP: EQU 01027H
TZPU: EQU 01027H ; Tranzputer present flag (0 = not present, > 0 = present and version number).
; Variables sharing the BUFER buffer, normally the BUFER is only used to get keyboard input and so long as data in BUFER is processed
; before calling the CMT/SD commands and not inbetween there shouldnt be any issue. Also the space used is at the top end of the buffer which is not used so often.
; This frees up memory needed by the CMT and SD card.
SECTORBUF: EQU 0CE00H ; Working buffer to place an SD card sector.
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.
SECTORBUF: EQU 0CE00H ; Working buffer to place an SD card sector.
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
;QDPB EQU 01131h ; QD code 2
;QDPC EQU 01132h ; QD header startaddress
;QDPE EQU 01134h ; QD header length
;QDCPA EQU 0113Bh ; QD error flag
;HDPT EQU 0113Ch ; QD new headpoint possition
;HDPT0 EQU 0113Dh ; QD actual headpoint possition
;FNUPS EQU 0113Eh
;FNUPF EQU 01140h
;FNA EQU 01141h ; File Number A (actual file number)
;FNB EQU 01142h ; File Number B (next file number)
;MTF EQU 01143h ; QD motor flag
;RTYF EQU 01144h
;SYNCF EQU 01146h ; SyncFlags
;RETSP EQU 01147h
;BUFER EQU 011A3h
;QDIRBF EQU 0CD90h
;QDPA EQU 01130h ; QD code 1
;QDPB EQU 01131h ; QD code 2
;QDPC EQU 01132h ; QD header startaddress
;QDPE EQU 01134h ; QD header length
;QDCPA EQU 0113Bh ; QD error flag
;HDPT EQU 0113Ch ; QD new headpoint possition
;HDPT0 EQU 0113Dh ; QD actual headpoint possition
;FNUPS EQU 0113Eh
;FNUPF EQU 01140h
;FNA EQU 01141h ; File Number A (actual file number)
;FNB EQU 01142h ; File Number B (next file number)
;MTF EQU 01143h ; QD motor flag
;RTYF EQU 01144h
;SYNCF EQU 01146h ; SyncFlags
;RETSP EQU 01147h
;BUFER EQU 011A3h
;QDIRBF EQU 0CD90h
;SPV:
;IBUFE: ; TAPE BUFFER (128 BYTES)
;ATRB: DS virtual 1 ; Code Type, 01 = Machine Code.
;NAME: DS virtual 17 ; Title/Name (17 bytes).
;SIZE: DS virtual 2 ; Size of program.
;DTADR: DS virtual 2 ; Load address of program.
;EXADR: DS virtual 2 ; Exec address of program.
;COMNT: DS virtual 104 ; COMMENT
;KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE)
;DSPXY: DS virtual 2 ; DISPLAY COORDINATES
;MANG: DS virtual 27 ; COLUMN MANAGEMENT
;FLASH: DS virtual 1 ; FLASHING DATA
;FLPST: DS virtual 2 ; FLASHING POSITION
;FLSST: DS virtual 1 ; FLASHING STATUS
;FLSDT: DS virtual 1 ; CURSOR DATA
;STRGF: DS virtual 1 ; STRING FLAG
;DPRNT: DS virtual 1 ; TAB COUNTER
;TMCNT: DS virtual 2 ; TAPE MARK COUNTER
;SUMDT: DS virtual 2 ; CHECK SUM DATA
;CSMDT: DS virtual 2 ; FOR COMPARE SUM DATA
;AMPM: DS virtual 1 ; AMPM DATA
;TIMFG: DS virtual 1 ; TIME FLAG
;SWRK: DS virtual 1 ; KEY SOUND FLAG
;TEMPW: DS virtual 1 ; TEMPO WORK
;ONTYO: DS virtual 1 ; ONTYO WORK
;OCTV: DS virtual 1 ; OCTAVE WORK
;RATIO: DS virtual 2 ; ONPU RATIO
;ATRB: DS virtual 1 ; Code Type, 01 = Machine Code.
;NAME: DS virtual 17 ; Title/Name (17 bytes).
;SIZE: DS virtual 2 ; Size of program.
;DTADR: DS virtual 2 ; Load address of program.
;EXADR: DS virtual 2 ; Exec address of program.
;COMNT: DS virtual 104 ; COMMENT
;KANAF: DS virtual 1 ; KANA FLAG (01=GRAPHIC MODE)
;DSPXY: DS virtual 2 ; DISPLAY COORDINATES
;MANG: DS virtual 27 ; COLUMN MANAGEMENT
;FLASH: DS virtual 1 ; FLASHING DATA
;FLPST: DS virtual 2 ; FLASHING POSITION
;FLSST: DS virtual 1 ; FLASHING STATUS
;FLSDT: DS virtual 1 ; CURSOR DATA
;STRGF: DS virtual 1 ; STRING FLAG
;DPRNT: DS virtual 1 ; TAB COUNTER
;TMCNT: DS virtual 2 ; TAPE MARK COUNTER
;SUMDT: DS virtual 2 ; CHECK SUM DATA
;CSMDT: DS virtual 2 ; FOR COMPARE SUM DATA
;AMPM: DS virtual 1 ; AMPM DATA
;TIMFG: DS virtual 1 ; TIME FLAG
;SWRK: DS virtual 1 ; KEY SOUND FLAG
;TEMPW: DS virtual 1 ; TEMPO WORK
;ONTYO: DS virtual 1 ; ONTYO WORK
;OCTV: DS virtual 1 ; OCTAVE WORK
;RATIO: DS virtual 2 ; ONPU RATIO

View File

@@ -0,0 +1,7 @@
; Configurable parameters.
COLW: EQU 40 ; Width of the display screen (ie. columns).
ROW: EQU 25 ; Number of rows on display screen.
SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area.
MODE80C:EQU 0
INCLUDE "1Z-013A.asm"

View File

@@ -0,0 +1,7 @@
; Configurable parameters.
COLW: EQU 80 ; Width of the display screen (ie. columns).
ROW: EQU 25 ; Number of rows on display screen.
SCRNSZ: EQU COLW * ROW ; Total size, in bytes, of the screen display area.
MODE80C:EQU 1
INCLUDE "1Z-013A.asm"

View File

@@ -162,7 +162,16 @@ ROMFS_3: LD (BNKSELMROM),A ; start
;
; Replacement command processor in place of the SA1510 command processor.
;
MONITOR: LD A, (ROMBK1)
MONITOR: IN A,(CPLDINFO) ; See if a tranZPUter board is present.
LD C,A
AND 0A0H ; First nibble needs to be an A if the device is present.
CP 0A0H
JR NZ,CHKTZ1
LD A,C
CHKTZ1: AND 00FH
LD (TZPU), A ; Flag = 0 if no tranZPUter present otherwise contains version (1 - 15).
;
LD A, (ROMBK1)
CP 1
JR Z, SET80CHAR
CP 0
@@ -186,8 +195,15 @@ SIGNON: LD A,0C4h ; Move
SIGNON1: CALL DPCT
DEC E
JR NZ,SIGNON1
LD DE,MSGSON ; Sign on message,
LD HL,PRINTMSG
;
LD A,C
OR A
JR Z,SIGNON2
LD DE,MSGSONTZ
JR SIGNON3
;
SIGNON2: LD DE,MSGSON ; Sign on message,
SIGNON3: LD HL,PRINTMSG
CALL BKSW0to6
LD HL, SDINIT ; SD Card Initialisation
@@ -276,6 +292,12 @@ CMDTABLE: DB 000H | 000H | 000H | 001H ; Bit 2
DB 000H | 000H | 000H | 001H
DB '8' ; 80 Char screen mode.
DW SETMODE80
DB 000H | 000H | 000H | 004H
DB "7008" ; Switch to 80 column MZ700 mode.
DW SETMODE7008
DB 000H | 000H | 000H | 003H
DB "700" ; Switch to 40 column MZ700 mode.
DW SETMODE700
DB 000H | 000H | 000H | 001H
DB 'B' ; Bell.
DW SGX
@@ -420,6 +442,54 @@ SETMODE80: LD A, ROMBANK1 ; Switc
LD (DSPCTL), A
JP MONIT
NOTZPU: LD DE,MSGNOTZINST ; No tranZPUter installed.
LD HL,PRINTMSG
CALL BKSW0to6
RET
; The RFS depends on variables stored in unused parts of the Monitor scratch area.
; When switching into a compatibility mode the memory is switched and these variables go
; out of scope. This routine clears the memory and sets any crucial variables after
; memory switch so that a restart functions as expected.
;
SETMODECLR: POP HL ; Get return address, will go OOS after memory mode change.
LD A,TZMM_COMPAT
OUT (MMCFG),A ; Set memory mode to compatibility.
XOR A ; Clear out the RFS variable area in the tranZPUter memory.
LD DE, 01000H
LD B, 030H
SETCLR_1: LD (DE),A
INC DE
DJNZ SETCLR_1
JP (HL) ; Return to caller.
; Command to switch to the MZ700 compatibility mode with 80 column display.
;
SETMODE7008:LD A,(TZPU) ; Check there is a tranZPUter card installed.
OR A
JR Z,NOTZPU
LD A, 128 ; Setup for 80char display.
LD (DSPCTL), A
CALL SETMODECLR ; Set memory mode and clear variable area.
LD A,ROMBANK5 ; Select the 80 column version of the 1Z-013A ROM.
SETMODE_2: LD (ROMBK1),A
LD (BNKSELMROM),A
LD A,SET_MODE_MZ700 ; Set the CPLD compatibility mode.
SETMODE_3: OUT (CPLDCFG),A
JP MONIT ; Cold start the monitor.
; Command to switch to the MZ700 compatibility mode with original 40 column display.
;
SETMODE700: LD A,(TZPU) ; Check there is a tranZPUter card installed.
OR A
JR Z,NOTZPU
LD A, 0 ; Setup for 40char display.
LD (DSPCTL), A
CALL SETMODECLR ; Set memory mode and clear variable area.
LD A,ROMBANK4 ; Select the 40 column version of the 1Z-013A ROM.
JR SETMODE_2
;====================================
;
; ROM File System Commands
@@ -597,7 +667,7 @@ DIRROM: DI ; Disab
; C = Block in page
; D = File sequence number.
;
LD B,MROMPAGES ; First 4 pages are reserved in MROM bank.
LD B,MROMPAGES ; First 8 pages are reserved in MROM bank.
LD C,0 ; Block in page.
LD D,0 ; File numbering start.
;

View File

@@ -1263,14 +1263,13 @@ LOADSD12: LD HL,(SDLOADADDR)
JR NZ,LOADSD12A
DEC HL
INC (HL)
LOADSD12A: LD A,(SDLOADSIZE+1)
CP 002H
JR C,LOADSD14 ; If carry then the last read obtained the remaining bytes.
LD HL,(SDLOADSIZE)
LOADSD12A: LD HL,(SDLOADSIZE)
LD DE,SD_SECSIZE
OR A
SBC HL,DE
LOADSD13: LD (SDLOADSIZE),HL
JR C,LOADSD14
JR Z,LOADSD14
LD (SDLOADSIZE),HL
JR LOADSD11
LOADSD14: LD A,(SDAUTOEXEC) ; Autoexecute turned off?

View File

@@ -275,6 +275,8 @@ PRTSTRE: POP DE
; hence using upper case.
HELPSCR: DB "4 - 40 col mode.", 00DH
DB "8 - 80 col mode.", 00DH
DB "700 - Select MZ-700 Mode.", 00DH
DB "7008 - Select MZ-700 80 col Mode.", 00DH
DB "B - toggle keyboard bell.", 00DH
DB "C - clear memory $1200-$D000.", 00DH
DB "DXXXX[YYYY] - dump mem XXXX to YYYY.", 00DH
@@ -440,7 +442,8 @@ ATBL: DB 0CCH ; NUL '\0' (null character)
; Message table
;
;--------------------------------------
MSGSON: DB "+ RFS ", 0ABh, "2.0 **" ,00DH, 000H ; Version 2.0-> as we are now using the v2.x PCB with 4 devices on-board
MSGSON: DB "+ RFS ", 0ABh, "2.0 **" ,00DH, 000H ; Version 2.0-> as we are now using the v2.x PCB with 4 devices on-board
MSGSONTZ: DB "+ TZ+RFS ", 0ABh, "2.0 **" ,00DH, 000H ; Version 2.0 with version 2.1+ of tranZPUter board installed.
MSGNOTFND: DB "Not Found", 00DH, 000H
MSGRDIRLST: DB "ROM Directory:", 00DH, 000H
MSGTRM: DB 00DH, 000H
@@ -471,6 +474,7 @@ 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
MSGNOTZINST:DB "No tranZPUter card installed.",00DH, 000H
ALIGN 0EFFFh
DB 0FFh

View File

@@ -142,7 +142,7 @@ BK2A20 EQU 128 ; User
; 1 0 = Flasm RAM 2 or Static RAM 0.
; 1 1 = Reserved.`
BNKCTRLDEF EQU CDLTCH2+CDLTCH1+BBMOSI+SDCS+BBCLK ; Default on startup for the Bank Control register.
BNKCTRLDEF EQU BBMOSI+SDCS+BBCLK ; Default on startup for the Bank Control register.
;-----------------------------------------------
; Rom File System Header (MZF)
@@ -554,12 +554,22 @@ _MROMLOAD: PUSH BC
LD C,0
ADD HL,BC
LD BC, MZFHDRSZ
LDIR
LROMLOAD1: LD A,(HL) ; Issues with LDIR and a signal artifact from the mainboard, so manual copy.
INC HL
LD (DE),A
INC DE
DEC BC
LD A,B
OR C
JR NZ,LROMLOAD1
;LDIR
PUSH HL
LD DE, (DTADR)
LD HL, (SIZE)
LD BC, RFSSECTSZ - MZFHDRSZ
OR A
SBC HL, BC
JR NC, LROMLOAD4
LD HL, (SIZE)
@@ -573,6 +583,8 @@ LROMLOAD2: LD A, B
OR A ; Select the required user bank and Clear carry so that the control registers are disabled.
CALL SELUSRBNK
; LD (BNKCTRLDIS),A ; Disable the control registers, value of A is not important.
LROMLOAD3: PUSH BC
LD HL, 0E800h
LD A, C
@@ -590,6 +602,7 @@ LROMLOAD3: PUSH BC
LD DE, (TMPADR)
LD HL, (TMPSIZE)
LD BC, RFSSECTSZ
OR A
SBC HL, BC
JR NC, LROMLOAD4
LD BC, (TMPSIZE)
@@ -600,7 +613,17 @@ LROMLOAD4: LD (TMPSIZE), HL ; HL co
LD A, B ; Pre check to ensure BC is not zero.
OR C
JR Z, LROMLOAD8
LDIR
LROMLOAD9: LD A,(HL) ; Issues with LDIR and a signal artifact from the mainboard, so manual copy.
INC HL
LD (DE),A
INC DE
DEC BC
LD A,B
OR C
JR NZ,LROMLOAD9
;LDIR
LD BC, (TMPSIZE)
LD A, B ; Post check to ensure we still have bytes
OR C
@@ -611,7 +634,7 @@ LROMLOAD4: LD (TMPSIZE), HL ; HL co
LROMLOAD6: INC C
LD A, C
CP UROMSIZE/RFSSECTSZ ; Max blocks per page reached?
JR C, LROMLOAD7
JR C, LROMLOAD3 ;LROMLOAD7
LD C, 0
INC B
;

Binary file not shown.

BIN
software/roms/IPL.rom Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -33,7 +33,7 @@ TOOLDIR=${ROOTDIR}/software/tools
JARDIR=${ROOTDIR}/software/tools
ASM=glass.jar
#BUILDROMLIST="MZ80AFI rfs rfs_mrom IPL monitor_SA1510 monitor_80c_SA1510 monitor_mz-1r12 quickdisk_mz-1e05 quickdisk_mz-1e14 monitor_1Z-013A monitor_80c_1Z-013A"
BUILDROMLIST="monitor_SA1510_hiload monitor_80c_SA1510_hiload monitor_80c_SA1510 MZ80AFI monitor_SA1510 monitor_80c_SA1510"
BUILDROMLIST="monitor_SA1510_hiload monitor_80c_SA1510_hiload monitor_80c_SA1510 MZ80AFI monitor_SA1510 monitor_80c_SA1510 monitor_1Z-013A monitor_80c_1Z-013A IPL"
#BUILDMZFLIST="hi-ramcheck sharpmz-test"
BUILDMZFLIST="BASIC sharpmz-test"
ASMDIR=${ROOTDIR}/software/asm

View File

@@ -69,11 +69,11 @@ else
fi
# Place the monitor roms into the MROM at the beginning for banked page usage.
echo "cat ${ROM_PATH}/monitor_SA1510.rom ${ROM_PATH}/monitor_80c_SA1510.rom ${ROM_PATH}/cbios.rom ${ROM_PATH}/rfs_mrom.rom ${ROM_PATH}/blank_mrom.rom ${ROM_PATH}/blank_mrom.rom ${ROM_PATH}/blank_mrom.rom ${ROM_PATH}/blank_mrom.rom > /tmp/mrom.rom"
echo "cat ${ROM_PATH}/monitor_SA1510.rom ${ROM_PATH}/monitor_80c_SA1510.rom ${ROM_PATH}/cbios.rom ${ROM_PATH}/rfs_mrom.rom ${ROM_PATH}/monitor_1Z-013A.rom ${ROM_PATH}/monitor_80c_1Z-013A.rom ${ROM_PATH}/IPL.rom ${ROM_PATH}/blank_mrom.rom > /tmp/mrom.rom"
cat ${ROM_PATH}/monitor_SA1510.rom ${ROM_PATH}/monitor_80c_SA1510.rom \
${ROM_PATH}/cbios.rom ${ROM_PATH}/rfs_mrom.rom \
${ROM_PATH}/blank_mrom.rom ${ROM_PATH}/blank_mrom.rom \
${ROM_PATH}/blank_mrom.rom ${ROM_PATH}/blank_mrom.rom \
${ROM_PATH}/monitor_1Z-013A.rom ${ROM_PATH}/monitor_80c_1Z-013A.rom \
${ROM_PATH}/IPL.rom ${ROM_PATH}/blank_mrom.rom \
> /tmp/mrom.rom
GENROM=0