Interrupt framework implementation

- Interrupt framework
- Documentation in progress w/ Latex conversion
This commit is contained in:
Wayne Warthen
2016-07-10 21:55:00 -07:00
parent c478a04b48
commit e350aa0672
56 changed files with 3355 additions and 233 deletions

View File

@@ -283,8 +283,8 @@ DPBCNT .EQU ($ - DPBMAP) / 2
;__________________________________________________________________________________________________
BOOT:
; STANDARD BOOT INVOCATION
DI
IM 1
;DI
;IM 1
LD SP,STACK ; STACK FOR INITIALIZATION
;
CALL INIT ; EXECUTE COLD BOOT ROUTINE
@@ -301,11 +301,13 @@ BOOT:
REBOOT:
; REBOOT FROM ROM, REPLACES BOOT AFTER INIT
#IFDEF PLTUNA
DI ; NO INTERRUPTS
LD BC,$01FB ; UNA FUNC = SET BANK
LD DE,0 ; ROM BOOT BANK
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
#ENDIF
#IFDEF PLTWBW
DI ; NO INTERRUPTS
LD A,0 ; ROM BOOT BANK
CALL HB_BNKSEL ; SELECT IT INTO LOW MEMORY
#ENDIF
@@ -315,8 +317,8 @@ REBOOT:
;
;__________________________________________________________________________________________________
WBOOT:
DI
IM 1
;DI
;IM 1
;
LD SP,STACK ; STACK FOR INITIALIZATION
;
@@ -1083,7 +1085,6 @@ BLK_BLOCK:
LDIR
RET
#ELSE
;LD B,BF_SYSXCPY ; HBIOS FUNC: SYSTEM EXTENDED COPY
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD A,(BNKUSER) ; GET USER BANK
LD E,A ; E = SOURCE (USER BANK)
@@ -1092,13 +1093,9 @@ BLK_BLOCK:
LD HL,128 ; HL = COPY LEN = DMA BUFFER SIZE
RST 08 ; DO IT
CALL BLK_SETUP ; SETUP SOURCE AND DESTINATION
;LD B,BF_SYSCPY ; HBIOS FUNC: SYSTEM COPY
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
EX DE,HL ; SWAP HL/DE FOR BLOCK OPERATION
;PUSH IX ; SAVE IX
;LD IX,128 ; DMA BUFFER SIZE
RST 08 ; DO IT
;POP IX ; RESTORE IX
RET
#ENDIF
;
@@ -1113,18 +1110,13 @@ BLK_DEBLOCK:
LDIR
RET
#ELSE
;LD B,BF_SYSXCPY ; HBIOS FUNC: SYSTEM EXTENDED COPY
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD DE,(BNKBIOS) ; E = SOURCE (BIOS BANK), D = DEST (USER BANK)
LD HL,128 ; HL = COPY LEN = DMA BUFFER SIZE
RST 08 ; DO IT
CALL BLK_SETUP ; SETUP SOURCE AND DESTINATION
;LD B,BF_SYSCPY ; HBIOS FUNC: SYSTEM COPY
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
;PUSH IX ; SAVE IX
;LD IX,128 ; DMA BUFFER SIZE
RST 08 ; DO IT
;POP IX ; RESTORE IX
RET
#ENDIF
;
@@ -1809,6 +1801,8 @@ HEAPEND .EQU CBIOS_END - 64 ; TOP OF HEAP MEM, END OF CBIOS LESS 32 ENTRY STACK
.FILL 16 * 16,0 ; SKIP DPH TABLE AREA
;
INIT:
DI ; NO INTERRUPTS FOR NOW
; ADJUST BOOT VECTOR TO REBOOT ROUTINE
LD HL,REBOOT ; GET REBOOT ADDRESS
LD (CBIOS_LOC + 1),HL ; STORE IT IN FIRST ENTRY OF CBIOS JUMP TABLE
@@ -1819,50 +1813,56 @@ INIT:
LD DE,BID_USR ; SWITCH BACK TO EXEC BANK
CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED)
; COPY BIOS PAGE ZERO TO USER BANK
LD BC,$01FB ; UNA FUNC = SET BANK
LD DE,BID_BIOS ; UBIOS_PAGE (SEE PAGES.INC)
CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED)
PUSH DE ; SAVE PREVIOUS BANK
LD HL,0 ; FROM ADDRESS 0 (PAGE ZERO)
LD DE,SECBUF ; USE SECBUF AS BOUNCE BUFFER
LD BC,256 ; ONE PAGE IS 256 BYTES
LDIR ; DO IT
LD BC,$01FB ; UNA FUNC = SET BANK
POP DE ; RECOVER OPERATING BANK
CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED)
LD HL,SECBUF ; FROM SECBUF (BUNCE BUFFER)
LD DE,0 ; TO PAGE ZERO OF OPERATING BANK
LD BC,256 ; ONE PAGE IS 256 BYTES
LDIR ; DO IT
; INSTALL UNA INVOCATION VECTOR FOR RST 08
LD A,$C3 ; JP INSTRUCTION
LD (8),A ; STORE AT 0x0008
LD HL,($FFFE) ; UNA ENTRY VECTOR
LD (9),HL ; STORE AT 0x0009
#ELSE
; GET CRITICAL BANK ID'S
LD B,BF_SYSGET ; HBIOS FUNC=GET SYS INFO
LD C,BF_SYSGET_BNKINFO ; HBIOS SUBFUNC=GET BANK ASSIGNMENTS
CALL $FFF0 ; CALL HBIOS, RST 08 NOT YET INSTALLED
RST 08 ; CALL HBIOS
LD A,D ; GET HBIOS BANK RETURNED IN D
LD (BNKBIOS),A ; ... AND SAVE IT
LD A,E ; GET USER BANK RETURNED IN E
LD (BNKUSER),A ; ... AND SAVE IT
; MAKE SURE USER BANK IS ACTIVE
LD B,BF_SYSSETBNK ; HB FUNC: SET BANK
LD A,(BNKUSER) ; SELECT USER BANK
LD C,A ; PUT IN C
CALL $FFF0 ; RST 8 IS NOT YET INSTALLED
; INSTALL HBIOS INVOCATION VECTOR FOR RST 08
LD A,$C3 ; JP INSTRUCTION
LD (8),A ; STORE AT 0x0008
LD HL,($FFF1) ; HBIOS ENTRY VECTOR
LD (9),HL ; STORE AT 0x0009
; SOFT REST HBIOS
; SOFT RESET HBIOS
LD B,BF_SYSRESET ; HB FUNC: RESET
RST 08 ; DO IT
; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB)
; FOR REFERENCE USE DURING INIT
;LD B,BF_SYSXCPY ; HBIOS FUNC: SYSTEM EXTENDED COPY
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD DE,(BNKBIOS) ; D = DEST (USER BANK), E = SOURCE (BIOS BANK)
LD HL,HCB_SIZ ; HL = COPY LEN = SIZE OF HCB
RST 08 ; DO IT
;LD B,BF_SYSCPY ; HBIOS FUNC: SYSTEM COPY
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
LD HL,HCB_LOC ; COPY FROM FIXED LOCATION IN HB BANK
LD DE,HCB ; TO TEMP LOCATION IN USR BANK
;LD IX,HCB_SIZ ; COPY CONTENTS OF HCB
RST 08 ; DO IT
; CAPTURE RAM DRIVE STARTING BANK
LD A,(HCB + HCB_BIDRAMD0)
LD (BNKRAMD),A
@@ -2131,6 +2131,7 @@ MD_INIT4:
; FILL FIRST 8K OF RAM DISK TRACK 1 WITH 'E5'
;
#IF (CLRRAMDISK != CLR_NEVER)
DI ; NO INTERRUPTS
LD BC,$01FB ; UNA FUNC = SET BANK
LD DE,BID_RAMD0 ; FIRST BANK OF RAM DISK
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
@@ -2176,6 +2177,7 @@ CLRRAM3:
LD BC,$01FB ; UNA FUNC = SET BANK
LD DE,BID_USR ; SWITCH BACK TO EXEC BANK
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
EI ; RESUME INTERRUPTS
#ENDIF
@@ -2185,10 +2187,9 @@ CLRRAM3:
; FILL FIRST 8K OF RAM DISK TRACK 1 WITH 'E5'
;
#IF (CLRRAMDISK != CLR_NEVER)
LD B,BF_SYSSETBNK ; HBIOS FUNC: SET BANK
DI ; NO INTERRUPTS
LD A,(BNKRAMD) ; FIRST BANK OF RAM DISK
LD C,A ; ... TO C
CALL $FFF0 ; DO IT (RST 08 NOT SAFE)
CALL HB_BNKSEL ; SELECT BANK
#IF (CLRRAMDISK == CLR_AUTO)
; CHECK FIRST 32 DIRECTORY ENTRIES. IF ANY START WITH AN INVALID
@@ -2211,26 +2212,21 @@ CLRRAM1:
JR CLRRAM3 ; ALL ENTRIES VALID, BYPASS INIT
CLRRAM2:
#ENDIF
LD B,BF_SYSSETBNK ; HBIOS FUNC: SET BANK
LD A,(BNKUSER) ; SWITCH BACK TO USER BANK
LD C,A ; ... TO REG C
CALL $FFF0 ; DO IT (RST 08 NOT SAFE)
CALL HB_BNKSEL ; SELECT BANK
CALL NEWLINE2 ; FORMATTING
LD DE,STR_INITRAMDISK ; RAM DISK INIT MESSAGE
CALL WRITESTR ; DISPLAY IT
LD B,BF_SYSSETBNK ; HBIOS FUNC: SET BANK
LD A,(BNKRAMD) ; SWITCH BACK TO FIRST BANK
LD C,A ; ... TO REG C
CALL $FFF0 ; DO IT (RST 08 NOT SAFE)
CALL HB_BNKSEL ; SELECT BANK
LD HL,0 ; SOURCE ADR FOR FILL
LD BC,$2000 ; LENGTH OF FILL IS 8K
LD A,$E5 ; FILL VALUE
CALL FILL ; DO IT
CLRRAM3:
LD B,BF_SYSSETBNK ; HBIOS FUNC: SET BANK
LD A,(BNKUSER) ; USR BANK (TPA)
LD C,A ; ... TO REG C
CALL $FFF0 ; DO IT (RST 08 NOT SAFE)
CALL HB_BNKSEL ; SELECT BANK
EI ; RESUME INTRRUPTS
#ENDIF
;
#ENDIF

