Schachcomputer.info Community

Schachcomputer.info Community (https://www.schachcomputer.info/forum/index.php)
-   Die ganze Welt der Schachcomputer / World of chess computers (https://www.schachcomputer.info/forum/forumdisplay.php?f=2)
-   -   Info: Codeanalyse (https://www.schachcomputer.info/forum/showthread.php?t=5611)

Mychess 20.11.2023 15:05

Re: AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121407)
Hallo Hannes,
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

Hello,

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 
C010 : 10 11 .. .. .. .. .. .. .. .. .. .. .. .. 0F .. 
C020 : 10 .. 11 .. .. .. .. .. .. .. .. .. .. 0F .. .. 
C030 : 10 .. .. 11 .. .. .. .. .. .. .. .. 0F .. .. .. 
C040 : 10 .. .. .. 11 .. .. .. .. .. .. 0F .. .. .. .. 
C050 : 10 .. .. .. .. 11 .. .. .. .. 0F .. .. .. .. .. 
C060 : 10 .. .. .. .. .. 11 .. .. 0F .. .. .. .. .. .. 
C070 : 10 .. .. .. .. .. .. 11 .. .. .. .. .. .. .. .. 
C080 : .. .. .. .. .. .. .. .. .. EF .. .. .. .. .. .. 
C090 : F0 .. .. .. .. .. .. F1 .. .. EF .. .. .. .. .. 
C0A0 : F0 .. .. .. .. .. F1 .. .. .. .. EF .. .. .. .. 
C0B0 : F0 .. .. .. .. F1 .. .. .. .. .. .. EF .. .. .. 
C0C0 : F0 .. .. .. F1 .. .. .. .. .. .. .. .. EF .. .. 
C0D0 : F0 .. .. F1 .. .. .. .. .. .. .. .. .. .. EF .. 
C0E0 : F0 .. F1 .. .. .. .. .. .. .. .. .. .. .. .. EF 
C0F0 : F0 F1 .. .. .. .. .. .. .. FF FF FF FF FF FF FF

Levels tables

C138 : 3C 3C 3C 3C 1E 28 28 1E  60 30 40 ... moves
...
C148 : 2C 84 08 10 E4 C8 28 30  low byte time in s
...
C158 : 01 03 07 0E 0C 19 23 2A  high byte time in s


Cordially.

Moonshine 20.11.2023 17:43

AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121407)
Hallo Hannes,

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.

Hans

Hallo Hans,

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

Mychess 20.11.2023 18:51

Re: Codeanalyse
 
Hello, Hello ;-)


We're talking about this table that prioritizes the generation of moves:

Code:


          HEXA                 
 31 32 33 34 35 36 37 38               
 2f 2b 27 23 21 25 29 2d               
 1f 1b 13 0b 07 09 0f 17               
 1d 19 11 01 03 05 0d 15               
 1e 1a 12 02 04 06 0e 16               
 20 1c 14 0c 08 0a 10 18               
 30 2c 28 24 22 26 2a 2e               
 40 3f 3e 3d 3c 3b 3a 39               

        DECIMAL       
 49 50 51 52 53 54 55 56
 47 43 39 35 33 37 41 45
 31 27 19 11 07 09 15 23
 29 25 17 01 03 05 13 21
 30 26 18 02 04 06 14 22
 32 28 20 12 08 10 16 24
 48 44 40 36 34 38 42 46
 64 63 62 61 60 59 58 57

Is it possible that statistics relating to thousands of games (in the opening or just after exit the opening ) give different utilization values depending on the geographical position of the destination square?
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.

Moonshine 20.11.2023 22:00

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

user_2141 21.11.2023 09:50

AW: Codeanalyse
 
Zitieren:

Zitat von Moonshine (Beitrag 121416)
Hallo Hans,

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

Hallo Hannes,

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

user_2141 21.11.2023 09:53

AW: Re: Codeanalyse
 
Zitieren:

Zitat von Mychess (Beitrag 121418)
Hello, Hello ;-)


We're talking about this table that prioritizes the generation of moves:

Code:


          HEXA                 
 31 32 33 34 35 36 37 38               
 2f 2b 27 23 21 25 29 2d               
 1f 1b 13 0b 07 09 0f 17               
 1d 19 11 01 03 05 0d 15               
 1e 1a 12 02 04 06 0e 16               
 20 1c 14 0c 08 0a 10 18               
 30 2c 28 24 22 26 2a 2e               
 40 3f 3e 3d 3c 3b 3a 39               

        DECIMAL       
 49 50 51 52 53 54 55 56
 47 43 39 35 33 37 41 45
 31 27 19 11 07 09 15 23
 29 25 17 01 03 05 13 21
 30 26 18 02 04 06 14 22
 32 28 20 12 08 10 16 24
 48 44 40 36 34 38 42 46
 64 63 62 61 60 59 58 57

