home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
294.lha
/
CacheCard_v1.0
/
cachecard.h
< prev
next >
Wrap
C/C++ Source or Header
|
1989-10-08
|
4KB
|
116 lines
/*
CacheCard V1.0
Copyright 1989 by Dave Haynie
MAIN HEADER FILE
*/
#define PROGRAM_VERSION 100
#include <exec/types.h>
#include <exec/execbase.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <exec/memory.h>
#include <libraries/expansionbase.h>
#include <libraries/configregs.h>
#include <libraries/configvars.h>
#include <libraries/dosextens.h>
#include <functions.h>
#include <stdio.h>
#include <ctype.h>
/* ====================================================================== */
/* Define important bits used in various MMU registers. */
/* Here are the TC definitions. The TC register is 32 bits long. */
#define TC_ENB (1L<<31) /* Enable the MMU */
#define TC_SRE (1L<<25) /* For separate Supervisor */
#define TC_FCL (1L<<24) /* Use function codes? */
#define TC_PS(x) ((ULONG)((x)&0x0f)<<20) /* Page size */
#define TC_IS(x) ((ULONG)((x)&0x0f)<<16) /* Logical shift */
#define TC_TIA(x) ((ULONG)((x)&0x0f)<<12) /* Table indices */
#define TC_TIB(x) ((ULONG)((x)&0x0f)<<8)
#define TC_TIC(x) ((ULONG)((x)&0x0f)<<4)
#define TC_TID(x) ((ULONG)((x)&0x0f)<<0)
/* Here are the page descriptor definitions, for short desctriptors only,
since that's all I'm using at this point. */
#define PD_ADDR(x) ((ULONG)(x)&~0x0fL) /* Translated Address */
#define IV_ADDR(x) ((ULONG)(x)&~0x03L) /* Invalid unused field */
#define PD_CI (1L<<6) /* Cache inhibit */
#define PD_WP (1L<<2) /* Write protect it! */
#define PD_DT_TYPE 0x03 /* Page descriptor type */
#define PD_DT_INVALID 0x00 /* Invalid root descriptor */
#define PD_DT_PAGE 0x01 /* Fixed offset, auto-genned */
#define PD_DT_V4BYTE 0x02 /* Short root descriptor */
#define PD_DT_V8BYTE 0x03 /* Long root descriptor */
/* This is needed for identification of bogus systems that test positive
for MMUs. */
#define SizeOf(x) ((ULONG)sizeof(x))
/* ====================================================================== */
/* From the 030STUFF.A module */
extern void GetCRP();
extern ULONG GetTC(),
GetMMUType();
/* ====================================================================== */
/* This section describes the system tag structure, where I stick all the
information that I like to keep around. */
#define ROM_NOP 0x0000 /* No ROM operation called for */
#define ROM_FAST 0x0002 /* Normally installed FASTROM image */
#define ROM_KICK 0x0003 /* Installed as a KICK image */
#define ROM_FKICK 0x0004 /* A KICK image made into a FAST image */
#define TABLE_REV 1 /* MMU table compatibility revision */
/* This is the special descriptor stored by SetCPU to help it find itself
and figure out just what it's done. The GetSysTag() routine knows how
to find this structure on a properly SetCPU-ed system. Anyone making
modifications to this program and expecting to work with SetCPU now
and in the future must check the "tagsize", "progver" and "tablerev"
fields to ensure they don't make mistakes. The "tagsize" field tell you
how large the tag is; it'll probably grow in future versions. The
"progver" identifies the version of SetCPU that built the tables; the
"progver" field will be 150 for SetCPU 1.50. The "tablerev" field is
indicates the revision level of the MMU table. So far, the table is
revision 1; all version of SetCPU use this type of table (check the
tagsize first; currenly released version of SetCPU, like V1.50, have a
smaller systag). */
struct systag {
ULONG tagsize; /* Size of this tag */
ULONG progver; /* The program version */
ULONG *maintable; /* The main ROM table */
ULONG *romimage; /* The main ROM image */
UWORD romtype; /* Type of MMU ROM */
UWORD patches; /* The number of other patches applied */
struct MemChunk *patchlist; /* List of installed patches */
struct ExpROMData *devs; /* Translated device ROMs */
ULONG TC; /* Precomputed TC used for KICK. */
ULONG CRP[2]; /* Precomputed CRP used for KICK. */
UWORD config; /* Configuration status. */
ULONG BerrSize; /* Size of bus error handler. */
char *OldBerr; /* The old BERR routine. */
char *BerrHandler; /* My BERR routine. */
short wrapup; /* Upper address wrap bound. */
short wrapdown; /* Lower address wrap bound. */
ULONG tablesize; /* Main table size. */
char *ResetCode; /* Actual reset routine */
ULONG tablerev; /* Revision of table structure */
};
extern struct systag *GetSysTag();