C 64
Grafik

3D-Grafik für Schachspiele

Wollen Sie Ihrem Schachprogramm zu einer räumlichen Darstellung verhelfen oder wichtige Schachpartien speichern? Hier finden Sie wertvolle Routinen dafür.

Haben Sie sich schon häufig über die zweidimensionale Darstellung bei Schachspielen geärgert? Das Programm »Schachgrafik« (Listing) beendet diese Misere. Sie können damit ein perspektivisches Schachbrett erzeugen, wie es im Bild zu sehen ist.

Perspektivisch gezeichnetes Schachbrett mit Figuren und der Beschriftung A bis H und 1 bis 8, darüber eine Textzeile zur Partie
Bild: Hardcopy zu »Schachgrafik«

Das Programm ist vollständig in Maschinensprache geschrieben und belegt den Speicherbereich $C000 bis $C9BE. Der Basic-Speicher bleibt auch bei eingeschalteter Grafik frei. Nachdem Sie das Programm mit dem MSE eingegeben haben, stehen Ihnen zwölf Routinen zur Verfügung, die mit dem SYS-Befehl aufgerufen werden können. Schachprogrammen wie »Schachmeister« (Ausgabe 11/84) oder »Schach dem C 64« (Ausgabe 8/85) verhelfen Sie mit diesem Programm zu einer hervorragenden Grafik.

So, nun zu den einzelnen Routinen, die Ihnen nach der Eingabe von »Schachgrafik« zur Verfügung stehen.

SYS 50000

Hiermit schalten Sie die Grafik ein. Weder die Bitmap wird gelöscht, noch werden die Farben der Grafik gesetzt. Die Bitmap liegt bei $E000, der Farbspeicher bei $CC00.

SYS 50003,FLAG

Schaltet die Grafik aus. Bei FLAG=0 geht der Computer in den Großschrift-Grafikmodus, bei FLAG=1 in den Kleinschrift-Großschrift-Modus.

SYS 50006

Löschen der Bitmap

SYS 50009,Byte

Setzen der Grafikfarben. Werte zwischen 0 und 255 können eingegeben werden. Das obere Nibble des Bytes bestimmt die Zeichen-, das untere die Hintergrundfarbe.

SYS 50012,FLAG

Zeichnen eines leeren Brettes. Bei FLAG=0 ist die untere linke Ecke in der Zeichen-, bei FLAG=1 in der Hintergrundfarbe gezeichnet.

SYS 50015,FIG,FELD

Dieser Befehl setzt die Figur mit dem Code FIG auf das Feld mit der Nummer FELD. Die Figurencodes:

Farbe 1 Farbe 2 Bedeutung
0 oder 128 :Leeres Feld
1 oder 129 :Bauer
2 oder 130 :Pferd
3 oder 131 :Läufer
4 oder 132 :Turm
5 oder 133 :Dame
6 oder 134 :König

Alle weiteren Codes sind nicht erlaubt. Die Felder sind von 0 bis 63 durchnumeriert. Dabei liegt Feld 0 links oben.

SYS 50018,FELD

Zeichnet nur das Feld mit der Nummer FELD neu.

SYS 50021,FELDA,FELDB

Setzt die Figur auf FELDA nach FELDB und zeichnet beide Felder neu.

SYS 50024

Zeichnet alle Felder neu. Nach dem Laden der Schachgrafik ist das Schachbrett in der Anfangsstellung besetzt.

SYS 50027

Rotiert das Brett einmal gegen den Uhrzeigersinn. Hierbei werden auch synchron die Nummern der Felder geändert. Nach einmaligem Drehen befindet sich das Feld 0 links unten, nach zweimaligem Drehen rechts unten etc.

SYS 50030

Nach Ausführung dieses Befehls sind die Feldnummern wieder so, als sei das Brett bisher nicht gedreht worden. Feld Nr. 0 ist wieder links oben.

SYS 50033,TEXT,ZEILE,SPALTE

Gibt den TEXT an der durch ZEILE und SPALTE bestimmten Position in der Bitmap aus. Alle Zeichen erscheinen im Großschrift-Grafikmodus. Steuerzeichen werden als Leerzeichen interpretiert.

Es muß gelten: 0 <=ZEILE <=24 und 0 <=SPALTE <=39.

Bei allen Befehlen können alle zu übergebenden Werte in beliebigen Formen, zum Beispiel als Variablen, Formeln oder ähnliches auftauchen.

Leider schreibt bei einem RUN/STOP-RESTORE eine ROM-Routine (bei $FD15) 32 Bytes in die Bitmap, die man aber mit SYS 50033," ",23,14 löschen kann. Trotzdem sollte man RUN/STOP-RESTORE vermeiden oder sogar softwaremäßig unterbinden.

Liste aller Datensätze und Routinen

