Browse Source

HBIOS: Added support for sound drivers

New sound driver support with initial support for the SN76489 chip

New build configuration entry:
* SN76489ENABLE

Ports are currently locked in with:
* SN76489_PORT_LEFT       .EQU    $FC     ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT)
* SN76489_PORT_RIGHT      .EQU    $F8     ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT)
pull/112/head
Dean Netherton 6 years ago
parent
commit
890f9262e0
  1. 83
      Source/Doc/Architecture.md
  2. 2
      Source/HBIOS/Config/RCZ80_std.asm
  3. 26
      Source/HBIOS/audio.inc
  4. 3
      Source/HBIOS/cfg_dyno.asm
  5. 3
      Source/HBIOS/cfg_ezz80.asm
  6. 3
      Source/HBIOS/cfg_master.asm
  7. 3
      Source/HBIOS/cfg_mk4.asm
  8. 3
      Source/HBIOS/cfg_n8.asm
  9. 3
      Source/HBIOS/cfg_rcz180.asm
  10. 3
      Source/HBIOS/cfg_rcz80.asm
  11. 3
      Source/HBIOS/cfg_sbc.asm
  12. 3
      Source/HBIOS/cfg_scz180.asm
  13. 3
      Source/HBIOS/cfg_zeta.asm
  14. 3
      Source/HBIOS/cfg_zeta2.asm
  15. 72
      Source/HBIOS/hbios.asm
  16. 16
      Source/HBIOS/hbios.inc
  17. 588
      Source/HBIOS/sn76489.asm
  18. 89
      Source/HBIOS/std.asm
  19. 2
      Source/Makefile

83
Source/Doc/Architecture.md

@ -1292,6 +1292,81 @@ codes as described at the start of this section.
`\clearpage`{=latex} `\clearpage`{=latex}
Sound (SND)
------------
### Function 0x50 -- Sound Reset (SNDRESET)
| _Entry Parameters_
| B: 0x50
| C: The audio device unit number
| _Exit Results_
| A: Status (0=OK, else error)
Reset the sound chip. Turn off all sounds and set volume on all
channels to silence.
### Function 0x51 -- Sound Volume (SNDVOL)
| _Entry Parameters_
| B: 0x51
| C: The audio device unit number
| L: The volume to be applied (00=Silence, FF=Maximum)
| _Exit Results_
| A: Status (0=OK, else error)
This function set the volume configuration command. The volume will
be applied when the SNDPLAY function is invoked.
### Function 0x52 -- Sound Volume (SNDPIT)
| _Entry Parameters_
| B: 0x52
| C: The audio device unit number
| HL: The pitch to be applied (0000=lowest note, FFFF=highest note)
This function set the pitch configuration command. The pitch will
be applied when the SNDPLAY function is invoked.
### Function 0x53 -- Sound Volume (SNDNOTE)
| _Entry Parameters_
| B: 0x52
| C: The audio device unit number
| L: A number from 0 to 255 selecting quarter notes
This function will apply a pitch value to the sound chip.
The value correspond to standard musical notes. The value allows for selection
of a quarter of a semitone by giving a value between 0 and upto the drivers maximum
supported value. The lowest note is (0).
For the SN76490 chip, 0 corresponds to note A1# and the value 249 is the maximum
supported value, and it corresponds to note C7.
### Function 0x54 -- Sound Play (SNDPLAY)
| _Entry Parameters_
| B: 0x53
| C: The audio device unit number
| D: The channel to play the previously configured tone
This function set the pitch and volume previously configured with the SNDPIT
and SNDVOL functions.
For example, to play a specific note, on the first installed driver, the following
HBIOS calls would need to be made
```
HBIOS B=51 C=00 L=80 ; Set volume to half level
HBIOS B=53 C=00 L=69 ; Select Middle C (C4) assuming SN76489
HBIOS B=54 C=00 D=01 ; Play note on Channel 1
```
`\clearpage`{=latex}
System (SYS) System (SYS)
------------ ------------
@ -1573,6 +1648,14 @@ available along with the registers/information used as input.
| _Returned Values_ | _Returned Values_
| A: Status (0=OK, else error) | A: Status (0=OK, else error)
#### SYSSET Subfunction 0xD2 -- Inc Timer (TIMER)
| _Entry Parameters_
| BC: 0xF9D2
| _Returned Values_
| A: Status (0=OK, else error)
#### SYSSET Subfunction 0xE0 -- Set Boot Information (BOOTINFO) #### SYSSET Subfunction 0xE0 -- Set Boot Information (BOOTINFO)

2
Source/HBIOS/Config/RCZ80_std.asm

@ -38,3 +38,5 @@ FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|DIDE|N8|DIO3]
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
; ;
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
SN76489ENABLE .SET FALSE ; SN76489 SOUND DRIVER

26
Source/HBIOS/audio.inc

@ -0,0 +1,26 @@
#IF AUDIOTRACE
#DEFINE AUDTRACE(STR) PUSH DE \ LD DE, STR \ CALL WRITESTR \ POP DE
#DEFINE AUDTRACE_A CALL PRTHEXBYTE
#DEFINE AUDTRACE_B PUSH AF \ LD A, B \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_D PUSH AF \ LD A, D \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_E PUSH AF \ LD A, E \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_L PUSH AF \ LD A, L \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_HL CALL PRTHEXWORDHL
#DEFINE AUDTRACE_DE PUSH DE \ PUSH DE \ POP HL \ CALL PRTHEXWORDHL \ POP DE
#DEFINE AUDTRACE_IY PUSH HL \ PUSH IY \ POP HL \ CALL PRTHEXWORDHL \ POP HL
#DEFINE AUDDEBUG(S) CALL PRTSTRD \ .TEXT S \ .TEXT "$" ; $$$$$$ PRINT STRING S TO CONSOLE - PRTD("HELLO") - NO TRAILING $ REQUIRED
#ELSE
#DEFINE AUDTRACE(S)
#DEFINE AUDTRACE_A
#DEFINE AUDTRACE_B
#DEFINE AUDTRACE_D
#DEFINE AUDTRACE_E
#DEFINE AUDTRACE_L
#DEFINE AUDTRACE_HL
#DEFINE AUDTRACE_DE
#DEFINE AUDTRACE_IY
#DEFINE AUDDEBUG(STR)
#ENDIF

