Mercurial > repos > blastem
diff upd78k2run.c @ 2705:ab2d916380bf
WIP uPD78K/II CPU core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 06 Jul 2025 15:20:46 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upd78k2run.c Sun Jul 06 15:20:46 2025 -0700 @@ -0,0 +1,70 @@ +#include <stdlib.h> +#include "upd78k2.h" + +int headless = 1; +void render_errorbox(char * title, char * buf) +{ +} + +void render_infobox(char * title, char * buf) +{ +} + +uint8_t pram[384]; +uint8_t rom[0xFC80]; + +const memmap_chunk upd_map[] = { + { 0x0000, 0xFC80, 0xFFFFF, .flags = MMAP_READ, .buffer = rom}, + { 0xFC80, 0xFD00, 0x7F, .flags = MMAP_READ | MMAP_WRITE | MMAP_CODE, .buffer = pram}, + { 0xFD00, 0xFE00, 0xFF, .flags = MMAP_READ | MMAP_WRITE | MMAP_CODE, .buffer = pram + 128}, + { 0xFF00, 0xFFFF, 0xFF, .read_8 = upd78237_sfr_read, .write_8 = upd78237_sfr_write} +}; + +int main(int argc, char **argv) +{ + long filesize; + uint8_t *filebuf; + upd78k2_options opts; + upd78k2_context *upd; + char *fname = NULL; + uint8_t retranslate = 0; + for (int i = 1; i < argc; i++) + { + if (argv[i][0] == '-') { + switch(argv[i][1]) + { + case 'r': + retranslate = 1; + break; + default: + fprintf(stderr, "Unrecognized switch -%c\n", argv[i][1]); + exit(1); + } + } else if (!fname) { + fname = argv[i]; + } + } + if (!fname) { + fputs("usage: ztestrun zrom [cartrom]\n", stderr); + exit(1); + } + FILE * f = fopen(fname, "rb"); + if (!f) { + fprintf(stderr, "unable to open file %s\n", fname); + exit(1); + } + fseek(f, 0, SEEK_END); + filesize = ftell(f); + fseek(f, 0, SEEK_SET); + filesize = filesize < sizeof(rom) ? filesize : sizeof(rom); + if (fread(rom, 1, filesize, f) != filesize) { + fprintf(stderr, "error reading %s\n",fname); + exit(1); + } + fclose(f); + init_upd78k2_opts(&opts, upd_map, 4); + upd = init_upd78k2_context(&opts); + upd->pc = rom[0] | rom[1] << 8; + upd78k2_execute(upd, 10000); + return 0; +} \ No newline at end of file