【正文】
LDAB 0,Y 。// actual load, overwrites page STAA PAGE_ADDR 。// restore page register PULA 。// restore A register RTS } endif /* USE_SEVERAL_PAGES */ } /* _LOAD_FAR_16 This runtime routine is used to access paged memory via a runtime function. It may also be used if the piler option Cp is not used with the runtime argument. Arguments : offset part of an address in the Y register page part of an address in the B register Result : value to be read in the Y register all other registers remains unchanged all page register still contain the same value _LOAD_FAR_16 */ ifdef __cplusplus extern C endif pragma NO_ENTRY pragma NO_EXIT pragma NO_FRAME void NEAR _LOAD_FAR_16(void) { if USE_SEVERAL_PAGES __asm { PSHX 。// save X register __PIC_JSR(_GET_PAGE_REG) BEQ L_NOPAGE PSHA 。// save A register LDAA 0,X 。// save page register STAB 0,X 。// set page register LDY 0,Y 。// actual load, overwrites address STAA 0,X 。// restore page register PULA 。// restore A register PULX 。// restore X register RTS L_NOPAGE: LDY 0,Y 。// actual load, overwrites address PULX 。// restore X register RTS } else /* USE_SEVERAL_PAGES */ __asm { PSHA 。// save A register LDAA PAGE_ADDR 。// save page register STAB PAGE_ADDR 。// set page register LDY 0,Y 。// actual load, overwrites address 東北大學(xué)秦皇島分校畢業(yè)設(shè)計(jì)(論文) 第 頁(yè) STAA PAGE_ADDR 。// restore page register PULA 。// restore A register RTS } endif /* USE_SEVERAL_PAGES */ } /* _LOAD_FAR_24 This runtime routine is used to access paged memory via a runtime function. It may also be used if the piler option Cp is not used with the runtime argument. Arguments : offset part of an address in the Y register page part of an address in the B register Result : value to be read in the Y:B registers all other registers remains unchanged all page register still contain the same value _LOAD_FAR_24 */ ifdef __cplusplus extern C endif pragma NO_ENTRY pragma NO_EXIT pragma NO_FRAME void NEAR _LOAD_FAR_24(void) { if USE_SEVERAL_PAGES __asm { PSHX 。// save X register __PIC_JSR(_GET_PAGE_REG) BEQ L_NOPAGE PSHA 。// save A register LDAA 0,X 。// save page register STAB 0,X 。// set page register LDAB 0,Y 。// actual load, overwrites page of address LDY 1,Y 。// actual load, overwrites offset of address STAA 0,X 。// restore page register PULA 。// restore A register PULX 。// restore X register RTS L_NOPAGE: LDAB 0,Y 。// actual load, overwrites page of address LDY 1,Y 。// actual load, overwrites offset of address PULX 。// restore X register RTS } else /* USE_SEVERAL_PAGES */ __asm { PSHA 。// save A register LDAA PAGE_ADDR 。// save page register STAB PAGE_ADDR 。// set page register LDAB 0,Y 。// actual load, overwrites page of address LDY 1,Y 。// actual load, overwrites offset of address STAA PAGE_ADDR 。// restore page register PULA 。// restore A register 東北大學(xué)秦皇島分校畢業(yè)設(shè)計(jì)(論文) 第 頁(yè) RTS } endif /* USE_SEVERAL_PAGES */ } /* _LOAD_FAR_32 This runtime routine is used to access paged memory via a runtime function. It may also be used if the piler option Cp is not used with the runtime argument. Arguments : offset part of an address in the Y register page part of an address in the B register Result : low 16 bit of value to be read in the D registers high 16 bit of value to be read in the Y registers all other registers remains unchanged all page register still contain the same value _LOAD_FAR_32 */ ifdef __cplusplus extern C endif pragma NO_ENTRY pragma NO_EXIT pragma NO_FRAME void NEAR _LOAD_FAR_32(void) { if USE_SEVERAL_PAGES __asm { PSHX 。// save X register __PIC_JSR(_GET_PAGE_REG) BEQ L_NOPAGE LDAA 0,X 。// save page register PSHA 。// put it onto the stack STAB 0,X 。// set page register LDD 2,Y 。// actual load, low word LDY 0,Y 。// actual load, high word MOVB 1,SP+,0,X 。// restore page register PULX 。// restore X register RTS L_NOPAGE: LDD 2,Y 。// actual load, low word LDY 0,Y 。// actual load, high word PULX 。// restore X register RTS } else /* USE_SEVERAL_PAGES */ __asm { LDAA PAGE_ADDR 。// save page register PSHA 。// put it onto the stack STAB PAGE