[ News | Short Description | Specifications | Long Description | Future | Kernel | Examples | Download ]
Current version: 1.43, August 2005
The C source files for the PyPro system are now finally available for download.
Other news in this release include basic DMA support using the existing IO subsystem; instead of transfering words one-by-one it is now possible to transfer blocks of memory, with an interrupt on completion/error. Also added two instructions for waiting on interrupts without having to write a polling loop, which can reduce the CPU load on the host system as well through short usleep() calls during each PyPro CPU cycle. There have also been some minor fixes and performance tweaks, and now it runs at ~5 MHz on a 1 GHz VIA Nehemiah processor under OpenBSD. Work in progress currently include changing display offset and swapping buffers (high/low 16-bits) to make use of the high 16-bits of each pixel, but that will not be included until the next release, whenever that will be.
Version 1.4, December 2001
This is a stable release which should compile under most UNIX like operating systems. There should be no major changes since version 1.3 except for a single bugfix, plus some optimizations of the CPU emulation making it run at about 3 MHz on a 333 MHz native system. The source code has also undergone a well needed reorganization, as I consider licensing it under a BSD licence and make it available for download. This version can be written to a floppy and run natively on bare i386 hardware without any supporting operating system. It's more fun to run under a real OS though.
The PyPro system is an emulation of a fictive processor and computer architecture. Programs are written in the PyPro assembly language which is then translated into executable PyPro machine code. The code is fully portable, meaning that the same assembly source code can be used across all kind of platforms without any modifications. The main part of the system was designed before I had taken any course or likewhise in this area, so the original architecture was based fully on my own ideas. The implementation of interrupts was however based on something I read in an book called "Programming the 6502" published by Sybex a long time ago. For more information, read the long description below.
The PyPro project started during 1997 as a simple test project. The initial idea was to just try creating a processor capable of adding and subtracting some numbers and doing other simple tasks. As time passed more and more instructions were added; branching to subroutines, division, multiplications and conditional branches. After some months or so the processor had grown into a rather neat little system, with some kilobytes of memory and some data and address registers. At this stage one could even write a simple program that caused a ball to bounce around on the integrated display - actually a part of the PyPro's internal memory.
All programming was made in pure machine code which made development very tedious, and trying to write larger programs was next to impossible. Just imagine trying to debug a program written in pure machine code, and try to figure out if either the code is faulty or if the PyPro system itself has some bugs in it!
At this stage the PyPro system had grown from a test project into something a bit more usable, but the major problem was that coding in machine code became rather boring after a while. This forced me to add a very useful extension, namely the PyPro assembler.
The integrated PyPro assembler was written in a hurry so there were no time to add any error control and similar helpful things, it just assembles the code you've written without checking for any obscure commands. But as long as you stick to the normal addressing modes described in the manual and don't make any typos the program will happlily run.
At this moment there is a working PyPro Kernel capable of running several processes simultaneously, ie. multitasking. There is also a set of routines to handle various common functions, in order to provide a simple layer between the developer and the low level system calls. Among these are routines for writing text and scrolling the display, some simple graphics commands and other handy functions. There is also an operating system named ZOS available, it provides a command line interpreter, a tape device driver, a multitasking environment, and other fun things.
I run this project simply because I enjoy it. However, it has quite a low priority for me, there are other things in life that deserve energy and attention better. Now when that's said I'll say some words about what motivates further development: It's a rewarding experience to create a whole system all by yourself, designing a processor from scratch and watching it run the machine code generated from your assembly language by your own parser. Add to this the feeling of seeing your kernel in action, supporting an operating system, and you should know what I mean. It's a magic feeling.
About the Kernel:
There is a multitasking kernel called ZKernel available for download. The kernel requires version 1.3 or higher of the PyPro CPU. As of version 0.3 the kernel supports:
The following links will show you some examples of the PyPro system:
Here you can download the PyPro system in binary form. The sources are not available yet, but if enough people are interested I might consider adding them to this page. Until then it's binaries only. Some legal terms: I am in no way responsible for anything caused by the use or misuse by this program. It works on my computer, but your mileage may vary. The software is distributed free for non-commercial usage, but I retain all rights to it. For commercial usage, you're free to use it as long as I'm kept happy - if your company earns way too much by using my code you are supposed to give me 1% of those earnings. That's a fair licence, right?
PyPro assembly source codes
Do you find this system interesting enough to want the source code?
Comments and feedback can be sent here: