Browse Source

Merge pull request #138 from wwarthen/dev

Dev
pull/153/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
8fde665936
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. BIN
      Doc/RomWBW Applications.pdf
  2. BIN
      Doc/RomWBW Architecture.pdf
  3. BIN
      Doc/RomWBW Disk Catalog.pdf
  4. BIN
      Doc/RomWBW Getting Started.pdf
  5. 581
      Source/Apps/XM/xmx.180
  6. 41
      Source/Doc/Architecture.md
  7. 4
      Source/HBIOS/API.txt
  8. 2
      Source/HBIOS/acia.asm
  9. 2
      Source/HBIOS/asci.asm
  10. 16
      Source/HBIOS/ay38910.asm
  11. 2
      Source/HBIOS/bqrtc.asm
  12. 2
      Source/HBIOS/cvdu.asm
  13. 2
      Source/HBIOS/dsrtc.asm
  14. 10
      Source/HBIOS/duart.asm
  15. 2
      Source/HBIOS/fd.asm
  16. 9
      Source/HBIOS/hbios.asm
  17. 18
      Source/HBIOS/hbios.inc
  18. 2
      Source/HBIOS/hdsk.asm
  19. 2
      Source/HBIOS/ide.asm
  20. 2
      Source/HBIOS/intrtc.asm
  21. 2
      Source/HBIOS/md.asm
  22. 2
      Source/HBIOS/pio.asm
  23. 2
      Source/HBIOS/ppide.asm
  24. 4
      Source/HBIOS/ppp.asm
  25. 4
      Source/HBIOS/prp.asm
  26. 2
      Source/HBIOS/rf.asm
  27. 12
      Source/HBIOS/sd.asm
  28. 2
      Source/HBIOS/simrtc.asm
  29. 6
      Source/HBIOS/sio.asm
  30. 12
      Source/HBIOS/sn76489.asm
  31. 16
      Source/HBIOS/spk.asm
  32. 6
      Source/HBIOS/tms.asm
  33. 2
      Source/HBIOS/uart.asm
  34. 2
      Source/HBIOS/uf.asm
  35. 2
      Source/HBIOS/vdu.asm
  36. 2
      Source/HBIOS/vga.asm
  37. 2
      Source/ver.inc
  38. 2
      Source/ver.lib

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Architecture.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Getting Started.pdf

Binary file not shown.

581
Source/Apps/XM/xmx.180

