Présentation d'AttoChess

AttoChess est un programme d'échecs complet et jouable pour 16-bit x86 DOS, occupant seulement 278 octets. Il s'appuie sur le noyau de recherche original, mais avec des optimisations significatives pour réduire la taille du code.

Optimisations du code

Les optimisations d'AttoChess incluent la suppression du tampon de rendu, la modification de la boucle d'affichage pour écrire directement sur la console avec l'instruction int 29h, et la simplification de la logique de démarrage en supprimant la commutation du mode BIOS.

main_loop:
   mov si, offset board_db + 24   ; row 2 (black back rank), col 0
   mov cl, 98                     ; 8 rank rows + final CR,LF (CH=0)
disp_loop:
   lodsb                          ; read square contents
   test al, 30h                   ; piece?
   jz disp_cont                   ;   no: emit raw (CR / LF / NUL)
   inc ax                         ; zero-align king
   and al, 27h                    ; isolate piece type + black/lowercase bit
   add al, 4Bh                    ; K, N, B, P, Q, R (upper/lower by color)
disp_cont:
   int 29h                        ; fast console output of AL
   loop disp_loop

Améliorations de la logique de jeu

AttoChess améliore également la logique de jeu, notamment en ce qui concerne les pions. La direction des pions est maintenant intégrée dans le bit de couleur, ce qui simplifie la logique de déplacement des pions.

pawn:
   push ax
   xor al, dh          ; bit 5 := vector sign XOR side to move
   test al, 20h        ; forward for the moving color?
   pop ax              ; POP leaves flags intact
   jz vec_cont         ;   backward: reject
   test al, 1          ; odd offset (+/-11, +/-13) = diagonal?
   jnz pawn_cont       ;   diagonal: must capture
   xor ah, 30h         ; straight (+/-12): invert dest color for the empty test
pawn_cont:
   test ah, dl
   jz vec_cont

Implications des optimisations

Ces optimisations permettent à AttoChess de réduire considérablement sa taille tout en conservant les fonctionnalités de base du programme d'échecs. Cela démontre l'importance de l'optimisation du code pour les systèmes à ressources limitées.