Close
0%
0%

Eep Oop Ork

A cheery way to program your Arduino on the fly.

Public Chat
Similar projects worth following
Eep is a virtual cpu and blinkenlights interface for Arduino.

"Eep opp ork ah ah" means 'I love you' according to the 1962 Jetsons Cartoon episode: A Date with Jet Screamer.  I'm not really sure why I picked this name but it seemed a good fit with the hard to understand bytecode and blinky interface, as well as being cheery.

Eep Oop Ork, (pronounced the same way as in the cartoon) was inspired by the blinkenlights interfaces of the 1970's.   When I started coding this project. the PiDP/11 wasn't available yet, the modern Altair clones were several hundred dollars.

I had always disliked that the Harvard architecture of the Arduino meant that programming it on the fly wasn't possible, but I loved that it was small, low power and adaptable.

Eep was a way for me to make the Arduino programmable on the fly, have blinkenlights, and be incredibly inexpensive.

Internally Eep just provides a way to manipulate the Arduino's memory address space and includes a state machine to execute a very small set of instructions by default.  Eep is turing complete.

Eep is easy to expand, it supports up to 16 bit instructions and data. So it's possible to add a lot of custom opcodes.  Also there's nothing stopping you from creating a very complex piece of software and registering it as an opcode.

After seeing the 2022 supercon badge, and wishing I had a way to get one, I decided to revisit Eep and post it here for other people like me that dream of blinkenlights. 

eep-reference-card.ods

Sheet with all default Eep opcodes, and an overlay to cut out to help remember the purpose of the LEDs

spreadsheet - 13.38 kB - 11/15/2022 at 01:25

Download

hello.eep

Hello, World! for Eep

eep - 554.00 bytes - 11/15/2022 at 01:19

Download

eep-string-inout.asm

An example program that get's the user's name over serial, and prints it back out. It's not in Eep format, so you have to enter it by hand or convert it.

asm - 4.56 kB - 11/15/2022 at 01:17

Download

stack.eep

A subroutine/stack implementation for Eep. Store subroutine addr in 42a, where to return to in 3fe. Jump to 40c to make the subroutine call.

eep - 415.00 bytes - 11/15/2022 at 01:06

Download

eep-stringgen.c

C program to generate strings for Eep.

x-csrc - 965.00 bytes - 11/15/2022 at 01:04

Download

View all 6 files

  • 1 × Arduino
  • 1 × Breadboard Electronic Components / Misc. Electronic Components
  • 8 × Resistor for LED
  • 4 × Green LED Fiber Optics / Emitters
  • 4 × Red LED

View all 6 components

View project log

  • 1
    Hardware Setup

    Connect 8 LED's through 10k resistors to Arduino pins 2 through 9.   I use green LED's for the first 4, and red LED's for pins 6-9.

    Connect a momentary push button to the ground rail and pin 10 for the "Enter" button, another to pin 11 for the "Down" button and one to pin 12 for the "Up" button.

    If you need to remap anything, it can be changed by modifying the defines in the Arduino sketch.

    You'll also need a USB cable to connect the Arduino to your computer to flash the sketch,  as well as for interacting with Eep over the serial interface.

  • 2
    Software Setup

    The eep_oop_ork.ino sketch can be loaded using the standard Arduino IDE.   Once flashed, Eep will communicate on the Arduino's USB-Serial at 115200bps.

  • 3
    Understanding Eep's hardware buttons and blinky lights

    For this step, I'll refer to the LEDs as 0 through 7. LED 0 being the one that's connected by default to pin 2 of the Arduino and 7 being connected to pin 9.  If you get lost, check the mappings in the Arduino sketch.

    Buttons work as follows:

    Enter - Flip a bit, and toggle it's respective LED.

    Up - Change selected LED. The newly selected led will flash.

    Down - Change selected LED in opposite direction. The newly selected led will flash.

    The first set of LED's are flags to perform actions and change Eep's behavior.  The most important is the SHIFT LED in position 3.  This changes the behavior of the LED's in positions 0, 1, and 2,

    0: Next. Selecting this advances Eep to the next memory address.

    0+Shift: Hi-byte: This selects the upper 8 bits of either address or data

    1: Hi-Nybble: This selects the upper 4 bits of the selected byte.

    1+Shift: Single Step: Execute the data pointed to at the current address and increment.

    2 Address / Data: When this led is on, the address is displayed, when it's off data is.

    2+Shift: Run / Stop: When lit, program runs as fast as possible until a halt instruction or crash.

    3 Shift:  When this LED is lit, the LEDs above change their meaning.

    The second set of LEDs are either data or address.

    The lo/hi byte and lo/hi nybble flags above let you use led's 4, 5, 6, and 7 to manipulate both the 16 bit address space and 16 bit data words. LED 4 is the most significant and LED 7 is the least significant.

View all 7 instructions

Enjoy this project?

Share

Discussions

Zeb McClure wrote 11/15/2022 at 17:53 point

Nice!   Any clue what kind of bird?

  Are you sure? yes | no

Ken Yap wrote 11/15/2022 at 03:45 point

Funny, I said eep oop ork to a (feathered) bird in the park and it followed me home. 🤪

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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