@ -61,14 +61,74 @@ MINIT:
CALL IDBIO ; 1=HBIOS, 2=UBIOS
LD (BIOID),A ; Save it
DEC A ; Test for HBIOS
JR Z,HINIT ; Do HBIOS setup
JR Z,MINIT_HB ; Do HBIOS setup
DEC A ; Test for UBIOS
JR Z,UINIT ; Do UBIOS setup
JR Z,MINIT_UB ; Do UBIOS setup
;
; Neither UNA nor RomWBW
LD DE,ERR_BIO ; BIOS error message
JP FAIL ; Print msg and bail out
;
MINIT_HB:
; Display RomWBW notification string
LD DE,HB_TAG ; BIOS notification string
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
;
; Get CPU speed from RomWBW HBIOS and save it
LD B,0F8H ; HBIOS SYSGET function 0xF8
LD C,0F0H ; CPUINFO subfunction 0xF0
RST 08 ; Do it, L := CPU speed in MHz
LD A,L ; Move it to A
LD (CPUSPD),A ; Save it
;
; Get HBIOS bank id
LD BC,0F8F2H ; HBIOS SYSGET, Bank Info
RST 08 ; do it
JP NZ,APIERR ; handle API error
LD A,D ; BIOS bank id to A
LD (BIOSBID),A ; save it
;
; Lookup current console to use as default for transfer
LD B,0FAH ; HBIOS PEEK
LD A,(BIOSBID) ; get BIOS bank id
LD D,A ; ... and put in D
LD HL,100H + 12H ; HCB console unit address
RST 08 ; E := value
LD A,E ; put in A
LD (UNIT),A ; save it
;
; Get HBIOS character 0 device type
LD B,006H ; HBIOS DEVICE function 0x06
LD C,000H ; HBIOS char 0 device
RST 08 ; Do it, D=device type
LD A,D ; Put result in A
CP 000H ; UART?
JP Z,UA_INIT ; If so, do UART H/W init
CP 080H ; USB-FIFO?
JP Z,UF_INIT ; If so, do USB-FIFO H/W init
JP HB_INIT ; Otherwise, use BIOS I/O
;
MINIT_UB:
; Display UNA notification string
LD DE,UB_TAG ; BIOS notification string
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
;
; Get CPU speed from UNA and save it
LD C,0F8H ; UNA BIOS Get PHI function
RST 08 ; Returns speed in Hz in DE:HL
LD B,4 ; Divide MHz in DE:HL by 100000H
MINIT_UB1:
SRL D ; ... to get approx CPU speed in
RR E ; ...MHz. Throw away HL, and
DJNZ MINIT_UB1 ; ...right shift DE by 4.
INC E ; Fix up for value truncation
LD A,E ; Put in A
LD (CPUSPD),A ; Save it
;
JP UB_INIT ; UNA BIOS init
;
MINIT_RET:
PUSH HL ; Save HL (JP table adr)
@ -107,45 +167,35 @@ MINIT_RET:
LD HL,(RCVSCL) ; HL := receive scalar
RET ; and return
;
HINIT:
; Display RomWBW notification string
LD DE,HBTAG ; BIOS notification string
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
;
; Get CPU speed from RomWBW HBIOS and save it
LD B,0F8H ; HBIOS SYSGET function 0xF8
LD C,0F0H ; CPUINFO subfunction 0xF0
RST 08 ; Do it, L := CPU speed in MHz
LD A,L ; Move it to A
LD (CPUSPD),A ; Save it
;
JP H_INIT ; HBIOS init
;-----------------------------------------------------------------------
;
UINIT:
; Display UNA notification string
LD DE,UBTAG ; BIOS notification string
LD C,9 ; BDOS string display function
CALL BDOS ; Do it
; Uninitialize modem
;
; Get CPU speed from UNA and save it
LD C,0F8H ; UNA BIOS Get PHI function
RST 08 ; Returns speed in Hz in DE:HL
LD B,4 ; Divide MHz in DE:HL by 100000H
UINIT1:
SRL D ; ... to get approx CPU speed in
RR E ; ...MHz. Throw away HL, and
DJNZ UINIT1 ; ...right shift DE by 4.
INC E ; Fix up for value truncation
LD A,E ; Put in A
LD (CPUSPD),A ; Save it
UNINIT:
LD A,(BIOID)
CP 1 ; Is HBIOS?
JR Z,HUNINIT ; Handle HBIOS
CP 2 ; Is UBIOS?
JR Z,UUNINIT ; Handle UBIOS
RET ; Just return
;
JP U_INIT ; UNA BIOS init
HUNINIT:
; HBIOS: Reset character device 0
LD B,04H ; HBIOS CIOINIT function 0x04
LD A,(UNIT) ; HBIOS serial unit number
LD C,A ; Put in C for func call
LD DE,-1 ; Reset w/ current settings
RST 08 ; Do it
RET ; not initialized, so no 'UN-INITIALIZE'
;
HWERR:
; Failed to identify target comm hardware
LD DE,ERR_HW ; Hardware error message
JP FAIL ; Print message and bail out
UUNINIT:
; UBIOS: Reset character device 0
LD C,10H ; UNA INIT function 0x10
LD A,(UNIT) ; UBIOS serial unit number
LD B,A ; Put in B for func call
LD DE,-1 ; Reset w/ current settings
RST 08 ; Do it
RET ; not initialized, so no 'UN-INITIALIZE'
;
; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0
;
@ -184,6 +234,16 @@ IDBIO2:
XOR A ; Setup return value of 0
RET ; and done
;
HWERR:
; Failed to identify target comm hardware
LD DE,ERR_HW ; Hardware error message
JP FAIL ; Print message and bail out
;
APIERR:
; API returned unepected failure
LD DE,ERR_API ; API error message
JP FAIL ; Pprint message and bail out
;
FAIL:
; DE has error string address
LD C,9 ; BDOS string display function
@ -192,36 +252,6 @@ FAIL:
;
;-----------------------------------------------------------------------
;
; Uninitialize modem
;
UNINIT:
LD A,(BIOID)
CP 1 ; Is HBIOS?
JR Z,H_UNINIT ; Handle HBIOS
CP 2 ; Is UBIOS?
JR Z,U_UNINIT ; Handle UBIOS
RET ; Just return
;
H_UNINIT:
; HBIOS: Reset character device 0
LD B,04H ; HBIOS CIOINIT function 0x04
LD A,(UNIT) ; HBIOS serial unit number
LD C,A ; Put in C for func call
LD DE,-1 ; Reset w/ current settings
RST 08 ; Do it
RET ; not initialized, so no 'UN-INITIALIZE'
;
U_UNINIT:
; UBIOS: Reset character device 0
LD C,10H ; UNA INIT function 0x10
LD A,(UNIT) ; UBIOS serial unit number
LD B,A ; Put in B for func call
LD DE,-1 ; Reset w/ current settings
RST 08 ; Do it
RET ; not initialized, so no 'UN-INITIALIZE'
;
;-----------------------------------------------------------------------
;
; The following are all dummy routines that are unused because MINIT
; dynamically installs the real jump table.
;
@ -240,17 +270,20 @@ EXTRA3:
BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS
CPUSPD DB 10 ; CPU speed in MHz
RCVSCL DW 6600 ; RECV loop timeout scalar
UNIT DB 0 ; HBIOS serial device unit number
UNIT DB 0 ; BIOS serial device unit number
BIOSBID DB 00H ; BIOS bank id
;
TAG DB "RomWBW, 23-May-2020$"
;
H_LBL DB ", HBIOS FastPath$"
U_LBL DB ", UNA UBIOS$"
HB_LBL DB ", HBIOS FastPath$"
UB_LBL DB ", UNA UBIOS$"
UA_LBL DB ", UART$"
UF_LBL DB ", USB-FIFO$"
COM_LBL DB " on COM$"
EXP_LBL DB 13, 10, 13, 10, "*** Experimental ***$"
;
UBTAG DB " [UNA]$"
HBTAG DB " [WBW]$"
UB_TAG DB " [UNA]$"
HB_TAG DB " [WBW]$"
;
CRLF DB 13, 10, "$"
;
@ -270,38 +303,22 @@ ERR_API DB 13, 10, 13, 10, "++ BIOS API Error ++", 13, 10, "$"
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
H_JPTBL:
JP H_SENDR ; send character (via pop psw)
JP H_CAROK ; test for carrier
JP H_MDIN ; receive data byte
JP H_GETCHR ; get character from modem
JP H_RCVRDY ; check receive ready
JP H_SNDRDY ; check send ready
JP H_SPEED ; get speed value for file transfer time
HB_JPTBL:
JP HB_SENDR ; send character (via pop psw)
JP HB_CAROK ; test for carrier
JP HB_MDIN ; receive data byte
JP HB_GETCHR ; get character from modem
JP HB_RCVRDY ; check receive ready
JP HB_SNDRDY ; check send ready
JP HB_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; HBIOS initialization
;
H_INIT:
HB_INIT:
LD HL,2150 ; Smaller receive loop timeout scalar
LD (RCVSCL),HL ; ... to compensate for BIOS overhead
;
; Get HBIOS bank id
LD BC,0F8F2H ; HBIOS SYSGET, Bank Info
RST 08 ; do it
JR NZ,H_APIERR ; handle API error
LD A,D ; BIOS bank id to A
LD (H_BNKID),A ; save it
;
; Lookup current console to use as default for transfer
LD B,0FAH ; HBIOS PEEK
LD A,(H_BNKID) ; get BIOS bank id
LD D,A ; ... and put in D
LD HL,100H + 12H ; HCB console unit address
RST 08 ; E := value
LD A,E ; put in A
LD (UNIT),A ; save it
;
; Patch SENDR w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
@ -309,9 +326,9 @@ H_INIT:
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JR NZ,H_APIERR ; handle API error
LD (H_UDAT),DE ; Plug in data adr
LD (H_SCFN),HL ; Plug in func adr
JP NZ,APIERR ; handle API error
LD (HB_UDAT),DE ; Plug in data adr
LD (HB_SCFN),HL ; Plug in func adr
;
; Patch GETCHR/MDIN w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
@ -319,8 +336,8 @@ H_INIT:
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JR NZ,H_APIERR ; handle API error
LD (H_GCFN),HL ; Plug in func adr
JP NZ,APIERR ; handle API error
LD (HB_GCFN),HL ; Plug in func adr
;
; Patch RCVRDY w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
@ -328,8 +345,8 @@ H_INIT:
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JR NZ,H_APIERR ; handle API error
LD (H_RRFN),HL ; Plug in func adr
JP NZ,APIERR ; handle API error
LD (HB_RRFN),HL ; Plug in func adr
;
; Patch SNDRDY w/ FastPath addresses
LD BC,0F801H ; Get CIO func/data adr
@ -337,31 +354,27 @@ H_INIT:
LD A,(UNIT) ; get desired char unit
LD E,A ; and put in E
RST 08
JR NZ,H_APIERR ; handle API error
LD (H_SRFN),HL ; Plug in func adr
JP NZ,APIERR ; handle API error
LD (HB_SRFN),HL ; Plug in func adr
;
LD HL,H_JPTBL
LD DE,H_LBL
LD HL,HB_JPTBL
LD DE,HB_LBL
JP MINIT_RET
;
H_APIERR:
LD DE,ERR_API
JP FAIL
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
H_SENDR:
HB_SENDR:
POP AF ; get character to send from stack
PUSH BC
PUSH DE
PUSH HL
LD E,A ; character to E
LD IY,(H_UDAT)
LD A,(H_BNKID) ; call into HBIOS bank
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
H_SCFN EQU $-2
HB_SCFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
POP HL
POP DE
@ -372,28 +385,31 @@ H_SCFN EQU $-2
;
; Test and report carrier status, Z set if carrier present
;
H_CAROK:
HB_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character (assume character ready has already been tested)
; Get a character
;
; GETCHR must NOT block.
; GETCHR must not block
;
H_GETCHR:
CALL H_RCVRDY
HB_GETCHR:
CALL HB_RCVRDY
RET NZ
H_MDIN:
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
HB_MDIN:
PUSH BC
PUSH DE
PUSH HL
LD IY,(H_UDAT)
LD A,(H_BNKID) ; call into HBIOS bank
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
H_GCFN EQU $-2
HB_GCFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
LD A,E ; byte received to A
POP HL
@ -407,14 +423,14 @@ H_GCFN EQU $-2
; Error code returned in A register
; *** Error code does not seem to be used ***
;
H_RCVRDY:
HB_RCVRDY:
PUSH BC
PUSH DE
PUSH HL
LD IY,(H_UDAT)
LD A,(H_BNKID) ; call into HBIOS bank
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
H_RRFN EQU $-2
HB_RRFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
SUB 1 ; CF set IFF zero
RL A ; CF to bit 0 of A
@ -429,14 +445,14 @@ H_RRFN EQU $-2
;
; Test for ready to send a character, Z = ready
;
H_SNDRDY:
HB_SNDRDY:
PUSH BC
PUSH DE
PUSH HL
LD IY,(H_UDAT)
LD A,(H_BNKID) ; call into HBIOS bank
LD IY,(HB_UDAT)
LD A,(BIOSBID) ; call into HBIOS bank
LD IX,0000H
H_SRFN EQU $-2
HB_SRFN EQU $-2
CALL 0FFF9H ; HBIOS bank call
SUB 1 ; CF set IFF zero
RL A ; CF to bit 0 of A
@ -450,14 +466,13 @@ H_SRFN EQU $-2
;
; Report baud rate (index into SPTBL returned in register A)
;
H_SPEED:
HB_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;
;
;
H_BNKID DB 00H ; HBIOS bank id
H_UDAT DW 0000H ; Unit data address
HB_UDAT DW 0000H ; Unit data address
;
;
;=======================================================================
@ -472,20 +487,20 @@ H_UDAT DW 0000H ; Unit data address
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
U_JPTBL:
JP U_SENDR ; send character (via pop psw)
JP U_CAROK ; test for carrier
JP U_MDIN ; receive data byte
JP U_GETCHR ; get character from modem
JP U_RCVRDY ; check receive ready
JP U_SNDRDY ; check send ready
JP U_SPEED ; get speed value for file transfer time
UB_JPTBL:
JP UB_SENDR ; send character (via pop psw)
JP UB_CAROK ; test for carrier
JP UB_MDIN ; receive data byte
JP UB_GETCHR ; get character from modem
JP UB_RCVRDY ; check receive ready
JP UB_SNDRDY ; check send ready
JP UB_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; UBIOS initialization
;
U_INIT:
UB_INIT:
;
; TODO:
; - TEST!!!
@ -494,15 +509,15 @@ U_INIT:
LD HL,3000 ; Smaller receive loop timeout scalar
LD (RCVSCL),HL ; ... to compensate for BIOS overhead
;
LD HL,U_JPTBL
LD DE,U_LBL
LD HL,UB_JPTBL
LD DE,UB_LBL
JP MINIT_RET
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
U_SENDR:
UB_SENDR:
POP AF ; get character to send from stack
PUSH BC
PUSH DE
@ -519,21 +534,24 @@ U_SENDR:
;
; Test and report carrier status, Z set if carrier present
;
U_CAROK:
UB_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character (assume character ready has already been tested)
; Get a character
;
; GETCHR must NOT block.
; GETCHR must not block
;
U_GETCHR:
CALL U_RCVRDY
UB_GETCHR:
CALL UB_RCVRDY
RET NZ
U_MDIN:
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
UB_MDIN:
PUSH BC
PUSH DE
PUSH HL
@ -551,7 +569,7 @@ U_MDIN:
; Error code returned in A register
; *** Error code does not seem to be used ***
;
U_RCVRDY:
UB_RCVRDY:
PUSH BC
PUSH DE
PUSH HL
@ -570,7 +588,7 @@ U_RCVRDY:
;
; Test for ready to send a character, Z = ready
;
U_SNDRDY:
UB_SNDRDY:
PUSH BC
PUSH DE
PUSH HL
@ -588,7 +606,252 @@ U_SNDRDY:
;
; Report baud rate (index into SPTBL returned in register A)
;
U_SPEED:
UB_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;
;=======================================================================
;=======================================================================
;
; 8250-like UART
;
;=======================================================================
;=======================================================================
;
; UART constants
;
UA_SNDB EQU 20H ; bit to test for send ready
UA_SNDR EQU 20H ; value when ready to send
UA_RCVB EQU 01H ; bit to test for receive ready
UA_RCVR EQU 01H ; value when ready to receive
UA_PARE EQU 04H ; bit for parity error
UA_OVRE EQU 02H ; bit for overrun error
UA_FRME EQU 08H ; bit for framing error
UA_ERRS EQU UA_FRME | UA_OVRE | UA_PARE
;
; Following jump table is dynamically patched into real jump
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
UA_JPTBL:
JP UA_SENDR ; send character (via pop psw)
JP UA_CAROK ; test for carrier
JP UA_MDIN ; receive data byte
JP UA_GETCHR ; get character from modem
JP UA_RCVRDY ; check receive ready
JP UA_SNDRDY ; check send ready
JP UA_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; UART initialization
;
UA_INIT:
LD DE,13000 ; Receive loop timeout scalar
LD (RCVSCL),DE ; ... for UART RCVRDY timing
;
LD A,L ; Get base I/O port address
LD (UA_SCP),A ; Set port value in SENDR
LD (UA_GCP),A ; Set port value in GETCHR
ADD A,5 ; UART control port is 5 higher
LD (UA_RRP),A ; Set port value in RCVRDY
LD (UA_SRP),A ; Set port value in SNDRDY
;
LD HL,UA_JPTBL
LD DE,UA_LBL
JP MINIT_RET
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
UA_SENDR:
POP AF ; get character to send from stack
OUT (0FFH),A ; send to port
UA_SCP EQU $-1 ; port value
RET
;
;-----------------------------------------------------------------------
;
; Test and report carrier status, Z set if carrier present
;
UA_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character
;
; GETCHR must not block
;
UA_GETCHR:
CALL UA_RCVRDY
RET NZ
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
UA_MDIN:
IN A,(0FFH) ; read character from port
UA_GCP EQU $-1 ; port value
RET
;
;-----------------------------------------------------------------------
;
; Test for character ready to receive, Z = ready
; Error code returned in A register
; *** Error code does not seem to be used ***
;
UA_RCVRDY:
IN A,(0FFH) ; get modem status
UA_RRP EQU $-1 ; port value
AND UA_RCVB ; isolate ready bit
CP UA_RCVR ; test it (set flags)
LD A,0 ; report no line errors
;
RET
;
;-----------------------------------------------------------------------
;
; Test for ready to send a character, Z = ready
;
UA_SNDRDY:
IN A,(0FFH) ; get status
UA_SRP EQU $-1 ; port value
AND UA_SNDB ; isolate transmit ready bit
CP UA_SNDR ; test for ready value
RET
;
;-----------------------------------------------------------------------
;
; Report baud rate (index into SPTBL returned in register A)
;
UA_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;
;
;
UA_BASE DB 00H ; UART base port I/O address
UA_CTLP DB 00H ; UART control port I/O address
;
;
;=======================================================================
;=======================================================================
;
; WILL SOWERBUTTS ECB USB-FIFO
;
;=======================================================================
;=======================================================================
;
UF_BASE EQU 0CH
UF_DATA EQU (UF_BASE+0)
UF_STATUS EQU (UF_BASE+1)
UF_SEND_IMM EQU (UF_BASE+2)
;
; Following jump table is dynamically patched over initial jump
; table at program startup. See MINIT above. Note that only a
; subset of the jump table is overlaid (SENDR to SPEED).
;
UF_JPTBL:
JP UF_SENDR ; send character (via pop psw)
JP UF_CAROK ; test for carrier
JP UF_MDIN ; receive data byte
JP UF_GETCHR ; get character from modem
JP UF_RCVRDY ; check receive ready
JP UF_SNDRDY ; check send ready
JP UF_SPEED ; get speed value for file transfer time
;
;-----------------------------------------------------------------------
;
; USB-FIFO initialization
;
UF_INIT:
LD HL,12000 ; Receive loop timeout scalar
LD (RCVSCL),HL ; ... for UART RCVRDY timing
;
LD A,L ; Get base I/O port address (data port)
LD (UF_SCDP),A ; Set data port in SENDR
LD (UF_GCDP),A ; Set data port in GETCHR/MDIN
INC A ; Bump to status port
LD (UF_RRSP),A ; Set status port in RCVRDY
LD (UF_SRSP),A ; Set status port in SNDRDY
INC A ; Bump to send immediate port
LD (UF_SCIP),A ; Set send immed port in SENDR
;
LD HL,UF_JPTBL
LD DE,UF_LBL
JP MINIT_RET
;
;-----------------------------------------------------------------------
;
; Send character on top of stack
;
UF_SENDR:
POP AF ; get character to send from stack
OUT (0FFH),A ; write to fifo
UF_SCDP EQU $-1 ; data port
OUT (0FFH),A ; send immediate
UF_SCIP EQU $-1 ; send immediate port
RET
;
;-----------------------------------------------------------------------
;
; Test and report carrier status, Z set if carrier present
;
UF_CAROK:
XOR A ; not used, always indicate present
RET
;
;-----------------------------------------------------------------------
;
; Get a character (assume character ready has already been tested)
;
; GETCHR must not block
;
UF_GETCHR:
CALL UF_RCVRDY
RET NZ
; Fall thru if char ready
;
; MDIN can assume a character is ready
;
UF_MDIN:
IN A,(0FFH) ; get char
UF_GCDP EQU $-1 ; data port
RET
;
;-----------------------------------------------------------------------
;
; Test for character ready to receive, Z = ready
; Error code returned in A register
; *** Error code does not seem to be used ***
;
UF_RCVRDY:
IN A,(0FFH) ; b7=0 if char avail, =1 if no char.
UF_RRSP EQU $-1 ; status port
RLCA ; b0=0 if char avail, =1 if no char.
AND 00000001B ; a=0, zf=1 if no char, a=1, zf=0 if char avail.
LD A,0
RET
;
;-----------------------------------------------------------------------
;
; Test for ready to send a character, Z = ready
;
UF_SNDRDY:
IN A,(0FFH) ; bit 0=0 if space avail, =1 IF FULL
UF_SRSP EQU $-1 ; status port
AND 00000001B ; A=0, ZF=1 if space avail, A=1, ZF=0 if full.
RET
;
;-----------------------------------------------------------------------
;
; Report baud rate (index into SPTBL returned in register A)
;
UF_SPEED:
LD A,8 ; arbitrarily return 9600 baud
RET
;

41
Source/Doc/Architecture.md

@ -558,6 +558,8 @@ unit. Register pair DE contains the line characteristics upon return.
| C: Serial Device Attributes
| D: Serial Device Type
| E: Serial Device Number
| H: Serial Device Unit Mode
| L: Serial Device Unit I/O Base Address
Reports information about the character device unit specified. Register C
indicates the device attributes: 0=RS-232 and 1=Terminal. Register D
@ -745,6 +747,8 @@ of memory.
| C: Attributes
| D: Device Type
| E: Device Number
| H: Disk Device Unit Mode
| L: Disk Device Unit I/O Base Address
Reports information about the character device unit specified. Register D
indicates the device type (driver) and register E indicates the physical
@ -954,7 +958,7 @@ Documentation required...
Documentation required...
### Function 0x28 -- RTC DEVICE (DIODEVICE)
### Function 0x28 -- RTC DEVICE (RTCDEVICE)
| _Entry Parameters_
| B: 0x28
@ -964,6 +968,8 @@ Documentation required...
| A: Status (0=OK, else error)
| D: Device Type
| E: Device Number
| H: RTC Device Unit Mode
| L: RTC Device Unit I/O Base Address
Reports information about the RTC device unit specified. Register D
indicates the device type (driver) and register E indicates the physical
@ -1136,8 +1142,10 @@ Keyboard should be flushed.
| _Exit Results_
| A: Status (0=OK, else error)
| D=Device Type
| E=Device Number
| D: Device Type
| E: Device Number
| H: VDA Device Unit Mode
| L: VDA Device Unit I/O Base Address
Reports information about the video device unit specified.
@ -1568,6 +1576,33 @@ not play a note if the duration is zero.
For other values, when a tone is played, it will play for the duration defined in HL
and then return.
### Function 0x57 -- Sound Device (SNDDEVICE)
| _Entry Parameters_
| B: 0x57
| C: Sound Device Unit Number
| _Exit Results_
| A: Status (0=OK, else error)
| D: Serial Device Type
| E: Serial Device Number
| H: Serial Device Unit Mode
| L: Serial Device Unit I/O Base Address
Reports information about the sound device unit specified. Register D
indicates the device type (driver) and register E indicates the physical
device number assigned by the driver.
Each character device is handled by an appropriate driver (AY38910, SN76489,
etc.). The driver can be identified by the Device Type. The assigned Device
Types are listed below.
_Id_ | _Device Type / Driver_
---- | ----------------------
0x00 | SN76489
0x10 | AY38910
0x20 | BITMODE
`\clearpage`{=latex}
System (SYS)

