Homebrew Computers - Nakazoto/Hellorld GitHub Wiki

Hellorld! on Homebrew Computers with Known CPUs

There's nothing I love more than seeing the ingenuity and heart poured into homebrew computers - except for seeing "Hellorld!" running on said homebrews! The 6502 and Z80 processors were absolute juggernauts in the world of 8-bit processors, and they have become a favorite among homebrew builders. Check out the 6502 Homebrew page and the Z80 Homebrew page for homebrews built specifically using those processors. Entries are in alphabetical order.

Quick links:

Dburr's SBC6120 (PDP-8 Replica) Kulicheg's Omen Alpha Ksteinhaus' 68HC11 Pngwen's 1802
MC14500_6502 Tholin's 2650 Paulas DCJ11 Hack+

Dburr's SBC6120 (PDP-8 Replica)

In the late 90s, Robert Armstrong of Spare Time Gizmos designed a single board computer using the Harris HD-6120 CMOS “PDP-8 on a chip” called the SBC6120. All of the schematics and board design files are available at the link above, and it's a really cool Homebrew take on the venerable PDP-8 Minicomputer, there were even highly accurate front panels available for it. Donald Burr happens to have one of these machines and figured what better way to stretch its legs than by getting it to run "Hellorld!"

Donald actually ran "Hellorld!" in three different ways, in PAL-8 Assembly, directly input to the machine language monitor ROM (using hand assembled code), and directly input into the PDP-8 memory using the front panel switch register.

Check the video at this link to see all three running!

Code (PAL-8 assembly):

/ PDP-8 PAL ASSEMBLY LANGUAGE PROGRAM TO PRINT "HELLORLD!"
/
/ TO LOAD TO PDP-8:
/ - BOOT INTO OS/8
/ - AT "." PROMPT, TYPE "CREATE HELLO.PA"
/ - AT "#" PROMPT, TYPE "A"
/ - PASTE CONTENTS OF FILE
/ - ON A BLANK LINE TYPE <CONTROL-L>
/ - AT "#" PROMPT, TYPE "E"
/ - AT "." PROMPT, TYPE "PAL HELLO" TO ASSEMBLE
/   (OR "PAL HELLO,HELLO<HELLO/H" TO ASSEMBLE WITH LISTING)
/ - IF THERE WERE NO ERRORS, AT "." PROMPT, TYPE "LOAD HELLO/G" TO RUN

        *200                    / START ADDRESS
        AIX1=10                 / SETUP AUTOINDEX REGISTER 1

        CLA                     / CLEAR ACCUMULATOR
        CLL                     / CLEAR AC LINK
        TAD MSG                 / LOAD ADDRESS OF MSG TO PRINT (2'S COMP ADD
                                / TRANSFERS TO AC)
        DCA AIX1                / ...AND STORE IN AUTOINDEX REG 1
                                / (DEPOSIT + CLEAR ACC)

