Z280 Cleanup

- Z280 UART MODE command support
- BNKCALL handles calls into HBIOS using system mode
This commit is contained in:
Wayne Warthen
2021-01-30 16:17:34 -08:00
parent 8fa14863f8
commit 8945580ff5
7 changed files with 56 additions and 47 deletions

View File

@@ -130,6 +130,7 @@ ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG
ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG
;
Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM)
Z2UOSC .EQU 1843200 ; Z2U: OSC FREQUENCY IN MHZ
Z2U0BASE .EQU $10 ; Z2U 0: BASE I/O ADDRESS
Z2U0CFG .EQU DEFSERCFG ; Z2U 0: SERIAL LINE CONFIG
;

View File

@@ -103,6 +103,7 @@ UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
;
Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM)
Z2UOSC .EQU 1843200 ; Z2U: OSC FREQUENCY IN MHZ
Z2U0BASE .EQU $10 ; Z2U 0: BASE I/O ADDRESS
Z2U0CFG .EQU DEFSERCFG ; Z2U 0: SERIAL LINE CONFIG
;

View File

@@ -588,54 +588,29 @@ HBX_BC_ITER:
HBX_BNKCALL:
;
#IF (MEMMGR == MM_Z280)
JR HBX_BNKCALL2
CP BID_BIOS ; CALLING HBIOS?
JR NZ,HBX_BNKCALL2 ; NOPE, DO NORMAL PROCESSING
;PUSH AF
;LD A,'['
;.DB $ED,$71 ; SC
;.DW COUT ; SC PARAMETER
;POP AF
;
;LD A,(HB_CURBNK) ; GET CURRENT BANK
;LD (HB_INVBNK),A ; SAVE INVOCATION BANK
;
;LD A,BID_BIOS ; HBIOS BANK
;LD (HB_CURBNK),A ; SET AS CURRENT BANK
LD (HBX_BNKCALL1+2),IX ; SETUP TARGET ADDRESS
HBX_BNKCALL1:
JR NZ,HBX_BNKCALL3 ; NOPE, DO NORMAL PROCESSING
.DB $ED,$71 ; SC
.DW $FFFF ; SC PARAMETER (SET ABOVE)
;PUSH AF
;LD A,']'
;.DB $ED,$71 ; SC
;.DW COUT ; SC PARAMETER
;POP AF
;PUSH AF
;LD A,(HB_INVBNK)
;LD (HB_CURBNK),A
;POP AF
RET
#ENDIF
.DW HBX_BNKCALL2 ; CALL HERE IN SYSTEM MODE
RET ; THEN RETURN
HBX_BNKCALL2:
LD (HBX_TGTBNK),A ; STUFF TARGET BANK TO CALL INTO CODE BELOW
LD (HBX_TGTADR),IX ; STUFF ADDRESS TO CALL INTO CODE BELOW
HB_EI ; INTS ARE OK
LD (HBX_BNKCALL_GO+1),IX ; SETUP DEST ADR
.DB $ED,$65 ; PCACHE (CRITICAL!!!)
HBX_BNKCALL_GO:
JP $FFFF ; DO THE REAL WORK AND RETURN
#ENDIF
HBX_BNKCALL3:
LD (HBX_BNKCALL_BNK+1),A ; STUFF TARGET BANK TO CALL INTO CODE BELOW
LD (HBX_BNKCALL_ADR+1),IX ; STUFF ADDRESS TO CALL INTO CODE BELOW
LD A,(HB_CURBNK) ; GET CURRENT BANK
PUSH AF ; SAVE FOR RETURN
HBX_TGTBNK .EQU $ + 1
HBX_BNKCALL_BNK:
LD A,$FF ; LOAD BANK TO CALL ($FF OVERLAID AT ENTRY)
CALL HBX_BNKSEL ; ACTIVATE THE NEW BANK
HBX_TGTADR .EQU $ + 1
HBX_BNKCALL_ADR:
CALL $FFFF ; CALL ROUTINE ($FFFF IS OVERLAID ABOVE)
EX (SP),HL ; SAVE HL AND GET BANK TO RESTORE IN HL
PUSH AF ; SAVE AF
@@ -4390,7 +4365,7 @@ W_MMU1:
.DB $ED,$BF ; OUTW (C),HL
W_MMU2:
;.DB $ED,$65 ; PCACHE
LD L,0 ; RESTORE I/O PAGE REG TO 0
LD L,$00 ; RESTORE I/O PAGE REG TO 0
LD C,Z280_IOPR
.DB $ED,$6E ; LDCTL (C),HL
POP BC
@@ -4450,7 +4425,7 @@ Z2DMALOOP:
JR NZ,Z2DMALOOP ; LOOP WHILE ACTIVE
; RETURN TO I/O PAGE $00
XOR A ; I/O PAGE ZERO
LD L,$00 ; RESTORE I/O PAGE REG TO 0
LD C,Z280_IOPR ; I/O PAGE REGISTER
.DB $ED,$6E ; LDCTL (C),HL

View File

@@ -410,21 +410,53 @@ Z2U_OST:
; CAN AVOID ENABLING/DISABLING INTS.
;
Z2U_INITDEV:
Z2U_INITSAFE:
HB_DI ; DISABLE INTS
CALL Z2U_INITDEVX ; DO THE WORK
HB_EI ; INTS BACK ON
RET ; DONE
;
Z2U_INITSAFE:
LD E,%11000010 ; 8N0, DIV 16, NO C/T
JR Z2U_INITDEV2 ; YES, DO IT
;
Z2U_INITDEVX:
;
LD A,D ; HIWORD OF CONFIG
AND $1F ; ISOLATE BAUD RATE
PUSH AF
;
LD DE,Z2UOSC >> 16 ; BAUD OSC HI WORD
LD HL,Z2UOSC & $FFFF ; BAUD OSC LO WORD
LD C,75 ; BAUD RATE ENCODE CONSTANT
CALL ENCODE ; C = ENCODED OSC
POP DE ; D = UART OSC
JR NZ,Z2U_INITFAIL ; HANDLE ENCODE FAILURE
LD A,C ; TO A
SUB D ; DIV W/ SUB OF SQUARES
;
LD E,%11000010 ; 8N0, DIV 16, NO C/T
CP 4 ; DIV 16?
JR Z,Z2U_INITDEV2 ; YES, DO IT
LD E,%11000100 ; 8N0, DIV 32, NO C/T
CP 5 ; DIV 32?
JR Z,Z2U_INITDEV2 ; YES, DO IT
LD E,%11000110 ; 8N0, DIV 64, NO C/T
CP 6 ; DIV 64?
JR Z,Z2U_INITDEV2 ; YES, DO IT
;
Z2U_INITFAIL:
OR $FF ; SIGNAL ERROR
RET ; AND DONE
;
Z2U_INITDEV2:
; START BY SELECTING I/O PAGE $FE
LD L,$FE ; Z280 UART REGISTERS AT I/O PAGE $FE
LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER
.DB $ED,$6E ; LDCTL (C),HL
;
; SETUP
LD A,%11000010 ; 8N0, DIV 16, NO C/T
;LD A,%11000010 ; 8N0, DIV 16, NO C/T
LD A,E ; CONFIG VALUE
OUT (Z280_UARTCFG),A ; SET CONFIG REGISTER
LD A,%10000000 ; ENABLE, NO INTS, 1 STOP BITS
OUT (Z280_UARTXCTL),A ; SET CONFIG REGISTER

View File

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

View File

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