Un-ignored: the dev drive is the ground truth the restoration and emulator work constantly reference (DPL3/LIBDPL + VRENDER i860 renderer source, BT/RP live+dev game trees, VGL_LABS pod boot, scene/audio content). Kept in-repo for the pod-owner community. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
577 lines
12 KiB
C++
577 lines
12 KiB
C++
/* basic memory operations */
|
|
#include "igctypes.h"
|
|
#include "emcarray.h"
|
|
|
|
--{{{ pixel memory access macros
|
|
#define read_pixmem_bit(pixel,bit) (1 & (pixel->memory[((bit)>>3)] >> ((bit) & 7)))
|
|
#define write_pixmem_bit(pixel,bit,val) \
|
|
do { \
|
|
if ((val)) \
|
|
pixel->memory[((bit)>>3)]|=(1<<((bit)&7)); \
|
|
else \
|
|
pixel->memory[((bit)>>3)]&=~(1<<((bit)&7)); \
|
|
} while (0)
|
|
--}}}
|
|
|
|
--{{{ int read_pixmem_word ( pixel_memory *pixel, int bit0, int bits, int sextend )
|
|
int read_pixmem_word ( pixel_memory *pixel, int bit0, int bits, int sextend )
|
|
{
|
|
int res=0;
|
|
register int bitval, bit, shift=0;
|
|
|
|
for ( bit=0; bit<bits; bit++ ) {
|
|
bitval=read_pixmem_bit(pixel, bit0+bit );
|
|
res|=bitval<<shift;
|
|
shift++;
|
|
}
|
|
|
|
if (sextend && bitval) {
|
|
res|=((-1) ^ (((1<<shift)) - 1));
|
|
}
|
|
|
|
return res;
|
|
}
|
|
--}}}
|
|
--{{{ void write_pixmem_word ( pixel_memory *pixel, int bit0, int bits, int val )
|
|
void write_pixmem_word ( pixel_memory *pixel, int bit0, int bits, int val )
|
|
{
|
|
register int bit, shift=0;
|
|
|
|
for ( bit=0; bit<bits; bit++ ) {
|
|
write_pixmem_bit ( pixel, bit0+bit, val&1 );
|
|
val>>=1;
|
|
}
|
|
}
|
|
--}}}
|
|
|
|
--{{{ int eval_ltree ( pixel_memory *pixel, int x, int y, float A, float B, float C )
|
|
int eval_ltree ( pixel_memory *pixel, int x, int y, float A, float B, float C )
|
|
{
|
|
float eval, fx, fy;
|
|
|
|
fx=(float) x;
|
|
fy=(float) y;
|
|
|
|
eval=(fx*A) + (fy*B) + C;
|
|
|
|
return (int) eval;
|
|
}
|
|
--}}}
|
|
--{{{ int eval_qtree ( pixel_memory *pixel,
|
|
int eval_qtree ( pixel_memory *pixel,
|
|
int x, int y,
|
|
float A, float B, float C, float D, float E, float F )
|
|
{
|
|
float eval, fx, fy;
|
|
|
|
fx=(float) x;
|
|
fy=(float) y;
|
|
|
|
eval=(fx*A) + (fy*B) + C + (fx*fx*D) + (fy*fy*E) + (fx*fy*F);
|
|
|
|
return (int) eval;
|
|
}
|
|
--}}}
|
|
|
|
/* IGC command set ! */
|
|
|
|
--{{{ INSTRUCTIONS TO MODIFY THE ENABLE REGISTER
|
|
/*
|
|
how to make this easier? i need to pass a totally general function
|
|
to each pixel in the tile, so I need
|
|
*/
|
|
|
|
typedef pixel_function (
|
|
|
|
|
|
|
|
--{{{ void FBITS (int n )
|
|
void FBITS (int n )
|
|
{
|
|
fracBits = n;
|
|
}
|
|
--}}}
|
|
--{{{ void CLRENABS ()
|
|
void CLRENABS ()
|
|
{
|
|
int x, y;
|
|
|
|
for (x=0; x<tile_x; x++ )
|
|
for (y=0; y<tile_y; y++ ) {
|
|
pixtile->array[x+(y<<tile_x_bits))]->enable=0;
|
|
}
|
|
}
|
|
}
|
|
--}}}
|
|
--{{{ void SETENABS ()
|
|
void SETENABS ()
|
|
{
|
|
{
|
|
int x, y;
|
|
|
|
for (x=0; x<tile_x; x++ )
|
|
for (y=0; y<tile_y; y++ ) {
|
|
pixtile->array[x+(y<<tile_x_bits))]->enable=1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--}}}
|
|
--{{{ void ENABINV ()
|
|
void ENABINV ()
|
|
{
|
|
{
|
|
int x, y;
|
|
|
|
for (x=0; x<tile_x; x++ )
|
|
for (y=0; y<tile_y; y++ ) {
|
|
pixtile->array[x+(y<<tile_x_bits))]->enable=^1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--}}}
|
|
--{{{ void MEMintoENAB ()
|
|
void MEMintoENAB ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TREEeqZERO ()
|
|
void TREEeqZERO ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TREEqeZERO ()
|
|
void TREEqeZERO ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TREEltZERO ()
|
|
void TREEltZERO ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MESH ( int len )
|
|
void MESH ( int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void GRID ( int len )
|
|
void GRID ( int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMeqZERO ( int src, int slen )
|
|
void MEMeqZERO ( int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMeqONES ( int src, int slen )
|
|
void MEMeqONES ( int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMneZERO ( int src, int slen )
|
|
void MEMneZERO ( int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMeqSCA ( int src, int slen )
|
|
void MEMeqSCA ( int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMgeSCA ( int src, int slen )
|
|
void MEMgeSCA ( int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMgtSCA ( int src, int slen )
|
|
void MEMgtSCA ( int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMeqMEM ( int lsrc, int src, int slen )
|
|
void MEMeqMEM ( int lsrc, int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMneMEM ( int lsrc, int src, int slen )
|
|
void MEMneMEM ( int lsrc, int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMgeMEM ( int lsrc, int src, int slen )
|
|
void MEMgeMEM ( int lsrc, int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMgtMEM ( int lsrc, int src, int slen )
|
|
void MEMgtMEM ( int lsrc, int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEM2geMEM2 ( int lsrc, int src, int slen )
|
|
void MEM2geMEM2 ( int lsrc, int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEM2gtMEM2 ( int lsrc, int src, int slen )
|
|
void MEM2gtMEM2 ( int lsrc, int src, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMeqTREE ( int src, int len )
|
|
void MEMeqTREE ( int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMneTREE ( int src, int len )
|
|
void MEMneTREE ( int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMleTREE ( int src, int len )
|
|
void MEMleTREE ( int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMltTREE ( int src, int len )
|
|
void MEMltTREE ( int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMgeTREE ( int src, int len )
|
|
void MEMgeTREE ( int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMgtTREE ( int src, int len )
|
|
void MEMgtTREE ( int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void ENABandeqMEM ( int src )
|
|
void ENABandeqMEM ( int src )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void ENABandeqMEMBAR ( int src )
|
|
void ENABandeqMEMBAR ( int src )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void ENABoreqMEM ( int src )
|
|
void ENABoreqMEM ( int src )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void ENABxoreqMEM ( int src )
|
|
void ENABxoreqMEM ( int src )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void CRYintoENAB ()
|
|
void CRYintoENAB ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void ENABoreqCRY ()
|
|
void ENABoreqCRY ()
|
|
{
|
|
}
|
|
--}}}
|
|
--}}}
|
|
--{{{ INSTRUCTIONS TO STORE THE ENABLE REGISTER
|
|
|
|
--{{{ void ENABintoMEM ( int dst )
|
|
void ENABintoMEM ( int dst )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMoreqENAB ( int dst )
|
|
void MEMoreqENAB ( int dst )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMandeqENAB ( int dst )
|
|
void MEMandeqENAB ( int dst )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void ENABintoCRY ()
|
|
void ENABintoCRY ()
|
|
{
|
|
}
|
|
--}}}
|
|
|
|
--}}}
|
|
--{{{ ARITHMETIC AND LOGICAL INSTRUCTIONS
|
|
|
|
/* all memory writes are contioned by the enable register */
|
|
|
|
--{{{ void CLEAR ( int dst, int dlen)
|
|
void CLEAR ( int dst, int dlen)
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SET ( int dst, int dlen)
|
|
void SET ( int dst, int dlen)
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void CLRCRY ()
|
|
void CLRCRY ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TREEintoMEM ( int dst, int len )
|
|
void TREEintoMEM ( int dst, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TREEBARintoMEM ( int dst, int len )
|
|
void TREEBARintoMEM ( int dst, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TREEclmpintoMEM ( int dst, int len )
|
|
void TREEclmpintoMEM ( int dst, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SCAintoMEM ( int dst, int len )
|
|
void SCAintoMEM ( int dst, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void CPY ( int dst, int src, int len )
|
|
void CPY ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SWAP ( int dst, int src, int len )
|
|
void SWAP ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void INC ( int dst, int src, int len )
|
|
void INC ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void DEC ( int dst, int src, int len )
|
|
void DEC ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SHIFTL ( int dst, int src, int len, int n )
|
|
void SHIFTL ( int dst, int src, int len, int n )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SHIFTR ( int dst, int src, int dlen, int slen, int n )
|
|
void SHIFTR ( int dst, int src, int dlen, int slen, int n )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void INVERT ( int dst, int src, int dlen )
|
|
void INVERT ( int dst, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void NEGATE ( int dst, int src, int dlen )
|
|
void NEGATE ( int dst, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMpluseqSCA ( int dst, int src, int dlen )
|
|
void MEMpluseqSCA ( int dst, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMplusMEM ( int dst, int lsrc, int src, int dlen, int slen )
|
|
void MEMplusMEM ( int dst, int lsrc, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMpluseqMEM ( int dst, int src, int dlen, int slen )
|
|
void MEMpluseqMEM ( int dst, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMclmppluseqMEM ( int dst, int src, int dlen, int tmp )
|
|
void MEMclmppluseqMEM ( int dst, int src, int dlen, int tmp )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMminusMEM ( int dst, int lsrc, int src, int dlen, int slen )
|
|
void MEMminusMEM ( int dst, int lsrc, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMminuseqMEM ( int dst, int src, int dlen, int slen )
|
|
void MEMminuseqMEM ( int dst, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMplusMEM2 ( int dst, int lsrc, int src, int dlen, int slen )
|
|
void MEMplusMEM2 ( int dst, int lsrc, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMpluseqMEM2 ( int dst, int src, int dlen, int slen )
|
|
void MEMpluseqMEM2 ( int dst, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEM2clmppluseqMEM2 ( int dst, int src, int dlen, int tmp )
|
|
void MEM2clmppluseqMEM2 ( int dst, int src, int dlen, int tmp )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMminusMEM2 ( int dst, int lsrc, int src, int dlen, int slen )
|
|
void MEMminusMEM2 ( int dst, int lsrc, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMminuseqMEM2 ( int dst, int src, int dlen, int slen )
|
|
void MEMminuseqMEM2 ( int dst, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMandMEM ( int dst, int lsrc, int src, int dlen )
|
|
void MEMandMEM ( int dst, int lsrc, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMandeqMEM ( int dst, int src, int dlen )
|
|
void MEMandeqMEM ( int dst, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMorMEM ( int dst, int lsrc, int src, int dlen )
|
|
void MEMorMEM ( int dst, int lsrc, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMoreqMEM ( int dst, int src, int dlen )
|
|
void MEMoreqMEM ( int dst, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMxorMEM ( int dst, int lsrc, int src, int dlen )
|
|
void MEMxorMEM ( int dst, int lsrc, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMxoreqMEM ( int dst, int src, int dlen )
|
|
void MEMxoreqMEM ( int dst, int src, int dlen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMpluseqTREE ( int dst, int src, int len )
|
|
void MEMpluseqTREE ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TREEminusMEM ( int dst, int src, int len )
|
|
void TREEminusMEM ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMandTREE ( int dst, int src, int len )
|
|
void MEMandTREE ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMorTREE ( int dst, int src, int len )
|
|
void MEMorTREE ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMxorTREE ( int dst, int src, int len )
|
|
void MEMxorTREE ( int dst, int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void CRYintoMEM ( int dst )
|
|
void CRYintoMEM ( int dst )
|
|
{
|
|
}
|
|
--}}}
|
|
--}}}
|
|
--{{{ SPECIAL INSTRUCTIONS
|
|
|
|
--{{{ void FTECT ( int dst, int len )
|
|
void FTECT ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void FEDGE ()
|
|
void FEDGE ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SEDGE ( int src )
|
|
void SEDGE ( int src )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void FEDGEBAR ()
|
|
void FEDGEBAR ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SEDGEBAR ( int src )
|
|
void SEDGEBAR ( int src )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void EDGE2 ()
|
|
void EDGE2 ()
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void STRIPEDGE ( int src, int dst )
|
|
void STRIPEDGE ( int src, int dst )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void MEMEDGE ( int dst )
|
|
void MEMEDGE ( int dst )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void FCMEMA ( int src, int len )
|
|
void FCMEMA ( int src, int len )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SCMEMA ( int src, int len, int aux )
|
|
void SCMEMA ( int src, int len, int aux )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void OVFIX ( int dst, int dlen, int tmp )
|
|
void OVFIX ( int dst, int dlen, int tmp )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void TBLENTRY ( int dst, int src, int dlen, int slen )
|
|
void TBLENTRY ( int dst, int src, int dlen, int slen )
|
|
{
|
|
}
|
|
--}}}
|
|
--{{{ void SPLAT ( int dst, int len, int tmp )
|
|
void SPLAT ( int dst, int len, int tmp )
|
|
{
|
|
}
|
|
--}}}
|
|
--}}}
|
|
--{{{ INITIALIZATION INSTRUCTIONS - not impl
|
|
--}}}
|
|
|
|
|
|
|