million-perfect-letters/src/mockingduet.a

188 lines
3.9 KiB
Plaintext
Raw Normal View History

2020-05-03 23:02:56 +00:00
; 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.
2020-05-12 19:53:25 +00:00
;
; -----------------------------------------------------------------------------
;
; 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
;
2020-05-03 23:02:56 +00:00
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
2020-09-27 03:12:36 +00:00
JMP MBLOOP
2020-05-03 23:02:56 +00:00
SETVOL
2020-09-27 03:12:36 +00:00
MBNEXT LDA SONG
2020-05-03 23:02:56 +00:00
CLC
ADC #$03
STA SONG
2020-09-27 03:12:36 +00:00
BCC MBLOOP
2020-05-03 23:02:56 +00:00
INC SONG+1
2020-09-27 03:12:36 +00:00
MBLOOP LDY #$00
2020-05-03 23:02:56 +00:00
LDA (SONG),Y
CMP #$01
BEQ SETVOL
BPL SETNOTE ;SET DURATION
2020-09-27 03:12:36 +00:00
MBEND JSR RESET
2020-05-03 23:02:56 +00:00
RTS
MBCHECKKEY
ldy #0
MBCHECK lda ($EE), y
beq MBCONTINUE
2020-09-27 03:12:36 +00:00
bpl MBEND
iny
cmp $C000
2020-09-27 03:12:36 +00:00
beq MBEND
bne MBCHECK ; always branches
MBCONTINUE
bit $C010
2020-09-27 03:12:36 +00:00
jmp MBNEXT
2020-05-03 23:02:56 +00:00
SETNOTE STA DURATION
LDA #LEFTCHN
2020-09-27 03:12:36 +00:00
MBSEND STA CHN
2020-05-12 19:53:25 +00:00
MBSLOT01 STA $C401
MBSLOT02 STA $C481
2020-05-03 23:02:56 +00:00
JSR SETREG1
INY
LDA (SONG),Y
2020-09-27 03:12:36 +00:00
BEQ MBSKIP ;IF 0 KEEP LTTSA
2020-05-03 23:02:56 +00:00
JSR CONVFREQ
2020-09-27 03:12:36 +00:00
MBSKIP LDA TONE
2020-05-12 19:53:25 +00:00
MBSLOT03 STA $C401
MBSLOT04 STA $C481
2020-05-03 23:02:56 +00:00
JSR WRDATA1
INC CHN
LDA CHN
2020-05-12 19:53:25 +00:00
MBSLOT05 STA $C401
MBSLOT06 STA $C481
2020-05-03 23:02:56 +00:00
JSR SETREG1
LDA TONE+1
2020-05-12 19:53:25 +00:00
MBSLOT07 STA $C401
MBSLOT08 STA $C481
2020-05-03 23:02:56 +00:00
JSR WRDATA1
LDA #RIGHTCHN
STA CHN
CPY #$02
2020-09-27 03:12:36 +00:00
BNE MBSEND
2020-05-03 23:02:56 +00:00
LDX DURATION
W1 LDY TEMPO
W2 DEC TEMP
BNE W2
DEY
BNE W2
DEX
BNE W1
BIT $C000
MBKEYBRANCH
BMI MBCHECKKEY
2020-09-27 03:12:36 +00:00
JMP MBNEXT
2020-05-03 23:02:56 +00:00
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
2020-05-12 19:53:25 +00:00
MBSLOT09 STA $C400
MBSLOT10 STA $C480
2020-05-03 23:02:56 +00:00
LDA #$04
2020-05-12 19:53:25 +00:00
MBSLOT11 STA $C400
MBSLOT12 STA $C480
2020-05-03 23:02:56 +00:00
RTS
INIT LDA #$FF
2020-05-12 19:53:25 +00:00
MBSLOT13 STA $C403
MBSLOT14 STA $C483
2020-05-03 23:02:56 +00:00
LDA #$07
2020-05-12 19:53:25 +00:00
MBSLOT15 STA $C402
MBSLOT16 STA $C482
2020-05-03 23:02:56 +00:00
RTS
SETREG1 LDA #$07
2020-05-12 19:53:25 +00:00
MBSLOT17 STA $C400
MBSLOT18 STA $C480
2020-05-03 23:02:56 +00:00
LDA #$04
2020-05-12 19:53:25 +00:00
MBSLOT19 STA $C400
MBSLOT20 STA $C480
2020-05-03 23:02:56 +00:00
RTS
WRDATA1 LDA #$06
2020-05-12 19:53:25 +00:00
MBSLOT21 STA $C400
MBSLOT22 STA $C480
2020-05-03 23:02:56 +00:00
LDA #$04
2020-05-12 19:53:25 +00:00
MBSLOT23 STA $C400
MBSLOT24 STA $C480
2020-05-03 23:02:56 +00:00
RTS
ENACHN LDA #ENAREG
2020-05-12 19:53:25 +00:00
MBSLOT25 STA $C401
MBSLOT26 STA $C481
2020-05-03 23:02:56 +00:00
JSR SETREG1
LDA #%00111100
2020-05-12 19:53:25 +00:00
MBSLOT27 STA $C401
MBSLOT28 STA $C481
2020-05-03 23:02:56 +00:00
JSR WRDATA1
LDA #VOL_A
2020-05-12 19:53:25 +00:00
MBSLOT29 STA $C401
MBSLOT30 STA $C481
2020-05-03 23:02:56 +00:00
JSR SETREG1
2020-09-24 00:08:15 +00:00
LDA #$0D
2020-05-12 19:53:25 +00:00
MBSLOT31 STA $C401
MBSLOT32 STA $C481
2020-05-03 23:02:56 +00:00
JSR WRDATA1
LDA #VOL_B
2020-05-12 19:53:25 +00:00
MBSLOT33 STA $C401
MBSLOT34 STA $C481
2020-05-03 23:02:56 +00:00
JSR SETREG1
2020-09-24 00:08:15 +00:00
LDA #$0D
2020-05-12 19:53:25 +00:00
MBSLOT35 STA $C401
MBSLOT36 STA $C481
2020-05-03 23:02:56 +00:00
JSR WRDATA1
RTS
OCTAVE !byte 1
TEMPO !byte 8
TEMP !byte 0