-
Technical Guide
01/03/2023 at 19:52 • 0 commentsI started to write a Technical Guide for Lion and it takes time to get into the details but a first version is ready and I'll upload it to project files.
-
New C compiler for Lion32
05/19/2022 at 21:55 • 0 commentsI made a new (kind of) port of a compiler for Lion32. This time it's the lcc. I compile the intermediate bytecode that a version of lcc produces to Lion32 assembly. The bytecode is intended for a virtual machine environment but it fits me nice. Now I have a full C compiler with floats and unions and structures and multi-dimension arrays and everything.
The only problem (now solved) was with some cases of the switch statement that I can't compile to relocatable code but it is bypassed by disabling a switch implementation optimization that used a lookup table of addresses.
I did that in about 10 days this time, including the c, system and math libraries. The code produced has many unnecessary push and pops but I included an optimizer in the compiler that detects and merges any needless push-pop pair to a single move instruction, it does a good job.
Here one of the test programs that calculates and draws the mandelbrot in 32.8 seconds:
#include "clib.h" #include "syslib.h" float side=3.75f; float real=-0.5f; float imag=0.0f; float aspect; float dist,re,im,ci,cr,zr,zi,a,b; //float int key,counter,colr,tim1,tim2,lcolr; int scrw,scrh,maxiter; void main() { int x,y,lim; scrw=320; scrh=200; maxiter=254; aspect=(float)scrw/(float)scrh; lim=8.0f; key=0; dist=side/(float)scrw; re=real-side/2.0f; im=imag-side/aspect/2.0f; IOout(24,1); // switches to graphics mode 1 Screen(0,15); Cls(); tim1=Timer(); lcolr=0; for (y=0; 2*y-1<scrh; y++) { ci=im+(float)y*dist; for (x=0; x<scrw; x++) { cr=re+(float)x*dist; zr=cr; zi=ci; counter=64; do { a=zr*zr; b=zi*zi; zi=2.0f*zr*zi+ci; zr=a+cr-b; counter--; } while (counter>1 && 8.0f>(a+b)); colr=65-counter; if (lcolr!=colr) { Screen( 0, colr); lcolr=colr; } Plot(x,y,1); Plot(x,scrh-y,1); } } tim2=Timer(); tim1=tim2-tim1; Screen(0,30); PosYX(21,46); printf("%d",tim1); while (key!=32) key=Inkey(); }
-
New board
04/22/2022 at 08:25 • 0 commentsI made a new base board for Lion32, a 4-layer one. In this board there is a ground layer and I mixed the sound channels, noise and digital sample output to a stereo sound output. It also features a 1MByte static RAM and a second serial port.
I ordered the pcb from PCBWay as I have done so far for all my projects and I am very pleased with their service and the quality of the results.
I received and tested the board, everything fine, 1MB ram available now and the system is more "quiet".
-
Syslib, floats & execute from TB
12/12/2021 at 13:42 • 0 commentsAfter a long idle time I made a c library, the syslib, that contains useful system functions for sound, sprites, scrolling, io, keyboard etc to be accessible from small c (Lion32 only).
From the tiny basic prompt I can now execute c programs from disk (and pass parameters) by using the prefix "!".
So now I can make some utilities, i already made two:
!view filename displays the contents of a text file.
!play filename plays the raw audio sample from a file.
I also made a floating point library to add in an indirect way 32bit floating point arithmetic to Small-C, so I use 32bit integers for storing floating point numbers and do arithmetic.
this is a test program that correctly prints 7.50 as result:
#include "stdio.h" #include "clib.h" #include "float.h" char s[20]; main() { int f1,f2,f3; f1=stof("-2.5"); f2=stof("10"); f3=fadd(f2,f1); ftoa(s,f3,2); strncat(s,"\n",1); printf(s); }
-
Small-C port
04/17/2021 at 16:54 • 1 commentI almost finished the porting of Small-C to the Lion32 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
01/12/2021 at 21:50 • 0 commentsLion32'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
10/19/2020 at 17:04 • 0 commentsI 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
07/19/2020 at 15:30 • 0 commentsThe 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
03/24/2020 at 20:30 • 1 commentA 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
03/02/2020 at 11:40 • 0 commentsIn 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.