The PDP-11 architecture uses the upper 8 kilobytes of its 64 kilobyte address space to access registers of processor components or device controller cards. This is called “memory mapped I/O”. The I/O page occupies the 16-bit user mode addresses 160000 to 177776, (bzw) the 22-bit addresses 17760000 to 17777776.

The I/O page scanner creates a list of all addresses in the I/O page, which do not cause an UNIBUS timeout. With the resulting address list  you can

  • check wether your machine description file is complete
  • verify and correct DEC’s documentation. Unfortunately, their manuals are full of misspelled addresses. If a device is not at its documented position, but the same register set is found at an optically similar address, chances are high that you caught a bug.
  • Control relocation of multiple devices instances. If you have plugged in more than one instance of a device (for example: two identical disc controllers, four memory cards, etc.), devices must be relocated. Usually you must set switches to choose a different I/O start address for each device controller card. With the I/O page scanner you can check wether the relocation is as expected.
  • display all device registers in one big list, if you prefer that over having one Register window for each device.
  • get more information about unknown I/O cards. Sometimes you find third-party controller cards without proper identification (no manufacturer, no model print, or no documentation). Luckily those cards often emulates DEC cards. Determine which registers the unknown card implements by plugging her in and out between I/O page scans, then try to find a DEC card with the same register set. SimH is a big help again: attach as much devices as you like, then type “show cpu iospace”. You get a list of addresses together with device names.
  • If you’re connected to SimH, you can also perform an I/O page scan. The result is much like the “show cpu iopage” output, but you can access device registers then in a more comfortable way.

 

pdp11gui_iopagescanner

Scanning

If you press the “Start” button, the I/O page scanner reads every even address in the I/O page. Either the address yields a value, or it generates a UNIBUS timeout. The scan takes a lot of time ... typical more than 10 minutes! You can press the “Abort” button to stop the scan. If you do not so, progress is displayed in the window caption for your entertainment.

Result windows

The result of the scan is displayed in two sub-windows:

  • The “Global Register List” shows all implemented addresses ordered by value. Its exactly like the normal Register window. If a register address was already defined in the machine description file, symbolic information is shown, else device and register names are created automatically.
    To guess devices from addresses, all undocumented addresses are grouped in “device blocks”. A “device block” is a range of consecutive addresses. Such an address block is very likely the register window of a device. But sometimes devices occupy non -consecutive addresses, sometimes the address blocks of two devices have no gap of un-implemented addresses between them, so the “device block” is only a weak hint.
  • A preliminary description of all undocumented addresses is shown in the “new address description file”. The device blocks are displayed in the same syntax as the machine description file, so you can mark the address descriptions with your mouse and Copy&Paste them. Of cause you will overwrite the automatically generated names.
  • You can resize both windows by dragging the splitter control between them up and down.

An Example

In the example above, I performed an I/O page scan on my 11/44, only processor cards and one memory card were installed. Only a part of the big register list is visible. Since I have a nearly complete machine description file, most addresses are shown with good symbolic information. But you see an undocumented area of 256 words at address 17770200. I would be glad to know whats behind it!

You see also the CPU diagnostic ROM at 17765000, with the version info word sitting at 17765774. DEC’s “EK-KD11Z-TM-001 PDP-1144 System Technical Manual” listed this address as 17776774. Finding the CPU diagnostic ROM was in fact my primary motivation for writing the I/O page scanner!

Limitation

The I/O page scanner will exam lots of unimplemented addresses wich cause a UNIBUS timeout. On early machines like PDP-11/34, the console emulator can not give an error output, it just halts the machine, and contact to PDP11GUI is lost until you start the machine over the front panel again. Do not try an I/O page scan on 11/34!