284
289
monitor_interface_t *drive_interface_init[DRIVE_NUM];
285
290
monitor_cpu_type_t *asmarray[4];
287
asmarray[0]=&asm6502dtv;
288
asmarray[1]=&asm6502;
289
asmarray[2]=&asmR65C02;
292
asmarray[0] = &asm6502dtv;
293
asmarray[1] = &asm6502;
294
asmarray[2] = &asmR65C02;
292
297
asm6502dtv_init(&asm6502dtv);
293
298
asm6502_init(&asm6502);
294
299
asmR65C02_init(&asmR65C02);
296
for (dnr = 0; dnr < DRIVE_NUM; dnr++)
301
for (dnr = 0; dnr < DRIVE_NUM; dnr++) {
297
302
drive_interface_init[dnr] = drivecpu_monitor_interface_get(dnr);
299
305
/* Initialize the monitor. */
300
306
monitor_init(maincpu_monitor_interface_get(), drive_interface_init,
316
322
c64_log = log_open("C64");
324
if (mem_load() < 0) {
321
328
/* Setup trap handling. */
324
331
/* Initialize serial traps. */
325
if (serial_init(c64_serial_traps) < 0)
332
if (serial_init(c64_serial_traps) < 0) {
328
336
serial_trap_init(0xa4);
329
337
serial_iec_bus_init();
331
339
/* Initialize flash traps. */
332
if (flash_trap_init(c64dtv_flash_traps) < 0)
340
if (flash_trap_init(c64dtv_flash_traps) < 0) {
335
344
/* Initialize RS232 handler. */
347
356
if (delay == 0) {
348
357
delay = 3; /* default */
350
autostart_init((CLOCK)(delay * C64_PAL_RFSH_PER_SEC
351
* C64_PAL_CYCLES_PER_RFSH),
352
1, 0xcc, 0xd1, 0xd3, 0xd5);
359
autostart_init((CLOCK)(delay * C64_PAL_RFSH_PER_SEC * C64_PAL_CYCLES_PER_RFSH),
360
1, 0xcc, 0xd1, 0xd3, 0xd5);
354
if (vicii_init(VICII_DTV) == NULL && !console_mode)
362
if (vicii_init(VICII_DTV) == NULL && !console_mode) {
357
366
cia1_init(machine_context.cia1);
358
367
cia2_init(machine_context.cia2);
360
369
#ifndef COMMON_KBD
361
370
/* Initialize the keyboard. */
362
if (c64_kbd_init() < 0)
371
if (c64_kbd_init() < 0) {
366
376
c64keyboard_init();
383
393
sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh);
385
395
/* Initialize keyboard buffer. */
386
kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec
387
* machine_timing.cycles_per_rfsh));
396
kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh));
389
398
/* Initialize the C64-specific part of the UI. */
390
399
if (!console_mode) {
527
535
void machine_change_timing(int timeval)
533
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_NORMAL_BORDERS):
534
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_NORMAL_BORDERS):
535
timeval ^= VICII_BORDER_MODE(VICII_NORMAL_BORDERS);
536
border_mode = VICII_NORMAL_BORDERS;
538
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_FULL_BORDERS):
539
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_FULL_BORDERS):
540
timeval ^= VICII_BORDER_MODE(VICII_FULL_BORDERS);
541
border_mode = VICII_FULL_BORDERS;
543
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_DEBUG_BORDERS):
544
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_DEBUG_BORDERS):
545
timeval ^= VICII_BORDER_MODE(VICII_DEBUG_BORDERS);
546
border_mode = VICII_DEBUG_BORDERS;
548
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_NO_BORDERS):
549
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_NO_BORDERS):
550
timeval ^= VICII_BORDER_MODE(VICII_NO_BORDERS);
551
border_mode = VICII_NO_BORDERS;
556
case MACHINE_SYNC_PAL:
557
machine_timing.cycles_per_sec = C64_PAL_CYCLES_PER_SEC;
558
machine_timing.cycles_per_rfsh = C64_PAL_CYCLES_PER_RFSH;
559
machine_timing.rfsh_per_sec = C64_PAL_RFSH_PER_SEC;
560
machine_timing.cycles_per_line = C64_PAL_CYCLES_PER_LINE;
561
machine_timing.screen_lines = C64_PAL_SCREEN_LINES;
563
case MACHINE_SYNC_NTSC:
564
machine_timing.cycles_per_sec = C64_NTSC_CYCLES_PER_SEC;
565
machine_timing.cycles_per_rfsh = C64_NTSC_CYCLES_PER_RFSH;
566
machine_timing.rfsh_per_sec = C64_NTSC_RFSH_PER_SEC;
567
machine_timing.cycles_per_line = C64_NTSC_CYCLES_PER_LINE;
568
machine_timing.screen_lines = C64_NTSC_SCREEN_LINES;
571
log_error(c64_log, "Unknown machine timing.");
541
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_NORMAL_BORDERS):
542
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_NORMAL_BORDERS):
543
timeval ^= VICII_BORDER_MODE(VICII_NORMAL_BORDERS);
544
border_mode = VICII_NORMAL_BORDERS;
546
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_FULL_BORDERS):
547
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_FULL_BORDERS):
548
timeval ^= VICII_BORDER_MODE(VICII_FULL_BORDERS);
549
border_mode = VICII_FULL_BORDERS;
551
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_DEBUG_BORDERS):
552
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_DEBUG_BORDERS):
553
timeval ^= VICII_BORDER_MODE(VICII_DEBUG_BORDERS);
554
border_mode = VICII_DEBUG_BORDERS;
556
case MACHINE_SYNC_PAL ^ VICII_BORDER_MODE(VICII_NO_BORDERS):
557
case MACHINE_SYNC_NTSC ^ VICII_BORDER_MODE(VICII_NO_BORDERS):
558
timeval ^= VICII_BORDER_MODE(VICII_NO_BORDERS);
559
border_mode = VICII_NO_BORDERS;
564
case MACHINE_SYNC_PAL:
565
machine_timing.cycles_per_sec = C64_PAL_CYCLES_PER_SEC;
566
machine_timing.cycles_per_rfsh = C64_PAL_CYCLES_PER_RFSH;
567
machine_timing.rfsh_per_sec = C64_PAL_RFSH_PER_SEC;
568
machine_timing.cycles_per_line = C64_PAL_CYCLES_PER_LINE;
569
machine_timing.screen_lines = C64_PAL_SCREEN_LINES;
571
case MACHINE_SYNC_NTSC:
572
machine_timing.cycles_per_sec = C64_NTSC_CYCLES_PER_SEC;
573
machine_timing.cycles_per_rfsh = C64_NTSC_CYCLES_PER_RFSH;
574
machine_timing.rfsh_per_sec = C64_NTSC_RFSH_PER_SEC;
575
machine_timing.cycles_per_line = C64_NTSC_CYCLES_PER_LINE;
576
machine_timing.screen_lines = C64_NTSC_SCREEN_LINES;
579
log_error(c64_log, "Unknown machine timing.");
574
582
vsync_set_machine_parameter(machine_timing.rfsh_per_sec,