/*****************************************************************************/
/* */
-/* nes.h */
+/* nes.h */
/* */
-/* NES system specific definitions */
+/* NES system specific definitions */
/* */
/* */
/* */
/* Key and character defines */
-#define CH_ENTER '\n'
-#define CH_CURS_UP 0x01
-#define CH_CURS_DOWN 0x02
-#define CH_CURS_LEFT 0x03
-#define CH_CURS_RIGHT 0x04
-#define CH_ESC 8
-#define CH_DEL 20
-
-#define CH_CROSS 0x10
+#define CH_ENTER '\n'
+#define CH_CURS_UP 0x01
+#define CH_CURS_DOWN 0x02
+#define CH_CURS_LEFT 0x03
+#define CH_CURS_RIGHT 0x04
+#define CH_ESC 8
+#define CH_DEL 20
+
+#define CH_CROSS 0x10
#define CH_RTEE 0x17
#define CH_LTEE 0x0f
#define CH_TTEE 0x16
#define CH_LRCORNER 0x08
#define CH_PI 0x05
-
/* Color defines */
-#define COLOR_BLACK 0x00
-#define COLOR_WHITE 0x01
-#define COLOR_RED 0x02
-#define COLOR_CYAN 0x03
-#define COLOR_VIOLET 0x04
-#define COLOR_GREEN 0x05
-#define COLOR_BLUE 0x06
-#define COLOR_YELLOW 0x07
-#define COLOR_ORANGE 0x08
-#define COLOR_BROWN 0x09
-#define COLOR_LIGHTRED 0x0A
-#define COLOR_GRAY1 0x0B
-#define COLOR_GRAY2 0x0C
-#define COLOR_LIGHTGREEN 0x0D
-#define COLOR_LIGHTBLUE 0x0E
-#define COLOR_GRAY3 0x0F
+#define COLOR_BLACK 0x00
+#define COLOR_WHITE 0x01
+#define COLOR_RED 0x02
+#define COLOR_CYAN 0x03
+#define COLOR_VIOLET 0x04
+#define COLOR_GREEN 0x05
+#define COLOR_BLUE 0x06
+#define COLOR_YELLOW 0x07
+#define COLOR_ORANGE 0x08
+#define COLOR_BROWN 0x09
+#define COLOR_LIGHTRED 0x0A
+#define COLOR_GRAY1 0x0B
+#define COLOR_GRAY2 0x0C
+#define COLOR_LIGHTGREEN 0x0D
+#define COLOR_LIGHTBLUE 0x0E
+#define COLOR_GRAY3 0x0F
+
+/* Masks for joy_read */
+#define JOY_UP_MASK 0x10
+#define JOY_DOWN_MASK 0x20
+#define JOY_LEFT_MASK 0x40
+#define JOY_RIGHT_MASK 0x80
+#define JOY_BTN_1_MASK 0x01
+#define JOY_BTN_2_MASK 0x02
+#define JOY_BTN_3_MASK 0x04
+#define JOY_BTN_4_MASK 0x08
+
+#define JOY_BTN_A_MASK JOY_BTN_1_MASK
+#define JOY_BTN_B_MASK JOY_BTN_2_MASK
+#define JOY_SELECT_MASK JOY_BTN_3_MASK
+#define JOY_START_MASK JOY_BTN_4_MASK
+
+#define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK)
+#define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK)
+#define JOY_SELECT(v) ((v) & JOY_SELECT_MASK)
+#define JOY_START(v) ((v) & JOY_START_MASK)
/* Return codes of get_tv */
#define TV_NTSC 0
#define TV_PAL 1
#define TV_OTHER 2
-
-
-void __fastcall__ waitvblank (void);
-/* Wait for the vertical blanking */
-
-unsigned char __fastcall__ get_tv (void);
+/* No support for dynamically loadable drivers */
+#define DYN_DRV 0
+
+/* Define hardware */
+
+/* Picture Processing Unit */
+struct __ppu {
+ unsigned char control;
+ unsigned char mask; /* color; show sprites, background */
+ signed char volatile const status;
+ struct {
+ unsigned char address;
+ unsigned char data;
+ } sprite;
+ unsigned char scroll;
+ struct {
+ unsigned char address;
+ unsigned char data;
+ } vram;
+};
+#define PPU (*(struct __ppu*)0x2000)
+#define SPRITE_DMA (APU.sprite.dma)
+
+/* Audio Processing Unit */
+struct __apu {
+ struct {
+ unsigned char control; /* duty, counter halt, volume/envelope */
+ unsigned char ramp;
+ unsigned char period_low; /* timing */
+ unsigned char len_period_high; /* length, timing */
+ } pulse[2];
+ struct {
+ unsigned char counter; /* counter halt, linear counter */
+ unsigned char unused;
+ unsigned char period_low; /* timing */
+ unsigned char len_period_high; /* length, timing */
+ } triangle;
+ struct {
+ unsigned char control; /* counter halt, volume/envelope */
+ unsigned char unused;
+ unsigned char period; /* loop, timing */
+ unsigned char len; /* length */
+ } noise;
+ struct {
+ unsigned char control; /* IRQ, loop, rate */
+ unsigned char output; /* output value */
+ unsigned char address;
+ unsigned char length;
+ } delta_mod; /* delta pulse-code modulation */
+ struct {
+ unsigned char dma;
+ } sprite;
+ signed char volatile status;
+ unsigned char unused;
+ unsigned char fcontrol;
+};
+#define APU (*(struct __apu*)0x4000)
+
+#define JOYPAD ((unsigned char volatile[2])0x4016)
+
+/* The addresses of the static drivers */
+extern void nes_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */
+extern void nes_64_56_2_tgi[]; /* Referred to by tgi_static_stddrv[] */
+
+
+
+void waitvsync (void);
+/* Wait for start of the next frame */
+
+unsigned char get_tv (void);
/* Return the video mode the machine is using. */
/* End of nes.h */
#endif
-
-
-