View File

@@ -8,6 +8,7 @@
CPUOSC .EQU 18432000 ; CPU OSC FREQ
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!!
DEFSERCFG .EQU SER_38400_8N1 ; DEFAULT SERIAL LINE CONFIG (SHOULD MATCH ABOVE)
INTTYPE .EQU IT_Z180 ; INTERRUPT HANDLING TYPE (IT_NONE, IT_SIMH, IT_Z180, IT_CTC, ...)
;
CRTACT .EQU FALSE ; CRT ACTIVATION AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...)

View File

@@ -8,6 +8,7 @@
CPUOSC .EQU 18432000 ; CPU OSC FREQ
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!!
DEFSERCFG .EQU SER_38400_8N1 ; DEFAULT SERIAL LINE CONFIG (SHOULD MATCH ABOVE)
INTTYPE .EQU IT_Z180 ; INTERRUPT HANDLING TYPE (IT_NONE, IT_SIMH, IT_Z180, IT_CTC, ...)
;
CRTACT .EQU FALSE ; CRT ACTIVATION AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...)

View File

@@ -8,6 +8,7 @@
CPUOSC .EQU 8000000 ; CPU OSC FREQ
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!!
DEFSERCFG .EQU SER_38400_8N1 ; DEFAULT SERIAL LINE CONFIG (SHOULD MATCH ABOVE)
INTTYPE .EQU IT_NONE ; INTERRUPT HANDLING TYPE (IT_NONE, IT_SIMH, IT_Z180, IT_CTC, ...)
;
CRTACT .EQU FALSE ; CRT ACTIVATION AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...)

View File

@@ -8,6 +8,7 @@
CPUOSC .EQU 20000000 ; CPU OSC FREQ
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!!
DEFSERCFG .EQU SER_38400_8N1 ; DEFAULT SERIAL LINE CONFIG (SHOULD MATCH ABOVE)
INTTYPE .EQU IT_NONE ; INTERRUPT HANDLING TYPE (IT_NONE, IT_SIMH, IT_Z180, IT_CTC, ...)
;
CRTACT .EQU FALSE ; CRT ACTIVATION AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...)

View File

@@ -7,4 +7,6 @@
;
#INCLUDE "Config/plt_zeta.asm" ; USE ZETA CONFIG TO START
;
INTTYPE .SET IT_CTC ; INTERRUPT HANDLING TYPE (IT_NONE, IT_SIMH, IT_Z180, IT_CTC, ...)
;
FDMODE .SET FDMODE_ZETA2 ; FDMODE_DIO, FDMODE_ZETA, FDMODE_DIDE, FDMODE_N8, FDMODE_DIO3

View File

@@ -5,6 +5,8 @@
;
CPUOSC .SET 20000000 ; EMULATOR RUNS FAST...
;
INTTYPE .SET IT_SIMH
;
SIMRTCENABLE .SET TRUE
DSRTCENABLE .SET FALSE
;

View File

@@ -428,7 +428,7 @@ ASCI_CNTLB:
;CALL TSTPT
RET NZ ; ABORT ON ERROR
PUSH HL ; HL HAS (BAUD / 75), SAVE IT
LD HL,(HCB + HCB_CPUKHZ) ; GET CPU CLK IN KHZ
LD HL,(CB_CPUKHZ) ; GET CPU CLK IN KHZ
;LD HL,CPUKHZ ; CPU CLK IN KHZ
;LD HL,9216 ; *DEBUG*

View File

@@ -182,7 +182,7 @@ DSRTC_GETTIM:
LD HL,DSRTC_TIMBUF ; SOURCE ADR
POP DE ; DEST ADR
LD BC,6 ; LENGTH IS 6 BYTES
CALL BNKCPY ; COPY THE CLOCK DATA
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
;
; CLEAN UP AND RETURN
XOR A ; SIGNAL SUCCESS
@@ -207,7 +207,7 @@ DSRTC_SETTIM:
LD (HB_DSTBNK),A ; SET IT
LD DE,DSRTC_TIMBUF ; DEST ADR
LD BC,6 ; LENGTH IS 6 BYTES
CALL BNKCPY ; COPY THE CLOCK DATA
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
;
; WRITE TO CLOCK
LD HL,DSRTC_TIMBUF ; POINT TO TIME BUFFER

View File

@@ -49,6 +49,7 @@
#INCLUDE "std.asm"
;
; MAKE SURE EXACTLY ONE OF ROMBOOT, APPBOOT, IMGBOOT IS DEFINED.
;
MODCNT .EQU 0
#IFDEF ROMBOOT
MODCNT .SET MODCNT + 1
@@ -65,19 +66,28 @@ MODCNT .SET MODCNT + 1
#ENDIF
;
;
;
#IF (INTTYPE != IT_NONE)
#DEFINE HB_EI EI
#DEFINE HB_DI DI
#ELSE
#DEFINE HB_EI ;
#DEFINE HB_DI ;
#ENDIF
;
#IFNDEF APPBOOT
;
.ORG 0
;
;==================================================================================================
; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE
; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE, LEAVE INTERRUPTS DISABLED
;==================================================================================================
;
.FILL (000H - $),0FFH ; RST 0
JP HB_START
.DW ROM_SIG
.FILL (008H - $),0FFH ; RST 8
JP HB_DISPATCH
JP HBX_INVOKE ; INVOKE HBIOS FUNCTION
.FILL (010H - $),0FFH ; RST 10
RET
.FILL (018H - $),0FFH ; RST 18
@@ -88,7 +98,7 @@ MODCNT .SET MODCNT + 1
RET
.FILL (030H - $),0FFH ; RST 30
RET
.FILL (038H - $),0FFH ; INT
.FILL (038H - $),0FFH ; RST 38 / INT
RETI
.FILL (066H - $),0FFH ; NMI
RETN
@@ -106,7 +116,7 @@ ROM_SIG:
;
NAME .DB "ROMWBW v", BIOSVER, ", ", TIMESTAMP, 0
AUTH .DB "WBW",0
DESC .DB "ROMWBW v", BIOSVER, ", Copyright 2015, Wayne Warthen, GNU GPL v3", 0
DESC .DB "ROMWBW v", BIOSVER, ", Copyright (C) 2015, Wayne Warthen, GNU GPL v3", 0
;
.FILL ($100 - $),$FF ; PAD REMAINDER OF PAGE ZERO
;
@@ -171,18 +181,16 @@ CB_BIDROMDN .DB BID_ROMDN
.ORG HBX_LOC ; ADJUST FOR RELOCATION
;
; MEMORY LAYOUT:
;
; HBIOS PROXY CODE $FE00 (256 BYTES)
; INTERRUPT VECTORS $FF00 (32 BYTES, 16 ENTRIES)
; HBIOS PROXY COPY BUFFER $FF20 (128 BYTES)
; HBIOS PROXY PRIVATE STACK $FFA0 (64 BYTES, 32 ENTRIES)
; INTERRUPT HANDLER STUBS $FF20 (128 BYTES)
; HBIOS PROXY COPY BUFFER $FF80 (64 BYTES)
; HBIOS PROXY MGMT BLOCK $FFE0 (32 BYTES)
;
; DEFINITIONS
;
HBX_CODSIZ .EQU $100 ; 256 BYTE CODE SPACE
HBX_IVTSIZ .EQU $20 ; INT VECTOR TABLE SIZE (16 ENTRIES)
HBX_BUFSIZ .EQU $80 ; INTERBANK COPY BUFFER
HBX_STKSIZ .EQU $40 ; PRIVATE STACK SIZE
HBX_BUFSIZ .EQU $40 ; INTERBANK COPY BUFFER
;
; HBIOS IDENTIFICATION DATA BLOCK
;
@@ -197,24 +205,28 @@ HBX_IDENT:
;
HBX_INVOKE:
LD (HBX_STKSAV),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_STACK ; SETUP NEW STACK FRAME
LD A,(HB_CURBNK) ; GET CURRENT BANK
LD (HBX_INVBNK),A ; SETUP TO RESTORE AT EXIT
HB_DI
LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM
LD A,BID_BIOS ; HBIOS BANK
CALL HBX_BNKSEL ; SELECT IT
LD SP,HB_STACK ; NOW USE FULL HBIOS STACK IN HBIOS BANK
HB_EI
CALL HB_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER
HB_DI
LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM
PUSH AF ; SAVE AF (FUNCTION RETURN)
LD A,$FF ; LOAD ORIGINAL BANK ($FF IS REPLACED AT ENTRY)
HBX_INVBNK .EQU $ - 1
CALL HBX_BNKSEL ; SELECT IT
POP AF ; RESTORE AF
LD SP,0 ; RESTORE ORIGINAL STACK FRAME
HBX_STKSAV .EQU $ - 2
HB_EI
RET ; RETURN TO CALLER
;
@@ -222,11 +234,14 @@ HBX_STKSAV .EQU $ - 2
;; SETBNK - Switch Memory Bank to Bank in A.
;; Preserve all Registers including Flags.
;; Does NOT update current bank.
;; Interrupts should be disabled by caller
;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
HBX_BNKSEL:
LD (HB_CURBNK),A ; RECORD NEW CURRENT BANK
;
HBX_BNKSEL_INT:
;
#IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_ZETA))
OUT (MPCL_ROM),A ; SET ROM PAGE SELECTOR
OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR
@@ -294,6 +309,10 @@ HBX_BNKSEL1:
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
HBX_BNKCPY:
HB_DI
LD (HBX_BC_SP),SP
LD SP,HBX_STACK
LD A,(HB_CURBNK) ; GET CURRENT BANK
PUSH AF ; AND SAVE TO RESTORE LATER
PUSH BC ; CUR LEN -> (SP)
@@ -316,7 +335,11 @@ HBX_BC_LAST:
POP BC ; BC := REM LEN
CALL NZ,HBX_BC_ITER ; DO FINAL CHUNK, BUT ONLY IF NOT ZERO BYTES
POP AF ; RECOVER ORIGINAL BANK
JP HBX_BNKSEL ; SWITCH TO CURRENT BANK AND EXIT
CALL HBX_BNKSEL ; SWITCH TO CURRENT BANK AND EXIT
LD SP,$FFFF
HBX_BC_SP .EQU $ - 2
HB_EI
RET
;
HBX_BC_ITER:
; HL = SRC ADR, DE = DEST ADR, BC = LEN
@@ -342,6 +365,7 @@ HBX_BC_ITER:
; On input A=target bank, HL=target address
;
HBX_BNKCALL:
HB_DI
LD (HBX_TGTBNK),A ; stuff target bank to call into code below
LD (HBX_TGTADR),HL ; stuff address to call into code below
LD A,(HB_CURBNK) ; get current bank
@@ -349,17 +373,82 @@ HBX_BNKCALL:
HBX_TGTBNK .EQU $ + 1
LD A,$FF ; load bank to call ($FF overlaid at entry)
CALL HBX_BNKSEL ; activate the new bank
HB_EI
HBX_TGTADR .EQU $ + 1
CALL $FFFF ; call routine ($FFFF is overlaid above)
HB_DI
EX (SP),HL ; save hl and get bank to restore in hl
PUSH AF ; save af
LD A,H ; bank to restore to a
CALL HBX_BNKSEL ; restore it
POP AF ; recover af
POP HL ; recover hl
HB_EI
RET
;
; INTERRUPT HANDLER DISPATCHING
; PEEK & POKE ROUTINES
; ADDRESS IN HL, BANK IN D, VALUE IN/OUT IN E, A IS TRASHED
;
HBX_PEEK:
HB_DI
LD A,(HB_CURBNK)
PUSH AF
LD A,D
CALL HBX_BNKSEL
LD E,(HL)
JR HBX_PPRET
;
HBX_POKE:
HB_DI
LD A,(HB_CURBNK)
PUSH AF
LD A,D
CALL HBX_BNKSEL
LD (HL),E
;
HBX_PPRET:
POP AF
CALL HBX_BNKSEL
HB_EI
RET
;
; PRIVATE STACK AT END OF HBIOS CODE
; OCCUPIES SPACE BEFORE IVT
;
HBX_STKSIZ .EQU $FF00 - $
.ECHO "HBIOS STACK space: "
.ECHO HBX_STKSIZ
.ECHO " bytes.\n"
.FILL HBX_STKSIZ,$FF
HBX_STACK .EQU $
;
; HBIOS INTERRUPT VECTOR TABLE (16 ENTRIES)
;
HBX_IVT:
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
;
; INTERRUPT HANDLER STUBS
;
; THE FOLLOWING INTERRUPT STUBS RECEIVE CONTROL FROM THE
; INTERRUPT, SETUP A HANDLER VECTOR IN HBIOS AND THEN
; BRANCH TO THE COMMON INTERRUPT DISPATCHER
;
INT_TIMER: ; TIMER INTERRUPT HANDLER
PUSH HL ; SAVE HL
@@ -377,159 +466,49 @@ INT_BAD: ; BAD INTERRUPT HANDLER
HBX_INT: ; COMMON INTERRUPT ROUTING CODE
;
; SAVE STATE (ASSUMES HL SAVED PREVIOUSLY)
PUSH AF ; SAVE AF
PUSH BC ; SAVE BC
PUSH DE ; SAVE DE
PUSH AF ; SAVE AF
PUSH BC ; SAVE BC
PUSH DE ; SAVE DE
; ACTIVATE BIOS BANK
#IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_ZETA))
LD A,BID_BIOS ; BIOS PAGE INDEX TO ACCUM
OUT (MPCL_ROM),A ; SET ROM PAGE SELECTOR
OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR
#ENDIF
#IF (PLATFORM == PLT_ZETA2)
LD A,(BID_BIOS - $80 + $10) * 2 ; BIOS BID -> PAGE INDEX -> A
OUT (MPGSEL_0),A ; BANK_0: 0K - 16K
INC A ;
OUT (MPGSEL_1),A ; BANK_1: 16K - 32K
#ENDIF
#IF (PLATFORM == PLT_N8)
LD A,(BID_BIOS << 3) & $FF ; BIOS BID -> BBR VAL -> A
OUT0 (Z180_BBR),A ; WRITE TO Z180 BANK BASE REG
LD A,N8_DEFACR | $80 ; BIT 7 SET FOR RAM
OUT0 (N8_ACR),A ; WRITE TO N8 ACR
#ENDIF
#IF (PLATFORM == PLT_MK4)
LD A,(BID_BIOS << 3) & $FF | $80 ; BIOS BID -> PAGE INDEX -> A
OUT0 (Z180_BBR),A ; WRITE TO Z180 BANK BASE REG
#ENDIF
LD (HBX_INT_SP),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM
LD A,BID_BIOS ; HBIOS BANK
CALL HBX_BNKSEL_INT ; SELECT IT
; SETUP INTERRUPT PROCESSING STACK IN HBIOS
LD (HB_INTSTKSAV),SP ; SAVE STACK POINTER
LD SP,HB_INTSTK ; SWITCH TO INTERRUPT STACK
LD SP,HB_ISTACK ; NOW USE INT STACK IN HBIOS BANK
; DO THE REAL WORK
CALL JPHL ; CALL INTERRUPT ROUTINE
CALL JPHL ; CALL INTERRUPT ROUTINE
; RESTORE STACK
LD SP,(HB_INTSTKSAV) ; RESTORE STACK
LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM
LD A,(HB_CURBNK) ; GET PRE-INT BANK
CALL HBX_BNKSEL ; SELECT IT
LD SP,$FFFF ; RESTORE ORIGINAL STACK FRAME
HBX_INT_SP .EQU $ - 2
; RESTORE BANK
LD A,(HB_CURBNK) ; GET PRE-INT BANK
;
#IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_ZETA))
OUT (MPCL_ROM),A ; SET ROM PAGE SELECTOR
OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR
#ENDIF
#IF (PLATFORM == PLT_ZETA2)
BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE
JR Z,HBX_INT1 ; NOT SET, SELECT ROM PAGE
RES 7,A ; RAM PAGE REQUESTED: CLEAR ROM BIT
ADD A,16 ; ADD 16 x 32K - RAM STARTS FROM 512K
;
HBX_INT1:
RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K
OUT (MPGSEL_0),A ; BANK_0: 0K - 16K
INC A ;
OUT (MPGSEL_1),A ; BANK_1: 16K - 32K
#ENDIF
#IF (PLATFORM == PLT_N8)
BIT 7,A ; TEST BIT 7 FOR RAM VS. ROM
JR Z,HBX_INT1 ; IF NOT SET, SELECT ROM PAGE
;
RES 7,A ; CLEAR BIT 7 FOR RAM VS. ROM
RLCA ; SCALE SELECTOR TO
RLCA ; ... GO FROM Z180 4K PAGE SIZE
RLCA ; ... TO DESIRED 32K PAGE SIZE
OUT0 (Z180_BBR),A ; WRITE TO BANK BASE
JR HBX_INT2 ; CONTINUE
;
HBX_INT1: ; SELECT ROM PAGE
XOR A ; ZERO ACCUM
OUT0 (Z180_BBR),A ; ZERO BANK BASE
LD A,N8_DEFACR ; SELECT ROM BY CLEARING BIT 7
OUT0 (N8_ACR),A ; ... IN N8 ACR REGISTER
;
HBX_INT2:
#ENDIF
#IF (PLATFORM == PLT_MK4)
RLCA ; RAM FLAG TO CARRY AND BIT 0
JR NC,HBX_INT1 ; IF NC, ROM, SKIP AHEAD
XOR %00100001 ; SET BIT FOR HI 512K, CLR BIT 0
HBX_INT1:
RLCA ; ROTATE
RLCA ; ... AGAIN
OUT0 (Z180_BBR),A ; WRITE TO BANK REGISTER
#ENDIF
;
; RESTORE STATE
POP DE ; RESTORE DE
POP BC ; RESTORE BC
POP AF ; RESTORE AF
POP HL ; RESTORE HL
; DONE
RETI ; IMPLICITLY REENABLES INTERRUPTS!
EI ; ENABLE INTERRUPTS
RETI ; AND RETURN
;
; PEEK & POKE ROUTINES
; ADDRESS IN HL, BANK IN D, VALUE IN/OUT IN E, A IS TRASHED
; FILL TO START OF BOUNCE BUFFER
;
HBX_PEEK:
LD A,(HB_CURBNK)
PUSH AF
LD A,D
CALL HBX_BNKSEL
LD E,(HL)
POP AF
JP HBX_BNKSEL
;
HBX_POKE:
LD A,(HB_CURBNK)
PUSH AF
LD A,D
CALL HBX_BNKSEL
LD (HL),E
POP AF
JP HBX_BNKSEL
;
; FILLER FOR UNUSED HBIOS PROXY CODE SPACE
; PAD TO START OF INTERRUPT VECTOR TABLE
;
HBX_SLACK .EQU (HBX_LOC + HBX_CODSIZ - $)
.ECHO "HBIOS PROXY space remaining: "
.ECHO HBX_SLACK
HBX_INTFILL .EQU (HBX_XFC - HBX_BUFSIZ - $)
.ECHO "HBIOS INT space remaining: "
.ECHO HBX_INTFILL
.ECHO " bytes.\n"
.FILL HBX_SLACK,$FF
.FILL HBX_INTFILL,$FF
;
; HBIOS INTERRUPT VECTOR TABLE (16 ENTRIES)
;
HBX_IVT:
.DW INT_TIMER
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
.DW INT_BAD
;
; INTERBANK COPY BUFFER (128 BYTES)
; INTERBANK COPY BUFFER (64 BYTES)
;
HBX_BUF .FILL HBX_BUFSIZ,0
;
; PRIVATE STACK (64 BYTES, 32 ENTRIES)
;
.FILL HBX_STKSIZ,$FF
HBX_STACK .EQU $
;
; HBIOS PROXY MGMT BLOCK (TOP 32 BYTES)
;
#IFDEF ROMBOOT
@@ -558,6 +537,8 @@ HBX_STACK .EQU $
; HBIOS CORE
;==================================================================================================
;
HB_STKSIZ .EQU $60 ; HBIOS PRIVATE STACK SIZE
HB_ISTKSIZ .EQU $40 ; HBIOS INTERRUPT STACK SIZE
;
;==================================================================================================
; ENTRY VECTORS (JUMP TABLE)
@@ -584,6 +565,10 @@ HB_START:
XOR A
OUT0 (Z180_RCR),A
; MASK OFF TIMER INTERRUPTS
XOR A
OUT0 (Z180_TCR),A
; SET DEFAULT CPU CLOCK MULTIPLIERS (XTAL / 2)
XOR A
OUT0 (Z180_CCR),A
@@ -656,7 +641,10 @@ HB_START:
LD HL,0
LD DE,0
LD BC,$8000
CALL HB_BNKCPY
CALL HBX_BNKCPY
;
; INTERRUPTS ARE ENABLED BY BNKCPY!!!
DI ; RE-DISABLE INTERRUPTS
;
; TRANSITION TO HBIOS IN RAM BANK
;
@@ -670,6 +658,10 @@ HB_RAMFLAG .DB FALSE ; ASSUME FALSE, SET TO TRUE BELOW AFTER RAM TRANSITION
; EXECUTION RESUMES HERE AFTER SWITCH TO RAM BANK
;
HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
;
; INTERRUPTS ARE ENABLED BY BNKCALL!!!
DI ; RE-DISABLE INTERRUTPS
;
LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN
LD A,TRUE ; ACCUM := TRUE
LD (HB_RAMFLAG),A ; SET RAMFLAG
@@ -719,6 +711,63 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
;
CALL NEWLINE2
PRTX(STR_BANNER)
;
; WE CAN HANDLE INTERRUPTS NOW (HOPEFULLY)
;
HB_DI ; START OF CRITICAL SECTION
#IF (INTTYPE != IT_NONE)
;
#IF (INTTYPE == IT_SIMH)
;
; SETUP TIMER INT VECTOR VIA INT MODE 1 IN PAGE ZERO
LD A,$C3 ; JP OPCODE
LD ($38),A ; ... AT INT VECTOR ADDRESS
LD HL,INT_TIMER ; ADDRESS OF TIMER INT HANDLER
LD ($39),HL ; ... IS TARGET OF JP
;
#ENDIF
;
#IF (INTTYPE == IT_Z180)
;
; SETUP Z180 IVT
LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS
LD I,A ; ... AND PLACE IT IN I REGISTER
XOR A ; SETUP LO BYTE OF IVT ADDRESS
OUT0 (Z180_IL),A ; ... AND PLACE IN Z180 IL REGISTER
;
IM 2 ; SWITCH TO INT MODE 2
;
; MASK ALL EXTERNAL INTERRUPTS FOR NOW
XOR A ; INT0-2 DISABLED
OUT0 (Z180_ITC),A ; WRITE TO INT/TRAP CONTROL REGISTER
;
; SETUP Z180 TIMER0 INTERRUPT VECTOR IN IVT
LD HL,INT_TIMER
LD (HBX_IVT + Z180_IVTIM0),HL
; SETUP PERIODIC TIMER INTERRUPT ON TIMER 0
LD HL,(CB_CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ
LD B,0
LD C,Z180_RLDR0L ; INITIALIZE TIMER 0 RELOAD REGISTER
OUT (C),L
INC C
OUT (C),H
LD C,Z180_TMDR0L ; INITIALIZE TIMER 0 DATA REGISTER
OUT (C),L
INC C
OUT (C),H
LD A,%00010001 ; ENABLE TIMER0 INT AND DOWN COUNTING
OUT0 (Z180_TCR),A
;
#ENDIF
;
#ENDIF
HB_EI ; END OF CRITICAL SECTION
;
; DISPLAY PLATFORM INFORMATION
;
CALL NEWLINE2
PRTX(STR_PLATFORM)
PRTS(" @ $")
@@ -788,13 +837,20 @@ INITSYS3:
;
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE
;
;
;
; CALL TSTPT
; LD HL,($FF00 + 2)
; CALL JPHL
; CALL TSTPT
;
; CHAIN TO OS LOADER
;
#IFDEF ROMBOOT
; PERFORM BANK CALL TO OS IMAGES BANK
LD A,BID_OSIMG ; CHAIN TO OS IMAGES BANK
LD HL,0 ; ENTER AT ADDRESS 0
CALL HB_BNKCALL ; GO THERE
CALL HBX_BNKCALL ; GO THERE
HALT ; WE SHOULD NEVER COME BACK!
#ELSE
; COPY OS IMAGE: BID_USR:<IMG START> --> BID_USR:0
@@ -804,12 +860,12 @@ INITSYS3:
LD HL,HB_END
LD DE,0
LD BC,$8000
CALL HB_BNKCPY
CALL HBX_BNKCPY
;
; PERFORM BANK CALL TO OS IMAGES BANK
LD A,BID_USR ; CHAIN TO OS IMAGES BANK
LD HL,0 ; ENTER AT ADDRESS 0
CALL HB_BNKCALL ; GO THERE
CALL HBX_BNKCALL ; GO THERE
HALT ; WE SHOULD NEVER COME BACK!
@@ -924,11 +980,11 @@ HB_DISPATCH:
;
; CHECK STACK INTEGRITY
PUSH AF
LD A,(HBX_STACK - HBX_STKSIZ + $08)
LD A,(HB_STACK - HB_STKSIZ + $08)
CP $FF
CALL NZ,PANIC
LD A,$FF
LD (HBX_STACK - HBX_STKSIZ + $08),A
LD (HB_STACK - HB_STKSIZ + $08),A
POP AF
RET
HB_DISPCALL:
@@ -1473,7 +1529,7 @@ SYS_BNKCPY:
;POP AF
; *DEBUG* END
CALL BNKCPY
CALL HBX_BNKCPY
XOR A
RET
;
@@ -1719,17 +1775,55 @@ CIO_IDLE:
; TIMER INTERRUPT
;
HB_TIMINT:
; INCREMENT TICK COUNTER (32 BIT)
LD HL,HB_TICKS ; POINT TO TICK COUNTER
INC (HL)
JR NZ,HB_TIMINT1
INC HL
INC (HL)
JR NZ,HB_TIMINT1
INC HL
INC (HL)
JR NZ,HB_TIMINT1
INC HL
INC (HL)
;
HB_TIMINT1:
;
#IF 0
;
LD HL,TEMPCNT
DEC (HL)
JR NZ,HB_TIMINT2
LD (HL),250
;
LD A,'*'
CALL COUT
JR HB_TIMINT2
;
TEMPCNT .DB 250
;
#ENDIF
;
HB_TIMINT2:
;
#IF (INTTYPE == IT_Z180)
; ACK/RESET INTERRUPT
IN0 A,(Z180_TCR)
IN0 A,(Z180_TMDR0L)
#ENDIF
;
RET
;
; BAD INTERRUPT HANDLER
;
HB_BADINT:
CALL NEWLINE2
PRTS("+++ BAD INT: $")
CALL _REGDMP
CALL CONTINUE
RET
;
; WRAPPER FOR CALL TO HB_BNKCPY FOR USE BY INTERNAL HBIOS FUNCTIONS
;
BNKCPY .EQU HB_BNKCPY
;
; ADD AN ENTRY TO THE UNIT TABLE AT ADDRESS IN HL
; C: DEVICE TYPE ID
; B: UNIT INDEX
@@ -2838,9 +2932,13 @@ HSTHEAD .DB 0 ; HEAD (0-255)
;
HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION
;
HB_INTSTKSAV .DW 0 ; SAVED STACK POINTER DURING INT PROCESSING
.FILL $40,$FF ; 32 ENTRY STACK FOR INTERRUPT PROCESSING
HB_INTSTK .EQU $ ; TOP OF INTERRUPT PROCESSING STACK
HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER
;
.FILL HB_STKSIZ,$FF ; 48 ENTRY STACK FOR HBIOS FUNCTION PROCESSING
HB_STACK .EQU $ ; TOP OF HBIOS STACK
;
.FILL HB_ISTKSIZ,$FF ; 32 ENTRY STACK FOR INTERRUPT PROCESSING
HB_ISTACK .EQU $ ; TOP OF INTERRUPT PROCESSING STACK
;
STR_BANNER .DB "RetroBrew HBIOS v", BIOSVER, ", ", TIMESTAMP, "$"
STR_PLATFORM .DB PLATFORM_NAME, "$"

View File

@@ -190,7 +190,7 @@ MD_READ:
LD A,B ; GET DESTINATION BANK
LD (HB_DSTBNK),A ; SET IT
POP BC
CALL BNKCPY ; DO THE INTERBANK COPY
CALL HBX_BNKCPY ; DO THE INTERBANK COPY
XOR A
RET
;
@@ -222,7 +222,7 @@ MD_WRITE:
LD A,B ; GET DESTINATION BANK
LD (HB_DSTBNK),A ; SET IT
POP BC
CALL BNKCPY ; DO THE INTERBANK COPY
CALL HBX_BNKCPY ; DO THE INTERBANK COPY
XOR A
RET
;

View File

@@ -76,7 +76,7 @@ PPK_INIT:
CALL PRTHEXBYTE
;
; PRECOMPUTE TIMEOUT LOOP COUNT (CPU KHZ / 16)
LD HL,(CPUKHZ) ; GET CPU SPEED IN KHZ
LD HL,(CB_CPUKHZ) ; GET CPU SPEED IN KHZ
LD B,4 ; SHIFT 4 TIMES TO DIVIDE BY 16
PPK_INIT1:
SRL H ; RIGHT SHIFT

View File

@@ -23,7 +23,7 @@ ZSYSIMG .EQU $5000
#IF (PLATFORM == PLT_UNA)
JP $FFFD ; INVOKE UBIOS FUNCTION
#ELSE
JP $FFF0 ; INVOKE HBIOS FUNCTION
JP HB_INVOKE ; INVOKE HBIOS FUNCTION
#ENDIF
.FILL (010H - $),0FFH ; RST 10
RET
@@ -47,8 +47,9 @@ ZSYSIMG .EQU $5000
; LOADER
;==================================================================================================
;
DI ; NO INTERRUPTS
IM 1 ; INTERRUPT MODE 1
;DI ; NO INTERRUPTS
;IM 1 ; INTERRUPT MODE 1
;
LD SP,BL_STACK ; SETUP STACK
;
; COPY OURSELVES TO HI RAM FOR PHASE 2
@@ -74,6 +75,19 @@ PHASE2:
CALL DELAY_INIT
#ENDIF
#IF (PLATFORM != PLT_UNA)
; PREP THE USER BANK (SETUP DEFAULT PAGE ZERO)
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD D,BID_USR ; D = DEST BANK = USER BANK
LD E,BID_BIOS ; E = SRC BANK = BIOS BANK
LD HL,256 ; HL = COPY LEN = 1 PAGE = 256 BYTES
RST 08 ; DO IT
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
LD HL,0 ; COPY FROM BIOS ADDRESS 0
LD DE,0 ; TO USER ADDRESS 0
RST 08 ; DO IT
#ENDIF
; RUN THE BOOT LOADER MENU
JP DOBOOTMENU
;
@@ -190,11 +204,13 @@ DB_INVALID:
;
GOMON:
CALL LDMON
JP MON_SERIAL
LD HL,MON_SERIAL ; JUMP TO MONITOR, SERIAL ENTRY
JR EXECUSR
;
GOMONDSKY:
CALL LDMON
JP MON_DSKY
LD HL,MON_DSKY
JR EXECUSR
;
LDMON:
LD DE,STR_BOOTMON
@@ -219,9 +235,6 @@ GOCPM2:
LD BC,$01FC ; UNA FUNC: SET BOOTSTRAP HISTORY
RST 08 ; CALL UNA
#ELSE
;LD B,BF_SYSHCBPUTW ; HB FUNC: PUT HCB WORD
;LD C,HCB_BOOTVOL ; BOOT VOLUME (UNIT, SLICE)
;LD DE,$0100
LD B,BF_SYSSET ; HB FUNC: SET HBIOS PARAMETER
LD C,BF_SYSSET_BOOTINFO ; HB SUBFUNC: SET BOOT INFO
LD A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA
@@ -229,7 +242,8 @@ GOCPM2:
LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE)
RST 08
#ENDIF
JP CPM_ENT
LD HL,CPM_ENT ; CPM ENTRY VECTOR
JR EXECUSR
;
GOZSYS:
LD DE,STR_BOOTZSYS
@@ -237,6 +251,15 @@ GOZSYS:
LD HL,ZSYSIMG
JR GOCPM2
;
EXECUSR:
#IF (PLATFORM == PLT_UNA)
JP (HL)
#ELSE
LD A,BID_USR ; WITH USER BANK ACTIVE
CALL HB_BNKCALL ; GO THERE
CALL PANIC ; WE ARE NOT SUPPOSED TO RETURN
#ENDIF
;
GOLIST:
LD DE,STR_LIST
CALL WRITESTR
@@ -352,7 +375,8 @@ BOOTDISK:
; JUMP TO COLD BOOT ENTRY
CALL NEWLINE ; FORMATTING
LD HL,(BB_CPMENT) ; GET THE ENTRY POINT
JP (HL) ; ... AND GO
;JP (HL) ; ... AND GO
JP EXECUSR ; ... AND GO
;
; PRINT LIST OF ALL DRIVES UNDER UNA
;
@@ -882,6 +906,11 @@ CIN:
;
CST:
; SAVE INCOMING REGISTERS (AF IS OUTPUT)
CALL DLY64
CALL DLY64
CALL DLY64
CALL DLY64
CALL DLY64
PUSH BC
PUSH DE
PUSH HL
@@ -889,6 +918,8 @@ CST:
; GET CONSOLE INPUT STATUS VIA HBIOS
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS
;XOR A ; *DEBUG*
;INC A ; *DEBUG*
RST 08 ; HBIOS RETURNS STATUS IN A
;
; RESTORE REGISTERS (AF IS OUTPUT)

