Finished off noise channel for Mockingboard.
This commit is contained in:
parent
869b0d669c
commit
f67069421c
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
|
@ -290,7 +290,7 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error
|
||||||
RTS ; %000x1xxx host type, 'A'pple
|
RTS ; %000x1xxx host type, 'A'pple
|
||||||
BYTE00A BRK
|
BYTE00A BRK
|
||||||
DB $F7
|
DB $F7
|
||||||
HELLO ASC 'Applecorn MOS 2022-11-27'
|
HELLO ASC 'Applecorn MOS 2022-11-28'
|
||||||
DB $00 ; Unify MOS messages
|
DB $00 ; Unify MOS messages
|
||||||
* TO DO: Move into RAM
|
* TO DO: Move into RAM
|
||||||
GSSPEED DB $00 ; $80 if GS is fast, $00 for slow
|
GSSPEED DB $00 ; $80 if GS is fast, $00 for slow
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* (c) Bobbi 2022 GPLv3
|
* (c) Bobbi 2022 GPLv3
|
||||||
*
|
*
|
||||||
* Mockingboard Driver.
|
* Mockingboard Driver.
|
||||||
|
* Simulates Hitachi SN76489 sound generator chip found in BBC Micro.
|
||||||
*
|
*
|
||||||
|
|
||||||
*
|
*
|
||||||
* I borrowed some ideas from Deater:
|
* I borrowed some ideas from Deater:
|
||||||
* https://github.com/deater/dos33fsprogs/blob/master/music/pt3_lib/pt3_lib_mockingboard_setup.s
|
* https://github.com/deater/dos33fsprogs/blob/master/music/pt3_lib/pt3_lib_mockingboard_setup.s
|
||||||
|
@ -124,9 +124,14 @@ MOCKNOTE PHA
|
||||||
* On entry: X - oscillator number 0-3, Y - frequency to set
|
* On entry: X - oscillator number 0-3, Y - frequency to set
|
||||||
* Preserves X & Y
|
* Preserves X & Y
|
||||||
MOCKFREQ PHX
|
MOCKFREQ PHX
|
||||||
CPX #$00 ; Noise channel
|
CPX #$00 ; Oscillator 0 is noise channel
|
||||||
BEQ :NOISE
|
BEQ :NOISE
|
||||||
TXA
|
CPX #$01 ; Oscillator 1 controls noise freq
|
||||||
|
BNE :S0 ; Not 1? Skip
|
||||||
|
CMP #$00 ; If frequency is zero ..
|
||||||
|
BEQ :S0 ; .. skip
|
||||||
|
STA :CH1NOTE ; Store frequency for noise gen
|
||||||
|
:S0 TXA
|
||||||
DEC A ; Subtract 1
|
DEC A ; Subtract 1
|
||||||
ASL ; Double to get fine register
|
ASL ; Double to get fine register
|
||||||
TAX
|
TAX
|
||||||
|
@ -137,11 +142,25 @@ MOCKFREQ PHX
|
||||||
JSR MOCKWRT1 ; Write value to AY-3 register
|
JSR MOCKWRT1 ; Write value to AY-3 register
|
||||||
PLX
|
PLX
|
||||||
RTS
|
RTS
|
||||||
:NOISE LDX #6 ; Noise period register
|
:NOISE TYA ; Parameter P
|
||||||
TYA ; TODO TEMPORARY HACK
|
AND #$03 ; Keep least significant 2 bits
|
||||||
|
TAY
|
||||||
|
LDA :NOISENOTE,Y ; Get value of note
|
||||||
|
EOR #$FF ; Negate
|
||||||
|
INC A
|
||||||
|
CLC ; Add 255
|
||||||
|
ADC #$FF
|
||||||
|
LSR ; Convert 0..255 to 0..31
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LDX #6 ; Noise period register
|
||||||
JSR MOCKWRT2 ; Write value to AY-3 register
|
JSR MOCKWRT2 ; Write value to AY-3 register
|
||||||
PLX
|
PLX
|
||||||
RTS
|
RTS
|
||||||
|
:NOISENOTE DB $FF ; BBC Micro note P=0 or 4
|
||||||
|
DB $80 ; BBC Micro note P=1 or 5
|
||||||
|
DB $00 ; BBC Micro note P=2 or 6
|
||||||
|
:CH1NOTE DB $00 ; Note on channel 1
|
||||||
|
|
||||||
|
|
||||||
* Adjust amplitude of note already playing
|
* Adjust amplitude of note already playing
|
||||||
|
|
Loading…
Reference in New Issue