Browse Source

Merge pull request #18 from wwarthen/master

Resync
pull/49/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
866449c8ee
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Source/HBIOS/Config/RCZ80_kio.asm
  2. 1
      Source/HBIOS/cfg_ezz80.asm
  3. 1
      Source/HBIOS/cfg_master.asm
  4. 1
      Source/HBIOS/cfg_mk4.asm
  5. 1
      Source/HBIOS/cfg_n8.asm
  6. 1
      Source/HBIOS/cfg_rcz180.asm
  7. 1
      Source/HBIOS/cfg_rcz80.asm
  8. 1
      Source/HBIOS/cfg_sbc.asm
  9. 1
      Source/HBIOS/cfg_sc126.asm
  10. 1
      Source/HBIOS/cfg_zeta.asm
  11. 1
      Source/HBIOS/cfg_zeta2.asm
  12. 138
      Source/HBIOS/hbios.asm
  13. 18
      Source/HBIOS/romldr.asm

2
Source/HBIOS/Config/RCZ80_kio.asm

@ -40,6 +40,8 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
SIO0MODE .SET SIOMODE_EZZ80 ; SIO 0: CHIP TYPE: SIOMODE_[RC|SMB|ZP|EZZ80]
SIO0BASE .SET KIOBASE+$08 ; SIO 0: REGISTERS BASE ADR
SIO0ACLK .SET 1843200 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
SIO0BCLK .SET 1843200 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
;
FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|DIDE|N8|DIO3]

1
Source/HBIOS/cfg_ezz80.asm

@ -45,6 +45,7 @@ CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_master.asm

@ -63,6 +63,7 @@ CTCBASE .EQU $20 ; CTC BASE I/O ADDRESS
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_mk4.asm

@ -49,6 +49,7 @@ CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_n8.asm

@ -52,6 +52,7 @@ CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_rcz180.asm

@ -49,6 +49,7 @@ CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
;
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_rcz80.asm

@ -44,6 +44,7 @@ CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
;
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_sbc.asm

@ -41,6 +41,7 @@ CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_sc126.asm

@ -44,6 +44,7 @@ CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
;
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $0D ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_zeta.asm

@ -41,6 +41,7 @@ CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

1
Source/HBIOS/cfg_zeta2.asm

@ -45,6 +45,7 @@ CTCBASE .EQU $20 ; CTC BASE I/O ADDRESS
;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;

138
Source/HBIOS/hbios.asm

