VirtualC64 v5.0 beta
Commodore 64 Emulator
Loading...
Searching...
No Matches
Headless.h
1// -----------------------------------------------------------------------------
2// This file is part of VirtualC64
3//
4// Copyright (C) Dirk W. Hoffmann. www.dirkwhoffmann.de
5// This FILE is dual-licensed. You are free to choose between:
6//
7// - The GNU General Public License v3 (or any later version)
8// - The Mozilla Public License v2
9//
10// SPDX-License-Identifier: GPL-3.0-or-later OR MPL-2.0
11// -----------------------------------------------------------------------------
12
13#pragma once
14
15#include "VirtualC64.h"
16#include "Concurrency.h"
17#include <map>
18
19namespace vc64 {
20
21struct SyntaxError : public std::runtime_error {
22 using runtime_error::runtime_error;
23};
24
25// The message listener
26void process(const void *listener, Message msg);
27
28class Headless {
29
30 // Parsed command line arguments
31 std::map<string,string> keys;
32
33 // The emulator instance
34 VirtualC64 c64;
35
36 // Barrier for syncing script execution
37 util::Mutex barrier;
38
39 // Return code
40 int returnCode;
41
42
43 //
44 // Launching
45 //
46
47public:
48
49 // Main entry point
50 int main(int argc, char *argv[]);
51
52private:
53
54 // Parses the command line arguments
55 void parseArguments(int argc, char *argv[]);
56
57 // Checks all command line arguments for conistency
58 void checkArguments() throws;
59
60 // Returns the path to the self-test script
61 string selfTestScript();
62
63
64 //
65 // Running
66 //
67
68public:
69
70 // Processes an incoming message
71 void process(Message msg);
72};
73
74//
75// Self-test script
76//
77
78static const char *testScript[] = {
79
80 "# Self-test script for VirtualC64",
81 "# ",
82 "# This script checks the integrity of application. It runs several shell",
83 "# commands to check if anything breaks.",
84 "# ",
85 "# Dirk W. Hoffmann, 2024",
86
87 "",
88 "help",
89 "hel", // Test auto-completion
90 "joshua", // Test a hidden command
91 "try joshu", // Catch an error with 'try'
92
93 "",
94 "c64",
95 "c64 defaults",
96 "c64 set WARP_BOOT 50",
97 "c64 set WARP_MODE WARP_ALWAYS",
98 "c64 set WARP_MODE WARP_AUTO",
99 "c64 set WARP_MODE WARP_NEVER",
100 "c64 set VSYNC yes",
101 "c64 set TIME_LAPSE 75",
102 "c64 set RUN_AHEAD 2",
103 "c64 init PAL",
104 "c64 init PAL_II",
105 "c64 init PAL_OLD",
106 "c64 init NTSC",
107 "c64 init NTSC_II",
108 "c64 init NTSC_OLD",
109 "c64 reset",
110
111 "",
112 "memory",
113 "memory set INIT_PATTERN VICE",
114 "memory set INIT_PATTERN CCS",
115 "memory set INIT_PATTERN ZEROES",
116 "memory set INIT_PATTERN ONES",
117 "memory set INIT_PATTERN RANDOM",
118 "memory set SAVE_ROMS true",
119 "memory set SAVE_ROMS false",
120
121 "",
122 "cia1",
123 "cia1 set REVISION MOS_6526",
124 "cia1 set REVISION MOS_8521",
125 "cia1 set TIMER_B_BUG true",
126 "cia1 set TIMER_B_BUG false",
127
128 "",
129 "cia2",
130 "cia2 set REVISION MOS_6526",
131 "cia2 set REVISION MOS_8521",
132 "cia2 set TIMER_B_BUG true",
133 "cia2 set TIMER_B_BUG false",
134
135 "",
136 "vic",
137 "vic set REVISION PAL_6569_R1",
138 "vic set REVISION PAL_6569_R3",
139 "vic set REVISION PAL_8565",
140 "vic set REVISION NTSC_6567",
141 "vic set REVISION NTSC_6567_R56A",
142 "vic set REVISION NTSC_8562",
143 "vic set GRAY_DOT_BUG true",
144 "vic set GRAY_DOT_BUG false",
145 "vic set GLUE_LOGIC DISCRETE",
146 "vic set GLUE_LOGIC IC",
147 "vic set SS_COLLISIONS true",
148 "vic set SS_COLLISIONS false",
149 "vic set SB_COLLISIONS true",
150 "vic set SB_COLLISIONS false",
151
152 "monitor set PALETTE COLOR",
153 "monitor set PALETTE BLACK_WHITE",
154 "monitor set PALETTE PAPER_WHITE",
155 "monitor set PALETTE GREEN",
156 "monitor set PALETTE AMBER",
157 "monitor set PALETTE SEPIA",
158 "monitor set BRIGHTNESS 50",
159 "monitor set CONTRAST 50",
160 "monitor set SATURATION 50",
161
162 "dmadebugger open",
163 "dmadebugger close",
164 "dmadebugger set CHANNEL0 true",
165 "dmadebugger set CHANNEL0 false",
166 "dmadebugger set CHANNEL1 true",
167 "dmadebugger set CHANNEL1 false",
168 "dmadebugger set CHANNEL2 true",
169 "dmadebugger set CHANNEL2 false",
170 "dmadebugger set CHANNEL3 true",
171 "dmadebugger set CHANNEL3 false",
172 "dmadebugger set CHANNEL4 true",
173 "dmadebugger set CHANNEL4 false",
174 "dmadebugger set CHANNEL5 true",
175 "dmadebugger set CHANNEL5 false",
176
177 "sid",
178 "sid set ENGINE RESID",
179 "sid set REVISION MOS_6581",
180 "sid set REVISION MOS_8580",
181 "sid set SAMPLING FAST",
182 "sid set SAMPLING INTERPOLATE",
183 "sid set SAMPLING RESAMPLE",
184 "sid set SAMPLING RESAMPLE_FASTMEM",
185 "sid set FILTER true",
186 "sid set FILTER false",
187
188 "sid2",
189 "sid2 set ENGINE RESID",
190 "sid2 set REVISION MOS_6581",
191 "sid2 set REVISION MOS_8580",
192 "sid2 set SAMPLING FAST",
193 "sid2 set SAMPLING INTERPOLATE",
194 "sid2 set SAMPLING RESAMPLE",
195 "sid2 set SAMPLING RESAMPLE_FASTMEM",
196 "sid2 set FILTER true",
197 "sid2 set FILTER false",
198
199 "audio set VOL0 50",
200 "audio set VOL1 50",
201 "audio set VOL2 50",
202 "audio set VOL3 50",
203 "audio set VOLL 50",
204 "audio set VOLR 50",
205 "audio set PAN0 50",
206 "audio set PAN1 50",
207 "audio set PAN2 50",
208 "audio set PAN3 50",
209
210 "expansion attach reu 128",
211 "expansion attach reu 256",
212 "expansion attach reu 512",
213 "expansion attach reu 2048",
214 "expansion attach georam 512",
215
216 "keyboard press 32",
217 "keyboard release 32",
218 "keyboard type text \"text\"",
219 "keyboard type load",
220 "keyboard type run",
221
222 "drive8",
223 "drive8 disconnect",
224 "drive8 eject",
225 "drive8 newdisk NODOS",
226 "drive8 newdisk CBM",
227
228 "drive9",
229 "drive9 disconnect",
230 "drive9 eject",
231 "drive9 newdisk NODOS",
232 "drive9 newdisk CBM",
233
234 "datasette",
235 "datasette connect",
236 "datasette disconnect",
237 "datasette rewind",
238 "datasette rewind to 10",
239
240 "joystick1",
241 "joystick1 set autofire ENABLE true",
242 "joystick1 set autofire ENABLE false",
243 "joystick1 set autofire BURSTS true",
244 "joystick1 set autofire BURSTS false",
245 "joystick1 set autofire BULLETS 10",
246 "joystick1 set autofire DELAY 10",
247 "joystick1 press",
248 "joystick1 unpress",
249 "joystick1 pull left",
250 "joystick1 pull right",
251 "joystick1 pull up",
252 "joystick1 pull down",
253 "joystick1 release x",
254 "joystick1 release y",
255
256 "joystick2",
257 "joystick2 set autofire ENABLE true",
258 "joystick2 set autofire ENABLE false",
259 "joystick2 set autofire BURSTS true",
260 "joystick2 set autofire BURSTS false",
261 "joystick2 set autofire BULLETS 10",
262 "joystick2 set autofire DELAY 10",
263 "joystick2 press",
264 "joystick2 unpress",
265 "joystick2 pull left",
266 "joystick2 pull right",
267 "joystick2 pull up",
268 "joystick2 pull down",
269 "joystick2 release x",
270 "joystick2 release y",
271
272 "mouse1",
273 "mouse1 set MODEL C1350",
274 "mouse1 set MODEL C1351",
275 "mouse1 set MODEL NEOS",
276 "mouse1 set VELOCITY 50",
277 "mouse1 set SHAKE_DETECTION true",
278 "mouse1 set SHAKE_DETECTION false",
279
280 "mouse2",
281 "mouse2 set MODEL C1350",
282 "mouse2 set MODEL C1351",
283 "mouse2 set MODEL NEOS",
284 "mouse2 set VELOCITY 50",
285 "mouse2 set SHAKE_DETECTION true",
286 "mouse2 set SHAKE_DETECTION false",
287
288 "parcable"
289};
290
291}
VirtualC64 project namespace.
Definition CmdQueue.cpp:16