OSDN Git Service

6e37a7e358d84f32270d57bafc291beb4a7249a7
[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 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 public:
27         SCSI_HDD(VM_TEMPLATE* parent_vm, EMU* parent_emu) : SCSI_DEV(parent_vm, parent_emu) 
28         {
29                 for(int i = 0; i < 8; i++) {
30                         disk[i] = NULL;
31                 }
32                 my_sprintf_s(vendor_id, 9, "NECITSU");
33                 my_sprintf_s(product_id, 17, "SCSI-HDD");
34                 device_type = 0x00;
35                 is_removable = false;
36                 seek_time = 10000; // 10msec
37                 bytes_per_sec = 0x500000; // 5MB/sec
38                 
39                 default_drive_size = 0x2800000; // 40MB
40                 set_device_name(_T("SCSI HDD"));
41         }
42         ~SCSI_HDD() {}
43         
44         // common functions
45         void decl_state();
46         void save_state(FILEIO* state_fio);
47         bool load_state(FILEIO* state_fio);
48         
49         // virtual scsi functions
50         void release();
51         bool is_device_existing();
52         uint32_t physical_block_size();
53         uint32_t logical_block_size();
54         uint32_t max_logical_block_addr();
55         void read_buffer(int length);
56         void write_buffer(int length);
57         
58         // unique functions
59         void set_disk_handler(int drv, HARDDISK* device)
60         {
61                 if(drv < 8) {
62                         disk[drv] = device;
63                 }
64         }
65         HARDDISK* get_disk_handler(int drv)
66         {
67                 if(drv < 8) {
68                         return disk[drv];
69                 }
70                 return NULL;
71         }
72         uint32_t default_drive_size;
73 };
74
75 #endif
76