Browse Source

Merge pull request #126 from vipoo/dean/dev-14

Dean/dev 14
pull/127/head
Wayne Warthen 6 years ago
committed by GitHub
parent
commit
e363d48356
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 49
      Source/HBIOS/audio.inc
  2. 391
      Source/HBIOS/ay38910.asm
  3. 5
      Source/HBIOS/cfg_dyno.asm
  4. 3
      Source/HBIOS/cfg_ezz80.asm
  5. 3
      Source/HBIOS/cfg_master.asm
  6. 3
      Source/HBIOS/cfg_mk4.asm
  7. 3
      Source/HBIOS/cfg_n8.asm
  8. 3
      Source/HBIOS/cfg_rcz180.asm
  9. 3
      Source/HBIOS/cfg_rcz80.asm
  10. 3
      Source/HBIOS/cfg_sbc.asm
  11. 3
      Source/HBIOS/cfg_scz180.asm
  12. 3
      Source/HBIOS/cfg_zeta.asm
  13. 3
      Source/HBIOS/cfg_zeta2.asm
  14. 382
      Source/HBIOS/sn76489.asm

49
Source/HBIOS/audio.inc

@ -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
@ -28,3 +30,46 @@
#DEFINE AUDTRACE_CR
#ENDIF
#IFNDEF AUDIOUTILS
#DEFINE AUDIOUTILS
AUD_NOTE:
AUDDEBUG("AUDNOTE ")
AUDTRACE_HL
AUDTRACE_CR
AUDTRACE_DE
AUDTRACE_CR
push de
LD DE, 48
CALL DIV16
; BC IS OCTAVE COUNT
; HL is NOTE WITIN OCTAVE
ADD HL, HL
pop de
ADD HL, DE
LD A, (HL) ; RETRIEVE PERIOD COUNT FROM SN7NOTETBL
INC HL
LD H, (HL)
LD L, A
INC C
AUD_NOTE1:
DEC C
JR Z, AUD_NOTE2
SRL H
RR L
JR AUD_NOTE1
AUD_NOTE2:
LD A, L ; IF NOT ZERO
OR H
RET NZ ; RETURN THE CALCULATED PERIOD
LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR)
LD L, $FF
RET
#ENDIF

391
Source/HBIOS/ay38910.asm

