• Please review our updated Terms and Rules here

CDOS and TU-ART serial board drivers

Without the PRI board:
pin 20 is 3.5 volts.
pin 70 is 0 volts
It seems that pin 70 is already grounded - likely at the IMSAI front panel itself which (unlike the Altair front panel) does not make use of this signal.
Pin 20 is connected to a pullup resistor at the IMSAI front panel, and at the measured value of 3.5v in your system it easily meets the requirements for logic level "1".

What I expect you are going to find is the PRI board itself is grounding pin 20, thus disabling your front panel.

Unrelated.... there is a Thinkertoys "Wunderbuss" backplane installed in your IMSAI, which has active bus termination circuitry:
 
Last edited:
The panel responds after taping pins 20 and 70.
For a permanent fix:
the 2 pins are connected with a via and then to the ground plane of the board.
I would assume I need to disconnect these pins from each other.
My proposed modification would be to use a razor and cut the traces between the pin contact and before the via, right as the contact is covered by silk screen.
I don't think tape is a long term solution.
 
The panel responds after taping pins 20 and 70.
For a permanent fix:
the 2 pins are connected with a via and then to the ground plane of the board.
I would assume I need to disconnect these pins from each other.
My proposed modification would be to use a razor and cut the traces between the pin contact and before the via, right as the contact is covered by silk screen.
I don't think tape is a long term solution.
Yes - since the trace that is grounding pin 20 on the PRI board is easily accessible, the procedure you describe will work as a simple method for implementing a "permanent" fix.

Keep this issue in mind if in future you add additional "newer" Cromemco boards to your system. Your ZPU and 4FDC don't have this problem, since they were manufactured when the Altair and IMSAI were still being widely used. LIkely most of the boards Cromemco subsequently manufactured were designed to follow the IEE696 standard with the assumption they would end up in newer "business" systems or more often in systems of their own design, and backwards compatiblity with the IMSAI was not a design consideration.
 
Last edited:
I can install the card and the computer boots but I have not been able to send anything to the printer.
I have also realized that although I was using cdos 2.58, I was using programs from earlier versions that do not have all the features needed to do some things.
I am learning about STAT.COM and I am in the process of rounding up the software needed to compile drivers for CDOS.
I have read I need the Cromemco MASM disk which has the driver files.
I will rebuild cdos with the TUART address and printer address and report back if I can get this beast running.
 
I have some more questions about the TUART:
In the manual it shows CTS on pin 8 and DSR(RTS I assume) on pin 6.
My cable has these set to pins 4 and 5 but the voltages just float at 3.5 volts, I never see them change.
Reading through the manual they do not mention flow control.
The status and command registers let you see if the buffer is full, over run, and set interrupt but nothing about setting CSR/CTS.
I have not been able to find any examples of using software flow control with the TUART.
The manual also shows an example of the serial cable to use, and it is just Rx,Tx and Ground.
Another problem is the carriage return and line feed. A carriage return shows as a '-' dash and a line feed as *. I don't think tabs come across correct either.
Ctrl+j and Ctrl+m work for CR and LF. maybe I need to find a better program other than minicom, (yet getty does the same thing).
Does this board provide the mechanisms for hardware flow control? Any advice on flow control with this board would be great.
Maybe someone could explain character mapping. I am not sure where I should configure it.
My terminal is a Televideo 920b which I don't think that makes any difference (it works great with CDOS, word star)
I am using Kermit 411 that seems to work properly. I cannot get file transfers to work. kermit just hangs waiting to start receiving a file. I have tried gkermit and minicom with kermit transfer mode on linux to send files.

Thanks for all the help. This forum and the people on it have helped me make huge progress and I appreciate it.

p.s. I changed my mind. Word Star looks horrible:
IMG_20240118_211639487_HDR.jpg
 
