Close
0%
0%

Going 8-bit in style: the PIC18 computer

My attempt to create a fully expandable 8-bit system built around a modern architecture

Public Chat
Similar projects worth following
I have been contemplating an 8-bit system for quite a while now and finally decided to get on with it. It is not the first 8-bit computer that I am creating, but (potentially) could be the last. That’s why this time I wanted to put more attention to every little detail in the concept.

The Base18 computer is a fully open and expandable system built around the 8-bit PIC18 core.

This is an ongoing project. I am currently making the early prototype for the hardware. The software is still in pre-work stage.

During the development I had to make several difficult decisions:

1. The platform

I had a number of contenders initially for the choice. Quickly dismissed all the “old-school” such as the ones from Zilog, Motorola, Intel, as well my favourite 6502. There are hundreds of systems (including some of mine) already built around them, so there won’t be anything new with just another one. In addition to that, some parts are getting obsolete and very difficult to find. And finally, there won’t be any educational benefit to anyone in a system that uses architecture which has not been mainstream for many years already.

I then went through all other current 8-bit platforms and in the end narrowed the choice down to two options – PIC18 or AVR8. The latter is arguably the best 8-bit architecture every created and presents a really attractive option. I however decided to build the computer around PIC18 because no one has ever made a decent open and expandable system around it, and it also offers more fun in the process.

As much controversial and unloved the 8-bit PIC architecture is, it is also the most used one. The number of PICs currently ticking worldwide dwarfs any other 8-bit platform, and is many times greater than all systems with all the original “dinosaurs” put together. No one knows everything of course, but there is no excuse to anyone not to know the 8-bit PIC architecture :-)

Besides, programming for PIC with all its limitations and quirks has its own charm and fun that one can’t find while developing on a more sophisticated core.

I had hard time finding a suitable chip that won’t be too limited for the purpose. The number of PIC18s that can address external memory is counting on the fingers of one hand. Finally, I chose the excellent PIC18F87K22. It is an amazing piece of tech that ticks all the boxes – 8-bit PIC18 core, active market product, external memory bus, can operate as open system microprocessor instead of closed system microcontroller, not full of internal peripheries, reasonable package, and finally – no USB. About the last one - I personally consider the USB an insult to all engineers, hardware and software, so finding a good chip that doesn’t have it - I could not be any luckier than that. The PIC18F87K22 is a modern 8-bit chip that fits exactly my needs for this project!

2. The system architecture

Unlike all previous computing systems that I have built, this one is not a single-board computer. Instead, it is a hybrid in which the main board can still be operational on its own, but offers only the most basic functionality while everything else needs to be added on a system bus as controller boards. This model creates maximum flexibility in terms of hacking potential. My inspiration and benchmark for this system came both from the excellent RC2014 computer, and the “master of them all” – the original IBM PC (although technically it is considered a 16-bit machine), however I put a slightly different goal ahead with an attempt to create a true 21st century 8-bit system that appeals not only to the 40+ generation while still maintaining the “retro” style.

I also wanted to stick to maximum simplicity in every move, so the system bus has the basic control lines, but no complex glue logic or anything of the sort. There is also the PIC18 on the main board, however a controller can disable it and install a different processor, or work alongside to create a multiprocessor system. Disabling the on-board PIC is done in the simplest possible manner – a controller simply needs to hold the MCLR line low (that doesn’t affect the main bus RESET line).

The PIC18F87K22 chip is a weird case of an 8-bit architecture with 16-bit external data bus (exactly the opposite of Intel 8088!). Fortunately there is the possibility to configure the external bus to use 8 bits only. I took that route for simplicity. The chip also comes with a small number...

Read more »

B18 Proto 32x18.zip

Full manufacturing pack for the 32x18 holes prototype card

x-zip-compressed - 3.14 MB - 07/22/2019 at 10:55

Download

B18 Card Template.zip

Altium format PCB file

x-zip-compressed - 1.65 MB - 07/21/2019 at 19:42

Download

Base18 Card.pdf

Bus connector schematic

Adobe Portable Document Format - 153.77 kB - 07/21/2019 at 19:42

Preview
Download

Base18 Card 3D.pdf

3D PDF rendering

Adobe Portable Document Format - 109.39 kB - 07/21/2019 at 19:42

