" The Cro'sNest RCP/M-RBBS "
[ Remote CP/M - Remote Bulletin Board System ]
 
Cromemco LOGO
 
"Cromemco" based, S-100 micro-computer 
(
Built & Maintained by: Robert C. Kuhmann, Sysop.)
This S-100 computer was in continuous 24-X-7 operation, from 1977-to-1997
.

 

Just how advanced was S-100 micro-computing?  L-O-N-G before the advent of (dead-slow) PC's ...

Cromemco's Word Interleaved Data Exchange Bus ("WIDE-Bus") was a hosted bus that operated over the standard IEEE-696 S-100 bus. WIDE-Bus allows 32-bits of data to be transferred by utilizing interleaving techniques more commonly used on mainframe computers. The bus ran between the XXU-processor board and the 2048KZ memory board. The MC68020 processor on the XXU generates queries to memory in 32-bit data packets, It then segmented the query into two equal sized packets which it transmitted over the WIDE-Bus in a serial fashion. The 2048KZ accepted both packets of information, decodes them, and then locates the proper address in memory. Once the required data is located, the 2048KZ completed the cycle by transmitting it to the processor in dual 16-bit packets. This technique allowed Cromemco to maintain the growth path provided by the standard IEEE-696 bus, while at the same time matching the performance of systems utilizing such dedicated 32-bit buses as VME. The most widely noted implementation of this interleaving (or multiplexing) technique was on DEC's MicroVAXII. DEC's Q-Bus is a 16-bit bus which can transmit data in 32-bit segments using similar interleaving techniques as those implemented by Cromemco.

The implementation of WIDE-Bus combined with an integrated processor and fast floating point co-processor, and triple-cache architecture to provide XXU systems (such as the Cromemco CS-420 Super-microcomputer) with the power to surpass 1,050,000 Whetstones per second.

Cromemco built a MIL-spec, rugged-ized 19" rack-mount unit (based upon a Motorola MC68000 and the Zilog Z80 -- a dual processor configuration).  Their model, CS-200 was widely deployed by the US Air Force, as part of the USAF Mission Support System (MSS) for F-16, F-15 and other aircraft. The MSS provided crucial navigational and other data, during missions -- and enabled combat pilots to compare mission effectiveness to flight plan data (during the subsequent debriefings by their superiors). The CS-250, with a removable hard disk cartridge, was similarly configured for rack-mounting (but was based upon a Motorola 68020 cadenced at 20mHz).  The US Navy, the New York Stock Exchange, and the broadcast Television industry also invested heavily in early Cromemco products..

To my delight, I now own two vintage Cromemco CS-250's -- they run UNIX V and Cromix  -ed.


Online Now!
Every (surviving) Cromemco document: Cromemco user manuals, photos, schematics, source code, ROM-EPROM's
& source, systems, OS software -- Other S-100 Brands & Models (available also from this site, on 2 DVD's).
 
[ Downloadable XLS spreadsheet -- Cromemco Parts List ]
 
[ Cromemco CS-250 boards & photos ]
 

 
The "guts" of my (home-brewed) "Cromemco Z-2D" S-100 micro-computer.
 
Cromemco, "ZPU" (4mHz Zilog Z80 CPU board) 1976
Cromemco, "ZPU" (4mHz Zilog Z80 CPU board) 1976 - purchased new.

 
Cromemco, "PRI" (dot-matrix/daisy-wheel, parallel printer interface) 1978
Cromemco, "PRI" (dot-matrix/daisy-wheel, parallel printer interface) 1978 - purchased new.
 
Cromemco "16FDC" (5" & 8" floppy disk drive interface, boot PROM and serial interface to the console) 1979
Cromemco "16FDC" (5" & 8" floppy disk drive interface, boot PROM and serial interface to the console) 1979 - purchased new.
 
California Computer Systems "CCS-2065" (64K RAM board- rev B) 
California Computer Systems "CCS-2065" (64K RAM board- rev B) assembled by RCK -- from a bare board.
 
PMMI "MM-103" (300 baud modem)
PMMI "MM-103" (300 baud modem) purchased new.
 
CompuTime - "QT Clock"
CompuTime - "QT Clock" (purchased as a kit) assembled by RCK -- from a bare board.
 
Heathkit "H19" (serial terminal, black & white)
Heathkit "H19" (serial terminal, black & white) purchased as a kit, assembled by RCK
 
Epson "MX-100" (132 column impact printer, B&W ribbon)
Epson "MX-100" (132 column impact printer, B&W ribbon) purchased new.
 
Shugart "SA-400" (DSDD 5"1/4 floppy drive)
TANDON "TM-100" (DSDD 5"1/4 floppy drive - 2 each) purchased new.
The DSDD floppies could store, 386 Kbytes formatted.
An external case and power supply was built from parts by RCK.
 
Siemens "FDD-100-8" (8" SSDD floppy drives)
Siemens "FDD-100-8" (8" SSDD floppy drives, 2 each) purchased new.
The SSDD floppies could store, 508 Kbytes formatted, or R/W the IBM 3740 SSSD format.
Adapted to work
, in lieu of Persci 8" drives (as used by Cromemco Inc).
 
S100 (chassis & power supply & cooling fan) 
S100 (chassis & power supply & cooling fan) -- purchased a new 'SD Systems', 'bare-bones' model (looked a lot like the above).
 
Cromemco Z2D computer - circa 1976.
The final result was the "equivalent" (technically) to the this factory-built 19" rack-mount machine (but with 8" & 5"1/4 drives -- 2 of each).
 

"Cromemco" was a Mountain View, California microcomputer company known for a series of high-end S-100 bus computers in the early days of the microcomputer revolution. Their machines were also known for generating computer graphics for television stations.

The company began as a partnership in 1974 between Harry Garland and Roger Melen, two Stanford PhD students. The name came from their residence at Stanford University, Cro(thers) Mem(orial) Co(mpany) -- a Crothers was a Stanford dormitory reserved for graduate students. The company was incorporated in 1976.

Their initial products used the Zilog Z80 microprocessor and the S-100 bus. The Z-1, released in August 1976, was a Z80 development system on a heavy-duty IMSAI 8080, 22-slot chassis. It included 8KB of static RAM, an RS-232 serial port, and a PROM programmer, and sold for $2495. Its modular design supported a 4MHz Z80 plug-in card ($395) and 4 KB static RAM cards ($295). The 1978 Z-2 line was an updated S-100 computer sold as modules or a complete system. The Z-2 was available with one 5-1/4 inch floppy disk drive and no RAM for $1995 or as the complete System Two (CS-2) with 64KB RAM and two floppy drives for $3990. The Z-2 was the first commercially marketed microcomputer certified by the U.S. Navy for use aboard ships without major modification, and some were used aboard Ohio class submarines for data logging during tests. The System Three (CS-3) was the "professional" version of the System Two with two 8-inch floppy drives standard instead of 5-1/4 inch drives, and 32KB RAM for $5990.

The Cromemco 3101 serial display terminal was a re-branded "Beehive Medical Electronics", B-100 terminal.

The System Two and System Three were sold to educational establishments across Europe and China. These sales helped the company to fund the transition to 16-bit systems with Motorola MC68000 processors in 1981. The "System One" followed the System Two and System Three. It contained either dual 5 1/4 inch floppy drives, or one floppy and a 5 MB hard disk, and was available with a dual processor "DPU" card which contained both Z80 and MC68000 processors. A ruggedized version of the MC68000 computer with removable hard disk cartridges was widely deployed by the USAF as part of the USAF Mission Support System (MSS) for F-16, F-15 and other aircraft. The MSS provided pilots key navigational and other data during missions and enabled combat pilots to compare mission effectiveness to flight plan data during the subsequent debriefing by their superiors.

The C-10 personal computer was introduced in June, 1982. It was a 4MHz Z80 system featuring 64KB RAM with an 80 character 25 line video screen for US$1785.

Cromemco produced the graphical microcomputers used by many television stations for weather forecasts during the mid to late 1980s. These Colorgraphics Systems were used on the evening news programs to replace the transparent acrylic glass maps on which local weathermen formerly drew weather symbols by hand. The computers used an enhanced version of Cromemco's popular Dazzler color graphics card.

The Z80 based systems ran either CDOS (Cromemco Disk Operating System) or CP/M 2.2.

Multi-user capability (via their own Cromix operating system based on UNIX) was offered from 1979 onwards. Cromix was written in the C programming language to run on an 8 bit Z-80 processor. It included many of the properties of the UNIX operating system which typically required a 16-bit processor with a hardware memory mapper (a feature that the Z-80 did not provide). The Z-80 processor was able to utilize up to 16 banks of 64KB of RAM to support 1MB multi user and multitasking applications. It was possible to run this efficient operating system using only a floppy disk drive (no hard disk) and that distinguished it from other operating systems of the time based on UNIX which required large expensive hard drives. Roy Harrington was the lead designer of the Cromix development team.

The company employed, at its peak in 1983, more than 500 people and had annual revenues of US$55 million. It was wholly owned by Garland and Melen until it was sold to Dynatech in 1987 as a supplier to their subsidiary, Colorgraphics Weather Systems. The European division of Cromemco reorganized as Cromemco AG ...and is still in business (ca. 2008)!


The idea and the desire to build this particular S100 computer evolved from the fact that the Cromemco founders were both at Stanford University (grad students at the time).  My ex-wife, Nicole (PhD Mathematics, Stanford 1978) and I were also on-campus from 1974-thru-1978.  I was working as a microchip designer at EXAR (Sunnyvale,CA -- from 1974-1981).  In 1976 my supervisor (Yoshiji Kurahashi) bought a Z-2D.  I too was quickly sold on the qualities of the Cromemco product line!  My "Cro" was assembled at my "Skywest" home, located next to the Hayward, CA airport.  We then moved to Sunnyvale where my "Cro" began it's role as one of the FIRST remotely-accessible, private computers in the world.  It had a total online storage of 1.8 Mega bytes (4 floppies, no hard drive). In 1983 it traveled with us to France -- where it continued to serve European enthusiasts -- until 1997, whereupon I returned to the USA.   This computer became the basis for a computing "club" that I founded in France, called "PicoNet France" -- a direct spin-off of the Piconet computer club (based out of the original BYTE Shop, in Mountain View California).  My organization quickly grew to more than 2500 French-speaking members from around the world.  That activity soon evolved into my first founder's business, "Wild West SARL". 

During my Silicon Valley days, I helped to create two other hi-tech companies (both are still quoted, on the NASDAQ).
 
Robert C. Kuhmann
(Composed as a memoir, 21 December 2007)
 

SAMPLE of  8080-Z80 Assembler code -- program by RCK, written in 1983 in Sunnyvale, CA.

; DISKPRAM.ASM
;
;
; DISKPRAM intended use is to determine the the values of the DISK
; PARAMETER BLOCK and the SKEW TRANSLATION TABLE of a system alien
; to Ampro MULTIDSK program.  After the host system parameters are
; are determined ESET may be used to set up the E: drive on the
; AMPRO system
;
; DISKPRAM displays the disk parameter block and the skew translation
; table maintained in the target cp/m 2.2 bios in any selected system
;
; DISKPRAM is the conbination of DPB.ASM and SKEW.ASM by
; Robert C. Kuhman, Sysop of the Cro'sNest RCP/M.
;
;****************************************************************
;
BOOT EQU 0  ;
BDOS EQU 05H  ;
FCB1 EQU 5CH  ;
;
;  other equates
;
ACROSS EQU 8
;
; ampro bios disk id save area
;
; ascii equates
;
BELL EQU 07H  ; bell
TAB EQU 09H  ; horz tab
LF EQU 0AH  ; line feed
CR EQU 0DH  ; carriage return
SPC EQU 20H  ; space
;
 ORG 100H
;
START: LXI H,0
 DAD SP  ; hl=ccp stack pointer
 LXI SP,STACK ; set up local stack
 PUSH H  ; save the ccp pointer for return
TEST: LDA FCB1+1
 CPI '/'
 JZ HELP  ; help
 CPI '?'
 JZ HELP
 CALL DPB
 CALL SKEW
 JMP EXIT
;
HELP: LXI H,HLPMSG ; point to help message
 CALL COSTR  ; display help
;
; exit no warm boot
;
EXIT: POP H  ; recover ccp"s stack ptr
 SPHL
 RET
;
DPB: LDA FCB1  ; drive code given ?
 DCR A  ; convert a=1 to 0
 JP DPB2
 CALL FCN25
DPB2: MOV E,A  ; save for select
 ADI 'A'  ; make drive code printable
 STA DRIVE
 CALL FCN14
 CALL FCN31
 PUSH H  ; save it for dump
;
 LXI D,SPT  ; make dph values printable
 CALL CVT2
 LXI D,BSH
 CALL CVT1
 LXI D,BLM
 CALL CVT1
 LXI D,EXM
 CALL CVT1
 LXI D,DSM
 CALL CVT2
 LXI D,DRM
 CALL CVT2
 LXI D,ALV0
 CALL CVT1
 LXI D,ALV1
 CALL CVT1
 LXI D,CKS
 CALL CVT2
 LXI D,OFF
 CALL CVT2
;
 LXI H,DSPLAY ; dph table
 CALL COSTR  ; print it all
 POP H
 MVI B,15
 CALL HEXDMP  ; print hexdump of dpb
 CALL COCRLF
 CALL COCRLF
 RET
;
SKEW: MVI A,ACROSS ; number of records to display across screen
 STA NPRINT  ; save
 LDA FCB1  ; see if drive was specified
 DCR A  ; test ff=no
 JP REC2  ; yes, select drive
 CALL FCN25  ; no, get current drive
REC2: MOV E,A
 MOV C,A
 CALL FCN14  ; select drive
 CALL FCN31  ; get address of dph
 MOV E,M
 INX H
 MOV D,M
 XCHG
 SHLD NRECS  ; save dph address for records per track
 MVI A,24  ; offset for seldsk:
 CALL BIOS  ; hl=dph, de=xlate table
 MOV E,M
 INX H
 MOV D,M  ; de=dph
 PUSH H
 PUSH D
 PUSH B
 XCHG   ; dph in hl
 SHLD DPHADR  ; and save
 CALL HEXADR  ; display dph address
 LXI H,DPH  ; trailer message for address
 CALL COSTR  ; display
 POP B
 POP D
 POP H
 MOV A,E  ; get low byte
 ORA D  ; or with high
 JNZ REC3  ; if zero no translate done
 LXI H,NXLATE ; no translate message
 CALL COSTR
 RET
;
REC3: LXI B,0  ; clear record number
 XRA A  ; clear a
 STA POSIT  ; initialize counter
;
RECLOP: MVI A,45  ; offset to sectran
 CALL BIOS  ; hl=xlate (bc)
 CALL PRINT  ; display results
 LHLD NRECS  ;
 DCX H
 MOV A,L
 ORA H
 JZ SHOWD
 SHLD NRECS
 INX B
 JMP RECLOP  ; till through
;
SHOWD: LXI H,TBLMSG ; for skew table
 CALL COSTR  ; display
 MVI A,20  ; number of entries
 STA POSIT  ; set counter
 LHLD DPHADR  ; get dph address
 SHLD LAST  ; save it
 JMP ENTRY
;
MORE: LHLD LAST  ; get last position
 INX H  ; update and
 SHLD LAST  ; save it
ENTRY: MOV E,M  ; get byte
 MVI D,0  ; zero d
 MOV A,E  ; value in a
 CPI 27  ; largest value
 JNC ZERFIL  ;
 CPI 1  ; start of table
 JZ WHERE  ; what position
 CPI 0  ;
 JNZ NOPE  ; none of those
WHERE: LDA POSIT  ; see where in table
 CPI 20  ; first position of 20
 JNZ ZERFIL  ; see if need zeros
NOPE: XCHG   ; hl has value
 CALL DECOUT  ; print decimal value
 LDA POSIT  ; get count
 CPI 0  ; see if done
 RZ   ; yes, return
 MVI A,','  ; insert comma
 CALL COUT
 CALL COSPAC  ; insert space
 LDA POSIT  ; see if done
 CPI 0
 JZ ZERFIL  ; fill remainder
NOTDON: DCR A  ; count down
 STA POSIT  ; and save
 JMP MORE
;
ZERFIL: LDA POSIT  ; how many zero's
 CPI 0
 RZ   ; done if zero
 DCR A  ; count down
 STA POSIT  ; and save
 MVI A,'0'
 CALL COUT  ; print '0'
 LDA POSIT
 CPI 0  ; see if through now
 RZ
 MVI A,','
 CALL COUT  ; print ','
 CALL COSPAC  ; print space
 JMP ZERFIL
;
; convert binary in hl to ascii decimal
;
DECOUT: MVI B,0  ; leading zero fill
 LXI D,-100
 CALL SUBTR  ; hundreds
 LXI D,-10
 CALL SUBTR  ; tens
 MOV A,L
 ADI '0'  ; ascii bias
 JMP COUT  ; print and return to caller
;
; subtract powers of 10
;
SUBTR: MVI C,'0'-1  ; ascii count
SUBT2: INR C
 DAD D  ; add neg number
 JC SUBT2
;
; one to many add one back
;
 MOV A,D  ; complement
 CMA   ; de
 MOV D,A
 MOV A,E
 CMA
 MOV E,A
 INX D
 DAD D
 MOV A,C  ; get count
;
; check for zero
;
 CPI '1'  ; less than 1?
 JNC NZERO  ; no
 MOV A,B  ; check 0 flag
 ORA A
 MOV A,C  ; restore
 RZ   ; skip leading zero
 JMP COUT  ; print character
;
; set flag for non-zero character
;
NZERO: MVI B,0FFH  ; set to zero
 JMP COUT  ; print
 RET
;
; print record entry
;
PRINT: CALL HEXADR  ; print hl as hex words
 CALL COSPAC  ; insert space
 LDA NPRINT  ; see if end of line
 DCR A
 STA NPRINT  ; update
 RNZ
 MVI A,ACROSS ; how many lines across
 STA NPRINT  ; save
 CALL COCRLF  ; start new line
 RET
;
; select disk, 'e' has drive number
;
FCN14: PUSH B
 PUSH D
 PUSH H
 MVI C,14
 CALL BDOS
 POP H
 POP D
 POP B
 RET
;
; get current disk number, returns current disk in 'a'
;
FCN25: PUSH B
 PUSH D
 PUSH H
 MVI C,25  ; no drive given, get current disk
 CALL BDOS
 POP H
 POP D
 POP B
 RET
;
; get disk parameters, returns 'hl'=dpb address
;
FCN31: PUSH B
 PUSH D
 MVI C,31  ; hl = dpb for current disk
 CALL BDOS
 POP D
 POP B
 RET
;
CVT2: PUSH H  ; display 16 bit integer
 INX H
 CALL CVT1
 XTHL
 CALL CVT1
 POP H
 RET
;
CVT1: MOV A,M  ; display byte at 'hl'
 INX H
CVT1A: CALL HEXBYT  ; a,c=ascii display
 STAX D
 INX D
 MOV A,C
 STAX D
 INX D
 RET
;
; Subroutine to do an addressed dump of one line. HL point to data,
; 'B' has length
;
HEXDMP: CALL HEXADR  ; display hl contents in hex
 MVI A,':'
 CALL COUT
 CALL COSPAC
;
HEXLIN: PUSH B
 PUSH H
HEXL2: MOV A,M
 CALL COHEX  ; display hl in hex
 CALL COSPAC  ; space
 INX H
 DCR B
 JNZ HEXL2
 POP H
 POP B
 RET
;
; Subroutine to print hl as an address in hex
;
HEXADR MOV A,H
 CALL COHEX
 MOV A,L
 CALL COHEX
 RET
;
; print the hex byte in 'a'
;
COHEX: PUSH PSW  ; save byte
 CALL HEXLFT  ; get left half
 CALL COUT  ; and print
 POP PSW  ; restore byte
 CALL HEXRHT  ; right half and
 CALL COUT  ; print
 RET
;
HEXLFT: RAR   ; make left nibble
 RAR
 RAR
 RAR
;
HEXRHT: ANI 0FH  ; make right nibble
 CPI 0AH
 JC HEXLR
 ADI 'A'-3AH
;
HEXLR: ADI '0'
 RET
;
; suboutrine to return the hex value of 'a',
; least significant half in 'c', most significant in 'a'.
; used when ascii-hex is to be stored.
;
HEXBYT: PUSH PSW  ; save
 CALL HEXRHT  ; get right nibble
 MOV C,A  ; save in c
 POP PSW  ; restore and get
 CALL HEXLFT  ; left nibble
 RET
;
; subroutine to write 'a' to console
;
COUT: PUSH B
 PUSH D
 PUSH H
 ANI 7FH  ; strip bit 7
 MOV E,A
 MVI C,2  ; cp/m fcn 2
 CALL BDOS  ;
 POP H
 POP D
 POP B
 RET
;
; print cr,lf to the console
;
COCRLF: PUSH PSW
 MVI A,CR  ; carriage return
 CALL COUT  ; print it
 MVI A,LF  ; line feed
 CALL COUT  ; and print it
 POP A
 RET
;
; subroutine to write a space to the console
;
COSPAC: PUSH PSW
 MVI A,SPC  ; space
 CALL COUT  ; and print it
 POP PSW
 RET
;
; subroutine to write bytes addressed by hl, terminated by last byte with
; 80 bit set.
;
COSTR MOV A,M  ; get byte
 CALL COUT  ; print
 MOV A,M  ; again and test
 RLC   ; for bit 7 set
 RC   ; yes, return
 INX H  ; next byte
 JMP COSTR  ; and continue
;
; bios service, offset in 'a'
;
BIOS: PUSH B
 PUSH D
 LHLD BOOT+1  ; get warm boot address
 ADD L  ; add offset to wboot
 MOV L,A  ; to address of service
 PUSH H  ; save it
 LXI H,BIORET ; return address
 XTHL
 PCHL
;
BIORET: POP D
 POP B
 RET
;
;  message strings
;
DSPLAY: 
 DB 'DPB table for drive '
DRIVE: DS 1
 DB ':',CR,LF
 DB 'SPT:  '
SPT: DS 4
 DB 'H',TAB,'Sectors per track.',cr,lf
 DB 'BSH:  '
BSH: DS 2
 DB 'H',TAB,'Block shift.',cr,lf
 DB 'BLM:  '
BLM: DS 2
 DB 'H',TAB,'Block mask.',cr,lf
 DB 'EXM:  '
EXM: DS 2
 DB 'H',TAB,'Extent mask.',cr,lf
 DB 'DSM:  '
DSM: DS 4
 DB 'H',TAB,'Disk size-1.',cr,lf
 DB 'DRM:  '
DRM: DS 4
 DB 'H',TAB,'Directory entries-1.',cr,lf
 DB 'ASV0: '
ALV0: DS 2
 DB 'H',TAB,'Directory group allocation 0.',cr,lf
 DB 'ALV1: '
ALV1: DS 2
 DB 'H',TAB,'Directory group allocation 1.',cr,lf
 DB 'CKS:  '
CKS: DS 4
 DB 'H',TAB,'Check size.',cr,lf
 DB 'OFF:  '
OFF: DS 4
 DB 'H',TAB,'Offset (number of reserve tracks).',cr,lf,lf
;
DMPMSG: DB '"DPB address and hex dump of table."'
 DB CR,LF+80H
;
NXLATE: DB BELL,'Diskette needs no translation.',cr,lf+80h
;
TBLMSG: DB 'Skew table decimal values.',cr,lf+80h
;
DPH: DB ': (DPH address)',CR,LF+80H
; User help
;
HLPMSG: DB 'DISKPRAM.COM - <H E L P>',CR,LF,LF
 DB 'Syntax:',CR,LF
 DB 'A0>DISKPRAM <cr>    - DPB and SKEW table for defalt drive',CR,LF
 DB 'A0>DISKPRAM d:      - Tables for selected drive',CR,LF
 DB 'A0>DISKPRAM ? or /  - Displays this message',CR,LF
;
 DB CR,LF,'This program is designed to provide the user with a tool'
 DB CR,LF,'that is able to display the DPB and SKEW table of a CP/M'
 DB CR,LF,'2.2 system.  This information can be used as the decimal'
 DB CR,LF,'input for a program such as ESET.COM written for the AMPRO'
 DB CR,LF,'system.  With ESET the AMPRO''s E: drive may be used to read'
 DB CR,LF,'and write alien 5" diskette formats',CR,LF,LF+80H
;
NRECS: DS 2
NPRINT: DS 1
DPHADR: DS 2
POSIT: DS 1
LAST: DS 2
;
 DS 30
STACK: EQU $
;
 END

 

And so it was... 30+ years ago! 
RCK
 
 Copyright 2008-2012 ~ TechniQ U.S. Associates LLC & Robert C. Kuhmann
All Rights Reserved (All WRONGS avenged).