This commit is contained in:
Toni Wilen 2017-05-07 16:59:32 +03:00
parent 7b92d17300
commit fd3579099a
14 changed files with 2888 additions and 2647 deletions

View File

@ -59,7 +59,7 @@
#define SPRBORDER 0
static int denise_resolution_min = 0;
static int high_res_mode = 0;
extern uae_u16 serper;
@ -1470,7 +1470,7 @@ static void toscr_2_2 (int nbits) { toscr_3_aga (0, 1, nbits, 2); }
static void toscr_2_2_oe (int oddeven, int step, int nbits) { toscr_3_aga (oddeven, step, nbits, 2); }
#endif
STATIC_INLINE void do_tosrc (int oddeven, int step, int nbits, int fm)
static void do_tosrc (int oddeven, int step, int nbits, int fm)
{
switch (fm) {
case 0:
@ -1618,7 +1618,7 @@ static void do_delays_fast_2_2 (int nbits) { do_delays_fast_3_aga (nbits, 2); }
// slower version, odd and even delays are different or crosses maxhpos
STATIC_INLINE void do_delays (int nbits, int fm)
static void do_delays (int nbits, int fm)
{
switch (fm) {
case 0:
@ -1636,7 +1636,7 @@ STATIC_INLINE void do_delays (int nbits, int fm)
}
// common optimized case: odd delay == even delay
STATIC_INLINE void do_delays_fast (int nbits, int fm)
static void do_delays_fast (int nbits, int fm)
{
switch (fm) {
case 0:
@ -1678,7 +1678,7 @@ static void toscr_right_edge (int nbits, int fm)
}
}
STATIC_INLINE void toscr_1 (int nbits, int fm)
static void toscr_1 (int nbits, int fm)
{
if (delay_cycles + nbits >= delay_lastcycle[lol]) {
toscr_right_edge (nbits, fm);
@ -1709,6 +1709,38 @@ STATIC_INLINE void toscr_1 (int nbits, int fm)
}
}
static void toscr_1_hires (int nbits_nres, int fm)
{
int maxnbits = 16 >> toscr_res_mult;
while (nbits_nres >= 0) {
int nbits = nbits_nres >= maxnbits ? maxnbits : nbits_nres;
if (delay_cycles + nbits >= delay_lastcycle[lol]) {
toscr_right_edge(nbits, fm);
} else {
do_delays(nbits, fm);
delay_cycles += nbits;
}
out_nbits += nbits;
if (out_nbits == 32) {
int i;
uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4;
for (i = 0; i < thisline_decision.nr_planes; i++) {
uae_u32 *dataptr32 = (uae_u32 *)dataptr;
if (*dataptr32 != outword[i]) {
thisline_changed = 1;
*dataptr32 = outword[i];
}
outword[i] = 0;
dataptr += MAX_WORDS_PER_LINE * 2;
}
out_offs++;
out_nbits = 0;
}
nbits_nres -= nbits;
}
}
static void toscr_fm0 (int);
static void toscr_fm1 (int);
static void toscr_fm2 (int);
@ -1844,8 +1876,8 @@ static void update_denise (int hpos)
flush_display (fetchmode);
toscr_res = GET_RES_DENISE (bplcon0d);
toscr_res2p = 2 << toscr_res;
if (toscr_res < denise_resolution_min) {
toscr_res_mult = denise_resolution_min - toscr_res;
if (high_res_mode && toscr_res < currprefs.gfx_resolution) {
toscr_res_mult = currprefs.gfx_resolution - toscr_res;
} else {
toscr_res_mult = 0;
}
@ -2580,6 +2612,7 @@ STATIC_INLINE int one_fetch_cycle_0 (int pos, int dma, int fm)
uae_abort (_T("toscr_nbits > 16 (%d)"), toscr_nbits);
toscr_nbits = 0;
}
if (toscr_nbits == 16)
flush_display (fm);
@ -5782,11 +5815,15 @@ static void BLTBDAT (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
int shift = bltcon1 >> 12;
if (bltcon1 & 2)
blt_info.bltbhold = v << (bltcon1 >> 12);
blt_info.bltbhold = (((uae_u32)v << 16) | blt_info.bltbold) >> (16 - shift);
else
blt_info.bltbhold = v >> (bltcon1 >> 12);
blt_info.bltbhold = (((uae_u32)blt_info.bltbold << 16) | v) >> shift;
blt_info.bltbdat = v;
blt_info.bltbold = v;
}
static void BLTCDAT (int hpos, uae_u16 v) { maybe_blit (hpos, 0); blt_info.bltcdat = v; reset_blit (0); }

View File

@ -1462,7 +1462,7 @@ void debug_draw(uae_u8 *buf, int bpp, int line, int width, int height, uae_u32 *
if (heatmap) {
debug_draw_heatmap(buf, bpp, line, width, height, xredcolors, xgreencolors, xbluecolors);
} else {
} else if (dma_record[0]) {
debug_draw_cycles(buf, bpp, line, width, height, xredcolors, xgreencolors, xbluecolors);
}
}

View File

@ -3338,7 +3338,7 @@ static void disk_doupdate_write (drive * drv, int floppybits)
static void update_jitter (void)
{
if (currprefs.floppy_random_bits_max > 0)
if (currprefs.floppy_random_bits_max > 0 && currprefs.floppy_random_bits_max >= currprefs.floppy_random_bits_min)
disk_jitter = ((uaerand () >> 4) % (currprefs.floppy_random_bits_max - currprefs.floppy_random_bits_min + 1)) + currprefs.floppy_random_bits_min;
else
disk_jitter = 0;
@ -3406,7 +3406,6 @@ static void disk_doupdate_predict (int startcycle)
diskevent_flag |= DISK_INDEXSYNC;
}
if (dskdmaen != DSKDMA_WRITE && mfmpos == drv->skipoffset) {
update_jitter ();
int skipcnt = disk_jitter;
while (skipcnt-- > 0) {
mfmpos++;
@ -3564,7 +3563,6 @@ static void disk_doupdate_read (drive * drv, int floppybits)
updatetrackspeed (drv, drv->mfmpos);
}
if (drv->mfmpos == drv->skipoffset) {
update_jitter ();
int skipcnt = disk_jitter;
while (skipcnt-- > 0) {
drv->mfmpos++;
@ -3794,12 +3792,17 @@ void DISK_update (int tohpos)
drv->mfmpos %= drv->tracklen;
}
int didaccess = 0;
bool done_jitter = false;
for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) {
drive *drv = &floppy[dr];
if (drv->motoroff || !drv->trackspeed)
continue;
if ((selected | disabled) & (1 << dr))
continue;
if (!done_jitter) {
update_jitter();
done_jitter = true;
}
/* write dma and wordsync enabled: read until wordsync match found */
if (dskdmaen == DSKDMA_WRITE && dma_enable)
disk_doupdate_write (drv, drv->floppybitcounter);
@ -3818,6 +3821,10 @@ void DISK_update (int tohpos)
if (dskdmaen != DSKDMA_OFF && dma_enable && dsklength2 == 0 && dsklength == 0)
disk_dmafinished ();
if (!done_jitter) {
update_jitter();
done_jitter = true;
}
disk_doupdate_predict (disk_hpos);
}

View File

@ -4331,6 +4331,15 @@ static const struct expansionboardsettings warpengine_settings[] = {
NULL
}
};
static const struct expansionboardsettings comspec_settings[] = {
{
_T("RTC"),
_T("rtc"),
},
{
NULL
}
};
static const struct expansionboardsettings a4091_settings[] = {
{
_T("Fast Bus"),
@ -4491,7 +4500,9 @@ const struct expansionromtype expansionroms[] = {
_T("comspec1000"), _T("SA-1000"), _T("Comspec"),
comspec_init, NULL, comspec_add_scsi_unit, ROMTYPE_COMSPEC, 0, 0, BOARD_AUTOCONFIG_Z2, true,
NULL, 0,
true, EXPANSIONTYPE_SCSI
true, EXPANSIONTYPE_SCSI,
0, 0, 0, false, NULL,
false, 0, comspec_settings
},
{
_T("dataflyerscsiplus"), _T("DataFlyer SCSI+"), _T("Expansion Systems"),

File diff suppressed because it is too large Load Diff

View File

@ -77,6 +77,7 @@ struct MultiDisplay {
TCHAR *fullname;
struct PicassoResolution *DisplayModes;
RECT rect;
RECT workrect;
};
extern struct MultiDisplay Displays[MAX_DISPLAYS + 1];

View File

@ -590,15 +590,76 @@ static void releasecapture (void)
void updatemouseclip (void)
{
if (showcursor) {
ClipCursor(NULL);
amigawinclip_rect = amigawin_rect;
if (0 && !isfullscreen()) {
RECT cliprect;
GetClipCursor(&cliprect);
IntersectRect(&amigawinclip_rect, &cliprect, &amigawin_rect);
#if MOUSECLIP_LOG
write_log (_T("CLIPW %dx%d %dx%d %d\n"), amigawinclip_rect.left, amigawinclip_rect.top, amigawinclip_rect.right, amigawinclip_rect.bottom, isfullscreen ());
#endif
if (!isfullscreen()) {
int idx = 0;
reenumeratemonitors();
while (Displays[idx].monitorname) {
RECT out;
struct MultiDisplay *md = &Displays[idx];
idx++;
if (md->rect.left == md->workrect.left && md->rect.right == md->workrect.right
&& md->rect.top == md->workrect.top && md->rect.bottom == md->workrect.bottom)
continue;
// not in this monitor?
if (!IntersectRect(&out, &md->rect, &amigawin_rect))
continue;
for (int e = 0; e < 4; e++) {
int v1, v2, x, y;
LONG *lp;
switch (e)
{
case 0:
default:
v1 = md->rect.left;
v2 = md->workrect.left;
lp = &amigawinclip_rect.left;
x = v1 - 1;
y = (md->rect.bottom - md->rect.top) / 2;
break;
case 1:
v1 = md->rect.top;
v2 = md->workrect.top;
lp = &amigawinclip_rect.top;
x = (md->rect.right - md->rect.left) / 2;
y = v1 - 1;
break;
case 2:
v1 = md->rect.right;
v2 = md->workrect.right;
lp = &amigawinclip_rect.right;
x = v1 + 1;
y = (md->rect.bottom - md->rect.top) / 2;
break;
case 3:
v1 = md->rect.bottom;
v2 = md->workrect.bottom;
lp = &amigawinclip_rect.bottom;
x = (md->rect.right - md->rect.left) / 2;
y = v1 + 1;
break;
}
// is there another monitor sharing this edge?
POINT pt;
pt.x = x;
pt.y = y;
if (MonitorFromPoint(pt, MONITOR_DEFAULTTONULL))
continue;
// restrict mouse clip bounding box to this edge
if (e >= 2) {
if (*lp > v2) {
*lp = v2;
}
} else {
if (*lp < v2) {
*lp = v2;
}
}
}
}
// Too small or invalid?
if (amigawinclip_rect.right <= amigawinclip_rect.left + 7 || amigawinclip_rect.bottom <= amigawinclip_rect.top + 7)
amigawinclip_rect = amigawin_rect;
}
#if MOUSECLIP_LOG
write_log (_T("CLIP %dx%d %dx%d %d\n"), amigawin_rect.left, amigawin_rect.top, amigawin_rect.right, amigawin_rect.bottom, isfullscreen ());
@ -5793,6 +5854,12 @@ static int parseargs (const TCHAR *argx, const TCHAR *np, const TCHAR *np2)
log_cd32 = 2;
return 1;
}
if (!_tcscmp(arg, _T("romlist"))) {
void dumpromlist(void);
dumpromlist();
return -1;
}
if (!np)
return 0;

View File

@ -20,12 +20,12 @@
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
#define WINUAEBETA _T("7")
#define WINUAEBETA _T("8")
#else
#define WINUAEBETA _T("")
#endif
#define WINUAEDATE MAKEBD(2017, 4, 22)
#define WINUAEDATE MAKEBD(2017, 5, 7)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")

View File

@ -765,6 +765,54 @@ static void modesList (struct MultiDisplay *md)
}
}
#ifndef ABM_GETAUTOHIDEBAREX
#define ABM_GETAUTOHIDEBAREX 0x0000000b
#endif
static void adjustappbar(RECT *monitor, RECT *workrect)
{
if (!os_vista)
return;
APPBARDATA abd;
// Isn't this ugly API?
for (int i = 0; i < 4; i++) {
abd.cbSize = sizeof abd;
abd.rc = *monitor;
abd.uEdge = i; // ABE_LEFT, TOP, RIGHT, BOTTOM
HWND hwndAutoHide = (HWND) SHAppBarMessage(ABM_GETAUTOHIDEBAREX, &abd);
if (hwndAutoHide == NULL)
continue;
WINDOWINFO wi;
wi.cbSize = sizeof wi;
if (!GetWindowInfo(hwndAutoHide, &wi))
continue;
int edge;
switch (i)
{
case ABE_LEFT:
edge = monitor->left + (wi.rcWindow.right - wi.rcWindow.left);
if (edge > workrect->left && edge < workrect->right)
workrect->left = edge;
break;
case ABE_RIGHT:
edge = monitor->right - (wi.rcWindow.right - wi.rcWindow.left);
if (edge < workrect->right && edge > workrect->left)
workrect->right = edge;
break;
case ABE_TOP:
edge = monitor->top + (wi.rcWindow.bottom - wi.rcWindow.top);
if (edge > workrect->top && edge < workrect->bottom)
workrect->top = edge;
break;
case ABE_BOTTOM:
edge = monitor->bottom - (wi.rcWindow.bottom - wi.rcWindow.top);
if (edge < workrect->bottom && edge > workrect->top)
workrect->bottom = edge;
break;
}
}
}
static BOOL CALLBACK monitorEnumProc (HMONITOR h, HDC hdc, LPRECT rect, LPARAM data)
{
struct MultiDisplay *md = Displays;
@ -775,6 +823,8 @@ static BOOL CALLBACK monitorEnumProc (HMONITOR h, HDC hdc, LPRECT rect, LPARAM d
if (!_tcscmp (md->adapterid, lpmi.szDevice)) {
TCHAR tmp[1000];
md->rect = lpmi.rcMonitor;
md->workrect = lpmi.rcWork;
adjustappbar(&md->rect, &md->workrect);
if (md->rect.left == 0 && md->rect.top == 0)
_stprintf (tmp, _T("%s (%d*%d)"), md->monitorname, md->rect.right - md->rect.left, md->rect.bottom - md->rect.top);
else
@ -790,6 +840,30 @@ static BOOL CALLBACK monitorEnumProc (HMONITOR h, HDC hdc, LPRECT rect, LPARAM d
return TRUE;
}
static BOOL CALLBACK monitorEnumProc2(HMONITOR h, HDC hdc, LPRECT rect, LPARAM data)
{
MONITORINFOEX lpmi;
lpmi.cbSize = sizeof lpmi;
GetMonitorInfo(h, (LPMONITORINFO)&lpmi);
for (int i = 0; i < MAX_DISPLAYS && Displays[i].monitorid; i++) {
struct MultiDisplay *md = &Displays[i];
if (!_tcscmp (md->adapterid, lpmi.szDevice) && !memcmp(&md->rect, &lpmi.rcMonitor, sizeof RECT)) {
md->workrect = lpmi.rcWork;
adjustappbar(&md->rect, &md->workrect);
return TRUE;
}
}
return TRUE;
}
void reenumeratemonitors(void)
{
for (int i = 0; i < MAX_DISPLAYS; i++) {
struct MultiDisplay *md = &Displays[i];
memcpy(&md->workrect, &md->rect, sizeof RECT);
}
EnumDisplayMonitors (NULL, NULL, monitorEnumProc2, NULL);
}
static void getd3dmonitornames (void)
{
struct MultiDisplay *md = Displays;
@ -3371,7 +3445,8 @@ static bool vblanklaceskip_check (void)
return false;
}
getvblankpos (&vp, false);
write_log (_T("Interlaced frame type mismatch %d<>%d (%d,%d)\n"), vblankbaselace_chipset, vblankthread_oddeven, vp, prevvblankpos);
if (vp >= maxscanline / 20 && vp <= maxscanline - maxscanline / 20)
write_log (_T("Interlaced frame type mismatch %d<>%d (%d,%d)\n"), vblankbaselace_chipset, vblankthread_oddeven, vp, prevvblankpos);
return true;
}

View File

@ -9,6 +9,7 @@
extern void sortdisplays (void);
extern void enumeratedisplays (void);
extern void reenumeratemonitors(void);
int WIN32GFX_IsPicassoScreen (void);
int WIN32GFX_GetWidth (void);

View File

@ -872,6 +872,7 @@
<ClCompile Include="..\..\qemuvga\qemu.cpp" />
<ClCompile Include="..\..\qemuvga\qemuuaeglue.cpp" />
<ClCompile Include="..\..\qemuvga\vga.cpp" />
<ClCompile Include="..\..\rtc.cpp" />
<ClCompile Include="..\..\scp.cpp" />
<ClCompile Include="..\..\scsitape.cpp" />
<ClCompile Include="..\..\slirp\bootp.cpp" />

View File

@ -844,6 +844,9 @@
<ClCompile Include="..\..\softfloat\softfloat_fpsp.cpp">
<Filter>softfloat</Filter>
</ClCompile>
<ClCompile Include="..\..\rtc.cpp">
<Filter>common</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\resources\35floppy.ico">

View File

@ -4,6 +4,22 @@ 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.
Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI)
Beta 8:
- Blitter BDAT register's old content was not preserved and shifted in when BDAT was rewritten with CPU or copper
and current B-shift was non-zero. (Probably never used by purpose but emulation still should be always correct)
- 68010+ RTE didn't generate format error exception if frame was not supported by selected CPU but it was supported by
other 680x0 model and CPU emulation mode was not MMU or more compatible.
- Added Comspec SA-1000 RTC emulation. Always returns current host time, time registers are not writable.
- Built-in HRTMon 2.37 update.
- Added two A2088T BIOS 4.0 (390657-01) ROM versions with different internal date (09/11/89 and 14/11/89).
- Added A2386SX 1.00.03 ROM.
- PC bridgeboard NE2000 boot crash fix. (Introduced when NIC specific MAC setting was added)
- Adjusted windowed mode mouse clipping so that when winuae window is partially under taskbar (including auto hide taskbar)
or partially outside of monitor, Amiga mouse won't randomly hit hidden borders (if Windows Mouse mode) or become
unexpectedly uncaptured (any mode, window partially under taskbar).
- Do not delay SCSI/ATAPI emulation audio CD play state change from startup to playing. Only CD32/CDTV require it.
Beta 7:
- Accessing accelerator board SCSI IO region without any added SCSI device caused crash.

View File

@ -95,7 +95,7 @@ struct romdata *getromdatabypath (const TCHAR *path)
return NULL;
}
#define NEXT_ROM_ID 203
#define NEXT_ROM_ID 206
#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 },
@ -288,7 +288,7 @@ static struct romdata roms[] = {
ALTROM(116, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x1909f7e9, 0x5abe9b9d,0xaae328c8,0x134e2b62,0x7b33b698,0xe342afc2)
ALTROM(116, 1, 2, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, 0xa3927c72, 0x7adc9352,0x2d112ae9,0x23b9a70d,0x951b1e7a,0xba800ea6)
{ _T("Freezer: HRTMon v2.36 (built-in)"), 0, 0, 0, 0, _T("HRTMON\0"), 0, 63, 0, 0, ROMTYPE_HRTMON, 0, 1, NULL,
{ _T("Freezer: HRTMon v2.37 (built-in)"), 0, 0, 0, 0, _T("HRTMON\0"), 0, 63, 0, 0, ROMTYPE_HRTMON, 0, 1, NULL,
0xffffffff, 0, 0, 0, 0, 0, _T("HRTMon") },
{ _T("A2090a"), 0, 0, 0, 0, _T("A2090A\0"), 16384, 122, 0, 0, ROMTYPE_A2090, 0, 0, NULL,
@ -461,7 +461,7 @@ static struct romdata roms[] = {
ALTROMPN(146, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0xc88843cb, 0x3d7eb1b6, 0x8139b81b, 0x0665684c, 0x536ab3d0, 0x52a5dd9d)
{ _T("Apollo 500/2000"), 0, 0, 0, 0, _T("APOLLOHD\0"), 16384, 145, 0, 0, ROMTYPE_APOLLOHD, 0, 0, NULL,
0x931bad25, 0x24b4ee4c,0x129c7a93,0xf83ad570,0x66afd80c,0x4179f39c, NULL, NULL },
{ _T("Multi Evolution 500/2000"), 3, 0, 3, 0, _T("MULTIEVOLUTION\0"), 65536, 156, 0, 0, ROMTYPE_MEVOLUTION, 0, 0, NULL,
{ _T("Multi Evolution 500/2000 v3.0"), 3, 0, 3, 0, _T("MULTIEVOLUTION\0"), 65536, 156, 0, 0, ROMTYPE_MEVOLUTION, 0, 0, NULL,
0xd13a2c89, 0xf9e38c4b,0xf5c6499d,0x486946ba,0x7b7636b8,0x0845265b, NULL, NULL },
ALTROMPN(156, 1, 1, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0x339b3549, 0x74de857b, 0x42f9a8e0, 0xc1f3c29e, 0x06982622, 0x853d08fe)
ALTROMPN(156, 1, 2, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0x3aca5d1f, 0x786f2197, 0xc614be91, 0xae7e87da, 0xb42c3290, 0xd7997763)
@ -520,6 +520,10 @@ static struct romdata roms[] = {
0xf8e1ad83, 0x45a2b7db,0x6e86fe80,0x5cfef63c,0x65c331a7,0x16a6e9e8, NULL, NULL },
{ _T("A2088 BIOS 3.6.1"), 3, 61, 3, 61, _T("A2088\0"), 16384, 149, 0, 0, ROMTYPE_A2088, 0, 0, _T("380788-06"),
0x5fd93e56, 0xc1b707a8,0xa62907d7,0x5299f10a,0xa60efd1f,0x44514b26, NULL, NULL },
{ _T("A2088T BIOS 4.0 (09/11/89)"), 4, 10, 4, 10, _T("A2088T\0"), 32768, 203, 0, 0, ROMTYPE_A2088T, 0, 0, _T("390657-01"),
0x12545545, 0x54f7a99e,0x2e5dbc30,0x43f52001,0xa4abb3b6,0x8e4832fd, NULL, NULL },
{ _T("A2088T BIOS 4.0 (14/11/89)"), 4, 10, 4, 10, _T("A2088T\0"), 32768, 204, 0, 0, ROMTYPE_A2088T, 0, 0, _T("390657-01"),
0xb6b3b6f7, 0x7929a92f,0x25203cea,0xad302ddd,0x31db55cd,0x49b3020a, NULL, NULL },
{ _T("A2088T BIOS 4.10"), 4, 10, 4, 11, _T("A2088T\0"), 32768, 150, 0, 0, ROMTYPE_A2088T, 0, 0, _T("390657-02"),
0x20c5d1a9, 0x08e3fbb7,0x28dfc514,0x24083313,0x373ea7a5,0xa2c3e965, NULL, NULL },
{ _T("A2088T BIOS 4.11"), 4, 11, 4, 11, _T("A2088T\0"), 32768, 151, 0, 0, ROMTYPE_A2088T, 0, 0, _T("390547-02"),
@ -534,8 +538,10 @@ static struct romdata roms[] = {
0xd572e205, 0x74fdf0f8,0x325fbc41,0x2b98c72d,0xf5095804,0x831c46b5, NULL, NULL },
ALTROMPN(154, 1, 1, 16384, ROMTYPE_ODD | ROMTYPE_8BIT, _T("380682-04"), 0xc23dcd55, 0x38dc24b7, 0x14427b15, 0xd5214cc9, 0xb9be0de7, 0x20bd6a34)
ALTROMPN(154, 1, 2, 16384, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("380683-04"), 0xdad80c0b, 0x12fe2916, 0x64f8c412, 0x3877a24e, 0x05837091, 0x44d8acd0)
{ _T("A2386SX BIOS 1.0"), 1, 0, 1, 0, _T("A2386SX\0"), 65536, 155, 0, 0, ROMTYPE_A2386, 0, 0, NULL,
{ _T("A2386SX BIOS 1.00"), 1, 0, 1, 0, _T("A2386SX\0"), 65536, 155, 0, 0, ROMTYPE_A2386, 0, 0, _T("391168-01"),
0x37003e0c, 0x2e127e9c,0x8581d30c,0x2e46404b,0x21608e3c,0xe935fa27, NULL, NULL },
{ _T("A2386SX BIOS 1.00.03"), 1, 0, 1, 0, _T("A2386SX\0"), 65536, 205, 0, 0, ROMTYPE_A2386, 0, 0, _T("391168-01"),
0x41041761, 0x78659be4,0x5755f8bd,0x004a101b,0x658ae75d,0xf142ddc9, NULL, NULL },
{ _T("Arcadia OnePlay 2.11"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 49, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
{ _T("Arcadia TenPlay 2.11"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 50, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 },
@ -693,6 +699,19 @@ static struct romdata roms[] = {
};
void dumpromlist(void)
{
for (int i = 0; roms[i].name; i++) {
struct romdata *rd = &roms[i];
if (rd->name && rd->group == 0) {
write_log(_T("%s"), rd->name);
if (rd->size)
write_log (_T(" [%dk]"), rd->size >> 10);
write_log(_T("\n"));
}
}
}
void romlist_clear (void)
{
int i;