Martin Maly
Published © CERN-OHL

OMEN Bravo

An easy as possible, but still expandable, single-board computer with 65C02 CPU.

AdvancedWork in progress12 hours2,640
OMEN Bravo

Things used in this project

Hardware components

65C02
×1
62256
×1
Microchip AT28C256
×1
Texas Instruments 74HCT00
×1
6551
×1
pinheader
×1
Texas Instruments 74HCT138
×1
3.6864 MHz crystal
×1
1.8432 MHz crystal
×1
Capacitor 22 pF
Capacitor 22 pF
×2
Capacitor 100 nF
Capacitor 100 nF
×6
Pushbutton switch 12mm
SparkFun Pushbutton switch 12mm
×1
Capacitor 10 µF
Capacitor 10 µF
×1
1N4007 – High Voltage, High Current Rated Diode
1N4007 – High Voltage, High Current Rated Diode
×1
Resistor 10k ohm
Resistor 10k ohm
×3
Resistor 330 ohm
Resistor 330 ohm
×1

Software apps and online services

ASM80.com

Hand tools and fabrication machines

JLCPCB.com

Story

Read more

Schematics

Full Schematics, issue 4

Full Schematics, issue 2

GitHub repository

Code

Hello world...

Assembly x86
            .ORG    0x0000 
            .PHASE  0xc000 
                    ;org 0xc000
            .ENGINE bravo 

NIO0        EQU     $8000 
NIO1        EQU     $9000 
NIO2        EQU     $8800 
NIO3        EQU     $9800 
NIO4        EQU     $8400 
NIO5        EQU     $9400 
NIO6        EQU     $8C00 
NIO7        EQU     $9C00 

ACIA_BASE   EQU     nIO0 

SDR         EQU     ACIA_BASE 
SSR         EQU     ACIA_BASE+1 
SCMD        EQU     ACIA_BASE+2 
SCTL        EQU     ACIA_BASE+3 

SCTL_V      EQU     00011111b 
SCMD_V      EQU     00001011b 
TX_RDY      EQU     00010000b 
RX_RDY      EQU     00001000b 


RESET:              
            SEI     
            CLD     
            LDX     #$FF 
            TXS     

                    ;serial init
            LDA     #SCTL_V 
            STA     SCTL 
            LDA     #SCMD_V 
            STA     SCMD 

MAIN:       LDA     #<hello 
            STA     zp_str 
            LDA     #>hello 
            STA     zp_str+1 
            JSR     strout 

            JSR     delay 
            JMP     main 

GETSER:     LDA     SSR ; look at serial status
            AND     #RX_RDY ; see if anything is ready
            BEQ     GETSER ; busy-wait until character comes in!
            LDA     SDR ; get the character
            RTS     

                    ; Write the character in A as ASCII:
PUTSER:     STA     SDR ; write to transmit register
WRS1:       LDA     SSR ; get status
            AND     #TX_RDY ; see if transmitter is busy
            BEQ     WRS1 ; if it is, wait
            RTS     

STROUT:     LDY     #0 
STROUT1:    LDA     (zp_str),y 
            BNE     strout2 
            RTS     
STROUT2:            
            JSR     putser 
            INY     
            JMP     strout1 


DELAY:      LDX     #200 
DELAY2:     LDY     #0 
DELAY1:     DEY     
            BNE     delay1 
            DEX     
            BNE     delay2 
            RTS     

            .ORG    0xc0fc 

HELLO:      .CSTR   "OMEN Bravo v.1.0",$0d,$0a 

            .ORG    0xfffa 
            DW      reset 
            DW      reset 
            DW      reset 

                    ; zero page
ZP_BASE     EQU     $f0 
            .ORG    zp_base 

ZP_STR:     DS      2 

GitHub repository

Credits

Martin Maly

Martin Maly

4 projects • 9 followers
Old computer lover.

Comments