Hi-Spiegel – eine tolle Erweiterung zu Hi-Eddi
Dieses Programm ermöglicht erstmals die problemlose Spiegelung ganzer Grafikseiten und eignet sich ganz hervorragend zur Gestaltung eigener Vordrucke wie Briefköpfe oder Glückwunschkarten.

Hi-Eddi aus der 64'er Ausgabe 1/85 ist zwar eines der besten Malprogramme, aber eine Spiegelung von Grafikseiten war bisher nicht möglich. Mit diesem kleinen Zusatzprogramm wird das anders.
Das Maschinenprogramm (Listing 1) belegt den Bereich von C000 bis C256 und liegt damit im Grafikspeicher 5 von »Hi-Eddi«. Es ist aus diesem Grund nicht ständig im Speicher, sondern wird bei Bedarf ähnlich wie »Hi-Print« von Diskette nachgeladen. Dies ist kein Nachteil, da man es ja nicht ständig benötigt und das Laden nur 5 Sekunden dauert. Außerdem wird »Hi-Exe« nicht überschrieben und braucht daher nach der Spiegelung nicht nachgeladen zu werden. Allerdings werden die oberen Zeilen eines im Grafikspeicher 5 stehenden Bildes durch das Maschinenprogramm überschrieben. Daher sollte dort während der Spiegelung kein Bild gespeichert sein.
Die Spiegelroutine spiegelt stets das Bild im Grafikspeicher 1. Das zu spiegelnde Bild muß also beim Aufruf der Routine in diesem Bildspeicher stehen.
Der Aufruf ist ganz einfach: Immer wenn man die Tastenkombination <Commodore L> zum Laden von Bildern drückt, fragt das Steuerprogramm:
Spiegeln (J/N)
Gibt man <N> ein, folgt das gewohnte Lademenü. Gibt man <J> ein, erscheint die Meldung:
1=RUNTER 2=HOCH 3=RECHTS 4=LINKS
Nach Eingabe der entsprechenden Ziffer wird »Hi-Spiegel« geladen und die Spiegelung durchgeführt. Bei anderen Eingaben wird zwar Hi-Spiegel ebenfalls geladen, aber keine Spiegelung ausgeführt. Nach der Spiegelung wird sofort wieder das aktuelle Bild gezeigt.
Die Spiegelung wird mit dem Befehl <OR> ausgeführt, das heißt, der Inhalt der Bildhälfte, in die gespiegelt wird, wird dabei nicht gelöscht. Man kann dadurch sehr interessante Effekte erzielen. Natürlich kann man die Bildhälfte, in die gespiegelt werden soll, auch vorher mit Hi-Eddi löschen. Man kann auch ein Bild komplett spiegeln. Dazu sind allerdings mehrere Arbeitsgänge nötig:
— Bild kopieren (Hi-Eddi-Befehl) <ON>
— In einem Bild die linke, im anderen die rechte Hälfte löschen
— Das erste Bild nach Bildspeicher 1 übertragen und nach links spiegeln.
— Das zweite Bild ebenfalls nach Bildspeicher 1 übertragen und es dort nach rechts spiegeln.
— In jedem gespiegelten Bild die beiden »ursprünglichen« Hälften löschen und die beiden Bilder mit <ON> zusammenfügen.
Das Steuerprogramm Hi-Eddi (Listing 2) mußte natürlich ebenfalls um die entsprechenden Funktionen erweitert werden. Da der zur Verfügung stehende Speicherplatz durch das Original-Steuerprogramm schon fast belegt ist, waren einige Maßnahmen zur Verminderung des Platzbedarfs erforderlich. Sie bestehen im wesentlichen aus der Kürzung der Bildschirmmeldungen. So meldet sich zum Beispiel Hi-Eddi nun statt mit »BETRIEBSART« mit der Frage »MODUS«, das spart 6 Byte.
(Jürgen Mohr/ah)PROGRAMM : HI-SPIEGEL C000 C256 ----------------------------------- C000 : AD 2F C0 C9 01 D0 04 20 95 C008 : 30 C0 60 C9 02 D0 04 20 E1 C010 : 58 C0 60 C9 03 D0 04 20 21 C018 : 50 C1 60 C9 04 D0 03 20 AD C020 : 70 C1 60 00 00 00 00 00 89 C028 : 00 00 00 00 00 00 00 00 29 C030 : A9 00 85 8B A9 20 85 8C 77 C038 : A9 07 85 8D A9 3E 85 8E 38 C040 : 20 80 C0 A9 00 85 8B A9 B3 C048 : 2F 85 8C A9 07 85 8D A9 B8 C050 : 2F 85 8E 20 0C C1 60 EA 10 C058 : A9 40 85 8B A9 30 85 8C 3F C060 : A9 C7 85 8D A9 2D 85 8E 37 C068 : 20 80 C0 A9 04 85 8B A9 1C C070 : 2F 85 8C A9 03 85 8D A9 A0 C078 : 2F 85 8E 20 0C C1 60 EA 38 C080 : A9 71 8D 2C C0 A9 02 8D 47 C088 : 2D C0 A9 0C 8D 2A C0 A9 82 C090 : 28 8D 2B C0 A0 08 20 FC 26 C098 : C0 18 88 F0 06 20 B9 C0 6E C0A0 : 4C 96 C0 CE 2B C0 F0 06 CA C0A8 : 20 CA C0 4C 94 C0 CE 2A C6 C0B0 : C0 F0 58 20 DB C0 4C 8F 16 C0B8 : C0 20 EE C0 38 A5 8D E9 17 C0C0 : 01 85 8D A5 8E E9 00 85 DF C0C8 : 8E 60 20 EE C0 18 A5 8D EB C0D0 : 69 0F 85 8D A5 8E 69 00 48 C0D8 : 85 8E 60 20 EE C0 38 A5 E2 C0E0 : 8D ED 2C C0 85 8D A5 8E FF C0E8 : ED 2D C0 85 8E 60 18 A5 E4 C0F0 : 8B 69 01 85 8B A5 8C 69 0C C0F8 : 00 85 8C 60 8C 2E C0 A0 68 C100 : 00 B1 8B 11 8D 91 8D AC D3 C108 : 2E C0 60 60 A9 28 8D 2B 23 C110 : C0 A0 04 20 FC C0 18 88 6D C118 : F0 06 20 B9 C0 4C 13 C1 89 C120 : CE 2B C0 F0 06 20 2C C1 68 C128 : 4C 11 C1 60 18 A5 8B 69 29 C130 : 05 85 8B A5 8C 69 00 85 AE C138 : 8C 18 A5 8D 69 0B 85 8D 0B C140 : A5 8E 69 00 85 8E 60 FF D5 C148 : 00 00 FF FF 00 00 FF FF 48 C150 : A9 00 85 8B A9 20 85 8C 97 C158 : A9 38 85 8D A9 21 85 8E 07 C160 : 20 90 C1 60 EA EA EA EA CC C168 : EA EA EA EA EA EA EA EA 67 C170 : A9 A0 85 8B A9 20 85 8C 07 C178 : A9 98 85 8D A9 20 85 8E 4F C180 : 20 90 C1 60 EA EA EA EA EC C188 : EA EA EA EA EA EA EA EA 87 C190 : A9 80 8D 25 C0 A9 40 8D F7 C198 : 26 C0 A9 20 8D 27 C0 A9 F5 C1A0 : 10 8D 28 C0 A9 08 8D 29 FC C1A8 : C0 A9 04 8D 2A C0 A9 02 43 C1B0 : 8D 2B C0 A9 01 8D 2C C0 E7 C1B8 : A9 24 85 FB A9 C0 85 FC 05 C1C0 : A9 19 8D 2D C0 A9 14 8D C4 C1C8 : 2E C0 A9 08 8D 2F C0 20 57 C1D0 : 35 C2 CE 2F C0 F0 09 20 F8 C1D8 : EE C0 20 27 C2 4C CF C1 65 C1E0 : CE 2E C0 F0 09 20 EE C0 E2 C1E8 : 20 FD C1 4C CA C1 CE 2D 51 C1F0 : C0 F0 09 20 0B C2 20 19 E8 C1F8 : C2 4C C5 C1 60 38 A5 8D 03 C200 : E9 0F 85 8D A5 8E E9 00 FA C208 : 85 8E 60 18 A5 8B 69 A1 8F C210 : 85 8B A5 8C 69 00 85 8C 1B C218 : 60 18 A5 8D 69 D1 85 8D F6 C220 : A5 8E 69 01 85 8E 60 18 05 C228 : A5 8D 69 01 85 8D A5 8E 87 C230 : 69 00 85 8E 60 A0 00 A2 1D C238 : 00 B1 8B A0 08 0A 90 0B 31 C240 : 8D 24 C0 8A 18 71 FB AA B3 C248 : AD 24 C0 88 D0 EF 8A A0 40 C250 : 00 11 8D 91 8D 60 93
1 ifa<2thena=a+2:load"hi-exe",8,1
2 ifa=3then7
3 ifa=4then31
4 ifa=6then39
5 input"modus";c:poke780,c:poke56,13:clr:w$="123456":sys3328
6 ifpeek(8037)and64thena=3:load"menue",8,1
7 sys3337:a=peek(8064)
8 ona+1gosub9,12,37,13,20,26,13,13,21,22,14:goto7
9 open3,8,0,"$0":get#3,c$,c$
10 get#3,c$,c$,l$,h$:ifc$=""thenclose3:wait198,1:return
11 print256*asc(h$+chr$(0))+asc(l$+chr$(0));:sys3334:goto10
12 print"{clr}{down}sequenz:":print" "w$:input"{home}{down}{down}";w$:iflen(w$)<2then12
13 return
14 poke8115,8:print"{clr}{down}g=grafik":ifpeek(8073)>127thenprint"f=farbbild"
15 print"s=sprite":print"z=zeichensatz":print"{down}";
16 getc$:ifc$<>"g"andc$<>"f"andc$<>"s"andc$<>"z"then16
17 printc$:poke780,asc(c$):h$=w$:input"{down}name";w$:sys3331:w$=h$:h$=""
18 open1,8,15,h$:input#1,a,h$:printa;h$:ifa>0thenwait198,1
19 close1:return
20 poke631,34:poke198,1:h$="":input"{clr}{down}";h$:goto18
21 a=8075:goto23
22 a=8079
23 d=peek(8074):c=peek(a+d):print"{clr}{down}f"2*d+1:print"schrittweite:",c
24 inputc:ifc<1orc>160then24
25 pokea+d,c:return
26 input"{clr}{down}1.bild";d:c=(dand7)
27 input"{down}2.bild (oder 0)";d:c=c+8*(dand7):ifd>0thenc=c+64
28 ifd=0thenprint"{down}gross";:gosub34:ifc$="j"thenc=c+128
29 print"{down}drucken";:gosub34:ifc$="n"then32
30 ifa=5thena=4:load"hi-print",8,1
31 poke780,c:sys3328:print"{down}nochmal";:gosub34:ifc$="j"then26
32 ifa=5thenreturn
33 a=1:goto1
34 print" (j/n)";
35 getc$:ifc$<>"j"andc$<>"n"then35
36 printc$:return
37 print"spiegeln";:gosub34:ifc$="n"goto14
38 a=6:load"hi-spiegel",8,1
39 print"{clr}1=runter 2=hoch 3=rechts 4=links":inputc$
40 poke49199,val(c$):sys49152:a=3:goto1
1 IF A<2 THENA=A+2:LOAD "HI-EXE",8,1 2 IF A=3 THEN7 3 IF A=4 THEN31 4 IF A=6 THEN39 5 INPUT"MODUS";C:POKE 780,C:POKE 56,13:CLR :W$="123456":SYS 3328 6 IF PEEK (8037)AND 64 THENA=3:LOAD "MENUE",8,1 7 SYS 3337:A=PEEK (8064) 8 ON A+1GOSUB 9,12,37,13,20,26,13,13,21,22,14:GOTO 7 9 OPEN 3,8,0,"$0":GET #3,C$,C$ 10 GET #3,C$,C$,L$,H$:IF C$="" THENCLOSE 3:WAIT 198,1:RETURN 11 PRINT256*ASC (H$+CHR$ (0))+ASC (L$+CHR$ (0));:SYS 3334:GOTO 10 12 PRINT"{CLR,DOWN}SEQUENZ:":PRINT"{2SPACE}"W$:INPUT"{HOME,2DOWN}";W$:IF LEN (W$)<2 THEN12 13 RETURN 14 POKE 8115,8:PRINT"{CLR,DOWN}G=GRAFIK":IF PEEK (8073)>127 THENPRINT"F=FARBBILD" 15 PRINT"S=SPRITE":PRINT"Z=ZEICHENSATZ":PRINT"{DOWN}"; 16 GET C$:IF C$<>"G"AND C$<>"F"AND C$<>"S"AND C$<>"Z" THEN16 17 PRINTC$:POKE 780,ASC (C$):H$=W$:INPUT"{DOWN}NAME";W$:SYS 3331:W$=H$:H$="" 18 OPEN 1,8,15,H$:INPUT#1,A,H$:PRINTA;H$:IF A>0 THENWAIT 198,1 19 CLOSE 1:RETURN 20 POKE 631,34:POKE 198,1:H$="":INPUT"{CLR,DOWN}";H$:GOTO 18 21 A=8075:GOTO 23 22 A=8079 23 D=PEEK (8074):C=PEEK (A+D):PRINT"{CLR,DOWN}F"2*D+1:PRINT"SCHRITTWEITE:",C 24 INPUTC:IF C<1OR C>160 THEN24 25 POKE A+D,C:RETURN 26 INPUT"{CLR,DOWN}1.BILD";D:C=(DAND 7) 27 INPUT"{DOWN}2.BILD (ODER 0)";D:C=C+8*(DAND 7):IF D>0 THENC=C+64 28 IF D=0 THENPRINT"{DOWN}GROSS";:GOSUB 34:IF C$="J" THENC=C+128 29 PRINT"{DOWN}DRUCKEN";:GOSUB 34:IF C$="N" THEN32 30 IF A=5 THENA=4:LOAD "HI-PRINT",8,1 31 POKE 780,C:SYS 3328:PRINT"{DOWN}NOCHMAL";:GOSUB 34:IF C$="J" THEN26 32 IF A=5 THENRETURN 33 A=1:GOTO 1 34 PRINT" (J/N)"; 35 GET C$:IF C$<>"J"AND C$<>"N" THEN35 36 PRINTC$:RETURN 37 PRINT"SPIEGELN";:GOSUB 34:IF C$="N"GOTO 14 38 A=6:LOAD "HI-SPIEGEL",8,1 39 PRINT"{CLR}1=RUNTER 2=HOCH 3=RECHTS 4=LINKS":INPUTC$ 40 POKE 49199,VAL (C$):SYS 49152:A=3:GOTO 1