Browse Source

Resync

pull/38/head
b1ackmai1er 7 years ago
parent
commit
12c99e9144
  1. 138
      Source/HBIOS/hbios.asm

138
Source/HBIOS/hbios.asm

@ -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 ***$"

Loading…
Cancel
Save