mov eax , cr0
or eax , 0x01
mov cr0 , eax



back to months list

Project : The Physical 8-bit Computer [In Hiatus]

Journal Entry Date : 2025.05.03

Today I (sort off) build the EEPROM programmer.

Programming AT28C256 is fairly simple. Write the address, data, and just send a pulse to the chip's WE(Write Enable) pin.

Normally, I heard that EEPROMs like AT28C16 have quite a strict pulse duration for manipulating the WE pin, but for AT28C256 that's not the case thankfully, because as you can see below on the datasheet, only the minimum duration of the pulse is the requirement, not the maximum.

Thank god.. It would've been a nightmare to painstakingly follow the 100ns pulse duration from the specification had this been the AT28C16 chip..

This means that we can just send a pulse with any duration longer than 100ns and be totally okay with it. (Testing out in the breadboard, it was really ok. I just hooked the WE pin to the pull-up resistored button, and it worked like a charm.)

I used double 74HC595 circuit for the AT28C256's 15-bit address line and connected the 8 I/O pins directly to the arduino(since they will both serve input/output, if we use 74HC595 for the IO pins, we are unable to read the IO pins when fetching the data from AT28C256.) It's fairly simple, and you can also do it if you refer to the AT28C256 datasheet and this amazing article from arduino documentation.

The rectangled resistor is the pull-up(the EEPROM's WE is inverted) resistor connected to WE pin. It's just for safety precussion(we don't want some arbitrary data getting written to the memory.)

Please don't forget to set CE(Chip Enable) pin to LOW, because I did and spent quite a long time trying to figure out what went wrong..