Last edited:
I have some more questions about the TUART:
In the manual it shows CTS on pin 8 and DSR(RTS I assume) on pin 6.
My cable has these set to pins 4 and 5 but the voltages just float at 3.5 volts, I never see them change.
Reading through the manual they do not mention flow control.
The status and command registers let you see if the buffer is full, over run, and set interrupt but nothing about setting CSR/CTS.
I have not been able to find any examples of using software flow control with the TUART.
The manual also shows an example of the serial cable to use, and it is just Rx,Tx and Ground.
Another problem is the carriage return and line feed. A carriage return shows as a '-' dash and a line feed as *. I don't think tabs come across correct either.
Ctrl+j and Ctrl+m work for CR and LF. maybe I need to find a better program other than minicom, (yet getty does the same thing).
Does this board provide the mechanisms for hardware flow control? Any advice on flow control with this board would be great.
Maybe someone could explain character mapping. I am not sure where I should configure it.
My terminal is a Televideo 920b which I don't think that makes any difference (it works great with CDOS, word star)
I am using Kermit 411 that seems to work properly. I cannot get file transfers to work. kermit just hangs waiting to start receiving a file. I have tried gkermit and minicom with kermit transfer mode on linux to send files.

Thanks for all the help. This forum and the people on it have helped me make huge progress and I appreciate it.
The "out of the box" implementation of CDOS does not implement flow control on any serial port. The code needs to be within either the application software, else it is up to the user to write the code to support it within CDOS. See the CDOS manual section titled "CDOS I/O Drivers" and its description of how to customize and use the DRIVERS.Z80 file with CDOS. Character mapping can be implemented in there as well if necessary.

I don't know if you are aware of this but in the case of Wordstar - that application (not CDOS) must be customized with the cursor control codes specific to the make/model of terminal you are using, otherwise you will see the messed up screen of characters shown in your screen shot.
 
Last edited:
I tried assembling driver.z80 and received 24 errors and after cdosgen it doesn't work.
I am using the drivers.z80 from deramp ASMB
Is this the right drivers.z80 to use? I am finding there is a huge difference between software versions and it is hard to find the right stuff to use.
If someone could verify that this drivers.z80 should work with CDOS 2.58
Or if someone has the good drivers.z80 they know works.
Thanks!
 
>>> I am finding there is a huge difference between software versions and it is hard to find the right stuff to use.

This is the problem with computer archeology!

Could you post a few examples of the errors you are getting?

If you get assembler errors, there is no point in using the resultant object file(s)...

Dave
 
The only thing changed in drivers.z80 is changing the terminal type to ADM:
; At least one of the following three names MUST be TRUE to prevent errors:
C3102 EQU TRUE ; Cromemco Model-3102 Terminal < changed to false
C3101 EQU FALSE ; Cromemco Model-3101 Terminal
ADM3A EQU FALSE ; TRUE to include ADM-3A CRT driver < changed to true
My TUART serial is at port 20h
the PRI card is at 54h
This looks correct so I did not change anything.
Since I am not changing these ports it would make one think that this is the default and CDOS should already be this way. From what I have read that is implied to be the case. I am hoping compiling these drivers will make the PRI card work. (TUART seems to work albeit no flow control).
Attached is the output from asmb mydriver.bbx hex=0
Let me know if you want to see what is in the hex files, or I can run asmb and output the PRN (i think) file and see what is in that
 

Attachments

  • asmb-errors.txt
    14.7 KB · Views: 2
Those errors look 'real' to me.

The error related to SUBTTL either implies that this version of ASMB does not support this pseudo opcode or the source code was written for a different assembler.

PSTATP is clearly missing from the listing file, as are the labels RINIT and RSTAT (hence these errors) implying that this is either not the full listing (not all of the pages appear to be present) or they really are missing from the source code.

Dave
 
There are 2 compilers in the Deramp folder. asmb and zasm(c). they are both the same size and produce the same errors.
I have some other compilers I can try. I figured the Cromemco assembler with the driver file would be the ones to use together.
I am also thinking this directory is for an earlier version of CDOS since the manuals are 1978-79.
The latest stuff I have found is date stamped 1981.
There are disk images for the driver disks but they are double density and I have not been successful in reading DD since they have the 128 byte start sectors I have not found definitions that work with Cromemco disks. Ever combination with 22disk has not been successful.
If someone has the known drivers.z80 and asmb utilities for CDOS 2.58 that would be great.
Can I use the z80-pack simulator (cromemcosim) to access these DD images and transfer them to another machine? I have not tried this yet but I think I have heard that is another way to access images.
It would be really cool to have the original 2 disks they talk about (FDA ASSEMBLER) that have all of this software and can go through the manual step by step. The instructions assume you have both disks and are using them in A: and B: and since I don't have that and I am using C: and B: the batch file does not work that is supposed to do everything for assembling the drivers.
I will look through more software and see if I can dig up different version of drivers.z80 and figure out the latest version of asmb to use.

A note about word-star not looking right on the terminal: After running WINSTALL and selecting the correct terminal option, it works fine.
Still no printing but that is a CDOS/drivers/address. I am working on a BASIC program that can 'bit bang' the parallel port.
 
There are 2 compilers in the Deramp folder. asmb and zasm(c). they are both the same size and produce the same errors.
I have some other compilers I can try. I figured the Cromemco assembler with the driver file would be the ones to use together.
I am also thinking this directory is for an earlier version of CDOS since the manuals are 1978-79.
The latest stuff I have found is date stamped 1981.
There are disk images for the driver disks but they are double density and I have not been successful in reading DD since they have the 128 byte start sectors I have not found definitions that work with Cromemco disks. Ever combination with 22disk has not been successful.
If someone has the known drivers.z80 and asmb utilities for CDOS 2.58 that would be great.
Can I use the z80-pack simulator (cromemcosim) to access these DD images and transfer them to another machine? I have not tried this yet but I think I have heard that is another way to access images.
It would be really cool to have the original 2 disks they talk about (FDA ASSEMBLER) that have all of this software and can go through the manual step by step. The instructions assume you have both disks and are using them in A: and B: and since I don't have that and I am using C: and B: the batch file does not work that is supposed to do everything for assembling the drivers.
I will look through more software and see if I can dig up different version of drivers.z80 and figure out the latest version of asmb to use.

A note about word-star not looking right on the terminal: After running WINSTALL and selecting the correct terminal option, it works fine.
Still no printing but that is a CDOS/drivers/address. I am working on a BASIC program that can 'bit bang' the parallel port.
I have attached a 5.25" SSSD IMD disk image of Cromemco FDA-S Z80 Macro Assembler v3.07 - is this what you are looking for?
 

Attachments

  • FDAS.IMD.zip
    43.7 KB · Views: 2
That image works. I was able to convert it using HxC to .hfe and onto the Gotek and now onto a 8" floppy. Is there a second disk?
It is still producing 1 error:
C.asmb mydriver.bbz hex=0
CROMEMCO Z80 Macro Assembler version 03.07
00EC 3A0000 0347 LD A,(CPFLAG) ; Check whether or not
*** undefined symbol ***
Errors 1
Range Count 3
End of assembly
C.

and then I did
ren myd0.hex=mydriver.hex
asmb mydriver.bbz hex=100
ren myd100.hex=mydriver.hex
cdosgen myd0.hex myd100.hex

cdosgen completed, I reboot and it worked.
I ran the command to test the printer:
stat prt:=0
type mydriver.z80 ^p <cr>

however I still cannot print. I will have to look closer at the driver.z80 and make sure everything is set right.
There are 2 green LEDs on the PRI board for the dot matrix printer. should I see these lights light up?
1 is marked enable the other marked acknowledge. I have never seen these light up. Maybe another IEE696 pin thats keeping the PRI from enabling itself?
 
That image works. I was able to convert it using HxC to .hfe and onto the Gotek and now onto a 8" floppy. Is there a second disk?
It is still producing 1 error:
C.asmb mydriver.bbz hex=0
CROMEMCO Z80 Macro Assembler version 03.07
00EC 3A0000 0347 LD A,(CPFLAG) ; Check whether or not
*** undefined symbol ***
Errors 1
Range Count 3
End of assembly
C.

and then I did
ren myd0.hex=mydriver.hex
asmb mydriver.bbz hex=100
ren myd100.hex=mydriver.hex
cdosgen myd0.hex myd100.hex

