C 64/C 128
Tips & Tricks

Tips & Tricks zum C128

HauptsächHch neue POKEs und interessante Programmiertricks möchten wir Ihnen diesmal anbieten. Auch die Nutzung des komptetten deutschen Zeichensatzes im C 64-Modus ist nicht zu verachten.

Der C 128 ist im Kommen. Sein hervorragendes Basic macht ihn zu einem immer beliebteren Aufsteigercomputer. Aber gerade seine (im Vergleich zum C 64) komplexe, interne Struktur mit unter anderem drei Mikroprozessoren macht den C 128 zu einer Fundgrube für die Tips & Tricks-Ecke. Übrigens: Wenn Sie etwas Neues herausgefunden haben, schreiben Sie uns! Jeder brauchbare Trick wird veröffentlicht!

Programmieren in Z80-Assembler

Einige frischgebackene C 128-Besitzer möchten jetzt auch einmal in Z80-Assembler programmieren. Um den Z80-Mikroprozessor einzuschalten, muß das Bit 0 in Speicherstelle $fd505 auf 1 gesetzt werden. Doch wo beginnt der Prozessor seine Arbeit und was ist sonst noch zu beachten?

Zunächst müssen die System-IRQs gesperrt werden. Weiterhin sollte man sich in Bank 0 befinden (dort wird später das Z80-ROM von $0000 bis $1000 eingeblendet). Nachdem dies geschehen ist, kann man endlich das Bit 0 in $fd505 auf »High« legen. Nach dem Abfallen des Systemtaktes der 8502-CPU beginnt nun endlich der Z80 seine Arbeit ab der Adresse $Offed. Hinter dem dort stehenden »NOP« findet sie einen Sprungbefehl nach $0008 in das nun eingeschaltene ROM. Das dort stehende Programm bootet normalerweise die CP/M-System-Diskette.

Um in eigene Programme zu gelangen, muß man vor dem Einschalten den Sprungbefehl verbiegen. Dazu schreibt man in die Speicherstelle $0ffee ein $c3 (entspricht dem »JP«-Befehl) und in die folgenden beiden Stellen die Startadresse im Low/High-Format.

Listing 1 zeigt ein Programm, das die oben genannten Punkte, außer dem Verändern des Sprungbefehls, für Sie ausführt. Nach dem Abarbeiten des Z80-Programms sollte man nach $OffeO springen. Dort wird die 8502-CPU reaktiviert (Näheres in Listing 2). Beide Programme stehen sofort nach Einschalten des Computers zur Verfügung.

Zum Schluß möchte ich noch auf einen Fehler im Betriebssystem hinweisen: Betätigt man, während der 40-Zeichen-Bildschirm gescrollt wird, die ASCII/DIN-Taste, so erscheint sehr oft in etwa der Mitte des Bildschirms ein Zeichensalat. Disassembliert ergeben die ASCII-Werte ein Programm, das auch in der erweiterten Zeropage zu finden ist.

  $0FFD0         SEI            ;IRQ aus
  $0FFD1         LDA #$3E       ;Wert für »I/O ein«
  $0FFD3         STA $FF00      ;in Konf. Register
  $0FFD6         LDA #$B0       ;Wert für »Z80 ein«
  $0FFD8         STA $D505      ;in Mode Konf. Reg. Kurz: Einschalten
  $0FFDB         NOP
  $0FFDC         JMP $1100      ;muß auf eigene Routine verbogen werden

Wichtig: Die Z80-CPU beginnt ihre Arbeit bei $0FFED!
Listing 1. So wird die Z80-CPU eingeschaltet
  $0FFE0            DI                ;IRQ aus
  $0FFE1            LD A,$3E          ;Wert für »I/O ein«
  $0FFE3            LD $FF00,A        ;in Konf. Reg
  $0FFE6            LD BC,$D505       ;Mode Konfigurations Register
  $0FFE9            LD A,$B1          Wert für »8502 ein«
  $0FFEB            OUT (C),A         ;Einschalten
  $0FFED            NOP
  $0FFEE            RST $08           ;Weiter bei $0008

