asm6 问题请教

asm6 问题请教
by on (#138218)
大家好。
我之前使用nesasm来编写代码,现在想转到asm6。
但是发现一个差别,nesasm有BANK指令以及BANK()函数,asm6却没有。
BANK函数在调用切换的bank中的function时很方便,通过BANK函数可以得到function所在的BANK号。
例如以下nesasm 宏代码(MMC3):
Code:
;*******************************************
;bank_jsr 调用在另外的bank中的地址,调用完后返回原bank
;参数1 调用函数地址
;*******************************************
   macro bank_jsr
   IF \1<$a000
   LDA <bankno1
   PHA
   LDX #BANK(\1)
   JSR bankswitch1
   JSR \1   
   PLA
   TAX
   JMP bankswitch1 ;换到原来的块 switch back
;
   else
;
   LDA <bankno2
   PHA
   LDX #BANK(\1)
   JSR bankswitch2
   JSR \1   
   PLA
   TAX
   JMP bankswitch2
   endif
   endm

bankno1和bankno2是存储bank号的zp变量。
bankswitch1和bankswitch2是切换bank的function。
使用 LDX #BANK(\1) 即可取得参数1所在bank号用于切换。
例如我想调用function1,无论function1在哪个bank,
我只要写:
Code:
bank_jsr function1


但是不知道在asm6中如何实现这一点。

谢谢大家:D
Re: asm6 问题请教
by on (#144123)
doubledr wrote:
大家好。
我之前使用nesasm来编写代码,现在想转到asm6。
但是发现一个差别,nesasm有BANK指令以及BANK()函数,asm6却没有。
BANK函数在调用切换的bank中的function时很方便,通过BANK函数可以得到function所在的BANK号。
例如以下nesasm 宏代码(MMC3):
Code:
;*******************************************
;bank_jsr 调用在另外的bank中的地址,调用完后返回原bank
;参数1 调用函数地址
;*******************************************
   macro bank_jsr
   IF \1<$a000
   LDA <bankno1
   PHA
   LDX #BANK(\1)
   JSR bankswitch1
   JSR \1   
   PLA
   TAX
   JMP bankswitch1 ;换到原来的块 switch back
;
   else
;
   LDA <bankno2
   PHA
   LDX #BANK(\1)
   JSR bankswitch2
   JSR \1   
   PLA
   TAX
   JMP bankswitch2
   endif
   endm

bankno1和bankno2是存储bank号的zp变量。
bankswitch1和bankswitch2是切换bank的function。
使用 LDX #BANK(\1) 即可取得参数1所在bank号用于切换。
例如我想调用function1,无论function1在哪个bank,
我只要写:
Code:
bank_jsr function1


但是不知道在asm6中如何实现这一点。

谢谢大家:D

糖果先生,你好,你也来这里了?