Showing posts with label EXORBus. Show all posts
Showing posts with label EXORBus. Show all posts

Tuesday, February 20, 2024

EXORbus Card Cage and Backplane (Semy Engineering)

In the past I had a lot of difficulty finding a reasonably priced backplanes and card cages for EXORbus systems and ended up trying to make my own. Since then, I have discovered many more PLC manufacturers that made EXORbus based systems and have been able to find more reasonably priced processor cards, backplanes, and cages. As a result, I did not find it necessary to make a new run of my Multi-Plane ExorBus backplanes. Instead, I am going to finalize and open source the design so that others can have it manufactured if they want.

Semy Engineering MyPro cage and backplane

Almost a year ago, I saw a Semy Engineering cage and backplane on sale for about $150. They typically are listed for over $500, but like much of this EXORbus hardware, it sits for sale for a long time, awaiting the perfect buyer who has a malfunctioning PLC system and a silicon wafer production line waiting on it to get repaired. As more and more of it reaches end-of-life, it accumulates on ebay until there is a glut, and finally the prices are slashed. While the price still isn't cheap, it is probably a better deal than trying to make one myself... or so I thought.

Unfortunately, when it arrived, I realized that it did not have a ±12V power supply for the RS-232 line drivers on my boards, only the +5V main power supply. This probably isn't too big of a deal, as most modern equipment deals well with lower RS-232 voltages and I am not planning on running very long serial communication lines. However, I felt like it was worth the time to get this running the right way. So, the hunt for suitable power supplies began.

±12V Options

Searching for a ±12V PSU is pretty difficult, as there is not a widely used term to describe them, and the minus sign usually gets ignored by the search or acts as a NOT operator. "Dual rail" led me to some decent options, and the electronics parts suppler search filters were helpful to find some (expensive) power supplies too. The MEAN WELL PD-2512 is a well-priced option, but it is quite large, and I dont need nearly that much power.

MEAN WELL PD-2512 power supply

Parallel 12V PSUs

Apparently, you can connect two 12V switch mode power supplies so that the negative wire of one is connected to the positive terminal of the other (creating a GND reference), and leaving you with +12V, GND, and -12V power. While I understand how you could do this with two transformers to effectively create a single center-tapped transformer, I am struggling to wrap my head around how this would work properly with the various diodes and voltage regulators that might be involved in the full power supply. I believe a single 24V power supply with a "virtual center tap" GND reference using a couple of resistors would work as well to give ±12V, rather than just +24V. I am not excited about either of these options and I am not willing to risk my boards if this does not work properly.

MULTI-PLANE

While attempting to solve the ±12V issue, I noticed that my Multi-Plane backplane fit perfectly into the card slot, as was intended (whew)! The Multi-Plane was designed to be an ATX power supply injector for another backplane just like this. However, when I designed the board there really wansn't enough space to include the ATX power connector in a location that would allow to clear the sides of a card cage and clear the cards inserted into the board at the same time. So, To get it to work in this cage, I would need to swap the right angle ATX PSU connector with a straight one (or cut a hole in the side of the cage), but then I would lose a slot, I would still need an external ATX power supply, and I would not be able to use the MULTI-PLANE for anything else. This really isn't a great solution for me, just to get ±12V power.

DVD Universal PSU

In the end, I stumbled across an "EVD/DVD Universal Switching Power Supply Module" that is very cheap (<$6 shipped), widely available, and provides the ±12V at a reasonable 200mA for each rail.

EVD/DVD Universal Switching Power Supply Module
It also includes ±5V power, useful to run cards with old DRAM chips. I will likely be using the +5V for a power indicator light or maybe connect to a relay to turn on the main power supply. I would not want to use this product to run the entire system though, and will be keeping the orignial power supply for that duty.

Installation

The DVD power supply has a 7 pin XH (2.54mm pitch) header for the output power and a 3 pin CH (3.96mm pitch) header for the AC input and another for the switch. I went ahead and bought a pre-made pigtail for the XH header ("JST XH 2.54 2~12 Pin Connector Plug Single Head With 300MM Wire") and rearranged the wires so that the voltages would correspond with the wire colors, just like an ATX power supply.

