unsigned char compiler_core (void) { line_position = find_next_substring((unsigned char*)file_line, 0); //and find first word if (line_position>0) //where is it? { if (line_position<255) { //this is instruction - outside first row error = E_OK; if (file_line[line_position]>' ') {//non-empty line token_len = get_next_token((unsigned char *)file_line,(unsigned char *) token, 0); //take opcode if ((token_len>0)&(token_len<255)) //if valid { if (token[0]!='#') { if (pass==2) { replaced = replace_objects((unsigned char *)file_line,(unsigned char *)file_line2,line_position+token_len); if (replaced==255) error = E_DEF_UNKNOWN; strcpy((char *)file_line,(char *) file_line2); } if ((error == E_OK)|(pass==1)) { token_len = get_next_token((unsigned char *)file_line,(unsigned char *) token, 0); //take opcode opcode_jump(); } } else { pseudoopcode_jump(); } } else error = E_UNKNOWN_OPCODE; if (error==E_OK) { if (write_opcodes()!=0) error = E_FILE_ERROR; } else { write_output(0xFFFF,error,(unsigned char *)file_line,line); } } } } else {//this is label, first row if (pass==1) { token_len = get_next_token((unsigned char *)file_line,(unsigned char *) token, 0); //take label name if (token_len>0) { dt_pointer = update_deftable_num((unsigned char *)token, addr); if (dt_pointer > ((DEFATABLE_LEN/TABLE_ENTRY_LEN)-2)) return E_DEFTAB_OVER; } } } return error; }
int main (int argc, char *argv[]) { if ((argc > 1) && (strcmp (argv[1],"-h") == 0)) write_header(); else if ((argc > 1) && (strcmp (argv[1],"-t") == 0)) write_template (); else write_opcodes(); return 0; }