REXCPM

From Bitchin100 DocGarden
Jump to: navigation, search

REXCPM.PNG

What is REXCPM?

REXCPM is an add-on memory card that plugs into the Option ROM socket in a supported laptop, augmenting significantly the amount of memory in the laptop as well as what that memory can be used for. REXCPM changes the way the laptop memory works:

  * REXCPM provides up to 4MB of battery backed SRAM to the laptop.
  * Like REX, REXCPM puts bank switched memory into the OPTION ROM memory bank (1x32k bank)
  * In addition, REXCPM disables (while installed) the internal installed RAM, and replaces it with bank switched memory (2x16k banks)

Why?

CP/M. The main goal of REXCPM is to enable support for Philip Avery's port of CP/M 2.2 onto the M100 hardware. CP/M requires the full 64k address space to be RAM in order to operate, and so a RAM based capability is needed.

RAMdisk. CP/M is a disk based operating system. REXCPM, via the 3 bank-switched memory regions, is able to transform the majority of the SRAM resource into a RAM based, battery backed, ultra fast disk.

...and of course, all of the classic capabilities of REX can be supported using SRAM as well! So REXCPM is really all of the best aspects of REX, combined now with a custom, supported CP/M implementation, opening the door to a wide range of new applications!


Links

Philip Avery's M100 CP/M Page

REX Products home page

REX Products ordering information

Hack to enable TTL serial data on the BCR port

Adapt the NSC800 CPU into the M100


The REX functionality included with REXCPM is aligned with REX#. Please visit this page for infomation on using REX#.

REX# wiki page

Status

  * REXCPM is now generally available, and can be ordered subject to availability.
  * Hardware design and test is complete.
  * Inventory status will be kept up to date at the Ordering page.

Quick Start

So, you have just received your REXCPM and want to get going.

AS SHIPPED REXCPM CONTAINS NO SOFTWARE!!!! You must INITIALIZE your REXCPM to get started!

IMPORTANT: CALL 63012 will not work prior to REXCPM being initialized with RXCINI!


Here's what you need to do:

  0.  Read this entire page!  There is information further in the page that you need to know to be able to
      initialize the device, and get started
  00. AFTER going through the initialization procedure outlined below and the main REX software is loaded 
      onto your REXCPM, it will be able to be used just like REX. You can review the information at the REX Wiki 
      page for general information about REX use. But don't jump ahead just yet!
  1.  Install your REXCPM.  Links to information about installation in M100 and T102 is at this page, below.
  2.  Initialize your REXCPM by running RXCINI.DO.  This lets you load the RXCMGR application and initialize the directory.
      Unlike REX, REXCPM is based on RAM and cannot be shipped pre-programmed. 
      The user must install the RXCMGR application, which is a binary file which must be loaded into a 
      specific memory block in the SRAM.
      Additionally, the RXCMGR application needs a directory, to track what ROM images are stored in REX.
      Please scroll down and read about how to use RXCINI.DO.  Software is available below.
  3.  Now you are ready to use REXCPM and RXCMGR.  You can use it just like a REX.  Create ram backups, load option ROMs etc.


Once initialization is complete, you can access RXCMGR.

  Power cycle the laptop to ensure that REXCPM hardware is in the default state.
  In BASIC, type 
      CALL 63012
  This should start RXCMGR, and should install RXCMGR in the laptop directory.

Hardware Installation

Installation information for Model 100 here ----> M100 install

Installation information for Tandy 102 here ----> T102 install

Use with M100CP/M

REX operation and CP/M operation are independent. To install CP/M, follow the instructions on the M100CP/M page. The link to Philip's M100CP/M page is near the top of this page. Once CP/M is running, REX provides a quick mechanism to "jump" into it.

  REX Quick Menu function has been expanded to include a new command.
  CNTL-C from MENU immediately transfers control to CP/M.

Use with MVT100 external Video

Currently the REXCPM "ROM" software is not compatible with the VT100 driver for M100. I am working on integrating this function, but for now they conflict because they both try to use the CHGET hook.

