Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
2704:c5dce4284e69 | 2705:ab2d916380bf |
---|---|
1 #include <stdlib.h> | |
2 #include "upd78k2.h" | |
3 | |
4 int headless = 1; | |
5 void render_errorbox(char * title, char * buf) | |
6 { | |
7 } | |
8 | |
9 void render_infobox(char * title, char * buf) | |
10 { | |
11 } | |
12 | |
13 uint8_t pram[384]; | |
14 uint8_t rom[0xFC80]; | |
15 | |
16 const memmap_chunk upd_map[] = { | |
17 { 0x0000, 0xFC80, 0xFFFFF, .flags = MMAP_READ, .buffer = rom}, | |
18 { 0xFC80, 0xFD00, 0x7F, .flags = MMAP_READ | MMAP_WRITE | MMAP_CODE, .buffer = pram}, | |
19 { 0xFD00, 0xFE00, 0xFF, .flags = MMAP_READ | MMAP_WRITE | MMAP_CODE, .buffer = pram + 128}, | |
20 { 0xFF00, 0xFFFF, 0xFF, .read_8 = upd78237_sfr_read, .write_8 = upd78237_sfr_write} | |
21 }; | |
22 | |
23 int main(int argc, char **argv) | |
24 { | |
25 long filesize; | |
26 uint8_t *filebuf; | |
27 upd78k2_options opts; | |
28 upd78k2_context *upd; | |
29 char *fname = NULL; | |
30 uint8_t retranslate = 0; | |
31 for (int i = 1; i < argc; i++) | |
32 { | |
33 if (argv[i][0] == '-') { | |
34 switch(argv[i][1]) | |
35 { | |
36 case 'r': | |
37 retranslate = 1; | |
38 break; | |
39 default: | |
40 fprintf(stderr, "Unrecognized switch -%c\n", argv[i][1]); | |
41 exit(1); | |
42 } | |
43 } else if (!fname) { | |
44 fname = argv[i]; | |
45 } | |
46 } | |
47 if (!fname) { | |
48 fputs("usage: ztestrun zrom [cartrom]\n", stderr); | |
49 exit(1); | |
50 } | |
51 FILE * f = fopen(fname, "rb"); | |
52 if (!f) { | |
53 fprintf(stderr, "unable to open file %s\n", fname); | |
54 exit(1); | |
55 } | |
56 fseek(f, 0, SEEK_END); | |
57 filesize = ftell(f); | |
58 fseek(f, 0, SEEK_SET); | |
59 filesize = filesize < sizeof(rom) ? filesize : sizeof(rom); | |
60 if (fread(rom, 1, filesize, f) != filesize) { | |
61 fprintf(stderr, "error reading %s\n",fname); | |
62 exit(1); | |
63 } | |
64 fclose(f); | |
65 init_upd78k2_opts(&opts, upd_map, 4); | |
66 upd = init_upd78k2_context(&opts); | |
67 upd->pc = rom[0] | rom[1] << 8; | |
68 upd78k2_execute(upd, 10000); | |
69 return 0; | |
70 } |