- 注册时间
- 2005-3-12
- 最后登录
- 1970-1-1
|
发表于 2005-8-2 02:46:00
|
显示全部楼层
是要完全按6502sim那样做还是要有自己的修改,如果自己修改,我就说说我的想法。
1.宏传参数一定要可以传进字符串,并支持字符串连接,举个例子:
test macro reg,x
ld® x ;& 这里意思是字符串连接
endm
test a,#1
实际编译出来最好是lda #1这样的个人认为很方便
2.关于宏内部的一些运算的函数能弄多少就弄多少,最好还可以扩充(做梦ing...)
例如:
test2 macro x ;x is a string
.if .strlen(x) > 1000
error "String tooooooo long !"
.endif
db x,0
endm
3.最好像masm一样也支持一些类c的操作
x db 0
.if [x]==0
.assign x=11
.endif
编译出来希望是
lda x
bne +
lda #11
sta x
+
4.说起上边这个来 我又想起一个,就是上边的那个+
+-可以用来表示临时label(知道我说什么就不要看下边了,直接看下一条)
例如:
x equ 0a0H
x2 db 0
ldx x
bne +
- dex
bne -
lda x2
bmi ++
+
stx x2
+ sta x ;估计容易理解就不写注释了,其实什么也没做,就是一个demo
;++就是向前两个,最多支持几个就随一个,3个差不多够了
还有一种风格是masm的
@@: lda x
bne @b
bmi @f
ldx #0
@@:
5.我一直在设想一种比macro更强大的描述数据的方法,就是说有一种编译器可以识别的脚本是可以嵌入代码中的,这种代码可以完全控制编译器的行为。它可以实现什么功能呢,演示一下:
xx coder str
.if .leftspace(this_bank)<len(str)
.switch_progbank $+1
.endif
db str,0
endcoder
.org $fffe ;假设bank 到$FFFF
xx "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
编译器会把"nnnnnnnnnnnnnnnnnnnnnnnnnnnn"这个字串放在下一个bank里边
|
|