Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;-----------------------------------------
- ;
- ; mobileTunes 3
- ; by Kerm Martian
- ;
- ;-----------------------------------------
- .nolist
- #include "dcs7.inc"
- #include "keyval.inc"
- #include "ti83plus.inc"
- OpenFileFlag .equ AppBackupScreen+94 ;byte
- FilePtr .equ AppBackupScreen+95 ;word
- FileSize .equ AppBackupScreen+97 ;word
- OffsetTable .equ AppBackupScreen+99 ;word
- OffsetSection .equ AppBackupScreen+101 ;word
- SongNoteLength .equ AppBackupScreen+103 ;word
- SongNoteCurrent .equ AppBackupScreen+105 ;word
- bPort .equ 0
- MouseY .equ $989E ; [header.asm:141]
- MouseX .equ $989F ; [header.asm:142]
- .list
- .org progstart
- .db $BB,$6D
- INIT:
- xor d
- .db $C9
- jr Start
- .dw $0000
- .db $06,$00
- .dw Icon
- .dw $0000
- .dw Apstart ;the routine to open files.
- .db $31,$7F ;argh, this be an APMain
- .db $02 ;number of accepted filetypes
- MyType1:
- .db 0,1,4 ;plaintext
- Icon:
- .db $07,$E0,$1C,$38,$32,$0C,$75,$0E,$48,$D6,$EC,$73,$D4,$2F,$AC,$17
- .db $D8,$1D,$FC,$2F,$FC,$7F,$7C,$FE,$7D,$FE,$3F,$FC,$1F,$F8,$07,$E0
- APIcon:
- .db $3F,$F0,$20,$18,$20,$14,$20,$1E,$3E,$02,$57,$02,$EA,$82,$A5,$82
- .db $E3,$82,$E7,$82,$EF,$82,$7F,$02,$3E,$02,$20,$02,$20,$02,$3F,$FE
- Start:
- xor a
- ld (OpenFileFlag),a
- ld hl,0
- ld (FilePtr),hl
- ld (FileSize),hl
- call SetupGUI
- MainMouse:
- ld hl,MouseHook
- call GUIMouse
- MouseHook:
- ld a,$ff
- out (1),a
- nop \ nop
- ld a,KeyRow_Top
- out (1),a
- nop \ nop
- in a,(1)
- cp dkY
- jr z,MouseHookPlayPause
- cp dkWindow
- jr z,MouseHookStop
- cp dkGraph
- jr z,MouseHookOpen
- ld a,$ff
- out (1),a
- nop \ nop
- ld a,KeyRow_5
- out (1),a
- nop \ nop
- in a,(1)
- cp dkClear
- ret nz
- ld hl,MouseY
- ld (hl),4
- inc hl
- ld (hl),92
- pop hl
- ret
- MouseHookPlayPause:
- ld hl,MouseY
- ld (hl),48
- inc hl
- ld (hl),14
- pop hl
- ret
- MouseHookStop:
- ld hl,MouseY
- ld (hl),56
- inc hl
- ld (hl),30
- pop hl
- ret
- MouseHookOpen:
- ld hl,MouseY
- ld (hl),56
- inc hl
- ld (hl),85
- pop hl
- ret
- Quit:
- call ResetAppPage
- call CloseGUIStack
- ret
- SetupGUI:
- call OpenGUIStack
- ;now, set it up
- ld hl,LargeWinData
- ld de,LargeWinDataE-LargeWinData
- ld a,1
- call PushGUIStack
- ld hl,WinButtons
- ld de,WinButtonsE-WinButtons
- ld a,5
- call PushGUIStack
- ld hl,OriginalButtons
- ld de,OriginalButtonsE-OriginalButtons
- ld a,$11
- call PushGUIStack
- ld hl,Hotspot_Open
- ld de,Hotspot_OpenE-Hotspot_Open
- ld a,$0e
- call PushGUIStack
- ld hl,Hotspot_PlayPause
- ld de,Hotspot_PlayPauseE-Hotspot_PlayPause
- ld a,$0e
- call PushGUIStack
- ld hl,Hotspot_Stop
- ld de,Hotspot_StopE-Hotspot_Stop
- ld a,$0e
- call PushGUIStack
- ld hl,Hotspot_Rev
- ld de,Hotspot_RevE-Hotspot_Rev
- ld a,$0e
- call PushGUIStack
- ld hl,Hotspot_FF
- ld de,Hotspot_FFE-Hotspot_FF
- ld a,$0e
- call PushGUIStack
- ret
- Button_PlayPause:
- call ResetAppPage
- ld hl,PlayPauseMask
- ld de,PlayPauseMaskE-PlayPauseMask
- ld a,$10
- call PushGUIStack
- call RenderGUI
- call playNow
- call PopGUIStack
- jp MainMouse
- Button_Stop:
- call ResetAppPage
- ld a,(OpenFileFlag)
- or a
- jp z,MainMouse
- call PlayStop
- jp MainMouse
- Button_FF:
- call ResetAppPage
- ld hl,SmallWinAbout
- ld de,SmallWinAboutE-SmallWinAbout
- ld a,2
- call PushGUIStack
- ld hl,SmallWinButtons
- ld de,SmallWinButtonsE-SmallWinButtons
- ld a,5
- call PushGUIStack
- ld hl,SmallWinAboutT1
- ld de,SmallWinAboutT2-SmallWinAboutT1
- ld a,4
- call PushGUIStack
- ld hl,SmallWinAboutT2
- ld de,SmallWinAboutT3-SmallWinAboutT2
- ld a,4
- call PushGUIStack
- ld hl,SmallWinAboutT3
- ld de,SmallWinAboutT4-SmallWinAboutT3
- ld a,4
- call PushGUIStack
- ld hl,SmallWinAboutT4
- ld de,SmallWinAboutT5-SmallWinAboutT4
- ld a,4
- call PushGUIStack
- ld hl,0
- call GUIMouse
- DispAboutClose:
- call ResetAppPage
- ld b,6
- call PopGUIStacks
- jp MainMouse
- Button_Open:
- call ResetAppPage
- ld a,0
- call FileOpen
- ld a,h
- or l
- jp z,MainMouse
- push hl
- ; dec hl
- ; ld a,(hl)
- ; cp 4
- ; jp nz,OpenFail
- ; dec hl
- ; ld a,(hl)
- ; cp 1
- ; jp nz,OpenFail
- ; dec hl
- ; ld a,(hl)
- ; or a
- ; jp nz,OpenFail
- push de
- push bc
- ld a,(OpenFileFlag)
- or a
- jr z,Button_Open2
- ld b,3
- call PopGUIStacks
- Button_Open2:
- pop hl
- ld (FileSize),hl
- pop de
- pop hl
- Button_Open_APIns:
- ld b,3
- Button_Open_LL:
- ld de,TextLabelTemplate
- ex de,hl
- ld a,3
- sub b
- add a,a
- add a,a
- add a,a
- inc a
- ld (hl),1
- inc hl
- ld (hl),a
- inc hl
- inc hl
- Button_Open_L1
- ld a,(de)
- ld (hl),a
- inc hl
- inc de
- or a
- jr nz,Button_Open_L1
- push hl
- push de
- push bc
- ld hl,TextLabelTemplate
- ld de,TextLabelTemplateE-TextLabelTemplate
- ld a,4
- call PushGUIStack
- pop bc
- pop hl
- pop de
- djnz Button_Open_LL
- ld (FilePtr),hl
- ld a,1
- ld (OpenFileFlag),a
- ld hl,0
- ld (OffsetTable),hl
- ld (OffsetSection),hl
- ld (SongNoteCurrent),hl
- push hl
- pop bc
- ld hl,(FilePtr)
- CountNotes:
- push hl
- bcall(_ldhlind)
- ld a,h
- or l
- jr z,CountNotesDone
- ld de,(FilePtr)
- add hl,de
- push hl
- pop ix
- CountNotesInner:
- ld a,(ix+4)
- or (ix+5)
- jr z,CountNotesNext
- inc ix
- inc ix
- inc ix
- inc ix
- inc ix
- inc ix
- inc bc
- jr CountNotesInner
- CountNotesNext:
- pop hl
- inc hl
- inc hl
- jr CountNotes
- CountNotesDone:
- pop hl
- push bc
- pop hl
- ld (SongNoteLength),hl
- call UpdateSlider
- jp MainMouse
- OpenFail:
- pop hl
- jp MainMouse
- APStart:
- push ix
- call SetupGUI
- pop hl
- push hl
- ld de,-8
- add hl,de
- bcall(_ldhlind)
- ld (FileSize),hl
- pop hl
- jp Button_Open_APIns
- UpdateSlider:
- ld de,(SongNoteCurrent)
- ld a,59
- call MultADE
- ld b,h
- ld c,l
- ld de,(SongNoteLength)
- call DivABCDE
- ld a,34
- add a,c
- ld e,47
- call iGetPixel
- push af
- xor $ff
- and (hl)
- ld (hl),a
- ld b,0
- pop af
- sla a
- rl b
- or (hl)
- ld (hl),a
- dec hl
- ld a,b
- or (hl)
- ld (hl),a
- call iFastCopy
- ret
- MultADE:
- ld c,0
- ld h,c
- ld l,c
- add a,a ; optimised 1st iteration
- jr nc,$+4
- ld h,d
- ld l,e
- ld b,7
- MultADE1:
- add hl,hl ; unroll 7 times
- rla ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- adc a,c ; ...
- djnz MultADE1
- ret
- DivABCDE:
- ld hl,0
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- slia c ; unroll 24 times
- rl b ; ...
- rla ; ...
- adc hl,hl ; ...
- sbc hl,de ; ...
- jr nc,$+4 ; ...
- add hl,de ; ...
- dec c ; ...
- ret
- playNow:
- ld hl,(FilePtr)
- ld de,(OffsetTable)
- add hl,de
- push hl
- pop ix
- ld a,(ix+0)
- or (ix+1)
- jr nz,PlaySection
- playStop:
- ld hl,0 ;reset stuff here
- ld (OffsetTable),hl
- ld (OffsetSection),hl
- ld (SongNoteCurrent),hl
- call UpdateSlider
- ret
- playSection:
- push ix
- pop hl
- ld a,(hl)
- inc hl
- ld h,(hl)
- ld l,a
- ld de,(FilePtr)
- add hl,de
- ld de,(OffsetSection)
- add hl,de
- push hl
- pop ix
- playNoteLoop:
- ld a,(ix+4)
- or (ix+5)
- jr z,playNextSection
- ld b,(ix+5)
- ld c,(ix+4)
- ld h,(ix+0)
- ld l,(ix+1)
- ld d,(ix+2)
- ld e,(ix+3)
- inc ix
- inc ix
- inc ix
- inc ix
- inc ix
- inc ix
- call playTone
- ld hl,(SongNoteCurrent)
- inc hl
- ld (SongNoteCurrent),hl
- call UpdateSlider
- ld a,KeyRow_Top
- out (1),a
- nop \ nop
- in a,(1)
- cp dkWindow
- jr z,playStop
- ld hl,(OffsetSection)
- ld de,6
- add hl,de
- ld (OffsetSection),hl
- jr playNoteLoop
- playNextSection:
- ld hl,(OffsetTable)
- inc hl
- inc hl
- ld (OffsetTable),hl
- ld hl,0
- ld (OffsetSection),hl
- jp PlayNow
- ; Play the tone dur=bc, period = h,l,d,e (4 channel sound - h,l = left speaker, d,e = right speaker)
- playTone:
- di
- xor a
- ld (toneMask1+1),a
- ld (toneMask2+1),a
- inc b
- ; INIT CHANNEL A
- ld a,h
- ld (toneAPitch+1),a
- or a
- jr z,isRestA
- ld a,1
- jr notRestA
- isRestA:
- xor a
- notRestA:
- ld (toneAChange+1),a
- ; INIT CHANNEL B
- ld a,l
- ld (toneBPitch+1),a
- or a
- jr z,isRestB
- ld a,1
- jr notRestB
- isRestB:
- xor a
- notRestB:
- ld (toneBChange+1),a
- ; INIT CHANNEL C
- ld a,d
- ld (toneCPitch+1),a
- or a
- jr z,isRestC
- ld a,2
- jr notRestC
- isRestC:
- xor a
- notRestC:
- ld (toneCChange+1),a
- ; INIT CHANNEL D
- ld a,e
- ld (toneDPitch+1),a
- or a
- jr z,isRestD
- ld a,2
- jr notRestD
- isRestD:
- xor a
- notRestD:
- ld (toneDChange+1),a
- toneMaskPreserve:
- push bc
- toneMask:
- and 1
- jr z,playPart2
- ld a,(toneMask1+1)
- jr playPart1
- playPart2:
- ld a,(toneMask2+1)
- playPart1:
- out (bPort),a
- pitchLoop:
- dec h
- jr nz,noPitchA
- toneMask1:
- ld a,0
- toneAChange:
- xor 0
- ld (toneMask1+1),a
- toneAPitch:
- ld h,0
- noPitchA:
- dec l
- jr nz,noPitchB
- toneMask2:
- ld a,0
- toneBChange:
- xor 0
- ld (toneMask2+1),a
- toneBPitch:
- ld l,0
- noPitchB:
- dec d
- jr nz,noPitchC
- ld a,(toneMask1+1)
- toneCChange:
- xor 0
- ld (toneMask1+1),a
- toneCPitch:
- ld d,0
- noPitchC:
- dec e
- jr nz,noPitchD
- ld a,(toneMask2+1)
- toneDChange:
- xor 0
- ld (toneMask2+1),a
- toneDPitch:
- ld e,0
- noPitchD:
- extendDuration:
- ld a,0
- dec a
- ld (extendDuration+1),a
- jr nz,toneMask
- ld a,KeyRow_Top
- pop bc
- out (1),a
- in a,(1)
- cp dkY
- jr nz,notTimeToQuit
- pop hl
- ret
- notTimeToQuit:
- dec c
- jp nz,toneMaskPreserve
- dec b
- jp nz,toneMaskPreserve
- ret
- LargeWinData:
- .db %01111000
- .db %01001000
- .db %01011000
- .db %11011000
- .db %11000000
- .db "mobileTunes 3.1",0
- LargeWinDataE:
- WinButtons:
- ;[which {-,[],X,00000}, onclick[-] {word}, onclick[] {word}, onclick[X] {word}]
- .db %00100000
- .dw 0,0
- .dw Quit
- WinButtonsE:
- Hotspot_Open:
- .db 78,43
- .db 13,10
- .dw Button_Open
- Hotspot_OpenE:
- Hotspot_PlayPause:
- .db 3,32
- .db 21,21
- .dw Button_PlayPause
- Hotspot_PlayPauseE:
- Hotspot_Stop:
- .db 26,44
- .db 9,9
- .dw Button_Stop
- Hotspot_StopE:
- Hotspot_Rev:
- .db 36,44
- .db 9,9
- .dw Button_Stop
- Hotspot_RevE:
- Hotspot_FF:
- .db 46,44
- .db 9,9
- .dw Button_FF
- Hotspot_FFE:
- TextLabelTemplate:
- .db 1,1
- .db 0
- .db 0,0,0,0,0,0,0,0
- .db 0,0,0,0,0,0,0,0
- .db 0,0,0,0,0,0,0,0
- .db 0,0,0,0,0,0,0,0
- TextLabelTemplateE:
- OriginalButtons:
- .db -1,29
- .db 12
- .db 25
- .db $00,$1F,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$60,$30,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00,$01,$80,$0C,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$02,$1F,$C2,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .db $04,$7F,$F1,$00,$00,$00,$00,$00,$00,$00,$00,$00,$78,$F8,$F8,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FE,$01,$D1,$5C,$40,$00,$00,$00,$00
- .db $00,$00,$00,$00,$03,$EA,$3E,$40,$00,$00,$00,$00,$00,$00,$00,$00
- .db $07,$55,$57,$20,$7F,$FF,$FF,$FF,$FF,$FF,$FF,$FC,$07,$E3,$BF,$20
- .db $7F,$FF,$FF,$FF,$FF,$FF,$FF,$FC,$0F,$51,$57,$90,$7F,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FC,$0F,$B0,$EF,$88,$00,$00,$00,$00,$00,$00,$00,$00
- .db $0D,$50,$57,$86,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$F0,$3F,$81
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FE,$0E,$F0,$7B,$80,$00,$00,$00,$FF
- .db $FF,$FF,$00,$0E,$0F,$D0,$DF,$87,$C1,$F0,$7C,$1F,$FF,$FE,$FF,$F6
- .db $0F,$F1,$FF,$88,$22,$08,$82,$03,$FF,$FE,$C0,$F6,$07,$F3,$FF,$17
- .db $D5,$D5,$45,$00,$FF,$FE,$BF,$76,$07,$F7,$FF,$1C,$77,$9D,$F7,$00
- .db $7F,$FE,$A0,$16,$03,$FF,$FE,$1C,$77,$1D,$EF,$00,$3F,$FE,$AF,$D6
- .db $01,$FF,$FC,$1C,$77,$9D,$FF,$00,$1F,$FE,$9F,$B6,$00,$FF,$F8,$1F
- .db $F7,$DD,$EF,$00,$0F,$FE,$9F,$B6,$00,$7F,$F0,$0F,$E3,$F8,$FE,$00
- .db $07,$FE,$C0,$76,$00,$1F,$C0,$07,$C1,$F0,$7C,$00,$01,$FF,$7F,$EE
- .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$3F,$FF,$FE
- OriginalButtonsE:
- PlayPauseMask:
- .db 10,36
- .db 12
- .db $04,$82,$2C,$92,$BE,$AA,$B8,$9A,$BE,$B6,$A6,$86
- PlayPauseMaskE:
- SmallWinAbout:
- .db 8,8
- .db %01111000
- .db %01001000
- .db %01011000
- .db %11011000
- .db %11000000
- .db "mt3 | About",0
- SmallWinAboutE:
- SmallWinButtons:
- ;[which {-,[],X,00000}, onclick[-] {word}, onclick[] {word}, onclick[X] {word}]
- .db %00100000
- .dw 0,0
- .dw DispAboutClose
- SmallWinButtonsE:
- SmallWinAboutT1:
- .db 1,1,0,"mobileTunes v3.1",0
- SmallWinAboutT2:
- .db 1,8,0,"By Kerm Martian",0
- SmallWinAboutT3:
- .db 1,15,0,"July 25, 2010",0
- SmallWinAboutT4:
- .db 1,22,0,"www.cemetech.net",0
- SmallWinAboutT5:
- .end
- END
Advertisement
Add Comment
Please, Sign In to add comment