EEPROM anders aansluiten IVM routing

Hallo,

Ik heb een EEPROM een beetje onconventioneel aangesloten IVM de routing. Nu heb ik ook een klein programmatje verzonnen dat ervoor zorgt dat alle data weer juist verschijnt. Het enige probleem is dat het niet wilt werken. Nu weet ik niet of ik iets over het hoofd heb gezien dus dacht ik laat ik het maar eens op CO vragen. :)

Op de PCB zitten soldeer jumpers die dienen om te kiezen tussen een 28c256 en een 27c256. Voor de test gebruik ik een 28c256 omdat deze makkelijk te herprogrammeren is. In deze situatie zijn J5 en J2 verbonden.

Het schema,
https://dl.dropboxusercontent.com/u/2442535/GBC.png

De code,

c code:


void ScrambleFile(string file)
{
	


	FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
	byte[] dump = new byte[0x8000];
	while (fs.Position < fs.Length)
	{
		int data = fs.ReadByte();
		int address = ShuffleAddress(fs.Position - 1);
		byte scrambledData = ShuffleByte(data);
		dump[address] = scrambledData;

	}
	fs.Close();


	

	fs = new FileStream(file.Replace(file.Split('.').Last(),"bin"), FileMode.Create, FileAccess.Write);
	fs.Write(dump,0,dump.Length);
	fs.Close();
}


byte ShuffleByte(int data)
{
	byte b = 0;

	if (((1 << 0) & data) > 0)
		b += (1 << 7);

	if (((1 << 1) & data) > 0)
		b += (1 << 0);

	if (((1 << 2) & data) > 0)
		b += (1 << 6);

	if (((1 << 3) & data) > 0)
		b += (1 << 1);

	if (((1 << 4) & data) > 0)
		b += (1 << 5);

	if (((1 << 5) & data) > 0)
		b += (1 << 2);

	if (((1 << 6) & data) > 0)
		b += (1 << 4);

	if (((1 << 7) & data) > 0)
		b += (1 << 3);

	return b;
}

int ShuffleAddress(long address)
{
	int addr = 0;

	if (((1 << 0) & address) > 0)
		addr += (1 << 14);

	if (((1 << 1) & address) > 0)
		addr += (1 << 12);

	if (((1 << 2) & address) > 0)
		addr += (1 << 7);

	if (((1 << 3) & address) > 0)
		addr += (1 << 13);

	if (((1 << 4) & address) > 0)
		addr += (1 << 6);

	if (((1 << 5) & address) > 0)
		addr += (1 << 8);

	if (((1 << 6) & address) > 0)
		addr += (1 << 5);

	if (((1 << 7) & address) > 0)
		addr += (1 << 9);

	if (((1 << 8) & address) > 0)
		addr += (1 << 4);

	if (((1 << 9) & address) > 0)
		addr += (1 << 11);

	if (((1 << 10) & address) > 0)
		addr += (1 << 3);

	if (((1 << 11) & address) > 0)
		addr += (1 << 2);

	if (((1 << 12) & address) > 0)
		addr += (1 << 10);

	if (((1 << 13) & address) > 0)
		addr += (1 << 1);

	if (((1 << 14) & address) > 0)
		addr += (1 << 0);

	return addr;
}

Je zegt niet waarvoor de eprom gebruikt wordt. Als dat als normaal CPU geheugen is, dan is een software tweak veel en veel te langzaam...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

De processorleek in mij zegt nu: is het dan niet gemakkelijker, de eprom gewoon 'gescrambled' te programmeren? Dat hoeft maar één keer, en kan dus best wat langzamer.
Dan kan het uitlezen 'normaal' gebeuren (althans, de processor denkt dat het normaal is; de data is gescrambled, maar de alternatieve aansluiting van de datalijntjes unscrambled dat dus weer).

Keramisch, kalibratie, parasitair: woordenlijst.org

Aah, misschien heeft mijn verhaal wat verduidelijking nodig.

Voordat ik de EEPROM programmeer doe ik het programma scrambelen met behulp van bovenstaande code. Dan gaat de gescambelde code in de eeprom. Dus wat FET voorstelt is wat er nu gebeurt.

Het schakelingetje is bedoeld om als cartridge te dienen voor een gameboy zodat ik mn eigen programma's ermee kan testen. Nu gebruik ik tijdelijk even een rom van het internet om zeker te zijn dat het daar niet aan licht.

Nu heb ik ergens iemand gezien en die deed de CS lijn aan A15, nu heb ik dat eventjes geprobeerd, en nu laat hij igg het gameboy logo zien in plaats van een zwarte balk. Er wordt dus wel iets goed gelezen. Helaas gebeurt er daarna verder niets.

Edit,
Ik heb het probleem gevonden.
Blijkbaar wordt bij systemen van 32K rom de A15 als CS lijn gebruikt. Ook heb ik de WR pin van de eeprom met een 1K aan 5V gehangen en los van de header.

[Bericht gewijzigd door hardbass op 19 februari 2017 00:24:36 (12%)]