79 lines
1.7 KiB
NASM
79 lines
1.7 KiB
NASM
.CR 6502
|
|
.TF song.hex,INT
|
|
.LF song.list
|
|
|
|
* ----------------------------------------------------------------------
|
|
* PLAY A SONG USING THE TIMERS ON THE 6522.
|
|
*
|
|
|
|
ADDRS .EQ $01
|
|
TEMP .EQ $03
|
|
YSAVE .EQ $04
|
|
F .EQ $05
|
|
|
|
VIA .EQ $1700
|
|
ORA .EQ VIA + $1
|
|
DDRA .EQ VIA + $3
|
|
T1CL .EQ VIA + $4
|
|
T1CH .EQ VIA + $5
|
|
TIMER .EQ VIA + $7
|
|
ACR .EQ VIA + $B
|
|
IER .EQ VIA + $E
|
|
|
|
.OR $0010
|
|
.TA $0010
|
|
TIME20 LDA #$31
|
|
STA TIMER
|
|
T1 BIT TIMER RESET TIMER
|
|
BPL T1
|
|
DEX
|
|
BNE TIME20
|
|
RTS
|
|
|
|
.OR $0020
|
|
.TA $0020
|
|
FREQT STY YSAVE
|
|
STA F
|
|
FT0 LDA #$31
|
|
STA TIMER START TIMER (1/20 SEC.)
|
|
FT1 LDY F
|
|
FT2 INY
|
|
BNE FT2
|
|
INC ORA SWITCH SPEAKER
|
|
BIT TIMER TIME LAPSED?
|
|
BPL FT1 NO: GO ON.
|
|
FT3 DEX
|
|
BNE FT0
|
|
LDY YSAVE
|
|
RTS
|
|
|
|
.OR $0040
|
|
.TA $0040
|
|
START LDX #$0F
|
|
TXS
|
|
LDA #$00
|
|
STA $17FA
|
|
STA $17FE
|
|
LDA #$1C
|
|
STA $17FB
|
|
STA $17FF INTERRUPT VECTOR
|
|
LDA #$01
|
|
STA ORA OUTPUT AUDIO
|
|
DACAPO LDY #$00
|
|
NEXT LDA (ADDRS),Y
|
|
STA TEMP
|
|
AND #$7F
|
|
TAX DURATION
|
|
BEQ DACAPO
|
|
INY
|
|
LDA (ADDRS),Y
|
|
BEQ TONE
|
|
JSR FREQT
|
|
BIT TEMP
|
|
BMI AFTER
|
|
LDX #$02
|
|
JSR TIME20
|
|
AFTER INY
|
|
JMP NEXT
|
|
TONE JSR TIME20
|
|
BEQ AFTER |