Wichtig: Die 8502-CPU beginnt ihre Arbeit bei $0FFDB!
Listing 2. Ein Z80-Programm, um die 8502-CPU wieder einzuschalten
(Frank Probst/tr)

»PRINT AT« oder »CHAR«?

Zunächst möchte ich zu dem Artikel »Entdeckungsreise durchdenC 128«(64’er, Ausgabe 12/85)Stellungnehmen: Ein Simulieren des »PRINT AT«-Befehls, wie in diesem Artikel beschrieben, ist nicht nötig: Er ist im Basic 7.0 im Prinzip enthalten. Er wird mit dem »CHAR«-Befehl angesprochen, der nicht nur im Grafik-Modus wirksam ist. Format: char, Spalte, Zeile, Beispiel:

10 char,5,5,"hallo" : char,15,15,"….",1
15 char,20,20 : input "eingabe";a

Der eingebaute Sprite-Editor des C 128 besitzt außer den im Handbuch aufgeführten Anweisungen noch den Befehl »COPY«. Drückt man inder SPRDEF-Ebene die Taste »C«, so erscheint unten die Frage »COPY FROM ?«. Es wird dann die Nummer des Sprite angegeben (1-8), dessen Bitmuster in das momentan bearbeitete Raster kopiert werden soll. So lassen sich an verschiedenen Sprites geringfügige Änderungen leicht anbringen. Hat man den Sprite-Editor aufgerufen, haben die Funktionstasten F1 bis F8 folgende Bedeutung: F1 = C, F2 = A, F5 = A, F6 = RETURN, F7 = RETURN, F8 = M

Der eingebaute Maschinensprache-Monitor kann zusätzlich zu den im Handbuch beschriebenen Funktionen die vier möglichenZahlensysteme (Hexadezimal, Dezimal, Binär, Oktal) ineinander umrechnen und anzeigen. Dazu gibt man, wenn man den Monitor aufgerufen hat, nur die umzuwan-,delnde Zahl mit ihrem entsprechenden Kennsymbol ein (»$«, »+«, »&«, »%« siehe Handbuch, Anhang C-3).

Im Kapitel »Organisation der Zeropage« des Handbuches ist die Anfangsadresse des Tastaturpuffers nicht erwähnt. Dieser liegt bei 842 (dezimal) in der Bank 0 und hat normalerweise die Länge 10 (Länge in Speicherstelle dez. 2592, Bank 0). Der Tastaturpuffer ist in Verbindung mit der Speicherstelle, die die Anzahl der Zeichen im Tastaturpuffer enthält (dez. 208, Bank 0), wichtig, um vom Programm aus Funktionen auszuführen, die sonst nur im Direktmodus möglich sind (zum Beispiel die Übernahme von neuen Programmzeilen). Dieser Programmiertrick ist schon vom C 64 und VC20 her bekannt.

Neben den im Handbuch auf Seite 4 bis 6 erwähnten CTRL-Funktionen gibt es im C 128-Modus noch folgende:

CTRL-Sverbietet Bildschirmaufrollen (entspricht »NO SCROLL«-Taste)
CTRL-Qerlaubt Bildschirmaufrollen, löst »Cursor down« aus
CTRL-Tentspricht DELETE-Taste
CTRL-Mentspricht RETURN-Taste
CTRL-Jentspricht LINE FEED-Taste
CTRL-RRevers on
(Frank Mülheims/tr)
Neue SYS' und POKEs

Mit »SYS 65341« läßt sich beim C 128 ein Reset erreichen. Mit »SYS 65357« kommt man vom C 128-Modus in den C 64-Modus, ohne Sicherheitsabfrage. Einen recht guten Programmschutz erreicht man mit folgenden POKEs:
POKE 802,0:P0KE803, 224

In ein Programm eingebaut, lösen diese POKEs nach dem Drücken der RUN/STOP-Taste einen Reset aus. Wer Spaß an Bildschirmeffekten hat, sollte einmal folgendes Programm ausprobieren:
10 FOR I = 1 T0 15: SYS 51914: NEXT
20 FOR I = 1 T0 15: SYS 51900: NEXT
30 GOTO 10

(Andreas Ligendza/tr)

Programmschutz-POKEs

Wie man beim C 64 über »POKE 808,225« die RUN/STOP- und die RESTORE-Taste abschalten kann, geht dies beim C 128 über POKE 808,98. Der große Nachteil ist, daß damit die interne Uhr (TIME,TI,TIME$,TI) unbrauchbar wird. Doch durch einen Reset und gleichzeitiges Drücken von RUN/STOP kann man in den Monitor gelangen, diesen verlassen, und ans Programm kommen, da es nicht gelöscht ist. Dies umgeht man über BANK 1:POKE 65528,3. Nach diesem POKE führt ein Reset nur zum Absturz. Dieser POKE funktioniert selbstverständlich auch ohne das Abschalten von RUN/STOP-RESTORE, aber beide POKEs zusammen ergeben einen recht guten Schutz. Wer auf TIME$ (TI$) und TIME (TI) nicht verzichten will, kann mit P0KE792,51:P0KE793,255 die Tastenkombination RUN/STOP-RESTORE abschalten, die RUN/STOP-Taste alleine funktioniert aber weiterhin. Die letzten POKEs eignen sich vor allem dann, wenn man ein Basic-Programm compiliert: nach dem Compilieren sind sie ohnehin gegen RUN/STOP (ohne RESTORE) geschützt, und durch die beiden letzten POKEs wird auch noch die Kombination RUN/STOP-RESTO-RE und/oder durch BANK1:P0KE65528,3 der RESET verhindert.

(Florian Müller/tr)

Einfache Spritesteuerung

10 SPRDEF:SPRITE 1,1
20 J=(JOY(2)-1)*45:IFJ=-45THENMOVSPR1,0#0: GOT020: ELSE:MOVSPR1,J#7:GOTO20

Dieser Einzeiler ermöglicht eine einfache (aber schnelle) Joystickabfrage. Statt »IF…THEN«-Anweisungen werden die Joystickrichtungen in Grad umgewandelt und später von einem »MOVSPR x,x # x«-Befehl verarbeitet.
Zum Programm:

In Zeile 10 wird das Sprite definiert (SPRDEF) und eingeschaltet.

In Zeile 20wird in derVariablenJ die Richtung des Joysticks —1*45 (360 Grad / 8 Richtungen = 45 Grad) abgelegt. Ist J=-45 (bei Nullstellung), wird das Sprite gestoppt und das Programm springt wieder nach Zeile 20.

Ist J nicht —45, bewegt sich das Sprite in Richtung J (mit »MOVSPR l,j # Geschwindigkeit« (die Geschwindigkeit ist beliebig von 2-15 wählbar). Zum Schluß startet das Programm erneut von Zeile 20

(Thorsten Wanschura/tr)

Deutscher Zeichensatz im C 64-Modus

Wenn man im C 64-Modus die »CAPS-LOCK«-Taste drückt, stehen alle internationalen Zeichen zur Verfügung, die sonst nur vom C 128-Modus aus erreichbar sind. Dabei werden einige Grafikzeichen mit den internationalen Zeichen belegt. Die CHR$ Tabelle sieht nun folgendermaßen aus:

CHR$ (172) = éCHR$ (187) = äCHR$ (174) = èCHR$ (123) = Ä
CHR$ (177) = µCHR$ (188) = öCHR$ (178) = àCHR$ (124) = Ö
CHR$ (179) = ùCHR$ (189) = üCHR$ (180) = åCHR$ (125) = Ü
CHR$ (181) = êCHR$ (190) = ßCHR$ (182) = îCHR$ (191) = ^
CHR$ (183) = ôCHR$ (192) = àCHR$ (184) = ûCHR$ (64) = §
CHR$ (185) = √CHR$ (96) = áCHR$ (186) = Σ
(Carsten Schmidt/tr)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →