Browse Source

ay-3-8910 sound drive tone table development

patch
b1ackmai1er 6 years ago
parent
commit
7f1b8c8aa6
  1. 2
      Source/Doc/Architecture.md
  2. 8
      Source/HBIOS/ay.asm
  3. 483
      Source/HBIOS/ay38910.asm
  4. 2
      Source/HBIOS/sn76489.asm

2
Source/Doc/Architecture.md

@ -1404,7 +1404,7 @@ The value corresponds to standard musical notes. The value allows
for selection of a quarter of a semitone by giving a value between 0
and up to the drivers maximum supported value. The lowest note is (0).
For the SN76490 chip, 0 corresponds to note A1# and the value 249 is
For the SN76489 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)

8
Source/HBIOS/ay.asm

@ -57,10 +57,10 @@ AY_INIT1:
CALL AY_BEEP
AY_INIT2:
LD D,AY_R7ENAB ; SET MIXER CONTROL / IO ENABLE
LD E,$FF ; $FF - 11 111 111
CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A DISABLE
LD E,$F8 ; $FF - 11 111 111
CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE
;
LD B,2
LD B,3
LD D,AY_R8AVOL ; SET VOLUME TO 0
LD E,$00
AY_QUIET:
@ -73,7 +73,7 @@ AY_QUIET:
;
AY_BEEP:
LD D,AY_R2CHBP ; SET TONE PERIOD
LD E,$55 ; CHANNEL B - R00 & R01
LD E,$55 ; CHANNEL B - R02 & R03
CALL AY_WRTPSG ; $0055 = XXXX0000 01010101
LD D,AY_R3CHBP
LD E,0

483
Source/HBIOS/ay38910.asm

