File: accelerator.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 (309 lines) | stat: -rw-r--r-- 11,008 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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
/*****************************************************************************/
/*                                                                           */
/*                               accelerator.h                               */
/*                                                                           */
/*                      Accelerator specific definitions                     */
/*                                                                           */
/*                                                                           */
/*                                                                           */
/* (C) 2018 Marco van den Heuvel                                             */
/* EMail:        blackystardust68@yahoo.com                                  */
/*                                                                           */
/*                                                                           */
/* 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 _ACCELERATOR_H
#define _ACCELERATOR_H

/*****************/
/* Speed defines */
/*****************/

#define SPEED_SLOW   0x00
#define SPEED_FAST   0xFF

#define SPEED_1X   SPEED_SLOW
#define SPEED_2X    2 - 1        /* C64 Chameleon, C64DTV, C128, PET 65816, Apple2 Fast Chip, Apple2 TransWarp, Apple2 Zip Chip */
#define SPEED_3X    3 - 1        /* C64 Chameleon, C65, PET 65816, Apple2 Booster, Apple 2 Fast Chip, Apple2 Titan, Apple2 TransWarp, Apple2 Zip Chip */
#define SPEED_4X    4 - 1        /* C64 Chameleon, C64 TurboMaster, C64 TurboProcess, PET 65816, Apple2 Fast Chip, Apple2 Zip Chip */
#define SPEED_5X    5 - 1        /* C64 Chameleon, PET 65816, Apple2 Fast Chip */
#define SPEED_6X    6 - 1        /* C64 Chameleon, PET 65816, Apple2 Fast Chip */
#define SPEED_7X    7 - 1        /* PET 65816, Apple2 Fast Chip */
#define SPEED_8X    8 - 1        /* C64 Flash8, PET 65816, Apple 2 Fast Chip */
#define SPEED_10X  10 - 1        /* PET 65816, Apple2 Fast Chip */
#define SPEED_12X  12 - 1        /* Apple2 Fast Chip */
#define SPEED_16X  16 - 1        /* Apple2 Fast Chip */
#define SPEED_20X  20 - 1        /* C64/C128 SuperCPU */

/***********************************/
/* Accelerator function prototypes */
/***********************************/

/* C64/C128 SuperCPU cartridge */

unsigned char __fastcall__ set_scpu_speed (unsigned char speed);

/* Set the speed of the SuperCPU cartridge, using SPEED_SLOW will switch to
 * 1 Mhz mode, SPEED_20X or SPEED_FAST will switch to 20 Mhz mode.
 *
 * Note that any value lower than SPEED_20X will switch to 1 Mhz mode, and
 * any value higher or equal to SPEED_20X will switch to 20 Mhz mode.
 *
 * This function will return the actual speed the CPU is at after trying
 * to set the requested speed, if this is not the speed that was requested
 * then possibly the hardware speed switch prevented any software speed
 * switching.
 *
 * This function does not check for the presence of the SuperCPU cartridge,
 * make sure you use 'detect_scpu();' before using.
 */

unsigned char get_scpu_speed (void);

/* Get the speed of the SuperCPU cartridge.
 *
 * Possible return values:
 * SPEED_1X    :  1 Mhz mode
 * SPEED_20X   : 20 Mhz mode
 *
 * This function does not check for the presence of the SuperCPU cartridge,
 * make sure you use 'detect_scpu();' before using.
 */

unsigned char detect_scpu (void);

/* Check for the presence of the SuperCPU cartridge.
 *
 * Possible return values:
 * 0x00  : SuperCPU cartridge not present
 * 0x01  : SuperCPU cartridge present
 */


/* C64DTV */

unsigned char __fastcall__ set_c64dtv_speed (unsigned char speed);

/* Set the speed of the C64DTV, using SPEED_SLOW will switch to
 * slow mode, SPEED_2X or SPEED_FAST will switch to fast mode.
 *
 * Note that any value higher or equal to SPEED_2X will switch to fast mode.
 *
 * This function will return the actual speed the CPU is at after trying
 * to set the requested speed, to my knowledge the switch should not fail.
 *
 * This function does not check for the presence of the C64DTV,
 * make sure you use 'detect_c64dtv();' before using.
 */

unsigned char get_c64dtv_speed (void);

/* Get the speed of the C64DTV.
 *
 * Possible return values:
 * SPEED_1X    : slow mode
 * SPEED_2X    : fast mode
 *
 * This function does not check for the presence of the C64DTV,
 * make sure you use 'detect_c64dtv();' before using.
 */

unsigned char detect_c64dtv (void);

/* Check for the presence of the C64DTV.
 *
 * Possible return values:
 * 0x00  : C64DTV not present
 * 0x01  : C64DTV present
 */


/* C128 8502 CPU */

unsigned char __fastcall__ set_c128_speed (unsigned char speed);

/* Set the speed of the C128 8502 CPU, using SPEED_SLOW will switch to
 * 1 Mhz (slow) mode, SPEED_2X or SPEED_FAST will switch to 2Mhz (fast) mode.
 *
 * Note that any value higher or equal to SPEED_2X will switch to fast mode.
 *
 * This function will return the actual speed the CPU is at after trying
 * to set the requested speed, to my knowledge the switching should not fail.
 *
 * This function does not check if the C128 CPU is the current CPU, make sure
 * you use 'detect_c128();' before using.
 */

