mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Update spk.asm
Align note table to architrecture standard. Quarter notes not supported - returns error status. Round detected cpu frequency up
This commit is contained in:
@@ -24,6 +24,9 @@ SP_IDAT .EQU 0 ; NO INSTANCE DATA ASSOCIATED WITH THIS DEVICE
|
||||
SP_TONECNT .EQU 1 ; COUNT NUMBER OF TONE CHANNELS
|
||||
SP_NOISECNT .EQU 0 ; COUNT NUMBER OF NOISE CHANNELS
|
||||
;
|
||||
; FOR OTHER DRIVERS, THE PERIOD VALUE FOR THE TONE IS STORED AT PENDING_PERIOD
|
||||
; FOR THE SPK DRIVER THE ADDRESS IN THE TONE TABLE IS STORED IN PENDING_PERIOD
|
||||
;
|
||||
SP_PENDING_PERIOD .DW SP_NOTE_C8 ; PENDING PERIOD (16 BITS)
|
||||
SP_PENDING_VOLUME .DB $FF ; PENDING VOL (8 BITS)
|
||||
;
|
||||
@@ -77,17 +80,39 @@ SP_STUB:
|
||||
;======================================================================
|
||||
;
|
||||
SP_NOTE:
|
||||
; CALL PRTHEXWORDHL
|
||||
; CALL PC_COLON
|
||||
PUSH HL
|
||||
PUSH DE ; ON ENTRY L IS A NOTE INDEX
|
||||
LD H,0 ; CONVERT THIS NOTE INDEX
|
||||
ADD HL,HL ; TO THE ASSOCIATED ENTRY
|
||||
ADD HL,HL ; IN THE TUNE TABLE.
|
||||
PUSH DE ; ON ENTRY HL IS A NOTE INDEX
|
||||
LD A,L
|
||||
AND 00000011B
|
||||
JR Z,SP_NOTE1
|
||||
;
|
||||
LD HL,$FFFF ; QUARTER NOTES
|
||||
JR SP_NOTE2 ; NOT SUPPORTED
|
||||
;
|
||||
; LD A,L
|
||||
; AND 11111100B
|
||||
; LD L,A
|
||||
;
|
||||
SP_NOTE1:
|
||||
; LD H,0 ; CONVERT THIS NOTE INDEX
|
||||
; ADD HL,HL ; TO THE ASSOCIATED ENTRY
|
||||
; ADD HL,HL ; IN THE TUNE TABLE.
|
||||
; SRL H
|
||||
; RR L
|
||||
; SRL H
|
||||
; RR L
|
||||
LD DE,SP_TUNTBL ; SAVE THIS ADDRESS AS
|
||||
ADD HL,DE ; THE PERIOD
|
||||
SP_NOTE2:
|
||||
; CALL PRTHEXWORDHL
|
||||
; CALL NEWLINE
|
||||
LD (SP_PENDING_PERIOD),HL
|
||||
POP DE
|
||||
POP HL
|
||||
RET
|
||||
|
||||
;
|
||||
;======================================================================
|
||||
; SOUND DRIVER FUNCTION - QUERY AND SUBFUNCTIONS
|
||||
@@ -132,14 +157,24 @@ SP_QUERY_DEV:
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; INITIALIZE THE TONE TABLE
|
||||
; INITIALIZE THE TONE TABLE - ONLY ACCURATE FOR 1MHZ INCREMENTS
|
||||
;======================================================================
|
||||
;
|
||||
SP_SETTBL:
|
||||
LD A,(CB_CPUMHZ) ; GET CPU SPEED.
|
||||
LD C,A
|
||||
LD HL,(CB_CPUKHZ) ; GET CPU SPEED.
|
||||
LD DE,1000 ; CONVERT TO MHZ
|
||||
CALL DIV16
|
||||
;
|
||||
LD B,SP_NOTCNT ; SET NUMBER OF NOTES TO
|
||||
LD DE,900 ; IF MHZ IS WITHIN 10% OF
|
||||
SBC HL,DE ; NEXT INTEGER INCREMENT
|
||||
JP M,SP_SETTBL3 ; THEN BUMP UP. I.E. 9.928MHZ
|
||||
INC C ; BECOMES 10MHZ
|
||||
;
|
||||
SP_SETTBL3:
|
||||
; LD A,C
|
||||
; CALL PRTHEXBYTE
|
||||
;
|
||||
LD B,SP_NOTCNT ; SET NUMBER OF NOTES TO
|
||||
LD HL,SP_TUNTBL+2 ; ADJUST AND START POINT
|
||||
;
|
||||
SP_SETTBL2:
|
||||
@@ -179,6 +214,13 @@ SP_SETTBL1: ; 1MHZ NOTE
|
||||
SP_PLAY:
|
||||
LD HL,(SP_PENDING_PERIOD) ; SELECT NOTE
|
||||
;
|
||||
LD A,$FF ; EXIT WITH ERROR
|
||||
CP H ; STATUS IF INVALID
|
||||
JR NZ,SP_PLAY1 ; PERIOD ($FFFF)
|
||||
CP L
|
||||
RET Z
|
||||
;
|
||||
SP_PLAY1:
|
||||
LD E,(HL) ; LOAD 1ST ARG
|
||||
INC HL ; IN DE
|
||||
LD D,(HL)
|
||||
@@ -261,7 +303,7 @@ BE_AGAIN:
|
||||
BE_END:
|
||||
HB_EI
|
||||
POP IX
|
||||
RET
|
||||
RET ; ALWAYS EXITS WITH SUCCESS STATUS (A=0)
|
||||
;
|
||||
; STANDARD ONE SECOND TONE TABLES AT 1MHZ (UNCOMPENSATED). FOR SP_BEEPER, FIRST WORD LOADED INTO DE, SECOND INTO HL
|
||||
;
|
||||
@@ -269,6 +311,10 @@ BE_END:
|
||||
;
|
||||
; https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=boards:sbc:sbc_v2:sbc_v2-004:spk_beep_tuntbl.xlsx
|
||||
;
|
||||
SP_TUN:
|
||||
.DW -$1, $FFFF ; C0
|
||||
.DW -$1, $FFFF ; C
|
||||
.DW -$1, $FFFF ; D0
|
||||
SP_TUNTBL:
|
||||
.DW $13, $191A ; D
|
||||
.DW $14, $17B3 ; E0
|
||||
|
||||
Reference in New Issue
Block a user