File: nes.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 (185 lines) | stat: -rw-r--r-- 6,800 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
/*****************************************************************************/
/*                                                                           */
/*                                   nes.h                                   */
/*                                                                           */
/*                      NES system specific definitions                      */
/*                                                                           */
/*                                                                           */
/*                                                                           */
/* (C) 2002-2003 Groepaz/Hitmen                                              */
/*                                                                           */
/*                                                                           */
/* 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 _NES_H
#define _NES_H



/* Check for errors */
#if !defined(__NES__)
#  error This module may only be used when compiling for the NES!
#endif



/* 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_RTEE                 0x17
#define CH_LTEE                 0x0f
#define CH_TTEE                 0x16
#define CH_BTEE                 0x15
#define CH_HLINE                0x0b
#define CH_VLINE                0x0e
#define CH_ULCORNER             0x14
#define CH_URCORNER             0x12
#define CH_LLCORNER             0x11
#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

/* 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

/* 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