Boot ROM source

Update as of 2013-01-20: Code refactored and re-released.

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 the source in REMEMOTECH and REMEMOrizer is a superset of this, and also supports SD Cards, and provides better error messages.

Building

The code base has been refactored to remove duplication and simplify customisation. Its now 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, and combinations of .REL files linked to form the final ROM image(s).

The following configuration files exist :-

In these files, you'd only edit the BOOTxxx EQUates. As an example, if you wanted to make a CP/M boot ROM, which used the VDP in 56 column mode, which booted F:51,B:03, but which didn't initialise the RAM Disc from ROM card, you'd edit AZMON56.MAC to look like this :-

TITLE	AZMON56	Andys ZMON

CRT80	EQU	0
CRT56	EQU	1
INITF	EQU	0

BOOTF50	EQU	0
BOOTF51	EQU	1
BOOTF52	EQU	0
BOOTD13	EQU	0
BOOTE13	EQU	0
BOOTB07	EQU	0
BOOTB03	EQU	1
BOOTC07	EQU	0
BOOTC03	EQU	0

	INCLUDE	AZMONI.INC

END

After building, the following .ROM files are produced :-

FilenameCRTDisc controllerInitialise RAM Disc from ROMComments
CPM80F.ROM80 column cardFDXnoCommon FDX case
CPM56F.ROM56 column VDP FDXnoUpgrade for a "FDX Single"?
CPM80S.ROM80 column cardSDXnoSDX with large internal 80 column card
CPM56S.ROM56 column VDP SDXnoSDX without large internal 80 column card
CPM80SI.ROM80 column cardSDXyesNot likely to be useful
CPM56SI.ROM56 column VDP SDXyesDiskless Videowall Controller

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
0EC00HASIDISC, if installed
0F000HASDXKBD
0F300HDBUF (used by ADISC / AFDSC)
0F400HACRT / ASCRT
0F980HTDBUF (used by ADISC / AFDSC)
0FA00HADISC / AFDSC

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 ACRT 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 ASCRT screen driver has some limitations compared to the normal 80 column card ACRT 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