![]() |
Codeanalyse
Hallo,
ich schaue mir gerade den Code eines bekannten Schachcomputers genauer an. Eigentlich nicht erwähnenswert, wenn ich da nicht auf Sachen stoßen würde, die ich so nicht erwartet hätte :bigeyes: Eines kann ich jetzt aber mit Fug und Recht behaupten ... damals waren Drogen im Spiel! Es wäre jetzt nur noch interessant zu wissen, welche! Stay tuned ... Carsten |
AW: Codeanalyse
Hi Carsten,
habe damals selbst 6502 programmiert. Ohne Drogen ging das gar nicht... :D Gespannte Grüße, Andreas |
AW: Codeanalyse
Hi Carsten,
dürfen wir erfahren, was Du gefunden hast, um dabei an Drogen zu denken ? Gruß Gerd |
AW: Codeanalyse
Hallo Gerd,
Zitieren:
Stay tuned ... Carsten |
AW: Codeanalyse
Keine Sorge, hier sind ganz gute Programmierer unterwegs....
|
AW: Codeanalyse
Zitieren:
|
AW: Codeanalyse
Zitieren:
|
AW: Codeanalyse
Zitieren:
|
AW: Codeanalyse
Zitieren:
|
AW: Codeanalyse
1 Anhang/Anhänge
Zitieren:
Ich beziehe mich auf Programme um 1982 eines Ehepaares, dessen Namen hier nicht genannt werden soll ... Wer Lust hat, kann sich mal ja mal die Initialisierung der internen Brettdarstellung anschauen ... macht euch aber auf Einiges gefasst :) Wie man es schafft, die dafür genutzte Tabelle zu berechnen ist mir bis jetzt noch ein Rätsel .... Genie oder Wahnsinn? Ich weiß es nicht ... :gruebel: Edit: ... ist mir jetzt klar! https://www.schachcomputer.info/foru...1&d=1517736926 Dann wäre da noch das kleine Geheimnis :cool:, welches die beiden Module CB9 und CB16 beinhalten ... (evtl. auch weitere Opening Book Module, diese liegen mir aber nicht vor). Als drittes fällt mir noch der Zuggenerator ein :eek: Alter Schwede ... mehr dazu evtl. später mal ... ich dokumentiere das gerade für mich ... Und dann wäre da noch die (hardwarebedingt) "interessante" Feld-Led Ansteuerung. :rolleyes: Wie gesagt, beißen sich generell an dem Code selbst die besten statischen Analysetools die Zähne aus, was wiederrum an der damals gewählten Programmstruktur liegt. Die Informationen zur internen Eröffnungsbibliothek des Sensory 9 muss ich auch noch weiter korrigieren. Ich bin jetzt bei 2974 Halbzügen in 207 Varianten. Die Anzahl der Halbzüge stellt die Obergrenze dar, kann sich aber im Laufe weiterer Untersuchungen noch reduzieren. Die genannte Anzahl der Varianten steht noch auf wackeligen Beinen und ist noch nicht belastbar. Stay tuned ... Carsten |
AW: Codeanalyse
Zitieren:
Stay tuned ... Carsten |
AW: Codeanalyse
Hallo Darkstar,
Das interessiert mich. Hast du Reverse-Engineering vom ROM-Inhalt gemacht? Falls ja, woher hast du den ROM-Inhalt genommen (Emulator-Projekte) und mit welchen Werkzeugen hast du gearbeitet (IDA, Ghidra ...)? Schöne Grüsse Hans Zitieren:
|
AW: Codeanalyse
1 Anhang/Anhänge
Hallo Darkstar,
In der Zwischenzeit habe ich mit den mir aus CB-Emu verfügbaren Information begonnen, die Software des Fidelity Sensory Chess Challengers 9 in Ghidra abzubilden (siehe beigelegtes docx). Gewisse Eckpunkte werden sichtbar. Die Programm-Logik ist für mich noch schwierig zu durchschauen. Z.B. sehe ich, wo die Eröffnungsbücher liegen. Aber wie ist deren Datenstruktur? Weiss jemand mehr? Schöne Grüsse Zitieren:
|
AW: Codeanalyse
Hallo Hans,
ich beschäftige mich schon seit längerem mit den ROM-Listings der Sargon-Programme von Kathe und Dan Spracklen. Im Sargon 2.5 habe ich das Eröffnungsbuch dekodieren können und auch neue, wesentlich umfangreichere, erfolgreich eingebaut. Ich bin eben dabei das Eröffnungsbuch vom Sargon 4.0 verstehen und entschlüsseln zu können. Vielleicht hilft Dir folgender Link: https://content.iospress.com/downloa...al%2Ficg6-1-04 Ein Zug wird in diesen Eröffnungsbüchern nicht durch "von-Feld" / "nach-Feld" dargestellt, sondern als Index der Zugliste. D.h.: beim Sargon 2.5 wäre die Darstellung des Eröffnungszuges e4 als $0D (0x0D) dargestellt. Es wird bei Null zum Zählen begonnen. 0-3 sind die möglichen Springerzüge, dann folgen mit 4 bis 19 die Bauernzüge. Das ist bei den späteren Eröffnungsbüchern nicht mehr der Fall. Da arbeitet der Zuggenerator anders. Die Züge werden in anderer Reihenfolge erzeugt. z.B.: beim Sargon 4.0 wird ab 1 begonnen zu zählen, zuerst die Schlagzüge, dann eine evtl. mögliche Rochade und dann wird es kompliziert. Der Zuggenerator geht dann nicht von Figur zu Figur und generiert die Züge, sondern arbeitet feldbezogen. Ich habe mir die Mühe gemacht und mal etliche Züge des Buches mit allen möglichen Werten (1 bis Anzahl der Züge) gepatcht, aber konnte da noch kein System erkennen. Ich muss versuchen den Zuggenerator aus dem Rom-Listing zu verstehen. Da habe ich aber noch nicht den Einsprungspunkt gefunden. Die Eröffnungsbücher der späteren Spracklen-Programme, deren Brett-Representation im 0x88-Format dargestellt wird, dürften alle ziemlich gleich sein. Das war bei den ersten Programmen (Sargon 2.5/3.0) noch nicht so. Da wurde noch die 10x12Matrix verwendet. Gerne können wir uns dazu weiter austauschen. Beste Grüße Hannes |
AW: Codeanalyse
Hallo Hannes,
Herzlichen Dank für deine sehr nützlichen Hinweise und den Link auf den Beitrag von Kathe Spracklen! Ich werde das mal verinnerlichen und schauen, ob ich solche Muster in den ROMS des Sensory 9 finden kann. Ich werde auch versuchen, den Zuggenerator zu finden. Ich konzentriere mich auf das Sensory 9, weil ich ein solches Gerät besitze. Ich habe vor ein, zwei Jahren vom ursprünglichen Sargon (1978) den kommentierten Z80-Assembler-Code assembliert und auf meinem Z80-Eigenbau zum Laufen gebracht. Dort bin ich recht gut dokumentiert. Ich weiss aber nicht, ob und wieviel dieser Ur-Sargon-Programm-Logik noch im Sensory 9 zu finden ist. Schöne Grüsse. Hans |
AW: Codeanalyse
Hallo Hannes,
Mal ein erster Gedanke zur Codierung des Eröffnungsbuchs: Gemäss "https://www.schachcomputer.info/forum/showthread.php?t=4261" kann z.B. das CB16-Eröffnungsmodul für folgende Fidelity-Geräte eingesetzt werden: Prestige, Elite A/S, Elite 5.0, Elite AVG 6081/6088, Elegance, Sensory 12, Sensory 9, Playmatic und Elite Private. Wenn das im CB16 enthaltene Eröffnungsbuch entsprechend "https://content.iospress.com/downloa...al%2Ficg6-1-04" codiert wäre ("move generator displacements"), würde das heissen, dass die oben aufgeführten Geräte alle den gleichen Zuggenerator verwenden müssten. Stimmt meine Überlegung? Falls das so ist, wäre es interessant, genau zu wissen, wie der Zuggenerators des Sensory 9 funktioniert. Beim Ur-Sargon (1978) ist das Verhalten des Zuggenerators durch das interne Schachbrett und die Tabellen "direction table", "direction table pointer", "direction table counter" festgelegt. Ich habe aber im Moment keine Ahnung, ob die Spracklens den Zuggenerator auch so im Sensory 9 programmiert haben. Bis jetzt habe ich diese Ur-Sargon-Tabellen im Sensory 9-ROM nicht lokalisieren können. Und ich habe den Einsprungspunkt für den Zuggenerator im Sensory 9-ROM auch noch nicht gefunden. Hat jemand einen Hinweis darauf, wie der Zuggenerator im Sensory 9 aufgebaut ist? Hans |
Re: AW: Codeanalyse
Hello,
A quick search of the dissasembly : Code:
C20C : 00 03 06 06 19 19 19 19 14 14 0F 0F ; offset in C218 table Cordially. |
AW: Codeanalyse
Great! Thanks a lot.
I found it, slightly shifted. (e.g. from 0xc218 to 0xc21c, i use ROM version 101-1034a01), Best regards |
AW: Codeanalyse
Zitieren:
Wo sich der Zuggenerator befindet hat Cordially schon gezeigt. Die Offsets für die Zugberechnungen habe ich auch schon gefunden. Da das eine 0x88 Brettdarstellung ist muß man mit 16 Bytes rechnen, statt mit 10 wie bei den ersten Büchern des Sargon 2.5/3.0. Das Eröffnungsbuch liegt beim Sensory 9 ab Adresse $F45D. Ich habe die ersten Bytes mit dem Buch des Sargon 4.0 verglichen. Stimmt überein, wenn man Bit 7 ignoriert. Ein gesetztes Bit zeigt hier wohl eine "(" an. Wofür die Steuerbytes "C0" und "C1" am Anfang des Buches sind, habe ich noch nicht herausgefunden. Ich werde jetzt mal probieren das CB16 in das Sargon 4.0 ROM einzubauen. Ich nehme an, dass die Programme alle das selbe Buchformat verwenden. Ich bin noch immer dabei tiefer in diese Materie einzusteigen :-) Lg Hannes |
AW: Codeanalyse
Hallo Hannes,
Ja genau, das interne Buch liegt bei 0xf45d. Diese Adresse schreibt das Programm nach dem Reset ins RAM nach 0x00b8 (LSB) und 0x00ba (MSB). Nachher wird aber noch geprüft ob z.B. das CB16-Modul installiert ist. Wenn das der Fall ist, wird 0x200b ins RAM nach 0x00b8 (LSB) und 0x00ba (MSB) überschrieben, also so eine Art "pointer" auf das zu verwendende Eröffnungsbuch. Mittlerweile vermute ich auch, dass eine 0x88-Brettdarstellung verwendet wird. Und zwischen 0xc000 und 0xc21b sehe ich Daten/Tabellen, die ich aber noch nicht näher zuordnen kann. Die Ur-Sargon-Brett- und Zug-Logik scheint also im Sensory 9 nicht mehr verwendet zu werden. Hans |
Re: AW: Codeanalyse
Zitieren:
Sometimes, very small ".." is better than "00" . This table is used for scan attack (IMHO). Code:
C000 : .. 01 01 01 01 01 01 01 .. .. .. .. .. .. .. 0F Cordially. |
AW: Codeanalyse
Zitieren:
gut zu wissen, mit dem CB16 Modul. Das hat der ARB Sargon 4.0 nicht. Aber laut Rominhalt dürfte es genauso aufgebaut sein wie das Buch des Sensory 9 bzw. Sargon 4.0. Sieh' Dir mal die ersten Bytes im Buch des Sensory 9 an: $F45D: $c0 $0e $c0 $01 $98 $c0 $0b Da sieht man die erste Variante 1. d4 Sf3, 2. c4 g6 Also, wofür die Bytes mit dem Inhalt "C0" sind, weiß ich noch nicht. Die anderen Bytes stehen nun für 1.d4 = $0e, Sf3 = $01, 2. c4 = $98 (Bit 7 ausblenden = $18) und g6 = $0b. Nehmen wir nun den Zug 2. c4 her. In der Zugliste ist das nun der 24. Zug. Am Anfang stehen immer die Schlagzüge, dann eine evtl. Rochade, gefolgt von den Figurenzügen. Begonnen wird bei 1 zu zählen. Schlagzüge gibt es keine, Rochade auch nicht. Es gibt 5 Springerzüge, 5 Läuferzüge, 2 Damenzüge und ein Königszug. Das sind nun 13 Züge. Es kommen nun die Bauernzüge. In dieser Stellung wäre $0e nun h3, $0f wäre h4 usw. bis $18 = c4! Jetzt macht der Zuggenerator aber nicht die Züge in einer "vernünftigen" Reihenfolge, sondern er beginnt vom Zentrum her die Felder zu durchlaufen und schaut ob da eine Figur hinziehen kann. Diese abstruse Reihenfolge ist wahrscheinlich das, was Darkstar in seinem Eingangspost gemeint hat. Mir erschließt sich da auch noch keine sinnvolle Reihenfolge bei der Zuggenerierung. Es kann aber auch sein, dass die Züge doch in einer logischen Reihenfolge erzeugt werden und die Liste später dann "sortiert" wird. Nach welchen Kriterien auch immer. Das weiß ich noch nicht. Ich habe die Programme Sargon 2.5/3.0/3.5 früher mal in einem Simulator laufen lassen und mir zwischendurch den Speicherinhalt angesehen. Da findet man dann eine Zugliste die logisch erzeugt wurde. Beim Sargon 4.0 finde ich keine Zugliste, oder sehe sie nur nicht :-). Lg Hannes |
Re: Codeanalyse
Hello, Hello ;-)
We're talking about this table that prioritizes the generation of moves: Code:
It is therefore interesting to generate these moves as a priority (pruning). I think I understand that in chess, the pieces are to be centralized as soon as possible. It's worth noting that, although we start from the center, there's a disymmetry between the king and queen sides that's identical for white and black : Same time for black and white generation ? Obviously, this is only for the generation, after that, moves are probably sorted by evaluation function and special cases (captures, promotion, check...) Cordially. |
AW: Re: Codeanalyse
Hi Mychess
yes, it looks good. This table could be the solution of the generating problem. Now, I want to find where this table is in the Sargon 4.0 Rom-Listing. Thanks a lot. Hannes |
AW: Codeanalyse
Zitieren:
1. Bei mir steht unter $F45D auch die Sequenz "$c0 $0e $c0 $01 $98 $c0 $0b". Deine Interpretation scheint mir plausibel zu sein. 2. Zu "$co": Das wären ja gemäss Tutorial von Kathe Spracklen zwei Klammern "(" und ")" und die hat sie ja für Zusatzinformationen vorgeschlagen. Ich vermute, dass im Sensory 9-Code dieses Zeichen wie ein "no-operation behandelt wird: z.B. finde ich; c2ba a5 9c LDA DAT_009c c2bc 29 c0 AND #0xc0 c2be d0 14 BNE LAB_c2d4 Vielleicht wurde das "$c0" von den Spracklens verwendet, um Fehler korrigieren. 3. Die Reihenfolge der generierten Züge erschliesst sich für mich noch gar nicht. Du hast den Einsatz eines Simulators erwähnt. Weisst du, ob "CB-Emu" es erlauben würde, z.B. die Kommunikation mit dem 6502-Emulator zu protokollieren. Das wäre ideal, um solche Fragen zu klären. Mit rein statischer Code-Analyse könnte es schwierig werden. 4. Zur Tabelle aus dem Beitrag von "mychess" werde ich direkt antworten. Hans |
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:26 Uhr. |
Powered by vBulletin (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
©Schachcomputer.info