diff --git a/src/ui/ui.h b/src/ui/ui.h index f5761e7..95d6739 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -72,6 +72,7 @@ #define SB_DISK 0x10 #define SB_CDROM 0x20 #define SB_ZIP 0x30 +#define SB_MO 0x40 #define SB_NETWORK 0x50 #define SB_SOUND 0x60 #define SB_TEXT 0x70 @@ -138,9 +139,13 @@ extern void ui_floppy_mount(uint8_t drive, int part, int8_t wp, extern void ui_cdrom_eject(uint8_t id); extern void ui_cdrom_reload(uint8_t id); extern void ui_zip_mount(uint8_t drive, int part, int8_t wp, - const wchar_t *fn); + const wchar_t* fn); extern void ui_zip_eject(uint8_t id); extern void ui_zip_reload(uint8_t id); +extern void ui_mo_mount(uint8_t drive, int part, int8_t wp, + const wchar_t* fn); +extern void ui_mo_eject(uint8_t id); +extern void ui_mo_reload(uint8_t id); extern void ui_disk_mount(uint8_t drive, int part, int8_t wp, const wchar_t *fn); extern void ui_disk_unload(uint8_t id); @@ -211,6 +216,7 @@ extern void plat_endblit(void); extern int floppy_create_86f(const wchar_t *, int8_t sz, int8_t rpm_mode); extern int floppy_create_image(const wchar_t *, int8_t sz, int8_t is_fdi); extern int zip_create_image(const wchar_t *, int8_t sz, int8_t is_zdi); +extern int mo_create_image(const wchar_t*, int8_t sz); #ifdef __cplusplus } diff --git a/src/ui/ui_cdrom.c b/src/ui/ui_cdrom.c index 2ee264e..039350e 100644 --- a/src/ui/ui_cdrom.c +++ b/src/ui/ui_cdrom.c @@ -58,6 +58,7 @@ #include "../devices/scsi/scsi_device.h" #include "../devices/scsi/scsi_disk.h" #include "../devices/disk/zip.h" +#include "../devices/disk/mo.h" #include "../devices/cdrom/cdrom.h" #include "ui.h" @@ -136,9 +137,9 @@ ui_cdrom_reload(uint8_t id) void -ui_zip_mount(uint8_t id, int part, int8_t wp, const wchar_t *fn) +ui_zip_mount(uint8_t id, int part, int8_t wp, const wchar_t* fn) { - zip_t *dev = (zip_t *)zip_drives[id].priv; + zip_t* dev = (zip_t*)zip_drives[id].priv; int len; zip_disk_close(dev); @@ -162,18 +163,18 @@ ui_zip_mount(uint8_t id, int part, int8_t wp, const wchar_t *fn) void ui_zip_eject(uint8_t id) { - zip_t *dev = (zip_t *)zip_drives[id].priv; + zip_t* dev = (zip_t*)zip_drives[id].priv; zip_disk_close(dev); if (zip_drives[id].bus_type) { - /* Signal disk change to the emulated machine. */ - zip_insert(dev); + /* Signal disk change to the emulated machine. */ + zip_insert(dev); } ui_sb_icon_state(SB_ZIP | id, 1); - ui_sb_menu_enable_item(SB_ZIP|id, IDM_ZIP_EJECT | id, 0); - ui_sb_menu_enable_item(SB_ZIP|id, IDM_ZIP_RELOAD | id, 1); + ui_sb_menu_enable_item(SB_ZIP | id, IDM_ZIP_EJECT | id, 0); + ui_sb_menu_enable_item(SB_ZIP | id, IDM_ZIP_RELOAD | id, 1); ui_sb_tip_update(SB_ZIP | id); config_save(); @@ -183,20 +184,89 @@ ui_zip_eject(uint8_t id) void ui_zip_reload(uint8_t id) { - zip_t *dev = (zip_t *)zip_drives[id].priv; + zip_t* dev = (zip_t*)zip_drives[id].priv; zip_disk_reload(dev); if (wcslen(zip_drives[id].image_path) == 0) { - ui_sb_menu_enable_item(SB_ZIP|id, IDM_ZIP_EJECT | id, 0); - ui_sb_icon_state(SB_ZIP|id, 1); - } else { - ui_sb_menu_enable_item(SB_ZIP|id, IDM_ZIP_EJECT | id, 1); - ui_sb_icon_state(SB_ZIP|id, 0); + ui_sb_menu_enable_item(SB_ZIP | id, IDM_ZIP_EJECT | id, 0); + ui_sb_icon_state(SB_ZIP | id, 1); + } + else { + ui_sb_menu_enable_item(SB_ZIP | id, IDM_ZIP_EJECT | id, 1); + ui_sb_icon_state(SB_ZIP | id, 0); } - ui_sb_menu_enable_item(SB_ZIP|id, IDM_ZIP_RELOAD | id, 0); - ui_sb_tip_update(SB_ZIP|id); + ui_sb_menu_enable_item(SB_ZIP | id, IDM_ZIP_RELOAD | id, 0); + ui_sb_tip_update(SB_ZIP | id); + + config_save(); +} + + +void +ui_mo_mount(uint8_t id, int part, int8_t wp, const wchar_t* fn) +{ + mo_t* dev = (mo_t*)mo_drives[id].priv; + int len; + + mo_disk_close(dev); + + mo_drives[id].ui_writeprot = wp; + mo_load(dev, fn); + mo_insert(dev); + + len = (int)wcslen(mo_drives[id].image_path); + ui_sb_icon_state(SB_MO | id, len ? 0 : 1); + + sb_menu_enable_item(part, IDM_MO_EJECT | id, len ? 1 : 0); + sb_menu_enable_item(part, IDM_MO_RELOAD | id, len ? 0 : 1); + + ui_sb_tip_update(SB_MO | id); + + config_save(); +} + + +void +ui_mo_eject(uint8_t id) +{ + mo_t* dev = (mo_t*)mo_drives[id].priv; + + mo_disk_close(dev); + + if (mo_drives[id].bus_type) { + /* Signal disk change to the emulated machine. */ + mo_insert(dev); + } + + ui_sb_icon_state(SB_MO | id, 1); + ui_sb_menu_enable_item(SB_MO | id, IDM_MO_EJECT | id, 0); + ui_sb_menu_enable_item(SB_MO | id, IDM_MO_RELOAD | id, 1); + ui_sb_tip_update(SB_MO | id); + + config_save(); +} + + +void +ui_mo_reload(uint8_t id) +{ + mo_t* dev = (mo_t*)mo_drives[id].priv; + + mo_disk_reload(dev); + + if (wcslen(mo_drives[id].image_path) == 0) { + ui_sb_menu_enable_item(SB_MO | id, IDM_MO_EJECT | id, 0); + ui_sb_icon_state(SB_MO | id, 1); + } + else { + ui_sb_menu_enable_item(SB_MO | id, IDM_MO_EJECT | id, 1); + ui_sb_icon_state(SB_MO | id, 0); + } + + ui_sb_menu_enable_item(SB_MO | id, IDM_MO_RELOAD | id, 0); + ui_sb_tip_update(SB_MO | id); config_save(); } diff --git a/src/ui/ui_resource.h b/src/ui/ui_resource.h index e6ced31..e566372 100644 --- a/src/ui/ui_resource.h +++ b/src/ui/ui_resource.h @@ -186,6 +186,11 @@ #define IDM_ZIP_EJECT (IDM_SBAR + 0x1200) #define IDM_ZIP_RELOAD (IDM_SBAR + 0x1300) +#define IDM_MO_IMAGE_NEW (IDM_SBAR + 0x1400) +#define IDM_MO_IMAGE_EXIST (IDM_SBAR + 0x1500) +#define IDM_MO_EJECT (IDM_SBAR + 0x1600) +#define IDM_MO_RELOAD (IDM_SBAR + 0x1700) + #define IDM_DISK_IMAGE_NEW (IDM_SBAR + 0x1800) #define IDM_DISK_IMAGE_EXIST (IDM_SBAR + 0x1900) #define IDM_DISK_EJECT (IDM_SBAR + 0x1a00)