puae 2.3.1

parent b7de61b2
......@@ -35,6 +35,10 @@ static int delayed[MAX_TOTAL_SCSI_DEVICES];
static uae_sem_t unitsem[MAX_TOTAL_SCSI_DEVICES];
static int unitsem_cnt[MAX_TOTAL_SCSI_DEVICES];
static TCHAR newimagefiles[MAX_TOTAL_SCSI_DEVICES][256];
static int imagechangetime[MAX_TOTAL_SCSI_DEVICES];
static bool cdimagefileinuse[MAX_TOTAL_SCSI_DEVICES], wasopen[MAX_TOTAL_SCSI_DEVICES];
/* convert minutes, seconds and frames -> logical sector number */
int msf2lsn (int msf)
{
......@@ -449,11 +453,18 @@ void blkdev_cd_change (int unitnum, const TCHAR *name)
void device_func_reset (void)
{
unsigned int i;
for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) {
wasopen[i] = false;
waspaused[i] = false;
imagechangetime[i] = 0;
cdimagefileinuse[i] = false;
newimagefiles[i][0] = 0;
}
}
int device_func_init (int flags)
{
device_func_reset ();
blkdev_fix_prefs (&currprefs);
install_driver (flags);
return 1;
......@@ -485,12 +496,6 @@ void blkdev_exitgui (void)
}
}
static TCHAR newimagefiles[MAX_TOTAL_SCSI_DEVICES][256];
static int imagechangetime[MAX_TOTAL_SCSI_DEVICES];
static bool cdimagefileinuse[MAX_TOTAL_SCSI_DEVICES], wasopen[MAX_TOTAL_SCSI_DEVICES];
static void check_changes (int unitnum)
{
bool changed = false;
......@@ -1070,6 +1075,19 @@ static int addtocentry (uae_u8 **dstp, int *len, int point, int newpoint, int ms
return -1;
}
static int scsiemudrv (int unitnum, uae_u8 *cmd)
{
if (failunit (unitnum))
return -1;
if (!getsem (unitnum))
return 0;
int v = 0;
if (device_func[unitnum]->scsiemu)
v = device_func[unitnum]->scsiemu (unitnum, cmd);
freesem (unitnum);
return v;
}
static int scsi_read_cd (int unitnum, uae_u8 *cmd, uae_u8 *data, struct device_info *di)
{
int msf = cmd[0] == 0xb9;
......@@ -1452,6 +1470,7 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len,
break;
case 0x1b: // START/STOP
sys_command_cd_stop (unitnum);
scsiemudrv (unitnum, cmdbuf);
scsi_len = 0;
break;
case 0x1e: // PREVENT/ALLOW MEDIA REMOVAL
......@@ -1777,6 +1796,10 @@ uae_u8 *save_cd (int num, int *len)
if (!currprefs.cdslots[num].inuse || num >= MAX_TOTAL_SCSI_DEVICES)
return NULL;
#ifdef CD32
if (!currprefs.cs_cd32cd && !currprefs.cs_cdtvcd && !currprefs.scsi)
return NULL;
#endif
dstbak = dst = xmalloc (uae_u8, 4 + 256 + 4 + 4);
save_u32 (4);
save_string (currprefs.cdslots[num].name);
......
This diff is collapsed.
......@@ -1733,47 +1733,47 @@ uae_u8 *restore_cia (int num, uae_u8 *src)
uae_u32 l;
/* CIA registers */
b = restore_u8 (); /* 0 PRA */
b = restore_u8 (); /* 0 PRA */
if (num) ciabpra = b; else ciaapra = b;
b = restore_u8 (); /* 1 PRB */
b = restore_u8 (); /* 1 PRB */
if (num) ciabprb = b; else ciaaprb = b;
b = restore_u8 (); /* 2 DDRA */
b = restore_u8 (); /* 2 DDRA */
if (num) ciabdra = b; else ciaadra = b;
b = restore_u8 (); /* 3 DDRB */
b = restore_u8 (); /* 3 DDRB */
if (num) ciabdrb = b; else ciaadrb = b;
w = restore_u16 (); /* 4 TA */
w = restore_u16 (); /* 4 TA */
if (num) ciabta = w; else ciaata = w;
w = restore_u16 (); /* 6 TB */
w = restore_u16 (); /* 6 TB */
if (num) ciabtb = w; else ciaatb = w;
l = restore_u8 (); /* 8/9/A TOD */
l = restore_u8 (); /* 8/9/A TOD */
l |= restore_u8 () << 8;
l |= restore_u8 () << 16;
if (num) ciabtod = l; else ciaatod = l;
restore_u8 (); /* B unused */
b = restore_u8 (); /* C SDR */
restore_u8 (); /* B unused */
b = restore_u8 (); /* C SDR */
if (num) ciabsdr = b; else ciaasdr = b;
b = restore_u8 (); /* D ICR INFORMATION (not mask!) */
b = restore_u8 (); /* D ICR INFORMATION (not mask!) */
if (num) ciabicr = b; else ciaaicr = b;
b = restore_u8 (); /* E CRA */
b = restore_u8 (); /* E CRA */
if (num) ciabcra = b; else ciaacra = b;
b = restore_u8 (); /* F CRB */
b = restore_u8 (); /* F CRB */
if (num) ciabcrb = b; else ciaacrb = b;
/* CIA internal data */
b = restore_u8 (); /* ICR MASK */
b = restore_u8 (); /* ICR MASK */
if (num) ciabimask = b; else ciaaimask = b;
w = restore_u8 (); /* timer A latch */
w = restore_u8 (); /* timer A latch */
w |= restore_u8 () << 8;
if (num) ciabla = w; else ciaala = w;
w = restore_u8 (); /* timer B latch */
w = restore_u8 (); /* timer B latch */
w |= restore_u8 () << 8;
if (num) ciablb = w; else ciaalb = w;
w = restore_u8 (); /* TOD latched value */
w = restore_u8 (); /* TOD latched value */
w |= restore_u8 () << 8;
w |= restore_u8 () << 16;
if (num) ciabtol = w; else ciaatol = w;
l = restore_u8 (); /* alarm */
l = restore_u8 (); /* alarm */
l |= restore_u8 () << 8;
l |= restore_u8 () << 16;
if (num) ciabalarm = l; else ciaaalarm = l;
......@@ -1814,13 +1814,13 @@ uae_u8 *save_cia (int num, int *len, uae_u8 *dstptr)
save_u16 (t);
t = (num ? ciabtb - ciabtb_passed : ciaatb - ciaatb_passed);/* 6 TB */
save_u16 (t);
b = (num ? ciabtod : ciaatod); /* 8 TODL */
b = (num ? ciabtod : ciaatod); /* 8 TODL */
save_u8 (b);
b = (num ? ciabtod >> 8 : ciaatod >> 8); /* 9 TODM */
b = (num ? ciabtod >> 8 : ciaatod >> 8); /* 9 TODM */
save_u8 (b);
b = (num ? ciabtod >> 16 : ciaatod >> 16); /* A TODH */
b = (num ? ciabtod >> 16 : ciaatod >> 16); /* A TODH */
save_u8 (b);
save_u8 (0); /* B unused */
save_u8 (0); /* B unused */
b = num ? ciabsdr : ciaasdr; /* C SDR */
save_u8 (b);
b = num ? ciabicr : ciaaicr; /* D ICR INFORMATION (not mask!) */
......@@ -1832,24 +1832,24 @@ uae_u8 *save_cia (int num, int *len, uae_u8 *dstptr)
/* CIA internal data */
save_u8 (num ? ciabimask : ciaaimask); /* ICR */
b = (num ? ciabla : ciaala); /* timer A latch LO */
save_u8 (num ? ciabimask : ciaaimask); /* ICR */
b = (num ? ciabla : ciaala); /* timer A latch LO */
save_u8 (b);
b = (num ? ciabla >> 8 : ciaala >> 8); /* timer A latch HI */
save_u8 (b);
b = (num ? ciablb : ciaalb); /* timer B latch LO */
b = (num ? ciablb : ciaalb); /* timer B latch LO */
save_u8 (b);
b = (num ? ciablb >> 8 : ciaalb >> 8); /* timer B latch HI */
save_u8 (b);
b = (num ? ciabtol : ciaatol); /* latched TOD LO */
b = (num ? ciabtol : ciaatol); /* latched TOD LO */
save_u8 (b);
b = (num ? ciabtol >> 8 : ciaatol >> 8); /* latched TOD MED */
b = (num ? ciabtol >> 8 : ciaatol >> 8); /* latched TOD MED */
save_u8 (b);
b = (num ? ciabtol >> 16 : ciaatol >> 16); /* latched TOD HI */
b = (num ? ciabtol >> 16 : ciaatol >> 16); /* latched TOD HI */
save_u8 (b);
b = (num ? ciabalarm : ciaaalarm); /* alarm LO */
save_u8 (b);
b = (num ? ciabalarm >> 8 : ciaaalarm >> 8); /* alarm MED */
b = (num ? ciabalarm >> 8 : ciaaalarm >> 8);/* alarm MED */
save_u8 (b);
b = (num ? ciabalarm >> 16 : ciaaalarm >> 16); /* alarm HI */
save_u8 (b);
......
......@@ -2668,7 +2668,6 @@ void vsync_handle_redraw (int long_frame, int lof_changed)
#ifdef SAVESTATE
if (!savestate_state) {
if (currprefs.quitstatefile[0]) {
write_log ("Draw: Save_State");
savestate_initsave (currprefs.quitstatefile, 1, 1, true);
save_state (currprefs.quitstatefile, "");
}
......
......@@ -1063,7 +1063,7 @@ static void expamem_init_z3fastmem_2 (addrbank *bank, uae_u32 start, uae_u32 siz
expamem_write (0x08, care_addr | no_shutup | force_z3 | (allocated > 0x800000 ? ext_size : Z3_MEM_AUTO));
expamem_write (0x04, 3);
expamem_write (0x04, currprefs.maprom ? 3 : 83);
expamem_write (0x10, uae_id >> 8);
expamem_write (0x14, uae_id & 0xff);
......
......@@ -60,7 +60,7 @@ extern char *validatedevicename (char *s);
extern char *validatevolumename (char *s);
int filesys_insert (int nr, TCHAR *volume, const TCHAR *rootdir, bool readonly, int flags);
int filesys_eject(int nr);
int filesys_eject (int nr);
int filesys_media_change (const char *rootdir, int inserted, struct uaedev_config_info *uci);
extern char *filesys_createvolname (const char *volname, const char *rootdir, const char *def);
......
......@@ -16,28 +16,32 @@
#endif
/* AmigaOS errors */
#define ERROR_BAD_NUMBER 6
#define ERROR_NO_FREE_STORE 103
#define ERROR_OBJECT_IN_USE 202
#define ERROR_OBJECT_EXISTS 203
#define ERROR_DIR_NOT_FOUND 204
#define ERROR_BAD_NUMBER 6
#define ERROR_NO_FREE_STORE 103
#define ERROR_OBJECT_IN_USE 202
#define ERROR_OBJECT_EXISTS 203
#define ERROR_DIR_NOT_FOUND 204
#define ERROR_OBJECT_NOT_AROUND 205
#define ERROR_ACTION_NOT_KNOWN 209
#define ERROR_INVALID_LOCK 211
#define ERROR_INVALID_LOCK 211
#define ERROR_OBJECT_WRONG_TYPE 212
#define ERROR_DISK_WRITE_PROTECTED 214
#define ERROR_DIRECTORY_NOT_EMPTY 216
#define ERROR_DEVICE_NOT_MOUNTED 218
#define ERROR_SEEK_ERROR 219
#define ERROR_SEEK_ERROR 219
#define ERROR_COMMENT_TOO_BIG 220
#define ERROR_DISK_IS_FULL 221
#define ERROR_DISK_IS_FULL 221
#define ERROR_DELETE_PROTECTED 222
#define ERROR_WRITE_PROTECTED 223
#define ERROR_READ_PROTECTED 224
#define ERROR_NOT_A_DOS_DISK 225
#define ERROR_NO_DISK 226
#define ERROR_NO_DISK 226
#define ERROR_NO_MORE_ENTRIES 232
#define ERROR_NOT_IMPLEMENTED 236
#define ERROR_RECORD_NOT_LOCKED 240
#define ERROR_LOCK_COLLISION 241
#define ERROR_LOCK_TIMEOUT 242
#define ERROR_UNLOCK_ERROR 243
#define A_FIBF_HIDDEN (1<<7)
#define A_FIBF_SCRIPT (1<<6)
......
......@@ -7,7 +7,8 @@ typedef unsigned long u32;
extern void S2X_refresh (void);
extern void S2X_render (void);
extern void S2X_init (int dw, int dh, int aw, int ah, int mult, int ad, int dd);
extern void S2X_init (int dw, int dh, int aw, int ah, int ad, int dd);
extern void S2X_reset (void);
extern void S2X_free (void);
extern int S2X_getmult (void);
......@@ -47,12 +48,14 @@ typedef int bool;
#define UAE_FILTER_NULL 1
#define UAE_FILTER_SCALE2X 2
#define UAE_FILTER_HQ 3
#define UAE_FILTER_SUPEREAGLE 4
#define UAE_FILTER_SUPER2XSAI 5
#define UAE_FILTER_2XSAI 6
#define UAE_FILTER_PAL 7
#define UAE_FILTER_LAST 7
#define UAE_FILTER_HQ2X 3
#define UAE_FILTER_HQ3X 4
#define UAE_FILTER_HQ4X 5
#define UAE_FILTER_SUPEREAGLE 6
#define UAE_FILTER_SUPER2XSAI 7
#define UAE_FILTER_2XSAI 8
#define UAE_FILTER_PAL 9
#define UAE_FILTER_LAST 9
#define UAE_FILTER_MODE_16 16
#define UAE_FILTER_MODE_16_16 16
......@@ -66,7 +69,7 @@ struct uae_filter
{
int type, yuv, intmul;
char *name, *cfgname;
int x[6];
int flags;
};
extern struct uae_filter uaefilters[];
......
......@@ -24,4 +24,3 @@ static int td_pos = (TD_RIGHT|TD_BOTTOM);
#define STATUSLINE_TARGET 0x80
extern void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, uae_u32 *alpha);
......@@ -27,6 +27,11 @@ extern void target_addtorecent (const TCHAR*, int);
extern void target_run (void);
extern void target_quit (void);
extern bool get_plugin_path (TCHAR *out, int size, const TCHAR *path);
extern void stripslashes (TCHAR *p);
extern void fixtrailing (TCHAR *p);
extern void fullpath (TCHAR *path, int size);
extern void getpathpart (TCHAR *outpath, int size, const TCHAR *inpath);
extern void getfilepart (TCHAR *out, int size, const TCHAR *path);
extern int quit_program;
extern bool console_emulation;
......
......@@ -1921,7 +1921,7 @@ static void Exception_ce000 (int nr)
x_put_word (m68k_areg (regs, 7) + 0, mode);
x_put_word (m68k_areg (regs, 7) + 2, last_fault_for_exception_3 >> 16);
x_do_cycles (2 * cpucycleunit);
write_log ("Exception %d (%x) at %x -> %x!\n", nr, last_addr_for_exception_3, currpc, get_long (4 * nr));
write_log ("Exception CE %d (%x) at %x -> %x!\n", nr, last_addr_for_exception_3, currpc, get_long (4 * nr));
goto kludge_me_do;
}
m68k_areg (regs, 7) -= 6;
......@@ -2218,7 +2218,7 @@ static void Exception_normal (int nr)
m68k_areg (regs, 7) -= 2;
x_put_word (m68k_areg (regs, 7), 0xb000 + nr * 4);
}
write_log ("Exception %d (%x) at %x -> %x!\n", nr, regs.instruction_pc, currpc, x_get_long (regs.vbr + 4*nr));
write_log ("Exception 20 %d (%x) at %x -> %x!\n", nr, regs.instruction_pc, currpc, x_get_long (regs.vbr + 4*nr));
} else if (nr ==5 || nr == 6 || nr == 7 || nr == 9) {
m68k_areg (regs, 7) -= 4;
x_put_long (m68k_areg (regs, 7), regs.instruction_pc);
......@@ -2253,7 +2253,7 @@ static void Exception_normal (int nr)
x_put_word (m68k_areg (regs, 7) + 6, last_op_for_exception_3);
x_put_word (m68k_areg (regs, 7) + 8, regs.sr);
x_put_long (m68k_areg (regs, 7) + 10, last_addr_for_exception_3);
write_log ("Exception %d (%x) at %x -> %x!\n", nr, last_fault_for_exception_3, currpc, x_get_long (regs.vbr + 4*nr));
write_log ("Exception 00 %d (%x) at %x -> %x!\n", nr, last_fault_for_exception_3, currpc, x_get_long (regs.vbr + 4*nr));
goto kludge_me_do;
}
}
......@@ -2894,7 +2894,7 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode)
if ((opcode & 0xF000) == 0xF000) {
if (warned < 20) {
write_log ("B-Trap %x at %x (%p)\n", opcode, pc, regs.pc_p);
//write_log ("B-Trap %x at %x (%p)\n", opcode, pc, regs.pc_p);
warned++;
}
Exception (0xB);
......@@ -2903,7 +2903,7 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode)
}
if ((opcode & 0xF000) == 0xA000) {
if (warned < 20) {
write_log ("A-Trap %x at %x (%p)\n", opcode, pc, regs.pc_p);
//write_log ("A-Trap %x at %x (%p)\n", opcode, pc, regs.pc_p);
warned++;
}
Exception (0xA);
......@@ -2911,7 +2911,7 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode)
return 4;
}
if (warned < 20) {
write_log ("Illegal instruction: %04x at %08X -> %08X\n", opcode, pc, get_long (regs.vbr + 0x10));
//write_log ("Illegal instruction: %04x at %08X -> %08X\n", opcode, pc, get_long (regs.vbr + 0x10));
warned++;
//activate_debugger();
}
......@@ -3505,6 +3505,7 @@ static void m68k_run_1_ce (void)
cputrace.cyclecounter = cputrace.cyclecounter_pre = cputrace.cyclecounter_post = 0;
cputrace.readcounter = cputrace.writecounter = 0;
}
if (inputrecord_debug & 4) {
if (input_record > 0)
inprec_recorddebug_cpu (1);
......@@ -3831,6 +3832,7 @@ static void m68k_run_2ce (void)
cputrace.cyclecounter = cputrace.cyclecounter_pre = cputrace.cyclecounter_post = 0;
cputrace.readcounter = cputrace.writecounter = 0;
}
if (inputrecord_debug & 4) {
if (input_record > 0)
inprec_recorddebug_cpu (1);
......@@ -4049,6 +4051,7 @@ void m68k_go (int may_quit)
if (changed_prefs.inprecfile[0] && input_record)
inprec_prepare_record (savestate_fname[0] ? savestate_fname : NULL);
set_cpu_tracer (false);
#ifdef DEBUGGER
......
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