Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time. Cannot retrieve contributors at this time
204 lines (196 sloc) 10.2 KB
Version 0.2.3 (??/??/????):
- Rewrite the manual pages using mdoc documentation language. The manual
pages can be now viewed with the standard `man' utility without
pre-processing.
- Fixed a bug where EOF at the game prompt would cause infinite loop
on certain operating systems
- Fixed a build error on operating systems that have fully
deprecated the use of certain legacy time functions
- Minor fixes to increase portability to different operating systems
Version 0.2.2 (07/09/2009):
- Use the XDG Base Directory Specification for configuration and
data file locations
- Configuration strings can have whitespace if they're wrapped in quotes
- Parallel perft works reliably on all platforms
- Send "done=1" as the last feature string, as required by the Xboard
protocol specification
- Support the "egtpath" command for setting the path to Scorpio bitbases
- Support the "memory" command for setting the hash size. The bitbases'
memory usage can't be controlled accurately enough, which is why "memory"
only affects the hash table.
- Better error checking for invalid Xboard commands
- Minor bugfixes
Version 0.2.0 (02/05/2008):
- Pawn hash table
- Support for Scorpio's endgame bitbases
- Slightly improved time allocation
- Improved search
- Minor bugfixes
- Minor code cleanup
Version 0.1.1 (10/21/2007):
- Improved search
- Replaced command line arguments with a config file
- The source now compiles with the MSVC++ compiler
- Cleaned up some of the code
- Complete rewrite of king-attack evaluation
- Minor bugfixes
- Quiescense nodes are also counted in print_pv()
Completed tasks:
- Passed pawn pushes mustn't be reduced
- Don't update history tables (not even on fail low) with captures
- Implement recapture extensions
- Ditch longjmp() for stopping the search
- search_book() shouldn't open and close the book file. Instead it
should have a FILE pointer and the position count passed to it.
- Drop null move if all the officers have fallen
- Don't use a custom struct to read/write book positions
- Add king square to Board structure
- Encode enpassant square in Move
- Write an undo_move() function
- Use SEE for move ordering
- No null move pruning at PV nodes or when beta is a mate score
- Replace all occurences of strtok() with strtok_r()
- Create another version of gen_moves() with <pc> and <to> arguments
so that we can read a SAN string and create only the moves that we need.
- Replace age_hash() with a more robust solution. Even with a 35MB hash
table it takes 5% of the CPU cycles.
- Improvements to fen_to_board():
- Does not crash on invalid input
- Recognizes invalid FEN strings fairly accurately
- Use a square table for passed pawns instead of a rank table
- Replace rotated bitboards with antirotated magic bitboards
- Don't accept repetitions from the opening book
- Add the ability to convert a board position to FEN
- When reading PGN files, store book positions in an AVL tree before
writing to book.
- Make sure illegal castling is detected correctly
- Make sure mate scores are accurate
- Generate only legal moves. This will solve a lot of problems and won't
hopefully slow the program down too much.
- Add passed pawn moves to quiescence search
- Add <U64 check_mask> and <bool double_check> to Board struct.
The values are updated in make_move().
- Smooth transition from middlegame to endgame evaluation.
- Implement futility pruning:
http://members.home.nl/matador/chess840.htm#FUTILITY
- Store all necessary information in hash keys, including castling and
en-passant data.
- Implement a help command which displays all the available commands
- Change opening book data structure to:
- U64 key
- U16 games
- U16 wins
- No promotion argument in get_move(...). The promotion should be included
in the <U32 move> argument.
- Use the same hash keys in the Linux and Windows version to make sure that
the same opening book can be used.
- pcsq should be defined as pcsq[color][pc][sq], not pcsq[pc][color][sq]
- Use a function called progressbar() to display the progress while
running benchmark or reading PGN files.
- Use the bool type in <stdbool.h> instead of a typedef
- Moves should be of type U32, not int
- Eval should never favor a player who has insufficient mating material.
- Add 50 move rule
- Get totally rid of path dependent castling evaluation and replace it with
a better king safety eval.
- Implement quiescence search
- Make sure that the "U64 target" argument is taken into consideration
in each of the gen_x_moves() (i.e. pawn moves) functions.
- Implement book learning
- Encode check (one bit) in <U32 move>
- Order moves with high scores first and not the other way around
- Replace the global <nnodes> mess with a cleaner solution so that <nnodes>
won't have to be manually cleared all the time.
- Penalize backward pawns in eval()
- Do Internal Iterative Deepening in PV nodes with no hash hit
- In main(), group the variables of a game in one struct (Chess)
- Tactical moves shouldn't get a score from the history table
- Drop null move in extended positions
- Accept Xboard commands even in the PROTO_NONE mode
- Sloppy shouldn't go crazy in analyze mode when it reaches the maximum
search depth (eg. after finding a forced mate).
- Calculate branching factor somewhat correctly
- Try checks after captures on the first ply of QS
- input_available() should call a get_cmd_type() function which
has the following return values:
CMDT_EXEC_AND_CONTINUE
CMDT_FINISH
CMDT_CANCEL
CMDT_CONTINUE
- Separate Xboard commands from Sloppy's own commands.
- Use the types in <inttypes.h> (C99) for fixed-size integers.
- The age of a hashnode should be replaced with a birthdate (i.e. move #2).
The birthdate is the number of moves played in the game, not the move
number of the move in the search tree.
- Replace file_mask[square] etc. with file_mask[file] to save memory. It
won't really be slower because we get the file with just "sq & 7".
- Use an endianess-independent opening book format. The book is now
always in little-endian format.
- Board.nmove should be the number of moves made, and also an index
for the last move.
- Replace strcpy() and strncpy() with the safer strlcpy()
- Replace strcat() and strncat() with the safer strlcat()
- Improvements to book management:
- Add a command line parameter to use or not use the book.
- Add a command line parameter to load or not load it in RAM.
- Add a command line parameter to enable or disable learning.
- If not using the "book in memory" mode, disable learning.
- Rename pop_count() to popcount() so that "pop" wouldn't be confused with
popping a stack.
- Rename first_one() to lsb()
- Add a pop_lsb() function for getting the lsb AND clearing that bit.
It will make code shorter, not faster.
- Commands like "hint" and "bk" should use the CMDT_EXEC_AND_CONTINUE mode.
To do that we need separate boards for the game and the search.
- Analyze mode should have its own get_input_type() function so that
normal xboard commands wouldn't get accepted.
- Switch from mixed case to lower case
- Quiescence search should have its own simple score_moves() function
- Make san_to_move() more flexible but still intolerant of illegal moves
- Get rid of "ULL" in long long literals, we'll have to use C99 anyway
- Use some getopt() clone + a switch statement to parse input.
The Xboard and UCI protocols could actually have their own modules.
- Get rid of verified null move pruning. Just use NULL_R=3.
- Cancelling the search while running a benchmark or test should also
cancel the whole benchmark/test.
- Merge print_debug_info() and print_search_info()
- Get rid of circular includes when possible. Can't be done for headers
like chess.h or util.h.
- Chess.cmd[] and Chess.ncmd should be global variables in util.c.
The "quit" command must work in the middle of running a testsuite.
- These things need a better name:
- int cancel (in struct _SearchData) - DONE (now "CmdType")
- GameData (struct) and game_data (the variables) - DONE (now "PosInfo")
- PreMoves (struct) - DONE (now "MoveMasks")
- pc_type[64] (in struct _Board) - DONE (now "mailbox")
- Compile with the pedantic flag
- Fix CastleMask (in util.h). Only half of its contents are masks.
- Use a sign (int) variable instead of SELF(color)
- Cleanup or rename some of the ridiculous stuff in sloppy.h
- Combine define.h, chess.h and chess.c into sloppy.h and sloppy.c, OR
rename define.h to sloppy.h
- Use PeekNamedPipe() (in winbase.h) or GetNumberOfConsoleInputEvents()
(in wincon.h) to poll stdin in Windows.
- Totally get rid of global.c
- Implement version 2 of the Xboard protocol, and don't use any
protover 1 commands (like "white" and "black")
- Make sure that hash keys in the pv line aren't easily overwritten
- Rename CAPTURE() to GET_CAPT(), SQ_FROM() to GET_FROM(), etc.
- Cleanup eval.c and search.c
- Rewrite the position parser in test_pos()
- Do something to push_history() and push_killers(). Pushing them takes
take and doesn't guarantee that the tables are in sync with the game.
- print_moves() shouldn't be a debug mode function/command
- The config file is enough for setting options. Get rid of cmdline args.
- Don't use _WIN32 to mean WINDOWS
- Test input_available() in Windows pipe mode
- Fix MSVC++ threading issues in perft
- Get rid of struct _Masks (in movegen.c)
- Count also QS nodes in print_pv()
- Don't overwrite the book file if the book wasn't modified
- Don't reduce killer moves
- Add a "logfile on/off" setting
- Change NO_MOVE to NULLMOVE
- Always deallocate the book when exiting
- Add a pawn structure hash table
- Add support for Scorpio's endgame bitbases