$C000–$C29F AND- und OR-Masken (je 48 Bytes) von Unterteil, Bauer, Pferd, Läufer, Turm, Dame und König.
$C2A0–$C2FF 3*4-Grafikausschnitt Brett (als Hintergrund).
$C300–$C30F 2 quadratische Grafikausschnitte, die in einer Routine benötigt werden.
$C310–$C34F Speicher des Feldes
$C350–$C373 Sprungtabelle zu den Hauptroutinen.
$C374–$C4FE Die Hauptroutinen aller Befehle, Beginn der einzelnen Routinen siehe Sprungtabelle.
$C4FF–$C607 Zeichnet Text in Bitmap. Leicht korrigiert übernommen von Heimo Ponnath, 64'er, 8/85.
$C608–$C62C 4 Routinen, die prüfen, ob ein Feld am Rand des Brettes liegt.
$C62D–$C696 Hier werden alle Teile des Brettes, die in keinem 3*4-Feldausschnitt enthalten sind, gezeichnet.
$C697–$C752 überträgt 3*4-Brettausschnitt (der Feldnummer entsprechend modifiziert) in den Puffer.
$C753–$C76E Rotiert einmal das gesamte Feld.
$C76F–$C7B1 Errechnet Adresse eines Grafikausschnittes in der Bitmap abhängig von der Feldnummer.
$C7B2–$C7E2 Überträgt Pufferinhalt in die Bitmap.
$C7E3–$C80F Überträgt Figur eines Feldes in den Puffer.
$C810–$C847 Überträgt unteren rechten Ausschnitt der Figur, die im Grafikausschnitt oben links auftaucht, in den Puffer.
$C848–$C87A Überträgt unteren linken Ausschnitt der Figur, die im Grafikausschnitt oben rechts auftaucht, in den Puffer.
$C87B–$C8AD Überträgt oberen rechten Ausschnitt der Figur, die im Grafikausschnitt unten links auftaucht, in den Puffer.
$C8AE–$C8E5 Überträgt oberen linken Ausschnitt der Figur, die im Grafikausschnitt unten rechts auftaucht, in den Puffer.
$C8E6–$C8F9 Rotiert eine im X-Register stehende Feldnummer ein- oder mehrmals gegen den Uhrzeigersinn.
$C8FA–$C914 Verknüpft zwei Bytes aus zwei AND- bzw. OR-Masken mit dem Pufferinhalt.
$C915–$C923 Adressen der Unterteilmasken.
$C924–$C949 Ermittelt Adressen der Masken beliebiger Figuren und schreibt sie in zwei Zeiger.
$C94A–$C95C Rotiert eine im X-Register stehende Feldnummer einmal gegen den Uhrzeigersinn.
$C95D–$C95E Zwei Flags.
$C95F–$C9BE Puffer.

Auf der Leserservice-Diskette finden Sie zusätzlich ein Demonstrationsprogramm, das Ihnen alle Möglichkeiten von »Schachgrafik« aufzeigt.

