2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
16 #if defined(_USE_AGAR) || defined(_USE_SDL)
17 #include "agar_main.h"
21 #define MEDIA_TYPE_2D 0x00
22 #define MEDIA_TYPE_2DD 0x10
23 #define MEDIA_TYPE_2HD 0x20
24 #define MEDIA_TYPE_144 0x30
25 #define MEDIA_TYPE_UNK 0xff
27 #define DRIVE_TYPE_2D MEDIA_TYPE_2D
28 #define DRIVE_TYPE_2DD MEDIA_TYPE_2DD
29 #define DRIVE_TYPE_2HD MEDIA_TYPE_2HD
30 #define DRIVE_TYPE_144 MEDIA_TYPE_144
31 #define DRIVE_TYPE_UNK MEDIA_TYPE_UNK
34 #define DISK_BUFFER_SIZE 0x180000 // 1.5MB
35 #define TRACK_BUFFER_SIZE 0x8000 // 32KB
37 // teledisk decoder constant
38 #define STRING_BUFFER_SIZE 4096
39 #define LOOKAHEAD_BUFFER_SIZE 60
41 #define N_CHAR (256 - THRESHOLD + LOOKAHEAD_BUFFER_SIZE)
42 #define TABLE_SIZE (N_CHAR * 2 - 1)
43 #define ROOT_POSITION (TABLE_SIZE - 1)
44 #define MAX_FREQ 0x8000
52 uint8 buffer[DISK_BUFFER_SIZE];
53 _TCHAR orig_path[_MAX_PATH];
54 _TCHAR dest_path[_MAX_PATH];
55 _TCHAR temp_path[_MAX_PATH];
60 uint8 fdi_header[4096];
62 bool check_media_type();
64 // teledisk image decoder (td0)
65 bool teledisk_to_d88();
73 short decode_position();
75 int decode(uint8 *buf, int len);
77 // imagedisk image decoder (imd)
78 bool imagedisk_to_d88();
80 // cpdread image decoder (dsk)
81 bool cpdread_to_d88(int extended);
83 // standard image decoder (fdi/tfd/2d/sf7)
84 bool standard_to_d88(int type, int ncyl, int nside, int nsec, int size);
86 uint8 text_buf[STRING_BUFFER_SIZE + LOOKAHEAD_BUFFER_SIZE - 1];
88 uint16 bufcnt, bufndx, bufpos;
89 uint16 ibufcnt,ibufndx;
91 uint16 freq[TABLE_SIZE + 1];
92 short prnt[TABLE_SIZE + N_CHAR];
93 short son[TABLE_SIZE];
115 uint8 nsec, trk, head;
140 uint8 dens, del, stat;
148 void open(_TCHAR path[], int offset);
150 bool get_track(int trk, int side);
151 bool make_track(int trk, int side);
152 bool get_sector(int trk, int side, int index);
155 int get_track_size();
156 double get_usec_per_bytes(int bytes);
160 bool write_protected;
163 bool is_standard_image;
168 uint8 track[TRACK_BUFFER_SIZE];
171 bool too_many_sectors;
174 int sync_position[256];
175 int id_position[256];
176 int data_position[256];
192 void save_state(FILEIO* state_fio);
193 bool load_state(FILEIO* state_fio);