HYPRA-LOAD: Schnelles Laden von Diskette
Spontane Begeisterung und Zustimmung erhielten die beiden Autoren des folgenden Programms. Ein bis zu sechsmal schnelleres Laden von Programmen von der VC 1541 hatte uns bisher noch niemand angeboten. Wir meinen, ein echter Knüller, der es ganz bestimmt verdient, Listing des Monats zu werden.

Bisherige Versuche, die VC 1541 schneller zu machen, scheiterten fast alle. C 64-Besitzer hatten lediglich die Möglichkeit, mittels einer zusätzlichen IEEE-Schnittstelle eine der größeren Floppys (4040, 8250, etc.) anzuschließen. Viele waren der Meinung, daß die serielle Datenübertragung vom C 64 an die VC 1541 schuld an deren Trägheit hatte. Was natürlich nicht ganz stimmen kann. Denn es gibt serielle Schnittstellen, die mehr als 12000 Baud ( = Bit pro Sekunde) übertragen. Somit war klar, daß nicht die serielle Übertragung, sondern eher das DOS (Disk Operating System), die interne Software der Floppy, der große Hemmschuh sein mußte. Und in der Tat, wenn Sie in der Ausgabe 9/84 des 64'er-Magazins auf Seite 10 die Aktuell-Meldung über eine neue Alternativ-Floppy gelesen haben, konnten Sie erfahren, daß lediglich das kompatible DOS die mögliche Geschwindigkeit des TEAC-Laufwerkes stark einschränkte. Und hier setzten die beiden Autoren mit ihrer Arbeit an.
(gk)Zusammenarbeit und Ehrgeiz werden mit 2000 Mark belohnt
Ich, Boris Schneider, wurde am 5.7.66 in Grevenbroich (zirka 20 km südwestlich von Düsseldorf) geboren.
Genau 10 Jahre später erhielt ich meinen ersten Taschenrechner. Um 1978/79 hatte ich meine ersten Kontakte mit einem »richtigen« Computer: einem PET 2001, den mein Vater manchmal mit nach Hause brachte.
1980 erfolgte dann der Umzug nach Bayern; hier besuche ich das Gymnasium Vaterstetten, wo ich unter anderem auch Karsten Schramm kennenlernte, der sich nun ebenfalls kurz vorstellt:
Meine Geschichte begann am 1.3.66 in München.
Ich besuche zur Zeit ebenfalls das Gymnasium Vaterstetten, wo Boris und ich nächstes Jahr das Abitur machen wollen.
Mit 14 Jahren kam ich das erste Mal mit Computern in Kontakt, wobei ich prompt vom »Fieber« angesteckt wurde, so daß meine Eltern ernstlich um meine Zurechnungsfähigkeit besorgt sein mußten.
Meine Krankheit klang zum Glück schon nach einem Jahr ab, doch das Hobby blieb, und so besitze ich seit einem halben Jahr einen C 64, nachdem ich zuvor in der Schule auf CBM-Computern gearbeitet hatte.
Wir (Boris und ich) teilen uns die Leidenschaft, in Maschinensprache zu programmieren und dem Computer die letzten Geheimnisse zu entlocken!
Boris Oliver Schneider, Sudetenstraße 46, 8018 Grafing, Tel. 08092/6872.
Karsten Oliver Schramm, Herzog-Stephan-Weg 33, 8011 Zorneding, Tel. 08106/20252
Warum Zeit verschwenden? Laden Sie Ihre Programme in Zukunft fünfmal schneller.
Schon ganze Scharen von Computerbesitzern werden hilflos gestöhnt haben, als sie wieder einmal eine Kaffeepause einlegen mußten, um das Laden des nächsten Programms von Diskette abzuwarten. War das Programm dann auch noch länger als 150 Blocks, so konnte diese »Zwangssendepause« durchaus länger als 2,5 Minuten werden.
Auch Hardware-Hersteller haben diesen Mangel erkannt und bieten neuerdings immer mehr schnelle Laufwerke als Ersatz für die VC 1541 an.
Halt! Jetzt aber Schluß mit dem dauernden Herziehen über die VC 1541, die nämlich eigentlich gar keine Schuld an den langen Wartezeiten hat; vielmehr kann sie es, was die Geschwindigkeit betrifft, ohne weiteres mit den großen CBM-Floppys aufnehmen, oder anders formuliert, die VC 1541 ist genauso schnell wie zum Beispiel die CBM 2031.
Aber wo liegt denn dann nun der Haken? Das Stichwort lautet: Der serielle Bus, also die Schnittstelle zwischen Floppy und Computer. Diese Verbindung erfordert zwar weniger Materialaufwand als der üblicherweise bei Commodore benutzte IEEE-488-Bus, (der 8-Bit-parallel arbeitet). Der serielle Bus hat aber den Nachteil, daß die Geschwindigkeit bei der Übertragung im Normalbetrieb zirka 5 bis 6mal langsamer ist als beim IEC-Bus, was sich dann auch auf die Ladezeit auswirkt.
Die Hardwarelösung habe ich ja schon erwähnt: Sie erfordert außer einer neuen Floppy, auch noch das IEEE-Bus-Modul, da der C 64 in der Grundversion keine derartige Schnittstelle zu bieten hat. Mitunter ist also diese Lösung sehr teuer und übersteigt die Kaufkraft vieler C 64-Anwender.
Aber zum Glück gibt es noch eine Softwaremöglichkeit, hier effektiv einzugreifen. Das Prinzip ist denkbar einfach. Es beruht auf der Möglichkeit, in die Floppy Maschinenprogramme einzuspeichern und diese dann dort auszuführen.
In unserem Fall werden also modifizierte Busroutinen in der Floppy und im Computer abgelegt, die dann die sonst so langsame Übertragung auf ein Vielfaches steigern.
In Zahlen: Der serielle Bus wird durch diese Routinen weit über 10mal so schnell und das Laden geschieht nun mit der maximalen Floppygeschwindigkeit, die etwa 5 bis 6mal höher ist.
Nun aber zum Programm, damit Sie so schnell wie möglich in den Genuß von HYPRA-LOAD kommen: Wenn Sie den Basic-Lader eintippen, achten Sie bitte besonders sorgfältig auf richtiges Eingeben der Checksummen, da diese zur Fehlerkontrolle bei der Eingabe der DATAs dienen!
Vor dem ersten Startversuch das Programm bitte unbedingt auf Diskette speichern, da es sich bei der Ausführung automatisch überschreibt. Anschließend starten Sie mit RUN. Wurde alles korrekt eingegeben, wird am Basic-Anfang ein Maschinenprogramm generiert und das Basic-Programm gelöscht.
Dieses Maschinenprogramm ist das eigentliche HYPRA-LOAD und kann nun mit »SAVE« abgespeichert werden.
Um den Geschwindigkeitsvorteil auch wirklich nutzen zu können, wird empfohlen, HYPRA-LOAD möglichst auf alle Programmdisketten zu überspielen. Es wurde dazu extra sehr kurz (6 Blocks) gehalten. Müßten Sie nämlich nach jedem Laden zuerst die Diskette wechseln, so wäre die Effektivität von HYPRA-LOAD erheblich vermindert.
Übrigens: Die Einschaltmeldung von HYPRA-LOAD umfaßt auch eine Bytes-free-Meldung, welche jedoch ignoriert werden sollte, da die Zahlenangabe aus programmtechnischen Gründen falsch ist. Dies hat jedoch keinen Einfluß auf die einwandfreie Funktion des Computers!!!
Nun aber zu den besonderen Eigenschaften
- HYPRA-LOAD kopiert nach dem Kaltstart das gesamte Betriebssystem vom ROM ins darunterliegende RAM, jedoch ohne dabei Basic-Speicherplatz zu verbrauchen. Danach werden die einzelnen Programmteile im Betriebssystem verteilt und das Betriebssystem im RAM gestartet.
- Abzulesen ist die Aktivierung von HYPRA-LOAD an der Speicherstelle 1 der Zeropage. Diese enthält normalerweise den Wert 55, was besagt, daß ab $A000 ROM aktiviert ist, welches Basic und das Betriebssystem enthält.
HYPRA-LOAD schaltet den Wert auf 53 um und aktiviert dadurch anstelle von ROM-Bausteinen freien RAM Bereich, in dem nun das Betriebssystem und Basic stehen.
Man kann also ganz einfach HYPRA-LOAD abschalten, durch POKE 1,55 und, sofern nicht zerstört, mit POKE 1,53 wieder einschalten.
- Da HYPRA-LOAD im RAM steht, ergeben sich natürlich einige Probleme. So gibt es viele Programme, die beim Laden den Bereich ab $A000 überschreiben. Würde nach der Rückkehr aus der Laderoutine nun ins RAM ab $A000 gesprungen, so wäre ein »Aufhängen« des Computers fast unvermeidlich.
Gegen solche Programme ist HYPRA-LOAD abgesichert, und es wird nach dem Ladevorgang automatisch ins ROM-Basic zurückgesprungen. Bei mehrteiligen Programmen erkennt man dies daran, daß plötzlich wieder »normal« geladen wird.
Überschreiben Programme jedoch den Bereich ab $E000, so treffen sie früher oder später auf die Laderoutinen und der Computer »stürzt ab«. Bei solchen Programmen hilft nur das vorherige Ausprobieren. Es muß an dieser Stelle erwähnt werden, daß es auch Programme gibt, die ein Abschalten von HYPRA-LOAD erfordern, aber erst nachdem der Ladevorgang abgeschlossen ist. Auch hier hilft zum Erkennen solcher Programme nur das Ausprobieren.
Am besten arbeitet HYPRA-LOAD mit einteiligen Programmen, da es hier nicht vorkommt, daß der Bereich ab $EOOO überschrieben wird (solche Programme müßten nämlich den davorliegenden I/O-Bereich überschreiben) und so das gesamte Programm schnell geladen werden kann!
- Es sollte vielleicht noch einmal erwähnt werden, daß sich HYPRA-LOAD nur auf den LOAD-Befehl beschränkt, andere Diskettenoperationen bleiben davon unberührt.
- Da HYPRA-LOAD im Betriebssystem steht, vernichtet es zwangsläufig andere Routinen, das heißt, vor Kassetten- und RS232-Betrieb muß HYPRA-LOAD abgeschaltet werden.
- SYS 64738 als Reset reaktiviert auch HYPRA-LOAD, sofern es noch nicht zerstört oder ausgeschaltet ist.
- Nach einem Reset durch einen Taster kann HYPRA-LOAD, sofern noch nicht überschrieben, durch
POKE 1,53
wieder eingeschaltet werden. Wird danach jedoch langsam geladen, so ist im Basic-Teil etwas verändert worden, so daß HYPRA-LOAD auf das ROM umgeschaltet hat. - Ein Test hat ergeben, daß HYPRA-LOAD auf dem SX 64 trotz dessen angeblicher »Vollkompatibilität« nicht lauffähig ist.
- Da zusätzliche Peripheriegeräte und auch der Bildschirm den schnellen Busbetrieb stören, müssen diese entfernt, beziehungsweise abgestellt und der Bildschirm ausgeschaltet werden. Ist dies nicht geschehen, so macht HYPRA-LOAD darauf aufmerksam und wartet auf das Nachholen des Versäumten. Anschließend kann durch Drücken der RUN/STOP-Taste mit dem Laden begonnen werden. Es erfolgt keine weitere Kontrolle mehr!
- Betreiben Sie ein Floppy-Laufwerk zum Beispiel unter der Geräteadresse 9, so müssen folgende Änderungen durchgeführt werden:
Die DATAs in den Zeilen 104, 114 und 239; dort müssen die entsprechenden Zahlen (008) auf die neue Geräteadresse umgestellt werden. Natürlich ist auch ein Angleichen der Checksummen erforderlich. Es sind dies die 1., die 2. und die 12. Checksumme.
Übrigens: Für eventuelle Berichte über die Erfahrungen mit HYPRA-LOAD sowie Verbesserungsvorschläge wäre ich sehr dankbar.
Und nun viel Spaß mit einer 5 bis 6mal so schnellen VC 1541.
(K. Schramm/B. Schneider/gk)0 :clr:goto380 10 ************************************ 11 *** ================= *** 12 *** hypra-load-system *** 13 *** ================= *** 14 *** *** 15 *** written 1984 by : *** 16 *** """"""""""""""""" *** 17 *** *** 18 *** - karsten schramm - *** 19 *** - boris schneider - *** 20 *** *** 21 ************************************ 100 data011,008,192,007,158,051,050,051 101 data056,000,000,000,032,047,243,169 102 data226,162,248,133,167,134,168,169 103 data000,162,003,133,169,134,170,169 104 data008,032,012,237,169,111,032,185 105 data237,169,077,032,221,237,169,045 106 data032,221,237,169,087,032,221,237 107 data160,000,165,169,032,221,237,165 108 data170,032,221,237,169,030,032,221 109 data237,177,167,032,221,237,200,192 110 data030,144,246,032,254,237,024,165 111 data167,105,030,133,167,144,003,230 112 data168,024,165,169,166,170,105,030 113 data133,169,144,002,230,170,224,005 114 data144,173,201,000,144,169,169,008 115 data032,012,237,169,111,032,185,237 116 data169,077,032,221,237,169,045,032 117 data221,237,169,069,032,221,237,169 118 data139,032,221,237,169,004,032,221 119 data237,169,011,141,017,208,032,251 120 data237,234,234,076,046,240,169,011 121 data141,000,221,044,000,221,016,251 122 data169,003,141,000,221,162,005,202 123 data234,208,252,162,004,173,000,221 124 data042,042,102,176,106,102,176,234 125 data202,208,242,165,176,073,255,096 126 data032,082,239,201,255,240,248,160 127 data000,169,011,141,000,221,044,000 128 data221,016,251,169,003,141,000,221 129 data162,007,202,208,253,173,000,221 130 data042,042,102,176,106,102,176,234 131 data234,173,000,221,042,042,102,176 132 data106,102,176,234,234,173,000,221 133 data042,042,102,176,106,102,176,234 134 data234,173,000,221,042,042,102,176 135 data106,102,176,165,176,073,255,153 136 data166,251,200,208,180,096,120,169 137 data001,133,167,160,255,032,124,239 138 data192,255,240,064,162,002,165,167 139 data240,002,162,004,173,166,251,208 140 data007,238,167,251,173,167,251,044 141 data169,000,133,168,189,166,251,145 142 data174,230,174,208,002,230,175,232 143 data228,168,208,240,162,000,134,167 144 data173,166,251,208,198,169,053,133 145 data001,169,027,141,017,208,169,064 146 data133,144,024,096,169,053,133,001 147 data169,027,141,017,208,234,169,029 148 data056,096,160,000,185,066,240,153 149 data048,001,200,192,031,208,245,032 150 data210,239,076,048,001,234,008,072 151 data169,000,168,089,000,160,200,208 152 data250,201,128,240,004,169,055,133 153 data001,166,174,164,175,104,040,088 154 data096,221,016,173,240,034,173,161 155 data002,074,176,250,173,001,221,041 156 data253,141,001,221,173,001,221,041 157 data004,240,249,169,144,024,076,059 158 data239,173,161,002,041,018,240,243 159 data024,096,173,151,002,172,156,002 160 data204,155,002,240,011,041,247,141 161 data151,002,177,247,238,156,002,096 162 data009,008,141,151,002,169,000,096 163 data072,173,161,002,240,017,173,161 164 data002,041,003,208,249,169,016,141 165 data013,221,169,000,141,161,002,104 166 data096,165,000,041,006,201,002,240 167 data003,076,158,253,234,169,005,133 168 data009,162,090,134,075,162,000,169 169 data082,133,036,032,086,245,080,254 170 data184,173,001,028,197,036,240,009 171 data198,075,208,239,169,010,076,105 172 data249,080,254,184,173,001,028,149 173 data037,232,224,007,208,243,032,151 174 data244,165,022,069,023,069,024,069 175 data025,069,026,240,007,198,009,208 176 data192,076,030,244,165,024,197,006 177 data240,003,076,011,244,133,034,169 178 data006,133,049,076,060,004,165,018 179 data166,019,133,022,134,023,165,006 180 data133,024,165,007,133,025,169,000 181 data069,022,069,023,069,024,069,025 182 data133,026,032,052,249,162,090,032 183 data086,245,160,000,080,254,184,173 184 data001,028,217,036,000,240,006,202 185 data208,237,076,081,245,200,192,008 186 data208,234,032,086,245,080,254,184 187 data173,001,028,145,048,200,208,245 188 data160,186,080,254,184,173,001,028 189 data153,000,001,200,208,244,032,224 190 data248,165,056,197,071,240,003,076 191 data246,244,032,233,245,197,058,240 192 data003,076,002,245,160,000,169,085 193 data032,082,004,185,000,006,133,119 194 data044,000,024,016,251,169,016,141 195 data000,024,044,000,024,048,251,162 196 data000,138,102,119,042,042,102,119 197 data042,042,141,000,024,138,102,119 198 data042,042,102,119,042,042,141,000 199 data024,138,102,119,042,042,102,119 200 data042,042,141,000,024,138,102,119 201 data042,042,102,119,042,042,141,000 202 data024,162,002,202,208,253,169,015 203 data141,000,024,200,208,173,234,234 204 data234,234,234,234,234,173,000,028 205 data009,008,141,000,028,173,000,006 206 data208,003,076,158,253,197,024,208 207 data249,133,006,173,001,006,133,007 208 data076,101,003,133,119,044,000,024 209 data016,251,169,016,141,000,024,044 210 data000,024,048,251,162,004,169,000 211 data102,119,042,042,102,119,042,042 212 data141,000,024,202,208,240,234,234 213 data234,234,234,234,169,015,141,000 214 data024,096,096,133,000,088,165,000 215 data048,252,120,096,120,234,234,234 216 data234,234,234,165,024,141,000,006 217 data133,006,165,025,141,001,006,133 218 data007,169,004,133,120,169,226,032 219 data130,004,201,002,144,051,160,000 220 data132,120,164,120,185,219,254,240 221 data018,088,032,118,214,120,169,226 222 data032,130,004,201,002,144,026,230 223 data120,208,231,169,192,032,130,004 224 data169,226,032,130,004,201,002,144 225 data008,169,255,032,082,004,076,034 226 data235,173,000,006,240,248,197,024 227 data240,196,173,000,006,133,006,173 228 data001,006,133,007,076,160,004,234 229 data234,234,234,160,000,185,025,244 230 data153,048,001,200,192,031,208,245 231 data076,048,001,169,000,168,089,000 232 data160,200,208,250,201,128,240,007 233 data169,055,133,001,076,001,245,076 234 data048,244,160,000,177,187,201,036 235 data240,242,169,001,133,167,169,000 236 data133,144,165,167,032,012,237,169 237 data111,032,185,237,165,144,016,011 238 data230,167,165,167,201,016,208,230 239 data076,187,238,165,167,201,008,240 240 data239,160,000,185,122,244,240,006 241 data032,210,255,200,208,245,032,225 242 data255,208,251,238,234,234,234,234 243 data076,187,238,234,013,066,073,084 244 data084,069,032,078,085,082,032,070 245 data076,079,080,080,089,032,065,078 246 data083,067,072,065,076,084,069,078 247 data013,000,000,000,000,000,000,000 248 data000,000,000,000,000,120,169,055 249 data133,001,160,000,132,003,169,160 250 data133,004,177,003,145,003,230,003 251 data208,248,230,004,208,244,169,229 252 data141,214,253,169,076,141,114,254 253 data141,249,244,169,188,141,115,254 254 data169,254,141,116,254,169,009,141 255 data250,244,169,244,141,251,244,169 256 data018,133,003,169,010,133,004,169 257 data226,133,005,169,248,133,006,177 258 data003,145,005,200,208,249,230,004 259 data230,006,165,006,201,250,208,239 260 data169,016,162,008,133,003,134,004 261 data169,187,162,238,133,005,134,006 262 data177,003,145,005,200,208,249,230 263 data004,230,006,165,006,201,240,208 264 data239,185,067,013,153,095,228,200 265 data192,080,208,245,160,000,185,012 266 data012,153,009,244,200,192,148,208 267 data245,169,053,133,001,076,248,252 268 data234,234,000,032,066,089,084,069 269 data083,032,070,082,069,069,013,000 270 data000,000,000,000,000,000,147,013 271 data032,032,032,032,042,042,042,042 272 data032,067,054,052,045,072,089,080 273 data082,065,045,076,079,065,068,045 274 data083,089,083,084,069,077,032,042 275 data042,042,042,013,013,032,040,067 276 data041,056,052,032,018,084,082,073 277 data066,065,082,146,032,032,000,129 278 data072,032,000,000,000,000,000,000 279 data000,000,000,000,000,000,000,000 280 rem ******************************* 290 rem * checksummen * 300 rem ******************************* 310 data10355,10666,10986,11346,11058 320 data09936,08856,08690,09460,07556 330 data08119,08952,09829,10579,08282 340 data12151,09771,03416,00000,00000 350 rem ******************************* 360 rem * initialisiere datas * 370 rem ******************************* 380 print"{clr}{down}{down} haben sie mich abge saved?" 390 geta$:ifa$<>"j"anda$<>"n"then390 400 ifa$="n"thenprint:print:print"dann aber schnell {down}{down}":end 410 print:print:print"bitte geduld; ueberpruefe checksummen !" 420 dim s(18) 430 forx=1to18 440 fory=1to80:reada:s(x)=s(x)+a 450 nexty,x 460 forx=1to18 470 readcs:ifs(x)=csthennext:goto510 480 print:print:print"fehler in datenblock !!!" 490 print:print"zeilen";90+10*x;" -";99+10*x" !" 500 end 510 restore:print:print:print"daten werden abgespeichert ." 520 forx=0to1439:reada:poke2049+x,a:next 530 poke45,179:poke46,13:poke47,179:poke48,13 540 print:print"mit 'save' speichern ":print 550 print"mit 'run' aktivieren !" 560 clr