Tips und Tricks

C 128 um 35% schneller

Hier haben wir zwei Leckerbissen für Besitzer des C 128: Ein Programm, das die Benutzung aller C 128-Tasten im C 64-Modus gestattet und ein Programm, das den Commodore 128 im C 64-Modus um 35 Prozent beschleunigt.

Will man einen Commodore 128 im C 64-Modus betreiben, muß man auf vieles verzichten, was im C 128-Modus bereitsteht. Die Zehnertastatur läßt sich nicht benutzen und der FAST-Befehl, der den Commodore 128 um 100 Prozent beschleunigt, ist nur auf dem 80-Zeichen-Monitor anwendbar, der vom C 64 nicht unterstützt wird.

Zwei Programme schaffen hier Abhilfe. Das erste namens »key 128« (Listing 1) gestattet die Benutzung sämtlicher C 128-Tasten im C 64-Modus, bis auf die Taste ASCII/DIN, deren Zustand in Speicherzelle 1 steht und die Taste 40/80 DISPLAY, die im C 64-Modus nicht abgefragt werden kann.

»key 128« wird als Basic-Lader und nicht als MSE-Listing abgedruckt, was den Vorteil hat, daß es sich an jede beliebige Speicherstelle legen läßt. Nach dem Programmlauf werden SYS-Befehle für Ein- und Ausschalten der C 128 Tastatur angegeben. Die Tasten geben, mit

»GET A$« abgefragt, folgende

ASCII-Codes zurück:

Taste: Code: Shift:

ESC: chr$(27), chr$(27)

TAB: chr$(9), chr$(24)

ALT: chr$(14), chr$(142)

HELP: chr$(8), chr$(9)

LINE FEED: chr$(10), chr$(10)

NO SCROLL:chr$(3), chr$(3)

Mit Hilfe des zweiten Programms »fast64« (Listing 2) läuft ein Commodore 128 im C 64-Modus um 35 Prozent schneller. Dies geschieht mit Hilfe der Taktumschaltung von 1 MHz auf 2 MHz. Normalerweise erscheint bei der Umschaltung auf 2 MHz »Speichermüll« auf dem Bildschirm, da der Video-Chip nicht mehr auf den Speicher zugreifen kann. Deswegen wird beim Commodore 128 beim FAST-Befehl der 40-Zeichen-Videochip auch einfach abgeschaltet. Unser Programm umgeht diese Einschränkung so, daß der 2 MHz-Modus nur eingeschaltet wird, wenn der Videochip den Rahmen oben und unten aufbaut und ohnehin nicht auf den Speicher zugreift.

Während die Beschleunigung wirksam ist, können Peripheriegeräte nicht korrekt benutzt werden (das hängt mit der IRQ-Routine zusammen). Vor Laden/Speichern auf Diskette oder Cassette sowie Drucken sollte das Programm deshalb wieder abgeschaltet werden (Listing 2, Zeile 440)!

Auch dieses Programm wird als Basic-Lader veröffentlicht und läßt sich somit in jeden beliebigen Speicherbereich legen. Beide Programme sind gegen RUN/STOP-RESTORE geschützt, das heißt, daß sie auch nach dem Drücken dieser Tastenkombination noch aktiviert sind. Sie laufen über den IRQ-Vektor. Wenn beide Programme gleichzeitig benutzt werden, sollten Sie die im Listing in den REM-Zeilen angegebenen Änderungen vornehmen. Diese Zeilen müssen Sie natürlich nicht mit abtippen. »fast 64« muß zuletzt aktiviert werden.

Wenn Sie diese Hilfen in Ihren eigenen Programmen benutzen wollen, sollte es keinerlei Anpassungsprobleme geben; es sei denn, Sie arbeiten mit Interrupt-Steuerung. In diesem Fall sollten Sie die Programme erst aktivieren, nachdem Ihr Interrupt eingerichtet ist. Dasselbe gilt natürlich auch für Spiele und kommerzielle Programme. Hier wird man in den meisten Fällen nicht umhin kommen, das jeweilige Programm mit Hilfe eines Monitors auf Veränderungen des IRQ-Vektors zu untersuchen.

