File: _suzy.h

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (318 lines) | stat: -rw-r--r-- 11,158 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
/*****************************************************************************/
/*                                                                           */
/*                                _suzy.h                                    */
/*                                                                           */
/* Atari Lynx, Suzy chip register hardware structures                        */
/*                                                                           */
/*                                                                           */
/* This software is provided 'as-is', without any expressed or implied       */
/* warranty.  In no event will the authors be held liable for any damages    */
/* arising from the use of this software.                                    */
/*                                                                           */
/* Permission is granted to anyone to use this software for any purpose,     */
/* including commercial applications, and to alter it and redistribute it    */
/* freely, subject to the following restrictions:                            */
/*                                                                           */
/* 1. The origin of this software must not be misrepresented; you must not   */
/*    claim that you wrote the original software. If you use this software   */
/*    in a product, an acknowledgment in the product documentation would be  */
/*    appreciated but is not required.                                       */
/* 2. Altered source versions must be plainly marked as such, and must not   */
/*    be misrepresented as being the original software.                      */
/* 3. This notice may not be removed or altered from any source              */
/*    distribution.                                                          */
/*                                                                           */
/*****************************************************************************/


#ifndef __SUZY_H
#define __SUZY_H

/* Joypad $FCB0 */
#define JOYPAD_RIGHT    0x10
#define JOYPAD_LEFT     0x20
#define JOYPAD_DOWN     0x40
#define JOYPAD_UP       0x80
#define BUTTON_OPTION1  0x08
#define BUTTON_OPTION2  0x04
#define BUTTON_INNER    0x02
#define BUTTON_OUTER    0x01

/* Switches $FCB1 */
#define BUTTON_PAUSE    0x01


/* Hardware Math */
#define FACTOR_A *(unsigned int *) 0xFC54
#define FACTOR_B *(unsigned int *) 0xFC52
#define PRODUCT0 *(unsigned int *) 0xFC60
#define PRODUCT1 *(unsigned int *) 0xFC62
#define PRODUCT *(long *) 0xFC60

#define DIVIDEND0 *(unsigned int *) 0xFC60
#define DIVIDEND1 *(unsigned int *) 0xFC62
#define DIVIDEND *(long *) 0xFC60
#define DIVISOR *(unsigned int *) 0xFC56
#define QUOTIENT0 *(unsigned int *) 0xFC52
#define QUOTIENT1 *(unsigned int *) 0xFC54
#define QUOTIENT *(long *) 0xFC52
#define REMAINDER0 *(unsigned int *) 0xFC6C
#define REMAINDER1 *(unsigned int *) 0xFC6E
#define REMAINDER *(long *) 0xFC6C


/* Sprite control block (SCB) defines */

/* SPRCTL0 $FC80 */
#define BPP_4            0xC0
#define BPP_3            0x80
#define BPP_2            0x40
#define BPP_1            0x00
#define HFLIP            0x20
#define VFLIP            0x10
#define TYPE_SHADOW      0x07
#define TYPE_XOR         0x06
#define TYPE_NONCOLL     0x05
#define TYPE_NORMAL      0x04
#define TYPE_BOUNDARY    0x03
#define TYPE_BSHADOW     0x02
#define TYPE_BACKNONCOLL 0x01
#define TYPE_BACKGROUND  0x00

/* SPRCTL1 $FC81 */
#define LITERAL          0x80
#define PACKED           0x00
#define ALGO3            0x40
#define RENONE           0x00
#define REHV             0x10
#define REHVS            0x20
#define REHVST           0x30
#define REUSEPAL         0x08
#define SKIP             0x04
#define DRAWUP           0x02
#define DRAWLEFT         0x01

typedef struct SCB_REHVST_PAL {             // SCB with all attributes
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
  unsigned int hsize;
  unsigned int vsize;
  unsigned int stretch;
  unsigned int tilt;
  unsigned char penpal[8];
} SCB_REHVST_PAL;

typedef struct SCB_REHVST {                  // SCB without pallette
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
  unsigned int hsize;
  unsigned int vsize;
  unsigned int stretch;
  unsigned int tilt;
} SCB_REHVST;

typedef struct SCB_REHV {                 // SCB without stretch/tilt
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
  unsigned int hsize;
  unsigned int vsize;
} SCB_REHV;

typedef struct SCB_REHV_PAL {             // SCB without str/tilt, w/ penpal
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
  unsigned int hsize;
  unsigned int vsize;
  unsigned char penpal[8];
} SCB_REHV_PAL;

typedef struct SCB_REHVS {                // SCB w/o tilt & penpal
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
  unsigned int hsize;
  unsigned int vsize;
  unsigned int stretch;
} SCB_REHVS;

typedef struct SCB_REHVS_PAL {            // SCB w/o tilt w/penpal
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
  unsigned int hsize;
  unsigned int vsize;
  unsigned int stretch;
  unsigned char penpal[8];
} SCB_REHVS_PAL;

typedef struct SCB_RENONE {                 // SCB w/o size/stretch/tilt/pal
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
} SCB_RENONE;

typedef struct SCB_RENONE_PAL {             // SCB w/o size/str/tilt w/penpal
  unsigned char sprctl0;
  unsigned char sprctl1;
  unsigned char sprcoll;
  char *next;
  unsigned char *data;
  signed int hpos;
  signed int vpos;
  unsigned char penpal[8];
} SCB_RENONE_PAL;

typedef struct PENPAL_4 {
  unsigned char penpal[8];
} PENPAL_4;

typedef struct PENPAL_3 {
  unsigned char penpal[4];
} PENPAL_3;

typedef struct PENPAL_2 {
  unsigned char penpal[2];
} PENPAL_2;

typedef struct PENPAL_1 {
  unsigned char penpal[1];
} PENPAL_1;

/* Misc system defines */

/* SPRGO $FC91 */
#define EVER_ON         0x04
#define SPRITE_GO       0x01

/* SPRSYS (write) $FC92 */
#define SIGNMATH        0x80
#define ACCUMULATE      0x40
#define NO_COLLIDE      0x20
#define VSTRETCH        0x10
#define LEFTHAND        0x08
#define CLR_UNSAFE      0x04
#define SPRITESTOP      0x02

/* SPRSYS (read) $FC92 */
#define MATHWORKING     0x80
#define MATHWARNING     0x40
#define MATHCARRY       0x20
#define VSTRETCHING     0x10
#define LEFTHANDED      0x08
#define UNSAFE_ACCESS   0x04
#define SPRITETOSTOP    0x02
#define SPRITEWORKING   0x01

/* MAPCTL $FFF9 */
#define HIGHSPEED       0x80
#define VECTORSPACE     0x08
#define ROMSPACE        0x04
#define MIKEYSPACE      0x02
#define SUZYSPACE       0x01


/* Suzy Hardware Registers */
struct __suzy {
  unsigned int  tmpadr;         // 0xFC00  Temporary address
  unsigned int  tiltacc;        // 0xFC02  Tilt accumulator
  unsigned int  hoff;           // 0xFC04  Offset to H edge of screen
  unsigned int  voff;           // 0xFC06  Offset to V edge of screen
  unsigned char *sprbase;       // 0xFC08  Base address of sprite
  unsigned char *colbase;       // 0xFC0A  Base address of collision buffer
  unsigned char *vidadr;        // 0xFC0C  Current vid buffer address
  unsigned char *coladr;        // 0xFC0E  Current col buffer address
  unsigned char *scbnext;       // 0xFC10  Address of next SCB
  unsigned char *sprdline;      // 0xFC12  start of sprite data line address
  unsigned char *hposstrt;      // 0xFC14  start hpos
  unsigned char *vposstrt;      // 0xFC16  start vpos
  unsigned char *sprhsize;      // 0xFC18  sprite h size
  unsigned char *sprvsize;      // 0xFC1A  sprite v size
  unsigned int  stretchl;       // 0xFC1C  H size adder
  unsigned int  tilt;           // 0xFC1E  H pos adder
  unsigned int  sprdoff;        // 0xFC20  offset to next sprite data line
  unsigned int  sprvpos;        // 0xFC22  current vpos
  unsigned int  colloff;        // 0xFC24  offset to collision depository
  unsigned int  vsizeacc;       // 0xFC26  vertical size accumulator
  unsigned int  hsizeoff;       // 0xFC28  horizontal size offset
  unsigned int  vsizeoff;       // 0xFC2A  vertical size offset
  unsigned char *scbaddr;       // 0xFC2C  address of current SCB
  unsigned char *procaddr;      // 0xFC2E  address of current spr data proc
  unsigned char unused0[32];    // 0xFC30 - 0xFC4F  reserved/unused
  unsigned char unused1[2];     // 0xFC50 - 0xFC51  do not use
  unsigned char mathd;          // 0xFC52
  unsigned char mathc;          // 0xFC53
  unsigned char mathb;          // 0xFC54
  unsigned char matha;          // 0xFC55
  unsigned char mathp;          // 0xFC56
  unsigned char mathn;          // 0xFC57
  unsigned char unused2[8];     // 0xFC58 - 0xFC5F  do not use
  unsigned char mathh;          // 0xFC60
  unsigned char mathg;          // 0xFC61
  unsigned char mathf;          // 0xFC62
  unsigned char mathe;          // 0xFC63
  unsigned char unused3[8];     // 0xFC64 - 0xFC6B  do not use
  unsigned char mathm;          // 0xFC6C
  unsigned char mathl;          // 0xFC6D
  unsigned char mathk;          // 0xFC6E
  unsigned char mathj;          // 0xFC6F
  unsigned char unused4[16];    // 0xFC70 - 0xFC7F  do not use
  unsigned char sprctl0;        // 0xFC80  sprite control bits 0
  unsigned char sprctl1;        // 0xFC81  sprite control bits 1
  unsigned char sprcoll;        // 0xFC82  sprite collision number
  unsigned char sprinit;        // 0xFC83  sprite initialization bits
  unsigned char unused5[4];     // 0xFC84 - 0xFC87  unused
  unsigned char suzyhrev;       // 0xFC88  suzy hardware rev
  unsigned char suzysrev;       // 0xFC89  suzy software rev
  unsigned char unused6[6];     // 0xFC8A - 0xFC8F  unused
  unsigned char suzybusen;      // 0xFC90  suzy bus enable
  unsigned char sprgo;          // 0xFC91  sprite process start bit
  unsigned char sprsys;         // 0xFC92  sprite system control bits
  unsigned char unused7[29];    // 0xFC93 - 0xFCAF  unused
  unsigned char joystick;       // 0xFCB0  joystick and buttons
  unsigned char switches;       // 0xFCB1  other switches
  unsigned char cart0;          // 0xFCB2  cart0 r/w
  unsigned char cart1;          // 0xFCB3  cart1 r/w
  unsigned char unused8[8];     // 0xFCB4 - 0xFCBF  unused
  unsigned char leds;           // 0xFCC0  leds
  unsigned char unused9;        // 0xFCC1  unused
  unsigned char parstat;        // 0xFCC2  parallel port status
  unsigned char pardata;        // 0xFCC3  parallel port data
  unsigned char howie;          // 0xFCC4  howie (?)
                                // 0xFCC5 - 0xFCFF  unused
};


#endif