false, EXPANSIONTYPE_SCSI,
8512, 10, 0, false, fastlane_memory_callback
},
+ {
+ _T("phoenixboard"), _T("Phoenix Board SCSI"), _T("Phoenix Microtechnologies"),
+ phoenixboard_init, NULL, phoenixboard_add_scsi_unit, ROMTYPE_PHOENIXB, 0, 0, BOARD_AUTOCONFIG_Z2, true,
+ NULL, 0,
+ true, EXPANSIONTYPE_SCSI,
+ },
{
_T("ptnexus"), _T("Nexus"), _T("Preferred Technologies"),
ptnexus_init, NULL, ptnexus_add_scsi_unit, ROMTYPE_PTNEXUS | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false,
#define ROMTYPE_APOLLOHD 0x00100036
#define ROMTYPE_MEVOLUTION 0x00100037
#define ROMTYPE_GOLEMFAST 0x00100038
+#define ROMTYPE_PHOENIXB 0x00100039
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
addrbank *omtiadapter_init(struct romconfig *rc);
void omtiadapter_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+addrbank *phoenixboard_init(struct romconfig *rc);
+void phoenixboard_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+
void x86_xt_hd_bput(int, uae_u8);
uae_u8 x86_xt_hd_bget(int);
addrbank *x86_xt_hd_init(struct romconfig *rc);
return NULL;
}
-#define NEXT_ROM_ID 159
+#define NEXT_ROM_ID 160
#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 },
0x5e94ee56, 0xf83dae55, 0x49f9b735, 0x52d5c6e0, 0x41da4c6c, 0x995a7f47, NULL, NULL },
ALTROMPN(157, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0xec13fda0, 0x6af1447c, 0x4363c46d, 0x05697458, 0x01daa30c, 0x03c01c9f)
ALTROMPN(157, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0x39b0075e, 0xf6644ea0, 0x6c3ed349, 0xfb0fb6b4, 0xa9f07655, 0x0b104179)
+ { _T("Phoenix Board SCSI v.J"), 3, 1, 3, 1, _T("PBSCSI\0"), 32768, 159, 0, 0, ROMTYPE_PHOENIXB, 0, 0, NULL,
+ 0x1f672e4b, 0xb20d50b8, 0x31ec9823, 0xfa732fc6, 0x522ecc6a, 0xae36ec33, 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 OMTI_SYSTEM2000 22
#define OMTI_ADAPTER 23
#define OMTI_X86 24
-#define NCR_LAST 25
+#define NCR5380_PHOENIXBOARD 25
+#define NCR_LAST 26
extern int log_scsiemu;
return reg;
}
+static int phoenixboard_reg(struct soft_scsi *ncr, uaecptr addr)
+{
+ if (addr & 1)
+ return -1;
+ if (addr & 0xc000)
+ return -1;
+ addr >>= 1;
+ addr &= 7;
+ return addr;
+}
+
static uae_u8 read_supra_dma(struct soft_scsi *ncr, uaecptr addr)
{
uae_u8 val = 0;
}
}
+ } else if (ncr->type == NCR5380_PHOENIXBOARD) {
+
+ reg = phoenixboard_reg(ncr, addr);
+ if (reg >= 0) {
+ v = ncr5380_bget(ncr, reg);
+ } else if (addr < 0x8000) {
+ v = ncr->rom[addr];
+ }
}
#if NCR5380_DEBUG > 1
if ((origaddr >= 0xf00000 && size == 1) || (origaddr < 0xf00000))
}
}
+ } else if (ncr->type == NCR5380_PHOENIXBOARD) {
+
+ reg = phoenixboard_reg(ncr, addr);
+ if (reg >= 0) {
+ ncr5380_bput(ncr, reg, val);
+ }
+
}
#if NCR5380_DEBUG > 1
return v;
}
+void soft_scsi_free(void)
+{
+ parallel_port_scsi = false;
+ parallel_port_scsi_data = NULL;
+ x86_hd_data = NULL;
+ for (int i = 0; soft_scsi_devices[i]; i++) {
+ soft_scsi_free_unit(soft_scsi_devices[i]);
+ soft_scsi_devices[i] = NULL;
+ }
+}
+
+void soft_scsi_reset(void)
+{
+ for (int i = 0; soft_scsi_devices[i]; i++) {
+ raw_scsi_reset(&soft_scsi_devices[i]->rscsi);
+ }
+}
+
/*
$8380 select unit (unit mask)
memset(p, 0, 4096);
p[0x02] = product_id;
p[0x08] = manufacturer_id >> 8;
- p[0x0a] = manufacturer_id;
+ p[0x0a] = (uae_u8)manufacturer_id;
}
static void expansion_add_protoautoconfig_box(uae_u8 *p, int box_size, uae_u16 manufacturer_id, uae_u8 product_id)
generic_soft_scsi_add(ch, ci, rc, OMTI_X86, 0, 0, ROMTYPE_X86_HD);
}
-void soft_scsi_free(void)
+addrbank *phoenixboard_init(struct romconfig *rc)
{
- parallel_port_scsi = false;
- parallel_port_scsi_data = NULL;
- x86_hd_data = NULL;
- for (int i = 0; soft_scsi_devices[i]; i++) {
- soft_scsi_free_unit(soft_scsi_devices[i]);
- soft_scsi_devices[i] = NULL;
- }
+ struct soft_scsi *scsi = getscsi(rc);
+
+ if (!scsi)
+ return NULL;
+
+ const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_PHOENIXB);
+ load_rom_rc(rc, ROMTYPE_PHOENIXB, 8192, rc->autoboot_disabled ? 0 : 8192, scsi->rom, 16384, LOADROM_EVENONLY_ODDONE | LOADROM_FILL);
+ load_rom_rc(rc, ROMTYPE_PHOENIXB, 16384, 16384, scsi->rom + 16384, 16384, LOADROM_EVENONLY_ODDONE | LOADROM_FILL);
+ memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory);
+
+ return scsi->bank;
}
-void soft_scsi_reset(void)
+void phoenixboard_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
{
- for (int i = 0; soft_scsi_devices[i]; i++) {
- raw_scsi_reset(&soft_scsi_devices[i]->rscsi);
- }
+ generic_soft_scsi_add(ch, ci, rc, NCR5380_PHOENIXBOARD, 65536, 32768, ROMTYPE_PHOENIXB);
}
+