nesdev.com
http://forums.nesdev.com/

asm6 问题请教
http://forums.nesdev.com/viewtopic.php?f=18&t=12179
Page 1 of 1

Author:  doubledr [ Sun Dec 28, 2014 7:46 pm ]
Post subject:  asm6 问题请教

大家好。
我之前使用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

Author:  zxbdragon [ Wed Apr 01, 2015 1:43 am ]
Post subject:  Re: asm6 问题请教

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

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

Page 1 of 1 All times are UTC - 7 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/