; ; void __fastcall__ _sys (struct regs* r); ; .export __sys .import jmpvec .include "zeropage.inc" .segment "LOWCODE" __sys: sta ptr1 stx ptr1+1 ; Save the pointer to r ; Fetch the PC and store it into the jump vector ldy #5 lda (ptr1),y sta jmpvec+2 dey lda (ptr1),y sta jmpvec+1 ; Remember the flags so we can restore them to a known state after calling the ; routine php ; Get the flags, keep the state of bit 4 and 5 using the other flags from ; the flags value passed by the caller. Push the new flags and push A. dey php pla ; Current flags -> A eor (ptr1),y and #%00110000 eor (ptr1),y pha ; Push new flags value ldy #0 lda (ptr1),y pha ; Get and assign X and Y iny lda (ptr1),y tax iny lda (ptr1),y tay ; Switch in ROM bit $C082 ; Set A and the flags, call the machine code routine pla plp jsr jmpvec ; Back from the routine. Save the flags and A. php pha ; Switch in LC bank 2 for R/O bit $C080 ; Put the register values into the regs structure tya ldy #2 sta (ptr1),y dey txa sta (ptr1),y dey pla sta (ptr1),y ldy #3 pla sta (ptr1),y ; Restore the old flags value plp ; Done rts