@ -995,7 +995,7 @@ HB_CPU1:
#IF (KIOENABLE)
LD A,%11111001 ; RESET ALL DEVICES, SET DAISYCHAIN
OUT (KIOBASE+$0E),A ; DO IT
CALL DLY64 ; WAIT A BIT FOR RESET TO COMPLETE
;CALL DLY64 ; WAIT A BIT FOR RESET TO COMPLETE
#ENDIF
;
; SETUP INTERRUPT VECTORS, AS APPROPRIATE
@ -1158,7 +1158,7 @@ HB_CPU1:
;
; FOR NOW, THIS IS SPECIFICALLY FOR A CTC TO DRIVE AN SIO
; AT 1:1 USING CTC CHANNELS A & B. IN OTHER WORDS, IT JUST
; PASSES THE INCOMING TRIGGER OUT AT 1:1. NO INTERRUPTS.
; PASSES THE INCOMING TRIGGER OUT AT 1:1.
;
#IF (CTCENABLE == TRUE)
;
@ -1206,7 +1206,7 @@ HB_CPU1:
LD A,0
OUT (CTCA),A ; SETUP CTC BASE INT VECTOR
;
; CTCC IS SLAVED (WIRED) TO TO CTCD TO ACT AS A PRESCALER
; CTCC IS SLAVED (WIRED) TO CTCD TO ACT AS A PRESCALER
; CONFIGURE CHANNEL D FOR 50HZ PERIODIC INTERRUPTS
; CTC CLK = 1,843,200HZ
; CTCC TIME CONSTANT = 256
@ -1280,7 +1280,7 @@ HB_CPU1:
LD DE,(CPUOSC / 2) / 1000
;
#IF (Z180_CLKDIV >= 1)
LD (HB_CPUTYPE),A ; CPU TYPE
LD A,(HB_CPUTYPE) ; GET CPU TYPE
CP 2 ; Z8S180 REV K OR BETTER?
JR C,HB_CPU2 ; IF NOT, NOT POSSIBLE!
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED
@ -1949,19 +1949,36 @@ DIO_TBL .FILL DIO_SIZ,0 ; SPACE FOR ENTRIES
;
; TOS=READ FN ADR
; HL=BUF ADR
; C=SEC COUNT
; E=SEC COUNT
; D=BUF BANK ID
;
HB_DSKREAD:
;
; THE ACTUAL SECTOR READ FUNCTION ADDRESS IS ON TOS, SAVE IT
EX (SP),HL ; SAVE HL TO TOS, HL := READ FN ADR
LD (HB_DSKFNADR),HL ; IMBED IN CALL OP BELOW
POP HL ; RECOVER HL
;
#IF (DIAGENABLE)
; SAVE DISK UNIT NUMBER BIT MASK
LD A,C ; GET DISK UNIT NUMBER
LD B,A ; PUT IN B FOR LOOP COUNTER
INC B ; LOOP ONE EXTRA TIME TO HANDLE UNIT=0
XOR A ; START WITH ACCUM ZERO
SCF ; ... AND CF SET
HB_DSKREAD0:
RLA ; ROTATE BIT
DJNZ HB_DSKREAD0 ; ... UNTIL IN PROPER LOCATION
LD (HB_DSKBIT),A ; SAVE IT FOR DIAGNOSTICS
#ENDIF
;
#IF 1
; CHECK TO SEE IF INTER-BANK I/O NEEDED. IF NOT
; WE JUST ABORT BACK TO DISK DRIVER TO HANDLE.
; CHECK TO SEE IF INTER-BANK I/O NEEDED.
BIT 7,H ; TGT BUF IN UPPER 32K?
RET NZ ; IF SO, NOTHING TO DO
JP NZ,HB_DSKIO ; IF SO, NON-BANKED
LD A,D ; GET TGT BANK
CP BID_BIOS ; BIOS BANK?
RET Z ; IF SO, NOTHING TO DO
JP Z,HB_DSKIO ; IF SO, NON-BANKED
#ENDIF
;
#IF 1
@ -1975,23 +1992,16 @@ HB_DSKREAD:
LD (HB_IOBUF),HL
LD A,D
LD (HB_IOBNK),A
;
; SETUP READ FN ADR
POP HL ; READ FN ADR IS AT TOS
LD (HB_DSKREADFN),HL ; IMBED IN CALL OP BELOW
;
; SETUP READ AND LOOP COUNT
LD B,E ; SEC LOOP COUNTER
LD C,0 ; SEC COMPLETE COUNTER
;
HB_DSKREAD1:
LD HL,HB_WRKBUF ; USE WORK BUF REAL I/O
;
; CALL READ FN
PUSH BC ; SAVE COUNTERS
LD E,1 ; ONE SECTOR
LD HL,HB_WRKBUF ; USE WORK BUF FOR DATA
HB_DSKREADFN .EQU $+1
CALL PANIC ; READ ONE SECTOR
POP BC ; RESTORE COUNTERS
CALL HB_DSKFN ; READ ONE SECTOR
;
; IF FAIL, RETURN ERR
JR NZ,HB_DSKREADX ; BAIL OUT ON ERROR
@ -2016,9 +2026,7 @@ HB_DSKREADFN .EQU $+1
;
HB_DSKREADX:
LD HL,(HB_IOBUF) ; NEXT BUF ADR
LD E,C ; READ COUNT TO E
OR A ; SET RESULT FLAGS
RET ; DONE
JR HB_DSKIOX ; DONE
;
;==================================================================================================
; DISK WRITE HELPER
@ -2029,19 +2037,36 @@ HB_DSKREADX:
;
; TOS=WRITE FN ADR
; HL=BUF ADR
; C=SEC COUNT
; E=SEC COUNT
; D=BUF BANK ID
;
HB_DSKWRITE:
;
; THE ACTUAL SECTOR READ FUNCTION ADDRESS IS ON TOS, SAVE IT
EX (SP),HL ; SAVE HL TO TOS, HL := READ FN ADR
LD (HB_DSKFNADR),HL ; IMBED IN CALL OP BELOW
POP HL ; RECOVER HL
;
#IF (DIAGENABLE)
; SAVE DISK UNIT NUMBER BIT MASK
LD A,C ; GET DISK UNIT NUMBER
LD B,A ; PUT IN B FOR LOOP COUNTER
INC B ; LOOP ONE EXTRA TIME TO HANDLE UNIT=0
XOR A ; START WITH ACCUM ZERO
SCF ; ... AND CF SET
HB_DSKWRITE0:
RLA ; ROTATE BIT
DJNZ HB_DSKWRITE0 ; ... UNTIL IN PROPER LOCATION
LD (HB_DSKBIT),A ; SAVE IT FOR DIAGNOSTICS
#ENDIF
;
#IF 1
; CHECK TO SEE IF INTER-BANK I/O NEEDED. IF NOT
; WE JUST ABORT BACK TO DISK DRIVER TO HANDLE.
; CHECK TO SEE IF INTER-BANK I/O NEEDED.
BIT 7,H ; TGT BUF IN UPPER 32K?
RET NZ ; IF SO, NOTHING TO DO
JP NZ,HB_DSKIO ; IF SO, NON-BANKED
LD A,D ; GET TGT BANK
CP BID_BIOS ; BIOS BANK?
RET Z ; IF SO, NOTHING TO DO
JP Z,HB_DSKIO ; IF SO, NON-BANKED
#ENDIF
;
#IF 1
@ -2055,10 +2080,6 @@ HB_DSKWRITE:
LD (HB_IOBUF),HL
LD A,D
LD (HB_IOBNK),A
;
; SETUP WRITE FN ADR
POP HL ; WRITE FN ADR IS AT TOS
LD (HB_DSKWRITEFN),HL ; IMBED IN CALL OP BELOW
;
; SETUP WRITE AND LOOP COUNT
LD B,E ; SEC LOOP COUNTER
@ -2079,12 +2100,8 @@ HB_DSKWRITE1:
POP BC ; RESTORE COUNTERS
;
; CALL WRITE FN
PUSH BC ; SAVE COUNTERS
LD E,1 ; ONE SECTOR
LD HL,HB_WRKBUF ; USE WORK BUF FOR DATA
HB_DSKWRITEFN .EQU $+1
CALL PANIC ; READ ONE SECTOR
POP BC ; RESTORE COUNTERS
LD HL,HB_WRKBUF ; WRITE FROM WORK BUFFER
CALL HB_DSKFN ; WRITE ONE SECTOR
;
; IF FAIL, RETURN ERR
JR NZ,HB_DSKWRITEX ; BAIL OUT ON ERROR
@ -2096,12 +2113,53 @@ HB_DSKWRITEFN .EQU $+1
;
HB_DSKWRITEX:
LD HL,(HB_IOBUF) ; NEXT BUF ADR
JR HB_DSKIOX ; DONE
;
;==================================================================================================
; NON-BANKED DISK READ/WRITE
;==================================================================================================
;
HB_DSKIO:
;
; SETUP LOOP COUNT
LD B,E ; SEC LOOP COUNTER
LD C,0 ; SEC COMPLETE COUNTER
;
HB_DSKIO1:
; CALL READ/WRITE FN
CALL HB_DSKFN ; READ/WRITE ONE SECTOR
;
; IF FAIL, RETURN ERR
JR NZ,HB_DSKIOX ; BAIL OUT ON ERROR
;
; INC SECTOR COUNT
INC C ; BUMP SEC READ/WRITE COUNT
DJNZ HB_DSKIO1 ; LOOP AS NEEDED
XOR A ; SIGNAL SUCCESS
;
HB_DSKIOX:
LD E,C ; WRITE COUNT TO E
OR A ; SET RESULT FLAGS
RET ; DONE
;
HB_IOBUF .DW 0
HB_IOBNK .DB 0
HB_DSKFN:
PUSH BC ; SAVE COUNTERS
#IF (DIAGENABLE & DIAGDISKIO)
LD A,(HB_DSKBIT) ; LOAD UNIT DISK BIT MASK
OUT (DIAGPORT),A ; DISPLAY ON DIAG LEDS
#ENDIF
LD E,1 ; ONE SECTOR
HB_DSKFNADR .EQU $+1
CALL PANIC ; READ ONE SECTOR
#IF (DIAGENABLE & DIAGDISKIO)
DIAG(0) ; CLEAR DIAG LEDS
#ENDIF
POP BC ; RESTORE COUNTERS
RET ; RETURN
;
HB_DSKBIT .DB 0 ; ACTIVE DISK UNIT
HB_IOBUF .DW 0 ; CURRENT IO BUFFER ADR
HB_IOBNK .DB 0 ; CURRENT IO BUFFER BANK ID
;
;==================================================================================================
; REAL TIME CLOCK DEVICE DISPATCHER
@ -2723,10 +2781,12 @@ HB_DISPCALL:
JR NC,HB_DISPERR ; HANDLE FN NUM OUT OF RANGE ERROR
; BUMP IY TO ACTUAL XXX_TBL ENTRY FOR INCOMING UNIT INDEX
PUSH BC ; SAVE BC
LD B,0 ; MSB IS ALWAYS ZERO
RLC C ; MULTIPLY UNIT INDEX
RLC C ; ... BY 4 FOR TABLE ENTRY OFFSET
ADD IY,BC ; SET IY TO ENTRY ADDRESS
POP BC ; RESTORE BC
; DERIVE DRIVER FUNC ADR TO CALL
PUSH HL ; SAVE INCOMING HL

