mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Correct AY38910 Off By 1 Octave Issue
I think this update corrects a long-standing issue in which the AY38910 driver played notes off by one octave.
This commit is contained in:
@@ -1399,7 +1399,7 @@ If the driver is able to generate the requested note, a success (0) is
|
||||
returned, otherwise a non-zero error state will be returned.
|
||||
|
||||
The sound chip resolution and its oscillator limit the range and
|
||||
accuracy of the notes played. The typically range of the AY-3-8910
|
||||
accuracy of the notes played. The typical range of the AY-3-8910
|
||||
is six octaves, Bb2/A#2-A7, where each value is a unique tone. Values
|
||||
above and below can still be played but each quarter tone step may not
|
||||
result in a note change.
|
||||
@@ -1409,18 +1409,18 @@ to the corresponding octave and note.
|
||||
|
||||
| Note | Oct 0 | Oct 1 | Oct 2 | Oct 3 | Oct 4 | Oct 5 | Oct 6 | Oct 7 |
|
||||
|:----- | -----:| -----:| -----:| -----:| -----:| -----:| -----:| -----:|
|
||||
| Bb/A# | 0 | 48 | 96 | 144 | 192 | 240 | 288 | 336 |
|
||||
| C | X | 8 | 56 | 104 | 152 | 200 | 248 | 296 |
|
||||
| C#/Db | X | 12 | 60 | 108 | 156 | 204 | 252 | 300 |
|
||||
| D | X | 16 | 64 | 112 | 160 | 208 | 256 | 304 |
|
||||
| D#/Eb | X | 20 | 68 | 116 | 164 | 212 | 260 | 308 |
|
||||
| E | X | 24 | 72 | 120 | 168 | 216 | 264 | 312 |
|
||||
| F | X | 28 | 76 | 124 | 172 | 220 | 268 | 316 |
|
||||
| F#/Gb | X | 32 | 80 | 128 | 176 | 224 | 272 | 320 |
|
||||
| G | X | 36 | 84 | 132 | 180 | 228 | 276 | 324 |
|
||||
| G#/Ab | X | 40 | 88 | 136 | 184 | 232 | 280 | 328 |
|
||||
| A | X | 44 | 92 | 140 | 188 | 236 | 284 | 332 |
|
||||
| A#/Bb | 0 | 48 | 96 | 144 | 192 | 240 | 288 | 336 |
|
||||
| B | 4 | 52 | 100 | 148 | 196 | 244 | 292 | 340 |
|
||||
| C | 8 | 56 | 104 | 152 | 200 | 248 | 296 | 344 |
|
||||
| C#/Db | 12 | 60 | 108 | 156 | 204 | 252 | 300 | 348 |
|
||||
| D | 16 | 64 | 112 | 160 | 208 | 256 | 304 | 352 |
|
||||
| Eb/D# | 20 | 68 | 116 | 164 | 212 | 260 | 308 | 356 |
|
||||
| E | 24 | 72 | 120 | 168 | 216 | 264 | 312 | 360 |
|
||||
| F | 28 | 76 | 124 | 172 | 220 | 268 | 316 | 364 |
|
||||
| F#/Gb | 32 | 80 | 128 | 176 | 224 | 272 | 320 | 368 |
|
||||
| G | 36 | 84 | 132 | 180 | 228 | 276 | 324 | 372 |
|
||||
| Ab/G# | 40 | 88 | 136 | 184 | 232 | 280 | 328 | 376 |
|
||||
| A | 44 | 92 | 140 | 188 | 236 | 284 | 332 | 380 |
|
||||
|
||||
### Function 0x54 -- Sound Play (SNDPLAY)
|
||||
|
||||
|
||||
@@ -327,7 +327,8 @@ AY_NOTE:
|
||||
LD H, (HL) ; SO WE CAN UPDATE IT FOR THE REQUIRED OCTAVE
|
||||
LD L, A
|
||||
;
|
||||
LD A,AY_SCALE-1 ; THE NOTE TABLE PERIOD DATA HAS BEEN
|
||||
;LD A,AY_SCALE - 1 ; THE NOTE TABLE PERIOD DATA HAS BEEN
|
||||
LD A,AY_SCALE ; THE NOTE TABLE PERIOD DATA HAS BEEN
|
||||
ADD A,C ; PRESCALED TO MAINTAIN RANGE SO ALLOW
|
||||
LD B,A ; FOR THIS WHEN CHANGING OCTAVE
|
||||
AY_NOTE1:
|
||||
@@ -617,51 +618,51 @@ AYT_REGWR .DB "\r\nOUT AY-3-8910 $"
|
||||
; ASSUMING A CLOCK OF 1843200 THIS MAPS TO A0#
|
||||
;
|
||||
AY3NOTETBL:
|
||||
.DW AY_RATIO / 2913
|
||||
.DW AY_RATIO / 2956
|
||||
.DW AY_RATIO / 2999
|
||||
.DW AY_RATIO / 3042
|
||||
.DW AY_RATIO / 3086
|
||||
.DW AY_RATIO / 3131
|
||||
.DW AY_RATIO / 3177
|
||||
.DW AY_RATIO / 3223
|
||||
.DW AY_RATIO / 3270
|
||||
.DW AY_RATIO / 3318
|
||||
.DW AY_RATIO / 3366
|
||||
.DW AY_RATIO / 3415
|
||||
.DW AY_RATIO / 3464
|
||||
.DW AY_RATIO / 3515
|
||||
.DW AY_RATIO / 3566
|
||||
.DW AY_RATIO / 3618
|
||||
.DW AY_RATIO / 3670
|
||||
.DW AY_RATIO / 3724
|
||||
.DW AY_RATIO / 3778
|
||||
.DW AY_RATIO / 3833
|
||||
.DW AY_RATIO / 3889
|
||||
.DW AY_RATIO / 3945
|
||||
.DW AY_RATIO / 4003
|
||||
.DW AY_RATIO / 4061
|
||||
.DW AY_RATIO / 4120
|
||||
.DW AY_RATIO / 4180
|
||||
.DW AY_RATIO / 4241
|
||||
.DW AY_RATIO / 4302
|
||||
.DW AY_RATIO / 4365
|
||||
.DW AY_RATIO / 4428
|
||||
.DW AY_RATIO / 4493
|
||||
.DW AY_RATIO / 4558
|
||||
.DW AY_RATIO / 4624
|
||||
.DW AY_RATIO / 4692
|
||||
.DW AY_RATIO / 4760
|
||||
.DW AY_RATIO / 4829
|
||||
.DW AY_RATIO / 4899
|
||||
.DW AY_RATIO / 4971
|
||||
.DW AY_RATIO / 5043
|
||||
.DW AY_RATIO / 5116
|
||||
.DW AY_RATIO / 5191
|
||||
.DW AY_RATIO / 5266
|
||||
.DW AY_RATIO / 5343
|
||||
.DW AY_RATIO / 5421
|
||||
.DW AY_RATIO / 5499
|
||||
.DW AY_RATIO / 5579
|
||||
.DW AY_RATIO / 5661
|
||||
.DW AY_RATIO / 5743
|
||||
.DW AY_RATIO / 2913 ; A0#/B0b 178977250 / 2913 = 61440; PROOF: 61440 >> 3 = 7680, 3579545 / 7680 / 16 = 29.13
|
||||
.DW AY_RATIO / 2956 ;
|
||||
.DW AY_RATIO / 2999 ;
|
||||
.DW AY_RATIO / 3042 ;
|
||||
.DW AY_RATIO / 3086 ; B0
|
||||
.DW AY_RATIO / 3131 ;
|
||||
.DW AY_RATIO / 3177 ;
|
||||
.DW AY_RATIO / 3223 ;
|
||||
.DW AY_RATIO / 3270 ; C1
|
||||
.DW AY_RATIO / 3318 ;
|
||||
.DW AY_RATIO / 3366 ;
|
||||
.DW AY_RATIO / 3415 ;
|
||||
.DW AY_RATIO / 3464 ; C1#/D1b
|
||||
.DW AY_RATIO / 3515 ;
|
||||
.DW AY_RATIO / 3566 ;
|
||||
.DW AY_RATIO / 3618 ;
|
||||
.DW AY_RATIO / 3670 ; D1
|
||||
.DW AY_RATIO / 3724 ;
|
||||
.DW AY_RATIO / 3778 ;
|
||||
.DW AY_RATIO / 3833 ;
|
||||
.DW AY_RATIO / 3889 ; D1#/E1b
|
||||
.DW AY_RATIO / 3945 ;
|
||||
.DW AY_RATIO / 4003 ;
|
||||
.DW AY_RATIO / 4061 ;
|
||||
.DW AY_RATIO / 4120 ; E1
|
||||
.DW AY_RATIO / 4180 ;
|
||||
.DW AY_RATIO / 4241 ;
|
||||
.DW AY_RATIO / 4302 ;
|
||||
.DW AY_RATIO / 4365 ; F1
|
||||
.DW AY_RATIO / 4428 ;
|
||||
.DW AY_RATIO / 4493 ;
|
||||
.DW AY_RATIO / 4558 ;
|
||||
.DW AY_RATIO / 4624 ; F1#/G1b
|
||||
.DW AY_RATIO / 4692 ;
|
||||
.DW AY_RATIO / 4760 ;
|
||||
.DW AY_RATIO / 4829 ;
|
||||
.DW AY_RATIO / 4899 ; G1
|
||||
.DW AY_RATIO / 4971 ;
|
||||
.DW AY_RATIO / 5043 ;
|
||||
.DW AY_RATIO / 5116 ;
|
||||
.DW AY_RATIO / 5191 ; G1#/A1b
|
||||
.DW AY_RATIO / 5266 ;
|
||||
.DW AY_RATIO / 5343 ;
|
||||
.DW AY_RATIO / 5421 ;
|
||||
.DW AY_RATIO / 5499 ; A1
|
||||
.DW AY_RATIO / 5579 ;
|
||||
.DW AY_RATIO / 5661 ;
|
||||
.DW AY_RATIO / 5743 ;
|
||||
|
||||
@@ -2826,6 +2826,45 @@ INITSYS4:
|
||||
LDCTL (C),HL
|
||||
#ENDIF
|
||||
;
|
||||
#IFDEF TESTING
|
||||
;
|
||||
; ROUTINE TO BEEP THE DEAULT SOUND UNIT (NOT FINISHED)
|
||||
; NEED TO CHECK FOR EXISTENCE OF SOUND UNIT 0
|
||||
; NEED TO TEST AGAINST ALL SOUND DRIVERS
|
||||
; CAN SPEAKER DRIVER BE MODIFIED TO PLAY ARBITRARY DURATION?
|
||||
; WHICH CHANNEL SHOULD BE USED? IS THERE A GOOD DEFAULT CHANNEL?
|
||||
;
|
||||
SNDUNIT .EQU 0
|
||||
;
|
||||
HB_BEEP:
|
||||
LD B,$50 ; SOUND RESET FUNCTION
|
||||
LD C,SNDUNIT ; SOUND UNIT NUMBER
|
||||
CALL SND_DISPATCH ; DO IT
|
||||
LD B,$51 ; VOLUME
|
||||
LD C,SNDUNIT ; SOUND UNIT NUMBER
|
||||
LD L,$FF ; MAX
|
||||
CALL SND_DISPATCH ; DO IT
|
||||
LD B,$53 ; SELECT NOTE
|
||||
LD C,SNDUNIT ; SOUND UNIT NUMBER
|
||||
;LD HL,0 ; A0#
|
||||
LD HL,200 ; C4
|
||||
CALL SND_DISPATCH ; DO IT
|
||||
;LD B,$56 ; DURATION
|
||||
;LD C,SNDUNIT ; SOUND UNIT NUMBER
|
||||
;LD HL,500 ; 1/2 SECOND
|
||||
;CALL SND_DISPATCH ; DO IT
|
||||
LD B,$54 ; PLAY SOUND
|
||||
LD C,SNDUNIT ; SOUND UNIT NUMBER
|
||||
LD D,1 ; CHANNEL 0
|
||||
CALL SND_DISPATCH ; DO IT
|
||||
LD DE,15625 ; PLAY FOR 1/4 SECOND
|
||||
CALL VDELAY
|
||||
LD B,$50 ; SOUND RESET FUNCTION
|
||||
LD C,SNDUNIT ; SOUND UNIT NUMBER
|
||||
CALL SND_DISPATCH ; DO IT
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IFNDEF ROMBOOT
|
||||
;
|
||||
; COPY OS IMAGE: BID_USR:<IMG START> --> BID_USR:0
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
#DEFINE RMN 1
|
||||
#DEFINE RUP 1
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.1.1-pre.173"
|
||||
#DEFINE BIOSVER "3.1.1-pre.174"
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 1
|
||||
rup equ 1
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.1.1-pre.173"
|
||||
db "3.1.1-pre.174"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user