false, 0, NULL,
{ 0xc1, 0x04, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
},
+ {
+ _T("fasttrak"), _T("FastTrak"), _T("Xetec"),
+ NULL, fasttrak_init, NULL, fasttrak_add_scsi_unit, ROMTYPE_FASTTRAK, 0, 0, BOARD_AUTOCONFIG_Z2, false,
+ NULL, 0,
+ true, EXPANSIONTYPE_SCSI,
+ 2022, 2, 0
+ },
{
_T("amax"), _T("AMAX ROM dongle"), _T("ReadySoft"),
NULL, NULL, NULL, NULL, ROMTYPE_AMAX | ROMTYPE_NONE, 0, 0, 0, false
#define ROMTYPE_PROFEX 0x00100070
#define ROMTYPE_ELSATHD 0x00100071
#define ROMTYPE_ALF3 0x00100072
+#define ROMTYPE_FASTTRAK 0x00100073
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
bool profex_init(struct autoconfig_info *aci);
void profex_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+bool fasttrak_init(struct autoconfig_info *aci);
+void fasttrak_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 227
+#define NEXT_ROM_ID 228
#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 },
0x1b854f6b, 0xc39d6202, 0xccb65f17, 0x63d1835e, 0x19d5b63d, 0x28f1b6a3, NULL, NULL },
ALTROMPN(224, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0x3ba56b91, 0xef55760e, 0x8d5a5408, 0x7062f9ab, 0xc63ef067, 0x0b23f108)
ALTROMPN(224, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0x20c2cbb6, 0xb83d7406, 0x6c335a77, 0x0acb30d6, 0xff79a00f, 0x629a6953)
+ { _T("Xetec FastTrak"), 1, 42, 1, 42, _T("FASTTRACK\0"), 32768, 227, 0, 0, ROMTYPE_FASTTRAK, 0, 0, NULL,
+ 0xc5ae45d4, 0x8d682bc1,0x72bd2d35,0x4ba2db5c,0x9f6745a4,0x8937782c, 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_WEDGE 37
#define NCR5380_EVESHAMREF 38
#define OMTI_PROFEX 39
-#define NCR_LAST 40
+#define NCR5380_FASTTRAK 40
+#define NCR_LAST 41
extern int log_scsiemu;
return -1;
}
+static int fasttrak_reg(struct soft_scsi *ncr, uaecptr addr)
+{
+ if ((addr & 0xc010) == 0x4000)
+ return (addr >> 1) & 7;
+ if ((addr & 0xc010) == 0x4010)
+ return 8;
+ return -1;
+}
+
static uae_u8 read_684xx_dma(struct soft_scsi *ncr, uaecptr addr)
{
uae_u8 val = 0;
v = ncr->rom[addr & 0x7fff];
}
+ } else if (ncr->type == NCR5380_FASTTRAK) {
+
+ reg = fasttrak_reg(ncr, addr);
+ if (reg >= 0) {
+ v = ncr5380_bget(ncr, reg);
+ } else {
+ v = ncr->rom[addr & 0x7fff];
+ }
+
}
#if NCR5380_DEBUG > 1
reg = eveshamref_reg(ncr, addr);
if (reg >= 0)
ncr5380_bput(ncr, reg, val);
+
+ } else if (ncr->type == NCR5380_FASTTRAK) {
+
+ reg = fasttrak_reg(ncr, addr);
+ if (reg >= 0)
+ ncr5380_bput(ncr, reg, val);
}
#if NCR5380_DEBUG > 1
ss->rscsi.device[ch]->hfd->sector_buffer[1] = '5';
}
}
+
+
+bool fasttrak_init(struct autoconfig_info *aci)
+{
+ if (!aci->doinit) {
+ load_rom_rc(aci->rc, ROMTYPE_FASTTRAK, 65536, aci->rc->autoboot_disabled ? 0x4000 : 0x6000, 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_FASTTRAK, 65536, aci->rc->autoboot_disabled ? 0x4000 : 0x6000, scsi->rom, 0x4000, LOADROM_EVENONLY_ODDONE);
+ memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory);
+ aci->addrbank = scsi->bank;
+ return true;
+}
+
+void fasttrak_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+{
+ generic_soft_scsi_add(ch, ci, rc, NCR5380_FASTTRAK, 65536, 65536, ROMTYPE_FASTTRAK);
+}