case on copy /lang/orca/libraries/ainclude/e16.gsos copy /lang/orca/libraries/ainclude/e16.event copy /lang/orca/libraries/ainclude/e16.memory mcopy cda.mac OS_KIND gequ $e100bc RD80VID gequ $e0c01f SET80VID gequ $e0c00d StackSize gequ $0300 CDARoot start pstr 'PNG Floyd' dc i4'CDAStart' dc i4'CDAShutDown' end CDAStart start using CDAData ; direct page. phb phk plb lda >OS_KIND ;; 00 = prodos, 01 == gsos and #$00ff bne gsos brl exit gsos anop pha _MMStartUp pla sta MyID * allocate 3 pages of stack/direct page. pha pha ~NewHandle #StackSize,MyID,#attrLocked+attrFixed+attrBank+attrPage,#0 bcc gotstack pla pla brl exit gotstack anop tsc sta OldStack tcd lda [1] tcd clc adc #StackSize-1 * copy old stack to new stack pha sei ldx #$fe sloop lda >$000100,x sta stack,x dex dex bpl sloop cli pla tcs pha pha pha _GetInputDevice pha pha _GetInGlobals pha pha pha _GetOutputDevice pha pha _GetOutGlobals * ~SetInputDevice #0,#3 ~SetInGlobals #$7f,#$00 ~SetOutputDevice #0,#3 ~SetOutGlobals #$ff,#$80 ~InitTextDev #0 ~InitTextDev #1 ~WriteChar #$0C jsl pfcda * restore, arguments already on stack. _SetOutGlobals _SetOutputDevice _SetInGlobals _SetInputDevice ~InitTextDev #0 ~InitTextDev #1 * restore old stack sei ldx #$fe rloop lda stack,x sta >$000100,x dex dex bpl rloop lda OldStack tcs cli _DisposeHandle ; * handle still on stack. exit anop plb CDAShutDown entry rtl end GetKey start using CDAData pea 0 _EMStatus pla beq metal evloop anop pha ~GetNextEvent #keyDownMask+autoKeyMask,#Event pla beq evloop lda Event+omessage rtl metal anop short m mloop anop lda >$e0c0000 bpl mloop sta >$e0c010 long m and #$007f rtl end CDAData data MemStr pstr "Unable to allocate bank 0 memory. Press a key to continue." MyID ds 2 OldStack ds 2 Event ds 16 stack ds 256 end