]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
3410b6
authorToni Wilen <twilen@winuae.net>
Mon, 17 Apr 2017 16:21:22 +0000 (19:21 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 17 Apr 2017 16:21:22 +0000 (19:21 +0300)
13 files changed:
cfgfile.cpp
debug.cpp
expansion.cpp
include/options.h
main.cpp
newcpu.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32.h
od-win32/win32gui.cpp
od-win32/winuae_msvc15/winuae_msvc.vcxproj
od-win32/winuae_msvc15/winuae_msvc.vcxproj.filters
od-win32/winuaechangelog.txt

index 42bf8eab39877a8431806be9a1cfd65254dadd4c..8c0f9f6d4dc7a60cab1f006b0f2a7b1370ba9249 100644 (file)
@@ -309,6 +309,7 @@ static const TCHAR *obsolete[] = {
        _T("gfx_correct_aspect"), _T("gfx_autoscale"), _T("parallel_sampler"), _T("parallel_ascii_emulation"),
        _T("avoid_vid"), _T("avoid_dga"), _T("z3chipmem_size"), _T("state_replay_buffer"), _T("state_replay"),
        _T("z3realmapping"), _T("force_0x10000000_z3"),
+       _T("fpu_arithmetic_exceptions"),
        
        _T("gfx_filter_vert_zoom"),_T("gfx_filter_horiz_zoom"),
        _T("gfx_filter_vert_zoom_mult"), _T("gfx_filter_horiz_zoom_mult"),
@@ -2221,7 +2222,6 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
        cfgfile_dwrite_bool (f, _T("cpu_no_unimplemented"), p->int_no_unimplemented);
        cfgfile_write_bool (f, _T("fpu_strict"), p->fpu_strict);
        cfgfile_dwrite_bool (f, _T("fpu_softfloat"), p->fpu_softfloat);
-       cfgfile_dwrite_bool (f, _T("fpu_arithmetic_exceptions"), p->fpu_exceptions);
 
        cfgfile_write_bool (f, _T("rtg_nocustom"), p->picasso96_nocustom);
        cfgfile_write (f, _T("rtg_modes"), _T("0x%x"), p->picasso96_modeflags);
@@ -4843,7 +4843,6 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH
                || cfgfile_yesno (option, value, _T("serial_direct"), &p->serial_direct)
                || cfgfile_yesno (option, value, _T("fpu_strict"), &p->fpu_strict)
                || cfgfile_yesno (option, value, _T("fpu_softfloat"), &p->fpu_softfloat)
-               || cfgfile_yesno (option, value, _T("fpu_arithmetic_exceptions"), &p->fpu_exceptions)
                || cfgfile_yesno (option, value, _T("comp_nf"), &p->compnf)
                || cfgfile_yesno (option, value, _T("comp_constjump"), &p->comp_constjump)
 #ifdef USE_JIT_FPU
@@ -6998,7 +6997,6 @@ void default_prefs (struct uae_prefs *p, bool reset, int type)
        p->int_no_unimplemented = false;
        p->fpu_strict = 0;
        p->fpu_softfloat = 0;
-       p->fpu_exceptions = 0;
        p->m68k_speed = 0;
        p->cpu_compatible = 1;
        p->address_space_24 = 1;
index 3c4f8a0a05c00d723578befa67a8e43ca0eb0723..651d67763c9c30537664f2cb60abd87aa790ea29 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -43,6 +43,7 @@
 #include "ppc/ppcd.h"
 #include "uae/io.h"
 #include "uae/ppc.h"
+#include "drawing.h"
 
 int debugger_active;
 static uaecptr skipaddr_start, skipaddr_end;
@@ -1355,9 +1356,7 @@ static void debug_draw_cycles (uae_u8 *buf, int bpp, int line, int width, int he
        struct dma_rec *dr;
        int t;
 
-       if (debug_dma >= 5)
-               yplus = 3;
-       else if (debug_dma >= 4)
+       if (debug_dma >= 4)
                yplus = 2;
        else
                yplus = 1;
@@ -1369,7 +1368,9 @@ static void debug_draw_cycles (uae_u8 *buf, int bpp, int line, int width, int he
                xplus = 1;
 
        t = dma_record_toggle ^ 1;
-       y = line / yplus - 8;
+       y = line / yplus;
+       if (yplus < 2)
+               y -= 8;
 
        if (y < 0)
                return;
@@ -1385,11 +1386,8 @@ static void debug_draw_cycles (uae_u8 *buf, int bpp, int line, int width, int he
                uae_u32 c = debug_colors[0].l[0];
                xx = x * xplus + dx;
                dr = &dma_record[t][y * NR_DMA_REC_HPOS + x];
-               if (dr->reg != 0xffff) {
-                       if (debug_colors[dr->type].enabled)
-                               c = debug_colors[dr->type].l[dr->extra];
-                       else
-                               c = 0;
+               if (dr->reg != 0xffff && debug_colors[dr->type].enabled) {
+                       c = debug_colors[dr->type].l[dr->extra];
                }
                if (dr->intlev > intlev)
                        intlev = dr->intlev;
@@ -5222,6 +5220,7 @@ static bool debug_line (TCHAR *input)
                                        if (debug_dma) {
                                                console_out_f (_T("DMA debugger disabled\n"), debug_dma);
                                                record_dma_reset();
+                                               reset_drawing();
                                                debug_dma = 0;
                                        }
                                } else if (*inptr == 'm') {
@@ -5270,8 +5269,10 @@ static bool debug_line (TCHAR *input)
                                                if (debug_dma && v1 >= 0 && v2 >= 0) {
                                                        decode_dma_record (v2, v1, cmd == 'v', false);
                                                } else {
-                                                       if (debug_dma)
+                                                       if (debug_dma) {
                                                                record_dma_reset();
+                                                               reset_drawing();
+                                                       }
                                                        debug_dma = v1 < 0 ? -v1 : 1;
                                                        console_out_f (_T("DMA debugger enabled, mode=%d.\n"), debug_dma);
                                                }
index 8fb95547c6d232afd0b699b933a6c0457bb72483..7a17c31d01e4157b918a23f819078e3440de7d35 100644 (file)
@@ -3563,16 +3563,20 @@ void expansion_map(void)
        // map non-autoconfig ram boards
        for (int i = 0; i < MAX_RAM_BOARDS; i++) {
                struct ramboard *rb = &currprefs.fastmem[i];
-               if (rb->manual_config) {
-                       map_banks(&fastmem_bank[i], rb->start_address >> 16, (rb->end_address - rb->start_address + 1) >> 16, 0);
-               } else if (rb->no_reset_unmap && rb->start_address) {
-                       map_banks(&fastmem_bank[i], rb->start_address >> 16, rb->size >> 16, 0);
+               if (rb->size) {
+                       if (rb->manual_config) {
+                               map_banks(&fastmem_bank[i], rb->start_address >> 16, (rb->end_address - rb->start_address + 1) >> 16, 0);
+                       } else if (rb->no_reset_unmap && rb->start_address) {
+                               map_banks(&fastmem_bank[i], rb->start_address >> 16, rb->size >> 16, 0);
+                       }
                }
                rb = &currprefs.z3fastmem[i];
-               if (rb->manual_config) {
-                       map_banks(&z3fastmem_bank[i], rb->start_address >> 16, (rb->end_address - rb->start_address + 1) >> 16, 0);
-               } else if (rb->no_reset_unmap && rb->start_address) {
-                       map_banks(&z3fastmem_bank[i], rb->start_address >> 16, rb->size >> 16, 0);
+               if (rb->size) {
+                       if (rb->manual_config) {
+                               map_banks(&z3fastmem_bank[i], rb->start_address >> 16, (rb->end_address - rb->start_address + 1) >> 16, 0);
+                       } else if (rb->no_reset_unmap && rb->start_address) {
+                               map_banks(&z3fastmem_bank[i], rb->start_address >> 16, rb->size >> 16, 0);
+                       }
                }
        }
        if (currprefs.z3chipmem_size) {
@@ -4444,6 +4448,15 @@ const struct expansionromtype expansionroms[] = {
                false, EXPANSIONTYPE_IDE,
                2092, 8, 0
        },
+       {
+               _T("malibu"), _T("Malibu"), _T("California Access"),
+               malibu_init, NULL, malibu_add_scsi_unit, ROMTYPE_MALIBU, 0, 0, BOARD_AUTOCONFIG_Z2, false,
+               NULL, 0,
+               true, EXPANSIONTYPE_SCSI,
+               0, 0, 0, false, NULL,
+               false, 0, NULL,
+               { 0xd1, 0x01, 0x00, 0x00, 0x08, 0x11, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00 },
+       },
        {
                _T("cltda1000scsi"), _T("A1000/A2000 SCSI"), _T("C-Ltd"),
                cltda1000scsi_init, NULL, cltda1000scsi_add_scsi_unit, ROMTYPE_CLTDSCSI | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, false,
@@ -4474,6 +4487,12 @@ const struct expansionromtype expansionroms[] = {
                0, 0, 0, false, NULL,
                true, 0, a4091_settings
        },
+       {
+               _T("comspec1000"), _T("SA-1000"), _T("Comspec"),
+               comspec_init, NULL, comspec_add_scsi_unit, ROMTYPE_COMSPEC, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+               NULL, 0,
+               true, EXPANSIONTYPE_SCSI
+       },
        {
                _T("dataflyerscsiplus"), _T("DataFlyer SCSI+"), _T("Expansion Systems"),
                dataflyer_init, NULL, dataflyer_add_scsi_unit, ROMTYPE_DATAFLYERP | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
@@ -5408,6 +5427,10 @@ static const struct expansionboardsettings apollo_settings[] = {
                _T("SCSI module installed"),
                _T("scsi")
        },
+       {
+               _T("Memory disable"),
+               _T("memory")
+       },
        {
                NULL
        }
@@ -5419,8 +5442,8 @@ static const struct cpuboardsubtype apollo_sub[] = {
                _T("Apollo"),
                ROMTYPE_CB_APOLLO, 0,
                apollo_add_scsi_unit, EXPANSIONTYPE_SCSI,
-               BOARD_MEMORY_HIGHMEM,
-               128 * 1024 * 1024,
+               BOARD_MEMORY_CUSTOM_32,
+               64 * 1024 * 1024,
                0,
                apollo_init_cpu, NULL, 2, 0,
                apollo_settings
index b6051a3ac404588f156f542966f4626d2895bbcd..5d749eeaeaa5cf66949aca87a547ef0e3e7f66c4 100644 (file)
@@ -470,9 +470,7 @@ struct uae_prefs {
        bool comp_constjump;
        int cachesize;
        bool fpu_strict;
-
        bool fpu_softfloat;
-       bool fpu_exceptions;
 
        int gfx_framerate, gfx_autoframerate;
        struct wh gfx_size_win;
index eba0d00642f425aea3186c98fc129e9b2c441061..7144f00a895e95e2f5b73601b5a0bdc5e0bccc6f 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -296,10 +296,9 @@ void fixup_cpu (struct uae_prefs *p)
                error_log (_T("JIT is not compatible with unimplemented CPU/FPU instruction emulation."));
                p->fpu_no_unimplemented = p->int_no_unimplemented = false;
        }
-       if (p->cachesize && p->compfpu && (p->fpu_softfloat || p->fpu_exceptions)) {
+       if (p->cachesize && p->compfpu && p->fpu_softfloat) {
                error_log (_T("JIT FPU emulation is not compatible with softfloat FPU emulation."));
                p->fpu_softfloat = false;
-               p->fpu_exceptions = false;
        }
 
 #if 0
@@ -357,6 +356,8 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
                p->fastmem[0].size = p->cpuboardmem1_size;
        } else if (cpuboard_memorytype(p) == BOARD_MEMORY_25BITMEM) {
                p->mem25bit_size = p->cpuboardmem1_size;
+       } else if (cpuboard_memorytype(p) == BOARD_MEMORY_CUSTOM_32) {
+               p->mem25bit_size = 0;
        }
 
        if (((p->chipmem_size & (p->chipmem_size - 1)) != 0 && p->chipmem_size != 0x180000)
index 7a99c54663fce28e40242c30c4708c658629dacb..d1f7f9d3c297f8ad5f91cfdaf3de25550e0711b3 100644 (file)
@@ -1561,8 +1561,7 @@ static int check_prefs_changed_cpu2(void)
                || currprefs.cpu_compatible != changed_prefs.cpu_compatible
                || currprefs.cpu_cycle_exact != changed_prefs.cpu_cycle_exact
                || currprefs.cpu_memory_cycle_exact != changed_prefs.cpu_memory_cycle_exact
-               || currprefs.fpu_softfloat != changed_prefs.fpu_softfloat
-               || currprefs.fpu_exceptions != changed_prefs.fpu_exceptions) {
+               || currprefs.fpu_softfloat != changed_prefs.fpu_softfloat) {
                        cpu_prefs_changed_flag |= 1;
        }
        if (changed
index 9e9382f940b24ff1e0bdcaa2f2d06fab8ef6a38a..b12891e020e94927387791b7b9f6a80460b4bbd5 100644 (file)
 #define IDC_22KHZ                       1233
 #define IDC_SPEED_x86                   1233
 #define IDC_44KHZ                       1234
-#define IDC_FPU_EXCEPTIONS              1234
 #define IDC_48KHZ                       1235
 #define IDC_SOUNDSIZE                   1236
 #define IDC_FREQUENCY                   1237
index 8ddb62daa0ad9f697df1419672a78d6c8f98e005..42b03a76ded0f4e076661eaf6f298406b4be8afb 100644 (file)
@@ -310,7 +310,6 @@ BEGIN
     CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,221,299,72,10
     CONTROL         "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,299,68,11
     CONTROL         "Softfloat FPU emulation",IDC_FPU_SOFTFLOAT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,285,115,10
-    CONTROL         "Arithmetic exceptions",IDC_FPU_EXCEPTIONS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,298,115,10
 END
 
 IDD_FLOPPY DIALOGEX 0, 0, 396, 261
index 3c1b1bbcbe840c32ab5b11d7bcea6123dcd296d3..cae655d91217cd9ef4e519fe2bc4dfc43bf60f8d 100644 (file)
 #define LANG_DLL_FULL_VERSION_MATCH 1
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("5")
+#define WINUAEBETA _T("6")
 #else
 #define WINUAEBETA _T("")
 #endif
 
-#define WINUAEDATE MAKEBD(2017, 4, 2)
+#define WINUAEDATE MAKEBD(2017, 4, 17)
 
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
index df5f75603efd2de7da5a15a09e6d993b93939630..8d1c9021a3528331e711099357054062e2c2a993 100644 (file)
@@ -11312,7 +11312,6 @@ static void enable_for_cpudlg (HWND hDlg)
        ew (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_model > 0);
        ew (hDlg, IDC_FPU_UNIMPLEMENTED, workprefs.fpu_model && !workprefs.cachesize);
        ew (hDlg, IDC_FPU_SOFTFLOAT, workprefs.fpu_model && (!workprefs.compfpu || !workprefs.cachesize));
-       ew (hDlg, IDC_FPU_EXCEPTIONS, workprefs.fpu_model && (!workprefs.compfpu || !workprefs.cachesize) && workprefs.fpu_softfloat);
        ew (hDlg, IDC_CPU_UNIMPLEMENTED, workprefs.cpu_model == 68060 && !workprefs.cachesize);
 #if 0
        ew (hDlg, IDC_CPU_MULTIPLIER, workprefs.cpu_cycle_exact);
@@ -11360,7 +11359,6 @@ static void values_to_cpudlg (HWND hDlg)
        CheckDlgButton (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_strict);
        CheckDlgButton (hDlg, IDC_FPU_UNIMPLEMENTED, !workprefs.fpu_no_unimplemented || workprefs.cachesize);
        CheckDlgButton (hDlg, IDC_FPU_SOFTFLOAT, workprefs.fpu_softfloat);
-       CheckDlgButton (hDlg, IDC_FPU_EXCEPTIONS, workprefs.fpu_exceptions);
        CheckDlgButton (hDlg, IDC_CPU_UNIMPLEMENTED, !workprefs.int_no_unimplemented || workprefs.cachesize);
        SendDlgItemMessage (hDlg, IDC_CPUIDLE, TBM_SETPOS, TRUE, workprefs.cpu_idle == 0 ? 0 : 12 - workprefs.cpu_idle / 15);
        SendDlgItemMessage (hDlg, IDC_PPC_CPUIDLE, TBM_SETPOS, TRUE, workprefs.ppc_cpu_idle);
@@ -11421,7 +11419,6 @@ static void values_from_cpudlg (HWND hDlg)
        workprefs.fpu_strict = ischecked (hDlg, IDC_COMPATIBLE_FPU) ? 1 : 0;
        workprefs.fpu_no_unimplemented = ischecked (hDlg, IDC_FPU_UNIMPLEMENTED) ? 0 : 1;
        workprefs.fpu_softfloat = ischecked (hDlg, IDC_FPU_SOFTFLOAT) ? 1 : 0;
-       workprefs.fpu_exceptions = (ischecked (hDlg, IDC_FPU_EXCEPTIONS) ? 1 : 0) && workprefs.fpu_softfloat;
        workprefs.int_no_unimplemented = ischecked (hDlg, IDC_CPU_UNIMPLEMENTED) ? 0 : 1;
        workprefs.address_space_24 = ischecked (hDlg, IDC_COMPATIBLE24) ? 1 : 0;
        workprefs.m68k_speed = ischecked (hDlg, IDC_CS_HOST) ? -1 : 0;
@@ -11526,7 +11523,6 @@ static void values_from_cpudlg (HWND hDlg)
        }
        if (workprefs.cachesize && workprefs.compfpu && workprefs.fpu_softfloat) {
                workprefs.fpu_softfloat = false;
-               workprefs.fpu_exceptions = false;
                setchecked(hDlg, IDC_FPU_SOFTFLOAT, false);
        }
        if (oldcache == 0 && workprefs.cachesize > 0) {
index 4bcd845a6aae6728b954f26df0e41594a1ff4b11..5bcd59ecf79ea579a9dbb49fa7279d0767363baa 100644 (file)
     <ClCompile Include="..\..\softfloat\softfloat.cpp" />
     <ClCompile Include="..\..\softfloat\softfloat_decimal.cpp" />
     <ClCompile Include="..\..\softfloat\softfloat_extension.cpp" />
+    <ClCompile Include="..\..\softfloat\softfloat_fpsp.cpp" />
     <ClCompile Include="..\..\specialmonitors.cpp" />
     <ClCompile Include="..\..\statusline.cpp" />
     <ClCompile Include="..\..\support\time.cpp" />
index 1c38334a38d13ad264818d16805c2fec579dc1da..abe3d6f6bb51f3b93ea62b9be3228ed7fe007d60 100644 (file)
@@ -65,6 +65,9 @@
     <Filter Include="support">
       <UniqueIdentifier>{fe9d96c8-c5ef-4f92-b9dc-79b5d3e4145c}</UniqueIdentifier>
     </Filter>
+    <Filter Include="softfloat">
+      <UniqueIdentifier>{b113952e-b596-4a9e-922f-8ccff5b915ed}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\ahidsound_dsonly.cpp">
     <ClCompile Include="..\..\fpp_softfloat.cpp">
       <Filter>common</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\softfloat\softfloat.cpp">
-      <Filter>qemu</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\softfloat\softfloat_extension.cpp">
-      <Filter>qemu</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\slirp_uae.cpp">
       <Filter>common</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\slirp\slirp.cpp">
+      <Filter>slirp</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\slirp\udp.cpp">
       <Filter>slirp</Filter>
     </ClCompile>
     <ClCompile Include="..\..\slirp\slirpdebug.cpp">
       <Filter>slirp</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\slirp\slirp.cpp">
-      <Filter>slirp</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\slirp\sbuf.cpp">
       <Filter>slirp</Filter>
     </ClCompile>
     <ClCompile Include="..\..\slirp\bootp.cpp">
       <Filter>slirp</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\softfloat\softfloat.cpp">
+      <Filter>softfloat</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\softfloat\softfloat_decimal.cpp">
-      <Filter>qemu</Filter>
+      <Filter>softfloat</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\softfloat\softfloat_extension.cpp">
+      <Filter>softfloat</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\softfloat\softfloat_fpsp.cpp">
+      <Filter>softfloat</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
index 7cf7deb16b408f248c148c7043b00b1d86725ff5..250ad7b706da3b749c8ec0723dedf7c63d64a234 100644 (file)
@@ -4,6 +4,44 @@ JIT Direct current rules are less complex now. It automatically switches off onl
   - RTG VRAM is outside of reserved natmem space. Workaround: Move RTG in earlier position using Hardware info GUI panel.\r
   Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI)\r
 \r
+\r
+Beta 6:\r
+\r
+- Comspec SA-1000 SCSI HD controller emulation. (Partially implemented only, don't have working install disk)\r
+- California Access Malibu SCSI HD controller emulation.\r
+- Stop immediately with halt code 11 if initial PC does not point to any valid address or is odd when CPU emulator starts.\r
+- Manually configured but disabled (size zero) Z2/Z3 banks were added to system.\r
+- Apollo 1240/1260 memory address space fixed. Memory disable jumper option added.\r
+- 68000 address error stacked PC was not correct in some read-modify-write instructions.\r
+- If Custom board order was enabled, expansion devices custom config setting(s) was not saved correctly.\r
+- Emulate rare 68040/060 FPU (with unimplemented instructions not emulated) fpsp (68040/060.library) software emulation case\r
+  correctly when both operands are denormals.\r
+- Show [Paused] in windowed mode title bar when in pause mode.\r
+- Transcendental functions added to softfloat emulation (Andreas Grabher). Not 100% identical results compared to\r
+  6888x but almost. Softfloat mode is now complete.\r
+- Removed Arithmetic exceptions option, it is now always enabled in softfloat mode. (It was only temporary option until\r
+  arithmetic exceptions are fully implemented)\r
+- Visual DMA debugger can be switched off, "vo".\r
+- Added visual DMA debugger -5 and -6 modes (-5 = larger overlay with "transparency" and -6 = no "transparency)\r
+- Added separate colors for visual DMA debugger copper wait and special cases (strobe extra cycle, 0xe0 cycle)\r
+- Added visual DMA debugger configuration: DMA channels can be disabled and colors can be changed.\r
+  "vm" = show status\r
+  "vm <channel> <sub index>" = enable/disable toggle. (sub index is not used but must be included)\r
+  "vm <channel> <sub index> <hex rgb>" = change color of channel. If sub index is zero: all sub index colors are changed.\r
+\r
+Comspec SA-1000:\r
+\r
+- Autobooting A1000 HD controller that also supports loading KS disk from HD!\r
+- Not RDB compatible.\r
+- WD33C93 based, PIO, handshake in hardware but still needs status register polling.\r
+- "ComspecHD.device 34.805 (17 Oct 1988)" added to ROM scanner.\r
+\r
+California Access Malibu:\r
+\r
+- 5380 SCSI, fake DMA (Long word)\r
+- "Malibu.device 1.0 (1 Jan 1991)" added to ROM scanner.\r
+\r
+\r
 Beta 5:\r
 \r
 - Added Actionware dual light gun adapter emulation. Second gun config entries added to Input panel.\r