2
* vicii-timing.c - Timing related settings for the MOS 6569 (VIC-II) emulation.
5
* Andreas Boose <viceteam@t-online.de>
7
* This file is part of VICE, the Versatile Commodore Emulator.
8
* See README for copyright notice.
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
31
#include "resources.h"
32
#include "vicii-sprites.h"
33
#include "vicii-timing.h"
34
#include "viciitypes.h"
37
/* Number of cycles per line. */
38
#define VICII_PAL_CYCLES_PER_LINE C64_PAL_CYCLES_PER_LINE
39
#define VICII_NTSC_CYCLES_PER_LINE C64_NTSC_CYCLES_PER_LINE
40
#define VICII_NTSCOLD_CYCLES_PER_LINE C64_NTSCOLD_CYCLES_PER_LINE
42
/* Cycle # at which sprite DMA is set. */
43
#define VICII_PAL_SPRITE_FETCH_CYCLE 54
44
#define VICII_NTSC_SPRITE_FETCH_CYCLE 55
45
#define VICII_NTSCOLD_SPRITE_FETCH_CYCLE 54
47
/* Cycle # at which the current raster line is re-drawn. It is set to
48
`VICII_CYCLES_PER_LINE', so this actually happens at the very beginning
49
(i.e. cycle 0) of the next line. */
50
#define VICII_PAL_DRAW_CYCLE VICII_PAL_CYCLES_PER_LINE
51
#define VICII_NTSC_DRAW_CYCLE VICII_NTSC_CYCLES_PER_LINE
52
#define VICII_NTSCOLD_DRAW_CYCLE VICII_NTSCOLD_CYCLES_PER_LINE
55
void vicii_timing_set(machine_timing_t *machine_timing)
57
resource_value_t mode;
59
resources_get_value("MachineVideoStandard", (void *)&mode);
62
case MACHINE_SYNC_NTSC:
63
vicii.screen_height = VICII_NTSC_SCREEN_HEIGHT;
64
vicii.first_displayed_line = VICII_NTSC_FIRST_DISPLAYED_LINE;
65
vicii.last_displayed_line = VICII_NTSC_LAST_DISPLAYED_LINE;
66
vicii.row_25_start_line = VICII_NTSC_25ROW_START_LINE;
67
vicii.row_25_stop_line = VICII_NTSC_25ROW_STOP_LINE;
68
vicii.row_24_start_line = VICII_NTSC_24ROW_START_LINE;
69
vicii.row_24_stop_line = VICII_NTSC_24ROW_STOP_LINE;
70
vicii.screen_borderwidth = VICII_SCREEN_NTSC_BORDERWIDTH;
71
vicii.screen_borderheight = VICII_SCREEN_NTSC_BORDERHEIGHT;
72
vicii.cycles_per_line = VICII_NTSC_CYCLES_PER_LINE;
73
vicii.draw_cycle = VICII_NTSC_DRAW_CYCLE;
74
vicii.sprite_fetch_cycle = VICII_NTSC_SPRITE_FETCH_CYCLE;
75
vicii.sprite_wrap_x = VICII_NTSC_SPRITE_WRAP_X;
76
vicii.first_dma_line = VICII_NTSC_FIRST_DMA_LINE;
77
vicii.last_dma_line = VICII_NTSC_LAST_DMA_LINE;
78
vicii.offset = VICII_NTSC_OFFSET;
80
case MACHINE_SYNC_NTSCOLD:
81
vicii.first_displayed_line = VICII_NTSCOLD_FIRST_DISPLAYED_LINE;
82
vicii.last_displayed_line = VICII_NTSCOLD_LAST_DISPLAYED_LINE;
83
vicii.row_25_start_line = VICII_NTSCOLD_25ROW_START_LINE;
84
vicii.row_25_stop_line = VICII_NTSCOLD_25ROW_STOP_LINE;
85
vicii.row_24_start_line = VICII_NTSCOLD_24ROW_START_LINE;
86
vicii.row_24_stop_line = VICII_NTSCOLD_24ROW_STOP_LINE;
87
vicii.screen_borderwidth = VICII_SCREEN_NTSCOLD_BORDERWIDTH;
88
vicii.screen_borderheight = VICII_SCREEN_NTSCOLD_BORDERHEIGHT;
89
vicii.cycles_per_line = VICII_NTSCOLD_CYCLES_PER_LINE;
90
vicii.draw_cycle = VICII_NTSCOLD_DRAW_CYCLE;
91
vicii.sprite_fetch_cycle = VICII_NTSCOLD_SPRITE_FETCH_CYCLE;
92
vicii.sprite_wrap_x = VICII_NTSCOLD_SPRITE_WRAP_X;
93
vicii.first_dma_line = VICII_NTSCOLD_FIRST_DMA_LINE;
94
vicii.last_dma_line = VICII_NTSCOLD_LAST_DMA_LINE;
95
vicii.offset = VICII_NTSCOLD_OFFSET;
97
case MACHINE_SYNC_PAL:
99
vicii.screen_height = VICII_PAL_SCREEN_HEIGHT;
100
vicii.first_displayed_line = VICII_PAL_FIRST_DISPLAYED_LINE;
101
vicii.last_displayed_line = VICII_PAL_LAST_DISPLAYED_LINE;
102
vicii.row_25_start_line = VICII_PAL_25ROW_START_LINE;
103
vicii.row_25_stop_line = VICII_PAL_25ROW_STOP_LINE;
104
vicii.row_24_start_line = VICII_PAL_24ROW_START_LINE;
105
vicii.row_24_stop_line = VICII_PAL_24ROW_STOP_LINE;
106
vicii.screen_borderwidth = VICII_SCREEN_PAL_BORDERWIDTH;
107
vicii.screen_borderheight = VICII_SCREEN_PAL_BORDERHEIGHT;
108
vicii.cycles_per_line = VICII_PAL_CYCLES_PER_LINE;
109
vicii.draw_cycle = VICII_PAL_DRAW_CYCLE;
110
vicii.sprite_fetch_cycle = VICII_PAL_SPRITE_FETCH_CYCLE;
111
vicii.sprite_wrap_x = VICII_PAL_SPRITE_WRAP_X;
112
vicii.first_dma_line = VICII_PAL_FIRST_DMA_LINE;
113
vicii.last_dma_line = VICII_PAL_LAST_DMA_LINE;
114
vicii.offset = VICII_PAL_OFFSET;
118
vicii_sprites_init_sprline();