4
Source/HBIOS/API.txt

@ -267,6 +267,8 @@ DEVICE ($06):
D=Device Type
E=Device Number
C=Device Attributes
H=Device Mode
L=Base I/O Adr
Serial Device Attributes Byte:
7: 0=RS-232, 1=Terminal
@ -331,6 +333,8 @@ DEVICE ($17)
D=Device Type (MD, FD, IDE, etc.)
E=Device Number (0..n)
C=Device Attributes
H=Device Mode
L=Base I/O Adr
Report the Device Type (Floppy, IDE, SD, etc.) and Device Number. Call
does not perform any I/O and succeeds even if the device is in an error state.

2
Source/HBIOS/acia.asm

@ -571,6 +571,8 @@ ACIA_DEVICE:
LD D,CIODEV_ACIA ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+3) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/asci.asm

@ -575,6 +575,8 @@ ASCI_DEVICE:
LD D,CIODEV_ASCI ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+3) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

16
Source/HBIOS/ay38910.asm

@ -57,6 +57,7 @@ AY_FNTBL:
.DW AY_PLAY
.DW AY_QUERY
.DW AY_DURATION
.DW AY_DEVICE
;
#IF (($ - AY_FNTBL) != (SND_FNCNT * 2))
.ECHO "*** INVALID SND FUNCTION TABLE ***\n"
@ -428,7 +429,7 @@ AY_QUERY_VOLUME:
RET
;
AY_QUERY_DEV:
LD B, BF_SND_AY38910 ; RETURN DEVICE IDENTIFIER
LD B, SNDDEV_AY38910 ; RETURN DEVICE IDENTIFIER
LD DE, (AY_RSEL*256)+AY_RDAT ; AND ADDRESS AND DATA PORT
XOR A
RET
@ -443,6 +444,19 @@ AY_DURATION:
RET
;
;======================================================================
; SOUND DRIVER FUNCTION - DEVICE
;======================================================================
;
AY_DEVICE:
LD D,SNDDEV_AY38910 ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE
LD H,AYMODE ; H := MODE
LD L,AY_RSEL ; L := BASE I/O ADDRESS
XOR A
RET
;
;======================================================================
; NON-BLOCKING INTERRUPT CODE
;======================================================================
;

