"Bigger is better power !!!"
The X-Monster Z80 is a working computer that uses Zilog's Z80 processor to perform both video generation tasks, and your regular computation tasks, like playing a game or something. What is special about this computer is the size of the circuit board. The CPU, operating system ROM, work RAM, IDE hard drive interface, AT keyboard interface, joystick interface, bi-directional parallel port (with hardware flow control), sound generation, and video displaying functions are all combined on one board, consisting of only 7 IC's. A working computer can be made with all these features =P, which is brought together by the Operating System, which handles video generation, keyboard buffering, interrupter scheduling, whatever. The machine clock speed is 24 MHZ, but because the CPU is generating video, the actual clock speed when running a program turns out to be 16 MHZ.
How's it work?
First, i'll describe which components are on the circuit board:
Okay, here it goaes, don't get lost -
- Zilog Z80 CPU
- 32k RAM
- 128k Flach Memory ROM
- 82C55 Programmable I/O Controller
- GAL16V8 Programmable Logic (the part that really reduces the nuber of IC's =D!)
- Video SYNC Generator IC
- 74HC165 Video Shift Register
The CPU starts up before the SYNC generator, and during the CPU's initialization, it sets up all the special hardware registers. When the SYNC generator start up, it will start drawing the video display, and will interrupt the Z80. The Z80 immediately reads to a special register, which will keep sending wait states to the Z80 CPU to sync it, and the SYNC generator together, so that writes to the 74HC165 shift register will be in sync, and that the timing will be consistant with all future lines to be drawn, since the dot clock is 4 times slower than the CPU clock. For 8 pixels to be drawn on the screen, the Z80 only has 32 cycles to send video information to the shift register. 32 cycles which is a lot of cylces, and give the Z80 plenty of time, especially when in the tile video modes. The shift register is not connected to any special register port, it is directly connected to memory. Line drawing is repeated 200 more times. The CPU is interrupted each time a line is drawn, so that program code can run inside a little 16us interval. Sound is generated after 8 lines are drawn. After all lines are drawn, vertical blank occurs.
I don't feel like making a real site where you can navigate around where you want and such right now. So all you get is the project status =P
During VBLANK, the keyboard interface handler reads data from the keyboard, and stores it in a buffer for use in a program. After the keyboard handler has finished no more than 4 reads from the keyboard, user interrupters are then processed from a list, and then executed.
In the IDE interface, only 8 bits are connected to the hard drive. The remaining MSB are pulled up to VCC. Because of this, only half the hard drives capacity can be used (if the 8-bit interface feature were to work, then I could use the entire drive................... but noooooo, we're not using Compact Flash =P). The operating system uses a simple FAT system to organize blocks of data on the hard drive. The joystick interface, and parallel port interface are a piece of cake to understand. The joystick can use either a Sega Genesis controller, Atari 2600 controller, NES controller, or SNES controller by using simple I/O. The paralle port uses Mode 3 of the 8255 because hardware flow control is awesome =P.
The active display takes up 200 lines of video. Each line is 48us long, so the entire display uses 9600us of time. One frame of video takes up 33,600us of time (and yes, 525 lines), so 28% of the CPU time is used doing video. 28% of 24MHZ gives me like 16MHZ for the actual program in the worst case of video drawing. And hey, a 16 mhz Z80 CPU is already really fast! The dot clock is 4 times slower than the CPU clock, so the do clock rate is 6 MHZ, which gives me a maximum of 288 pixels of resolution for each line displayed.
This Z80 computer design is probably the first, and smallest ever =P. The key to this whole project is getting a Z80 to run at 24mhz, POWER!!!!
Today, February 4, 2005 Power !!!
I have the AT keyboard interface working! Seems that there was a mistake in my interface level macros. The keyboard interface is connected to the 8255 PIO, which is controlled through the Z80's IOREQ signal. I was using the LD instruction to interface to the 8255 on one macro, instead of using the IN instruction =P. Now that the keyboard works, I am finished working with the hardware. All your base are belong to me ahahaha, success!
Now it's time to work on an operating system. I'm also planning to use Commodore 1541 disk drives on the X-Monster, so that I can have floppy drives :D. The floppy will interface to the paralle port. I already started to work on the commodore bus routines, but I dunno if they'll work. If all is good, I'll probably release a sh*tload of subroutines to interface IDE drives, commodore drives, an AT keyboard, etc for the Z80 for y'all to play around with.
Today, January 14, 2005 Power !!!
Okay, so everything on the motherboard works, as I expected it to (except the ps2 keyboard x.x). Now, the next step is to fit it all in a nice case. I was leaning for an ATX computer case, but I got too lazy, and just bought an external SCSI case for $5. Didn't really want to spend more time mounting the motherboard in an ATX case, then take pictures, and then show everyone how I wasted an entire ATX computer case for a small, tiny motherboard =P (though it would have been hillarious hahaha).
The SCSI drive case was plenty big enough for my project. The hard drive almost didn't fit in horizontally because I thought the power connector would be sticking out, and the enclosure wouldn't cover the case up. However, the encosure did fit nicely =P, so all is good. If I had to fit the hard drive in vertically, like the way it's suppose to fit, there'd be no room for the motherboard (unless I stick it on top of the hard drive, hmmm...), and I'd have to go with the ATX computer case plan =D. And lucky enough for me, I didn't hot glue the hard drive, or the motherboard onto the case, which is probably surprising to all. I also had to make some kind of way for the connectors to mount nicely on the case. Hmmm......... Power!!!! I did this by cutting up some plastic, and molding it for the connectors, which would the go where the old SCSI plugs were.
This project is almost complete, all that's next is to build some software for it, and it's a full blown personal computer =P. I even have a nice monitor for it, that is black and white, and was used for video surveilance. My dad used these monitors (I have another monitor) for an apple II, and an old rare Synertek dumb terminal Power!!! The monitors have been sitting around for a while, since the apple II machine was stripped out, and thrown away ;D.
Okay, I don't have much else for you............ except a few pictures (these aren't crappy-quality ones either!!) Power~!!:
- "Moddifying" the case
- The components
- Putting the components in the case
Today, November 24, 2005 Power !!!
forgot to upload some screenshots of the X-MonsterZ80 in work power !!!.
i have not installed the ide interface, or i/o interfaces that will hook up to the keyboard, and parallel port, so what i can show now is limited =P. currently, there is no operating system that exists yet, only video display drivers, and an interupter agent.
here's a shot of the system when starting up. this mode shows the 6x8 tiled screen mode. the font is very sexie cause i hand typed every pixel myself
yay, it can serve as a good seconds timer
a shot of the 8x8 tiled display mode. it looks a little better than the previous two pictures i took =P
the next steps are to install a connector for a keyboard, and a connector for the parallel port because the computer's just pretty much useless without user input =D. also, there's a problem with the video i'll have to fix. if you can see closely in the pictures, the first pixel of every tile if bigger than the last pixel (6th or 8th). it is caused due to having too much time to write to the shift register, since the z80 keeps the bus active for 3 clocks, while the pixel clock occurs every 4 clocks. i'll also have to show the frame buffer mode next =P, and display some black and white porn pic, or whatever XD.
November 17, 2005 Power !!!
just last week, i started building another z80 system from scratch. i designed the system a couple weeks ago, the design took a while to turn into reality due to the constraints on what parts i'd like to use.blah, blah, blah, anyways, here's the system specs:
- Z80 microprocessing power !!! running at 24 mhz (the cpu actually runs at 16 mhz overall when displaying the screen) power !!!
- 32k ram for programs+work memory+video memory power !!!
- 30k flash memory for os+toolbox power !!!
- 288x208 black and white composite video output power !!!
- IDE bus connector to interface a hard drive, or cd rom.... power !!!
- ps/2 keyboard interface power !!!
- sega/atari joystick interface power !!!
- runs on a 9v battery power, only sinking 100mA power !!!
- up to 4 video modes: 1) display segmented into 36x26 using 8x8 tiles with two scrollable planes, 2) display segmented into 48x26 using 6x8 tiles with only one scrollable plane, 3) dual frame buffer mode, 4) one plane segmentation of 18x13 using 16x16 tiles with another plane (window) using 6x8 tiles
- no way to expand the system power !!!
- 1 bit audio beeping and booping power !!!
- an 8 bit parallel port with 4 bits of hardware handshaking power !!!
here's some pics of this MONSTER computer:
the pcb occupied with the integreated circuits. up on the left top is the toshiba z80 cpu, to the right is the sync controller for the video (also serving as the oscillator circuit) with the 24 mhz crystal on its right. on the middle row, starting from the left you'll see the 32k ram busted off a 486, the programmable logic chip, and the video shift register. on the bottem row, there's the 32k of flash memory, and then the 8255 programmable i/o controller
the pcb without any parts. all wires are really short because i routed them under the sockets ;D!
the back side of the pcb, all points and wires were soldered on by hand
i finished the entire fabrication of the pcb somewhere around last friday, right at the end of exams =P. basically, the main function of this design with so little parts with video outputting power is to make the cpu do the drawing for you without the use of a dedicated crt controller. it is much cooler because then i get to use the z80 to organize the tiles and such (like the genesis, or gameboy 0o0o0), and not have to go with just using a frame buffer. the only problem is that the cpu is only meant to run at 8 mhz, but i've overclocked the sucker to 24mhz =P. the cpu runs very stable though, and i've tested the computer, making it run for an entire day, while running an led blinking code (in addition to the video generating code), without having it lock up. haven't had time to start making a descent OS yet (was planning on porting CP/M 2.2, but dunno where to start =P).
o wait ! i also haven't put the ide connector, or i/o connector on the pcb yet (which will occupy the empty pcb space below the board)
so, there's your eye candy for today =D
Go back to DevSter's Page Power !!!