Graphic Art – die Antwort auf das Spriteproblem
Einfarb- und Mehrfarbsprites lassen sich mit diesem Programm leicht, übersichtlich und vor allem schnell erstellen, bearbeiten und speichern.
Dieser Sprite-Editor (Listing 1 und 2) besteht aus zwei Teilen: einem Maschinenspracheteil, der schnelle Routinen zur Cursorsteuerung und zum Verschieben enthält und einem Basic-Teil, der der Tastaturabfrage dient. Diese »Zweiteilung« wirkt sich aber in keiner Weise auf die Gesamtgeschwindigkeit des Programms aus. Vielmehr erspart sie beim Abtippen die Eingabe stupider Zahlenkolonnen. Das Basic-Programm baut das Menü auf und läßt die verwendeten Sprites an der richtigen Position erscheinen (Bild 1 rechts oben in den vier Kästchen). Malt man mit »Graphic Art« seine Figur, so wird sie gleich als Sprite oben in der rechten Ecke angezeigt (und zwar normal und in x-, y- und x/y-Richtung vergrößert). So hat man sein Ergebnis immer gleich vor Augen.

Der Basic-Teil (Listing 1) steuert auch noch die Disketten-Operationen. So lassen sich die eben erstellten Sprites abspeichern oder alte zur weiteren Verschönerung einlesen. Man kann den Fehlerkanal abfragen und Disketten-Befehle senden.
Im Maschinenteil sind all die Routinen untergebracht, die in Basic zu langsam wären. Dieses sind zum Beispiel die Cursorsteuerung und das eigentliche Zeichnen, der Aufbau der Zeichenmatrix und, nicht zu vergessen, die Scroll-Routinen. Mit »Graphic Art« lassen sich in Sekundenschnelle die Sprites in alle Richtungen verschieben (dieses ist sehr wichtig, wenn man sich beim Zeichnen mal um ein paar Bildschirmpositionen geirrt hat).
Die Bedienung von Graphic Art
So, dieses erst einmal zu den Möglichkeiten und zum Aufbau des Programms. Doch nun zur Bedienung von »Graphic Art«. Nachdem man den Basic-Teil gestartet hat, wird der Maschinenspracheteil (Listing 2) nachgeladen (er steht dann von 49152 -$C000- bis $C700- 50944). Anschließend erscheint das Menü im Mehrfarbmodus. Die Umschaltung in den Einfarbmodus (und wieder zurück) erfolgt durch Drücken der M-Taste. Es wird dann ein ähnliches Menü neu aufgebaut.
Nachdem Sie sich für die Art der Sprites entschieden haben, kann es ans Zeichnen gehen. Gezeichnet wird nur mit dem Joystick (PORT 2), wobei ein Druck auf den Feuerknopf einen Punkt setzt beziehungsweise wieder löscht. Auf eine zusätzliche Steuerung mit den Cursor-Tasten wurde verzichtet, da über diese Tasten das Verschieben der Sprites geregelt wird. Dieses geht nicht nur schnell, sondern damit auch in den gewohnten Richtungen besonders einfach und übersichtlich.
Die Spritefarben werden alle über die Funktionstasten gesteuert, wobei F1/F2 für die Hauptspritefarbe ($D027), F3/F4 für die Hintergrundfarbe (es erscheint ein Farbfenster direkt hinter den Sprites), F5/F6 für die erste Nebenspritefarbe ($D025 - nur wichtig für den Multicolour-Modus) und F7/F8 für die Nebenfarbe 2 ($D026) gilt.
Im Multicolour-Modus werden alle drei Farben angezeigt (Multicolour-Sprites erlauben das Zeichnen mit höchstens drei Farben). Das gleiche gilt auch für die aktuelle Zeichenfarbe. Sie kann man aus den Spritefarben 1 bis 3 durch Drücken von SHIFT und der entsprechenden Farbnummer (also 1, 2 oder 3) herauswählen. Der Zeichenfarbwechsel wird dann angezeigt.
Um im Multicolour-Modus Sprites zu erstellen, gehen Sie am besten so vor: Zuerst entscheiden Sie, welche drei Farben Ihr Sprite haben soll (mit F-Tasten). Anschließend wählen Sie die Zeichenfarbe und beginnen zu zeichnen. Achtung, wenn Sie eine der drei Farben wechseln wollen, so wird jeder Punkt, der mit dieser Farbe gezeichnet wurde, auf die neu eingestellte Farbe umgestellt! Sollte die Farbe, die geändert wird, die aktuelle Zeichenfarbe sein, so passen Sie bitte anschließend die Zeichenfarbe neu an (mit SHIFT und Farbnummer), da sich das Programm nicht merkt, welche der drei Farben die Zeichenfarbe ist.
Der Spritepuffer
Mit »Graphic Art« lassen sich acht Sprites direkt im Computer ablegen. Dem Benutzer stehen folglich acht «Sprite-Ablegebereiche« zur Verfügung, in die man durch Drücken der »↑«-Taste den gerade sichtbaren Bereich hineinschreiben kann. Zurückholen läßt sich das Sprite mit der »*«-Taste. Natürlich wird das gerade sichtbare Sprite dabei überschrieben. »Graphic Art« bietet auch die Möglichkeit des Speicherns der Spritedaten auf Diskette sowie (für nicht-Floppy-Besitzer) der Ausgabe der Daten auf Bildschirm und Drucker.
Drücken Sie »A« für Ausgabe und im unteren Teil des Menüs erscheinen die drei Wahlmöglichkeiten: Drücken Sie nun »1« für Diskette, so wird das Sprite, nachdem ihm ein Name gegeben wurde, auf Diskette als SEQ-Datei gespeichert und läßt sich nun leicht in eigene Programme nachladen (so erspart man sich die DATA-Zeilen – aber Achtung: die Farben werden nicht mit gespeichert! Sie müssen nach Laden der Daten in die entsprechenden Farbregister gePOKEt werden).
Wer lieber DATAs mag oder kein Disketten-Laufwerk hat, der kann sich die Spritedaten ausdrucken oder auf dem Bildschirm ausgeben lassen. In diesem Fall wird man noch gefragt, ob das Programm beendet werden soll. Wenn ja, so ist der Editor gelöscht. Dafür stehen nun in den Zeilen 1 bis 6 die Spritedaten. Diese können nun mit einem MERGE in Ihr Programm übernommen werden.
Natürlich ist es auch möglich, gespeicherte Sprites wieder zu laden und weiter zu bearbeiten. Dazu drückt man die ←-Taste.
Floppy-Besitzer werden sich freuen, denn »Graphic Art« läßt auch die Eingabe von Disketten-Befehlen zu. So kann man eine Diskette neu formatieren, ein File löschen und so weiter. Dieses und die Abfrage des Fehlerkanals wird durch den Druck auf die Klammeraffen-Taste ermöglicht (eine Anmerkung noch: alle Untermenüs können durch Drücken der RETURN-Taste verlassen werden).
Damit ist die Bedienung der Aus- und Eingabegeräte erklärt. Ich will nun auf das Zeichnen selbst mit »Graphic Art« noch ein wenig genauer eingehen.
Normalerweise wird durch Drücken des Feuerknopfes ein Punkt gesetzt oder gelöscht. Durch ständiges Drücken kann das Ziehen einer horizontalen Linie erreicht werden. Ist jedoch das Zeichnen einer vertikalen Linie erwünscht, so schaltet man den DRAW-Modus ein (durch Drücken von D-an/Shift D-aus). Nun wird jeder Punkt, über den man mit dem Cursor fährt, gesetzt (oder gelöscht). So ist ein Zeichnen von Linien sehr einfach.
So wird gezeichnet
Manchmal ist das Löschen aber dabei nicht erwünscht (zum Beispiel wenn eine Fläche ausgefüllt werden soll). »Graphic Art« bietet hierfür die Möglichkeit, mit dem Feuerknopf (beziehungsweise im Draw-Modus bei Cursorbewegung) nur zu setzen und nicht zu löschen. Dieses Nur-Setzen wird im Menü durch den S-Modus gekennzeichnet – im Gegensatz dazu der Setzen/Löschen-(=S/L-)Modus. Durch Drücken der S-Taste kann man sich den gewünschten Modus auswählen. Der S-Modus funktioniert aber nur bei der Erstellung der Einfarbsprites. Allerdings ist es möglich, durch Drücken der SPACE-Taste doch noch einen Punkt zu löschen.
Und nun noch ein paar Kleinigkeiten:
Durch Drücken der Tasten 1 bis 9 wird eine Geschwindigkeitsänderung des Cursors erreicht. Auch eine Reverse-Funktion ist in »Graphic Art« mit eingebaut. Durch Betätigen der 0-Taste erscheint das Sprite dann reverse. Dieses ist sehr angenehm und erspart viel Arbeit, wenn man ein fast ganz ausgefülltes Sprite malen will. Übrigens lassen sich einige Cursor-Bewegungen auch von der Tastatur aus steuern. So wird nach Drücken von CLR das Sprite gelöscht, ein HOME läßt den Cursor links oben in der Ecke erscheinen und ein RETURN setzt ihn an den Anfang der nächsten Zeile.
Eine Sache noch, die besonders den Multicolour-Modus betrifft. Dabei kann es vorkommen, daß die Cursor-Lupe, die eigentlich gelb ist, nicht mehr erkannt werden kann, wenn das gerade bearbeitete Sprite ebenfalls zum Teil die gleiche Farbe besitzt. Um dennoch immer über die genaue Zeichenposition im klaren zu sein, kann durch Betätigen der +/-Tasten die Cursorfarbe geändert werden.
Und nun zu guter Letzt noch zwei Hinweise zum Abtippen. Zum einen können die REMs alle weggelassen werden. Zum anderen ist in einige Basic-Zeilen so viel reingepreßt worden, daß die Befehle zum Teil verkürzt eingegeben werden müssen (für PRINT also »?« und so weiter – schauen Sie eventuell im Handbuch nach!). Vor dem Starten unbedingt beide Programme speichern!!!
Ganz zum Schluß noch ein Tip: »Graphic Art« berechnet zwar Ihre Sprites, wie diese dann aber gesteuert werden, kann es nicht erraten.
(Andreas Holz/ah)5 poke56,61:poke55,192
10 poke53280,0:poke53281,0:poke650,128:poke53272,23:print"{clr}"
11 ::
12 ifa=0thena=1:load"mt-grafik-art",8,1
99 ::
100 rem+++++++++++++++++++++++++++++
101 rem+ +
102 rem+ grafik-art +
103 rem+ +
104 rem+ andreas a. holz +
105 rem+ zikadenweg 15 +
106 rem+ [3017728] 1 berlin 19 +
107 rem+ +
108 rem+++++++++++++++++++++++++++++
109 ::
120 for x=704to766:reada:pokex,a:next:rem single cusour [11. block]
130 for x=896to958:reada:pokex,a:next:rem multi cusour [14. block]
135 forx=1to9:readsp(x):next:rem +++++speed-datas
140 v=53248:pokev+21,143:pokev+14,0:pokev+15,29:pokev+46,7:pokev+29,134:pokev+23,140
150 v$="{blu}7654321{lblu}0":l$=" ":poke198,0
155 gosub710:gosub830:sys49702:rem bildschirmaufbau+sprite loeschen [13.block]
170 poke2040,13:pokev+16,6:pokev,255:pokev+1,51:pokev+39,14:rem+ sprite 0
180 poke2041,13:pokev+2,28:pokev+3,51:pokev+40,14:rem+++++++++++ sprite 1
190 poke2042,13:pokev+4,28:pokev+5,80:pokev+41,14:rem+++++++++++ sprite 2
200 poke2043,13:pokev+6,255:pokev+7,80:pokev+42,14:rem++++++++++ sprite 3
298 ::
299 poke198,0
300 sys49152
305 geta$:ifa$=""goto300
310 ifa$="{f3}"thensys49682:goto300
320 ifa$="{f4}"thensys49692:goto300
322 ifa$="{rght}"thensys50559:goto300
324 ifa$="{left}"thensys50542:goto300
326 ifa$="{down}"thensys49879:goto300
328 ifa$="{up}"thensys49931:goto300
350 ifa$="d"thensys49778:gosub800:goto299
355 ifa$="D"thensys49794:gosub800:goto299
360 ifa$="{clr}"thensys49702:goto299
370 ifa$="{home}"thenpokev+14,0:pokev+15,29:goto299
380 ifa$=chr$(13)thenifpeek(v+15)<>189thenpokev+14,0:pokev+15,peek(v+15)+8:goto299
390 ifa$="s"thensys49821:gosub800:goto299
392 ifa$="{f1}"thensys49720:goto300
393 ifa$="{f2}"thensys49735:goto300
394 ifa$="{f5}"thensys50502:goto300
395 ifa$="{f6}"thensys50522:goto300
396 ifa$="{f7}"thensys50512:goto300
397 ifa$="{f8}"thensys50532:goto300
400 ifa$=" "thenifpeek(49405)=176thensys49844:goto300
410 ifa$="0"thenforx=832to894:pokex,255-peek(x):next:sys49548:goto299
490 ifa$="m"thensys50065:gosub710:gosub830:sys49548:goto299
495 ifa$="a"thengosub1010:goto300
497 ifa$="@"goto3005
500 ifa$="!"thenifpeek(49236)=15thenpoke49997,128:poke49996,peek(v+39):gosub760:goto299
510 ifa$=chr$(34)thenifpeek(49236)=15thenpoke49997,64:poke49996,peek(v+37):gosub760:goto299
520 ifa$="#"thenifpeek(49236)=15thenpoke49997,192:poke49996,peek(v+38):gosub760:goto299
525 ifa$="_"thengosub4000:goto299
527 ifasc(a$)>48andasc(a$)<58thenpoke1661,128+asc(a$):poke49294,sp(asc(a$)-48):goto300
528 ifa$="+"thenifpeek(v+46)<>255thenpokev+46,peek(v+46)+1:goto299
529 ifa$="-"thenifpeek(v+46)<>0thenpokev+46,peek(v+46)-1:goto299
535 ifa$="^"goto7010
540 ifa$="*"goto7050
550 goto300
700 rem++++++++++++++++++++++++
701 rem+ +
702 rem+ bildschirmaufbau +
703 rem+ +
704 rem++++++++++++++++++++++++
705 ::
710 pokev+14,0:pokev+15,29
715 print"{clr}";:ifpeek(49236)=15goto740
720 forx=1to21:print"{red}++++++++++++++++++++++++{blu}"x:next:forx=0to2:printv$;:next
730 poke2047,11:pokev+28,0:goto800
740 forx=1to21:print"{red}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{CBM-D}{CBM-F}{blu}"x:next:forx=0to2:printv$;:next
750 poke2047,14:pokev+28,15
760 poke214,17:poke211,28:sys58640:print"{cyn}Zeichen= ";:poke646,peek(49996):print"{rvon} {down}{left}{left} {rvof}"
765 poke214,18:poke211,31:sys58640:print"{cyn}farbe"
770 poke214,20:poke211,28:sys58640:print"{lred}Farbe #1 ";:poke646,peek(53287):print"{rvon} {rvof}"
780 poke214,21:poke211,28:sys58640:print"{red}Farbe #2 ";:poke646,peek(53285):print"{rvon} {rvof}"
790 poke214,22:poke211,28:sys58640:print"{pur}Farbe #3 ";:poke646,peek(53286):print"{rvon} {rvof}"
800 poke214,11:poke211,28:sys58640:print"{blu}DRAW {rvon} a";
805 ifpeek(49280)<>234goto808
806 print"n {rvof}":goto810
808 print"us {rvof}"
810 poke214,13:poke211,28:sys58640:print"{lblu}S/L-Modus-S":ifpeek(49404)=43thenpoke1582,128+peek(1582)
820 ifpeek(49404)<>43thenforx=1572to1574:pokex,128+peek(x):next:return
825 return
830 poke214,15:poke211,28:sys58640:print"{grn}SPEED # {rvon} 5 {rvof}":poke49294,64:return
839 ::
840 rem++++ single-sprite-data's ++++
845 data,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,8,128,,16,64,,16,64,,8,192,,7,224,,,48
850 data,,24,,,,,,,,,,,,
900 :
905 rem++++ multi -sprite-data's ++++
910 data,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31,252,,32,2,,32,2,,32,2,,32,2,,31,252,,
915 data,,,,,,,,,,,,
920 :
925 rem++++ speed - datas ++++++++++++
930 data80,75,68,64,58,48,35,25,17
935 ::
1000 rem+++++++++++++++++++++++
1001 rem+ +
1002 rem+ ausgabe +
1003 rem+ +
1004 rem+++++++++++++++++++++++
1005 :
1010 poke198,0:poke214,23:poke211,0:sys58640:print"{lblu}Ausgabe..."
1020 print"1. Disk 2. Drucker 3. Screen";
1030 geta$:ifa$="1"goto2001
1035 ifa$="2"goto1050
1040 ifa$="3"thengosub1055:goto1080
1042 ifa$=chr$(13)thengosub1095:goto300
1045 goto1030
1050 open4,4:cmd4:gosub1060:print#4:close4:gosub1095:return
1055 print"{clr}";:pokev+21,0
1060 forx=0to4:printx+1"data";:forx1=0to10:printpeek(832+x1+x*12)"{left},";
1065 next:printpeek(832+x1+x*12)
1070 next:printx+1"data";:forx=892to893:printpeek(x)",";:next:printpeek(894):return
1080 input"{down}{down}Programm Ende";a$:ifmid$(a$,1,1)="j"goto5000
1090 gosub710:gosub830:pokev+21,143:sys49548:return
1095 forx=0to1:poke214,23+x:poke211,0:sys58640:printl$;:next:return
1097 poke53280,2:poke53265,peek(53265)and239:return
1098 poke53265,peek(53265)or16:poke53280,0:return
1099 open2,8,2,n$+",s,w":return
1100 ::
1101 close2:gosub1099:gosub1095:sys50607:gosub1098:wait198,1:gosub1095:sys65511:return
2000 ::
2001 gosub1095:gosub4101:ifn$=""thengosub1095:goto300
2010 gosub1097:gosub1099:open15,8,15:input#15,a$:ifa$<>"00"goto1101
2015 forx=832to832+62:print#2,peek(x)
2020 next
2025 close2:close15:gosub1095:gosub1098:return
3000 rem+++++++++++++++++++++++++++
3001 rem+ +
3002 rem+ disk...... +
3003 rem+ +
3004 rem+++++++++++++++++++++++++++
3005 poke214,23:poke211,0:sys58640:print"{lblu}Disk...":print"1. DOS 2. Disk-Status";
3010 geta$:ifa$="1"goto3050
3015 ifa$="2"goto3070
3016 ifa$=chr$(13)thengosub1095:goto299
3020 goto3010
3050 gosub1095:poke214,23:poke211,0:sys58640:gosub4100:ifn$=""thengosub1095:goto300
3055 open1,8,15,n$:close1:gosub1095:goto300
3070 gosub1095:sys50709:wait198,1:gosub1095:poke198,0:goto299
3100 rem+++++++++++++++++++++++++++
3101 rem+ +
3102 rem+ eingabe +
3103 rem+ +
3104 rem+++++++++++++++++++++++++++
3998 open2,8,2,n$+",s,r":return
3999 close2:gosub3998:gosub1095:sys50607:gosub1098:wait198,1:gosub1095:sys65511:return
4000 gosub4101:ifn$=""thengosub1095:goto300
4001 gosub1097:gosub3998:open15,8,15:input#15,a$:ifa$<>"00"goto3999
4005 forx=832to832+62:input#2,a:pokex,a:next
4010 close2:close15:gosub1095:sys49548:gosub1098:return
4091 ::
4092 rem +++ get name +++
4093 ::
4100 n$="":poke214,23:poke211,0:sys58640:print"{lblu}Befehl? ";:n=29:goto4105
4101 n$="":poke214,23:poke211,0:sys58640:print"{lblu}Filename? ";:n=16
4105 a$="":poke198,0:poke204,0
4110 geta$:ifa$=""then4110
4114 ifa$=chr$(13)thenpoke204,1:print" ";:return
4120 ifa$=chr$(20)thenifn$<>""thenpoke204,1:print"{left} {left}{left}";:n$=left$(n$,len(n$)-1):goto4105
4125 ifn$=""thenifa$=chr$(20)then4110
4130 iflen(n$)=nthen4110
4135 poke204,1:printa$;:n$=n$+a$:goto4105
5000 poke631,19:forx=632to632+6:pokex,13:next:poke198,7:new
7003 ::
7004 rem **** sprite-speicher
7005 ::
7010 poke214,23:poke211,0:sys58640:print"{lblu}Sprite speichern"
7015 n$="":n=1:print"Spritenr. (1-8)? ";:gosub4105:ifn$=""thengoto7065
7016 x=val(n$):ifx<1orx>8goto7065
7020 forx1=0to62:poke15808+(64*(x-1))+x1,peek(832+x1):next:gosub1095:goto299
7030 ::
7050 poke214,23:poke211,0:sys58640:print"{lblu}Sprite einlesen"
7055 n$="":n=1:print"Spritenr. (1-8)? ";:gosub4105:ifn$=""thengosub1095:goto299
7060 x=val(n$):forx1=0to62:poke832+x1,peek(15808+(64*(x-1))+x1):next
7065 gosub1095:sys49548:goto299
PROGRAMM : MT-GRAFIK-ART C000 C700 ----------------------------------- C000 : A5 CB C9 40 F0 01 60 AD F9 C008 : 00 DC AA A8 29 01 F0 1A C9 C010 : 8A 29 02 F0 26 98 29 04 A1 C018 : F0 32 AD 00 DC AA 29 08 65 C020 : F0 44 8A 29 10 F0 59 4C 81 C028 : 00 C0 AD 0F D0 C9 1D F0 87 C030 : 52 38 E9 08 38 8D 0F D0 E8 C038 : 4C 83 C0 AD 0F D0 C9 BD 46 C040 : F0 41 18 69 08 18 8D 0F 9A C048 : D0 4C 83 C0 AD 0E D0 C9 59 C050 : 00 F0 30 C9 0F D0 05 A9 EC C058 : 00 4C 60 C0 38 E9 10 38 32 C060 : 8D 0E D0 4C 83 C0 AD 0E C3 C068 : D0 C9 AF F0 16 C9 00 D0 78 C070 : 05 A9 0F 4C 7A C0 18 69 78 C078 : 10 18 8D 0E D0 4C 83 C0 B8 C080 : 4C 94 C0 A2 00 A0 00 C8 31 C088 : C0 FF D0 FB E8 E0 40 D0 34 C090 : F4 4C 07 C0 AE 0E D0 E8 F5 C098 : 8A A2 00 C9 08 90 0D 38 56 C0A0 : E9 08 38 C9 08 90 04 E8 BC C0A8 : 4C 9F C0 E8 AC 0F D0 C8 29 C0B0 : 98 A0 00 38 E9 08 38 C9 F3 C0B8 : 08 90 04 C8 4C B3 C0 88 99 C0C0 : 88 A9 04 85 FB A9 00 85 E7 C0C8 : FA 4C CE C0 06 06 8E CC 18 C0D0 : C0 8C CD C0 18 6D CC C0 03 C0D8 : 85 FA A9 00 65 FB 18 85 E6 C0E0 : FB A2 00 A5 FA 18 6D CD A3 C0E8 : C0 85 FA A9 00 65 FB 85 85 C0F0 : FB 18 E8 E0 28 D0 EC A0 4B C0F8 : 00 B1 FA C9 A0 D0 07 4C 0E C100 : 5C C4 FA 4C 40 C1 4C 1C 82 C108 : C4 FA 4C 0E C1 06 AD CC BB C110 : C0 A2 00 C9 08 90 08 38 F0 C118 : E9 08 38 E8 4C 13 C1 8D B0 C120 : 0D C1 8A A0 00 18 6D CD D7 C128 : C0 18 C8 C0 03 D0 F6 AA 26 C130 : AC 0D C1 60 71 C1 1D 40 F9 C138 : 03 9D 40 03 4C 65 C2 07 83 C140 : AD CC C0 A2 00 C9 08 90 67 C148 : 08 38 E9 08 38 E8 4C 45 6E C150 : C1 8D 3F C1 8A A0 00 18 BE C158 : 6D CD C0 18 C8 C0 03 D0 1F C160 : F6 AA AC 3F C1 B9 79 C1 12 C168 : 3D 40 03 9D 40 03 60 65 A2 C170 : C2 80 40 20 10 08 04 02 DC C178 : 01 7F BF DF EF F7 FB FD CF C180 : FE A9 00 A2 0A 9D 76 02 13 C188 : CA D0 FA 60 4C 89 C4 04 B1 C190 : 85 FA 84 FB A9 40 A0 03 58 C198 : 85 FC 84 FD A2 00 A0 00 29 C1A0 : B1 FC 0A 85 02 90 07 A9 17 C1A8 : A0 91 FA 4C B2 C1 A9 2B 8F C1B0 : 91 FA C8 A5 02 C0 08 D0 8D C1B8 : E9 E6 FC 18 A9 08 65 FA BD C1C0 : 85 FA A9 00 65 FB 85 FB 71 C1C8 : E8 E0 03 D0 D1 A9 10 18 D6 C1D0 : 65 FA 85 FA A9 00 65 FB 9B C1D8 : 85 FB A5 FC C9 7F D0 BC B9 C1E0 : 60 AD 0F C2 8D 86 02 A2 8D C1E8 : 00 A0 1C 18 20 F0 FF EA A2 C1F0 : EA 20 FF C1 C8 C0 27 D0 F3 C1F8 : F2 E8 E0 0A D0 EB 60 A9 19 C200 : 12 20 D2 FF A9 20 20 D2 99 C208 : FF A9 92 20 D2 FF 60 AD 8E C210 : EA EA EE 0F C2 20 E1 C1 45 C218 : 20 81 C1 60 CE 0F C2 20 26 C220 : E1 C1 20 81 C1 60 A9 00 E0 C228 : AA 9D 40 03 E8 E0 3F D0 45 C230 : F8 20 8C C1 20 81 C1 60 69 C238 : EE 27 D0 EE 28 D0 EE 29 E3 C240 : D0 EE 2A D0 4C 53 C2 CE 34 C248 : 27 D0 CE 28 D0 CE 29 D0 5A C250 : CE 2A D0 A2 00 A0 00 C8 52 C258 : C0 FF D0 FB E8 E0 01 D0 07 C260 : F4 4C 45 C3 EA AD 91 C0 28 C268 : C9 EA D0 03 4C 07 C0 4C D3 C270 : 66 C0 A2 00 A9 EA 9D 91 6A C278 : C0 9D 80 C0 E8 E0 03 D0 82 C280 : F5 60 A9 4C A2 07 A0 C0 00 C288 : 8D 91 C0 8E 92 C0 8C 93 68 C290 : C0 8D 80 C0 8C 82 C0 A2 74 C298 : 94 8E 81 C0 60 A2 00 BD 82 C2A0 : FC C0 BC B2 C2 9D B2 C2 EB C2A8 : 98 9D FC C0 E8 E0 02 D0 A5 C2B0 : EE 60 2B B0 A9 60 8D 3C FB C2B8 : C1 8D 6E C1 8D 7D C0 20 1C C2C0 : 9D C2 20 94 C0 20 9D C2 62 C2C8 : 20 66 C0 A9 4C 8D 3C C1 26 C2D0 : 8D 6E C1 8D 7D C0 60 A0 57 C2D8 : 3C A2 00 B9 40 03 95 FA 05 C2E0 : C8 E8 E0 03 D0 F5 A0 00 F4 C2E8 : A2 00 B9 40 03 85 FD B5 C0 C2F0 : FA 99 40 03 A5 FD 95 FA BE C2F8 : E8 C8 E0 03 D0 EC A2 00 DC C300 : C0 3F D0 E6 20 8C C1 20 1E C308 : 81 C1 60 A0 00 A2 00 B9 1F C310 : 40 03 95 FA C8 E8 E0 03 F4 C318 : D0 F5 A0 3C A2 00 B9 40 24 C320 : 03 85 FD B5 FA 99 40 03 9F C328 : A5 FD 95 FA E8 C8 E0 03 EF C330 : D0 EC 88 88 88 88 88 88 A9 C338 : A2 00 C0 FD D0 E0 20 8C 78 C340 : C1 20 81 C1 60 20 81 C1 3A C348 : 20 90 C5 60 FE 80 EA EA A3 C350 : A2 00 BD 40 03 0A E8 E8 60 C358 : 3E 40 03 CA 3E 40 03 CA 58 C360 : 3E 40 03 E8 E8 E8 E0 3F 74 C368 : 90 E8 20 81 C1 60 EA EA 45 C370 : A2 02 BD 40 03 4A CA CA CE C378 : 7E 40 03 E8 7E 40 03 E8 BC C380 : 7E 40 03 E8 E8 E8 E0 3F D4 C388 : 90 E8 20 81 C1 60 EA EA 65 C390 : EA A2 0F EC 54 C0 F0 40 BC C398 : 8E 54 C0 8E 72 C0 E8 8E 40 C3A0 : 5E C0 8E 78 C0 A9 5C A2 21 C3A8 : 4C A0 C4 8D 00 C1 8E FF 6F C3B0 : C0 8E 06 C1 8E 8C C1 8C DE C3B8 : 01 C1 8C 08 C1 8C 8E C1 FC C3C0 : A9 60 8D 33 C1 8D 6E C1 29 C3C8 : A9 89 8D 8D C1 A2 AF A0 7C C3D0 : 1C 8C 07 C1 8E 6A C0 60 2C C3D8 : A2 07 8E 54 C0 8E 72 C0 F8 C3E0 : E8 8E 5E C0 8E 78 C0 A9 C2 C3E8 : A9 A0 2B A2 91 8D FF C0 07 C3F0 : 8D 06 C1 8D 8C C1 8C 00 AB C3F8 : C1 8E 01 C1 8E 08 C1 A9 FC C400 : A0 8D 07 C1 8D 8E C1 A9 08 C408 : 00 8D 8D C1 A2 B9 8E 33 03 C410 : C1 CA CA 8E 6A C0 A9 4C A7 C418 : 8D 6E C1 60 A0 01 A9 A0 53 C420 : 91 FA A9 D4 18 65 FB 18 00 C428 : 85 FB AD 4C C3 91 FA A5 A0 C430 : FB 38 E9 D4 38 85 FB 88 0D C438 : EA EA C0 00 F0 E0 20 0E 7A C440 : C1 AD 4D C3 C0 02 90 07 10 C448 : 88 88 4A 4A 4C 44 C4 1D 24 C450 : 40 03 9D 40 03 4C 65 C2 2F C458 : 00 02 EA EA 20 40 C1 EE 5A C460 : CC C0 20 40 C1 A0 01 A9 15 C468 : 7B 91 FA A9 D4 18 65 FB 3B C470 : 18 85 FB A9 02 91 FA A5 63 C478 : FB 38 E9 D4 38 85 FB 88 55 C480 : D0 04 A9 6C D0 E3 4C 65 72 C488 : C2 A9 00 A0 04 85 FA 84 94 C490 : FB A9 40 A0 03 85 FC 84 DD C498 : FD A2 00 8E 58 C4 A0 00 E6 C4A0 : B1 FC 0A 2E 58 C4 18 20 64 C4A8 : 3C C5 D0 15 A9 6C 91 FA D8 C4B0 : C8 A9 7B 91 FA A9 02 8D 7E C4B8 : 59 C4 20 1F C5 C8 4C EC 0D C4C0 : C4 C9 01 D0 09 AD 25 D0 F7 C4C8 : 8D 59 C4 4C E1 C4 C9 02 2C C4D0 : D0 09 AD 27 D0 8D 59 C4 DD C4D8 : 4C E1 C4 AD 26 D0 8D 59 CD C4E0 : C4 A9 A0 91 FA C8 91 FA 05 C4E8 : 20 1F C5 C8 A9 00 8D 58 A4 C4F0 : C4 A5 02 C0 08 D0 AB E6 A3 C4F8 : FC A9 08 18 65 FA 85 FA 08 C500 : A9 00 65 FB 85 FB E8 E0 20 C508 : 03 D0 93 A9 10 18 65 FA DB C510 : 85 FA A9 00 65 FB 85 FB C1 C518 : A5 FC C9 7F D0 1B 60 88 16 C520 : A9 D4 18 65 FB 18 85 FB 75 C528 : AD 59 C4 91 FA C8 91 FA 17 C530 : A5 FB 38 E9 D4 38 85 FB 3B C538 : 60 4C 99 C4 0A 2E 58 C4 BA C540 : 85 02 AD 58 C4 60 EE 25 92 C548 : D0 20 81 C1 20 90 C5 60 1F C550 : EE 26 D0 20 81 C1 20 90 51 C558 : C5 60 CE 25 D0 20 81 C1 3D C560 : 20 90 C5 60 CE 26 D0 20 E7 C568 : 81 C1 20 90 C5 60 A9 0F 08 C570 : CD 54 C0 D0 03 20 50 C3 AB C578 : 20 50 C3 20 8C C1 60 A9 61 C580 : 0F CD 54 C0 D0 03 20 70 29 C588 : C3 20 70 C3 20 8C C1 60 1E C590 : 20 8C C1 AD 27 D0 AE 25 1A C598 : D0 AC 26 D0 8D 45 DB 8D EF C5A0 : 46 DB 8E 6D DB 8E 6E DB C9 C5A8 : 8C 95 DB 8C 96 DB 60 18 81 C5B0 : A2 17 A0 00 20 F0 FF A9 E3 C5B8 : 01 A2 08 A0 0F 20 BA FF FD C5C0 : A9 00 20 BD FF 20 C0 FF 2D C5C8 : A2 01 20 C6 FF 20 CF FF 0C C5D0 : A8 20 CF FF A2 0E 8E 86 5E C5D8 : 02 AA 98 20 D2 FF 8A 20 F1 C5E0 : D2 FF 20 CF FF 20 D2 FF 00 C5E8 : A9 02 8D 86 02 20 CF FF 27 C5F0 : C9 2C F0 06 20 D2 FF 4C FD C5F8 : ED C5 A2 0E 8E 86 02 20 98 C600 : D2 FF 20 CF FF 20 D2 FF 20 C608 : 24 90 50 F6 20 CC FF A9 23 C610 : 01 20 C3 FF 60 A9 00 8D 81 C618 : 15 D0 20 AF C5 A9 8F 8D 96 C620 : 15 D0 60 AE 00 DC 8A 29 EF C628 : 01 F0 25 8A 29 02 F0 13 C9 C630 : 8A 29 04 F0 34 8A 29 08 BA C638 : F0 23 8A 29 10 F0 36 4C 7C C640 : 83 C6 0E AE 42 C6 E8 FE 7C C648 : 00 D0 20 76 C6 4C 23 C6 70 C650 : AE 42 C6 E8 DE 00 D0 20 5F C658 : 76 C6 4C 23 C6 AE 42 C6 21 C660 : FE 00 D0 20 76 C6 4C 23 AC C668 : C6 AE 42 C6 DE 00 D0 20 60 C670 : 76 C6 4C 23 C6 60 A0 00 B3 C678 : A2 00 E8 D0 FD C8 C0 07 A6 C680 : D0 F6 60 A6 CB E0 40 D0 1F C688 : 03 4C 23 C6 E0 28 D0 08 F6 C690 : A9 07 8D 7F C6 4C 23 C6 F9 C698 : E0 2B D0 05 A9 20 8D 7F B3 C6A0 : C6 4C 23 C6 EE 20 D0 EE 3F C6A8 : 21 D0 20 76 C6 60 EA EA F9 C6B0 : EA EA EA EA EA EA EA EA AF C6B8 : EA EA EA EA EA EA EA EA B7 C6C0 : EA EA EA EA EA EA EA EA BF C6C8 : EA EA EA EA EA EA EA EA C7 C6D0 : EA EA EA EA EA EA EA EA CF C6D8 : EA EA EA EA EA EA EA EA D7 C6E0 : EA EA EA EA EA EA EA EA DF C6E8 : EA EA EA EA EA EA EA EA E7 C6F0 : EA EA EA EA EA EA EA EA EF C6F8 : EA EA EA EA EA EA EA EA F7