3
Source/HBIOS/cfg_dyno.asm

@ -154,3 +154,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_ezz80.asm

@ -179,3 +179,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_master.asm

@ -234,3 +234,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_mk4.asm

@ -188,3 +188,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_n8.asm

@ -188,3 +188,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_rcz180.asm

@ -188,3 +188,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_rcz80.asm

@ -194,3 +194,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_sbc.asm

@ -190,3 +190,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_scz180.asm

@ -183,3 +183,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_zeta.asm

@ -134,3 +134,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

3
Source/HBIOS/cfg_zeta2.asm

@ -144,3 +144,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
; ;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

72
Source/HBIOS/hbios.asm

@ -1647,6 +1647,9 @@ HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2)
;================================================================================================== ;==================================================================================================
; ;
HB_INITTBL: HB_INITTBL:
#IF (SN76489ENABLE)
.DW SN76489_INIT
#ENDIF
#IF (CTCENABLE) #IF (CTCENABLE)
.DW CTC_INIT .DW CTC_INIT
#ENDIF #ENDIF
@ -1731,6 +1734,7 @@ HB_INITTBL:
#IF (UFENABLE) #IF (UFENABLE)
.DW UF_INIT .DW UF_INIT
#ENDIF #ENDIF
; ;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
; ;
@ -1794,6 +1798,10 @@ HB_DISPCALL:
CALL C,PANIC ; OBSOLETE! CALL C,PANIC ; OBSOLETE!
CP BF_VDA + $10 ; $40-$4F: VIDEO DISPLAY ADAPTER CP BF_VDA + $10 ; $40-$4F: VIDEO DISPLAY ADAPTER
JP C,VDA_DISPATCH JP C,VDA_DISPATCH
CP BF_SND + $08 ; $50-$58: SOUND DRIVERS
JP C,SND_DISPATCH
CP BF_SYS ; SKIP TO BF_SYS VALUE AT $F0 CP BF_SYS ; SKIP TO BF_SYS VALUE AT $F0
CALL C,PANIC ; PANIC IF LESS THAN BF_SYS CALL C,PANIC ; PANIC IF LESS THAN BF_SYS
JP SYS_DISPATCH ; OTHERWISE SYS CALL JP SYS_DISPATCH ; OTHERWISE SYS CALL
@ -2154,7 +2162,7 @@ HB_IOBNK .DB 0 ; CURRENT IO BUFFER BANK ID
; ;
RTC_DISPATCH: RTC_DISPATCH:
PUSH HL ; SAVE INCOMING HL PUSH HL ; SAVE INCOMING HL
LD HL,(RTC_DISPADR) ;
LD HL,(RTC_DISPADR) ;
EX (SP),HL EX (SP),HL
RET RET
; ;
@ -2219,6 +2227,51 @@ VDA_SIZ .EQU VDA_MAX * 4 ; EACH ENTRY IS 4 BYTES
.DB VDA_MAX ; MAX ENTRY COUNT TABLE PREFIX .DB VDA_MAX ; MAX ENTRY COUNT TABLE PREFIX
VDA_CNT .DB 0 ; ENTRY COUNT PREFIX VDA_CNT .DB 0 ; ENTRY COUNT PREFIX
VDA_TBL .FILL VDA_SIZ,0 ; SPACE FOR ENTRIES VDA_TBL .FILL VDA_SIZ,0 ; SPACE FOR ENTRIES
;
;
;==================================================================================================
; SOUND ADAPTER DEVICE DISPATCHER
;==================================================================================================
;
; ROUTE CALL TO SPECIFIED SOUND DEVICE DRIVER
; B: FUNCTION
; C: UNIT NUMBER
;
SND_DISPATCH:
PUSH IY ; SAVE INCOMING IY
LD IY, SND_TBL ; POINT IY TO START OF DIO TABLE
CALL HB_DISPCALL ; GO TO GENERIC API CALL CODE
POP IY ; RESTORE IY
RET ; AND DONE
;
; ADD AN ENTRY TO THE SND UNIT TABLE (SEE HB_ADDENT FOR DETAILS)
;
SND_ADDENT:
LD HL, SND_TBL ; POINT TO SND TABLE
JP HB_ADDENT ; ... AND GO TO COMMON CODE
;
; HBIOS VIDEO DEVICE UNIT TABLE
;
; TABLE IS BUILT DYNAMICALLY BY EACH DRIVER DURING INITIALIZATION.
; THE TABLE IS PREFIXED BY TWO BYTES. TABLE - 1 CONTAINS THE CURRENT
; NUMBER OF ENTRIES. TABLE - 2 CONTAINS THE MAXIMUM NUMBER OF ENTRIES.
; TABLE - 3 CONTAINS THE NUMBER OF SND FUNCTION IDS
; EACH ENTRY IS DEFINED AS:
;
; WORD DRIVER FUNCTION TABLE ADDRESS
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
;
SND_FNCNT .EQU 6 ; NUMBER OF SND FUNCS (FOR RANGE CHECK)
SND_MAX .EQU 2 ; UP TO 2 UNITS
SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES
;
.DB SND_FNCNT ; SND FUNCTION COUNT (FOR RANGE CHECK)
.DB SND_MAX ; MAX ENTRY COUNT TABLE PREFIX
SND_CNT .DB 0 ; ENTRY COUNT PREFIX
SND_TBL .FILL SND_SIZ,0 ; SPACE FOR ENTRIES
; ;
;================================================================================================== ;==================================================================================================
; SYSTEM FUNCTION DISPATCHER ; SYSTEM FUNCTION DISPATCHER
@ -2359,6 +2412,8 @@ SYS_GET:
JR Z,SYS_GETDIOCNT JR Z,SYS_GETDIOCNT
CP BF_SYSGET_VDACNT CP BF_SYSGET_VDACNT
JR Z,SYS_GETVDACNT JR Z,SYS_GETVDACNT
CP BF_SYSGET_SNDCNT
JR Z, SYS_GETSNDCNT
CP BF_SYSGET_TIMER CP BF_SYSGET_TIMER
JR Z,SYS_GETTIMER JR Z,SYS_GETTIMER
CP BF_SYSGET_SECS CP BF_SYSGET_SECS
@ -2477,6 +2532,13 @@ SYS_GETVDACNT:
LD E,A ; PUT IT IN E LD E,A ; PUT IT IN E
XOR A ; SIGNALS SUCCESS XOR A ; SIGNALS SUCCESS
RET RET
SYS_GETSNDCNT:
LD A,(SND_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
LD E,A ; PUT IT IN E
XOR A ; SIGNALS SUCCESS
RET
; ;
; SET SYSTEM PARAMETERS ; SET SYSTEM PARAMETERS
; PARAMETER(S) TO SET INDICATED IN C ; PARAMETER(S) TO SET INDICATED IN C
@ -3250,6 +3312,14 @@ SIZ_CTC .EQU $ - ORG_CTC
.ECHO SIZ_CTC .ECHO SIZ_CTC
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
#IF (SN76489ENABLE)
ORG_SN76489 .EQU $
#INCLUDE "sn76489.asm"
SIZ_SN76489 .EQU $ - ORG_SN76489
.ECHO "SN76489 occupies "
.ECHO SIZ_SN76489
.ECHO " bytes.\n"
#ENDIF
; ;
#DEFINE USEDELAY #DEFINE USEDELAY
#INCLUDE "util.asm" #INCLUDE "util.asm"

16
Source/HBIOS/hbios.inc

@ -51,6 +51,21 @@ BF_VDASCR .EQU BF_VDA + 11 ; SCROLL
BF_VDAKST .EQU BF_VDA + 12 ; GET KEYBOARD STATUS BF_VDAKST .EQU BF_VDA + 12 ; GET KEYBOARD STATUS
BF_VDAKFL .EQU BF_VDA + 13 ; FLUSH KEYBOARD BUFFER BF_VDAKFL .EQU BF_VDA + 13 ; FLUSH KEYBOARD BUFFER
BF_VDAKRD .EQU BF_VDA + 14 ; READ KEYBOARD BF_VDAKRD .EQU BF_VDA + 14 ; READ KEYBOARD
BF_SND .EQU $50
BF_SNDRESET .EQU BF_SND + 0 ; RESET SOUND SYSTEM
BF_SNDVOL .EQU BF_SND + 1 ; REQUEST SOUND VOL - L CONTAINS VOLUME (255 MAX, 0 SILENT) - SCALED AS REQUIRED BY DRIVER (EG: MAPS TO JUST 4 BIT RESOLUTION FOR SN76489)
BF_SNDPIT .EQU BF_SND + 2 ; REQUEST SOUND PITCH - HL CONTAINS PITCH DRIVER SPECIFIC VALUE
BF_SNDNOTE .EQU BF_SND + 3 ; REQUEST NOTE - L CONTAINS NOTE - EACH VALUE IS QUARTER NOTE
BF_SNDPLAY .EQU BF_SND + 4 ; INITIATE THE REQUESTED SOUND COMMAND
BF_SNDQUERY .EQU BF_SND + 5 ; D IS CHANNEL, E IS SUBCOMMAND
; BF_SNDQUERY SUBCOMMANDS
SND_STATUS .EQU 0
SND_CHCNT .EQU SND_STATUS + 1 ; RETURN COUNT OF CHANNELS
SND_SVOLUME .EQU SND_STATUS + 2 ; 8 BIT NUMBER
SND_SPITCH .EQU SND_STATUS + 3 ; 16 BIT NUMBER
; ;
BF_SYS .EQU $F0 BF_SYS .EQU $F0
BF_SYSRESET .EQU BF_SYS + 0 ; SOFT RESET HBIOS BF_SYSRESET .EQU BF_SYS + 0 ; SOFT RESET HBIOS
@ -70,6 +85,7 @@ BF_SYSINT .EQU BF_SYS + 12 ; MANAGE INTERRUPT VECTORS
BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
BF_SYSGET_VDACNT .EQU $40 ; GET VDA UNIT COUNT BF_SYSGET_VDACNT .EQU $40 ; GET VDA UNIT COUNT
BF_SYSGET_SNDCNT .EQU $50 ; GET VDA UNIT COUNT
BF_SYSGET_TIMER .EQU $D0 ; GET CURRENT TIMER VALUE BF_SYSGET_TIMER .EQU $D0 ; GET CURRENT TIMER VALUE
BF_SYSGET_SECS .EQU $D1 ; GET CURRENT SECONDS VALUE BF_SYSGET_SECS .EQU $D1 ; GET CURRENT SECONDS VALUE
BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION

588
Source/HBIOS/sn76489.asm

@ -0,0 +1,588 @@
;======================================================================
; SN76489 sound driver
;
; WRITTEN BY: DEAN NETHERTON
;======================================================================
;
; TODO:
;
;======================================================================
; CONSTANTS
;======================================================================
;
SN76489_PORT_LEFT .EQU $FC ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT)
SN76489_PORT_RIGHT .EQU $F8 ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT)
SN7_IDAT .EQU 0
SN7_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS
SN7_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS
SN7_CHCNT .EQU SN7_TONECNT + SN7_NOISECNT
CHANNEL_0_SILENT .EQU $9F
CHANNEL_1_SILENT .EQU $BF
CHANNEL_2_SILENT .EQU $DF
CHANNEL_3_SILENT .EQU $FF
SN7CLKDIVIDER .EQU 4
SN7CLK .EQU CPUOSC / SN7CLKDIVIDER
SN7RATIO .EQU SN7CLK * 100 / 32
SN7_FIRST_NOTE .EQU 5827 ; A1#
SN7_LAST_NODE .EQU 209300 ; C7
A1S .equ SN7RATIO / SN7_FIRST_NOTE
C7 .EQU SN7RATIO / SN7_LAST_NODE
.echo "SN76489: range of A1# (pitch: "
.echo A1S
.echo ") to C7 (pitch: "
.echo C7
.echo ")\n"
#include "audio.inc"
SN76489_INIT:
LD IY, SN7_IDAT ; POINTER TO INSTANCE DATA
LD DE,STR_MESSAGELT
CALL WRITESTR
LD A, SN76489_PORT_LEFT
CALL PRTHEXBYTE
LD DE,STR_MESSAGERT
CALL WRITESTR
LD A, SN76489_PORT_RIGHT
CALL PRTHEXBYTE
;
SN7_INIT1:
LD BC, SN7_FNTBL ; BC := FUNCTION TABLE ADDRESS
LD DE, SN7_IDAT ; DE := SN7 INSTANCE DATA PTR
CALL SND_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
CALL SN7_VOLUME_OFF
XOR A ; SIGNAL SUCCESS
RET
;======================================================================
; SN76489 DRIVER - SOUND ADAPTER (SND) FUNCTIONS
;======================================================================
;
SN7_RESET:
AUDTRACE(TRACE_INIT)
CALL SN7_VOLUME_OFF
XOR A ; SIGNAL SUCCESS
RET
SN7_VOLUME_OFF:
AUDTRACE(TRACE_VOLUME_OFF)
LD A, CHANNEL_0_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, CHANNEL_1_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, CHANNEL_2_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, CHANNEL_3_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
RET
; BITS MAPING
; SET TONE:
; 1 CC 0 PPPP (LOW)
; 0 0 PPPPPP (HIGH)
; 1 CC 1 VVVV
SN7_VOLUME:
AUDDEBUG("SN7VOL ")
AUDTRACE_L
AUDDEBUG("\r\n")
LD A, L
LD (PENDING_VOLUME), A
XOR A ; SIGNAL SUCCESS
RET
SN7_NOTE:
AUDDEBUG("SN7NOT ")
AUDTRACE_L
AUDDEBUG("\r\n")
ADD HL, HL ; SHIFT RIGHT (MULT 2) -INDEX INTO SN7NOTETBL TABLE OF WORDS
; TEST IF HL IS LARGER THAN SN7NOTETBL SIZE
OR A ; CLEAR CARRY FLAG
LD DE, SIZ_SN7NOTETBL
SBC HL, DE
JR NC, SN7_NOTE1 ; INCOMING HL DOES NOT MAP INTO SN7NOTETBL
ADD HL, DE ; RESTORE HL
LD E, L ; HL = SN7NOTETBL + HL
LD D, H
LD HL, SN7NOTETBL
ADD HL, DE
LD A, (HL) ; RETRIEVE PITCH COUNT FROM SN7NOTETBL
INC HL
LD H, (HL)
LD L, A
JR SN7_PITCH ; APPLY PITCH
SN7_NOTE1:
OR $FF ; not implemented yet
RET
SN7_PITCH:
AUDDEBUG("SN7PIT ")
AUDTRACE_HL
AUDDEBUG("\r\n")
LD (PENDING_PITCH), HL
XOR A ; SIGNAL SUCCESS
RET
SN7_PLAY:
AUDDEBUG("SN7PLY ")
AUDTRACE_D
AUDDEBUG("\r\n")
CALL SN7_APPLY_VOL
CALL SN7_APPLY_PIT
XOR A ; SIGNAL SUCCESS
RET
SN7_QUERY:
LD A, E
CP SND_CHCNT
JR Z, SN7_QUERY_CHCNT
CP SND_SPITCH
JR Z, SN7_QUERY_PITCH
CP SND_SVOLUME
JR Z, SN7_QUERY_VOLUME
OR $FF ; SIGNAL FAILURE
RET
SN7_QUERY_CHCNT:
LD B, SN7_TONECNT
LD C, SN7_NOISECNT
XOR A
RET
SN7_QUERY_PITCH:
LD HL, (PENDING_PITCH)
XOR A
RET
SN7_QUERY_VOLUME:
LD A, (PENDING_VOLUME)
LD L, A
LD H, 0
XOR A
RET
;
; UTIL FUNCTIONS
;
SN7_APPLY_VOL: ; APPLY VOLUME TO BOTH LEFT AND RIGHT CHANNELS
PUSH BC ; D CONTAINS THE CHANNEL NUMBER
PUSH AF
LD A, D
AND $3
RLCA
RLCA
RLCA
RLCA
RLCA
OR $90
LD B, A
LD A, (PENDING_VOLUME)
RRCA
RRCA
RRCA
RRCA
AND $0F
LD C, A
LD A, $0F
SUB C
AND $0F
OR B ; A CONTAINS COMMAND TO SET VOLUME FOR CHANNEL
AUDTRACE(TRACE_PORT_WR)
AUDTRACE_A
AUDTRACE(TRACE_NEWLINE)
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
POP AF
POP BC
RET
SN7_APPLY_PIT:
PUSH DE
PUSH BC
PUSH AF
LD HL, (PENDING_PITCH)
LD A, D
AND $3
RLCA
RLCA
RLCA
RLCA
RLCA
OR $80
LD B, A ; PITCH COMMAND 1 - CONTAINS CHANNEL ONLY
LD A, L ; GET LOWER 4 BITS FOR COMMAND 1
AND $F
OR B ; A NOW CONATINS FIRST PITCH COMMAND
AUDTRACE(TRACE_PORT_WR)
AUDTRACE_A
AUDTRACE(TRACE_NEWLINE)
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, L ; RIGHT SHIFT OUT THE LOWER 4 BITS
RRCA
RRCA
RRCA
RRCA
AND $F
LD B, A
LD A, H
AND $3
RLCA
RLCA
RLCA
RLCA ; AND PLACE IN BITS 5 AND 6
OR B ; OR THE TWO SETS OF BITS TO MAKE 2ND PITCH COMMAND
AUDTRACE(TRACE_PORT_WR)
AUDTRACE_A
AUDTRACE(TRACE_NEWLINE)
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
POP AF
POP BC
POP DE
RET
SN7_FNTBL:
.DW SN7_RESET
.DW SN7_VOLUME
.DW SN7_PITCH
.DW SN7_NOTE
.DW SN7_PLAY
.DW SN7_QUERY
#IF (($ - SN7_FNTBL) != (SND_FNCNT * 2))
.ECHO "*** INVALID SND FUNCTION TABLE ***\n"
FAIL
#ENDIF
PENDING_PITCH
.DW 0 ; PENDING PITCH (10 BITS)
PENDING_VOLUME
.DB 0 ; PENDING VOL (8 BITS -> downoverted to 4 BITS and inverted)
STR_MESSAGELT .DB "\r\nSN76489: LEFT IO=0x$"
STR_MESSAGERT .DB ", RIGHT IO=0x$"
#IF AUDIOTRACE
TRACE_INIT .DB "\r\nSN7_INIT CALLED\r\n$"
TRACE_VOLUME_OFF .DB "\r\nSN7_VOLUME_OFF\r\n$"
TRACE_VOLUME_SET .DB "\r\nSN7_VOLUME_SET CH: $"
TRACE_PLAY .DB "\r\nPLAY\r\n$"
TRACE_VOLUME .DB ", VOL: $"
TRACE_PORT_WR .DB "\r\nOUT SN76489, $"
TRACE_PITCH_SET .DB "\r\nSN7_PITCH_SET CH: $"
TRACE_PITCH .DB ", PITCH: $"
TRACE_NEWLINE .DB "\r\n$"
#ENDIF
; THE FREQUENCY BY QUATER TONE STARTING AT A1#
SN7NOTETBL:
.dw A1S
.dw SN7RATIO / 5912
.dw SN7RATIO / 5998
.dw SN7RATIO / 6085
.dw SN7RATIO / 6174
.dw SN7RATIO / 6264
.dw SN7RATIO / 6355
.dw SN7RATIO / 6447
.dw SN7RATIO / 6541
.dw SN7RATIO / 6636
.dw SN7RATIO / 6733
.dw SN7RATIO / 6831
.dw SN7RATIO / 6930
.dw SN7RATIO / 7031
.dw SN7RATIO / 7133
.dw SN7RATIO / 7237
.dw SN7RATIO / 7342
.dw SN7RATIO / 7449
.dw SN7RATIO / 7557
.dw SN7RATIO / 7667
.dw SN7RATIO / 7778
.dw SN7RATIO / 7891
.dw SN7RATIO / 8006
.dw SN7RATIO / 8122
.dw SN7RATIO / 8241
.dw SN7RATIO / 8361
.dw SN7RATIO / 8482
.dw SN7RATIO / 8606
.dw SN7RATIO / 8731
.dw SN7RATIO / 8858
.dw SN7RATIO / 8987
.dw SN7RATIO / 9118
.dw SN7RATIO / 9250
.dw SN7RATIO / 9385
.dw SN7RATIO / 9521
.dw SN7RATIO / 9660
.dw SN7RATIO / 9800
.dw SN7RATIO / 9943
.dw SN7RATIO / 10087
.dw SN7RATIO / 10234
.dw SN7RATIO / 10383
.dw SN7RATIO / 10534
.dw SN7RATIO / 10687
.dw SN7RATIO / 10843
.dw SN7RATIO / 11000
.dw SN7RATIO / 11160
.dw SN7RATIO / 11322
.dw SN7RATIO / 11487
.dw SN7RATIO / 11654
.dw SN7RATIO / 11824
.dw SN7RATIO / 11995
.dw SN7RATIO / 12170
.dw SN7RATIO / 12347
.dw SN7RATIO / 12527
.dw SN7RATIO / 12709
.dw SN7RATIO / 12894
.dw SN7RATIO / 13081
.dw SN7RATIO / 13271
.dw SN7RATIO / 13464
.dw SN7RATIO / 13660
.dw SN7RATIO / 13859
.dw SN7RATIO / 14061
.dw SN7RATIO / 14265
.dw SN7RATIO / 14473
.dw SN7RATIO / 14683
.dw SN7RATIO / 14897
.dw SN7RATIO / 15113
.dw SN7RATIO / 15333
.dw SN7RATIO / 15556
.dw SN7RATIO / 15782
.dw SN7RATIO / 16012
.dw SN7RATIO / 16245
.dw SN7RATIO / 16481
.dw SN7RATIO / 16721
.dw SN7RATIO / 16964
.dw SN7RATIO / 17211
.dw SN7RATIO / 17461
.dw SN7RATIO / 17715
.dw SN7RATIO / 17973
.dw SN7RATIO / 18234
.dw SN7RATIO / 18500
.dw SN7RATIO / 18769
.dw SN7RATIO / 19042
.dw SN7RATIO / 19319
.dw SN7RATIO / 19600
.dw SN7RATIO / 19885
.dw SN7RATIO / 20174
.dw SN7RATIO / 20468
.dw SN7RATIO / 20765
.dw SN7RATIO / 21067
.dw SN7RATIO / 21373
.dw SN7RATIO / 21684
.dw SN7RATIO / 22000
.dw SN7RATIO / 22320
.dw SN7RATIO / 22645
.dw SN7RATIO / 22974
.dw SN7RATIO / 23308
.dw SN7RATIO / 23647
.dw SN7RATIO / 23991
.dw SN7RATIO / 24340
.dw SN7RATIO / 24694
.dw SN7RATIO / 25053
.dw SN7RATIO / 25418
.dw SN7RATIO / 25787
.dw SN7RATIO / 26163
.dw SN7RATIO / 26544
.dw SN7RATIO / 26930
.dw SN7RATIO / 27321
.dw SN7RATIO / 27718
.dw SN7RATIO / 28121
.dw SN7RATIO / 28530
.dw SN7RATIO / 28945
.dw SN7RATIO / 29366
.dw SN7RATIO / 29793
.dw SN7RATIO / 30226
.dw SN7RATIO / 30666
.dw SN7RATIO / 31113
.dw SN7RATIO / 31566
.dw SN7RATIO / 32025
.dw SN7RATIO / 32490
.dw SN7RATIO / 32963
.dw SN7RATIO / 33442
.dw SN7RATIO / 33929
.dw SN7RATIO / 34422
.dw SN7RATIO / 34923
.dw SN7RATIO / 35431
.dw SN7RATIO / 35946
.dw SN7RATIO / 36469
.dw SN7RATIO / 36999
.dw SN7RATIO / 37537
.dw SN7RATIO / 38083
.dw SN7RATIO / 38637
.dw SN7RATIO / 39200
.dw SN7RATIO / 39770
.dw SN7RATIO / 40349
.dw SN7RATIO / 40936
.dw SN7RATIO / 41530
.dw SN7RATIO / 42134
.dw SN7RATIO / 42747
.dw SN7RATIO / 43369
.dw SN7RATIO / 44000
.dw SN7RATIO / 44640
.dw SN7RATIO / 45289
.dw SN7RATIO / 45948
.dw SN7RATIO / 46616
.dw SN7RATIO / 47294
.dw SN7RATIO / 47982
.dw SN7RATIO / 48680
.dw SN7RATIO / 49388
.dw SN7RATIO / 50106
.dw SN7RATIO / 50835
.dw SN7RATIO / 51575
.dw SN7RATIO / 52325
.dw SN7RATIO / 53086
.dw SN7RATIO / 53858
.dw SN7RATIO / 54642
.dw SN7RATIO / 55437
.dw SN7RATIO / 56243
.dw SN7RATIO / 57061
.dw SN7RATIO / 57891
.dw SN7RATIO / 58733
.dw SN7RATIO / 59587
.dw SN7RATIO / 60454
.dw SN7RATIO / 61333
.dw SN7RATIO / 62225
.dw SN7RATIO / 63130
.dw SN7RATIO / 64048
.dw SN7RATIO / 64980
.dw SN7RATIO / 65925
.dw SN7RATIO / 66884
.dw SN7RATIO / 67857
.dw SN7RATIO / 68844
.dw SN7RATIO / 69846
.dw SN7RATIO / 70862
.dw SN7RATIO / 71893
.dw SN7RATIO / 72938
.dw SN7RATIO / 73999
.dw SN7RATIO / 75075
.dw SN7RATIO / 76167
.dw SN7RATIO / 77275
.dw SN7RATIO / 78399
.dw SN7RATIO / 79539
.dw SN7RATIO / 80696
.dw SN7RATIO / 81870
.dw SN7RATIO / 83061
.dw SN7RATIO / 84269
.dw SN7RATIO / 85495
.dw SN7RATIO / 86738
.dw SN7RATIO / 88000
.dw SN7RATIO / 89280
.dw SN7RATIO / 90579
.dw SN7RATIO / 91896
.dw SN7RATIO / 93233
.dw SN7RATIO / 94589
.dw SN7RATIO / 95965
.dw SN7RATIO / 97361
.dw SN7RATIO / 98777
.dw SN7RATIO / 100214
.dw SN7RATIO / 101671
.dw SN7RATIO / 103150
.dw SN7RATIO / 104650
.dw SN7RATIO / 106172
.dw SN7RATIO / 107716
.dw SN7RATIO / 109283
.dw SN7RATIO / 110873
.dw SN7RATIO / 112486
.dw SN7RATIO / 114122
.dw SN7RATIO / 115782
.dw SN7RATIO / 117466
.dw SN7RATIO / 119175
.dw SN7RATIO / 120908
.dw SN7RATIO / 122667
.dw SN7RATIO / 124451
.dw SN7RATIO / 126261
.dw SN7RATIO / 128098
.dw SN7RATIO / 129961
.dw SN7RATIO / 131851
.dw SN7RATIO / 133769
.dw SN7RATIO / 135715
.dw SN7RATIO / 137689
.dw SN7RATIO / 139691
.dw SN7RATIO / 141723
.dw SN7RATIO / 143784
.dw SN7RATIO / 145876
.dw SN7RATIO / 147998
.dw SN7RATIO / 150151
.dw SN7RATIO / 152335
.dw SN7RATIO / 154550
.dw SN7RATIO / 156798
.dw SN7RATIO / 159079
.dw SN7RATIO / 161393
.dw SN7RATIO / 163740
.dw SN7RATIO / 166122
.dw SN7RATIO / 168538
.dw SN7RATIO / 170990
.dw SN7RATIO / 173477
.dw SN7RATIO / 176000
.dw SN7RATIO / 178560
.dw SN7RATIO / 181157
.dw SN7RATIO / 183792
.dw SN7RATIO / 186466
.dw SN7RATIO / 189178
.dw SN7RATIO / 191930
.dw SN7RATIO / 194722
.dw SN7RATIO / 197553
.dw SN7RATIO / 200426
.dw SN7RATIO / 203342
.dw SN7RATIO / 206299
.dw C7
SIZ_SN7NOTETBL .EQU $ - SN7NOTETBL
.ECHO "SN76489 approx "
.ECHO SIZ_SN7NOTETBL / 2 / 4 /12
.ECHO " Octaves. Last note index supported: "
.echo SIZ_SN7NOTETBL / 2
.echo "\n"

89
Source/HBIOS/std.asm

@ -12,7 +12,7 @@
; 8. RCZ180 RC2014 based system with Z180 CPU ; 8. RCZ180 RC2014 based system with Z180 CPU
; 9. EZZ80 Easy Z80, Z80 SBC w/ RC2014 bus and CTC ; 9. EZZ80 Easy Z80, Z80 SBC w/ RC2014 bus and CTC
; 10. SCZ180 Steve Cousins Z180 based system ; 10. SCZ180 Steve Cousins Z180 based system
; 11. DYNO Steve Garcia's Dyno Micro-ATX Motherboard
; 11. DYNO Steve Garcia's Dyno Micro-ATX Motherboard
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
@ -207,7 +207,7 @@ SER_STOP2 .EQU 1 << 2
; AND STORED AS 5 BITS: YXXXX ; AND STORED AS 5 BITS: YXXXX
; ;
SER_BAUD75 .EQU $00 << 8 SER_BAUD75 .EQU $00 << 8
SER_BAUD150 .EQU $01 << 8
SER_BAUD150 .EQU $01 << 8
SER_BAUD300 .EQU $02 << 8 SER_BAUD300 .EQU $02 << 8
SER_BAUD600 .EQU $03 << 8 SER_BAUD600 .EQU $03 << 8
SER_BAUD1200 .EQU $04 << 8 SER_BAUD1200 .EQU $04 << 8
@ -217,34 +217,34 @@ SER_BAUD9600 .EQU $07 << 8
SER_BAUD19200 .EQU $08 << 8 SER_BAUD19200 .EQU $08 << 8
SER_BAUD38400 .EQU $09 << 8 SER_BAUD38400 .EQU $09 << 8
SER_BAUD76800 .EQU $0A << 8 SER_BAUD76800 .EQU $0A << 8
SER_BAUD153600 .EQU $0B << 8
SER_BAUD307200 .EQU $0C << 8
SER_BAUD614400 .EQU $0D << 8
SER_BAUD1228800 .EQU $0E << 8
SER_BAUD2457600 .EQU $0F << 8
SER_BAUD225 .EQU $10 << 8
SER_BAUD450 .EQU $11 << 8
SER_BAUD900 .EQU $12 << 8
SER_BAUD1800 .EQU $13 << 8
SER_BAUD3600 .EQU $14 << 8
SER_BAUD7200 .EQU $15 << 8
SER_BAUD14400 .EQU $16 << 8
SER_BAUD28800 .EQU $17 << 8
SER_BAUD57600 .EQU $18 << 8
SER_BAUD153600 .EQU $0B << 8
SER_BAUD307200 .EQU $0C << 8
SER_BAUD614400 .EQU $0D << 8
SER_BAUD1228800 .EQU $0E << 8
SER_BAUD2457600 .EQU $0F << 8
SER_BAUD225 .EQU $10 << 8
SER_BAUD450 .EQU $11 << 8
SER_BAUD900 .EQU $12 << 8
SER_BAUD1800 .EQU $13 << 8
SER_BAUD3600 .EQU $14 << 8
SER_BAUD7200 .EQU $15 << 8
SER_BAUD14400 .EQU $16 << 8
SER_BAUD28800 .EQU $17 << 8
SER_BAUD57600 .EQU $18 << 8
SER_BAUD115200 .EQU $19 << 8 SER_BAUD115200 .EQU $19 << 8
SER_BAUD230400 .EQU $1A << 8 SER_BAUD230400 .EQU $1A << 8
SER_BAUD460800 .EQU $1B << 8 SER_BAUD460800 .EQU $1B << 8
SER_BAUD921600 .EQU $1C << 8
SER_BAUD1843200 .EQU $1D << 8
SER_BAUD3686400 .EQU $1E << 8
SER_BAUD7372800 .EQU $1F << 8
SER_BAUD921600 .EQU $1C << 8
SER_BAUD1843200 .EQU $1D << 8
SER_BAUD3686400 .EQU $1E << 8
SER_BAUD7372800 .EQU $1F << 8
; ;
SER_XON .EQU 1 << 6 SER_XON .EQU 1 << 6
SER_DTR .EQU 1 << 7 SER_DTR .EQU 1 << 7
SER_RTS .EQU 1 << 13 SER_RTS .EQU 1 << 13
; ;
SER_75_8N1 .EQU SER_BAUD75 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_150_8N1 .EQU SER_BAUD150 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_75_8N1 .EQU SER_BAUD75 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_150_8N1 .EQU SER_BAUD150 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_300_8N1 .EQU SER_BAUD300 | SER_DATA8 | SER_PARNONE | SER_STOP1 SER_300_8N1 .EQU SER_BAUD300 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_600_8N1 .EQU SER_BAUD600 | SER_DATA8 | SER_PARNONE | SER_STOP1 SER_600_8N1 .EQU SER_BAUD600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1200_8N1 .EQU SER_BAUD1200 | SER_DATA8 | SER_PARNONE | SER_STOP1 SER_1200_8N1 .EQU SER_BAUD1200 | SER_DATA8 | SER_PARNONE | SER_STOP1
@ -254,27 +254,27 @@ SER_9600_8N1 .EQU SER_BAUD9600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_19200_8N1 .EQU SER_BAUD19200 | SER_DATA8 | SER_PARNONE | SER_STOP1 SER_19200_8N1 .EQU SER_BAUD19200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_38400_8N1 .EQU SER_BAUD38400 | SER_DATA8 | SER_PARNONE | SER_STOP1 SER_38400_8N1 .EQU SER_BAUD38400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_76800_8N1 .EQU SER_BAUD76800 | SER_DATA8 | SER_PARNONE | SER_STOP1 SER_76800_8N1 .EQU SER_BAUD76800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_153600_8N1 .EQU SER_BAUD153600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_307200_8N1 .EQU SER_BAUD307200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_614400_8N1 .EQU SER_BAUD614400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1228800_8N1 .EQU SER_BAUD1228800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_2457600_8N1 .EQU SER_BAUD2457600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_225_8N1 .EQU SER_BAUD225 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_450_8N1 .EQU SER_BAUD450 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_900_8N1 .EQU SER_BAUD900 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1800_8N1 .EQU SER_BAUD1800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3600_8N1 .EQU SER_BAUD3600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7200_8N1 .EQU SER_BAUD7200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_14400_8N1 .EQU SER_BAUD14400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_28800_8N1 .EQU SER_BAUD28800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_57600_8N1 .EQU SER_BAUD57600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_153600_8N1 .EQU SER_BAUD153600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_307200_8N1 .EQU SER_BAUD307200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_614400_8N1 .EQU SER_BAUD614400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1228800_8N1 .EQU SER_BAUD1228800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_2457600_8N1 .EQU SER_BAUD2457600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_225_8N1 .EQU SER_BAUD225 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_450_8N1 .EQU SER_BAUD450 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_900_8N1 .EQU SER_BAUD900 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1800_8N1 .EQU SER_BAUD1800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3600_8N1 .EQU SER_BAUD3600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7200_8N1 .EQU SER_BAUD7200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_14400_8N1 .EQU SER_BAUD14400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_28800_8N1 .EQU SER_BAUD28800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_57600_8N1 .EQU SER_BAUD57600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_115200_8N1 .EQU SER_BAUD115200 | SER_DATA8 | SER_PARNONE | SER_STOP1 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_230400_8N1 .EQU SER_BAUD230400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_460800_8N1 .EQU SER_BAUD460800 | SER_DATA8 | SER_PARNONE | SER_STOP1 SER_460800_8N1 .EQU SER_BAUD460800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_921600_8N1 .EQU SER_BAUD921600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1843200_8N1 .EQU SER_BAUD1843200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3686400_8N1 .EQU SER_BAUD3686400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7372800_8N1 .EQU SER_BAUD7372800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_921600_8N1 .EQU SER_BAUD921600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1843200_8N1 .EQU SER_BAUD1843200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3686400_8N1 .EQU SER_BAUD3686400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7372800_8N1 .EQU SER_BAUD7372800 | SER_DATA8 | SER_PARNONE | SER_STOP1
; ;
; TERMENABLE CONTROLS INCLUSION OF TERMINAL PSEUDO-DEVICE DRIVER ; TERMENABLE CONTROLS INCLUSION OF TERMINAL PSEUDO-DEVICE DRIVER
; IT IS SET TO TRUE BY THE INCLUSION OF ANY VDA DRIVER. ; IT IS SET TO TRUE BY THE INCLUSION OF ANY VDA DRIVER.
@ -304,7 +304,7 @@ EMUTYP_ANSI .EQU 2 ; ANSI
; ;
; DEVICE DRIVER TO BE INITIALIZED FIRST. FIRST CIO DRIVER, UNIT 0 INITIALIZED BECOMES PRIMARY CONSOLE. ; DEVICE DRIVER TO BE INITIALIZED FIRST. FIRST CIO DRIVER, UNIT 0 INITIALIZED BECOMES PRIMARY CONSOLE.
; IS AN INDEX INTO THE ENABLED INITIALIZATION DRIVER LIST i.e. ASCI, UART, SIO, ACIA, PIO, UF ETC. ; IS AN INDEX INTO THE ENABLED INITIALIZATION DRIVER LIST i.e. ASCI, UART, SIO, ACIA, PIO, UF ETC.
; EXAMPLE: IF ONLY UART, SIO AND PIO ARE ENABLE AND THE SIO IS DESIRED AS THE PRIMARY CONSOLE,
; EXAMPLE: IF ONLY UART, SIO AND PIO ARE ENABLE AND THE SIO IS DESIRED AS THE PRIMARY CONSOLE,
; SET FORCECON TO 2 IN YOUR CUSTOM CONFIGURATION FILE i.e. "FORCECON: .SET 2" ; SET FORCECON TO 2 IN YOUR CUSTOM CONFIGURATION FILE i.e. "FORCECON: .SET 2"
; ;
FORCECON .EQU 0 ; DEFAULT IS TO FOLLOW NORMAL SEQUENCE FORCECON .EQU 0 ; DEFAULT IS TO FOLLOW NORMAL SEQUENCE
@ -430,7 +430,7 @@ GAM_LOC .EQU $0200 ; GAME 2048
GAM_SIZ .EQU $0900 GAM_SIZ .EQU $0900
GAM_END .EQU GAM_LOC + GAM_SIZ GAM_END .EQU GAM_LOC + GAM_SIZ
USR_LOC .EQU $0200 ; USER
USR_LOC .EQU $0200 ; USER
USR_SIZ .EQU $1000 USR_SIZ .EQU $1000
USR_END .EQU USR_LOC + USR_SIZ USR_END .EQU USR_LOC + USR_SIZ
@ -462,7 +462,7 @@ INT_SIO0 .EQU 13 ; ZILOG SIO 0, CHANNEL A & B
INT_SIO1 .EQU 14 ; ZILOG SIO 1, CHANNEL A & B INT_SIO1 .EQU 14 ; ZILOG SIO 1, CHANNEL A & B
#ELSE #ELSE
; Z80-BASED SYSTEMS ; Z80-BASED SYSTEMS
INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A
@ -477,7 +477,7 @@ INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A
INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
#ENDIF #ENDIF
#DEFINE IVT(INTX) HB_IVT+(INTX * 4)+1 #DEFINE IVT(INTX) HB_IVT+(INTX * 4)+1
#DEFINE VEC(INTX) INTX*2 #DEFINE VEC(INTX) INTX*2
@ -488,6 +488,7 @@ INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
#DEFINE PRTC(C) CALL PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X') #DEFINE PRTC(C) CALL PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X')
#DEFINE PRTS(S) CALL PRTSTRD \ .TEXT S ; PRINT STRING S TO CONSOLE - PRTD("HELLO") #DEFINE PRTS(S) CALL PRTSTRD \ .TEXT S ; PRINT STRING S TO CONSOLE - PRTD("HELLO")
#DEFINE PRTX(X) CALL PRTSTRI \ .DW X ; PRINT STRING AT ADDRESS X TO CONSOLE - PRTI(STR_HELLO) #DEFINE PRTX(X) CALL PRTSTRI \ .DW X ; PRINT STRING AT ADDRESS X TO CONSOLE - PRTI(STR_HELLO)
#DEFINE DEBUG(S) CALL PRTSTRD \ .TEXT S \ .TEXT "$" ; $$$$$$ PRINT STRING S TO CONSOLE - PRTD("HELLO") - NO TRAILING $ REQUIRED
; ;
#DEFINE XIO_PRTC(C) CALL XIO_PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X') #DEFINE XIO_PRTC(C) CALL XIO_PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X')
#DEFINE XIO_PRTS(S) CALL XIO_PRTSTRD \ .DB S ; PRINT STRING S TO CONSOLE - PRTD("HELLO") #DEFINE XIO_PRTS(S) CALL XIO_PRTSTRD \ .DB S ; PRINT STRING S TO CONSOLE - PRTD("HELLO")

2
Source/Makefile

@ -2,7 +2,7 @@
# order is actually important, because of build dependencies # order is actually important, because of build dependencies
# #
SUBDIRS = Prop SUBDIRS = Prop
SUBDIRS += Apps
SUBDIRS += Apps
SUBDIRS += CBIOS SUBDIRS += CBIOS
SUBDIRS += Forth SUBDIRS += Forth
SUBDIRS += Fonts SUBDIRS += Fonts

Loading…
Cancel
Save