Preview
Download

  • 1 × PIC18F87K22-I/PT Microprocessors, Microcontrollers, DSPs / Microcontrollers (MCUs)
  • 1 × SN74LV373ANSR Logic ICs / Buffers, Drivers, Transceivers
  • 1 × OKL-T/3-W12P-C Power Management ICs / Power Supply Modules

  • Prototyping card

    KnivD07/22/2019 at 09:33 0 comments

    I should have started with this one probably, but here we are anyway - a nice and round 32 x 18 sea of holes card for Base 18 :-)

  • Template for Base 18 cards

    KnivD07/21/2019 at 19:40 0 comments

    Before I started designing various cards, I made this template which removes for me the boring parts in the job. I use Altum in my designs, hence the file here is for Altium, but it can (probably) be exported to another software as well.

    This is what a blank "standard" card for Base 18 looks like:

    And looking from the side:

    A standard vertical through-hole header slides into the PCB and is soldered in surface mount way. 

    The template card has dimensions 86 x 55mm.

    The best PCB thickness for this method is 1.8mm, but the standard 1.6mm works perfectly fine too. I have specified some header model from Samtec, simply because they have an excellent configuration tool. In reality any 60-pin dual row header, ideally with 5.84mm contact height, will do exactly the same job. I had difficulties finding exactly 60-pin headers, but the 80-pin ones are quite common and cheap on Aliexpress and everywhere else, so I took a bunch of those instead to cut them to size whenever that will be needed.

    Pin one is on the top side of this board and where it is marked with a straight angle instead of rounded like elsewhere.

    The schematic for the bus connector:

    The bus has two separate reset signals - MCLR# and RESET#.

    The first one applies to the PIC18 on the main board only, while the second one is general for the entire system. The RESET# signal also takes precedence over MCLR# in such way so when RESET# is brought low, MCLR# also becomes low, but if MCLR# is low, it does not affect the state of RESET#. Thus a controller card could disable the on-board PIC18 by simply holding the MCLR# in low and then take over the entire bus by installing a different processor instead.

    Another part to mention are the unoccupied pins 3 and 4. The reason for that is to mitigate any potential harm coming from reverse installed cards. In this case - the "dangerous" lines carrying the raw input voltage (anything between 5V and 14V) will fall into the unconnected slots.

    Pin 55 on the bus also has the specific purpose to prevent reverse connected cards. Its 180 degree counterpart is exactly the RESET# signal, so any (assuming properly designed) card that is connected reverse on the bus will cause the signal RESET# being kept permanently low, thus preventing any unwanted damages to the main board or the controller card.

    I am currently making the first generation prototypes of the main board and several cards. Once they turn up here and hopefully work, I will start publishing more detailed schematics.

    And finally, the PCB drawing for the card template:

    This template is available as Altium PCB file in the project files section.

  • 8255 PIO 5V card

    KnivD07/21/2019 at 10:46 0 comments

    For support of all those retro interfaces at 5V here is a card based on the popular 8255 controller. Since this is a 5V card, it will require the 3V-5V voltage translator.

  • 5V interface card

    KnivD07/20/2019 at 18:00 0 comments

    The main concept of Base 18 is to use modern components (without compromising human-friendly solderability), and that is in the core of its 3.3V logic main bus. There are still number of old parts out there that work on 5V bus only. I want to connect the two worlds and that's why I designed this 3V-5V interface plugin. It converts the B18 bus to 5V levels along with bus supply of 5V, instead of the original 3.3V. 

    A B18 card in standard format can now connect on top just like any normal card. This one is solderable by hand but requires a bit more skill since the level shifters are SOP 0.65mm pitch, and in addition to that - there is another header to be soldered on the bottom side of the PCB. The passive components are still 1206 size, though.

    I am making prototype PCBs and will be posting further updates in due course.

  • RTC card

    KnivD07/19/2019 at 09:22 0 comments

    This one is done "the proper way" :)  Not I2C or SPI, but with address decoding and mapped into the main address space. Unfortunately there are not many manufacturers who still make RTC ICs with parallel bus. In fact, except Maxim there are hardly any others. Fortunately this good chip from TI is perfect for the need. Not the cheapest option on the market, but still bearable price.

    Sending this one the factory way too, for prototype PCBs.

  • External RAM 128K

    KnivD07/18/2019 at 11:00 0 comments

    Just finished my new B18 card. This one is a cheap external RAM 128k that occupies the bus addresses 0x20000 - 0x3FFFF.

  • First controller - SD card :)

    KnivD07/16/2019 at 20:13 0 comments

    Today I established the "standard" size and shape for Base18 controller boards. 86 x 55mm - almost like a credit card :) This size is derived mainly from the short side of the Base18 board, which itself is 208 x 86mm, so the controller can be flush with it in order to make a good looking package. Of course nothing prevents a controller board to be a different size, but unless there is an undeniable need for that I am planning to stick to this size and shape for now.

    The board has recessed area for the main header. With appropriate PCB thickness 1.6 - 1.8mm, a standard straight header will fit in there directly by enclosing the board on both sides and will be very easy to solder too.

    I made the first controller board using the new PCB template - a simple SD card interface. This one is also now in the factor for prototype PCBs.

View all 7 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates