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.
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.
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 EQU
ates 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 ROMFDC EQU 0 ; This can be selected ISIDISC EQU 1 ; This can be selected ROMPAIR EQU 0 ; 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 EQU
ates 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
.
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.
High memory looks like this :-
Address | Content |
---|---|
0EC00H | SIDISC, if installed |
0F000H | KBD |
0F300H | DBUF (used by DISC / FDSC) |
0F400H | CRT / SCRT |
0F980H | TDBUF (used by DISC / FDSC / ROMD) |
0FA00H | DISC / 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
).
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.
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.
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 :-
SCH.COM
program.
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 :-
VDEB.COM
Written for 80 column screen size.
Directly looks and calls inside CRT handler.
Use ZSID.COM
instead.
FDXB.COM
.
Written for 80-col card.
Use MTX, MBASIC or BBCBASIC.
WS.COM
.
Cannot be patched for screen width of 56,
use N56.COM
.
Note: N56.COM
is not the latest NewWord,
but it as version that does not try to patch the keyboard
low-level drivers.
CONTACT.COM
.
Writes directly to the 80-col card hardware
It is possible to patch CONTACT to use the
new SCRT module, although this has not yet
been done.
COLDBOOT.COM
- uses boot ROM !
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 (compiled with CRT56,SDXFDC,ISIDISC,BOOTF51,BOOTB07,INITF). Sub-pages 1-15 contain the initial RAM Disc image.
To prepare the ROM images :-
BOOT.BIN
,
name1.ROM
, name2.ROM
, ... etc.
to blow the EPROMs.
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 copies 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.
Recently, the ROMFDC option has been added, and this provides a much better alternative to initialising RAM Disc from ROM. Instead of copying R/O content to R/W RAM Disc and then usually not modifying the result, simply run directly from ROM Disc. No RAM Disc is required, and we can benefit from compression.
Disk to ROM explains how to make the disk image.
MTX ROM Card is a simple and large ROM Card.
Full package downloadable from here.