+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(sasi_hdd[drv >> 1]->get_disk_handler(drv & 1)->accessed()) {
+ status |= 1 << drv;
+ }
+ }
+ return status;
+}
+
+void VM::open_hard_disk_tmp(int drv, const _TCHAR* file_path)
+{
+ if(drv < USE_HARD_DISK) {
+ sasi_hdd[drv >> 1]->get_disk_handler(drv & 1)->open(file_path);
+ }
+}
+
+void VM::close_hard_disk_tmp(int drv)
+{
+ if(drv < USE_HARD_DISK) {
+ sasi_hdd[drv >> 1]->get_disk_handler(drv & 1)->close();
+ }
+}
+
+bool VM::is_hard_disk_inserted_tmp(int drv)
+{
+ if(drv < USE_HARD_DISK) {
+ return sasi_hdd[drv >> 1]->get_disk_handler(drv & 1)->mounted();
+ }
+ return false;
+}
+
+void VM::play_tape(int drv, const _TCHAR* file_path)