Noch ein Hinweis: Beide Programme verwenden indirekte Sprungbefehle, bei denen der 6510/8510-Prozessor unter gewissen Umständen (beim Verwenden von kritischen Adressen, zum Beispiel JMP($20FF) oder JMP($21FF) etc.) Fehler macht. Der 6502-Befehl JMP (addr) funktioniert nämlich nur so lange korrekt, wie das Lo-Byte von »addr« ungleich $FF ist. Ansonsten wird die Adresse nicht aus »addr/addr + 1« geholt, sondern aus »addr/addr-$FF«!

Beispiel: JMP ($0103) springt zur Adresse, die in ($0103/$0104) steht, aber JMP ($01FF) springt zur Adresse, die in ($01FF/$0100) steht! Sollte ein Programm nicht laufen, erhöhen Sie die Startadresse um 1. Die im Listing angegebenen Startadressen sind selbstverständlich geprüft.

Anmerkung: Die Beschleunigung um 35 Prozent läßt sich auch im C 128-Modus programmieren. Wann erscheint das erste Listing dazu? Profis mögen uns schreiben!

(Andreas Zeller/tr)
10 rem key128 v19-10-85
20 rem von andreas zeller, hanau
30 :
40 rem aufgabe: 128er-tasten im
50 rem          64er-modus bedienen.
60 :
70 rem durch aendern der zeile 170
80 rem kann das programm in beliebige
90 rem bereiche gelegt werden.
100 :
110 rem wenn das programm zusammen mit
120 rem "fast64" laufen soll, muss
130 rem 395 poke code+74,44
140 rem eingefuegt werden.
150 :
160 :
170 code=49152:rem startadresse
180 :
190 poke53265,11:poke53296,1
200 :
210 dim p(12):forj=0to12:readp:p(j)=code+p:next
220 :
230 data 0,74,110,171,195,213,232,233,234,235,236,224,225
240 :
250 fori=0to284:readx$
260 :
270 rem umwandlung adressen
280 a$=right$(x$,1):b$=left$(x$,1)
290 ifa$="+"thenp=p(asc(b$)-65):x=p/256:goto360
300 ifa$="-"thenp=p(asc(b$)-65):x=(p/256-int(p/256))*256:goto360
310 :
320 rem umwandlung hex => dec
330 :
340 x=asc(a$)+(a$>"@")*55+(a$<":")*48
350 x=x+(asc(b$)+(b$>"@")*55+(b$<":")*48)*16
360 pokecode+i,x:next
370 :
380 poke53296,0:poke53265,27
390 :
400 print">das programm benutzt den bereich"
410 print" von"code"-"code+284"."
420 print
430 print">tabelle normal ab:"code+237";
440 print"      mit shift ab:"code+261".
450 print
460 print">tasten an mit: sys"code";"
470 print"       aus mit: sys"code+80"."
480 :
490 :
500 end
510 :
520 :
530 :
1000 data  08,48,78,ad,14,03,c9,c-
1010 data  ad,15,03,e9,c+,f0,0c,ad
1020 data  14,03,8d,g-,g+,ad,15,03
1030 data  8d,h-,h+,ad,02,03,c9,b-
1040 data  ad,03,03,e9,b+,f0,0c,ad
1050 data  02,03,8d,i-,i+,ad,03,03
1060 data  8d,j-,j+,a9,c-,8d,14,03
1070 data  a9,c+,8d,15,03,a9,b-,8d
1080 data  02,03,a9,b+,8d,03,03,68
1090 data  28,60,20,a-,a+,6c,i-,i+
1100 data  08,48,78,ad,g-,g+,8d,14
1110 data  03,ad,h-,h+,8d,15,03,ad
1120 data  i-,i+,8d,02,03,ad,j-,j+
1130 data  8d,03,03,68,28,60,a9,40
1140 data  85,cb,29,00,8d,2f,d0,09
1150 data  ff,8d,00,dc,cd,01,dc,f0
1160 data  42,a0,59,a9,fb,8d,2f,d0
1170 data  48,ad,01,dc,cd,01,dc,d0
1180 data  f8,a2,08,0a,b0,02,84,cb
1190 data  88,c0,41,90,07,ca,d0,f3
1200 data  68,4a,10,e1,68,ad,8d,02
1210 data  0a,c9,08,90,02,a9,06,aa
1220 data  bd,l-,l+,85,f5,bd,m-,m+
1230 data  85,f6,20,f-,f+,20,e0,ea
1240 data  20,f-,f+,a9,ff,8d,2f,d0
1250 data  29,7f,8d,00,dc,a4,cb,8c
1260 data  k-,k+,6c,g-,g+,a5,c5,ae
1270 data  k-,k+,8d,k-,k+,86,c5,60
1280 data  d-,d+,e-,e+,e-,e+,d-,d+
1290 data  31,ea,83,a4,40
1300 data  08,38,35,09,32,34,37,31
1310 data  1b,2b,2d,0a,0d,36,39,33
1320 data  0e,30,2e,91,11,9d,1d,03
1330 data  09,38,35,18,32,34,37,31
1340 data  1b,2b,2d,0a,0d,36,39,33
1350 data  8e,30,2e,91,11,9d,1d,03
Listing 1. Mit diesem Listing können Sie im C 64-Modus des C 128 alle Tasten abfragen (auch zum Beispiel die Zehnertastatur).
10 rem fast64 v19-10-85
20 rem von andreas zeller, hanau
30 :
40 rem aufgabe: 128er im 64er-modus
50 rem          um 35% beschleunigen.
60 :
70 rem durch aendern der zeile 170
80 rem kann das programm in beliebige
90 rem bereiche gelegt werden.
100 :
110 rem wenn das programm zusammen mit
120 rem "keys128" laufen soll, muss
130 rem folgende zeile eingefuegt werden:
140 rem 395 poke code+110,44
150 :
160 :
170 code=49440:rem startadresse
180 :
190 poke53265,11:poke53296,1
200 :
210 dim p(6):forj=0to6:readp:p(j)=code+p:next
220 :
230 data 0,110,159,216,217,218,219
240 :
250 fori=0to219:readx$
260 :
270 rem umwandlung adressen
280 a$=right$(x$,1):b$=left$(x$,1)
290 ifa$="+"thenp=p(asc(b$)-65):x=p/256:goto360
300 ifa$="-"thenp=p(asc(b$)-65):x=(p/256-int(p/256))*256:goto360
310 :
320 rem umwandlung hex => dec
330 :
340 x=asc(a$)+(a$>"@")*55+(a$<":")*48
350 x=x+(asc(b$)+(b$>"@")*55+(b$<":")*48)*16
360 pokecode+i,x:next
370 :
380 poke53296,0:poke53265,27
390 :
400 print">das programm benutzt den bereich"
410 print" von"code"-"code+219"."
420 print
430 print">schnell mit: sys"code";"
440 print"  normal mit: sys"code+116"."
450 :
460 end
470 :
480 :
490 :
1000 data  08,48,78,ad,14,03,c9,c-
1010 data  ad,15,03,e9,c+,f0,0c,ad
1020 data  14,03,8d,d-,d+,ad,15,03
1030 data  8d,e-,e+,ad,02,03,c9,b-
1040 data  ad,03,03,e9,b+,f0,0c,ad
1050 data  02,03,8d,f-,f+,ad,03,03
1060 data  8d,g-,g+,a9,c-,8d,14,03
1070 data  a9,c+,8d,15,03,a9,b-,8d
1080 data  02,03,a9,b+,8d,03,03,a9
1090 data  00,8d,30,d0,ad,12,d0,d0
1100 data  fb,a9,31,8d,12,d0,ad,11
1110 data  d0,29,7f,8d,11,d0,a9,01
1120 data  8d,30,d0,ad,1a,d0,09,01
1130 data  8d,1a,d0,68,28,60,20,a-
1140 data  a+,6c,f-,f+,08,48,78,ad
1150 data  1a,d0,29,fe,8d,1a,d0,a9
1160 data  00,8d,30,d0,ad,d-,d+,8d
1170 data  14,03,ad,e-,e+,8d,15,03
1180 data  ad,f-,f+,8d,02,03,ad,g-
1190 data  g+,8d,03,03,68,28,60,ac
1200 data  19,d0,30,07,ad,0d,dc,58
1210 data  6c,d-,d+,98,4a,90,f9,8c
1220 data  19,d0,ad,30,d0,49,01,8d
1230 data  30,d0,4a,b0,03,a9,fa,2c
1240 data  a9,31,8d,12,d0,68,a8,ba
1250 data  bd,04,01,d0,03,de,05,01
1260 data  de,04,01,68,aa,68,28,60
1270 data  31,ea,83,a4
Listing 2. Mit »fast 64« läuft der C 128 im C 64-Modus um 35 Prozent schneller.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →