Lion FPGA CPU/Computer

A 16-bit FPGA CPU I call Lion CPU and a computer, the Lion computer. Everything built from scratch.

Similar projects worth following
I started to explore FPGAs and made a 16bit CPU, then I set a goal to make a computer like the early 80's home computers I used as a kid and I did.

I built a video controller, a UART, wrote an assembler and ported PA Tiny Basic adding fixed point and more. It started to feel like a home computer. I added SPI to use a SD Card and wrote simple FAT system support. For sound I made 3 audio channels and a noise channel.
Then I added hardware sprites.
I made a generator for Lion CPU code for the Java Grinder open source project and so I have a simple Java Compiler for Lion. Then I wrote "Astro", a simple demo game in Java. Of course I have added joystick port.
Αdded Vector graphics!
Manos wrote a nice windows emulator of 16bit Lion in C#.
A new 32-bit Lion is now completed with 256 colors, PCM audio, more sprites and all existing software is upgraded to 32bits.
Leon (Theodoulos Liontakis)

16bit Lion Specifications

CPU : Lion 16bit  @50Mhz

Memory:  8K rom + 56K ram + 32K video ram + 12K sprites ram + 64K paged ram + 4K vector ram

                support for up to 512K total ram in 64K pages

Video Mode 0 (text optimized):  640x240 pixels, 30x80 chars, 16 colors (2 per char)

Video Mode 1 (graphics optimized):  320x200 pixels, 25x53 chars, 16 colors

Sprites: 45 hardware sprites, 15 colors + transparency, 16x16 pixels, double buffered.

Sound: 3 channels + 1 noise channel, 8 bit digital volume control

Vector Graphics: hardware line drawing in 10bit resolution, 12bit DAC, 4K vector ram.


32bit Lion Specifications

CPU : Lion 32bit  @50Mhz

Memory:  16K rom + 512Kram + 64K video ram + 16K sprites ram + 8K vector ram

                support for MB's of ram 

Video Mode 0 (text optimized):  640x240 pixels, 30x80 chars, 16 colors (2 per char)

Video Mode 1 (graphics optimized):  320x200 pixels, 25x53 chars, 256 colors

Sprites: 56 hardware sprites, 15 of 64 colors + transparency,  16x16 pixels, double buffered.

Sound: 3 channels + 1 noise channel, 8 bit digital volume control

             2 channels of 8bit  PCM audio with 8K buffer

Vector Graphics: hardware line drawing in 10bit resolution, 12bit DAC, 8K vector ram.


Common features

Storage: basic FAT support in SD card 30Mbytes

Ports:   2x joystick, 2x Serial, 1x VGA, 1x PS/2 keyboard, 1x audio

Software: Assembler, Palo Alto Tiny Basic (with fixed point arithmetic),

                 Java Grinder Compiler (with floating point support), Astro java game,

                Galaxians, pacman clone games.

And a Lion Windows emulator for the 16bit Lion written by Manos in C# see github project link.

Source code available at github (CPU+system VHDL/schematic, assembler, Rom+TBasic assembly)

More information and assembly description at my website (first project page).

Lion core for MiSTer with Virtual SDcard support, added the Pacman clone game. the game is not tested with the mister but it should play.

x-zip-compressed - 1.07 MB - 05/14/2020 at 22:10


  • 1 × Cyclone V 5CEFA2F23I7 board
  • 1 × SD Card board with SPI interface
  • 1 × Power supply 12V dc 15W (for LCD) or 5V (without LCD support)
  • 1 × TTL to USB Serial board
  • 1 × LCD controller with vga input (Optional)

View all 7 components

  • Small-C port

    Leon04/17/2021 at 16:54 0 comments

    I almost finished the porting of Small-C to the Lion computer with 32bit integers instead of the 16bit that the original made for x86. I also made a linker for combining the object files it produces to a single executable file.

    I had a hard time with the different cpu endianness and the different cpu word size but I believe now I have solved all these problems.

    I almost finished the c library routines. Tiny Basic in Lion plays the role of a command line interpreter and so I added file and memory handling routines to it.

    If I could add structures in Small-C compiler it would be perfect and floating point would be nice too.

  • Lion's Color Palette

    Leon01/12/2021 at 21:50 0 comments

    Lion32's controller now has 64Κ of video ram and supports 256 colors in mode 1.

    In 16bit Lion mode 1  the resolution is 320x200 and every pixel's color is defined by 4bits so 16colors/pixel but  I just added the feature to choose the 4bit combination from a palette of colors.

    Every bit can be assigned to any of the 3bits per RGB color of the ladder DAC in the base board.

    This is an example of a palette choice with more shades of red and a bit of blue, a mandelbrot calculated using the 64bit fixed point arithmetic of Lion's Tiny Basic:

  • Lion shield board

    Leon10/19/2020 at 17:04 0 comments

    I made a shield board for the QMTECH Cyclone V Core Board to make the Lion computer circuit less messy.

    The board hosts:

    - XYZ DACs with separate voltage regulator

    - audio mixer opamp

    - the VGA resistor dac and connector

    - 512K fast 16bit sram

    - headers for all other connectors

  • 32-bit Lion

    Leon07/19/2020 at 15:30 0 comments

    The paged memory thing was troubling me a lot, so I made a new version 32 bit Lion CPU, I'll not surprisingly call it Lion32. Lion32 can have a 32bit address bus with tons of linear addressed memory.

    I made it as compatible as possible with the 16bit Lion and so the software had not to be rewritten although it needed much debugging but system software and Tiny Basic are working now with the 32bit Lion.

    I have to make the java grinder compiler 32bit version to be able to run the games and develop new 32bit software.

    Most new commands have the .D extension to indicate that they use a 32 bit length.

    MOV A1,10 is the 16bit operation while the MOV.D A1,10 is the 32bit

    the same with ADD.D SUB.D AND.D CMP.D etc

    All JUMPS and indirect addressing use 32 bits  

    Maybe I'll create a new project page for Lion32.

  • Lion core for MiSTer

    Leon03/24/2020 at 20:30 1 comment

    A friend lend me his MiSTer board and as I had a lot of time because of  various restrictions due to corona virus (here in Greece) I ported Lion to the mister board.

    Most things work well but there are some differences in keyboard behaviour and so to play the games well you need a usb joystick, also there is no serial port and XY-Display support as in the original Lion.

    VGA output is a bit dark and redish I don't know why. (now fixed)

    HDMI is better but both outputs are darker than in the real Lion computer (now fixed).

    You can find the core in a zip file at the files section.

  • Sound improvements

    Leon03/02/2020 at 11:40 0 comments

    In order to have better sound effects to add in the future to Galaxians clone or other games, I made some additions.

    In every channel I added the option to add a second frequency related to the playing one. This frequency can be up to an octave higher. It is controlled with a 4 bit parameter n.

    An other change is that the noise generator is clocked by the frequency of a channel when noise is enabled in that channel and its output is less harsh.

  • Lion got vector graphics too!

    Leon10/19/2019 at 14:38 0 comments

    Added a vector graphics controller in the fpga with 4K dedicated ram for 1024 vector end points.

    Now it uses 3x MPC4822 12bit dacs for all channels.

    It produces the x,y,z output signals that I feed in my recently acquired HP-1330A X-Y Display Monitor.

    I implemented the Bresenham's line algorithm in the fpga to draw a line from the previous drawn point to the last one.

    I converted the Astro java demo game for vector graphics!

    Raster and Vector graphics are totally independent and can display concurrently.

    The following picture was taken before implementing the line draw algorithm:

    And the next photo is with the line algorithm, unfortunately with my phone camera lines look fat, in reality they look much better:

  • Sound

    Leon09/08/2019 at 17:30 0 comments

    Sound capabilities are not advanced in Lion but...

    I increased the sound channels to 3 and added 255 step 8bit digital volume control for each one.

    A channel outputs a square wave signal with frequency  obtained by dividing 200khz by a 13bit number.

    A channel can be mixed with the white noise (lfsr) channel, noise comes with a frequency bandwidth limit.

    Every channel can be enabled with 8 different duration values 2sec, 1sec, 0.5 sec,  ....

    Status of any channel is available to determine if it has finished playing the previous note in order to send it a new note but a channel can be interrupted any time to start a new note.

  • Cyclone V FPGA

    Leon09/07/2019 at 09:58 0 comments

    Moved the project to Cyclone V FPGA 5CEFA2F23I7, now I don't use an external static ram chip because this FPGA has enough internal ram for Lion's 128K ram + 32K Video ram + 12K sprite ram. It also has plenty IO pins for new features and it's logic elements are faster.

  • PS/2 keyboard controller

    Leon07/14/2019 at 23:30 0 comments

    At last I wrote a controller for PS/2 keyboard in the fpga. It has a 16 key queue.

    I was postponing it and was using an external board instead, but once I started, it was easy and fun.

View all 18 project logs

Enjoy this project?



ee334 wrote 07/12/2021 at 12:22 point

Do You think about enclosure and mobile power (lipo, AA, 18650 etc) solar panel ?

  Are you sure? yes | no

Leon wrote 07/12/2021 at 17:44 point

I have thought about making a nice enclosure but for now I use a small project box for one Lion and a modified media pc enclosure for the one with the lcd screen (I have 2 Lions). I'll add a photo sometime.

  Are you sure? yes | no

ee334 wrote 07/12/2021 at 18:31 point

meybe create similar commodore 64 or raspberry pi 400 ?

  Are you sure? yes | no

Bharbour wrote 03/13/2021 at 17:01 point

Nice Job!

  Are you sure? yes | no

Leon wrote 03/13/2021 at 20:47 point


  Are you sure? yes | no

marazm wrote 01/03/2021 at 17:06 point

Add enclosure like ello 2, power, screen. Nice example

meybe cpu replace. This is very nice project. Many people need buy it . Meybe kickstarter?

  Are you sure? yes | no

Leon wrote 01/04/2021 at 11:46 point


  Are you sure? yes | no

marazm wrote 01/04/2021 at 19:28 point

Many people would like to optimize program, but they can't put it all together (and me too).

can You tell me how run it on qemu?

  Are you sure? yes | no

Leon wrote 01/05/2021 at 12:52 point

I know it is not well documented but I am working on the 32 bit version so in the future I'll write some better description-instructions and soon I'll upload eagle files for the board

  Are you sure? yes | no

Andre (baianinho) wrote 12/08/2020 at 14:02 point

Awesome project,thank you

  Are you sure? yes | no

Leon wrote 12/08/2020 at 16:05 point


  Are you sure? yes | no

Dusan Petrovic wrote 03/25/2019 at 12:32 point

This project is a great addition to the #Homebrew CPU list. Thanks Leon!

  Are you sure? yes | no

Leon wrote 03/25/2019 at 19:09 point

thank you

  Are you sure? yes | no

f4hdk wrote 03/24/2019 at 14:37 point

  Are you sure? yes | no

Leon wrote 03/25/2019 at 01:18 point

thanks for the tip

  Are you sure? yes | no

Goran Mahovlic wrote 01/08/2019 at 10:15 point

It would be great to see your console on our FPGA :)

  Are you sure? yes | no

Leon wrote 01/08/2019 at 14:59 point

Nice board!

  Are you sure? yes | no

Goran Mahovlic wrote 01/08/2019 at 22:43 point

Tnx, it was made for university in Zagreb(Croatia), and at some point we will try to push it to market.

  Are you sure? yes | no

marazm wrote 03/21/2021 at 15:29 point

@Goran Mahovlic  I  prefer

  Are you sure? yes | no

Leon wrote 01/08/2019 at 00:56 point

thank you Goran

  Are you sure? yes | no

Goran Mahovlic wrote 01/07/2019 at 14:45 point

Great work!!!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates