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 }