]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Combitec HD20A/HD40A
authorToni Wilen <twilen@winuae.net>
Sat, 9 Jan 2021 14:58:48 +0000 (16:58 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 9 Jan 2021 14:58:48 +0000 (16:58 +0200)
expansion.cpp
include/rommgr.h
include/scsi.h
rommgr.cpp
scsi.cpp

index 80861e809d684ccd13fc82106e3bfee7da27394f..db98be0af77d363006cb72661fdb2631c2414280 100644 (file)
@@ -5671,7 +5671,13 @@ const struct expansionromtype expansionroms[] = {
 
        {
                _T("omtiadapter"), _T("OMTI-Adapter"), _T("C't"),
-               NULL, omtiadapter_init, NULL, omtiadapter_scsi_unit, ROMTYPE_OMTIADAPTER | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+               NULL, omtiadapter_init, NULL, omtiadapter_add_scsi_unit, ROMTYPE_OMTIADAPTER | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+               NULL, 0,
+               false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI
+       },
+       {
+               _T("hd20a"), _T("HD 20 A/HD 40 A"), _T("Combitec"),
+               NULL, hd20_init, NULL, hd20_add_scsi_unit, ROMTYPE_HD20A, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
                NULL, 0,
                false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI
        },
index 71e0b63fe52b3c673115bf942b8630a1f20abc9b..a5e9c897ac4600b671ad31ae9b3c7210c9eb744c 100644 (file)
@@ -200,6 +200,7 @@ extern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size);
 #define ROMTYPE_VOODOO3                0x00100088
 #define ROMTYPE_S3VIRGE                0x00100089
 #define ROMTYPE_VOODOO5                0x0010008a
+#define ROMTYPE_HD20A          0x0010008b
 
 #define ROMTYPE_NOT                    0x00800000
 #define ROMTYPE_QUAD           0x01000000
index 0646b25c7bd1d8eb65ef574b6c9867a7f4b6db5d..0a2acd62a9a9ed93f93ec82693e289a47461d8c5 100644 (file)
@@ -255,7 +255,10 @@ bool system2000_init(struct autoconfig_info *aci);
 void system2000_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
 
 bool omtiadapter_init(struct autoconfig_info *aci);
-void omtiadapter_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+void omtiadapter_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+
+bool hd20_init(struct autoconfig_info *aci);
+void hd20_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
 
 bool phoenixboard_init(struct autoconfig_info *aci);
 void phoenixboard_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
index f0f656ef3d4343370805cfec5e7e50ce899b482d..78383d06f1838c904776dcf004b998050ee74980 100644 (file)
@@ -95,7 +95,7 @@ struct romdata *getromdatabypath (const TCHAR *path)
        return NULL;
 }
 
-#define NEXT_ROM_ID 267
+#define NEXT_ROM_ID 268
 
 #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 },
@@ -650,6 +650,8 @@ static struct romdata roms[] = {
        0xb475ff5f, 0x63609553,0x98b06812,0x23ade9ac,0x6ee31364,0x5375fce3, NULL, NULL },
        { _T("Hardital Synthesis"), 0, 0, 0, 0, _T("SYNTHESIS\0"), 32768, 266, 0, 0, ROMTYPE_SYNTHESIS, 0, 0, NULL,
        0x667c7616, 0x0eb1cb38,0x3133f070,0x7cb57944,0xc516f236,0xbad4d4f6, NULL, NULL },
+       { _T("Combitec HD20A/HD40A"), 0, 0, 0, 0, _T("HD20A\0"), 32768, 267, 0, 0, ROMTYPE_HD20A, 0, 0, NULL,
+       0x0e7391b4, 0x7c365adb,0x3496c479,0x5e94a166,0xd834254a,0x6112d91c, 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") },
index 0cc2ae68c0a26c08c6d7d5bd7052b1cd838a038a..29dda9c42b1de0c1760b3dffeb9c30a077dc5fcf 100644 (file)
--- a/scsi.cpp
+++ b/scsi.cpp
@@ -79,7 +79,8 @@
 #define OMTI_ALF2 44
 #define NCR5380_SYNTHESIS 45 // clone of ICD AdSCSI
 #define NCR5380_FIREBALL 46
-#define NCR_LAST 47
+#define OMTI_HD20 47
+#define NCR_LAST 48
 
 extern int log_scsiemu;
 
@@ -3449,7 +3450,7 @@ static uae_u32 ncr80_bget2(struct soft_scsi *ncr, uaecptr addr, int size)
                if (reg >= 0)
                        v = omti_bget(ncr, reg);
 
-       } else if (ncr->type == OMTI_ALF2) {
+       } else if (ncr->type == OMTI_ALF2 || ncr->type == OMTI_HD20) {
 
                reg = alf2_reg(ncr, origaddr, false);
                if (reg >= 0) {
@@ -3918,7 +3919,7 @@ static void ncr80_bput2(struct soft_scsi *ncr, uaecptr addr, uae_u32 val, int si
                if (reg >= 0)
                        omti_bput(ncr, reg, val);
 
-       } else if (ncr->type == OMTI_ALF2) {
+       } else if (ncr->type == OMTI_ALF2 || ncr->type == OMTI_HD20) {
 
                reg = alf2_reg(ncr, origaddr, true);
                if (reg >= 0)
@@ -5089,6 +5090,37 @@ void alf2_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig
        generic_soft_scsi_add(ch, ci, rc, OMTI_ALF2, 65536, 32768, ROMTYPE_ALF2);
 }
 
+bool hd20_init(struct autoconfig_info *aci)
+{
+       aci->start = 0xf00000;
+       aci->size = 0x10000;
+       scsi_add_reset();
+       if (!aci->doinit)
+               return true;
+
+       struct soft_scsi *scsi = getscsi(aci->rc);
+       if (!scsi)
+               return false;
+
+       load_rom_rc(aci->rc, ROMTYPE_HD20A, 32768, 0, scsi->rom, 32768, 0);
+
+       scsi->baseaddress = 0xf00000;
+       scsi->baseaddress2 = 0x810000;
+       scsi->board_mask = 65535;
+
+       map_banks(scsi->bank, scsi->baseaddress >> 16, 1, 0);
+       map_banks(scsi->bank, scsi->baseaddress2 >> 16, 1, 0);
+
+       scsi->configured = 1;
+       aci->addrbank = scsi->bank;
+       return true;
+}
+
+void hd20_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+{
+       generic_soft_scsi_add(ch, ci, rc, OMTI_HD20, 65536, 32768, ROMTYPE_HD20A);
+}
+
 bool promigos_init(struct autoconfig_info *aci)
 {
        aci->start = 0xf40000;
@@ -5208,7 +5240,7 @@ bool omtiadapter_init(struct autoconfig_info *aci)
        return true;
 }
 
-void omtiadapter_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+void omtiadapter_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
 {
        generic_soft_scsi_add(ch, ci, rc, OMTI_ADAPTER, 65536, 0, ROMTYPE_OMTIADAPTER);
 }