// ================================== // AsmHelpers ( ) Some helper macro's // ================================== // fBranch macro aLabel ; // fBranch bra z, aLabel endm // // =============================================== // // Parameter Stack macro's // =============================================== // PopReg macro Reg mov w0, Reg mov [w9--], w0 ; // PopReg ( n -- ) endm // // // =============================================== // Drop macro mov [w9--], w0 ; // drop ( n -- ) endm // // // =============================================== // PushLit macro Arg mov w0, [ ++w9] ; // Push Arg ( -- n ) mov #Arg, w0 endm // // // =============================================== // PushReg macro Reg mov w0, [ ++w9] ; // Push Reg ( -- n ) mov Reg, w0 endm // // // =============================================== // PushNothing macro mov w0, [ ++w9] ; // Push nothing, free TOS endm // // // =============================================== // Dup macro mov w0, [ ++w9] ; // Dup ( n1 -- n1 n1 ) endm // // // =============================================== // SwapDrop macro dec2 w9, w9 ; // SwapDrop ( n1 n2 -- n2 ) endm // // // =============================================== // // Return (loop) Stack macro's // =============================================== // LPshReg macro Reg ; // Push Reg [ -- n ] to loop stack mov Reg, [ --w10] endm // // // =============================================== // LPshLit macro Arg ; // LPshLit (Arg) mov #Arg, [ --w10] endm // // // =============================================== // LDrop macro inc2 w10, w10 ; // drop [ n -- ] from loop stack endm // // // =============================================== // LFree macro item_count ; // drop [ n1 .. nn -- ] from loop stack add #item_count, w10 endm // // // =============================================== // LPopReg macro Reg ; // Pop Reg [ n -- ] from loop stack mov [ w10++], Reg endm // // // =============================================== // AddExceptionFrame macro ; // AddExceptionFrame : link in a new exception frame LPshReg w13 ; // Push Except Frame Pointer mov w10, w13 ; // And set up a new Except Frame Pointer endm // // // =============================================== // RemoveExceptionFrame macro ; // RemoveExceptionFrame, unwind one exception level mov w13, w10 ; // Set loop stack back to EFP LPopReg w13 ; // Pop back old exception frame pointer endm // // =============================================== // // Utility macro's // =============================================== // PushNextRomAddress macro local BeyondMe ; // PushNextRomAddress ( -- dRomAddress ) PushLit tbloffset( BeyondMe) PushLit tblpage ( BeyondMe) return BeyondMe: endm // // // =============================================== // // BreakPoint macro halts simulator // breakPoint macro aMsg .pword 0xDA4000 ; // breakPoint aMsg nop endm // // // =============================================== // GoSleep macro pwrsav #0 ; // enter sleep mode endm // // // =============================================== // GoIdle macro pwrsav #1 ; // enter idle mode endm // // // =============================================== // Disable macro ; // ======== DISABLE ======== user interrupts ; // mov SR, w1 ; // Status register to w1 LPshReg w1 ; // Push old status on loop stack ior #0xe0, w1 ; // Set CPU prio to 7 mov w1, SR ; // Move to Statu Register ; // endm // // // =============================================== // Enable macro ; // LPopReg w1 ; // Pop old status register mov w1, SR ; // Restore old status register ; // ; // ======== ENABLE ======== user interrupts endm // // // =============================================== // jr_f macro reg bra reg ; // jr_f endm // // ; ========================================= // ; End of AsmHelpers, Some helper macro's // ; ========================================= //