易码技术论坛

 找回密码
 加入易码
搜索
查看: 1466127|回复: 84

[下载]星星上的6502编译工具

[复制链接]
发表于 2005-5-11 15:20:00 | 显示全部楼层
补充:
编译出来的程序没有文件头,程序是从开头写的,需要自己加。
bugs:某些隐含寻址没有定义,如:asl   lsr   rol   ror
这只是超菜测试版
发表于 2005-5-11 17:43:00 | 显示全部楼层
偶做了一个XASMBAS,用了虚拟地址技术,很方便,比整个文件一起反要好。
 楼主| 发表于 2005-5-11 19:24:00 | 显示全部楼层
Sorry
发现lava的问题了!!!
上面的程序传的时候还能用,我就定义了上述的那些隐含寻址的值,重进了一次就再也不能编译了
疯了,先开始不知道怎么了,ASL死活不能编译成$0A,lsr,rol,ror都行,这种不可能的事情都发生了!!!!
判断ASL 和LSR的程序都一样,可结果就是不一样!!!
后来总提示 “未定义程序开始地址    或程序开始地址有误”
我在网吧编了6-7个小时就解决这个问题!!
还是没解决,目前只能用反汇编功能了。
[em06][em06][em06][em16][em16][em14][em14][em13][em13][em30][em30]
发表于 2005-5-12 09:24:00 | 显示全部楼层
天哪!继续努力吧
期待快点解决这些问题
 楼主| 发表于 2005-5-13 01:32:00 | 显示全部楼层
我通了一次宵,总算是解决问题了!

程序在编译的过程中如果遇到语法错误会给出错误指令和行号。

文件会直接保存到根目录。




最重要的就是问题所在(看了别惊讶):

lava的问题实在是太多了而且非常严重!!

一:

就ASL被编译成$00的问题不是我的程序不对,而是lava!

我编译AND时发现,AND的各种寻址方式竟然是ASL的!

lava在读数组的时候把这两个数组位置互换了!

我就在程序里让出现AND的时候让程序读ASL的数据,ASL读AND的,问题解决!!!!!(郁闷)

二:

lava在变量的使用上有问题,大问题!!!

如果在普通的函数体里声名了一个变量,而后又进行一些数组元素的操作的话,很可能某些函数体里声名的变量的值会丢失比如我的程序的一部分:

之前先在函数中 long org;

设org为16384,

然后其中经过下面的程序:

if(ch[0]!=32){
  ua=0;
  for(maxlength=0;maxlength<60;maxlength++){
   if(ch[maxlength]==':'){
    pch[ua]=0;
    maxlength++;
    break;
   }
   pch[ua]=ch[maxlength];
   ua++;
  }
  for(ua=0;ua<ptnums;ua++){
   if(strcmp(pch,ptch[ua])==0){
   ClearScreen();
    TextOut(56,33,"标号重复",1);
    Refresh();
    getchar();
    fclose(fp);
    goto L4;
   }
  }
  for(ua=0;ua<60;ua++)ptch[ptnums][ua]=pch[ua];
  ptnum[ptnums]=addnow;
  ptnums++;
}

然后用一个pringf();函数显示一下org,成了零,这就是总出现“未定义程序开始地址 或程序开始地址有误”的原因,我把大量的非数组变量都移出函数,变成公共变量,org终于老实了。

这在WriteBlock();里有相似的地方,我在做RPG时,你最多要带领3个人,第一个人屏幕居中,显示正常,而其他两个人在你改变方向时会左右不停的摇摆(我在程序里用反转来显示左右方向),解决的方法就是左右的图象用不同的数据,但用了大量的变量空间!!!

看了怎么想?我都觉得不可能。谁知道这问题在lava2中是否被解决,如果这个程序能在TC800上“正常”运行,那么lava2依然有问题!!!


[em05][em05][em05][em05]
发表于 2005-5-13 16:37:00 | 显示全部楼层
还是不太会用,举个例子看看,总提示 “未定义程序开始地址或程序开始地址有误”
发表于 2005-5-14 07:23:00 | 显示全部楼层
是啊,举例子
 楼主| 发表于 2005-5-14 14:06:00 | 显示全部楼层
比如:
.org $4000 ----->(最前面要加空格,定义开始地址要严格按照这样的格式写)
.db $00,$00,$00,$00,$00,$00,$00
jmp start
.db $00,$00,$00,$00,$00,$00 ----->(TC1000的文件头就可以这样写)
start:----->(标号要顶格且忽略大小写)
lda #$91----->(hex必须写成两位或4位)
      sta     $0a  ----->(要是愿意也可以这么写)
end:rts----->(标号要可以和指令写在一行)
 楼主| 发表于 2005-5-14 14:09:00 | 显示全部楼层
指令一定要在最左端留空格
一行只能写一条指令
不过现在只支持  .db
发表于 2005-5-14 15:45:00 | 显示全部楼层
希望加入文字数据的输入
发表于 2005-5-14 16:38:00 | 显示全部楼层
My god!!!!还是不能用,难道2600c有毛病,总是那个提示
发表于 2005-5-16 13:52:00 | 显示全部楼层
在lavastar一个目录下
终于可以了!!
发表于 2005-5-19 17:55:00 | 显示全部楼层
偶尔路过,小试了一下:

.org $4000

.db $ae,$ee,$ea,$00,$20,$00,$20

jmp start

.db $70,$03,$10,$03,$ff,$ff

start:

jsr $e018

rts

编译后在4010的地方却为: 20202060(jsr $2020 rts) ps:偶用2600
 楼主| 发表于 2005-5-15 10:41:00 | 显示全部楼层
什么?!?!
你先在电脑上编译一下纯文本试试
要把文本放在lavastar一个目录下
我试了没问题啊!!
发表于 2005-5-15 11:24:00 | 显示全部楼层
给一个2600的开头吧,嘻嘻
 楼主| 发表于 2005-5-15 13:04:00 | 显示全部楼层
你用反汇编功能打开一个文件看看不就知道了?
 楼主| 发表于 2005-5-15 14:02:00 | 显示全部楼层
我就知道TC1000的
 楼主| 发表于 2005-5-15 18:58:00 | 显示全部楼层
对于字符输入,其实可以加,和.DB差不多,为赶时间就写成了个空函数。
我想直接加一个纯文本的编辑器,这样编译起来就方便多了。
我还在考虑宏定义,就宏可能就要编十几k,不过思路已经差不多了。
可能在星星上还有些问题,而且会改一下编译文件的保存位置,因为lava的问题不是一点半点,
谁知道还会出现什么搞笑的问题
发表于 2005-5-15 23:00:00 | 显示全部楼层
和QIQI严重期待中
发表于 2005-5-16 10:16:00 | 显示全部楼层
啊!对不起,是我输错了,可以使用超方便
2600C的文件头可以这样:
.org $4000
.db $ae,$ee,$ea,$00,$20,$00,$20
jmp start(这样比较灵活)
.db $70,$03,$10,$03,$ff,$ff
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-6-19 00:12 , Processed in 0.014302 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表