unsigned char get_c128_speed (void);

/* Get the speed of the C128 8502 CPU.
 *
 * Possible return values:
 * SPEED_SLOW  : Slow mode
 * SPEED_2X    : Fast mode
 *
 * This function does not check if the C128 CPU is the current CPU, make sure
 * you use 'detect_c128();' before using.
 */

unsigned char detect_c128 (void);

/* Check if the C128 CPU is the current CPU.
 *
 * Possible return values:
 * 0x00  : C128 CPU is not the current CPU
 * 0x01  : C128 CPU is the current CPU
 */


/* C64 Chameleon cartridge */

unsigned char __fastcall__ set_chameleon_speed (unsigned char speed);

/* Set the speed of the C64 Chameleon cartridge, the following inputs
 * are accepted: 
 * SPEED_SLOW : 1 Mhz mode
 * SPEED_1X   : 1 Mhz mode
 * SPEED_2X   : 2 Mhz mode
 * SPEED_3X   : 3 Mhz mode
 * SPEED_4X   : 4 Mhz mode
 * SPEED_5X   : 5 Mhz mode
 * SPEED_6X   : 6 Mhz mode
 * SPEED_FAST : Maximum speed mode
 *
 * Note that any value higher or equal to SPEED_7X will switch to maximum
 * speed mode.
 *
 * This function will return the actual speed the CPU is at after trying
 * to set the requested speed, to my knowledge the switching should not fail.
 *
 * This function does not check for the presence of the C64 Chameleon cartridge,
 * make sure you use 'detect_chameleon();' before using.
 */

unsigned char get_chameleon_speed (void);

;/* Get the speed of the C64 Chameleon cartridge.
; *
; * Possible return values:
; * SPEED_SLOW  : Slow mode
; * SPEED_2X    : 2Mhz mode
; * SPEED_3X    : 3Mhz mode
; * SPEED_4X    : 4Mhz mode
; * SPEED_5X    : 5Mhz mode
; * SPEED_6X    : 6Mhz mode
; * SPEED_FAST  : Maximum speed mode
; *
; * This function does not check for the presence of the C64 Chameleon cartridge,
; * make sure you use 'detect_chameleon();' before using.
; */

unsigned char detect_chameleon (void);

/* Check for the presence of the C64 Chameleon cartridge.
 *
 * Possible return values:
 * 0x00  : C64 Chameleon cartridge not present
 * 0x01  : C64 Chameleon cartridge present
 */


/* C65/C64DX in C64 mode */

unsigned char __fastcall__ set_c65_speed (unsigned char speed);

/* Set the speed of the C65/C64DX CPU, using SPEED_SLOW will switch to
 * 1 Mhz mode, SPEED_3X or SPEED_FAST will switch to 3.5 Mhz (fast) mode.
 *
 * Note that any value higher or equal to SPEED_3X will switch to fast mode.
 *
 * This function will return the actual speed the CPU is at after trying
 * to set the requested speed, to my knowledge the switching should not fail.
 *
 * This function does not check for the presence of a C65/C64DX in C64 mode,
 * make sure you use 'detect_c65();' before using.
 */

unsigned char get_c65_speed (void);

/* Get the speed of the C65/C64DX CPU.
 *
 * Possible return values:
 * SPEED_SLOW  : Slow mode
 * SPEED_3X    : Fast mode
 *
 * This function does not check for the presence of a C65/C64DX in C64 mode,
 * make sure you use 'detect_c65();' before using.
 */

unsigned char detect_c65 (void);

/* Check for the presence of a C65/C64DX in C64 mode.
 *
 * Possible return values:
 * 0x00  : C65/C64DX in C64 mode not present
 * 0x01  : C65/C64DX in C64 mode present
 */


/* C64 Turbo Master cartridge */

unsigned char __fastcall__ set_turbomaster_speed (unsigned char speed);

/* Set the speed of the Turbo Master cartridge, using SPEED_SLOW will switch to
 * 1 Mhz mode, SPEED_4X or SPEED_FAST will switch to 4 Mhz mode.
 *
 * Note that any value higher or equal to SPEED_4X will switch to 4 Mhz mode,
 * any value lower than SPEED_4X will switch to 1 Mhz mode.
 *
 * This function will return the actual speed the CPU is at after trying
 * to set the requested speed, if the speed is different it might indicate
 * that the hardware switch has locked the speed.
 *
 * This function does not check for the presence of a Turbo Master cartridge,
 * make sure you use 'detect_turbomaster();' before using.
 */

unsigned char get_turbomaster_speed (void);

/* Get the speed of the Turbo Master cartridge.
 *
 * Possible return values:
 * SPEED_SLOW  : 1 Mhz mode
 * SPEED_4X    : 4 Mhz mode
 *
 * This function does not check for the presence of a Turbo Master cartridge,
 * make sure you use 'detect_turbomaster();' before using.
 */

unsigned char detect_turbomaster (void);

/* Check for the presence of a C64 Turbo Master cartridge.
 *
 * Possible return values:
 * 0x00  : C64 Turbo Master cartridge not present
 * 0x01  : C64 Turbo Master cartridge present
 */

/* End of accelerator.h */
#endif