View File

@@ -71,7 +71,7 @@ SIMRTC_GETTIM:
LD HL,SIMRTC_BUF ; SOURCE ADR
POP DE ; DEST ADR
LD BC,SIMRTC_BUFSIZ ; LENGTH
CALL BNKCPY ; COPY THE CLOCK DATA
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
;
LD DE,60 ; DELAY 60 * 16US = ~1MS
CALL VDELAY ; SLOW DOWN SIMH FOR CLOCK TICKING TEST
@@ -101,7 +101,7 @@ SIMRTC_SETTIM:
LD (HB_DSTBNK),A ; SET IT
LD DE,SIMRTC_BUF ; DEST ADR
LD BC,SIMRTC_BUFSIZ ; LENGTH
CALL BNKCPY ; COPY THE CLOCK DATA
CALL HBX_BNKCPY ; COPY THE CLOCK DATA
;
LD HL,SIMRTC_BUF ; POINT TO TEMP BUF
LD A,SIMRTC_CLKWRITE ; WRITE CLOCK COMMAND

View File

@@ -121,7 +121,7 @@ SER_PARSPACE .EQU 7 << 3
SER_STOP1 .EQU 0 << 2
SER_STOP2 .EQU 1 << 2
;
; SEREIAL BAUD RATES ENCODED AS V = 75 * 2^X * 3^Y
; SERIAL BAUD RATES ENCODED AS V = 75 * 2^X * 3^Y
; AND STORED AS 5 BITS: YXXXX
;
SER_BAUD300 .EQU $02 << 8
@@ -154,6 +154,13 @@ SER_115200_8N1 .EQU SER_BAUD115200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_230400_8N1 .EQU SER_BAUD230400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_460800_8N1 .EQU SER_BAUD460800 | SER_DATA8 | SER_PARNONE | SER_STOP1
;
; INTERRUPT TYPE OPTIONS
;
IT_NONE .EQU 0
IT_SIMH .EQU 1
IT_Z180 .EQU 2
IT_CTC .EQU 3
;
#INCLUDE "build.inc" ; INCLUDE USER CONFIG, ADD VARIANT, TIMESTAMP, & ROMSIZE
;
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4))

View File

@@ -2,4 +2,4 @@
#DEFINE RMN 8
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "2.8.0-pre.5"
#DEFINE BIOSVER "2.8.0-pre.6"

View File

@@ -65,3 +65,13 @@ Z180_CBAR .EQU Z180_BASE + $3A ; MMU COMMON/BANK AREA REGISTER
;
Z180_OMCR .EQU Z180_BASE + $3E ; OPERATION MODE CONTROL
Z180_ICR .EQU $3F ; I/O CONTROL REGISTER (NOT RELOCATED!!!)
;
Z180_IVINT1 .EQU 0
Z180_IVINT2 .EQU 2
Z180_IVTIM0 .EQU 4
Z180_IVTIM1 .EQU 6
Z180_IVDMA0 .EQU 8
Z180_IVDMA1 .EQU 10
Z180_IVCSIO .EQU 12
Z180_IVSER0 .EQU 14
Z180_IVSER1 .EQU 16