A used two of the existing holes in the case to mount a couple of nylon posts for the new power supply board. One required a new hole in power supply PCB but fortunately it landed on the ground plane. I glued two more nylon posts onto the case, aligned with existing holes in the power supply board. I rigged up a splitter/extension harness to give the board 120V AC power from the plug socket. I also needed to add a jumper wire for the switch socket so that it will remain powered on. This case does not have a power switch on it, but I expect to add one to a front panel once I get it built.

Next, I removed the backplane and soldered up the pigtail for the DVD power supply to the appropriate pins and ground plane. I also soldered up some wire to ensure that every slot gets the 12V power.

backplane with power wires soldered up
I routed the pigtail (covered in a piece of wire loom for protection and tidiness) under the backplane and card slots, out the side of the case, and back in one of the air holes to the DVD power supply.

After a bit of testing to make sure the voltages looked correct, I plugged in an expendable board and was happy to see everything working!

DVD power supply in the card cage

Now I can start building up a usable OS-9 system that I won't have to tear-down every time I want to do some experiments with another board.

Monday, October 31, 2022

MC-10 to EXORbus adapter

I previously hinted at a hardware project I have been working on- an expansion bus adapter for the MC-10 allowing it to use EXORbus peripheral cards. The idea is pretty absurd as it the MC-10 is a little low-end consumer computer while EXORbus was typically used for pretty advanced industrial PLC or scientific computers. For instance, an EXORbus serial card would be quite expensive and have 8 ACIAs on it, giving you 8 serial ports, an insane amount for the lowly MC-10. My EXORbus Static RAM card has 1 MiB of RAM on it, also an insane amount for this little guy.

Since the EXORbus is made for 6800/6809 processors, and the MC-10's expansion bus is mostly just unbuffered signals from the mostly compatible processor, all we need is a bunch of buffers and connectors and a GAL to do address decoding into the MC-10's memory map. Here is the design I have been working on, yet to be prototyped:

I really wish I could have finished this during Retrochallenge, but I lost momentum with family events and vacations. Next time!

+

Wednesday, June 15, 2022

Synertek MBC020

