r/homebrewcomputer

Image 1 — Motorola 68000 homebrew computer with actual PCI bus
Image 2 — Motorola 68000 homebrew computer with actual PCI bus
Image 3 — Motorola 68000 homebrew computer with actual PCI bus
Image 4 — Motorola 68000 homebrew computer with actual PCI bus
Image 5 — Motorola 68000 homebrew computer with actual PCI bus
Image 6 — Motorola 68000 homebrew computer with actual PCI bus

Motorola 68000 homebrew computer with actual PCI bus

I've been studying the PCI bus on my own and one evening I got an idea about making a homebrew computer with an actual PCI bus. I've never seen one, so I decided to try it myself. I also wanted to learn about the PCI bus in a practical way. I chose the Motorola 68000 CPU because of its balance in complexity - it's easy to interface, has nice performance/capabilities and has official GCC toolchain support.

The project began literally a month ago when I got a scrap lot from my friend Shadowdestroyer777 (huge thanks!) containing an industrial Motorola 68000 SBC and some old dead motherboards. I desoldered the SBC for the CPU and a few other parts. From one motherboard I grabbed connectors, ISA/PCI slots and many other things. One evening when I had everything on my desk (the CPU, the PCI slots and even a spare prototype PCB), the idea was born. Right before this project, I worked on an experimental PCI FPGA card, so I had a bit of practical PCI experience beforehand. I even read most of "PCI System Architecture" by MindShare!

The specs of this homebrew:

  • Motorola 68000 @ 10 MHz
  • 1 MB of SRAM
  • 4 KB of ROM (just to fit an serial bootloader)
  • MC68681P DUART for UART, timing and I/O
  • Two 32-bit 5V PCI slots, interrupt capable, no bus mastering (DMA). Runs at the same frequency as the CPU (10 MHz)
  • Spartan 2 FPGA XC2S100 as the PCI host bridge
  • XC95144XL CPLD as the glue logic
  • ATMega128 (used solely to quickly load the FPGA bitstream on boot)

As the base, I used an 18x12 cm prototype PCB. Connections were made using enameled wire, just like in my previous 486 homebrew project. To fit the PCI slots into the prototype board, I actually had to bend the PCI slot pins to fit the 2.54 mm grid! Don't even ask about this manually adapted FPGA... It's another story - it just works.

I won't go into detail here on exactly how the PCI bus works and what I had to do, but generally, the bridge translates CPU accesses into PCI accesses. It maps memory 1:1 and for the I/O and configuration spaces, I do some translation tricks. It's all done inside the XC2S100 FPGA in VHDL. In addition to basic accesses, PCI hardware interrupts also work. I omitted DMA mainly because I ran out of pins on the FPGA. There were various challenges in this process, like the different endianness (PCI is designed around little-endian systems, while the Motorola 68000 is big-endian). I’ve shared all the source code on GitHub and more details on my website.

So, thanks to my efforts, I managed to support 3 types of card:

  • Serial PCI card: I had a Moschip NM9835 dual serial port card. It was a nice test target because it's 16C550 UART compatible, making it relatively simple to write a driver for. With this card, I also got hardware interrupts to work so on serial receive, the CPU handles it nicely.
  • VGA graphics cards: For me, these are one of the coolest parts. I managed to "wake up" three cards: a Cirrus Logic GD5440, an S3 Trio64V2/DX (S3 86C775) and partially an IGS IGA 1680_A. The thing is, I can't execute their VBIOSes because of the architecture mismatch. However, there is some documentation on the internet that shows how to wake these cards up. After waking them up, they program like standard VGA cards - it all comes down to standard VGA initialization (like programming the CRTC, DAC, etc). I got 80x25 16-color text and 320x200 256-color graphics modes to work perfectly!
  • RTL8029 network card: With the help of AI (as I was exhausted from working on the homebrew - soldering, designing the logic, etc. and I just wanted to see what was possible with the correct software), I got this homebrew on the internet! I got an RTL8029 driver, a simple network stack, telnet and a http server to work. I can say that I got a 10 MHz CPU from the 80s to serve a web page over a 32-bit PCI network card from the end of 90s.

The lack of DMA is quite limiting as I can't use cards that depend on it, such as later network adapters, SCSI controllers, USB controllers and more. However, for my first project like this, I think it's pretty good anyway. Honestly, it's crazy to think about (even for me) that I got an '80s CPU to work well with late '90s PCI hardware and serve a webpage. All in one month of hard work.

I also wrote a massive, detailed article on my website about this project, including my previous experimental PCI card, a brief PCI introduction, the build process and the results. This is just a very short description of the project, but I wanted to share it!

Project site: https://maniek86.xyz/projects/homebrew_m68k_pci.php

u/maniek-86 — 10 hours ago
▲ 103 r/homebrewcomputer+13 crossposts

8 bit Workbench™ ED: explore number systems

I designed this device that teaches binary, decimal, hexadecimal and octal number systems. It uses a hands-on approach with Altair-like toggle switches. Can be used as a STEM-kit in classrooms, handy for programmers or for the retro hobbyist. It also has a built-in game. Check out the video for details, hope you like it.

youtu.be
u/8BitFlux-com — 4 days ago

Please take a look at this.

I am a middle school student who studies digital logic circuits on my own. I created a 4-bit ALU it has add, sub, and OR functions. If there are any parts I need to fix, please let me know. It's my first time uploading this, so I'm nervous haha.

u/so_student — 6 days ago
▲ 9 r/homebrewcomputer+3 crossposts

Processador do zero A VOLTA

Não sei se vocês lembram, todavia eu estava fazendo um processador do zero, se passaram muitos meses desde que abandonei este projeto, mas agora ele está mais próximo do que nunca de ser feito, eu passei estudando muito por esses meses, agora posso falar com propriedade que aprendi quase tudo de portas-logicas e etc, projetei um processador no logisim evolution, agora vou para Chips ci's discretos, dessa vez tenho sim um orçamento: 700 reais, bastante para ci's lógicos, criei uma arquitetura chamada WAR, a ALU fica no centro enquanto as outras memórias ficam em volta, com um barramento hexagonal em volta da ALU e barramentos acessórios conectando o resto para reduzir latência, agora, quero comentários e ajuda, sobre qual tipo de Ci comprar ou quais tipos de instruções usar, planejo um 8 bits na protoboard, depois um 16 bits na pcb

reddit.com
u/minecrafter2098 — 9 days ago

The TI CUBE can play Doom!

(audio on)

Four months ago I posted an announcement about a homebrew TMS 9900 microcomputer that I designed and built from scratch. I can now provide a cool new update: it can play Doom!*

Credit needs to be given to Usagi Electric's similar idea to get a Bendix G15 to "play" Doom.

* - of course it can't "play" Doom in the sense of rendering realtime 3D video! But it can play back the Doom E1M1 "At Doom's Gate" music** using a newly designed audio daughterboard based on the YM3812 FM synthesizer.

** - well, about 30 seconds of it (that's all that will fit in 32 KB of free RAM).

As before, full details can be found at my TI CUBE GitHub repository. Enjoy!

u/pchernik — 11 days ago