This commit is contained in:
Toni Wilen 2014-08-20 16:32:53 +03:00
parent 9467673534
commit ff4f290ccf
7 changed files with 132 additions and 37 deletions

View File

@ -111,6 +111,8 @@ static uae_u8 broadcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
#define RX_STP 0x0200
#define RX_ENP 0x0100
DECLARE_MEMORY_FUNCTIONS(a2065);
static uae_u16 gword2 (uae_u8 *p)
{
return (p[0] << 8) | p[1];
@ -828,12 +830,23 @@ static void REGPARAM2 a2065_lput (uaecptr addr, uae_u32 l)
a2065_wput (addr + 2, l);
}
DECLARE_MEMORY_FUNCTIONS(a2065);
uae_u8 *REGPARAM2 a2065_xlate(uaecptr addr)
{
if ((addr & 65535) >= RAM_OFFSET)
return &boardram[addr & RAM_MASK];
return default_xlate(addr);
}
int REGPARAM2 a2065_check(uaecptr a, uae_u32 b)
{
a &= 65535;
return a >= RAM_OFFSET && a + b < 65536;
}
static addrbank a2065_bank = {
a2065_lget, a2065_wget, a2065_bget,
a2065_lput, a2065_wput, a2065_bput,
default_xlate, default_check, NULL, NULL, _T("A2065 Z2 Ethernet"),
a2065_xlate, a2065_check, NULL, NULL, _T("A2065 Z2 Ethernet"),
a2065_lgeti, a2065_wgeti, ABFLAG_IO
};

View File

@ -149,9 +149,11 @@ static int do_read (struct cdunit *cdu, struct cdtoc *t, uae_u8 *data, int secto
if (t->enctype == ENC_CHD) {
#ifdef WITH_CHD
int type = CD_TRACK_MODE1_RAW;
uae_u8 tmpbuf[2352];
if (size > 2352)
return 0;
switch (size)
{
default:
case 2352:
type = CD_TRACK_MODE1_RAW;
break;
@ -164,7 +166,11 @@ static int do_read (struct cdunit *cdu, struct cdtoc *t, uae_u8 *data, int secto
}
if (audio && size == 2352)
type = CD_TRACK_AUDIO;
return cdrom_read_data(cdu->chd_cdf, sector + t->offset, data, type, true) != 0;
if (cdrom_read_data(cdu->chd_cdf, sector + t->offset, tmpbuf, type, true)) {
memcpy(data, tmpbuf + offset, size);
return 1;
}
return 0;
#endif
} else if (t->handle) {
int ssize = t->size + t->skipsize;

View File

@ -1824,6 +1824,14 @@ static void gen_pfield_tables (void)
dblpf_ind1[i] = i >= 128 ? i & 0x7F : (plane1 == 0 ? plane2 : plane1);
dblpf_ind2[i] = i >= 128 ? i & 0x7F : (plane2 == 0 ? plane1 : plane2);
// Hack for OCS/ECS-only dualplayfield chipset bug.
// If PF2P2 is invalid (>5), playfield color becomes transparent but
// playfield still hides playfield under it! (if plfpri is set)
if (i & 64) {
dblpf_ind2[i] = 0;
dblpf_ind1[i] = 0;
}
sprite_offs[i] = (i & 15) ? 0 : 2;
clxtab[i] = ((((i & 3) && (i & 12)) << 9)
@ -1922,16 +1930,29 @@ static void clear_bitplane_border_aga (void)
}
#endif
/* emulate OCS/ECS only undocumented "SWIV" hardware feature */
static void weird_bitplane_fix (int start, int end)
{
int i;
int sh = lores_shift;
uae_u8 *p = pixdata.apixels + pixels_offset;
for (i = start >> sh; i < end >> sh; i++) {
if (p[i] > 16)
p[i] = 16;
start >>= sh;
end >>= sh;
if (bplplanecnt == 5 && !bpldualpf) {
/* emulate OCS/ECS only undocumented "SWIV" hardware feature */
for (int i = start; i < end; i++) {
if (p[i] & 16)
p[i] = 16;
}
} else if (bpldualpf && bpldualpfpri) {
/* in dualplayfield mode this feature is even more strange.. */
for (int i = start; i < end; i++) {
if (p[i] & (2 | 8 | 32))
p[i] |= 0x40;
}
} else if (bpldualpf && !bpldualpfpri) {
for (int i = start; i < end; i++) {
p[i] &= ~(2 | 8 | 32);
}
}
}
@ -2362,7 +2383,7 @@ static void do_color_changes (line_draw_func worker_border, line_draw_func worke
// playfield
if (nextpos_in_range > lastpos && lastpos >= playfield_start && lastpos < playfield_end) {
int t = nextpos_in_range <= playfield_end ? nextpos_in_range : playfield_end;
if (plf2pri > 5 && bplplanecnt == 5 && !(currprefs.chipset_mask & CSMASK_AGA))
if (plf2pri > 5 && !(currprefs.chipset_mask & CSMASK_AGA))
weird_bitplane_fix (lastpos, t);
if (bplxor && may_require_hard_way && worker_pfield != pfield_do_linetoscr_bordersprite_aga)
playfield_hard_way(worker_pfield, lastpos, t);

View File

@ -69,10 +69,10 @@ struct hardfileprivdata {
uaecptr changeint;
};
#define HFD_VHD_DYNAMIC 4
#define HFD_VHD_FIXED 3
#define HFD_CHD_OTHER 2
#define HFD_CHD_HD 1
#define HFD_CHD_OTHER 5
#define HFD_CHD_HD 4
#define HFD_VHD_DYNAMIC 3
#define HFD_VHD_FIXED 2
STATIC_INLINE uae_u32 gl (uae_u8 *p)
{
@ -486,13 +486,19 @@ int hdf_open (struct hardfiledata *hfd, const TCHAR *pname)
zf = zfile_fopen (nametmp, _T("rb"));
}
if (zf) {
int err;
int err = CHDERR_FILE_NOT_WRITEABLE;
hard_disk_file *chdf;
chd_file *cf = new chd_file();
err = cf->open(*zf, false, NULL);
if (!chd_readonly)
err = cf->open(*zf, true, NULL);
if (err == CHDERR_FILE_NOT_WRITEABLE) {
chd_readonly = true;
err = cf->open(*zf, false, NULL);
}
if (err != CHDERR_NONE) {
zfile_fclose (zf);
goto nonvhd;
delete cf;
goto end;
}
chdf = hard_disk_open(cf);
if (!chdf) {
@ -503,7 +509,7 @@ int hdf_open (struct hardfiledata *hfd, const TCHAR *pname)
hfd->hfd_type = HFD_CHD_HD;
hfd->chd_handle = chdf;
}
if (cf->compressed() || chd_readonly)
if (chd_readonly)
hfd->ci.readonly = true;
hfd->virtsize = cf->logical_bytes ();
hfd->handle_valid = -1;

View File

@ -20,12 +20,12 @@
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
#define WINUAEBETA _T("12")
#define WINUAEBETA _T("13")
#else
#define WINUAEBETA _T("")
#endif
#define WINUAEDATE MAKEBD(2014, 8, 17)
#define WINUAEDATE MAKEBD(2014, 8, 20)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")

View File

@ -1613,9 +1613,9 @@ static int listrom (int *roms)
static void show_rom_list (void)
{
TCHAR *p;
TCHAR unavail[MAX_DPATH], avail[MAX_DPATH];
TCHAR *p1, *p2;
int *rp;
bool first = true;
int romtable[] = {
5, 4, -1, -1, // A500 1.2
6, 32, -1, -1, // A500 1.3
@ -1627,20 +1627,54 @@ static void show_rom_list (void)
16, 46, 31, 13, 12, -1, -1, // A4000
17, -1, -1, // A4000T
18, -1, 19, -1, -1, // CD32
18, -1, 19, -1, 74, 23, -1, -1, // CD32 FMV
20, 21, 22, -1, 6, 32, -1, -1, // CDTV
49, 50, 75, 51, 76, 77, -1, 5, 4, -1, -1, // ARCADIA
46, 16, 17, 31, 13, 12, -1, -1, // highend, any 3.x A4000
49, 50, 75, 51, 76, 77, -1, 5, 4, -1, -2, // ARCADIA
53, 54, 55, 56, -1, -1, // A590/A2091
57, 58, -1, -1, // A4091
18, -1, 19, -1, 74, 23, -1, -1, // CD32 FMV
91, -1, -2, // Picasso IV
89, -1, -1, // 1230-IV
89, -1, 94, -1, -1, // 1230-IV SCSI
90, -1, -1, // 1260
90, -1, 94, -1, -1, // 1260 SCSI
92, -1, -1, // 2060
93, -1, -1, // Warp Engine
95, 101, -1, -1, // CS MK I
96, -1, -1, // CS MK II
97, -1, -1, // CS MK III
99, 100, -1, -1, // BPPC
98, -1 ,-2, // CSPPC
69, 67, 70, -1, -1, // nordic power
65, 68, -1, -1, // x-power
62, 60, -1, -1, // action cartridge
52, 25, -1, -1, // ar 1
26, 27, 28, -1, -1, // ar 2
29, 30, -1, -1, // ar 3
0, 0, 0
};
WIN32GUI_LoadUIString (IDS_ROM_AVAILABLE, avail, sizeof (avail) / sizeof (TCHAR));
WIN32GUI_LoadUIString (IDS_ROM_UNAVAILABLE, unavail, sizeof (avail) / sizeof (TCHAR));
_tcscat (avail, _T("\n"));
_tcscat (unavail, _T("\n"));
p1 = _T("A500 Boot ROM 1.2\0A500 Boot ROM 1.3\0A500+\0A600\0A1000\0A1200\0A3000\0A4000\0A4000T\0CD32\0CD32 FMV\0CDTV\0Arcadia Multi Select\0High end WinUAE\0A590/A2091 SCSI Boot ROM\0A4091 SCSI Boot ROM\0\0");
p1 = _T("A500 Boot ROM 1.2\0A500 Boot ROM 1.3\0A500+\0A600\0A1000\0A1200\0A3000\0A4000\0A4000T\0")
_T("CD32\0CDTV\0Arcadia Multi Select\0")
_T("A590/A2091 SCSI\0A4091 SCSI\0")
_T("CD32 Full Motion Video\0")
_T("Picasso IV\0")
_T("Blizzard 1230-IV\0Blizzard 1260\0")
_T("Blizzard 1230-IV/SCSI\0Blizzard 1260/SCSI\0")
_T("Blizzard 2060\0Warp Engine\0")
_T("CyberStorm MK I\0CyberStorm MK II\0CyberStorm MK III\0")
_T("Blizzard PPC\0CyberStorm PPC\0")
_T("Nordic Power\0X-Power Professional 500\0Action Cartridge Super IV Professional\0")
_T("Action Replay MK I\0Action Replay MK II\0Action Replay MK III\0")
_T("Action Replay 1200\0")
_T("\0");
p = xmalloc (TCHAR, 100000);
if (!p)
@ -1652,21 +1686,25 @@ static void show_rom_list (void)
while(rp[0]) {
int ok = 1;
p2 = p1 + _tcslen (p1) + 1;
_tcscat (p, _T(" "));
_tcscat (p, p1); _tcscat (p, _T(": "));
while (*rp != -1) {
while (*rp >= 0) {
if (ok) {
ok = 0;
if (listrom (rp))
ok = 1;
}
while(*rp++ != -1);
while(*rp++ >= 0);
}
if (ok) {
if (!first)
_tcscat (p, _T(", "));
first = false;
_tcscat (p, p1);
}
if (*rp == -2) {
_tcscat(p, _T("\n\n"));
first = true;
}
rp++;
if (ok)
_tcscat (p, avail);
else
_tcscat (p, unavail);
p1 = p2;
}

View File

@ -18,6 +18,17 @@ Things that may happen in 2015:
- restore only single input target to default.
Beta 13:
- Fixed vhd hardfiles. (b12)
- Emulated strange OCS/ECS feature similar to "SWIV scoreboard" feature (plane color > 16 becomes 16 when PF2PRI
is set to invalid value). It gets more interesting if mode is dual playfield and PF2P2 is invalid: odd planes
become transparent and it still hides even planes behind it if PF2PRI is set! (Running Man / Scoopex)
- A2065 buffer ram is now directly accessible, if someone wants to do some weird stuff with it (xlate and check
memory functions supported)
- ROM scanner result window redesigned, all expansions that need rom images added.
- Fixed CHD CD crash when sector size conversion was required.
Beta 12:
- Windowed mode status bar button mouse click off-by-one fix.