Hypra-Load mal vier
Selten hat ein Programm so viele Leserreaktionen hervorgerufen wie Hypra-Load. Deswegen führen wir Ihnen heute vor, was man mit Hypra-Load noch so alles machen kann.
Hätten wir doch bloß nicht unsere Telefonnummern angegeben. Das war unser beherrschender Gedanke in den ersten Tagen nach Erscheinen der Ausgabe 10/84 des 64’er-Magazins. Doch nach und nach begannen wir am Telefonieren Gefallen zu finden, wohl auch deswegen, weil fast alle Anrufer so nett und höflich waren, und uns einige gute Tips und konstruktive Kritik gaben. Uns erreichten sogar Telefonate aus der Schweiz, Österreich, Holland und Dänemark.
Viele Anrufer hatten ein gemeinsames Problem: Nach RUN meldete sich der Basic-Lader immer mit FEHLER IN DATENBLOCK 100-109, obwohl dort garantiert kein Fehler vorlag. Manche Leser haben diesen DATA-Block mehrere Male eingetippt, und sogar von Hand aufaddiert und verglichen, konnten aber keinen Fehler finden. Hatte vielleicht unser Druckfehlerteufelchen zugeschlagen? Nein, das hatte genug Respekt vor der DATA-Wüste, um sie zu verschonen. Des Rätsels Lösung: Uns unterlief ein Denkfehler im Prüfsummenprogramm. Denn das arbeitet nur dann korrekt, wenn alle Zeilen und alle Kommata eingegeben werden, sonst meldet die total verwirrte Prüfsummenroutine einen Fehler, wo gar keiner ist. Entgegen unserer Aussage, daß Hypra-Load mit dem SX 64 nicht funktioniert, hatten einige SX 64-Besitzer keine Probleme. Es scheint drei oder vier verschiedene SX 64-Versionen zu geben, von denen sich mindestens eine nicht mit Hypra-Load verträgt. Wir wollen die genauen Gründe noch erforschen, und bitten alle SX 64-Besitzer um ihre Hilfe. Schreiben sie uns ihre Erfahrungen mit ihrem SX 64. Welche Programme laufen, welche nicht? Insbesondere würde uns dann die Seriennummer ihres SX 64 interessieren.
Unsere Bemühungen, Hypra-Load für den VC 20 umzuschreiben, scheiterten bisher an dessen Busstruktur.
Ein Fehler schlich sich in der Beschreibung zu Hypra-Load ein. Um es nach einem RESET mit einem Taster wieder einzuschalten, muß als erstes POKE 40960, PEEK (40960) eingegeben werden. Dann darf mit POKE 1,53 eingeschaltet werden.
So, nach dieser langen Vorrede aber endlich zu den versprochenen Änderungen an Hypra-Load.
Hypra-Boot
Manche Leser ärgerten sich darüber, daß, wolle man ein bestimmtes, langes Programm schnell laden, zwei LOAD- und zwei RUN-Befehle notwendig sind. Deswegen haben wir Hypra-Load zu Hypra-Boot umgeschrieben. Wie funktioniert Hypra-Boot? Nach dem Laden und Starten von Hypra-Boot wird automatisch ein weiteres Programm von Diskette nachgeladen und gestartet. Dieses Programm muß, wenn es kein Basic, sondern ein Maschinenprogramm ist, allerdings am Basic-Start mit zumindest einem SYS-Befehl vertreten sein, da Hypra-Boot den RUN-Befehl simuliert.
Und so geben sie Hypro-Boot ein: Laden Sie den Basic-Lader, das heißt, das in Ausgabe 10/84 abgedruckte Programm. Geben Sie nun die in Listing 1 abgedruckten Änderungen ein.
Damit Sie beliebige Programme nachladen können, müssen Sie natürlich noch den Filenamen des nachzuladenden Programms angeben. Dies geschieht wie folgt in der Zeile 276. Geben Sie als DATA-Werte die ASCII-Codes der ersten sieben Buchstaben des Filenamens und als achten Wert 042 (ASCII-Code für *) ein. Kürzere Filenamen sind erlaubt, dann muß der Stern aber auch früher stehen, soll kein FILE NOT FOUND ERROR gemeldet werden.
Da die DATA-Zeilen schon mit Prüfsummen für unseren Checksummer versehen sind, nimmt das Programm selbst keinen Prüfsummencheck vor!
Es wird auch nicht mit RUN, sondern mit GOTO 520 gestartet. Danach speichern Sie Hypra-Boot unter dem gewünschten Namen.
Hypra-Boot kann nicht nur Einzelprogramme, sondern zum Beispiel auch ein Menü-Programm oder ähnliches laden.
Ganz Verwegene können Hypra-Boot noch mit einem Autostart versehen. Allerdings ist Vorsicht geboten, sollen Autostart-Programme nachgeladen werden. Wenn diese den Stack überschreiben, kann es Konflikte mit Hypra-Boot geben. Am besten, Sie probieren es einfach aus. Hypra-Boot lädt immer wie LOAD"name",8,1!
Es kann ab und zu passieren, das Hypra-Boot beim Nachladen »VERIFYING« anzeigt. Dies hat nichts zu bedeuten und tritt nur auf, wenn Hypra-Boot selber ein Autostart-Programm ist. Es empfiehlt sich, Hypra-Boot so zu nennen, wie das nachzuladende Programm. Dieses erhält dann einen Namen wie "101" oder ähnliches. Dann können mehrere Hypra-Boot-Programme auf einer Diskette stehen.
Sollten Sie den Basic-Lader nicht besitzen, so wird es etwas kompliziert. Sie müssen, nach dem Laden von Hypra-Load, die entsprechenden DATA-Werte von Hand an die Speicherstellen von 3385 bis 3464 POKEn. Sie tippen also ein:
POKE 3385, 245
POKE 3386, 169
…
POKE 3464, 000
Vergessen Sie dabei nicht, sich vorher die DATA-Werte für den Filenamen zu notieren!
Hypra-Track 18
Wer sich weder ein Modul brennen, noch das Betriebssystem austauschen möchte, wäre froh, wenn er Hypra-Load auf jeder Diskette abspeichern könnte, um sich Diskettenwechsel zu ersparen. Aber da gibt es doch immer einige Disketten, die sich strikt weigern, Hypra-Load noch aufzunehmen, da weniger als 6 Blöcke frei sind. Was soll man tun? Weiterhin Disketten wechseln, den Inhalt auf zwei Disketten verteilen, oder auf Hypra-Load verzichten?
Es gibt noch eine letzte Rettung: Hypra-Load wird ins Directory-Track geschrieben. Normalerweise passen in ein Directory 144 Einträge. Wenn Hypra-Load am Ende des Directory-Tracks steht, ist dieses auf 88 Einträge begrenzt. Die normale Funktion des Directory wird dadurch nicht beeinträchtigt! Das Programm überprüft natürlich, ob weniger als 88 Einträge vorhanden sind, damit nichts aus Versehen gelöscht wird.
Das als Listing 2 abgedruckte Programm schreibt Hypra-Load in folgende Sektoren der Spur 18: 3,6,9,12,15,18.
Der Filename, den Hypra-Load tatsächlich erhalten soll, ist frei wählbar. An diesen wird »",8:« angehängt Somit ist es möglich, bei gelistetem Directory nur mit dem Cursor auf diesen Fileeintrag zu fahren, LOAD zu schreiben und RETURN zu drücken. Nach dem Laden startet man es, wie gewöhnlich, mit RUN.
Und so geben sie Listing 2 ein:
- Laden Sie den Basic-Lader von Hypra-Load, abgedruckt in Ausgabe 10/84
- Löschen Sie alle Zeilen außer die Zeilen von 100 bis 279
- Geben Sie nun Listing 2 zusätzlich ein.
- Speichern Sie das Ganze auf Diskette.
Wir empfehlen, unbedingt einen Testlauf mit einer leeren formatierten Diskette zu machen, da sich Tippfehler eingeschlichen haben könnten. Es wird kein Prüfsummenvergleich vorgenommen! Nach erfolgreichem Testlauf kann Hypra-Load auf praktisch alle Disketten überspielt werden.
Hypra-ROM
Manchmal ärgerten sogar wir uns darüber, daß Hypra-Load dann und wann neu geladen werden muß, sei es, weil der Computer eingeschaltet wurde, sei es, weil irgendein Programm mal wieder Hypra-Load oder das Basic-RAM überschrieben hatte. Hypra-Load resident machen, hieß also die Devise. Und wenn man nicht gerade das Betriebssystem auswechseln möchte, bietet es sich geradezu an, Hypra-Load in ein Modul zu brennen.
Hierzu sind weit weniger Änderungen nötig, als erwartet. Ganze vier DATA-Werte müssen modifiziert werden, soll Hypra-Load nicht ab $0800 sondern ab $8000 im Speicher stehen.
Es sind dies folgende Werte:
Zeile | Position | alter Wert | neuer Wert |
256 | 5 | 010 | 130 |
260 | 4 | 008 | 128 |
264 | 4 | 013 | 133 |
266 | 1 | 012 | 132 |
In den entsprechenden Bereich schreiben Sie Hypra-Load wie folgt:
FOR I = 32769 TO 34207 : READ A : POKE I,A : NEXT I
Bitte führen sie keinen RUN aus, da ja nun die Checksummen nicht mehr stimmen. Gestartet wird das Ganze nun mit SYS 33958. Hypra-Load meldet sich wie gewohnt. Dieses Programm kann auch in ein Modul gebrannt werden. Auf einen Autostart im Modul wurde verzichtet, da es ja einige Programme gibt, die sich mit Hypra-Load nicht vertragen (zum Beispiel Simons Basic).
Hier noch die POKEs für alle, die nur das Maschinenprogramm haben:
POKE 3301, 130: POKE 3332, 128
POKE 3356, 133: POKE 3343, 132
Danach muß der Speicherbereich von $0800 bis $0E00 nach $8000 verschoben werden, am besten mit einem Monitor oder einer FOR-NEXT-Schleife.
Dieser Bereich kann nun auch in ein EPROM gebrannt werden.
Wer Hypra-Load in andere Bereiche verschieben möchte, der sollte sich mit einem Disassembler das Umfeld der vier angegeben Adressen ansehen, und die Angleichungen selber vornehmen. Zu beachten ist nur, daß all diese Versionen immer noch das Betriebssystem ins RAM kopieren und dort verändern. Auf diese Art und Weise ist es nicht möglich, das Betriebssystem im ROM zu ändern!
Schnelles Laden ohne Laden
Das Arbeiten mit Hypra-Load und dem Diskettenlaufwerk 1541 ist für viele Commodore-Besitzer schon zur unverzichtbaren Gewohnheit geworden. Leider muß das Programm zuvor immer noch von Diskette geladen werden. Fest im Betriebssystem einprogrammiert entfällt dieser Nachteil.
Jedes Programm, daß die Datenübertragungsgeschwindigkeit vom Diskettenlaufwerk zum Computer beschleunigt, büßt einen Teil seines Geschwindigkeitsvorteils ein, weil es erst geladen und gestartet werden muß. Wesentlich angenehmer ist es, wenn der Computer schon nach dem Einschalten die gewünschte Laderoutine verwenden kann. Um zu diesem Ziel zu gelangen, sind zwei Wege denkbar. Zum einen kann man sich, ähnlich einem Spielmodul, eine Steckplatine mit EPROMs bauen und diese am Expansion-Port anschließen. Zum anderen besteht aber die Möglichkeit, den Computer intern zu verändern, indem ein neues Betriebssystem eingebaut wird. Die Vorteile der zweiten Methode sind beachtlich.
Dadurch, daß die Änderung des Betriebssystems nicht mehr im RAM-Bereich von $E000-$FFFF liegt, sondern im gleichen, darüberliegenden ROM-Bereich, steigt die Kompatibilität mit jeder Art von Programmen enorm. Die Erklärung dafür ist einfach. Viele Programme verwenden den $E000-Bereich, indem sie ihn kopieren und für ihre eigenen Zwecke modifizieren. Jedes dort befindliche Programm wird damit selbstverständlich überschrieben. Dazu gehören aber leider immer Betriebssystemänderungen wie beispielsweise das Hypra-Load. Steht die Veränderung aber im darüberliegenden ROM, so entstehen diese Probleme kaum noch, denn der beschriebene RAM-Bereich steht, wie bei jedem Original-Betriebssystem, frei zur Verfügung.
Natürlich ist zum Einbau des neuen Betriebssystems ein Eingriff in den Computer notwendig. Das alte Kernal-ROM muß gegen das neue ausgetauscht werden. Wie das gemacht wird, haben wir in der letzten Ausgabe ausführlich beschrieben. Die wichtigsten Arbeitsschritte werden aber trotzdem noch einmal erklärt. Zunächst ist es notwendig, das abgebildete Basic-Programm einzugeben und zu starten. Wenn es fehlerfrei funktioniert, kann es abgespeichert werden. Als nächstes wird ein EPROM-Programmiergerät benötigt, das in der Lage ist, EPROMs vom Typ 2764 zu brennen. Dieses Programmiergerät wird nun angeschlossen. Der nächste Arbeitsgang besteht aus der eigentlichen Veränderung des Betriebssystems. Alle notwendigen Programmierungen werden vom abgedruckten Programm selbständig durchgeführt. Dazu wird zunächst der Bereich $E000-$FFFF nach $6000-$7FFF kopiert. In Overlaytechnik werden anschließend sowohl das Hypra-Load als auch eine Funktionstastenbelegung programmiert. Wer auf die Funktionstastenbelegung verzichten möchte, braucht im Listing übrigens nur die Zeilen 8000 bis 9000 wegzulassen. Nachdem das Programm durchgelaufen ist, befindet sich im Bereich $6000 bis $7FFF ein komplettes, neues Betriebssystem, das lediglich noch in ein EPROM gebrannt werden muß. Selbstverständlich darf die Treibersoftware für das EPROM-Programmiergerät nicht in diesem Bereich liegen.
Das fertig gebrannte EPROM wird einfach im Steckplatz U4 auf der Computerplatine mit einem Adapter eingesteckt. Der Adapter ist leider wegen der unterschiedlichen Pinbelegung der Commodore-ROMs und des EPROMs unabdingbar. Auch wenn die Herstellung eines solchen Zwischenstücks etwas Geschick erfordert, stellt sie doch kein unüberbrückbares Problem dar.
Wenn der Computer nun nach dem Einschalten seine Bereitschaftsmeldung zeigt, steht dem schnellen Laden nichts mehr im Weg. Andernfalls sollten Sie das EPROM löschen und den Vorgang wiederholen. Die Belegung der Funktionstasten entspricht der in der letzten Ausgabe veröffentlichten, hinzugekommen ist aber die Belegung der RUN-Taste. Durch einmaliges Betätigen sind wieder die langsamen Laderoutinen aktiviert. Ein zweiter Druck auf die gleichen Tasten schaltet wieder auf Hypra-Load. Leider muß gelegentlich, besonders bei Autostartprogrammen, von dieser Funktion Gebrauch gemacht werden. Auch sollte zum Laden von Programmen nur ein Peripheriegerät eingeschaltet sein, da sonst eine Fehlermeldung ausgegeben wird. Die Belegung der Funktionstasten kann bei Bedarf mit Poke 2,1 ausgeschaltet und mit Poke 2,0 wieder angeschaltet werden.
Abgesehen von diesen Nachteilen und den nicht mehr möglichen Betrieb eines Datenrecorders, läßt sich mit dem neuen Betriebssystem sehr gut arbeiten. In einer der nächsten Ausgaben werden wir dem Commodore 64 und dem MPS 802 zusätzlich noch einen deutschen Zeichensatz verleihen. Schnelles Laden und eine Funktionstastenbelegung — der Commodore macht sich.
(Günther Reimuth/Uwe Schönewolf/Boris Schneider/Erich Schöberl/Arnd Wängler/gk)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
1000 clr 1010 rem 1020 rem ******************************** 1030 rem *** *** 1040 rem *** hypra-load *** 1050 rem *** mit 0 bloecken auf disk *** 1060 rem *** *** 1070 rem *** by *** 1080 rem *** uwe schoenewolf *** 1090 rem *** guenther reimuth *** 1100 rem *** *** 1110 rem ******************************** 1120 rem 1130 poke53280,0:poke53281,6 1140 na$=chr$(130)+chr$(18)+chr$(3) 1150 nb$=",8:" 1160 print"{clr}{wht}{down} hypra load mit 0 blocks auf diskette" 1170 print"{down} {gry3}von: uwe schoenewolf" 1180 print" {gry3} guenther reimuth{yel}" 1190 a$="":input"{down}{down}{down} hypra load auf diskette schreiben{rght}{rght} j{left}{left}{left}";a$ 1200 ifa$="j"thenprint"{down}{down}":goto1220 1210 sys64738 1220 open1,0 1230 n$="":print"{up}{up}{down}{rght}{rght}file name max. 1-12 >hypra load{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}";:input#1,n$ 1240 la=len(n$) 1250 close1 1260 ifla>12orla<1then1220 1270 open1,8,15 1280 open2,8,2,n$ 1290 input#1,a 1300 close2 1310 close1 1320 ifa=0thenprint:print"{down}{down} {rvon} file schon vorhanden {rvof}":goto1670 1330 na$=na$+n$+chr$(160)+nb$ 1340 la=len(na$) 1350 fori=19-lato1step-1 1360 na$=na$+chr$(160) 1370 next 1380 fori=1to12 1390 na$=na$+chr$(0):next 1400 rem ********************* 1410 rem * test auf freiraum * 1420 rem * fuer hypra-load * 1430 rem ********************* 1440 t=18:s=1:y=1 1450 open1,8,15 1460 open2,8,2,"#" 1470 print#1,"u1 2 0";t;s 1480 print#1,"b-p";2;0 1490 get#2,t1$:ift1$=""thent1$=chr$(0) 1500 get#2,s1$:ifs1$=""thens1$=chr$(0) 1510 t1=asc(t1$):s1=asc(s1$) 1520 ift1<>0thent=t1:s=s1:y=y+1:goto1470 1530 ify>12thenprint:print"{down}{down} {rvon} kein platz mehr auf diskete {rvof}":goto1570 1540 close2 1550 close1 1560 goto1630 1570 close2 1580 close1 1590 goto1670 1600 rem ***************************** 1610 rem * h-load auf disk schreiben * 1620 rem ***************************** 1630 gosub1730 1640 gosub2010 1650 print 1660 print"{down} fertig" 1670 print"{down} weiter mit [ space ]" 1680 geta$:ifa$=""then1680 1690 goto1130 1700 rem ****************** 1710 rem * name schreiben * 1720 rem ****************** 1730 t=18:s=1:y=1 1740 open1,8,15 1750 open2,8,2,"#" 1760 print#1,"u1 2 0";t;s 1770 print#1,"b-p";2;0 1780 get#2,t1$:ift1$=""thent1$=chr$(0) 1790 get#2,s1$:ifs1$=""thens1$=chr$(0) 1800 t1=asc(t1$) 1810 s1=asc(s1$) 1820 forq=0to7 1830 print#1,"b-p";2;q*32+2 1840 get#2,x$ 1850 ifx$=""thenx$=chr$(0) 1860 ifasc(x$)=0then1960 1870 next 1880 ift1<>0thent=t1:s=s1:y=y+1:goto1760 1890 ify>12thenprint:print"{down}{down} {rvon}zuviele files auf der diskette{rvof}":goto1990 1900 ifq<8then1960 1910 print#1,"b-p";2;0 1920 print#2,chr$(t)+chr$(s+3); 1930 print#1,"u2 2 0";t;s 1940 s=s+3 1950 print#1,"u1 2 0";t;s 1960 print#1,"b-p";2;q*32+2 1970 print#2,na$; 1980 print#1,"u2 2 0";t;s 1990 close2:close1:return 2000 rem ********************* 2010 rem * datas abspeichern * 2020 rem ********************* 2030 restore 2040 open1,8,15 2050 open2,8,2,"#" 2060 fors=3to15step3 2070 print#1,"b-p 2 0" 2080 a$="":a$=a$+chr$(18)+chr$(s+3) 2090 print#2,a$ 2100 print#1,"b-p 2 2" 2110 a$="" 2120 en=253 2130 ifs=3thenprint#2,chr$(1);chr$(8);:en=251 2140 fori=0toen 2150 readx 2160 a$=a$+chr$(x) 2170 next 2180 print#2,a$; 2190 print#1,"u2 2 0 18";s 2200 next 2210 print#1,"b-p 2 0" 2220 a$="":a$=a$+chr$(0)+chr$(170) 2230 fori=1to170 2240 readx 2250 a$=a$+chr$(x) 2260 next 2270 print#2,a$; 2280 print#1,"u2 2 0 18";s 2290 close2:close1:return
600 poke56,96:poke55,0:clr 890 print"kopieren des rom ins ram":print 900 fori=6*4049to8*4096-1:pokei,peek(i+32768):nexti 999 rem data zeilen einlesen 1000 print"{clr}":print:printtab(10);"lesen der data-zeilen":print:print 1010 t=0:of=32768 1020 t=t+1:reada:ifa=0then1100 1030 readb:rem anzahl der bytes 1032 readp1:rem pruefsumme 1033 p2=0 1035 print"block ";t;" "; 1040 fori=a-oftoa-of-1+b 1050 readd:pokei,d 1051 p2=p2+d:ifp2>65535thenp2=p2-65536 1053 nexti 1055 ifp2<>p1then1070 1057 print" ok" 1060 goto1020 1070 print"pruefsumme falsch: ";p2 1080 geta$:ifa$=""then1080 1090 goto1020 1100 print"fertig":end 7990 rem ab hier datas 7995 rem**************************************** 7996 rem **zeilen 8000 - 9000 koennen fuer betriebssystem ohne fuktionstasten** 7997 rem **weggelassen werden** 8000 data64226,126,14014 8001 data232,134,198,201,133,144,4,201,141,144,3,76,66,235,157,119,2,72,152 8002 data72,160,0,196,2,208,13,185,41,251,221,119,2,240,11,200,192,176,208 8003 data243,104,168,104,76,66,235,200,185,41,251,201,133,144,4,201,141,144 8004 data238,236,137,2,176,233,157,119,2,232,134,198,76,15,251,133,76,207 8005 data34,36,34,44,56,13,137,76,79,65,68,134,76,73,83,84,13,138,83,65,86 8006 data69,135,82,85,78,13,139,83,89,83,136,63,70,82,69,40,48,41,13,140,83 8007 data89,83,54,52,55,51,56,13,133,136 8009 rem **************************************** 8010 data 60223,3,552 8011 data76,226,250 9000 rem **************************************** 9010 data58552,33,4800:rem $e4b8-$e4d8 9020 data133,147,169,0,133,144,165,186,208,4,169,8,133,186,201,3,144,248,164 9030 data183,208,3,76,16,247,166,185,76,145,248,234,234,234 9040 rem **************************************** 9050 data60647,9,530:rem $ece7-$ecef 9060 data83,89,83,54,52,53,55,48,13 9070 rem **************************************** 9080 data62637,23,3533:rem $f4ad-$f4c3 9090 data201,4,176,4,169,8,133,186,164,183,208,3,76,16,247,166,185,234,234 9100 data234,234,234,234 9110 rem **************************************** 9120 data63276,212,29783:rem$f72c-$f7ff 9130 data169,226,162,248,133,167,134,168,169,0,162,3,133,169,134,170,165,186 9140 data32,12,237,169,111,32,185,237,169,77,32,221,237,169,45,32,221,237 9150 data169,87,32,221,237,160,0,165,169,32,221,237,165,170,32,221,237,169 9160 data30,32,221,237,177,167,32,221,237,200,192,30,144,246,32,254,237,24 9170 data165,167,105,30,133,167,144,3,230,168,24,165,169,166,170,105,30,133 9180 data169,144,2,230,170,224,5,144,173,201,0,144,169,165,186,32,12,237,169 9190 data111,32,185,237,169,77,32,221,237,169,45,32,221,237,169,69,32,221 9200 data237,169,139,32,221,237,169,4,32,221,237,169,239,45,17,208,32,90,252 9210 data234,234,76,21,252,169,11,141,0,221,44,0,221,16,251,169,3,141,0,221 9220 data162,5,202,234,208,252,162,4,173,0,221,42,42,102,176,106,102,176,234 9230 data202,208,242,165,176,73,255,96,32,195,247,201,255,240,248,160,0,169 9240 data11,141,0,221,44,0,221,16,251 9250 rem **************************************** 9260 data63488,256,34399:rem $f800-f8ff 9270 data169,3,141,0,221,162,7,202,208,253,173,0,221,42,42,102,176,106,102 9280 data176,234,234,173,0,221,42,42,102,176,106,102,176,234,234,173,0,221 9290 data42,42,102,176,106,102,176,234,234,173,0,221,42,42,102,176,106,102 9300 data176,165,176,73,255,153,0,2,200,208,180,96,120,169,1,133,167,160,255 9310 data32,237,247,192,255,240,64,162,2,165,167,240,2,162,4,173,0,2,208,7 9320 data238,1,2,173,1,2,44,169,0,133,168,189,0,2,145,174,230,174,208,2,230 9330 data175,232,228,168,208,240,162,0,134,167,173,0,2,208,198,169,16,13,17 9340 data208,234,141,17,208,169,64,133,144,24,96,32,175,245,169,96,133,185 9350 data32,213,243,165,186,32,9,237,165,185,32,199,237,32,19,238,133,174 9360 data165,144,74,74,144,3,76,48,245,32,19,238,133,175,138,208,20,165,195 9370 data133,174,165,196,133,175,32,210,245,169,253,37,144,133,144,76,160 9380 data251,165,175,201,4,176,238,76,240,244,255,255,255,255,255,255,255 9390 data255,234,96,165,0,41,6,201,2,240,3,76,158,253,234,169,5,133,9,162 9400 data90,134,75,162,0,169,82,133,36,32,86,245,80 9410 rem **************************************** 9420 data63744,256,27098:rem$f900-$f9ff 9430 data254,184,173,1,28,197,36,240,9,198,75,208,239,169,10,76,105,249,80 9440 data254,184,173,1,28,149,37,232,224,7,208,243,32,151,244,165,22,69,23 9450 data69,24,69,25,69,26,240,7,198,9,208,192,76,30,244,165,24,197,6,240 9460 data3,76,11,244,133,34,169,6,133,49,76,60,4,165,18,166,19,133,22,134 9470 data23,165,6,133,24,165,7,133,25,169,0,69,22,69,23,69,24,69,25,133,26 9480 data32,52,249,162,90,32,86,245,160,0,80,254,184,173,1,28,217,36,0,240 9490 data6,202,208,237,76,81,245,200,192,8,208,234,32,86,245,80,254,184,173 9500 data1,28,145,48,200,208,245,160,186,80,254,184,173,1,28,153,0,1,200,208 9510 data244,32,224,248,165,56,197,71,240,3,76,246,244,32,233,245,197,58,240 9520 data3,76,2,245,160,0,169,85,32,82,4,185,0,6,133,119,44,0,24,16,251,169 9530 data16,141,0,24,44,0,24,48,251,162,0,138,102,119,42,42,102,119,42,42 9540 data141,0,24,138,102,119,42,42,102,119,42,42,141,0,24,138,102,119,42 9550 data42,102,119,42,42,141,0,24,138,102,119,42,42,102,119,42,42,141 9560 rem **************************************** 9570 data64000,226,25915:rem $fa00-$fae1 9580 data0,24,162,2,202,208,253,169,15,141,0,24,200,208,173,234,234,234,234 9590 data234,234,234,173,0,28,9,8,141,0,28,173,0,6,208,3,76,158,253,197,24 9600 data208,249,133,6,173,1,6,133,7,76,101,3,133,119,44,0,24,16,251,169,16 9610 data141,0,24,44,0,24,48,251,162,4,169,0,102,119,42,42,102,119,42,42,141 9620 data0,24,202,208,240,234,234,234,234,234,234,169,15,141,0,24,96,96,133 9630 data0,88,165,0,48,252,120,96,120,234,234,234,234,234,234,165,24,141,0 9640 data6,133,6,165,25,141,1,6,133,7,169,4,133,120,169,226,32,130,4,201,2 9650 data144,51,160,0,132,120,164,120,185,219,254,240,18,88,32,118,214,120 9660 data169,226,32,130,4,201,2,144,26,230,120,208,231,169,192,32,130,4,169 9670 data226,32,130,4,201,2,144,8,169,255,32,82,4,76,34,235,173,0,6,240,248 9680 data197,24,240,196,173,0,6,133,6,173,1,6,133,7,76,160,4,234,234,234,234 9690 data160,0,185,25,244,153 9700 rem **************************************** 9710 data64416,192,24821:rem $fba0-$fc5f 9720 data160,89,185,0,2,153,0,3,200,192,0,208,245,160,0,177,187,201,36,208 9730 data3,76,1,245,169,1,133,167,169,0,133,144,165,167,32,12,237,169,111 9740 data32,185,237,165,144,16,11,230,167,165,167,201,8,208,230,76,44,247 9750 data165,167,197,186,240,239,160,0,185,248,251,240,6,32,210,255,200,208 9760 data245,32,225,255,208,251,76,44,247,234,234,234,234,13,66,73,84,84,69 9770 data32,78,85,82,32,70,76,79,80,80,89,32,65,78,83,67,72,65,76,84,69,78 9780 data13,32,67,248,8,72,160,89,185,0,3,153,0,2,200,192,0,208,245,166,174 9790 data164,175,104,40,88,96,255,255,255,255,255,255,255,255,255,255,234 9800 data72,169,244,205,49,3,240,10,141,49,3,169,165,141,48,3,104,96,173,76 9810 data253,141,48,3,173,77,253,141,49,3,104,96,141,17,208,76,251,237 9820 rem **************************************** 9830 data64844,2,412:rem $fd4c-$fd4d 9840 data184,228 10000 data0