(Frithof Dau/kn)
PROGRAMM : SCHACHGRAFIK   C000 C990
-----------------------------------
C000 : FF FF FF FE F8 F0 E0 E0   3B
C008 : 81 81 81 00 00 00 00 00   AA
C010 : FF FF FF 7F 1F 0F 07 07   93
C018 : E0 E0 F0 F8 FE FF FF FF   B3
C020 : 00 00 00 00 00 81 FF FF   2D
C028 : 07 07 0F 1F 7F FF FF FF   53
C030 : 00 00 00 01 06 08 14 12   66
C038 : 42 42 42 BD 00 00 00 00   E4
C040 : 00 00 00 80 60 10 28 48   08
C048 : 11 10 08 06 01 00 00 00   34
C050 : 81 7E 00 00 81 7E 00 00   1D
C058 : 88 08 10 60 80 00 00 00   FD
C060 : FF FF FF FF FF FF FF FF   5F
C068 : FF FF FF FF FF FF FF E7   36
C070 : FF FF FF FF FF FF FF FF   6F
C078 : FF FF FF FE FE FE FF FF   3E
C080 : C3 81 00 00 00 00 00 C3   8C
C088 : FF FF FF 7F 7F 7F FF FF   6B
C090 : 00 00 00 00 00 00 00 00   91
C098 : 00 00 00 00 00 00 00 18   C9
C0A0 : 00 00 00 00 00 00 00 00   A1
C0A8 : 00 00 00 01 01 01 00 00   E1
C0B0 : 24 5A 81 00 00 00 99 42   4D
C0B8 : 00 00 00 80 80 80 00 00   D5
C0C0 : FF FF FF FF FF FF FF FE   BD
C0C8 : FF FF FF FF C3 81 00 00   0F
C0D0 : FF FF FF FF FF FF FF 7F   CE
C0D8 : FC F8 F0 F0 F0 F8 FF FF   81
C0E0 : 00 00 00 00 40 80 80 81   EE
C0E8 : 7F 7F 7F 7F 7F 7F FF FF   EB
C0F0 : 00 00 00 00 00 00 00 01   F3
C0F8 : 00 00 00 00 3C 42 81 30   35
C100 : 00 00 00 00 00 00 00 80   02
C108 : 02 04 08 08 08 07 00 00   C8
C110 : 02 02 02 60 A0 40 59 42   96
C118 : 80 80 80 80 80 80 00 00   15
C120 : FF FF FF FF FF FF FF FE   1D
C128 : FF FF FF FF C3 81 80 C0   F2
C130 : FF FF FF FF FF FF FF 7F   2E
C138 : FE FE FE FE FE FE FF FF   3D
C140 : 60 20 00 00 00 00 00 81   B4
C148 : 7F 7F 7F 7F 7F 7F FF FF   4B
C150 : 00 00 00 00 00 00 00 01   53
C158 : 00 00 00 00 3C 42 41 20   74
C160 : 00 00 00 00 00 00 00 80   62
C168 : 01 01 01 01 01 01 00 00   62
C170 : 90 50 30 00 00 00 99 42   1F
C178 : 80 80 80 80 80 80 00 00   75
C180 : FF FF FF FF FF F8 F8 F8   1C
C188 : FF FF FF FF FF 42 42 42   26
C190 : FF FF FF FF FF 1F 1F 1F   42
C198 : F8 F8 F8 F8 FC FE FF FF   31
C1A0 : 00 00 00 00 00 00 00 81   A4
C1A8 : 1F 1F 1F 1F 3F 7F FF FF   F3
C1B0 : 00 00 00 00 00 07 04 04   01
C1B8 : 00 00 00 00 00 BD A5 A5   88
C1C0 : 00 00 00 00 00 E0 20 20   88
C1C8 : 04 04 04 04 02 01 00 00   78
C1D0 : E7 00 00 3C 00 00 99 42   2A
C1D8 : 20 20 20 20 40 80 00 00   1D
C1E0 : FF FF FF FF FE FC FC FE   A8
C1E8 : FF FF 81 00 00 00 00 00   47
C1F0 : FF FF FF FF 7F 3F 3F 7F   DD
C1F8 : FF FF FF FF FE FE FF FF   DE
C200 : 00 81 81 00 00 00 00 81   24
C208 : FF FF FF FF 7F 7F FF FF   FB
C210 : 00 00 00 00 01 02 02 01   3B
C218 : 00 00 7E 81 00 3C 00 00   CA
C220 : 00 00 00 00 80 40 40 80   2D
C228 : 00 00 00 00 01 01 00 00   41
C230 : 81 42 42 81 00 00 99 42   7E
C238 : 00 00 00 00 80 80 00 00   45
C240 : FF FF FF FF FF FF FF FF   3F
C248 : FF FF C3 C3 00 00 00 00   B0
C250 : FF FF FF FF FF FF FF FF   4F
C258 : FF FF FF FE FE FE FF FF   1E
C260 : C3 81 00 00 00 00 00 C3   6C
C268 : FF FF FF 7F 7F 7F FF FF   4B
C270 : 00 00 00 00 00 00 00 00   71
C278 : 00 00 3C 24 E7 81 81 E7   6C
C280 : 00 00 00 00 00 00 00 00   81
C288 : 00 00 00 01 01 01 00 00   C1
C290 : 24 5A 81 00 00 00 99 42   2D
C298 : 00 00 00 80 80 80 00 00   B5
C2A0 : FF FF FF FF FF FF FF FF   9F
C2A8 : FF FF FF FF FF FF FF FF   A7
C2B0 : FF FE FC F8 F0 E0 C0 80   A7
C2B8 : FF FF FF FF FF FF FF FF   B7
C2C0 : FF FE FC F8 F0 E0 C0 80   B7
C2C8 : 00 00 00 00 00 00 00 00   C9
C2D0 : 00 01 03 07 0F 1F 3F 7F   D9
C2D8 : FF FF FF FF FF FF FF FF   D7
C2E0 : FF FF FF FF FF FF FF FF   DF
C2E8 : FF FF FF FF FF FF FF FF   E7
C2F0 : FF FF FF FF FF FF FF FF   EF
C2F8 : FF FE FC F8 F0 E0 C0 80   EF
C300 : FF FE FC F8 F0 E0 C0 80   F7
C308 : 01 02 04 08 10 20 40 80   11
C310 : 84 82 83 85 86 83 82 84   FE
C318 : 81 81 81 81 81 81 81 81   17
C320 : 00 00 00 00 00 00 00 00   21
C328 : 00 00 00 00 00 00 00 00   29
C330 : 00 00 00 00 00 00 00 00   31
C338 : 00 00 00 00 00 00 00 00   39
C340 : 01 01 01 01 01 01 01 01   40
C348 : 04 02 03 05 06 03 02 04   37
C350 : 4C 74 C3 4C B6 C4 4C 8F   33
C358 : C3 4C C5 C3 4C E3 C3 4C   B7
C360 : 6D C4 4C 8E C4 4C 08 C4   6D
C368 : 4C D8 C4 4C A8 C3 4C F9   A9
C370 : C4 4C 02 C5 AD 00 DD 29   38
C378 : FC 8D 00 DD AD 11 D0 09   AF
C380 : 20 8D 11 D0 AD 18 D0 29   F6
C388 : 0F 09 38 8D 18 D0 60 A9   B8
C390 : 00 85 5B A9 E0 85 5C A2   50
C398 : 1F A0 00 A9 00 91 5B C8   C8
C3A0 : D0 FB E6 5C CA 10 F6 60   7D
C3A8 : EE 5E C9 AD 5E C9 29 03   CC
C3B0 : 8D 5E C9 20 53 C7 AD 5D   C8
C3B8 : C9 49 01 8D 5D C9 20 F3   A4
C3C0 : C3 20 D8 C4 60 20 FD AE   BE
C3C8 : 20 9E B7 A9 CC 85 5C A9   18
C3D0 : 00 85 5B A0 00 8A A2 03   63
C3D8 : 91 5B C8 D0 FB E6 5C CA   61
C3E0 : 10 F6 60 20 FD AE 20 9E   9A
C3E8 : B7 E0 02 B0 7D 8A 29 01   79
C3F0 : 8D 5D C9 A9 3F 85 02 20   3C
C3F8 : 97 C6 20 6F C7 20 B2 C7   C0
C400 : C6 02 10 F3 20 2D C6 60   91
C408 : 20 FD AE 20 9E B7 E0 40   82
C410 : B0 58 20 E6 C8 8A 85 02   CC
C418 : 20 FD AE 20 9E B7 E0 40   92
C420 : B0 48 20 E6 C8 8A 48 A4   24
C428 : 02 B9 10 C3 48 A9 00 99   88
C430 : 10 C3 20 97 C6 20 10 C8   5C
C438 : 20 48 C8 20 7B C8 20 AE   8E
C440 : C8 20 6F C7 20 B2 C7 68   75
C448 : AA 68 A8 85 02 8A 99 10   FC
C450 : C3 20 97 C6 20 10 C8 20   C8
C458 : 48 C8 20 E3 C7 20 7B C8   86
C460 : 20 AE C8 20 6F C7 20 B2   29
C468 : C7 60 4C 48 B2 20 FD AE   FD
C470 : 20 9E B7 8A 29 7F C9 07   E2
C478 : B0 F0 8A 48 20 FD AE 20   39
C480 : 9E B7 E0 40 B0 E4 20 E6   BA
C488 : C8 68 9D 10 C3 60 20 FD   A9
C490 : AE 20 9E B7 E0 40 B0 D2   65
C498 : 20 E6 C8 86 02 20 97 C6   3B
C4A0 : 20 10 C8 20 48 C8 20 E3   12
C4A8 : C7 20 7B C8 20 AE C8 20   52
C4B0 : 6F C7 20 B2 C7 60 20 FD   5D
C4B8 : AE 20 9E B7 E0 02 B0 AA   4B
C4C0 : AD 00 DD 09 03 8D 00 DD   5E
C4C8 : AD 11 D0 29 DF 8D 11 D0   A7
C4D0 : 8A 0A 09 14 8D 18 D0 60   C2
C4D8 : A9 3F 85 02 20 97 C6 20   DD
C4E0 : 10 C8 20 48 C8 20 E3 C7   12
C4E8 : 20 7B C8 20 AE C8 20 6F   8C
C4F0 : C7 20 B2 C7 C6 02 10 E4   F3
C4F8 : 60 A9 00 8D 5E C9 60 4C   2D
C500 : 48 B2 20 FD AE 20 9E AD   2B
C508 : A0 00 B1 64 85 24 C8 B1   A1
C510 : 64 85 04 C8 B1 64 85 05   AF
C518 : A5 64 A4 65 20 DB B6 20   C1
C520 : FD AE 20 9E B7 E0 19 B0   98
C528 : D6 86 5B A9 40 85 59 A9   36
C530 : 01 85 5A 20 84 C5 20 FD   81
C538 : AE 20 9E B7 E0 28 B0 BF   26
C540 : 8A 18 2A 2A 2A 85 25 A9   5D
C548 : 00 2A 85 26 18 A5 57 65   5A
C550 : 25 85 25 A5 58 65 26 85   8A
C558 : 26 18 A5 25 69 00 85 25   8F
C560 : A5 26 69 E0 85 26 A0 00   9B
C568 : A5 24 F0 17 B1 04 AA 98   55
C570 : 48 8A 20 A2 C5 20 C6 C5   5E
C578 : F0 08 68 A8 C8 C4 24 30   3F
C580 : EB 60 68 60 A9 00 85 57   21
C588 : 85 58 A6 5B CA E0 FF F0   E4
C590 : 10 18 A5 59 65 57 85 57   17
C598 : A5 5A 65 58 85 58 4C 8C   34
C5A0 : C5 60 10 03 4C B6 C5 C9   1F
C5A8 : 20 90 18 C9 60 90 04 29   3D
C5B0 : DF D0 02 29 3F 60 29 7F   38
C5B8 : C9 7F D0 02 A9 5E C9 20   AA
C5C0 : 90 01 60 A9 20 60 A2 00   AE
C5C8 : 86 27 86 29 A2 D0 86 28   C4
C5D0 : 18 2A 26 29 2A 26 29 2A   79
C5D8 : 26 29 18 65 27 85 27 A5   CC
C5E0 : 28 65 29 85 28 A0 07 A5   A5
C5E8 : 01 48 29 FB 78 85 01 B1   F2
C5F0 : 27 91 25 88 10 F9 68 85   B8
C5F8 : 01 58 18 A5 25 69 08 85   A9
C600 : 25 A5 26 69 00 85 26 60   34
C608 : A5 02 C9 08 90 02 18 60   5C
C610 : 38 60 A5 02 C9 38 60 A5   4D
C618 : 02 29 07 F0 02 18 60 38   62
C620 : 60 A5 02 29 07 C9 07 F0   B5
C628 : 02 18 60 38 60 A9 B8 85   97
C630 : 5B A9 E8 85 5C AE 5D C9   8F
C638 : A9 08 85 5E A0 07 E0 01   DA
C640 : F0 0B B9 B0 C2 91 5B 88   71
C648 : 10 F8 4C 55 C6 B9 08 C3   74
C650 : 91 5B 88 10 F8 8A 49 01   BE
C658 : AA A5 5B 18 69 70 85 5B   96
C660 : A5 5C 69 02 85 5C C6 5E   E1
C668 : D0 D2 A9 40 85 5B A9 FA   E4
C670 : 85 5C AD 5D C9 F0 0D A0   D4
C678 : 07 B9 08 C3 91 5B 88 10   0D
C680 : F8 4C 8E C6 A0 07 B9 D1   E7
C688 : C2 91 5B 88 10 F8 A9 FF   6A
C690 : 8D 47 FA 8D 7F E7 60 A5   35
C698 : 02 29 09 F0 0A C9 09 D0   44
C6A0 : 04 A9 00 F0 02 A9 01 4D   A3
C6A8 : 5D C9 29 01 AA A0 5F B9   F5
C6B0 : A0 C2 E0 01 F0 02 49 FF   4E
C6B8 : 99 5F C9 88 10 F1 20 17   C3
C6C0 : C6 90 39 A0 07 A9 00 99   22
C6C8 : 5F C9 99 67 C9 99 77 C9   3A
C6D0 : 88 10 F4 A0 07 B9 00 C3   77
C6D8 : 49 FF 48 39 6F C9 19 08   14
C6E0 : C3 99 6F C9 68 48 39 7F   32
C6E8 : C9 19 08 C3 99 7F C9 68   46
C6F0 : 39 8F C9 19 08 C3 99 8F   AA
C6F8 : C9 88 10 D9 20 08 C6 90   C3
C700 : 15 A0 2F A9 00 99 5F C9   44
C708 : 88 10 FA A9 FF 8D 7E C9   86
C710 : 8D 86 C9 8D 8E C9 20 21   FE
C718 : C6 90 11 A0 07 B9 B7 C9   2F
C720 : 39 00 C3 19 08 C3 99 B7   E2
C728 : C9 88 10 F1 20 12 C6 90   46
C730 : 0B A9 FF 8D AE C9 8D B6   9E
C738 : C9 8D BE C9 A5 02 C9 00   42
C740 : D0 05 A9 00 8D 7E C9 A5   3C
C748 : 02 C9 3F D0 05 A9 00 8D   D1
C750 : BE C9 60 A2 3F BD 10 C3   09
C758 : 9D 5F C9 CA 10 F7 A2 3F   3A
C760 : BD 5F C9 48 20 4A C9 68   95
C768 : 99 10 C3 CA 10 F2 60 A9   C1
C770 : 00 85 5C A5 02 29 07 85   8F
C778 : 5B 0A 18 65 5B 85 5B A5   26
C780 : 02 4A 4A 4A 48 A0 4D 68   13
C788 : 48 18 65 5B 85 5B A5 5C   24
C790 : 69 00 85 5C 88 10 F0 06   BF
C798 : 5B 26 5C 06 5B 26 5C 06   43
C7A0 : 5B 26 5C 68 18 A5 5B 69   21
C7A8 : 78 85 5B A5 5C 69 E5 85   22
C7B0 : 5C 60 A9 5F A2 C9 85 59   D4
C7B8 : 86 5A A2 03 A0 17 B1 59   B1
C7C0 : 91 5B 88 10 F9 18 A5 59   CD
C7C8 : 69 18 85 59 A5 5A 69 00   9D
C7D0 : 85 5A 18 A5 5B 69 40 85   4A
C7D8 : 5B A5 5C 69 01 85 5C CA   8D
C7E0 : 10 DA 60 A4 02 B9 10 C3   C0
C7E8 : 85 5D 29 7F F0 21 20 15   19
C7F0 : C9 A9 8F 85 59 A9 C9 85   37
C7F8 : 5A 20 07 C8 20 24 C9 A9   DB
C800 : 5F 85 59 A9 C9 85 5A A0   21
C808 : 2F 20 FA C8 88 10 FA 60   D5
C810 : 20 08 C6 B0 2D 20 17 C6   BA
C818 : B0 28 A5 02 38 E9 09 A8   CE
C820 : B9 10 C3 85 5D 29 7F F0   82
C828 : 19 20 15 C9 A9 57 85 59   EE
C830 : A9 C9 85 5A A0 2F 20 FA   64
C838 : C8 88 C0 1F F0 05 C0 07   A1
C840 : D0 F4 60 A0 17 4C 36 C8   F5
C848 : 20 08 C6 B0 28 A5 02 38   5C
C850 : E9 08 A8 B9 10 C3 85 5D   8F
C858 : 29 7F F0 19 20 15 C9 A9   C5
C860 : 6F 85 59 A9 C9 85 5A A0   91
C868 : 1F 20 FA C8 88 C0 17 F0   3C
C870 : 05 C0 FF D0 F4 60 A0 07   D2
C878 : 4C 69 C8 20 12 C6 B0 28   19
C880 : A5 02 18 69 08 A8 B9 10   26
C888 : C3 85 5D 29 7F F0 19 20   AE
C890 : 24 C9 A9 7F 85 59 A9 C9   50
C898 : 85 5A A0 2F 20 FA C8 88   66
C8A0 : C0 27 F0 05 C0 0F D0 F4   82
C8A8 : 60 A0 17 4C 9C C8 20 12   5C
C8B0 : C6 B0 2D 20 21 C6 B0 28   79
C8B8 : A5 02 18 69 09 A8 B9 10   6E
C8C0 : C3 85 5D 29 7F F0 19 20   E6
C8C8 : 24 C9 A9 97 85 59 A9 C9   8B
C8D0 : 85 5A A0 27 20 FA C8 88   9D
C8D8 : C0 17 F0 05 C0 FF D0 F4   3A
C8E0 : 60 A0 0F 4C D4 C8 48 AD   EE
C8E8 : 5E C9 85 5E C6 5E 30 08   88
C8F0 : 20 4A C9 98 AA 4C EC C8   0D
C8F8 : 68 60 B1 59 31 5B 91 59   0F
C900 : B1 57 A6 5D 10 0A 49 FF   29
C908 : 85 5E B1 5B 49 FF 25 5E   7A
C910 : 11 59 91 59 60 A9 C0 85   BF
C918 : 5C 85 58 A9 00 85 5B A9   6F
C920 : 30 85 57 60 20 15 C9 A5   12
C928 : 5D 29 7F AA 18 A5 5B 69   3E
C930 : 60 85 5B A5 5C 69 00 85   FA
C938 : 5C CA D0 F0 A5 5B 18 69   B4
C940 : 30 85 57 A5 5C 69 00 85   D9
C948 : 58 60 8A 48 29 07 49 07   7A
C950 : 0A 0A 0A 85 5F 68 4A 4A   8A
C958 : 4A 05 5F A8 60 00 00 20   58
C960 : 41 58 4F 4E 2D 53 4F 46   A2
C968 : 54 57 41 52 45 20 3C 43   CF
C970 : 3E 20 31 39 38 35 20 20   20
C978 : 46 52 49 54 48 4A 4F 46   65
C980 : 20 44 41 55 20 20 20 20   81
C988 : 20 20 20 20 20 20 20 20   88
Listing: MSE-Listing des Programms »Schachgrafik«
0 rem schachgrafik v1.0
1 rem fuer c-64
2 rem frithjof dau
3 rem 3017 pattensen 4
4 rem hopfenberg 5
5 rem tel.: 05066/63906
6 rem
1000 restore:gosub3100
1010 a$="bitte druecken sie eine taste!"
1020 sys50003,1:poke53280,11:poke53281,11:poke646,0:sys50030
1030 printchr$(147)"SCHACHGRAFIK : DEMO{$a0}UND{$a0}ANLEITUNG."
1040 print:print"Die Befehlserweiterung 'SCHACHGRAFIK' "
1050 print"stellt dem Benutzer 12 neue Befehle,die
1060 print"alle mit 'SYS' angesprungen werden,zur
1070 print"Verfuegung.Sie ist vollstaendig in
1080 print"Maschienensprache geschrieben und belegt";
1090 print"auch bei eingeschalteter Grafik keinen
1100 print"Basicspeicherplatz.Sie laesst sich gut "
1110 print"z.b. in Schachprogrammen oder zum
1120 print"zum Abspielen von Partien (von Meister-"
1130 print"schaften oder aehnlichen) verwenden."
1140 gosub3080
1150 print:print"Der erste Befehl lautet : 'SYS 50000'.
1160 print"Hiermit schaltet man die Grafik ein."
1170 print"Sie wird aber weder geloescht noch"
1180 print"werden die Farben der Grafik gesetzt.Die";
1190 print"Bitmap liegt ab $e000 und der Farbspei-
1200 print"cher ab $cc00.
1210 gosub3080
1220 print:print"2.Befehl: SYS 50003,FLAG"
1230 print"Mit diesem Befehl wird die Grafik ausge-";
1240 print"schaltet.Bei FLAG=0 geht der Computer in";
1250 print"den Kleinschrift-Grossschriftmodus,bei"
1260 print"FLAG=1 in den Grossschrift-Grafikmodus."
1270 gosub3080
1280 print:print"3.Befehl : SYS 50006
1290 print"Mit diesem Befehl wird die Grafik
1300 print"geloescht.
1310 gosub3080
1320 print:print"4.Befehl : SYS 50009,BYTE
1330 print"Der Farbspeicher der Grafik wird mit "
1340 print"dem Wert Byte gefuellt.Es muss gelten:
1350 print"0<=BYTE<=255.Das obere Nibble des Bytes
1360 print"bestimmt die Zeichen-,das untere die"
1370 print"Hintergrundfarbe."
1380 print:print"Demonstration:"
1390 print"Zuerst wird die Grafik eingeschaltet,"
1400 print"dann der Farbspeicher mit 11 gefuellt,"
1410 print"und dann die Bitmap geloescht.Diese"
1420 print"Prozedur geht natuerlich sehr schnell."
1430 gosub3080
1440 sys50000
1450 sys50009,11
1460 sys50006
1470 sys50033,"5.befehl : sys 50012,flag",0,0
1480 sys50033,"mit diesem befehl wird ein leeres brett",1,0
1490 sys50033,"gemalt.bei flag=0 ist die untere linke ",2,0
1500 sys50033,"ecke in der vordergrund-,bei flag=1 in ",3,0
1510 sys50033,"der hintergrundfarbe gemalt.",4,0
1520 sys50033,"demonstation: 'sys 50006 : sys50012,0'",5,0
1530 sys50033,a$,6,0:poke198,0:wait198,1
1540 sys50006
1550 sys50012,0
1560 sys50033,"demonstation: 'sys50012,1'",0,0
1570 sys50033,a$,1,0:poke198,0:wait198,1
1580 poke198,0:wait198,1:sys50012,1
1590 sys50033,a$,0,0:sys50033,"                               ",1,0
1600 poke198,0:wait198,1:sys50003,1
1610 print:print"6.Befehl : SYS 50015,FIG,FELD
1620 print"Dieser Befehl setzt die Figur mit der "
1630 print"Nummer FIG auf das Feld mit der Nummer"
1640 print"FELD.Die Figurencodes sind:
1650 print"FARBE 1      FARBE 2   BEDEUTUNG"
1660 print"  0    oder    128  :  Leeres Feld
1670 print"  1    oder    129  :  Bauer
1680 print"  2    oder   {$a0}130  :  Pferd
1690 print"  3    oder    131  :  Lauefer
1700 print"  4    oder    132  :  Turm
1710 print"  5    oder    133  :  Dame
1720 print"  6    oder    134  :  Koenig
1730 print"Alle weiteren Codes sind nicht erlaubt."
1740 print"Die Felder sind von 0-63 nummeriert."
1750 print"Feld 0 liegt dabei links oben,Feld 7"
1760 print"rechts oben,Feld 56 links unten und Feld";
1770 print"63 rechts unten.Das Feld wird bei diesem";
1780 print"Befehl allerdings nicht gemalt,das macht";
1790 print:print"Der 7. Befehl : SYS 50018,FELD
1800 print"Dieser Befehl malt nur das Feld mit der"
1810 print"Nummer FELD neu."
1820 gosub3080
1830 print:print"Befehl Nr 8 : SYS 50021,FELD1,FELD2"
1840 print"Hiermit wird die Figur auf dem Feld
1850 print"FELD1 nach FELD2 gesetzt.Beide Felder"
1860 print"werden neu gemalt."
1870 gosub3080
1880 print:print"Befehl Nr 9 : SYS 50024
1890 print"Hier werden einfach alle Felder neu
1900 print"gemalt.Nach dem Laden der Schachgrafik"
1910 print"ist das Brett mit der Anfangsstellung"
1920 print"besetzt."
1930 print"Nun wieder eine Demonstration:
1940 gosub3080
1950 sys50006:sys50000:sys50012,0
1960 sys50033,"der befehl 'sys 50024'",0,0
1970 sys50033,a$,1,0
1980 poke198,0:wait198,1:sys50024
1990 sys50033,"der befehl 'sys 50021,9,17'",0,0
2000 poke198,0:wait198,1:sys50021,9,17
2010 sys50033,"die befehle 'sys 50015,1,17'",0,0
2020 sys50033,"und 'sys 50018,17'                ",1,0
2030 sys50033,a$,2,0
2040 poke198,0:wait198,1:sys50015,1,17:sys50018,17
2050 sys50033,a$,0,0
2060 sys50033,"                              ",1,0
2070 sys50033,"                              ",2,0
2080 poke198,0:wait198,1:sys50003,1
2090 print:print"Befehl Nr 10 : SYS 50027
2100 print"Hier wird das ganze Brett einmal gegen"
2110 print"den Uhrzeigersinn,also im mathematisch"
2120 print"positiven Sinn gedreht und neu gemalt."
2130 print"Wichtig:Hierbei werden auch synchron die";
2140 print"Nummern der Felder geaendert,um die "
2150 print"Eingabe zu vereinfachen.So befindet sich";
2160 print"also Feld 0 nach einmaligen Drehen nicht";
2170 print"mehr links oben,sondern links unten."
2180 print"Entsprechendes gilt fuer alle anderen"
2190 print"Felder und fuer mehrmaliges Drehen.
2200 gosub3080
2210 print:print"Befehl Nr 11 : SYS 50030
2220 print"Nach Ausfuehrung dieses Befehls sind die";
2230 print"Feldnummern wieder so,als sei das Brett"
2240 print"bisher nicht gedreht,also befindet sich"
2250 print"Feld 0 wieder links oben usw."
2260 print:print"Wieder eine Demonstation."
2270 gosub3080
2280 sys50000:sys50006:sys50012,0:sys50024
2290 sys50033,"der befehl 'sys 50021,12,20'",0,0
2300 sys50033,a$,1,0
2310 poke198,0:wait198,1:sys50021,12,20
2320 sys50033,"nun drehe ich einmal mit 'sys50027'.",0,0
2330 poke198,0:wait198,1:sys50027
2340 sys50033,"nun der befehl 'sys 50021,20,28'       ",0,0
2350 poke198,0:wait198,1:sys50021,20,28
2360 sys50033,"nun 'sys 50030' und 'sys50021,0,1'.",0,0
2370 poke198,0:wait198,1:sys50030:sys50021,0,1
2380 sys50033,a$+"                 ",0,0
2390 sys50033,"                                 ",1,0
2400 poke198,0:wait198,1:sys50003,1
2410 print:print"Und der letzte Befehl,Befehl Nr 12:"
2420 print"SYS 50033,TEXT,ZEILE,SPALTE"
2430 print"Mit diesem Befehl wird der Text bei der"
2440 print"durch Zeile und Spalte bestimmtenn"
2450 print"Position in die Bitmap geschrieben."
2460 print"Der Text wird immer im Grossschriftmodus";
2470 print"ausgegeben,Steuerzeichen werden als"
2480 print"Leerzeichen interpretiert.Es muss "
2490 print"weiterhin gelten: 0<=SPALTE<=24  "
2500 print"und 0<=ZEILE<=39 ."
2510 gosub3080
2520 print:print"Bei allen Befehlen koennen saemtliche"
2530 print"zu uebergebende Werte in beliebigen"
2540 print"Formen auftauchen,z.b. als Formeln,"
2550 print"Variablen oder aehnliches."
2560 gosub3080
2570 print:print"Es folgt nun eine eingespeicherte "
2580 print"Partie.Sie koennen mit F1 den naechsten"
2590 print"Zug ausfuehren,mit F3 das Brett drehen"
2600 print"mit F5 oder F7 die Farben aendern und"
2610 print"mit 'S' das Spiel vorzeitig beenden."
2620 gosub3080
2630 restore:gosub3100
2640 sys50000:sys50006:sys50012,0
2650 fb=11:sys50009,fb:sys50024
2660 sys50033,"anderssen - staunton",0,0
2670 sys50033,"turnier zu london   1851",1,0
2680 zg=1:sys50033,"zug nr",2,10
2690 f1=11:f2=0
2700 read zug$
2710 if zug$<>"oo "then2740
2720 sys50021,63,61:sys50021,60,62
2730 p$="o-o            ":goto2780
2740 z$=left$(zug$,2):gosub3130:p1=p
2750 z$=mid$(zug$,4,2):gosub3130:p2=p
2760 p$=zug$+" "
2770 sys50021,p1,p2
2780 sys50033,str$(int(zg))+":"+p$,2,16
2790 ifright$(zug$,2)="++"then2880
2800 zg=zg+.5
2810 poke198,0:wait198,1:getz$
2820 ifz$="{f1}"thengoto2700
2830 ifz$="{f3}"thensys50027
2840 ifz$="{f5}"thenf1=f1+1and15:sys50009,f1+16*f2:poke53280,f1
2850 ifz$="{f7}"thenf2=f2+1and15:sys50009,f1+16*f2
2860 ifz$="s"thengoto2880
2870 goto2810
2880 sys50033,a$,3,0
2890 poke198,0:wait198,1
2900 sys50033,"nun eine geschwindigkeitsdemonstration.",0,0
2910 sys50033,"der bauer auf g2 wird 100mal vor- und",1,0
2920 sys50033,"zuruckgesetzt.stoppen sie selbst!",2,0
2930 sys50033,a$,3,0
2940 poke198,0:wait198,1
2950 ti$="000000"
2960 fora=1to100:sys50021,54,46:sys50021,46,54:next
2970 p$=ti$
2980 sys50033,"diese prozedur hat also gerade "+right$(p$,2)+"        ",0,0
2990 sys50033,"sekunden gedauert.                    ",1,0
3000 sys50033,a$+"             ",2,0
3010 sys50033,"                              ",3,0
3020 poke198,0:wait198,1
3030 sys50003,1:poke53280,11
3040 print:print"Damit ist nun die Demonstration zu Ende.";
3050 print"Ich hoffe,sie haben noch viel Vergnuegen";
3060 print"mit der Schachgrafik.Tschuess!!"
3070 print:print:end
3080 print"Bitte druecken Sie eine Taste!"
3090 poke198,0:wait198,1:return
3100 fora=0to63
3110 read fig:sys50015,fig,a:next
3120 return
3130 p=asc(left$(z$,1))-65+8*(8-val(right$(z$,1))):return
3140 data 132,130,131,133,134,131,130,132
3150 data 129,129,129,129,129,129,129,129
3160 data 0,0,0,0,0,0,0,0
3170 data 0,0,0,0,0,0,0,0
3180 data 0,0,0,0,0,0,0,0
3190 data 0,0,0,0,0,0,0,0
3200 data 1,1,1,1,1,1,1,1
3210 data 4,2,3,5,6,3,2,4
3220 data e2-e4,e7-e6
3230 data d2-d4,g7-g6
3240 data f1-d3,f8-g7
3250 data c1-e3,c7-c5
3260 data c2-c3,c5xd4
3270 data c3xd4,d8-b6
3280 data g1-e2,b6xb2
3290 data b1-c3,b2-b6
3300 data a1-c1,b8-a6
3310 data c3-b5,g7-f8
3320 data  oo ,d7-d6
3330 data d4-d5,b6-a5
3340 data e3-d4,e6-e5
3350 data d4-c3,a5-d8
3360 data f2-f4,f7-f6
3370 data f4xe5,f6xe5
3380 data d1-a4,c8-d7
3390 data c3-b4,g8-h6
3400 data g1-h1,h6-f7
3410 data a4-a3,a6-c5
3420 data b5xd6+,f8xd6
3430 data b4xc5,d6xc5
3440 data a3xc5,d8-e7
3450 data c5-c7,f7-d6
3460 data c7-a5,h7-h5
3470 data c1-c7,h8-f8
3480 data f1-c1,a7-a6
3490 data e2-d4,a8-c8
3500 data d4-e6,c8xc7
3510 data c1xc7,f8-f7
3520 data a5-b6,f7-f6
3530 data h2-h3,g6-g5
3540 data b6-b2,d6-b5
3550 data d3xb5,a6xb5
3560 data b2xe5,h5-h4
3570 data c7xb7,f6-f1+
3580 data h1-h2,e7-f6
3590 data b7-b8+,e8-e7
3600 data d5-d6+,e7-f7
3610 data b8-f8+,f7-g6
3620 data f8xf6+,f1xf6
3630 data e5xg5+,g6-f7
3640 data g5-g7+,f7xe6
3650 data g7-e7++
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →