C 64
Tips und Tricks

Drei »Quickies«

Einzeiler lassen sich nicht nur in Basic, sondern auch in Assembler schreiben! Tippen Sie unsere drei »Quickies« ein, und lassen Sie sich überraschen, mit welchen Tricks da gearbeitet wurde.

Die beiden Basic-Programme »Zeichensatz ändern« und »invertierte Grafik« müssen Sie mit dem MSE eingeben. Dies hat zwei Gründe: Erstens einmal lassen sich dadurch Tippfehler leichter ausschalten und zweitens wäre die Eingabe über Basic sehr mühsam. Wenn Sie die »Einzeiler« auf Diskette gespeichert haben, können Sie sie ohne weiteres wie normale Basic-Listings laden, listen und mit »RUN« starten.

Stop!

1 fori = 828to839:reada:pokei,a:next:data72,173,141,2, 201,1,240, 249,104,76,202,241

Einschalten poke806,60:poke807,3
Ausschalten poke 806,202:poke807,241

In diesem kleinen Maschinenprogramm wird während des Listens eines Programms die Shift-Taste abgefragt und, wenn diese gedrückt ist, gewartet. Sonst wird zur Adresse 61898 (Ausgabe eines Zeichens) gesprungen. Durch die zwei POKEs wird der Ausgabe-Vektor ($F1CA) auf den Kassettenpuffer nach 828 »verbogen«.

828 pha : Akku sichern
829 lda 653 : Flag fürSHIFT
832 cmp #1 : gedrückt?
834 beq 829 : ja, dann warten
836 pla : Akku wiederherstellen
837 jmp 61898 : zur Ausgaberoutine
(Ulrich Pasch/tr)
1 fori=828to839:reada:pokei,a:next
2 data72,173,141,2,201,1,240,249,104,76,202,241
3 poke806,60:poke807,3

Zeichensatz ändern

Dieser Einzeiler verschiebt den Zeichensatz in den Speicherbereich Hexadezimal $2000 - $3000. Damit können jederzeit beliebige Zeichen geändert werden; zum Beispiel, um Sonderzeichen zu definieren.

Zum Aufbau des Programms (Listing 1a und 1b)

Ein PRINT-Befehl schreibt das Maschinenprogramm in den Bildschirmspeicher, wo es dann mit SYS 1024 gestartet wird.

Das Maschinenprogramm setzt zunächst das Interruptflag, um einen Interrupt durch den CIA 1 zu unterbinden. Das ist nötig, da der Computer sonst abstürzen würde, wenn das Zeichen-ROM eingeschaltet wird. Danach wird das ZeichenROM eingeschaltet. Jetzt wird nach der nötigen Parameterübergabe (alter Blockanfang, altes Blockende, neues Blockende) die Blockverschieberoutine des Interpreters aufgerufen. Dann wird der Zeichengenerator wieder abgeschaltet und der Zeiger auf den Zeichengenerator entsprechend geändert (Hexadezimal D018, Bit 1-3). Nach dem Löschen des Interruptflags erfolgt der Rücksprung ins Basic.

(Peter Sajonez/tr)
PROGRAMM : CHR-RAM        0801 0859
-----------------------------------
0801 : 4B 08 01 00 99 22 93 B8   FB
0809 : 12 29 33 45 92 41 12 29   F3
0811 : 92 40 12 20 D0 45 92 DF   8D
0819 : 12 44 92 A0 12 20 A0 45   35
0821 : 92 DA 12 44 92 DB 12 20   BE
0829 : 92 30 12 45 92 D8 12 44   C1
0831 : 92 D9 20 12 3F 23 29 37   1A
0839 : 45 92 41 12 29 92 58 12   07
0841 : 4D 92 58 12 D0 92 D8 A0   76
0849 : 22 00 55 08 02 00 9E 31   BF
0851 : 30 32 34 00 00 00 01 08   BC
Listing 1a. Das Basic-Programm zum geänderten Zeichensatz geben Sie bitte mit dem MSE (!) ein. Wenn Sie das Programm listen, werden Sie sehen warum!
$0400 78        SEI       Interruptflag setzen
$0401  A9 B3     LDA #$B3
$0403  85 01     STA $01   ;Zeichen-ROM ein
$0405  A9 00     LDA #$00
$0407  A0 D0     LDY #$D0
$0409  85 5F     STA $5F   ;Alter Blockanfang Low-Byte
$040B  84 60     STY $60   ;Alter Blockanfang High-Byte
$040D  A0 E0     LDY #$E0
$040F  85 5A     STA $5A   ;Altes Blockende Low-Byte
$0411  84 5B     STY $5B   ;Altes Blockende High-Byte
$0413  A0 30     LDY #$30
$0415  85 58     STA $58   ;Neues Blockende Low-Byte
$0417  84 59     STY $59   ;Neues Blockende High-Byte
$0419  20 BF A3  JSR $A3BF ;Blockverschieberoutine
$041C  A9 B7     LDA #$B7
$041E  85 01     STA $01   ;Zeichen-ROM aus
$0420  A9 18     LDA #$18
$0422  8D 18 D0  STA $DO18 ;Zeiger für Zeichengenerator auf $2000
$0425  58        CLI       ;Interruptflag löschen
$0426  60        RTS
Listing 1b. Der Quelltext zum geänderten Zeichensatz

Invertierte Grafik

Dieser Einzeiler (Listing 2) invertiert eine im Speicher stehende Grafik. Gegenüber dem Einzeiler, der in der 64’er, 3/85 veröffentlicht wurde, braucht er zur Ausführung nur den Bruchteil einer Sekunde. Er besteht im wesentlichen aus einer kleinen Maschinenroutine, die mittels einem PRINT-Befehl in den Bildschirm geschrieben und mit SYS 1024 gestartet wird.

(Frank Meister/tr)
PROGRAMM : GRAFIK INVERS  0801 0850
-----------------------------------
0801 : 39 08 0A 00 99 22 93 12   DE
0809 : 29 BF 45 BD 20 92 20 12   56
0811 : 29 92 40 12 45 BB 44 BC   92
0819 : 29 92 C3 12 2A 29 92 40   75
0821 : 12 28 31 BB 92 C4 12 BD   1E
0829 : 51 BB C8 D0 B7 92 12 A6   4A
0831 : BC A4 BC D0 B1 92 22 00   C1
0839 : 4C 08 14 00 97 31 30 35   BD
0841 : 37 2C 39 36 3A 9E 31 30   61
0849 : 32 34 00 00 00 01 08      DF
Listing 2. Auch die »invertierte Grafik« geben Sie bitte mit dem MSE ein
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →