8088 Project using an Arduino Nano
The concept is to use a Arduino Nano to up load code to the 8088. The Arduino has access through the SPI bus to read and write to the one megabyte of RAM used by the 8088.
The operation process is fairly simple. The Arduino Holds the 8088, uploads the "ROM" into the ram, Releases the Hold and Reset the processor.
The major purpose and advantages to this project is that you don't need and ROM chip, all the 8088 memory is RAM. This eliminates the need for owning a expensive EEPROM burner. The best part is you don't have to constantly move a EEPROM chip back and forth from the burner to the PCB during software development. You can change code on the fly and just upload it.
Parts list to get started
1 x Arduino Nano .... any other board "should work"
1 x 8088 PCB with SPI interface
Wiring the Arduino to my 8088PCB
SS – digital 10 connects to CS
MOSI – digital 11 connects to SI
MISO – digital 12 connects to SO
SCK – digital 13 connects to SCK
GND's are connected
5+ if you are powering the 8088 PCB with the Arduino
The boot-up sequence is
Power on, 5v to the system.
Arduino holds 8088.
Arduino copies "ROM" to the RAM.
Arduino releases Hold and Resets 8088
Include spi8088 library to your Arduino project. spi8088_arduino.zip
This works with both 8088 Boards the 1MB and the 32K
In your void setup() This is not shown in the pictures due to recent code updates
Start_SPI(FULL_1MB); //For the 1MB Boards
Start_SPI(MINI_32K); //For the 32K Boards
The library makes it easy to just wire up your 8088 and go with out a lot of programming of the Arduino.
The byte arrays hold the 8088 opcodes that you want to load in memory.
Here is an example of the process to upload code to the 8088 through the Arduino using the code for my current project.
1. I write my 8088 x86 assembly normally. I saved as code.asm, you can save it to your own file name.
2. Compile the assembly as a bin file. I use NASM to compile my code. nasm code.asm -o code.bin
3. I use Linux command line hexdump to display the bin file in the terminal as hexadecimal numbers with comas. hexdump -v -e '", 0x" 1/1 "%02X"' code.bin ; echo
I then copy the hexadecimal output.
4. Paste the hexadecimal code into a byte array it in the arduino IDE. In this case I named my array as code
5. You need the jump code for the 8088 becasue the 8088 starts at FFFF:0000 or simpler put 0xFFFF0.
My jump code is just a JMP FAR 0xF000:0x0000. hexadecimal 0xEA, 0x00, 0x00, 0x00, 0xF00
6. In the setup line for the Ardiuno you designate where you want the code written to in the 8088 ram.
The jump code needs to be written to 0xFFFF0.
7. In my Project my jump code jumps to address 0xF0000 so this is where I put my main code.
8. Dont forget to #include "spi8088.h" and #include <SPI.H>
You do need to download spi8088.zip and import it.
9. Then just up load to the Arduino.