Skip to content

Commit 49bd802

Browse files
committed
Enable specifying the ROM image as a command-line argument
1 parent cdbd32a commit 49bd802

File tree

4 files changed

+38
-37
lines changed

4 files changed

+38
-37
lines changed

emu_server.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ def __init__(self, ip, port):
118118
self.out_queue = Queue()
119119
self.init_done = False
120120
self.run_forever = True
121+
self.rom_path = None
121122
self.firmware_path = None
122123
self.conn = None
123124
self.lcd_state = {key: False for key in range(0, 100)}
@@ -127,6 +128,9 @@ def __init__(self, ip, port):
127128
MOTOR_C: {"dir": DIR_OFF, "speed": 0}
128129
}
129130

131+
def set_rom_path(self, rom_path):
132+
self.rom_path = rom_path
133+
130134
def set_firmware_path(self, firmware_path):
131135
self.firmware_path = firmware_path
132136

@@ -279,9 +283,11 @@ def run_server(self):
279283

280284
ip = "localhost"
281285
port = int(sys.argv[1])
282-
firmware = sys.argv[2]
286+
rom = sys.argv[2]
287+
firmware = sys.argv[3]
283288

284289
emu_obj = EmuServer(ip, port)
290+
emu_obj.set_rom_path(rom)
285291
emu_obj.set_firmware_path(firmware)
286292

287293
emu_obj.run_server()

main.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
extern void periph_init(int port);
3636
extern void savefile_init(void);
37-
extern void mem_init(void);
37+
extern void mem_init(char *);
3838
extern void frame_init(void);
3939
extern void lcd_init(void);
4040
extern void t16_init(void);
@@ -63,7 +63,7 @@ extern void bibo_init(void);
6363
int main(int argc, char**argv) {
6464
int guiserverport = 0;
6565
int arg_index = 1;
66-
char* rom_file = NULL;
66+
char *rom_file = NULL;
6767

6868
for (arg_index = 1; arg_index < argc; arg_index++) {
6969
if (strcmp(argv[arg_index], "-d") == 0) {
@@ -83,8 +83,8 @@ int main(int argc, char**argv) {
8383
exit(1);
8484
}
8585
}
86-
87-
mem_init();
86+
87+
mem_init(rom_file);
8888
frame_init();
8989
ser_init();
9090
db_init();

memory.c

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <stdio.h>
2121
#include <stdlib.h>
22+
#include <string.h>
2223
#include "h8300.h"
2324
#include "memory.h"
2425

@@ -64,6 +65,7 @@ uint8 memtype[65536];
6465
register_funcs port[0x10000 - 0xff88];
6566
int wait_states;
6667

68+
char *rom_file_name = NULL;
6769

6870

6971

@@ -178,44 +180,33 @@ void SET_WORD(uint16 addr, uint16 val) {
178180
* \return 1 on success, 0 otherwise.
179181
*/
180182
int read_rom() {
181-
char *brickemu_dir;
182-
char filename[512];
183+
int result = 0;
184+
char *rom_file_ext = NULL;
183185
FILE *romfile;
184-
brickemu_dir = getenv("BRICKEMU_DIR");
185-
if (!brickemu_dir)
186-
brickemu_dir=".";
187186

188-
snprintf(filename, sizeof(filename), "%s/rom.coff", brickemu_dir);
189-
romfile = fopen(filename, "rb");
190-
191-
if (romfile && coff_init(romfile)) {
192-
coff_read(romfile, 0);
193-
coff_symbols(romfile, 0);
194-
fclose(romfile);
195-
return 1;
196-
}
197-
198-
snprintf(filename, sizeof(filename), "%s/rom.bin", brickemu_dir);
199-
romfile = fopen(filename, "rb");
200-
201-
if (romfile) {
202-
fread(memory, 0x4000, 1, romfile);
203-
fclose(romfile);
204-
return 1;
205-
}
187+
if (rom_file_name && (rom_file_ext = strrchr(rom_file_name, '.'))) {
206188

189+
if ((strcmp(rom_file_ext, ".coff") == 0) && (romfile = fopen(rom_file_name, "rb"))) {
190+
if (coff_init(romfile)) {
191+
coff_read(romfile, 0);
192+
coff_symbols(romfile, 0);
193+
result = 1;
194+
}
195+
} else if ((strcmp(rom_file_ext, ".bin") == 0) && (romfile = fopen(rom_file_name, "rb"))) {
196+
fread(memory, 0x4000, 1, romfile);
197+
result = 1;
198+
} else if ((strcmp(rom_file_ext, ".srec") == 0) && (romfile = fopen(rom_file_name, "r"))) {
199+
if (srec_read(romfile, 0) >= 0) {
200+
result = 1;
201+
}
202+
}
207203

208-
snprintf(filename, sizeof(filename), "%s/rom.srec", brickemu_dir);
209-
romfile = fopen(filename, "r");
210-
if (romfile) {
211-
if (srec_read(romfile, 0) >= 0) {
204+
if (romfile) {
212205
fclose(romfile);
213-
return 1;
214206
}
215-
fclose(romfile);
216207
}
217208

218-
return 0;
209+
return result;
219210
}
220211

221212
/** \brief initialize brick memory
@@ -227,12 +218,14 @@ int read_rom() {
227218
* must be named "rom.bin" or "rom.srec".
228219
* \return 1 on success, 0 otherwise.
229220
*/
230-
void mem_init() {
221+
void mem_init(char *rom_file) {
231222
int i;
232223

224+
rom_file_name = rom_file;
233225
if (!read_rom()) {
234226
fprintf(stderr, "Please provide a ROM image (coff, binary, or srec format).\n");
235227
fprintf(stderr, "If extracting the ROM image, save it to a rom.bin or rom.srec file.\n");
228+
fflush(stderr);
236229
abort();
237230
}
238231

tests/conftest.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def pytest_configure():
1818
pytest.emu_obj = None
1919
pytest.emu = None
2020
pytest.ir_server = None
21+
rom = "./rom.coff"
2122
firmware = "../brickos_bibo/kernel/bibo.coff"
2223
ir_server_bin = "./ir-server"
2324
emu_bin = "./emu"
@@ -26,6 +27,7 @@ def pytest_configure():
2627
slot = 1
2728
resp = None
2829
pytest.emu_obj = EmuServer("localhost", find_free_port())
30+
pytest.emu_obj.set_rom_path(rom)
2931
pytest.emu_obj.set_firmware_path(firmware)
3032

3133
try:
@@ -35,7 +37,7 @@ def pytest_configure():
3537
emu_serv.daemon = True
3638
emu_serv.start()
3739
pytest.emu = subprocess.Popen(
38-
[emu_bin, "-guiserverport", f"{pytest.emu_obj.port}"], stdout=subprocess.PIPE
40+
[emu_bin, "-guiserverport", f"{pytest.emu_obj.port}", "-rom", ], stdout=subprocess.PIPE
3941
)
4042

4143
while not pytest.emu_obj.emulator_status_up():

0 commit comments

Comments
 (0)