This article originally appeared in My little (home) shop thread on Practical Machinist.
I only worked on the CPU board schematic a few minutes today, but I finished all the address decoding logic.
The 8088 only has 20 address lines, of that, 16 of them are used for addressing segments of 64KB each. The address lines A16 through A19 are used as card selects to talk to the peripheral cards. There is a 4 to 16 line decoder that takes the upper nibble of the CPU address, then converts that to a selector that is 1 of 16 lines on the bus. Fadal repurposed a bunch of address and logic lines to make these card selects.
A 20bit address is represented as 5 hex nibbles, like 0xFBC00, that’s segment 15, address BC00. That happens to correspond to the video memory on the video card. The first F selects card 15, which is the video card (we are talking base 0 numbers here, so 0-15), the BC00 selects the base address within the F segment. The F segment also contains the system ROM, which is located at FE000-FFFFF, an 8KB chunk. The video ram is only 1KB, so it occupies addresses FBC00-FBFFF.
It would seem that the memory expansion cards occupy a card select range, though I’m not certain exactly where the memory and NC executive ROMs are mapped yet. Once I have the schematic completed and the system ROM reverse engineered, I could design my own memory expansion card.
…some time shortly thereafter
I’ve finished the reverse engineering of the CPU board schematic, all except the little bit that does the battery backup of the memory (trivial).
Here’s what I learned:
The system ROM, which boots up the CNC control and tests things, is located at 0xFE000, the lookup table ROM is located at 0xFA000, but only the last 2K is used, so the table starts at 0xFB800.
The U3 user ROM, which contains 1/3rd of the NC executive, is at 0x00000, U4 is at 0x08000, and U5 is at 0x6000, with the onboard 32K of RAM at 0x68000.
A little peeve/note about Fadal CPU boards: They DO NOT HAVE 38K, this is just a confusing doublespeak by sales/support people.
The CPU has 32K of RAM, the video card has 1K of RAM, and each of the axis cards have 1K of RAM, that adds up to…you guessed it, 38K!
I have to look at the code to figure out where the rest of the memory expansion address space is, but this is what I know:
Segments 0x10000 through 0x5FFFF are open, that’s 5 segments of 64K, or 320KB. I’ve read that the early boards are limited to 422K of RAM, so if we break that down from marketing speak:
32K on board
6KB on the peripheral boards
That leaves 1 more 64K chunk somewhere in the address space that isn’t contiguous to the 64KB of ROM down low and the 32K ROM+32K RAM at 0x60000.
I’ll have to dig into the code to figure out when it senses the memory add-on cards and where they are located.
The 8088 processor can address 1MB of memory, given the way they laid out the memory now, they’ve got a couple of holes in the address space, however due to the goofy addressing scheme where each segment is tied to a board select on the bus, they probably allocate 5 segments to the axis drives and maybe some more.
Nothing really surprising or enlightening with the CPU card, all very straightforward, the most confusing part is the power on reset circuit, lots of annoying analog stuff to initiate the CPU reset.