]> git.sur5r.net Git - cc65/blob - include/gamate.h
fix grammar
[cc65] / include / gamate.h
1 /*****************************************************************************/
2 /*                                                                           */
3 /*                                gamate.h                                   */
4 /*                                                                           */
5 /*                   Gamate system specific definitions                      */
6 /*                                                                           */
7 /*                                                                           */
8 /*                                                                           */
9 /* (w) 2015 Groepaz/Hitmen (groepaz@gmx.net)                                 */
10 /*     based on technical reference by PeT (mess@utanet.at)                  */
11 /*                                                                           */
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.                                    */
15 /*                                                                           */
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:                            */
19 /*                                                                           */
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              */
27 /*    distribution.                                                          */
28 /*                                                                           */
29 /*****************************************************************************/
30
31 #ifndef _GAMATE_H
32 #define _GAMATE_H
33
34 /* Check for errors */
35 #if !defined(__GAMATE__)
36 #  error This module may only be used when compiling for the Gamate!
37 #endif
38
39 #define AUDIO_BASE      0x4000
40
41 /*
42    base clock cpu clock/32 ?
43
44 0/1: 1. channel(right): 12 bit frequency: right frequency 0 nothing, 1 high;
45   3 23khz; 4 17,3; 10 6,9; 15 4.6; $60 720hz; $eff 18,0; $fff 16,9 hz)
46  (delay clock/32)
47 2/3: 2. channel(left): 12 bit frequency
48 4/5: 3. channel(both): 12 bit frequency
49 6: 0..5 noise frequency 0 fast 1f slow (about 500us) 15.6ns--> clock/32 counts
50 7 control (hinibble right)
51  bit 0: right channel high (full cycle, else square pulse/tone)
52  bit 1: left channel high
53  bit 2: both channel high
54  bit 3: set right tone (else noise)
55  bit 4: set left channel normal
56  bit 5: set both normal
57  bits 30: 11 high, 10 square, 01 noise, 00 noise only when square high
58  noise means switches channel to ad converter based noise algorithmen
59  (white noise shift register 17bit wide, repeats after about 130000 cycles)
60  probably out=!bit16, bit0=bit16 xor bit13; runs through, so start value anything than 0
61 8: 1st volume: 0..3 square volume; bit 4 envelope (higher priority)
62 9: 2nd volume
63 10: 3rd volume
64 11/12: envelope delay time 0 fast, 0xffff slow/nearly no effect (2 22us, 4 56us)
65  frequency $800, envelope $10 2 times in pulse high time (4*16*16)
66 13: envelope control
67  0-3 one time falling
68  4-7 one time rising
69  8 falling
70  9 one time falling
71  a starts with down falling, rising; same falling time, but double/longer cycle
72  b one time falling, on
73  c rising
74  d one time rising, on
75  e rising, falling (double cycle before restart)
76  f one time rising
77  bit 0: once only
78  bit 1: full tone
79  bit 2: start rising (else falling)
80  bit 3:
81 */
82
83 #define JOY_DATA        0x4400
84
85 #define JOY_DATA_UP     0x01
86 #define JOY_DATA_DOWN   0x02
87 #define JOY_DATA_LEFT   0x04
88 #define JOY_DATA_RIGHT  0x08
89 #define JOY_DATA_FIRE_A 0x10
90 #define JOY_DATA_FIRE_B 0x20
91 #define JOY_DATA_START  0x40
92 #define JOY_DATA_SELECT 0x80
93
94 /* LCD
95
96     resolution 160x152 in 4 greys/greens
97     2 256x256 sized bitplanes (2x 8kbyte ram)
98 */
99 #define LCD_BASE        0x5000
100
101 #define LCD_MODE        0x5001
102 /*
103  bit 3..0 (from zeropage 15)
104         bit 0 set no normal screen display, seldom scrolling effects on screen;
105         bytes written to somewhat actual display refresh position!?
106     bytes read "random"
107   bit 1,2,3 no effect
108  bit 4 swaps plane intensity
109  bit 5 ? display effect
110  bit 6 on y auto increment (else auto x increment), reading
111  bit 7 ? lcd flickering
112 */
113 #define LCD_MODE_INC_Y  0x40
114
115 #define LCD_XPOS        0x5002  /* smooth scrolling X */
116 #define LCD_YPOS        0x5003  /* smooth scrolling Y */
117 /*
118  smooth scrolling until $c8 with 200 limit
119  after 200 display if ((value & 0xf) < 8) display of (value & 0xf) - 8
120  chaos lines from value + current line from plane 2 only then lines starting
121  with zero (problematic 200 limit/overrun implementation!?)
122 */
123 #define LCD_X           0x5004  /* x-addr */
124 /*
125  bit 5,6 no effect
126  bit 7 0 1st/1 2nd bitplane
127 */
128 #define LCD_XPOS_PLANE1 0x00
129 #define LCD_XPOS_PLANE2 0x80
130
131 #define LCD_Y           0x5005  /* y-addr */
132
133 #define LCD_READ        0x5006  /* read from RAM (no auto inc?) */
134 #define LCD_DATA        0x5007  /* write to RAM */
135
136 /* BIOS zeropage usage */
137
138 /* locations 0x0a-0x0c, 0x0e-0x11 and 0xe8 are in use by the BIOS IRQ/NMI handlers */
139 #define ZP_NMI_4800     0x0a    /* content of I/O reg 4800 gets copied here each NMI */
140
141 #define ZP_IRQ_COUNT    0x0b    /* increments once per IRQ, used elsewhere in the
142                                    BIOS for synchronisation purposes */
143 #define ZP_IRQ_CTRL     0x0c    /* if 0 then cartridge irq stubs will not get called */
144
145 /* each of the following 4 increments by 1 per IRQ - it is _not_ a 32bit
146    counter (see code at $ffa6 in BIOS)
147    these are not used elsewhere in the bios and can be (re)set as needed by
148    the user.
149 */
150 #define ZP_IRQ_CNT1     0x0e
151 #define ZP_IRQ_CNT2     0x0f
152 #define ZP_IRQ_CNT3     0x10
153 #define ZP_IRQ_CNT4     0x11
154
155 #define ZP_NMI_FLAG     0xe8    /* set to 0xff each NMI */
156
157 /* constants for the conio implementation */
158 #define COLOR_BLACK     0x03
159 #define COLOR_WHITE     0x00
160
161 #define CH_HLINE        1
162 #define CH_VLINE        2
163 #define CH_CROSS        3
164 #define CH_ULCORNER     4
165 #define CH_URCORNER     5
166 #define CH_LLCORNER     6
167 #define CH_LRCORNER     7
168 #define CH_TTEE         8
169 #define CH_BTEE         9
170
171 #define CH_RTEE         11
172 #define CH_LTEE         12
173
174 #define CH_ENTER        13
175 #define CH_PI           18
176
177 #define TV_NTSC         0
178 #define TV_PAL          1
179 #define TV_OTHER        2
180
181 /* No support for dynamically loadable drivers */
182 #define DYN_DRV         0
183
184 /* The addresses of the static drivers */
185 extern void gamate_stdjoy_joy[];   /* Referred to by joy_static_stddrv[] */
186
187 #define JOY_FIRE_B      5
188 #define JOY_START       6
189 #define JOY_SELECT      7
190
191 void waitvblank (void);
192 /* Wait for the vertical blanking */
193
194 /* NOTE: all Gamate are "NTSC" */
195 #define get_tv()        TV_NTSC
196 /* Return the video mode the machine is using. */
197
198 /* End of gamate.h */
199 #endif
200