fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
1/*****************************************************************************
2 * pce *
3 *****************************************************************************/
4
5/*****************************************************************************
6 * File name: src/drivers/pri/pri.h *
7 * Created: 2012-01-31 by Hampa Hug <hampa@hampa.ch> *
8 * Copyright: (C) 2012-2025 Hampa Hug <hampa@hampa.ch> *
9 *****************************************************************************/
10
11/*****************************************************************************
12 * This program is free software. You can redistribute it and / or modify it *
13 * under the terms of the GNU General Public License version 2 as published *
14 * by the Free Software Foundation. *
15 * *
16 * This program is distributed in the hope that it will be useful, but *
17 * WITHOUT ANY WARRANTY, without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
19 * Public License for more details. *
20 *****************************************************************************/
21
22
23#ifndef PCE_PRI_H
24#define PCE_PRI_H 1
25
26
27#define PRI_EVENT_FUZZY 1
28#define PRI_EVENT_WEAK 1
29#define PRI_EVENT_CLOCK 2
30#define PRI_EVENT_ALL 0xffffffff
31
32
33typedef struct pri_evt_t {
34 struct pri_evt_t *next;
35 unsigned long type;
36 unsigned long pos;
37 unsigned long val;
38} pri_evt_t;
39
40
41typedef struct {
42 unsigned long clock;
43
44 unsigned long size;
45 unsigned char *data;
46
47 pri_evt_t *evt;
48
49 unsigned long idx;
50 pri_evt_t *cur_evt;
51 char wrap;
52} pri_trk_t;
53
54
55typedef struct {
56 unsigned long trk_cnt;
57 pri_trk_t **trk;
58} pri_cyl_t;
59
60
61typedef struct {
62 unsigned long cyl_cnt;
63 pri_cyl_t **cyl;
64
65 unsigned long comment_size;
66 unsigned char *comment;
67
68 char readonly;
69
70 char woz_track_sync;
71 char woz_cleaned;
72} pri_img_t;
73
74
75pri_evt_t *pri_evt_new (unsigned long type, unsigned long pos, unsigned long val);
76void pri_evt_del (pri_evt_t *evt);
77pri_evt_t *pri_evt_next (pri_evt_t *evt, unsigned long type);
78unsigned long pri_evt_get_clock (pri_evt_t *evt, unsigned long base);
79
80pri_trk_t *pri_trk_new (unsigned long size, unsigned long clock);
81void pri_trk_del (pri_trk_t *trk);
82pri_trk_t *pri_trk_clone (const pri_trk_t *trk);
83void pri_trk_evt_ins (pri_trk_t *trk, pri_evt_t *evt);
84int pri_trk_evt_rmv (pri_trk_t *trk, const pri_evt_t *evt);
85pri_evt_t *pri_trk_evt_add (pri_trk_t *trk, unsigned long type, unsigned long pos, unsigned long val);
86pri_evt_t *pri_trk_evt_get_idx (pri_trk_t *trk, unsigned long type, unsigned long idx);
87pri_evt_t *pri_trk_evt_get_pos (pri_trk_t *trk, unsigned long type, unsigned long pos);
88pri_evt_t *pri_trk_evt_get_after (pri_trk_t *trk, unsigned long type, unsigned long pos);
89pri_evt_t *pri_trk_evt_get_before (pri_trk_t *trk, unsigned long type, unsigned long pos);
90int pri_trk_evt_del (pri_trk_t *trk, pri_evt_t *evt);
91void pri_trk_evt_del_all (pri_trk_t *trk, unsigned long type);
92unsigned pri_trk_evt_count (const pri_trk_t *trk, unsigned long type);
93void pri_trk_clear (pri_trk_t *trk, unsigned val);
94void pri_trk_clear_16 (pri_trk_t *trk, unsigned val);
95void pri_trk_clear_slack (pri_trk_t *trk);
96void pri_trk_set_clock (pri_trk_t *trk, unsigned long clock);
97unsigned long pri_trk_get_clock (const pri_trk_t *trk);
98unsigned long pri_trk_get_size (const pri_trk_t *trk);
99int pri_trk_set_size (pri_trk_t *trk, unsigned long size);
100
101unsigned long pri_trk_get_pos (const pri_trk_t *trk);
102void pri_trk_set_pos (pri_trk_t *trk, unsigned long pos);
103int pri_trk_get_bits (pri_trk_t *trk, unsigned long *val, unsigned cnt);
104int pri_trk_set_bits (pri_trk_t *trk, unsigned long val, unsigned cnt);
105int pri_trk_get_event (pri_trk_t *trk, unsigned long *type, unsigned long *val);
106int pri_trk_rotate (pri_trk_t *trk, unsigned long idx);
107int pri_trk_get_weak_mask (pri_trk_t *trk, unsigned char **buf, unsigned long *cnt);
108int pri_trk_set_weak_mask (pri_trk_t *trk, const void *buf, unsigned long cnt);
109
110pri_cyl_t *pri_cyl_new (void);
111void pri_cyl_del (pri_cyl_t *cyl);
112pri_cyl_t *pri_cyl_clone (const pri_cyl_t *cyl);
113unsigned long pri_cyl_get_trk_cnt (const pri_cyl_t *cyl);
114pri_trk_t *pri_cyl_get_track (pri_cyl_t *cyl, unsigned long idx, int alloc);
115int pri_cyl_set_track (pri_cyl_t *cyl, pri_trk_t *trk, unsigned long h);
116int pri_cyl_add_track (pri_cyl_t *cyl, pri_trk_t *trk);
117int pri_cyl_del_track (pri_cyl_t *cyl, unsigned long h);
118
119pri_img_t *pri_img_new (void);
120void pri_img_del (pri_img_t *img);
121unsigned long pri_img_get_cyl_cnt (const pri_img_t *img);
122unsigned long pri_img_get_trk_cnt (const pri_img_t *img, unsigned long c);
123
124pri_cyl_t *pri_img_get_cylinder (pri_img_t *img, unsigned long c, int alloc);
125pri_cyl_t *pri_img_rmv_cylinder (pri_img_t *img, unsigned long idx);
126int pri_img_set_cylinder (pri_img_t *img, pri_cyl_t *cyl, unsigned long c);
127int pri_img_add_cylinder (pri_img_t *img, pri_cyl_t *cyl);
128int pri_img_del_cylinder (pri_img_t *img, unsigned long c);
129
130pri_trk_t *pri_img_get_track_const (const pri_img_t *img, unsigned long c, unsigned long h);
131pri_trk_t *pri_img_get_track (pri_img_t *img, unsigned long c, unsigned long h, int alloc);
132int pri_img_set_track (pri_img_t *img, pri_trk_t *trk, unsigned long c, unsigned long h);
133int pri_img_del_track (pri_img_t *img, unsigned long c, unsigned long h);
134
135int pri_img_add_comment (pri_img_t *img, const unsigned char *buf, unsigned cnt);
136int pri_img_set_comment (pri_img_t *img, const unsigned char *buf, unsigned cnt);
137int pri_img_add_comment_nl (pri_img_t *img);
138
139
140#endif