Update as of 2014-08-24: 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 RECONFIG.COM
in
REMEMOTECH and
REMEMOrizer
is a superset of this, and also supports SD Cards,
and provides better error messages.
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 ; This can be selected ISIDISC 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) |
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 (CPM56SI.ROM
).
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 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.
Full package downloadable from here.