18
Source/HBIOS/romldr.asm

@ -211,6 +211,12 @@ SEL:
CALL CST ; CHECK CONSOLE INPUT
OR A ; ZERO?
JR Z,SEL1 ; IF NOT, CONTINUE
#IF (BIOS == BIOS_WBW)
#IF (DIAGENABLE)
XOR A ; ZERO ACCUM
OUT (DIAGPORT),A ; CLEAR DIAG LEDS
#ENDIF
#ENDIF
CALL CINUC ; GET THE KEY
CALL COUT ; ECHO KEY
JR MATS ; AND HANDLE IT
@ -221,6 +227,12 @@ SEL1:
CALL DSKY_STAT ; CHECK DSKY INPUT
OR A ; TEST FOR ZERO
JR Z,SEL2 ; IF ZERO, NO KEY PRESSED
#IF (BIOS == BIOS_WBW)
#IF (DIAGENABLE)
XOR A ; ZERO ACCUM
OUT (DIAGPORT),A ; CLEAR DIAG LEDS
#ENDIF
#ENDIF
CALL DSKY_GETKEY ; GET PENDING KEY PRESS
JR MATK ; AND HANDLE IT
#ENDIF
@ -237,6 +249,12 @@ SEL2:
OR C
JP NZ,SEL3
;
#IF (BIOS == BIOS_WBW)
#IF (DIAGENABLE)
XOR A ; ZERO ACCUM
OUT (DIAGPORT),A ; CLEAR DIAG LEDS
#ENDIF
#ENDIF
LD A,BOOT_DEFAULT ; TIMEOUT EXPIRED,
JR MATS ; PERFORM DEFAULT BOOT ACTION
#ENDIF

Loading…
Cancel
Save