view upd78k2run.c @ 2710:842de15d6b59 default tip

Add ROM DB entry for both US and European versions of BTFF3
author Michael Pavone <pavone@retrodev.com>
date Mon, 07 Jul 2025 22:54:07 -0700
parents ab2d916380bf
children
line wrap: on
line source

#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;
}