由于条件原因,现在程序可能不能继续修改,我就在这里先帖出来了:
(有些地方别嫌幼稚,没办法,有的是lava的问题,有的是还没完成,多余的东西以后再删去)
这个程序好象还没改进文件名的输入和宏的部分,最近改的实在传不上来了。
还有上次忘说了,.org可以随处使用,.org后地址就变了,为的是可以把某段程序放到某段地址,主要针对JSR和JMP,但是目前用处不大,因为没有写标号地址的操作,不定义的话默认为$0000。
#define UP 0x14
#define DOWN 0x15
#define LEFT 0x17
#define RIGHT 0x16
#define CAPS 18
#define UUP 19
#define DDOWN 14
#define RESAY 16
#define SAY 15
#define POINT 46
#define ZERO 48
#define SHIFT 26
#define HELP 25
#define F_A 28
#define F_B 29
#define F_C 30
#define F_D 31
char chose;
char inp;
char fp;
char did;
char dose;
char word;
long add;
long addlcd;
char kinnow;
char makefp;
int maxlength;
char demo;
char wrong;
long addnow;
int enters;
char ptnums;
char bnums;
char jnums;
long org;
char orged;
char mwd;
char hexch[4];
char line[27];
char ch[60];
char k[11];
char hexa[16]={'0','b','n','m','g','h','j','t','y','u','a','.','c','d','e','f'};
char hexb[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char hexd[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char hex[256][3]={"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"};
char chr[768]={'I','N','T','O','R','A',0,0,0,0,0,0,0,0,0,0,0,0,
'A','S','L',0,0,0,'P','H','P','O','R','A','A','S','L',
0,0,0,0,0,0,'O','R','A','A','S','L',0,0,0,'B','P','L',
'O','R','A',0,0,0,0,0,0,0,0,0,'O','R','A','A','S','L',
0,0,0,'C','L','C','O','R','A',0,0,0,0,0,0,0,0,0,
'O','R','A','A','S','L',0,0,0,'J','S','R','A','N','D',
0,0,0,0,0,0,'B','I','T','A','N','D','R','O','L',0,0,0,
'P','L','P','A','N','D','R','O','L',0,0,0,'B','I','T',
'A','N','D','R','O','L',0,0,0,'B','M','I','A','N','D',
0,0,0,0,0,0,0,0,0,'A','N','D','R','O','L',0,0,0,
'S','E','C','A','N','D',0,0,0,0,0,0,0,0,0,'A','N','D',
'R','O','L',0,0,0,'R','T','I','E','O','R',0,0,0,0,0,0,
0,0,0,'E','O','R','L','S','R',0,0,0,'P','H','A',
'E','O','R','L','S','R',0,0,0,'J','M','P','E','O','R',
'L','S','R',0,0,0,'B','V','C','E','O','R',0,0,0,0,0,0,
0,0,0,'E','O','R','L','S','R',0,0,0,'C','L','I',
'E','O','R',0,0,0,0,0,0,0,0,0,'E','O','R','L','S','R',
0,0,0,'R','T','S','A','D','C',0,0,0,0,0,0,0,0,0,
'A','D','C','R','O','R',0,0,0,'P','L','A','A','D','C',
'R','O','R',0,0,0,'J','M','P','A','D','C','R','O','R',
0,0,0,'B','V','S','A','D','C',0,0,0,0,0,0,0,0,0,
'A','D','C','R','O','R',0,0,0,'S','E','I','A','D','C',
0,0,0,0,0,0,0,0,0,'A','D','C','R','O','R',0,0,0,0,0,0,
'S','T','A',0,0,0,0,0,0,'S','T','Y','S','T','A',
'S','T','X',0,0,0,'D','E','Y',0,0,0,'T','X','A',
0,0,0,'S','T','Y','S','T','A','S','T','X',0,0,0,
'B','C','C','S','T','A',0,0,0,0,0,0,'S','T','Y',
'S','T','A','S','T','X',0,0,0,'T','Y','A','S','T','A',
'T','X','S',0,0,0,0,0,0,'S','T','A',0,0,0,0,0,0,
'L','D','Y','L','D','A','L','D','X',0,0,0,'L','D','Y',
'L','D','A','L','D','X',0,0,0,'T','A','Y','L','D','A',
'T','A','X',0,0,0,'L','D','Y','L','D','A','L','D','X',
0,0,0,'B','C','S','L','D','A',0,0,0,0,0,0,'L','D','Y',
'L','D','A','L','D','X',0,0,0,'C','L','V','L','D','A',
'T','S','X',0,0,0,'L','D','Y','L','D','A','L','D','X',
0,0,0,'C','P','Y','C','M','P',0,0,0,0,0,0,'C','P','Y',
'C','M','P','D','E','C',0,0,0,'I','N','Y','C','M','P',
'D','E','X',0,0,0,'C','P','Y','C','M','P','D','E','C',
0,0,0,'B','N','E','C','M','P',0,0,0,0,0,0,0,0,0,
'C','M','P','D','E','C',0,0,0,'C','L','D','C','M','P',
0,0,0,0,0,0,0,0,0,'C','M','P','D','E','C',0,0,0,
'C','P','X','S','B','C',0,0,0,0,0,0,'C','P','X',
'S','B','C','I','N','C',0,0,0,'I','N','X','S','B','C',
'N','O','P',0,0,0,'C','P','X','S','B','C','I','N','C',
0,0,0,'B','E','Q','S','B','C',0,0,0,0,0,0,0,0,0,
'S','B','C','I','N','C',0,0,0,'S','E','D','S','B','C',
0,0,0,0,0,0,0,0,0,'S','B','C','I','N','C',0,0,0};
//xx 1 [bne]xx 2 #$xx 3 $xx 4 $xx,X 5 $xx,Y 6 ($xx,X) 7 ($xx),Y 8
//$xxxx 9 $xxxx,X 10 $xxxx,y 11
// ($xxxx) 12
char kind[256]={9,7,0,0,0,4,4,0,1,3,1,0,0,9,9,0,2,8,0,0,0,5,5,0,1,//25
11,0,0,0,10,10,0,9,7,0,0,4,4,4,0,1,3,1,0,9,9,9,0,9,//24
8,0,0,0,6,6,0,1,11,0,0,0,10,10,0,1,7,0,0,0,4,4,0,1,//24
3,1,0,9,9,9,0,2,8,0,0,0,5,5,0,1,11,0,0,0,10,10,0,1,
7,0,0,0,4,4,0,1,3,1,0,12,9,9,0,2,8,0,0,0,5,5,0,1,11,
0,0,0,10,10,0,0,7,0,0,4,4,4,0,1,0,1,0,9,9,9,0,2,8,
0,0,5,5,6,0,1,11,1,0,0,10,0,0,3,7,3,0,4,4,4,0,1,3,1,
0,9,9,9,0,2,8,0,0,5,5,6,0,1,11,1,0,10,10,10,0,3,7,
0,0,4,4,4,0,1,3,1,0,9,9,9,0,2,8,0,0,0,5,5,0,1,11,0,
0,0,10,10,0,3,7,0,0,4,4,4,0,1,3,1,0,9,9,9,0,2,8,0,0,
0,5,5,0,1,11,0,0,0,10,10,0};
//A:and,asl,adc
//B:bit,brk,beq,bne,bcc,bcs,bpl,bmi,bvc,bvs
//D:dec,dex,dey,
//C:cmp,cpx,cpy,clc,cld,cli,clv
//E:eor
//I:inc,inx,iny
//J:jmp,jsr
//L:lsr
//N:nop
//ora
//P:pha,pla,php,plp
//R:rts,rti,rol,ror
//S:sta,stx,sty,sbc,sec,sed,sei
//T:tax,tay,txa,tya,tsx,txs
//kind:
//1.xx 2.[ccc]xx 3.#$xx 4.$xx 5.$xx,X 6.$xx,Y 7.($xx,X) 8,($xx),Y
//9.$xxxx 10.$xxxx,X 11.$xxxx,y 12.($xxxx)
//寻址指令长度
//1,2,2,2,2,2,2,2,3,3,3,3
//隐含寻址
char pha=0x48;
char pla=0x68;
char php=0x08;
char plp=0x28;
char tax=0xaa;
char tay=0xa8;
char txa=0x8a;
char tya=0x98;
char tsx=0xba;
char txs=0x9a;
char clc=0x18;
char sec=0x38;
char cld=0xd8;
char sed=0xf8;
char cli=0x58;
char sei=0x78;
char clv=0xb8;
char inx=0xe8;
char iny=0xc8;
char dex=0xca;
char dey=0x88;
//相对寻址
char beq[2]={0x00,0xf0};
char bne[2]={0x00,0xd0};
char bcc[2]={0x00,0x90};
char bcs[2]={0x00,0xb0};
char bpl[2]={0x00,0x10};
char bmi[2]={0x00,0x30};
char bvc[2]={0x00,0x50};
char bvs[2]={0x00,0x70};
//绝对寻址
char ldakind[11]={0x00,0x00,0xa9,0xa5,0xb5,0x00,0xa1,0xb1,0xad,0xbd,0xb9};
char ldxkind[11]={0x00,0x00,0xa2,0xa6,0x00,0xb6,0x00,0x00,0xae,0x00,0xbe};
char ldykind[11]={0x00,0x00,0xa0,0xa4,0xb4,0x00,0x00,0x00,0xac,0xbc,0x00};
char stakind[11]={0x00,0x00,0x00,0x85,0x95,0x00,0x81,0x91,0x8d,0x9d,0x99};
char stxkind[11]={0x00,0x00,0x00,0x86,0x00,0x96,0x00,0x00,0x8e,0x00,0x00};
char stykind[11]={0x00,0x00,0x00,0x84,0x94,0x00,0x00,0x00,0x8c,0x00,0x00};
char adckind[11]={0x00,0x00,0x69,0x65,0x75,0x00,0x61,0x71,0x6d,0x7d,0x79};
char sbckind[11]={0x00,0x00,0xe9,0xe5,0xf5,0x00,0xe1,0xf1,0xed,0xfd,0xf9};
char andkind[11]={0x00,0x00,0x29,0x25,0x35,0x00,0x21,0x31,0x2d,0x3d,0x39};
char orakind[11]={0x00,0x00,0x09,0x05,0x15,0x00,0x01,0x11,0x0d,0x1d,0x19};
char eorkind[11]={0x00,0x00,0x49,0x45,0x55,0x00,0x41,0x51,0x4d,0x5d,0x59};
char cmpkind[11]={0x00,0x00,0xc9,0xc5,0xd5,0x00,0xc1,0xd1,0xcd,0xdd,0xd9};
char cpxkind[11]={0x00,0x00,0xe0,0xe4,0x00,0x00,0x00,0x00,0xec,0x00,0x00};
char cpykind[11]={0x00,0x00,0xc0,0xc4,0x00,0x00,0x00,0x00,0xcc,0x00,0x00};
char bitkind[11]={0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x2c,0x00,0x00};
char inckind[11]={0x00,0x00,0x00,0xe6,0xf6,0x00,0x00,0x00,0xee,0xfe,0x00};
char deckind[11]={0x00,0x00,0x00,0xc6,0xd6,0x00,0x00,0x00,0xce,0xde,0x00};
char aslkind[11]={0x0a,0x00,0x00,0x06,0x16,0x00,0x00,0x00,0x0e,0x1e,0x00};
char lsrkind[11]={0x4a,0x00,0x00,0x46,0x56,0x00,0x00,0x00,0x4e,0x5e,0x00};
char rolkind[11]={0x2a,0x00,0x00,0x26,0x36,0x00,0x00,0x00,0x2e,0x3e,0x00};
char rorkind[11]={0x6a,0x00,0x00,0x66,0x76,0x00,0x00,0x00,0x6e,0x7e,0x00};
char intkind[11]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//openfile-----------------------------------------------------------
char openfile(){
char filept;
char dir[20][20];
char dirdeep;
char filename[20];
did=1;
dose++;
dirdeep=0;
filept=0;
ChDir("/");
for(;;){
if(FileList(dir[dirdeep])){
if(ChDir(dir[dirdeep]))dirdeep++;
else{
sprintf(filename,dir[dirdeep]);
filept=fopen(filename,"r");
return filept;
}
}
else {
ChDir("..");
if(dirdeep==0){
did=0;
dose--;
return filept;
}
else dirdeep--;
}
}
}
//savefile
char savefile(){
char filept;
char a;
char han[3];
char zc[20];
char iiii;
did=1;
dose++;
filept=0;
ChDir("/");
SetScreen(0);
Locate(0,0);
memset(_TEXT,' ',156);
printf("\n输入绝对路径:\n");
for(a=0;a<20;a++){
iiii=GetWord(3);
if((iiii&0xff00)==0&&isprint(iiii)){
zc[a]=iiii;
printf("%c",iiii);
}
else if(iiii<0){
memset(_TEXT+80,' ',20);
zc[a]=iiii;
han[0]=zc[a];
a++;
zc[a]=iiii>>8;
han[1]=zc[a];
printf("%s",han);
}
if(iiii==13){
break;
}
if(iiii==27){
did=0;
return filept;
}
}
filept=fopen(zc,"w+");
return filept;
}
[此贴子已经被作者于2005-6-4 9:26:20编辑过]
|