Page 1 of 1

asm6 问题请教

Posted: Sun Dec 28, 2014 7:46 pm
by doubledr
大家好。
我之前使用nesasm来编写代码,现在想转到asm6。
但是发现一个差别,nesasm有BANK指令以及BANK()函数,asm6却没有。
BANK函数在调用切换的bank中的function时很方便,通过BANK函数可以得到function所在的BANK号。
例如以下nesasm 宏代码(MMC3):

Code: Select all

;*******************************************
;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: Select all

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

谢谢大家:D

Re: asm6 问题请教

Posted: Wed Apr 01, 2015 1:43 am
by zxbdragon
doubledr wrote:大家好。
我之前使用nesasm来编写代码,现在想转到asm6。
但是发现一个差别,nesasm有BANK指令以及BANK()函数,asm6却没有。
BANK函数在调用切换的bank中的function时很方便,通过BANK函数可以得到function所在的BANK号。
例如以下nesasm 宏代码(MMC3):

Code: Select all

;*******************************************
;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: Select all

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

谢谢大家:D
糖果先生,你好,你也来这里了?