Fixes #125 Remove all public _init() functions

This commit is contained in:
Stefan Arentz 2017-01-09 21:09:20 -05:00
parent 37d508c367
commit 70aef81778
13 changed files with 44 additions and 54 deletions

View File

@ -60,16 +60,6 @@ static int _load_rom_data(char *rom_path, uint8_t rom_data[2048]) {
return 0;
}
struct ewm_chr_t* ewm_chr_create(char *rom_path, int rom_type, SDL_Renderer *renderer) {
struct ewm_chr_t *chr = (struct ewm_chr_t*) malloc(sizeof(struct ewm_chr_t));
int ret = ewm_chr_init(chr, rom_path, rom_type, renderer);
if (ret != 0) {
free(chr);
chr = NULL;
}
return chr;
}
static void _set_pixel(SDL_Surface * surface, int x, int y, Uint32 color) {
uint32_t *pixel = (uint32_t*) ((uint8_t*) surface->pixels + (y * surface->pitch) + (x * sizeof(uint32_t)));
*pixel = color;
@ -106,7 +96,7 @@ static SDL_Texture *_generate_texture(SDL_Renderer *renderer, uint8_t rom_data[2
return texture;
}
int ewm_chr_init(struct ewm_chr_t *chr, char *rom_path, int rom_type, SDL_Renderer *renderer) {
static int ewm_chr_init(struct ewm_chr_t *chr, char *rom_path, int rom_type, SDL_Renderer *renderer) {
if (rom_type != EWM_CHR_ROM_TYPE_2716) {
return -1;
}
@ -144,6 +134,16 @@ int ewm_chr_init(struct ewm_chr_t *chr, char *rom_path, int rom_type, SDL_Render
return 0;
}
struct ewm_chr_t* ewm_chr_create(char *rom_path, int rom_type, SDL_Renderer *renderer) {
struct ewm_chr_t *chr = (struct ewm_chr_t*) malloc(sizeof(struct ewm_chr_t));
int ret = ewm_chr_init(chr, rom_path, rom_type, renderer);
if (ret != 0) {
free(chr);
chr = NULL;
}
return chr;
}
#if 0
int main() {
struct ewm_chr_t *chr = ewm_chr_create("rom/3410036.bin", EWM_CHR_ROM_TYPE_2716);

View File

@ -32,6 +32,5 @@ struct ewm_chr_t {
};
struct ewm_chr_t* ewm_chr_create(char *rom_path, int rom_type, SDL_Renderer *renderer);
int ewm_chr_init(struct ewm_chr_t *chr, char *rom_path, int rom_type, SDL_Renderer *renderer);
#endif

View File

@ -189,7 +189,7 @@ static void cpu_initialize() {
}
}
int cpu_init(struct cpu_t *cpu, int model) {
static int cpu_init(struct cpu_t *cpu, int model) {
if (!cpu_initialized) {
cpu_initialize();
cpu_initialized = true;

View File

@ -87,7 +87,6 @@ uint8_t _cpu_stack_used(struct cpu_t *cpu);
uint8_t _cpu_get_status(struct cpu_t *cpu);
void _cpu_set_status(struct cpu_t *cpu, uint8_t status);
int cpu_init(struct cpu_t *cpu, int model);
struct cpu_t *cpu_create(int model);
void cpu_destroy(struct cpu_t *cpu);

View File

@ -31,13 +31,12 @@
#include "mem.h"
int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path) {
struct cpu_t cpu;
cpu_init(&cpu, model);
cpu_add_ram_file(&cpu, 0x0000, rom_path);
cpu_reset(&cpu);
cpu.state.pc = start_addr;
struct cpu_t *cpu = cpu_create(model);
cpu_add_ram_file(cpu, 0x0000, rom_path);
cpu_reset(cpu);
cpu->state.pc = start_addr;
uint16_t last_pc = cpu.state.pc;
uint16_t last_pc = cpu->state.pc;
struct timespec start;
if (clock_gettime(CLOCK_REALTIME, &start) != 0) {
@ -46,12 +45,12 @@ int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path)
}
while (true) {
int ret = cpu_step(&cpu);
int ret = cpu_step(cpu);
if (ret < 0) {
switch (ret) {
case EWM_CPU_ERR_UNIMPLEMENTED_INSTRUCTION:
fprintf(stderr, "TEST Unimplemented instruction 0x%.2x at 0x%.4x\n",
mem_get_byte(&cpu, cpu.state.pc), cpu.state.pc);
mem_get_byte(cpu, cpu->state.pc), cpu->state.pc);
return -1;
default:
fprintf(stderr, "TEST Unexpected error %d\n", ret);
@ -62,7 +61,7 @@ int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path)
// End of the tests is at 0x3399. This is hard coded and not
// ideal. Is there a better way to detect this?
if (cpu.state.pc == success_addr) {
if (cpu->state.pc == success_addr) {
struct timespec now;
if (clock_gettime(CLOCK_REALTIME, &now) != 0) {
perror("Cannot get time");
@ -75,10 +74,10 @@ int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path)
uint64_t duration_ms = (now.tv_sec * 1000 + (now.tv_nsec / 1000000))
- (start.tv_sec * 1000 + (start.tv_nsec / 1000000));
double duration = (double) duration_ms / 1000.0;
double mhz = (double) cpu.counter * (1.0 / duration) / 1000000.0;
double mhz = (double) cpu->counter * (1.0 / duration) / 1000000.0;
fprintf(stderr, "TEST Success; executed %" PRIu64 " cycles in %.4f at %.4f MHz\n",
cpu.counter, duration, mhz);
cpu->counter, duration, mhz);
return 0;
}
@ -87,17 +86,17 @@ int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path)
// which we can easily detect by remembering the previous pc and
// then looking at what we are about to execute.
if (cpu.state.pc == last_pc) {
uint8_t i = mem_get_byte(&cpu, cpu.state.pc);
if (cpu->state.pc == last_pc) {
uint8_t i = mem_get_byte(cpu, cpu->state.pc);
if (i == 0x10 || i == 0x30 || i == 0x50 || i == 0x70 || i == 0x90 || i == 0xb0 || i == 0xd0 || i == 0xf0) {
if (mem_get_byte(&cpu, cpu.state.pc + 1) == 0xfe) {
fprintf(stderr, "TEST Failure at 0x%.4x \n", cpu.state.pc);
if (mem_get_byte(cpu, cpu->state.pc + 1) == 0xfe) {
fprintf(stderr, "TEST Failure at 0x%.4x \n", cpu->state.pc);
return -1;
}
}
}
last_pc = cpu.state.pc;
last_pc = cpu->state.pc;
}
}

View File

@ -413,7 +413,7 @@ static struct ewm_dsk_track_t dsk_convert_track(struct ewm_dsk_t *disk, struct e
// Public
int ewm_dsk_init(struct ewm_dsk_t *dsk, struct cpu_t *cpu) {
static int ewm_dsk_init(struct ewm_dsk_t *dsk, struct cpu_t *cpu) {
memset(dsk, 0x00, sizeof(struct ewm_dsk_t));
dsk->rom = cpu_add_rom_data(cpu, 0xc600, 0xc6ff, dsk_rom);
dsk->rom->description = "rom/dsk/$C600";

View File

@ -66,7 +66,6 @@ struct ewm_dsk_t {
#define EWM_DSK_TYPE_DO (0)
#define EWM_DSK_TYPE_PO (1)
int ewm_dsk_init(struct ewm_dsk_t *dsk, struct cpu_t *cpu);
struct ewm_dsk_t *ewm_dsk_create(struct cpu_t *cpu);
int ewm_dsk_set_disk_data(struct ewm_dsk_t *dsk, uint8_t index, bool readonly, void *data, size_t length, int type);
int ewm_dsk_set_disk_file(struct ewm_dsk_t *dsk, uint8_t index, bool readonly, char *path);

View File

@ -32,15 +32,6 @@
#include "tty.h"
#include "one.h"
struct ewm_one_t *ewm_one_create(int model, SDL_Renderer *renderer) {
struct ewm_one_t *one = (struct ewm_one_t*) malloc(sizeof(struct ewm_one_t));
if (ewm_one_init(one, model, renderer) != 0) {
free(one);
one = NULL;
}
return one;
}
static void ewm_one_pia_callback(struct ewm_pia_t *pia, void *obj, uint8_t ddr, uint8_t v) {
struct ewm_one_t *one = (struct ewm_one_t*) obj;
if (one->model == EWM_ONE_MODEL_APPLE1) {
@ -49,7 +40,7 @@ static void ewm_one_pia_callback(struct ewm_pia_t *pia, void *obj, uint8_t ddr,
ewm_tty_write(one->tty, v);
}
int ewm_one_init(struct ewm_one_t *one, int model, SDL_Renderer *renderer) {
static int ewm_one_init(struct ewm_one_t *one, int model, SDL_Renderer *renderer) {
memset(one, 0, sizeof(struct ewm_one_t));
one->model = model;
switch (model) {
@ -322,3 +313,11 @@ int ewm_one_main(int argc, char **argv) {
return 0;
}
struct ewm_one_t *ewm_one_create(int model, SDL_Renderer *renderer) {
struct ewm_one_t *one = (struct ewm_one_t*) malloc(sizeof(struct ewm_one_t));
if (ewm_one_init(one, model, renderer) != 0) {
free(one);
one = NULL;
}
return one;
}

View File

@ -44,7 +44,6 @@ struct ewm_one_t {
};
struct ewm_one_t *ewm_one_create(int type, SDL_Renderer *renderer);
int ewm_one_init(struct ewm_one_t *one, int type, SDL_Renderer *renderer);
void ewm_one_destroy(struct ewm_one_t *one);
int ewm_one_main(int argc, char **argv);

View File

@ -102,6 +102,12 @@ static void pia_write(struct cpu_t *cpu, struct mem_t *mem, uint16_t addr, uint8
}
}
static int ewm_pia_init(struct ewm_pia_t *pia, struct cpu_t *cpu) {
memset(pia, 0, sizeof(struct ewm_pia_t));
cpu_add_iom(cpu, EWM_A1_PIA6820_ADDR, EWM_A1_PIA6820_ADDR + EWM_A1_PIA6820_LENGTH - 1, pia, pia_read, pia_write);
return 0;
}
struct ewm_pia_t *ewm_pia_create(struct cpu_t *cpu) {
struct ewm_pia_t *pia = (struct ewm_pia_t*) malloc(sizeof(struct ewm_pia_t));
if (ewm_pia_init(pia, cpu) != 0) {
@ -111,12 +117,6 @@ struct ewm_pia_t *ewm_pia_create(struct cpu_t *cpu) {
return pia;
}
int ewm_pia_init(struct ewm_pia_t *pia, struct cpu_t *cpu) {
memset(pia, 0, sizeof(struct ewm_pia_t));
cpu_add_iom(cpu, EWM_A1_PIA6820_ADDR, EWM_A1_PIA6820_ADDR + EWM_A1_PIA6820_LENGTH - 1, pia, pia_read, pia_write);
return 0;
}
void ewm_pia_destroy(struct ewm_pia_t *pia) {
free(pia);
}

View File

@ -57,7 +57,6 @@ struct ewm_pia_t {
};
struct ewm_pia_t *ewm_pia_create(struct cpu_t *cpu);
int ewm_pia_init(struct ewm_pia_t *pia, struct cpu_t *cpu);
void ewm_pia_destroy(struct ewm_pia_t *pia);
void ewm_pia_set_outa(struct ewm_pia_t *pia, uint8_t v);

View File

@ -285,9 +285,7 @@ inline static void scr_render_hgr_screen(struct scr_t *scr, bool flash) {
}
}
// TODO This is the only actual API exposed
int ewm_scr_init(struct scr_t *scr, struct ewm_two_t *two, SDL_Renderer *renderer) {
static int ewm_scr_init(struct scr_t *scr, struct ewm_two_t *two, SDL_Renderer *renderer) {
memset(scr, 0x00, sizeof(struct scr_t));
scr->two = two;
scr->renderer = renderer;

View File

@ -43,7 +43,6 @@ struct scr_t {
};
struct scr_t *ewm_scr_create(struct ewm_two_t *two, SDL_Renderer *renderer);
int ewm_scr_init(struct scr_t *scr, struct ewm_two_t *two, SDL_Renderer *renderer);
void ewm_scr_destroy(struct scr_t *scr);
void ewm_scr_update(struct scr_t *scr, int phase, int fps);
void ewm_scr_set_color_scheme(struct scr_t *scr, int color_scheme);