- FILE *in = fopen("./platforms/amiga/piscsi/piscsi.rom", "rb");
- if (in == NULL) {
- printf("[PISCSI] Could not open PISCSI Boot ROM file for reading!\n");
- // Zero out the boot ROM offset from the autoconfig ROM.
- ac_piscsi_rom[20] = 0;
- ac_piscsi_rom[21] = 0;
- ac_piscsi_rom[22] = 0;
- ac_piscsi_rom[23] = 0;
- return;
+ if (piscsi_rom_ptr == NULL) {
+ FILE *in = fopen("./platforms/amiga/piscsi/piscsi.rom", "rb");
+ if (in == NULL) {
+ printf("[PISCSI] Could not open PISCSI Boot ROM file for reading!\n");
+ // Zero out the boot ROM offset from the autoconfig ROM.
+ ac_piscsi_rom[20] = 0;
+ ac_piscsi_rom[21] = 0;
+ ac_piscsi_rom[22] = 0;
+ ac_piscsi_rom[23] = 0;
+ return;
+ }
+ fseek(in, 0, SEEK_END);
+ piscsi_rom_size = ftell(in);
+ fseek(in, 0, SEEK_SET);
+ piscsi_rom_ptr = malloc(piscsi_rom_size);
+ fread(piscsi_rom_ptr, piscsi_rom_size, 1, in);
+
+ fseek(in, PISCSI_DRIVER_OFFSET, SEEK_SET);
+ process_hunks(in, &piscsi_hinfo, piscsi_hreloc, PISCSI_DRIVER_OFFSET);
+
+ fclose(in);
+
+ printf("[PISCSI] Loaded Boot ROM.\n");
+ } else {
+ printf("[PISCSI] Boot ROM already loaded.\n");