diff --git a/main.cpp b/main.cpp
index 66bdaae..b1e88fb 100644
--- a/main.cpp
+++ b/main.cpp
@@ -39,20 +39,30 @@ unsigned char input_data_out() {
int main(int argc, char** argv) {
- vm_init("test.bas");
+ // Inicialitzar la mįquina virtual (li arriba el arxiu amb el programa per linea de comandos)
+ vm_init(argc < 2 ? nullptr : argv[1]); // "test.bas"
+
+ // Inicialitzar el procesador grąfic
vdp_init();
+
+ // Registrar els ports d'entrada i eixida del procesador grąfic
vm_register_out_port(10, vdp_data_out);
vm_register_out_port(11, vdp_cmd_out);
vm_register_in_port(12, vdp_in);
+ // Registrar els ports d'entrada i eixida del dispositiu d'entrada (teclat, en cas del emu)
vm_register_out_port(20, input_data_in);
vm_register_in_port(21, input_data_out);
+ // Inicialitzar el procesador de só
sound_init();
+
+ // Registrar els ports d'entrada i eixida del procesador de só
vm_register_out_port(30, sound_data_out);
vm_register_out_port(31, sound_cmd_out);
vm_register_in_port(32, sound_in);
+ // Inicialitzem el depurador del emulador
debug_init(vm_get_memory());
const bool* breakpoints = debug_get_breakpoints();
diff --git a/paco.vcxproj b/paco.vcxproj
index 16cb48d..524f553 100644
--- a/paco.vcxproj
+++ b/paco.vcxproj
@@ -46,6 +46,8 @@
false
+ C:\dev\lib\sdl2\include;$(IncludePath)
+ C:\dev\lib\sdl2\lib\x86;$(LibraryPath)
@@ -76,6 +78,7 @@
true
true
true
+ SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
diff --git a/vm.cpp b/vm.cpp
index dafb43e..a103ec1 100644
--- a/vm.cpp
+++ b/vm.cpp
@@ -48,28 +48,33 @@ static void load_rom() {
}
static void load_program(const char* filename) {
- FILE *f = fopen(filename, "rb");
- fseek(f, 0, SEEK_END);
- long fsize = ftell(f);
- fseek(f, 0, SEEK_SET); //same as rewind(f);
- char *program = (char*)malloc(fsize + 1);
- fread(program, fsize, 1, f);
- fclose(f);
- program[fsize] = 0;
+ if (filename == nullptr) {
+ error_raise("No file specified");
+ } else {
+ FILE *f = fopen(filename, "rb");
+ if (f == nullptr) {
+ error_raise("File not found");
+ } else {
+ fseek(f, 0, SEEK_END);
+ long fsize = ftell(f);
+ fseek(f, 0, SEEK_SET); //same as rewind(f);
+ char *program = (char*)malloc(fsize + 1);
+ fread(program, fsize, 1, f);
+ fclose(f);
+ program[fsize] = 0;
- register_constants();
+ register_constants();
- parser_parse(program, mem);
- free(program);
+ parser_parse(program, mem);
+ free(program);
+ }
+ }
if (error_raised()) {
vm_pc = 0xA000;
- //error_print(&mem[0xA000]);
- }
- else {
+ } else {
printf("Compilation complete!\nProgram size: %d bytes\nMemory usage: %d bytes\n", parser_get_codesize(), parser_get_memory_usage());
/*FILE *f = fopen("test.bin", "wb");
- if (f == nullptr) perror("Error");// printf("Error: %d (%s)\n", errno, strerror(errno));
fwrite(rawCode, parser_get_codesize(), 1, f);
fclose(f);*/
}