2
Source/HBIOS/bqrtc.asm

@ -344,6 +344,8 @@ BQRTC_SETALM:
BQRTC_DEVICE:
LD D,RTCDEV_BQ ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL DEVICE NUMBER
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,BQRTC_BASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET

2
Source/HBIOS/cvdu.asm

@ -132,6 +132,8 @@ CVDU_VDARES:
CVDU_VDADEV:
LD D,VDADEV_CVDU ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,CVDU_BASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET

2
Source/HBIOS/dsrtc.asm

@ -369,6 +369,8 @@ DSRTC_SETBYT:
DSRTC_DEVICE:
LD D,RTCDEV_DS ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL DEVICE NUMBER
LD H,DSRTCMODE ; H := MODE
LD L,DSRTC_IO ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

10
Source/HBIOS/duart.asm

@ -611,10 +611,12 @@ DUART_QUERY:
;
;
DUART_DEVICE:
LD D,CIODEV_DUART ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
XOR A ; SIGNAL SUCCESS
LD D,CIODEV_DUART ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+3) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
; DUART DETECTION ROUTINE

2
Source/HBIOS/fd.asm

@ -508,6 +508,8 @@ FD_DEVICE:
#IF (FDMEDIA == FDM111)
LD C,%10010100 ; 8" DS/DD
#ENDIF
LD H,FDMODE ; H := MODE
LD L,FDC_MSR ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

