105 lines
2.2 KiB
C
105 lines
2.2 KiB
C
/* -*- C -*- */
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <gigatron/sys.h>
|
|
|
|
#include "core.h"
|
|
|
|
int prebooksize = 0;
|
|
near int booksize = 0; /* Number of opening book entries */
|
|
near int bkindex = -1; /* Current book table index */
|
|
struct tt ttentry; /* Current transposition table entry */
|
|
struct bk bkentry; /* Current book table entry */
|
|
|
|
#define BKPTR ((struct bk*)(0xC000))
|
|
#define TTPTR ((struct tt*)(0x8000))
|
|
|
|
void set_computing_mode(int enabled)
|
|
{
|
|
#ifndef REPEATABLE_RND
|
|
if (enabled)
|
|
SYS_SetMode(3);
|
|
else
|
|
SYS_SetMode(2);
|
|
#endif
|
|
}
|
|
|
|
/* The following functions operate with bank3 selected.
|
|
Since the stack grows down from 0xfffc, it is important
|
|
to make sure that these functions do not touch the
|
|
stack while bank3 is selected. */
|
|
|
|
void clr_ttable(void)
|
|
{
|
|
register byte cb = ctrlBits_v5;
|
|
SYS_ExpanderControl(cb | 0xc0);
|
|
memset((void*)TTPTR, 0, CORE * sizeof(struct tt)); /* memset does not PUSH */
|
|
SYS_ExpanderControl(cb);
|
|
}
|
|
|
|
struct tt *get_ttable(int x)
|
|
{
|
|
register byte cb = ctrlBits_v5;
|
|
SYS_ExpanderControl(cb | 0xc0);
|
|
ttentry = TTPTR[x];
|
|
SYS_ExpanderControl(cb);
|
|
return &ttentry;
|
|
}
|
|
|
|
void set_ttable(int x, struct tt *tt)
|
|
{
|
|
register byte cb = ctrlBits_v5;
|
|
SYS_ExpanderControl(cb | 0xc0);
|
|
TTPTR[x] = *tt;
|
|
SYS_ExpanderControl(cb);
|
|
}
|
|
|
|
struct bk *get_book(int x)
|
|
{
|
|
register byte cb = ctrlBits_v5;
|
|
if (x != bkindex) {
|
|
bkindex = x;
|
|
SYS_ExpanderControl(cb | 0xc0);
|
|
bkentry = BKPTR[x];
|
|
SYS_ExpanderControl(cb);
|
|
}
|
|
return &bkentry;
|
|
}
|
|
|
|
|
|
void preload_book(const char *filename)
|
|
{
|
|
register byte cb = ctrlBits_v5;
|
|
#ifdef BOOKSIZE
|
|
/* Load book from ROM */
|
|
register void *p = 0;
|
|
char buf[9];
|
|
do {
|
|
p = SYS_ReadRomDir(p, buf);
|
|
buf[8] = 0;
|
|
} while (p != 0 && strcmp(buf,"MSCPbook") != 0);
|
|
if (p) {
|
|
SYS_ExpanderControl(cb | 0xc0);
|
|
SYS_Exec(p, (void*)(unsigned)-1);
|
|
SYS_ExpanderControl(cb);
|
|
prebooksize = BOOKSIZE / sizeof(struct bk);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void load_book(const char *filename)
|
|
{
|
|
if (prebooksize)
|
|
booksize = prebooksize / sizeof(struct bk);
|
|
printf("Opening book size: %d\n", booksize);
|
|
}
|
|
|
|
|
|
/* Local Variables: */
|
|
/* mode: c */
|
|
/* c-basic-offset: 2 */
|
|
/* indent-tabs-mode: () */
|
|
/* End: */
|