#include <vectrex.h>
#define SCALE (127/14)
#define SPACING 30
#define XOFFSET (107)
#define YOFFSET (30)
const int pawn[] = {
-1,0*SCALE,-10*SCALE,
-1,2*SCALE,3*SCALE,
-1,6*SCALE,0*SCALE,
-1,2*SCALE,-2*SCALE,
-1,3*SCALE,4*SCALE,
-1,-3*SCALE,4*SCALE,
-1,-2*SCALE,-2*SCALE,
-1,-6*SCALE,0*SCALE,
-1,-2*SCALE,3*SCALE,
1
};
const int castle[] = {
-1,0*SCALE,-10*SCALE,
-1,2*SCALE,2*SCALE,
-1,10*SCALE,0*SCALE,
-1,1*SCALE,-2*SCALE,
-1,3*SCALE,0*SCALE,
-1,0*SCALE,2*SCALE,
-1,-2*SCALE,0*SCALE,
-1,0*SCALE,2*SCALE,
-1,2*SCALE,0*SCALE,
-1,0*SCALE,2*SCALE,
-1,-2*SCALE,0*SCALE,
-1,0*SCALE, 2*SCALE,
-1,2*SCALE,0*SCALE,
-1,0*SCALE,2*SCALE,
-1,-3*SCALE,0*SCALE,
-1,-1*SCALE,-2*SCALE,
-1,-10*SCALE,0*SCALE,
-1,-2*SCALE,2*SCALE,
1
};
const int knight[] = {
-1,0*SCALE,-10*SCALE,
-1,2*SCALE,2*SCALE,
-1,1*SCALE,-2*SCALE,
-1,11*SCALE,3*SCALE,
-1,2*SCALE,3*SCALE,
-1,-1*SCALE,0*SCALE,
-1,-2*SCALE,4*SCALE,
-1,-2*SCALE,0*SCALE,
-1,0*SCALE,-4*SCALE,
-1,-8*SCALE,4*SCALE,
-1,-1*SCALE,-2*SCALE,
-1,-2*SCALE,2*SCALE,
1
};
const int bishop[] = {
-1,0*SCALE,-10*SCALE,
-1,2*SCALE,3*SCALE,
-1,12*SCALE,-2*SCALE,
-1,4*SCALE,4*SCALE,
-1,-4*SCALE,4*SCALE,
-1,-4*SCALE,-4*SCALE,
-1,2*SCALE,4*SCALE,
-1,-10*SCALE,-2*SCALE,
-1,-2*SCALE,3*SCALE,
1
};
const int queen[] = {
-1,0*SCALE,-10*SCALE,
-1,2*SCALE,3*SCALE,
-1,10*SCALE,0*SCALE,
-1,0*SCALE,-2*SCALE,
-1,10*SCALE,0*SCALE,
-1,-4*SCALE,2*SCALE,
-1,4*SCALE,2*SCALE,
-1,-4*SCALE,2*SCALE,
-1,4*SCALE,2*SCALE,
-1,-10*SCALE,0*SCALE,
-1,0*SCALE,-2*SCALE,
-1,-10*SCALE,0*SCALE,
-1,-2*SCALE,3*SCALE,
1
};
const int king[] = {
-1,0*SCALE,-10*SCALE,
-1,2*SCALE,3*SCALE,
-1,14*SCALE,1*SCALE,
-1,1*SCALE,-4*SCALE,
-1,1*SCALE,4*SCALE,
-1,4*SCALE,1*SCALE,
-1,-4*SCALE,1*SCALE,
-1,-1*SCALE,4*SCALE,
-1,-1*SCALE,-4*SCALE,
-1,-14*SCALE,1*SCALE,
-1,-2*SCALE,3*SCALE,
1
};
static inline void set_scale(unsigned int s) {
VIA_t1_cnt_lo = s;
}
#define WHITE 3
#define BLACK 0
int row, col, colour;
static inline void draw(const int *piece) {
// black pieces are darker and do not have a base line
Reset0Ref(); set_scale(127); Moveto_d(row,col); set_scale(16);
col += SPACING;
if (colour == BLACK) Moveto_d(0,10*SCALE);
Draw_VLp((int *)piece+colour);
}
const int *piece[8] = {castle, knight, bishop, queen, king, bishop, knight, castle};
int main(void) {
int i;
for (;;) {
Wait_Recal();
Intensity_a(80);
row = (SPACING<<2)-YOFFSET; col = -XOFFSET; colour = WHITE;
for (i = 0; i < 8; i++) draw(pawn);
row += SPACING; col = -XOFFSET;
for (i = 0; i < 8; i++) draw(piece[i]);
Intensity_a(120);
row = (int)SPACING*-2-YOFFSET; col = -XOFFSET; colour = BLACK;
for (i = 0; i < 8; i++) draw(pawn);
row -= SPACING; col = -XOFFSET;
for (i = 0; i < 8; i++) draw(piece[i]);
}
return 0;
}