|
|
|
@ -67,14 +67,14 @@ MODCNT .SET MODCNT + 1 |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
#IF ((PLATFORM == PLT_RCZ80) | (PLATFORM == PLT_RCZ180)) |
|
|
|
#DEFINE DIAGP $00 |
|
|
|
#ENDIF |
|
|
|
;#IF ((PLATFORM == PLT_RCZ80) | (PLATFORM == PLT_RCZ180)) |
|
|
|
;#DEFINE DIAGPORT $00 |
|
|
|
;#ENDIF |
|
|
|
; |
|
|
|
#IFDEF DIAGP |
|
|
|
#IF (DIAGENABLE) |
|
|
|
#DEFINE DIAG(N) PUSH AF |
|
|
|
#DEFCONT \ LD A,N |
|
|
|
#DEFCONT \ OUT (DIAGP),A |
|
|
|
#DEFCONT \ OUT (DIAGPORT),A |
|
|
|
#DEFCONT \ POP AF |
|
|
|
#ELSE |
|
|
|
#DEFINE DIAG(N) \; |
|
|
|
@ -301,7 +301,7 @@ HBX_ROM: |
|
|
|
HBX_ROM: |
|
|
|
RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K |
|
|
|
OUT (MPGSEL_0),A ; BANK_0: 0K - 16K |
|
|
|
;OUT (DIAGP),A ; *DEBUG* |
|
|
|
;OUT (DIAGPORT),A ; *DEBUG* |
|
|
|
INC A ; |
|
|
|
OUT (MPGSEL_1),A ; BANK_1: 16K - 32K |
|
|
|
RET ; DONE |
|
|
|
@ -774,9 +774,9 @@ HB_START: |
|
|
|
DI ; NO INTERRUPTS |
|
|
|
IM 1 ; INTERRUPT MODE 1 |
|
|
|
; |
|
|
|
#IFDEF DIAGP |
|
|
|
#IF (DIAGENABLE) |
|
|
|
LD A,%00000001 |
|
|
|
OUT (DIAGP),A |
|
|
|
OUT (DIAGPORT),A |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY |
|
|
|
@ -1347,6 +1347,15 @@ PSCNX .EQU $ + 1 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF 0 |
|
|
|
HB_SPDTST: |
|
|
|
CALL HB_CPUSPD ; CPU SPEED DETECTION |
|
|
|
CALL NEWLINE |
|
|
|
LD HL,(CB_CPUKHZ) |
|
|
|
CALL PRTD3M ; PRINT AS DECIMAL WITH 3 DIGIT MANTISSA |
|
|
|
JR HB_SPDTST |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
HB_EI ; INTERRUPTS SHOULD BE OK NOW |
|
|
|
; |
|
|
|
@ -2405,7 +2414,7 @@ HB_BADINT: |
|
|
|
LD HL,HB_BADINTCNT |
|
|
|
INC (HL) |
|
|
|
LD A,(HL) |
|
|
|
OUT (DIAGP),A |
|
|
|
OUT (DIAGPORT),A |
|
|
|
OR $FF |
|
|
|
RET |
|
|
|
HB_BADINTCNT .DB 0 |
|
|
|
@ -2732,7 +2741,7 @@ SIZ_MD .EQU $ - ORG_MD |
|
|
|
.ECHO SIZ_MD |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|
|
|
|
#IF (FDENABLE) |
|
|
|
ORG_FD .EQU $ |
|
|
|
#INCLUDE "fd.asm" |
|
|
|
@ -2741,7 +2750,7 @@ SIZ_FD .EQU $ - ORG_FD |
|
|
|
.ECHO SIZ_FD |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|
|
|
|
#IF (RFENABLE) |
|
|
|
ORG_RF .EQU $ |
|
|
|
#INCLUDE "rf.asm" |
|
|
|
@ -2750,7 +2759,7 @@ SIZ_RF .EQU $ - ORG_RF |
|
|
|
.ECHO SIZ_RF |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|
|
|
|
#IF (IDEENABLE) |
|
|
|
ORG_IDE .EQU $ |
|
|
|
#INCLUDE "ide.asm" |
|
|
|
@ -2759,7 +2768,7 @@ SIZ_IDE .EQU $ - ORG_IDE |
|
|
|
.ECHO SIZ_IDE |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|
|
|
|
#IF (PPIDEENABLE) |
|
|
|
ORG_PPIDE .EQU $ |
|
|
|
#INCLUDE "ppide.asm" |
|
|
|
@ -2768,7 +2777,7 @@ SIZ_PPIDE .EQU $ - ORG_PPIDE |
|
|
|
.ECHO SIZ_PPIDE |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|
|
|
|
#IF (SDENABLE) |
|
|
|
ORG_SD .EQU $ |
|
|
|
#INCLUDE "sd.asm" |
|
|
|
@ -2777,7 +2786,7 @@ SIZ_SD .EQU $ - ORG_SD |
|
|
|
.ECHO SIZ_SD |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|
|
|
|
#IF (HDSKENABLE) |
|
|
|
ORG_HDSK .EQU $ |
|
|
|
#INCLUDE "hdsk.asm" |
|
|
|
@ -2786,7 +2795,7 @@ SIZ_HDSK .EQU $ - ORG_HDSK |
|
|
|
.ECHO SIZ_HDSK |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|
|
|
|
#IF (TERMENABLE) |
|
|
|
ORG_TERM .EQU $ |
|
|
|
#INCLUDE "term.asm" |
|
|
|
@ -2813,7 +2822,6 @@ SIZ_AY .EQU $ - ORG_AY |
|
|
|
.ECHO SIZ_AY |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (PIO_4P | PIO_ZP | PPI_SBC) |
|
|
|
ORG_PIO .EQU $ |
|
|
|
#INCLUDE "pio.asm" |
|
|
|
@ -2822,15 +2830,7 @@ SIZ_PIO .EQU $ - ORG_PIO |
|
|
|
.ECHO SIZ_PIO |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (UFENABLE) |
|
|
|
ORG_UF .EQU $ |
|
|
|
#INCLUDE "usbfifo.asm" |
|
|
|
SIZ_UF .EQU $ - ORG_UF |
|
|
|
.ECHO "USB-FIFO occupies " |
|
|
|
.ECHO SIZ_UF |
|
|
|
.ECHO " bytes.\n" |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; |
|
|
|
#DEFINE USEDELAY |
|
|
|
#INCLUDE "util.asm" |
|
|
|
@ -2867,42 +2867,39 @@ HB_CPUSPD: |
|
|
|
RET NZ |
|
|
|
; |
|
|
|
HB_CPUSPD1: |
|
|
|
; LD B,8 |
|
|
|
;HB_CPUSPDX: |
|
|
|
; PUSH BC |
|
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RCZ180)) |
|
|
|
; USE MEM W/S = 2 AND I/O W/S = 3 FOR TEST |
|
|
|
IN0 A,(Z180_DCNTL) |
|
|
|
PUSH AF |
|
|
|
LD A,$B0 |
|
|
|
;LD A,$F0 |
|
|
|
OUT0 (Z180_DCNTL),A |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; WAIT FOR AN INITIAL TICK TO ALIGN, THEN WAIT |
|
|
|
; FOR SECOND TICK AND TO GET A FULL ONE SECOND LOOP COUNT |
|
|
|
|
|
|
|
CALL HB_RDSEC ; GET SECONDS |
|
|
|
LD (HB_CURSEC),A ; AND INIT CURSEC |
|
|
|
CALL HB_WAITSEC ; WAIT FOR SECONDS TICK |
|
|
|
LD (HB_CURSEC),A ; SAVE NEW VALUE |
|
|
|
CALL HB_WAITSEC ; WAIT FOR SECONDS TICK |
|
|
|
|
|
|
|
; PUSH DE |
|
|
|
; POP BC |
|
|
|
; CALL NEWLINE |
|
|
|
; CALL PRTHEXWORD |
|
|
|
|
|
|
|
; POP BC |
|
|
|
; DJNZ HB_CPUSPDX |
|
|
|
; |
|
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RCZ180)) |
|
|
|
; RESTORE W/S SETTINGS FROM BEFORE TEST |
|
|
|
POP AF |
|
|
|
OUT0 (Z180_DCNTL),A |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD A,H |
|
|
|
OR L |
|
|
|
RET Z ; FAILURE, USE DEFAULT CPU SPEED |
|
|
|
|
|
|
|
; |
|
|
|
; MOVE LOOP COUNT TO HL |
|
|
|
PUSH DE |
|
|
|
POP HL |
|
|
|
; |
|
|
|
; TIMES 4 FOR CPU SPEED IN KHZ |
|
|
|
RES 0,L ; GRANULARITY |
|
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RCZ180)) |
|
|
|
SLA L |
|
|
|
RL H |
|
|
|
#ENDIF |
|
|
|
; RES 0,L ; GRANULARITY |
|
|
|
SLA L |
|
|
|
RL H |
|
|
|
SLA L |
|
|
|
@ -2921,60 +2918,47 @@ HB_WAITSEC: |
|
|
|
; RETURN SECS VALUE IN A, LOOP COUNT IN DE |
|
|
|
LD DE,0 ; INIT LOOP COUNTER |
|
|
|
HB_WAITSEC1: |
|
|
|
; |
|
|
|
#IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_ZETA) | (PLATFORM == PLT_ZETA2) | (PLATFORM == PLT_RCZ80) | (PLATFORM == PLT_EZZ80)) |
|
|
|
; LOOP TARGET IS 4000 T-STATES, SO CPU FREQ IN KHZ = LOOP COUNT * 4 |
|
|
|
CALL DLY32 |
|
|
|
CALL DLY8 |
|
|
|
CALL DLY2 |
|
|
|
JP $ + 3 ; 10 TSTATES |
|
|
|
JP $ + 3 ; 10 TSTATES |
|
|
|
JP $ + 3 ; 10 TSTATES |
|
|
|
JP $ + 3 ; 10 TSTATES |
|
|
|
;LD A,R ; 9 TSTATES |
|
|
|
INC BC ; 6 TSTATES |
|
|
|
;LD A,(BC) ; 7 TSTATES |
|
|
|
;NOP ; 4 TSTATES |
|
|
|
NOP ; 4 TSTATES |
|
|
|
CALL DLY16 |
|
|
|
CALL DLY1 ; 27 TSTATES |
|
|
|
SBC HL,HL ; 15 TSTATES |
|
|
|
SBC HL,HL ; 15 TSTATES |
|
|
|
INC HL ; 6 TSTATES |
|
|
|
INC HL ; 6 TSTATES |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; |
|
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RCZ180)) |
|
|
|
; LOOP TARGET IS 8000 T-STATES, SO CPU FREQ IN KHZ = LOOP COUNT * 8 |
|
|
|
;CALL DLY64 |
|
|
|
CALL DLY32 |
|
|
|
CALL DLY16 |
|
|
|
CALL DLY8 |
|
|
|
CALL DLY4 |
|
|
|
; LOOP TARGET IS 4000 T-STATES, SO CPU FREQ IN KHZ = LOOP COUNT * 4 |
|
|
|
CALL DLY2 |
|
|
|
CALL DLY1 ; CALL (25TS) & RET (18TS) = 43TS |
|
|
|
OR A ; 7 TSTATES |
|
|
|
OR A ; 7 TSTATES |
|
|
|
;OR A ; 7 TSTATES |
|
|
|
;OR A ; 7 TSTATES |
|
|
|
NOP ; 6 TSTATES |
|
|
|
;NOP ; 6 TSTATES |
|
|
|
;NOP ; 6 TSTATES |
|
|
|
;NOP ; 6 TSTATES |
|
|
|
;NOP ; 6 TSTATES |
|
|
|
ADD IX,BC ; 10 + 4 = 14 TSTATES |
|
|
|
NOP ; 5 TSTATES |
|
|
|
NOP ; 5 TSTATES |
|
|
|
NOP ; 5 TSTATES |
|
|
|
NOP ; 5 TSTATES |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
PUSH DE |
|
|
|
PUSH DE ; SAVE COUNTER |
|
|
|
CALL HB_RDSEC ; GET SECONDS |
|
|
|
POP DE |
|
|
|
POP DE ; RESTORE COUNTER |
|
|
|
INC DE ; BUMP COUNTER |
|
|
|
LD HL,HB_CURSEC ; POINT TO COMP VALUE |
|
|
|
CP (HL) ; TEST FOR CHANGE |
|
|
|
RET NZ ; DONE IF TICK OCCURRED |
|
|
|
LD A,D ; CHECK HL |
|
|
|
LD A,D ; CHECK DE |
|
|
|
OR E ; ... FOR OVERFLOW |
|
|
|
RET Z ; TIMEOUT, SOMETHING IS WRONG |
|
|
|
JR HB_WAITSEC1 ; LOOP |
|
|
|
; |
|
|
|
HB_RDSEC: |
|
|
|
; READ SECONDS BYTE INTO A |
|
|
|
LD C,$81 ; SECONDS REGISTER |
|
|
|
LD E,$81 ; SECONDS REGISTER |
|
|
|
CALL DSRTC_CMD ; SEND THE COMMAND |
|
|
|
CALL DSRTC_GET ; READ THE REGISTER |
|
|
|
CALL DSRTC_END ; FINISH IT |
|
|
|
LD A,E ; VALUE TO A |
|
|
|
RET |
|
|
|
; |
|
|
|
#ELSE |
|
|
|
@ -3776,6 +3760,8 @@ HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER |
|
|
|
; |
|
|
|
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG |
|
|
|
; |
|
|
|
RTCVAL .DB 0 ; SHADOW VALUE FOR RTC LATCH PORT |
|
|
|
; |
|
|
|
STR_BANNER .DB "RetroBrew HBIOS v", BIOSVER, ", ", TIMESTAMP, "$" |
|
|
|
STR_PLATFORM .DB PLATFORM_NAME, "$" |
|
|
|
STR_SWITCH .DB "*** Activating CRT Console ***$" |
|
|
|
|