"Endlich kommen wir zu der Anweisung, auf die wir alle gewartet haben - SEX!"
/ aus dem Artikel über den Mikroprozessor CDP1802 /

In den frühen 1970er Jahren waren
einfache elektronische Spiele wie
Pong in den USA sehr beliebt (in der UdSSR wurden ihre
Analoga in 5-10 Jahren zum Verkauf angeboten). In der Regel hatten solche Spiele keinen Mikroprozessor und Speicher im modernen Sinne dieser Wörter, sondern waren auf starrer Logik aufgebaut. Dementsprechend machten austauschbare Patronen nicht viel Sinn, und wo sie waren - sie waren nur eine Reihe von Jumpern, die das gewünschte Spiel enthielten.
1977 wurden fast gleichzeitig zwei Konsolen veröffentlicht:
Fairchild Channel F und
RCA Studio II . Dies waren die ersten Spielekonsolen in Form von vollwertigen Computern - mit einem Mikroprozessor und austauschbaren Kassettenprogrammen. Das RCA Studio II, das diskutiert wird, wird nicht nur von
RCA entwickelt , sondern von einer bestimmten Person -
Joseph A. Weisbecker (wie die gesamte COSMAC-Architektur). .
Das erste derartige Gerät -
System 00 , auch bekannt als COSMAC FRED (1971), war ein Prototyp und wurde nicht in Massenproduktion hergestellt.
Der Prozessor darin wurde nach der üblichen Logik implementiert (in
FRED2 - auf zwei Chips namens CDP1801 R und U, die 1973 erschienen). RAM war im Bereich von 256 Bytes - 4 kb, zusätzlich hatte FRED2 ein eingebautes Tonbandgerät.
Die erste kommerzielle Implementierung der COSMAC-Architektur war der
COSMAC ELF . 1976 wurde ELF als Computer für Schinken positioniert (eine Reihe von Artikeln wurde in der Zeitschrift Popular Electronics veröffentlicht) und war eine kleine Platine mit Kippschaltern, Anzeigen, einem CDP1802-Mikroprozessor (derselbe 1801, aber bereits in einem Chip) und 256 Byte RAM. Für ihn gab es zusätzliche Erweiterungskarten, mit denen Grafiken auf dem Monitor angezeigt werden konnten (unter Verwendung des CDP1861-Chips), eine externe Tastatur und ein Tonbandgerät wurden angeschlossen. Basierend auf ELFs mit Erweiterungen erschienen ELF II und VIP. In COSMAC-ROMs gab es eine virtuelle Maschine namens CHIP-8, die für primitive Spiele (Befehle zum Ausgeben und Verschieben von Software-Sprites, Generieren von Zufallszahlen usw.) geschärft wurde. Es gab andere primitive Computer und Terminals, die auf dieser Architektur basierten.
Alle diese Geräte waren direkte Vorgänger von RCA Studio II und verfügen über eine äußerst enge Hardware- und Softwarearchitektur.
RCA Studio II wurde 1977 veröffentlicht und kostete dann 150 US-Dollar (600 US-Dollar für aktuelles Geld). Wie so oft ist der erste auf dem Markt nicht unbedingt der erfolgreichste. Im Jahr 2008
erkannte das PC World Magazine diese Konsole als die schlechteste Spielekonsole aller Zeiten an (was im Prinzip nicht weit von der Wahrheit entfernt ist). Ein Schwarzweißbild von Quadraten, das Fehlen von Joysticks (statt zwei Felder mit 10 Tasten) und ein Dutzend Spiele - gelinde gesagt nicht zufriedene Käufer.
Darüber hinaus wurden alle Spiele (sowohl eingebaut als auch auf Kassetten verkauft) im Pseudocode der virtuellen ST2-Maschine geschrieben (dieselbe Idee wie bei CHIP-8 in COSMACs), was sie sehr langsam machte.
RCA gelang es, ungefähr 64.000 Einheiten von RCA Studio II freizugeben, ohne die später erschienenen Klone (Toshiba Visicom, Conic M-1200 usw.). Mit dem Aufkommen von
Atari VCS schieden das veraltete RCA Studio II und Fairchild Channel F aus dem Kampf aus.
CPU
Als Chiphersteller wählte RCA sein eigenes Produkt als Set-Top-Box-Prozessor - den
RCA CDP1802- Mikroprozessor, der mit 1,78 MHz arbeitet und in CMOS-Technologie hergestellt wird.
Sein Vorgänger war der CDP1801, ein Zwei-Chip-Prozessor (voll kompatibel mit 1802):
CDP1802 ist bekannt für seine strahlungsbeständige Version (Silizium auf Saphir), in der es beispielsweise in der interplanetaren Station
Galileo verwendet wurde, die in den 1990er Jahren nach Jupiter flog (es gab 6 solcher Prozessoren), sowie in
MAGSAT .
Der Prozessor hat ein ziemlich kniffliges Registernutzungsschema. Es hat einen 8-Bit-Akkumulator D und 16 16-Bit-Register - R0..RF (R0-R15), von denen jedes abhängig vom Inhalt des 4-Bit-Registers P (das auf eines von R zeigt) ein Befehlszeiger werden kann, der änderbar ist SEP Rn Team. Mit anderen Worten - es gibt keinen einzelnen PC im Prozessor!
Außerdem kann jeder von R0 ... R15 zum Index (Adresse) werden. Die Auswahl wird basierend auf dem Wert im 4-Bit-Register X (geändert durch den Befehl SEX Rn) bestimmt, wonach das ausgewählte R für einige Befehle als indiziert betrachtet wird.
Das Adressregister für DMA ist immer R0. Innerhalb des Interrupts ist der Befehlszähler R1.
Es gibt ein 8-Bit-Register T, mit dem die X- und P-Register automatisch gespeichert werden, wenn ein Interrupt auftritt. Interrupts werden aktiviert, indem das IE Interrupt Enable-Flag über RET- oder DIS-Befehle gesetzt wird.
Die 4-Bit-Register I und N enthalten den vom Prozessor ausgeführten aktuellen Befehl.
Es gibt ein Flaggenregister - DF. Genauer gesagt, ein Flag, da es einstellig ist und nur ein Übertragsflag enthält.
Zusätzlich hat der Prozessor einen Einzelbit-Ausgangsport Q, dessen Zustand durch die Befehle SEQ und REQ geändert wird.
Wie bei vielen Prozessoren dieser Generation fehlt hier der Stack im üblichen Sinne (es gibt weder PUSH-, POP-Befehle noch den Stack-Zeiger) und wird bei Bedarf durch die vorhandenen Anweisungen implementiert.
Es gibt auch keine herkömmlichen Anweisungen zum Aufrufen von Routinen. Der Übergang zum Unterprogramm erfolgt mit dem Befehl SEP Rn, der, wie ich mich erinnere, das angegebene Rn-Register zu einem Befehlszähler macht. Zur Rückkehr wird derselbe SEP-Befehl verwendet, jedoch mit einem Register, das vor dem Aufruf der Befehlszähler war. Oder (in einer universelleren, aber langsameren Version) MARK und RET werden verwendet.
Zusätzlich zu den herkömmlichen bedingten und bedingungslosen Sprüngen (übrigens - sie sind alle absolut) gibt es mehrere SKIP-Anweisungen, die, wenn die Bedingung erfüllt ist, den nächsten SKIP-Befehl überspringen (zwei Bytes). Bedingungsloses Überspringen ist ebenfalls vorgesehen.
Der 1802-Prozessor wird häufig als einer der ersten RISC-Prozessoren bezeichnet. Im gleichen Zusammenhang werden jedoch beispielsweise 6502 sowie einige andere erwähnt. Es ist sicher, dass die Architektur nicht ganz gewöhnlich ist und aus Sicht der Programmierung gemischte Gefühle hervorruft. Einerseits gibt es bis zu 16 16-Bit-Register. Zum anderen kann ihr Inhalt direkt nur um eins reduziert und erhöht werden. Das Setzen einer Konstante in Rn sieht beispielsweise folgendermaßen aus:
ldi $01 ; const -> D plo r6 ; D -> R6.0 ldi $02 ; const -> D phi r6 ; D -> R6.1
Daher bewegt der Löwenanteil des Codes Bytes hin und her.
Von den Übergängen nach Bedingung gibt es tatsächlich nur einen Übergang zu Null (nur die Situation, wenn 0 im Akkumulator D ist) und das Übertragungsflag werden berücksichtigt. Typische Schleifen sind wie folgt:
loop: ... dec r7 ; R7-- glo r7 ; R7 -> D bnz loop loop: ... adi 2 ; D = D + const xri $07 ; compare using XOR. (D == const) -> D bnz loop
Alle arithmetischen und logischen Anweisungen funktionieren nur mit Batterie D.
Zusätzlich zu dem von SEQ / REQ gesteuerten Einzelbit-Port gibt es auch einen Vier-Bit-Port, der von den OUT / INP-Befehlen gesteuert wird. Leider wird es in RCA Studio II nicht verwendet.
Speicher
Es gibt: 2 KB ROM (BIOS + fünf integrierte Spiele) 512 Byte RAM (die Hälfte ist für Video reserviert)
Speicherkarte
000-2FF ROM RCA System ROM : SP2 300-3FF ROM RCA System ROM : BIOS 400-7FF ROM ( ) 400-7FF ROM ( ) 1024 800-8FF RAM (256 ) 900-9FF RAM (256 ) A00-BFF ROM ( ) C00-DFF --- , 800-9FF E00-FFF ROM ( )
Es ist besonders zu beachten, dass für Spiele und Programme auf Kassetten nur ein Teil des BIOS verfügbar ist - dasjenige, das SP2 (im Großen und Ganzen unnötig), die Bilder von Zahlen von 0 bis 9 und den Standard-Interrupt-Handler für Video enthält.
VIDEO
Für die Grafik wird der
RCA CDP1861- Chip verwendet - der sogenannte "Pixie".
Das Standard-RCA-Studio II verfügt über einen Standardausgang mit nur einer Antenne (RF). Die Leute
verwandeln es jedoch in Composite, damit die Qualität besser wird (ich habe fast „für eine bessere Farbwiedergabe“ geschrieben :))
Technisch bietet der Videocontroller eine maximale Auflösung von 64 x 128 in zwei Farben (Schwarzweiß). Dies erfordert jedoch 1024 Byte Videospeicher, und in Studio II beträgt die Gesamtmenge an RAM 512 Byte. Daher beträgt die Auflösung 64 x 32 (was 256 Byte erfordert). Die horizontale Auflösung (64) ist fest. In einer Zeile mit 64 Pixeln werden immer 8 Bytes angezeigt, und dies geschieht für 14 Prozessorzyklen.
Der BIOS-Interrupt-Handler wird verwendet, um Speicher ($ 900- $ 9ff) auf dem Bildschirm anzuzeigen. Der Interrupt wird vom Videocontroller ausgelöst und erfolgt 60 Mal pro Sekunde (NTSC). Der BIOS-Prozessor führt alle erforderlichen Vorgänge aus. Das ausführbare Programm muss nur den Videospeicher ändern, in dem jedes Bit direkt einem schwarzen oder weißen Punkt entspricht (von links nach rechts, von oben nach unten).

