Browse Source

Fix Bugs

- Initial Z280 work caused some regression.
pull/143/head
Wayne Warthen 6 years ago
parent
commit
fbfd1e6cb9
  1. 6
      Source/HBIOS/Config/RCZ280_ext.asm
  2. 1
      Source/HBIOS/cfg_master.asm
  3. 1
      Source/HBIOS/cfg_rcz280.asm
  4. 253
      Source/HBIOS/hbios.asm
  5. 6
      Source/HBIOS/std.asm
  6. 13
      Source/HBIOS/z280.inc
  7. 2
      Source/ver.inc
  8. 2
      Source/ver.lib

6
Source/HBIOS/Config/RCZ280_ext.asm

@ -26,10 +26,14 @@
; ;
#include "cfg_rcz280.asm" #include "cfg_rcz280.asm"
; ;
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ
; ;
INTMODE .SET 1 INTMODE .SET 1
; ;
Z280_MEMWAIT .SET 0 ; Z280: MEMORY WAIT STATES (0-3)
Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3)
;
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)

1
Source/HBIOS/cfg_master.asm

@ -42,6 +42,7 @@ Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
; ;
Z280_MEMWAIT .EQU 0 ; Z280: MEMORY WAIT STATES (0-3) Z280_MEMWAIT .EQU 0 ; Z280: MEMORY WAIT STATES (0-3)
Z280_IOWAIT .EQU 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) Z280_IOWAIT .EQU 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
Z280_INTWAIT .EQU 0 ; Z280: INT ACK WAIT STATUS (0-3)
; ;
N8_PPI0 .EQU $80 ; N8: FIRST PARALLEL PORT REGISTERS BASE ADR N8_PPI0 .EQU $80 ; N8: FIRST PARALLEL PORT REGISTERS BASE ADR
N8_PPI1 .EQU $84 ; N8: SECOND PARALLEL PORT REGISTERS BASE ADR N8_PPI1 .EQU $84 ; N8: SECOND PARALLEL PORT REGISTERS BASE ADR

1
Source/HBIOS/cfg_rcz280.asm

@ -37,6 +37,7 @@ MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY)
; ;
Z280_MEMWAIT .EQU 0 ; Z280: MEMORY WAIT STATES (0-3) Z280_MEMWAIT .EQU 0 ; Z280: MEMORY WAIT STATES (0-3)
Z280_IOWAIT .EQU 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) Z280_IOWAIT .EQU 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
Z280_INTWAIT .EQU 0 ; Z280: INT ACK WAIT STATUS (0-3)
; ;
RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR
; ;

253
Source/HBIOS/hbios.asm

@ -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

6
Source/HBIOS/std.asm

@ -330,6 +330,9 @@ FORCECON .EQU 0 ; DEFAULT IS TO FOLLOW NORMAL SEQUENCE
#IF (CPUFAM == CPU_Z180) #IF (CPUFAM == CPU_Z180)
#INCLUDE "z180.inc" #INCLUDE "z180.inc"
#ENDIF #ENDIF
#IF (CPUFAM == CPU_Z280)
#INCLUDE "z280.inc"
#ENDIF
#ENDIF #ENDIF
; ;
; SETUP DEFAULT CPU SPEED VALUES ; SETUP DEFAULT CPU SPEED VALUES
@ -345,6 +348,9 @@ CPUKHZ .SET CPUKHZ / 2 ; ADJUST FOR HALF SPEED OPERATION
CPUKHZ .SET CPUKHZ * 2 ; ADJUST FOR DOUBLE SPEED OPERATION CPUKHZ .SET CPUKHZ * 2 ; ADJUST FOR DOUBLE SPEED OPERATION
#ENDIF #ENDIF
#ENDIF #ENDIF
#IF (CPUFAM == CPU_Z280)
CPUKHZ .SET CPUKHZ / 2 ; Z180 PHI IS ALWAYS 1/2 OSC
#ENDIF
#ENDIF #ENDIF
; ;
CPUMHZ .EQU CPUKHZ / 1000 ; CPU FREQ IN MHZ CPUMHZ .EQU CPUKHZ / 1000 ; CPU FREQ IN MHZ

13
Source/HBIOS/z280.inc

@ -0,0 +1,13 @@
;
; Z280 REGISTERS
;
Z280_MSR .EQU $00 ; MASTER STATUS REG
Z280_ISR .EQU $16 ; INTERRUPT STATUS REG
Z280_VPR .EQU $06 ; INT/TRAP VECT PTR REG
Z280_IOPR .EQU $08 ; I/O PAGE REG
Z280_BTIR .EQU $FF ; BUS TIMING & INIT REG
Z280_BTCR .EQU $02 ; BUS TIMING & CONTROL REG
Z280_SLR .EQU $04 ; STACK LIMIT REG
Z280_TCR .EQU $10 ; TRAP CONTROL REG
Z280_CCR .EQU $12 ; CACHE CONTROL REG
Z280_LAR .EQU $14 ; LOCAL ADDRESS REG

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.19"
#DEFINE BIOSVER "3.1.1-pre.20"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.19"
db "3.1.1-pre.20"
endm endm

Loading…
Cancel
Save