コード例 #1
0
ファイル: cartridge.c プロジェクト: kerheol/dingux-atari
/* OSS_16, OSS2_16 */
static void set_bank_A0AF(int b, int main)
{
	if (b != bank) {
		if (b < 0)
			CartA0BF_Disable();
		else {
			CartA0BF_Enable();
			CopyROM(0xa000, 0xafff, cart_image + b * 0x1000);
			if (bank < 0)
				CopyROM(0xb000, 0xbfff, cart_image + main);
		}
		bank = b;
	}
}
コード例 #2
0
ファイル: cartridge.c プロジェクト: kerheol/dingux-atari
/* special support of Bounty Bob on Atari5200 */
void CART_BountyBob1(UWORD addr)
{
	if (machine_type == MACHINE_5200) {
		if (addr >= 0x4ff6 && addr <= 0x4ff9) {
			addr -= 0x4ff6;
			CopyROM(0x4000, 0x4fff, cart_image + addr * 0x1000);
		}
	} else {
		if (addr >= 0x8ff6 && addr <= 0x8ff9) {
			addr -= 0x8ff6;
			CopyROM(0x8000, 0x8fff, cart_image + addr * 0x1000);
		}
	}
}
コード例 #3
0
ファイル: cartridge.c プロジェクト: kerheol/dingux-atari
/* SWXEGS_32, SWXEGS_64, SWXEGS_128, SWXEGS_256, SWXEGS_512, SWXEGS_1024 */
static void set_bank_809F(int b, int main)
{
	if (b != bank) {
		if (b & 0x80) {
			Cart809F_Disable();
			CartA0BF_Disable();
		}
		else {
			Cart809F_Enable();
			CartA0BF_Enable();
			CopyROM(0x8000, 0x9fff, cart_image + b * 0x2000);
			if (bank & 0x80)
				CopyROM(0xa000, 0xbfff, cart_image + main);
		}
		bank = b;
	}
}
コード例 #4
0
ファイル: cartridge.c プロジェクト: kerheol/dingux-atari
static void set_bank_A0BF_ATMAX1024(int b)
{
	if (b != bank) {
		if (b >= 0x80)
			CartA0BF_Disable();
		else {
			CartA0BF_Enable();
			CopyROM(0xa000, 0xbfff, cart_image + b * 0x2000);
		}
		bank = b;
	}
}
コード例 #5
0
ファイル: cartridge.c プロジェクト: kerheol/dingux-atari
static void set_bank_A0BF_WILL32(int b)
{
	if (b != bank) {
		if (b & 0x0008)
			CartA0BF_Disable();
		else {
			CartA0BF_Enable();
			CopyROM(0xa000, 0xbfff, cart_image + (b & 3) * 0x2000);
		}
		bank = b;
	}
}
コード例 #6
0
ファイル: cartridge.c プロジェクト: kerheol/dingux-atari
static void set_bank_80BF(int b)
{
	if (b != bank) {
		if (b & 0x80) {
			Cart809F_Disable();
			CartA0BF_Disable();
		}
		else {
			Cart809F_Enable();
			CartA0BF_Enable();
			CopyROM(0x8000, 0xbfff, cart_image + b * 0x4000);
		}
		bank = b;
	}
}
コード例 #7
0
ファイル: inidriv.c プロジェクト: neiderm/turaco
/* the back ups of the originals. */
BOOL MakeBackups(void)
{
	char BackupPath[100];
   char FromPath[100];
	FILE * fp;
	int i;

	MakeBackupPath(BackupDir, BackupPath, GfxRoms[0].ROMName, 1);

	/* are the roms already backed up? (can we open one for read) */
	if ((fp = fopen(BackupPath, "rb")) != NULL)
	{
		fclose(fp);
		return TRUE;
	}

	/* at this point we need to make backups */

	/* first create directory */
	MakeBackupPath(BackupDir, BackupPath, GfxRoms[0].ROMName, 0);
	mkdir(BackupPath, S_IRUSR | S_IWUSR);

	/* back up the roms */
	for (i = 0; i < NumGfxRoms; i ++)
	{
      strcpy(FromPath, ROMPathFound);
      put_backslash(FromPath);
      strcat(FromPath, ROMDirName);
      put_backslash(FromPath);
      strcat(FromPath, GfxRoms[i].ROMName);

		MakeBackupPath(BackupDir, BackupPath, GfxRoms[i].ROMName, 1);
		if (CopyROM(FromPath, BackupPath, GfxRoms[i].Size, 0) == FALSE)
			return FALSE;
	}

	return TRUE;
}
コード例 #8
0
ファイル: cartridge.c プロジェクト: kerheol/dingux-atari
/* a write to D500-D5FF area */
void CART_PutByte(UWORD addr, UBYTE byte)
{
	if (rtime_enabled && (addr == 0xd5b8 || addr == 0xd5b9)) {
		RTIME_PutByte(byte);
		return;
	}
	switch (cart_type) {
	case CART_XEGS_32:
		set_bank_809F(byte & 0x03, 0x6000);
		break;
	case CART_XEGS_64:
		set_bank_809F(byte & 0x07, 0xe000);
		break;
	case CART_XEGS_128:
		set_bank_809F(byte & 0x0f, 0x1e000);
		break;
	case CART_XEGS_256:
		set_bank_809F(byte & 0x1f, 0x3e000);
		break;
	case CART_XEGS_512:
		set_bank_809F(byte & 0x3f, 0x7e000);
		break;
	case CART_XEGS_1024:
		set_bank_809F(byte & 0x7f, 0xfe000);
		break;
	case CART_ATRAX_128:
		if (byte & 0x80) {
			if (bank >= 0) {
				CartA0BF_Disable();
				bank = -1;
			}
		}
		else {
			int b = byte & 0xf;
			if (b != bank) {
				CartA0BF_Enable();
				CopyROM(0xa000, 0xbfff, cart_image + b * 0x2000);
				bank = b;
			}
		}
		break;
	case CART_MEGA_16:
		set_bank_80BF(byte & 0x80);
		break;
	case CART_MEGA_32:
		set_bank_80BF(byte & 0x81);
		break;
	case CART_MEGA_64:
		set_bank_80BF(byte & 0x83);
		break;
	case CART_MEGA_128:
		set_bank_80BF(byte & 0x87);
		break;
	case CART_MEGA_256:
		set_bank_80BF(byte & 0x8f);
		break;
	case CART_MEGA_512:
		set_bank_80BF(byte & 0x9f);
		break;
	case CART_MEGA_1024:
		set_bank_80BF(byte & 0xbf);
		break;
	case CART_SWXEGS_32:
		set_bank_809F(byte & 0x83, 0x6000);
		break;
	case CART_SWXEGS_64:
		set_bank_809F(byte & 0x87, 0xe000);
		break;
	case CART_SWXEGS_128:
		set_bank_809F(byte & 0x8f, 0x1e000);
		break;
	case CART_SWXEGS_256:
		set_bank_809F(byte & 0x9f, 0x3e000);
		break;
	case CART_SWXEGS_512:
		set_bank_809F(byte & 0xbf, 0x7e000);
		break;
	case CART_SWXEGS_1024:
		set_bank_809F(byte, 0xfe000);
		break;
	default:
		CART_Access(addr);
		break;
	}
}
コード例 #9
0
ファイル: inidriv.c プロジェクト: neiderm/turaco
void MergeFiles(char * ROMName, long size)
{
   char BackupPath[100] = {0};
   char PatchPath[100] = {0};
   FILE * fpNewRom = NULL;
   FILE * fpBackupRom = NULL;
   FILE * fpPatchRom = NULL;
   char Header[] = "PATCH";
   long Offset = 0;
   long NumBytes = 0;
   long i;
   long BackupPos = 0;
   BYTE ch;

   /* check for rom name in backup directory */
   MakeBackupPath(BackupDir, BackupPath,ROMName, 1);

   /* if not there then put it there */
   if ((fpBackupRom = fopen(BackupPath, "rb")) == NULL)
   {
      CopyROM(ROMName, BackupPath, size, 1);
      if ((fpBackupRom = fopen(BackupPath, "rb")) == NULL)
      {
         /* something has gone wrong with the backup abort this */
         /* rom merge. */
         return;
      }
   }

   /* at this point we should have a valid fpBackupRom */

   MakeBackupPath(PatchDir, PatchPath,ROMName, 1);
   if ((fpPatchRom = fopen(PatchPath, "rb")) == NULL)
   {
      /* Oh no! there is no patch file for this rom, just copy */
      /* backup file over original */

      fclose(fpBackupRom);
      CopyROM(BackupPath, ROMName, size, 1);
      return;
   }

   /* open the new rom file */
   if ((fpNewRom = fopen(ROMName, "wb")) == NULL)
   {
      /* abort */
      fclose(fpBackupRom);
      fclose(fpPatchRom);
      return;
   }

   /* check header */
   for (i = 0; i < 5; i ++)
   {
      BYTE ch = fgetc(fpPatchRom);
      if (ch != Header[i])
      {
         printf("Invalid Patch file \"%s\"", PatchPath);
         return;
      }
   } 

   /* right thats all of the tinkering about done now for the merge */
   for(;;)
   {
      Offset = 0;

      /* get the next 3 bytes for the offset */
      for (i = 0; i < 3; i ++)
      {
         ch = fgetc(fpPatchRom);
         Offset *= 256;
         Offset += ch;
      }

      /* end of file? */
      if (Offset == ('E' * 65536) + ('O' * 256) + 'F')
         break;

      /* now copy all of the bytes from the Backup to the new roms */
      /* up until the offset */

      fseek(fpBackupRom, BackupPos, SEEK_SET);
      for (i = BackupPos; i < Offset; i ++)
      {
         ch = fgetc(fpBackupRom);
         fputc(ch, fpNewRom);
      }

      /* how many bytes to merge? */
      ch = fgetc(fpPatchRom);
      NumBytes = (256 * ch) + fgetc(fpPatchRom);

      for (i = 0; i < NumBytes; i ++)
      {
         ch = fgetc(fpPatchRom);
         fputc(ch, fpNewRom);
      }

      BackupPos = Offset + NumBytes;
   }

   /* now copy any remaining bytes from the backup file */
   fseek(fpBackupRom, BackupPos, SEEK_SET);
   for (i = BackupPos; i < size; i ++)
   {
      ch = fgetc(fpBackupRom);
      fputc(ch, fpNewRom);
   }

   fclose(fpNewRom);
   fclose(fpBackupRom);
   fclose(fpPatchRom);
}