-/*****************************************************************************/\r
-/* */\r
-/* _mikey.h */\r
-/* */\r
-/* Atari Lynx, Mikey chip register hardware structures */\r
-/* */\r
-/* */\r
-/* This software is provided 'as-is', without any expressed or implied */\r
-/* warranty. In no event will the authors be held liable for any damages */\r
-/* arising from the use of this software. */\r
-/* */\r
-/* Permission is granted to anyone to use this software for any purpose, */\r
-/* including commercial applications, and to alter it and redistribute it */\r
-/* freely, subject to the following restrictions: */\r
-/* */\r
-/* 1. The origin of this software must not be misrepresented; you must not */\r
-/* claim that you wrote the original software. If you use this software */\r
-/* in a product, an acknowledgment in the product documentation would be */\r
-/* appreciated but is not required. */\r
-/* 2. Altered source versions must be plainly marked as such, and must not */\r
-/* be misrepresented as being the original software. */\r
-/* 3. This notice may not be removed or altered from any source */\r
-/* distribution. */\r
-/* */\r
-/*****************************************************************************/\r
-\r
-#ifndef __MIKEY_H\r
-#define __MIKEY_H\r
-\r
-/* timer structure */\r
-typedef struct _mikey_timer {\r
- unsigned char reload;\r
- unsigned char control;\r
- unsigned char count;\r
- unsigned char control2;\r
-} _mikey_timer;\r
-\r
-typedef struct _mikey_all_timers {\r
- struct _mikey_timer timer[8];\r
-} _mikey_all_timers;\r
-\r
-/* audio channel structure */\r
-typedef struct _mikey_audio {\r
- unsigned char volume;\r
- unsigned char feedback;\r
- unsigned char dac;\r
- unsigned char shiftlo;\r
- unsigned char reload;\r
- unsigned char control;\r
- unsigned char count;\r
- unsigned char other;\r
-} _mikey_audio;\r
-\r
-/* Define a structure with the mikey register offsets */\r
-struct __mikey {\r
- struct _mikey_timer timer0; // 0xFD00\r
- struct _mikey_timer timer1; // 0xFD04\r
- struct _mikey_timer timer2; // 0xFD08\r
- struct _mikey_timer timer3; // 0xFD0C\r
- struct _mikey_timer timer4; // 0xFD10\r
- struct _mikey_timer timer5; // 0xFD14\r
- struct _mikey_timer timer6; // 0xFD18\r
- struct _mikey_timer timer7; // 0xFD1C\r
- struct _mikey_audio channel_a; // 0xFD20\r
- struct _mikey_audio channel_b; // 0xFD28\r
- struct _mikey_audio channel_c; // 0xFD30\r
- struct _mikey_audio channel_d; // 0xFD38\r
- unsigned char attena; // 0xFD40 ?? not yet allocated?\r
- unsigned char attenb; // 0xFD41 |\r
- unsigned char attenc; // 0xFD42 |\r
- unsigned char attend; // 0xFD43 |\r
- unsigned char panning; // 0xFD44 |\r
- unsigned char unused0[11]; // 0xFD45 - 0xFD4F not used\r
- unsigned char mstereo; // 0xFD50 stereo control bits\r
- unsigned char unused1[47]; // 0xFD51 - 0xFD7F not used\r
- unsigned char intrst; // 0xFD80 interrupt poll 0\r
- unsigned char intset; // 0xFD81 interrupt poll 1\r
- unsigned char unused2[2]; // 0xFD82 - 0xFD83 not used\r
- unsigned char magrdy0; // 0xFD84 mag tape channel0 ready bit\r
- unsigned char magrdy1; // 0xFD85 mag tape channel1 ready bit\r
- unsigned char audin; // 0xFD86 audio in\r
- unsigned char sysctl1; // 0xFD87 control bits\r
- unsigned char mikeyrev; // 0xFD88 mikey hardware rev\r
- unsigned char mikeysrev; // 0xFD89 mikey software rev\r
- unsigned char iodir; // 0xFD8A parallel i/o data dir\r
- unsigned char iodat; // 0xFD8B parallel data\r
- unsigned char serctl; // 0xFD8C serial control register\r
- unsigned char serdat; // 0xFD8D serial data\r
- unsigned char unused3[2]; // 0xFD8E - 0xFD8F not used\r
- unsigned char sdoneack; // 0xFD90 suzy done acknowledge\r
- unsigned char cpusleep; // 0xFD91 cpu bus request disable\r
- unsigned char dispctl; // 0xFD92 video bus request enable, viddma\r
- unsigned char pkbkup; // 0xFD93 magic 'P' count\r
- unsigned char *scrbase; // 0xFD94 start address of video display\r
- unsigned char unused4[6]; // 0xFD96 - 0xFD9B not used\r
- unsigned char mtest0; // 0xFD9C\r
- unsigned char mtest1; // 0xFD9D\r
- unsigned char mtest2; // 0xFD9E\r
- unsigned char unused5; // 0xFD9F not used\r
- unsigned char palette[32]; // 0xFDA0 - 0xFDBF palette 32 bytes\r
- // 0xFDC0 - 0xFDFF not used\r
-};\r
-\r
-\r
-#endif
\ No newline at end of file
+/*****************************************************************************/
+/* */
+/* _mikey.h */
+/* */
+/* Atari Lynx, Mikey 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 __MIKEY_H
+#define __MIKEY_H
+
+/* timer structure */
+typedef struct _mikey_timer {
+ unsigned char reload;
+ unsigned char control;
+ unsigned char count;
+ unsigned char control2;
+} _mikey_timer;
+
+typedef struct _mikey_all_timers {
+ struct _mikey_timer timer[8];
+} _mikey_all_timers;
+
+/* audio channel structure */
+typedef struct _mikey_audio {
+ unsigned char volume;
+ unsigned char feedback;
+ unsigned char dac;
+ unsigned char shiftlo;
+ unsigned char reload;
+ unsigned char control;
+ unsigned char count;
+ unsigned char other;
+} _mikey_audio;
+
+/* Define a structure with the mikey register offsets */
+struct __mikey {
+ struct _mikey_timer timer0; // 0xFD00
+ struct _mikey_timer timer1; // 0xFD04
+ struct _mikey_timer timer2; // 0xFD08
+ struct _mikey_timer timer3; // 0xFD0C
+ struct _mikey_timer timer4; // 0xFD10
+ struct _mikey_timer timer5; // 0xFD14
+ struct _mikey_timer timer6; // 0xFD18
+ struct _mikey_timer timer7; // 0xFD1C
+ struct _mikey_audio channel_a; // 0xFD20
+ struct _mikey_audio channel_b; // 0xFD28
+ struct _mikey_audio channel_c; // 0xFD30
+ struct _mikey_audio channel_d; // 0xFD38
+ unsigned char attena; // 0xFD40 ?? not yet allocated?
+ unsigned char attenb; // 0xFD41 |
+ unsigned char attenc; // 0xFD42 |
+ unsigned char attend; // 0xFD43 |
+ unsigned char panning; // 0xFD44 |
+ unsigned char unused0[11]; // 0xFD45 - 0xFD4F not used
+ unsigned char mstereo; // 0xFD50 stereo control bits
+ unsigned char unused1[47]; // 0xFD51 - 0xFD7F not used
+ unsigned char intrst; // 0xFD80 interrupt poll 0
+ unsigned char intset; // 0xFD81 interrupt poll 1
+ unsigned char unused2[2]; // 0xFD82 - 0xFD83 not used
+ unsigned char magrdy0; // 0xFD84 mag tape channel0 ready bit
+ unsigned char magrdy1; // 0xFD85 mag tape channel1 ready bit
+ unsigned char audin; // 0xFD86 audio in
+ unsigned char sysctl1; // 0xFD87 control bits
+ unsigned char mikeyrev; // 0xFD88 mikey hardware rev
+ unsigned char mikeysrev; // 0xFD89 mikey software rev
+ unsigned char iodir; // 0xFD8A parallel i/o data dir
+ unsigned char iodat; // 0xFD8B parallel data
+ unsigned char serctl; // 0xFD8C serial control register
+ unsigned char serdat; // 0xFD8D serial data
+ unsigned char unused3[2]; // 0xFD8E - 0xFD8F not used
+ unsigned char sdoneack; // 0xFD90 suzy done acknowledge
+ unsigned char cpusleep; // 0xFD91 cpu bus request disable
+ unsigned char dispctl; // 0xFD92 video bus request enable, viddma
+ unsigned char pkbkup; // 0xFD93 magic 'P' count
+ unsigned char *scrbase; // 0xFD94 start address of video display
+ unsigned char unused4[6]; // 0xFD96 - 0xFD9B not used
+ unsigned char mtest0; // 0xFD9C
+ unsigned char mtest1; // 0xFD9D
+ unsigned char mtest2; // 0xFD9E
+ unsigned char unused5; // 0xFD9F not used
+ unsigned char palette[32]; // 0xFDA0 - 0xFDBF palette 32 bytes
+ // 0xFDC0 - 0xFDFF not used
+};
+
+
+#endif
+
-/*****************************************************************************/\r
-/* */\r
-/* _suzy.h */\r
-/* */\r
-/* Atari Lynx, Suzy chip register hardware structures */\r
-/* */\r
-/* */\r
-/* This software is provided 'as-is', without any expressed or implied */\r
-/* warranty. In no event will the authors be held liable for any damages */\r
-/* arising from the use of this software. */\r
-/* */\r
-/* Permission is granted to anyone to use this software for any purpose, */\r
-/* including commercial applications, and to alter it and redistribute it */\r
-/* freely, subject to the following restrictions: */\r
-/* */\r
-/* 1. The origin of this software must not be misrepresented; you must not */\r
-/* claim that you wrote the original software. If you use this software */\r
-/* in a product, an acknowledgment in the product documentation would be */\r
-/* appreciated but is not required. */\r
-/* 2. Altered source versions must be plainly marked as such, and must not */\r
-/* be misrepresented as being the original software. */\r
-/* 3. This notice may not be removed or altered from any source */\r
-/* distribution. */\r
-/* */\r
-/*****************************************************************************/\r
-\r
-\r
-#ifndef __SUZY_H\r
-#define __SUZY_H\r
-\r
-/* Joypad $FCB0 */\r
-#define JOY_RIGHT 0x10\r
-#define JOY_LEFT 0x20\r
-#define JOY_DOWN 0x40\r
-#define JOY_UP 0x80\r
-#define BUTTON_OPTION1 0x08\r
-#define BUTTON_OPTION2 0x04\r
-#define BUTTON_INNER 0x02\r
-#define BUTTON_OUTER 0x01\r
-\r
-/* Switches $FCB1 */\r
-#define BUTTON_PAUSE 0x01\r
-\r
-\r
-/* Hardware Math */\r
-#define FACTOR_A *(unsigned int *) 0xFC54\r
-#define FACTOR_B *(unsigned int *) 0xFC52\r
-#define PRODUCT0 *(unsigned int *) 0xFC60\r
-#define PRODUCT1 *(unsigned int *) 0xFC62\r
-#define PRODUCT *(long *) 0xFC60\r
-\r
-#define DIVIDEND0 *(unsigned int *) 0xFC60\r
-#define DIVIDEND1 *(unsigned int *) 0xFC62\r
-#define DIVIDEND *(long *) 0xFC60\r
-#define DIVISOR *(unsigned int *) 0xFC56\r
-#define QUOTIENT0 *(unsigned int *) 0xFC52\r
-#define QUOTIENT1 *(unsigned int *) 0xFC54\r
-#define QUOTIENT *(long *) 0xFC52\r
-#define REMAINDER0 *(unsigned int *) 0xFC6C\r
-#define REMAINDER1 *(unsigned int *) 0xFC6E\r
-#define REMAINDER *(long *) 0xFC6C\r
-\r
-\r
-/* Sprite control block (SCB) defines */\r
-\r
-/* SPRCTL0 $FC80 */\r
-#define BPP_4 0xC0\r
-#define BPP_3 0x80\r
-#define BPP_2 0x40\r
-#define BPP_1 0x00\r
-#define HFLIP 0x20\r
-#define VFLIP 0x10\r
-#define TYPE_SHADOW 0x07\r
-#define TYPE_XOR 0x06\r
-#define TYPE_NONCOLL 0x05\r
-#define TYPE_NORMAL 0x04\r
-#define TYPE_BOUNDARY 0x03\r
-#define TYPE_BSHADOW 0x02\r
-#define TYPE_BACKNONCOLL 0x01\r
-#define TYPE_BACKGROUND 0x00\r
-\r
-/* SPRCTL1 $FC81 */\r
-#define LITERAL 0x80\r
-#define PACKED 0x00\r
-#define ALGO3 0x40\r
-#define RENONE 0x00\r
-#define REHV 0x10\r
-#define REHVS 0x20\r
-#define REHVST 0x30\r
-#define REUSEPAL 0x08\r
-#define SKIP 0x04\r
-#define DRAWUP 0x02\r
-#define DRAWLEFT 0x01\r
-\r
-typedef struct SCB_REHVST_PAL { // SCB with all attributes\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
- unsigned int hsize;\r
- unsigned int vsize;\r
- unsigned int stretch;\r
- unsigned int tilt;\r
- unsigned char penpal[8];\r
-} SCB_REHVST_PAL;\r
-\r
-typedef struct SCB_REHVST { // SCB without pallette\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
- unsigned int hsize;\r
- unsigned int vsize;\r
- unsigned int stretch;\r
- unsigned int tilt;\r
-} SCB_REHVST;\r
-\r
-typedef struct SCB_REHV { // SCB without stretch/tilt\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
- unsigned int hsize;\r
- unsigned int vsize;\r
-} SCB_REHV;\r
-\r
-typedef struct SCB_REHV_PAL { // SCB without str/tilt, w/ penpal\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
- unsigned int hsize;\r
- unsigned int vsize;\r
- unsigned char penpal[8];\r
-} SCB_REHV_PAL;\r
-\r
-typedef struct SCB_REHVS { // SCB w/o tilt & penpal\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
- unsigned int hsize;\r
- unsigned int vsize;\r
- unsigned int stretch;\r
-} SCB_REHVS;\r
-\r
-typedef struct SCB_REHVS_PAL { // SCB w/o tilt w/penpal\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
- unsigned int hsize;\r
- unsigned int vsize;\r
- unsigned int stretch;\r
- unsigned char penpal[8];\r
-} SCB_REHVS_PAL;\r
-\r
-typedef struct SCB_RENONE { // SCB w/o size/stretch/tilt/pal\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
-} SCB_RENONE;\r
-\r
-typedef struct SCB_RENONE_PAL { // SCB w/o size/str/tilt w/penpal\r
- unsigned char sprctl0;\r
- unsigned char sprctl1;\r
- unsigned char sprcoll;\r
- char *next;\r
- char *data;\r
- unsigned int hpos;\r
- unsigned int vpos;\r
- unsigned char penpal[8];\r
-} SCB_RENONE_PAL;\r
-\r
-\r
-/* Misc system defines */\r
-\r
-/* SPRGO $FC91 */\r
-#define EVER_ON 0x04\r
-#define SPRITE_GO 0x01\r
-\r
-/* SPRSYS (write) $FC92 */\r
-#define SIGNMATH 0x80\r
-#define ACCUMULATE 0x40\r
-#define NO_COLLIDE 0x20\r
-#define VSTRETCH 0x10\r
-#define LEFTHAND 0x08\r
-#define CLR_UNSAFE 0x04\r
-#define SPRITESTOP 0x02\r
-\r
-/* SPRSYS (read) $FC92 */\r
-#define MATHWORKING 0x80\r
-#define MATHWARNING 0x40\r
-#define MATHCARRY 0x20\r
-#define VSTRETCHING 0x10\r
-#define LEFTHANDED 0x08\r
-#define UNSAFE_ACCESS 0x04\r
-#define SPRITETOSTOP 0x02\r
-#define SPRITEWORKING 0x01\r
-\r
-/* MAPCTL $FFF9 */\r
-#define HIGHSPEED 0x80\r
-#define VECTORSPACE 0x08\r
-#define ROMSPACE 0x04\r
-#define MIKEYSPACE 0x02\r
-#define SUZYSPACE 0x01\r
-\r
-\r
-/* Suzy Hardware Registers */\r
-struct __suzy {\r
- unsigned int tmpadr; // 0xFC00 Temporary address\r
- unsigned int tiltacc; // 0xFC02 Tilt accumulator\r
- unsigned int hoff; // 0xFC04 Offset to H edge of screen\r
- unsigned int voff; // 0xFC06 Offset to V edge of screen\r
- unsigned char *sprbase; // 0xFC08 Base address of sprite\r
- unsigned char *colbase; // 0xFC0A Base address of collision buffer\r
- unsigned char *vidadr; // 0xFC0C Current vid buffer address\r
- unsigned char *coladr; // 0xFC0E Current col buffer address\r
- unsigned char *scbnext; // 0xFC10 Address of next SCB\r
- unsigned char *sprdline; // 0xFC12 start of sprite data line address\r
- unsigned char *hposstrt; // 0xFC14 start hpos\r
- unsigned char *vposstrt; // 0xFC16 start vpos\r
- unsigned char *sprhsize; // 0xFC18 sprite h size\r
- unsigned char *sprvsize; // 0xFC1A sprite v size\r
- unsigned int stretchl; // 0xFC1C H size adder\r
- unsigned int tilt; // 0xFC1E H pos adder\r
- unsigned int sprdoff; // 0xFC20 offset to next sprite data line\r
- unsigned int sprvpos; // 0xFC22 current vpos\r
- unsigned int colloff; // 0xFC24 offset to collision depository\r
- unsigned int vsizeacc; // 0xFC26 vertical size accumulator\r
- unsigned int hsizeoff; // 0xFC28 horizontal size offset\r
- unsigned int vsizeoff; // 0xFC2A vertical size offset\r
- unsigned char *scbaddr; // 0xFC2C address of current SCB\r
- unsigned char *procaddr; // 0xFC2E address of current spr data proc\r
- unsigned char unused0[32]; // 0xFC30 - 0xFC4F reserved/unused\r
- unsigned char unused1[2]; // 0xFC50 - 0xFC51 do not use\r
- unsigned char mathd; // 0xFC52\r
- unsigned char mathc; // 0xFC53\r
- unsigned char mathb; // 0xFC54\r
- unsigned char matha; // 0xFC55\r
- unsigned char mathp; // 0xFC56\r
- unsigned char mathn; // 0xFC57\r
- unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use\r
- unsigned char mathh; // 0xFC60\r
- unsigned char mathg; // 0xFC61\r
- unsigned char mathf; // 0xFC62\r
- unsigned char mathe; // 0xFC63\r
- unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use\r
- unsigned char mathm; // 0xFC6C\r
- unsigned char mathl; // 0xFC6D\r
- unsigned char mathk; // 0xFC6E\r
- unsigned char mathj; // 0xFC6F\r
- unsigned char unused4[16]; // 0xFC70 - 0xFC7F do not use\r
- unsigned char sprctl0; // 0xFC80 sprite control bits 0\r
- unsigned char sprctl1; // 0xFC81 sprite control bits 1\r
- unsigned char sprcoll; // 0xFC82 sprite collision number\r
- unsigned char sprinit; // 0xFC83 sprite initialization bits\r
- unsigned char unused5[4]; // 0xFC84 - 0xFC87 unused\r
- unsigned char suzyhrev; // 0xFC88 suzy hardware rev\r
- unsigned char suzysrev; // 0xFC89 suzy software rev\r
- unsigned char unused6[6]; // 0xFC8A - 0xFC8F unused\r
- unsigned char suzybusen; // 0xFC90 suzy bus enable\r
- unsigned char sprgo; // 0xFC91 sprite process start bit\r
- unsigned char sprsys; // 0xFC92 sprite system control bits\r
- unsigned char unused7[29]; // 0xFC93 - 0xFCAF unused\r
- unsigned char joystick; // 0xFCB0 joystick and buttons\r
- unsigned char switches; // 0xFCB1 other switches\r
- unsigned char cart0; // 0xFCB2 cart0 r/w\r
- unsigned char cart1; // 0xFCB3 cart1 r/w\r
- unsigned char unused8[8]; // 0xFCB4 - 0xFCBF unused\r
- unsigned char leds; // 0xFCC0 leds\r
- unsigned char unused9; // 0xFCC1 unused\r
- unsigned char parstat; // 0xFCC2 parallel port status\r
- unsigned char pardata; // 0xFCC3 parallel port data\r
- unsigned char howie; // 0xFCC4 howie (?)\r
- // 0xFCC5 - 0xFCFF unused\r
-};\r
-\r
-\r
-#endif\r
+/*****************************************************************************/
+/* */
+/* _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 JOY_RIGHT 0x10
+#define JOY_LEFT 0x20
+#define JOY_DOWN 0x40
+#define JOY_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;
+ char *data;
+ unsigned int hpos;
+ unsigned 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;
+ char *data;
+ unsigned int hpos;
+ unsigned 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;
+ char *data;
+ unsigned int hpos;
+ unsigned 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;
+ char *data;
+ unsigned int hpos;
+ unsigned 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;
+ char *data;
+ unsigned int hpos;
+ unsigned 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;
+ char *data;
+ unsigned int hpos;
+ unsigned 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;
+ char *data;
+ unsigned int hpos;
+ unsigned 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;
+ char *data;
+ unsigned int hpos;
+ unsigned int vpos;
+ unsigned char penpal[8];
+} SCB_RENONE_PAL;
+
+
+/* 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
+