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)

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

Tibono 21.11.2023 14:12

AW: Re: AW: Re: Codeanalyse
 
Zitieren:

Zitat von Moonshine (Beitrag 121436)
Hello Cordially, (...)
Hannes

Hi Hannes,
at end of a letter or post, 'cordially' (or 'cordially yours') is an alternative to e.g. 'best regards'. Not a nickname ;)

Schönen Gruß,
Eric

Moonshine 21.11.2023 17:24

AW: Codeanalyse
 
Hello Tibono,

thanks for the tip. I didn't know that!

Hannes

user_2141 22.11.2023 11:05

AW: Codeanalyse
 
Hallo Hannes,
Meine frühere Nachricht dazu ging offenbar verloren.
Ich habe bemerkt, dass CB-Emu eine vollständige Debugger-Umgebung enthält. Ich werde das mal ausprobieren.
Hans

Moonshine 22.11.2023 18:37

AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121473)
Hallo Hannes,
Ich habe bemerkt, dass CB-Emu eine vollständige Debugger-Umgebung enthält. Ich werde das mal ausprobieren.
Hans

Hallo Hans,

kannst Du mir bitte Näheres zu dieser Debugger-Umgebung sagen? Das würde mich auch sehr interessieren.
Danke und Lg

Hannes

Mychess 22.11.2023 19:03

Re: Codeanalyse
 
Hello,

About the sensory 9 opening library :

- Subroutine F291 looks for a next move in the library and tests whether it is the same one that has been played.
If so, finish, if not, then test its brothers.
If they are all different or no brothers, end library.
Code:

                                                                                                               
F291 :  jsr    LF2D5    ; F2D5 search for next move and detect brother move and/or end of variant.
F294 :  cmp    X009B                                                                                               
F296 :  beq    LF2A2                                                                                               
F298 :  jsr    LF2F2    ; F2F2 brother processing, and in some cases #$Cx jump over x bytes, x from 0 to 7.
F29B :  bcc    LF291    ; another brother                                                                                           
F29D :  lda    #$FF      ; out of library                                                                                         
F29F :  sta    X009A      ; in flag                                                                                         
F2A1 :  rts

- F2A2 browses the library.
Check that you are not already out of the library.
If code #$C4, no hit and end of library.
If code #$C2, it is a jump, 2 following bytes are the address (if null address, end of library).
Otherwise normal move.

The Sensory 9 has a special mode (F5) that allows this library to be extended to less good moves.



Cordially.

user_2141 22.11.2023 19:31

AW: Codeanalyse
 
Hallo Hannes,

Ich öffne auf meiner Linux-Maschine eine Kommandozeile und gehe ins Verzeichnis wo "CB-Emu.exe" liegt.

Dort gebe ich den Befehl
"wine CB-Emu.exe -debug fscc9a1"
ein.

"fscc1a" ist in der letzen CB-Emu-Version der Name für das Sensory 9-1.6MHz-Gerät.

Auf einer Windows-Machine sollte es ähnlich gehen, einfach ohne "wine", also:
"CB-Emu.exe -debug fscc9a1"

Du siehst dann neben dem Brett eine Debug-Konsole. Die Anleitung dazu steht in "https://docs.mamedev.org/" unter "Mame Debugger".

Man kann sich dann z.B. auch in Echtzeit den RAM-Inhalt anzeigen lassen.
Allerdings habe ich mir bis jetzt noch keinen Reim darauf machen können, wie das Brett und die Figuren kodiert sind. Vielleicht findest du das raus.

Hans

Zitieren:

Zitat von Moonshine (Beitrag 121507)
Hallo Hans,

kannst Du mir bitte Näheres zu dieser Debugger-Umgebung sagen? Das würde mich auch sehr interessieren.
Danke und Lg

Hannes


user_2141 22.11.2023 19:45

AW: Re: Codeanalyse
 
Zitieren:

Zitat von Mychess (Beitrag 121508)
Hello,

About the sensory 9 opening library :

