Topics

Frankenstein UART Board #Serial #Homebrew

Jeff Truck
 

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

Jeff Truck
 

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:
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

Jeff Truck
 

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:
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.


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:


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
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

Jeff Truck
 

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