]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
DraCo is moved under MacroSystem and boot rom moved from extended rom to accelerator...
authorToni Wilen <twilen@winuae.net>
Fri, 5 Jan 2024 17:35:52 +0000 (19:35 +0200)
committerToni Wilen <twilen@winuae.net>
Fri, 5 Jan 2024 17:35:52 +0000 (19:35 +0200)
draco.cpp
expansion.cpp
include/cpuboard.h
rommgr.cpp

index cdb2b661449e786ca969c29ecbc756346b3583b7..1ca710becfc3a3664876b02a7308f1c1d585e1e3 100644 (file)
--- a/draco.cpp
+++ b/draco.cpp
@@ -19,6 +19,7 @@
 #include "draco.h"
 #include "zfile.h"
 #include "keybuf.h"
+#include "rommgr.h"
 
 static int maxcnt = 100;
 
@@ -147,6 +148,8 @@ int draco_kbc_translate(uint8_t val);
 
 static void *draco_serial[2];
 static void *draco_mouse_base, *draco_keyboard;
+static uae_u8 *dracorom;
+static int dracoromsize;
 
 static uae_u8 draco_intena, draco_intpen, draco_svga_irq_state;
 static uae_u16 draco_timer, draco_timer_latch;
@@ -597,32 +600,6 @@ static void draco_1wire_reset(void)
 #endif
 }
 
-static uae_u32 REGPARAM2 draco_lget(uaecptr addr)
-{
-       uae_u32 l = 0;
-
-       if ((addr & 0x07c00000) == 0x04000000) {
-
-               //write_log("draco scsi lput %08x %08x\n", addr, l);
-               int reg = addr & 0xffff;
-               l |= cpuboard_ncr710_io_bget(reg + 3) << 0;
-               l |= cpuboard_ncr710_io_bget(reg + 2) << 8;
-               l |= cpuboard_ncr710_io_bget(reg + 1) << 16;
-               l |= cpuboard_ncr710_io_bget(reg + 0) << 24;
-
-       } else {
-               write_log(_T("draco_lget %08x %08x\n"), addr, M68K_GETPC);
-       }
-
-       return l;
-}
-static uae_u32 REGPARAM2 draco_wget(uaecptr addr)
-{
-       write_log(_T("draco_wget %08x %08x\n"), addr, M68K_GETPC);
-
-       return 0;
-}
-
 void draco_bustimeout(uaecptr addr)
 {
        write_log("draco bus timeout %08x\n", addr);
@@ -764,6 +741,14 @@ static uae_u32 REGPARAM2 draco_bget(uaecptr addr)
                                v = 0;
                                break;
                }
+
+       } else if (addr < 0x00100000) {
+
+               // boot ROM
+               if (addr < dracoromsize) {
+                       v = dracorom[addr];
+               }
+
        } else {
 
                write_log("draco unknown bank read %08x\n", addr);
@@ -772,6 +757,51 @@ static uae_u32 REGPARAM2 draco_bget(uaecptr addr)
        return v;
 }
 
+static uae_u32 REGPARAM2 draco_lget(uaecptr addr)
+{
+       uae_u32 l = 0;
+
+       if ((addr & 0x07c00000) == 0x04000000) {
+
+               //write_log("draco scsi lput %08x %08x\n", addr, l);
+               int reg = addr & 0xffff;
+               l |= cpuboard_ncr710_io_bget(reg + 3) << 0;
+               l |= cpuboard_ncr710_io_bget(reg + 2) << 8;
+               l |= cpuboard_ncr710_io_bget(reg + 1) << 16;
+               l |= cpuboard_ncr710_io_bget(reg + 0) << 24;
+
+       } else if (addr < 0x00100000) {
+
+               l = draco_bget(addr + 0) << 24;
+               l |= draco_bget(addr + 1) << 16;
+               l |= draco_bget(addr + 2) << 8;
+               l |= draco_bget(addr + 3) << 0;
+
+       } else {
+
+               write_log(_T("draco_lget %08x %08x\n"), addr, M68K_GETPC);
+       }
+
+       return l;
+}
+static uae_u32 REGPARAM2 draco_wget(uaecptr addr)
+{
+       uae_u16 v = 0;
+
+       if (addr < 0x00100000) {
+
+               v = draco_bget(addr + 0) << 8;
+               v |= draco_bget(addr + 1);
+
+       } else {
+
+               write_log(_T("draco_wget %08x %08x\n"), addr, M68K_GETPC);
+
+       }
+
+       return v;
+}
+
 static void REGPARAM2 draco_lput(uaecptr addr, uae_u32 l)
 {
        if ((addr & 0x07c00000) == 0x04000000) {
@@ -960,6 +990,10 @@ static void REGPARAM2 draco_bput(uaecptr addr, uae_u32 b)
                                break;
                }
 
+       } else if (addr < 0x00100000) {
+
+               // boot ROM
+
        } else {
        
                write_log("draco unknown bank write %08x\n", addr);
@@ -967,11 +1001,25 @@ static void REGPARAM2 draco_bput(uaecptr addr, uae_u32 b)
        }
 }
 
