Before I started working on the graphics specifically, I made another project simply called interaction-6502 where I could experiment with communication between the fpga and the computer. It started out doing nothing and I would check using the logic analyzer, then eventually I added memory so that the computer could write data to the fpga.

Once that was all working as I wanted, I basically copied and pasted that project into the fpga-graphics project. Once thing that needed to change was the type of RAM I was using. I used single port before since I was writing to it manually with the software on my PC but now I am using dual port so that the 6502 can write whenever it wants and the fpga can read whenever it wants, and at different memory addresses as well.

Here is the updated program: vga-text-mode/interaction-6502

And here is the result: hello-world

The program on the 6502 is super simple, it loops through a string and writes the index of the character to $7f40 and the character itself to $7f41. The FPGA is listening from $7f40 to $7f5f and writes the data to the correct address in its internal memory.

One weird thing that happens sometimes is little blips will show up around the characters. I am not sure what causes this because the characters are sent from the computer over as ascii values, so if anything messes up there it should display a completely different character (which also happens sometimes), not a little artifact. At the same time though, it stops whenever I hold the computer in reset so it might be something in the fpga whenever it’s writing to ram.