I recently acquired a Synertek MBC020 EXORbus single board computer, notably sporting a 6512 microprocessor. The 6512 is software compatible with the famous MOS 6502 processor used in the Apple ][. This is one step closer to the whole point of this blog! It may at first seem odd that this 6512 board uses the EXORbus card edge which was most commonly associated with Motorola MC6800, MC6802, and MC6809 processors. However, the 6500 family was always intended to be MC6800 bus compatible. In fact, Rockwell even produced an AIM 65 Expansion Motherboard that would allow their AIM 65 computer (which like the Synertek SYM-1, was a derivitive of the famous MOS KIM-1 6502 trainer) to use EXORbus card modules. Synertek also made a clone of the MC6800 based Motorola MicroModule MM01, named the MBC01A2, and various EXORbus RAM and I/O cards.

Any of these ExorBus systems I have seen are either trainers or PLCs (programmable logic controllers) for industrial applications. They appear in knitting machines, industrial ovens, industrial food processing machines, and silicon wafer exposure and inspection stations. Fittingly, the Synertek MBC020 is usually seen configured for use in an "EG&G Torque Systems" servo controller. This is the same configuration for the card I purchased:

The Synertek MBC020 MOS 6512 based Single Board Computer

In a strange stroke of luck, this board happens to be available in the MAME emulator (formerly:"Multiple Arcade Machine Emulator"). I'm not sure why an industrial controller would be included in a emulator focused on arcade and console video games. Anyway, the ROMs available online appear to be the same as my own, so it is nice that I can see what I should be expecting when booting the board. Once I compiled MAME and added the ROMs, I was greeted with:

After a bit of trying out different key combinations, I discovered that the commands are predictably very similar to the SYM-1's SUPERMON monitor. Here is an incomplete summary:

SERVOMON COMMANDS: [] is optional parameter, $ is a hex digit (0-9,A-F)
Command and FormatDescription
M [[$$,]$$$$[-$$$$]]MEM: Memory examine, modify, [search,] hex data editor starting at address [-end]
R REG: Examine and modify user registers PC,S,F,A,X,Y
G [$$$$]GO: Restore all user registers [except PC=address, S=FD] and resume execution.
V [$$$$[-$$$$]]VER: View/Verify display data and checkums [starting at address [-to end]]
D [$$$$]DEP: Deposit hex data to memory [starting address]
C [$$,]$$$$[-$$$$]CALC: Calculate two's complement [-displacement], with [,offset]
B $$$$,$$$$-$$$$BMOV: Move data to address, from start -to end
J $JUMP: Restore user registers, except PC=listed entry in jump table, S=FD, and jump to it
J 1 MPC DIGITAL DRIVE REV 4.0 JUL-1983.
AXES FOUND ONLINE : 1
Ok
SD $$$$-$$$$SDBL: Store double byte from address -to address
F $$,$$$$-$$$$FILL: Fill data, from memory address -to address
S1 [$$$$]Save ASCII data to memory [starting address].

Next post: let's try out the real board!

Sunday, June 5, 2022

MIKUL 1MiB Mods (final)

It did not take long for me to realize that the virtual address jumper board for my MIKUL 6218 was not a great long-term soloution. It was ugly and was not very physically secure with jumper wires running everywhere. Instead, I decided to remove the jumper board and add a 2*5 pin header to the top of the memory board, where it belonged. As a result, I would need to program a GAL to go back in place of the jumper board, handling the conversion from virtual to physical addresses. Since I now have a working GAL programming pipeline, this was no longer a serious impediment.

Header

Adding the pin header was a simple matter of drilling holes in the board in a .10" grid, supergluing a 2*5 male header (with latch) to the board, adding some copper tape connected to ground, and soldering on jumper wires connecting to the A16-A20 address lines. Although I would have preferred to use some mounting screws on the header, both of the mounting holes ended up right on top of VCC traces.

GAL Program

With the board soldered up, I had some initial success using it with my CMS 9639 and Microware OS9 Level 2. However, I soon noticed that there was a block of memory that was not being identified at $C000-$DFFF every 64K. This is an odd range of addresses to have a problem with, since it can't be attributed to bad connections on an address line or two. I quickly identified that the GAL in U10 will disable the RAM and enable the I/O in that range, regardless of the state of the high virtual address lines. Although this is fine for the MIKUL 6809-5 board it was designed for, it is not consistent with the CMS9639's expectation that I/O is only enabled in the $00FF60-$00FF9F address range. So, I had to reprogram the U10 GAL and make some adjustments to the program in the U13 GAL to get everything working properly.

Conclusion

Here is the final product, a relatively clean looking 1 MiB EXORBus RAM and 3xVIA I/O card working great with the CMS 9619 and OS9 Level 2 on the CMS 9639:

Wednesday, June 16, 2021

CMS 9619 Address Decoder Replacement

In my previous post on the MIKUL 6218 board, I mentioned that was using the lower 32K of address space on the CMS 9619 to swap in 16 banks of external RAM. You may remember that I had previously made some minor modifications on the CMS 9619 to use this space for an on-board 32K SRAM chip and still use the external I/O. What is happening here? Well, I had to remove all of my wire modifications to the CMS 9619, and restore it to the standard arrangement. With my new GAL programmer in hand, I figured out the logic equations to replicate the CMS 9619's U12 address decoder. I made an adjustment to how the U20 ROM/RAM socket and bus tranceiver are addressed so that I can have one GAL to have all 64K on-board and another for the standard external 32K. Now I can just swap out the GAL ICs to change the arrangement!

GAL and ROM options

There is still a small glitch in UTIL_DECODE that I have to resolve (I think this is why CMS orginally used XOR logic PAL20L10 rather than the more common NAND logic PAL20V10), but everything seems to work great.

If you need a replacement decoder for your CMS 9619, or just want to make some modifications to the memory map, this is the way to do it!

MIKUL 1MiB Mods (continued)

With the virtual address jumper for the MIKUL 6218 sorted, I still needed to simplify the address decoding and memory chip selects so that 1 of the 4 SRAM sockets will be selected depending on the state of our virtual A19 and A20 addresses. Since the three I/O ICs (6522 VIAs) share the data bus with the memory, I also need to disable the memory when the I/O is active, and signal the GAL in U10 to select the appropriate 6522 VIA.

Fortunately, the CMS 9619 and 9639 use several signals (VMA, VUA, or UTIL_DECODE) to indicate when the processor board is addressing external memory or I/O. This greatly simplifies the decoding from the original MIKUL arrangment which had the GAL fully decoding all of the address lines from A6 through A15. But, since the MIKUL 6218 board does not use those CMS/EXORbus decode signals, I had to cut a few of the unneeded low address lines to the GAL and replace them. With this simplified arrangement, I had hoped to use a few standard 74LS logic ICs to select the RAM and I/O. But, after a few attempts reduce the number of logic chips I needed, I decided to bite the bullet and just get a GAL programmer.

Here is my new setup which seems to work great with macOS:

  • XGecu TL866II plus USB programmer - programs the GAL
  • minipro - reads and writes JDEC files to the TL866
  • GALasm - turns logic equations into JEDEC file
The biggest obstacle was that the first programmer I ordered (an older model TL866A) did not work due to a faulty pin 10. Unfortunately, this has been my luck with new tech items from China, including the cheap logic analyzer I bought a while back. These kinds of issues take A LOT of time to figure out.

Once I received a functioning programmer, I managed to get everything working well with my CMS 9619. So, now I can switch in 16 blocks of 32K RAM (512K) into the lower half of the CMS9619 address map, using the low nibble of its PIA output (at $FFC4) as a register to drive the virtual address lines. The CMS 9619 does not output a signal on its PIA for A20, so I can only use 2 of the SRAMs. Also, since the RAM addresses overlap the CPU addresses, half of each 512K SRAM chip can't be accessed (when A15 is high). This could be easily fixed by modifiying the U13 jumper board that I made previously, or even the CMS 9619 address decoder. Honestly, the original configuration was probably better for the CMS 9619 because it did not switch out the lower 8K of RAM that an OS would use. However, since my end goal is to use this with the CMS 9639 CPU and its integrated MMU, I will keep it as-is. I haven't fully tested the I/O and the VIAs yet, but I will get to those soon enough.

512K RAM on a MC6809!
Note the rainbow virtual address jumper and the
additional jumpers to route A19 and A20

More of the techincal details below, after the break...

Wednesday, April 21, 2021

MIKUL 1MiB Mods

A18 Addition

I really want to use my two 512KiB SRAM chips on this board to maximize the usable RAM. Fortunately, the MIKUL 6218 has 32 pin DIP sockets, so my SRAM physically fits. However, pin 1 (A18) of the socket is connected to VCC, limiting each socket to 256KiB (2^18) of memory. This is strange because four 256KiB (2MBit) SRAM chips would be perfect for this board (and my needs) but are quite unusual and are actually more expensive than four 512KiB (4MBit) SRAM chips.

To increase the socket capacity to 512KiB, the trace connecting A18 to VCC for each memory chip must be cut. Unfortunately, this is a wide power trace that is hidden under the end of the sockets. A few seconds with an 1/8" drill at a 45° angle cut through the A18 pull-up trace without too much collateral damage. Although I slightly cut into the socket, I barely avoided cutting into the next thin address line down.  

A18 to VCC severed.

Then, I added a few wire jumpers to connect pin 1 of each socket to each other to give a common A18 line. This address line, along with A16 and A17, need to be connected to a new virtual address header. A19 and A20 will be connected from this header to a decoder to create the memory chip select signals.

Bank Address Eliminator

With the physical connections made, it's time to simplify the MIKUL 6218's memory bank select system.

This little jumper board just connects each real address to its respective memory address line (A11-A15), overriding the bank switching latch and logic at U13. The virtual addresses (A16-A20) connect to the 10 pin header which will connect to the main CMS 9639 processor board. The 3 pin header on the right will connect A19 and A20 to a decoder to select the correct memory chip.

With the RAM and this board in place and the virtual address lines pulled high, the board works exactly the same way as it did before and has the same memory map. However, the bank register functionality (which I could not test anyway) has been eliminated. But, without the virtual addresses, I can only access some of the RAM.

Next time ... the RAM chip select Decoder

Tuesday, February 2, 2021

CMS 9600A MPU Revival

I was recently able to trade one of my extra CMS 9619 SBCs for a CMS 9600A MPU (Thanks Joel!). This EXORbus processor card has very similar specs and layout to the CMS 9609 MPU card, but it uses the Motorola 6802 processor (an MC6800 with integrated RAM), rather than the MC6809.

If you are ambitious enough, you could even modify the CMS 9600A to use a MC6809 processor. Neither of these boards are as advanced as the CMS 9619 single board computer I have been working on, but nonetheless, I have been eager to get my hands on a MC6800 system to play with.

The board is in great condition, but had some areas of concern:

  1. There are no RS232 line drivers installed, instead using DIP program headers/shunts in their place.
  2. There is no boot or debugger ROM installed.

I mostly addressed the second concern before I even received the board. I OCR'd and transcribed the SYSMON debugger from the source code in the CMS 9600 manual (thanks for the scan Roland!). With a few adjustments, I was able to assemble it and format it for programing to EEPROM. Unfortunately, I could not get my AT26C16 EEPROMs to program in-circuit as I have for the AT28C64 EEPROMs. Anyway, I ended up using an adapter to use 1/4 of an AT28C64 EEPROM for testing.

As for the missing RS232 line drivers, this board was configured to use external line drivers on an RS232 breakout module (likely the CMS 9601-501). I tried connecting the appropriate serial lines directly to a TTL to USB serial adapter, but I did not receive any response from the board. I decided to just buy and install the line drivers to be consistent with my other CMS boards. This would eliminate a few variables while I focused on getting everything to boot from the EEPROM. Once I installed them it became clear that the new drivers were interferring with the baud rate generator due to an unusual wired jumper configuration that was causing contention. I removed some of the wire wrap jumpers so the settings are more consistent with my CMS 9609 board, and observed a nice clock signal arriving to the ACIAs.

Next, I added a small jumper to bring a constant 12V to the Power Failure Protect/Restart Circuit (connect 12V VIA to the "CR2" through-hole). Without it, the board stays in "locked reset" due to an assumed power failure.

While I was debugging these issues, I noticed a few distinct puffs of white smoke coming out of the CPU! I am not sure how that happened. I assume one of the address lines was pulled to ground through a test lead, but I was being quite careful. Anyway, with the CPU shot, I had to wait a few weeks for a replacement to arrive.

With a new CPU installed I was still troubleshooting with the logic analyzer when I noticed a column of asterisks in the terminal! I double checked the manual and realized that the monitor had been prompting me for a command for several reboots!

*V
FROM ADDR FF80

FF80 04 48 49 4E  5A 56 43 0D  0A 15 00 04  0D 0A 42 4B  
     .HINZVC.......BK
FF90 41 44 44 20  04 0D 0A 46  52 4F 4D 20  41 44 44 52  
     ADD ...FROM ADDR
FFA0 20 04 0D 0A  54 48 52 55  20 41 44 44  52 20 04 54  
      ...THRU ADDR .T
FFB0 4F 20 41 44  44 52 20 04  56 41 4C 55  45 20 04 4D  
     O ADDR .VALUE .M
FFC0 FA 42 45 F8  9B 47 F9 14  52 F9 35 54  FA A2 48 F9  
     .BE..G..R.5T..H.
FFD0 B7 56 FD DD  49 FA 07 4A  F9 FD 46 FA  67 51 F8 1C  
     .V..I..J..F..Q..
FFE0 44 FA 9D 4B  FA B4 31 F9  00 32 F8 EF  4C F8 1C 53  
     D..K..1..2..L..S
FFF0 F8 1C 4F F9  B6 4E F9 B8  F8 4F F8 59  F8 54 F8 00  
     ..O..N...O.Y.T..

Once I knew that everything was working, I took another stab at programming the EEPROMs in-circuit. After some jumper configuration changes on my CMS 9619A, I was finally able to program a few 28C16 EEPROMs. As it turns out, the CMS 9609 has some timing differences from the CMS 9619 that apparently prevent it from programming the EEPROMs. But with the CMS 9619 configured to accept the smaller 24 pin 28C16 EEPROM, the programming worked fine.

With everything else up and running, I wanted to try a TTL level USB/serial connection using the board's original DIP program headers, rather than the RS232 drivers that I added. Following the manual, it was easy to swap out the drivers and connect it up:

PHEW!

Sunday, January 3, 2021

MIKUL 6218 Memory and VIA EXORbus board

I haven't spent much time working on my CMS 9639 SBC because, unlike the CMS 9619, it does not have any usable on-board RAM and does not include a monitor/debugger in ROM. Instead, it is designed to use an external memory board (which I don't have) on a back plane (which I now have) and boot OS-9 from a disk drive (which I don't have). What is nice about the device is the built-in memory manager which uses up to 1MiB of RAM. Unfortunately, EXORbus RAM cards are still prohibitively expensive on eBay and only have 16K to 64K of RAM capacity. Since the components would be far less than the price of those boards, I took a stab at designing a 1MiB SRAM board with a bonus additional I/O expansion.

I had just started to get components inserted into an EXORbus prototype board when I noticed the MIKUL 6218 Memory and VIA boards appearing on eBay at reasonable prices (<$45 shipped). Let's take a look at the board:

Click below for more details...

Friday, October 23, 2020

Never Valid User Address

After finding out that my CMS 9619 Advanced Single Board MicroComputer was having problems accessing the EXORbus, I tried some trouble shooting. My MULTI-PLANE EXORbus backplane made it easy to accesss the various signals with an extra card edge receptacle attached. I tried pulling down various lines of the data bus with a resistor, and noticed that the 8 bits of data seemed to be responding appropriately. So, probably not the data bus tranceiver.

With little more to go on, I ended up buying an inexpensive USB logic analyzer and installing PulseView software for it. I was quickly able to identify that the bus's VUA (Valid User Address) signal was not rising when it was supposed to, even though it was receiving the correct signal from the PAL address decoder. Without this signal, the I/O card was never properly addressed, and the data bus was always floating. I tested another CMS 9619A board I have which displayed similar symptoms and found that it too was suffering from a failure of the same IC. Odd coincidence. So, after some desoldering, super-gluing a trace that was inadvertently partially pulled off the board, and re-soldering a new 74LS244 8-bit driver (U9), I am back in business. The chip came off of the other board much easier with the help of a heat gun.

I can't recommend these cheap logic analyzers enough to a hobbyist, although the first one I recevied was not working properly on some channels (make sure to test them before you rely on them for anything).

I also bought an EspoTek Labrador USB oscilloscope to try out, but I received, tested, replaced, and finally used the cheap logic analyzers from ebay while I was still waiting for the Labrador to arrive.

Thursday, October 8, 2020

CMS 9619 Hardware Mods (continued)

Update: Since this post I have figured out how to change the address map using a GAL IC.

I recently posted some minor hardware modifications I made to my CMS 9619A Advanced Single Board Microcomputer to get it to use a 32K SRAM chip. Unfortunately, I had to disable the EXORbus data bus transciever to get it to work. So, although the board works properly as a single board computer, it cannot access the EXORbus. With NitrOS-9 up and running, I would really like to regain the ability to use external I/O cards.

To get this to work, the data bus transceiver (U11) needs to be re-enabled, but only during the External I/O address space at $FF80 to $FFBF (checkout the CMS 9619 memory map for details). This can be done by combining the normal data bus transceiver enable signal with the signal for address line A15. This works because the only time the transceiver is normally enabled in the high address space is in the External I/O address space (because everything else in that range is onboard the CPU module). All we should need to do is invert the normal data bus transceiver (U11) enable signal, and NAND it to the A15 address line.

Fortunately, there are a few ICs on the board that are not fully utilized. We can use the 1st gate (pins 1->2) on the U1 74LS04 inverter IC to invert the data bus transceiver enable signal, and the first gate (pins 1+2->3) on the U3 74LS00 gate IC to NAND the inverted signal to A15.

 
No traces visible to pins 1 or 2 on U1 or U3

This is almost too perfect that these logic gates are available, so I'm sure it won't work. Also, since the board is already bodged in this area with the factory's dead-bug'ed delay line, all of the modifcations are easily reversible with no traces to cut.

Before Modifications Schematic
Before
After Modifications Schematic
After

After the modifcations, everything booted up properly and I was able to access my 32K SRAM at $0000-$7FFF However, I was unable to read any data from my known-good CMS 9650 8 port Serial I/O card. After some basic troubleshooting, I got to thinking... I don't think this processor card was EVER able to access the external bus- which is why I think I chose it for modfications. Major troubleshooting to come...

Thursday, May 28, 2020

EXORbus ATX Power Backplane Arrived...

Excited to see these EXORbus backplane cards arrive:

Monday, May 18, 2020

EXORbus ATX Power Backplane Ordered!

I just put in my first order for PCB fabrication today. After making some final modifications my ATX Powered EXORbus Backplane "MULTI-PLANE 9600", I finally got the courage to click the "Submit" button. If all goes well, I expect to sell the first round on Tindie at cost. I will keep this blog updated on the results.

Thursday, April 9, 2020

CMS 9619 Hardware Mods

Note the 5 28 pin sockets on the right side of
the board for 4K or 8K SRAM or ROMs

In order to get NitrOS-9 running on my CMS 9619 SBC, I am going to need a lot more RAM. This board is configured to have up to 8K of onboard RAM and 32K of onboard EPROM, with options to use 4K or 8K chips. 32K and 64K RAM expansion boards were available in several configurations, including battery powered non-volatile SRAM to retain state during power off. Unfortunately I haven’t seen any of these available at a decent price, so expansion boards are not a good option for me. I do have a 32K SRAM chip with a similar pin-out (part of an eBay Dragon 32 IC kit) to the 8K module which would fit nicely.

My board already has 8K of RAM installed in socket U34 ($8000-$9FFF), and 8K of ROM in socket U7 ($E000-$FFFF). Socket U20 is not selected by the PAL decoder on this particular board, either by design (being configured for 1 x 8K DIP SRAM vs. 2 x 4K SRAM) or due to some problem with the PAL. My new 32K SRAM needs to be selected and addressed, which requires some minor modifications to the board.

To select the new 32K RAM chip, I first raised pin 16 of the PAL decoder IC normally responsible for enabling the U20 RAM socket (apparently not working on my board). Once that was done, I used the A15 address signal to enable U20 socket instead. This required a short jumper wire from pin 3 (A15) to pin 16 (U20 CS') across the PAL address decoder. So now, whenever the A15 line is low ($0000-$7FFF), the SRAM in U20 will be enabled. This is perfect since the SRAM IC is 32K, and will fill the bottom half of the board's address space.

To address all 32K of the SRAM, I first cut the GND signal from pin 1 of the U20 socket. This is tricky since the trace is right against the socket. I ran a jumper from pin 5 of the PAL decoder to pin 1 of the U20 socket (A14). Then I set the jumper at TS19 to connect pins 2 and 3 (A13), and the jumper at TS6 to connect 8 and 10 (A11). Socket U20 now has the address lines it needs to decode all 32K of memory.

Two long jumpers to connect A13 (I realized later this is handled by jumper TS19) and A14,
and one short jumper for A15

I was hopeful that everything would just work with the modifications, but of course it wasn’t that easy. The problem has to do with the data bus transceiver (U11) on the board. It is driving “data” from the EXORbus onto the processor data bus in the address range of the new RAM. However, there isn’t anything on the bus to drive and it is just causing contention with the new SRAM. For now, I disabled the transceiver by disconnecting the dead-bug'ed delay line from the enable pin (pin 19) of the transceiver, and pulled that enable pin high with a short jumper wire to Vcc. This isn’t ideal because it disables all of the external bus, including the I/O address range in addition to the low memory range that we need. So right now the CMS 9619 can’t read anything else on the EXORbus.


Short jumper to disable the EXORbus data bus transceiver (U11)

So, with 40K of RAM (8K in U and 32K in U20), and 8K of ROM with sockets for another another 16K, the board is nicely outfitted to run some real programs.

Thursday, December 12, 2019

New EXORBus ATX Power Backplane

I recently designed this backplane/extender/ATX power injector for EXORBus:

The rendering does not show the card edge connectors that will be populated on the board. Hopefully, I can get the PCB produced some time in the near future. Please post a comment if you are interested, and would like me to order an extra for you. ~$30.