@ -20,7 +20,7 @@ AY_RIN .EQU AY_RSEL
AY_ACR .EQU N8_DEFACR
#ENDIF
;
#IF (AYMODE == AYMODE_RCZ80)
#IF (AYMODE == AYMODE_RCZ80)
AY_RSEL .EQU $D8
AY_RDAT .EQU $D0
AY_RIN .EQU AY_RSEL+AY_RCSND
@ -71,9 +71,7 @@ AY_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS
;
AY_PHICLK .EQU 3579545 ; MSX NTSC COLOUR BURST FREQ = 315/88
;AY_PHICLK .EQU 3500000 ; ZX SPECTRUM 3.5MHZ
;AY_PHICLK .EQU 4000000 ; RETROBREW SCB-SCG
AY_CLKDIV .EQU 2
AY_CLK .EQU AY_PHICLK / AY_CLKDIV
;AY_PHICLK .EQU 4000000 ; RETROBREW SCB-SCG
AY_RATIO .EQU AY_CLK * 100 / 16
;
#INCLUDE "audio.inc"
@ -99,7 +97,7 @@ AY38910_INIT:
#ENDIF
;
LD DE,(AY_R2CHBP*256)+$55 ; SIMPLE HARDWARE PROBE
CALL AY_WRTPSG ; WRITE AND
CALL AY_WRTPSG ; WRITE AND
CALL AY_RDPSG ; READ TO A
LD A,$55 ; SOUND CHANNEL
CP E ; REGISTER
@ -107,7 +105,7 @@ AY38910_INIT:
;
CALL PRTSTRD \ .TEXT " NOT PRESENT$"
;
LD A,$FF ; UNSUCCESSFULL INIT
LD A,$FF ; UNSUCCESSFULL INIT
RET
;
AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE
@ -199,6 +197,19 @@ AY_VOLUME:
RET
;
;======================================================================
; SOUND DRIVER FUNCTION - NOTE
;======================================================================
;
AY_NOTE:
AUDTRACE(AYT_NOTE)
AUDTRACE_HL
AUDTRACE_CR
LD DE, AY3NOTETBL
CALL AUD_NOTE ; RETURNS PERIOD IN HL, FALL THRU
; TO SET THIS PERIOD
;
;======================================================================
; SOUND DRIVER FUNCTION - PERIOD
;======================================================================
;
@ -206,7 +217,11 @@ AY_PERIOD:
AUDTRACE(AYT_PERIOD)
AUDTRACE_HL
AUDTRACE_CR
;
LD A, H ; IF ZERO - ERROR
OR L
JR Z, AY_PERIOD1
LD A, H ; MAXIMUM TONE PERIOD IS 12-BITS
AND 11110000B ; ALLOWED RANGE IS 0001-0FFF (4095)
JR NZ, AY_PERIOD1 ; RETURN NZ IF NUMBER TOO LARGE
@ -220,45 +235,6 @@ AY_PERIOD1:
RET ; AND RETURN FAILURE
;
;======================================================================
; SOUND DRIVER FUNCTION - NOTE
;======================================================================
;
AY_NOTE:
AUDTRACE(AYT_NOTE)
AUDTRACE_L
AUDTRACE_CR
;
PUSH HL
PUSH DE
LD H,0
ADD HL, HL ; SHIFT RIGHT (MULT 2) -INDEX INTO AY3NOTETBL TABLE OF WORDS
; ; TEST IF HL IS LARGER THAN AY3NOTETBL SIZE
; OR A ; CLEAR CARRY FLAG
LD DE, SIZ_AY3NOTETBL
; SBC HL, DE
; JR NC, AY_NOTE1 ; INCOMING HL DOES NOT MAP INTO AY3NOTETBL
;
; ADD HL, DE ; RESTORE HL
LD DE, AY3NOTETBL ; HL = AY3NOTETBL + HL
ADD HL, DE
;
LD A, (HL) ; RETRIEVE PERIOD COUNT FROM AY3NOTETBL
INC HL
LD H, (HL)
LD L, A
;
CALL AY_PERIOD ; APPLY NOTE PERIOD
POP DE
POP HL
RET
;
AY_NOTE1:
POP DE
POP HL
OR $FF ; NOT IMPLEMENTED YET
RET
;
;======================================================================
; SOUND DRIVER FUNCTION - PLAY
; B = FUNCTION
; C = AUDIO DEVICE
@ -275,7 +251,7 @@ AY_PLAY:
INC A
JR Z, AY_PLAY1 ; PERIOD IS TOO LARGE, UNABLE TO PLAY
;
PUSH HL
PUSH HL
PUSH DE
LD A,D ; LIMIT CHANNEL 0-2
AND $3 ; AND INDEX TO THE
@ -460,274 +436,59 @@ AYT_REGWR .DB "\r\nOUT AY-3-8910 $"
#ENDIF
;
;======================================================================
; BBC MICRO QUARTER TONE FREQUENCY TABLE
; BBC MICRO QUARTER TONE FREQUENCY TABLE
;======================================================================
;
; THE FREQUENCY BY QUARTER TONE STARTING AT A0# OCATVE 0
; USED TO MAP EACH OCTAVE (DIV BY 2 TO JUMP AN OCTAVE UP)
; FIRST PLAYABLE NOTE WILL BE 0
; ASSUMING A CLOCK OF 1843200 THIS MAPS TO A0#
AY3NOTETBL:
.DW AY_RATIO / 5827 ; A#1 INDEX 0 = A#1 AS PER BBC MANUAL
; .DW AY_RATIO / 5912
; .DW AY_RATIO / 5998
; .DW AY_RATIO / 6085
.DW AY_RATIO / 6174 ; B1 INDEX 1 = B1 AS PER BBC MANUAL
.DW AY_RATIO / 6263
.DW AY_RATIO / 6354
.DW AY_RATIO / 6447
.DW AY_RATIO / 6541 ; C2
.DW AY_RATIO / 6636
.DW AY_RATIO / 6732
.DW AY_RATIO / 6830
.DW AY_RATIO / 6930 ; C#2
.DW AY_RATIO / 7030
.DW AY_RATIO / 7133
.DW AY_RATIO / 7236
.DW AY_RATIO / 7342 ; D2
.DW AY_RATIO / 7448
.DW AY_RATIO / 7557
.DW AY_RATIO / 7667
.DW AY_RATIO / 7778 ; D#2
.DW AY_RATIO / 7891
.DW AY_RATIO / 8006
.DW AY_RATIO / 8123
.DW AY_RATIO / 8241 ; E2
.DW AY_RATIO / 8361
.DW AY_RATIO / 8482
.DW AY_RATIO / 8606
.DW AY_RATIO / 8731 ; F2
.DW AY_RATIO / 8858
.DW AY_RATIO / 8987
.DW AY_RATIO / 9117
.DW AY_RATIO / 9250 ; F#2
.DW AY_RATIO / 9384
.DW AY_RATIO / 9521
.DW AY_RATIO / 9659
.DW AY_RATIO / 9800 ; G2
.DW AY_RATIO / 9942
.DW AY_RATIO / 10087
.DW AY_RATIO / 10234
.DW AY_RATIO / 10383 ; G#2
.DW AY_RATIO / 10534
.DW AY_RATIO / 10687
.DW AY_RATIO / 10842
.DW AY_RATIO / 11000 ; A2
.DW AY_RATIO / 11160
.DW AY_RATIO / 11322
.DW AY_RATIO / 11487
.DW AY_RATIO / 11654 ; A#2
.DW AY_RATIO / 11824
.DW AY_RATIO / 11996
.DW AY_RATIO / 12170
.DW AY_RATIO / 12347 ; B2
.DW AY_RATIO / 12527
.DW AY_RATIO / 12709
.DW AY_RATIO / 12894
.DW AY_RATIO / 13081 ; C3
.DW AY_RATIO / 13272
.DW AY_RATIO / 13465
.DW AY_RATIO / 13660
.DW AY_RATIO / 13859 ; C#3
.DW AY_RATIO / 14061
.DW AY_RATIO / 14265
.DW AY_RATIO / 14473
.DW AY_RATIO / 14683 ; D3
.DW AY_RATIO / 14897
.DW AY_RATIO / 15113
.DW AY_RATIO / 15333
.DW AY_RATIO / 15556 ; D#3
.DW AY_RATIO / 15783
.DW AY_RATIO / 16012
.DW AY_RATIO / 16245
.DW AY_RATIO / 16481 ; E3
.DW AY_RATIO / 16721
.DW AY_RATIO / 16964
.DW AY_RATIO / 17211
.DW AY_RATIO / 17461 ; F3
.DW AY_RATIO / 17715
.DW AY_RATIO / 17973
.DW AY_RATIO / 18234
.DW AY_RATIO / 18500 ; F#3
.DW AY_RATIO / 18769
.DW AY_RATIO / 19042
.DW AY_RATIO / 19319
.DW AY_RATIO / 19600 ; G3
.DW AY_RATIO / 19885
.DW AY_RATIO / 20174
.DW AY_RATIO / 20468
.DW AY_RATIO / 20765 ; G#3
.DW AY_RATIO / 21067
.DW AY_RATIO / 21374
.DW AY_RATIO / 21685
.DW AY_RATIO / 22000 ; A3
.DW AY_RATIO / 22320
.DW AY_RATIO / 22645
.DW AY_RATIO / 22974
.DW AY_RATIO / 23308 ; A#3
.DW AY_RATIO / 23647
.DW AY_RATIO / 23991
.DW AY_RATIO / 24340
.DW AY_RATIO / 24694 ; B3
.DW AY_RATIO / 25053
.DW AY_RATIO / 25418
.DW AY_RATIO / 25787
.DW AY_RATIO / 26163 ; C4
.DW AY_RATIO / 26543
.DW AY_RATIO / 26929
.DW AY_RATIO / 27321
.DW AY_RATIO / 27718 ; C#4
.DW AY_RATIO / 28121
.DW AY_RATIO / 28530
.DW AY_RATIO / 28945
.DW AY_RATIO / 29366 ; D4
.DW AY_RATIO / 29794
.DW AY_RATIO / 30227
.DW AY_RATIO / 30667
.DW AY_RATIO / 31113 ; D#4
.DW AY_RATIO / 31565
.DW AY_RATIO / 32024
.DW AY_RATIO / 32490
.DW AY_RATIO / 32963 ; E4
.DW AY_RATIO / 33442
.DW AY_RATIO / 33929
.DW AY_RATIO / 34422
.DW AY_RATIO / 34923 ; F4
.DW AY_RATIO / 35431
.DW AY_RATIO / 35946
.DW AY_RATIO / 36469
.DW AY_RATIO / 36999 ; F#4
.DW AY_RATIO / 37538
.DW AY_RATIO / 38084
.DW AY_RATIO / 38638
.DW AY_RATIO / 39200 ; G4
.DW AY_RATIO / 39770
.DW AY_RATIO / 40348
.DW AY_RATIO / 40935
.DW AY_RATIO / 41530 ; G#4
.DW AY_RATIO / 42135
.DW AY_RATIO / 42747
.DW AY_RATIO / 43369
.DW AY_RATIO / 44000 ; A4
.DW AY_RATIO / 44640
.DW AY_RATIO / 45289
.DW AY_RATIO / 45948
.DW AY_RATIO / 46616 ; A#4
.DW AY_RATIO / 47294
.DW AY_RATIO / 47982
.DW AY_RATIO / 48680
.DW AY_RATIO / 49388 ; B4
.DW AY_RATIO / 50107
.DW AY_RATIO / 50836
.DW AY_RATIO / 51575
.DW AY_RATIO / 52325 ; C5
.DW AY_RATIO / 53086
.DW AY_RATIO / 53858
.DW AY_RATIO / 54642
.DW AY_RATIO / 55437 ; C#5
.DW AY_RATIO / 56243
.DW AY_RATIO / 57061
.DW AY_RATIO / 57891
.DW AY_RATIO / 58733 ; D5
.DW AY_RATIO / 59587
.DW AY_RATIO / 60454
.DW AY_RATIO / 61333
.DW AY_RATIO / 62225 ; D#5
.DW AY_RATIO / 63130
.DW AY_RATIO / 64049
.DW AY_RATIO / 64980
.DW AY_RATIO / 65926 ; E5
.DW AY_RATIO / 66884
.DW AY_RATIO / 67857
.DW AY_RATIO / 68844
.DW AY_RATIO / 69846 ; F5
.DW AY_RATIO / 70862
.DW AY_RATIO / 71892
.DW AY_RATIO / 72938
.DW AY_RATIO / 73999 ; F#5
.DW AY_RATIO / 75075
.DW AY_RATIO / 76167
.DW AY_RATIO / 77275
.DW AY_RATIO / 78399 ; G5
.DW AY_RATIO / 79539
.DW AY_RATIO / 80696
.DW AY_RATIO / 81870
.DW AY_RATIO / 83061 ; G#5
.DW AY_RATIO / 84269
.DW AY_RATIO / 85495
.DW AY_RATIO / 86738
.DW AY_RATIO / 88000 ; #A5
.DW AY_RATIO / 89280
.DW AY_RATIO / 90579
.DW AY_RATIO / 91896
.DW AY_RATIO / 93233 ; A#5
.DW AY_RATIO / 94589
.DW AY_RATIO / 95965
.DW AY_RATIO / 97361
.DW AY_RATIO / 98777 ; B5
.DW AY_RATIO / 100213
.DW AY_RATIO / 101671
.DW AY_RATIO / 103150
.DW AY_RATIO / 104650 ; C6
.DW AY_RATIO / 106172
.DW AY_RATIO / 107717
.DW AY_RATIO / 109283
.DW AY_RATIO / 110873 ; C#6
.DW AY_RATIO / 112486
.DW AY_RATIO / 114122
.DW AY_RATIO / 115782
.DW AY_RATIO / 117466 ; D6
.DW AY_RATIO / 119174
.DW AY_RATIO / 120908
.DW AY_RATIO / 122667
.DW AY_RATIO / 124451 ; D#6
.DW AY_RATIO / 126261
.DW AY_RATIO / 128097
.DW AY_RATIO / 129961
.DW AY_RATIO / 131851 ; E6
.DW AY_RATIO / 133769
.DW AY_RATIO / 135715
.DW AY_RATIO / 137689
.DW AY_RATIO / 139691 ; F6
.DW AY_RATIO / 141723
.DW AY_RATIO / 143785
.DW AY_RATIO / 145876
.DW AY_RATIO / 147998 ; F#6
.DW AY_RATIO / 150150
.DW AY_RATIO / 152334
.DW AY_RATIO / 154550
.DW AY_RATIO / 156798 ; G6
.DW AY_RATIO / 159079
.DW AY_RATIO / 161393
.DW AY_RATIO / 163740
.DW AY_RATIO / 166122 ; G#6
.DW AY_RATIO / 168538
.DW AY_RATIO / 170990
.DW AY_RATIO / 173477
.DW AY_RATIO / 176000 ; A6
.DW AY_RATIO / 178560
.DW AY_RATIO / 181157
.DW AY_RATIO / 183792
.DW AY_RATIO / 186466 ; A#6
.DW AY_RATIO / 189178
.DW AY_RATIO / 191929
.DW AY_RATIO / 194721
.DW AY_RATIO / 197553 ; B6
.DW AY_RATIO / 200427
.DW AY_RATIO / 203342
.DW AY_RATIO / 206300
.DW AY_RATIO / 209300 ; C7
.DW AY_RATIO / 212345
.DW AY_RATIO / 215433
.DW AY_RATIO / 218567
.DW AY_RATIO / 221746 ; C#7
.DW AY_RATIO / 224971
.DW AY_RATIO / 228244
.DW AY_RATIO / 231564
.DW AY_RATIO / 234932 ; D7
.DW AY_RATIO / 238349
.DW AY_RATIO / 241816
SIZ_AY3NOTETBL .EQU $ - AY3NOTETBL
.ECHO "AY-3-8910 approx "
.ECHO SIZ_AY3NOTETBL / 2 / 4 / 12
.ECHO " Octaves. Last note index supported: "
.ECHO SIZ_AY3NOTETBL / 2
.ECHO "\n"
.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

