The OSI C1P Page
Posted: Fri Nov 14, 2008 9:54 pm
What were all my C1P projects?
The first thing to do was get the 6502 cranked up to 2 Mhz. This was the earliest form of overclocking I have ever heard of and the issues were the same: keeping the innards cool so they'd be fast enough to keep up. I think the 450 ns 2114's didn't have any problem but if you had the older 550 ns ones you were asking for trouble. I had at least two fans since OSI's linear power supply was HOT. After a few years it died and I replaced it with a tiny cool switching power supply, just like the Apple II's had been using all along.
A fun experiment was to see how slow I could get the 6502 to run. At something like 10,000 kHz it started to fail, probably because dynamic electronics in the chip weren't being refreshed often enough. It was fun to see the poor screen scroll one character at a time. No wonder it looked so ugly.
Naturally I added more RAM. I got a memory board (probably from Aardvark) and soldered many many expensive 2114's on it and got 8K more RAM. Don't forget the .1 microfarad capacitors! You could never have enough of those capacitors! If your memory was flaky, soldering in a couple more capacitors in often solved the problem. A few years later there were 64K byte static RAMs on a single chip that cost a few bucks.
I built a parallel printer interface from scratch. It was just an addressable latch (one byte of write-only memory!). The trick was that STROBE, the signal that told the printer a new character had arrived needed to be much longer than the time it took to write to the latch, so I added some flip-flop delay thing to make a pulse when addressed. I don't know how I implemented BUSY, the signal that came from the printer saying its buffer was full. Most likely I just sent characters slow enough so that would never happen, or perhaps I ANDed the 6502's clock to halt the CPU whenever that signal was high. It's not like the computer was doing anything else.
I made a 300 baud modem from a kit then I made the serial port to do double duty with the modem and the cassette interface. I probably had a big switch that had "MODEM" and "CASS" labels from my label maker. Technically the modem required real RS-232 level signals. There were chips that converted TTL to RS-232 but they required -12 volts which I didn't have. Fortunately the modem felt zero volts was close enough to -12 volts so I lucked out. There were elaborate instructions on how to tune the modem but I just tuned it by ear while listening to another modem until it worked. It turned out that 300 baud frequency-shifting modems and cassette interfaces were practically the same thing.
I made a cheap drum machine. I somehow hooked up an addressable line to an amplifier and whenever I POKEd the memory location, the speaker would thump and it sounded amazingly like the bass drum on an expensive drum machine. It was easy to program any rhythm with delays in a BASIC program. I also wrote something that would let me tap a rhythm on the keyboard and it would remember it and play it over and over until my parents told me to turn it off.
One day I decided that there was no reason to buy a disk interface when I had the schematic of one. As you all remember, OSI had no expensive disk controller "chip" like fancy computers had. It was just a serial port (!) and a PIA to move the head around, essentially just two chips. Of course I didn't have the OS65 (or whatever it was called) disk operating system which was barely usable to begin with, but someone had written some kind of simple DOS that I bought and used. I remember some guy on CompuServe was trying to sell me a used floppy disk drive for $600, about three times the cost for a new one. He said it was a true IBM disk drive hence it was worth its weight in gold. I decided to buy a new one instead.
Of course I did the scariest modification of all: the 64 characters per line mod. That involved lots of piggy-backed chips and lots and lots of debugging. The best thing about that was after I was done, I actually understood how video worked: how the video RAM was sequentially addressed with shift registers, how each byte addressed eight bytes in the character ROM to represent a character, how those bytes were latched and serially sent out the video port, and how all the vertical and horizontal blanking happened at the right times. There was also the issue of blanking the video whenever the video RAM was being addressed which made OSI's video by far the ugliest of any computer. Scrolling nearly made the screen go blank. Didn't it just disable the video addressing whenever the CPU was addressing the RAM? Apparently real graphic chips only changed the video memory during blanking. It seemed like at the small expense of speed, they could have halted the CPU whenever it accessed the video RAM whenever the video was reading it.
I was so pumped up at understanding everything about video that I designed and built the ultimate OSI graphics card: 100% bit graphics. I simply duplicated the existing shift register video design on another board (same chips even!) and changed it to address 16K of RAM instead of 2K of RAM and the character ROM. The character and bitmap graphics came from the same clock and were combined with a simple OR gate just before it went out to the monitor. I wish I could say that this was a success, but for some reason bytes weren't getting stored properly. At times bits ended up in the wrong spots. It wasn't software because I'd run it again and it worked fine. I never could figure out what was wrong so I decided to stick to software. I may have slightly damaged a component when I built it or something.
The first thing to do was get the 6502 cranked up to 2 Mhz. This was the earliest form of overclocking I have ever heard of and the issues were the same: keeping the innards cool so they'd be fast enough to keep up. I think the 450 ns 2114's didn't have any problem but if you had the older 550 ns ones you were asking for trouble. I had at least two fans since OSI's linear power supply was HOT. After a few years it died and I replaced it with a tiny cool switching power supply, just like the Apple II's had been using all along.
A fun experiment was to see how slow I could get the 6502 to run. At something like 10,000 kHz it started to fail, probably because dynamic electronics in the chip weren't being refreshed often enough. It was fun to see the poor screen scroll one character at a time. No wonder it looked so ugly.
Naturally I added more RAM. I got a memory board (probably from Aardvark) and soldered many many expensive 2114's on it and got 8K more RAM. Don't forget the .1 microfarad capacitors! You could never have enough of those capacitors! If your memory was flaky, soldering in a couple more capacitors in often solved the problem. A few years later there were 64K byte static RAMs on a single chip that cost a few bucks.
I built a parallel printer interface from scratch. It was just an addressable latch (one byte of write-only memory!). The trick was that STROBE, the signal that told the printer a new character had arrived needed to be much longer than the time it took to write to the latch, so I added some flip-flop delay thing to make a pulse when addressed. I don't know how I implemented BUSY, the signal that came from the printer saying its buffer was full. Most likely I just sent characters slow enough so that would never happen, or perhaps I ANDed the 6502's clock to halt the CPU whenever that signal was high. It's not like the computer was doing anything else.
I made a 300 baud modem from a kit then I made the serial port to do double duty with the modem and the cassette interface. I probably had a big switch that had "MODEM" and "CASS" labels from my label maker. Technically the modem required real RS-232 level signals. There were chips that converted TTL to RS-232 but they required -12 volts which I didn't have. Fortunately the modem felt zero volts was close enough to -12 volts so I lucked out. There were elaborate instructions on how to tune the modem but I just tuned it by ear while listening to another modem until it worked. It turned out that 300 baud frequency-shifting modems and cassette interfaces were practically the same thing.
I made a cheap drum machine. I somehow hooked up an addressable line to an amplifier and whenever I POKEd the memory location, the speaker would thump and it sounded amazingly like the bass drum on an expensive drum machine. It was easy to program any rhythm with delays in a BASIC program. I also wrote something that would let me tap a rhythm on the keyboard and it would remember it and play it over and over until my parents told me to turn it off.
One day I decided that there was no reason to buy a disk interface when I had the schematic of one. As you all remember, OSI had no expensive disk controller "chip" like fancy computers had. It was just a serial port (!) and a PIA to move the head around, essentially just two chips. Of course I didn't have the OS65 (or whatever it was called) disk operating system which was barely usable to begin with, but someone had written some kind of simple DOS that I bought and used. I remember some guy on CompuServe was trying to sell me a used floppy disk drive for $600, about three times the cost for a new one. He said it was a true IBM disk drive hence it was worth its weight in gold. I decided to buy a new one instead.
Of course I did the scariest modification of all: the 64 characters per line mod. That involved lots of piggy-backed chips and lots and lots of debugging. The best thing about that was after I was done, I actually understood how video worked: how the video RAM was sequentially addressed with shift registers, how each byte addressed eight bytes in the character ROM to represent a character, how those bytes were latched and serially sent out the video port, and how all the vertical and horizontal blanking happened at the right times. There was also the issue of blanking the video whenever the video RAM was being addressed which made OSI's video by far the ugliest of any computer. Scrolling nearly made the screen go blank. Didn't it just disable the video addressing whenever the CPU was addressing the RAM? Apparently real graphic chips only changed the video memory during blanking. It seemed like at the small expense of speed, they could have halted the CPU whenever it accessed the video RAM whenever the video was reading it.
I was so pumped up at understanding everything about video that I designed and built the ultimate OSI graphics card: 100% bit graphics. I simply duplicated the existing shift register video design on another board (same chips even!) and changed it to address 16K of RAM instead of 2K of RAM and the character ROM. The character and bitmap graphics came from the same clock and were combined with a simple OR gate just before it went out to the monitor. I wish I could say that this was a success, but for some reason bytes weren't getting stored properly. At times bits ended up in the wrong spots. It wasn't software because I'd run it again and it worked fine. I never could figure out what was wrong so I decided to stick to software. I may have slightly damaged a component when I built it or something.