Boot ROM source

This package contains my boot ROM source. Its a fork of the official code developed back in the late 1980s. It has the following features/enhancements :-

Source for CONFIG.COM and SIDISC.COM is included also, as this understands the new type 52 RAM Disc. It should be noted that RECONFIG.COM in REMEMOTECH and REMEMOrizer is a superset of this, and also supports SD Cards, and provides better error messages.

Usage

The boot ROM signs on, performs a memory test, and then tries to boot from various drives of various types, such as drive B of type 07 :-

MTX Bootstrap Prom #@SDX03-V03

Ram Test - OK

Boot B07

Ordinarily a boot ROM for a given system will have a boot drive sequence suitable for it. eg: if the system has RAM Disc, it will be set up to try F51 or F52 before any of the floppy disks.

If you hold down Enter during the Ram Test, you get a > prompt, where you can use these commands :-

The boot ROM copies itself to 0E000H and above, and its stack will be at 0E000H growing downwards. If experimenting with the S and R commands, best to leave memory above DF00 alone.

Earlier versions of this code didn't initialise the RS232 settings properly, so D and R commands didn't work. I am not sure if the original FDX boot ROM code (or the SM1 boot ROM code before it) had the same problem.

The Remote Command mode is an optional enhancement over the functionality of the original boot ROM code. See the ZMON Remote Command mode tool to understand how to use this feature.

The MTX has real RS232, at 12V levels. Modern PCs don't seem to come with RS232 ports any more, so its quite common to use a USB to RS232 converter, and these are dead cheap on eBay. However, many of these are USB to RS232 TTL (ie: 5V levels). As I'm not confident the MTX would work if only fed 5V, or whether these cheap converters would tolerate 12V from the MTX, I have bought and successfully used a CHIPI-X converter, which has the FTDI chipset and converts voltages.

Building

Code is supplied with a Linux makefile, which makes it possible to compile the various ROMs using MEMU, M80 and L80.

Customisation is a combination of EQUates specified in the assembler source file, called BOOTCONF.INC.

To reproduce the BOOT ROM I used in my fully-loaded FDX system, which had 512KB extra RAM, 2x 8" drives and 2x 5.25" drives, use a file starting like this :-

;
; BOOT ROM configuration
;

; One of these must be selected
CRT80	EQU	1
CRT56	EQU	0

; One of these must be selected
FDXFDC	EQU	1
SDXFDC	EQU	0

; This can be selected
ISIDISC	EQU	1

; This can be selected
REMCMD	EQU	1

; At least one of these must be selected
BOOTF50	EQU	0
BOOTF51	EQU	1
BOOTF52	EQU	0
BOOTD13	EQU	1
BOOTE13	EQU	1
BOOTB07	EQU	0
BOOTB03	EQU	1
BOOTC07	EQU	0
BOOTC03	EQU	1

; This can be selected
INITF	EQU	0

; Set system type
STYPE1	EQU	'F'
STYPE2	EQU	'D'
STYPE3	EQU	'X'

Immediately after these EQUates are a set of checks designed to spot when the user chooses illegal combinations.

Sensible combinations :-

Some examples :-

After building, the result is BOOT.BIN.

Installing

The FDX User Manual includes the circuit diagram for the FDX bus interface card. This is the card that usually contains the boot ROM.

The card has 3 link settings, supporting various chip types :-

Odds are you'll be able to most easily source 2764 or 27128, or something pin compatible with it, such as an W27C512 EEPROM. So hope that your links are set to position c. If you source something bigger, just repeat the content. eg: repeat 8KB 8 times to fill 64KB W27C512.

In the circuit diagram, A13 is fed to the socket, which is pointless. In order for the chip to be selected, A15-A13 must be 001. If R0 can be rewired in place of A13, and a 16KB device installed, then the socket can host one 8KB image for ROM slot 4 (the CP/M boot ROM) and another 8KB image for ROM slot 5 (a SDX BASIC ROM).

Older SDXs will only accept 8KB EPROMs. Later SDXs will accept 16KB EPROMs, which should contain the CP/M boot ROM in the bottom 8KB and SDX BASIC ROM in the top 8KB. I have successfully used W27C512s in place of a 27128 in my later style SDX.

Memory map

High memory looks like this :-

AddressContent
0EC00HSIDISC, if installed
0F000HKBD
0F300HDBUF (used by DISC / FDSC)
0F400HCRT / SCRT
0F980HTDBUF (used by DISC / FDSC)
0FA00HDISC / FDSC

CP/M CBIOS and certain user programs usually use the drivers through vectors installed very high in memory.

However, be advised that certain programs are known to look directly inside the CRT handler code, and even call directly into it (eg: VDEB.COM).

Silicon and RAM Disc support

Memory above 0F000H is where the CP/M boot ROM installs itself to. The boot ROM source presented here can also load the Silicon Disc and RAM Disc drivers below 0F000H, in much the same way that the SIDISC.COM program does. Because of its ability to do this, it becomes possible to boot from RAM Disc. At this time, its not possible to boot from Silicon Disc, primarily because the code doesn't include a mechanism to test whether Silicon Disc contains what looks like CP/M. This could be revisited, should the need arise.

Shrunken type 51 RAM Discs

If using a 512KB RAM disk card, then there was 512KB of memory for the F:51. If using series 2 MTX, or MTX 2000, then the RAM disk size had to be shrunk, using S2R.COM or similar programs. Different type codes for new smaller sizes of RAM Disc would have been better.

56 column VDP support

ROMs with this feature are known as "SCPM" ROMs.

This feature was developed to provide a cheap way for SDX owners to run CP/M, without having to need an 80 columm card. It was particularly useful for Video Wall Controllers, where although the system booted using CP/M, it would go directly into the Video Wall program, which used the VDP. There was no real requirement for the 80 column card.

The SCRT screen driver has some limitations compared to the normal 80 column card CRT screen driver :-

Two extra escape codes have been provided:-

Code Action
^[Q Disables all colour update of the screen. Colour control codes are not ignored but merely do not affect the screen. This will result in slightly FASTER screen update.
^[R Re-enables colour update of the screen. Any colour changes that may have occured before will now become apparent.

Both these codes perform a screen CLR. These control codes have NO EFFECT on an 80-col card.

Programs that won`t work :-

Initialising RAM Disc from ROM card

ROMs with this feature are known as "RCPM" ROMs.

This was a feature developed to allow Videowall Controllers to be shipped with a ROM card instead of a SDX disk drive. The ROM card would contain the RCPM ROM and the initial RAM Disc. When the system boots, it would spot the RAM Disc is unitialised and initialise it from sub-pages of the ROM card.

Sub-page 0 contained the RCPM CP/M boot ROM (CPM56SI.ROM). Sub-pages 1-15 contain the initial RAM Disc image.

To prepare the ROM images :-

As an example, to create a boot from ROM system for the Video Wall program (VW6.COM) and video wall program sequences for Top Shop (DEMO.VW and OTHER.VW), use the following commands :-

B:
CONFIG F:51
FORMAT F:
SYSCOPY F:
F:
STARTUP S2R\VW6 F8\\F3\\F1\\"DEMO"\\F8\\F4
B:
PIP F:=C:VW6.COM
PIP F:=C:*.VW
PIP F:=B:S2R.COM
STAT F:*.*                    (total disc space <= 72KB say)
                              (add 8K for directory = 80KB)
                              (divide by 8K gives 10)
                              (add one just in case)
RCPMGEN C:TOPSHOP 11

This gives 12 .ROM files altogether (including the "just in case" one). That gives 3 32KB EPROMs, so we might as program the "just in case" .ROM file anyway.

When the newly produced system boots, the following should occur :-

A>S2R
A>VW6 F8\F3\F1\"DEMO"\F8\F4

If you have a 128KB EPROM board modified to hold 32KB RAM chips then you can use the utility EP.COM to "blow" the RAMs. Type :-

EP filename.ROM sub-page_number

It copys the 8KB file "filename.ROM" into ROM 2 at sub-page "sub-page_number", and verifys that copying went ok. When you have used EP on all of the .ROM files then just reset. This should prevent blowing EPROMs that wont work.

Download

Full package downloadable from here.


This page maintained by Andy Key
andy.z.key@googlemail.com