+bool VM::is_floppy_disk_inserted(int drv)
+{
+ return fdc->is_disk_inserted(drv);
+}
+
+void VM::is_floppy_disk_protected(int drv, bool value)
+{
+ fdc->is_disk_protected(drv, value);
+}
+
+bool VM::is_floppy_disk_protected(int drv)
+{
+ return fdc->is_disk_protected(drv);
+}
+
+uint32_t VM::is_floppy_disk_accessed()
+{
+ uint32_t status = fdc->read_signal(0);
+ if(bios) {
+ status |= bios->read_signal(0);
+ }
+ return status;
+}
+
+void VM::open_hard_disk(int drv, const _TCHAR* file_path)
+{
+ if(drv < USE_HARD_DISK) {
+#if defined(OPEN_HARD_DISK_IN_RESET)
+ my_tcscpy_s(hd_file_path[drv], _MAX_PATH, file_path);
+#else
+ open_hard_disk_tmp(drv, file_path);
+#endif
+ }
+}
+
+void VM::close_hard_disk(int drv)
+{
+ if(drv < USE_HARD_DISK) {
+#if defined(OPEN_HARD_DISK_IN_RESET)
+ hd_file_path[drv][0] = _T('\0');
+#else
+ close_hard_disk_tmp(drv);
+#endif
+ }
+}
+
+bool VM::is_hard_disk_inserted(int drv)
+{
+ if(drv < USE_HARD_DISK) {
+#if defined(OPEN_HARD_DISK_IN_RESET)
+ return (hd_file_path[drv][0] != _T('\0'));
+#else
+ return is_hard_disk_inserted_tmp(drv);
+#endif
+ }
+ return false;
+}
+
+uint32_t VM::is_hard_disk_accessed()
+{
+ uint32_t status = 0;
+ for(int drv = 0; drv < USE_HARD_DISK; drv++) {
+ if(scsi_hdd[drv]->get_disk_handler(0)->accessed()) {
+ status |= 1 << drv;
+ }
+ }
+ return status;
+}
+
+void VM::open_hard_disk_tmp(int drv, const _TCHAR* file_path)
+{
+ if(drv < USE_HARD_DISK) {
+ scsi_hdd[drv]->get_disk_handler(0)->open(file_path, 512);
+ }
+}
+
+void VM::close_hard_disk_tmp(int drv)
+{
+ if(drv < USE_HARD_DISK) {
+ scsi_hdd[drv]->get_disk_handler(0)->close();
+ }
+}
+
+bool VM::is_hard_disk_inserted_tmp(int drv)