#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "../ulm2/ulm.h"
void
illegalInstr(uint32_t opCode)
{
    fprintf(stderr, "Opcode 0x%02" PRIX32 " not defined in instruction set.\n",
            opCode);
    fprintf(stderr, "Instr 0x%08" PRIX32 "\n", ulm_instrReg);
    fprintf(stderr, "Instr Ptr 0x%016" PRIX64 "\n", ulm_instrPtr);
    exit(1);
}
void
ulm_halt(uint64_t code)
{
    exit(code);
}
void
run()
{
    while (!udb_badAlignment && !udb_illegalInstruction) {
        ulm_fetchInstr();
#include <ulm1/_gen_instr.c>
        ulm_incrInstrPtr();
    }
}
int
main(int argc, const char **argv)
{
    if (argc != 2) {
        fprintf(stderr, "usage: %s prog\n", argv[0]);
        return 1;
    }
    ulm_load(argv[1]);
    // printVMem(0, 255, 16);
    run();
}