Line: 1 to 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Raspberry Pi Interface to Cosmac Elf
Intro
The Unix philosophy emphasizes building simple, short, clear, modular, and extensible code that can be easily maintained and repurposed by developers other than its creators. The Unix philosophy favors composability as opposed to monolithic design.
This is a good opportunity to merge old SBC technology (COSMAC Elf e.g. Elf Membership Card) with a new one (Raspberry Pi and GNU/Linux). If you are new to GNU/Linux get involved! I have always admired the UNIX philosophy, I hope this project achieves some of these UNIX goals.
elf2bin (download tool)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Changed: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
< < |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> > |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
elf (command line tool)
elfdisplay (controls hex-display and hex-keypad)
/etc/rc.local :
# RaspiElf Tools init # ------------------- printf "Upload BASIC3 to membership card\n" bin2elf -s 8000 /home/pi/elf/basic/MCSMP20J.bin printf "Upload knightrider to membership card\n" bin2elf /home/pi/elf/RaspiElf/chase/knightrider.bin #printf "Start BASIC\n" #bin2elf /home/pi/elf/basic/LBR_8000.bin printf "Start ElfDisplay\n" elfdisplay /dev/input/by-id/usb-046a_0014-event-kbd & How to get and build the RaspiElf toolsGet the source from the GIT repository (if you have not installed GIT yet, then install it withsudo apt-get install git ), type only the bold text after the $ sign:
pi@cosmac:~/elf $ git clone https://github.com/spyren/RaspiElf Cloning into 'RaspiElf'... remote: Counting objects: 68, done. remote: Compressing objects: 100% (37/37), done. remote: Total 68 (delta 32), reused 62 (delta 29), pack-reused 0 Unpacking objects: 100% (68/68), done. Checking connectivity... done. pi@cosmac:~/elf $Build (compile) from the sources: pi@cosmac:~/elf $ cd RaspiElf pi@cosmac:~/elf/RaspiElf $ cd tools/ pi@cosmac:~/elf/RaspiElf/tools $ make cc -g -c elf2bin.c cc -g -c raspi_gpio.c cc -g -o elf2bin -lwiringPi elf2bin.o raspi_gpio.o cc -g -c bin2elf.c cc -g -o bin2elf -lwiringPi bin2elf.o raspi_gpio.o cc -g -c elf.c cc -g -o elf -lwiringPi elf.o raspi_gpio.o pi@cosmac:~/elf/RaspiElf/tools $Install the binaries into /usr/local/bin
pi@cosmac:~/elf/RaspiElf/tools $ sudo make install install -m 557 elf2bin bin2elf elf /usr/local/binInstall wiringPi (GPIO Interface library for the Raspberry Pi), details see http://wiringpi.com/download-and-install/ Enable the I2C interface @cosmac:~/elf/RaspiElf/tools $ sudo raspi-config Sample sessionType only the bold text after the $ sign. Initialise the Elf memory with 00H (32 Kib):pi@cosmac:~/elf/RaspiElf/chase $ bin2elf -e 7fff </dev/zero 0x8000 bytes writtenUpload and run the chase lighting program (details see ChaseLighting): pi@cosmac:~/elf/RaspiElf/chase $ bin2elf -w -r chase.bin 0x002d bytes writtenStop the program an go into the load state: pi@cosmac:~/elf/RaspiElf/chase $ elf load 01 1 0 0 1 1 0 0cHexdump the Elf memory until address 0x3f (hexdump is standard UNIX tool and is included in Raspbian and other GNU/Linux'): pi@cosmac:~/elf/RaspiElf/chase $ elf2bin -e 3f | hexdump -C 0x0040 bytes read 00000000 c0 00 03 e3 90 b3 f8 30 a3 f8 01 53 64 6c 23 fa |.......0...Sdl#.| 00000010 fe 3a 1a f0 f6 c7 f8 80 30 1f f0 fe c7 f8 01 53 |.:......0......S| 00000020 f8 14 b2 22 92 3a 23 c5 7a 38 7b 30 0c 00 00 00 |...".:#.z8{0....| 00000030 04 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040Get the mode and the data (LEDs and swiches) pi@cosmac:~/elf/RaspiElf/chase $ elf 02 1 1 0 1 1 1 ff pi@cosmac:~/elf/RaspiElf/chase $ elf -v LED:01 Q:1 Rx:1 IN:0 WAIT:1 CLR:1 READ:0 SWITCH:0cWrite enable (not READ) pi@cosmac:~/elf/RaspiElf/chase $ elf -n read 02 1 1 0 1 1 0 ffRun mode (starts the chase lighting again) pi@cosmac:~/elf/RaspiElf/chase $ elf runPut 0000'0000B to the switches (chase LEDs from right to left) pi@cosmac:~/elf/RaspiElf/chase $ elf put 0 40 1 1 0 0 0 0 00Put 1000'0000B to the switches (chase LEDs from left to right) pi@cosmac:~/elf/RaspiElf/chase $ elf put 80 10 1 1 0 0 0 0 80Get the mode and data while the program is running (LEDs and Q are changing) pi@cosmac:~/elf/RaspiElf/chase $ elf -v LED:40 Q:1 Rx:1 IN:0 WAIT:0 CLR:0 READ:0 SWITCH:80 pi@cosmac:~/elf/RaspiElf/chase $ elf -v LED:02 Q:0 Rx:1 IN:0 WAIT:0 CLR:0 READ:0 SWITCH:80 Start BASIC3 without EPROMThere are BASIC3, Tiny BASIC, and Chuck's Super Monitor EPROM binaries on Lee Hart's The COSMAC ELF Membership Card http://www.sunrise-ev.com/membershipcard.htm website for his famous Membership Card. I have got some old 27C256 EPROMs but no programmer nor eraser. But the MSC needs to have 64 KiB RAM, the standard 62256 RAM in the U2 socket and the CY7C199 (or IDT71256) soldered in U8. First of all you need a serial console (terminal program) to communicate with the Elf. I prefer to usemicrocom (minicom or putty are good alternatives)
pi@cosmac:~/elf/basic $ sudo apt-get install microcomThe Raspberry Pi UART is used as console (default setting). Change this with raspi-config :
pi@cosmac:~/elf/basic $ sudo raspi-configSelect option 5, Interfacing options, then option P6, Serial, and select No for Would you like a login shell to be accessible over serial? and select Yes for Would you like the serial port hardware to be enabled? . Exit raspi-config. Reboot Raspi now. Add user pi to the tty group (give user pi the right to write to /dev/ttyS0 ):
pi@cosmac:~/elf/basic $ sudo usermod -a -G tty piGet the binary from The COSMAC ELF Membership Card http://www.sunrise-ev.com/membershipcard.htm pi@cosmac:~/elf/basic $ wget http://www.sunrise-ev.com/MembershipCard/MCSMP20J.bin ... 2017-12-26 23:08:09 (140 KB/s) - 'MCSMP20J.bin' saved [32768/32768] pi@cosmac:~/elf/basic $Upload the EPROM binary to the Membership Card at starting address 0x8000: pi@cosmac:~/elf/basic $ bin2elf -s 8000 MCSMP20J.bin 0x8000 bytes writtenGet the binary for LBR 8000 from my site:
pi@cosmac:~/elf/basic $ wget http://spyr.ch/twiki/pub/Cosmac/RaspiElf/LBR_8000.bin ... 2017-12-26 23:49:28 (102 KB/s) - 'LBR_8000.bin' saved [3/3] pi@cosmac:~/elf/basic $ ls -l total 36 -rw-r--r-- 1 pi pi 3 Dec 26 22:51 LBR_8000.bin -rw-r--r-- 1 pi pi 32768 Dec 13 17:59 MCSMP20J.binStart from address 0x8000: pi@cosmac:~/elf/basic $ bin2elf -w -r LBR_8000.bin 0x0003 bytes writtenStart the serial console and connect to the Membership Card pi@cosmac:~/elf/basic $ microcom -s 9600 connected to /dev/ttyS0 Escape character: Ctrl-\ Type the escape character followed by c to get to the menu or q to quit Membership Card's Serial Monitor Program Ver. 2.0 Enter "H" for Help. >N C RCA 1981 BASIC3 V1.1 C/W? C READY :PRINT "Hello Raspberry Pi" Hello Raspberry Pi READY :For other than US keyboards you can use Ctrl-4 instead of Ctrl-\. Remote access the Elf Membership Card with a GNU/Linux PC and SSH (or a Windows PC and PUTTY): psi@homer:~> ssh -l pi -X 192.168.1.111 pi@192.168.1.111's password: The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Jan 2 15:53:08 2018 from homer.home pi@cosmac:~ $ cd elf/basic/ pi@cosmac:~/elf/basic $ bin2elf -w -r LBR_8000.bin 0x0003 bytes written pi@cosmac:~/elf/basic $ microcom -s 9600 connected to /dev/ttyS0 Escape character: Ctrl-\ Type the escape character followed by c to get to the menu or q to quit Membership Card's Serial Monitor Program Ver. 2.0 Enter "H" for Help. >If your ISP supports DMZ, static IP addresses, port forwarding and dynamic DNS you have remote access to your Elf from everywhere. RCA 1802 BASIC level 3 ver. 1.1 User Manual Wiring
Bill of materials
Cable
Comments
|