LOOP,   NOP                     / TOP OF PRINT-STRING LOOP
        TAD I AIX1              / INCREMENT INDEX REG, LOAD AC (2'S COMPLEMENT
                                / ADD INDIRECT)
        SNA                     / SKIP NEXT INSTRUCTION IF AC IS NONZERO
        JMP I [7600             / END OF STRING, RETURN TO OS
                                / NOTE: REPLACE WITH "HLT" IF ON BARE METAL
        JMS PRINT               / OUTPUT CHARACTER ON ACCUMULATOR
        JMP LOOP                / LATHER, RINSE, REPEAT

PRINT,  0                       / TTY OUTPUT ROUTINE. FIRST WORD MUST BE
                                / EMPTY (NULL) BECAUSE THE JUMP TO SUBROUTINE
                                / INSTRUCTION INSERTS THE RETURN ADDRESS HERE.
        TLS                     / WRITE ACCUMULATOR TO THE OUTPUT DEVICE (TTY)
        TSF                     / SKIP NEXT INSTR IF TTY IS READY
        JMP .-1                 / TTY IS NOT READY, CHECK AGAIN (RELATIVE JUMP)
        CLA                     / CLEAR ACCUMULATOR
        JMP I PRINT             / RETURN TO CALLER (INDIRECT JMP TO ADDRESS
                                / STORED IN FIRST WORD OF SUB WHEN CALLED)

MSG,    .                       / 1ST WORD IS ADDRESS OF STRING
        110                     / "H"
        105                     / "E"
        114                     / "L"
        114                     / "L"
        117                     / "O"
        122                     / "R"
        114                     / "L"
        104                     / "D"
        041                     / "!"
        000                     / NULL (END OF STRING)

/ *** TYPE <CONTROL-L> HERE ***

Ksteinhaus 68HC11

The Motorola 68HC11 is an 8-bit microcontroller developed in 1984 featuring an instruction set that is backwards compatible with the 6800 and the ability to be used with an internal or external program. But, this was the 1980s after all, so there is very limited internal RAM available, just 256 bytes. Still, that's enough to do some tricky things, and the HC11 is an awesome vector for a homebrew! This particular homebrew was built by Ksteinhaus back in 1995. They put the BUFFALO monitor in the internal ROM which has a built-in assembler/disassembler, and output is via RS-232 serial.

Which means, it can do the most important thing it's ever done, and that is print "Hellorld!"

Code:

Kulicheg's Omen Alpha

The Omen Alpha is a neat little homebrew single board computer as it's based on the 8085 processor. The 80C85 processor is clocked at 1.8432MHz, and the board features 32kB of RAM, 32kB of ROM, a serial interface based on the MC6850 and capable of speeds up to 115,200, three parallel ports based on the Intel 8255, and an application system bus. Kulicheg's version of the board has been equipped with the CP/M upgrade board that brings the little single board computer into a really capable state. But is it capable enough to run "Hellorld!"? You betcha!

Code:

            .ORG    8000h 
START:               
            LXI     H,MESSAGE 
            CALL    TXTOUT 
            HLT      
TXTOUT:              
            CALL    WAITOUT 
            MOV     A,M 
            ANI     07Fh
            OUT     0DFh 
            MOV     A,M 
            ANI     80h 
            RNZ      
            INX     H 
            JMP     TXTOUT 
WAITOUT:             
            IN      0DEh 
            ANI     02h 
            JZ      WAITOUT 
            RET      
MESSAGE:             
            .ISTR   "HELLORD!"

Hex:

8000	21 1F 80 CD 07 80 76 CD 17 80 7E E6 7F D3 DF 7E
8010	E6 80 C0 23 C3 07 80 DB DE E6 02 CA 17 80 C9 48
8020	45 4C 4C 4F 52 44 A1 00 00 00 00 00 00 00 00 00

MC14500_6502

My solution to this challenge involves using a 1-bit computer based on the Motorola MC14500 Industrial Control Unit (Usagi: My favorite CPU of all time!!) to generate 7-bit ASCII characters, which connects to my 6502 based computer via a 6821 Peripheral Interface Adapter (PIA). The MC14500 computer also triggers an Interrupt Request on the 6821, to which the 6502 responds with an Interrupt Service Routine (ISR). The ISR reads the data from the 6821, and saves it to the 6551 Asynchronous Communications Interface Adapter, with the ASCII character values sent to a serial display terminal.

A full description of the whole project can be found at this link!

The image below shows the MC14500 computer (breadboard based), connected to the 6502 computer.

The image below shows the MC14500 computer on breadboard with the output register LEDs indicating an ASCII code, actually uppercase H.

The image below shows the serial terminal displaying 'Hellorld!'

Pngwen's 1802 Membership Card

The 1802 Membership Card is a really cool little homebrew that is a recreation of the old Popular Elf Computer repackaged to fit in an Altoids tin. It features an 1802 microprocessor, up to 64k bytes of memory, 22 bits of I/O, clock, reset, and power supply circuits, plus a supercapacitor to maintain memory contents without power. Pengwen built up one of these membership card computers and outlined the process here, but once it was up and running, it was time to do the most important computing in the world - running "Hellorld!" Pengwen went above and beyond though and hand wrote the code for it!

More info on Pengwen's "Hellorld!" program here.

Code:

F8 00 B3 B4 E3 F8 2D A4 F8 A2 0A 35 0B 34 0D 84 A3 F8 06 A2 3C 14 64 34 17 F0 3A 1F F8
2D A3 22 82 3A 14 25 85 3A OF 14 04 32 35 30 08 48 45 4C 4C 4F 52 46 4C 44 20 20 00

Tholin's 2650

I love homebrew computers, but I love homebrew's that use weird, unconventional chips even more, and Tholin's computer is the perfect embodiment of that. At the heart of the machine is a Signetics 2650, an 8-bit microprocessor from 1975 that has some pretty weird design elements, especially when it comes to addressing. With comparatively so few of them actually made it's really awesome to see one of them being put to use in a homebrew! Tholin goes in to a lot more detail on this quirky chip and their entire homebrew system at the link below, but the real question is "Will it Hellorold!"? You bet!

More on Tholin's 2650 Homebrew here!

Code:

05 FF 0D 31 0C 14 F0 3F 97 FA 1B 76 48 65 6C 6C
6F 72 6C 64 21 0D 0A 00

Paula's DCJ11 Hack plus

Paula based this on the work of Brent Hilpert but brought the address and data bus out to a 96way connector, allowing other peripherals to be connected to the CPU as they're developed. Currently there are two PCBs, the main CPU board with UART on board and a second PCB with ROM, RAM and displays. She plans to add more cards in the future. Paula has uploaded her design files to git hub here along with examples.

Code (DCJ11 assembly):

		br 0100					; code starts at 000100 (octal)
.blkb 76

START:
		mov #MESG, r0			; the start of the message
		mov #120036,r1			; display address
		clr r3					; clr our counter

LOOP:
		mov (r0),(r1)				; move value in r0 to address held in r1
		inc r3
		dec r1
		dec r1
		inc r0
		inc r0
		cmp r3,#M_LEN
		blt LOOP
		
END:
		halt
		
MESG: .word 000110
	  .word 000145
	  .word 000154
	  .word 000154
	  .word 000157
	  .word 000162
	  .word 000154
	  .word 000144
	  .word 000041
	  .word 000040
	  .word 000040
	  .word 000040
	  .word 000040
	  .word 000040
	  .word 000040
	  .word 000040
	  
M_LEN:.word 16d						; message is 16 characters long

⚠️ **GitHub.com Fallback** ⚠️