It is possible to use use MVT100 with REXCPM by un-installing the REX hook (CNTL-X at MENU). After REX is inoperative, the VT100 driver can be loaded. But since there is no way to remove the VT100 software once installed, I would suggest caution.

As soon as I have integrated the VT100 driver into REXCPM, I will post an update.

Documentation

  Stay tuned!

Software

"The ROM"

As shipped, REXCPM is a blank piece of SRAM. In order to get rolling you need to load in the REXCPM "ROM" application. Use RXCINI to load the following software.

Here's the software:

REXCPM "ROM" Build Status File
RXC_11 39 Beta. Still testing! RXC_11_b39.ZIP
  Note:  REXCPM "ROM" software is based on classic REX with several differences. 
         - 16 32k Blocks are available for use by the REXCPM "ROM"
         - the remaining SRAM is dedicated to CP/M use
         - the software has some simplifications
         - SRAM based operation means some low level changes to how REX works
         Please communicate any bug reports.

Initialization

A tool is available for initializing a fresh REXCPM, or if you want to rebuild it you can use this tool also. Since REXCPM is based on SRAM, and there is no on-board battery (only a large 1000uF capacitor), by the time you receive your REX the memory contents will be blank. So, you have to load REXCPM with the REXCPM application and any option ROMs you want to use.


Here's the software:

Utility Version File
RXCINI 1 RXCINI.DO
  Instructions
  ============
  1.  Make sure REXCPM is in default state, meaning
      a. RXCMGR is not running (use CNTL-X to remove hooks, or F7 from RXCMGR)
      b. Power cycle once, to ensure the default memory blocks are selected
      c. Optionally, cold-rebooting the laptop after a power cycle ensures a clean state. 
  2.  Load RXCINI.DO via serial transfer, or TPDD transfer.  It is 8 bit ASCII.
      If transferring via serial, use 8 bit mode, not 7 bit.  RXCINI.DO contains encoded machine language.   
  3.  RUN RXCINI.DO in BASIC.
      RXCINI.DO allows you to do either or both of two processes:
      a.  You can choose to LOAD a REXCPM application (28kB file)
      b.  You can choose to INITIALIZE (reset to blank) the REX directory, which stores ROM image names.  
      You can guess that initializing the directory removes any existing directory entries.
      The REXCPM application EXCLUDES the directory, so you must initialize the directory if you are 
      starting from scratch and there is no existing directory (or stored images!).
  4.  Configure RXCINI.DO to do the following:
      a.  indicate YES to "Load REX code:"
      b.  indicate YES to "Init REX dir :"
      c.  execute these choices
  5.  The loader will load up the machine language routine, and begin to execute
  6.  To LOAD a fresh REXCPM application, RXCINI.DO accesses a remote TPDD device to get the binary 28k file.
      RXCINI.DO contains it's own TPDD access routines, and does not need a DOS.
      a. Ensure a TPDD device is ready to go with the source file as needed.
      b. Supply the correct file name (6 characters, no extension, case sensitive)
      File extension is automatically set to .BR
  7.  Let the program run
      When complete, REXCPM should have a fresh "ROM" load for REXCPM, and a freshly initialized directory.
  From BASIC,
  CALL 63012
  to start/install RXCMGR.


  Note:
  If you see an error message - "Can't run!", this means that REXCPM is not in the default state.

Backup and Restore

A tool is available for backing up or restoring REXCPM memory contents to TPDD. Some of the REXCPM SRAM is dedicated to CP/M while other memory is dedicated to REX functionality. This tool allows you to select:

  * Either a Backup or Restore process
  * REXCPM or CP/M memory regions
    REXCPM memory includes REXCPM ROM image + directory + 16 blocks
    Total of 17 32kB blocks.
    CP/M memory includes all of the CP/M disk space, including directory (but excluding CP/M OS)
    For 2MB, 40 32kB blocks.  For 4MB, 104 32kB blocks.
  * Serial port speed - 19200 8N1 or 76800 8N1 "Large Packet"


