home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
eric.hdv
/
SOURCE
/
MOCKBRD.SRC.txt
< prev
next >
Wrap
Text File
|
2020-08-13
|
8KB
|
206 lines
;
;MOCKBRD.SRC - MOCKINGBOARD ROUTINES
;
;
MSLOT EQU $C400
MSTS EQU MSLOT
MDTA EQU MSTS+1
;
;
ORG $1000
;
JMP INITMOCK
JMP NOTEON
JMP NOTEOFF
;
INPNOTE DFB $00
;
DFLTVOL DFB $0F
;
SPEAKER DFB $00 ;00=LEFT, 80=RIGHT
;
REGISTER DFB $08
;
DATA DFB $00
;
VOICENUM DFB $00
;
NOTENUM DFB $29
;
VOLUME DFB $00
;
VOICE DFB $00,$00,$00,$00,$00,$00
;
;
; POKE REGISTER WITH DATA
;
POKEREG LDA SPEAKER ;GET SPEAKER (L/R) INTO Y
AND #$80
TAY
LDA REGISTER ;GET REGISTER #
AND #$0F
STA MDTA,Y
LDA #$07 ;SEND REGISTER #
STA MSTS,Y
LDA #$04
STA MSTS,Y
LDA DATA ;GET DATA BYTE
STA MDTA,Y
LDA #$06 ;SEND DATA BYTE
STA MSTS,Y
LDA #$04
STA MSTS,Y
RTS
;
INITMOCK LDA #$FF ;INIT
STA MSLOT+$03
STA MSLOT+$83
LDA #$07
STA MSLOT+$02
STA MSLOT+$82
LDA #$00 ;RESET ALL PARMS TO 0
STA MSTS
STA MSLOT+$80
LDA #$04
STA MSTS
STA MSLOT+$80
;
LDA #$00 ;SPEAKER= LEFT
STA SPEAKER
LDA #$07 ;ENABLE
STA REGISTER
LDA #$38 ; %00111000
STA DATA
JSR POKEREG ;SEND IT
LDA #$80
STA SPEAKER ;SPEAKER = RIGHT
JSR POKEREG ;SEND IT
LDX #$06
LDA #$00
;
ZERONEXT STA VOLUME,X ;ZERO OUT VOICE REGISTERS
DEX
BNE ZERONEXT
RTS
;
PLAYVOIC LDY #$00 ;LEFT SPEAKER
STY SPEAKER
LDA VOICENUM ;GET VOICE NUMBER
AND #$07
CMP #$06 ;IF OVER 6, EXIT
BCC DOVOICE
RTS
;
DOVOICE CMP #$03 ;IF VOICE >=3, USE RIGHT SPKR
BCC LEFTONLY
SEC
SBC #$03 ;BY SUBTRACTING 3
LDY #$80
STY SPEAKER
;
LEFTONLY ASL A ;MULTIPLY BY 2
STA REGISTER
LDX NOTENUM ;POKE THE FINE TUNE
LDA FINETUNE,X
STA DATA
JSR POKEREG
LDA REGISTER ;ADD 1 TO GET CRSE PART OF REGISTER
CLC
ADC #$01
STA REGISTER
LDX NOTENUM
LDA CRSETUNE,X
STA DATA
JSR POKEREG ;POKE THE COARSE BYTE
LDA REGISTER
SEC
SBC #$01
LSR A ;CALCULATE THE VOL REGISTER (R-1)/2+8
CLC
ADC #$08
STA REGISTER
LDA VOLUME ;GET VOLUME
STA DATA
JSR POKEREG ;AND POKE HER
RTS
;
;
NOTEON LDX #$01 ;LOOK FOR A FREE VOICE
;
VOICLOOP LDA VOLUME,X ;GET VOICE
BPL FREEVOIC ;IF <128, VOICE IS FREE FOR USE
JMP NEXTVOIC
;
FREEVOIC LDA INPNOTE ;GET NOTE #
BEQ EXITZERO ;EXIT IF 0
STA NOTENUM ;SET IT UP
ORA #$80 ;SET HI BIT
STA VOLUME,X ;PUT IN VOICE ARRAY
DEX
STX VOICENUM ;SET UP VOICE #
LDA DFLTVOL ;AND DEFAULT VOL
STA VOLUME
JSR PLAYVOIC ;START THIS VOICE PLAYING
EXITZERO RTS
;
;
NOTEOFF LDX #$06
;
CMPLOOP LDA VOLUME,X
AND #$7F
CMP INPNOTE ;IF THIS ELEMENT = NOTE WE WANT TO FREE
BEQ FREEIT ;GO DO IT.
DEX ;ELSE, CHECK OTHER VOICES
BNE CMPLOOP
RTS
;
FREEIT LDA #$00 ;FREE THE NODE
STA VOLUME,X
DEX ;ONE LESS ACTIVE VOICE
STX VOICENUM
LDA #$00 ;PLAY THE VOICE WITH VOLUME 0
STA VOLUME
JSR PLAYVOIC
RTS
;
NEXTVOIC INX ;ASSIGN NEXT VOICE
CPX #$07
BNE VOICLOOP
RTS
;
;
FINETUNE DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $A3,$35,$CD,$6C,$0F,$B8,$66,$18
DFB $CF,$8A,$49,$0B,$D1,$9A,$66,$36
DFB $07,$DC,$B3,$8C,$67,$45,$24,$05
DFB $E8,$CD,$B3,$9B,$83,$6E,$59,$46
DFB $33,$22,$12,$02,$F4,$E6,$D9,$CD
DFB $C1,$B7,$AC,$A3,$99,$91,$89,$81
DFB $7A,$73,$6C,$66,$60,$5B,$56,$51
DFB $4C,$48,$44,$40,$3D,$39,$36,$33
DFB $30,$2D,$2B,$28,$26,$24,$22,$20
DFB $1E,$1C,$1B,$19,$18,$16,$15,$14
DFB $13,$12,$11,$10,$0F,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
;
CRSETUNE DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00 DFB $07,$07,$06,$06,$06,$05,$05,$05
DFB $04,$04,$04,$04,$03,$03,$03,$03
DFB $03,$02,$02,$02,$02,$02,$02,$02
DFB $01,$01,$01,$01,$01,$01,$01,$01
DFB $01,$01,$01,$01,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
DFB $00,$00,$00,$00,$00,$00,$00,$00
;
EOF BRK