mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
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)
This commit is contained in:
@@ -1292,6 +1292,81 @@ codes as described at the start of this section.
|
||||
|
||||
`\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)
|
||||
------------
|
||||
|
||||
@@ -1573,6 +1648,14 @@ available along with the registers/information used as input.
|
||||
| _Returned Values_
|
||||
| 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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
;
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
|
||||
SN76489ENABLE .SET FALSE ; SN76489 SOUND DRIVER
|
||||
|
||||
26
Source/HBIOS/audio.inc
Normal file
26
Source/HBIOS/audio.inc
Normal file
@@ -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
|
||||
@@ -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
|
||||
;
|
||||
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
|
||||
@@ -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
|
||||
;
|
||||
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
|
||||
@@ -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)
|
||||
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
|
||||
|
||||
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
|
||||
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
|
||||
@@ -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)
|
||||
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
|
||||
|
||||
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
|
||||
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
|
||||
@@ -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)
|
||||
FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR
|
||||
|
||||
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
|
||||
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
|
||||
@@ -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
|
||||
;
|
||||
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
|
||||
@@ -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
|
||||
;
|
||||
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
|
||||
|
||||
@@ -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)
|
||||
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
|
||||
|
||||
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
|
||||
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
|
||||
@@ -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
|
||||
;
|
||||
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
|
||||
@@ -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
|
||||
;
|
||||
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
|
||||
@@ -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
|
||||
;
|
||||
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
|
||||
@@ -1647,6 +1647,9 @@ HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2)
|
||||
;==================================================================================================
|
||||
;
|
||||
HB_INITTBL:
|
||||
#IF (SN76489ENABLE)
|
||||
.DW SN76489_INIT
|
||||
#ENDIF
|
||||
#IF (CTCENABLE)
|
||||
.DW CTC_INIT
|
||||
#ENDIF
|
||||
@@ -1731,6 +1734,7 @@ HB_INITTBL:
|
||||
#IF (UFENABLE)
|
||||
.DW UF_INIT
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
|
||||
;
|
||||
@@ -1794,6 +1798,10 @@ HB_DISPCALL:
|
||||
CALL C,PANIC ; OBSOLETE!
|
||||
CP BF_VDA + $10 ; $40-$4F: VIDEO DISPLAY ADAPTER
|
||||
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
|
||||
CALL C,PANIC ; PANIC IF LESS THAN BF_SYS
|
||||
JP SYS_DISPATCH ; OTHERWISE SYS CALL
|
||||
@@ -2154,7 +2162,7 @@ HB_IOBNK .DB 0 ; CURRENT IO BUFFER BANK ID
|
||||
;
|
||||
RTC_DISPATCH:
|
||||
PUSH HL ; SAVE INCOMING HL
|
||||
LD HL,(RTC_DISPADR) ;
|
||||
LD HL,(RTC_DISPADR) ;
|
||||
EX (SP),HL
|
||||
RET
|
||||
;
|
||||
@@ -2219,6 +2227,51 @@ VDA_SIZ .EQU VDA_MAX * 4 ; EACH ENTRY IS 4 BYTES
|
||||
.DB VDA_MAX ; MAX ENTRY COUNT TABLE PREFIX
|
||||
VDA_CNT .DB 0 ; ENTRY COUNT PREFIX
|
||||
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
|
||||
@@ -2359,6 +2412,8 @@ SYS_GET:
|
||||
JR Z,SYS_GETDIOCNT
|
||||
CP BF_SYSGET_VDACNT
|
||||
JR Z,SYS_GETVDACNT
|
||||
CP BF_SYSGET_SNDCNT
|
||||
JR Z, SYS_GETSNDCNT
|
||||
CP BF_SYSGET_TIMER
|
||||
JR Z,SYS_GETTIMER
|
||||
CP BF_SYSGET_SECS
|
||||
@@ -2477,6 +2532,13 @@ SYS_GETVDACNT:
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
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
|
||||
; PARAMETER(S) TO SET INDICATED IN C
|
||||
@@ -3250,6 +3312,14 @@ SIZ_CTC .EQU $ - ORG_CTC
|
||||
.ECHO SIZ_CTC
|
||||
.ECHO " bytes.\n"
|
||||
#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
|
||||
#INCLUDE "util.asm"
|
||||
|
||||
@@ -51,6 +51,21 @@ BF_VDASCR .EQU BF_VDA + 11 ; SCROLL
|
||||
BF_VDAKST .EQU BF_VDA + 12 ; GET KEYBOARD STATUS
|
||||
BF_VDAKFL .EQU BF_VDA + 13 ; FLUSH KEYBOARD BUFFER
|
||||
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_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_DIOCNT .EQU $10 ; GET DISK 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_SECS .EQU $D1 ; GET CURRENT SECONDS VALUE
|
||||
BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION
|
||||
|
||||
588
Source/HBIOS/sn76489.asm
Normal file
588
Source/HBIOS/sn76489.asm
Normal file
@@ -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"
|
||||
@@ -12,7 +12,7 @@
|
||||
; 8. RCZ180 RC2014 based system with Z180 CPU
|
||||
; 9. EZZ80 Easy Z80, Z80 SBC w/ RC2014 bus and CTC
|
||||
; 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
|
||||
;
|
||||
SER_BAUD75 .EQU $00 << 8
|
||||
SER_BAUD150 .EQU $01 << 8
|
||||
SER_BAUD150 .EQU $01 << 8
|
||||
SER_BAUD300 .EQU $02 << 8
|
||||
SER_BAUD600 .EQU $03 << 8
|
||||
SER_BAUD1200 .EQU $04 << 8
|
||||
@@ -217,34 +217,34 @@ SER_BAUD9600 .EQU $07 << 8
|
||||
SER_BAUD19200 .EQU $08 << 8
|
||||
SER_BAUD38400 .EQU $09 << 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_BAUD230400 .EQU $1A << 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_DTR .EQU 1 << 7
|
||||
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_600_8N1 .EQU SER_BAUD600 | 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_38400_8N1 .EQU SER_BAUD38400 | 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_230400_8N1 .EQU SER_BAUD230400 | 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
|
||||
; 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.
|
||||
; 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"
|
||||
;
|
||||
FORCECON .EQU 0 ; DEFAULT IS TO FOLLOW NORMAL SEQUENCE
|
||||
@@ -430,7 +430,7 @@ GAM_LOC .EQU $0200 ; GAME 2048
|
||||
GAM_SIZ .EQU $0900
|
||||
GAM_END .EQU GAM_LOC + GAM_SIZ
|
||||
|
||||
USR_LOC .EQU $0200 ; USER
|
||||
USR_LOC .EQU $0200 ; USER
|
||||
USR_SIZ .EQU $1000
|
||||
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
|
||||
|
||||
#ELSE
|
||||
|
||||
|
||||
; Z80-BASED SYSTEMS
|
||||
|
||||
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
|
||||
|
||||
#ENDIF
|
||||
|
||||
|
||||
#DEFINE IVT(INTX) HB_IVT+(INTX * 4)+1
|
||||
#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 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 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_PRTS(S) CALL XIO_PRTSTRD \ .DB S ; PRINT STRING S TO CONSOLE - PRTD("HELLO")
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# order is actually important, because of build dependencies
|
||||
#
|
||||
SUBDIRS = Prop
|
||||
SUBDIRS += Apps
|
||||
SUBDIRS += Apps
|
||||
SUBDIRS += CBIOS
|
||||
SUBDIRS += Forth
|
||||
SUBDIRS += Fonts
|
||||
|
||||
Reference in New Issue
Block a user