Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *= $1000
- vwrite = $fd
- vread = $fb
- vcnt = $bd
- vdur = $b5
- vsid = $a4
- v1freq = $1400
- v2freq = $1600
- v3freq = $1800
- rcount = $1a00
- wcount = $1a01
- octave = $1a02
- tempfr = $1a03
- v1cnt = $1a05
- v2cnt = $1a06
- v3cnt = $1a07
- v1dur = $1a08
- v2dur = $1a09
- v3dur = $1a10
- irqtemp = $1a11 ; 3 bytes
- sid = $d400
- lda #147
- jsr $ffd2
- ; init some memory
- ldx #0
- ldy #0
- stx rcount
- stx wcount
- stx v1cnt
- stx v2cnt
- stx v3cnt
- jsr setv1
- jsr readmusic
- jsr setv2
- jsr readmusic
- jsr setv3
- jsr readmusic
- jmp init
- ; start reading music
- readmusic
- ldx #0
- ldy #0
- stx rcount
- stx wcount
- readnote
- ldy rcount
- lda (vread),y
- jsr $ffd2
- sec
- sbc #65
- clc
- asl a
- asl a
- tax
- iny
- lda (vread),y
- cmp #35
- bne nosharp
- jsr $ffd2
- inx
- inx
- iny
- lda (vread),y
- nosharp
- iny
- jsr $ffd2
- sec
- sbc #47
- sta octave
- sty rcount
- lda notes,x
- sta tempfr
- inx
- lda notes,x
- sta tempfr+1
- setoct
- dec octave
- beq donoct
- clc
- asl tempfr
- rol tempfr+1
- jmp setoct
- donoct
- ldy wcount
- lda tempfr
- sta (vwrite),y
- lda tempfr+1
- iny
- sta (vwrite),y
- iny
- sty wcount
- ; read duration
- ldy rcount
- iny
- lda (vread),y
- jsr $ffd2
- iny
- sty rcount
- sec
- sbc #48
- ldy wcount
- sta (vwrite),y
- inc wcount
- ldy rcount
- inc rcount
- lda (vread),y
- cmp #0
- beq readover
- jsr $ffd2
- jmp readnote
- readover ldy wcount
- sta (vwrite),y
- lda #13
- jsr $ffd2
- jsr $ffd2
- rts
- ; set up sid
- init ldx #0
- lda #0
- setsid sta sid,x
- inx
- cpx #24
- bne setsid
- lda #$f0
- sta sid+6
- sta sid+13
- sta sid+20
- lda #8
- sta sid+3
- sta sid+10
- sta sid+17
- lda #24
- sta sid+5
- lda #16
- sta sid+12
- lda #7
- sta sid+24
- ; set up irq
- sei
- lda #$ff
- sta $dc06
- sta $dc07
- lda #<timeirq
- sta $0314
- lda #>timeirq
- sta $0315
- lda #%00010001
- sta $dc0f
- lda #%10000010
- sta $dc0d
- cli
- loop
- jmp loop
- timeirq
- lda $dc0d
- sta tempfr
- tay
- and #%00000001
- beq timerb
- timerb tya
- and #%00000010
- beq irqend
- jsr setv1
- jsr playv
- jsr setv2
- jsr playv
- jsr setv3
- jsr playv
- irqend jmp $ea31
- playv ldx #0
- lda (vcnt,x)
- tay ; y is voice count
- lda (vdur,x) ; a is voice dur
- cmp #0
- bne decv
- lda (vwrite),y
- sta irqtemp
- iny
- lda (vwrite),y
- sta irqtemp+1
- ; check if freq is $0000
- ora irqtemp
- beq endv
- iny
- lda (vwrite),y
- sta (vdur,x)
- lda #65
- sta irqtemp+2
- iny
- tya
- sta (vcnt,x)
- ldy #0
- lda irqtemp
- sta (vsid),y
- iny
- lda irqtemp+1
- sta (vsid),y
- ldy #4
- lda irqtemp+2
- sta (vsid),y
- jmp playvend
- decv sec
- sbc #1
- sta (vdur,x)
- cmp #1
- bne playvend
- endv ldy #4
- lda (vsid),y
- and #$fe
- sta (vsid),y
- playvend rts
- setv1 lda #<v1notes
- sta vread
- lda #>v1notes
- sta vread+1
- lda #<v1freq
- sta vwrite
- lda #>v1freq
- sta vwrite+1
- lda #<v1dur
- sta vdur
- lda #>v1dur
- sta vdur+1
- lda #<v1cnt
- sta vcnt
- lda #>v1cnt
- sta vcnt+1
- lda #<sid
- sta vsid
- lda #>sid
- sta vsid+1
- rts
- setv2 lda #<v2notes
- sta vread
- lda #>v2notes
- sta vread+1
- lda #<v2freq
- sta vwrite
- lda #>v2freq
- sta vwrite+1
- lda #<v2cnt
- sta vcnt
- lda #>v2cnt
- sta vcnt+1
- lda #<v2dur
- sta vdur
- lda #>v2dur
- sta vdur+1
- lda #<(sid+7)
- sta vsid
- lda #>sid
- sta vsid+1
- rts
- setv3 lda #<v3notes
- sta vread
- lda #>v3notes
- sta vread+1
- lda #<v3freq
- sta vwrite
- lda #>v3freq
- sta vwrite+1
- lda #<v3cnt
- sta vcnt
- lda #>v3cnt
- sta vcnt+1
- lda #<v3dur
- sta vdur
- lda #>v3dur
- sta vdur+1
- lda #<(sid+14)
- sta vsid
- lda #>sid
- sta vsid+1
- rts
- v1notes .text "D4,4 G4,4 G4,6 F#4,2 "
- .text "G4,4 B4,4 B4,4 A4,4 "
- .text "D5,4 D5,4 D5,6 C5,2 "
- .text "B4,4 A4,4 B4,8 "
- .text "D4,4 G4,4 G4,6 F#4,2 "
- .text "G4,4 B4,4 B4,4 A4,4 "
- .text "D5,4 A4,4 A4,6 F#4,2 "
- .null "F#4,4 E4,4 D4,8"
- v2notes .text "D4,4 D4,4 D4,6 D4,2 "
- .text "D4,4 G4,4 G4,4 F#4,4 "
- .text "G4,4 F#4,4 E4,4 A4,4 "
- .text "G4,4 F#4,4 G4,8 "
- .text "D4,4 D4,4 D4,6 D4,2 "
- .text "E4,4 G4,4 G4,8 "
- .text "F#4,4 E4,4 F#4,6 D4,2 "
- .null "D4,4 C#4,4 D4,8"
- v3notes .text "B3,4 B3,4 B3,6 A3,2 "
- .text "B3,4 D4,4 D4,8 "
- .text "D4,4 D4,4 C4,4 E4,4 "
- .text "D4,4 D4,4 D4,8 "
- .text "B3,4 B3,4 B3,6 A3,2 "
- .text "B3,4 D4,4 C#4,8 "
- .text "D4,4 E4,4 D4,6 A3,2 "
- .null "B3,4 G3,4 F#3,8"
- notes .word 451,477,506,0,268,284,301
- .word 318,337,0,358,379,401,425
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement