diff --git a/src/blkdev.cpp b/src/blkdev.cpp index 45699509..2d97dfbb 100644 --- a/src/blkdev.cpp +++ b/src/blkdev.cpp @@ -395,7 +395,24 @@ void blkdev_cd_change (int unitnum, const TCHAR *name) sys_command_info (unitnum, &di, 1); } -void device_func_reset (void) +void device_func_reset(void) +{ + // if reset during delayed CD change, re-insert the CD immediately + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { + struct blkdevstate *st = &state[i]; + if (st->imagechangetime > 0 && st->newimagefile[0] && !currprefs.cdslots[i].name[0]) { + _tcscpy(changed_prefs.cdslots[i].name, st->newimagefile); + _tcscpy(currprefs.cdslots[i].name, st->newimagefile); + //cd_statusline_label(i); + } + st->imagechangetime = 0; + st->newimagefile[0] = 0; + //st->mediawaschanged = false; + st->waspaused = false; + } +} + +void device_func_free(void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; diff --git a/src/devices.cpp b/src/devices.cpp index bfc4ac18..4cd4aaa3 100644 --- a/src/devices.cpp +++ b/src/devices.cpp @@ -35,23 +35,23 @@ void device_check_config(void) { - check_prefs_changed_audio (); - check_prefs_changed_custom (); - check_prefs_changed_cpu (); + check_prefs_changed_audio(); + check_prefs_changed_custom(); + check_prefs_changed_cpu(); check_prefs_picasso(); } void devices_reset(int hardreset) { - gayle_reset (hardreset); - DISK_reset (); - CIA_reset (); - gayle_reset (0); + gayle_reset(hardreset); + DISK_reset(); + CIA_reset(); + gayle_reset(0); #ifdef JIT - compemu_reset (); + compemu_reset(); #endif #ifdef AUTOCONFIG - expamem_reset (); + expamem_reset(); rtarea_reset(); #endif uae_int_requested = 0; @@ -60,34 +60,34 @@ void devices_reset(int hardreset) void devices_vsync_pre(void) { - blkdev_vsync (); - CIA_vsync_prehandler(); - inputdevice_vsync (); - filesys_vsync (); + blkdev_vsync(); + CIA_vsync_prehandler(); + inputdevice_vsync(); + filesys_vsync(); } void devices_hsync(void) { #ifdef CD32 - AKIKO_hsync_handler (); + AKIKO_hsync_handler(); cd32_fmv_hsync_handler(); #endif - decide_blitter (-1); + decide_blitter(-1); - DISK_hsync (); - audio_hsync (); - gayle_hsync (); + DISK_hsync(); + audio_hsync(); + gayle_hsync(); } // these really should be dynamically allocated.. void devices_rethink(void) { - rethink_cias (); + rethink_cias(); #ifdef CD32 - rethink_akiko (); + rethink_akiko(); rethink_cd32fmv(); #endif - rethink_gayle (); + rethink_gayle(); rethink_uae_int(); } @@ -96,42 +96,43 @@ void devices_update_sync(double svpos, double syncadjust) cd32_fmv_set_sync(svpos, syncadjust); } -void reset_all_systems (void) +void reset_all_systems(void) { - init_eventtab (); + init_eventtab(); #ifdef PICASSO96 - picasso_reset (); + picasso_reset(); #endif #ifdef FILESYS - filesys_prepare_reset (); - filesys_reset (); + filesys_prepare_reset(); + filesys_reset(); #endif - init_shm (); - memory_reset (); + init_shm(); + memory_reset(); #if defined (BSDSOCKET) - bsdlib_reset (); + bsdlib_reset(); #endif #ifdef FILESYS - filesys_start_threads (); - hardfile_reset (); + filesys_start_threads(); + hardfile_reset(); #endif - native2amiga_reset (); + native2amiga_reset(); + device_func_reset(); uae_int_requested = 0; } -void do_leave_program (void) +void do_leave_program(void) { #ifdef JIT - compiler_exit(); + compiler_exit(); #endif - graphics_leave (); - inputdevice_close (); - DISK_free (); - close_sound (); - dump_counts (); + graphics_leave(); + inputdevice_close(); + DISK_free(); + close_sound(); + dump_counts(); #ifdef CD32 - akiko_free (); + akiko_free(); cd32_fmv_free(); #endif gui_exit(); @@ -149,42 +150,43 @@ void do_leave_program (void) bsdlib_reset(); #endif gayle_free(); - device_func_reset(); + device_func_free(); memory_cleanup(); - cfgfile_addcfgparam(0); + cfgfile_addcfgparam(nullptr); machdep_free(); rtarea_free(); } -void virtualdevice_init (void) +void virtualdevice_init(void) { #ifdef AUTOCONFIG - rtarea_setup (); + rtarea_setup(); #endif #ifdef FILESYS - rtarea_init (); - uaeres_install (); - hardfile_install (); + rtarea_init(); + uaeres_install(); + hardfile_install(); #endif #ifdef AUTOCONFIG - expansion_init (); - emulib_install (); + expansion_init(); + emulib_install(); #endif #ifdef FILESYS - filesys_install (); + filesys_install(); #endif #if defined (BSDSOCKET) - bsdlib_install (); + bsdlib_install(); #endif } void devices_restore_start(void) { - restore_cia_start (); + restore_cia_start(); restore_blkdev_start(); - changed_prefs.bogomem_size = 0; - changed_prefs.chipmem_size = 0; - for (int i = 0; i < MAX_RAM_BOARDS; i++) { + changed_prefs.bogomem_size = 0; + changed_prefs.chipmem_size = 0; + for (int i = 0; i < MAX_RAM_BOARDS; i++) + { changed_prefs.fastmem[i].size = 0; changed_prefs.z3fastmem[i].size = 0; } diff --git a/src/include/blkdev.h b/src/include/blkdev.h index 8e55aaf3..32db4330 100644 --- a/src/include/blkdev.h +++ b/src/include/blkdev.h @@ -31,6 +31,7 @@ #define INQ_NOTPR 0x1F /* Logical unit not present (SCSI-1) */ #define MAX_TOC_ENTRIES 103 + struct cd_toc { uae_u8 adr, control; @@ -42,6 +43,7 @@ struct cd_toc uae_u8 zero; uae_u8 crc[2]; }; + struct cd_toc_head { int first_track, first_track_offset; @@ -64,25 +66,26 @@ struct cd_toc_head #define AUDIO_STATUS_PLAY_ERROR 0x14 #define AUDIO_STATUS_NO_STATUS 0x15 -struct device_info { +struct device_info +{ bool open; - int type; - int media_inserted; + int type; + int media_inserted; int audio_playing; - int removable; - int write_protected; - int cylinders; - int trackspercylinder; - int sectorspertrack; - int bytespersector; - int bus, target, lun; - int unitnum; - TCHAR label[MAX_DPATH]; + int removable; + int write_protected; + int cylinders; + int trackspercylinder; + int sectorspertrack; + int bytespersector; + int bus, target, lun; + int unitnum; + TCHAR label[MAX_DPATH]; TCHAR mediapath[MAX_DPATH]; TCHAR vendorid[10]; TCHAR productid[18]; TCHAR revision[6]; - const TCHAR *backend; + const TCHAR* backend; struct cd_toc_head toc; TCHAR system_id[33]; TCHAR volume_id[33]; @@ -90,17 +93,17 @@ struct device_info { struct amigascsi { - uae_u8 *data; - uae_s32 len; - uae_u8 cmd[16]; - uae_s32 cmd_len; - uae_u8 flags; - uae_u8 sensedata[256]; - uae_u16 sense_len; - uae_u16 cmdactual; - uae_u8 status; - uae_u16 actual; - uae_u16 sactual; + uae_u8* data; + uae_s32 len; + uae_u8 cmd[16]; + uae_s32 cmd_len; + uae_u8 flags; + uae_u8 sensedata[256]; + uae_u16 sense_len; + uae_u16 cmdactual; + uae_u8 status; + uae_u16 actual; + uae_u16 sactual; }; typedef int (*check_bus_func)(int flags); @@ -126,8 +129,9 @@ typedef int (*isatapi_func)(int); typedef int (*ismedia_func)(int, int); typedef int (*scsiemu_func)(int, uae_u8*); -struct device_functions { - const TCHAR *name; +struct device_functions +{ + const TCHAR* name; open_bus_func openbus; close_bus_func closebus; open_device_func opendev; @@ -148,51 +152,59 @@ struct device_functions { ismedia_func ismedia; scsiemu_func scsiemu; - }; extern int device_func_init(int flags); +extern void device_func_free(void); extern void device_func_reset(void); -extern int sys_command_open (int unitnum); -extern void sys_command_close (int unitnum); -extern struct device_info *sys_command_info (int unitnum, struct device_info *di, int); -extern int sys_command_cd_pause (int unitnum, int paused); -extern void sys_command_cd_stop (int unitnum); -extern int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int); -extern int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc); -extern uae_u32 sys_command_cd_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_right); -extern int sys_command_cd_qcode (int unitnum, uae_u8*, int lsn, bool all); -extern int sys_command_cd_toc (int unitnum, struct cd_toc_head*); -extern int sys_command_cd_read (int unitnum, uae_u8 *data, int block, int size); -extern int sys_command_cd_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize); -int sys_command_cd_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u8 sectortype, uae_u8 scsicmd9, uae_u8 subs); -extern int sys_command_ismedia (int unitnum, int quick); -extern struct device_info *sys_command_info_session (int unitnum, struct device_info *di, int, int); +extern int sys_command_open(int unitnum); +extern void sys_command_close(int unitnum); +extern struct device_info* sys_command_info(int unitnum, struct device_info* di, int); +extern int sys_command_cd_pause(int unitnum, int paused); +extern void sys_command_cd_stop(int unitnum); +extern int sys_command_cd_play(int unitnum, int startlsn, int endlsn, int); +extern int sys_command_cd_play(int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, + play_subchannel_callback subfunc); +extern uae_u32 sys_command_cd_volume(int unitnum, uae_u16 volume_left, uae_u16 volume_right); +extern int sys_command_cd_qcode(int unitnum, uae_u8*, int lsn, bool all); +extern int sys_command_cd_toc(int unitnum, struct cd_toc_head*); +extern int sys_command_cd_read(int unitnum, uae_u8* data, int block, int size); +extern int sys_command_cd_rawread(int unitnum, uae_u8* data, int sector, int size, int sectorsize); +int sys_command_cd_rawread(int unitnum, uae_u8* data, int sector, int size, int sectorsize, uae_u8 sectortype, + uae_u8 scsicmd9, uae_u8 subs); +extern int sys_command_ismedia(int unitnum, int quick); +extern struct device_info* sys_command_info_session(int unitnum, struct device_info* di, int, int); -extern void blkdev_vsync (void); +extern void blkdev_vsync(void); extern void restore_blkdev_start(void); -extern int msf2lsn (int msf); -extern int lsn2msf (int lsn); -extern uae_u8 frombcd (uae_u8 v); -extern uae_u8 tobcd (uae_u8 v); -extern int fromlongbcd (uae_u8 *p); -extern void tolongbcd (uae_u8 *p, int v); +extern int msf2lsn(int msf); +extern int lsn2msf(int lsn); +extern uae_u8 frombcd(uae_u8 v); +extern uae_u8 tobcd(uae_u8 v); +extern int fromlongbcd(uae_u8 * p); +extern void tolongbcd(uae_u8* p, int v); -extern void blkdev_default_prefs (struct uae_prefs *p); -extern void blkdev_fix_prefs (struct uae_prefs *p); -extern int isaudiotrack (struct cd_toc_head*, int block); -extern int isdatatrack (struct cd_toc_head*, int block); -void sub_to_interleaved (const uae_u8 *s, uae_u8 *d); -void sub_to_deinterleaved (const uae_u8 *s, uae_u8 *d); +extern void blkdev_default_prefs(struct uae_prefs* p); +extern void blkdev_fix_prefs(struct uae_prefs* p); +extern int isaudiotrack(struct cd_toc_head*, int block); +extern int isdatatrack(struct cd_toc_head*, int block); +void sub_to_interleaved(const uae_u8* s, uae_u8* d); +void sub_to_deinterleaved(const uae_u8* s, uae_u8* d); -enum cd_standard_unit { CD_STANDARD_UNIT_DEFAULT, CD_STANDARD_UNIT_AUDIO, CD_STANDARD_UNIT_CDTV, CD_STANDARD_UNIT_CD32 }; +enum cd_standard_unit +{ + CD_STANDARD_UNIT_DEFAULT, + CD_STANDARD_UNIT_AUDIO, + CD_STANDARD_UNIT_CDTV, + CD_STANDARD_UNIT_CD32 +}; -extern int get_standard_cd_unit (enum cd_standard_unit csu); -extern void blkdev_cd_change (int unitnum, const TCHAR *name); +extern int get_standard_cd_unit(enum cd_standard_unit csu); +extern void blkdev_cd_change(int unitnum, const TCHAR* name); -extern void blkdev_entergui (void); -extern void blkdev_exitgui (void); +extern void blkdev_entergui(void); +extern void blkdev_exitgui(void); extern struct device_functions devicefunc_cdimage;