Neues vom Hypra-Load: Hypra-Perfekt
Es ist uns schon fast zur lieben Gewohnheit geworden, Ihnen das Hypra-Load in ständig verbesserter Form vorzustellen. Wir hoffen, daß wir die neueste Version nicht zu Unrecht »Hypra-Perfekt« genannt haben.
Hypra-Load ist zweifellos eines der interessantesten Programme, die jemals für den Commodore 64 verfügbar waren. Die zahlreichen Leserzuschriften und Telefonanrufe zu diesem Thema belegen die überwiegend positive Resonanz eines weiten Leserfeldes. Trotzdem muß zugegeben werden, daß auch ein gutes Programm noch verbessert werden kann. Mit Hypra-Perfekt haben wir nun eine Version entwickelt, die Ihnen hoffentlich ebenso gut gefällt wie uns.
Da eine reine Diskettenversion zwar die einfachste, aber leider nicht die kompatibelste Lösung ist, haben wir die Form des Kernal-ROMs gewählt. Das heißt, das Betriebssystem des Computers wird durch Austausch des Kernal-Speicherbausteins verändert. Als neuer Programmträger dient ein 2764-EPROM, dessen Inhalt mit dem nachfolgend abgedruckten Programm erzeugt wird. Wie das vonstatten geht, ist mit wenigen Worten erklärt. Das Betriebssystem (auch Kernal genannt) des Commodore 64 befindet sich im Speicherbereich von 57344 ($E000) bis 65535 ($FFFF). Es hat damit genau die Länge von 8 KByte. Das gesamte Kernal (Assemblerlisting) abzudrucken würde natürlich den Rahmen des Heftes sprengen. Ein kompletter Abdruck ist auch gar nicht notwendig, denn es werden ja nur bestimmte Teile des Betriebssystems verändert.
Das abgedruckte Programm kopiert dazu zunächst in den Speicherbereich 24576 ($6000) bis 49151 ($7FFF). Wer einen anderen Speicherbereich verwenden möchte, muß die Leseschleife in Zeile 30 und den Offset (OF) in Zeile 15 verändern. Soll das Kernal beispielsweise im Speicherbereich ab $5000 stehen, lautet die Zeile 30:
30 FOR I = 5*4096 TO7*4096-1 POKE I, PEEK(I+OF): NEXTI
Der Offset beträgt in diesem Fall 36864. Nach dem Kopieren befindet sich im Speicher ein genaues Abbild des Kernal-ROMs. Der nächste Schritt, der automatisch vom Programm ausgeführt wird, ist das Verändern der einzelnen Speicherstellen. Der gesamte Vorgang läuft automatisch ab, bis unser neues Kernal im Speicher steht. Am besten ist es, den Speicherbereich von $6000 bis $8000 nun mit einem Monitor abzuspeichern. Wer im Besitz eines EPROM-Programmiergerätes ist, sollte nicht lange warten und das neue Kernal auf ein 2764-EPROM brennen.
Bis hierhin war eigentlich alles relativ einfach, jetzt aber kommt die schwierigste Hürde auf dem Weg zum neuen Betriebssystem. Ein Adaptersockel muß eingebaut werden, denn leider sind die Pin-Belegungen des Original-ICs und die des 2764 nicht identisch. Solche Sockel kann man entweder kaufen (beispielsweise Roßmöller MR 2764) oder aber selbst bauen. Bild 1 zeigt, welche Pins des 24poligen Sockels mit denen des 28poligen verbunden werden. Das Ganze sieht nach der Fertigstellung wie ein kleiner Doppeldeckerbus mit überhängendem Dach aus. Im oberen Stockwerk dieses »Busses« nimmt nun der 2764 mit unserem neuen Betriebssystem Platz. Die 24 Pins des unteren Fahrwerks finden im (hoffentlich gesockelten) U4-Steckplatz des Computers ihre Heimat. Das überhängende Dach zeigt, zusammen mit der EPROM-Kerbe, in Richtung des User-Ports.
- F1 = LOAD”$”,8 ohne Programmverlust
- F2 = LOAD
- F3 = LIST
- F4 = SAVE
- F5 = RUN
- F6 = SYS64738
- F7 = OPEN1,8,15,
- F8 = CLOSE1
- SHIFT & RUN/STOP lädt und startet das erste Programm von der Diskette
Sollte sich (was sehr erfreulich wäre) der Computer mit geändertem Farbbild, aber sonst gewohnter Anzeige melden, haben Sie es geschafft. Ihnen steht nun eine recht leistungsfähige Variante des Hypra-Load zur Verfügung. Drucker, Plotter und weitere Laufwerke können jetzt beim Laden eingeschaltet bleiben. Die Funktionstasten sind belegt (Bild 2) und eine etwa sechsfache Ladegeschwindigkeit wird erreicht. Der Directory zerstört ein im Speicher befindliches Programm nicht mehr. Um die Kompatibilität zu fertigen Softwareprodukten so hoch wie möglich zu machen, wurde eine Umschaltautomatik mitprogrammiert. Sie schaltet auf langsame Ladegeschwindigkeit um, wenn ein schnelles Laden nicht möglich ist. Sollte dennoch einmal ein Programm nicht funktionieren, ist noch lange nicht aller Tage Abend. Die Speicherzelle 2, die zum Steuerregister umprogrammiert worden ist, schaltet die einzelnen Funktionen des Hypra-ROMs aus und an. Je nachdem, welcher Wert hier hineingeschrieben wird, schaltet sich eine Funktion nach der anderen aus. Im einzelnen bewirken:
POKE 2,32 | Funktionstasten abschalten |
POKE 2,64 | Directory wird normal geladen (mit Programmverlust) |
POKE 2,128 | Abschalten des Fast-Load-Modus |
POKE 2,0 | Zurücksetzen in den Einschaltzustand |
Natürlich sind auch Kombinationen möglich, beispielsweise:
POKE 2,32 + 64.
Alles in allem müßte das neue Hypra-ROM mit beinahe 99 Prozent aller erhältlichen Programme funktionieren. Was nicht geht, ist der Betrieb eines Datenrecorders; es sei denn, das neue Kernal wird auf einer Umschaltplatine in den Computer gesteckt. Solche Platinen werden von verschiedenen Herstellern angeboten und bieten Platz für zwei oder mehr Betriebssysteme, die über einen Drehschalter anwählbar sind. Prinzipiell genügt es aber, bei Bedarf auf das Original-Kernal zurückzugreifen. Übrigens: Wer sich sein Kernal in einer individuellen Farbkombination brennen möchte, braucht lediglich die Farbwerte in Zeile 50 bis 70 zu ändern. Und nun viel Freude mit »Hypra-Perfekt«.
(Arnd Wängler/Ernst Schöberl/gk)28poliger Sockel | 24poliger Sockel |
1,28,27,26 | 24 |
2 | 21 |
3 | 1 |
4 | 2 |
5 | 3 |
6 | 4 |
7 | 5 |
8 | 6 |
9 | 7 |
10 | 8 |
11 | 9 |
12 | 10 |
13 | 11 |
14,20 | 12 |
15 | 13 |
16 | 14 |
17 | 15 |
18 | 16 |
19 | 17 |
20,14 | 12 |
21 | 19 |
22 | 20 |
23 | 18 |
24 | 22 |
25 | 23 |
1,28,27,26 | 24 |
10 poke56,96:poke55,0:clr 15 of=32768 20 print"{clr}{down}{down}{down}kopieren der rom-daten nach $6000":print 30 fori=6*4096to8*4096-1:pokei,peek(i+of):nexti 40 rem einschaltfarben setzen 50 poke58677-of,5: rem zeichen gruen 60 poke60633-of,0: rem rahmen schwarz 70 poke60634-of,0: rem hintergr. schwarz 80 print"lesen der data-zeilen":print:print 100 t=0 110 t=t+1:read a:ifa=0then240 120 read b: rem anzahl der bytes 130 read p1: rem pruefsumme 140 p2=0:print"block ";t;" "; 150 fori=a-oftoa-of-1+b 160 readd:pokei,d:p2=p2+d 170 nexti 180 ifp2<>p1then210 190 print" ok" 200 goto110 210 print"pruefsumme falsch: ";p2;" statt ";p1:print 220 geta$:ifa$=""then220 230 goto110 240 print:print"fertig!":end 8000 rem *** block 1: $eb3f-$eb41 *** 8001 data 60223,3,359 8002 data76,32,251 8005 rem *** block 2: $fb20-$fb68 *** 8006 data64288,73,10154 8007 data232,134,198,201,133,144,4,201,141,144,3,76,66,235,157,119,2,72,152 8008 data72,160,0,169,32,37,2,208,13,185,162,251,221,119,2,240,11,200,192 8009 data224,208,243,104,168,104,76,66,235,200,185,162,251,201,133,144,4,201 8010 data141,144,238,236,137,2,176,233,157,119,2,232,134,198,76,79,251 8015 rem *** block 3: $fba0-$fbdf *** 8016 data64416,64,5759 8017 data252,255,133,76,207,34,36,34,44,56,13,137,76,79,65,68,134,76,73,83 8018 data84,13,138,83,65,86,69,135,82,85,78,13,139,83,121,54,52,55,51,56,13 8019 data136,79,208,49,44,56,44,49,53,44,34,140,67,76,79,83,69,49,13,136,255 8020 data255,255 8100 rem *** block 4: $e5ef-$e5f5 *** 8101 data58862,8,1523 8102 data32,235,240,134,198,189,255,240 8105 rem *** block 5: $f0d9-$f0ea *** 8106 data61657,45,5377 8107 data76,207,34,58,42,34,44,56,44,49,58,88,32,8,249,76,40,245,162,0,189 8108 data216,240,32,210,255,232,224,12,208,245,162,6,120,96,234,255,255,255 8109 data13,82,85,78,58,13 8110 rem *** block 6: $f4ad-$f4b7 *** 8111 data62637,11,1586 8112 data201,4,176,7,169,8,133,186,234,234,234 8115 rem *** block 7: $f4f9-$f500 *** 8116 data62713,8,820 8117 data165,2,48,4,76,44,247,234 8120 rem *** block 8: $f5ef-$f5f9 *** 8121 data62959,11,1586 8122 data201,4,176,7,169,8,133,186,234,234,234 8125 rem *** block 9: $f72c-$f7ff *** 8126 data63276,212,31985 8127 data160,0,177,187,201,36,208,63,76,224,251,255,255,255,255,255,255,255 8128 data255,165,186,32,12,237,169,111,32,185,237,169,77,32,221,237,169,45 8129 data32,221,237,169,69,32,221,237,169,69,32,221,237,169,193,32,221,237 8130 data32,254,237,32,239,237,76,21,249,255,255,255,255,255,255,255,255,169 8131 data28,162,249,133,167,134,168,169,0,162,3,133,169,134,170,165,186,32 8132 data12,237,169,111,32,185,237,169,77,32,221,237,169,45,32,221,237,169 8133 data87,32,221,237,160,0,165,169,32,221,237,165,170,32,221,237,169,30 8134 data32,221,237,177,167,32,221,237,200,192,30,144,246,32,254,237,24,165 8135 data167,105,30,133,167,144,3,230,168,24,165,169,166,170,105,30,133,169 8136 data144,2,230,170,224,5,144,173,201,0,144,169,165,186,32,12,237,169,111 8137 data32,185,237,169,77,32,221,237,169,45,32,221,237,169,69,32,221,237 8138 data169,139,32,221,237,169,4,32,221,237,173,0,221 8140 rem *** block 10: $f800-$f8ff *** 8141 data63488,256,38681 8142 data133,171,169,239,45,17,208,141,17,208,32,128,248,32,152,248,32,63 8143 data247,8,72,166,174,164,175,104,40,88,96,32,39,248,201,255,240,248,160 8144 data0,96,169,39,141,0,221,44,0,221,80,251,169,3,141,0,221,162,7,202,208 8145 data253,234,173,0,221,42,42,102,176,106,102,176,234,234,173,0,221,42 8146 data42,102,176,106,102,176,234,234,173,0,221,42,42,102,176,106,102,176 8147 data234,234,173,0,221,42,42,102,176,106,102,176,165,176,73,255,96,234 8148 data96,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,169 8149 data3,141,0,221,32,251,237,138,162,255,234,234,234,202,208,252,170,96 8150 data234,234,234,234,234,120,169,1,133,167,160,255,32,29,248,192,255,208 8151 data3,76,228,240,32,39,248,133,169,32,39,248,133,168,165,167,240,30,32 8152 data39,248,32,39,248,169,252,234,234,164,169,208,30,198,168,198,168,198 8153 data168,169,254,24,229,168,133,170,76,229,248,165,169,208,8,198,168,169 8154 data0,76,205,248,44,169,254,133,168,160,0,32,39,248,145,174,230,174,208 8155 data2,230,175,198,168,208,241,162,0,134,167,165,169,208,159,198,170 8160 rem *** block 11: $f900-$f9ff *** 8161 data63744,256,30043 8162 data240,6,32,39,248,76,254,248,169,16,13,17,208,141,17,208,165,171,141 8163 data0,221,169,64,133,144,24,96,255,165,0,41,6,201,2,240,3,76,158,253 8164 data234,169,5,133,9,162,90,134,75,162,0,169,82,133,36,32,86,245,80,254 8165 data184,173,1,28,197,36,240,9,198,75,208,239,169,10,76,105,249,80,254 8166 data184,173,1,28,149,37,232,224,7,208,243,32,151,244,165,22,69,23,69 8167 data24,69,25,69,26,240,7,198,9,208,192,76,30,244,165,24,197,6,240,3,76 8168 data11,244,133,34,169,6,133,49,76,92,4,165,18,166,19,133,22,134,23,165 8169 data6,133,24,165,7,133,25,169,0,69,22,69,23,69,24,69,25,133,26,32,52 8170 data249,162,90,32,86,245,160,0,80,254,184,173,1,28,217,36,0,240,6,202 8171 data208,237,76,81,245,200,192,8,208,234,32,86,245,80,254,184,173,1,28 8172 data145,48,200,208,245,160,186,80,254,184,173,1,28,153,0,1,200,208,244 8173 data32,224,248,165,56,197,71,240,3,76,246,244,32,233,245,197,58,240,3 8174 data76,2,245,160,0,169,85,32,232,3,185,0,6,32,232,3,200,208,247,240 8180 rem *** block 12: $fa00-$faff *** 8181 data64000,256,29911 8182 data111,234,234,234,133,119,162,1,138,44,0,24,240,251,169,0,141,0,24 8183 data138,44,0,24,208,251,162,0,138,102,119,42,42,102,119,42,42,141,0,24 8184 data138,102,119,42,42,102,119,42,42,141,0,24,138,102,119,42,42,102,119 8185 data42,42,141,0,24,138,102,119,42,42,102,119,42,42,141,0,24,162,2,202 8186 data208,253,169,8,141,0,24,96,234,169,8,141,0,24,96,234,234,234,234,234 8187 data234,234,234,234,234,234,234,234,234,234,234,234,234,234,173,0,28 8188 data9,8,141,0,28,173,0,6,208,3,76,158,253,197,24,208,249,133,6,173,1 8189 data6,133,7,76,101,3,234,234,234,234,234,234,234,234,234,234,234,234 8190 data234,234,96,96,133,0,88,165,0,48,252,120,96,120,169,8,141,0,24,234 8191 data165,24,141,0,6,133,6,165,25,141,1,6,133,7,169,4,133,120,169,226,32 8192 data130,4,201,2,144,51,160,0,132,120,164,120,185,219,254,240,18,88,32 8193 data118,214,120,169,226,32,130,4,201,2,144,26,230,120,208,231,169,192 8194 data32,130,4,169,226,32,130,4,201,2,144,8,169,255,32,232,3,76,34,235 8195 data173,0,6,240 8200 rem *** block 13: $fb00-$fb1f *** 8201 data64256,32,4506 8202 data248,197,24,240,196,173,0,6,133,6,173,1,6,133,7,76,160,4,234,234,234 8203 data234,160,0,185,25,244,153,255,255,255,255 8210 rem *** block 14: $fbe0-$fc3f *** 8211 data64480,96,12568 8212 data165,2,41,64,240,3,76,1,245,169,13,32,210,255,234,169,0,133,144,160 8213 data2,132,169,32,19,238,133,170,32,225,255,208,3,76,51,246,164,144,208 8214 data47,32,19,238,164,144,208,40,164,169,136,208,225,166,170,32,205,189 8215 data169,32,32,210,255,32,19,238,166,144,208,18,170,240,6,32,210,255,76 8216 data30,252,169,13,32,210,255,160,2,208,190,32,66,246,166,45,164,46,96 8217 data255 9000 data 0 9010 rem **** ende ****