Pulsar LBB CP/M on Hard Disk

I have several machines based on Pulsar single board computers. A couple of these are running multiple processors and therefore require the capabilities of TurboDOS.

One that i have previously written about, the Little Big Board Computer, uses a single Little Big Board (LBB). This machine can happily run either TurboDOS or CP/M. It uses two 8″ floppy disk drives which gives it a generous 2.4MB of online storage which is pretty handy for CP/M – certainly better than the 280kB of storage that i had on my old Apple II clone back in the eighties. Nevertheless, after using the hard disk based TurboDOS systems it seems a little inadequate.

Another computer based on the LBB is the Pulsar 7500. This machine uses five LBBs with one as a master and the other four supporting one user each. Using an installation process similar to that used witht the 7500, i had previously set up an LBB with a SASI card, and had installed TurboDOS on a solid state hard disk as a single-user system. I used it to try out a Little Video Board. This is a perfect system for trying out a hard disk on Pulsar CP/M.

There were certainly hints that the Pulsar CP/M had hard disk support but how it all worked was clouded in mystery due to the absence of any Pulsar CP/M documentation. I’m sure it existed but i have never found any.

I figured that if the support was there, then it could be lurking on some 8″ Pulsar CP/M disks that had originated from the same source as the Pulsar hardware.

All of my 8″ disks have been imaged and, for most, the files have been extracted. This meant that i could run some searches using a modern PC and from there i could have a survey the various files of interest.

Out of the 115 viable Pulsar CP/M disks i found 6 that had a program called hform, which isounds a lot like a hard disk formatter.

One of these disks, 103, was labelled “Pulsar CP/M 2.2 (Update 6) CP/M 2.2 Configuration Disk”. It contains a lot of assembler files, library files (includes), and some scripts. There was also a file called note-32 and that contained a lot of useful instructions on how to build a hard disk CP/M system for the LBB.

Contents of notes-32
                NOTES ON ASSEMBLY OF PULSAR BIOS

         A new utility called 'ASSIGN.COM' has been provided.
         This allows any drive to be swapped with Drive A:.
         This permits programs such as copy to work
         correctly even when booting up from the hard disk
         which normally signs on as Drive A: when hardboot
         is selected. (Note that the hard boot loader and
         hard boot prom must be used when the hardboot
         option is selected.

         Also another utility called 'STOPLIST.COM'. This is
         used when you wish to abort the buffered print mode
         (otherwise you may have to wait for up to 63k of 
	 buffered print to finish) when using the RAM card 
	 buffer.

	 A utility called 'CON.COM' has also been added.
	 This displays the current configuration of your
	 BIOS.


     1.   Set switches in CPMSYS.LIB for the following :

          - Hard disc present  (HARD : true/false)
          - Hard disc split into up to 4 drives  (NUMHARD : 0..4)
          - Reserve hard disk boot tracks  (HBOOTRAK : true/false)
          - Boot from hard disc            (HARDBOOT : true/false)
          - Large hard disk directories    (LARGEDIR : true/false)
          - Virtual RAM disc present (VDISC : true/false)
          - Printer buffer present up to 63K  (PRINTBUF : 0..63)
          - Number of RAM cards (RAMCARDS : 1/0)
          - Floppy interface side select line used
                                   (SIDESEL  : true/false)
	  - Large directory on floppies  (EXPDIRF : true/false)
				only works if SIDESEL is true

	  [ If sidesel is true then LBB can control up to 4
         double-sided drives but cannot read old dual-directory 
         disc format since hardware won't read address marks 
         with side field = 0 while side select line active ]

         CAUTION: If using hard disk in system, and you change
         any parameters (large directory, boot tracks or
         split operation) then you should FIRST back up your
         hard disk, re-format it, change the system and copy
         back your files to the hard disk !

	 ****************************************************
	 *						    *
	 *  Format4 must be used with a side select system. *
	 *						    *
	 ****************************************************

     2.   If generating a hard disc system set switches in 
          CPMSYS.LIB for the following :
     
          - Xebec or DTC controller (XEBEC : true/false)
          - Make/model of hard disc drive (set only one true)


     3.   Set switch in CPMSYS.LIB for the following :

          - Slow or fast floppy drive step rate
          (SLOWSTEP : true/false i.e 10 or 3 msec track to track)


     4.	  - The bios version part of the sign-on shows you which
	  flags have been set.
	 
 	  - normal bios		(LB31A...D)
	  Slowstep=false, Hard=false, Ramcards=false, Sideselect=false

   	  - custom bios		(LB31ASHML)
	  Slowstep=true, Hard=true, Ramcards=true, Sideselect=true

     5.   Assemble your new bios :

	  e.g.  M80 =$1
          	L80 $1/N,$1/M/X/E
  	
        Note that some later versions of L80 (e.g. 3.44)
        have been found to be unsuitable as they load
        hex from from address 100h instead of the stated
        origin (e.g. bios)

        Take note of which submit file & parameters to use.
        (E.g. use ctrl-P to print if possible)

        Assemble the loader indicated during bios assembly.

        Generate the CPMXX system image indicated using MOVCPM.

     6.   Link your bios with it's loader and CP/M .
               
          - For 62K floppy boot systems SUBMIT DGEN62 LBLDR9 LB31A
          - For 61K floppy boot systems SUBMIT DGEN61 LBLDR10 LB31A
          - For 60K floppy boot systems SUBMIT DGEN60 LBLDR11 LB31A

          - For 61K hard boot systems SUBMIT HGEN61 LBHLDR10 LB31A
          - For 60K hard boot systems SUBMIT HGEN60 LBHLDR11 LB31A

          DGEN62.SUB
          ;use: submit dgen62 <loadername> <biosname>
          ;inputs: loadername.hex, biosname.hex, cpm62
          ;xsub.com, zsid.com  must be on default disc
          ;creates system file biosname for sysgen
          XSUB
          ZSID
          ICPM62
          R180
          I$1.HEX
          R880
          I$2.HEX
          R
          G0
          SAVE 50 $2
          ;PLEASE REBOOT ... SYSGEN DOES NOT RUN UNDER XSUB
          
          HGEN61.SUB
          ;use: submit hgen61 <loadername> <biosname>
          ;inputs: loadername.hex, biosname.hex, cpm61
          ;xsub.com, zsid.com  must be on default disc
          ;creates system file biosname.hrd for sysghard
          XSUB
          ZSID
          ICPM61
          R180
          I$1.HEX
          R880
          I$2.HEX
          R
          G0
          SAVE 54 $2.HRD
          SYSGHARD

To add a hard disk I had to reconfigure and rebuild the CP/M BIOS. I’d never done that before so i figured it would be an adventure.

The file CPMSYS.LIB (an ASCII file) contains parameters for the BIOS including the hard drive, controller type, and SASI interface type. In the early eighties hard drives typically had a ST506 interface (often referred to incorrectly as an MFM interface). To convert these drives to SASI (the original name for the SCSI interface) a controller, eg an Adaptec ACB-4000 was required.

Although i have several of the Adaptec controllers, practically it is far easier to emulate a SASI/SCSI drive eg with a SCSI2SD than it is to find a viable ST506 compatible hard disk. I have already used SCSI2SD on other systems to emulate an Adaptec controller and companion disks. TurboDOS, for example, will boot from a SCSI2SD on an LBB so i’m hopeful that the same setup will work for CP/M.

I generally try to use the largest hard disk that the BIOS and Formatter will support. The latest formatter on Disk 103 is HFORM19. It supports many hard disks from the period, the larger ones of which are:

  • CDC 9415-5 Wren (5 surfaces) 31.3MB
  • Disctron D526 20MB
  • Rodime 204 Series 23.1MB

The CDC 9415-5 Wren is a little confusing because there are two sizes. The 31MB version has 3 “disks” and 5 surfaces and the smaller unit has 2 disks and 3 surfaces, whereas the CPMSYS.LIB file refers to 2 or 3 platters which i think must be the same as a “disk”.

If my understanding is correct then CPMSYS.LIB supports the larger CDC drive. It also supports the smaller Disctron and Rodime alternatives.

CPMSYS.LIB also supports the Adaptec ACB-4000 and the Pulsar P6204 SASI card (as would be expected). The configuration file has been copied to CPMSYS2.LIB which is configured for a Miniscribe 3012, but i do not have the original hard disk so i’ll be starting with a new emulated disk.

There was also provision in CPMSYS.LIB for configuring floppy drives, a Pulsar RAM card, printer buffer, and virtual disk.

The maximum supported logical disk size is 1024 x 8kB blocks ie 8MB but, there is provision for breaking a physical drive into multiple logical drives up to a maximum of 4.

The CDC disk has 697 cylinders, 5 heads, and 32x256B sectors per track which i make to be 27.2MiB or about 28.5MB (so the original number was probably “unformatted”). This can become 4x 6.5MiB logical drives.

CPMSYS2.LIB was edited accordingly. This file is included by the BIOS code, LB34A.MAC. The larger hard disk comes with the penalty of a larger BIOS – presumably related to directory data or buffering. 2k of additional BIOS is set aside if no hard disk is used. With the large CDC drive, 4k is set aside. ie the CPM must be 60k.

Following the instructions in NOTES-32, the BIOS has to be reassembled and linked using the Microsoft Z80 assembler and linker:

M80 =LB34A.MAC
L80 LB34A/N,LB34A/M/X/E

The system also needs a boot ROM (the one that is on the board was ok), and a boot loader for the system track. NOTES-32 says to use the LBHLDR11.MAC as the boot loader for 60k CP/M. The file contents confirm that it is intended for 60k CP/M. Exact instructions for assembly and link are not given but i used the one above as a pattern.

M80 =LBHLDR11.MAC
L80 LBHLDR11/N,LBHLDR11/M/X/E

Then a 60kB CP/M needs to be created.

MOVCPM 60 *
SAVE 60 CPM60

The last thing that is required is a means to write the system track. There is a source file for this: SYSGHARD.MAC. Again following the pattern:

M80 =SYSGHARD.MAC
L80 SYSGHARD/N,SYSGHARD/M/X/E

Then it can all be put together using the 60k hard disk script, HGEN60.SUB which contains:

;use: submit hgen60 <loadername> <biosname>
;inputs: loadername.hex, biosname.hex, cpm60
;xsub.com, zsid.com  must be on default disc
;creates system file SYSGHARD.COM
XSUB
ZSID
ICPM60
R180
I$1.HEX
R880
I$2.HEX
R
ISYSGHARD.HEX
R
G0
SAVE 58 SYSGHARD.COM

This is not quite the same as the script in the NOTES_32 file.

Note that the script requires XSU.COM and ZSID.COM. It produces SYSGHARD.COM.

SUBMIT HGEN60 LBHLDR11 LB34A

I had trouble getting the script to execute completely so i just did the steps manually. A mystery.

The instructions end at this point, but the system track still needs to be written. This done by executing SYSGHARD.COM.

I was stunned and amazed to find that, on reset, the system booted from the hard disk, albeit with another serial communication cocktail: 9600 baud, 7 data bits, 1 stop bit, even parity.

Note that the system needs a floppy disk drive to be connected otherwise it will hang when checking for a boot disk in the floppy drive. If the floppy disk drive contains a bootable disk then it will take priority over the hard disk.

The hard disks are A to D and the floppy drives E and F. A directory listing of A: showed a bit of a mess really. I’ve encountered this before with SCSI2SD and Pulsar. It seems like the format program does not write E5 across the whole disk. In TurboDOS there is an ERASEDIR program that tidies this up but not so with CP/M. Instead, i created an E5 disk image on my PC, wrote it to the SD card using dd, and then rewrote the system track on the machine using SYSGHARD.COM.

CP/M 2.2 supports user areas which can be used to quarantine different work environments. The implementation is not as slick as TurboDOS, which allows the user area to be used in much the same way as a drive letter. TurboDOS also maintains access to area 0 regardless of the current user number. And Turbodos has a copy program that allows files to be easily copied from one zone to another.

Without these features the first trick is to get pip into other user zones:

e> pip
*
e> a:
a> user 1
a> save 28 pip.com

Once it is in the zone the [G<user>] option can be used to pull in files from other zones eg zone 0 on floppy disks.

The hard disks have an 8kB block size, and with typical CP/M files being quite small, this wastes a lot of the available space.

I set up the hard drive as follows:

UserABCD
Total6616k6616k6584k6552k
Remaining576k2048k4464k4376k
0CP/M Utilities
(103)
1CP/M Setup
(103)
2Turbo Pascal
(55)
3Wordstar (21)
4Supercalc (364)
5Mbasic (66)Games (89)Voice Synthesiser
6MT Pascal
(47)
MT Pascal Support Files Development
(49)
MT Pascal Gen Purpose Dev
(50)
MT Pascal
Programs
(51)
7DBASE II 2.4 (453)
8Games (71)
9Fortran (57)Fortran Sources
(393)
10Cross Assemblers (8)
11CBasic80
(63)
12Cobol
(64)
PLI
(65)
13
14
15

This system is now ready to go. Changing between TurboDOS and CP/M system is as simple as swapping over the SD Cards.

Note that most of the disk images that i have used are available from the Microbee Technology repository, or you can just contact me.

Microlog Hi-Res Graphics Card

This card seems to have been manufactured by Microlog, but to be fair, my only evidence of that is that Microlog appears in the ROM. And the sockets are blue like some other Microlog boards.

I have no manual for this card, and that’s a problem for what appears to be quite a complex card. It has 128kB of RAM which seems like a lot for what i assume is a monochrome card. The NEC uPD7220 graphics processor chip is particularly interesting.

Initially, this card appeared to me to be a graphics card – a processor would access it via the STD bus. In light of my experience with the Little Video Card, i had a closer look and the STD bus interface seemed to be limited to some I/O, and it did appear to have a serial port. A 6809 processor (itself a little unusual) seems to hold the thing together.

I popped the card into an STD backplane, and had a look at the video output. The syncs were clearly present and at 50Hz / 15kHz. I connected a monitor, and a cursor was visible in the top left corner.

Then i buzzed out the serial port. It appeared to be a similar setup to the Little Video Board, so i thought that it may play nicely with a Pulsar Little Big Board, but it just caused the LBB to hang. I tried the Microlog MC52 card instead, but this had the added complexity that it needed a couple of spaces to automatically set the baud rate. At this point, i realised that the card should have a keyboard input. I suspect that there is DIL header for an ASCII keyboard, which i don’t yet have.

I improvised and used my trusty IBM terminal with the MC52 and forked the transmit line from the MC52 to the Hi-Res Graphics Card. After the obligatory RS232 trial and error, i was happy to see the MC52 basic prompt come up on both the terminal and the monitor.

I had already dumped the ROM. I figured i would probably have to disassemble it to get all the answers, but there was one clue in plain sight:

There seemed to be a dialogue that would allow entry into the graphics mode. There were also some tantalising numbers that looked a lot like pixels.

I didn’t have a clue as to how to provoke the dialogue, though. I hoped the card might just emulate a Tektronix 4010 or something similar, but i could not get any of the sequences to do anything – other than move the text cursor as might be expected for, say, a televideo text terminal emulation.

Out of desperation, i prodded somewhat randomly and did indeed get the prompt to come up – and it was a very tidy graphics prompt. With some brute force, i discovered that ESC D was the magic key combination. I got no response from entering Q or E, but it was definitely in graphics mode.

Fortunately, the magic sequences in the ROM also worked through the serial port so they told me some of the graphics commands.

Eventually the penny dropped that the response to the prompt was not simply “Q” or “E” but “Q,” and “E,”. The comma is an important delimiter.

I worked out several of the commands through trial and error, and i used ChatGPT to help analyse the ROM to confirm/clarify them. ChatGPT could not find ASCII commands for an Arc or to set the fill pattern as might be expected from the uPD7220 manual. ChatGPT could not unravel the C command, but said that it was copying sections of memory.

B,Bell
C,Not sure. It does some funky stuff.
D,x0,y0,<x1,y1> ….Draw line from current position to x,y to x1,y1 etc etc
E,Erase screen
F,a,x,y,As for R but with a filled rectangle.
H,Home 0,0
L,p,Changes the line pattern to the binary value from 0 to 255.
M,x,yAs per P but is there a subtle difference? Yes, it is relative.
O,r,Draw a circle centred on current position and with a radius of r
P,x,y,Set the current position to x,y
Q,Quit to text mode
R,a,x,y,Draw a rectangle starting at the current position with sides equal to x and y. A sets the orientation in 45 degree steps. At 45,135,225, 315 degrees the rectangle is bigger – the sides are set to the diagonal length.
W,<text><CR>Writes text.
X,s,n,Draw x axis. Space s, Number N
Y,s,n,Draw y axis. Space s, Number N
Z,s,Set text size. S= 0 to 15.

I wrote a little basic program to try out some of the commands. Having the character stream go to both the terminal and the card allows text mode at the same time as graphics mode, but with the side effect that just typing in or listing the program would create commands. Separate ports are probably a better idea.

I was able to connect a PS/2 keyboard to this card using and adapter described here. The pinout was much the same as the Little Video Board. Alas, i was unable to get the card to transmit characters to the serial port. There was sufficient activity to convince me that the key was received and that the software read the character. I tried changing configuration jumpers but no success was had. Perhaps the specific firmware verion does not support it.

I suppose a final observation is that this card does have a proper STD interface whereas the Little Video Board just drew power. I found that a Little Big Board would not boot if this card was on the bus. Perhaps this specific version of the firmware was intended to support the card in a graphics card mode rather than as a terminal. I have no further information.

I could still use this card as a terminal but i would need to build a PS/2 to RS232 adapter which is a simple enough job for an arduino. I am not sure that i will ever get to it though.

Microlog Little Video Board

I have several of these cards in various states. The board clearly has a minimal STD bus interface; it only uses the bus for power. That made me think that they were probably terminal boards. They are marked with LVB and one card has a ROM labelled Little Video Board.

Comparing the cards, i could see only one that was fully populated. Of the six cards, three were never completed, two were completed but have been used as spares boards. The complete card has been modified with extra connectors.

Having lots of other things to do and no doco for these cards, they sat around for several years in the “too hard” basket. While wading through a box of manuals looking for something else, i found an information sheet that shed a little light on their purpose.

The Little Video Board (LVB) is a terminal card intended for use with Pulsar Little Big Boards. The LVB emulates a Televideo 912 terminal. It operates with an ASCII keyboard and a video monitor. Communication parameters are set by the DIP switch.

The video output was obvious, so i powered the card up and had a look with the scope. The syncs were there at 50Hz/15kHz so i connected a monitor and got a blank screen with a cursor in the top left corner. This all seemed quite positive.

I traced out the video port and connected it to a Little Big Board and after messing around a little i got the TurboDOS prompt to appear on the monitor. At that point, proceedings were terminated because i don’t have an ASCII keyboard!

ASCII keyboards were apparently quite common at one time, but that seems no longer to be the case. Fortunately, a kind soul has developed and published a project that turns a PS/2 Keyboard into an ASCII keyboard:

https://www.willegal.net/appleii/appleii-kb-int.htm

Thanks Mike, for taking the time to do the design and for publishing it.

The project PCB is available from PCBway so i got 10 boards made for not much. It uses an attiny microcontroller which was easy to program with the provided hex file.

The PCB is setup to allow for any pinout. I buzzed out terminal board to find the pins that were used. The data lines were connected to the 8255. The order of the data pins wasn’t obvious, so i took a guess and jumped up an initial configuration. Then i watched the terminal serial output on the scope to see what i got. After sorting out the bit order it was good to go. Then i replaced the jumpers with wire-wrap.

Terminal Header Pin8255 Pin Function8255 Pin NumberAdapter DIP PinPin Function
18+5V
29
37GND
410GND
56
611
7PB1195
8PB01812STB
94
10PC21613D6
11PC1153D5
12PC01414D4
13PC4132D3
14PC51215D2
15PC6111D1
16PC71016D0

The Little Video Board is now a going concern. It can be used standalone or placed in the STD rack with the host computer. I have a few of these cards so it has been worth the time to get this going.

Pro-Log 7864

The 7864 is an 8088 processor card with RAM and ROM intended for a multiprocessor environment. The ROM may contain a monitor, but i have no information on it. It is even possible that it uses the 7303 Keyboard & Display Card.

I do have a manual for this board, but with so much undisclosed programmable logic it would be difficult to find faults. I would probably start with an off the shelf monitor and customise it for this board and a suitable serial card.

This card was originally set up as a slave, but i have converted it to a master. The resistor pack is a bit rough.

I tried this card with the only likely serial card match, but i did not get a prompt.

Pro-Log 7885

The 7885 is a 8085A card with 2k of static RAM expandable to and provision for an 8k EPROM.

I have not been able to find a lot of information on this card. It appears to be an enhanced 7801 with higher density and, perhaps, bus sharing.

It includes a serial port that uses the 8085 serial channel. It did have an EPROM installed but, i suspect that like the other cards, it requires a 7303 Keyboard & Display Card.

I attempted to use the SDK-85 ROM as per the 7801 card, but to date i have not achieved a sign-on message. There may be some additional initialisation required.

Pro-Log 7803

The 7803 is a Z80 CPU card with 1k of static RAM expandable to 4k and provision for 8k of ROM as 4x 2716 EPROMs.

This board carries an MP4 monitor ROM which operates with a 7303 Keyboard & Display Card. That’s a nuisance because i don’t have a 7303. To operate this card, i will either need to find an off the shelf monitor and modify it, or i will need to emulate a 7303.

This card did not have a Z80 IC card, so i have added one.

Pro-Log 7801

The 7801 is a very simple 8085A card with 1k of static RAM expandable to 4k and provision for 8k of ROM as 4x 2716 EPROMs.

The 8085A includes a simple serial port, but this card has no level shifters, so the levels are TTL.

Currently, this board has no ROM, but its memory map is the same as the SDK-85, so its monitor ROM may be suitable.

Pro-Log also developed a monitor ROM. I have a copy of this ROM, but it relies on having the 7303 Keyboard & Display Card, and i don’t have one. I have ordered some STD prototype cards with a view to creating a 7303 emulator.

Intel SDK-85 monitor ROM was suitable. It uses the 8085 serial terminal for user interaction – albeit at 110 baud (with 7 bits and no parity).

The SDK-85 monitor checks the state of the RX line on startup. If it is high, then it will use the SDK-85 keypad and seven segment displays (which the 7801 does not have). If it is low, then it uses the serial lines.

The 7801 does not include level shifters, so i removed a couple of ICs from a 7301 RS232 card, so i could use it to do the level shifting.

This was sufficient to show that the 7801 card is quite viable.

Rather than use such cumbersome level-shifting arrangement i thought a little TTL-RS232 converter off ebay would be a bit simpler. It did not go as smoothly as expected ….

It turns out that my test setup was somewhat fortunate in that the transmit line was not inverted. It seems that the serial transmission using the SDK-85 ROM is inverted with respect to the receive. This meant that i had to modify the 7801 to remove the TTL-TTL inversion at U10 (74LS240). This meant lifting pin 3 out of the socket and then connecting pin 17 to pin 3. I also had to add 5V to one of the unused pins on the connector socket, J1, so that i could power the level shifter. I used pin 8.

Maple Enterprises SC180STD

This card uses a Hitachi 64180R microprocessor, which is a direct replacement for the Zilog Z180, which itself evolved from the Z80 microprocessor.

The card was made in about 1988 and is branded with Maple Enterprises. I have not found any information on this company. It may have been related to Maple Systems, which currently manufactures industrial computing equipment.

The processor includes two asynchronous communication controllers. Fortunately, this card has a serial monitor in EPROM. The monitor program is the 1010SC ByteWyde Systems. The ByteWyde monitor was customised for various systems. I was able to find a manual for a similar version.

ByteWyde probably also customised their BASIC for this board, but i do not have a copy of it. Sigh.

I have no documentation for the board itself, but it is clear that the card has a 16k ROM and 48k of static RAM. At one time the RAM was battery backed, but the battery has been removed. There is a little residue from the battery leaking which will need to be cleaned up. [I subsequently found a schematic in amongst some old notes.]

The memory space can be positioned on any of four 64 byte blocks. The monitor assumes that it is at 00 to 3F. I would probably need to change the base address on some cards to use this card.

I was able to work out the serial port pinout for tracing some signals from the processor. The board has a 20 pin footprint for the level shifters but the MC145406 only has 16 pins and is offset by two positions from pin 1. To further complicate matters the board has been modified P1-5 is grounded (not DCD) P1-2 is DCD (not 9V), P1-6 and P1-7 have been shorted so that RTS and CTS are connected on the board.

P1-3: Rx

P1-4: Tx

P1-5: Ground

After a little clean and re-seat the card came up fine. Serial port is 9600,8,N,1.

The manual for the Monitor mentioned that some commands require the use of a ByteWyde Hardware Debug Card. As it turned out i had one of those in amongst my cards. I suspect it will need a good clean before use.