1 2 #ifdef CATWEASEL 3 4 extern struct catweasel_contr cwc; 5 extern int catweasel_read_keyboard (uae_u8 *keycode); 6 extern int catweasel_init (void); 7 extern void catweasel_free (void); 8 extern int catweasel_detect (void); 9 extern uae_u32 catweasel_do_bget (uaecptr addr); 10 extern void catweasel_do_bput (uaecptr addr, uae_u32 b); 11 extern int catweasel_read_joystick (uae_u8 *dir, uae_u8 *buttons); 12 extern void catweasel_hsync (void); 13 extern int catweasel_isjoystick(void); 14 extern int catweasel_ismouse(void); 15 extern int catweasel_read_mouse(int port, int *dx, int *dy, int *buttons); 16 17 typedef struct catweasel_drive { 18 struct catweasel_contr *contr; /* The controller this drive belongs to */ 19 int number; /* Drive number: 0 or 1 */ 20 int type; /* 0 = not present, 1 = 3.5" */ 21 int track; /* current r/w head position (0..79) */ 22 int diskindrive; /* 0 = no disk, 1 = disk in drive */ 23 int wprot; /* 0 = not, 1 = write protected */ 24 unsigned char sel; 25 unsigned char mot; 26 } catweasel_drive; 27 28 typedef struct catweasel_contr { 29 int type; /* see CATWEASEL_TYPE_* defines below */ 30 int direct_access; 31 int direct_type; 32 int iobase; /* 0 = not present (factory default is 0x320) */ 33 void (*msdelay)(int ms); /* microseconds delay routine, provided by host program */ 34 catweasel_drive drives[2]; /* at most two drives on each controller */ 35 int control_register; /* contents of control register */ 36 unsigned char crm_sel0; /* bit masks for the control / status register */ 37 unsigned char crm_sel1; 38 unsigned char crm_mot0; 39 unsigned char crm_mot1; 40 unsigned char crm_dir; 41 unsigned char crm_step; 42 unsigned char srm_trk0; 43 unsigned char srm_dchg; 44 unsigned char srm_writ; 45 unsigned char srm_dskready; 46 int io_sr; /* IO port of control / status register */ 47 int io_mem; /* IO port of memory register */ 48 int sid[2]; 49 int can_sid, can_mouse, can_joy, can_kb; 50 } catweasel_contr; 51 52 #define CATWEASEL_TYPE_NONE -1 53 #define CATWEASEL_TYPE_MK1 1 54 #define CATWEASEL_TYPE_MK3 3 55 #define CATWEASEL_TYPE_MK4 4 56 57 /* Initialize a Catweasel controller; c->iobase and c->msdelay must have 58 been initialized -- msdelay might be used */ 59 void catweasel_init_controller(catweasel_contr *c); 60 61 /* Reset the controller */ 62 void catweasel_free_controller(catweasel_contr *c); 63 64 /* Set current drive select mask */ 65 void catweasel_select(catweasel_contr *c, int dr0, int dr1); 66 67 /* Start/stop the drive's motor */ 68 void catweasel_set_motor(catweasel_drive *d, int on); 69 70 /* Move the r/w head */ 71 int catweasel_step(catweasel_drive *d, int dir); 72 73 /* Check for a disk change and update d->diskindrive 74 -- msdelay might be used. Returns 1 == disk has been changed */ 75 int catweasel_disk_changed(catweasel_drive *d); 76 77 /* Check if disk in selected drive is write protected. */ 78 int catweasel_write_protected(catweasel_drive *d); 79 80 /* Read data -- msdelay will be used */ 81 int catweasel_read(catweasel_drive *d, int side, int clock, int time); 82 83 /* Write data -- msdelay will be used. If time == -1, the write will 84 be started at the index pulse and stopped at the next index pulse, 85 or earlier if the Catweasel RAM contains a 128 end byte. The 86 function returns after the write has finished. */ 87 int catweasel_write(catweasel_drive *d, int side, int clock, int time); 88 89 int catweasel_fillmfm (catweasel_drive *d, uae_u16 *mfm, int side, int clock, int rawmode); 90 91 int catweasel_diskready(catweasel_drive *d); 92 int catweasel_track0(catweasel_drive *d); 93 94 95 #endif 96