1=BLTCON0 channel mask
2=total cycles per blitted word
-3=steals all cycles if BLTNASTY=1 (always if A-channel is enabled. this is illogical..)
+[3=steals all cycles if BLTNASTY=1 (always if A-channel is enabled. this is illogical..)]
4=total cycles per blitted word in fillmode
5=cycle diagram (first cycle)
6=main cycle diagram (ABCD=channels,-=idle cycle,x=idle cycle but bus allocated)
1 234 5 6
F 4*4*ABC- ABCD
-E 4*4*ABC- ABCx
+E 4*4*ABC- ABC-
D 3*4 AB- ABD
-C 3*4 AB- ABx
+C 3*4 AB- AB-
B 3*3*AC- ACD
-A 3*3*AC- ACx
+A 3*3*AC- AC-
9 2*3 A- AD
-8 2*3 A- Ax
+8 2*3 A- A-
7 4 4 -BC- -BCD
6 4 4 -BC- -BC-
5 3 4 -B- -BD
Can someone explain this? Why does idle cycles need bus cycles?
- Fill mode may add one extra real idle cycle.(depends on channel mask)
- All blits with channel A enabled use all available bus cycles
- (stops CPU accesses to Agnus bus if BLTNASTY=1)
+ (stops CPU accesses to Agnus bus if BLTNASTY=1) WTF? I did another test
+ and this can't be true... Maybe I am becoming crazy..
- idle cycles (no A-channel enabled) are not "used" by blitter, they are freely
available for CPU.
{ 2, 3, 0,2,4, 2,0 }, /* 5 */
{ 0, 4, 0,2,3,0 }, /* 6 */
{ 3, 4, 0,2,3,4, 2,3,0 }, /* 7 */
- { 0, 2, 1,-1 }, /* 8 */
+ { 0, 2, 1,0 }, /* 8 */
{ 2, 2, 1,4, 1,0 }, /* 9 */
- { 0, 3, 1,3,-1 }, /* A */
+ { 0, 3, 1,3,0 }, /* A */
{ 3, 3, 1,3,4, 1,3,0 }, /* B */
- { 2, 3, 1,2,-1, 1,2 }, /* C */
+ { 2, 3, 1,2,0, 1,2 }, /* C */
{ 3, 3, 1,2,4, 1,2,0 }, /* D */
- { 0, 4, 1,2,3,-1 }, /* E */
+ { 0, 4, 1,2,3,0 }, /* E */
{ 4, 4, 1,2,3,4, 1,2,3,0 } /* F */
};
{ 3, 4, 0,2,5,4, 2,0,0 }, /* 5 */
{ 0, 4, 2,3,5,0 }, /* 6 */
{ 3, 4, 2,3,5,4, 2,3,0 }, /* 7 */
- { 0, 3, 1,5,-1 }, /* 8 */
+ { 0, 3, 1,5,0 }, /* 8 */
{ 2, 3, 1,5,4, 1,0}, /* 9 */
{ 0, 3, 1,3,5, }, /* A */
{ 3, 3, 1,3,4, 1,3,0 }, /* B */
- { 2, 4, 1,2,5,-1, 1,2 }, /* C */
+ { 2, 4, 1,2,5,0, 1,2 }, /* C */
{ 3, 4, 1,2,5,4, 1,2,0 }, /* D */
- { 0, 4, 1,2,3,-1 }, /* E */
+ { 0, 4, 1,2,3,0 }, /* E */
{ 4, 4, 1,2,3,4, 1,2,3,0 } /* F */
};
void dumpcia (void)
{
- write_log ("A: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n",
+ console_out ("A: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n",
ciaacra, ciaacrb, ciaaicr, ciaaimask, ciaata, ciaala, ciaatb, ciaalb);
- write_log ("TOD %06x ALARM %06x %c%c\n",
+ console_out ("TOD %06x ALARM %06x %c%c\n",
ciaatod, ciaaalarm, ciaatlatch ? 'L' : ' ', ciaatodon ? ' ' : 'S');
- write_log ("B: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n",
+ console_out ("B: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n",
ciabcra, ciabcrb, ciaaicr, ciabimask, ciabta, ciabla, ciabtb, ciablb);
- write_log ("TOD %06x ALARM %06x %c%c\n",
+ console_out ("TOD %06x ALARM %06x %c%c\n",
ciabtod, ciabalarm, ciabtlatch ? 'L' : ' ', ciabtodon ? ' ' : 'S');
}
void dumpcustom (void)
{
- write_log ("DMACON: %x INTENA: %x INTREQ: %x VPOS: %x HPOS: %x\n", DMACONR(),
+ console_out ("DMACON: %x INTENA: %x INTREQ: %x VPOS: %x HPOS: %x\n", DMACONR(),
(unsigned int)intena, (unsigned int)intreq, (unsigned int)vpos, (unsigned int)current_hpos());
- write_log ("COP1LC: %08lx, COP2LC: %08lx COPPTR: %08lx\n", (unsigned long)cop1lc, (unsigned long)cop2lc, cop_state.ip);
- write_log ("DIWSTRT: %04x DIWSTOP: %04x DDFSTRT: %04x DDFSTOP: %04x\n",
+ console_out ("COP1LC: %08lx, COP2LC: %08lx COPPTR: %08lx\n", (unsigned long)cop1lc, (unsigned long)cop2lc, cop_state.ip);
+ console_out ("DIWSTRT: %04x DIWSTOP: %04x DDFSTRT: %04x DDFSTOP: %04x\n",
(unsigned int)diwstrt, (unsigned int)diwstop, (unsigned int)ddfstrt, (unsigned int)ddfstop);
- write_log ("BPLCON 0: %04x 1: %04x 2: %04x 3: %04x 4: %04x\n", bplcon0, bplcon1, bplcon2, bplcon3, bplcon4);
+ console_out ("BPLCON 0: %04x 1: %04x 2: %04x 3: %04x 4: %04x\n", bplcon0, bplcon1, bplcon2, bplcon3, bplcon4);
if (timeframes) {
- write_log ("Average frame time: %f ms [frames: %d time: %d]\n",
+ console_out ("Average frame time: %f ms [frames: %d time: %d]\n",
(double)frametime / timeframes, timeframes, frametime);
if (total_skipped)
- write_log ("Skipped frames: %d\n", total_skipped);
+ console_out ("Skipped frames: %d\n", total_skipped);
}
- /*for (i=0; i<256; i++) if (blitcount[i]) write_log ("minterm %x = %d\n",i,blitcount[i]); blitter debug */
}
static void gen_custom_tables (void)
illg_debug_check (ad, rw, size, val);
} else if ((mask & 3) == 3) {
if (rw)
- write_log ("RW: %08.8X=%02.2X %c PC=%08.8X\n", ad, v, rws, pc);
+ console_out ("RW: %08.8X=%02.2X %c PC=%08.8X\n", ad, v, rws, pc);
else
- write_log ("RW: %08.8X %c PC=%08.8X\n", ad, rws, pc);
+ console_out ("RW: %08.8X %c PC=%08.8X\n", ad, rws, pc);
if (illgdebug_break)
activate_debugger ();
} else if ((mask & 1) && rw) {
- write_log ("RO: %08.8X=%02.2X %c PC=%08.8X\n", ad, v, rws, pc);
+ console_out ("RO: %08.8X=%02.2X %c PC=%08.8X\n", ad, v, rws, pc);
if (illgdebug_break)
activate_debugger ();
} else if ((mask & 2) && !rw) {
- write_log ("WO: %08.8X %c PC=%08.8X\n", ad, rws, pc);
+ console_out ("WO: %08.8X %c PC=%08.8X\n", ad, rws, pc);
if (illgdebug_break)
activate_debugger ();
}
uae_u32 len = 1;
if (more_params (c))
len = readhex (c);
- write_log ("cleared logging addresses %08.8X - %08.8X\n", addr, addr + len);
+ console_out ("cleared logging addresses %08.8X - %08.8X\n", addr, addr + len);
while (len > 0) {
addr &= 0xffffff;
illgdebug[addr] = 0;
char *name = a1->name;
if (name == NULL)
name = "<none>";
- write_log("%08.8X %6dK %s\n", j << 16, (i - j) << (16 - 10), name);
+ console_out("%08.8X %6dK %s\n", j << 16, (i - j) << (16 - 10), name);
j = i;
a1 = a2;
}
}
}
} else {
- write_log ("Memwatch %d: break at %08.8X.%c %c %08.8X\n", memwatch_triggered - 1, mwhit.addr,
+ console_out ("Memwatch %d: break at %08.8X.%c %c %08.8X\n", memwatch_triggered - 1, mwhit.addr,
mwhit.size == 1 ? 'B' : (mwhit.size == 2 ? 'W' : 'L'), mwhit.rw ? 'W' : 'R', mwhit.val);
memwatch_triggered = 0;
}
mmur = regs;
pc = m68k_getpc();
if (mmu_logging)
- write_log ("MMU: hit %08.8X SZ=%d RW=%d V=%08.8X PC=%08.8X\n", addr, size, rw, v, pc);
+ console_out ("MMU: hit %08.8X SZ=%d RW=%d V=%08.8X PC=%08.8X\n", addr, size, rw, v, pc);
p = mmu_regs;
put_long (p, 0); p += 4;
if (maddr == addr) /* infinite mmu hit loop? no thanks.. */
return 1;
if (mmu_logging)
- write_log ("MMU: remap %08.8X -> %08.8X SZ=%d RW=%d\n", addr, maddr, size, rw);
+ console_out ("MMU: remap %08.8X -> %08.8X SZ=%d RW=%d\n", addr, maddr, size, rw);
if (rw) {
switch (size)
{
if (currprefs.cachesize) {
wasjit = currprefs.cachesize;
changed_prefs.cachesize = 0;
- write_log ("MMU: JIT disabled\n");
+ console_out ("MMU: JIT disabled\n");
check_prefs_changed_comp();
}
if (mmu_enabled) {
mmu_free();
deinitialize_memwatch();
- write_log ("MMU: disabled\n");
+ console_out ("MMU: disabled\n");
changed_prefs.cachesize = wasjit;
}
mmu_logging = 0;
p = parm;
mmu_struct = p;
if (get_long (p) != 1) {
- write_log ("MMU: version mismatch %d <> %d\n", get_long (p), 1);
+ console_out ("MMU: version mismatch %d <> %d\n", get_long (p), 1);
return 0;
}
p += 4;
if (mn->mmubank->p_addr == parm2) {
getmmubank(mn->mmubank, parm2);
if (mmu_logging)
- write_log ("MMU: bank update %08.8X: %08.8X - %08.8X %08.8X\n",
+ console_out ("MMU: bank update %08.8X: %08.8X - %08.8X %08.8X\n",
mn->mmubank->flags, mn->mmubank->addr, mn->mmubank->len + mn->mmubank->addr,
mn->mmubank->remap);
}
}
initialize_memwatch(1);
- write_log ("MMU: enabled, %d banks, CB=%08.8X S=%08.8X BNK=%08.8X SF=%08.8X, %d*%d\n",
+ console_out ("MMU: enabled, %d banks, CB=%08.8X S=%08.8X BNK=%08.8X SF=%08.8X, %d*%d\n",
size - 1, mmu_callback, parm, banks, mmu_regs, mmu_slots, 1 << MMU_PAGE_SHIFT);
set_special (SPCFLAG_BRK);
return 1;
for (i = 0; i < MAX_FLOPPY_DRIVES; i++) {
drive *drv = &floppy[i];
if (!(disabled & (1 << i))) {
- write_log ("Drive %d: motor %s cylinder %2d sel %s %s mfmpos %d/%d\n",
+ console_out ("Drive %d: motor %s cylinder %2d sel %s %s mfmpos %d/%d\n",
i, drv->motoroff ? "off" : " on", drv->cyl, (selected & (1 << i)) ? "no" : "yes",
drive_writeprotected(drv) ? "ro" : "rw", drv->mfmpos, drv->tracklen);
w = word;
for (j = 0; j < 15; j++) {
- write_log ("%04.4X ", w);
+ console_out ("%04.4X ", w);
for (k = 0; k < 16; k++) {
w <<= 1;
w |= getonebit (drv->bigmfmbuf, drv->mfmpos + j * 16 + k);
}
}
- write_log ("\n");
+ console_out ("\n");
}
}
- write_log ("side %d, dma %d, bitoffset %d, word %04.4X, dskbytr %04.4X adkcon %04.4X dsksync %04.4X\n", side, dskdmaen, bitoffset, word, dskbytr_val, adkcon, dsksync);
+ console_out ("side %d, dma %d, bitoffset %d, word %04.4X, dskbytr %04.4X adkcon %04.4X dsksync %04.4X\n", side, dskdmaen, bitoffset, word, dskbytr_val, adkcon, dsksync);
}
static void disk_dmafinished (void)
move.l d0,a4
moveq #20,d0
- move.l a2,a1
+ move.l a4,a1
jsr -$012c(a6) ;SetTaskPri
moveq #0,d0
db(0x4e); db(0x75); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04);
db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x74); db(0x00);
db(0x01); db(0xc2); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda);
- db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4a); db(0x4e); db(0xae);
+ db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae);
db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x43); db(0xfa); db(0x01); db(0xae);
db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2e); db(0x00); db(0x70); db(0x00);
db(0x30); db(0x3c); db(0x00); db(0x44); db(0x22); db(0x3c); db(0x00); db(0x01);
}
}
- if (regs.spcflags & SPCFLAG_STOP)
+ if (regs.spcflags) {
+ uae_u32 of = regs.spcflags;
+ regs.spcflags &= ~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE);
do_specialties (0);
+ regs.spcflags |= of & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE);
+ }
#ifndef JIT
m68k_run1 (currprefs.cpu_level == 0 && currprefs.cpu_cycle_exact ? m68k_run_1_ce :
currprefs.cpu_level == 0 && currprefs.cpu_compatible ? m68k_run_1 :
if (regs.s && regs.m == 0) regs.isp = m68k_areg(regs, 7);
f_out (f, "USP=%08lx ISP=%08lx MSP=%08lx VBR=%08lx\n",
regs.usp,regs.isp,regs.msp,regs.vbr);
- f_out (f, "T=%d%d S=%d M=%d X=%d N=%d Z=%d V=%d C=%d IMASK=%d\n",
+ f_out (f, "T=%d%d S=%d M=%d X=%d N=%d Z=%d V=%d C=%d IMASK=%d STP=%d\n",
regs.t1, regs.t0, regs.s, regs.m,
- GET_XFLG, GET_NFLG, GET_ZFLG, GET_VFLG, GET_CFLG, regs.intmask);
+ GET_XFLG, GET_NFLG, GET_ZFLG, GET_VFLG, GET_CFLG,
+ regs.intmask, regs.stopped);
#ifdef FPUEMU
if (currprefs.cpu_level >= 2) {
uae_u32 fpsr;
static int mediacheck_full (int unitnum, struct device_info *di)
{
uae_u8 cmd1[10] = { 0x25,0,0,0,0,0,0,0,0,0 }; /* READ CAPACITY */
- uae_u8 cmd2[10] = { 0x5a,0x08,0,0,0,0,0,0,0x10,0 }; /* MODE SENSE */
int ok, outlen;
uae_u8 *p = si[unitnum].buf;
di->bytespersector = (p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7];
di->cylinders = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
}
- ok = execscsicmd_in(unitnum, cmd2, sizeof cmd2, &outlen) ? 1 : 0;
- if (ok) {
- di->write_protected = (p[3]& 0x80) ? 1 : 0;
+ if (di->type == INQ_DASD) {
+ uae_u8 cmd2[10] = { 0x5a,0x08,0,0,0,0,0,0,0x10,0 }; /* MODE SENSE */
+ ok = execscsicmd_in(unitnum, cmd2, sizeof cmd2, &outlen) ? 1 : 0;
+ if (ok) {
+ di->write_protected = (p[3]& 0x80) ? 1 : 0;
+ }
}
return 1;
}
static int mediacheck_full (int unitnum, struct device_info *di)
{
uae_u8 cmd1[10] = { 0x25,0,0,0,0,0,0,0,0,0 }; /* READ CAPACITY */
- uae_u8 cmd2[10] = { 0x5a,0x08,0,0,0,0,0,0,0x10,0 }; /* MODE SENSE */
- char p[10];
- int ok;
+ uae_u8 *p;
+ int outlen;
di->bytespersector = 2048;
di->cylinders = 1;
di->write_protected = 1;
if (dev_info[unitnum].handle == INVALID_HANDLE_VALUE)
return 0;
- ok = execscsicmd(unitnum, cmd1, sizeof cmd1, p, sizeof p) >= 0 ? 1 : 0;
- if (ok) {
+ outlen = 32;
+ p = execscsicmd_in(unitnum, cmd1, sizeof cmd1, &outlen);
+ if (p && outlen >= 8) {
di->bytespersector = (p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7];
di->cylinders = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
}
- ok = execscsicmd(unitnum, cmd2, sizeof cmd2, p, sizeof p) >= 0 ? 1 : 0;
- if (ok) {
- di->write_protected = (p[3]& 0x80) ? 1 : 0;
+ if (di->type == INQ_DASD) {
+ uae_u8 cmd2[10] = { 0x5a,0x08,0,0,0,0,0,0,0xf0,0 }; /* MODE SENSE */
+ outlen = 32;
+ p = execscsicmd_in(unitnum, cmd2, sizeof cmd2, &outlen);
+ if (p && outlen >= 4) {
+ di->write_protected = (p[3]& 0x80) ? 1 : 0;
+ }
}
return 1;
}
dev_info[unitnum].mediainserted = mediacheck (unitnum);
write_log ("SPTI: unit %d opened [%s], %s, '%s'\n", unitnum,
dev_info[unitnum].isatapi ? "ATAPI" : "SCSI",
- dev_info[unitnum].mediainserted ? "CD inserted" : "Drive empty", inqdata + 8);
+ dev_info[unitnum].mediainserted ? "media inserted" : "drive empty", inqdata + 8);
} else {
write_log ("SPTI: unit %d, type %d, '%s'\n",
unitnum, dev_info[unitnum].type, inqdata + 8);
di->target = unitnum;
di->lun = 0;
di->media_inserted = mediacheck (unitnum);
- di->write_protected = 1;
mediacheck_full (unitnum, di);
di->type = dev_info[unitnum].type;
di->id = unitnum + 1;
extern int manual_palette_refresh_needed;
extern int mouseactive, focus;
extern int ignore_messages_all;
-#define WINUAEBETA 1
-#define WINUAEBETASTR " Beta 1"
+#define WINUAEBETA 0
+#define WINUAEBETASTR ""
extern char start_path_exe[MAX_DPATH];
extern char start_path_data[MAX_DPATH];
SendDlgItemMessage (hDlg, IDC_PATHS_DEFAULTTYPE, CB_SETCURSEL, selpath, 0);
if (numtypes > 1) {
EnableWindow(GetDlgItem (hDlg, IDC_PATHS_DEFAULTTYPE), TRUE);
- ShowWindow(GetDlgItem (hDlg, IDC_PATHS_DEFAULTTYPE), TRUE);
+ ShowWindow(GetDlgItem (hDlg, IDC_PATHS_DEFAULTTYPE), SW_SHOW);
} else {
EnableWindow(GetDlgItem (hDlg, IDC_PATHS_DEFAULTTYPE), FALSE);
- ShowWindow(GetDlgItem (hDlg, IDC_PATHS_DEFAULTTYPE), FALSE);
+ ShowWindow(GetDlgItem (hDlg, IDC_PATHS_DEFAULTTYPE), SW_HIDE);
}
values_to_pathsdialog (hDlg);
recursive--;
}
SendDlgItemMessage (hDlg, IDC_LANGUAGE, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage (hDlg, IDC_LANGUAGE, CB_ADDSTRING, 0, (LPARAM)"Autodetect");
- SendDlgItemMessage (hDlg, IDC_LANGUAGE, CB_ADDSTRING, 0, (LPARAM)"English (build-in)");
+ SendDlgItemMessage (hDlg, IDC_LANGUAGE, CB_ADDSTRING, 0, (LPARAM)"English (built-in)");
if (langid == 0)
idx = 1;
cnt = 2;
switch (msg)
{
case WM_INITDIALOG:
+#if !WINUAEBETA
+ ShowWindow (GetDlgItem(hDlg, IDC_FILTERAUTORES), SW_HIDE);
+#endif
pages[HW3D_ID] = hDlg;
currentpage = HW3D_ID;
enable_for_hw3ddlg (hDlg);
SetWindowPos (panelDlg, HWND_TOP, x + (pw - w) / 2, y + (ph - h) / 2, 0, 0,
SWP_NOSIZE | SWP_NOOWNERZORDER);
}
- ShowWindow(GetDlgItem(hDlg, IDC_PANEL_FRAME), FALSE);
- ShowWindow(GetDlgItem(hDlg, IDC_PANEL_FRAME_OUTER), !fullpanel);
- ShowWindow(GetDlgItem(hDlg, IDC_PANELTREE), !fullpanel);
- ShowWindow (panelDlg, TRUE);
+ ShowWindow(GetDlgItem(hDlg, IDC_PANEL_FRAME), SW_HIDE);
+ ShowWindow(GetDlgItem(hDlg, IDC_PANEL_FRAME_OUTER), !fullpanel ? SW_SHOW : SW_HIDE);
+ ShowWindow(GetDlgItem(hDlg, IDC_PANELTREE), !fullpanel ? SW_SHOW : SW_HIDE);
+ ShowWindow (panelDlg, SW_SHOW);
EnableWindow (GetDlgItem (hDlg, IDHELP), pHtmlHelp && ppage[currentpage].help ? TRUE : FALSE);
ToolTipHWND = CreateWindowEx (WS_EX_TOPMOST,