#include #include #include #include #include #include "defines.h" #include "main.pro" #include "structs.h" #include "globals.h" #include "asm.h" #include "asm.ext" #include "load.ext" #include "execute.ext" #include "dump.ext" ///////////////////////////////////////////////////////////////////////////// void main(WORD argc, UBYTE *argv[]) { clrscr(); init(); // initialize structures showmenu(); // display main menu } ///////////////////////////////////////////////////////////////////////////// void showmenu() { WORD scol,srow, error_status; error_status = FALSE; // display available menu options do { clrscr(); scol = 30; srow = 8; gotoxy(scol,srow); printf("A: Assemble"); gotoxy(scol,++srow); printf("L: Load Program"); gotoxy(scol,++srow); printf("X: Execute Program"); gotoxy(scol,++srow); printf("D: Dump Memory"); gotoxy(scol,++srow); printf("Q: Quit"); // process menu selection switch( toupper( getch() ) ) { case 'A': error_status = assemble(); break; case 'L' : error_status = load_module(); write_list_file(); // save list file to disk break; case 'X' : error_status = execute_program(); break; case 'D' : error_status = dump_memory(); break; case 'Q' : return; } } while( error_status == FALSE ); } ///////////////////////////////////////////////////////////////////////////// void check_syntax(WORD argcnt, UBYTE * filename) { if( access(filename, EXIST) ) { printf("File %s does not exist"); pause(); if(argcnt) argcnt = 0; // dummy *filename = NULL; } else strcpy(SrcFile,filename); } ///////////////////////////////////////////////////////////////////////////// void init() { // global variable & Structure initializations Dump = FALSE; SymTabPtr = &SymTab[0]; InstructionPtr = &Instruction[0]; strcpy(Opcodes[0].name, "HLT"); Opcodes[0].val = HLT; strcpy(Opcodes[1].name, "LOD"); Opcodes[1].val = LOD; strcpy(Opcodes[2].name, "STO"); Opcodes[2].val = STO; strcpy(Opcodes[3].name, "ADD"); Opcodes[3].val = ADD; strcpy(Opcodes[4].name, "MUL"); Opcodes[4].val = MUL; strcpy(Opcodes[5].name, "DIV"); Opcodes[5].val = DIV; strcpy(Opcodes[6].name, "LSP"); Opcodes[6].val = LSP; strcpy(Opcodes[7].name, "CLR"); Opcodes[7].val = CLR; strcpy(Opcodes[8].name, "COM"); Opcodes[8].val = COM; strcpy(Opcodes[9].name, "JZE"); Opcodes[9].val = JZE; strcpy(Opcodes[10].name, "JNEG"); Opcodes[10].val = JNEG; strcpy(Opcodes[11].name, "JMP"); Opcodes[11].val = JMP; strcpy(Opcodes[12].name, "OUT"); Opcodes[12].val = OUT; strcpy(Opcodes[13].name, "CALL"); Opcodes[13].val = CALL; strcpy(Opcodes[14].name, "RET"); Opcodes[14].val = RET; strcpy(Opcodes[15].name, "NOP"); Opcodes[15].val = NOP; // init Pseudo Ops strcpy(Pseudos[0].name, "ORG"); Pseudos[0].val = ORG; strcpy(Pseudos[1].name, "EQU"); Pseudos[1].val = EQU; strcpy(Pseudos[2].name, "DC"); Pseudos[2].val = DC; strcpy(Pseudos[3].name, "DS"); Pseudos[3].val = DS; strcpy(Pseudos[4].name, "END"); Pseudos[4].val = END; } ///////////////////////////////////////////////////////////////////////////// void pause(void) { // pauses execution so user can see screen fflush(stdin); fflush(stdin); gotoxy(27,25); printf("Press any key to Continue."); getch(); } /////////////////////////////////////////////////////////////////////////////