OSDN Git Service

[BUILD][MZ2800] Fix FTBFS.
[csp-qt/common_source_project-fm7.git] / source / src / vm / scsi_hdd.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2016.03.01-
6
7         [ SCSI/SASI hard disk drive ]
8 */
9
10 #ifndef _SCSI_HDD_H_
11 #define _SCSI_HDD_H_
12
13 #include "scsi_dev.h"
14
15 class HARDDISK;
16 //class csp_state_utils;
17
18 class SCSI_HDD : public SCSI_DEV
19 {
20 private:
21         HARDDISK* disk[8];
22         
23 //protected:
24 //      csp_state_utils *state_entry;
25
26         _TCHAR image_path[8][_MAX_PATH];
27         int sector_size[8];
28         
29 public:
30         SCSI_HDD(VM_TEMPLATE* parent_vm, EMU* parent_emu) : SCSI_DEV(parent_vm, parent_emu) 
31         {
32                 for(int i = 0; i < 8; i++) {
33                         disk[i] = NULL;
34                         image_path[i][0] = _T('\0');
35                 }
36                 my_sprintf_s(vendor_id, 9, "NECITSU");
37                 my_sprintf_s(product_id, 17, "SCSI-HDD");
38                 device_type = 0x00;
39                 is_removable = is_hot_swappable = false;
40
41                 seek_time = 10000; // 10msec
42                 bytes_per_sec = 0x500000; // 5MB/sec
43                 
44 //              default_drive_size = 0x2800000; // 40MB
45                 set_device_name(_T("SCSI HDD"));
46         }
47         ~SCSI_HDD() {}
48         
49         // common functions
50         void decl_state();
51         void save_state(FILEIO* state_fio);
52         bool load_state(FILEIO* state_fio);
53         
54         // virtual scsi functions
55         void release();
56         void reset();
57         bool is_device_existing();
58         uint32_t physical_block_size();
59         uint32_t logical_block_size();
60         uint32_t max_logical_block_addr();
61         bool read_buffer(int length);
62         bool write_buffer(int length);
63         
64         // unique functions
65         void set_disk_handler(int drv, HARDDISK* device)
66         {
67                 if(drv < 8) {
68                         disk[drv] = device;
69                 }
70         }
71         HARDDISK* get_disk_handler(int drv)
72         {
73                 if(drv < 8) {
74                         return disk[drv];
75                 }
76                 return NULL;
77         }
78         void open(int drv, const _TCHAR* file_path, int default_sector_size);
79         void close(int drv);
80         bool mounted(int drv);
81         bool accessed(int drv);
82 };
83
84 class SASI_HDD : public SCSI_HDD
85 {
86 public:
87         SASI_HDD(VM* parent_vm, EMU* parent_emu) : SCSI_HDD(parent_vm, parent_emu)
88         {
89                 set_device_name(_T("SASI Hard Disk Drive"));
90         }
91         ~SASI_HDD() {}
92         
93         // virtual scsi functions
94         int get_command_length(int value);
95         void start_command();
96 };
97
98 #endif
99