File: gamate.h

package info (click to toggle)
cc65 2.17-1
  • links: PTS
  • area: main
  • in suites: buster
  • size: 19,032 kB
  • sloc: ansic: 111,990; asm: 59,701; pascal: 3,584; makefile: 953; perl: 607
file content (205 lines) | stat: -rw-r--r-- 7,654 bytes parent folder | download | duplicates (2)
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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/*****************************************************************************/
/*                                                                           */
/*                                gamate.h                                   */
/*                                                                           */
/*                   Gamate system specific definitions                      */
/*                                                                           */
/*                                                                           */
/*                                                                           */
/* (w) 2015 Groepaz/Hitmen (groepaz@gmx.net)                                 */
/*     based on technical reference by PeT (mess@utanet.at)                  */
/*                                                                           */
/* 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 _GAMATE_H
#define _GAMATE_H

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

#define AUDIO_BASE      0x4000

/*
   base clock cpu clock/32 ?

0/1: 1. channel(right): 12 bit frequency: right frequency 0 nothing, 1 high;
  3 23khz; 4 17,3; 10 6,9; 15 4.6; $60 720hz; $eff 18,0; $fff 16,9 hz)
 (delay clock/32)
2/3: 2. channel(left): 12 bit frequency
4/5: 3. channel(both): 12 bit frequency
6: 0..5 noise frequency 0 fast 1f slow (about 500us) 15.6ns--> clock/32 counts
7 control (hinibble right)
 bit 0: right channel high (full cycle, else square pulse/tone)
 bit 1: left channel high
 bit 2: both channel high
 bit 3: set right tone (else noise)
 bit 4: set left channel normal
 bit 5: set both normal
 bits 30: 11 high, 10 square, 01 noise, 00 noise only when square high
 noise means switches channel to ad converter based noise algorithmen
 (white noise shift register 17bit wide, repeats after about 130000 cycles)
 probably out=!bit16, bit0=bit16 xor bit13; runs through, so start value anything than 0
8: 1st volume: 0..3 square volume; bit 4 envelope (higher priority)
9: 2nd volume
10: 3rd volume
11/12: envelope delay time 0 fast, 0xffff slow/nearly no effect (2 22us, 4 56us)
 frequency $800, envelope $10 2 times in pulse high time (4*16*16)
13: envelope control
 0-3 one time falling
 4-7 one time rising
 8 falling
 9 one time falling
 a starts with down falling, rising; same falling time, but double/longer cycle
 b one time falling, on
 c rising
 d one time rising, on
 e rising, falling (double cycle before restart)
 f one time rising
 bit 0: once only
 bit 1: full tone
 bit 2: start rising (else falling)
 bit 3:
*/

/* LCD

    resolution 160x152 in 4 greys/greens
    2 256x256 sized bitplanes (2x 8kbyte ram)
*/
#define LCD_BASE        0x5000

#define LCD_MODE        0x5001
/*
 bit 3..0 (from zeropage 15)
        bit 0 set no normal screen display, seldom scrolling effects on screen;
        bytes written to somewhat actual display refresh position!?
    bytes read "random"
  bit 1,2,3 no effect
 bit 4 swaps plane intensity
 bit 5 ? display effect
 bit 6 on y auto increment (else auto x increment), reading
 bit 7 ? lcd flickering
*/
#define LCD_MODE_INC_Y  0x40

#define LCD_XPOS        0x5002  /* smooth scrolling X */
#define LCD_YPOS        0x5003  /* smooth scrolling Y */
/*
 smooth scrolling until $c8 with 200 limit
 after 200 display if ((value & 0xf) < 8) display of (value & 0xf) - 8
 chaos lines from value + current line from plane 2 only then lines starting
 with zero (problematic 200 limit/overrun implementation!?)
*/
#define LCD_X           0x5004  /* x-addr */
/*
 bit 5,6 no effect
 bit 7 0 1st/1 2nd bitplane
*/
#define LCD_XPOS_PLANE1 0x00
#define LCD_XPOS_PLANE2 0x80

#define LCD_Y           0x5005  /* y-addr */

#define LCD_READ        0x5006  /* read from RAM (no auto inc?) */
#define LCD_DATA        0x5007  /* write to RAM */

/* BIOS zeropage usage */

/* locations 0x0a-0x0c, 0x0e-0x11 and 0xe8 are in use by the BIOS IRQ/NMI handlers */
#define ZP_NMI_4800     0x0a    /* content of I/O reg 4800 gets copied here each NMI */

#define ZP_IRQ_COUNT    0x0b    /* increments once per IRQ, used elsewhere in the
                                   BIOS for synchronisation purposes */
#define ZP_IRQ_CTRL     0x0c    /* if 0 then cartridge irq stubs will not get called */

/* each of the following 4 increments by 1 per IRQ - it is _not_ a 32bit
   counter (see code at $ffa6 in BIOS)
   these are not used elsewhere in the bios and can be (re)set as needed by
   the user.
*/
#define ZP_IRQ_CNT1     0x0e
#define ZP_IRQ_CNT2     0x0f
#define ZP_IRQ_CNT3     0x10
#define ZP_IRQ_CNT4     0x11

#define ZP_NMI_FLAG     0xe8    /* set to 0xff each NMI */

/* constants for the conio implementation */
#define COLOR_BLACK     0x03
#define COLOR_WHITE     0x00

#define CH_HLINE        1
#define CH_VLINE        2
#define CH_CROSS        3
#define CH_ULCORNER     4
#define CH_URCORNER     5
#define CH_LLCORNER     6
#define CH_LRCORNER     7
#define CH_TTEE         8
#define CH_BTEE         9

#define CH_RTEE         11
#define CH_LTEE         12

#define CH_ENTER        13
#define CH_PI           18

#define TV_NTSC         0
#define TV_PAL          1
#define TV_OTHER        2

/* No support for dynamically loadable drivers */
#define DYN_DRV         0

/* Masks for joy_read */
#define JOY_UP_MASK     0x01
#define JOY_DOWN_MASK   0x02
#define JOY_LEFT_MASK   0x04
#define JOY_RIGHT_MASK  0x08
#define JOY_BTN_1_MASK  0x10
#define JOY_BTN_2_MASK  0x20
#define JOY_BTN_3_MASK  0x40
#define JOY_BTN_4_MASK  0x80

#define JOY_BTN_A_MASK  JOY_BTN_1_MASK
#define JOY_BTN_B_MASk  JOY_BTN_2_MASK
#define JOY_START_MASK  JOY_BTN_3_MASK
#define JOY_SELECT_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_START(v)    ((v) & JOY_START_MASK)
#define JOY_SELECT(v)   ((v) & JOY_SELECT_MASK)

/* The addresses of the static drivers */
extern void gamate_stdjoy_joy[];   /* Referred to by joy_static_stddrv[] */

void waitvsync (void);
/* Wait for start of next frame */

/* NOTE: all Gamate are "NTSC" */
#define get_tv()        TV_NTSC
/* Return the video mode the machine is using. */

/* End of gamate.h */
#endif