|
|
@ -427,10 +427,20 @@ HBX_BNKSEL1: |
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|
|
; |
|
|
; |
|
|
HBX_BNKCPY: |
|
|
HBX_BNKCPY: |
|
|
#IF (INTMODE > 0) |
|
|
|
|
|
;LD A,I |
|
|
|
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
PUSH IY |
|
|
|
|
|
PUSH BC |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
LD C,Z280_MSR |
|
|
|
|
|
;LDCTL IY,(C) |
|
|
|
|
|
.DB $FD,$ED,$66 |
|
|
|
|
|
POP BC |
|
|
|
|
|
PUSH IY |
|
|
DI |
|
|
DI |
|
|
;PUSH AF |
|
|
|
|
|
|
|
|
#ELSE |
|
|
|
|
|
LD A,I |
|
|
|
|
|
DI |
|
|
|
|
|
PUSH AF |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
LD (HBX_BC_SP),SP ; PUT STACK |
|
|
LD (HBX_BC_SP),SP ; PUT STACK |
|
|
LD SP,HBX_TMPSTK ; ... IN HI MEM |
|
|
LD SP,HBX_TMPSTK ; ... IN HI MEM |
|
|
@ -461,9 +471,18 @@ HBX_BC_LAST: |
|
|
|
|
|
|
|
|
LD SP,$FFFF ; RESTORE STACK |
|
|
LD SP,$FFFF ; RESTORE STACK |
|
|
HBX_BC_SP .EQU $ - 2 ; ... TO ORIGINAL VALUE |
|
|
HBX_BC_SP .EQU $ - 2 ; ... TO ORIGINAL VALUE |
|
|
#IF (INTMODE > 0) |
|
|
|
|
|
;POP AF |
|
|
|
|
|
;JP PO,$+4 |
|
|
|
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
POP IY |
|
|
|
|
|
PUSH BC |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
LD C,Z280_MSR |
|
|
|
|
|
;LDCTL (C),IY |
|
|
|
|
|
.DB $FD,$ED,$6E |
|
|
|
|
|
POP BC |
|
|
|
|
|
POP IY |
|
|
|
|
|
#ELSE |
|
|
|
|
|
POP AF |
|
|
|
|
|
JP PO,$+4 |
|
|
EI |
|
|
EI |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
RET |
|
|
RET |
|
|
@ -825,17 +844,19 @@ HB_START: |
|
|
LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY |
|
|
LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY |
|
|
; |
|
|
; |
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
;LD C,$12 ; CACHE CONTROL REGISTER |
|
|
|
|
|
;LD HL,$0060 ; DISABLE INSTRUCTION CACHE |
|
|
|
|
|
;;LDCTL (C),HL ; SET IT (8 BITS) |
|
|
|
|
|
|
|
|
;;LD C,$12 ; CACHE CONTROL REGISTER |
|
|
|
|
|
;LD C,Z280_CCR ; CACHE CONTROL REGISTER |
|
|
|
|
|
;LD HL,$0060 ; DISABLE INSTRUCTION CACHE |
|
|
|
|
|
;;LDCTL (C),HL ; SET IT (8 BITS) |
|
|
;.DB $ED,$6E |
|
|
;.DB $ED,$6E |
|
|
;;PCACHE ; PURGE ANY REMNANTS OF CACHE |
|
|
;;PCACHE ; PURGE ANY REMNANTS OF CACHE |
|
|
;.DB $ED,$65 |
|
|
;.DB $ED,$65 |
|
|
; |
|
|
; |
|
|
LD C,$02 ; BUS TIMING AND CONTROL REGISTER |
|
|
|
|
|
LD HL,$0033 ; 3 I/O WAIT STATES ADDED |
|
|
|
|
|
;LD HL,$00F3 ; 3 I/O W/S & 3 INT ACK W/S |
|
|
|
|
|
;LDCTL (C),HL ; SET IT (8 BITS) |
|
|
|
|
|
|
|
|
;LD C,$02 ; BUS TIMING AND CONTROL REGISTER |
|
|
|
|
|
LD C,Z280_BTCR ; BUS TIMING AND CONTROL REGISTER |
|
|
|
|
|
LD HL,$0033 ; 3 I/O WAIT STATES ADDED |
|
|
|
|
|
;LD HL,$00F3 ; 3 I/O W/S & 3 INT ACK W/S |
|
|
|
|
|
;LDCTL (C),HL ; SET IT (8 BITS) |
|
|
.DB $ED,$6E |
|
|
.DB $ED,$6E |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
@ -969,6 +990,7 @@ HB_START: |
|
|
LD DE,0 |
|
|
LD DE,0 |
|
|
LD BC,$8000 |
|
|
LD BC,$8000 |
|
|
CALL HBX_BNKCPY |
|
|
CALL HBX_BNKCPY |
|
|
|
|
|
;DI |
|
|
; |
|
|
; |
|
|
; TRANSITION TO HBIOS IN RAM BANK |
|
|
; TRANSITION TO HBIOS IN RAM BANK |
|
|
; |
|
|
; |
|
|
@ -1198,15 +1220,15 @@ HB_CPU2: |
|
|
; |
|
|
; |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
; |
|
|
|
|
|
; Z280 PHI IS OSC / 2 |
|
|
|
|
|
LD A,(CPUOSC / 2) / 1000000 |
|
|
|
|
|
LD (CB_CPUMHZ),A |
|
|
|
|
|
LD DE,(CPUOSC / 2) / 1000 |
|
|
|
|
|
LD (CB_CPUKHZ),DE |
|
|
|
|
|
; |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
;#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
;; |
|
|
|
|
|
; ; Z280 PHI IS OSC / 2 |
|
|
|
|
|
; LD A,(CPUOSC / 2) / 1000000 |
|
|
|
|
|
; LD (CB_CPUMHZ),A |
|
|
|
|
|
; LD DE,(CPUOSC / 2) / 1000 |
|
|
|
|
|
; LD (CB_CPUKHZ),DE |
|
|
|
|
|
;; |
|
|
|
|
|
;#ENDIF |
|
|
; |
|
|
; |
|
|
DIAG(%00011111) |
|
|
DIAG(%00011111) |
|
|
; |
|
|
; |
|
|
@ -1224,6 +1246,31 @@ HB_CPU2: |
|
|
; |
|
|
; |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
; |
|
|
|
|
|
LD C,Z280_BTCR ; BUS TIMING AND CONTROL REG |
|
|
|
|
|
;LDCTL HL,(C) ; GET IT |
|
|
|
|
|
.DB $ED,$66 |
|
|
|
|
|
LD A,L ; PUT IN A |
|
|
|
|
|
AND %00111100 ; CLEAR DC AND I/O FIELDS |
|
|
|
|
|
OR Z280_INTWAIT << 6 ; SET INT ACK WAIT STATES |
|
|
|
|
|
OR Z280_IOWAIT ; SET I/O WAIT STATES |
|
|
|
|
|
LD L,A ; BACK TO L |
|
|
|
|
|
;LDCTL (C),HL ; SET IT |
|
|
|
|
|
.DB $ED,$6E |
|
|
|
|
|
; |
|
|
|
|
|
LD C,Z280_BTIR ; BUS TIMING AND INIT REG |
|
|
|
|
|
;LDCTL HL,(C) ; GET IT |
|
|
|
|
|
.DB $ED,$66 |
|
|
|
|
|
LD A,L ; PUT IN A |
|
|
|
|
|
AND %11110011 ; CLEAR DC AND I/O FIELDS |
|
|
|
|
|
OR Z280_MEMWAIT << 2 ; SET LOW MEM WAIT STATES |
|
|
|
|
|
LD L,A ; BACK TO L |
|
|
|
|
|
;LDCTL (C),HL ; SET IT |
|
|
|
|
|
.DB $ED,$6E |
|
|
|
|
|
; |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
#IF (INTMODE == 2) |
|
|
#IF (INTMODE == 2) |
|
|
; SETUP Z80 IVT AND INT MODE 2 |
|
|
; SETUP Z80 IVT AND INT MODE 2 |
|
|
LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS |
|
|
LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS |
|
|
@ -1483,6 +1530,33 @@ HB_SPDTST: |
|
|
CALL PRTHEXBYTE |
|
|
CALL PRTHEXBYTE |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
CALL PRTSTRD |
|
|
|
|
|
.TEXT ", BUS @ $" |
|
|
|
|
|
LD C,Z280_BTIR ; BUS TIMING AND CTL REG |
|
|
|
|
|
;LDCTL HL,(C) ; GET IT |
|
|
|
|
|
.DB $ED,$66 |
|
|
|
|
|
LD A,L ; MOVE TO A |
|
|
|
|
|
AND %00000011 ; ISOLATE CS FIELD |
|
|
|
|
|
LD HL,(CB_CPUKHZ) ; GET CPU SPEED |
|
|
|
|
|
CP %00000001 ; BUS @ 1/1 |
|
|
|
|
|
JR Z,HB_Z280BUS ; GOT IT, SHOW IT |
|
|
|
|
|
SRL H ; DIVIDE |
|
|
|
|
|
RR L ; ... BY 2 |
|
|
|
|
|
CP %00000000 ; BUS @ 1/2 |
|
|
|
|
|
JR Z,HB_Z280BUS ; GOT IT, SHOW IT |
|
|
|
|
|
SRL H ; DIVIDE |
|
|
|
|
|
RR L ; ... BY 2 |
|
|
|
|
|
CP %00000010 ; BUS @ 1/4 |
|
|
|
|
|
JR Z,HB_Z280BUS ; GOT IT, SHOW IT |
|
|
|
|
|
PRTS("???$") ; INVALID VALUE |
|
|
|
|
|
JR HB_Z280BUS1 ; CONTINUE |
|
|
|
|
|
HB_Z280BUS: |
|
|
|
|
|
CALL PRTD3M ; PRINT AS DECIMAL WITH 3 DIGIT MANTISSA |
|
|
|
|
|
HB_Z280BUS1: |
|
|
|
|
|
PRTS("MHz$") ; SUFFIX |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
; DISPLAY CPU CONFIG |
|
|
; DISPLAY CPU CONFIG |
|
|
; |
|
|
; |
|
|
CALL NEWLINE |
|
|
CALL NEWLINE |
|
|
@ -1506,12 +1580,21 @@ HB_SPDTST: |
|
|
CALL PRTDECB |
|
|
CALL PRTDECB |
|
|
CALL PRTSTRD |
|
|
CALL PRTSTRD |
|
|
.TEXT " I/O W/S$" |
|
|
.TEXT " I/O W/S$" |
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
CALL PRTSTRD |
|
|
|
|
|
.TEXT ", $" |
|
|
|
|
|
LD A,Z280_INTWAIT |
|
|
|
|
|
CALL PRTDECB |
|
|
|
|
|
CALL PRTSTRD |
|
|
|
|
|
.TEXT " INT W/S$" |
|
|
|
|
|
#ENDIF |
|
|
#IF (INTMODE > 0) |
|
|
#IF (INTMODE > 0) |
|
|
CALL PRTSTRD |
|
|
CALL PRTSTRD |
|
|
.TEXT ", INT MODE $" |
|
|
.TEXT ", INT MODE $" |
|
|
LD A,INTMODE |
|
|
LD A,INTMODE |
|
|
CALL PRTDECB |
|
|
CALL PRTDECB |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
|
|
|
; |
|
|
; |
|
|
; DISPLAY MEMORY CONFIG |
|
|
; DISPLAY MEMORY CONFIG |
|
|
; |
|
|
; |
|
|
@ -1529,19 +1612,25 @@ HB_SPDTST: |
|
|
CALL NEWLINE |
|
|
CALL NEWLINE |
|
|
PRTS("Z280: $") |
|
|
PRTS("Z280: $") |
|
|
PRTS("MSR=$") |
|
|
PRTS("MSR=$") |
|
|
LD C,$00 ; MASTER STATUS REGISTER |
|
|
|
|
|
|
|
|
LD C,Z280_MSR ; MASTER STATUS REGISTER |
|
|
;LDTCL HL,(C) ; GET VALUE |
|
|
;LDTCL HL,(C) ; GET VALUE |
|
|
.DB $ED,$66 |
|
|
.DB $ED,$66 |
|
|
CALL PRTHEXWORDHL |
|
|
CALL PRTHEXWORDHL |
|
|
CALL PC_SPACE |
|
|
CALL PC_SPACE |
|
|
PRTS("BTCR=$") |
|
|
PRTS("BTCR=$") |
|
|
LD C,$02 ; BUS TIMING AND CONTROL REGISTER |
|
|
|
|
|
|
|
|
LD C,Z280_BTCR ; BUS TIMING AND CONTROL REGISTER |
|
|
|
|
|
;LDTCL HL,(C) ; GET VALUE |
|
|
|
|
|
.DB $ED,$66 |
|
|
|
|
|
CALL PRTHEXWORDHL |
|
|
|
|
|
CALL PC_SPACE |
|
|
|
|
|
PRTS("BTIR=$") |
|
|
|
|
|
LD C,Z280_BTIR ; BUS TIMING AND CONTROL REGISTER |
|
|
;LDTCL HL,(C) ; GET VALUE |
|
|
;LDTCL HL,(C) ; GET VALUE |
|
|
.DB $ED,$66 |
|
|
.DB $ED,$66 |
|
|
CALL PRTHEXWORDHL |
|
|
CALL PRTHEXWORDHL |
|
|
CALL PC_SPACE |
|
|
CALL PC_SPACE |
|
|
PRTS("CCR=$") |
|
|
PRTS("CCR=$") |
|
|
LD C,$12 ; CACHE CONTROL REGISTER |
|
|
|
|
|
|
|
|
LD C,Z280_CCR ; CACHE CONTROL REGISTER |
|
|
;LDTCL HL,(C) ; GET VALUE |
|
|
;LDTCL HL,(C) ; GET VALUE |
|
|
.DB $ED,$66 |
|
|
.DB $ED,$66 |
|
|
CALL PRTHEXWORDHL |
|
|
CALL PRTHEXWORDHL |
|
|
@ -2840,15 +2929,34 @@ SYS_SETSECS: |
|
|
; |
|
|
; |
|
|
SYS_PEEK: |
|
|
SYS_PEEK: |
|
|
#IF (INTMODE == 1) |
|
|
#IF (INTMODE == 1) |
|
|
;LD A,I |
|
|
|
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
PUSH IY |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
LD C,Z280_MSR |
|
|
|
|
|
;LDCTL IY,(C) |
|
|
|
|
|
.DB $FD,$ED,$66 |
|
|
|
|
|
PUSH IY |
|
|
DI |
|
|
DI |
|
|
;PUSH AF |
|
|
|
|
|
|
|
|
#ELSE |
|
|
|
|
|
LD A,I |
|
|
|
|
|
DI |
|
|
|
|
|
PUSH AF |
|
|
|
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
CALL HBX_PEEK ; IMPLEMENTED IN PROXY |
|
|
CALL HBX_PEEK ; IMPLEMENTED IN PROXY |
|
|
#IF (INTMODE == 1) |
|
|
#IF (INTMODE == 1) |
|
|
;POP AF |
|
|
|
|
|
;JP PO,$+4 |
|
|
|
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
LD C,Z280_MSR |
|
|
|
|
|
POP IY |
|
|
|
|
|
;LDCTL (C),IY |
|
|
|
|
|
.DB $FD,$ED,$6E |
|
|
|
|
|
POP IY |
|
|
|
|
|
#ELSE |
|
|
|
|
|
POP AF |
|
|
|
|
|
JP PO,$+4 |
|
|
EI |
|
|
EI |
|
|
|
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
XOR A |
|
|
XOR A |
|
|
RET |
|
|
RET |
|
|
@ -2862,15 +2970,96 @@ SYS_PEEK: |
|
|
; |
|
|
; |
|
|
SYS_POKE: |
|
|
SYS_POKE: |
|
|
#IF (INTMODE == 1) |
|
|
#IF (INTMODE == 1) |
|
|
|
|
|
|
|
|
|
|
|
;EI |
|
|
|
|
|
; |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
;.DB $ED,$66 |
|
|
|
|
|
;CALL PC_SPACE |
|
|
|
|
|
;CALL PRTHEXWORDHL |
|
|
|
|
|
; |
|
|
|
|
|
;CALL PC_SPACE |
|
|
;LD A,I |
|
|
;LD A,I |
|
|
DI |
|
|
|
|
|
;PUSH AF |
|
|
;PUSH AF |
|
|
|
|
|
;POP HL |
|
|
|
|
|
;CALL PRTHEXWORDHL |
|
|
|
|
|
; |
|
|
|
|
|
;DI |
|
|
|
|
|
; |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
;.DB $ED,$66 |
|
|
|
|
|
;CALL PC_SPACE |
|
|
|
|
|
;CALL PRTHEXWORDHL |
|
|
|
|
|
; |
|
|
|
|
|
;CALL PC_SPACE |
|
|
|
|
|
;LD A,I |
|
|
|
|
|
;PUSH AF |
|
|
|
|
|
;POP HL |
|
|
|
|
|
;CALL PRTHEXWORDHL |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
;OUT (DIAGPORT),A |
|
|
|
|
|
;DI |
|
|
|
|
|
;HALT |
|
|
|
|
|
; |
|
|
|
|
|
;;PUSH HL |
|
|
|
|
|
;;;LD C,$00 |
|
|
|
|
|
;;LD C,Z280_MSR |
|
|
|
|
|
;;LDCTL HL,(C) |
|
|
|
|
|
;;BIT 5,L |
|
|
|
|
|
;;POP HL |
|
|
|
|
|
;;PUSH AF |
|
|
|
|
|
;;DI |
|
|
|
|
|
; |
|
|
|
|
|
;;POP AF |
|
|
|
|
|
;;JP Z,$+4 |
|
|
|
|
|
;;EI |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
;;PUSH IY |
|
|
|
|
|
;;;LD C,$00 |
|
|
|
|
|
;;LD C,Z280_MSR |
|
|
|
|
|
;;LDCTL IY,(C) |
|
|
|
|
|
;;PUSH IY |
|
|
|
|
|
;;DI |
|
|
|
|
|
; |
|
|
|
|
|
;;;LD C,$00 |
|
|
|
|
|
;;LD C,Z280_MSR |
|
|
|
|
|
;;POP IY |
|
|
|
|
|
;;LDCTL (C),IY |
|
|
|
|
|
;;POP IY |
|
|
|
|
|
|
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
PUSH IY |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
LD C,Z280_MSR |
|
|
|
|
|
;LDCTL IY,(C) |
|
|
|
|
|
.DB $FD,$ED,$66 |
|
|
|
|
|
PUSH IY |
|
|
|
|
|
DI |
|
|
|
|
|
#ELSE |
|
|
|
|
|
LD A,I |
|
|
|
|
|
DI |
|
|
|
|
|
PUSH AF |
|
|
|
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
CALL HBX_POKE ; IMPLEMENTED IN PROXY |
|
|
CALL HBX_POKE ; IMPLEMENTED IN PROXY |
|
|
#IF (INTMODE == 1) |
|
|
#IF (INTMODE == 1) |
|
|
;POP AF |
|
|
|
|
|
;JP PO,$+4 |
|
|
|
|
|
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
|
|
;LD C,$00 |
|
|
|
|
|
LD C,Z280_MSR |
|
|
|
|
|
POP IY |
|
|
|
|
|
;LDCTL (C),IY |
|
|
|
|
|
.DB $FD,$ED,$6E |
|
|
|
|
|
POP IY |
|
|
|
|
|
#ELSE |
|
|
|
|
|
POP AF |
|
|
|
|
|
JP PO,$+4 |
|
|
EI |
|
|
EI |
|
|
|
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
XOR A |
|
|
XOR A |
|
|
RET |
|
|
RET |
|
|
|