@ -30,13 +30,10 @@ AY_RDAT .EQU $60
;
; REGISTERS
;
AY_R0CHAP .EQU $00
AY_R1CHAP .EQU $01
AY_R2CHBP .EQU $02
AY_R3CHBP .EQU $03
AY_R7ENAB .EQU $07
AY_R8AVOL .EQU $08
AY_R9BVOL .EQU $09
;
;======================================================================
;
@ -66,22 +63,9 @@ SBCV2004 .EQU 1 ; USE SBC-V2-004 HALF CLOCK DIVIDER
AY_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS
AY_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS
;
AY_CLKDIVIDER .EQU 2
AY_CLK .EQU CPUOSC / AY_CLKDIVIDER
SN7RATIO .EQU AY_CLK * 100 / 32
AY_FIRST_NOTE .EQU 5827 ; A1#
AY_LAST_NOTE .EQU 209300 ; C7
A1S .EQU SN7RATIO / AY_FIRST_NOTE
C7 .EQU SN7RATIO / AY_LAST_NOTE
.ECHO "AY-3-8910: range of A1# (period: "
.ECHO A1S
.ECHO ") to C7 (period: "
.ECHO C7
.ECHO ")\n"
AY_PHICLK .EQU 3579500
AY_CLKDIV .EQU 2
AY_CLK .EQU AY_PHICLK / AY_CLKDIV
;
#INCLUDE "audio.inc"
;
@ -92,7 +76,7 @@ C7 .EQU SN7RATIO / AY_LAST_NOTE
; ANNOUNCE DEVICE ON CONSOLE. ACTIVATE DEVICE IF REQUIRED.
; SETUP FUNCTION TABLES. SETUP THE DEVICE.
; ANNOUNCE DEVICE WITH BEEP. SET VOLUME OFF.
; RETURN SUCCESS STATUS
; RETURN INITIALIZATION STATUS
;
AY38910_INIT:
CALL NEWLINE ; ANNOUNCE
@ -111,38 +95,69 @@ AY38910_INIT:
LD DE, AY_IDAT ; BC := FUNCTION TABLE ADDRESS
CALL SND_ADDENT ; DE := INSTANCE DATA PTR
;
CALL AY_RESET ; SET DEFAULT CHIP CONFIGURATION
; CALL AY_BEEP ; PLAY INITIALIZATION BEEP
; CALL AY_VOLUME_OFF ; MAKE QUIET
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION
;
RET
LD E,$07 ; SET VOLUME TO 50%
CALL AY_SETV ; ON ALL CHANNELS
;
LD D,AY_R2CHBP ; BEEP ON CHANNEL B (CENTER)
LD E,$55
CALL AY_WRTPSG ; R02 = $55 = 01010101
LD D,AY_R3CHBP
LD E,$00
CALL AY_WRTPSG ; R03 = $00 = XXXX0000
;
CALL LDELAY ; HALF SECOND
;
LD E,$00 ; SET VOLUME OFF
CALL AY_SETV ; ON ALL CHANNELS
;
; RET
;
;======================================================================
; SOUND DRIVER FUNCTION - RESET
; INITIALIZE DEVICE
;======================================================================
;
AY_RESET:
AUDTRACE(TRACE_INIT)
;
AY_INIT:
LD D,AY_R7ENAB ; SET MIXER CONTROL / IO ENABLE
LD E,$F8 ; $F8 - 11 111 000
CALL AY_WRTPSG ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE
; CALL AY_VOLUME_OFF ; TURN VOLUME OFF
; RET ; AND RETURN SUCCESS
AY_VOLUME_OFF:
AUDTRACE(TRACE_VOLUME_OFF)
RET
;
;======================================================================
; SET VOLUME ALL CHANNELS
;======================================================================
;
AY_SETV:
LD B,AY_TONECNT ; NUMBER OF CHANNELS
LD D,AY_R8AVOL ; BASE REGISTER FOR VOLUME
LD E,$00 ; AMPLITUDE 0
AY_V:
CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS
AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS
INC D
DJNZ AY_V
DJNZ AY_SV
RET
;
XOR A ; SIGNAL SUCCESS
;======================================================================
; SOUND DRIVER FUNCTION - RESET
;
; INITIALIZE DEVICE. SET VOLUME OFF. RESET VOLUME AND TONE VARIABLES.
;
;======================================================================
;
AY_RESET:
AUDTRACE(TRACE_INIT)
;
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION
;
AUDTRACE(TRACE_VOLUME_OFF)
LD E,0 ; SET VOLUME OFF
CALL AY_SETV ; ON ALL CHANNELS
;
XOR A ; SIGNAL SUCCESS
LD (PENDING_VOLUME),A ; SET VOLUME TO ZERO
LD H,A
LD L,A
LD (PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO
;
RET
;
;======================================================================
@ -210,7 +225,7 @@ AY_NOTE:
LD H, (HL)
LD L, A
JR AY_PERIOD ; APPLY PERIOD
JR AY_PERIOD ; APPLY NOTE PERIOD
AY_NOTE1:
OR $FF ; NOT IMPLEMENTED YET
@ -349,7 +364,6 @@ AY_APPLY_PRD:
LD E,H ; WRITE THE UPPER
CALL AY_WRTPSG ; 8-BITS OF THE TONE PERIOD
;
POP AF
POP BC
POP DE
@ -391,8 +405,8 @@ AY_WRTPSG:
;
;======================================================================
;
PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS)
PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS)
PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS)
PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS)
#IF AUDIOTRACE
TRACE_INIT .DB "\r\nAY_INIT CALLED\r\n$"
@ -405,262 +419,137 @@ TRACE_PERIOD_SET .DB "\r\nAY_PERIOD_SET CH: $"
TRACE_PERIOD .DB ", PERIOD: $"
TRACE_NEWLINE .DB "\r\n$"
#ENDIF
; THE FREQUENCY BY QUATER TONE STARTING AT A1#
;
; THE FREQUENCY BY QUARTER TONE STARTING AT A1#
;
;======================================================================
; FREQUENCY TONE TABLE
;======================================================================
;
; PERIOD OCTAVE NOTE MIDI#
;
AY3NOTETBL:
.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
; .DW 6842 ;0 12
; .DW 6458 ;0 13
; .DW 6096 ;0 14
; .DW 5751 ;0 15
; .DW 5430 ;0 16
; .DW 5124 ;0 17
; .DW 4838 ;0 18
; .DW 4566 ;0 19
; .DW 4309 ;0 20
.DW 4068 ;0 A0 21
.DW 3839 ;0 22
.DW 3624 ;0 23
.DW 3421 ;1 24
.DW 3228 ;1 25
.DW 3047 ;1 26
.DW 2876 ;1 27
.DW 2715 ;1 28
.DW 2563 ;1 29
.DW 2419 ;1 30
.DW 2283 ;1 31
.DW 2155 ;1 32
.DW 2034 ;1 33
.DW 1920 ;1 34
.DW 1812 ;1 35
.DW 1710 ;2 36
.DW 1614 ;2 37
.DW 1524 ;2 38
.DW 1438 ;2 39
.DW 1357 ;2 40
.DW 1281 ;2 41
.DW 1209 ;2 42
.DW 1141 ;2 43
.DW 1077 ;2 44
.DW 1017 ;2 45
.DW 960 ;2 46
.DW 906 ;2 47
.DW 855 ;3 48
.DW 807 ;3 49
.DW 762 ;3 50
.DW 719 ;3 51
.DW 679 ;3 52
.DW 641 ;3 53
.DW 605 ;3 54
.DW 571 ;3 55
.DW 539 ;3 56
.DW 508 ;3 57
.DW 480 ;3 58
.DW 453 ;3 59
.DW 428 ;4 60
.DW 404 ;4 61
.DW 381 ;4 62
.DW 360 ;4 63
.DW 339 ;4 64
.DW 320 ;4 65
.DW 302 ;4 66
.DW 285 ;4 67
.DW 269 ;4 68
.DW 254 ;4 69
.DW 240 ;4 70
.DW 226 ;4 71
.DW 214 ;5 72
.DW 202 ;5 73
.DW 190 ;5 74
.DW 180 ;5 75
.DW 170 ;5 76
.DW 160 ;5 77
.DW 151 ;5 78
.DW 143 ;5 79
.DW 135 ;5 80
.DW 127 ;5 81
.DW 120 ;5 82
.DW 113 ;5 83
.DW 107 ;6 84
.DW 101 ;6 85
.DW 95 ;6 86
.DW 90 ;6 87
.DW 85 ;6 88
.DW 80 ;6 89
.DW 76 ;6 90
.DW 71 ;6 91
.DW 67 ;6 92
.DW 64 ;6 93
.DW 60 ;6 94
.DW 57 ;6 95
.DW 53 ;7 96
.DW 50 ;7 97
.DW 48 ;7 98
.DW 45 ;7 99
.DW 42 ;7 100
.DW 40 ;7 101
.DW 38 ;7 102
.DW 36 ;7 103
.DW 34 ;7 104
.DW 32 ;7 105
.DW 30 ;7 106
.DW 28 ;7 107
.DW 27 ;8 108
.DW 25 ;8 109
.DW 24 ;8 110
.DW 22 ;8 111
.DW 21 ;8 112
.DW 20 ;8 113
.DW 19 ;8 114
.DW 18 ;8 115
.DW 17 ;8 116
.DW 16 ;8 117
.DW 15 ;8 118
.DW 14 ;8 119
.DW 13 ;9 120
.DW 13 ;9 121
.DW 12 ;9 122
.DW 11 ;9 123
.DW 11 ;9 124
.DW 10 ;9 125
.DW 9 ;9 126
.DW 9 ;9 127
.DW 8 ;9 128
SIZ_AY3NOTETBL .EQU $ - AY3NOTETBL
.ECHO "SN76489 approx "
.ECHO SIZ_AY3NOTETBL / 2 / 4 /12
.ECHO "AY-3-8910 approx "
.ECHO SIZ_AY3NOTETBL / 2 / 12
.ECHO " Octaves. Last note index supported: "
.ECHO SIZ_AY3NOTETBL / 2

2
Source/HBIOS/sn76489.asm

@ -364,7 +364,7 @@ TRACE_PERIOD .DB ", PERIOD: $"
TRACE_NEWLINE .DB "\r\n$"
#ENDIF
; THE FREQUENCY BY QUATER TONE STARTING AT A1#
; THE FREQUENCY BY QUARTER TONE STARTING AT A1#
SN7NOTETBL:
.DW A1S
.DW SN7RATIO / 5912

Loading…
Cancel
Save