fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
at master 140 lines 5.9 kB view raw
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