Is it possible that statistics relating to thousands of games (in the opening or just after exit the opening ) give different utilization values depending on the geographical position of the destination square?
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.

Hello Mychess,

The idea with this table sounds convincing to me. However, so far I have failed to locate this table in the Sensory 9-code that I use.

Hans

Moonshine 21.11.2023 10:38

AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121431)
Hallo Hannes,

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.

Hans

Hallo Hans,

diese Zahlenfolge habe ich aus dem Rom-Dump des Sensory 9. Ist mit dem Anfang des Sargon 4.0 gleich, bis auf die Tatsache, dass dort einige Bit7 noch gesetzt sind. Vermutlich weil das Buch des Sargon 4.0 größer ist und deswegen mehrere Eröffnungsvarianten enthält. Deshalb braucht die Codefolge auch mehr öffnende Klammern.
Zu den "Steuerzeichen" "C0/C1" kann ich noch nichts genaues sagen. Sie kommen aber nur ganz am Anfang vor, also von der Grundstellung ausgehend und dann nur mehr sehr vereinzelt.
Um das Eröffnungsbuch zu dekodieren versuche ich folgende Wege zu gehen:
1. direkte visuelle Begutachtung und Vergleich mit dem bereits dekodierten Buch des Sargon 2.5. Da konnte ich sofort feststellen, dass das Format doch ganz anders ist.
2. Durch verschieben des Buches in einen anderen Speicherbereich. Dabei konnte ich feststellen, dass im Buch keine absoluten Links enthalten sind, da das Buch auch in einem anderen Bereich einwandfrei läuft. Nicht so beim Buch des Sargon 2.5/3.0 und 3.5. Aber da bin ich mir noch nicht ganz sicher, da ich Code im Listing gefunden habe der dem widerspricht.
3. Durch patchen von einzelnen Werten des Buches. Dabei habe ich entdeckt, dass die Züge als Index auf die Zugliste gespeichert werden.

4. Durch Verwendung eines 6502 Simulators. Ich lade den Code in das Programm "6502 Simulator" von Michael Kowalski und lasse das Programm im Einzelschritt laufen. Das ist zwar sehr mühsam, bringt aber die eine oder andere Erkenntnis. Das ist allerdings nicht ganz leicht, da man Speicherbereiche manipulieren muss um dem Programm die richtige Figurenstellung mitzuteilen. Ich habe mir da die IRQ-Routine des Sargon 4.0 leicht abändern müssen, da er sonst beim Aufruf des IRQ keine Figuren gefunden hätte, da der Simulator nicht direkt mit der I/O zusammenarbeiten kann.
Im CB-Emu dürfte das nicht so einfach gehen. Da müsstest Du Franz Huber mal direkt darauf ansprechen.

Im Sargon 4.0 Listing finde ich die Tabelle, die Mychess erwähnte, auch nicht. Aber vielleicht wird diese erst zur Laufzeit erzeugt oder sieht etwas anders aus. z.B.: könnten die Brettkoordinaten der Felder hintereinander gespeichert worden sein.
Als am zielführendsten halte ich nach wie vor, die Analyse im 6502 Simulator.

Lg

Hannes

Mychess 21.11.2023 10:54

Re: AW: Re: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121432)
Hello Mychess,

The idea with this table sounds convincing to me. However, so far I have failed to locate this table in the Sensory 9-code that I use.

Hans

Hello Hans,

Table discovered in 2007 (date noted, I'd had a hard time!), it took me 2 hours this morning to work out where I'd got it from (no comment, so obvious when you've found it, but 16 years later...).
Use of chained sub-chains probably to save space in rom.
The starting point is #$33, $C133 returns #$43, $C143 returns #$34, $C134 returns #$44...

Cordially.

user_2141 21.11.2023 11:40

AW: Codeanalyse
 
Hello Mychess,

Thanks a lot for the hint.

That sure is a tough one. This I have to digest first.

Did they need to save memory space or is that just "obfuscation"?

(In my opinion the memory at the start of 0xc000 is not utilized very economically, but I might be completely wrong).

Best regards

Hans

Moonshine 21.11.2023 12:25

AW: Re: AW: Re: Codeanalyse
 
Zitieren:

Zitat von Mychess (Beitrag 121434)
Hello Hans,

Table discovered in 2007 (date noted, I'd had a hard time!), it took me 2 hours this morning to work out where I'd got it from (no comment, so obvious when you've found it, but 16 years later...).
Use of chained sub-chains probably to save space in rom.
The starting point is #$33, $C133 returns #$43, $C143 returns #$34, $C134 returns #$44...

Cordially.

Hello Mychess

thank you very much. I also found this table in Sargons 4.0 ROM.

Hannes


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:24 Uhr.

Powered by vBulletin (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
©Schachcomputer.info