gigatron/rom/Compilers/glcc/stuff/mscp/core.c
2025-01-28 19:17:01 +03:00

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: */