mirror of
https://github.com/LIV2/WinUAE.git
synced 2025-12-06 00:12:52 +00:00
2710b12
This commit is contained in:
parent
7d9d35b75a
commit
6df2d7e31e
48
cfgfile.cpp
48
cfgfile.cpp
@ -630,7 +630,7 @@ void cfgfile_target_dwrite_str (struct zfile *f, const TCHAR *option, const TCHA
|
||||
cfg_dowrite (f, option, value, 1, 1);
|
||||
}
|
||||
|
||||
void cfgfile_write (struct zfile *f, const TCHAR *option, const TCHAR *optionext, const TCHAR *format,...)
|
||||
void cfgfile_write_ext (struct zfile *f, const TCHAR *option, const TCHAR *optionext, const TCHAR *format,...)
|
||||
{
|
||||
va_list parms;
|
||||
TCHAR tmp[CONFIG_BLEN], tmp2[CONFIG_BLEN];
|
||||
@ -654,7 +654,7 @@ void cfgfile_write (struct zfile *f, const TCHAR *option, const TCHAR *format,..
|
||||
cfg_dowrite (f, option, tmp, 0, 0);
|
||||
va_end (parms);
|
||||
}
|
||||
void cfgfile_dwrite (struct zfile *f, const TCHAR *option, const TCHAR *optionext, const TCHAR *format,...)
|
||||
void cfgfile_dwrite_ext (struct zfile *f, const TCHAR *option, const TCHAR *optionext, const TCHAR *format,...)
|
||||
{
|
||||
va_list parms;
|
||||
TCHAR tmp[CONFIG_BLEN], tmp2[CONFIG_BLEN];
|
||||
@ -1212,13 +1212,13 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
|
||||
const TCHAR *ext = j == 0 ? NULL : _T("_rtg");
|
||||
for (int i = 0; i <MAX_FILTERSHADERS; i++) {
|
||||
if (gf->gfx_filtershader[i][0])
|
||||
cfgfile_write (f, _T("gfx_filter_pre"), ext, _T("D3D:%s"), gf->gfx_filtershader[i]);
|
||||
cfgfile_write_ext (f, _T("gfx_filter_pre"), ext, _T("D3D:%s"), gf->gfx_filtershader[i]);
|
||||
if (gf->gfx_filtermask[i][0])
|
||||
cfgfile_write_str (f, _T("gfx_filtermask_pre"), ext, gf->gfx_filtermask[i]);
|
||||
}
|
||||
for (int i = 0; i <MAX_FILTERSHADERS; i++) {
|
||||
if (gf->gfx_filtershader[i + MAX_FILTERSHADERS][0])
|
||||
cfgfile_write (f, _T("gfx_filter_post"), ext, _T("D3D:%s"), gf->gfx_filtershader[i + MAX_FILTERSHADERS]);
|
||||
cfgfile_write_ext (f, _T("gfx_filter_post"), ext, _T("D3D:%s"), gf->gfx_filtershader[i + MAX_FILTERSHADERS]);
|
||||
if (gf->gfx_filtermask[i + MAX_FILTERSHADERS][0])
|
||||
cfgfile_write_str (f, _T("gfx_filtermask_post"), ext, gf->gfx_filtermask[i + MAX_FILTERSHADERS]);
|
||||
}
|
||||
@ -1226,7 +1226,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
|
||||
{
|
||||
bool d3dfound = false;
|
||||
if (gf->gfx_filtershader[2 * MAX_FILTERSHADERS][0] && p->gfx_api) {
|
||||
cfgfile_dwrite (f, _T("gfx_filter"), ext, _T("D3D:%s"), gf->gfx_filtershader[2 * MAX_FILTERSHADERS]);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter"), ext, _T("D3D:%s"), gf->gfx_filtershader[2 * MAX_FILTERSHADERS]);
|
||||
d3dfound = true;
|
||||
}
|
||||
if (!d3dfound) {
|
||||
@ -1241,35 +1241,35 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
cfgfile_dwrite (f, _T("gfx_filter"), ext, _T("no"));
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter"), ext, _T("no"));
|
||||
}
|
||||
}
|
||||
}
|
||||
cfgfile_dwrite_str (f, _T("gfx_filter_mode"), ext, filtermode2[gf->gfx_filter_filtermode]);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_vert_zoomf"), ext, _T("%f"), gf->gfx_filter_vert_zoom);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_horiz_zoomf"), ext, _T("%f"), gf->gfx_filter_horiz_zoom);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_vert_zoom_multf"), ext, _T("%f"), gf->gfx_filter_vert_zoom_mult);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_horiz_zoom_multf"), ext, _T("%f"), gf->gfx_filter_horiz_zoom_mult);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_vert_offsetf"), ext, _T("%f"), gf->gfx_filter_vert_offset);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_horiz_offsetf"), ext, _T("%f"), gf->gfx_filter_horiz_offset);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_scanlines"), ext, _T("%d"), gf->gfx_filter_scanlines);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_scanlinelevel"), ext, _T("%d"), gf->gfx_filter_scanlinelevel);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_scanlineratio"), ext, _T("%d"), gf->gfx_filter_scanlineratio);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_luminance"), ext, _T("%d"), gf->gfx_filter_luminance);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_contrast"), ext, _T("%d"), gf->gfx_filter_contrast);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_saturation"), ext, _T("%d"), gf->gfx_filter_saturation);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_gamma"), ext, _T("%d"), gf->gfx_filter_gamma);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_blur"), ext, _T("%d"), gf->gfx_filter_blur);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_noise"), ext, _T("%d"), gf->gfx_filter_noise);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_vert_zoomf"), ext, _T("%f"), gf->gfx_filter_vert_zoom);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_horiz_zoomf"), ext, _T("%f"), gf->gfx_filter_horiz_zoom);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_vert_zoom_multf"), ext, _T("%f"), gf->gfx_filter_vert_zoom_mult);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_horiz_zoom_multf"), ext, _T("%f"), gf->gfx_filter_horiz_zoom_mult);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_vert_offsetf"), ext, _T("%f"), gf->gfx_filter_vert_offset);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_horiz_offsetf"), ext, _T("%f"), gf->gfx_filter_horiz_offset);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_scanlines"), ext, _T("%d"), gf->gfx_filter_scanlines);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_scanlinelevel"), ext, _T("%d"), gf->gfx_filter_scanlinelevel);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_scanlineratio"), ext, _T("%d"), gf->gfx_filter_scanlineratio);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_luminance"), ext, _T("%d"), gf->gfx_filter_luminance);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_contrast"), ext, _T("%d"), gf->gfx_filter_contrast);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_saturation"), ext, _T("%d"), gf->gfx_filter_saturation);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_gamma"), ext, _T("%d"), gf->gfx_filter_gamma);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_blur"), ext, _T("%d"), gf->gfx_filter_blur);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_noise"), ext, _T("%d"), gf->gfx_filter_noise);
|
||||
cfgfile_dwrite_bool (f, _T("gfx_filter_bilinear"), ext, gf->gfx_filter_bilinear != 0);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_keep_autoscale_aspect"), ext, _T("%d"), gf->gfx_filter_keep_autoscale_aspect);
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_keep_autoscale_aspect"), ext, _T("%d"), gf->gfx_filter_keep_autoscale_aspect);
|
||||
cfgfile_dwrite_str (f, _T("gfx_filter_keep_aspect"), ext, aspects[gf->gfx_filter_keep_aspect]);
|
||||
cfgfile_dwrite_str (f, _T("gfx_filter_autoscale"), ext, autoscale[gf->gfx_filter_autoscale]);
|
||||
cfgfile_dwrite (f, _T("gfx_filter_aspect_ratio"), ext, _T("%d:%d"),
|
||||
cfgfile_dwrite_ext (f, _T("gfx_filter_aspect_ratio"), ext, _T("%d:%d"),
|
||||
gf->gfx_filter_aspect >= 0 ? (gf->gfx_filter_aspect / ASPECTMULT) : -1,
|
||||
gf->gfx_filter_aspect >= 0 ? (gf->gfx_filter_aspect & (ASPECTMULT - 1)) : -1);
|
||||
if (gf->gfx_filteroverlay[0]) {
|
||||
cfgfile_dwrite (f, _T("gfx_filter_overlay"), ext, _T("%s%s"),
|
||||
cfgfile_dwrite_ext(f, _T("gfx_filter_overlay"), ext, _T("%s%s"),
|
||||
gf->gfx_filteroverlay, _tcschr (gf->gfx_filteroverlay, ',') ? _T(",") : _T(""));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2624,10 +2624,10 @@ STATIC_INLINE void decide_line (int hpos)
|
||||
}
|
||||
|
||||
if (dmaecs) {
|
||||
// did we just match ddfstop but missed ddfstrt? DMA starts from passed plfstop state.
|
||||
// did we just match ddfstop - 3 but missed ddfstrt? DMA starts from passed plfstop state.
|
||||
if (last_decide_line_hpos > plfstrt && (plf_state == plf_active || plf_state == plf_wait_stop) && diwstate == DIW_waiting_stop) {
|
||||
int stop = get_ddfstop_to_test (last_decide_line_hpos);
|
||||
if (last_decide_line_hpos < stop && hpos >= stop) {
|
||||
if (last_decide_line_hpos < stop && hpos >= stop - 3) {
|
||||
if (dma) {
|
||||
// we did, fetches start!
|
||||
bplstart = plfstop;
|
||||
|
||||
97
disk.cpp
97
disk.cpp
@ -168,6 +168,7 @@ typedef struct {
|
||||
uae_u16 bigmfmbuf[0x4000 * DDHDMULT];
|
||||
uae_u16 tracktiming[0x4000 * DDHDMULT];
|
||||
int multi_revolution;
|
||||
int revolution_check;
|
||||
int skipoffset;
|
||||
int mfmpos;
|
||||
int indexoffset;
|
||||
@ -205,6 +206,7 @@ typedef struct {
|
||||
int amax;
|
||||
int lastdataacesstrack;
|
||||
int lastrev;
|
||||
bool track_access_done;
|
||||
#endif
|
||||
} drive;
|
||||
|
||||
@ -772,8 +774,11 @@ int DISK_validate_filename (struct uae_prefs *p, const TCHAR *fname, int leave_o
|
||||
|
||||
static void updatemfmpos (drive *drv)
|
||||
{
|
||||
if (drv->prevtracklen)
|
||||
if (drv->prevtracklen) {
|
||||
drv->mfmpos = drv->mfmpos * (drv->tracklen * 1000 / drv->prevtracklen) / 1000;
|
||||
if (drv->mfmpos >= drv->tracklen)
|
||||
drv->mfmpos = drv->tracklen - 1;
|
||||
}
|
||||
drv->mfmpos %= drv->tracklen;
|
||||
drv->prevtracklen = drv->tracklen;
|
||||
}
|
||||
@ -1750,8 +1755,9 @@ static void drive_fill_bigbuf (drive * drv, int force)
|
||||
drv->tracktiming[0] = 0;
|
||||
drv->skipoffset = -1;
|
||||
drv->revolutions = 1;
|
||||
|
||||
retrytrack = drv->lastdataacesstrack == drv->cyl * 2 + side;
|
||||
if (!dskdmaen && !retrytrack)
|
||||
drv->track_access_done = false;
|
||||
//write_log (_T("%d:%d %d\n"), drv->cyl, side, retrytrack);
|
||||
|
||||
if (drv->writediskfile && drv->writetrackdata[tr].bitlen > 0) {
|
||||
@ -2649,6 +2655,8 @@ static void DISK_check_change (void)
|
||||
{
|
||||
if (currprefs.floppy_speed != changed_prefs.floppy_speed)
|
||||
currprefs.floppy_speed = changed_prefs.floppy_speed;
|
||||
if (currprefs.floppy_read_only != changed_prefs.floppy_read_only)
|
||||
currprefs.floppy_read_only = changed_prefs.floppy_read_only;
|
||||
for (int i = 0; i < MAX_FLOPPY_DRIVES; i++) {
|
||||
drive *drv = floppy + i;
|
||||
if (currprefs.floppyslots[i].dfxtype != changed_prefs.floppyslots[i].dfxtype) {
|
||||
@ -2918,7 +2926,7 @@ static void disk_dmafinished (void)
|
||||
dskdmaen = DSKDMA_OFF;
|
||||
dsklength = 0;
|
||||
if (disk_debug_logging > 0) {
|
||||
int dr, mfmpos = -1;
|
||||
int dr;
|
||||
write_log (_T("disk dma finished %08X MFMpos="), dskpt);
|
||||
for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++)
|
||||
write_log (_T("%d%s"), floppy[dr].mfmpos, dr < MAX_FLOPPY_DRIVES - 1 ? _T(",") : _T(""));
|
||||
@ -2928,19 +2936,22 @@ static void disk_dmafinished (void)
|
||||
|
||||
static void fetchnextrevolution (drive *drv)
|
||||
{
|
||||
if (drv->revolution_check)
|
||||
return;
|
||||
drv->trackspeed = get_floppy_speed2 (drv);
|
||||
#if 0
|
||||
if (1 || drv->mfmpos != 0) {
|
||||
write_log (_T("REVOLUTION: %d %d/%d %d %d\n"), drv->trackspeed, drv->mfmpos, drv->tracklen, drv->floppybitcounter);
|
||||
write_log (_T("REVOLUTION: DMA=%d %d %d/%d %d %d %d\n"), dskdmaen, drv->trackspeed, drv->mfmpos, drv->tracklen, drv->indexoffset, drv->floppybitcounter);
|
||||
}
|
||||
#endif
|
||||
drv->revolution_check = 2;
|
||||
if (!drv->multi_revolution)
|
||||
return;
|
||||
switch (drv->filetype)
|
||||
{
|
||||
case ADF_IPF:
|
||||
#ifdef CAPS
|
||||
caps_loadrevolution (drv->bigmfmbuf, drv->tracktiming, drv - floppy, drv->cyl * 2 + side, &drv->tracklen, &drv->lastrev);
|
||||
caps_loadrevolution (drv->bigmfmbuf, drv->tracktiming, drv - floppy, drv->cyl * 2 + side, &drv->tracklen, &drv->lastrev, drv->track_access_done);
|
||||
#endif
|
||||
break;
|
||||
case ADF_SCP:
|
||||
@ -2950,12 +2961,23 @@ static void fetchnextrevolution (drive *drv)
|
||||
break;
|
||||
case ADF_FDI:
|
||||
#ifdef FDI2RAW
|
||||
fdi2raw_loadrevolution (drv->fdi, drv->bigmfmbuf, drv->tracktiming, drv->cyl * 2 + side, &drv->tracklen, 1);
|
||||
fdi2raw_loadrevolution(drv->fdi, drv->bigmfmbuf, drv->tracktiming, drv->cyl * 2 + side, &drv->tracklen, 1);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void do_disk_index (void)
|
||||
{
|
||||
#if 0
|
||||
write_log(_T("INDEX %d\n"), indexdecay);
|
||||
#endif
|
||||
if (!indexdecay) {
|
||||
indexdecay = 2;
|
||||
cia_diskindex ();
|
||||
}
|
||||
}
|
||||
|
||||
void DISK_handler (uae_u32 data)
|
||||
{
|
||||
int flag = data & 255;
|
||||
@ -2976,12 +2998,8 @@ void DISK_handler (uae_u32 data)
|
||||
}
|
||||
if (flag & DISK_WORDSYNC)
|
||||
INTREQ (0x8000 | 0x1000);
|
||||
if (flag & DISK_INDEXSYNC) {
|
||||
if (!indexdecay) {
|
||||
indexdecay = 2;
|
||||
cia_diskindex ();
|
||||
}
|
||||
}
|
||||
if (flag & DISK_INDEXSYNC)
|
||||
do_disk_index ();
|
||||
}
|
||||
|
||||
static void disk_doupdate_write (drive * drv, int floppybits)
|
||||
@ -3085,7 +3103,7 @@ static void disk_doupdate_predict (int startcycle)
|
||||
drive *drv = &floppy[dr];
|
||||
if (drv->motoroff)
|
||||
continue;
|
||||
if (drv->motoroff || !drv->trackspeed)
|
||||
if (!drv->trackspeed)
|
||||
continue;
|
||||
if (selected & (1 << dr))
|
||||
continue;
|
||||
@ -3108,25 +3126,29 @@ static void disk_doupdate_predict (int startcycle)
|
||||
else
|
||||
tword |= getonebit (drv->bigmfmbuf, mfmpos);
|
||||
}
|
||||
if ((tword & 0xffff) == dsksync && dsksync != 0)
|
||||
if (dskdmaen != DSKDMA_READ && (tword & 0xffff) == dsksync && dsksync != 0)
|
||||
diskevent_flag |= DISK_WORDSYNC;
|
||||
}
|
||||
mfmpos++;
|
||||
mfmpos %= drv->tracklen;
|
||||
if (mfmpos == 0 && !dskdmaen)
|
||||
diskevent_flag |= DISK_REVOLUTION << (drv - floppy);
|
||||
if (mfmpos == drv->indexoffset)
|
||||
diskevent_flag |= DISK_INDEXSYNC;
|
||||
if (!dskdmaen) {
|
||||
if (mfmpos == 0)
|
||||
diskevent_flag |= DISK_REVOLUTION << (drv - floppy);
|
||||
if (mfmpos == drv->indexoffset)
|
||||
diskevent_flag |= DISK_INDEXSYNC;
|
||||
}
|
||||
if (dskdmaen != DSKDMA_WRITE && mfmpos == drv->skipoffset) {
|
||||
update_jitter ();
|
||||
int skipcnt = disk_jitter;
|
||||
while (skipcnt-- > 0) {
|
||||
mfmpos++;
|
||||
mfmpos %= drv->tracklen;
|
||||
if (mfmpos == 0)
|
||||
diskevent_flag |= DISK_REVOLUTION << (drv - floppy);
|
||||
if (mfmpos == drv->indexoffset)
|
||||
diskevent_flag |= DISK_INDEXSYNC;
|
||||
if (!dskdmaen) {
|
||||
if (mfmpos == 0)
|
||||
diskevent_flag |= DISK_REVOLUTION << (drv - floppy);
|
||||
if (mfmpos == drv->indexoffset)
|
||||
diskevent_flag |= DISK_INDEXSYNC;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (diskevent_flag)
|
||||
@ -3139,6 +3161,7 @@ static void disk_doupdate_predict (int startcycle)
|
||||
finaleventflag = diskevent_flag;
|
||||
}
|
||||
}
|
||||
|
||||
if (finaleventflag && (finaleventcycle >> 8) < maxhpos) {
|
||||
event2_newevent (ev2_disk, (finaleventcycle - startcycle) >> 8, ((finaleventcycle >> 8) << 8) | finaleventflag);
|
||||
}
|
||||
@ -3243,17 +3266,32 @@ static void disk_doupdate_read (drive * drv, int floppybits)
|
||||
if (disk_debug_logging > 1 && drv->indexhack)
|
||||
write_log (_T("indexhack cleared\n"));
|
||||
drv->indexhack = 0;
|
||||
}
|
||||
if (drv->mfmpos == drv->skipoffset) {
|
||||
update_jitter ();
|
||||
drv->mfmpos += disk_jitter;
|
||||
drv->mfmpos %= drv->tracklen;
|
||||
do_disk_index ();
|
||||
}
|
||||
if (drv->mfmpos == 0) {
|
||||
fetchnextrevolution (drv);
|
||||
if (drv->tracktiming[0])
|
||||
updatetrackspeed (drv, drv->mfmpos);
|
||||
}
|
||||
if (drv->mfmpos == drv->skipoffset) {
|
||||
update_jitter ();
|
||||
int skipcnt = disk_jitter;
|
||||
while (skipcnt-- > 0) {
|
||||
drv->mfmpos++;
|
||||
drv->mfmpos %= drv->tracklen;
|
||||
if (drv->mfmpos == drv->indexoffset) {
|
||||
if (disk_debug_logging > 1 && drv->indexhack)
|
||||
write_log (_T("indexhack cleared\n"));
|
||||
drv->indexhack = 0;
|
||||
do_disk_index ();
|
||||
}
|
||||
if (drv->mfmpos == 0) {
|
||||
fetchnextrevolution (drv);
|
||||
if (drv->tracktiming[0])
|
||||
updatetrackspeed (drv, drv->mfmpos);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((bitoffset & 7) == 7) {
|
||||
dskbytr_val = word & 0xff;
|
||||
dskbytr_val |= 0x8000;
|
||||
@ -3264,6 +3302,7 @@ static void disk_doupdate_read (drive * drv, int floppybits)
|
||||
if (disk_debug_logging && dma_enable == 0)
|
||||
write_log (_T("Sync match, DMA started at %d PC=%08x\n"), drv->mfmpos, M68K_GETPC);
|
||||
dma_enable = 1;
|
||||
INTREQ (0x8000 | 0x1000);
|
||||
}
|
||||
if (adkcon & 0x400) {
|
||||
bitoffset = 15;
|
||||
@ -3305,6 +3344,7 @@ uae_u16 DSKBYTR (int hpos)
|
||||
continue;
|
||||
if (!(selected & (1 << dr))) {
|
||||
drv->lastdataacesstrack = drv->cyl * 2 + side;
|
||||
drv->track_access_done = true;
|
||||
if (disk_debug_mode & DISK_DEBUG_PIO) {
|
||||
if (disk_debug_track < 0 || disk_debug_track == 2 * drv->cyl + side) {
|
||||
disk_dma_debugmsg ();
|
||||
@ -3333,6 +3373,7 @@ static void DISK_start (void)
|
||||
|
||||
if (dskdmaen == DSKDMA_READ) {
|
||||
drv->lastdataacesstrack = drv->cyl * 2 + side;
|
||||
drv->track_access_done = true;
|
||||
}
|
||||
|
||||
if (dskdmaen == DSKDMA_WRITE) {
|
||||
@ -3365,6 +3406,8 @@ void DISK_hsync (void)
|
||||
drive *drv = &floppy[dr];
|
||||
if (drv->steplimit)
|
||||
drv->steplimit--;
|
||||
if (drv->revolution_check)
|
||||
drv->revolution_check--;
|
||||
}
|
||||
if (indexdecay)
|
||||
indexdecay--;
|
||||
|
||||
@ -3152,8 +3152,8 @@ bool vsync_handle_check (void)
|
||||
notice_screen_contents_lost ();
|
||||
notice_new_xcolors ();
|
||||
}
|
||||
check_prefs_changed_audio ();
|
||||
check_prefs_changed_cd ();
|
||||
check_prefs_changed_audio ();
|
||||
check_prefs_changed_custom ();
|
||||
check_prefs_changed_cpu ();
|
||||
check_picasso ();
|
||||
|
||||
@ -1063,7 +1063,10 @@ static int lastmx, lastmy;
|
||||
static uaecptr magicmouse_ibase, magicmouse_gfxbase;
|
||||
static int dimensioninfo_width, dimensioninfo_height, dimensioninfo_dbl;
|
||||
static int vp_xoffset, vp_yoffset, mouseoffset_x, mouseoffset_y;
|
||||
static int tablet_maxx, tablet_maxy, tablet_data;
|
||||
static int tablet_maxx, tablet_maxy, tablet_maxz;
|
||||
static int tablet_resx, tablet_resy;
|
||||
static int tablet_maxax, tablet_maxay, tablet_maxaz;
|
||||
static int tablet_data;
|
||||
|
||||
int mousehack_alive (void)
|
||||
{
|
||||
@ -1207,6 +1210,33 @@ static bool mousehack_enable (void)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void inputdevice_update_tablet_params(void)
|
||||
{
|
||||
uae_u8 *p;
|
||||
if (inputdevice_is_tablet() <= 0 || !mousehack_address)
|
||||
return;
|
||||
p = get_real_address(mousehack_address);
|
||||
|
||||
p[MH_MAXX] = tablet_maxx >> 8;
|
||||
p[MH_MAXX + 1] = tablet_maxx;
|
||||
p[MH_MAXY] = tablet_maxy >> 8;
|
||||
p[MH_MAXY + 1] = tablet_maxy;
|
||||
p[MH_MAXZ] = tablet_maxz >> 8;
|
||||
p[MH_MAXZ + 1] = tablet_maxz;
|
||||
|
||||
p[MH_RESX] = tablet_resx >> 8;
|
||||
p[MH_RESX + 1] = tablet_resx;
|
||||
p[MH_RESY] = tablet_resy >> 8;
|
||||
p[MH_RESY + 1] = tablet_resy;
|
||||
|
||||
p[MH_MAXAX] = tablet_maxax >> 8;
|
||||
p[MH_MAXAX + 1] = tablet_maxax;
|
||||
p[MH_MAXAY] = tablet_maxay >> 8;
|
||||
p[MH_MAXAY + 1] = tablet_maxay;
|
||||
p[MH_MAXAZ] = tablet_maxaz >> 8;
|
||||
p[MH_MAXAZ + 1] = tablet_maxaz;
|
||||
}
|
||||
|
||||
void input_mousehack_mouseoffset (uaecptr pointerprefs)
|
||||
{
|
||||
mouseoffset_x = (uae_s16)get_word (pointerprefs + 28);
|
||||
@ -1220,6 +1250,7 @@ int input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr
|
||||
} else if (mode == 5) {
|
||||
mousehack_address = m68k_dreg (regs, 0);
|
||||
mousehack_enable ();
|
||||
inputdevice_update_tablet_params ();
|
||||
} else if (mode == 0) {
|
||||
if (mousehack_address) {
|
||||
uae_u8 v = get_byte (mousehack_address + MH_E);
|
||||
@ -1340,11 +1371,6 @@ void inputdevice_tablet (int x, int y, int z, int pressure, uae_u32 buttonbits,
|
||||
p[MH_AZ] = az >> 8;
|
||||
p[MH_AZ + 1] = az;
|
||||
|
||||
p[MH_MAXX] = tablet_maxx >> 8;
|
||||
p[MH_MAXX + 1] = tablet_maxx;
|
||||
p[MH_MAXY] = tablet_maxy >> 8;
|
||||
p[MH_MAXY + 1] = tablet_maxy;
|
||||
|
||||
p[MH_PRESSURE] = pressure >> 8;
|
||||
p[MH_PRESSURE + 1] = pressure;
|
||||
|
||||
@ -1381,32 +1407,16 @@ void inputdevice_tablet (int x, int y, int z, int pressure, uae_u32 buttonbits,
|
||||
|
||||
void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay, int maxaz, int xres, int yres)
|
||||
{
|
||||
uae_u8 *p;
|
||||
|
||||
if (!uae_boot_rom || !mousehack_address)
|
||||
return;
|
||||
p = get_real_address (mousehack_address);
|
||||
|
||||
tablet_maxx = maxx;
|
||||
tablet_maxy = maxy;
|
||||
p[MH_MAXX] = maxx >> 8;
|
||||
p[MH_MAXX + 1] = maxx;
|
||||
p[MH_MAXY] = maxy >> 8;
|
||||
p[MH_MAXY + 1] = maxy;
|
||||
p[MH_MAXZ] = maxz >> 8;
|
||||
p[MH_MAXZ + 1] = maxz;
|
||||
tablet_maxz = maxz;
|
||||
|
||||
p[MH_RESX] = xres >> 8;
|
||||
p[MH_RESX + 1] = xres;
|
||||
p[MH_RESY] = yres >> 8;
|
||||
p[MH_RESY + 1] = yres;
|
||||
|
||||
p[MH_MAXAX] = maxax >> 8;
|
||||
p[MH_MAXAX + 1] = maxax;
|
||||
p[MH_MAXAY] = maxay >> 8;
|
||||
p[MH_MAXAY + 1] = maxay;
|
||||
p[MH_MAXAZ] = maxaz >> 8;
|
||||
p[MH_MAXAZ + 1] = maxaz;
|
||||
tablet_resx = xres;
|
||||
tablet_resy = yres;
|
||||
tablet_maxax = maxax;
|
||||
tablet_maxay = maxay;
|
||||
tablet_maxaz = maxaz;
|
||||
inputdevice_update_tablet_params();
|
||||
}
|
||||
|
||||
|
||||
@ -1446,11 +1456,12 @@ static void inputdevice_mh_abs (int x, int y, uae_u32 buttonbits)
|
||||
p[MH_CNT]++;
|
||||
tablet_data = 1;
|
||||
|
||||
#if 0
|
||||
if (inputdevice_is_tablet () <= 0) {
|
||||
tabletlib_tablet_info (1000, 1000, 0, 0, 0, 0, 1000, 1000);
|
||||
tabletlib_tablet (x, y, 0, 0, buttonbits, -1, 0, 0, 0);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
2620
jit/compemu_fpp.cpp
2620
jit/compemu_fpp.cpp
File diff suppressed because it is too large
Load Diff
@ -236,6 +236,16 @@ enum {
|
||||
cgiitRevolution // CapsRevolutionInfo
|
||||
};
|
||||
|
||||
// recognized image types
|
||||
enum {
|
||||
citError=0, // error preventing the type identification
|
||||
citUnknown, // unknown image type
|
||||
citIPF, // IPF image
|
||||
citCTRaw, // CT Raw image
|
||||
citKFStream, // KryoFlux stream files
|
||||
citDraft // Draft image
|
||||
};
|
||||
|
||||
// image error status
|
||||
enum {
|
||||
imgeOk=0,
|
||||
|
||||
@ -31,5 +31,7 @@ ExtSub SDWORD __cdecl CAPSFdcInvalidateTrack(PCAPSFDC pc, SDWORD drive);
|
||||
ExtSub SDWORD __cdecl CAPSFormatDataToMFM(PVOID pformattrack, UDWORD flag);
|
||||
ExtSub SDWORD __cdecl CAPSGetInfo(PVOID pinfo, SDWORD id, UDWORD cylinder, UDWORD head, UDWORD inftype, UDWORD infid);
|
||||
ExtSub SDWORD __cdecl CAPSSetRevolution(SDWORD id, UDWORD value);
|
||||
ExtSub SDWORD __cdecl CAPSGetImageType(PCHAR name);
|
||||
ExtSub SDWORD __cdecl CAPSGetImageTypeMemory(PUBYTE buffer, UDWORD length);
|
||||
|
||||
#endif
|
||||
|
||||
@ -16,8 +16,10 @@
|
||||
#include "CapsAPI.h"
|
||||
|
||||
#define CAPS_TRACKTIMING 1
|
||||
#define LOG_REVOLUTION 0
|
||||
|
||||
static SDWORD caps_cont[4]= {-1, -1, -1, -1};
|
||||
static bool caps_revolution_hack[4];
|
||||
static int caps_locked[4];
|
||||
static int caps_flags = DI_LOCK_DENVAR|DI_LOCK_DENNOISE|DI_LOCK_NOISE|DI_LOCK_UPDATEFD|DI_LOCK_TYPE|DI_LOCK_OVLBIT;
|
||||
static struct CapsVersionInfo cvi;
|
||||
@ -47,6 +49,8 @@ typedef SDWORD (__cdecl* CAPSGETINFO)(PVOID pinfo, SDWORD id, UDWORD cylinder, U
|
||||
static CAPSGETINFO pCAPSGetInfo;
|
||||
typedef SDWORD (__cdecl* CAPSSETREVOLUTION)(SDWORD id, UDWORD value);
|
||||
static CAPSSETREVOLUTION pCAPSSetRevolution;
|
||||
typedef SDWORD (__cdecl* CAPSGETIMAGETYPEMEMORY)(PUBYTE buffer, UDWORD length);
|
||||
static CAPSGETIMAGETYPEMEMORY pCAPSGetImageTypeMemory;
|
||||
|
||||
int caps_init (void)
|
||||
{
|
||||
@ -91,7 +95,8 @@ int caps_init (void)
|
||||
pCAPSUnlockAllTracks = (CAPSUNLOCKALLTRACKS)GetProcAddress (h, "CAPSUnlockAllTracks");
|
||||
pCAPSGetVersionInfo = (CAPSGETVERSIONINFO)GetProcAddress (h, "CAPSGetVersionInfo");
|
||||
pCAPSGetInfo = (CAPSGETINFO)GetProcAddress (h, "CAPSGetInfo");
|
||||
pCAPSSetRevolution = (CAPSSETREVOLUTION)GetProcAddress (h, "CAPSSetRevolution");
|
||||
pCAPSSetRevolution = (CAPSSETREVOLUTION)GetProcAddress(h, "CAPSSetRevolution");
|
||||
pCAPSGetImageTypeMemory = (CAPSGETIMAGETYPEMEMORY)GetProcAddress(h, "CAPSGetImageTypeMemory");
|
||||
|
||||
init = 1;
|
||||
cvi.type = 1;
|
||||
@ -123,6 +128,7 @@ int caps_loadimage (struct zfile *zf, int drv, int *num_tracks)
|
||||
uae_u8 *buf;
|
||||
TCHAR s1[100];
|
||||
struct CapsDateTimeExt *cdt;
|
||||
int type;
|
||||
|
||||
if (!caps_init ())
|
||||
return 0;
|
||||
@ -130,11 +136,25 @@ int caps_loadimage (struct zfile *zf, int drv, int *num_tracks)
|
||||
zfile_fseek (zf, 0, SEEK_END);
|
||||
len = zfile_ftell (zf);
|
||||
zfile_fseek (zf, 0, SEEK_SET);
|
||||
if (len <= 0)
|
||||
return 0;
|
||||
buf = xmalloc (uae_u8, len);
|
||||
if (!buf)
|
||||
return 0;
|
||||
if (zfile_fread (buf, len, 1, zf) == 0)
|
||||
return 0;
|
||||
type = -1;
|
||||
if (pCAPSGetImageTypeMemory) {
|
||||
type = pCAPSGetImageTypeMemory(buf, len);
|
||||
if (type == citError || type == citUnknown) {
|
||||
write_log(_T("caps: CAPSGetImageTypeMemory() returned %d\n"), type);
|
||||
return 0;
|
||||
}
|
||||
if (type == citKFStream || type == citDraft) {
|
||||
write_log(_T("caps: CAPSGetImageTypeMemory() returned unsupported image type %d\n"), type);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
ret = pCAPSLockImageMemory (caps_cont[drv], buf, len, 0);
|
||||
xfree (buf);
|
||||
if (ret != imgeOk) {
|
||||
@ -164,10 +184,10 @@ int caps_loadimage (struct zfile *zf, int drv, int *num_tracks)
|
||||
}
|
||||
|
||||
ret = pCAPSLoadImage(caps_cont[drv], caps_flags);
|
||||
caps_revolution_hack[drv] = type == citCTRaw;
|
||||
cdt = &ci.crdt;
|
||||
_stprintf (s1, _T("%d.%d.%d %d:%d:%d"), cdt->day, cdt->month, cdt->year, cdt->hour, cdt->min, cdt->sec);
|
||||
write_log (_T("caps: type:%d date:%s rel:%d rev:%d\n"),
|
||||
ci.type, s1, ci.release, ci.revision);
|
||||
write_log (_T("caps: type:%d imagetype:%d date:%s rel:%d rev:%d\n"), ci.type, type, s1, ci.release, ci.revision);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -228,11 +248,17 @@ static int load (struct CapsTrackInfoT2 *ci, int drv, int track, bool seed, bool
|
||||
return 1;
|
||||
}
|
||||
|
||||
int caps_loadrevolution (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *nextrev)
|
||||
int caps_loadrevolution (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *nextrev, bool track_access_done)
|
||||
{
|
||||
int len;
|
||||
struct CapsTrackInfoT2 ci;
|
||||
|
||||
if (!track_access_done && caps_revolution_hack[drv]) {
|
||||
#if LOG_REVOLUTION
|
||||
write_log(_T("%03d skipped revolution increase\n"), track);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
if (!load (&ci, drv, track, false, false))
|
||||
return 0;
|
||||
if (oldlib)
|
||||
@ -251,7 +277,9 @@ int caps_loadrevolution (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int tra
|
||||
CapsRevolutionInfo pinfo;
|
||||
*nextrev = 0;
|
||||
pCAPSGetInfo(&pinfo, caps_cont[drv], track / 2, track & 1, cgiitRevolution, 0);
|
||||
//write_log (_T("get next rev = %d\n"), pinfo.next);
|
||||
#if LOG_REVOLUTION
|
||||
write_log (_T("%03d load next rev = %d\n"), track, pinfo.next);
|
||||
#endif
|
||||
if (pinfo.max > 0)
|
||||
*nextrev = pinfo.next;
|
||||
}
|
||||
@ -270,20 +298,28 @@ int caps_loadtrack (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, i
|
||||
if (nextrev && pCAPSSetRevolution) {
|
||||
if (sametrack) {
|
||||
pCAPSSetRevolution(caps_cont[drv], *nextrev);
|
||||
//write_log (_T("set rev = %d\n"), *nextrev);
|
||||
#if LOG_REVOLUTION
|
||||
write_log(_T("%03d set rev = %d\n"), track, *nextrev);
|
||||
#endif
|
||||
} else {
|
||||
pCAPSSetRevolution(caps_cont[drv], 0);
|
||||
#if LOG_REVOLUTION
|
||||
write_log(_T("%03d clear rev\n"), track, *nextrev);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (!load (&ci, drv, track, true, sametrack != true))
|
||||
return 0;
|
||||
|
||||
if (nextrev && sametrack && pCAPSGetInfo) {
|
||||
*nextrev = 0;
|
||||
if (pCAPSGetInfo) {
|
||||
if (nextrev)
|
||||
*nextrev = 0;
|
||||
pCAPSGetInfo(&pinfo, caps_cont[drv], track / 2, track & 1, cgiitRevolution, 0);
|
||||
//write_log (_T("get next rev = %d\n"), pinfo.next);
|
||||
if (pinfo.max > 0)
|
||||
#if LOG_REVOLUTION
|
||||
write_log(_T("%03d get next rev = %d\n"), track, pinfo.next);
|
||||
#endif
|
||||
if (nextrev && sametrack && pinfo.max > 0)
|
||||
*nextrev = pinfo.next;
|
||||
}
|
||||
|
||||
|
||||
@ -2,5 +2,5 @@ int caps_init (void);
|
||||
void caps_unloadimage (int drv);
|
||||
int caps_loadimage (struct zfile *zf, int drv, int *num_tracks);
|
||||
int caps_loadtrack (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *multirev, int *gapoffset, int *nextrev, bool setrev);
|
||||
int caps_loadrevolution (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *nextrev);
|
||||
int caps_loadrevolution (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *nextrev, bool track_access_done);
|
||||
|
||||
|
||||
@ -1569,7 +1569,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam,
|
||||
case WT_PACKET:
|
||||
{
|
||||
PACKET pkt;
|
||||
if (inputdevice_is_tablet () <= 0) {
|
||||
if (inputdevice_is_tablet () <= 0 && !currprefs.tablet_library) {
|
||||
close_tablet (tablet);
|
||||
tablet = NULL;
|
||||
return 0;
|
||||
|
||||
@ -19,11 +19,11 @@
|
||||
#define LANG_DLL 1
|
||||
|
||||
#if WINUAEPUBLICBETA
|
||||
#define WINUAEBETA _T("11")
|
||||
#define WINUAEBETA _T("12")
|
||||
#else
|
||||
#define WINUAEBETA _T("")
|
||||
#endif
|
||||
#define WINUAEDATE MAKEBD(2014, 3, 18)
|
||||
#define WINUAEDATE MAKEBD(2014, 3, 22)
|
||||
#define WINUAEEXTRA _T("")
|
||||
//#define WINUAEEXTRA _T("AmiKit Preview")
|
||||
//#define WINUAEEXTRA _T("Amiga Forever Edition")
|
||||
|
||||
@ -11,6 +11,59 @@
|
||||
|
||||
- restore only single input target to default.
|
||||
|
||||
Beta 12:
|
||||
|
||||
- Config file writing created corrupted (and harmless) config file lines, most common being
|
||||
uaehf line which fortunately isn't important config line entry. (b11)
|
||||
- BCHG/BCLR/BSET allowed PC-relative addressing modes, broken since the beginning. (from Hatari)
|
||||
- If program read disk by polling DSKBYTR (not using DMA), index emulation was unstable.
|
||||
- Switching bitplane DMA on few cycles (not yet confirmed, I assume range that makes sense is 1 to 3)
|
||||
cycles before DDFSTOP will also trigger ECS/AGA "passed plfstop" state change. (Death Trap)
|
||||
- Full tablet emulation boot division by zero guru fix.
|
||||
- Tablet.library emulation now works but at least dpaint5 does not seem to do anything with pressure
|
||||
data. It reads pressure tag contents but nothing seems to happen.
|
||||
|
||||
Beta 11:
|
||||
|
||||
- Borderblank + bordersprite caused border glitches in some situations.
|
||||
- CDTV front panel buttons' default state after reset should be enabled, not disabled.
|
||||
- Added new double options to non-lace modes. Not really useful, maybe be moved somewhere else later..
|
||||
- 68040 MOVE16 write access error stack frame is now correct.
|
||||
- Editing non-existing new style real harddrive config entry opened hardfile properties dialog.
|
||||
- Separate filter options for native and RTG modes. Currently only following settings are RTG compatible:
|
||||
Direct3D shader filters (no software filter support and never will be), masks, overlays, scanlines.
|
||||
- New automatic resolution option was unreliable in some situations.
|
||||
- Do not detect modes with VTOTAL=350 or less as scandoubled to fix Super72 halved height.
|
||||
- tablet.library emulation, totally untested, do not enable.
|
||||
- After long field to short field change last line still showed old background color(s) if line had any
|
||||
background color changes before field mode was changed.
|
||||
- Master floppy write protection config option was not loaded from config. (wrong config entry name..)
|
||||
- Disk emulation multirevolution support was unstable, disk revolution data stream change was not always bit perfect.
|
||||
- Added Super Card Pro (scp) image file support. (Don't ask me if images don't work, I didn't implement it originally)
|
||||
- Added support for raw dumps from Softpres Capture Tool and KryoFlux using new capslib v0.5.
|
||||
|
||||
Yes, above two changes in same beta is only a strange coincidence. Note that both are raw dumps which
|
||||
can't be confirmed easily, don't bother me if there are compatibility problems.
|
||||
|
||||
FPU improvements (Mostly low level stuff that only makes difference if unimplemented checkbox is not ticked, much
|
||||
more important for Previous emulator, NextStep OS requires FPU and uses it heavily):
|
||||
|
||||
- 6888x any FPU instruction (except FSAVE/FRESTORE) causes null state to idle state transition but
|
||||
68040+ conditional FPU instructions won't affect null state.
|
||||
- 68040 unimplemented FPU instruction emulation was broken, FSAVE exception frame was not emulated, 68040.library
|
||||
emulation code needs it for proper operation.
|
||||
- 68040/060 FPU FMOVECR is now unimplemented instruction.
|
||||
- 68040/060 unimplemented packed-decimal data type exception is now emulated.
|
||||
- 68060 FMOVEM.X with dynamic list now causes unimplemented effective address exception.
|
||||
- 68060 F<op>.X #imm,FPn and F<op>.P #imm,FPn now causes unimplemented effective address exception.
|
||||
- 68060 FMOVEM.L #imm,<more than 1 control register> now causes unimplemented effective address exception.
|
||||
- FMOVEM.X with dynamic list and -(An) and (An)+ effective address overrides static/dynamic post/pred state.
|
||||
(for example FMOVEM.X Dn,-(An) uses pre-decrement even if mode bits are set to dynamic post-increment)
|
||||
- All FPU FPSR register (overflow, div by zero etc..) status bits emulated. (May not be fully reliable)
|
||||
- 6888x Packed-Decimal Real k-factor support fully implemented. (May still have rounding bugs)
|
||||
|
||||
This should complete emulation all FPU features except arithmetic exceptions (that no one seems to use)
|
||||
|
||||
Beta 10:
|
||||
|
||||
- Programmed display mode positioning bug fixed, should fix remaining problems with clipped left or right edges.
|
||||
|
||||
12
table68k
12
table68k
@ -101,15 +101,15 @@
|
||||
- 0 0 4 fiea
|
||||
0000 1000 01ss sSSS:000:--Z--:-----:13: BCHG #1,s[Dreg]
|
||||
- 6 0 6
|
||||
0000 1000 01ss sSSS:000:--Z--:-----:13: BCHG #1,s[!Areg,Dreg,Immd]
|
||||
0000 1000 01ss sSSS:000:--Z--:-----:13: BCHG #1,s[!Areg,Dreg,Immd,PC8r,PC16]
|
||||
- 0 0 6 fiea
|
||||
0000 1000 10ss sSSS:000:--Z--:-----:13: BCLR #1,s[Dreg]
|
||||
- 6 0 6
|
||||
0000 1000 10ss sSSS:000:--Z--:-----:13: BCLR #1,s[!Areg,Dreg,Immd]
|
||||
0000 1000 10ss sSSS:000:--Z--:-----:13: BCLR #1,s[!Areg,Dreg,Immd,PC8r,PC16]
|
||||
- 0 0 6 fiea
|
||||
0000 1000 11ss sSSS:000:--Z--:-----:13: BSET #1,s[Dreg]
|
||||
- 6 0 6
|
||||
0000 1000 11ss sSSS:000:--Z--:-----:13: BSET #1,s[!Areg,Dreg,Immd]
|
||||
0000 1000 11ss sSSS:000:--Z--:-----:13: BSET #1,s[!Areg,Dreg,Immd,PC8r,PC16]
|
||||
- 0 0 6 fiea
|
||||
|
||||
0000 1010 0011 1100:000:XNZVC:XNZVC:10: EORSR.B #1
|
||||
@ -144,15 +144,15 @@
|
||||
- 0 0 4 fea
|
||||
0000 rrr1 01ss sSSS:000:--Z--:-----:13: BCHG Dr,s[Dreg]
|
||||
- 6 0 6
|
||||
0000 rrr1 01ss sSSS:000:--Z--:-----:13: BCHG Dr,s[!Areg,Dreg,Immd]
|
||||
0000 rrr1 01ss sSSS:000:--Z--:-----:13: BCHG Dr,s[!Areg,Dreg,Immd,PC8r,PC16]
|
||||
- 0 0 6 fea
|
||||
0000 rrr1 10ss sSSS:000:--Z--:-----:13: BCLR Dr,s[Dreg]
|
||||
- 6 0 6
|
||||
0000 rrr1 10ss sSSS:000:--Z--:-----:13: BCLR Dr,s[!Areg,Dreg,Immd]
|
||||
0000 rrr1 10ss sSSS:000:--Z--:-----:13: BCLR Dr,s[!Areg,Dreg,Immd,PC8r,PC16]
|
||||
- 0 0 6 fea
|
||||
0000 rrr1 11ss sSSS:000:--Z--:-----:13: BSET Dr,s[Dreg]
|
||||
- 6 0 6
|
||||
0000 rrr1 11ss sSSS:000:--Z--:-----:13: BSET Dr,s[!Areg,Dreg,Immd]
|
||||
0000 rrr1 11ss sSSS:000:--Z--:-----:13: BSET Dr,s[!Areg,Dreg,Immd,PC8r,PC16]
|
||||
- 0 0 6 fea
|
||||
|
||||
% Move cycles are special cased in gencpu.c
|
||||
|
||||
@ -55,6 +55,8 @@ static void filltags (uaecptr tabletdata)
|
||||
put_long (tabletdata + 12, tablet_maxx);
|
||||
put_long (tabletdata + 16, tablet_maxy);
|
||||
|
||||
//write_log(_T("P=%d BUT=%08X\n"), tablet_pressure, tablet_buttonbits);
|
||||
|
||||
// pressure
|
||||
put_long (p, 0x8003a000 + 6);
|
||||
p += 4;
|
||||
@ -135,10 +137,10 @@ static uae_u32 REGPARAM2 lib_dofunc (TrapContext *context)
|
||||
uaecptr td = m68k_areg (regs, 1);
|
||||
filltags (td);
|
||||
if (ksversion < 39)
|
||||
return 1;
|
||||
return 0;
|
||||
td = get_long (im + 52);
|
||||
if (!td)
|
||||
return 1;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
static uae_u32 REGPARAM2 lib_unkfunc (TrapContext *context)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user