Nichts hindert Sie jedoch daran, Ihren eigenen Handler zu schreiben. Der einfachste Fall ist die Auflösung von 64x128, wie es für einen Videocontroller selbstverständlich ist. Für ihn reicht es im Handler aus, die Videospeicheradresse in R0 zu schreiben (woher kommen die Daten für den Bildschirm), und die Bytes werden über den DMA selbst angezeigt, wodurch der Frame ausgefüllt wird. Die Situation ist mit anderen vertikalen Auflösungen als 128 komplizierter. Dort müssen Sie Verzögerungen eingeben und duplizieren Daten durch Ändern von R0 (siehe Beschreibung von cdp1861 und BIOS-Quelle).
Im Prinzip können Sie sogar eine variable vertikale Auflösung vornehmen, nichts an einen Teil des Bildschirms ausgeben und außerdem ROM, nicht RAM (oder teilweise ROM und teilweise RAM) als Videospeicher angeben. Sie können auch vertikales Scrollen implementieren und die Initiale in R0 ändern Die Adresse, von der aus Daten an die Steuerung ausgegeben werden.
Beachten Sie, dass am INT-Ausgang des Videocontrollers das Gerät zwei Zeilen erscheint, bevor der Strahl den sichtbaren Bereich erreicht. Daher startet der Interrupt-Handler normalerweise mit einer Verzögerung, mit der Sie den Speicher pünktlich anzeigen können.
Der Videocontroller verfügt außerdem über einen EFX-Ausgang, auf dem 0 für 4 Zeilen angezeigt wird, bevor der Strahl im sichtbaren Bereich und dann für die letzten 4 Zeilen dieses Bereichs angezeigt wird. Der EFX-Ausgang ist mit dem Prozessor EF1 verbunden und sein Status kann mit dem Befehl B1 (BN1) überprüft werden.
Die typische Erwartung eines Rückstrahls entlang des Rahmens wird wie folgt implementiert:
... delay: bn1 delay ; wait for EFX in video chip ...
Wie oben erwähnt, gibt es im ROM keine Bilder von Buchstaben und Zeichen. Es gibt jedoch immer noch Zahlen (schließlich müssen Sie in integrierten Spielen die Punkte und die Spielernummer irgendwie anzeigen). Aber auch hier konnten sie sparen:
Wie Sie sehen können, werden die Zahlen zusammengeklebt, so dass die verbleibenden von mehreren benachbarten erhalten werden.
SOUND
Sagen wir einfach, dass es Geräusche gibt. Aber nicht mehr. Der NE555 wird mit einer Umreifung an den einzelnen Einzelbit-Ausgangsanschluss des CDP1802 angeschlossen und dann an den in die Konsole eingebauten Lautsprecher angeschlossen. Wenn ein Gerät an den Eingang des RST NE555 geliefert wird (über den Befehl SEQ-Prozessor), beginnt er mit einer Frequenz von 625 Hz zu piepen. Bei Null (mit dem Befehl REQ) stoppt der Piepton. Eigentlich ist das alles. Es gibt jedoch immer noch einen Kondensator, aufgrund dessen zu Beginn des Quietschens die Frequenz im Verlauf von 0,4 Sekunden allmählich um die Hälfte abnimmt (d. H. Es wird ein zusätzliches Kreischen erhalten).

Im Standard-BIOS-Interrupt-Handler gibt es zusätzlich zu dem für das Video verantwortlichen Teil ein Teil, das den Inhalt einer bestimmten Speicherzelle überprüft und, wenn es keine Null gibt, das Quietschen einschaltet und den Inhalt der Zelle $ 08CD zyklisch verringert (wenn die Null erreicht ist, wird das Quietschen ausgeschaltet). Sie können sich also nicht um die Selbstaufnahme im Port kümmern, sondern stellen einfach die Dauer des Quietschens ein und es tritt im Hintergrund auf, ohne das Programm anzuhalten:
ldi $8cd & $ff plo rf ldi 250 ; str rf ...
Das gleiche kann auch manuell gemacht werden (nach dem Ausschalten von Interrupts):
; sex r3 ; set X to R3 dis ; return X to R5, P to R3, 0-IE, R3=R3+1 db 53h ; forces X=5 P=3 - which is no change ; seq ; ldi 250 ; delay plo r6 delay: dec r6 glo r6 bnz delay ; req ; sex r3 ; set X to R3 ret ; return X to R5, P to R3, 1-IE, R3=R3+1 db 53h ; forces X=5 P=3 - which is no change
PROGRAMME
In den 1970er Jahren wurden etwas mehr als ein Dutzend Spiele und mehrere andere Programme geschrieben (hauptsächlich von RCA selbst). Fast alle von ihnen wurden nicht im Assembler geschrieben, sondern im
Pseudocode - im Konsolen-ROM befindet sich eine spezielle Interpreter-Virtual Machine ST2. Es ist schwierig, genau zu sagen, was eine solche Entscheidung motiviert hat. Die Idee war höchstwahrscheinlich, Speicherplatz zu sparen - Spiele haben tatsächlich ein deutlich geringeres Volumen. Im Allgemeinen wachsen ST2-Ohren von einer ähnlichen VM namens
CHIP-8 , die in COSMACs verwendet wird. Obwohl die beiden VMs nicht miteinander kompatibel sind, wurde bereits in den 2000er Jahren der CHIP-8-Interpreter für RCA Studio II geschrieben. Angesichts der extremen Ähnlichkeit der Architekturen ist es nicht verwunderlich, dass, wie der Interpreter schreibt, Spiele mit COSMACs, für die nicht viel Speicher erforderlich war, unter RCA Studio II problemlos gestartet wurden.
Leider arbeiten VMs auf einer solchen Architektur sehr langsam, was einen unauslöschlichen Eindruck auf die Spiele selbst hinterlässt. Später, im Jahr 2013, schrieb Paul Robson etwa ein Dutzend weitere Spiele - bereits in Assembler - und
verteilte sie mit der Quelle.
ENTWICKLUNG
Zeugen zufolge wurde die Entwicklung für RCA Studio II zunächst auch ohne Assembler durchgeführt - auf COSMAC ELF und FRED2.
Derzeit besteht keine Notwendigkeit, so zu leiden. Es gibt einen anständigen Emulator für Windows -
Emma mit einem guten Debugger (er emuliert übrigens nicht nur RCA Studio II, sondern alle COSMACs).
Als Assembler habe ich zuerst versucht, den
Cross-Assembler a18 zu verwenden, aber aus mehreren Gründen habe
ich mich auf
asmx konzentriert , das auch Python-
Skripte enthält , um ein fertiges Image der Kassette zu generieren (es hat die Erweiterung .st2).
Eine kurze Einführung in Assembler 1802 finden Sie
hier . Das einfachste test.asm für RCA Studio II mit einer Endlosschleife würde folgendermaßen aussehen:
.include "1802.inc" .org 400h .db 4,2 ; SYS $402 start: br start ; some code .end
Beachten Sie die Anweisung ".db 4,2". Dies ist die Adresse des ersten ausführbaren Befehls, d.h. ".db> (Start), <(Start)".
Einfache Schleifenimplementierung:
ldi 50 ; D plo r6 ; D r6 loop: dec r6 ; r6 = r6 -1 glo r6 ; r6 D bnz loop ; loop D
Verwenden der SKIP-Anweisungen:
; q = 0 $FF00 , q=1 $FF loop: ghi r1 ; hi(r1) -> D lsz ; 2 , D (.. seq) req ; 0 -> Q skp ; 1 (.. inc r1) seq ; 1 -> Q inc r1 ; r1 = r1 + 1 br loop ; ...
Zum Üben in einem sauberen Assembler CDP1802 ist es bequem, den Online-Assembler-Emulator asm80 zu verwenden. Die Erweiterung der generierten Quelldatei muss .a18 sein
Um eine fertige Anwendung auf realer Hardware in der Natur zu starten, gibt es eine
Multicart- Kassette zum
40-jährigen Jubiläum von RCA Studio II . Ich hatte es nicht, aber tnt23 hat eine der verfügbaren Kassetten mit einem Spiel für den im Sockel installierten EEPROM AT28C16-Chip (2k x 8) neu hergestellt.
Um auf dem Stück Eisen zu laufen, steckte ich den Chip jedes Mal in den Programmierer, ließ ihn flashen, ordnete ihn in eine umgebaute Patrone um und schaltete die Konsole ein. Und so jedes Mal.
INTRO NO SHADERS
Um die Plattform zu entwickeln, habe ich 256 Bytes Intro geschrieben (vorgestellt bei
Chaos Constructions'2018 im
Tiny Intro- Wettbewerb).
Im Gegensatz zu beispielsweise
Vectrex , wo Sie ein spektakuläres Bild erhalten können, selbst wenn Sie nur eine Kurve zeichnen, oder von
Videopac , wo das ROM bereits eine Reihe von Bildern von kleinen Männern enthält, haben wir hier eine traurige Situation - gewöhnlich, jedem vertraut, Rastergrafiken, aber Schwarzweiß und Auflösungen unter nirgendwo (64x32). Im ROM gibt es nicht nur Bilder, sondern auch Zeichen. Sound - und das ist auf 625Hz Quietschen begrenzt.
So wurde Musik, alle Arten von typischen Plasmen, Lichtern und im Allgemeinen alles, was auf nicht quadratische Konturen hindeutet, gestrichen. Der Text in irgendeiner Form wurde ebenfalls gestrichen - es würde nicht genug Platz für die Buchstaben geben.
Infolgedessen wurde beschlossen, a) zu scrollen, b) etwas zu wiederholen, c) mit unterschiedlichen Geschwindigkeiten. Es stellte sich wie folgt heraus:
Wie oben erwähnt, gibt es im Videocontroller kein Hardware-Scrollen. Niedrige Auflösung und Schwarzweiß haben jedoch nicht nur Minuspunkte, sondern auch Pluspunkte - weniger Bytes werden überschrieben.
Ich habe Zeile für Zeile mit dem Befehl shlc gescrollt (Linksverschiebung mit Silbentrennung). Bei Ausführung in einer Schleife stellt sich heraus, dass das Bit ganz links vom nächsten Byte nach links verschoben wird und nicht verschwindet, sondern im Übertragsflag (DF) platziert wird. Dementsprechend nimmt das nächste shlc in einer Schleife es auf und setzt es in das Byte links. Es stellt sich ein einfaches Scrollen der gesamten Zeile heraus, von denen acht in einem Zyklus scrollen (da es praktisch ist, Muster von Wolken und Häusern Byte für Byte aufzunehmen).
... scrollret: sep r3 ; return from subroutine ; scroll: ; set lines counter ldi LINES ; const -> D plo r10 ; D -> Rn.0 nextline: ; set bytes counter ldi BYTES_PER_LINE ; const -> D plo r7 ; D -> Rn.0 ; set carry to scroll glo r12 ; Rn -> D shr ; get one bit to set carry plo r12 ; D -> Rn.0 (save shifted byte) nextbyte: ldx ; Rx -> D shlc ; D = D << 1 (carry -> DF) stxd ; D -> M(Rx), Rx-- dec r7 ; Rn-- glo r7 ; Rn -> D bnz nextbyte dec r10 ; Rn-- glo r10 ; Rn -> D bnz nextline ; one line (8 bytes) scrolled, let's scroll next br scrollret ...
Bitte beachten Sie, dass sich der Einstiegspunkt in das Unterprogramm auf der Bildlaufbeschriftung befindet. Um zurückzukehren, wird nicht nur sep r3 ausgeführt, sondern zuerst br scrollret und sep r3 von dort.
Dies geschieht, um r14 (den Zähler der Befehle innerhalb der Subroutine) im richtigen Zustand zu belassen, dann kann die Subroutine immer wieder aufgerufen werden (mit sep r14).
Natürlich werden hier bei Aufrufen keine Variablen gespeichert - alle Variablenregister sind global.
Die Scroll-Subroutine wird in der allgemeinen Schleife zweimal aufgerufen - jedes zweite Mal für Häuser und jedes vierte Mal für Wolken (sie scrollen am langsamsten). Der allgemeine Zyklus wird in umgekehrter Richtung des Strahls synchronisiert (Straße, Häuser, Wolken - Zeit zum Zeichnen, die Sterne sind statisch). Bei der Straße rollt nur eine Linie - die Straßenränder werden einfach mit Linien gezeichnet.
Aus Gründen des Interesses habe ich versucht, den gesamten Bildschirm zu scrollen - er passt nicht rechtzeitig in die Rückwärtsbewegung des Strahls.
Häuser werden nach Mustern festgelegt:
... house1: .db %00000000 .db %11111111 .db %10101010 .db %11111111 .db %10101010 .db %11111111 .db %00000000 .db 1 house2: .db %00000000 .db %00011111 .db %01110101 .db %01011111 .db %01110101 .db %00011111 .db %00000000 .db 1 ...
und ein Tablet mit einem Link zu jedem:
... commands: .db house5 .db house2 .db house1 .db house3 ...
In einem Zyklus wird dieses Etikett nacheinander sortiert.
Im Gegensatz zu Häusern stellen beide Wolken der Einfachheit halber ein Muster dar, das einfach zyklisch rollt.
Eine bestimmte Anzahl von Bytes könnte aufgrund der Ausgabe von Wolken nach dem gleichen Prinzip wie bei Häusern sowie aufgrund der programmierten Lücken zwischen den Mustern gewonnen werden (jetzt wiederholen sich nur noch Nullen in den Daten).
Das Problem ist jedoch auch, dass einige Register vom Interrupt-Handler verwendet werden - R0, R1, R2, R8, R9, R11 können nicht geändert werden. Das Speichern von Variablen im Speicher ist eine Menge zusätzlicher Bytes zum Schreiben und Lesen (ganz zu schweigen von Taktzyklen).
Im Idealfall sollte das Scrollen wahrscheinlich im Interrupt-Handler erfolgen. Dazu müssten Sie jedoch anstelle des Standardhandlers einen eigenen Handler schreiben. Dies wäre korrekter (und könnte im Übrigen ein paar R-Register freigeben), aber höchstwahrscheinlich würde am Ende nicht alles zusammen in 256 Bytes passen.
Die Sterne sind statisch, aber ein paar Punkte zu zeichnen, die zufällig angeordnet aussehen, war unerwartet nicht so einfach:
... loop: ldn r4 ; M[Rn] -> D ani %00000010 ; D AND const -> D bdf skip ; jump if carry ldi 0 ; const -> D skip: stxd ; D -> M(Rx), Rx-- glo r4 ; Rn -> D adi 47 ; D + const -> D plo r4 ; Rn -> D glo r15 ; Rn -> D bnz loop ...
Hier werden in einem Zyklus Daten aus dem BIOS entnommen, die ausgedünnt und überschüssige Bits maskiert werden. Die Maske (für ani) und die Tonhöhe (für adi) sind handverlesen.
Was den Ton betrifft, werden die Autotöne aufgrund der Unfähigkeit, die Frequenz zu ändern, einfach nachgeahmt.
Übrigens - ich denke, dass dieses Intra die erste Demoszenenarbeit für RCA Studio II ist :)
EPILOG
Nach Studio II hat RCA mehrere Instanzen von
RCA Studio III veröffentlicht . Unterschiede in zwei Dingen - die Farbe erschien (während sich die Auflösung nicht geändert hat) und der Klang ist besser (Sie können bereits nicht eine, sondern 255 verschiedene Frequenzen ausgeben).
Es ist interessant, dass beide Maschinen in beide Richtungen miteinander kompatibel sind, auch durch die Verwendung des gleichen Zwischencodes mit dem Interpreter.
Es ist auch bekannt, dass es Pläne für RCA Studio IV gab. Die Auflösung hätte auf 64x128 erhöht werden müssen, und sogar ein neuer Pseudocode-Interpreter wurde bereits geschrieben.
Der CDP1802 wird weiterhin hergestellt - zuerst von Hughes, dann von
Intersil (Renesas).Wenn Sie mehr über diesen besonderen Zweig der Geschichte der Entwicklung der Computertechnologie erfahren
möchten , empfehle ich, die Wörter "
COSMAC" und "CDP1802 " zu
googeln .
Sitelinks