Zum Inhalt springen

„MOS Technology VIC II“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Markierungen: Mobile Bearbeitung Mobile Web-Bearbeitung
 
(19 dazwischenliegende Versionen von 16 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Bild:MOS6569R3 chtaube061229.jpg|right|thumb|MOS 6569R3 auf einem C64-Mainboard]]
[[Datei:MOS6569R3 chtaube061229.jpg|miniatur|MOS 6569R3 auf einem C64-Mainboard]]
[[Image:GRafik VIC 8565R2 C64 II.jpg|right|thumb|Der VIC II 8565R2 für den C64-II]]
[[Datei:GRafik VIC 8565R2 C64 II.jpg|miniatur|Der VIC II 8565R2 für den C64-II]]

Der '''VIC (Video Interface Controller) II''' von [[MOS Technologies]], Nachfolger des [[MOS Technologies VIC|VIC]], ist ein [[Videochip]], der im [[Commodore International|Commodore]]-[[Heimcomputer]] [[C64]] und (als leicht erweiterter [[VIC IIE]] bzw. [[VIC III]]) im [[C128]] zum Einsatz kam. Er wurde in [[NTSC]]- (MOS 6567/MOS 8562) und [[PAL (Fernsehnorm)|PAL]]-Versionen (MOS 6569/MOS 8565) produziert.
Der '''VIC-II''' ('''Video Interface Controller-II''') von [[MOS Technology]], Nachfolger des [[MOS Technology VIC|VIC]], ist ein [[Video Display Controller]], der im [[Commodore International|Commodore]]-[[Heimcomputer]] [[Commodore 64|C64]] und (als leicht erweiterter [[VIC IIE]] bzw. [[VIC III]]) im [[Commodore 128|C128]] zum Einsatz kam. Er wurde in [[National Television Systems Committee|NTSC]]- (MOS 6567/MOS 8562) und [[Phase Alternating Line|PAL]]-Versionen (MOS 6569/MOS 8565) produziert.
Eine Besonderheit des '''VIC II''' sind seine 8 Hardware-[[Sprite (Computergrafik)|Sprite]]s mit Kollisionsabfrage.
Eine Besonderheit des VIC II sind seine 8 Hardware-[[Sprite (Computergrafik)|Sprite]]s mit Kollisionsabfrage.


== Technische Daten ==
== Technische Daten ==

[[Bild:Vic2cols.png|thumb|right|Die 16 VIC II Farben]]
[[Datei:VIC-II color map.svg|miniatur|Die 16 Farben des VIC II]]
[[Datei:VIC-II.svg|miniatur|Der MOS 6567 VIC II]]