9
Source/HBIOS/hbios.asm

@ -2294,7 +2294,7 @@ SND_ADDENT:
; WORD DRIVER FUNCTION TABLE ADDRESS
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
;
SND_FNCNT .EQU 7 ; NUMBER OF SND FUNCS (FOR RANGE CHECK)
SND_FNCNT .EQU 8 ; NUMBER OF SND FUNCS (FOR RANGE CHECK)
SND_MAX .EQU 3 ; UP TO 2 UNITS
SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES
;
@ -4165,7 +4165,12 @@ PS_SOUND:
LD E,BF_SNDQ_DEV
RST 08
LD A,B
DEC A
;DEC A
RLCA
RLCA
RLCA
RLCA
AND $0F
LD DE,PS_SDSN76489
CALL PRTIDXDEA
LD A,(PRTIDXCNT)

18
Source/HBIOS/hbios.inc

@ -63,6 +63,7 @@ BF_SNDNOTE .EQU BF_SND + 3 ; REQUEST NOTE - L CONTAINS NOTE - EACH VALUE IS QUAR
BF_SNDPLAY .EQU BF_SND + 4 ; INITIATE THE REQUESTED SOUND COMMAND
BF_SNDQUERY .EQU BF_SND + 5 ; E IS SUBFUNCTION
BF_SNDDURATION .EQU BF_SND + 6 ; REQUEST DURATION HL MILLISECONDS
BF_SNDDEVICE .EQU BF_SND + 7 ; SOUND DEVICE INFO REQUEST
;
; BF_SNDQUERY SUBCOMMANDS
BF_SNDQ_STATUS .EQU 0
@ -71,11 +72,6 @@ BF_SNDQ_VOLUME .EQU BF_SNDQ_STATUS + 2 ; 8 BIT NUMBER
BF_SNDQ_PERIOD .EQU BF_SNDQ_STATUS + 3 ; 16 BIT NUMBER
BF_SNDQ_DEV .EQU BF_SNDQ_STATUS + 4 ; RETURN DEVICE TYPE CODE AND IO PORTS - TYPE IN B, PORTS IN DE, HL
;
BF_SNDDEV .EQU 0 ; TYPES OF SOUND DRIVERS
BF_SND_SN76489 .EQU BF_SNDDEV + 1
BF_SND_AY38910 .EQU BF_SNDDEV + 2
BF_SND_BITMODE .EQU BF_SNDDEV + 3
;
BF_SYS .EQU $F0
BF_SYSRESET .EQU BF_SYS + 0 ; SOFT RESET HBIOS
BF_SYSVER .EQU BF_SYS + 1 ; GET HBIOS VERSION
@ -200,12 +196,12 @@ VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563
VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220
VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918
VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445
;;
;; EMULATION TYPES - moved to std.asm
;;
;EMUTYP_NONE .EQU 0 ; NONE
;EMUTYP_TTY .EQU 1 ; TTY
;EMUTYP_ANSI .EQU 2 ; ANSI
;
; SOUND DEVICE IDS
;
SNDDEV_SN76489 .EQU $00
SNDDEV_AY38910 .EQU $10
SNDDEV_BITMODE .EQU $20
;
; HBIOS CONTROL BLOCK OFFSETS
; WARNING: THESE OFFSETS WILL CHANGE SIGNIFICANTLY BETWEEN RELEASES

2
Source/HBIOS/hdsk.asm

@ -169,6 +169,8 @@ HDSK_DEVICE:
LD D,DIODEV_HDSK ; D := DEVICE TYPE
LD E,(IY+HDSK_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%00000000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,HDSK_IO ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/ide.asm

@ -546,6 +546,8 @@ IDE_DEVICE:
JR Z,IDE_DEVICE1 ; IF Z, WE ARE DONE
LD C,%01001000 ; OTHERWISE REMOVABLE COMPACT FLASH
IDE_DEVICE1:
LD H,(IY+IDE_MODE) ; H := MODE
LD L,(IY+IDE_IOBASE) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/intrtc.asm

@ -138,6 +138,8 @@ INTRTC_SETTIM:
INTRTC_DEVICE:
LD D,RTCDEV_INT ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL DEVICE NUMBER
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,0 ; L := 0, NO I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/md.asm

@ -149,6 +149,8 @@ MD_DEVICE:
LD C,%00100000 ; ASSUME ROM DISK ATTRIBUTES
JR Z,MD_DEVICE1 ; IF ZERO, IT IS ROM DISK, DONE
LD C,%00101000 ; USE RAM DISK ATTRIBUTES
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,0 ; L := 0, NO BASE I/O ADDRESS
MD_DEVICE1:
XOR A ; SIGNAL SUCCESS
RET

2
Source/HBIOS/pio.asm

@ -720,6 +720,8 @@ PPI_DEVICE:
LD D,CIODEV_PIO ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$40 ; C := ATTRIBUTE
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+3) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/ppide.asm

@ -555,6 +555,8 @@ PPIDE_DEVICE:
JR Z,PPIDE_DEVICE1 ; IF Z, WE ARE DONE
LD C,%01001000 ; OTHERWISE REMOVABLE COMPACT FLASH
PPIDE_DEVICE1:
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+PPIDE_DATALO) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