The tool uses the standard RS-232 port on the M100. Standard TPDD clients can operate at 19200 baud, but LaddieAlpha is capable of operation at 76800 baud, and also able to support large packet sizes, both of which help to speed up the process.

  NOTE:  LaddieAlpha with 76800 Large Block support is not generally available yet.  Stay tuned.

Backup/Restore processes can take some time; use this table for guidance.

Process Memory size Duration Duration
REXCPM either 19200 5:20 min
CP/M 2MB 19200 13 min
CP/M 4MB 19200 33 min
REXCPM either 76800 2:10 min
CP/M 2MB 76800 5 min
CP/M 4MB 76800 13:15 min

Here's the software:

Utility Version File
RXCUTL 1 RXCUTL.DO
  Instructions
  ============
  1.  Make sure REXCPM is in default state, meaning
      a. RXCMGR is not running (use CNTL-X to remove hooks, or F7 from RXCMGR)
      b. Power cycle once, to ensure the default memory blocks are selected
      c. Optionally, cold-rebooting the laptop after a power cycle ensures a clean state. 
  2.  load RXCUTL.DO into the M100 using a terminal program on PC (lots of ways to do this)
      It is 8 bit ASCII.
      If transferring via serial, use 8 bit mode, not 7 bit.  RXCINI.DO contains encoded machine language.
  3.  Enter BASIC and type RUN"RXCUTL.DO"
  4.  Select Process, REX or CP/M, and speed
  5.  The loader will load up the machine language routine, and begin to execute
  6.  Ensure that a TPDD client is attached to the serial port
  7.  For either process, supply 6 character case-sensitive name for the file.
      File extension is set to .BB
  8.  Once executed, RXCUTL will attempt to either write or read all required data to/from REXCPM SRAM.


  Note:
  If you see an error message - "Can't run!", this means that REXCPM is not in the default state.

Acknowledgements

I would like to thank those that have contributed to the project:

Philip Avery - for his commitment to this project and for the port of CP/M to the M100

John Hogerhuis - for all his technical support, and for this Wiki resource

Kenneth Pettit - for VirtualT as this project would not have happened without it

Brian White - for his innovative PCB2MOLEX carrier design


FAQ

Q. I am having trouble loading RXC***.DO using serial transfer. It keeps crashing!

A. Please ensure you are transferring the file to the laptop in 8 bit mode. While the file is ASCII, it contains 8 bit ASCII because there is embedded machine language.


Q. Why do I need an adapter?

A. The adapter does 3 things: it disables the internal RAM, it sends 'RAM active' signal to REXCPM, and it provides battery power to REXCPM to keep the SRAM "alive".


Q. Is Tandy 102 a plug and play installation?

A. No. Model 100 is plug and play, but T102 requires soldering of a single wire. Details are available on this site for how to install on T102.


Q. Will REXCPM come out for T200?

A. There are currently no plans to support REXCPM in the T200 platform.


Q. Will REXCPM come out for NEC PC-8201?

A. This is being investigated.


Q. Are the REX memory images which REXCPM saves and restores to TPDD compatible with the images (.BY files) saved and restored by REX classic? Ie. will I be able to take a .BY file I saved from my REX classic, load it into REXCPM, switch to it, and have everything work properly? Or is this going to blow up in my face?  :)

A. There were no changes in this functionality, so it should work. I have not tested this though. REXCPM is always 32k images, so your REXclassic image would also need to be 32k.


Q. Can I access the banking functionality of REXCPM via BASIC?

A. Yes. There are 3 banks: Option ROM 0000-7FFF, low RAM 8000-BFFF and high RAM C000-FFFF. All 3 are accessible but the only practical use case is for Option ROM since BASIC uses both RAM banks. The BASIC program would need to make use of a machine language routine to set the register value in REXCPM to the specific memory bank of interest. Then, to access the RAM you would need another machine language routine. Examples of such code can be made available at this wiki.