- Subroutine F291 looks for a next move in the library and tests whether it is the same one that has been played.
If so, finish, if not, then test its brothers.
If they are all different or no brothers, end library.
Code:

                                                                                                               
F291 :  jsr    LF2D5    ; F2D5 search for next move and detect brother move and/or end of variant.
F294 :  cmp    X009B                                                                                               
F296 :  beq    LF2A2                                                                                               
F298 :  jsr    LF2F2    ; F2F2 brother processing, and in some cases #$Cx jump over x bytes, x from 0 to 7.
F29B :  bcc    LF291    ; another brother                                                                                           
F29D :  lda    #$FF      ; out of library                                                                                         
F29F :  sta    X009A      ; in flag                                                                                         
F2A1 :  rts

- F2A2 browses the library.
Check that you are not already out of the library.
If code #$C4, no hit and end of library.
If code #$C2, it is a jump, 2 following bytes are the address (if null address, end of library).
Otherwise normal move.

The Sensory 9 has a special mode (F5) that allows this library to be extended to less good moves.



Cordially.

Hello Mychess,

Great. Thanks a lot!

In Ghidra, as well an in the CB-Emu-Debugger I have the Sensory 9-1.6 MHz-ROM. There I have found it, but at a higher address, namely

LAB_f346 XREF[1]: f350(j)
f346 20 8a f3 JSR FUN_f38a undefined FUN_f38a()
f349 c5 9b CMP DAT_009b
f34b f0 0a BEQ LAB_f357
f34d 20 a7 f3 JSR FUN_f3a7 undefined FUN_f3a7()
f350 90 f4 BCC LAB_f346
f352 a9 ff LDA #0xff
f354 85 9a STA DAT_009a
f356 60 RTS

I guess it is the same.
Am I right?

Best regards

Hans

Mychess 22.11.2023 19:52

Re: AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121511)
Hallo Hannes,

Allerdings habe ich mir bis jetzt noch keinen Reim darauf machen können, wie das Brett und die Figuren kodiert sind. Vielleicht findest du das raus.

Hans

Hello Hans,
Code:

0x0060 : 10 11 12 13 14 15 16 17  white pawns
0x0068 : 01 06 02 05 00 07 03 04  white pieces
0x0070 : 60 61 62 63 64 65 66 67  black pawns
0x0078 : 71 76 72 75 70 77 73 74  black pieces
                               
        00 01 02 03 04 05 06 07
0x0080 : 0c 08 0a 0e 0f 0b 09 0d
0x0090 : 00 01 02 03 04 05 06 07
0x00A0 : 00 00 00 00 00 00 00 00
0x00B0 : 00 00 00 00 00 00 00 00
0x00C0 : 00 00 00 00 00 00 00 00
0x00D0 : 00 00 00 00 00 00 00 00
0x00E0 : 10 11 12 13 14 15 16 17
0x00F0 : 1c 18 1a 1e 1f 1b 19 1d

In 0x80, 0c (0x80 + 00)
In 0x60+0c, 00

Perhaps you need :

0x0320 : 00 00 00 00 00 00 00 00 white pawn type
0x0328 : 02 02 0a 0a 08 08 06 04 white piece type
0x0330 : 01 01 01 01 01 01 01 01 black ...
0x0338 : 03 03 0b 0b 09 09 07 05 black ...


Cordially

user_2141 22.11.2023 21:58

AW: Codeanalyse
 
Great. Now I see it (see below). Thanks, Hans

CB-Emu-debugger-memory-dump of "fscc9a1" in start position:

