mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
sn76489: refactor to support full note range
No need to full mapping table Range can be consistent with all sound drivers
This commit is contained in:
@@ -6,10 +6,11 @@
|
||||
#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_BC PUSH HL \ PUSH BC \ POP HL \ CALL PRTHEXWORDHL \ POP HL
|
||||
#DEFINE AUDTRACE_DE PUSH HL \ PUSH DE \ POP HL \ CALL PRTHEXWORDHL \ POP HL
|
||||
#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
|
||||
#DEFINE AUDDEBUG(S) push hl \ CALL PRTSTRD \ .TEXT S \ .TEXT "$" \ pop hl ; $$$$$$ PRINT STRING S TO CONSOLE - PRTD("HELLO") - NO TRAILING $ REQUIRED
|
||||
|
||||
#DEFINE AUDTRACE_CR AUDDEBUG("\r\n$")
|
||||
|
||||
@@ -20,6 +21,7 @@
|
||||
#DEFINE AUDTRACE_D
|
||||
#DEFINE AUDTRACE_E
|
||||
#DEFINE AUDTRACE_L
|
||||
#DEFINE AUDTRACE_BC
|
||||
#DEFINE AUDTRACE_HL
|
||||
#DEFINE AUDTRACE_DE
|
||||
#DEFINE AUDTRACE_IY
|
||||
|
||||
@@ -26,19 +26,6 @@ SN7CLKDIVIDER .EQU 4
|
||||
SN7CLK .EQU CPUOSC / SN7CLKDIVIDER
|
||||
SN7RATIO .EQU SN7CLK * 100 / 32
|
||||
|
||||
|
||||
SN7_FIRST_NOTE .EQU 5827 ; A1#
|
||||
SN7_LAST_NOTE .EQU 209300 ; C7
|
||||
|
||||
A1S .EQU SN7RATIO / SN7_FIRST_NOTE
|
||||
C7 .EQU SN7RATIO / SN7_LAST_NOTE
|
||||
|
||||
.ECHO "SN76489: range of A1# (period: "
|
||||
.ECHO A1S
|
||||
.ECHO ") to C7 (period: "
|
||||
.ECHO C7
|
||||
.ECHO ")\n"
|
||||
|
||||
#INCLUDE "audio.inc"
|
||||
|
||||
SN76489_INIT:
|
||||
@@ -112,22 +99,19 @@ SN7_VOLUME:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
|
||||
|
||||
SN7_NOTE:
|
||||
AUDTRACE(SNT_NOTE)
|
||||
AUDTRACE_HL
|
||||
AUDTRACE_CR
|
||||
|
||||
LD H,0
|
||||
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
|
||||
LD B, H
|
||||
LD C, L
|
||||
LD DE, 48
|
||||
|
||||
ADD HL, DE ; RESTORE HL
|
||||
CALL _DIV16
|
||||
; BC IS OCTAVE COUNT
|
||||
; HL is NOTE WITIN ACTAVE
|
||||
ADD HL, HL
|
||||
LD DE, SN7NOTETBL
|
||||
ADD HL, DE
|
||||
|
||||
@@ -136,10 +120,57 @@ SN7_NOTE:
|
||||
LD H, (HL)
|
||||
LD L, A
|
||||
|
||||
JR SN7_PERIOD ; APPLY PERIOD
|
||||
|
||||
INC C
|
||||
SN7_NOTE1:
|
||||
OR $FF ; NOT IMPLEMENTED YET
|
||||
DEC C
|
||||
JR Z, SN7_NOTE2
|
||||
SRL H
|
||||
RR L
|
||||
JR SN7_NOTE1
|
||||
|
||||
SN7_NOTE2:
|
||||
LD A, L
|
||||
OR H
|
||||
JR NZ, SN7_PERIOD
|
||||
|
||||
LD H, $FF
|
||||
LD L, $FF
|
||||
JR SN7_PERIOD
|
||||
|
||||
; Divide 16-bit values (with 16-bit result)
|
||||
; In: Divide BC by divider DE
|
||||
; Out: BC = result, HL = rest
|
||||
;
|
||||
_DIV16:
|
||||
LD HL, 0
|
||||
LD A, B
|
||||
LD B, 8
|
||||
DIV16_LOOP1:
|
||||
RLA
|
||||
ADC HL, HL
|
||||
SBC HL, DE
|
||||
JR NC, DIV16_NOADD1
|
||||
ADD HL, DE
|
||||
DIV16_NOADD1:
|
||||
DJNZ DIV16_LOOP1
|
||||
RLA
|
||||
CPL
|
||||
LD B, A
|
||||
LD A, C
|
||||
LD C, B
|
||||
LD B, 8
|
||||
DIV16_LOOP2:
|
||||
RLA
|
||||
ADC HL, HL
|
||||
SBC HL, DE
|
||||
JR NC, DIV16_NOADD2
|
||||
ADD HL, DE
|
||||
DIV16_NOADD2:
|
||||
DJNZ DIV16_LOOP2
|
||||
RLA
|
||||
CPL
|
||||
LD B, C
|
||||
LD C, A
|
||||
RET
|
||||
|
||||
SN7_PERIOD:
|
||||
@@ -147,11 +178,17 @@ SN7_PERIOD:
|
||||
AUDTRACE_HL
|
||||
AUDTRACE_CR
|
||||
|
||||
LD A, H
|
||||
CP $04
|
||||
JP NC, SN7_QUERY_PERIOD1 ; RETURN NZ IF NUMBER TOO LARGE
|
||||
; LD A, H ; IF ZERO - ERROR
|
||||
; OR L
|
||||
; JR Z, SN7_QUERY_PERIOD1
|
||||
|
||||
LD (SN7_PENDING_PERIOD), HL ;ASSUME SUCCESS
|
||||
|
||||
OR A ; IF >= 401 ERROR
|
||||
LD DE, $401
|
||||
SBC HL, DE
|
||||
JR NC, SN7_QUERY_PERIOD1
|
||||
|
||||
LD (SN7_PENDING_PERIOD), HL
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
@@ -361,257 +398,60 @@ SNT_PLAY .DB "\r\nSN7_PLAY CH: $"
|
||||
SNT_REGWR .DB "\r\nOUT SN76489, $"
|
||||
#ENDIF
|
||||
|
||||
; THE FREQUENCY BY QUARTER TONE STARTING AT A1#
|
||||
; THE FREQUENCY BY QUARTER TONE STARTING AT A0#
|
||||
; OCATVE 0 - not suported by this driver
|
||||
; FIRST PLAYABLE NOTE WILL BE $2E - 2 quater tones below a1#
|
||||
; A1# is $30
|
||||
|
||||
SN7NOTETBL:
|
||||
.DW A1S ; 5827
|
||||
.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 ; 209300
|
||||
.DW SN7RATIO / 2913
|
||||
.DW SN7RATIO / 2956
|
||||
.DW SN7RATIO / 2999
|
||||
.DW SN7RATIO / 3042
|
||||
.DW SN7RATIO / 3086
|
||||
.DW SN7RATIO / 3131
|
||||
.DW SN7RATIO / 3177
|
||||
.DW SN7RATIO / 3223
|
||||
.DW SN7RATIO / 3270
|
||||
.DW SN7RATIO / 3318
|
||||
.DW SN7RATIO / 3366
|
||||
.DW SN7RATIO / 3415
|
||||
.DW SN7RATIO / 3464
|
||||
.DW SN7RATIO / 3515
|
||||
.DW SN7RATIO / 3566
|
||||
.DW SN7RATIO / 3618
|
||||
.DW SN7RATIO / 3670
|
||||
.DW SN7RATIO / 3724
|
||||
.DW SN7RATIO / 3778
|
||||
.DW SN7RATIO / 3833
|
||||
.DW SN7RATIO / 3889
|
||||
.DW SN7RATIO / 3945
|
||||
.DW SN7RATIO / 4003
|
||||
.DW SN7RATIO / 4061
|
||||
.DW SN7RATIO / 4120
|
||||
.DW SN7RATIO / 4180
|
||||
.DW SN7RATIO / 4241
|
||||
.DW SN7RATIO / 4302
|
||||
.DW SN7RATIO / 4365
|
||||
.DW SN7RATIO / 4428
|
||||
.DW SN7RATIO / 4493
|
||||
.DW SN7RATIO / 4558
|
||||
.DW SN7RATIO / 4624
|
||||
.DW SN7RATIO / 4692
|
||||
.DW SN7RATIO / 4760
|
||||
.DW SN7RATIO / 4829
|
||||
.DW SN7RATIO / 4899
|
||||
.DW SN7RATIO / 4971
|
||||
.DW SN7RATIO / 5043
|
||||
.DW SN7RATIO / 5116
|
||||
.DW SN7RATIO / 5191
|
||||
.DW SN7RATIO / 5266
|
||||
.DW SN7RATIO / 5343
|
||||
.DW SN7RATIO / 5421
|
||||
.DW SN7RATIO / 5499
|
||||
.DW SN7RATIO / 5579
|
||||
.DW SN7RATIO / 5661
|
||||
.DW SN7RATIO / 5743
|
||||
|
||||
SIZ_SN7NOTETBL .EQU $ - SN7NOTETBL
|
||||
.ECHO "SN76489 approx "
|
||||
|
||||
Reference in New Issue
Block a user