4
Source/HBIOS/ppp.asm

@ -357,6 +357,8 @@ PPPCON_DEVICE:
LD D,CIODEV_PPPCON ; D := DEVICE TYPE
LD E,0 ; E := DEVICE NUM, ALWAYS 0
LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,PPIBASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
@ -691,6 +693,8 @@ PPPSD_DEVICE:
LD D,DIODEV_PPPSD ; D := DEVICE TYPE
LD E,(IY+PPPSD_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,PPIBASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

4
Source/HBIOS/prp.asm

@ -230,6 +230,8 @@ PRPCON_DEVICE:
LD D,CIODEV_PRPCON ; D := DEVICE TYPE
LD E,0 ; E := DEVICE NUM, ALWAYS 0
LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,PRP_IOBASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
@ -548,6 +550,8 @@ PRPSD_DEVICE:
LD D,DIODEV_PRPSD ; D := DEVICE TYPE
LD E,(IY+PRPSD_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,PRP_IOBASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/rf.asm

@ -181,6 +181,8 @@ RF_DEVICE:
LD D,DIODEV_RF ; D := DEVICE TYPE
LD E,(IY+RF_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%00110000 ; C := ATTRIBUTES, NON-REMOVABLE RAM FLOPPY
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+RF_IOAD) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

12
Source/HBIOS/sd.asm

@ -125,6 +125,7 @@ SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT
SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK
SD_DI .EQU %00000001 ; RTC:0 IS DATA IN (CARD <- CPU)
SD_DO .EQU %10000000 ; RTC:7 IS DATA OUT (CARD -> CPU)
SD_IOBASE .EQU SD_OPRREG ; IOBASE
;
RTCDEF .SET SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE
#ENDIF
@ -139,6 +140,7 @@ SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT
SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK
SD_DI .EQU %00000001 ; RTC:0 IS DATA IN (CARD <- CPU)
SD_DO .EQU %01000000 ; RTC:6 IS DATA OUT (CARD -> CPU)
SD_IOBASE .EQU SD_OPRREG ; IOBASE
;
RTCDEF .SET SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE
#ENDIF
@ -151,6 +153,7 @@ SD_OPRMSK .EQU %00000100 ; MASK FOR BITS WE OWN IN RTC LATCH PORT
SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT
SD_CNTR .EQU Z180_CNTR
SD_TRDR .EQU Z180_TRDR
SD_IOBASE .EQU SD_OPRREG ; IOBASE
;
RTCDEF .SET SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE
#ENDIF
@ -168,6 +171,7 @@ SD_CS0 .EQU %00010000 ; PPIC:4 IS SELECT
SD_CLK .EQU %00000010 ; PPIC:1 IS CLOCK
SD_DI .EQU %00000001 ; PPIC:0 IS DATA IN (CARD <- CPU)
SD_DO .EQU %10000000 ; PPIB:7 IS DATA OUT (CARD -> CPU)
SD_IOBASE .EQU SD_PPIBASE ; IOBASE
#ENDIF
;
#IF (SDMODE == SDMODE_UART)
@ -180,6 +184,7 @@ SD_CS0 .EQU %00001000 ; UART MCR:3 IS SELECT
SD_CLK .EQU %00000100 ; UART MCR:2 IS CLOCK
SD_DI .EQU %00000001 ; UART MCR:0 IS DATA IN (CARD <- CPU)
SD_DO .EQU %00100000 ; UART MSR:5 IS DATA OUT (CARD -> CPU)
SD_IOBASE .EQU UARTIOB ; IOBASE
#ENDIF
;
#IF (SDMODE == SDMODE_DSD) ; DUAL SD
@ -193,6 +198,7 @@ SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT
SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK
SD_DI .EQU %00000001 ; RTC:6 IS DATA IN (CARD <- CPU)
SD_DO .EQU %00000001 ; RTC:0 IS DATA OUT (CARD -> CPU)
SD_IOBASE .EQU SD_OPRREG ; IOBASE
#ENDIF
;
#IF (SDMODE == SDMODE_MK4) ; MARK IV (CSIO STYLE INTERFACE)
@ -202,6 +208,7 @@ SD_OPRDEF .EQU %00000000 ; QUIESCENT STATE
SD_CS0 .EQU %00000100 ; SELECT ACTIVE
SD_CNTR .EQU Z180_CNTR
SD_TRDR .EQU Z180_TRDR
SD_IOBASE .EQU SD_OPRREG ; IOBASE
#ENDIF
;
#IF (SDMODE == SDMODE_SC) ; SC
@ -213,6 +220,7 @@ SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT FOR PRIMARY SPI CARD
SD_CS1 .EQU %00001000 ; RTC:3 IS SELECT FOR SECONDARY SPI CARD
SD_CNTR .EQU Z180_CNTR
SD_TRDR .EQU Z180_TRDR
SD_IOBASE .EQU SD_OPRREG ; IOBASE
;
RTCDEF .SET SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE
#ENDIF
@ -236,7 +244,7 @@ SD_CD1 .EQU %00000100 ; IN:SD_OPREG:2 = CD2, IN=0 Card detect switch
SD_CSX .EQU %00001000 ; IN/OUT:SD_OPREG:3 = CS0, PMOD SPI CS
SD_CS0 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present
SD_CS1 .EQU %00100000 ; IN/OUT:SD_OPREG:5 = CS2, SDCARD2 CS, IN=1 Card present
SD_IOBASE .EQU SD_BASE ; IOBASE
#ENDIF
;
; SD CARD COMMANDS
@ -771,6 +779,8 @@ SD_DEVICE:
LD D,DIODEV_SD ; D := DEVICE TYPE
LD E,(IY+SD_DEV) ; E := PHYSICAL DEVICE NUMBER
LD C,%01010000 ; C := ATTRIBUTES, REMOVABLE, SD CARD
LD H,SDMODE ; H := MODE
LD L,(SD_IOBASE) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/simrtc.asm

@ -140,6 +140,8 @@ SIMRTC_SETTIM:
SIMRTC_DEVICE:
LD D,RTCDEV_SIMH ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL DEVICE NUMBER
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,SIMRTC_IO ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

6
Source/HBIOS/sio.asm

@ -949,6 +949,8 @@ SIO_DEVICE:
LD D,CIODEV_SIO ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,(IY+14) ; H := MODE
LD L,(IY+3) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
@ -1147,6 +1149,7 @@ SIO0A_CFG:
.DW SIO0ACLK & $FFFF ; CLOCK FREQ AS
.DW SIO0ACLK >> 16 ; ... DWORD VALUE
.DB SIO0ACTCC ; CTC CHANNEL
.DB SIO0MODE ; MODE
;
SIO_CFGSIZ .EQU $ - SIO_CFG ; SIZE OF ONE CFG TABLE ENTRY
;
@ -1162,6 +1165,7 @@ SIO0B_CFG:
.DW SIO0BCLK & $FFFF ; CLOCK FREQ AS
.DW SIO0BCLK >> 16 ; ... DWORD VALUE
.DB SIO0BCTCC ; CTC CHANNEL
.DB SIO0MODE ; MODE
;
#IF (SIOCNT >= 2)
;
@ -1177,6 +1181,7 @@ SIO1A_CFG:
.DW SIO1ACLK & $FFFF ; CLOCK FREQ AS
.DW SIO1ACLK >> 16 ; ... DWORD VALUE
.DB SIO1ACTCC ; CTC CHANNEL
.DB SIO1MODE ; MODE
;
; SIO1 CHANNEL B
SIO1B_CFG:
@ -1190,6 +1195,7 @@ SIO1B_CFG:
.DW SIO1BCLK & $FFFF ; CLOCK FREQ AS
.DW SIO1BCLK >> 16 ; ... DWORD VALUE
.DB SIO1BCTCC ; CTC CHANNEL
.DB SIO1MODE ; MODE
;
#ENDIF
;

12
Source/HBIOS/sn76489.asm

@ -197,7 +197,7 @@ SN7_QUERY_VOLUME:
SN7_QUERY_DEV:
LD B, BF_SND_SN76489
LD B, SNDDEV_SN76489
LD DE, SN76489_PORT_LEFT ; E WITH LEFT PORT
LD HL, SN76489_PORT_RIGHT ; L WITH RIGHT PORT
@ -304,6 +304,15 @@ SN7_DURATION:
XOR A
RET
SN7_DEVICE:
LD D,SNDDEV_SN76489 ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,SN76489_PORT_LEFT ; L := BASE I/O ADDRESS
XOR A
RET
SN7_FNTBL:
.DW SN7_RESET
.DW SN7_VOLUME
@ -312,6 +321,7 @@ SN7_FNTBL:
.DW SN7_PLAY
.DW SN7_QUERY
.DW SN7_DURATION
.DW SN7_DEVICE
;
#IF (($ - SN7_FNTBL) != (SND_FNCNT * 2))
.ECHO "*** INVALID SND FUNCTION TABLE ***\n"

16
Source/HBIOS/spk.asm

@ -20,6 +20,7 @@ SP_FNTBL:
.DW SP_PLAY
.DW SP_QUERY
.DW SP_DURATION
.DW SP_DEVICE
;
#IF (($ - SP_FNTBL) != (SND_FNCNT * 2))
.ECHO "*** INVALID SND FUNCTION TABLE ***\n"
@ -149,7 +150,7 @@ SP_QUERY_VOLUME:
RET
;
SP_QUERY_DEV:
LD B, BF_SND_BITMODE ; RETURN DEVICE IDENTIFIER
LD B, SNDDEV_BITMODE ; RETURN DEVICE IDENTIFIER
LD DE, (RTCIO*256)+SP_RTCIOMSK ; AND ADDRESS AND DATA PORT
XOR A
RET
@ -321,6 +322,19 @@ SP_DURATION:
RET
;
;======================================================================
; SOUND DRIVER FUNCTION - DEVICE
;======================================================================
;
SP_DEVICE:
LD D,SNDDEV_BITMODE ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,RTCIO ; L := BASE I/O ADDRESS
XOR A
RET
;
;======================================================================
;
; STANDARD ONE SECOND TONE TABLES AT 1MHZ.
; FOR SP_BEEPER ROUTINE, FIRST WORD LOADED INTO DE, SECOND INTO HL

6
Source/HBIOS/tms.asm

@ -70,8 +70,8 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918 ACCESSES
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!!
;
#IF (TMSMODE == TMSMODE_N8)
; BELOW WAS TUNED FOR N8 AT 18MHZ
#IF (CPUFAM == CPU_Z180)
; BELOW WAS TUNED FOR Z180 AT 18MHZ
#DEFINE TMS_IODELAY EX (SP),HL \ EX (SP),HL ; 38 W/S
#ELSE
; BELOW WAS TUNED FOR SBC AT 8MHZ
@ -222,6 +222,8 @@ TMS_VDARES1: ; ENTRY POINT TO AVOID TMS_Z180IO RECURSION
TMS_VDADEV:
LD D,VDADEV_TMS ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
LD H,TMSMODE ; H := MODE
LD L,TMS_DATREG ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET

2
Source/HBIOS/uart.asm

@ -339,6 +339,8 @@ UART_DEVICE:
LD D,CIODEV_UART ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,(IY+2) ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;

2
Source/HBIOS/uf.asm

@ -154,6 +154,8 @@ UF_DEVICE:
XOR A ; SIGNAL SUCCESS
LD E,A ; E := PHYSICAL UNIT, ALWAYS 0
LD C,A ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,UFBASE ; L := BASE I/O ADDRESS
RET
;
; USB-FIFO DETECTION ROUTINE

2
Source/HBIOS/vdu.asm

@ -181,6 +181,8 @@ VDU_VDARES:
VDU_VDADEV:
LD D,VDADEV_VDU ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,VDU_BASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET

2
Source/HBIOS/vga.asm

@ -204,6 +204,8 @@ VGA_VDARES:
VGA_VDADEV:
LD D,VDADEV_VGA ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,VGA_BASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET

2
Source/ver.inc

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

2
Source/ver.lib

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

Loading…
Cancel
Save