Close
0%
0%

eMBee ONE Pocket Computer

A 1980s style 8-bit computer running BASIC. Includes OLED screen and a QWERTY keyboard. Oh, and the whole thing fits in an Altoids tin.

Public Chat
Similar projects worth following
Back in the 80s, I used to love messing about in BASIC, writing little programs on my ZX Spectrum to amuse myself. One Christmas, I was given a CASIO FX-730P which was a pocket computer running BASIC, and so my hobby could continue on the move. Fast forward to the year 2021, and EVERYONE has a computer in their pocket. But these whizzy fast full colour ultra-connected smartphones have lost the charm of their 1980s forefathers. And so I have made it my mission to build a simple pocket computer.

My only requirements are:
- 8-bit processor
- boots into BASIC
- battery powered with good battery life (ideally rechargeable)
- include screen and QWERTY keyboard
- ability to save/load multiple BASIC programs
- fit inside an unmodified Altoids tin (no cutting into the tin)

The eMBee ONE is an easy-to-build pocket computer using off-the-shelf parts. No custom PCBs required. It currently consists of:

  • 1 × Arduino Nano v3 (or clone) Using this as the brains of the computer.
  • 1 × CardKB QWERTY keyboard Interfaces with the Arduino via I2C
  • 1 × 1.54 inch OLED SPI display
  • 1 × Adafruit PowerBoost 500C Connects Li-Po pouch battery to system
  • 1 × 24LC256 EEPROM For storing BASIC programs - 32KB of storage in fact