* Erzeugung des Systemtakts für die anderen Chips
* Erzeugung des Systemtakts für die anderen Chips
* automatischer [[Refresh]] für dynamische RAMs ([[DRAM]]).
* Automatischer [[Dynamic Random Access Memory #Refresh|Refresh]] für dynamische RAMs ([[Dynamic Random Access Memory|DRAM]]).
* Bus und Speicher kann mit Prozessoren der [[6502]]-Familie ohne große Verlangsamung eines der beiden Chips geteilt werden, beide Chips greifen abwechselnd darauf zu.
* Bus und Speicher kann mit Prozessoren der [[MOS Technology 6502|6502]]-Familie ohne große Verlangsamung eines der beiden Chips gemeinsam verwendet werden, beide Chips greifen abwechselnd darauf zu.
* 16 [[Byte|kB]] Adressbereich ([[Direct Memory Access|DMA]]) für Video- und Zeichensatzspeicher
* 16 [[Byte|kB]] Adressbereich ([[Speicherdirektzugriff|DMA]]) für Video- und Zeichensatzspeicher
* separater 1000 × 4 Bit Farbspeicher, beim C64 mit statischem RAM ([[Halbleiterspeicher#Static Random Access Memory (SRAM)|SRAM]]) realisiert. (Im für die [[Hauptprozessor|CPU]] vorgesehenen Adressraum der Größe 1 kB erscheint nur ein [[Nibble]] je [[Speicheradresse|adressiertem]] Byte.)
* Separater 1000 × 4 Bit-Farbspeicher, beim C64 mit statischem RAM ([[Static random-access memory|SRAM]]) realisiert. (Im für die [[Hauptprozessor|CPU]] vorgesehenen Adressraum der Größe 1 kB erscheint nur ein [[Nibble]] je [[Speicheradresse|adressiertem]] Byte.)
* 16 Farben
* 16 Farben
* Textmodus mit 25 Zeilen zu 40 Zeichen
* Textmodus mit 25 Zeilen zu 40 Zeichen
Zeile 16: Zeile 20:
** ''Hires'' mit 8 × 8 [[Pixel]]n pro Zeichen, einer aus 16 Vordergrundfarben je Zeichen und einer für den gesamten Bildschirm geltenden Hintergrundfarbe.
** ''Hires'' mit 8 × 8 [[Pixel]]n pro Zeichen, einer aus 16 Vordergrundfarben je Zeichen und einer für den gesamten Bildschirm geltenden Hintergrundfarbe.
** ''Extended-Color Mode'' (ECM) mit 8 × 8 Pixeln pro Zeichen, einer aus 16 Vordergrundfarben und einer von 4 (aus 16) Hintergrundfarben je Zeichen, Zeichensatz auf die ersten 64 Zeichen eingeschränkt.
** ''Extended-Color Mode'' (ECM) mit 8 × 8 Pixeln pro Zeichen, einer aus 16 Vordergrundfarben und einer von 4 (aus 16) Hintergrundfarben je Zeichen, Zeichensatz auf die ersten 64 Zeichen eingeschränkt.
** ''Multi-Color'' mit 4 × 8 (doppeltbreiten) Pixeln pro Zeichen, je Zeichen eine aus 8 Vordergrundfarben, und 3 bildschirmweit geltenden weiteren Farben aus 16. Hires Zeichen und Multicolor-Zeichen können dabei beliebig gemischt werden, die Vordergrundfarbe ist nur aus den ersten 8 Farben wählbar.
** ''Multi-Color'' mit 4 × 8 (doppeltbreiten) Pixeln pro Zeichen, je Zeichen eine aus 8 Vordergrundfarben, und 3 bildschirmweit geltenden weiteren Farben aus 16. Hires-Zeichen und Multicolor-Zeichen können dabei beliebig gemischt werden, die Vordergrundfarbe ist nur aus den ersten 8 Farben wählbar.
* 2 Grafikmodi:
* 2 Grafikmodi:
** ''Hires'' mit 320 × 200 Pixeln, und einer frei wählbaren Vorder- und Hintergrundfarbe pro 8 × 8-Pixel-Feld
** ''Hires'' mit 320 × 200 Pixeln, und einer frei wählbaren Vorder- und Hintergrundfarbe pro 8 × 8-Pixel-Feld
** ''Multi-Color'' mit 160 × 200 (doppeltbreiten) Pixeln, 3 frei wählbaren Farben je 4 × 8 Pixel-Feld sowie einer bildschirmweit einstellbaren Farbe.
** ''Multi-Color'' mit 160 × 200 (doppeltbreiten) Pixeln, 3 frei wählbaren Farben je 4 × 8 Pixel-Feld sowie einer bildschirmweit einstellbaren Farbe.
* Hardware-Pixel-[[Scrolling]] (vertikal und horizontal um maximal 8 ''Hires-''Pixel)
* Hardware-Pixel-[[Bildlauf]] (vertikal und horizontal um maximal 8 ''Hires-''Pixel)
* 8 Hardware-[[Sprite (Computergrafik)|Sprite]]s mit 24 × 21 Pixeln Größe mit Kollisionsabfrage, Multicolor-Möglichkeit und getrennter Skalierbarkeit auf das jeweils Doppelte in X- und Y-Richtung.
* 8 Hardware-[[Sprite (Computergrafik)|Sprite]]s mit 24 × 21 Pixeln Größe mit Kollisionsabfrage, Multicolor-Möglichkeit und getrennter Skalierbarkeit auf das jeweils Doppelte in X- und Y-Richtung.
* Optionale [[Interrupt]]s bei Sprite-Sprite- und Sprite-Grafik-Kollisionen
* Optionale [[Interrupt]]s bei Sprite-Sprite- und Sprite-Grafik-Kollisionen
* Rasterzeilen-Interrupts
* Rasterzeilen-Interrupts
* [[Lichtgriffel]]-Funktion mit Interrupts
* [[Lichtgriffel]]-Funktion mit Interrupts
* Ausgabesignal: Y/C, getrennte [[Luminanz]] und [[Chrominanz]] (ähnlich zu [[S-Video]], nur mit geringerer Luma-Amplitude)
* Ausgabesignal: Y/C, getrennte [[Luminanz]] und [[Chrominanz]] (ähnlich wie bei [[S-Video]], nur mit geringerer Luma-Amplitude)
[[Image:VIC-II.svg|thumb|right|Der MOS 6567 VIC II]]


== Programmierung des VIC II ==
== Programmierung des VIC II ==
Eine zentrale Rolle bei der Programmierung des VIC II spielt der [[Rasterinterrupt]]. Dieser kann dazu dienen, an bestimmten Bildschirmpositionen das aktuelle Hauptprogramm anzuhalten und neue Registerinhalte in einige VIC II-Register zu laden. Auf diese Weise kann man sehr einfach den Bildschirm in mehrere verschiedene Bereiche unterteilen ([[Split Screen]]). Weiterhin kann man mit deren Hilfe recht leicht die 8 Sprites mehrfach pro Bildaufbau verwenden, so dass man sehr viel mehr Sprites darstellen kann. Diese beiden Verfahren werden von sehr vielen C64-Spielen verwendet.
Eine zentrale Rolle bei der Programmierung des VIC II spielt der [[Rasterzeileninterrupt]]. Dieser kann dazu dienen, an bestimmten Bildschirmpositionen das aktuelle Hauptprogramm anzuhalten und neue Registerinhalte in einige VIC II-Register zu laden. Auf diese Weise kann man sehr einfach den Bildschirm in mehrere verschiedene Bereiche unterteilen ([[Split Screen]]). Weiterhin kann man mit deren Hilfe recht leicht die 8 Sprites mehrfach pro Bildaufbau verwenden, so dass man sehr viel mehr Sprites darstellen kann. Diese beiden Verfahren werden von sehr vielen C64-Spielen verwendet.


Weiterhin stellt der Rahmen um die Grafik des C64 ein Problem dar, besonders bei PAL-Systemen ist dieser sehr breit. Der VIC II bietet keinerlei Register, die Darstellung von Grafik in diesem Bereich ermöglichen, allerdings kann man durch einige geschickte Registermanipulationen zur richtigen Zeit die Maskierung der Darstellung durch den Rahmen abschalten und so zumindest Sprites in diesem Bereich darstellen, so dass sich die Grafikdarstellung auf bis zu 402 Pixel Breite und in etwa 284 Pixel Höhe (bei PAL, weniger bei NTSC-Systemen) erweitern lässt.
Weiterhin stellt der Rahmen um die Grafik des C64 ein Problem dar, besonders bei PAL-Systemen ist dieser sehr breit. Der VIC II bietet keinerlei Register, die Darstellung von Grafik in diesem Bereich ermöglichen, allerdings kann man durch einige geschickte Registermanipulationen zur richtigen Zeit die Maskierung der Darstellung durch den Rahmen abschalten und so zumindest Sprites in diesem Bereich darstellen, so dass sich die Grafikdarstellung auf bis zu 402 Pixel Breite und ungefähr 284 Pixel Höhe (bei PAL, weniger bei NTSC-Systemen) erweitern lässt.


Auch die Farbauflösung in den Grafikmodi lässt sich durch geschickte Registermanipulation erhöhen. Man kann den VIC II dazu zwingen, nicht nur bei jeder achten, sondern bei jeder Rasterzeile neue Farbinformation aus dem Speicher zu laden. Das hat zur Folge, dass bei einer bildschirmfüllenden Grafik zwar mehr als 64% der Rechenzeit für die Grafikdarstellung aufgewendet wird, aber man erhält einen fast vollwertigen 16-Farben-Modus (''FLI, Flexible Line Interrupt'').
Auch die Farbauflösung in den Grafikmodi lässt sich durch geschickte Registermanipulation erhöhen. Man kann den VIC II dazu zwingen, nicht nur bei jeder achten, sondern bei jeder Rasterzeile neue Farbinformation aus dem Speicher zu laden. Das hat zur Folge, dass bei einer bildschirmfüllenden Grafik zwar mehr als 64 % der Rechenzeit für die Grafikdarstellung aufgewendet wird, aber man erhält einen fast vollwertigen 16-Farben-Modus (''FLI, Flexible Line Interpreter'').


Schnelles Scrollen von Bitmap-Grafik ist ebenfalls durch ausgefeilte Registermanipulationen möglich, horizontal kann so der Bildschirmanfang verschoben werden (''HSP - Horizontal Screen Position''), was ein viel zu rechenaufwändiges Umkopieren der gesamten Bitmap alle 8 Pixel (wie es bei herkömmlichem Hardwarescrolling nötig wäre) überflüssig macht - es muss nur der hereinscrollende Bereich neu beschrieben werden. Vertikal kann die Bitmap mittels FLD (''Flexible Line Distance'') nach unten bzw. per ''Linecrunching'' nach oben verschoben werden (''VSP - Vertical Screen Position''). Zusammen ist dieser Effekt unter c64-Programmierern als [http://codebase64.org/doku.php?id=base:agsp_any_given_screen_position AGSP] (Any Given Screen Position) bekannt.
Schnelles Scrollen von Bitmap-Grafik ist ebenfalls durch ausgefeilte Registermanipulationen möglich, horizontal kann so der Bildschirmanfang verschoben werden (''HSP Horizontal Screen Position''), was ein viel zu rechenaufwendiges Umkopieren der gesamten Bitmap alle 8 Pixel (wie es bei herkömmlichem Hardwarescrolling nötig wäre) überflüssig macht es braucht nur der hereinscrollende Bereich neu beschrieben zu werden. Vertikal kann die Bitmap mittels FLD (''Flexible Line Distance'') nach unten bzw. per ''Linecrunching'' nach oben verschoben werden (''VSP Variable Screen Position''). Zusammen ist dieser Effekt unter C64-Programmierern als AGSP (Any Given Screen Position) bekannt.<ref>codebase64.org: [http://codebase64.org/doku.php?id=base:agsp_any_given_screen_position Any Given Screen Positioning (AGSP) HSP/VSP with a line crunch]</ref>


== Siehe auch ==
{{Siehe auch|DYCP}}

[[DYCP]]
== Einzelnachweise ==
<references />


== Weblinks ==
== Weblinks ==
*[http://www.cebix.net/VIC-Artikel.txt VIC II Spezifikation]
* [http://www.cebix.net/VIC-Artikel.txt VIC II-Spezifikation]


{{Navigationsleiste Commodore}}
{{Navigationsleiste Commodore}}


[[Kategorie:Commodore]]
[[Kategorie:Commodore-Chip]]
[[Kategorie:Grafikchip]]
[[Kategorie:Grafikchip]]
[[Kategorie:MOS Technology]]

[[en:MOS Technology VIC-II]]
[[it:MOS Technology VIC-II]]
[[no:Vic-II]]
[[pl:MOS Technology VIC-II]]
[[sv:MOS Technology VIC-II]]

Aktuelle Version vom 19. Juli 2023, 00:39 Uhr

MOS 6569R3 auf einem C64-Mainboard
Der VIC II 8565R2 für den C64-II

Der VIC-II (Video Interface Controller-II) von MOS Technology, Nachfolger des VIC, ist ein Video Display Controller, der im Commodore-Heimcomputer C64 und (als leicht erweiterter VIC IIE bzw. VIC III) im C128 zum Einsatz kam. Er wurde in NTSC- (MOS 6567/MOS 8562) und PAL-Versionen (MOS 6569/MOS 8565) produziert. Eine Besonderheit des VIC II sind seine 8 Hardware-Sprites mit Kollisionsabfrage.

Technische Daten

[Bearbeiten | Quelltext bearbeiten]
Die 16 Farben des VIC II
Der MOS 6567 VIC II
  • Erzeugung des Systemtakts für die anderen Chips
  • Automatischer Refresh für dynamische RAMs (DRAM).
  • Bus und Speicher kann mit Prozessoren der 6502-Familie ohne große Verlangsamung eines der beiden Chips gemeinsam verwendet werden, beide Chips greifen abwechselnd darauf zu.
  • 16 kB Adressbereich (DMA) für Video- und Zeichensatzspeicher
  • Separater 1000 × 4 Bit-Farbspeicher, beim C64 mit statischem RAM (SRAM) realisiert. (Im für die CPU vorgesehenen Adressraum der Größe 1 kB erscheint nur ein Nibble je adressiertem Byte.)
  • 16 Farben
  • Textmodus mit 25 Zeilen zu 40 Zeichen
  • 3 Textmodi:
    • Hires mit 8 × 8 Pixeln pro Zeichen, einer aus 16 Vordergrundfarben je Zeichen und einer für den gesamten Bildschirm geltenden Hintergrundfarbe.
    • Extended-Color Mode (ECM) mit 8 × 8 Pixeln pro Zeichen, einer aus 16 Vordergrundfarben und einer von 4 (aus 16) Hintergrundfarben je Zeichen, Zeichensatz auf die ersten 64 Zeichen eingeschränkt.
    • Multi-Color mit 4 × 8 (doppeltbreiten) Pixeln pro Zeichen, je Zeichen eine aus 8 Vordergrundfarben, und 3 bildschirmweit geltenden weiteren Farben aus 16. Hires-Zeichen und Multicolor-Zeichen können dabei beliebig gemischt werden, die Vordergrundfarbe ist nur aus den ersten 8 Farben wählbar.
  • 2 Grafikmodi:
    • Hires mit 320 × 200 Pixeln, und einer frei wählbaren Vorder- und Hintergrundfarbe pro 8 × 8-Pixel-Feld
    • Multi-Color mit 160 × 200 (doppeltbreiten) Pixeln, 3 frei wählbaren Farben je 4 × 8 Pixel-Feld sowie einer bildschirmweit einstellbaren Farbe.
  • Hardware-Pixel-Bildlauf (vertikal und horizontal um maximal 8 Hires-Pixel)
  • 8 Hardware-Sprites mit 24 × 21 Pixeln Größe mit Kollisionsabfrage, Multicolor-Möglichkeit und getrennter Skalierbarkeit auf das jeweils Doppelte in X- und Y-Richtung.
  • Optionale Interrupts bei Sprite-Sprite- und Sprite-Grafik-Kollisionen
  • Rasterzeilen-Interrupts
  • Lichtgriffel-Funktion mit Interrupts
  • Ausgabesignal: Y/C, getrennte Luminanz und Chrominanz (ähnlich wie bei S-Video, nur mit geringerer Luma-Amplitude)

Programmierung des VIC II

[Bearbeiten | Quelltext bearbeiten]

Eine zentrale Rolle bei der Programmierung des VIC II spielt der Rasterzeileninterrupt. Dieser kann dazu dienen, an bestimmten Bildschirmpositionen das aktuelle Hauptprogramm anzuhalten und neue Registerinhalte in einige VIC II-Register zu laden. Auf diese Weise kann man sehr einfach den Bildschirm in mehrere verschiedene Bereiche unterteilen (Split Screen). Weiterhin kann man mit deren Hilfe recht leicht die 8 Sprites mehrfach pro Bildaufbau verwenden, so dass man sehr viel mehr Sprites darstellen kann. Diese beiden Verfahren werden von sehr vielen C64-Spielen verwendet.

Weiterhin stellt der Rahmen um die Grafik des C64 ein Problem dar, besonders bei PAL-Systemen ist dieser sehr breit. Der VIC II bietet keinerlei Register, die Darstellung von Grafik in diesem Bereich ermöglichen, allerdings kann man durch einige geschickte Registermanipulationen zur richtigen Zeit die Maskierung der Darstellung durch den Rahmen abschalten und so zumindest Sprites in diesem Bereich darstellen, so dass sich die Grafikdarstellung auf bis zu 402 Pixel Breite und ungefähr 284 Pixel Höhe (bei PAL, weniger bei NTSC-Systemen) erweitern lässt.

Auch die Farbauflösung in den Grafikmodi lässt sich durch geschickte Registermanipulation erhöhen. Man kann den VIC II dazu zwingen, nicht nur bei jeder achten, sondern bei jeder Rasterzeile neue Farbinformation aus dem Speicher zu laden. Das hat zur Folge, dass bei einer bildschirmfüllenden Grafik zwar mehr als 64 % der Rechenzeit für die Grafikdarstellung aufgewendet wird, aber man erhält einen fast vollwertigen 16-Farben-Modus (FLI, Flexible Line Interpreter).

Schnelles Scrollen von Bitmap-Grafik ist ebenfalls durch ausgefeilte Registermanipulationen möglich, horizontal kann so der Bildschirmanfang verschoben werden (HSP – Horizontal Screen Position), was ein viel zu rechenaufwendiges Umkopieren der gesamten Bitmap alle 8 Pixel (wie es bei herkömmlichem Hardwarescrolling nötig wäre) überflüssig macht – es braucht nur der hereinscrollende Bereich neu beschrieben zu werden. Vertikal kann die Bitmap mittels FLD (Flexible Line Distance) nach unten bzw. per Linecrunching nach oben verschoben werden (VSP – Variable Screen Position). Zusammen ist dieser Effekt unter C64-Programmierern als AGSP (Any Given Screen Position) bekannt.[1]

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. codebase64.org: Any Given Screen Positioning (AGSP) HSP/VSP with a line crunch