File: diskimage.h

package info (click to toggle)
vice 3.7.1%2Bdfsg1-2
  • links: PTS
  • area: contrib
  • in suites: bookworm
  • size: 49,876 kB
  • sloc: ansic: 431,530; cpp: 35,357; sh: 9,747; makefile: 7,010; perl: 1,822; yacc: 1,197; lex: 589; sed: 184; objc: 115; xml: 36
file content (164 lines) | stat: -rw-r--r-- 7,041 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
 * diskimage.h - Common low-level disk image access.
 *
 * Written by
 *  Andreas Boose <viceteam@t-online.de>
 *
 * This file is part of VICE, the Versatile Commodore Emulator.
 * See README for copyright notice.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 *  02111-1307  USA.
 *
 */

#ifndef VICE_DISKIMAGE_H
#define VICE_DISKIMAGE_H

#include <sys/types.h>
#include "types.h"

#define D64_FILE_SIZE_35   174848        /* D64 image, 35 tracks */
#define D64_FILE_SIZE_35E (174848 + 683) /* D64 image, 35 tracks with errors */
#define D67_FILE_SIZE      176640        /* D67 image, 35 tracks DOS1 */
#define D71_FILE_SIZE      349696        /* D71 image, 70 tracks */
#define D71_FILE_SIZE_E   (349696 + 1366)/* D71 image, 70 tracks with errors */

#define D81_FILE_SIZE      819200        /* D81 image, 80 tracks */
#define D81_FILE_SIZE_E    822400        /* D81 image, 80 tracks with errors */
#define D81_FILE_SIZE_81   829440        /* D81 image, 81 tracks (! sams as D1M) */
#define D81_FILE_SIZE_81E  832680        /* D81 image, 81 tracks with errors (! sams as D1M) */
#define D81_FILE_SIZE_82   839680        /* D81 image, 82 tracks */
#define D81_FILE_SIZE_82E  842960        /* D81 image, 82 tracks with errors */
#define D81_FILE_SIZE_83   849920        /* D81 image, 83 tracks */
#define D81_FILE_SIZE_83E  853240        /* D81 image, 83 tracks with errors */

#define D80_FILE_SIZE      533248        /* D80 image, 77 tracks */
#define D82_FILE_SIZE     1066496        /* D82 image, 77 tracks */
#define D1M_FILE_SIZE      829440        /* D1M image, 81 tracks */
#define D1M_FILE_SIZE_E    832680        /* D1M image, 81 tracks with errors */
#define D2M_FILE_SIZE     1658880        /* D2M image, 81 tracks */
#define D2M_FILE_SIZE_E   1665360        /* D2M image, 81 tracks with errors */
#define D4M_FILE_SIZE     3317760        /* D4M image, 81 tracks */
#define D4M_FILE_SIZE_E   3330720        /* D4M image, 81 tracks with errors */

#define D9090_FILE_SIZE   (153*6*32*256) /* D90 image, 153 tracks, 32 sectors, 6 heads */
#define D9060_FILE_SIZE   (153*4*32*256) /* D90 image, 153 tracks, 32 sectors, 4 heads */

#define DISK_IMAGE_DEVICE_FS   0
#define DISK_IMAGE_DEVICE_REAL 1
#define DISK_IMAGE_DEVICE_RAW  2

#ifdef HAVE_X64_IMAGE
#define DISK_IMAGE_TYPE_X64 0
#endif
#define DISK_IMAGE_TYPE_G64 100
#define DISK_IMAGE_TYPE_G71 101
#define DISK_IMAGE_TYPE_P64 200
#define DISK_IMAGE_TYPE_D64 1541
#define DISK_IMAGE_TYPE_D67 2040
#define DISK_IMAGE_TYPE_D71 1571
#define DISK_IMAGE_TYPE_D81 1581
#define DISK_IMAGE_TYPE_D80 8050
#define DISK_IMAGE_TYPE_D82 8250
#define DISK_IMAGE_TYPE_TAP 1531 /* FIXME: this is nonsense, rename and move elsewhere */
#define DISK_IMAGE_TYPE_D1M 1000
#define DISK_IMAGE_TYPE_D2M 2000
#define DISK_IMAGE_TYPE_D4M 4000
#define DISK_IMAGE_TYPE_DHD 4844 /* HD in ASCII for CMDHD */
#define DISK_IMAGE_TYPE_D90 9000 /* D9090/D9060 */

