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.