I2c EEPROM error with TVOUT for homemade game console

Hey, got a problem that's been stumping me for a while. I'm making a homemade game console that uses 24LC256 I2c EEPROM for a memory card to save names and game data/high scores. The chip is seated in the controller, and shares its I2c pins with two buttons that are used to control games when the eeprom is not in use. I can read and write to the chip fine when nothing is being displayed on the TV. I can read data from the chip fine while displaying on the TV. I have no problem reading from the chip, then going right back to controlling games, it all works fine. The problem that I can't write to the chip while also displaying to the TV. The program I have will read the number on the chip, and display it, but when it attempts to write information to the chip, the TV jut cuts to black. Often, the value originally saved to the chip is gone when i turn the console back on. Please help! code and circuit board shown below:

#include <Wire.h>

#define disk1 0x50

#include <TVout.h>
#include <fontALL.h>
TVout TV;

int num=0;
int numo=0;

void setup() {
// set the digital pin as output:

TV.begin(NTSC,128,96);
TV.select_font(font4x6);

Wire.begin();

unsigned int address = 0;

TV.println(readEEPROM(disk1, address), DEC);
numo=readEEPROM(disk1, address), DEC;
TV.delay(5000);

pinMode(19 ,INPUT);digitalWrite(19 ,HIGH);
pinMode(2 ,INPUT);digitalWrite(2 ,HIGH);
pinMode(3 ,INPUT);digitalWrite(3 ,HIGH);
pinMode(4 ,INPUT);digitalWrite(4 ,HIGH);
pinMode(18 ,INPUT);digitalWrite(18 ,HIGH);
pinMode(17 ,INPUT);digitalWrite(17 ,HIGH);

}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data )
{
pinMode(3 ,OUTPUT); digitalWrite(3 ,LOW);
pinMode(17 ,OUTPUT); digitalWrite(17 ,LOW);
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(data);
Wire.endTransmission();

delay(5);
digitalWrite(3 ,HIGH);
digitalWrite(17 ,HIGH);

}

byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
byte rdata = 0xFF;

Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();

Wire.requestFrom(deviceaddress,1);

if (Wire.available()) rdata = Wire.read();

return rdata;

}

void loop() {
if(digitalRead(17)==LOW ){num=num+1;}
if(digitalRead(19)==LOW ){ TV.println(25,20,"saving"); TV.delay(300); writeEEPROM(disk1, 0, num);}
if(digitalRead(3)==LOW ){num=num-1;}
TV.println(25,70,num);
TV.delay(60);
TV.clear_screen();

}