28.05.2010

parent 02a1469e
......@@ -14,8 +14,7 @@ DIST_SUBDIRS = \
gui-none gui-beos gui-cocoa gui-gtk gui-muirexx \
od-generic od-amiga od-beos od-linux od-macosx od-win32 \
td-none td-amigaos td-beos td-posix td-sdl td-win32 \
keymap \
caps dms
keymap caps dms
BUILT_SOURCES = \
blit.h blitfunc.h blitfunc.c blittable.c \
......
......@@ -319,8 +319,7 @@ DIST_SUBDIRS = \
gui-none gui-beos gui-cocoa gui-gtk gui-muirexx \
od-generic od-amiga od-beos od-linux od-macosx od-win32 \
td-none td-amigaos td-beos td-posix td-sdl td-win32 \
keymap \
caps dms
keymap caps dms
BUILT_SOURCES = \
blit.h blitfunc.h blitfunc.c blittable.c \
......
......@@ -402,7 +402,7 @@ static int qcode_valid;
static int cdrom_disk, cdrom_paused, cdrom_playing;
static int cdrom_command_active;
static int cdrom_command_length;
static int cdrom_checksum_error;
static int cdrom_checksum_error, cdrom_unknown_command;
static int cdrom_data_offset, cdrom_speed, cdrom_sector_counter;
static int cdrom_current_sector, cdrom_seek_delay;
static int cdrom_data_end, cdrom_leadout;
......@@ -788,8 +788,8 @@ static int cdrom_command_led (void)
static int cdrom_command_media_status (void)
{
cdrom_result_buffer[0] = 10;
cdrom_result_buffer[1] = sys_command_ismedia (DF_IOCTL, unitnum, 0);
cdrom_result_buffer[0] = 0x0a;
cdrom_result_buffer[1] = sys_command_ismedia (DF_IOCTL, unitnum, 0) ? 0x83: 0x80;
return 2;
}
......@@ -942,6 +942,8 @@ static void cdrom_run_command (void)
uae_u8 checksum;
uae_u8 *pp = get_real_address (cdtx_address);
if (!(cdrom_flags & CDFLAG_TXD))
return;
for (;;) {
if (cdrom_command_active)
return;
......@@ -953,13 +955,20 @@ static void cdrom_run_command (void)
return;
}
cdrom_checksum_error = 0;
cdrom_unknown_command = 0;
cmd_len = command_lengths[cdrom_command & 0x0f];
if (cmd_len < 0) {
#if AKIKO_DEBUG_IO_CMD
write_log ("unknown command\n");
write_log ("unknown command %x\n", cdrom_command & 0x0f);
#endif
cmd_len = 1;
cdrom_unknown_command = 1;
cdrom_command_active = 1;
cdrom_command_length = 1;
set_status (CDINTERRUPT_TXDMADONE);
return;
}
#if AKIKO_DEBUG_IO_CMD
write_log ("IN:");
#endif
......@@ -1020,7 +1029,7 @@ static void cdrom_run_command_run (void)
}
if (len == 0)
return;
if (cdrom_checksum_error)
if (cdrom_checksum_error || cdrom_unknown_command)
cdrom_result_buffer[1] |= 0x80;
cdrom_start_return_data (len);
}
......
......@@ -558,7 +558,6 @@ static void led_vsync (void)
v = led_cycles_on * 255 / led_cycles_off;
else
v = 255;
if (v < 0)
v = 0;
if (v > 255)
......
......@@ -367,7 +367,6 @@ STATIC_INLINE int comp_fp_put (uae_u32 opcode, uae_u16 extra)
return -1;
}
}
switch (size) {
case 0: /* Long */
fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.l);
......@@ -483,7 +482,6 @@ void comp_fscc_opp (uae_u32 opcode, uae_u16 extra)
mov_l_ri(S1,255);
mov_l_ri(S4,0);
switch (extra & 0x0f) { /* according to fpp.c, the 0x10 bit is ignored */
case 0: break; /* set never */
case 1:
......@@ -614,27 +612,46 @@ void comp_fbcc_opp (uae_u32 opcode)
case 4:
mov_l_rr(S2,PC_P);
cmov_l_rr(PC_P,S1,2);
cmov_l_rr(PC_P,S2,10); break;
cmov_l_rr(PC_P,S2,10);
break;
case 5:
mov_l_rr(S2,PC_P);
cmov_l_rr(PC_P,S1,6);
cmov_l_rr(PC_P,S2,10); break;
case 6: register_branch(v1,v2,5); break;
case 7: register_branch(v1,v2,11); break;
case 8: register_branch(v1,v2,10); break;
case 9: register_branch(v1,v2,4); break;
cmov_l_rr(PC_P,S2,10);
break;
case 6:
register_branch(v1,v2,5);
break;
case 7:
register_branch(v1,v2,11);
break;
case 8:
register_branch(v1,v2,10);
break;
case 9:
register_branch(v1,v2,4);
break;
case 10:
cmov_l_rr(PC_P,S1,10);
cmov_l_rr(PC_P,S1,7); break;
cmov_l_rr(PC_P,S1,7);
break;
case 11:
cmov_l_rr(PC_P,S1,4);
cmov_l_rr(PC_P,S1,3); break;
case 12: register_branch(v1,v2,2); break;
case 13: register_branch(v1,v2,6); break;
cmov_l_rr(PC_P,S1,3);
break;
case 12:
register_branch(v1,v2,2);
break;
case 13:
register_branch(v1,v2,6);
break;
case 14:
cmov_l_rr(PC_P,S1,5);
cmov_l_rr(PC_P,S1,10); break;
case 15: mov_l_rr(PC_P,S1); break;
cmov_l_rr(PC_P,S1,10);
break;
case 15:
mov_l_rr(PC_P,S1);
break;
}
}
......@@ -909,7 +926,8 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
abort();
}
if (incr < 0) { // not reached
if (incr < 0) {
// not reached
for (reg = 7; reg >= 0; reg--) {
if (list & 0x80) {
sub_l_ri(ad,4);
......
......@@ -2678,7 +2678,7 @@ static int islinetoggle (void)
static int isvsync (void)
{
if (!currprefs.gfx_afullscreen || picasso_on || !currprefs.gfx_avsync)
if (currprefs.gfx_afullscreen != GFX_FULLSCREEN || picasso_on || !currprefs.gfx_avsync)
return 0;
return currprefs.gfx_avsync;
}
......@@ -4743,6 +4743,7 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
#endif
s->dmastate = 0;
#if 0
// roots 2.0 flower zoomer bottom part missing if this enabled
if (vpos == s->vstop) {
spr_arm (num, 0);
//return;
......
......@@ -1774,7 +1774,7 @@ STATIC_INLINE void do_flush_screen (int start, int stop)
unlockscr ();
if (start <= stop)
flush_screen (start, stop);
else if (currprefs.gfx_afullscreen == 1 && currprefs.gfx_avsync)
else if (currprefs.gfx_afullscreen == GFX_FULLSCREEN && currprefs.gfx_avsync)
flush_screen (0, 0); /* vsync mode */
}
......
......@@ -2120,8 +2120,6 @@ static void gen_opcode (unsigned long int opcode)
if (next_cpu_level < 0)
next_cpu_level = 0;
printf ("\tuae_u16 newsr; uae_u32 newpc;\n");
if (using_ce020) // need some delay so that interrupts have time to clear if previous ins was move to INTREQ
printf ("\tdo_cycles_ce (6 * CYCLE_UNIT);\n");
printf ("\tfor (;;) {\n");
printf ("\t\tuaecptr a = m68k_areg (regs, 7);\n");
printf ("\t\tuae_s16 sr = %s (a);\n", srcw);
......
......@@ -2313,7 +2313,7 @@ int is_vsync (void)
return 0;
}
void toggle_fullscreen (void)
void toggle_fullscreen (int mode)
{
}
......
......@@ -563,7 +563,7 @@ int check_prefs_changed_gfx (void)
return 0;
}
void toggle_fullscreen (void)
void toggle_fullscreen (int mode)
{
gWin->SetFullScreenMode(0);
}
......
......@@ -663,7 +663,7 @@ int is_vsync (void)
return 0;
}
void toggle_fullscreen (void)
void toggle_fullscreen (int mode)
{
};
......
......@@ -1888,7 +1888,7 @@ int is_vsync (void)
return vsync;
}
void toggle_fullscreen (void)
void toggle_fullscreen (int mode)
{
/* FIXME: Add support for separate full-screen/windowed sizes */
fullscreen = 1 - fullscreen;
......
......@@ -1534,7 +1534,7 @@ int is_vsync (void)
return 0;
}
void toggle_fullscreen (void)
void toggle_fullscreen (int mode)
{
#ifdef USE_DGA_EXTENSION
changed_prefs.gfx_afullscreen = changed_prefs.gfx_pfullscreen = !dgamode;
......
......@@ -189,7 +189,7 @@ void gui_display (int shortcut)
int was_fullscreen;
if (was_fullscreen = is_fullscreen ()) {
toggle_fullscreen ();
toggle_fullscreen (0);
if (is_fullscreen ()) {
resume_sound ();
return;
......@@ -199,7 +199,7 @@ void gui_display (int shortcut)
(new floppyFilePanel (shortcut))->run ();
if (was_fullscreen)
toggle_fullscreen ();
toggle_fullscreen (0);
}
resume_sound ();
}
......
......@@ -35,7 +35,7 @@
#define COCOA_GUI_MAX_PATH 255
/* These prototypes aren't declared in the sdlgfx header for some reason */
extern void toggle_fullscreen (void);
extern void toggle_fullscreen (int mode);
extern int is_fullscreen (void);
/* Defined in SDLmain.m */
......@@ -504,7 +504,7 @@ static BOOL wasFullscreen = NO; // used by ensureNotFullscreen() and restoreFull
- (void)goFullscreen:(id)sender
{
toggle_fullscreen();
toggle_fullscreen(0);
}
- (void)toggleInhibitDisplay:(id)sender
......@@ -523,7 +523,7 @@ int ensureNotFullscreen (void)
int result = 0;
if (is_fullscreen ()) {
toggle_fullscreen ();
toggle_fullscreen (0);
if (is_fullscreen ())
write_log ("Cannot activate GUI in full-screen mode\n");
......@@ -548,7 +548,7 @@ void restoreFullscreen (void)
#endif
if ((!is_fullscreen ()) && (wasFullscreen == YES))
toggle_fullscreen();
toggle_fullscreen(0);
wasFullscreen = NO;
}
......
......@@ -2468,7 +2468,7 @@ void gui_display (int shortcut)
/* If running fullscreen, then we must try to switched to windowed
* mode before activating the GUI */
if (is_fullscreen ()) {
toggle_fullscreen ();
toggle_fullscreen (0);
if (is_fullscreen ()) {
write_log ("Cannot activate GUI in full-screen mode\n");
return;
......
......@@ -132,7 +132,9 @@
enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT_FILE, AKS_SCREENSHOT_CLIPBOARD, AKS_FREEZEBUTTON,
AKS_FLOPPY0, AKS_FLOPPY1, AKS_FLOPPY2, AKS_FLOPPY3,
AKS_EFLOPPY0, AKS_EFLOPPY1, AKS_EFLOPPY2, AKS_EFLOPPY3,
AKS_TOGGLEFULLSCREEN, AKS_ENTERDEBUGGER, AKS_IRQ7,
AKS_TOGGLEDEFAULTSCREEN,
AKS_TOGGLEWINDOWEDFULLSCREEN, AKS_TOGGLEFULLWINDOWFULLSCREEN, AKS_TOGGLEWINDOWFULLWINDOW,
AKS_ENTERDEBUGGER, AKS_IRQ7,
AKS_PAUSE, AKS_WARP, AKS_INHIBITSCREEN, AKS_STATEREWIND,
AKS_VOLDOWN, AKS_VOLUP, AKS_VOLMUTE,
AKS_MVOLDOWN, AKS_MVOLUP, AKS_MVOLMUTE,
......
......@@ -106,17 +106,12 @@ struct cache030
};
#define CACHESETS040 64
struct cache040set
{
uae_u32 data[4];
bool valid[4];
uae_u32 tag;
};
#define CACHELINES040 4
struct cache040
{
struct cache040set cs[4];
int count;
uae_u32 data[CACHELINES040][4];
bool valid[CACHELINES040];
uae_u32 tag[CACHELINES040];
};
struct regstruct
......@@ -419,6 +414,7 @@ extern void compemu_reset (void);
#else
#define flush_icache(uaecptr, int) do {} while (0)
#endif
extern void flush_dcache (uaecptr, int);
extern void flush_mmu (uaecptr, int);
extern int movec_illg (int regno);
......@@ -426,6 +422,6 @@ extern uae_u32 val_move2c (int regno);
extern void val_move2c2 (int regno, uae_u32 val);
struct cpum2c {
int regno;
char *regname;
TCHAR *regname;
};
extern struct cpum2c m2cregs[];
......@@ -184,7 +184,7 @@ struct uae_prefs {
bool gfx_autoresolution;
bool gfx_scandoubler;
int gfx_refreshrate;
bool gfx_avsync, gfx_pvsync;
int gfx_avsync, gfx_pvsync;
int gfx_resolution;
int gfx_lores_mode;
int gfx_linedbl;
......
......@@ -327,8 +327,10 @@ extern void mallocemu_free (void *ptr);
#endif
#include "target.h"
#if !defined(RECUR)
#include "machdep/machdep.h"
#include "gfxdep/gfx.h"
#endif
extern void console_out (const char *, ...);
extern void console_flush (void);
......@@ -405,6 +407,7 @@ extern void xfree (const void*);
#define _tcschr strchr
#define _tstof atof
#define _istdigit isdigit
#define _istspace isspace
#define _tstoi atoi
#define _tcstol strtol
#define _wunlink unlink
......
......@@ -123,7 +123,7 @@ extern void graphics_notify_state (int state);
extern void handle_events (void);
extern int is_fullscreen (void);
extern int is_vsync (void);
extern void toggle_fullscreen (void);
extern void toggle_fullscreen (int mode);
extern void toggle_mousegrab (void);
......
......@@ -467,7 +467,14 @@ void write_inputdevice_config (struct uae_prefs *p, FILE *f)
static int getnum (const TCHAR **pp)
{
const TCHAR *p = *pp;
int v = _tstol (p);
int v;
/* if (!_tcsnicmp (p, L"false", 5))
v = 0;
if (!_tcsnicmp (p, "true", 4))
v = 1;
else*/
v = _tstol (p);
while (*p != 0 && *p !='.' && *p != ',')
p++;
......@@ -544,7 +551,7 @@ static void set_kbr_default_event (struct uae_input_device *kbr, struct uae_inpu
}
}
static void set_kbr_default (struct uae_prefs *p, int index)
static void set_kbr_default (struct uae_prefs *p, int index, int devnum)
{
int i, j;
struct uae_input_device_kbr_default *trans = keyboard_default;
......@@ -555,6 +562,8 @@ static void set_kbr_default (struct uae_prefs *p, int index)
if (!trans)
return;
for (j = 0; j < MAX_INPUT_DEVICES; j++) {
if (devnum >= 0 && devnum != j)
continue;
kbr = &p->keyboard_settings[index][j];
for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) {
memset (kbr, 0, sizeof (struct uae_input_device));
......@@ -668,20 +677,27 @@ void read_inputdevice_config (struct uae_prefs *pr, char *option, char *value)
}
if (!_tcscmp (p2, "custom")) {
int disabled;
int iscustom;
p = value;
disabled = getnum (&p);
iscustom = getnum (&p);
if (idnum == GAMEPORT_INPUT_SETTINGS) {
clear_id (id);
if (joystick < 0)
set_kbr_default (pr, idnum);
id->enabled = disabled == 0 ? 1 : 0;
set_kbr_default (pr, idnum, devnum);
id->enabled = iscustom;
}
return;
}
if (!_tcscmp (p2, "empty")) {
int empty;
p = value;
empty = getnum (&p);
clear_id (id);
if (!empty) {
if (joystick < 0)
set_kbr_default (pr, idnum, devnum);
}
id->enabled = 1;
if (idnum == GAMEPORT_INPUT_SETTINGS)
id->enabled = 0;
......@@ -2234,8 +2250,17 @@ void inputdevice_handle_inputcode (void)
savestate_quick ((code - AKS_STATERESTOREQUICK) / 2, 0);
break;
#endif
case AKS_TOGGLEFULLSCREEN:
toggle_fullscreen ();
case AKS_TOGGLEDEFAULTSCREEN:
toggle_fullscreen (-1);
break;
case AKS_TOGGLEWINDOWEDFULLSCREEN:
toggle_fullscreen (0);
break;
case AKS_TOGGLEFULLWINDOWFULLSCREEN:
toggle_fullscreen (1);
break;
case AKS_TOGGLEWINDOWFULLWINDOW:
toggle_fullscreen (2);
break;
case AKS_TOGGLEMOUSEGRAB:
toggle_mousegrab ();
......@@ -3603,11 +3628,6 @@ static void compatibility_copy (struct uae_prefs *prefs)
case JSEM_MODE_DEFAULT:
case JSEM_MODE_MOUSE:
default:
if (firstmouse) { // map first mouse to each available host mouse device
for (j = 0; j < MAX_INPUT_DEVICES; j++)
input_get_default_mouse (mice, j, i);
firstmouse = false;
}
input_get_default_mouse (mice, joy, i);
joymodes[i] = JSEM_MODE_MOUSE;
break;
......@@ -4003,7 +4023,7 @@ void inputdevice_default_prefs (struct uae_prefs *p)
p->input_autofire_linecnt = 600;
for (i = 0; i < MAX_INPUT_SETTINGS; i++) {
if (i != GAMEPORT_INPUT_SETTINGS) {
set_kbr_default (p, i);
set_kbr_default (p, i, -1);
for (j = 0; j < MAX_INPUT_DEVICES; j++) {
if (input_get_default_mouse (p->mouse_settings[i], j, j & 1))
p->mouse_settings[i]->enabled = 1;
......@@ -4014,7 +4034,7 @@ void inputdevice_default_prefs (struct uae_prefs *p)
if (p->jports[0].id != -2 || p->jports[0].id != -2) {
reset_inputdevice_slot (p, i);
}
set_kbr_default (p, i);
set_kbr_default (p, i, -1);
}
}
}
......
......@@ -329,7 +329,9 @@ DEFEVENT(SPC_STATESAVE,"Quick save state",AM_K,0,0,AKS_STATESAVEQUICK)
DEFEVENT(SPC_STATERESTORE,"Quick restore state",AM_K,0,0,AKS_STATERESTOREQUICK)
DEFEVENT(SPC_STATESAVEDIALOG,"Save state",AM_K,0,0,AKS_STATESAVEDIALOG)
DEFEVENT(SPC_STATERESTOREDIALOG,"Restore state",AM_K,0,0,AKS_STATERESTOREDIALOG)
DEFEVENT(SPC_TOGGLEFULLSCREEN,"Toggle windowed/fullscreen",AM_K,0,0,AKS_TOGGLEFULLSCREEN)
DEFEVENT(SPC_TOGGLEFULLSCREEN,"Toggle windowed/fullscreen",AM_K,0,0,AKS_TOGGLEWINDOWEDFULLSCREEN)
DEFEVENT(SPC_TOGGLEFULLWINDOWFULLSCREEN,"Toggle full-window/fullscreen",AM_K,0,0,AKS_TOGGLEFULLWINDOWFULLSCREEN)
DEFEVENT(SPC_TOGGLEWINDOWFULLWINDOW,"Toggle window/full-window",AM_K,0,0,AKS_TOGGLEWINDOWFULLWINDOW)
DEFEVENT(SPC_TOGGLEMOUSEGRAB,"Toggle between mouse grabbed and un-grabbed",AM_K,0,0,AKS_TOGGLEMOUSEGRAB)
DEFEVENT(SPC_GLPANLEFT,"Pan opengl texture to the left",AM_K,0,0,AKS_GLPANLEFT) /*Koko*/
DEFEVENT(SPC_GLPANRIGHT,"Pan opengl texture to the left",AM_K,0,0,AKS_GLPANRIGHT) /*Koko*/
......
......@@ -270,12 +270,10 @@ static void set_cpu_caches (void)
} else if (currprefs.cpu_model == 68040) {
if (!(regs.cacr & 0x8000)) {
for (i = 0; i < CACHESETS040; i++) {
for (j = 0; j < CACHELINES040; j++) {
caches040[i].cs[j].valid[0] = 0;
caches040[i].cs[j].valid[1] = 0;
caches040[i].cs[j].valid[2] = 0;
caches040[i].cs[j].valid[3] = 0;
}
caches040[i].valid[0] = 0;
caches040[i].valid[1] = 0;
caches040[i].valid[2] = 0;
caches040[i].valid[3] = 0;
}
regs.prefetch020addr = 0xff000000;
}
......@@ -655,8 +653,8 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes
if (dp & 0x100) {
uae_s32 outer = 0, disp = 0;
uae_s32 base = m68k_areg (regs, reg);
char name[10];
sprintf (name, "A%d, ", reg);
TCHAR name[10];
_stprintf (name, "A%d, ", reg);
if (dp & 0x80) { base = 0; name[0] = 0; }
if (dp & 0x40) dispreg = 0;
if ((dp & 0x30) == 0x20) { disp = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; }
......@@ -671,14 +669,14 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes
if (dp & 4) base += dispreg;
addr = base + outer;
sprintf (buffer, "(%s%c%d.%c*%d+%ld)+%ld == $%08lx", name,
_stprintf (buffer, "(%s%c%d.%c*%d+%ld)+%ld == $%08lx", name,
dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W',
1 << ((dp >> 9) & 3),
disp, outer,
(unsigned long)addr);
} else {
addr = m68k_areg (regs, reg) + (uae_s32)((uae_s8)disp8) + dispreg;
sprintf (buffer, "(A%d, %c%d.%c*%d, $%02x) == $%08lx", reg,
_stprintf (buffer, "(A%d, %c%d.%c*%d, $%02x) == $%08lx", reg,
dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W',
1 << ((dp >> 9) & 3), disp8,
(unsigned long)addr);
......@@ -688,7 +686,7 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes
addr = m68k_getpc () + m68kpc_offset;
disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2;
addr += (uae_s16)disp16;
sprintf (buffer, "(PC,$%04x) == $%08lx", disp16 & 0xffff, (unsigned long)addr);
_stprintf (buffer, "(PC,$%04x) == $%08lx", disp16 & 0xffff, (unsigned long)addr);
break;
case PC8r:
addr = m68k_getpc () + m68kpc_offset;
......@@ -702,8 +700,8 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes
if (dp & 0x100) {
uae_s32 outer = 0, disp = 0;
uae_s32 base = addr;
char name[10];
sprintf (name, "PC, ");
TCHAR name[10];
_stprintf (name, "PC, ");
if (dp & 0x80) { base = 0; name[0] = 0; }
if (dp & 0x40) dispreg = 0;
if ((dp & 0x30) == 0x20) { disp = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; }
......@@ -718,40 +716,40 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes
if (dp & 4) base += dispreg;
addr = base + outer;
sprintf (buffer, "(%s%c%d.%c*%d+%ld)+%ld == $%08lx", name,
_stprintf (buffer, "(%s%c%d.%c*%d+%ld)+%ld == $%08lx", name,
dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W',
1 << ((dp >> 9) & 3),
disp, outer,
(unsigned long)addr);
} else {
addr += (uae_s32)((uae_s8)disp8) + dispreg;
sprintf (buffer, "(PC, %c%d.%c*%d, $%02x) == $%08lx", dp & 0x8000 ? 'A' : 'D',
_stprintf (buffer, "(PC, %c%d.%c*%d, $%02x) == $%08lx", dp & 0x8000 ? 'A' : 'D',
(int)r, dp & 0x800 ? 'L' : 'W', 1 << ((dp >> 9) & 3),
disp8, (unsigned long)addr);
}
break;
case absw:
addr = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset);
sprintf (buffer, "$%08lx", (unsigned long)addr);
_stprintf (buffer, "$%08lx", (unsigned long)addr);
m68kpc_offset += 2;
break;
case absl:
addr = get_ilong_1 (m68kpc_offset);
sprintf (buffer, "$%08lx", (unsigned long)addr);
_stprintf (buffer, "$%08lx", (unsigned long)addr);
m68kpc_offset += 4;
break;
case imm:
switch (size){
case sz_byte:
sprintf (buffer, "#$%02x", (unsigned int)(get_iword_1 (m68kpc_offset) & 0xff));
_stprintf (buffer, "#$%02x", (unsigned int)(get_iword_1 (m68kpc_offset) & 0xff));
m68kpc_offset += 2;
break;
case sz_word:
sprintf (buffer, "#$%04x", (unsigned int)(get_iword_1 (m68kpc_offset) & 0xffff));
_stprintf (buffer, "#$%04x", (unsigned int)(get_iword_1 (m68kpc_offset) & 0xffff));
m68kpc_offset += 2;
break;
case sz_long:
sprintf (buffer, "#$%08lx", (unsigned long)(get_ilong_1 (m68kpc_offset)));
_stprintf (buffer, "#$%08lx", (unsigned long)(get_ilong_1 (m68kpc_offset)));
m68kpc_offset += 4;
break;
default:
......@@ -761,22 +759,22 @@ static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes
case imm0:
offset = (uae_s32)(uae_s8)get_iword_1 (m68kpc_offset);
m68kpc_offset += 2;
sprintf (buffer, "#$%02x", (unsigned int)(offset & 0xff));
_stprintf (buffer, "#$%02x", (unsigned int)(offset & 0xff));
break;
case imm1:
offset = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset);
m68kpc_offset += 2;
buffer[0] = 0;
sprintf (buffer, "#$%04x", (unsigned int)(offset & 0xffff));
_stprintf (buffer, "#$%04x", (unsigned int)(offset & 0xffff));
break;
case imm2:
offset = (uae_s32)get_ilong_1 (m68kpc_offset);
m68kpc_offset += 4;
sprintf (buffer, "#$%08lx", (unsigned long)offset);
_stprintf (buffer, "#$%08lx", (unsigned long)offset);
break;
case immi:
offset = (uae_s32)(uae_s8)(reg & 0xff);
sprintf (buffer, "#$%08lx", (unsigned long)offset);
_stprintf (buffer, "#$%08lx", (unsigned long)offset);
break;
default:
break;
......@@ -1082,6 +1080,11 @@ void REGPARAM2 MakeFromSR (void)
int oldm = regs.m;
int olds = regs.s;
if (currprefs.cpu_cycle_exact && currprefs.cpu_model >= 68020) {
do_cycles_ce (6 * CYCLE_UNIT);
regs.ce020memcycles = 0;
}
SET_XFLG ((regs.sr >> 4) & 1);
SET_NFLG ((regs.sr >> 3) & 1);
SET_ZFLG ((regs.sr >> 2) & 1);
......@@ -1874,7 +1877,7 @@ int m68k_movec2 (int regno, uae_u32 *regp)
}
STATIC_INLINE int
div_unsigned (uae_u32 src_hi, uae_u32 src_lo, uae_u32 div, uae_u32 *quot, uae_u32 *rem)
div_unsigned (uae_u32 src_hi, uae_u32 src_lo, uae_u32 div, uae_u32 *quot, uae_u32 *rem)
{
uae_u32 q = 0, cbit = 0;
int i;
......@@ -2284,7 +2287,7 @@ static void mmu_op30_pmove (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr ex
int preg = (next >> 10) & 31;
int rw = (next >> 9) & 1;
int fd = (next >> 8) & 1;
char *reg = NULL;
TCHAR *reg = NULL;
uae_u32 otc = tc_030;
int siz;
......@@ -2383,11 +2386,11 @@ static void mmu_op30_pmove (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr ex
static void mmu_op30_ptest (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra)
{
#if MMUOP_DEBUG > 0
char tmp[10];
TCHAR tmp[10];
tmp[0] = 0;
if ((next >> 8) & 1)
sprintf (tmp, ",A%d", (next >> 4) & 15);
_stprintf (tmp, ",A%d", (next >> 4) & 15);
write_log ("PTEST%c %02X,%08X,#%X%s PC=%08X\n",
((next >> 9) & 1) ? 'W' : 'R', (next & 15), extra, (next >> 10) & 7, tmp, pc);
#endif
......@@ -2475,7 +2478,7 @@ static void do_trace (void)
opcode = get_word_mmu (regs.pc);
else
opcode = get_word (regs.pc);
if ( opcode == 0x4e73 /* RTE */
if (opcode == 0x4e73 /* RTE */
|| opcode == 0x4e74 /* RTD */
|| opcode == 0x4e75 /* RTS */
|| opcode == 0x4e77 /* RTR */
......@@ -2487,7 +2490,7 @@ static void do_trace (void)
&& cctrue ((opcode >> 8) & 0xf))
|| ((opcode & 0xf0f0) == 0x5050 /* DBcc */
&& !cctrue ((opcode >> 8) & 0xf)
&& (uae_s16) m68k_dreg (regs, opcode & 7) != 0))
&& (uae_s16)m68k_dreg (regs, opcode & 7) != 0))
{
last_trace_ad = m68k_getpc ();
unset_special (SPCFLAG_TRACE);
......@@ -2551,13 +2554,13 @@ STATIC_INLINE int do_specialties (int cycles)
}
#endif
if ((regs.spcflags & SPCFLAG_ACTION_REPLAY) && action_replay_flag != ACTION_REPLAY_INACTIVE) {
/*if(action_replay_flag == ACTION_REPLAY_ACTIVE && !is_ar_pc_in_rom())*/
/*if (action_replay_flag == ACTION_REPLAY_ACTIVE && !is_ar_pc_in_rom ())*/
/* write_log ("PC:%p\n", m68k_getpc ());*/
if(action_replay_flag == ACTION_REPLAY_ACTIVATE || action_replay_flag == ACTION_REPLAY_DORESET)
action_replay_enter();
if (action_replay_flag == ACTION_REPLAY_ACTIVATE || action_replay_flag == ACTION_REPLAY_DORESET)
action_replay_enter ();
if (action_replay_flag == ACTION_REPLAY_HIDE && !is_ar_pc_in_rom ()) {
action_replay_hide();
action_replay_hide ();
unset_special (SPCFLAG_ACTION_REPLAY);
}
if (action_replay_flag == ACTION_REPLAY_WAIT_PC) {
......@@ -3113,10 +3116,8 @@ static void m68k_run_mmu (void)
cpu_cycles = (*cpufunctbl[opcode])(opcode);
cpu_cycles &= cycles_mask;
cpu_cycles |= cycles_val;
#if defined MMU && defined DEBUG
if (mmu_triggered)
mmu_do_hit ();
#endif
if (regs.spcflags) {
if (do_specialties (cpu_cycles))
return;
......@@ -3217,11 +3218,9 @@ void m68k_go (int may_quit)
regs.spcflags |= of & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE);
}
#endif
#ifdef JIT
if (mmu_enabled && !currprefs.cachesize) {
run_func = m68k_run_mmu;
} else {
#endif
run_func = currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000 ? m68k_run_1_ce :
currprefs.cpu_compatible && currprefs.cpu_model == 68000 ? m68k_run_1 :
#ifdef JIT
......@@ -3230,9 +3229,7 @@ void m68k_go (int may_quit)
(currprefs.cpu_model == 68040 || currprefs.cpu_model == 68060) && currprefs.mmu_model ? m68k_run_mmu040 :
currprefs.cpu_model >= 68020 && currprefs.cpu_cycle_exact ? m68k_run_2ce :
currprefs.cpu_compatible ? m68k_run_2p : m68k_run_2;
#ifdef JIT
}
#endif
run_func ();
}
in_m68k_go--;
......@@ -3365,7 +3362,7 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
if (!table68k)
return;
while (cnt-- > 0) {
char instrname[100], *ccpt;
TCHAR instrname[100], *ccpt;
int i;
uae_u32 opcode;
struct mnemolookup *lookup;
......@@ -3385,10 +3382,10 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
m68kpc_offset += 2;
strcpy (instrname, lookup->name);
ccpt = strstr (instrname, "cc");
_tcscpy (instrname, lookup->name);
ccpt = _tcsstr (instrname, L"cc");
if (ccpt != 0) {
strncpy (ccpt, ccnames[dp->cc], 2);
_tcsncpy (ccpt, ccnames[dp->cc], 2);
}
switch (dp->size){
case sz_byte: strcat (instrname, ".B "); break;
......@@ -3402,7 +3399,7 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, seaddr, safemode);
}
if (dp->suse && dp->duse)
strcat (instrname, ",");
_tcscat (instrname, ",");
if (dp->duse) {
newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode);
......@@ -3436,9 +3433,9 @@ void m68k_disasm_2 (char *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int c
void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr)
{
char *buf;
TCHAR *buf;
buf = xmalloc (char, (MAX_LINEWIDTH + 1) * cnt);
buf = xmalloc (TCHAR, (MAX_LINEWIDTH + 1) * cnt);
if (!buf)
return;
m68k_disasm_2 (buf, (MAX_LINEWIDTH + 1) * cnt, addr, nextpc, cnt, seaddr, deaddr, 1);
......@@ -3447,9 +3444,9 @@ void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *s
}
void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt)
{
char *buf;
TCHAR *buf;
buf = xmalloc (char, (MAX_LINEWIDTH + 1) * cnt);
buf = xmalloc (TCHAR, (MAX_LINEWIDTH + 1) * cnt);
if (!buf)
return;
m68k_disasm_2 (buf, (MAX_LINEWIDTH + 1) * cnt, addr, nextpc, cnt, NULL, NULL, 0);
......@@ -3463,7 +3460,7 @@ void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt)
*************************************************************/
void sm68k_disasm (char *instrname, char *instrcode, uaecptr addr, uaecptr *nextpc)
{
char *ccpt;
TCHAR *ccpt;
uae_u32 opcode;
struct mnemolookup *lookup;
struct instr *dp;
......@@ -3483,16 +3480,16 @@ void sm68k_disasm (char *instrname, char *instrcode, uaecptr addr, uaecptr *next
m68kpc_offset += 2;
strcpy (instrname, lookup->name);
ccpt = strstr (instrname, "cc");
_tcscpy (instrname, lookup->name);
ccpt = _tcsstr (instrname, "cc");
if (ccpt != 0) {
strncpy (ccpt, ccnames[dp->cc], 2);
_tcsncpy (ccpt, ccnames[dp->cc], 2);
}
switch (dp->size){
case sz_byte: strcat (instrname, ".B "); break;
case sz_word: strcat (instrname, ".W "); break;
case sz_long: strcat (instrname, ".L "); break;
default: strcat (instrname, " "); break;
case sz_byte: _tcscat (instrname, ".B "); break;
case sz_word: _tcscat (instrname, ".W "); break;
case sz_long: _tcscat (instrname, ".L "); break;
default: _tcscat (instrname, " "); break;
}
if (dp->suse) {
......@@ -3500,7 +3497,7 @@ void sm68k_disasm (char *instrname, char *instrcode, uaecptr addr, uaecptr *next
newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, NULL, 0);
}
if (dp->suse && dp->duse)
strcat (instrname, ",");
_tcscat (instrname, ",");
if (dp->duse) {
newpc = m68k_getpc () + m68kpc_offset;
newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, NULL, 0);
......@@ -3511,8 +3508,8 @@ void sm68k_disasm (char *instrname, char *instrcode, uaecptr addr, uaecptr *next
int i;
for (i = 0; i < (m68kpc_offset - oldpc) / 2; i++)
{
sprintf (instrcode, "%04x ", get_iword_1 (oldpc + i * 2));
instrcode += strlen (instrcode);
_stprintf (instrcode, "%04x ", get_iword_1 (oldpc + i * 2));
instrcode += _tcslen (instrcode);
}
}
......@@ -3690,7 +3687,7 @@ const uae_u8 *restore_cpu (const uae_u8 *src)
changed_prefs.address_space_24 = 0;
if (flags & CPUTYPE_EC)
changed_prefs.address_space_24 = 1;
if (model > 68000)
if (model > 68020)
changed_prefs.cpu_compatible = 0;
currprefs.address_space_24 = changed_prefs.address_space_24;
currprefs.cpu_compatible = changed_prefs.cpu_compatible;
......@@ -3769,6 +3766,52 @@ void restore_cpu_finish (void)
}
uae_u8 *restore_cpu_extra (uae_u8 *src)
{
restore_u32 ();
uae_u32 flags = restore_u32 ();
currprefs.cpu_cycle_exact = changed_prefs.cpu_cycle_exact = (flags & 1) ? true : false;
currprefs.blitter_cycle_exact = changed_prefs.blitter_cycle_exact = currprefs.cpu_cycle_exact;
currprefs.cpu_compatible = changed_prefs.cpu_compatible = (flags & 2) ? true : false;
currprefs.cpu_frequency = changed_prefs.cpu_frequency = restore_u32 ();
currprefs.cpu_clock_multiplier = changed_prefs.cpu_clock_multiplier = restore_u32 ();
currprefs.cachesize = changed_prefs.cachesize = (flags & 8) ? 8192 : 0;
currprefs.m68k_speed = changed_prefs.m68k_speed = 0;
if (flags & 4)
currprefs.m68k_speed = changed_prefs.m68k_speed = -1;
currprefs.cpu060_revision = changed_prefs.cpu060_revision = restore_u8 ();
currprefs.fpu_revision = changed_prefs.fpu_revision = restore_u8 ();
return src;
}
uae_u8 *save_cpu_extra (int *len, uae_u8 *dstptr)
{
uae_u8 *dstbak, *dst;
uae_u32 flags;
if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
save_u32 (0); // version
flags = 0;
flags |= currprefs.cpu_cycle_exact ? 1 : 0;
flags |= currprefs.cpu_compatible ? 2 : 0;
flags |= currprefs.m68k_speed < 0 ? 4 : 0;
flags |= currprefs.cachesize > 0 ? 8 : 0;
save_u32 (flags);
save_u32 (currprefs.cpu_frequency);
save_u32 (currprefs.cpu_clock_multiplier);
save_u8 (currprefs.cpu060_revision);
save_u8 (currprefs.fpu_revision);
*len = dst - dstbak;
return dstbak;
}
uae_u8 *save_cpu (uae_u32 *len, uae_u8 *dstptr)
{
uae_u8 *dstbak, *dst;
......@@ -4023,7 +4066,7 @@ Best and worst cases for register operand:
Best case with signed overflow: 120 cycles
*/
*/
// DIVU
// Unsigned division
......@@ -4105,42 +4148,42 @@ int getDivs68kCycles (uae_s32 dividend, uae_s16 divisor)
return mcycles * 2;
}
#if 0
STATIC_INLINE void fill_cache040 (uae_u32 addr)
{
int index, i, j;
int index, i, lws;
uae_u32 tag;
uae_u32 data;
struct cache040 *c;
static int linecnt;
addr &= ~15;
index = (addr >> 4) & (CACHESETS040 - 1);
tag = regs.s | (addr & ~((CACHESETS040 << 4) - 1));
lws = (addr >> 2) & 3;
c = &caches040[index];
for (i = 0; i < CACHELINES040; i++) {
struct cache040set *cs = &c->cs;
for (j = 0; j < 4; j++) {
if (cs->valid[j] && c->tag == tag[j]) {
if (c->valid[i] && c->tag[i] == tag) {
// cache hit
regs.prefetch020addr = addr;
regs.prefetch020data = c->data[j];
regs.prefetch020data = c->data[i][lws];
return;
} if (cs->valid[j] == 0) {
inv = &cs->valid[j];
}
}
}
// cache miss
data = mem_access_delay_longi_read_020 (addr);
if (1) {
c->tag = tag;
c->valid = !!(regs.cacr & 0x8000);
c->data = data;
data = mem_access_delay_longi_read_ce020 (addr);
int line = linecnt;
for (i = 0; i < CACHELINES040; i++) {
int line = (linecnt + i) & (CACHELINES040 - 1);
if (c->tag[i] != tag || c->valid[i] == false) {
c->tag[i] = tag;
c->valid[i] = true;
c->data[i][0] = data;
}
}
regs.prefetch020addr = addr;
regs.prefetch020data = data;
}
#endif
#ifdef CPUEMU_20
// this one is really simple and easy
......@@ -4250,6 +4293,10 @@ void write_dcache030 (uaecptr addr, uae_u32 val, int size)
return;
c1 = getcache030 (dcaches030, addr, &tag1, &lws1);
if (!(regs.cacr & 0x2000)) { // write allocate
if (c1->tag != tag1 || c1->valid[lws1] == false)
return;
}
#if 0
uaecptr a = 0x1db0c;
......
......@@ -729,17 +729,18 @@ out1:
dstgather = 0;
}
#endif
endofline:
endofline:
/* now, we have a match */
if (table68k[opc].mnemo != i_ILLG)
;//write_log ("Double match: %x: %s\n", opc, opcstr);
if (find == -1) {
for (find = 0;; find++) {
if (strcmp(mnemonic, lookuptab[find].name) == 0) {
if (strcmp (mnemonic, lookuptab[find].name) == 0) {
table68k[opc].mnemo = lookuptab[find].mnemo;
break;
}
if (strlen(lookuptab[find].name) == 0) abort();
if (strlen (lookuptab[find].name) == 0)
abort();
}
}
else {
......@@ -775,7 +776,7 @@ out1:
table68k[opc].flagdead = flagdead;
table68k[opc].flaglive = flaglive;
table68k[opc].isjmp = isjmp;
nomatch:
nomatch:
/* FOO! */;
}
}
......@@ -786,7 +787,7 @@ void read_table68k (void)
int i;
free (table68k);
table68k = (struct instr *)xmalloc (65536 * sizeof (struct instr));
table68k = xmalloc (sizeof (struct instr) * 65536);
for (i = 0; i < 65536; i++) {
table68k[i].mnemo = i_ILLG;
table68k[i].handler = -1;
......
......@@ -4,7 +4,7 @@ running configure, to aid debugging if configure makes a mistake.
It was created by configure, which was
generated by GNU Autoconf 2.65. Invocation command line was
$ ./configure --disable-option-checking --prefix=/usr/local --with-sdl --with-sdl-gl --with-sdl-gfx --with-sdl-sound --with-caps --with-gayle --enable-drvsnd --enable-amax --enable-cd32 --enable-scsi-device --disable-jit --cache-file=/dev/null --srcdir=.
$ ./configure --disable-option-checking --prefix=/usr/local --with-sdl --with-sdl-gl --with-sdl-gfx --with-sdl-sound --with-caps --with-gayle --enable-drvsnd --enable-amax --enable-cd32 --enable-scsi-device --cache-file=/dev/null --srcdir=.
## --------- ##
## Platform. ##
......@@ -445,7 +445,7 @@ configure:4344: $? = 0
configure:4344: result: yes
configure:4350: checking for _doprnt
configure:4350: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/cc4EAiYz.o: In function `main':
/tmp/ccwoa8am.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:67: undefined reference to `_doprnt'
collect2: ld returned 1 exit status
configure:4350: $? = 1
......@@ -533,7 +533,7 @@ configure:4364: $? = 0
configure:4364: result: yes
configure:4364: checking for strcmpi
configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/ccFh4SgP.o: In function `main':
/tmp/ccvPJKzx.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `strcmpi'
collect2: ld returned 1 exit status
configure:4364: $? = 1
......@@ -613,7 +613,7 @@ configure: failed program was:
configure:4364: result: no
configure:4364: checking for stricmp
configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/ccn7jZ5T.o: In function `main':
/tmp/ccIoevFC.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `stricmp'
collect2: ld returned 1 exit status
configure:4364: $? = 1
......
......@@ -438,7 +438,7 @@ $config_links
Report bugs to the package provider."
ac_cs_config="'--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--disable-jit' '--cache-file=/dev/null' '--srcdir=.'"
ac_cs_config="'--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--cache-file=/dev/null' '--srcdir=.'"
ac_cs_version="\
config.status
configured by ./configure, generated by GNU Autoconf 2.65,
......@@ -522,7 +522,7 @@ if $ac_cs_silent; then
fi
if $ac_cs_recheck; then
set X '/bin/bash' './configure' '--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--disable-jit' '--cache-file=/dev/null' '--srcdir=.' $ac_configure_extra_args --no-create --no-recursion
set X '/bin/bash' './configure' '--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--cache-file=/dev/null' '--srcdir=.' $ac_configure_extra_args --no-create --no-recursion
shift
$as_echo "running CONFIG_SHELL=/bin/bash $*" >&6
CONFIG_SHELL='/bin/bash'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment