Anmerkungen zum „GMC-4 Spielecomputer“-Buch

Gmc4

Das GMC-4-Buch ist zwar mittlerweile schon fast ein Jahr alt, aber es macht mir immer noch Spaß mit dem kleinen Computer zu spielen. Dennoch fallen mir immer wieder Dinge auf, die man hätte besser machen können.  Das geht wohl nicht nur mir so, denn vor kurzen erreichte mich die Mail eines Lesers, der neben seiner Begeisterung auch ein paar Anmerkungen formuliert hat.

An dieser Stelle vielen Dank Arnd Duschek, der sich die Mühe gemacht hat das ganze Buch durchzuarbeiten und Verbesserungsvorschläge zu formulieren.

Kapitel 2.2 Klingeltöne und mehr

S.22 Mitte

„…eine Dauer, die als Vielfaches von 0,1 Sekunden angegeben wird.“

Das stimmt so nicht. Vielmehr stehen die für die Dauer möglichen Werte noch nicht einmal in einem linearen Verhältnis zueinander, sondern repräsentierten konkrete Längen aus der Notenlehre:

WertDauer
0sechzehntel Note
1achtel Note
2achtel Note, punktiert
3viertel Note
5viertel Note, punktiert
7halbe Note
Bhalbe Note, punktiert
Fganze Note

 

„Ein A markiert den Start, dann…“

Vorne muss kein A stehen, sondern es sind die Werte 0…F zulässig, die das Gesamttempo der Melodie bestimmen!

Kapitel 3.2 Das erste Programm

S.46 Mitte

„Starten des Programms: <RESET> <1> <RUN>“

Das stimmt natürlich. Aber für Programmier-Anfänger ist es wirklich wissenswert, dass man ein Programm auch schrittweise ausführen kann.

Es gibt folgende Möglichkeiten:

TastenkombinationModusLEDs zeigen Adresse anTasten-Ton
Reset, 1, RunRunNeinNein
Reset, 2, RunRunJaNein
Reset, 5, RunStepNeinNein
Reset, 6, RunStepJaJa

 

Im STEP-Mode wird das Programm dann mittels der INCR-Taste schrittweise ausgeführt.

Kapitel 3.5 Ein Speicher-Rechner

S.53

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
025 (statt 6)
06F0D (statt F0C)0D (statt 0C)
0D (statt 0C)E0 (statt 0E)

 

Der Jump-Befehl (F0A) ab Adresse 0A verbraucht 3 Nibbles in den Adressen 0A, 0B und 0C, weshalb der nachfolgende CAL bei 0D (und eben nicht bei 0C) beginnt.

„…geht es weiter bei Adresse 0C, sonst bei Adresse 0A, …“

Das muss verbessert werden zu:

„…geht es weiter bei Adresse 0D, sonst bei Adresse 09, …“

Kapitel 3.7 LED- und Soundausgabe

S.56

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
00(statt 5)

 

S.57

„Wenn diese Rechnung einen Übertrag verursacht, gibt es einen Piepton und die sechste LED leuchtet auf.“

Leider bleibt diese LED ab diesem Zeitpunkt dauerhaft eingeschaltet, selbst wenn man danach wieder eine Addition ohne Übertrag ausführt. Hinter Adresse 09 (Befehl A0) könnte man daher noch ein TIY 6 und ein CAL RSTR einfügen! Natürlich muss dann aber auch der JUMP-Befehl an Adresse 06 angepasst werden, weil sich die Zieladresse 0D durch das Einfügen der Befehle nach hinten verschiebt.

Kapitel 3.8 Der bedienerfreundliche Rechner

S.60

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
0302 (statt 00)Springe nach 02 (statt nach 00)
0F(statt 5)

Kapitel 4.1 Sekundenzähler

S.65

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
0BY=Y+1 (statt Y=A+1)

Kapitel 4.2 Der Countdown läuft

S.66

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
0BY=Y+F bzw. Y=Y-1(statt Y=A+F, A=A-1)

 

Der JUMP an Adresse 12 ist überflüssig, da er einfach nur zur nächsten Zeile springt.

S.67 unten

„Sie benötigen aber eine 9 und tippen diese ein, …“

Das muss heißen: „Sie benötigen aber ein A und tippen dieses ein, …“

„Nun folgen mehrere Adressen, an denen schon das Gewünschte steht.“

Das stimmt nicht: An Adresse 03 muss die 9 des Vorprogramms noch durch eine 7 ersetzt werden.

Kapitel 4.4 Ereigniszähler

S.70

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
03Austausch A mit B, Y mit Z (statt „Tastendruck…“)
04Hierhin gehört der Kommentar, der fälschlicherweise bei 03 stand („Tastendruck…“)
08Austausch A und B (statt A und Z)
10Austausch A und B (statt A und Z)
18Austausch A und B (statt A und Z)

 

S.71 oben

„…wird vorübergehend das Z-Register verwendet.“

Das muss heißen: „…wird vorübergehend das B-Register verwendet.“

Kapitel 4.5 Der automatische Komponist

S.73 oben

„Beim Start nach einem Reset hat das Y-Register den Wert 0.“

Es hat den Wert F !

Beweis durch ein kleines Programm mit den Anweisungen CY und AO.

S.73 Mitte

„Das A-Register beginnt mit 0. Minus 1 ergibt F, beim nächsten Mal E, dann D usw. bis 0.“

Korrekt ist:

„Das A-Register beginnt mit F. Minus 1 ergibt E, beim nächsten Mal dann D usw. bis 0.“

Kapitel 4.6 Ein Lauflicht

S.74

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
000 (statt 1)
17EC (statt Ec)
1F13 (statt 1313)

Kapitel 4.7 Blinkenlight

S.77

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
1414 (statt 13)

Kapitel 4.8 Memory

S.80

Programm-Listing (nur verbesserte Zeilen):

AdresseCodeBefehlDatenKommentar
03RAM(50+Y)=A (statt A=RAM(50+Y)

S.81

Die JUMP-Befehle an den Adressen 31 und 38 müssen vermutlich nach 12 (und nicht nach 10) springen, weil an Adresse 10 nämlich gar kein Befehl beginnt!

Kapitel 6.1 Der Befehlssatz

S.94

Zu Code 7 muss es korrekt heißen:

A von RAM-Adr(50+Y) subtrahieren (statt RAM-Adr(50+Y) von A subtrahieren).

Kapitel 6.2 Unterprogramme

S.96

Wichtig wäre zu erwähnen, dass sämtliche Unterprogramme nur ausgeführt werden, wenn vorher das Flag gesetzt ist!

Außerdem gibt es noch die Codes EE (Befehl CAL DEM-) und EF (Befehl CAL DEM+), die mit dezimaler(!) Subtraktion und Addition zu tun haben. Der Befehl CAL DEM+ ist sogar sehr mächtig, weil er beliebig viele Überträge auf höherwertige Ziffern selbst managed. Dennoch sind die Befehle relativ kompliziert zu erklären. Man findet aber Näheres im Internet.