return NULL;
}
-#define NEXT_ROM_ID 220
+#define NEXT_ROM_ID 221
#define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \
{ _T("X"), 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e },
0xa2e0cfb8, 0xfa7199d2,0xea343b01,0x4b0f6eb6,0x992d2e95,0x40fce61b, NULL, NULL },
{ _T("Vortex System 2000"), 1, 0, 1, 0, _T("SYSTEM2000\0"), 16384, 219, 0, 0, ROMTYPE_SYSTEM2000, 0, 0, NULL,
0x053097c3, 0xee87f26c,0xf858b63a,0xd6bff74b,0x802cea03,0x97281fad, NULL, NULL },
+ { _T("Kupke Golem HD3000 v1.4"), 1, 4, 1, 4, _T("GOLEMHD3000\0"), 16384, 220, 0, 0, ROMTYPE_GOLEMHD3000, 0, 0, NULL,
+ 0x93ba65c7, 0x33ba9d1e,0x27e9c210,0xa27ee6d3,0x855d3feb,0x1649ddc2, NULL, NULL },
+ ALTROMPN(220, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0x2af75b4c, 0xe25be651, 0x56eef3bc, 0xa036d76c, 0xca3903a9, 0x469f0de5)
+ ALTROMPN(220, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0x8283dc0c, 0xe3820358, 0x1d130b40, 0x9c333f41, 0xdfd6afcd, 0xf3fabb81)
{ _T("CyberStorm MK I 68040"), 0, 0, 0, 0, _T("CSMKI\0"), 32768, 95, 0, 0, ROMTYPE_CB_CSMK1, 0, 0, NULL,
0, 0, 0, 0, 0, 0, NULL, _T("cyberstormmk1_040.rom") },
void board_prefs_changed(int romtype, int devnum)
{
- int idx1, idx2;
- struct boardromconfig *brc1 = get_device_rom(&currprefs, romtype, devnum, &idx1);
- struct boardromconfig *brc2 = get_device_rom(&changed_prefs, romtype, devnum, &idx2);
- if (brc1 && brc2) {
- memcpy(brc1, brc2, sizeof(struct boardromconfig));
- } else if (brc1 && !brc2) {
- clear_device_rom(&currprefs, romtype, devnum, true);
- } else if (!brc1 && brc2) {
- brc1 = get_device_rom_new(&currprefs, romtype, devnum, &idx1);
- if (brc1)
+ if (romtype != -1) {
+ int idx1, idx2;
+ struct boardromconfig *brc1 = get_device_rom(&currprefs, romtype, devnum, &idx1);
+ struct boardromconfig *brc2 = get_device_rom(&changed_prefs, romtype, devnum, &idx2);
+ if (brc1 && brc2) {
memcpy(brc1, brc2, sizeof(struct boardromconfig));
+ } else if (brc1 && !brc2) {
+ clear_device_rom(&currprefs, romtype, devnum, true);
+ } else if (!brc1 && brc2) {
+ brc1 = get_device_rom_new(&currprefs, romtype, devnum, &idx1);
+ if (brc1)
+ memcpy(brc1, brc2, sizeof(struct boardromconfig));
+ }
+ } else {
+ for (int i = 0; expansionroms[i].name; i++) {
+ const struct expansionromtype *ert = &expansionroms[i];
+ for (int j = 0; j < MAX_BOARD_ROMS; j++) {
+ board_prefs_changed(ert->romtype, j);
+ }
+ }
}
}
#define NCR5380_ADDHARD 33
#define NONCR_INMATE 34
#define NCR5380_EMPLANT 35
-#define NCR_LAST 36
+#define OMTI_HD3000 36
+#define NCR_LAST 37
extern int log_scsiemu;
return -1;
}
+static int hd3000_reg(struct soft_scsi *ncr, uaecptr addr, bool write)
+{
+ if (!(addr & 1))
+ return -1;
+ if (!(addr & 0x4000))
+ return -1;
+ return (addr / 2) & 7;
+}
+
static int hda506_reg(struct soft_scsi *ncr, uaecptr addr, bool write)
{
if ((addr & 0x7fe1) != 0x7fe0)
if (reg >= 0)
v = sasi_microforge_bget(ncr, reg);
+ } else if (ncr->type == OMTI_HD3000) {
+
+ if (addr < 0x4000) {
+ v = ncr->rom[addr];
+ } else {
+ reg = hd3000_reg(ncr, addr, false);
+ if (reg >= 0)
+ v = omti_bget(ncr, reg);
+ }
+
} else if (ncr->type == OMTI_HDA506) {
reg = hda506_reg(ncr, addr, false);
if (reg >= 0)
omti_bput(ncr, reg, val);
+ } else if (ncr->type == OMTI_HD3000) {
+
+ reg = hd3000_reg(ncr, addr, true);
+ if (reg >= 0)
+ omti_bput(ncr, reg, val);
+
} else if (ncr->type == OMTI_ALF1 || ncr->type == OMTI_ADAPTER) {
reg = alf1_reg(ncr, addr, true);
{
generic_soft_scsi_add(ch, ci, rc, NCR5380_EMPLANT, 65536, 16384, ROMTYPE_EMPLANT);
}
+
+bool hd3000_init(struct autoconfig_info *aci)
+{
+ const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_GOLEMHD3000);
+
+ if (!aci->doinit) {
+ load_rom_rc(aci->rc, ROMTYPE_GOLEMHD3000, 8192, aci->ert->autoboot_jumper ? 0 : 8192, aci->autoconfig_raw, 128, 0);
+ return true;
+ }
+
+ struct soft_scsi *scsi = getscsi(aci->rc);
+ if (!scsi)
+ return false;
+
+ load_rom_rc(aci->rc, ROMTYPE_GOLEMHD3000, 8192, aci->ert->autoboot_jumper ? 0 : 8192, scsi->rom, 65536, 0);
+ memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory);
+ aci->addrbank = scsi->bank;
+ return true;
+}
+
+void hd3000_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+{
+ generic_soft_scsi_add(ch, ci, rc, OMTI_HD3000, 65536, 16384, ROMTYPE_GOLEMHD3000);
+}