1 |
cebix |
1.1 |
<HTML> |
2 |
|
|
<HEAD> |
3 |
|
|
<TITLE>Technical info</TITLE> |
4 |
|
|
</HEAD> |
5 |
|
|
<BODY> |
6 |
|
|
|
7 |
|
|
<H1>Technical info</H1> |
8 |
|
|
|
9 |
|
|
<CITE> |
10 |
|
|
"Known?" said Gandalf.<BR> |
11 |
|
|
"I have known much that only the Wise know, Frodo." |
12 |
|
|
</CITE> |
13 |
|
|
|
14 |
|
|
<HR> |
15 |
|
|
|
16 |
|
|
Frodo tries to exactly imitate C64 hardware features. Now the 64's hardware |
17 |
|
|
(esp. the graphics chip "VIC-II") has a rather simple design resulting in |
18 |
cebix |
1.2 |
many of the internal processes being visible to the "outside". So there are |
19 |
|
|
lots of "undocumented features" you can do effects with the designers never |
20 |
cebix |
1.1 |
dared to dream about.<P> |
21 |
|
|
|
22 |
|
|
Frodo uses a line-by-line emulation, i.e. the function of the VIC and the |
23 |
|
|
processor (6510) are emulated for one raster line of the C64 screen at |
24 |
|
|
times. In practice, Frodo runs VIC and 6510 alternately for 63 simulated |
25 |
|
|
cycles each (corresponding to one raster line). At first, it emulates the |
26 |
|
|
processor for 63 cycles, then switches over to the VIC that paints one |
27 |
|
|
pixel row to the screen, then again 63 cycles processor, and so on... If |
28 |
|
|
the 1541 processor emulation is turned on, 6510 and 6502 (in the 1541) |
29 |
|
|
instructions are executed by Frodo in an interleaved fashion.<P> |
30 |
|
|
|
31 |
|
|
Even though this is a heavy simplification of the processes in a real C64, |
32 |
|
|
it lets you perfectly emulate many graphical effects possible on the C64, |
33 |
|
|
e.g. FLD, DYCP, hyperscreen and many more. But this method has one big |
34 |
|
|
disadvantage: Changes made to VIC registers by the processor in the middle |
35 |
|
|
of a raster line will only take effect at the start of the next line. E.g. |
36 |
|
|
you can't change the border color in the middle of a line, the color change |
37 |
|
|
takes place in the next line. Therefore, very sophisticated techniques |
38 |
|
|
depending on the exact position of a register change can't be emulated. For |
39 |
|
|
instance, it is no problem to open the top and bottom border, but opening |
40 |
|
|
the left and right border is impossible (and therefore not implemented in |
41 |
|
|
the emulation).<P> |
42 |
|
|
|
43 |
|
|
Frodo SC goes one step further by switching between VIC and 6510 in every |
44 |
|
|
cycle and precisely emulating the internal functions. Modifications to |
45 |
|
|
VIC registers become visible immediately in the next clock phase and |
46 |
|
|
therefore it can even emulate effects that depend on the exact position |
47 |
|
|
of a register change within a raster line, e.g. special FLI routines, |
48 |
|
|
opening the left/right border, linecrunch, DMA delay, multiple repeated |
49 |
|
|
sprite lines and executing programs in open address spaces ($de00-$dfff) |
50 |
|
|
and in the color RAM. The 6510 emulation is also more precise and does |
51 |
|
|
the same memory accesses as the real 6510, even the "unnecessary" ones |
52 |
|
|
that come from design weaknesses of the 6510 and are not needed for the |
53 |
|
|
function of single opcodes (e.g. in an instruction sequence like |
54 |
|
|
INX:INX:INX:INX, the 6510 reads every opcode twice).<P> |
55 |
|
|
|
56 |
|
|
A detailed technical description of the VIC-II can be found in an |
57 |
cebix |
1.2 |
<A HREF="http://www.cebix.net/VIC-Article.txt">article</A> I wrote. |
58 |
cebix |
1.1 |
|
59 |
|
|
</BODY> |
60 |
|
|
</HTML> |