No error in code, sketch uploads fine but EEPROM not working

#include <hd44780.h>                             // thanks for making libraries so I don't have to deal with LCD manually!!!
#include <hd44780ioClass/hd44780_pinIO.h>        // Arduino pin i/o class header
#include <EEPROM.h>                              // using internal EEPROM

int addr = 0;                                    // EEPROM address location, fixed location since nothing else is using EEPROM
int LCDLED = 13;                                 // backlight LED pin
int buttonup = 2;	                               // pin to connect the UP button
int buttondn = 3;   		                         // pin to connect the DOWN button
int presses = EEPROM.read(addr);		             // variable to read number of presses (last selected console) based on last stored value
                     // purely optional but if I power off, I don't want to cycle through 11 consoles to play the last one
long dtime = 0;		    	                         // used for 'since last press'
long debounce = 200;	                           // how many ms to "debounce", about 1/5th of a second
long idletime = 25000;                           // about 25 seconds for display idle before turning off LED
const byte numPins = 5;                          // just 5 pins (4 pins to 75154, 5th to enable pin for second '154
                     // theoretically 6th pin and 2 more 74154 with second EN pin and a few inverters would allow up to 64 video ports but it's more than I need!
int state;
byte pins[] = {19, 0, 1, 14, 15};                // 4 bits plus EN pin for 32 ports total. Add more if needed as 74152 has 2 enable pins.
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
hd44780_pinIO lcd(rs, en, d4, d5, d6, d7);       // setting up LCD
const int LCD_COLS = 8;
const int LCD_ROWS = 1;

/* re: mezzanine
    Current one board design allows up to 16 devices to be switched, the 5th bit is not used, manually disabled by code.  If
    the mezzanine is added, 5th bit will "turn off" the main 74154 via enable pin and the mezzanine board with second 74154 for
    16 more ports.  5th bit will deal with enable with inverter on second '154 so the mezzanine will not mess with the lower
    16 ports.  Theoretically 6th bit can be used for 2 more 74154 but that's way too many video ports!
    Will need to expand the list of games. Current list is for 32 system, add or delete for more/fewer ports
*/
char* gameSys[] = {"   Atari 5200   ",
                   "   Atari 7800   ",          // plays nearly all of 2600 games so no reason for separate 2600
                   " Intellivision  ",
                   "  Colecovision  ",
                   "    Nintendo    ",
                   " Super Nintendo ",
                   "   Nintendo 64  ",
                   "    Gamecube    ",
                   "       Wii      ",
                   "      Wii U     ",
                   " Genesis CD 32X ",          // 3-in-1 system, need all 3 together for most games
                   "  Sega Saturn   ",
                   "   Dreamcast    ",
                   "   Turbo Duo    ",
                   "  Playstation   ",
                   " Platstation 2  ",
                   "   Sony PSP     ",           // portable system via AV cable
                   "      XBox      ",
                   "    XBox 360    ",
                   "  Atari Jaguar  ",
                   "     SPARE 1    ",
                   "     SPARE 2    ",
                   "     SPARE 3    ",
                   "     SPARE 4    ",
                   "     SPARE 5    ",
                   "     SPARE 6    ",
                   "     SPARE 7    ",
                   "     SPARE 8    ",
                   "     SPARE 9    ",
                   " by Eric Chapin ",
                   "VGA to Composite",           // for modded Game Gear and Lynx and other VGA use
                   "    Front Port  ",
                  };

void(* resetFunc) (void) = 0;                    // reset time! This is run if this has been running for 49+ days nonstop

void setup()
{
  for (int i = 0; i < numPins; i++) {            // setting the 5 pins to both 74154
    pinMode(pins[i], OUTPUT);
    digitalWrite (pins[i], LOW);
  }
  pinMode(buttonup, INPUT);                      //setting both buttons
  pinMode(buttondn, INPUT);
  digitalWrite(buttonup, HIGH);                  // internal pullup
  digitalWrite(buttondn, HIGH);
  attachInterrupt(0, countdn, LOW);              // attaching interrupt to 2 separate loops
  attachInterrupt(1, countup, LOW);
  pinMode(LCDLED, OUTPUT);                       // for LED on LCD panel
  digitalWrite(LCDLED, HIGH);                    // turn on LED backlight via transistor
  int status;
  status = lcd.begin(LCD_COLS, LCD_ROWS);
  if (status)                                    // non zero status means it was unsuccesful
  {
    status = -status;                            // convert negative status value to positive number
    hd44780::fatalError(status);                 // does not return
  }
  lcd.lineWrap();                                // some cheap 1x16 character LCD behaves like 2x8 and needs wrap handle to
                                                 // manually wrap text around so it'll look like normal 1x16 display
  lcd.setCursor(0, 0);                           // reset LCD cursor
  lcd.print(gameSys[presses]);                   // prints starting display
}

void loop()
{
  String binNumber = String(presses, BIN);
  digitalWrite(pins[0], (presses &        B1));  // set the 5 pins output according to current button setting
  digitalWrite(pins[1], (presses &       B10));  // using bitmask to select the correct bit to write to pin
  digitalWrite(pins[2], (presses &      B100));
  digitalWrite(pins[3], (presses &     B1000));
  digitalWrite(pins[4], (presses &    B10000));  // add another line, change numPin to 6 and update byte pin{x} with added pin

  if (millis() - dtime > idletime) {             // how long has it been idling?
    digitalWrite(LCDLED, LOW);                   // turn off backlight (on LCD only), switch hasn't been used for a while
    lcd.clear();                                 // clear display
  }
  if (millis() < dtime); {                       // if this has been running for more than 49.7 days, millis() will roll over 
    resetFunc();                                 // and last pressed time would be greater than millis() so calling for reset
  }
}

void countup() {  // up button
  if (millis() - dtime > debounce)	presses++;   // increment presses
  if (presses > 31) presses = 0;                 // rollover?? Go back to 0. Change 31 if going more than 32 ports
  digitalWrite(LCDLED, HIGH);                    // turn on LCD backlight, a button was pressed
  lcd.setCursor(0, 0);                           // reset LCD cursor
  lcd.print(gameSys[presses]);                   // prints current display according to variable in gamesys[]
  dtime = millis();                              // reset last pressed
  EEPROM.write(addr, presses);                   // store new variable in EEPROM
}

void countdn() {  // down button
  if (millis() - dtime > debounce)	presses--;   // decrement presses
  if (presses < 0) presses = 31;                 // loop around if you go lower than 0, change 31 if going beyond 32 ports
  digitalWrite(LCDLED, HIGH);                    // turn on LCD backlight, a button was pressed
  lcd.setCursor(0, 0);                           // reset LCD cursor
  lcd.print(gameSys[presses]);                   // prints current display according to variable in gamesys[]
  dtime = millis();                              // reset last pressed
  EEPROM.write(addr, presses);                   // store new variable in EEPROM
}

The code is supposed to store one byte at address 0 based on the value of “presses” but after I changed the presses (by using push button), then I power it off, it resets to 0 and displays the first console on the list, not the last one I set. Did I miss something that may be resetting EEPROM to 0 or not properly writing? I’d try a different chip but it’s 6 AM already, and I am really tired not up to desoldering the chip off UNO board to rule out faulty EEPROM in the current chip.

int presses = EEPROM.read(addr);

EEPROM.read() and EEPROM.write() read/write a byte

Can you see a problem ?

don't read EEPROM before setup()