5
Source/HBIOS/cfg_dyno.asm

@ -155,6 +155,9 @@ UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_ezz80.asm

@ -180,6 +180,9 @@ UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_master.asm

@ -235,6 +235,9 @@ UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_mk4.asm

@ -189,6 +189,9 @@ UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_n8.asm

@ -189,6 +189,9 @@ FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_N8 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_rcz180.asm

@ -189,6 +189,9 @@ UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_rcz80.asm

@ -195,6 +195,9 @@ UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_sbc.asm

@ -191,6 +191,9 @@ UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_scz180.asm

@ -184,6 +184,9 @@ UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_zeta.asm

@ -136,6 +136,9 @@ UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

3
Source/HBIOS/cfg_zeta2.asm

@ -146,6 +146,9 @@ UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
;
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180]
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)

382
Source/HBIOS/sn76489.asm

@ -5,6 +5,8 @@
;======================================================================
;
; TODO:
; 1. PROVIDE SUPPORT FOR NOISE CHANNEL
; 2. DOES THIS WORK FOR FASTER CPUS? ONLY BEEN TESTED ON A Z80 7MHZ UNIT
;
;======================================================================
; CONSTANTS
@ -22,22 +24,11 @@ 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_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"
.ECHO "SN76489 CLOCK: "
.ECHO SN7CLK
.ECHO "\n"
#INCLUDE "audio.inc"
@ -112,55 +103,34 @@ 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
ADD HL, DE ; RESTORE HL
LD DE, SN7NOTETBL
ADD HL, DE
LD A, (HL) ; RETRIEVE PERIOD COUNT FROM SN7NOTETBL
INC HL
LD H, (HL)
LD L, A
JR SN7_PERIOD ; APPLY PERIOD
SN7_NOTE1:
OR $FF ; NOT IMPLEMENTED YET
RET
CALL AUD_NOTE ; RETURNS PERIOD IN HL, FALL THRU
; TO SET THIS PERIOD
SN7_PERIOD:
AUDTRACE(SNT_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
SN7_QUERY_PERIOD1: ; REQUESTED PERIOD IS LARGER THAN THE SN76489 CAN SUPPORT
LD L, $FF
LD H, $FF
LD A, $FF
LD L, A
LD H, A
LD (SN7_PENDING_PERIOD), HL
OR $FF ; SIGNAL FAILURE
RET
SN7_PLAY:
@ -361,262 +331,58 @@ 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
; USED TO MAP EACH OCTAVE (DIV BY 2 TO JUMP AN OCTAVE UP)
; FIRST PLAYABLE NOTE WILL BE $2E
; ASSUMING A CLOCK OF 1843200 THIS MAPS TO
; 2 QUATER TONES BELOW A1#, WITH A1# AT $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
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"
.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

Loading…
Cancel
Save