2 Skelton for retropc emulator
\r
4 Author : Takeda.Toshiya
\r
7 [ d88 image handler ]
\r
17 #define MEDIA_TYPE_2D 0x00
\r
18 #define MEDIA_TYPE_2DD 0x10
\r
19 #define MEDIA_TYPE_2HD 0x20
\r
20 #define MEDIA_TYPE_144 0x30
\r
21 #define MEDIA_TYPE_UNK 0xff
\r
23 #define DRIVE_TYPE_2D MEDIA_TYPE_2D
\r
24 #define DRIVE_TYPE_2DD MEDIA_TYPE_2DD
\r
25 #define DRIVE_TYPE_2HD MEDIA_TYPE_2HD
\r
26 #define DRIVE_TYPE_144 MEDIA_TYPE_144
\r
27 #define DRIVE_TYPE_UNK MEDIA_TYPE_UNK
\r
29 #define SPECIAL_DISK_X1_ALPHA 1
\r
30 #define SPECIAL_DISK_X1_BATTEN 2
\r
33 #define DISK_BUFFER_SIZE 0x380000 // 3.5MB
\r
34 #define TRACK_BUFFER_SIZE 0x080000 // 0.5MB
\r
36 // teledisk decoder constant
\r
37 #define STRING_BUFFER_SIZE 4096
\r
38 #define LOOKAHEAD_BUFFER_SIZE 60
\r
40 #define N_CHAR (256 - THRESHOLD + LOOKAHEAD_BUFFER_SIZE)
\r
41 #define TABLE_SIZE (N_CHAR * 2 - 1)
\r
42 #define ROOT_POSITION (TABLE_SIZE - 1)
\r
43 #define MAX_FREQ 0x8000
\r
53 uint8 buffer[DISK_BUFFER_SIZE + TRACK_BUFFER_SIZE];
\r
54 _TCHAR orig_path[_MAX_PATH];
\r
55 _TCHAR dest_path[_MAX_PATH];
\r
56 _TCHAR temp_path[_MAX_PATH];
\r
62 uint8 fdi_header[4096];
\r
64 void set_sector_info(uint8 *t);
\r
67 // teledisk image decoder (td0)
\r
68 bool teledisk_to_d88();
\r
75 short decode_char();
\r
76 short decode_position();
\r
78 int decode(uint8 *buf, int len);
\r
80 // imagedisk image decoder (imd)
\r
81 bool imagedisk_to_d88();
\r
83 // cpdread image decoder (dsk)
\r
84 bool cpdread_to_d88(int extended);
\r
86 // standard image decoder (fdi/tfd/2d/sf7)
\r
87 bool standard_to_d88(int type, int ncyl, int nside, int nsec, int size);
\r
89 uint8 text_buf[STRING_BUFFER_SIZE + LOOKAHEAD_BUFFER_SIZE - 1];
\r
91 uint16 bufcnt, bufndx, bufpos;
\r
92 uint16 ibufcnt,ibufndx;
\r
94 uint16 freq[TABLE_SIZE + 1];
\r
95 short prnt[TABLE_SIZE + N_CHAR];
\r
96 short son[TABLE_SIZE];
\r
118 uint8 nsec, trk, head;
\r
138 uint32 trkptr[164];
\r
143 uint8 dens, del, stat;
\r
148 DISK(EMU* parent_emu) : emu(parent_emu)
\r
150 inserted = ejected = write_protected = changed = false;
\r
152 sector_size.sd = sector_num.sd = 0;
\r
154 drive_type = DRIVE_TYPE_UNK;
\r
157 static int num = 0;
\r
167 void open(_TCHAR path[], int bank);
\r
169 bool get_track(int trk, int side);
\r
170 bool make_track(int trk, int side);
\r
171 bool get_sector(int trk, int side, int index);
\r
172 void set_deleted(bool value);
\r
173 void set_crc_error(bool value);
\r
175 bool format_track(int trk, int side);
\r
176 void insert_sector(uint8 c, uint8 h, uint8 r, uint8 n, bool deleted, bool crc_error, uint8 fill_data, int length);
\r
177 void sync_buffer();
\r
180 int get_track_size();
\r
181 double get_usec_per_bytes(int bytes);
\r
182 bool check_media_type();
\r
186 bool write_protected;
\r
189 bool is_standard_image;
\r
191 int is_special_disk;
\r
194 uint8 track[TRACK_BUFFER_SIZE];
\r
196 bool invalid_format;
\r
198 int cur_track, cur_side;
\r
200 int sync_position[256];
\r
201 int id_position[256];
\r
202 int data_position[256];
\r
219 if(drive_num < array_length(config.ignore_crc)) {
\r
220 return config.ignore_crc[drive_num];
\r
226 void save_state(FILEIO* state_fio);
\r
227 bool load_state(FILEIO* state_fio);
\r