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.
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 :-
AZMON80.MAC is where you specify the configuration
for a boot ROM using the 80 column card,
which doesn't initialise RAM Disc content from a ROM card.
AZMON56.MAC is where you specify the configuration
for a boot ROM using the VDP in 56 column mode,
which doesn't initialise RAM Disc content from a ROM card.
AZMON80I.MAC is where you specify the configuration
for a boot ROM using the 80 column card,
which does initialise RAM Disc content from a ROM card.
AZMON56I.MAC is where you specify the configuration
for a boot ROM using the VDP in 56 column mode,
which does initialise RAM Disc content from a ROM card.
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 :-
| Filename | CRT | Disc controller | Initialise RAM Disc from ROM | Comments |
|---|---|---|---|---|
CPM80F.ROM | 80 column card | FDX | no | Common FDX case |
CPM56F.ROM | 56 column VDP | FDX | no | Upgrade for a "FDX Single"? |
CPM80S.ROM | 80 column card | SDX | no | SDX with large internal 80 column card |
CPM56S.ROM | 56 column VDP | SDX | no | SDX without large internal 80 column card |
CPM80SI.ROM | 80 column card | SDX | yes | Not likely to be useful |
CPM56SI.ROM | 56 column VDP | SDX | yes | Diskless Videowall Controller |
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 | ASIDISC, if installed |
| 0F000H | ASDXKBD |
| 0F300H | DBUF (used by ADISC / AFDSC) |
| 0F400H | ACRT / ASCRT |
| 0F980H | TDBUF (used by ADISC / AFDSC) |
| 0FA00H | ADISC / 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).
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 ASCRT screen driver has some limitations compared to the normal 80 column card ACRT 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 ASCRT 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 :-
CPM56SI.ROM,
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.