#ifndef __TYPES_H_INC #define __TYPES_H_INC #include "Config.h" #ifdef _ACF_DEBUG_PRINT #define DEBUG(x) Serial.println(F(x)); Serial.flush() #else #define DEBUG(x) #endif enum Piece: byte { P_EMPTY = 0b0000, P_ANY = 0b1000, W_PAWN = 0b0001, W_KNGT = 0b0010, W_KING = 0b0011, W_BSHP = 0b0101, W_ROOK = 0b0110, W_QUEN = 0b0111, B_PAWN = 0b1001, B_KNGT = 0b1010, B_KING = 0b1011, B_BSHP = 0b1101, B_ROOK = 0b1110, B_QUEN = 0b1111, }; const char CHAR_STRS[] PROGMEM = " pnkbrq PNKBRQ"; Piece char_to_piece(char c) { for(byte i = 0; i < 0b1111; i++) { if(pgm_read_byte_near(CHAR_STRS + i) == c) return (Piece)i; } return P_EMPTY; } char piece_to_char(Piece p) { return CHAR_STRS[p]; } struct Move { byte sq_from; // 0x88 byte sq_to; // 0x88 Piece pc_prom; // 0b(4unused)(1color)(3type) }; //Move move_from_str(char* s) { //} void print_sq(byte sq) { Serial.print((char)((sq & 0x07) + 'a')); Serial.print((char)(((sq & 0x70) >> 4) + '1')); } void print_move(Move m) { if(m.sq_from == 0xFF) { Serial.print(F("INVALID_MOVE")); return; } print_sq(m.sq_from); print_sq(m.sq_to); Piece pc = (Piece)(m.pc_prom & 0x7); if(pc != 0) Serial.print(piece_to_char(pc)); } #endif