#include #include #define DATA -97 #define STRING -98 #define COMMENT -99 typedef unsigned long dec; typedef struct _instr_type { char mnemonic[10]; dec opcode; dec num_of_param; dec num_of_parts; char param_type[5]; dec param_order[5]; dec param_bits[5]; } instr_type; instr_type instr_bank[200]; dec number[5]; dec work; dec debugging; dec address_deb; dec bank_size=0; char read_line[200]; char unaltered[200]; char *field; FILE *prog; dec write_comp; /* 0=write, 1=compare */ dec num_of_instr,num_of_instr_bytes; dec num_of_data_bytes; dec num_of_comp_bytes; dec num_of_control; char *tabs2spaces(in) char *in; { int len,from,to,can_seperate; len=strlen(in); can_seperate=0; to=0; for(from=0;from='A')&&((*field)<='Z'))||(((*field)=='#')))) { instr_bank[bank_size].param_type[paramnum]=*field; instr_bank[bank_size].param_order[paramnum]=atol(&field[1]); paramnum++; field=strtok(NULL,","); } bitnum=0; while ((field!=NULL)&&((*field)>='0')&&((*field)<='9')) { instr_bank[bank_size].param_bits[bitnum]=atol(field); bitnum++; field=strtok(NULL,","); } instr_bank[bank_size].num_of_param=paramnum; instr_bank[bank_size].num_of_parts=bitnum; bank_size++; return(0); } void convert_line() { int i; work=STRING; if (read_line[0]=='"') return; work=DATA; if (read_line[0]=='=') return; work=COMMENT; field=strtok(read_line,","); if (field==NULL) return; for(i=0;i>4; } byte=0; for(i=bitwidth/4;i>0;i--) { if (byte==2) { fprintf(prog," "); byte=0; } fprintf(prog,"%c",str[i-1]); byte=byte+1; } if (debugging==1) { if (bitwidth<32) fprintf(prog," "); fprintf(prog,"\t-- x%X %s",address_deb,tabs2spaces(unaltered)); } else fprintf(prog,"\n"); address_deb+=bitwidth/8; num_of_instr++; num_of_instr_bytes+=bitwidth/8; } void print_out_string() { int i,j; char str[10]; str[0]=0; for(i=1;i2) { if (strcmp(argv[1],"-d")) { printf("-d is the only allowed switch"); exit(0); } debugging=1; strcpy(read_line,argv[2]); standardize_line(); } prog=fopen("program","w"); if (prog==NULL) { printf("can't open program-file\n"); exit(0); } field=strtok(read_line,","); field=strtok(NULL,","); if (field==NULL) strcat(unaltered,".asm"); else { if (strcmp(field,"ASM")) strcat(unaltered,".asm"); } fp=fopen(unaltered,"r"); if (fp==NULL) { printf("can't open assembly-file %s\n",unaltered); exit(0); } strcpy(skranafn,unaltered); bank=fopen("rasm.instr","r"); if (bank==NULL) { printf("can't open rasm.instr\n"); exit(0); } linnum=0; while(!feof(bank)) { linnum++; if (fgets(read_line,200,bank)==NULL) break; if (read_line[0]!='\n') { standardize_line(); if (move_line_to_bank()==-1) { printf("Error in rtpc-ass.instr, line %d\n",linnum); exit(0); } /* printf("%s,%d",instr_bank[bank_size-1].mnemonic, instr_bank[bank_size-1].opcode); for(i=0;i