Code Monkey home page Code Monkey logo

80x86's Introduction

I am a software engineer from the UK, working at Qualcomm (and Nuvia pre-acquisition) where amongst other things I'm responsible for pre-silicon software enablement covering application processor firmware, operating systems and virtual platforms on our custom CPU designs.

Prior to Nuvia/Qualcomm, I was the engineering team lead for Ksplice at Oracle which provides rebootless OS updates for Linux systems. I have a keen interest in CPU architecture and all things low-level. I have designed three CPU's - a RISC-V RV32IMA core, a x86 compatible and another home-grown 32-bit RISC, all with SoC reference designs.

My RV32IMA RISC-V core is implemented in SystemVerilog and offers ~2.61 CoreMark/MHz. The core implements the privileged architecture with SSTC and Sscofpmf extensions and runs mainline Linux. I implemented a number unique tracing techniques to record and replay execution to generate ELF core-files for software debug. The core is a scalar design with parallel execution units and out of order completion, register rename and dynamic branch prediction. The system runs on a Spartan 7 FPGA and has been hardened with OpenLane for the SKY130A process.

I have created an 80186 compatible IP core from scratch which currently runs at 60MHz on a Cyclone V FPGA in ~1750 ALMs, implementing the full 80186 ISA, traps, faults + interrupts along with a JTAG TAP. The core has a comprehensive test suite using Verilator + Google Test, a C++ model to verify against, and a build system using CMake+Docker. A reference design includes an SDRAM controller, MCGA graphics, PS/2 keyboard+mouse controller, fixed disk emulation on an SD card, lightweight PIC+PIT implementations and a BIOS. The system can run a wide range of DOS based applications with good performance.

See the rest of my projects on GitHub and more information on my personal website.

80x86's People

Contributors

jamieiles avatar sftwninja avatar tkchia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

80x86's Issues

running the simulator

Hi Jamie, its a little unclear how to run the simulator after ./scripts/build

I get the following error when running ./_build/build/sim/simulator

./_build/build/sim/simulator: error while loading shared libraries: libsimdisplay.so: cannot open shared object file: No such file or directory

Is this related to running cmake? Could you please provide some command line examples to get it running?

Unclear build system

I'm trying to build your project for my DE0-NANO. I've read the development guide several times, but I think I'm missing some critical piece of understanding.

./scripts/build appears to fetch & build; all CI tests pass, but I'm confused as to what build targets to invoke to create the quartus project, and how to build and execute the verilator sim environment. Hoping you could please provide some insight here.

Thanks in advance!

Monkey island MCGA not working

Hi @jamieiles wonderfull project you have here!

I have an Altera-DE0-CV board here and i've been trying to get monkey island 1 running on it.
CGA mode works okay monkey c k i, however its very limited in colour palette.
When I enable MCGA mode monkey m k i, the game appears to stall at startup.

I am using the .sof file provided on your website (checksum: 02580D43) as well as your provided freedos disk image. Do I need to recompile from the latest source?

Are there any steps I am missing to get MCGA working?

Thanks!

NEC V20 series, x87 FPUs

Is it possible to extend support for:

  • NEC V20 series
    • NEC x86 instructions
    • 286 real mode instructions
    • 8080 mode
    • PC/XT I/O and peripherals
    • additional I/O and peripherals
    • additional features
      • interrupt vector numbers compatible with Intel x86
      • 16MB addressing V33 type
      • 16MB addressing V55 type
      • separate address and data buses
        • Weitek 1067 FPU
        • 80287
      • PC/AT I/O and peripherals
    • NEC FPUs
      • x87 μPD72091 FPU
      • x87 μPD72191, D9008D FPU - FPOWER X^y = e^(y*logeX)
      • non-x87 FPU NEC 72291
  • 8087
  • 80187
  • Am9511/Intel 8231 APU (works with 8080/8086) - z88dk-ticks has an implementation here.
  • Am9512/Intel 8232 FPU (works with 8080/8086)

Development workflow questions

Hey Jamieiles!

First off, thanks for publishing this project, it's super neat. I really like how you have it set up thru Docker and CMake. It really makes it feel much more akin to normal software development.

Can I ask what your workflow for working on this is like? I feel like I'm missing a few steps and it's making it a bit difficult to do work on it. So far, I've been running CMake, then attaching to the s80x86-dev docker image to do builds and stuff, but I feel like I'm missing a lot of power of the other scripts. I have read the documentation that it builds and digested it the best I can, but I'm just not groking the intermediate steps as much as I'd hoped.

I'm also happy to flesh out the documentation with the additional info if you wouldn't mind tossing it out there :)

Thanks!

Spartan 6

Hi Jamie, this is a very interesting project you have here. I’m thinking of porting the rtl to small xilinx spartan-6 based devices (lx9 and/or lx16) . I was wondering how altera/intel specific your code is and how you assess the amount of work it would take. Are there any specific requirements on the fpga like internal sram, fifos and such?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.