1 /*****************************************************************************/
5 /* NES system specific definitions */
9 /* (C) 2002-2003 Groepaz/Hitmen */
12 /* This software is provided 'as-is', without any expressed or implied */
13 /* warranty. In no event will the authors be held liable for any damages */
14 /* arising from the use of this software. */
16 /* Permission is granted to anyone to use this software for any purpose, */
17 /* including commercial applications, and to alter it and redistribute it */
18 /* freely, subject to the following restrictions: */
20 /* 1. The origin of this software must not be misrepresented; you must not */
21 /* claim that you wrote the original software. If you use this software */
22 /* in a product, an acknowledgment in the product documentation would be */
23 /* appreciated but is not required. */
24 /* 2. Altered source versions must be plainly marked as such, and must not */
25 /* be misrepresented as being the original software. */
26 /* 3. This notice may not be removed or altered from any source */
29 /*****************************************************************************/
38 /* Check for errors */
40 # error This module may only be used when compiling for the NES!
45 /* Key and character defines */
47 #define CH_CURS_UP 0x01
48 #define CH_CURS_DOWN 0x02
49 #define CH_CURS_LEFT 0x03
50 #define CH_CURS_RIGHT 0x04
61 #define CH_ULCORNER 0x14
62 #define CH_URCORNER 0x12
63 #define CH_LLCORNER 0x11
64 #define CH_LRCORNER 0x08
68 #define COLOR_BLACK 0x00
69 #define COLOR_WHITE 0x01
70 #define COLOR_RED 0x02
71 #define COLOR_CYAN 0x03
72 #define COLOR_VIOLET 0x04
73 #define COLOR_GREEN 0x05
74 #define COLOR_BLUE 0x06
75 #define COLOR_YELLOW 0x07
76 #define COLOR_ORANGE 0x08
77 #define COLOR_BROWN 0x09
78 #define COLOR_LIGHTRED 0x0A
79 #define COLOR_GRAY1 0x0B
80 #define COLOR_GRAY2 0x0C
81 #define COLOR_LIGHTGREEN 0x0D
82 #define COLOR_LIGHTBLUE 0x0E
83 #define COLOR_GRAY3 0x0F
85 /* Return codes of get_tv */
90 /* No support for dynamically loadable drivers */
93 /* The joystick keys - all keys are supported */
96 #define KEY_SELECT 0x04
97 #define KEY_START 0x08
100 #define KEY_LEFT 0x40
101 #define KEY_RIGHT 0x80
103 /* Define hardware */
105 /* Picture Processing Unit */
107 unsigned char control;
108 unsigned char mask; /* color; show sprites, background */
109 signed char volatile const status;
111 unsigned char address;
114 unsigned char scroll;
116 unsigned char address;
120 #define PPU (*(struct __ppu*)0x2000)
121 #define SPRITE_DMA (APU.sprite.dma)
123 /* Audio Processing Unit */
126 unsigned char control; /* duty, counter halt, volume/envelope */
128 unsigned char period_low; /* timing */
129 unsigned char len_period_high; /* length, timing */
132 unsigned char counter; /* counter halt, linear counter */
133 unsigned char unused;
134 unsigned char period_low; /* timing */
135 unsigned char len_period_high; /* length, timing */
138 unsigned char control; /* counter halt, volume/envelope */
139 unsigned char unused;
140 unsigned char period; /* loop, timing */
141 unsigned char len; /* length */
144 unsigned char control; /* IRQ, loop, rate */
145 unsigned char output; /* output value */
146 unsigned char address;
147 unsigned char length;
148 } delta_mod; /* delta pulse-code modulation */
152 signed char volatile status;
153 unsigned char unused;
154 unsigned char fcontrol;
156 #define APU (*(struct __apu*)0x4000)
158 #define JOYPAD ((unsigned char volatile[2])0x4016)
160 /* The addresses of the static drivers */
161 extern void nes_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
162 extern void nes_64_56_2_tgi[]; /* Referred to by tgi_static_stddrv[] */
166 void waitvblank (void);
167 /* Wait for the vertical blanking */
169 unsigned char get_tv (void);
170 /* Return the video mode the machine is using. */