cdosgen completed, I reboot and it worked.
I ran the command to test the printer:
stat prt:=0
type mydriver.z80 ^p <cr>

however I still cannot print. I will have to look closer at the driver.z80 and make sure everything is set right.
There are 2 green LEDs on the PRI board for the dot matrix printer. should I see these lights light up?
1 is marked enable the other marked acknowledge. I have never seen these light up. Maybe another IEE696 pin thats keeping the PRI from enabling itself?
Forgot to add the second disk - see attached.

LEDs D1-D4 on the PRI board are (I think) only relevant when the PRI board is enabled to use handshaking signals from the printer to generate a CPU interrupt. Unless you are implementing an interrupt-driven printer driver, these LEDs are not of much use.
 

Attachments

  • ASMB.IMD.zip
    35.7 KB · Views: 4
Last edited:
I am reading the PRI manual and I don't understand what is going on.
On page 6 Theory of operation:
.. The least significant 4 bits (A0 through A3) of the address bus are decoded by IC16 and IC28 which supply active LOW strobes for ports 03H, 04H, 0AH, 0BH, 0CH, 0DH and ignore all others. The upper 4 address bits (A4 through A7) are decoded by IC6 on the PRI board. (The default values is 05H; ...
What are these ports they are talking about?
I though it is essential port 54H, throw data at it with bit 7 being the strobe. and INP 53 has the busy status bit.
 
Between the 2 disk images you posted I was able to get a clean assembly with no errors. that is with the unchanged drivers.z80. I need to look through it and see if the addresses are correct.
Thank you very much for those images.
 
I am reading the PRI manual and I don't understand what is going on.
On page 6 Theory of operation:

What are these ports they are talking about?
I though it is essential port 54H, throw data at it with bit 7 being the strobe. and INP 53 has the busy status bit.
The "theory of operation" section is merely explaining the design uses separate decoders for the lower 4 bits and upper 4 bits of the I/O address. All in all, this one board uses 6 output ports and 2 input ports.This is what all the ports are for:

Dot Matrix Printer Port J1
Output port 54h - Data 0-Data 6, plus output strobe
Output port 53h - Interrupt enable
Input port 54h - Busy and Acknowledge

Impact printer Port J2
Output port 5Ah - Data 0 - Data 7
Output port 5Bh - Data 8 - Data 11
Output port 5Ch - 6 different strobes (eg carriage return)
Output port 5Dh - Interrupt enable
Input port - 5Ah - 5 different printer status signals
 
After reading it a few times I began to understand how they explain it.
I have been slowly programming a BASIC script to interact with the board.
I have not been able to get output to the printer, but I have noticed I can read the input port. its 255 (decimal) when a printer is not hooked up and 245 (decimal) when something is hooked up. This tell me the card is talking a little bit (I'm sure it is operator error).
I guess I don't understand how to strobe bit 8 on output 54h. do I send a bit 8 =0 with every character, do I have to flip bit 8 on and off (toggle it)? I would assume it is pulled high, and I just send a 0 for bit 8 with every character and that is the 'strobe'?
I really appreciate the help with answering the silly questions. I do feel like progress is being made.
I am going to look through some CPM or CPMUG archives and see if I can find a printer diagnostic utility.
 
here is my test basic program:
I can see the status register, but nothing shows up on the printer:
10 Rem -----------------------------------------------------------
20 Rem cromemco pri printer board test program
30 Rem created 1/19/2024
40 Rem ---------------------------------------------------------
50 Print"I/O Port Testing program"
60 Print"2024 Chris LaFond"
70 Print"Be careful what you poke at"
80 Print
90 Print"Base address is 54h"
100 Integer Oport
120 Oport=%0054%
130 Integer Mchar
140 Rem oport is the base address or the port that is being tested
170 Text$="Hello, World!"
180 Mchar=Inp(Oport)
200 For N=1 To Len(Text$)-1
210 Myvar=Val(Text$(N))
220 Strobe=Binand(Myvar,%007F%)
340 Out Oport,Strobe
350 Next N
360 Print Mchar
370 End
 
Back
Top