This commit is contained in:
libretroadmin 2022-07-25 23:37:47 +02:00
parent da1d88521e
commit cb002043c6
10 changed files with 8 additions and 358 deletions

View File

@ -49,7 +49,7 @@ ifneq ($(STATIC_LINKING), 1)
$(LIBRETRO_COMM_DIR)/vfs/vfs_implementation.c $(LIBRETRO_COMM_DIR)/vfs/vfs_implementation.c
endif endif
FLAGS += -D__LIBRETRO__ -D_MAX_PATH=2048 -DHOST_FPS=60 FLAGS += -D__LIBRETRO__ -D_MAX_PATH=2048
ifeq (,$(findstring msvc,$(platform))) ifeq (,$(findstring msvc,$(platform)))
CXXFLAGS += -fpermissive CXXFLAGS += -fpermissive
endif endif

39
flash.c
View File

@ -40,9 +40,6 @@ unsigned char deviceID = 0x2F;
unsigned char cartSize = 32; unsigned char cartSize = 32;
unsigned int bootBlockStartAddr = 0x1F0000; unsigned int bootBlockStartAddr = 0x1F0000;
unsigned char bootBlockStartNum = 31; unsigned char bootBlockStartNum = 31;
#if 0
unsigned int cartAddrMask = 0x3FFFFF;
#endif
/* with selector, I get /* with selector, I get
* writeSaveGameFile: Couldn't open Battery//mnt/sd/Games/race/ChryMast.ngf file * writeSaveGameFile: Couldn't open Battery//mnt/sd/Games/race/ChryMast.ngf file
@ -85,42 +82,27 @@ void setupFlashParams(void)
deviceID = 0x2F; /* the upper chip will always be 16bit */ deviceID = 0x2F; /* the upper chip will always be 16bit */
bootBlockStartAddr = 0x1F0000; bootBlockStartAddr = 0x1F0000;
bootBlockStartNum = 31; bootBlockStartNum = 31;
#if 0
cartAddrMask=0x3FFFFF;
#endif
break; break;
case 16: case 16:
deviceID = 0x2F; deviceID = 0x2F;
bootBlockStartAddr = 0x1F0000; bootBlockStartAddr = 0x1F0000;
bootBlockStartNum = 31; bootBlockStartNum = 31;
#if 0
cartAddrMask=0x1FFFFF;
#endif
break; break;
case 8: case 8:
deviceID = 0x2C; deviceID = 0x2C;
bootBlockStartAddr = 0xF0000; bootBlockStartAddr = 0xF0000;
bootBlockStartNum = 15; bootBlockStartNum = 15;
#if 0
cartAddrMask=0x0FFFFF;
#endif
break; break;
case 4: case 4:
deviceID = 0xAB; deviceID = 0xAB;
bootBlockStartAddr = 0x70000; bootBlockStartAddr = 0x70000;
bootBlockStartNum = 7; bootBlockStartNum = 7;
#if 0
cartAddrMask=0x07FFFF;
#endif
break; break;
case 0: case 0:
manufID = 0x00; manufID = 0x00;
deviceID = 0x00; deviceID = 0x00;
bootBlockStartAddr = 0x00000; bootBlockStartAddr = 0x00000;
bootBlockStartNum = 0; bootBlockStartNum = 0;
#if 0
cartAddrMask=0;
#endif
break; break;
} }
} }
@ -332,9 +314,6 @@ void writeSaveGameFile(void)
needToWriteFile = 0; needToWriteFile = 0;
#ifdef TARGET_GP2X #ifdef TARGET_GP2X
sync(); sync();
#if 0
system("sync");
#endif
#endif #endif
} }
@ -436,10 +415,6 @@ void loadSaveGameFile(void)
void flashWriteByte(unsigned int addr, unsigned char data, unsigned char operation) void flashWriteByte(unsigned int addr, unsigned char data, unsigned char operation)
{ {
#if 0
addr &= cartAddrMask; /* the stuff gets mirrored to the higher slots. */
#endif
if(blockNumFromAddr(addr) == 0) /* hack because DWARP writes to bank 0 */ if(blockNumFromAddr(addr) == 0) /* hack because DWARP writes to bank 0 */
return; return;
@ -638,9 +613,6 @@ void vectFlashWrite(unsigned char chip, unsigned int to, unsigned char *fromAddr
if(chip) if(chip)
to+=0x200000; to+=0x200000;
#if 0
memcpy(dest,fromAddr,numBytes);
#endif
while(numBytes--) while(numBytes--)
{ {
flashWriteByte(to, *fromAddr, FLASH_WRITE); flashWriteByte(to, *fromAddr, FLASH_WRITE);
@ -651,21 +623,10 @@ void vectFlashWrite(unsigned char chip, unsigned int to, unsigned char *fromAddr
void vectFlashErase(unsigned char chip, unsigned char blockNum) void vectFlashErase(unsigned char chip, unsigned char blockNum)
{ {
#if 0
unsigned char totalBlocks = bootBlockStartNum+4;
if(blockNum >= totalBlocks)
blockNum = totalBlocks-1;
#endif
/* this needs to be modified to take into account boot block areas (less than 64k) */ /* this needs to be modified to take into account boot block areas (less than 64k) */
unsigned int blockAddr = blockNumToAddr(chip, blockNum); unsigned int blockAddr = blockNumToAddr(chip, blockNum);
unsigned int numBytes = blockSize(blockNum); unsigned int numBytes = blockSize(blockNum);
#if 0
/* memset block to 0xFF */
memset(&mainrom[blockAddr], 0xFF, numBytes);
#endif
while(numBytes--) while(numBytes--)
{ {
flashWriteByte(blockAddr, 0xFF, FLASH_ERASE); flashWriteByte(blockAddr, 0xFF, FLASH_ERASE);

View File

@ -105,12 +105,6 @@ unsigned short p2[16] = {
/* extra fudge factor for PSP? */ /* extra fudge factor for PSP? */
#define SCREEN_OFFET (SCREEN_X_OFFSET + (SCREEN_Y_OFFSET*(screen->w+PSP_FUDGE))) #define SCREEN_OFFET (SCREEN_X_OFFSET + (SCREEN_Y_OFFSET*(screen->w+PSP_FUDGE)))
/* Flavor - For speed testing, you can turn off screen updates */
#if 0
#define NO_SCREEN_OUTPUT /* seems to give about 4-6FPS on GP2X */
#endif
/* /*
* *
* Palette Initialization * Palette Initialization
@ -234,10 +228,6 @@ static void darken_rgb(float *r, float *g, float *b)
void palette_init16(DWORD dwRBitMask, DWORD dwGBitMask, DWORD dwBBitMask) void palette_init16(DWORD dwRBitMask, DWORD dwGBitMask, DWORD dwBBitMask)
{ {
#if 0
dbg_print("in palette_init16(0x%X, 0x%X, 0x%X)\n", dwRBitMask, dwGBitMask, dwBBitMask);
#endif
char RShiftCount = 0, GShiftCount = 0, BShiftCount = 0; char RShiftCount = 0, GShiftCount = 0, BShiftCount = 0;
char RBitCount = 0, GBitCount = 0, BBitCount = 0; char RBitCount = 0, GBitCount = 0, BBitCount = 0;
int r,g,b; int r,g,b;
@ -395,10 +385,6 @@ void pngpalette_init(void)
* *
*/ */
#if 0
static const bwTable[8] = { 0x0000, 0x0333, 0x0555, 0x0777, 0x0999, 0x0BBB, 0x0DDD, 0x0FFF };
#endif
/* NOTA Color para juegos b/n */ /* NOTA Color para juegos b/n */
static const unsigned short bwTable[8] = static const unsigned short bwTable[8] =
{ {
@ -426,10 +412,6 @@ typedef struct
} }
SPRITEDEFS; SPRITEDEFS;
#if 0
unsigned int spritesDirty = true;
#endif
SPRITEDEFS spriteDefs[3]; /* 4 priority levels */ SPRITEDEFS spriteDefs[3]; /* 4 priority levels */
/* definitions of types and variables that are used internally during /* definitions of types and variables that are used internally during
@ -456,12 +438,6 @@ unsigned short palettes[16*4+16*4+16*4]; /* placeholder for the converted palett
TILECACHE tCBack; /* tile pointer cache for the back buffer */ TILECACHE tCBack; /* tile pointer cache for the back buffer */
TILECACHE tCFront; /* tile pointer cache for the front buffer */ TILECACHE tCFront; /* tile pointer cache for the front buffer */
#if 0
int BGCol; /* placeholder for the background color this VSYNC */
int OOWCol; /* placeholder for the outside window color this VSYNC */
unsigned char SprPriLo, SprPriHi, SprPri = 0;
#endif
static INLINE void set_paletteCol( static INLINE void set_paletteCol(
unsigned short *palette_table, unsigned short *palette_table,
unsigned short *sprite, unsigned short *sprite,
@ -475,30 +451,15 @@ static INLINE void set_paletteCol(
*/ */
for(i=0;i<16*4;i++) for(i=0;i<16*4;i++)
{
#if 0
sprite[i] = *palette_table & 0x0FFF;
#endif
sprite[i] = NGPC_TO_SDL16(palette_table[i]); sprite[i] = NGPC_TO_SDL16(palette_table[i]);
}
/* initialize front plane palette table */ /* initialize front plane palette table */
for(i=0;i<16*4;i++) for(i=0;i<16*4;i++)
{
#if 0
front[i] = *palette_table & 0x0FFF;
#endif
front[i] = NGPC_TO_SDL16(palette_table[i+16*4]); front[i] = NGPC_TO_SDL16(palette_table[i+16*4]);
}
/* initialize sprite palette table (?) */ /* initialize sprite palette table (?) */
for(i=0;i<16*4;i++) for(i=0;i<16*4;i++)
{
#if 0
back[i] = *palette_table & 0x0FFF;
#endif
back[i] = NGPC_TO_SDL16(palette_table[i+16*4*2]); back[i] = NGPC_TO_SDL16(palette_table[i+16*4*2]);
}
} }
static INLINE void set_paletteBW( static INLINE void set_paletteBW(
@ -677,75 +638,6 @@ static INLINE void lineSprite(SPRITEDEFS *sprDefs)
} }
/* sort all the sprites according to their priorities */ /* sort all the sprites according to their priorities */
#if 0
static void spriteSort(unsigned int bw)
{
unsigned short spriteCode;
unsigned short *pt;
unsigned char x, y, prevx=0, prevy=0;
int i, j;
SPRITEDEFS *SprPri00 = &spriteDefs[0];
SPRITEDEFS *SprPri40 = &spriteDefs[1];
SPRITEDEFS *SprPri80 = &spriteDefs[2];
SPRITEDEFS *SprPriC0 = &spriteDefs[3];
/* initialize the number of sprites in each structure */
SprPri00->count = 0;
SprPri40->count = 0;
SprPri80->count = 0;
SprPriC0->count = 0;
for (i=0;i<64;i++)
{
spriteCode = *((unsigned short *)(sprite_table+4*i));
if (spriteCode & 0x0400)
prevx+= *(sprite_table+4*i+2);
else
prevx = *(sprite_table+4*i+2) + 8;
x = prevx + *scrollSpriteX;
if (spriteCode & 0x0200)
prevy+= *(sprite_table+4*i+3);
else
prevy = *(sprite_table+4*i+3) + 8;
y = prevy + *scrollSpriteY;
j = *scanlineY+8 - y;
if ((spriteCode>0xff) && (j >= 0) && (j < 8) && (x<168)) /* is this sprite visable on the current scanline? */
{
// if ((j >= 0) && (j < 8) && (x<168)) {
SPRITE *spr = NULL;
// *(sprite_palette_numbers+i)
pt = (unsigned short *)(pattern_table + 16*(spriteCode & 0x01ff)
+ ((spriteCode&0x4000) ? (7-j)*2 : j*2));
switch (spriteCode & 0x1800)
{
// case order reversed because priority 3 (and 2) sprites occur most of the time
case 0x1800:
spr = &SprPriC0->sprite[SprPriC0->count];
SprPriC0->count++;
break;
case 0x1000:
spr = &SprPri80->sprite[SprPri80->count];
SprPri80->count++;
break;
case 0x0800:
spr = &SprPri40->sprite[SprPri40->count];
SprPri40->count++;
break;
case 0x0000:
spr = &SprPri00->sprite[SprPri00->count];
SprPri00->count++;
break;
}
spr->pattern = spriteCode;
spr->offset = x;
spr->tilept = pt;
spr->palette = ((bw) ? &palettes[(spriteCode>>11)&0x04]
: &palettes[(*(sprite_palette_numbers+i)&0x0F)*4]);
}
}
}
#endif
static INLINE void spriteSortAll(unsigned int bw) static INLINE void spriteSortAll(unsigned int bw)
{ {
unsigned int spriteCode; unsigned int spriteCode;
@ -789,10 +681,6 @@ static INLINE void spriteSortAll(unsigned int bw)
if(scanline < 0 || scanline >= 152) if(scanline < 0 || scanline >= 152)
continue; continue;
#if 0
if ((x<168) && (spriteCode>0xff) && (spriteCode & 0x1800))
{
#endif
switch (spriteCode & 0x1800) switch (spriteCode & 0x1800)
{ {
/* case order reversed because priority 3 (and 2) sprites occur most of the time */ /* case order reversed because priority 3 (and 2) sprites occur most of the time */
@ -813,9 +701,6 @@ static INLINE void spriteSortAll(unsigned int bw)
+ ((spriteCode&0x4000) ? (7-j)*2 : j*2)); + ((spriteCode&0x4000) ? (7-j)*2 : j*2));
spr->palette = ((bw) ? &palettes[(spriteCode>>11)&0x04] spr->palette = ((bw) ? &palettes[(spriteCode>>11)&0x04]
: &palettes[(*(sprite_palette_numbers+i)&0x0F)*4]); : &palettes[(*(sprite_palette_numbers+i)&0x0F)*4]);
#if 0
}
#endif
} }
} }
} }
@ -838,25 +723,15 @@ static void graphicsBlitInit(void)
tCFront.tileBase = tile_table_front; tCFront.tileBase = tile_table_front;
tCFront.palette = &palettes[16*4]; tCFront.palette = &palettes[16*4];
/* definitions for sprite priorities */ /* definitions for sprite priorities */
#if 0
SprPriLo = *frame1Pri>>6;
SprPriHi = *frame0Pri>>6; /* ? */
#endif
spriteDefs[0].gbp = &drawBuffer[8*SIZEX]; spriteDefs[0].gbp = &drawBuffer[8*SIZEX];
spriteDefs[1].gbp = &drawBuffer[8*SIZEX]; spriteDefs[1].gbp = &drawBuffer[8*SIZEX];
spriteDefs[2].gbp = &drawBuffer[8*SIZEX]; spriteDefs[2].gbp = &drawBuffer[8*SIZEX];
#if 0
spriteDefs[3].gbp = &drawBuffer[8*SIZEX];
#endif
/* force recalculations for first line */ /* force recalculations for first line */
tCBack.oldScrollX = *tCBack.newScrollX; tCBack.oldScrollX = *tCBack.newScrollX;
tCBack.oldScrollY = *tCBack.newScrollY+1; /* force calculation of structure data */ tCBack.oldScrollY = *tCBack.newScrollY+1; /* force calculation of structure data */
tCFront.oldScrollX = *tCFront.newScrollX; tCFront.oldScrollX = *tCFront.newScrollX;
tCFront.oldScrollY = *tCFront.newScrollY+1; /* force calculation of structure data */ tCFront.oldScrollY = *tCFront.newScrollY+1; /* force calculation of structure data */
/* start drawing at line 0 */ /* start drawing at line 0 */
#if 0
*scanlineY = 0;
#endif
} }
static INLINE void RenderTileCache(TILECACHE *tC, unsigned int bw) static INLINE void RenderTileCache(TILECACHE *tC, unsigned int bw)
@ -1371,18 +1246,12 @@ BOOL graphics_init(void)
case NGP: case NGP:
bgTable = (unsigned short *)bwTable; bgTable = (unsigned short *)bwTable;
oowTable = (unsigned short *)bwTable; oowTable = (unsigned short *)bwTable;
#if 0
set_palette = set_paletteBW;
#endif
graphicsBlitInit(); graphicsBlitInit();
*scanlineY = 0; *scanlineY = 0;
break; break;
case NGPC: case NGPC:
bgTable = (unsigned short *)get_address(0x000083E0); bgTable = (unsigned short *)get_address(0x000083E0);
oowTable = (unsigned short *)get_address(0x000083F0); oowTable = (unsigned short *)get_address(0x000083F0);
#if 0
set_palette = set_paletteCol;
#endif
graphicsBlitInit(); graphicsBlitInit();
*scanlineY = 0; *scanlineY = 0;
break; break;

View File

@ -9,7 +9,7 @@ CORE_DIR := $(LOCAL_PATH)/..
include $(CORE_DIR)/Makefile.common include $(CORE_DIR)/Makefile.common
COREFLAGS := $(INCFLAGS) $(FLAGS) -DWANT_CRC32 COREFLAGS := $(INCFLAGS) $(FLAGS) -DWANT_CRC32
COREFLAGS += -D__LIBRETRO__ -D_MAX_PATH=2048 -DHOST_FPS=60 COREFLAGS += -D__LIBRETRO__ -D_MAX_PATH=2048
GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)" GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)"
ifneq ($(GIT_VERSION)," unknown") ifneq ($(GIT_VERSION)," unknown")

View File

@ -418,10 +418,10 @@ void retro_run(void)
update_audio_latency = false; update_audio_latency = false;
} }
tlcs_execute(CPU_FREQ / HOST_FPS, skipFrame); tlcs_execute(CPU_FREQ / 60, skipFrame);
/* Get the number of samples in a frame */ /* Get the number of samples in a frame */
samplesPerFrame = RETRO_SAMPLE_RATE / HOST_FPS; samplesPerFrame = RETRO_SAMPLE_RATE / 60;
memset(sampleBuffer, 0, samplesPerFrame * sizeof(int16_t)); memset(sampleBuffer, 0, samplesPerFrame * sizeof(int16_t));

3
main.h
View File

@ -27,9 +27,6 @@
#define NR_OF_SYSTEMS 2 #define NR_OF_SYSTEMS 2
/* to call these FPS is a bit of a misnomer */
#define HOST_FPS 60 /* the number of frames we want to draw to the host's screen every second */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif

View File

@ -32,14 +32,10 @@
/* define work memory for neogeo pocket color /* define work memory for neogeo pocket color
* *
* internal cpu ram and internal I/O register (2KB + 160 bytes) * internal cpu RAM and internal I/O register (2KB + 160 bytes)
*/ */
#if 0 /* regular work RAM (32 kbytes?)
unsigned char cpuram[0x08a0];
#endif
/* regular work ram (32 kbytes?)
* on the gameboy maximum of 128kbyte of RAM is possible, plus some internal ram (64KB) */ * on the gameboy maximum of 128kbyte of RAM is possible, plus some internal ram (64KB) */
unsigned char __attribute__ ((__aligned__(4))) mainram[(64+32+128)*1024]; unsigned char __attribute__ ((__aligned__(4))) mainram[(64+32+128)*1024];
// rom area for roms (4 Megabyte) // rom area for roms (4 Megabyte)

View File

@ -237,10 +237,6 @@ static INLINE void tlcsMemWriteB(unsigned int addr, unsigned char data)
{ {
switch(addr) switch(addr)
{ {
#if 0
case 0x80: /* CPU speed */
break;
#endif
case 0xA0: /* L CH Sound Source Control Register */ case 0xA0: /* L CH Sound Source Control Register */
if (cpuram[0xB8] == 0x55 && cpuram[0xB9] == 0xAA) if (cpuram[0xB8] == 0x55 && cpuram[0xB9] == 0xAA)
Write_SoundChipNoise(data);/*Flavor SN76496Write(0, data); */ Write_SoundChipNoise(data);/*Flavor SN76496Write(0, data); */
@ -254,17 +250,7 @@ static INLINE void tlcsMemWriteB(unsigned int addr, unsigned char data)
if (cpuram[0xB8] == 0xAA) if (cpuram[0xB8] == 0xAA)
dac_writeL(data); /*Flavor DAC_data_w(0,data); */ dac_writeL(data); /*Flavor DAC_data_w(0,data); */
break; break;
#if 0
case 0xA3: /* R CH DAC Control Register */ /* Flavor hack for mono only sound */
ngpSoundExecute();
if (cpuram[0xB8] == 0xAA)
dac_writeR(data); /* Flavor DAC_data_w(1,data); */
break;
#endif
case 0xB8: /* Z80 Reset */ case 0xB8: /* Z80 Reset */
#if 0
if (data == 0x55) DAC_data_w(0,0);
#endif
case 0xB9: /* Sourd Source Reset Control Register */ case 0xB9: /* Sourd Source Reset Control Register */
switch(data) switch(data)
{ {
@ -294,15 +280,6 @@ static INLINE void tlcsMemWriteB(unsigned int addr, unsigned char data)
if (addr == 0x87E2 && mainram[0x47F0] != 0xAA) if (addr == 0x87E2 && mainram[0x47F0] != 0xAA)
return; /* disallow writes to GEMODE */ return; /* disallow writes to GEMODE */
#if 0
if((addr >= 0x8800 && addr <= 0x88FF)
|| (addr >= 0x8C00 && addr <= 0x8FFF)
|| (addr >= 0xA000 && addr <= 0xBFFF)
|| addr == 0x00008020
|| addr == 0x00008021)
spritesDirty = true;
#endif
mainram[addr-0x00004000] = data; mainram[addr-0x00004000] = data;
return; return;
} }

View File

@ -57,12 +57,7 @@ void ngpSoundExecute(void)
#if defined(DRZ80) || defined(CZ80) #if defined(DRZ80) || defined(CZ80)
int toRun = sndCycles/2; int toRun = sndCycles/2;
if(ngpRunning) if(ngpRunning)
{
Z80_Execute(toRun); Z80_Execute(toRun);
}
#if 0
timer_add_cycles(toRun);
#endif
sndCycles -= toRun; sndCycles -= toRun;
#else #else
int elapsed; int elapsed;
@ -70,9 +65,6 @@ void ngpSoundExecute(void)
{ {
elapsed = z80Step(); elapsed = z80Step();
sndCycles-= (2*elapsed); sndCycles-= (2*elapsed);
#if 0
timer_add_cycles(elapsed);
#endif
} }
#endif #endif
} }

View File

@ -362,13 +362,6 @@ static INLINE void tlcsMemWriteWaddrB(unsigned int addr, unsigned short data)
#define mem_writeW tlcsMemWriteW #define mem_writeW tlcsMemWriteW
#if 0
static INLINE void mem_writeW(unsigned int addr, unsigned short data)
{
// if (addr > 0x200000) memoryCycles+= 2;
tlcsMemWriteW(addr, data);
}
#endif
// write a long word (data) to a memory address (addr) // write a long word (data) to a memory address (addr)
static INLINE void tlcsMemWriteL(unsigned int addr, unsigned int data) static INLINE void tlcsMemWriteL(unsigned int addr, unsigned int data)
@ -399,13 +392,6 @@ static INLINE void tlcsMemWriteL(unsigned int addr, unsigned int data)
} }
#define mem_writeL tlcsMemWriteL #define mem_writeL tlcsMemWriteL
#if 0
static INLINE void mem_writeL(unsigned int addr, unsigned int data)
{
// if (addr > 0x200000) memoryCycles+= 4;
tlcsMemWriteL(addr, data);
}
#endif
static INLINE unsigned char readbyte(void) static INLINE unsigned char readbyte(void)
@ -979,14 +965,6 @@ static INLINE unsigned char srGE(void)
|| ((gen_regsSR & (SF|VF)) == VF)) ? 0 : 1); || ((gen_regsSR & (SF|VF)) == VF)) ? 0 : 1);
} }
#if 0
unsigned char srGE(void)
{
return ((((gen_regsSR & (SF|VF)) == (VF|SF))
|| ((gen_regsSR & (SF|VF)) == 0)) ? 1 : 0);
}
#endif
static INLINE unsigned char srGT(void) static INLINE unsigned char srGT(void)
{ {
return (((((gen_regsSR & (SF|VF)) == SF) return (((((gen_regsSR & (SF|VF)) == SF)
@ -994,15 +972,6 @@ static INLINE unsigned char srGT(void)
|| (gen_regsSR & ZF)) ? 0 : 1); || (gen_regsSR & ZF)) ? 0 : 1);
} }
#if 0
unsigned char srGT(void)
{
return (((((gen_regsSR & (SF|VF)) == (VF|SF))
|| ((gen_regsSR & (SF|VF)) == 0))
&& (gen_regsSR & ZF)) ? 1 : 0);
}
#endif
static INLINE unsigned char srUGT(void) static INLINE unsigned char srUGT(void)
{ {
return ((gen_regsSR & (ZF|CF)) ? 0 : 1); return ((gen_regsSR & (ZF|CF)) ? 0 : 1);
@ -1538,52 +1507,6 @@ int ldiw(void) // LDIW (XDE+),(XHL+) 10010011 00010000
int ldir(void) // LDIR (XDE+),(XHL+) 10000011 00010001 int ldir(void) // LDIR (XDE+),(XHL+) 10000011 00010001
// LDIR (XIX+),(XIY+) 10000101 00010001 // LDIR (XIX+),(XIY+) 10000101 00010001
{ {
#if 0 //causes problems when starting new game in CFC1
unsigned char *dst,*src;
int cnt=*cregsW[1];
if(cnt==0)
cnt=0x10000;
if (opcode&2)
{
dst=get_address(*cregsL[2]);
src=get_address(*cregsL[3]);
*cregsL[2]+=cnt;
*cregsL[3]+=cnt;
//dbg_print("ldir: 1-called with cnt=0x%04X dst=0x%06X src=0x%06X\n", cnt, *cregsL[2], *cregsL[3]);
}
else
{
dst=get_address(gen_regsXIX);
src=get_address(gen_regsXIY);
gen_regsXIX+=cnt;
gen_regsXIY+=cnt;
//dbg_print("ldir: 2-called with cnt=0x%04X dst=0x%06X src=0x%06X\n", cnt, gen_regsXIX, gen_regsXIY);
}
if(dst && src)
{
//delta warp tries to read from 0x0FA000 (get_address returns NULL)
/*MOTM produces
ldir: 1-called with cnt=0x2BFF dst=0x006C00 src=0x006BFF
ldir: 1-called with cnt=0x0008 dst=0x0067DC src=0x0067E4
so, memcpy won't work
*/
do
{
*dst++=*src++;
}while(--*cregsW[1]);
}
else
{
if(dst)
memset(dst, 0xFF, cnt);
}
gen_regsSR = gen_regsSR & ~(HF|VF|NF);
return 14*cnt+10;
#else
if (opcode&2) if (opcode&2)
{ {
// XDE/XHL // XDE/XHL
@ -1607,56 +1530,11 @@ int ldir(void) // LDIR (XDE+),(XHL+) 10000011 00010001
{ {
return 10; return 10;
} }
#endif
} }
int ldirw(void) // LDIRW (XDE+),(XHL+) 10010011 00010001 int ldirw(void) // LDIRW (XDE+),(XHL+) 10010011 00010001
// LDIRW (XIX+),(XIY+) 10010101 00010001 // LDIRW (XIX+),(XIY+) 10010101 00010001
{ {
#if 0 //causes problems when starting new game in CFC1
unsigned char *dst,*src;
int cnt=*cregsW[1];
if(cnt==0)
cnt=0x10000;
if (opcode&2)
{
dst=(unsigned char *)get_address(*cregsL[2]);
src=(unsigned char *)get_address(*cregsL[3]);
*cregsL[2]+= 2*cnt;
*cregsL[3]+= 2*cnt;
//dbg_print("ldirw: 1-called with cnt=0x%04X dst=0x%06X src=0x%06X\n", cnt, *cregsL[2], *cregsL[3]);
}
else
{
/*if(gen_regsXIY == 0xFA000) //Delta Warp stupidly does this
src=get_address(gen_regsXIY+0x200000);*/
src=(unsigned char *)get_address(gen_regsXIY);
dst=(unsigned char *)get_address(gen_regsXIX);
gen_regsXIX+=2*cnt;
gen_regsXIY+=2*cnt;
//dbg_print("ldirw: 2-called with cnt=0x%04X dst=0x%06X src=0x%06X\n", cnt, gen_regsXIX, gen_regsXIY);
}
if(dst && src)
{
//memmove(dst, src, cnt*2); //delta warp tries to read from 0x0FA000 (get_address returns NULL)
do
{
*dst++=*src++;
*dst++=*src++;
}while(--*cregsW[1]);
}
else
{
if(dst)
memset(dst, 0xFF, cnt*2);
}
gen_regsSR = gen_regsSR & ~(HF|VF|NF);
return 14*cnt+10;
#else
if (opcode&2) if (opcode&2)
{ // XDE/XHL { // XDE/XHL
mem_writeW(*cregsL[2],mem_readW(*cregsL[3])); mem_writeW(*cregsL[2],mem_readW(*cregsL[3]));
@ -1687,7 +1565,6 @@ int ldirw(void) // LDIRW (XDE+),(XHL+) 10010011 00010001
return 10; return 10;
// return 10+4; // return 10+4;
} }
#endif
} }
int ldd(void) // LDD (XDE-),(XHL-) 10000011 00010010 int ldd(void) // LDD (XDE-),(XHL-) 10000011 00010010
@ -8384,9 +8261,6 @@ static int tlcs_step(void)
opcode = readbyte(); opcode = readbyte();
//printf("tlcs_step: PC=0x%X opcode=0x%X\n", gen_regsPC-1, opcode);
clocks+= instr_table[opcode](); clocks+= instr_table[opcode]();
clocks+= memoryCycles; clocks+= memoryCycles;
@ -8398,7 +8272,6 @@ static int tlcs_step(void)
} }
//extern unsigned char *ngpScX;
extern unsigned char *ngpScY; extern unsigned char *ngpScY;
int ngOverflow = 0; int ngOverflow = 0;
@ -8418,12 +8291,8 @@ void tlcs_execute(int cycles)
while(cycles > 0) while(cycles > 0)
{ {
/* AKTODO */ /* AKTODO */
#if 0
if(options[TURBO_OPTION])
#else
/* TODO/FIXME - perhaps this is too fast as a default? */ /* TODO/FIXME - perhaps this is too fast as a default? */
if (1) if (1)
#endif
{ {
//call a bunch of steps //call a bunch of steps
for (elapsed = tlcs_step();elapsed<(515>>(tlcsClockMulti-1)); elapsed += tlcs_step()); for (elapsed = tlcs_step();elapsed<(515>>(tlcsClockMulti-1)); elapsed += tlcs_step());
@ -8438,9 +8307,6 @@ void tlcs_execute(int cycles)
soundStep(elapsed); soundStep(elapsed);
hCounter-= elapsed; hCounter-= elapsed;
#if 0
*ngpScX = hCounter>>2;
#endif
if (hCounter < 0) if (hCounter < 0)
{ {
@ -8471,11 +8337,7 @@ void tlcs_execute(int cycles)
tlcs_interrupt(2); tlcs_interrupt(2);
#ifdef FRAMESKIP #ifdef FRAMESKIP
if(frame == 0) if(frame == 0)
{
frame = skipFrames; frame = skipFrames;
//SDL_Rect numRect = drawNumber(skipFrames, 10, 24);
//SDL_UpdateRect(screen, numRect.x, numRect.y, numRect.w, numRect.h);
}
else else
frame--; frame--;
#endif #endif
@ -8486,11 +8348,7 @@ void tlcs_execute(int cycles)
} }
ngOverflow = hCounter + cycles; ngOverflow = hCounter + cycles;
//graphics_paint(); //paint the screen, if it's dirty
//MHE used to sound update here!?!? //MHE used to sound update here!?!?
return;
} }
@ -8504,9 +8362,9 @@ void ngpc_run(void)
while(m_bIsActive) //should be some way to exit while(m_bIsActive) //should be some way to exit
{ {
#ifdef FRAMESKIP #ifdef FRAMESKIP
tlcs_execute((6*1024*1024) / HOST_FPS, skipFrames); tlcs_execute((6*1024*1024) / 60, skipFrames);
#else #else
tlcs_execute((6*1024*1024) / HOST_FPS); tlcs_execute((6*1024*1024) / 60);
#endif #endif
} }