Frankenstein UART Board #Serial #Homebrew
Another creation. Uses the 1854 UART in Mode 1. IO Group 02. OUT4: configure interval counter OUT5: set interval counter initial count. OUT7: set UART control register. IN7: read UART status register. OUT6: send byte. IN6: receive byte. /EF2 is /DA /EF3 is /THRE Uses a 3.6864 MHz oscillator to derive baud rates of 300,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200. I have tested the 115200 but at that speed with Frankie running at 4MHz I had to add some delay in the program to prevent overrun. Very fun to build. 2k EEPROM programmed to control the UART and the programmable interval timer control lines. A 74HC138 decodes the N lines to set one of six utilized ports as an address to the EEPROM. The 82C54 is in itself an interesting little chip. I use mode 3. The 1854 can be found at Jameco. Mine is date stamped 745. Yes I cheated slightly by using a FTDI chip for USB connection to my home computer. It is connected to TX RX /CTS and /RTS on the 1854. Frankie’s main board IO for data display, keypad and video on/off was converted over to IO GROUP 01. Jeff
|
|
cmdrcosmac
GOOD GOD!!!
That is impressive. You should send a picture of Frankie to Ben Eater. I got some of Jameco's 1854's myself. Also marked 745. These look like New Old Stock. Just like in the early 80's when my old employer bought loads of COSMAC stuff for a product we made. Those were the days... What monitor or other software will you be using with the UART? I am trying to adapt IDIOT to the UART. -Chuck
|
|
Chuck, Thank you! Regarding your question about what monitor I might run and IDIOT.... I was going to start out by writing my own home brew monitor just to get my fingers loosened up on the nuances of UART. IDIOT is certainly an option. I’ll try and locate the source code and read up on it over the weekend. Jeff
|
|
Martin Heermance
Wow! I love it. Don't sneeze or a wire might get knocked loose and finding which one would be a heck of a challenge.
On Thu, Oct 3, 2019 at 12:09 AM Jeff Truck <jeff.truck@...> wrote:
|
|
Thanks Martin! This is why I have gotten good at soldering up strip boards. So many ideas in my head right now. Frankie is going to get a haircut as I have sneezed in the past and the mystery begins. Will move more and more to strip boards. Unfortunately there are only 24 hours in the day. Jeff
On Thu, Oct 3, 2019 at 6:32 AM Martin Heermance <mheermance@...> wrote:
|
|
bill rowe
good lord - what a wonderful thing. Congrats.
From: cosmacelf@groups.io <cosmacelf@groups.io> on behalf of Jeff Truck <jeff.truck@...>
Sent: October 3, 2019 12:08 AM To: cosmacelf@groups.io <cosmacelf@groups.io> Subject: [cosmacelf] Frankenstein UART Board Another creation. Uses the 1854 UART in Mode 1. IO Group 02.
OUT4: configure interval counter
OUT5: set interval counter initial count.
OUT7: set UART control register.
IN7: read UART status register.
OUT6: send byte.
IN6: receive byte.
/EF2 is /DA
/EF3 is /THRE
Uses a 3.6864 MHz oscillator to derive baud rates of 300,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200. I have tested the 115200 but at that speed with Frankie running at 4MHz I had to add some delay in the program to prevent overrun.
Very fun to build.
2k EEPROM programmed to control the UART and the programmable interval timer control lines. A 74HC138 decodes the N lines to set one of six utilized ports as an address to the EEPROM. The 82C54 is in itself an interesting little chip. I
use mode 3.
The 1854 can be found at Jameco. Mine is date stamped 745.
Yes I cheated slightly by using a FTDI chip for USB connection to my home computer. It is connected to TX RX /CTS and /RTS on the 1854.
Frankie’s main board IO for data display, keypad and video on/off was converted over to IO GROUP 01.
Jeff
-- Bill Rowe Olduino - an arduino for the first of us https://olduino.wordpress.com/about-2/about/
|
|
cmdrcosmac
Jeff,
The common monitors seem to be IDIOT and MCSMP. Both should be available,(or pointers thereto) on Herb's Retrotechnology website. Bear in mind that an 1802 system can program a 28xx EEPROM with no hardware other than address mapping. You just use a Monitor to block-move the code into the EEPROM in 64-byte chunks. You're doing the block-write instead of the byte-write routine. As long as the CPU clock and the timing of the move routine in the Monitor satisfy the chip's block-write timing thes will work. I wrote a routine on a PC that does multiple block-moves of 64 bytes from RAM to EEPROM, calculating the source and destination addresses and sends commands to IDIOT. It pauses about 200 Ms. between chunks. This used IDIOT with the 3-MHz (colorburst) CPU clock. The clock is not critical as long as it's in-spec for the EEPROM. How to "get it in" in the first place?? That is an issue all Elf wranglers face. On the Retrotechnology site are a few suggestions, most will need extra hardware and something on a PC to send the code to some kind of loader which is toggled into the Elf. Chuck Yakym and David Madole have done work in this area. It would be nice if someone would make available a programmed (E)EPROM with a monitor, to get a user started. I suggest IDIOT because it is object-relocatable, easy to use, and historically relevant. Once you have IDIOT you can load anything else. -Chuck
|
|
cmdrcosmac
It's been dead around here...
I now have a working adaptation of IDIOT for use with a UART. The mods are simple. They poll the UART status register 'till a byte comes in or the transmitter register is empty, then do an I/O to the data register. First,the equates for the I/O are defined... 0000 ; 0067 .. I/O 0000 ; 0068 .. 0000 ; 0069 UCTRL= #03 .. UART CTRL/STATUS REGISTER 0000 ; 0070 UDATA= #02 .. UART DATA REGISTER 0000 ; 0071 GSEL= #07 .. SYSTEM I/O GROUP SELECT REGISTER (ADDED HARDWARE) 0000 ; 0072 UGRP= #01 .. I/O GROUP CONTAINING THE UART Next, the Group register and the UART control register are initialized. 0000 ; 0088 .. HRJ for Membership Card 0000 71; 0089 RESET: DIS .. DISABLE INTERRUPTS 0001 00; 0090 ,#00 0002 6701; 0091 OUT GSEL ,UGRP .. SETUP I/O GROUP 0004 6313; 0092 OUT UCTRL ,7N1 .. 7 BITS DATA, NO PARITY, 1 STOPBIT The READ patch is placed... Note the reader control code commented out. Note the BR BZ, the ORG statement, and the BZ label. This is so the original code stays where it was. 0148 ; 0343 .. LSNZ .. IF TTYRED, 0148 ; 0344 .. OUT 7 .. TURN READER ON 0148 ; 0345 .. ,#80 0148 ; 0346 .. 0148 ; 0347 .. UART INPUT CODE HERE 0148 ; 0348 .. 0148 E2; 0349 SEX SP 0149 6B; 0350 KEY1: INP UCTRL .. GET DA BIT FROM 014A F6; 0351 SHR .. UART STATUS BYTE 014B 3B49; 0352 BNF KEY1 .. WAIT 'TILL DATA AVAIL. 014D ; 0353 .. 014D 12; 0354 INC SP 014E 6A; 0355 INP UDATA .. GET DATA 014F 52; 0356 STR SP 0150 62; 0357 OUT UDATA .. ECHO 0151 22; 0358 DEC SP 0152 BF; 0359 PHI ASCII 0153 22; 0360 DEC SP 0154 3079; 0361 BR BZ 0156 ; 0362 0156 ; 0363 ORG= (RESET + #0179) .. CONTINUATION OF ORIGINAL CODE 0179 ; 0364 .. 0179 3243; 0365 BZ: BZ READ2 .. REPEAT IF 00=NULL .. (Original code continues) The TYPE patch is placed. as above, a branch instruction and an ORG statement keep things where they belong. 01BE F80B; 0455 TY2: LDI #0B .. ELSE SET CODE=BYTE, 11 BITS 01C0 AF; 0456 TY3: PLO ASCII .. SAVE CODE BYTE 01C1 ; 0457 01C1 ; 0458 .. 01C1 ; 0459 .. BEGIN SERIAL OUTPUT (DELAY + 44 MACHINE CYCLES PER LOOP) 01C1 ; 0460 .. NO DELAY ANYMORE, THE CODE BELOW DRIVES THE UART. 01C1 ; 0461 .. 01C1 ; 0462 01C1 E2; 0463 BEGIN2: SEX SP 01C2 6B; 0464 INP UCTRL .. Check UART ready. 01C3 FE; 0465 SHL 01C4 3BC1; 0466 BNF BEGIN2 01C6 ; 0467 .. 01C6 12; 0468 OUTPUT: INC SP 01C7 8D; 0469 GLO D 01C8 52; 0470 STR SP 01C9 62; 0471 OUT UDATA .. Send character from stack. 01CA 22; 0472 DEC SP 01CB 22; 0473 DEC SP 01CC 8F; 0474 GLO ASCII 01CD FF0B; 0475 SMI #0B 01CF AF; 0476 PLO ASCII 01D0 30DD; 0477 BR NXCHAR 01D2 ; 0478 .. 01D2 ; 0479 ORG= (RESET + #01DD) .. CONTINUATION OF ORIGINAL CODE 01DD ; 0480 .. 01DD 8F; 0481 NXCHAR: GLO ASCII .. GET CODE BYTE; .. (Original code continues) Then TIMALC and DELAY can be removed. Then patch the SEP instruction so you go straight to the monitor. 00BD B3; 0249 PHI 3 .. CALL TIMALC; IT RETURNS WITH "SEP R5", 00BE ; 0250 .. SEP 3 .. SO IT WILL RETURN TO "ENTRY" 00BE D5; 0251 SEP 5 .. Straight to Monitor. The SEP 3 originally went to TIMALC, which then did a SEP 5, and went to the Monitor. We now do a SEP 5, straight to the Monitor. Note that Jeff's hardware uses the flags to sense the /DA and /THRE, whereas this code reads the UART status register shifts, and branches on the DF. THis way, Mode 1 is utilized, and the flags are freed up. All the original ORG statements are left unchanged. If you try this, let us know how it works. -Chuck
|
|
thinkpast
On Thu, Oct 3, 2019 at 05:01 PM, cmdrcosmac wrote:
http://www.retrotechnology.com/memship/mship_binloader.html covers in excruciating detail, the business of a "binary loader" that can be toggled into a COSMAC's RAM, to read EF3 serial data. Then one can load some monitor through a serial or USB to serial port. It's about 30 bytes of loading code; kinda tedious, but you knew that going in, right? ;) If you need to build a serial hardware interface, that's covered in a number of documents on my Web site; an index to them is linked-to as "hardware" on the "binloader" Web page. For the most part, however, most COSMAC owners replicate and burn a ROM from some COSMAC product and run that, with the serial interface of that product. So there's not been much development of toggle-in serial loaders over the last several years. (Parallel or Arduino loaders have had some development. Web search is your friend to find those; even on my Web site.) USB-to-serial dongles, have become cheap and usable under various "pee-cee" operating systems. I cover them too, on my Web site. Web search will find content on my site, if you add the phrase "site:retrotechnology.com" Regards, Herb Johnson
|
|
ajparent1/kb1gmx
First that board bis both a horror and beautiful. ;)
The horror is that troublshooting a loose wire is likely unfun. That and for many years it was told you must use short leads and watch for crosstalk... But the color and diversity of wires is art. Also a reflection of patience. Plan A, use Arduino: My approach to buttons and switches is elsewhere but one adopted is using a common Arduino Nano as a loader host. While I may tire and grump about finger pain of pushing buttons the Arduino will do it for me willingly. Since there is enough flash in the Arduino I can have it load the serial binload, tbx, or whatever. Why do that? More people can program (as in insert code into the flash) an Arduino with ease (free software and the nano or uno has programming port). WHere programming a 2716 (if you have them) or any other part (2732,2764, and EEprom parts) requires a more specific programmer or homebrew hardware. Where a low cost nano has it and all you need is a USB to microUSB cable and the free Arduino IDE. That and it replaces the switches! It is set up as 8bits of port as binary output and a few single pins to push the load (DMAin) and load mode. The nice part is unlike EPRom the loaded code is not resident so problem of address conflicts with eproms are avoided. Allison
|
|
somaspack
For me an EPROM programmer is a required tool. I highly recommend "mcumall dot com" and their 'true USB Willem' EPROM/EEPROM programmer for $95. I've had one of these for near a decade and it works great - programs dang near anything on the planet from 2716 up.
Scott
|
|
Allison, Regarding your comment on loose wires with Frankie. Yes - they pop up from time to time and I have to deal with that when it happens. It helps to have super accurate mapping documents which I maintain on record just in case. The UART and Video boards utilize strip boards for which the wires and sockets are all soldered. No loose wires in this case. Since these functions came later in Frankie's life I have learned from the burn of using breadboards hence the usage of strip boards. As additional circuits on the breadboard mature, they will be converted over to strip board as well. I have two major projects planned for Frankie and they will also be strip board. Thank you regarding your comments on the wire colors and work of art. It does indeed look colorful. I tried to keep colors grouped based on origination points. The art effect just comes around naturally. Jameco has certainly had a good year of sales when it comes to wire thanks to me. Jeff
|
|
ajparent1/kb1gmx
RE: Eprom programmers.
the problem is I have 4 of them, one lives on S100 bus and can do any 27xxx part thats handy for a lot of parts even programming 8755 and 8748/9. Another requires a PC with parallel port and old Winders (98 and maybe XP) , Fortunately I have a box for that. A stand alone Kontron that can only do 2708 and 2716, and a Arduino USB serial gadget made for 27C256. I have nothing that is for linux and USB save for the Arduino based quickie unit. And I've generally move to 28xxx parts EEPROM and flash so one off programmers are generally the rule now. Arduino makes that fairly easy. Allison
|
|