0000: 00 00 70 FF 20 00 00 00 00 00 34 14 00 00 FF FF ..p. .....4.....
0010: 0C 64 44 01 00 00 0C 20 00 00 E4 00 00 00 00 00 .dD.... ........
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060: 10 11 12 13 14 15 16 17 01 06 02 05 00 07 03 04 ................
0070: 60 61 62 63 64 65 66 67 71 76 72 75 70 77 73 74 `abcdefgqvrupwst
0080: 0C 08 0A 0E 0F 0B 09 0D 00 80 10 00 01 00 00 00 ................
0090: 00 01 02 03 04 05 06 07 00 00 00 0C 20 00 00 FF ............ ...
00A0: 80 80 80 80 80 80 80 80 00 70 00 08 10 08 68 C2 .........p....h.
00B0: 80 80 80 80 80 80 80 80 88 02 0B 20 00 00 00 00 ........... ....
00C0: 80 80 80 80 80 80 80 80 00 00 00 00 00 00 01 00 ................
00D0: 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00 ................
00E0: 10 11 12 13 14 15 16 17 14 34 00 00 14 34 00 00 .........4...4..
00F0: 1C 18 1A 1E 1F 1B 19 1D 00 00 00 00 00 00 00 00 ................

Moonshine 22.11.2023 22:22

AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121511)
Hallo Hannes,

Ich öffne auf meiner Linux-Maschine eine Kommandozeile und gehe ins Verzeichnis wo "CB-Emu.exe" liegt.

Dort gebe ich den Befehl
"wine CB-Emu.exe -debug fscc9a1"
ein.

Hans

Hallo Hans,

danke, das funktioniert wunderbar! Werde mich damit mal ein wenig beschäftigen.
Wie das Brett dargestellt wird, hat Mychess schon beantwortet. Das sehe ich im Simulator auch sehr schön. Aber dieser Debug-Modus von CB-Emu ist wahrscheinlich brauchbarer.

Lg

Hannes

user_2141 23.11.2023 11:20

AW: Codeanalyse
 
Hallo Hannes,

Nur so der guten Ordnung halber:
Ich mache meine Experimente mit Ghidra und dem CB-Emu-Debugger mit der Maschinen-Version "fscc9a", also den ROMs 101-1034a01 und 101-1034b02.
(d.h. NICHT mit "fscc9a1".)

Das spielt eine Rolle beim Setzen von Breakpoints, Vergleichen von Code-Abschnitts usw.

Welche ROM-Version meine physische Maschine hat, weiss ich nicht. Aufgrund der Seriennummer (23303798) vermute ich ein Baujahr 1982 und damit eine ROM-Version wie "fscc9a" oder "fscc9a1".

Hans

Moonshine 23.11.2023 12:36

AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121535)
Hallo Hannes,

Nur so der guten Ordnung halber:
Ich mache meine Experimente mit Ghidra und dem CB-Emu-Debugger mit der Maschinen-Version "fscc9a", also den ROMs 101-1034a01 und 101-1034b02.
(d.h. NICHT mit "fscc9a1".)

Das spielt eine Rolle beim Setzen von Breakpoints, Vergleichen von Code-Abschnitts usw.

Welche ROM-Version meine physische Maschine hat, weiss ich nicht. Aufgrund der Seriennummer (23303798) vermute ich ein Baujahr 1982 und damit eine ROM-Version wie "fscc9a" oder "fscc9a1".

Hans

Hallo Hans,

die Roms im fscc9a1 haben die gleichen Namen wie die des fscc9a. Ich habe die beiden ROMs mal verglichen und nur wenige Unterschiede gesehen, die ich allerdings nicht genauer untersucht habe. Aber natürlich sind dann gewisse Routinen an anderer Adresse zu finden. Die ersten 8kB ROM sind identisch.
Ich habe nun das Eröffnungsbuch des Sensory 9 in das Sargon 4.0 Rom kopiert und getestet. Es funktioniert dort einwandfrei, obwohl es in einem anderen Speicherbereich liegt. D.h. Im Buch gibt es keine absoluten Links (Verkettungen).
Ich bin noch dabei mir die Debugger-Möglichkeiten des CB-Emu anzusehen. Werde das jetzt auch mit der selben ROM-Version wie Du machen.

schöne Grüße

Hannes

user_2141 02.12.2023 16:35

AW: Codeanalyse
 
Hallo Hannes,

Im Moment komme ich mit der Interpretation der folgenden Tabelle nicht weiter.
Von C23E bis C267 gibt es eine Tabelle, die vom Zuggenerator verwendet wird ("fscc9a"):

C23E: 00 80
C240: 08 88 00 80 08 88 00 80 08 88 05 05 05 05 06 06
C250: 06 06 07 07 07 07 3C 3C 3C 3C 1E 28 28 1E 00 08
C260: 0F 15 1A 1E 21 23 24 24

Ich habe die Logik noch nicht verstanden.

Weisst du da mehr?

Schöne Grüsse, Hans

Moonshine 02.12.2023 18:12

AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121814)
Hallo Hannes,

Im Moment komme ich mit der Interpretation der folgenden Tabelle nicht weiter.
Von C23E bis C267 gibt es eine Tabelle, die vom Zuggenerator verwendet wird ("fscc9a"):

C23E: 00 80
C240: 08 88 00 80 08 88 00 80 08 88 05 05 05 05 06 06
C250: 06 06 07 07 07 07 3C 3C 3C 3C 1E 28 28 1E 00 08
C260: 0F 15 1A 1E 21 23 24 24

Ich habe die Logik noch nicht verstanden.

Weisst du da mehr?

Schöne Grüsse, Hans

Hallo Hans,

ich habe mir die Tabelle eben mal angesehen und ein paar Versuche im CB-Emu-Debug-Mode vorgenommen.
Die Tabelle reicht von $C23E - $C255 und beinhaltet Adresslinks ins RAM. Von $C23E - $C249 sind die lower Bytes gespeichert, von $C24A - $C255 die dazugehörigen High-Bytes. Die Tabelle ist also 12 Einträge groß.
Leider werde ich auch nicht schlau daraus, was letztendlich in diesem Adressbereich während der Zuggenerierung gespeichert wird.
Ich habe auch bis jetzt noch keine Zugliste gefunden die im RAM stehen würde. Beim Sargon 2.5/3.0/3.5 habe ich die auf Anhieb gefunden. Ich denke, ich muss jetzt mal versuchen umzudenken :-).

Lg

Hannes

user_2141 02.12.2023 19:08

AW: Codeanalyse
 
Hallo Hannes,

Ich sehe u.a. bei 04A0 bis 04AF eine Byte-Folge, offenbar mit Felder- und Figuren-Codes, die sich nach jedem Zug ändern.

Hans

Moonshine 03.12.2023 09:57

AW: Codeanalyse
 
Zitieren:

Zitat von Hans21 (Beitrag 121817)
Hallo Hannes,

Ich sehe u.a. bei 04A0 bis 04AF eine Byte-Folge, offenbar mit Felder- und Figuren-Codes, die sich nach jedem Zug ändern.

Hans

Ja, die habe ich auch schon gesehen. Da finde ich aber immer nur das "von-Feld" (Ausgangsfeld) und die entsprechende Figur die gezogen hat, nicht das Feld wohin die Figur zieht. Ist das vielleicht irgendwie anders codiert?. Weiß noch nicht so genau. Bleibe dran...

Hannes

user_2141 03.12.2023 14:11

AW: Codeanalyse
 
Hallo Hannes,

Den aktuellen Zug sehe ich u.a. bei:

00E8: MOVE_FROM_FIELD
00E9: MOVE_TO_FIELD

Was ich gerne sähe, wäre eine Liste der vorausberechneten Züge.

Hans

kamoj 27.07.2025 13:06

Re: Codeanalyse
 
Ich habe mir den SC9-Code ein wenig angesehen und herausgefunden, dass die Option F5 nach dem Reset zwar implementiert, aber nicht dokumentiert ist.
Weiß oder vermutet jemand, was sie steuert?
/Lars

fhub 27.07.2025 14:19

AW: Re: Codeanalyse
 
Hallo Lars,
Zitieren:

Zitat von kamoj (Beitrag 133238)
Ich habe mir den SC9-Code ein wenig angesehen und herausgefunden, dass die Option F5 nach dem Reset zwar implementiert, aber nicht dokumentiert ist.
Weiß oder vermutet jemand, was sie steuert?

Option F5 ist Eröffnungstraining (Book Practice Mode) und ist in beiden Manuals (Deutsch und Englisch) beschrieben - hast Du wahrscheinlich übersehen. ;)

Grüße,
Franz

kamoj 27.07.2025 21:42

Re: Codeanalyse
 
Danke Franz, ich schrieb falsch, was ich meinte ist "H6", die nicht beschrieben ist!
(Siehe Code AT $EA57 (AND #$10) und $EA6D.)
Es tut mir leid für meinen Fehler, versuchen Sie mir zu verzeihen.
Wissen Sie, was H6 macht?
/Lars


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:10 Uhr.

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