View all 8 components

  • It's aliiiiiive!

    Matthew Begg10/28/2021 at 22:21 0 comments

    I finished connecting the 2.42 inch OLED display to the board. One difference this time: I added a 47uF capacitor across the 3.3v and GND to hopefully stop the display from dimming. And it appears to work! 

    So the display, keyboard and BASIC are working. Currently just powered via the Nano's mini-USB socket. Still to come:

    • External EEPROM (you can see it in the pictures but I need to 'reformat' the chip before it'll work properly)
    • Buzzer (maybe switching to a flatter disc-type piezo sounder to take up less space in the tin)
    • Power circuit with LiPo
    • Possible switches for power and sound
    • Fitting it all in the tin

    So plenty to do! In the meantime, here are some images...

  • Return of the eMBee ONE

    Matthew Begg10/17/2021 at 17:55 0 comments

    Finally got back in the shed and got the eMBee ONE project back on track. Soldered the new 2.42 inch OLED display onto the (longer) ribbon cable.

    Next step will be getting it running again before assembling the new power circuit and lipo battery. 

  • All quiet at eMBee HQ!

    Matthew Begg03/22/2021 at 09:45 0 comments

    Hi all,

    Just a quick update as you haven't heard from me in a while. Since the last update, I have started to move the project to a single veroboard/stripboard design, still using an Arduino Nano module, CardKB keyboard, 24LC256 EEPROM etc. But because I've changed my mind so much in the past, I've ended up struggling to desolder various pins and wires from each module (particularly the 1.54 inch OLED and the Adafruit PowerBoost). So I thought to make it easier, I'd order another screen. Which made me debate going back to the 'big' 2.42 inch OLED or stick with the 1.54 inch. You'll remember that my previous 2.42 inch display kept dimming at random intervals. But I'm assured that isn't expected behaviour and it must've been a faulty unit. So I have reluctantly ordered another 2.42 inch display from eBay. Will take about a month to come, so not much will happen with the project until it arrives. But then it should be full steam ahead with a new final unit being prepared, and the 3D printed parts being designed. Exciting!

    Previous comments on this project have included suggestions of various features to be added, which go beyond my original vision. Let me know in the comments below if you think I've got the balance right between simplicity, nostalgia and features.

  • The first prototype!

    Matthew Begg02/19/2021 at 10:35 0 comments

    Hello world!


    Here is the first prototype of the eMBee ONE. Hand soldered, self-contained, and running from 2 x AAA rechargeable batteries. More pictures:

    A few things to note:

    • The screen is not where I wanted it to be. The idea was to have it centrally in the top lid, but I accidentally cut the ribbon cable too short, so it wouldn't reach.
    • Two switches to the right of the screen: 'PWR' connects the 'EN' and 'GND' of the Adafruit PowerBoost to act as a main power switch. 'BUZ' is to switch the buzzer off/on.
    • Fitting all those separate modules and prototyping boards into the bottom case is a tight squeeze. Future versions will definitely have the modules all on one prototyping board to make it thinner. 
    • The lid doesn't close. Partly because the screen is too far left and hits the CardKB GROVE connector, and partly because the modules are all separate and are too tall.
    • When typing, the keyboard bends in certain places as it isn't supported underneath.
    • The eagle-eyed among you will spot I forgot one connection - the VCC for the external EEPROM, so it currently can't access the 32KB of storage. However it's just a simple wire for that to work.

    Demo program


    Conclusion

    Really pleased with this first prototype - it just about proves the concept works. And, as with all good prototypes, it shows me what needs to happen next:

    • Use a custom-sized piece of prototyping board and attach the Nano, PowerBoost, EEPROM and buzzer to it. A single board will help with the space in the bottom half.
    • Use a longer ribbon cable for the display so it can be placed centrally.
    • The lid should close.
    • Once the second prototype is working, my cousin can provide the 3D printed bezel for the top, and perhaps a 3D printed support structure to stop the keyboard bending while typing.

    Let me know what you think in the comments below!

  • Project update

    Matthew Begg02/09/2021 at 14:03 0 comments

    Prototype coming soon

    So I'm pretty close to having a rough prototype working. This will use an Arduino Nano, PowerBoost 500 Basic, CardKB keyboard, SPI OLED screen, piezo buzzer and 2xAAA batteries. Hoping to get that all soldered together and working in the tin this week. My idea of using mini breadboards isn't feasible due to the size constraints of the Altoids tin.

    That then begs the question: do I encourage people to build the same thing from all those modules? Or do I create a custom PCB using an ATMega 328P chip and make a single-board version to replace the Nano and PowerBoost? 

    3D printed bezel

    My cousin has very kindly offered to design and build a 3D printed bezel to mount the OLED screen nicely in the top of the tin. Once finalised, we will make the files for that available here.

    Comments

    Thanks to everyone who has commented so far in the discussion section below. Lots of nice comments and suggestions. Some people seem to want this computer to do more. For that, I'd recommend searching hackaday.io for 'pocket computer' as there are lots of much more capable computers with SD card support, networking, better screens etc. But that's not what I'm going for here. I want a text-based 8 bit system that runs BASIC for a minimal cost. No frills. Maybe the frills will come with the eMBee TWO ;-) 

    Another commenter suggested I build my own keyboard. That's a possibility in the future (especially to make it feel nicer than the hard feel of the CardKB keyboard) 

  • Games to play on your eMBee ONE

    Matthew Begg02/04/2021 at 16:02 0 comments

    Once the eMBee ONE is released, you'll want to have some games to play on it. Despite only having a text-based display and 1KB of program memory, I think you'll be able to code quite sophisticated action games thanks to the 'POS' and 'INKEY$' commands. They allow you to position a character anywhere on the screen and take quick keyboard inputs. 

    Alternatively, lots of the printed listings in old Usborne 1980s computer books should work with minimal adjustments. And the listings in the seminal 1978 book 'BASIC Computer Games: Microcomputer Edition' should also work.

  • Benchmarking the eMBee ONE

    Matthew Begg02/02/2021 at 15:30 1 comment

    I'm interested to see how the eMBee ONE compares performance-wise with the classic 8-bit computers from the 80s. I did a quick bit of Googling to find out the best way to benchmark old 8-bit computers, and found two interesting methods:

    The 'N-queen' chess problem - website

      10  CLEAR         
      20  R=8: X=0: S=0                     
      30  DIM A(R)             
      40  IF X=R THEN GOTO 180         
      50  X=X+1
      60  A(X)=R
      70  S=S+1
      80  Y=X
      90  Y=Y-1
     100  IF Y=0 THEN GOTO 40
     110  T=A(X)-A(Y)
     120  IF T=0 THEN GOTO 140
     130  IF X-Y<>ABS(T) THEN GOTO 90
     140  A(X)=A(X)-1
     150  IF A(X)<>0 THEN GOTO 70       
     160  X=X-1
     170  IF X<>0 THEN GOTO 140        
     180  PRINT S

    This doesn't seem to use up too much memory as it was originally used to compare programmable calculators. Even my old CASIO FX-730P (an inspiration for this project) is listed with a completion time of 7 mins 0 secs. However it uses the 'ABS' command which isn't supported in ArduinoBASIC. So first things first, I had to implement ABS in eMBee BASIC. This is my first attempt at adding to the list of commands. 

    Once that was done, I just typed in the code above, and typed RUN with a stopwatch ready. Would it beat 7 minutes for the FX-730P calculator?

    Er....yes. Result: 7 seconds! To be fair, the processor runs at 16MHz though, and this is a very efficient BASIC interpreter. But I wish I could tell my 13-year-old self that I've built a pocket computer that's 60 times faster than his!

    Prime Sieve benchmark - website

    10 W=500: DIM F(W): P=1: A=3
    20 F(P)=A: P=P+1: IF P>W THEN STOP
    30 A=A+2: X=1
    40 S=A/F(X):IF S=INT(S) THEN GOTO 30
    50 X=X+1:IF X<P AND F(X)*F(X)<=A THEN GOTO 40
    60 GOTO 20
    

    Simpler code that in theory would run on ArduinoBASIC, but results in a '10-Out of memory' error due to trying to create an array of 500 numbers in the first line! Time to beat here would have been 6 mins 28 seconds for the ZX Spectrum.

  • OLED screen swap and adding external EEPROM

    Matthew Begg02/02/2021 at 10:20 0 comments

    I've now got a fully working prototype of the eMBee ONE! It is running on breadboards with the following components:

    • Arduino Nano clone
    • 1.54 inch OLED display connected via SPI
    • CardKB keyboard connected via I2C
    • 24LC256 external EEPROM connected via I2C (32KB storage)
    • Piezo buzzer (with 100 ohm resistor) to pin 5

    The new display doesn't have the dimming bug that the previous one did, and everything seems to working well. I came across a weird bug when loading programs from the external EEPROM though. I get a 'Bad parameter' error even though it successfully loads the program. Looking at the original ArduinoBASIC code, there's a missing 'return true;' statement at the end of the routine for loading so next time I'll try adding that and see if the error disappears.

    Next steps

    Now that I've discovered that the mini breadboards are thicker than I remembered, I think I'm going back to hard soldering everything together to keep things thin. Still might be able to get one mini breadboard in the bottom part of the tin, which gives some possibility for future expansion though...

    Currently I'm powering the whole thing via Mini USB, but hopefully I'll have the Adafruit PowerBoost 500 Basic arriving in the next few days so will be able to get it running from 2 x AAA batteries and make it a true pocket computer.

    Keyboard

    Love the form factor of the CardKB, but the reality of typing on it for more than ten seconds is pretty rough. Very hard tactile switches that leave imprints in your fingertips! So need to explore the possibilities of either adding some kind of membrane or set of keycaps? Or even build a keyboard from scratch using mouse buttons (thanks to Oscarv for that tip!)?

    'Pocket computer' or 'palmtop'?

    What should I refer to this as? I first came across the term 'palmtop' when the legendary Atari Portfolio was released. That was much bigger than this though. I want to go with whichever term suggests the smallest form factor, 'pocket' or 'palm'? Let's hear your thoughts in the comments below.

  • The inspiration for this project

    Matthew Begg02/01/2021 at 15:46 0 comments

    Here is my original CASIO FX-730P pocket computer from back in the day!

    Still works!

    I can see there are 5 programs already on there with 5,247 bytes of storage free. Program 9 is the classic Horse Race game which I must’ve typed in from the original Casio manual. Place your bets!

  • Fritzing diagram

    Matthew Begg02/01/2021 at 15:31 0 comments

    Here's the current setup that's working

View all 14 project logs

Enjoy this project?

Share

Discussions

dearuserhron wrote 10/31/2021 at 22:47 point

Matthew, what do you think, can LISP be used instead of BASIC as a main program? I think LISP was created to accomplish this goal, to be bootable as an interpreter for retro-computers

  Are you sure? yes | no

Matthew Begg wrote 11/01/2021 at 11:02 point

It's definitely possible. It would need to be an Arduino-compatible sketch of a LISP interpreter. I went with BASIC simply because it was what I remember using growing up. Lots of type in listings available in magazines and books etc. But feel free to build an eMBee ONE running LISP - would be good to see different languages being supported!

  Are you sure? yes | no

teraz wrote 10/17/2021 at 21:33 point

too small screen, minimal 80 char on one line. 

is possible runing fuzix on this device?

  Are you sure? yes | no

Matthew Begg wrote 10/18/2021 at 12:41 point

The screen is only 128x64 pixels which works out at 21 characters wide by 7 characters deep. Perfect for my needs. Fuzix looks a bit complex for the hardware I'm using - I want a really bare bones circa-1980 home computer system, so the RAM is the biggest constraint with how complicated we can go. I also didn't want a general purpose OS, just a BASIC prompt which is how I remember computing as a kid. But nothing stopping people using bigger screens and more powerful processors etc.

  Are you sure? yes | no

teraz wrote 10/24/2021 at 18:51 point

fuzix can run od very simple processor esp, pico2040 zx80 etc

basic need more wide screen. This is my opinion

look this https://hackaday.io/project/169103-low-power-esp32-handheld

  Are you sure? yes | no

Matthew Begg wrote 10/28/2021 at 22:47 point

...and it's got to fit inside an Altoids tin. Open to suggestions for alternative displays with bigger resolutions that will fit (not too pricey though)

  Are you sure? yes | no

Dejan Ristic wrote 10/17/2021 at 19:59 point

Love your project! 

I saw you had plans for a 3d printed insert for holding the keyboard and such.

I did an Altoids tin project some years ago. There I made a similar insert that folds in and then snaps fit into the case. You probably wouldn't be able to use that one as is, but maybe it could be useful as a starting point for your design.

Here's the Thingiverse link for the insert: 

https://www.thingiverse.com/thing:3144520

This is the project it was used for:

https://hackaday.io/project/161396-fatcat-altoids-tin-mod-tracker

  Are you sure? yes | no

Matthew Begg wrote 10/18/2021 at 12:42 point

Thanks Dejan! Your 3D printing design will be a great starting point for me when I get to that stage. I'm going to have another 3D printed piece inside the lid that holds the screen in place too.

  Are you sure? yes | no

Matthew Begg wrote 02/09/2021 at 14:12 point

I'm absolutely thrilled that the eMBee ONE has been added to hackaday.io's 'Featured Projects' list! And I'm pleased to say it now has over 1000 views. Added pressure now to finish this!

  Are you sure? yes | no

Matthew Begg wrote 02/11/2021 at 20:36 point

  Are you sure? yes | no

Arduino Enigma wrote 02/08/2021 at 07:06 point

Are you up to the task of designing your own keyboard? An atmega 328p should have enough pins to implement the keyboard matrix circuit. Communicate the 328 running basic with the 328 scanning the keyboard using their serial ports. In order to allow the two of them being connected while keeping the bootloader on the basic cpu accessible, only switch the Tx line on the keyboard as an output when a key is pressed. 

  Are you sure? yes | no

Matthew Begg wrote 02/08/2021 at 12:09 point

That's certainly worth considering with a future revision. If you look closely on the CardKB, it actually is using a 328p already so that proves the concept works. I'd be even happier with a solution that just uses one chip though. Tricky with the limited SRAM on the 328p though.

  Are you sure? yes | no

mrmagic wrote 02/05/2021 at 17:51 point

This keyboard works pretty well! I have used it in a mini computer. I have used Raspberry Pi Zero.


Have a lot of fun! 

  Are you sure? yes | no

[deleted]

[this comment has been deleted]

Matthew Begg wrote 02/06/2021 at 23:24 point

Thanks for the suggestions, but the aim is to keep this really tiny to fit within an Altoids tin. I’m also going for a 1980s BASIC computer vibe. Might actually think about being able to save to an external cassette deck though

  Are you sure? yes | no

Matthew Begg wrote 02/08/2021 at 16:07 point

I might look at wired networking in a future revision, kinda like the ill-fated ZX NET standard that Sinclair introduced for the Spectrum. It used 3.5mm jack cables with the Interface 1 to connect up to a theoretical 64 Spectrums together. Again, on the back burner until there are at least a few eMBee ONEs to connect together.

  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