X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fnes.h;h=217a90779ac716b6c644b6f8105d4216b76e896d;hb=2af76c7cffb08af3a6f7ca87c90132aa3e365f76;hp=48c5418e0c82f7a9eb63c3dc23838a25b498c221;hpb=e0822357c7aba00c9a50fa88712b8b5b279e2ac8;p=cc65 diff --git a/include/nes.h b/include/nes.h index 48c5418e0..217a90779 100644 --- a/include/nes.h +++ b/include/nes.h @@ -1,8 +1,8 @@ /*****************************************************************************/ /* */ -/* nes.h */ +/* nes.h */ /* */ -/* NES system specific definitions */ +/* NES system specific definitions */ /* */ /* */ /* */ @@ -43,15 +43,15 @@ /* 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 @@ -64,42 +64,122 @@ #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 - - -