+static int REGPARAM2 draco_check(uaecptr addr, uae_u32 size)
+{
+       if (addr >= 0x00100000) {
+               return 0;
+       }
+       return 1;
+}
+
+static uae_u8 *REGPARAM2 draco_xlate(uaecptr addr)
+{
+       addr &= 0xfffff;
+       return dracorom + addr;
+}
+
 static addrbank draco_bank = {
        draco_lget, draco_wget, draco_bget,
        draco_lput, draco_wput, draco_bput,
-       default_xlate, default_check, NULL, NULL, _T("DraCo mainboard"),
-       dummy_lgeti, dummy_wgeti, ABFLAG_IO, S_READ, S_WRITE
+       draco_xlate, draco_check, NULL, NULL, _T("DraCo mainboard"),
+       draco_lget, draco_wget, ABFLAG_IO, S_READ, S_WRITE
 };
 
 
@@ -1080,6 +1128,8 @@ void draco_free(void)
        }
        xfree(draco_mouse_base);
        draco_mouse_base = NULL;
+       xfree(dracorom);
+       dracorom = NULL;
 }
 
 void draco_reset(int hardreset)
@@ -1111,6 +1161,7 @@ void draco_reset(int hardreset)
        draco_superio_cfg[14] = 1;
        memset(draco_reg, 0, sizeof(draco_reg));
        draco_reg[1] = DRCNTRL_FDCINTENA | DRCNTRL_KBDINTENA;
+       draco_reg[5] = 0xff;
 
        draco_keyboard_reset();
        draco_1wire_rtc_validate();
@@ -1141,6 +1192,15 @@ void draco_init(void)
                zfile_fclose(draco_flashfile);
        }
 
+       int idx;
+       const TCHAR *romname = NULL;
+       struct boardromconfig *brc;
+       brc = get_device_rom(&currprefs, ROMTYPE_CPUBOARD, 0, &idx);
+       if (brc) {
+               romname = brc->roms[idx].romfile;
+               dracorom = zfile_load_file(romname, &dracoromsize);
+       }
+
        draco_reset(1);
 
        device_add_rethink(draco_irq);
@@ -1166,7 +1226,7 @@ void draco_map_overlay(void)
        // hide cias
        map_banks(&dummy_bank, 0xa00000 >> 16, 0x200000 >> 16, 0);
 
-       map_banks(&extendedkickmem_bank, 0 >> 16, 524288 >> 16, 0);
+       map_banks(&draco_bank, 0 >> 16, 0x00200000 >> 16, 0);
        map_banks(&draco_bank, 0x01000000 >> 16, 0x01c00000 >> 16, 0);
        map_banks(&kickmem_bank, 0x02c00000 >> 16, 524288 >> 16, 0);
        map_banks(&draco_bank, 0x04000000 >> 16, 0x01000000 >> 16, 0);
index 229de3939a8f4cc208115fb3df64333e425ae75a..8c4b8f17aa71c26a2988a151b07c4149cf7d692a 100644 (file)
@@ -6558,6 +6558,16 @@ static const struct cpuboardsubtype macrosystem_sub[] = {
                0,
                128 * 1024 * 1024,
        },
+       {
+               _T("DraCo"),
+               _T("draco"),
+               ROMTYPE_CB_DRACO | ROMTYPE_NONE, 0, 4,
+               draco_add_scsi_unit, EXPANSIONTYPE_SCSI,
+               BOARD_MEMORY_HIGHMEM,
+               128 * 1024 * 1024,
+               0,
+               ncr710_draco_init, NULL, BOARD_NONAUTOCONFIG_BEFORE, 1,
+       },
        {
                NULL
        }
@@ -6881,22 +6891,6 @@ static const struct cpuboardsubtype harms_sub[] = {
        }
 };
 
-static const struct cpuboardsubtype draco_sub[] = {
-       {
-               _T("DraCo"),
-               _T("draco"),
-               ROMTYPE_CB_DRACO | ROMTYPE_NONE, 0, 4,
-               draco_add_scsi_unit, EXPANSIONTYPE_SCSI,
-               BOARD_MEMORY_HIGHMEM,
-               128 * 1024 * 1024,
-               0,
-               ncr710_draco_init, NULL, BOARD_NONAUTOCONFIG_BEFORE, 1,
-       },
-       {
-               NULL
-       }
-};
-
 static const struct cpuboardsubtype dummy_sub[] = {
        { NULL }
 };
@@ -6987,11 +6981,6 @@ const struct cpuboardtype cpuboards[] = {
                _T("Harms"),
                harms_sub, 0
        },
-       {
-               BOARD_DRACO,
-               _T("Draco"),
-               draco_sub, 0
-       },
        {
                NULL
        }
index 2a95a1281aabfe4e231311e9f49dfab5b3518008..12c8f1757306a2833313515789eb097f30ee1145 100644 (file)
@@ -79,6 +79,7 @@ void cpuboard_gvpmaprom(int);
 #define BOARD_MACROSYSTEM 7
 #define BOARD_MACROSYSTEM_SUB_WARPENGINE_A4000 0
 #define BOARD_MACROSYSTEM_SUB_FALCON040 1
+#define BOARD_MACROSYSTEM_SUB_DRACO 2
 
 #define BOARD_MTEC 8
 #define BOARD_MTEC_SUB_EMATRIX530 0
@@ -116,7 +117,4 @@ void cpuboard_gvpmaprom(int);
 #define BOARD_HARMS 16
 #define BOARD_HARMS_SUB_3KPRO 0
 
-#define BOARD_DRACO 17
-#define BOARD_DRACO_SUB_DRACO 0
-
 #endif /* UAE_CPUBOARD_H */
index 0dc0ffe35fa56dfd58c703d6bdd86e67431f7b34..bb0f26f9b59da1616257f7e044a761b69d0fc97d 100644 (file)
@@ -297,9 +297,9 @@ static struct romdata roms[] = {
        0x2ec384e3,0x47f9ee6d, 0x0f8ac5a6,0x5c6eddc3,0x0bcd47c8,0x574d8725, NULL, NULL, 4 },
        ALTROMPN(231, 1, 1, 524288, ROMTYPE_EVEN, _T("74095 00 717 02 01 U4"), 0x1bdcd18c, 0xabc7b734,0x1f8df24d,0xd4f1d062,0xfc0f7680,0x4d1053b9)
        ALTROMPN(231, 1, 2, 524288, ROMTYPE_ODD , _T("74095 00 717 02 02 U5"), 0x6ccb0431, 0xa2a43444,0xbeda38be,0x1fa5cabe,0x75fc4def,0x063bcd7a)
-       { _T("DraCo Boot ROM v1.3"), 1, 3, 1, 3, _T("DRACO\0"), 131072, 234, 2 | 4, 0, ROMTYPE_EXTCDTV, 0, 0, NULL,
+       { _T("DraCo Boot ROM v1.3"), 1, 3, 1, 3, _T("DRACO\0"), 131072, 234, 2 | 4, 0, ROMTYPE_CB_DRACO, 0, 0, NULL,
        0x0e9c5899,0x82151324,0x01207554,0x60c8a068,0x4793ec18,0x3f744d74, NULL, NULL, 4 },
-       { _T("DraCo Boot ROM v1.5"), 1, 5, 1, 5, _T("DRACO\0"), 131072, 311, 2 | 4, 0, ROMTYPE_EXTCDTV, 0, 0, NULL,
+       { _T("DraCo Boot ROM v1.5"), 1, 5, 1, 5, _T("DRACO\0"), 131072, 311, 2 | 4, 0, ROMTYPE_CB_DRACO, 0, 0, NULL,
        0x7b4cdd4a,0x4d383adb,0x85c681a3,0xb625dcda,0x7a229a17,0x6af4d161, NULL, NULL, 4 },
 
        { _T("CD32 KS ROM v3.1"), 3, 1, 40, 60, _T("CD32\0"), 524288, 18, 1, 0, ROMTYPE_KICKCD32, 0, 0, NULL,