mirror of
https://github.com/sampopeltonen/Vicious.git
synced 2024-10-19 10:24:48 +00:00
565 lines
9.9 KiB
ArmAsm
565 lines
9.9 KiB
ArmAsm
|
;
|
||
|
; File generated by cc65 v 2.13.3
|
||
|
;
|
||
|
.fopt compiler,"cc65 v 2.13.3"
|
||
|
.setcpu "6502"
|
||
|
.smart on
|
||
|
.autoimport on
|
||
|
.case on
|
||
|
.debuginfo off
|
||
|
.importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2
|
||
|
.macpack longbranch
|
||
|
.import _initSIDTune
|
||
|
.import _prints
|
||
|
.import _printw
|
||
|
.import _fixSIDTune
|
||
|
.export _playSidFile
|
||
|
.export _readSidHeader
|
||
|
.export _moveSIDCodeToPlace
|
||
|
.export __strcpy
|
||
|
.export __memcpy
|
||
|
.export __readBigEndianW
|
||
|
|
||
|
.segment "RODATA"
|
||
|
|
||
|
L0001:
|
||
|
.byte $0D,$0D,$56,$49,$43,$49,$4F,$55,$53,$20,$53,$49,$44,$20,$50,$4C
|
||
|
.byte $41,$59,$45,$52,$0D,$00,$0D,$54,$49,$54,$4C,$45,$3A,$20,$20,$20
|
||
|
.byte $00,$0D,$41,$55,$54,$48,$4F,$52,$3A,$20,$20,$00,$0D,$52,$45,$4C
|
||
|
.byte $45,$41,$53,$45,$3A,$20,$00,$0D,$53,$4F,$4E,$47,$53,$3A,$20,$24
|
||
|
.byte $00,$20,$44,$45,$46,$41,$55,$4C,$54,$3A,$20,$24,$00,$0D,$55,$53
|
||
|
.byte $49,$4E,$47,$20,$46,$49,$4C,$45,$20,$53,$49,$5A,$45,$3A,$20,$24
|
||
|
.byte $00,$0D,$49,$4E,$49,$54,$20,$41,$44,$44,$52,$45,$53,$53,$3A,$20
|
||
|
.byte $20,$20,$20,$24,$00,$0D,$50,$4C,$41,$59,$20,$41,$44,$44,$52,$45
|
||
|
.byte $53,$53,$3A,$20,$20,$20,$20,$24,$00,$0D,$4C,$4F,$41,$44,$20,$41
|
||
|
.byte $44,$44,$52,$45,$53,$53,$3A,$20,$20,$20,$20,$24,$00,$0D,$00,$53
|
||
|
.byte $54,$41,$52,$54,$20,$50,$4C,$41,$59,$49,$4E,$47,$2E,$2E,$2E,$0D
|
||
|
.byte $00,$0D,$53,$49,$44,$20,$54,$55,$4E,$45,$20,$4E,$4F,$54,$20,$46
|
||
|
.byte $4F,$55,$4E,$44,$20,$49,$4E,$20,$41,$44,$44,$52,$45,$53,$53,$20
|
||
|
.byte $24,$00,$0D,$00
|
||
|
|
||
|
; ---------------------------------------------------------------
|
||
|
; void __near__ playSidFile (unsigned int, unsigned int)
|
||
|
; ---------------------------------------------------------------
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
.proc _playSidFile: near
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
ldy #$7A
|
||
|
jsr subysp
|
||
|
lda #<(L0001)
|
||
|
ldx #>(L0001)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
ldy #$7F
|
||
|
jsr pushwysp
|
||
|
lda #$04
|
||
|
jsr leaa0sp
|
||
|
jsr pushax
|
||
|
jsr _readSidHeader
|
||
|
tax
|
||
|
jeq L0078
|
||
|
lda #<(L0001+22)
|
||
|
ldx #>(L0001+22)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
lda #$1A
|
||
|
jsr leaa0sp
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
lda #<(L0001+33)
|
||
|
ldx #>(L0001+33)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
lda #$3A
|
||
|
jsr leaa0sp
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
lda #<(L0001+44)
|
||
|
ldx #>(L0001+44)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
lda #$5A
|
||
|
jsr leaa0sp
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
lda #<(L0001+55)
|
||
|
ldx #>(L0001+55)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
ldy #$15
|
||
|
jsr pushwysp
|
||
|
jsr _printw
|
||
|
lda #<(L0001+65)
|
||
|
ldx #>(L0001+65)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
ldy #$17
|
||
|
jsr pushwysp
|
||
|
jsr _printw
|
||
|
lda #<(L0001+77)
|
||
|
ldx #>(L0001+77)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
ldy #$7D
|
||
|
jsr pushwysp
|
||
|
jsr _printw
|
||
|
lda #<(L0001+97)
|
||
|
ldx #>(L0001+97)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
ldy #$11
|
||
|
jsr pushwysp
|
||
|
jsr _printw
|
||
|
lda #<(L0001+117)
|
||
|
ldx #>(L0001+117)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
ldy #$13
|
||
|
jsr pushwysp
|
||
|
jsr _printw
|
||
|
lda #$02
|
||
|
jsr leaa0sp
|
||
|
jsr pushax
|
||
|
ldy #$7F
|
||
|
jsr pushwysp
|
||
|
jsr _moveSIDCodeToPlace
|
||
|
jsr stax0sp
|
||
|
lda #<(L0001+137)
|
||
|
ldx #>(L0001+137)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
jsr pushw0sp
|
||
|
jsr _printw
|
||
|
lda #<(L0001+157)
|
||
|
ldx #>(L0001+157)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
jsr pushw0sp
|
||
|
ldy #$7F
|
||
|
jsr pushwysp
|
||
|
jsr _fixSIDTune
|
||
|
ldy #$11
|
||
|
jsr pushwysp
|
||
|
ldy #$13
|
||
|
jsr ldaxysp
|
||
|
jsr _initSIDTune
|
||
|
ldx #$4E
|
||
|
lda #$20
|
||
|
sta $BF84
|
||
|
stx $BF84+1
|
||
|
lda #$81
|
||
|
sta $BF8D
|
||
|
lda #<(L0001+159)
|
||
|
ldx #>(L0001+159)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
lda #$11
|
||
|
sta $BF8E
|
||
|
jmp L00BD
|
||
|
L0078: lda #<(L0001+177)
|
||
|
ldx #>(L0001+177)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
ldy #$7F
|
||
|
jsr pushwysp
|
||
|
jsr _printw
|
||
|
lda #<(L0001+210)
|
||
|
ldx #>(L0001+210)
|
||
|
jsr pushax
|
||
|
jsr _prints
|
||
|
L00BD: ldy #$7E
|
||
|
jmp addysp
|
||
|
|
||
|
.endproc
|
||
|
|
||
|
; ---------------------------------------------------------------
|
||
|
; unsigned char __near__ readSidHeader (unsigned int, __near__ struct SidHeader1*)
|
||
|
; ---------------------------------------------------------------
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
.proc _readSidHeader: near
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
jsr ldax0sp
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
ldy #$03
|
||
|
jsr ldaxysp
|
||
|
ldy #$00
|
||
|
sta (ptr1),y
|
||
|
iny
|
||
|
txa
|
||
|
sta (ptr1),y
|
||
|
jsr ldax0sp
|
||
|
jsr incax2
|
||
|
jsr pushax
|
||
|
ldy #$07
|
||
|
jsr pushwysp
|
||
|
lda #$04
|
||
|
jsr pusha0
|
||
|
jsr __memcpy
|
||
|
jsr ldax0sp
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
ldy #$02
|
||
|
lda (ptr1),y
|
||
|
cmp #$50
|
||
|
bne L0035
|
||
|
jsr ldax0sp
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
ldy #$03
|
||
|
lda (ptr1),y
|
||
|
cmp #$53
|
||
|
bne L0035
|
||
|
jsr ldax0sp
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
ldy #$04
|
||
|
lda (ptr1),y
|
||
|
cmp #$49
|
||
|
bne L0035
|
||
|
jsr ldax0sp
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
ldy #$05
|
||
|
lda (ptr1),y
|
||
|
cmp #$44
|
||
|
beq L0034
|
||
|
L0035: ldx #$00
|
||
|
txa
|
||
|
jmp incsp4
|
||
|
L0034: jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
jsr incax4
|
||
|
jsr pushax
|
||
|
jsr __readBigEndianW
|
||
|
ldy #$06
|
||
|
jsr staxspidx
|
||
|
jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
jsr incax6
|
||
|
jsr pushax
|
||
|
jsr __readBigEndianW
|
||
|
ldy #$08
|
||
|
jsr staxspidx
|
||
|
jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
jsr incax8
|
||
|
jsr pushax
|
||
|
jsr __readBigEndianW
|
||
|
ldy #$0A
|
||
|
jsr staxspidx
|
||
|
jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$0A
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
jsr __readBigEndianW
|
||
|
ldy #$0C
|
||
|
jsr staxspidx
|
||
|
jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$0C
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
jsr __readBigEndianW
|
||
|
ldy #$0E
|
||
|
jsr staxspidx
|
||
|
jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$0E
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
jsr __readBigEndianW
|
||
|
ldy #$10
|
||
|
jsr staxspidx
|
||
|
jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$10
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
jsr __readBigEndianW
|
||
|
ldy #$12
|
||
|
jsr staxspidx
|
||
|
jsr ldax0sp
|
||
|
ldy #$14
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$12
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
lda #$04
|
||
|
jsr pusha0
|
||
|
jsr __memcpy
|
||
|
jsr ldax0sp
|
||
|
ldy #$18
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$16
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
lda #$20
|
||
|
jsr pusha0
|
||
|
jsr __strcpy
|
||
|
jsr ldax0sp
|
||
|
ldy #$38
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$36
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
lda #$20
|
||
|
jsr pusha0
|
||
|
jsr __strcpy
|
||
|
jsr ldax0sp
|
||
|
ldy #$58
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$56
|
||
|
jsr incaxy
|
||
|
jsr pushax
|
||
|
lda #$20
|
||
|
jsr pusha0
|
||
|
jsr __strcpy
|
||
|
ldx #$00
|
||
|
lda #$01
|
||
|
jmp incsp4
|
||
|
|
||
|
.endproc
|
||
|
|
||
|
; ---------------------------------------------------------------
|
||
|
; unsigned int __near__ moveSIDCodeToPlace (__near__ struct SidHeader1*, unsigned int)
|
||
|
; ---------------------------------------------------------------
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
.proc _moveSIDCodeToPlace: near
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
jsr decsp2
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
jsr ldaxi
|
||
|
sta sreg
|
||
|
stx sreg+1
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
ldy #$09
|
||
|
jsr ldaxidx
|
||
|
clc
|
||
|
adc sreg
|
||
|
pha
|
||
|
txa
|
||
|
adc sreg+1
|
||
|
tax
|
||
|
pla
|
||
|
jsr pushax
|
||
|
ldy #$07
|
||
|
jsr ldaxysp
|
||
|
ldy #$0B
|
||
|
jsr ldaxidx
|
||
|
cpx #$00
|
||
|
bne L00C4
|
||
|
cmp #$00
|
||
|
beq L0064
|
||
|
L00C4: ldy #$07
|
||
|
jsr ldaxysp
|
||
|
ldy #$0B
|
||
|
jsr ldaxidx
|
||
|
ldy #$02
|
||
|
jsr staxysp
|
||
|
jmp L0069
|
||
|
L0064: jsr ldax0sp
|
||
|
jsr ldaxi
|
||
|
ldy #$02
|
||
|
jsr staxysp
|
||
|
ldx #$00
|
||
|
lda #$02
|
||
|
jsr addeq0sp
|
||
|
L0069: ldy #$05
|
||
|
jsr pushwysp
|
||
|
ldy #$05
|
||
|
jsr pushwysp
|
||
|
ldy #$0B
|
||
|
jsr pushwysp
|
||
|
jsr __memcpy
|
||
|
ldy #$03
|
||
|
jsr ldaxysp
|
||
|
jmp incsp8
|
||
|
|
||
|
.endproc
|
||
|
|
||
|
; ---------------------------------------------------------------
|
||
|
; void __near__ _strcpy (__near__ unsigned char*, unsigned int, unsigned int)
|
||
|
; ---------------------------------------------------------------
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
.proc __strcpy: near
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
jsr push0
|
||
|
L0014: jsr ldax0sp
|
||
|
ldy #$02
|
||
|
cmp (sp),y
|
||
|
txa
|
||
|
iny
|
||
|
sbc (sp),y
|
||
|
bcs L0015
|
||
|
jsr ldax0sp
|
||
|
clc
|
||
|
ldy #$04
|
||
|
adc (sp),y
|
||
|
sta ptr1
|
||
|
txa
|
||
|
iny
|
||
|
adc (sp),y
|
||
|
sta ptr1+1
|
||
|
ldy #$00
|
||
|
lda (ptr1),y
|
||
|
jsr pusha
|
||
|
ldy #$00
|
||
|
lda (sp),y
|
||
|
cmp #$61
|
||
|
bcc L001A
|
||
|
lda (sp),y
|
||
|
sec
|
||
|
sbc #$20
|
||
|
sta (sp),y
|
||
|
L001A: ldy #$02
|
||
|
jsr ldaxysp
|
||
|
clc
|
||
|
ldy #$07
|
||
|
adc (sp),y
|
||
|
sta ptr1
|
||
|
txa
|
||
|
iny
|
||
|
adc (sp),y
|
||
|
sta ptr1+1
|
||
|
ldy #$00
|
||
|
lda (sp),y
|
||
|
sta (ptr1),y
|
||
|
ldy #$02
|
||
|
jsr ldaxysp
|
||
|
jsr incax1
|
||
|
ldy #$01
|
||
|
jsr staxysp
|
||
|
jsr incsp1
|
||
|
jmp L0014
|
||
|
L0015: ldy #$09
|
||
|
jsr pushwysp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
jsr decax1
|
||
|
jsr tosaddax
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
lda #$00
|
||
|
tay
|
||
|
sta (ptr1),y
|
||
|
jmp incsp8
|
||
|
|
||
|
.endproc
|
||
|
|
||
|
; ---------------------------------------------------------------
|
||
|
; void __near__ _memcpy (__near__ unsigned char*, unsigned int, unsigned int)
|
||
|
; ---------------------------------------------------------------
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
.proc __memcpy: near
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
jsr push0
|
||
|
L0009: jsr ldax0sp
|
||
|
ldy #$02
|
||
|
cmp (sp),y
|
||
|
txa
|
||
|
iny
|
||
|
sbc (sp),y
|
||
|
jcs incsp8
|
||
|
jsr ldax0sp
|
||
|
clc
|
||
|
ldy #$06
|
||
|
adc (sp),y
|
||
|
sta sreg
|
||
|
txa
|
||
|
iny
|
||
|
adc (sp),y
|
||
|
sta sreg+1
|
||
|
jsr ldax0sp
|
||
|
clc
|
||
|
ldy #$04
|
||
|
adc (sp),y
|
||
|
sta ptr1
|
||
|
txa
|
||
|
iny
|
||
|
adc (sp),y
|
||
|
sta ptr1+1
|
||
|
ldy #$00
|
||
|
lda (ptr1),y
|
||
|
sta (sreg),y
|
||
|
jsr ldax0sp
|
||
|
jsr incax1
|
||
|
jsr stax0sp
|
||
|
jmp L0009
|
||
|
|
||
|
.endproc
|
||
|
|
||
|
; ---------------------------------------------------------------
|
||
|
; unsigned int __near__ _readBigEndianW (unsigned int)
|
||
|
; ---------------------------------------------------------------
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
.proc __readBigEndianW: near
|
||
|
|
||
|
.segment "CODE"
|
||
|
|
||
|
jsr ldax0sp
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
ldy #$00
|
||
|
lda (ptr1),y
|
||
|
tax
|
||
|
tya
|
||
|
jsr pushax
|
||
|
jsr pushw0sp
|
||
|
ldy #$05
|
||
|
jsr ldaxysp
|
||
|
jsr incax1
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
ldx #$00
|
||
|
lda (ptr1,x)
|
||
|
jsr tosadda0
|
||
|
jmp incsp4
|
||
|
|
||
|
.endproc
|
||
|
|