80 Zeichen pro Zeile auf dem C 64 mit ROM80
Mit dem folgenden Programm bekommt Ihr C 64 einen 80-Zeichen-Bildschirm, wie er auf größeren Personalcomputern selbstverständlich ist.
Wenn man sich ab und zu auch mit anderen Computern als dem C 64 beschäftigt (zum Beispiel dem C 128) und sich mit deren höherer Auflösung anfreundet, so kommen einem die 40 Zeichen pro Zeile des C 64 oft recht mager vor. Für viele Anwendungen wäre es praktischer, wenn man wenigstens 80 Zeichen in einer Zeile darstellen könnte.
Textverarbeitungsprogramme auf dem C 64 behelfen sich oft mit der Möglichkeit des horizontalen Scrolling oder einer Doppelzeile auf dem Bildschirm als Notlösung. In beiden Fällen wird zum Beispiel ein Text dadurch jedoch recht unübersichtlich.
Um dem abzuhelfen, wurde ROM80 entwickelt. Dieses Programm verändert das Betriebssystem des C 64 so, daß alle Ein- und Ausgaben nun im HiRes-Modus auf 80 Zeichen pro Zeile erfolgen. Alle Zeichen haben dadurch zwar nur noch die halbe Breite; sie sind jedoch dennoch gut lesbar.
ROM80 verträgt sich mit den meisten Betriebssystemerweiterungen, wie Speeddos oder 64'er Dos, da die Bereiche der Kassetten- oder RS 232-Routinen, die meistens von diesen Erweiterungen verwendet werden, nicht verändert werden.
Nachdem man das Programm in Listing 1 mit dem MSE eingetippt und gespeichert hat, startet man es mit »RUN«. Es ist nun möglich, zwischen der EPROM- und der RAM-Version zu wählen. Wird dabei die Frage »EPROM-VERSION« mit »J« beantwortet, so wird das Betriebssystem entsprechend verändert und mit der Startadresse $2000 auf der Diskette gespeichert. Es wird dadurch möglich, sich später eventuell ein EPROM zu »brennen«, um dieses in den Computer fest einzubauen.
Das EPROM hat den Vorteil, daß der HiRes-Speicher nicht, wie bei der RAM-Version, mitten im Basic-Speicher liegt, wodurch 17 KByte verlorengehen. Er wird vielmehr unter dem Betriebssystem »versteckt«, was die Verträglichkeit von ROM80 mit anderen Programmen beträchtlich erhöht.
Wird die Frage mit »N« beantwortet, so wird das 80-Zeichen-Betriebssystem sofort generiert und kann ausprobiert werden. Es ergeben sich dadurch folgende Unterschiede zum normalen Betriebssystem:
- Da im HiRes-Modus des Bildschirms gearbeitet wird, können nicht alle Zeichen unterschiedliche Farben erhalten. Von einer Farbänderung werden immer alle Zeichen auf dem Bildschirm betroffen.
- Mit ROM80 ist es nun möglich, den Grafik- und den Groß-/Kleinschrift-Zeichensatz des C 64 gleichzeitig zu verwenden, da sich die schon auf dem Bildschirm stehenden Zeichen bei einer Umschaltung mit »SHIFT/Commodore« oder »CHR$(14)«, beziehungsweise »CHR$(142)«, nicht ändern.
- Der Bildschirmspeicher ist nun doppelt so groß wie vorher und belegt den Bereich von $C800 bis $CFCF.
ROM80, das zunächst nur durch einen Lader ins RAM oder auf die Diskette geschrieben wird, enthält eine erweiterte Reset-Routine, die den neuen Zeichensatz generiert, indem sie von den alten Zeichen jeweils Bit 0, 2, 4 und 6 verwendet. Dieser neue Zeichensatz belegt im RAM den Bereich von $C400 bis $C7FF. Dabei enthalten die höherwertigen Halbbyte den Grafik- und die niederwertigen Halbbyte den Groß-/Kleinschrift-Zeichensatz. Zusätzlich werden zwei Routinen nach $CFD0 geschrieben. Die eine liest ein Byte aus dem Grafikspeicher, die andere scrollt diesen um eine Zeile nach oben. Das ist notwendig, da bei der EPROM-Version (beim Lesen) nicht direkt aus dem ROM auf das darunterliegende RAM zugegriffen werden kann (bei einem RAM-Zugriff müßte nämlich das ROM weggeschaltet werden).
| Die Speicherbelegung | |
|---|---|
| $C400–$C7FF | Zeichensatz |
| $C800–$CFCF | Bildschirmspeicher |
| $CFD0–$CFFB | Grafik scrollen |
| $CFFF | aktuelle Schrift- und Hintergrundfarbe |
| $DC00–$DFE7 | (bei RAM-Version $5C00–$5FE7) Farbe |
| $E000–$FF3F | (bei RAM-Version $6000–$7F3F) Grafik |
Wenn ein Zeichen auf den Bildschirm geschrieben wird, wird es sowohl im Grafik-Speicher als auch in dem neuen Bildschirmspeicher ab $C800 abgelegt. Das erlaubt ein schnelleres Auslesen von Zeichen an bestimmten Positionen, und außerdem kann der Grafikspeicher für Grafiken verwendet werden, ohne daß der Bildschirminhalt verlorengeht. Tabelle 1 zeigt noch einmal die komplette Speicherbelegung unter ROM80.
(H. C. Edelmann/ks)PROGRAMM : ROM80 0801 0D89 ----------------------------------- 0801 : 11 08 00 00 9E 32 30 37 C1 0809 : 32 20 AB 20 48 43 45 00 EE 0811 : 00 00 00 00 00 00 00 A2 57 0819 : 00 A0 A0 86 F7 84 F8 A0 2B 0821 : E0 86 F9 84 FA A2 20 A0 DA 0829 : 00 B1 F7 91 F7 B1 F9 91 4A 0831 : F9 C8 D0 F5 E6 F8 E6 FA 49 0839 : CA D0 EE A2 F2 A0 08 86 DD 0841 : F7 84 F8 A0 00 B1 F7 85 45 0849 : F9 20 6B 08 B1 F7 F0 21 0F 0851 : 85 FA 20 6B 08 B1 F7 48 47 0859 : 20 6B 08 68 C9 62 F0 E5 7D 0861 : 91 F9 E6 F9 D0 EF E6 FA 06 0869 : D0 EB E6 F7 D0 02 E6 F8 92 0871 : 60 A9 E7 85 01 A2 00 BD F1 0879 : 3F 0D F0 06 20 D2 FF E8 A6 0881 : D0 F5 20 E4 FF F0 FB C9 FB 0889 : 4E D0 08 78 A9 E5 85 01 32 0891 : 6C FC FF C9 4A D0 EB 78 80 0899 : A9 E5 85 01 A0 00 A2 E0 0D 08A1 : 84 F7 86 F8 A2 20 84 F9 13 08A9 : 86 FA A0 00 B1 F7 91 F9 E9 08B1 : C8 D0 F9 E6 F8 E6 FA CA 85 08B9 : D0 F2 A9 37 85 01 58 BD 91 08C1 : 4F 0D 85 F7 BD 62 0D F0 FC 08C9 : 0A 85 F8 BD 76 0D 91 F7 92 08D1 : E8 D0 EC A2 08 20 BA FF 1D 08D9 : A9 03 A2 42 A0 0D 20 BD 63 08E1 : FF A2 00 A0 20 86 F7 84 65 08E9 : F8 A9 F7 A0 40 20 D8 FF 30 08F1 : 60 44 E5 A9 20 85 DB A9 13 08F9 : 00 A0 C8 A2 08 20 C6 E6 3A 0901 : AD 86 02 20 E7 E6 A9 00 D2 0909 : 85 DB A9 00 A0 60 A2 20 BE 0911 : 20 C6 E6 EA EA 62 6C E5 EA 0919 : 60 A4 D3 84 DD 20 7F E5 F9 0921 : A4 DD B1 DB 60 20 6F E5 2C 0929 : C9 20 60 A4 D6 B9 F0 EC 88 0931 : 48 29 F0 85 DB 68 29 0F BE 0939 : 09 C8 85 DC 60 AD 21 D0 3D 0941 : 4D FF CF 29 0F 60 62 B6 92 0949 : E6 E6 D3 A4 D3 C0 50 D0 52 0951 : 07 A0 00 84 D3 20 2A E8 F2 0959 : 60 85 D9 84 DA A5 DB A0 0E 0961 : 00 91 D9 C8 C0 FA D0 F9 D4 0969 : 98 18 65 D9 85 D9 90 02 0F 0971 : E6 DA CA D0 E8 60 8E 86 6A 0979 : 02 8A 0A 0A 0A 0A 85 DB 43 0981 : AD 21 D0 29 0F 05 DB 85 AC 0989 : DB 78 A9 E1 85 01 A9 00 4E 0991 : 4C B5 E8 00 A6 D6 D0 07 64 0999 : 86 D3 68 68 4C A8 E6 CA 6B 09A1 : 86 D6 A0 4F 84 D3 60 62 D1 09A9 : 27 E7 4C A5 E7 C9 0D D0 2E 09B1 : 03 4C 39 E8 C9 20 90 10 46 09B9 : C9 60 90 04 29 DF D0 02 30 09C1 : 29 3F 20 84 E6 4C 93 E6 0F 09C9 : A6 D8 F0 03 4C 97 E6 C9 29 09D1 : 14 D0 21 98 D0 06 20 01 68 09D9 : E7 4C 69 E7 88 84 D3 C8 CB 09E1 : 20 6F E5 88 20 61 E9 C8 89 09E9 : C0 4F D0 F3 A9 20 20 61 E2 09F1 : E9 4C A8 E6 A6 D4 F0 03 E2 09F9 : 4C 97 E6 C9 12 D0 02 85 BE 0A01 : C7 C9 13 D0 03 20 66 E5 22 0A09 : C9 1D D0 0F C0 4F F0 06 CD 0A11 : C8 84 D3 4C A8 E6 A2 00 E6 0A19 : 4C 41 E8 C9 11 D0 03 4C B5 0A21 : 43 E8 20 CB E8 4C 44 EC 36 0A29 : 29 7F C9 7F D0 02 A9 5E F5 0A31 : C9 20 90 03 4C 91 E6 C9 0F 0A39 : 0D D0 03 4C 39 E8 A6 D4 18 0A41 : D0 2C C9 14 D0 24 A0 4F 6B 0A49 : 20 6F E5 C9 20 D0 18 C4 46 0A51 : D3 F0 14 88 20 6F E5 C8 59 0A59 : 20 61 E9 88 C4 D3 D0 F3 CB 0A61 : A9 20 20 61 E9 E6 D8 4C 20 0A69 : A8 E6 A6 D8 F0 05 09 40 25 0A71 : 4C 97 E6 C9 11 D0 09 A6 85 0A79 : D6 F0 02 C6 D6 4C A8 E6 61 0A81 : C9 12 D0 04 A9 00 85 C7 48 0A89 : C9 1D D0 0F 98 F0 06 88 31 0A91 : 84 D3 4C A8 E6 20 01 E7 6A 0A99 : 4C A8 E6 C9 13 D0 06 20 3C 0AA1 : 44 E5 4C A8 E6 09 80 20 F9 0AA9 : CB E8 4C 4F EC 46 C9 A6 5B 0AB1 : D6 E8 E0 19 D0 03 20 EA D2 0AB9 : E8 86 D6 60 A2 00 86 D8 9C 0AC1 : 86 C7 86 D4 86 D3 20 2A 43 0AC9 : E8 4C A8 E6 A9 7F 8D 00 AB 0AD1 : DC AD 01 DC C9 FB F0 F9 94 0AD9 : A2 50 A0 C8 86 D9 84 DA E3 0AE1 : A2 00 86 DB 84 DC A2 08 6A 0AE9 : A0 00 B1 D9 91 DB C8 C0 CD 0AF1 : F0 D0 F7 18 A5 D9 69 F0 FB 0AF9 : 85 D9 90 02 E6 DA 18 A5 C0 0B01 : DB 69 F0 85 DB 90 02 E6 96 0B09 : DC CA D0 DC A2 4F A9 20 A5 0B11 : 9D 80 CF CA 10 FA A2 40 1F 0B19 : A0 61 86 D9 84 DA A2 00 F0 0B21 : A0 60 86 DB 84 DC 20 DF 7E 0B29 : CF 8A 9D 00 7E 9D A0 7E F9 0B31 : E8 E0 A0 D0 F5 A6 D6 60 7C 0B39 : A0 5C A2 04 20 C6 E6 A9 58 0B41 : E5 85 01 58 A5 DB 8D FF A4 0B49 : CF 60 62 EA E8 4C 49 E8 26 0B51 : 78 A9 E1 85 01 A2 00 A0 2D 0B59 : D0 86 D9 84 DA A0 D8 86 96 0B61 : DB 84 DC A0 C4 86 DD 84 CA 0B69 : DE A2 04 A0 00 B1 D9 20 E3 0B71 : 26 E9 B1 DB 20 26 E9 A5 9A 0B79 : DF 91 DD C8 D0 EF E6 DA 8F 0B81 : E6 DC E6 DE CA D0 E6 F0 1B 0B89 : 0E 86 02 A2 04 0A 0A 26 B4 0B91 : DF CA D0 F9 A6 02 60 A9 98 0B99 : E5 85 01 58 A2 2F BD E7 F7 0BA1 : E9 9D D0 CF CA 10 F7 A9 E7 0BA9 : E0 8D 48 C4 A9 E6 8D 4E 9F 0BB1 : C4 A9 0E 8D 48 C6 A9 4E 7D 0BB9 : 8D 4E C6 A9 CC 8D 89 C5 3F 0BC1 : 4C 21 EA 00 85 DD 84 DE 70 0BC9 : 20 7F E5 A5 DD A4 DE 91 78 0BD1 : DB A5 DC 29 07 09 18 85 FF 0BD9 : DC A5 DE 29 FE 18 65 DB 63 0BE1 : 85 DB 90 02 E6 DC 06 DB DD 0BE9 : 26 DC 06 DB 26 DC A5 DD 16 0BF1 : 09 80 85 D9 A9 18 85 DA FE 0BF9 : 06 D9 26 DA 06 D9 26 DA 4E 0C01 : 06 D9 26 DA A0 00 AD 18 CA 0C09 : D0 29 02 08 B1 D9 28 F0 5C 0C11 : 04 0A 0A 0A 0A 29 F0 24 D4 0C19 : DD 10 02 49 F0 85 DF A5 AE 0C21 : DE 4A B0 0B 20 D0 CF 29 CC 0C29 : 0F 05 DF 91 DB 90 11 46 F8 0C31 : DF 46 DF 46 DF 46 DF 20 E4 0C39 : D0 CF 29 F0 05 DF 91 DB A7 0C41 : C8 C0 08 D0 C1 A5 DD A4 8F 0C49 : DE 60 78 A9 E5 85 01 B1 9C 0C51 : DB 48 A9 E5 85 01 68 58 2A 0C59 : 60 78 A9 E5 85 01 A2 1E 43 0C61 : A0 00 B1 D9 91 DB C8 D0 66 0C69 : F9 E6 DA E6 DC CA D0 F2 B6 0C71 : A9 E5 85 01 58 60 A8 A9 0D 0C79 : 02 85 CD EA EA EA 98 A4 C0 0C81 : D3 4C 61 E9 A9 FF 8D BD 5C 0C89 : C4 A9 99 8D BE C4 6C 00 FE 0C91 : A0 62 F0 EC 00 50 A0 F0 23 0C99 : 41 91 E1 32 82 D2 23 73 94 0CA1 : C3 14 64 B4 05 55 A5 F5 9B 0CA9 : 46 96 E6 37 87 62 7D E4 26 0CB1 : 20 52 4F 4D 38 30 20 42 82 0CB9 : 59 20 48 2E 43 2E 45 44 3D 0CC1 : 45 4C 4D 41 4E 4E 20 62 44 0CC9 : 06 E5 50 62 35 E5 0B 62 96 0CD1 : 02 E6 A0 4F 84 D0 20 79 9B 0CD9 : E5 EA 62 21 E6 EA EA EA 37 0CE1 : 62 3A E6 20 6D E5 EA 62 94 0CE9 : D6 E8 20 E3 E6 62 44 EA 20 0CF1 : 20 6F E5 EA EA 62 4F EA 74 0CF9 : 20 91 E5 F0 06 AD 86 02 65 0D01 : 20 E7 E6 62 CA EC BB 62 E2 0D09 : D1 EC 78 62 D9 EC 0C 0F 0E 0D11 : 62 FF FC 4C ED E8 62 88 FC 0D19 : FD A2 00 A0 5C 62 CC FD 83 0D21 : 06 62 D6 FD E5 62 9D E6 83 0D29 : C6 D8 EA EA EA 20 13 EA 45 0D31 : 20 B6 E6 A5 D8 F0 02 46 C4 0D39 : D4 68 A8 62 00 00 0D 45 76 0D41 : 50 52 4F 4D 2D 56 45 52 77 0D49 : 53 49 4F 4E 3F 00 EF 35 FD 0D51 : 73 F0 0E F8 B6 BD 5E 96 DF 0D59 : 9E A9 AC CC D6 88 89 8A 7D 0D61 : 8B 28 29 29 29 2A 26 28 3D 0D69 : 28 25 28 28 28 28 3D 3D 66 0D71 : 3D 3D 3D 3D 00 E3 E7 38 73 0D79 : E7 E7 E3 DC E7 E0 E1 E0 B7 0D81 : FE FE 04 E7 98 AA A4 C2 F3