2144, 2, 0, false, NULL,
false, 2, NULL
},
+ {
+ _T("inmate"), _T("InMate"), _T("Spirit Technology"),
+ NULL, inmate_init, NULL, inmate_add_scsi_unit, ROMTYPE_INMATE | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false,
+ NULL, 0,
+ true, EXPANSIONTYPE_SCSI
+ },
{
_T("supradrive"), _T("SupraDrive"), _T("Supra Corporation"),
NULL, supra_init, NULL, supra_add_scsi_unit, ROMTYPE_SUPRA | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false,
},
{
_T("system2000"), _T("System 2000"), _T("Vortex"),
- NULL, system2000_init, NULL, system2000_add_scsi_unit, ROMTYPE_SYSTEM2000 | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ system2000_preinit, system2000_init, NULL, system2000_add_scsi_unit, ROMTYPE_SYSTEM2000 | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
NULL, 0,
false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI
},
#define ROMTYPE_ADDHARD 0x00100066
#define ROMTYPE_A2090B 0x00100067
#define ROMTYPE_FASTATA4K 0x00100068
+#define ROMTYPE_INMATE 0x00100069
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
bool promigos_init(struct autoconfig_info *aci);
void promigos_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+bool system2000_preinit(struct autoconfig_info *aci);
bool system2000_init(struct autoconfig_info *aci);
void system2000_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
bool addhard_init(struct autoconfig_info*);
void addhard_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+bool inmate_init(struct autoconfig_info*);
+void inmate_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+
uae_u8 idescsi_scsi_get(uaecptr addr);
void idescsi_scsi_put(uaecptr addr, uae_u8 v);
return NULL;
}
-#define NEXT_ROM_ID 218
+#define NEXT_ROM_ID 220
#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 },
0xe60b1ce6, 0xa7c4b709, 0x494f4034, 0x42b8ec11, 0x090dc1d0, 0x18098ebc, NULL, NULL },
{ _T("Ashcom Design AddHard v2.0"), 1, 0, 1, 0, _T("ADDHARD\0"), 16384, 209, 0, 0, ROMTYPE_ADDHARD, 0, 0, NULL,
0xe9ad804a, 0x9ebabbeb,0xc1e5ce9e,0xd8e43870,0xdd810524,0x770ba6b4, NULL, NULL },
+ { _T("Spirite Technology InMate"), 1, 0, 1, 0, _T("INMATE\0"), 32768, 218, 0, 0, ROMTYPE_INMATE, 0, 0, NULL,
+ 0xa2e0cfb8, 0xfa7199d2,0xea343b01,0x4b0f6eb6,0x992d2e95,0x40fce61b, NULL, NULL },
+ { _T("Vortex System 2000"), 1, 0, 1, 0, _T("SYSTEM2000\0"), 32768, 219, 0, 0, ROMTYPE_SYSTEM2000, 0, 0, NULL,
+ 0x053097c3, 0xee87f26c,0xf858b63a,0xd6bff74b,0x802cea03,0x97281fad, NULL, NULL },
{ _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") },
#define NONCR_HARDFRAME 31
#define NCR5380_MALIBU 32
#define NCR5380_ADDHARD 33
-#define NCR_LAST 34
+#define NONCR_INMATE 34
+#define NCR_LAST 35
extern int log_scsiemu;
return true;
}
if (data_len < 0) {
- if (cmd_len == 6)
+ if (cmd_len == 6) {
sd->data_len = sd->cmd[4];
- else
+ } else {
sd->data_len = (sd->cmd[7] << 8) | sd->cmd[8];
+ }
} else {
sd->data_len = data_len;
}
v = ncr->rom[addr];
}
+ } else if (ncr->type == NONCR_INMATE) {
+
+ if (!(addr & 0x8000)) {
+ if (addr == 0x80) {
+ v = aic_bget_reg(ncr);
+ } else if (addr == 0x82) {
+ v = aic_bget_data(ncr);
+ }
+ } else {
+ v = ncr->rom[addr];
+ }
+
} else if (ncr->type == NCR5380_SUPRA) {
if (ncr->subtype == 4) {
write_684xx_dma(ncr, addr & 31, val);
}
+ } else if (ncr->type == NONCR_INMATE) {
+
+ if (addr == 0x80) {
+ aic_bput_reg(ncr, val);
+ } else if (addr == 0x82) {
+ aic_bput_data(ncr, val);
+ }
+
} else if (ncr->type == NCR5380_SUPRA) {
if (ncr->subtype == 4) {
if (!scsi)
return false;
+ return true;
+}
+
+bool system2000_preinit(struct autoconfig_info *aci)
+{
+ struct soft_scsi *scsi = getscsi(aci->rc);
+
+ if (!scsi)
+ return false;
+
map_banks(scsi->bank, aci->start >> 16, aci->size >> 16, 0);
scsi->board_mask = aci->size - 1;
scsi->baseaddress = aci->start;
generic_soft_scsi_add(ch, ci, rc, NONCR_HARDFRAME, 65536, 65536, ROMTYPE_HARDFRAME);
}
+bool inmate_init(struct autoconfig_info *aci)
+{
+ if (!aci->doinit) {
+ load_rom_rc(aci->rc, ROMTYPE_INMATE, 32768, 0, aci->autoconfig_raw, 128, LOADROM_EVENONLY_ODDONE);
+ return true;
+ }
+
+ struct soft_scsi *scsi = getscsi(aci->rc);
+ if (!scsi)
+ return false;
+
+ load_rom_rc(aci->rc, ROMTYPE_INMATE, 32768, 0, scsi->rom, 65536, LOADROM_EVENONLY_ODDONE);
+ memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory);
+ aci->addrbank = scsi->bank;
+ return true;
+}
+
+void inmate_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+{
+ generic_soft_scsi_add(ch, ci, rc, NONCR_INMATE, 65536, 65536, ROMTYPE_INMATE);
+}
+
bool malibu_init(struct autoconfig_info *aci)
{
const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_MALIBU);