Prime Time

…and now, for something completely different. (By different, I mean almost useful!)

The Z80 computer is now busy computing prime numbers! I wrote a straightforward BASIC program, which I then compiled using Oshonsoft‘s Z80 simulator suite of utilities. The resulting assembly program was pretty good, but needed some optimization. (BASIC isn’t really geared towards byte manipulations.) I replaced the crude BASIC mod-and-div output routines I had written with four LD and four OUT instructions. Here is the (probably still really inefficient) assembly code.

Some technical progress, too: Loading complex programs is becoming progressively easier with the addition of a hex editor to my toolkit. Instead of toggling code in a byte at a time from the control panel, I can now load it into a serial EEPROM and plug it into the Virtual ROM peripheral. With a few lines of code (which I also copied to the ROM because I’m lazy), this code can be copied into base memory automagically. All that needs to be toggled in to start is a single, 3-byte JUMP command.

For instance, to bootload the prime-number program into base memory:
* Enter Program mode
* Connect the ROM
* Start the clock running
* Load the following instruction into memory:
0000 C3
0001 00
0002 86
* Hold down RESET, exit Program mode, and release RESET.
– The Z80 will jump to 0x8600, which is a quick routine to load the main primes program (8300:854B) into base memory (0000:034B).
– At the end of this routine, a JUMP command will cause it to halt.
* Perform a RESET to start the prime-number program running.

(I actually started loading the bootloader into base memory — but then realized that it would quickly overwrite itself. A workaround, if you don’t have a bootloader written into ROM, would be to toggle in the bootloader at a higher address than you plan to use for the program, then JUMP to that address — for instance, 0x7000h — from 0x0000h.)

I’m using my ancient HP 1630A logic analyzer to look at the output from the program (POD2 connected to the data lines, L clock connected to ~IORQ); it’s calculated the primes through 113 so far.

I also managed to complete Problem 001 from Project Euler (“What is the sum of all numbers less than 1,000 which are multiplies of three or five?”), using the Z80.

I also realized this weekend that my new Gigabyte GA-EX58 Extreme motherboard doesn’t have any RS232 ports. Such is “progress,” I guess. *sigh* Time for an add-in card. (Do they make PCIe RS232 cards??)

This entry was posted in Coding, Digital, DrACo/Z80, Drexel, EET325. Bookmark the permalink.

2 Responses to Prime Time

  1. Dosquatch says:

    "They" do, they do! Order up – one PCIexpress 2port RS-232 controller card.

    http://www.geeks.com/details.asp?invtid=SY-PEX-2S&cpc=SCH

  2. Dosquatch says:

    Feh. Wcho is teh postink vat dat hassen der modderatink turned on?

Leave a Reply