Apple2GSBuildPipeline/pkg/Templates/Apple IIgs/ORCAM New Desk Accessory.xc.../main.s

316 lines
6.5 KiB
ArmAsm

;
; ___FILENAME___
; ___PACKAGENAME___
;
; Created by ___FULLUSERNAME___ on ___DATE___.
; Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved.
;
mcopy main.macros
keep main
windowRes gequ 1001
eventAction gequ $0001
runAction gequ $0002
cursorAction gequ $0003
undoAction gequ $0005
cutAction gequ $0006
copyAction gequ $0007
pasteAction gequ $0008
clearAction gequ $0009
updateEvt gequ $0006
wInControl gequ $0021
keyDownEvt gequ $0003
autoKeyEvt gequ $0005
main start
dc i4'NDAOpen' ; Open callback
dc i4'NDAClose' ; Close callback
dc i4'NDAAction' ; Action callback
dc i4'NDAInit' ; Init callback
dc i2'$ffff' ; Period
dc i2'$03ff' ; Event mask
dc c' ___PACKAGENAME___\\H**' ; Menu line
dc i1'0'
end
NDAOpen start
phb
phk
plb
lda ndaActive
beq doOpen
plb
rtl
doOpen anop
_getLevelGS levelDCB
lda level
sta oldLevel
stz level
_setLevelGS levelDCB
_getSysPrefsGS prefsDCB
lda prefs
sta oldPrefs
and #$1fff
ora #$8000
sta prefs
_setSysPrefsGS prefsDCB
pha
~OpenResourceFileByID #1,userId
pl2 oldResApp
pha
pha
~NewWindow2 #winName,#0,#DrawContents,#0,#2,#windowRes,#$800E
pl4 winPtr
~SetSysWindow winPtr
~ShowWindow winPtr
~SelectWindow winPtr
lda #1
sta ndaActive
lda oldPrefs
sta prefs
_setSysPrefsGS prefsDCB
lda oldLevel
sta level
_setLevelGS levelDCB
~SetCurResourceApp oldResApp
lda winPtr
sta 5,S
lda winPtr+2
sta 7,S
plb
rtl
DrawContents entry
phb
phk
plb
~PenNormal
~MoveTo #7,#10
~DrawString #messageStr
plb
rtl
NDAClose entry
phb
phk
plb
lda ndaActive
beq closeNotActive
~CloseWindow winPtr
stz winPtr
stz winPtr+2
stz ndaActive
closeNotActive anop
~ResourceShutdown
plb
rtl
NDAAction entry
phb
phk
plb
cmp #eventAction
bne notEvent
jsl HandleEvent
bra actionDone
notEvent anop
cmp #runAction
bne notRun
jsl HandleRun
bra actionDone
notRun anop
cmp #cursorAction
bne notCursor
jsl HandleCursor
bra actionDone
notCursor anop
cmp #undoAction
blt notEdit
cmp #clearAction+1
bge notEdit
jsl HandleEdit
lda #1
bra actionDone
notEdit anop
actionDone anop
plb
rtl
HandleEvent entry
; The X register has the low 16 bits of the address of the event record.
; We leave that there and use that in the memory move instruction to
; copy that event record into our local event.
;
; The Y register has the high 16 bits of the address of the event record.
; We need to get that into the upper 8 bits of the accumulator.
tya
xba
; Now we need to or in the current bank register into the lower 8 bits
; of the accumulator for the move instruction
pea $0
phb
ora 1,S
; We have the source and destination banks in the accumulator now. Modify
; the move instruction to have these banks and clean up the stack.
sta moveIns+1
plb
pla
; X is already setup for the move. We need the low 16 bits of the destination
; in the Y register and the count of bytes to copy minus one in the accumulator.
ldy #localEvent
lda #15 ; Copy 16 bytes
moveIns mvn 0,0
pha
~TaskMasterDA #0,#localEvent
pla
cmp #updateEvt
bne notUpdate
~BeginUpdate winPtr
jsl DrawContents
~EndUpdate winPtr
bra eventDone
notUpdate anop
cmp #wInControl
bne notControl
jsl HandleControl
bra eventDone
notControl anop
cmp #keyDownEvt
beq isKey
cmp #autoKeyEvt
beq isKey
eventDone anop
rtl
isKey anop
jsl HandleKey
bra eventDone
HandleControl entry
; Add code here if you need to handle controls in your NDA window
rtl
HandleKey entry
; Add code here if you need to handle keypresses
rtl
HandleRun entry
; Add code here if you need to execute something periodically from your NDA
rtl
HandleCursor entry
; Add code here if you need to do something to the cursor when over the NDA window
rtl
HandleEdit entry
; Add code here to handle undo, cut, copy, paste or clear. The A register holds
; the action code.
rtl
NDAInit entry
phb
phk
plb
cmp #$00
beq toolShutdown
stz ndaActive
pha
~MMStartUp
pla
sta userId
bra initReturn
toolShutdown anop
lda ndaActive
beq initReturn
jsl NDAClose
initReturn anop
plb
rtl
; Global data
ndaActive dc i2'0'
winPtr dc i4'0'
userId dc i2'0'
winName dw ' ___PACKAGENAME___ '
messageStr dw 'Hello, world!'
; Used by NDAOpen to access resources
oldResApp dc i2'0'
oldLevel dc i2'0'
oldPrefs dc i2'0'
levelDCB dc i2'2' ; GSOS control block to get/set level
level dc i2'0'
dc i2'0'
prefsDCB dc i2'1' ; GSOS control block to get/set preferences
prefs dc i2'0'
; Used by HandleEvent
localEvent anop
what dc i2'0'
message dc i4'0'
when dc i4'0'
where_vert dc i2'0'
where_horiz dc i2'0'
modifiers dc i2'0'
wmTaskData dc i4'0'
wmTaskMask dc i4'$001fffff'
wmLastClickTick dc i4'0'
wmClickCount dc i2'0'
wmTaskData2 dc i4'0'
wmTaskData3 dc i4'0'
wmTaskData4 dc i4'0'
wmLastClickPt_vert dc i2'0'
wmLastClickPt_horiz dc i2'0'
end