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