2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
17 #define SIG_T3444A_DRIVE 0
18 #define SIG_T3444A_TND 1
19 #define SIG_T3444A_MOTOR 2
22 #define SIG_T3444A_DRDY 4
23 #define SIG_T3444A_CRDY 5
24 #define SIG_T3444A_RQM 6
27 //#define SECTORS_IN_TRACK 16
29 //#define SECTORS_IN_TRACK 26
35 class T3444A : public DEVICE
39 outputs_t outputs_rqm;
43 NOISE* d_noise_head_down;
44 NOISE* d_noise_head_up;
54 int next_trans_position;
55 int bytes_before_2nd_rqm;
56 int next_sync_position;
70 uint8_t sector_id[26 * 4]; // SECTORS_IN_TRACK
75 void cancel_my_event(int event);
76 void register_my_event(int event, double usec);
77 void register_seek_event();
78 void register_rqm_event(int bytes);
79 void register_lost_event(int bytes);
89 uint32_t prev_rqm_clock;
93 int _sectors_in_track;
97 int __FASTCALL get_cur_position();
98 double __FASTCALL get_usec_to_start_trans();
99 double __FASTCALL get_usec_to_next_trans_pos();
100 double __FASTCALL get_usec_to_detect_index_hole(int count);
103 uint8_t search_sector();
107 void cmd_seek_zero();
109 void cmd_read_write();
112 void update_head_flag(int drv, bool head_load);
115 void set_rqm(bool val);
118 T3444A(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
120 initialize_output_signals(&outputs_rqm);
122 d_noise_head_down = NULL;
123 d_noise_head_up = NULL;
127 _sectors_in_track = 26;
128 _has_t3444m = _fdc_debug_log = false;
129 set_device_name(_T("T3444A FDC"));
137 void __FASTCALL write_io8(uint32_t addr, uint32_t data);
138 uint32_t __FASTCALL read_io8(uint32_t addr);
139 void __FASTCALL write_dma_io8(uint32_t addr, uint32_t data);
140 uint32_t __FASTCALL read_dma_io8(uint32_t addr);
141 void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
142 uint32_t __FASTCALL read_signal(int ch);
143 void event_callback(int event_id, int err);
144 void update_config();
145 bool process_state(FILEIO* state_fio, bool loading);
148 void set_context_rqm(DEVICE* device, int id, uint32_t mask)
150 register_output_signal(&outputs_rqm, device, id, mask);
152 void set_context_noise_seek(NOISE* device)
154 d_noise_seek = device;
156 NOISE* get_context_noise_seek()
160 void set_context_noise_head_down(NOISE* device)
162 d_noise_head_down = device;
164 NOISE* get_context_noise_head_down()
166 return d_noise_head_down;
168 void set_context_noise_head_up(NOISE* device)
170 d_noise_head_up = device;
172 NOISE* get_context_noise_head_up()
174 return d_noise_head_up;
176 DISK* get_disk_handler(int drv)
180 void open_disk(int drv, const _TCHAR* file_path, int bank);
181 void close_disk(int drv);
182 bool is_disk_inserted(int drv);
183 void is_disk_protected(int drv, bool value);
184 bool is_disk_protected(int drv);
185 void set_drive_type(int drv, uint8_t type);
186 uint8_t get_drive_type(int drv);
187 void set_drive_rpm(int drv, int rpm);
188 void set_drive_mfm(int drv, bool mfm);