8088 CPU interface hat

No description
13 Replies
gloriouscow  ✨🐄✨
This was a project to research the operation of the Intel, AMD and Harris variations of the 8088 CPU. It was used to generate an 8088 test suite that can be used to validate emulation of this CPU. The original project was implemented with an Arduino MEGA. It was quite slow due to the serial protocol used; clocking the CPU at some Khz. I would like to migrate the project to an Arduino DUE or GIGA
gloriouscow  ✨🐄✨
GitHub
GitHub - dbalsom/arduino_8088: An Arduino interface for 8088 CPUs.
An Arduino interface for 8088 CPUs. Contribute to dbalsom/arduino_8088 development by creating an account on GitHub.
Unknown User
Unknown User2y ago
Message Not Public
Sign In & Join Server To View
gloriouscow  ✨🐄✨
// Read macros
#if defined(__SAM3X8E__) // If Arduino DUE

#define READ_AEN_PIN ((PIOD->PIO_PDSR & BIT10) != 0)
#define READ_CEN_PIN ((PIOD->PIO_PDSR & BIT09) != 0)

#define READ_ALE_PIN ((PIOC->PIO_PDSR & BIT13) != 0)
#define READ_DTR_PIN ((PIOC->PIO_PDSR & BIT03) != 0)
#define READ_MCEPDEN_PIN ((PIOC->PIO_PDSR & BIT01) != 0)
#define READ_DEN_PIN ((PIOC->PIO_PDSR & BIT02) != 0)

// D51: PC12
#define READ_MRDC_PIN ((PIOC->PIO_PDSR & BIT12) != 0)
// D52: PB21
#define READ_AMWC_PIN ((PIOB->PIO_PDSR & BIT21) != 0)
// D53: PB14
#define READ_MWTC_PIN ((PIOB->PIO_PDSR & BIT14) != 0)
// D46: PC17
#define READ_IORC_PIN ((PIOC->PIO_PDSR & BIT17) != 0)
// D50: PC13
#define READ_AIOWC_PIN ((PIOC->PIO_PDSR & BIT13) != 0)
// D47: PC16
#define READ_IOWC_PIN ((PIOC->PIO_PDSR & BIT16) != 0)
// D45: PC18
#define READ_INTA_PIN ((PIOC->PIO_PDSR & BIT18) != 0)
// Read macros
#if defined(__SAM3X8E__) // If Arduino DUE

#define READ_AEN_PIN ((PIOD->PIO_PDSR & BIT10) != 0)
#define READ_CEN_PIN ((PIOD->PIO_PDSR & BIT09) != 0)

#define READ_ALE_PIN ((PIOC->PIO_PDSR & BIT13) != 0)
#define READ_DTR_PIN ((PIOC->PIO_PDSR & BIT03) != 0)
#define READ_MCEPDEN_PIN ((PIOC->PIO_PDSR & BIT01) != 0)
#define READ_DEN_PIN ((PIOC->PIO_PDSR & BIT02) != 0)

// D51: PC12
#define READ_MRDC_PIN ((PIOC->PIO_PDSR & BIT12) != 0)
// D52: PB21
#define READ_AMWC_PIN ((PIOB->PIO_PDSR & BIT21) != 0)
// D53: PB14
#define READ_MWTC_PIN ((PIOB->PIO_PDSR & BIT14) != 0)
// D46: PC17
#define READ_IORC_PIN ((PIOC->PIO_PDSR & BIT17) != 0)
// D50: PC13
#define READ_AIOWC_PIN ((PIOC->PIO_PDSR & BIT13) != 0)
// D47: PC16
#define READ_IOWC_PIN ((PIOC->PIO_PDSR & BIT16) != 0)
// D45: PC18
#define READ_INTA_PIN ((PIOC->PIO_PDSR & BIT18) != 0)
having fun mapping all the new GPIO registers on the DUE. I chose the DUE over the GIGA for a pretty simple reason, putting a scope on a GPIO pin that was just toggled on and off in the main loop showed a square wave with a period of around ~200 ns, which is about the clock rate of the 8088 anyway. This way I don't have to deal with throttling or an external crystal. Got the board working on the DUE. It runs almost 7x faster than it did on the MEGA. Started generating a test set for the V20 CPU. New pcb revision
gloriouscow  ✨🐄✨
Should support 8086 and V30 once code is modified
Unknown User
Unknown User17mo ago
Message Not Public
Sign In & Join Server To View
gloriouscow  ✨🐄✨
I hooked up an 80186 too. Because why not.
No description
gloriouscow  ✨🐄✨
This revision of 186, the 80L186EB , doesn't have queue status lines. So an additional control method had to be divised. I'm gonna keep going I think. What do you think is the limit an Arduino can control? Can we control a Pentium? lol
gloriouscow  ✨🐄✨
286!
gloriouscow  ✨🐄✨
the 286 is working
No description

Did you find this page helpful?