st.h
1 /* 2 * Castaway 3 * (C) 1994 - 2002 Martin Doering, Joachim Hoenig 4 * 5 * This file is distributed under the GPL, version 2 or at your 6 * option any later version. See doc/license.txt for details. 7 */ 8 #ifndef STH 9 #define STH 10 11 #define MAX_DISC_SIZE 1050*1024 12 13 14 /* 15 * I/O register addresses 16 */ 17 #define MEM_CONF 0xff8001 18 19 #define VID_BASEH 0xff8201 20 #define VID_BASEM 0xff8203 21 #define VID_ADRH 0xff8205 22 #define VID_ADRM 0xff8207 23 #define VID_ADRL 0xff8209 24 #define VID_SYNCMODE 0xff820a 25 #define VID_BASEL 0xff820d 26 #define VID_LINEWIDTH 0xff820f 27 #define VID_COL0 0xff8240 28 #define VID_COL1 0xff8242 29 #define VID_COL2 0xff8244 30 #define VID_COL3 0xff8246 31 #define VID_COL4 0xff8248 32 #define VID_COL5 0xff824a 33 #define VID_COL6 0xff824c 34 #define VID_COL7 0xff824e 35 #define VID_COL8 0xff8250 36 #define VID_COL9 0xff8252 37 #define VID_COL10 0xff8254 38 #define VID_COL11 0xff8256 39 #define VID_COL12 0xff8258 40 #define VID_COL13 0xff825a 41 #define VID_COL14 0xff825c 42 #define VID_COL15 0xff825e 43 #define VID_SHIFTMODE 0xff8260 44 45 #define DMA_CAR 0xff8604 46 #define DMA_SCR 0xff8604 47 #define DMA_SR 0xff8606 48 #define DMA_MODE 0xff8606 49 #define DMA_ADRH 0xff8609 50 #define DMA_ADRM 0xff860b 51 #define DMA_ADRL 0xff860d 52 53 #define SND_RS 0xff8800 54 #define SND_WD 0xff8802 55 56 #define BLT_HFT 0xff8a00 57 #define BLT_SXINC 0xff8a20 58 #define BLT_SYINC 0xff8a22 59 #define BLT_SADR 0xff8a24 60 #define BLT_END1 0xff8a28 61 #define BLT_END2 0xff8a2a 62 #define BLT_END3 0xff8a2c 63 #define BLT_DXINC 0xff8a2e 64 #define BLT_DYINC 0xff8a30 65 #define BLT_DADR 0xff8a32 66 #define BLT_XCNT 0xff8a36 67 #define BLT_YCNT 0xff8a38 68 #define BLT_HOP 0xff8a3a 69 #define BLT_OP 0xff8a3b 70 #define BLT_STAT 0xff8a3c 71 #define BLT_SKEW 0xff8a3d 72 73 #define MFP_GPIP 0xfffa01 74 #define MFP_AER 0xfffa03 75 #define MFP_DDR 0xfffa05 76 #define MFP_IERA 0xfffa07 77 #define MFP_IERB 0xfffa09 78 #define MFP_IPRA 0xfffa0b 79 #define MFP_IPRB 0xfffa0d 80 #define MFP_ISRA 0xfffa0f 81 #define MFP_ISRB 0xfffa11 82 #define MFP_IMRA 0xfffa13 83 #define MFP_IMRB 0xfffa15 84 #define MFP_IVR 0xfffa17 85 #define MFP_TACR 0xfffa19 86 #define MFP_TBCR 0xfffa1b 87 #define MFP_TCDCR 0xfffa1d 88 #define MFP_TADR 0xfffa1f 89 #define MFP_TBDR 0xfffa21 90 #define MFP_TCDR 0xfffa23 91 #define MFP_TDDR 0xfffa25 92 #define MFP_SCR 0xfffa27 93 #define MFP_UCR 0xfffa29 94 #define MFP_RSR 0xfffa2b 95 #define MFP_TSR 0xfffa2d 96 #define MFP_UDR 0xfffa2f 97 98 #define ACIA1_SR 0xfffc00 99 #define ACIA1_DR 0xfffc02 100 101 #define ACIA2_SR 0xfffc04 102 #define ACIA2_DR 0xfffc06 103 104 #define RTC_SECL 0xfffc21 105 #define RTC_SECH 0xfffc23 106 #define RTC_MINL 0xfffc25 107 #define RTC_MINH 0xfffc27 108 #define RTC_HRSL 0xfffc29 109 #define RTC_HRSH 0xfffc2b 110 #define RTC_DAY 0xfffc2d 111 #define RTC_DAYL 0xfffc2f 112 #define RTC_DAYH 0xfffc31 113 #define RTC_MONL 0xfffc33 114 #define RTC_MONH 0xfffc35 115 #define RTC_YRL 0xfffc37 116 #define RTC_YRH 0xfffc39 117 #define RTC_RES1 0xfffc3b 118 #define RTC_RES2 0xfffc3d 119 #define RTC_RES3 0xfffc3f 120 121 #define IBS 32 122 #define OBS 64 123 124 /* 125 * ROM/Cartridge file names 126 */ 127 extern char cartridge[80], rom[80]; 128 /* 129 * I/O register values 130 */ 131 extern int8 *membase; 132 extern int8 *membase2; 133 extern int8 *rombase; 134 extern uint8 memconf; 135 extern uint8 mfp_gpip, mfp_aer, mfp_ddr, mfp_iera, mfp_ierb, mfp_ipra, mfp_iprb, 136 mfp_isra, mfp_isrb, mfp_imra, mfp_imrb, mfp_ivr, mfp_tacr, 137 mfp_tbcr, mfp_tcdcr, mfp_scr, mfp_ucr, mfp_rsr, mfp_tsr, mfp_udr; 138 139 //Mfp delay timer variables 140 extern int32 mfp_reg[12]; 141 #define mfp_tadr mfp_reg[0] 142 #define mfp_tbdr mfp_reg[1] 143 #define mfp_tcdr mfp_reg[2] 144 #define mfp_tddr mfp_reg[3] 145 #define mfp_acount mfp_reg[4] 146 #define mfp_bcount mfp_reg[5] 147 #define mfp_ccount mfp_reg[6] 148 #define mfp_dcount mfp_reg[7] 149 #define mfp_ascale mfp_reg[8] 150 #define mfp_bscale mfp_reg[9] 151 #define mfp_cscale mfp_reg[10] 152 #define mfp_dscale mfp_reg[11] 153 154 extern uint8 acia1_cr, acia1_sr, acia1_dr, acia2_cr, acia2_sr, 155 acia2_dr; 156 157 extern int checkedsample; 158 extern int checkedsound; 159 //Video shifter 160 extern uint32 vid_adr; 161 extern uint8 vid_baseh, vid_basem; 162 extern uint32 vid_mem; 163 extern uint8 vid_syncmode, vid_shiftmode; 164 extern int16 vid_col[]; 165 extern int vid_flag; 166 167 168 extern uint16 dma_car, dma_scr, dma_sr, dma_mode; 169 extern uint8 dma_adrh, dma_adrm, dma_adrl; 170 extern const int32 mfpcycletab[16]; 171 172 extern uint32 psg[26]; 173 //extern unsigned char sample[10000]; 174 #define phase0 psg[16] 175 #define phase1 psg[17] 176 #define phase2 psg[18] 177 #define phase3 psg[19] 178 #define psg_epos psg[20] 179 #define psgcontrol psg[21] 180 #define phase4 psg[22] 181 #define nrand psg[23] 182 #define samppos psg[24] 183 #define lastpsg psg[25] 184 185 /* ikbd.c */ 186 extern void IkbdLoop(void); 187 extern void IkbdRecv(uint8); 188 extern void IkbdSend(uint8); 189 extern void IkbdWriteBuffer(void); /* write byte IKBD -> ST */ 190 extern void IkbdKeyPress(unsigned short keysym); /* key press */ 191 extern void IkbdKeyRelease(unsigned short keysym); /* key release */ 192 extern void IkbdMousePress(int); /* mouse button press */ 193 extern void IkbdMouseRelease(int); /* mouse button release */ 194 extern void IkbdMouseMotion(int x, int y); /* mouse movement */ 195 //extern void IkbdMouseMotion(int x, int y, int dx, int dy); /* mouse movement */ 196 extern void joystickevent(int joystate); 197 extern void IkbdReset(void); 198 199 200 /* fdc.c */ 201 extern unsigned char fdc_data, fdc_track, fdc_sector, 202 fdc_status, fdc_command, fdc_int; 203 extern unsigned char disk_ejected[2]; 204 extern unsigned char disk_changed[2]; 205 struct Disk { 206 int file; 207 char name[80]; 208 int head; 209 int sides; 210 int tracks; 211 int sectors; 212 int secsize; 213 int disksize; 214 }; 215 extern struct Disk disk[2]; 216 extern int FDCInit(int i); 217 extern void FDCCommand(void); 218 void FDCeject(int num); 219 int unzipdisk(unsigned char *RomPath,unsigned char *buf); 220 221 /* blitter.c */ 222 extern uint16 blt_halftone[16]; 223 extern int16 blt_src_x_inc, blt_src_y_inc; 224 extern uint32 blt_src_addr; 225 extern int16 blt_end_1, blt_end_2, blt_end_3; 226 extern int16 blt_dst_x_inc, blt_dst_y_inc; 227 extern uint32 blt_dst_addr; 228 extern uint16 blt_x_cnt, blt_y_cnt; 229 extern int8 blt_hop, blt_op, blt_status, blt_skew; 230 231 extern void bitblt(void); 232 233 /* init.c */ 234 extern int Init(); 235 236 /* main.c */ 237 extern unsigned ips; 238 239 /* mem.c */ 240 extern int MemInit(void); 241 extern void MemTableSet(uint32 base, uint32 size, 242 void (*setbyte)(uint32, uint8), 243 void (*setword)(uint32, uint16), 244 void (*setlong)(uint32, uint32 ), 245 uint8 (*getbyte)(uint32), 246 uint16 (*getword)(uint32), 247 uint32 (*getlong)(uint32) ); 248 249 extern void RamSetB(uint32, uint8); 250 extern void RamSetW(uint32, uint16); 251 extern void RamSetL(uint32, uint32 ); 252 extern uint8 RamGetB(uint32); 253 extern uint16 RamGetW(uint32); 254 extern uint32 RamGetL(uint32); 255 /* 256 * Video shift modes 257 */ 258 #define COL4 0 259 #define COL2 1 260 #define MONO 2 261 extern int display_mode; 262 263 /* 264 * Read/Write IO Registers (return value != 0 if bus error) 265 */ 266 uint8 DoIORB(uint32 address); 267 uint16 DoIORW(uint32 address); 268 uint32 DoIORL(uint32 address); 269 void DoIOWB(uint32 address, uint8 value); 270 void DoIOWW(uint32 address, uint16 value); 271 void DoIOWL(uint32 address, uint32 value); 272 273 void IOInit(void); 274 struct _mouse { 275 char buttons; /* real buttons */ 276 char stbuttons; /* buttons as known to st */ 277 int xscale, yscale; 278 int xmax, ymax; 279 int xkcm, ykcm; 280 int xth, yth; 281 int x, y; /* real mouse position */ 282 int stx, sty; /* mouse position st */ 283 int button_action; 284 int mode; 285 int yinv; 286 int flag; 287 }; 288 289 290 struct _joystick { 291 int mode; 292 int rate; 293 int state0; /* joystick 0 state */ 294 int state1; /* joystick 1 state */ 295 int rx, ry, tx, ty, vx, vy; 296 }; 297 298 299 extern struct _mouse mouse; 300 extern struct _joystick joystick; 301 302 void Ikbd_Reset(void); 303 void IkbdJoystickChange(int number, uint8 state); 304 int unzipdisk(unsigned char *RomPath,unsigned char *buf); 305 void reset_st_video(void); 306 307 #endif