PDA

View Full Version : Morrow DJ2D/B Disk controller board question



Nama
July 10th, 2014, 02:23 AM
I have a Morrow Disk Jockey 2D/B that is addressed to E800H to boot CP/M, and I want to change this boot address. Is it as simple as altering the firmware in the 2708 EPROM?

Thanks in advance

Philip

Nama
July 10th, 2014, 04:18 PM
Ok, just answering my own question here.
According to this:


Simple DJ2D Relocation

Morrow Designs' old DJ2D floppy
controller boards can get a new lease
on life from this information sent to
me by Ken Piggott, a long-time S-100
enthusiast:

"The problem with most DJ2Ds is
that they require address space from
0E000H to 0E800H, which limits the
size of the operating system (usually
CP/M) to 56K. It would be nice to
relocate the board to the top of
memory (0F800H), but there are two
obstacles, an EPROM and a PROM,
that must be reprogrammed to do
this. Burning a new EPROM is no real
problem, since Morrow Designs sup-
plied the source for the EPROM. But
the PROM programming information
is not provided, and PROM updates
are no longer available from Morrow
Designs for this board.

"The solution is to burn a new
EPROM and move a couple of traces
to trick the PROM into thinking that
the 0E000H page is being addressed
when actually the F800H page is
selected. Fortunately, there is an un-
used NAND gate available in the
DJ2D's vectored interrupt circuit
(which is not used by the DJ2D
software), which can be used to trick
the PROM. Here is how to do the
relocation on a DJ2D model B, rev 2.:

"Assemble the EPROM source code
for 0F800H, burn it into an EPROM,
and install it into the DJ2D to take
care of relocating the DJ2D's I/O
routines and boot loader software.

"Then lift out pins 12 and 13 of the
74LS38 NAND IC at position 8B.
This gate was used to drive a vectored
interrupt line, but was never used in
any Morrow Designs software. Simi-
larly, lift out pins 6 and 7 of the 6301
PROM IC at position 8C. Connect a
wire from board position J1A (the
output of the 74LS38 NAND gate at
8B) to the 6301 PROM's pins 6 and 7.

"Finally, connect the inputs of the
74LS38 NAND gate to S-100 bus lines
All and A12 (one wire from S-100
edge connector pin 85 to IC 8B pin 12,
and one wire from edge connector pin
33 to IC 8B pin 13). That's all there is
to it!"

I have used this modification myself
on several DJ2Ds and have had no
problems at all. However, this modifi-
cation only works for DJ2Ds origined
at 0E000H, and it disables the DJ2Ds
vectored interrupt output (which I
don't use either), so use it with some
caution if you are not a software
wizard.


... So that means the the PROM indeed needs to be different when changing the address of the Morrow dj2d board...that sucks!
I have dumped the PROM (27S20) in my dj2d board (presently at E000 address) and I get the following:


08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08 05 0B 08 08 08 08 08 08
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


You can see that the first half is basically 08's with two bytes being different. 05 and 0B.
The second half of the code is all 00's. So I have no idea what to make of any of this, or how to reverse engineer it so that I can program a new PROM for a new address.
Can anyone help or does anyone have any ideas.

Cheers

Phil

dfnr2
July 10th, 2014, 08:38 PM
Hi Phil,

The PROM is 256x4, so I think the 0's are just artifact of your PROM reader.
Looking at the schematic here (http://www.s100computers.com/Hardware%20Manuals/Morrow/Morrow%20Disk%20Jockey%202D%20Controller%201979%20 rev4.pdf), D4 doesn't seem to be hooked up, so 08 seems the same as 00. The 05 code selects ROM+I/O (which share a 1k block), and asserts the READ signal. The 0B code seems like it would be the same as 03, and selects RAM and asserts READ.

The upper 2 PROM address lines (1 1) are active when not in Phantom mode and Memory is selected. This constrains the meangingful locations to the upper 1/4 of the ROM. The next 6 address lines are taken from A15-A10, which will address 64 unique locations at the top of the ROM. Each byte in the upper 64 bytes of the ROM corresponds to one of 64 1K boundaries (0000, 0400 . . . F800, FC00).

The 05 / 0B are at the beginning of the last 8 bytes (=beginning of the top 8K), mapping the ROM+IO to E000 and RAM to E400. To place the ROM+IO at F800 and RAM at FC00, you'd just move the 05 0B to the last 2 bytes in the PROM. No need to cut any traces.

Dave

Nama
July 10th, 2014, 09:16 PM
Wow! It's amazing you could work that out.
I have read your post multiple times and I don't understand the technical details at all, especially the bit about "The 0B code seems like it would be the same as 03".

I do however understand the last paragraph.

So if, for example, I wanted the address to be 5000H the last 4 lines would look like this?


00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 05 0B 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

dfnr2
July 11th, 2014, 03:11 AM
You've got it, except I think you meant to place the 05 0B one place over

00 00 00 00 05 0B 00 00 00 00 00 00 00 00 00 00
->
4000 4400 4800 4C00 5000 5400 5800 5C00 6000 6400 6800 6C00 7000 7400 7800 7C00

It is (was) actually a pretty common technique to use a small PROM to implement a combinatorial logic function. This was before PALs were widespread, and this sort of use (often in state machines) kept those small proms in the market.

I didn't explain that first part very clearly. All I mean is that the PROM has four data bits, and as far as I can tell from the schematic, the highest bit D4, which corresponds to an 8, doesn't seem to be used--only the lower 3 bits, D1-D3 are shown as being used. So, one would expect no difference in behavior between a code with the highest bit D4 set or clear. For example, "8" (1000) and "0" (0000), or "B" (1011) and "3" (0011). That could be verified by checking the PCB for any connection to pin 9, and also by changing the "8" codes to "0", and "B" to "3" to see if there's any difference. However, the safest thing, at first, would be to keep the "8" and "B" as they are, unless you can definitely verify pin 9 (D4) is truly not connected.

The trick here will be to source a new old-stock blank PROM. Hopefully you'll be lucky and get a good blank PROM without difficulty. I've had experiences (repairing old arcade games) of buying a PROM from traditional online brokers and finding the PROMS already programmed. Come to think of it, the arcade-repair suppliers may be a good source, and may program the PROM for you to make sure it's good.

Dave

Nama
July 11th, 2014, 05:56 AM
Hi Dave, thanks for the confirmation.

Ooops, I guess I miscounted.

The schematic you were referencing doesn't quite match my DJ2D/B board. I checked with the board itself and with the correct schematic and pin 9 (D4) is connected to the SELECT line, so I'll keep all the hex values as is i.e. 08, 05, and 0B.

I have just ordered some new (NOS) PROMs from Arcadechips.com. I've ordered from them before and had a good experience.
I also have a Data I/O Burner with a Unipak 2. It's huge, it's old, and burns about any PROM or EPROM I can throw at it...I love it, and because of it's age I actually consider it a fully fledged member of my collection in it's own right.

Cheers again

Phil

new_castle_j
July 11th, 2014, 05:56 AM
Bravo! I love learning about this stuff!

dfnr2
July 11th, 2014, 07:00 AM
The schematic you were referencing doesn't quite match my DJ2D/B board. I checked with the board itself and with the correct schematic and pin 9 (D4) is connected to the SELECT line, so I'll keep all the hex values as is i.e. 08, 05, and 0B.

That's good info. Looking at your newer schematic, The D4 output enables the insertion of a WAIT state when low, which is needed only when the EPROM is accessed. That's why the bit is high except when the address corresponding to the EPROM+I/O 1K block is selected (and subsequent logic narrows it to just when the EPROM is selected). This can be disabled with switch 7 on DIP switch 5B. Also, your newer rev of the board handles the PHANTOM function slightly differently.


I also have a Data I/O Burner with a Unipak 2. It's huge, it's old, and burns about any PROM or EPROM I can throw at it...I love it, and because of it's age I actually consider it a fully fledged member of my collection in it's own right.

Cheers again

Phil
Nice, it's a classic!