Hi Oleg,
Does oberon have function pointers? If not you can use callee convention to save some bytes in your binaries:Код:void Laser2_PTBL (signed char col, signed char row, unsigned char spn) __naked { __asm POP HL POP BC; C = col; B = row POP DE; E = spn PUSH DE PUSH BC PUSH HL XOR A; NOP JP _Laser2_PUT_SPRITE __endasm; } // Laser2_PTBL
I had to do something weird in there because of the three bytes but with this in place calls to your subroutine will no longer have pops afterward.Код:void Laser2_PTBL (signed char col, signed char row, unsigned char spn) __naked __z88dk_callee { __asm POP HL POP BC; C = col; B = row dec sp POP DE; D = spn push hl XOR A; NOP ld e,d ; E = spn JP _Laser2_PUT_SPRITE __endasm; } // Laser2_PTBL
If you do need function pointers, you have to resort to some trickery as sdcc is not fully capable of function calls through pointers with fastcall or callee linkage.




Ответить с цитированием