mirror of
https://github.com/a2-4am/million-perfect-letters.git
synced 2024-06-09 23:29:39 +00:00
188 lines
3.9 KiB
Plaintext
188 lines
3.9 KiB
Plaintext
; ELECTRIC DUET MUSIC PLAYER FOR THE MOCKINGBOARD
|
|
; COPYRIGHT 2014 CYBERNESTO
|
|
;
|
|
; This program is free software; you can redistribute it and/or modify
|
|
; it under the terms of the GNU General Public License as published by
|
|
; the Free Software Foundation; either version 2 of the License, or
|
|
; (at your option) any later version.
|
|
;
|
|
; This program is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU General Public License for more details.
|
|
;
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with this program; if not, write to the
|
|
; Free Software Foundation, Inc.,
|
|
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
;
|
|
; -----------------------------------------------------------------------------
|
|
;
|
|
; changes to original (by 4am):
|
|
; - fixes for stereo output
|
|
; - labels for slot independence (see million.init.a)
|
|
; - MBCHECKKEY to check against a list of keys that will exit
|
|
;
|
|
|
|
CHN = $1D
|
|
SONG = $1E
|
|
LEFTCHN = $00
|
|
RIGHTCHN = $02
|
|
ENAREG = $07
|
|
VOL_A = $08
|
|
VOL_B = $09
|
|
TONE = $06
|
|
DURATION = $08
|
|
|
|
|
|
!align $FF,0,0 ; align to page
|
|
MockingDuet
|
|
JSR INIT
|
|
JSR RESET
|
|
JSR ENACHN
|
|
JMP MBLOOP
|
|
|
|
SETVOL
|
|
MBNEXT LDA SONG
|
|
CLC
|
|
ADC #$03
|
|
STA SONG
|
|
BCC MBLOOP
|
|
INC SONG+1
|
|
MBLOOP LDY #$00
|
|
LDA (SONG),Y
|
|
CMP #$01
|
|
BEQ SETVOL
|
|
BPL SETNOTE ;SET DURATION
|
|
MBEND JSR RESET
|
|
RTS
|
|
|
|
MBCHECKKEY
|
|
ldy #0
|
|
MBCHECK lda ($EE), y
|
|
beq MBCONTINUE
|
|
bpl MBEND
|
|
iny
|
|
cmp $C000
|
|
beq MBEND
|
|
bne MBCHECK ; always branches
|
|
MBCONTINUE
|
|
bit $C010
|
|
jmp MBNEXT
|
|
|
|
SETNOTE STA DURATION
|
|
LDA #LEFTCHN
|
|
MBSEND STA CHN
|
|
MBSLOT01 STA $C401
|
|
MBSLOT02 STA $C481
|
|
JSR SETREG1
|
|
INY
|
|
LDA (SONG),Y
|
|
BEQ MBSKIP ;IF 0 KEEP LTTSA
|
|
JSR CONVFREQ
|
|
MBSKIP LDA TONE
|
|
MBSLOT03 STA $C401
|
|
MBSLOT04 STA $C481
|
|
JSR WRDATA1
|
|
INC CHN
|
|
LDA CHN
|
|
MBSLOT05 STA $C401
|
|
MBSLOT06 STA $C481
|
|
JSR SETREG1
|
|
LDA TONE+1
|
|
MBSLOT07 STA $C401
|
|
MBSLOT08 STA $C481
|
|
JSR WRDATA1
|
|
LDA #RIGHTCHN
|
|
STA CHN
|
|
CPY #$02
|
|
BNE MBSEND
|
|
LDX DURATION
|
|
W1 LDY TEMPO
|
|
W2 DEC TEMP
|
|
BNE W2
|
|
DEY
|
|
BNE W2
|
|
DEX
|
|
BNE W1
|
|
BIT $C000
|
|
MBKEYBRANCH
|
|
BMI MBCHECKKEY
|
|
JMP MBNEXT
|
|
|
|
CONVFREQ LDX OCTAVE
|
|
INX
|
|
PHA
|
|
LDA #$00
|
|
STA TONE+1
|
|
PLA
|
|
DECOCT DEX
|
|
BMI LOBYTE
|
|
ASL
|
|
ROL TONE+1
|
|
JMP DECOCT
|
|
LOBYTE STA TONE
|
|
RTS
|
|
|
|
RESET LDA #$00
|
|
MBSLOT09 STA $C400
|
|
MBSLOT10 STA $C480
|
|
LDA #$04
|
|
MBSLOT11 STA $C400
|
|
MBSLOT12 STA $C480
|
|
RTS
|
|
|
|
INIT LDA #$FF
|
|
MBSLOT13 STA $C403
|
|
MBSLOT14 STA $C483
|
|
LDA #$07
|
|
MBSLOT15 STA $C402
|
|
MBSLOT16 STA $C482
|
|
RTS
|
|
|
|
SETREG1 LDA #$07
|
|
MBSLOT17 STA $C400
|
|
MBSLOT18 STA $C480
|
|
LDA #$04
|
|
MBSLOT19 STA $C400
|
|
MBSLOT20 STA $C480
|
|
RTS
|
|
|
|
WRDATA1 LDA #$06
|
|
MBSLOT21 STA $C400
|
|
MBSLOT22 STA $C480
|
|
LDA #$04
|
|
MBSLOT23 STA $C400
|
|
MBSLOT24 STA $C480
|
|
RTS
|
|
|
|
ENACHN LDA #ENAREG
|
|
MBSLOT25 STA $C401
|
|
MBSLOT26 STA $C481
|
|
JSR SETREG1
|
|
LDA #%00111100
|
|
MBSLOT27 STA $C401
|
|
MBSLOT28 STA $C481
|
|
JSR WRDATA1
|
|
LDA #VOL_A
|
|
MBSLOT29 STA $C401
|
|
MBSLOT30 STA $C481
|
|
JSR SETREG1
|
|
LDA #$0D
|
|
MBSLOT31 STA $C401
|
|
MBSLOT32 STA $C481
|
|
JSR WRDATA1
|
|
LDA #VOL_B
|
|
MBSLOT33 STA $C401
|
|
MBSLOT34 STA $C481
|
|
JSR SETREG1
|
|
LDA #$0D
|
|
MBSLOT35 STA $C401
|
|
MBSLOT36 STA $C481
|
|
JSR WRDATA1
|
|
RTS
|
|
|
|
OCTAVE !byte 1
|
|
TEMPO !byte 8
|
|
TEMP !byte 0
|