> You put it very clear. The question now is if the PIC would at least
> be able to represent a board and make some moves without committing
> suicide. Maybe it could be used for some purpose: for example, to
> control positions of the pieces on the board, and things like that,
> then, a more powerful processor would be used for computations. But to
> start, I would prefer a PIC, since it's easier to program than other,
> more complex, solutions.

You could try to reduce the amount of data you store:
You have:

int             piece[64]; // values 0..6
int             color[64]; // values 0, 1, 6

typedef struct tag_MOVE {
     int             from,      // values 0..63?
                     dest,      // values 0..63?
                     type;      // values 0..7
}               MOVE;

/* For storing all moves of game */
typedef struct tag_HIST {
     MOVE            m;
     int             cap;       // 0..6
} HIST;

That is 64x2 byte for piece and color and 8 byte per tag_HIST.
Using

/*
  * Encode color as bit 3 of each entry, bits 0..2 denote the piece,
  * 0 (or 15) is empty.
  * A) 0: empty; 1..6: white; 9..14: black
  * B) 0..5: white, 8..13: black, 15: empty
  * I'd prefer A...
  *
  * #define PIECE(p)    ((p) & 7)
  * #define COLOR(p)    (0 != ((p) & 8))
  *
  * p = piece[position];
  * if (0 == piece) {
  *   empty;
  * } else {
  *   // act on PIECE(p) of COLOR(p)
  * }
  */
unsigned char piece[64];
// no color array

typedef struct tag_MOVE {
     unsigned char   from;
     unsigned char   dest;
     unsigned char   type:4;
     unsigned char   cap:4; // moved up from tag_HIST
}               MOVE;
/* For storing all moves of game */
typedef struct tag_HIST {
     MOVE            m;
} HIST;

would be only 64x1 byte for piece and 3 byte per tag_HIST, allowing you 
to keep a HIST hist[85] in a single data bank. It's not 6000, but for a 
start... And by using accessor functions you could instantiate 1 <= N <= 
8 (or so) of these arrays and access one of them at (INDEX div N), 
basing the selection on (INDEX mod N) either via a pointer array or a 
switch statement.

Happy coding,
Raphael

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to