mirror of
https://github.com/cybernesto/mcs-player.git
synced 2025-01-14 09:30:38 +00:00
MCS player for the Cricket with ACIA interrupts
The MCS-CRICKET player set the VBL as an interrupt source using the mouse firmware. This had several limitations, since it is only available on the //c but also because depending if the //c is a PAL or NTSC model it would produce a 50Hz or a 60Hz interrupt. This version uses the ACIA as an interrupt source instead making it also compatible with other Apple II models with a Super Serial Card. The interrupts are caused by a Cricket alarm set to 60Hz making it region independent as well.
This commit is contained in:
parent
bf9cf3485b
commit
c1e5c79853
Binary file not shown.
341
src/MCS-CRICKET-ACIA.S
Normal file
341
src/MCS-CRICKET-ACIA.S
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
;"WILL HARVEY'S MUSIC"
|
||||||
|
;"COPYRIGHT (C) 1983"
|
||||||
|
ORG $8500
|
||||||
|
OBJ $8500
|
||||||
|
|
||||||
|
ACIACMD2 EQU $C0AA
|
||||||
|
ACIACTL2 EQU $C0AB
|
||||||
|
ACIAST2 EQU $C0A9
|
||||||
|
ACIARXTX2 EQU $C0A8
|
||||||
|
|
||||||
|
SONGADD EQU $EB
|
||||||
|
CHANNADD EQU $D6
|
||||||
|
BUFFER EQU $8400
|
||||||
|
|
||||||
|
JMP INTRUPT
|
||||||
|
JMP INIT
|
||||||
|
JMP INITMOCK
|
||||||
|
JMP SONGADDS
|
||||||
|
JMP PAUSE
|
||||||
|
JMP CONTINUE
|
||||||
|
|
||||||
|
TEMPO HEX 04
|
||||||
|
DECAY HEX 03
|
||||||
|
STARTADD HEX FE887E8D
|
||||||
|
STRONG HEX 0A
|
||||||
|
START HEX 00
|
||||||
|
END HEX 06
|
||||||
|
REST HEX 08
|
||||||
|
TEMPCNTR HEX 00
|
||||||
|
DECCNTR HEX 00
|
||||||
|
TEMP0 HEX 00
|
||||||
|
TEMP1 HEX 00
|
||||||
|
TEMP2 HEX 00
|
||||||
|
TEMP4 HEX 00
|
||||||
|
TEMP5 HEX 00
|
||||||
|
CNTR HEX 0101
|
||||||
|
VOICE HEX FFFFFFFFFFFF
|
||||||
|
PLUG HEX 00
|
||||||
|
FREQLO HEX 00
|
||||||
|
FREQHI HEX 00
|
||||||
|
TIED HEX 0000
|
||||||
|
FREQLOS HEX 232527292C2E3134
|
||||||
|
HEX 373A3E4145494E52
|
||||||
|
HEX 575C62686E747B83
|
||||||
|
HEX 8B939CA5AFB9C4D0
|
||||||
|
HEX DCE9F70615263749
|
||||||
|
HEX 5D72889FB8D2EE0B
|
||||||
|
HEX 2A4B6E93BAE4103E
|
||||||
|
HEX 70A4DB1654960101
|
||||||
|
FREQHIS HEX 0000000000000000
|
||||||
|
HEX 0000000000000000
|
||||||
|
HEX 0000000000000000
|
||||||
|
HEX 0000000000000000
|
||||||
|
HEX 0000000101010101
|
||||||
|
HEX 0101010101010102
|
||||||
|
HEX 0202020202020303
|
||||||
|
HEX 0303030404040000
|
||||||
|
ALARM ASC "S3 0:0:0:01",8D
|
||||||
|
|
||||||
|
INTRUPT TXA
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
INC DECCNTR
|
||||||
|
INC TEMPCNTR
|
||||||
|
LDA DECCNTR
|
||||||
|
CMP DECAY
|
||||||
|
BNE NODECAY
|
||||||
|
JSR DIMINISH
|
||||||
|
LDA #0
|
||||||
|
STA DECCNTR
|
||||||
|
NODECAY LDA TEMPCNTR
|
||||||
|
CMP TEMPO
|
||||||
|
BEQ MUSIC
|
||||||
|
JMP MUSICRTI
|
||||||
|
MUSIC LDA #$0
|
||||||
|
STA TEMPCNTR
|
||||||
|
LDX #0
|
||||||
|
MUSIC12 STX TEMP2
|
||||||
|
TXA
|
||||||
|
ASL
|
||||||
|
STA TEMP4
|
||||||
|
DEC CNTR,X
|
||||||
|
LDA CNTR,X
|
||||||
|
BNE MUSIC9
|
||||||
|
JSR STOPVOIC
|
||||||
|
MUSIC15 LDX TEMP4
|
||||||
|
LDA SONGADD,X
|
||||||
|
CLC
|
||||||
|
ADC #2
|
||||||
|
STA SONGADD,X
|
||||||
|
BCC MUSIC10
|
||||||
|
INC SONGADD+1,X
|
||||||
|
MUSIC10 LDA (SONGADD,X)
|
||||||
|
LSR
|
||||||
|
STA TEMP0
|
||||||
|
INC SONGADD,X
|
||||||
|
LDA (SONGADD,X)
|
||||||
|
DEC SONGADD,X
|
||||||
|
STA TEMP1
|
||||||
|
ORA TEMP0
|
||||||
|
BNE MUSIC11
|
||||||
|
JSR SONGADDS
|
||||||
|
JMP MUSIC3
|
||||||
|
MUSIC11 LDX TEMP2
|
||||||
|
JSR SEARCH
|
||||||
|
LDA TEMP2
|
||||||
|
STA VOICE,X
|
||||||
|
STX TEMP5
|
||||||
|
LDX TEMP0
|
||||||
|
LDA FREQLOS,X
|
||||||
|
STA FREQLO
|
||||||
|
LDA FREQHIS,X
|
||||||
|
STA FREQHI
|
||||||
|
LDA STRONG
|
||||||
|
STA PLUG
|
||||||
|
LDX TEMP5
|
||||||
|
JSR PLUGIT
|
||||||
|
LDX TEMP2
|
||||||
|
LDA TEMP1
|
||||||
|
AND #$40
|
||||||
|
STA TIED,X
|
||||||
|
LDA TEMP1
|
||||||
|
AND #$3F
|
||||||
|
STA CNTR,X
|
||||||
|
LDA TEMP1
|
||||||
|
AND #$80
|
||||||
|
BNE MUSIC15
|
||||||
|
MUSIC9 LDX TEMP2
|
||||||
|
INX
|
||||||
|
CPX #$2
|
||||||
|
BEQ MUSIC3
|
||||||
|
JMP MUSIC12
|
||||||
|
MUSIC3 JSR INITMOCK
|
||||||
|
MUSICRTI PLA
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
LDA $45
|
||||||
|
RTI
|
||||||
|
|
||||||
|
SEARCH CPX #$0
|
||||||
|
BNE S2
|
||||||
|
LDX START
|
||||||
|
S4 LDA VOICE,X
|
||||||
|
BMI S3
|
||||||
|
INX
|
||||||
|
CPX END
|
||||||
|
BNE S4
|
||||||
|
DEX
|
||||||
|
RTS
|
||||||
|
S2 LDX END
|
||||||
|
DEX
|
||||||
|
S5 LDA VOICE,X
|
||||||
|
BMI S3
|
||||||
|
DEX
|
||||||
|
CPX START
|
||||||
|
BNE S5
|
||||||
|
S3 RTS
|
||||||
|
|
||||||
|
PLUGIT TXA
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
LDA #0
|
||||||
|
CPX #3
|
||||||
|
BCC PI2
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
LDA #$10
|
||||||
|
PI2 STA CHANNADD
|
||||||
|
TXA
|
||||||
|
ASL
|
||||||
|
TAY
|
||||||
|
LDA FREQLO
|
||||||
|
STA (CHANNADD),Y
|
||||||
|
INY
|
||||||
|
LDA FREQHI
|
||||||
|
STA (CHANNADD),Y
|
||||||
|
TXA
|
||||||
|
CLC
|
||||||
|
ADC #$8
|
||||||
|
TAY
|
||||||
|
LDA PLUG
|
||||||
|
STA (CHANNADD),Y
|
||||||
|
PLA
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
RTS
|
||||||
|
|
||||||
|
OUT PHA
|
||||||
|
]LOOP LDA ACIAST2
|
||||||
|
AND #$10
|
||||||
|
BEQ ]LOOP
|
||||||
|
PLA
|
||||||
|
STA ACIARXTX2
|
||||||
|
RTS
|
||||||
|
|
||||||
|
INITMOCK TYA
|
||||||
|
PHA
|
||||||
|
LDY #$0
|
||||||
|
IM2 LDA BUFFER,Y
|
||||||
|
CMP BUFFER+$20,Y
|
||||||
|
BEQ IM3
|
||||||
|
TYA
|
||||||
|
ORA #$10
|
||||||
|
JSR OUT
|
||||||
|
LDA BUFFER,Y
|
||||||
|
STA BUFFER+$20,Y
|
||||||
|
JSR OUT
|
||||||
|
IM3 LDA BUFFER+$10,Y
|
||||||
|
CMP BUFFER+$30,Y
|
||||||
|
BEQ IM4
|
||||||
|
TYA
|
||||||
|
ORA #$20
|
||||||
|
JSR OUT
|
||||||
|
LDA BUFFER+$10,Y
|
||||||
|
STA BUFFER+$30,Y
|
||||||
|
JSR OUT
|
||||||
|
IM4 INY
|
||||||
|
CPY #$E
|
||||||
|
BNE IM2
|
||||||
|
PLA
|
||||||
|
TAY
|
||||||
|
RTS
|
||||||
|
|
||||||
|
STOPVOIC LDX START
|
||||||
|
SV2 LDA VOICE,X
|
||||||
|
CMP TEMP2
|
||||||
|
BNE SV3
|
||||||
|
LDA #$FF
|
||||||
|
STA VOICE,X
|
||||||
|
LDA #$0
|
||||||
|
STA PLUG
|
||||||
|
JSR PLUGIT
|
||||||
|
SV3 INX
|
||||||
|
CPX END
|
||||||
|
BNE SV2
|
||||||
|
RTS
|
||||||
|
|
||||||
|
SONGADDS LDA STARTADD
|
||||||
|
STA SONGADD
|
||||||
|
LDA STARTADD+1
|
||||||
|
STA SONGADD+1
|
||||||
|
LDA STARTADD+2
|
||||||
|
STA SONGADD+2
|
||||||
|
LDA STARTADD+3
|
||||||
|
STA SONGADD+3
|
||||||
|
LDA #<INTRUPT
|
||||||
|
STA $3FE
|
||||||
|
LDA #>INTRUPT
|
||||||
|
STA $3FF
|
||||||
|
LDA #<BUFFER
|
||||||
|
STA CHANNADD
|
||||||
|
LDA #>BUFFER
|
||||||
|
STA CHANNADD+1
|
||||||
|
LDA #$1
|
||||||
|
STA CNTR
|
||||||
|
STA CNTR+1
|
||||||
|
LDA #$0
|
||||||
|
STA TEMP2
|
||||||
|
JSR STOPVOIC
|
||||||
|
LDA #$1
|
||||||
|
STA TEMP2
|
||||||
|
JSR STOPVOIC
|
||||||
|
RTS
|
||||||
|
|
||||||
|
INIT JSR INITPAR
|
||||||
|
JSR SONGADDS
|
||||||
|
LDA #$09
|
||||||
|
STA ACIACMD2
|
||||||
|
LDA #$9E
|
||||||
|
STA ACIACTL2
|
||||||
|
LDA #$A1
|
||||||
|
JSR OUT
|
||||||
|
LDY #$00
|
||||||
|
]LOOP LDA ALARM,Y
|
||||||
|
JSR OUT
|
||||||
|
INY
|
||||||
|
CPY #12
|
||||||
|
BNE ]LOOP
|
||||||
|
CLI
|
||||||
|
RTS
|
||||||
|
|
||||||
|
DIMINISH LDX #$00
|
||||||
|
D1 LDA VOICE,X
|
||||||
|
CMP #$2
|
||||||
|
BCS D2
|
||||||
|
TAY
|
||||||
|
LDA TIED,Y
|
||||||
|
BNE D2
|
||||||
|
LDA BUFFER+$8,X
|
||||||
|
CMP REST
|
||||||
|
BEQ D2
|
||||||
|
DEC BUFFER+$8,X
|
||||||
|
D2 LDA VOICE+3,X
|
||||||
|
CMP #$2
|
||||||
|
BCS D3
|
||||||
|
TAY
|
||||||
|
LDA TIED,Y
|
||||||
|
BNE D3
|
||||||
|
LDA BUFFER+$18,X
|
||||||
|
CMP REST
|
||||||
|
BEQ D3
|
||||||
|
DEC BUFFER+$18,X
|
||||||
|
D3 INX
|
||||||
|
CPX #$3
|
||||||
|
BNE D1
|
||||||
|
RTS
|
||||||
|
|
||||||
|
PAUSE SEI
|
||||||
|
LDA #0
|
||||||
|
STA TEMP2
|
||||||
|
JSR STOPVOIC
|
||||||
|
INC TEMP2
|
||||||
|
JSR STOPVOIC
|
||||||
|
JSR INITMOCK
|
||||||
|
RTS
|
||||||
|
|
||||||
|
CONTINUE CLI
|
||||||
|
RTS
|
||||||
|
|
||||||
|
INITPAR LDX #0
|
||||||
|
]LOOP LDA PARAMS,X
|
||||||
|
STA BUFFER,X
|
||||||
|
STA BUFFER+$10,X
|
||||||
|
INX
|
||||||
|
CPX #$10
|
||||||
|
BNE ]LOOP
|
||||||
|
LDX #0
|
||||||
|
]LOOP LDA #$FF
|
||||||
|
STA BUFFER+$20,X
|
||||||
|
INX
|
||||||
|
CPX #$20
|
||||||
|
BNE ]LOOP
|
||||||
|
RTS
|
||||||
|
|
||||||
|
PARAMS HEX 01000100010000F8
|
||||||
|
HEX 0000000000000000
|
Loading…
x
Reference in New Issue
Block a user