• R/O
  • HTTP
  • SSH
  • HTTPS

motonesemu: 提交

motonesemu master repository


Commit MetaInfo

修订版9c17db827d4e3b02ef930af05f4bff5af477b650 (tree)
时间2017-10-29 18:47:58
作者astoria-d <astoria-d@home>
Commiterastoria-d

Log Message

rom write handler added.

更改概述

差异

--- a/emulator/bus.c
+++ b/emulator/bus.c
@@ -26,6 +26,7 @@ static struct cpu_pin pin_status;
2626
2727 static mp_set_addr_t set_rom_addr_in;
2828 static mp_get_data_t get_rom_data_in;
29+static mp_set_data_t set_rom_data_in;
2930
3031 extern mp_dbg_get_byte_t dbg_rom_get_byte_in;
3132 extern mp_dbg_get_short_t dbg_rom_get_short_in;
@@ -143,10 +144,7 @@ void set_bus_data(unsigned char data){
143144 return;
144145
145146 if (addr_bus & ROM_BIT) {
146- extern int critical_error;
147- dprint("invalid write!!!!\n");
148- critical_error = TRUE;
149- //no write to ROM
147+ (*set_rom_data_in)(data);
150148 }
151149 else if (addr_bus & IO_APU_BIT) {
152150 set_apu_data(data);
@@ -215,6 +213,7 @@ int init_bus(void) {
215213
216214 set_rom_addr_in = mp_set_addr == NULL ? set_rom_addr : mp_set_addr;
217215 get_rom_data_in = mp_get_data == NULL ? get_rom_data : mp_get_data;
216+ set_rom_data_in = mp_set_data == NULL ? set_rom_data : mp_set_data;
218217
219218 return TRUE;
220219 }
--- a/emulator/mapper.c
+++ b/emulator/mapper.c
@@ -6,12 +6,14 @@
66
77 void set_rom_addr(unsigned short addr);
88 unsigned char get_rom_data(void);
9+void set_rom_data(unsigned char data);
910
1011
1112 int mapper_load;
1213 char mapper_fname [FNAME_LEN];
1314 mp_set_addr_t mp_set_addr;
1415 mp_get_data_t mp_get_data;
16+mp_set_data_t mp_set_data;
1517
1618
1719 static void* mapper_dl;
@@ -20,6 +22,7 @@ int init_mapper(void) {
2022 mapper_dl = NULL;
2123 mp_set_addr = NULL;
2224 mp_get_data = NULL;
25+ mp_set_data = NULL;
2326
2427 if (mapper_load == TRUE) {
2528 if((mapper_dl = dlopen(mapper_fname, RTLD_LAZY)) == NULL) {
@@ -40,12 +43,18 @@ int init_mapper(void) {
4043 printf("%s\n", dlerror());
4144 return FALSE;
4245 }
46+
47+ if((mp_set_data = dlsym(mapper_dl , "mp_set_data")) == NULL) {
48+ printf("%s\n", dlerror());
49+ return FALSE;
50+ }
51+
4352 /*mp_set_debugger is optional..*/
4453 mp_set_debugger = dlsym(mapper_dl , "mp_set_debugger");
4554 mp_dbg_get_byte = dlsym(mapper_dl , "mp_dbg_get_byte");
4655 mp_dbg_get_short = dlsym(mapper_dl , "mp_dbg_get_short");
4756
48- (*mp_init)(set_rom_addr, get_rom_data);
57+ (*mp_init)(set_rom_addr, get_rom_data, set_rom_data);
4958 }
5059 return TRUE;
5160 }
--- a/emulator/rom.c
+++ b/emulator/rom.c
@@ -47,6 +47,13 @@ unsigned char get_rom_data(void) {
4747 return rom_data;
4848 }
4949
50+void set_rom_data(unsigned char data){
51+ extern int critical_error;
52+ dprint("invalid write!!!!\n");
53+ critical_error = TRUE;
54+ //no write to ROM
55+}
56+
5057 void set_rom_ce_pin(int ce) {
5158 rom_pin_status.ce = ce;
5259 //let rom write the value on the bus.
--- a/emulator/rom.h
+++ b/emulator/rom.h
@@ -5,6 +5,7 @@
55
66 void set_rom_addr(unsigned short addr);
77 unsigned char get_rom_data(void);
8+void set_rom_data(unsigned char data);
89 void set_rom_ce_pin(int ce);
910
1011 int load_rom_file(FILE* cartridge, int num_rom_bank);
--- a/include/mapper.h
+++ b/include/mapper.h
@@ -3,22 +3,26 @@
33
44 typedef void (*mp_set_addr_t)(unsigned short addr);
55 typedef unsigned char (*mp_get_data_t)(void);
6+typedef void (*mp_set_data_t)(unsigned char data);
67
78 typedef unsigned char (*mp_dbg_get_byte_t)(unsigned short offset);
89 typedef unsigned short (*mp_dbg_get_short_t)(unsigned short offset);
910
11+typedef void (*mp_dbg_set_byte_t)(unsigned short offset, unsigned char data);
12+typedef void (*mp_dbg_set_short_t)(unsigned short offset, unsigned short data);
1013
1114 #ifdef __mapper_impl__
1215
1316 /*======================
1417 mapper side.
1518 ======================*/
16-int mp_init(mp_set_addr_t set_func, mp_get_data_t get_func);
19+int mp_init(mp_set_addr_t set_a_func, mp_get_data_t get_d_func, mp_set_data_t set_d_func);
1720 int mp_set_debugger(mp_dbg_get_byte_t byte_func, mp_dbg_get_short_t short_func);
1821 void mp_clean(void);
1922
2023 void mp_set_addr(unsigned short addr);
2124 unsigned char mp_get_data(void);
25+void mp_set_data(unsigned char data);
2226
2327 unsigned char mp_dbg_get_byte(unsigned short offset);
2428 unsigned short mp_dbg_get_short(unsigned short offset);
@@ -37,19 +41,20 @@ int init_mapper(void);
3741 void clean_mapper(void);
3842
3943
40-typedef int (*mp_init_t)(mp_set_addr_t set_func, mp_get_data_t get_func);
44+typedef int (*mp_init_t)(mp_set_addr_t set_a_func, mp_get_data_t get_d_func, mp_set_data_t set_d_func);
4145 typedef void (*mp_clean_t)(void);
4246 typedef int (*mp_set_debugger_t)(mp_dbg_get_byte_t byte_func, mp_dbg_get_short_t short_func);
4347
4448 mp_init_t mp_init;
4549 mp_clean_t mp_clean;
4650
47-mp_set_addr_t mp_set_addr;
48-mp_get_data_t mp_get_data;
51+extern mp_set_addr_t mp_set_addr;
52+extern mp_get_data_t mp_get_data;
53+extern mp_set_data_t mp_set_data;
4954
50-mp_set_debugger_t mp_set_debugger;
51-mp_dbg_get_byte_t mp_dbg_get_byte;
52-mp_dbg_get_short_t mp_dbg_get_short;
55+extern mp_set_debugger_t mp_set_debugger;
56+extern mp_dbg_get_byte_t mp_dbg_get_byte;
57+extern mp_dbg_get_short_t mp_dbg_get_short;
5358
5459 #endif /*__mapper_impl__*/
5560
Show on old repository browser