April 8, 2025

Using an F411 along with an 8088

A fellow I am corresponding with reports that he has had success using an F411 to emulate ROM for an 8088! This is amazing, but works because the F411 is running at 100 Mhz while the 8088 is running at 3.66 Mhz.

The F411 takes the place of an AT28C64 rom chip and the need for a special programmer.
I compile my BIOS to binary then convert it as a C header which I include into the F411 code. The F411 is connected as a real ROM, Here's the connections: - PB12: ROM CS - PB8: RD - PB9: WR - PA0-PA7: A0-A7 of 8088 - PB0: A8 of 8088 - PA8-PA15: D0-D7 of 8088

My BIOS is 512bytes so only A0-A8 are needed to address the F411. The ROM emulation is done only at startup, the BIOS copies it self to RAM so the F411 is free for VGA and SD tasks !!!

Here's the code for the F411:

void rom(){
    register unsigned short data1;  // data sent by 8088
    register unsigned short data2;  //
    register unsigned short address;

    unsigned short mask = 1 << 9 | 1 << 8;  // RD and WR mask

    for(;;){
        // wait until PB12 ROM_CS becomes LOW
        data2 =    GPIOB->idata;
        if(!(data2 & (1 << 12))){ // ROM selected
            while((GPIOB->idata & mask) == mask); // wait until PB8 (RD) or PB9 (WR) is LOW
            if(!(data2 & (1 << 8))){ //RD
                // get address
                data1 = GPIOA->idata; // A0-A7
                data2 = GPIOB->idata; // A8
                address = (data2&0x0001)<<8 | data1&0x00FF;
                GPIOA->odata  = (bios_bin[address])<<8;
                // Switch PORTA_H to output
                GPIOA->moder = 0x55550000;     // PA8-15 outputs
                while(!(GPIOB->idata & (1 << 8))); // wait until PB8 (RD =1)
                GPIOA->moder = 0;     // PA8-15 inputs
            }
            // quit ROM emulation
            // Do a dummy write to ROM to exit ROM emulation mode
            else if(!(data2 & (1 << 9))) break; // if WR exit
        }
    }
}

The project as a whole

I don't have all the details, but here is a list of the major parts:


Feedback? Questions? Drop me a line!

Tom's Computer Info / [email protected]