struct fsimage_s;
struct rawimage_s;
struct gcr_s;
struct TP64Image;
struct disk_track_s;

struct disk_image_s {
    union media_u {
        struct fsimage_s *fsimage;
        struct rawimage_s *rawimage;
    } media;
    unsigned int read_only;
    unsigned int device;
    unsigned int type;
    unsigned int tracks;
    unsigned int sectors; /* for D9090/D9060 */
    unsigned int max_half_tracks;
    struct gcr_s *gcr;
    struct TP64Image *p64;
};
typedef struct disk_image_s disk_image_t;

struct disk_addr_s {
    unsigned int track;
    unsigned int sector;
};
typedef struct disk_addr_s disk_addr_t;

extern void disk_image_init(void);
extern int disk_image_resources_init(void);
extern int disk_image_cmdline_options_init(void);
extern void disk_image_resources_shutdown(void);

extern void disk_image_fsimage_name_set(disk_image_t *image, const char *name);
extern const char *disk_image_fsimage_name_get(const disk_image_t *image);
extern void *disk_image_fsimage_fd_get(const disk_image_t *image);
extern int disk_image_fsimage_create(const char *name, unsigned int type);
extern int disk_image_fsimage_create_dxm(const char *name, const char *diskname, unsigned int type);

extern void disk_image_rawimage_name_set(disk_image_t *image, const char *name);
extern void disk_image_rawimage_driver_name_set(disk_image_t *image);

extern void disk_image_name_set(disk_image_t *image, const char *name);
extern const char *disk_image_name_get(const disk_image_t *image);

extern disk_image_t *disk_image_create(void);
extern void disk_image_destroy(disk_image_t *image);

extern void disk_image_media_create(disk_image_t *image);
extern void disk_image_media_destroy(disk_image_t *image);

extern int disk_image_open(disk_image_t *image);
extern int disk_image_close(disk_image_t *image);

extern int disk_image_read_sector(const disk_image_t *image, uint8_t *buf,
                                  const disk_addr_t *dadr);
extern int disk_image_write_sector(disk_image_t *image, const uint8_t *buf,
                                   const disk_addr_t *dadr);
extern int disk_image_check_sector(const disk_image_t *image, unsigned int track,
                                   unsigned int sector);
extern unsigned int disk_image_sector_per_track(unsigned int format,
                                                unsigned int track);
extern unsigned int disk_image_raw_track_size(unsigned int format,
                                              unsigned int track);
extern unsigned int disk_image_gap_size(unsigned int format, unsigned int track);
extern unsigned int disk_image_header_gap_size(unsigned int format, unsigned int track);
extern unsigned int disk_image_sync_size(unsigned int format, unsigned int track);

extern int disk_image_read_image(const disk_image_t *image);
extern int disk_image_write_p64_image(const disk_image_t *image);
extern int disk_image_write_half_track(disk_image_t *image, unsigned int half_track,
                                       const struct disk_track_s *raw);

extern unsigned int disk_image_speed_map(unsigned int format, unsigned int track);

extern void disk_image_attach_log(const disk_image_t *image, signed int lognum,
                                  unsigned int unit, unsigned int drive);
extern void disk_image_detach_log(const disk_image_t *image, signed int lognum,
                                  unsigned int unit, unsigned int drive);
extern off_t disk_image_size(const disk_image_t *image);

#endif