Computers Overview
Commodore PET
Sinclair ZX80
Sinclair ZX81
BBC Micro
Sinclair Spectrum
Memotech MTX
    About
    Library
        Adverts
        Memotech
        Miscellaneous
        Program Code
        Reviews
        Technical

            Component Data

            Data Books
            Data Sheets
            Design Guides
            Tutorials

            MTX Specific

            Firmware
            Tech Notes
    Manuals
    Options
    Photos
    Projects
    Repairs
    Software
    Tools
    User Groups
    Video Wall
Memotech CP/M
Atari ST
Commodore Amiga
PDAs
DEC 3000 AXP
OpenVMS
Raspberry Pi

 

 
 
 

The Memotech MTX Series

FDXB.COM Disassembly

 

 

The FDX disk system was shipped with a CP/M version of Memotech BASIC called FDXB.COM.  The FDXB manual is available on the Manuals page, but in short, the program provides 80 column display and disc support for BASIC on the FDX. (An equivalent program, confusingly, also called FDXB.COM, was available for the SDX system.)

Martin has disassembled the program and made some observations on its operation . . . . .  

FDXB Disassembly  

FDXB is a program that allows MTX basic programs to run on the CP/M FDX system. This disassembly is of the FDX version. The version for SDX with 80 column board would likely have different driver code for the discs.

This FDXB.COM program is 34K in size and basically has 2 parts

  • 2K of Support and installation code

  • 32K Memory image of extended MTX BASIC.

 The executable file starts with a JMP to the setup code, is then followed by the 32K image and then the setup code itself.

The setup code takes great care to ensure that the NODE ring will work with FDXB, that code has only been partially decoded, just enough to ensure it's not relevant to the normal FDXB start up.  

 

Part 1: The loader code

The actual code is around 1.5K in size and the following sections have been identified:

1.1 Setup code

8103 Get and save the current user number, drive and record whether the program has been started with FDXB 40

 8120 Copy any auto run file name to the Channel #5 data area in the 32k image

812F Copy the 32K image into place from 0000 to 7FFF, CP/M becomes inoperative at this point

813A Check whether the NODE ring network is active

8152 Copy the current keyboard map into the 32K image

817C If FDXB has started in 80 column mode, set up suitable virtual screen tables

81B1 Setup the CP/M instance that is within the 32k image using the user and drive numbers recorded earlier

81D4 Test for NODE and proceed with the node specific setup is active

81DB Start the normal basic setup by clearing the common memory area

81E8 Set up the system variables as for the 32K MTX500

820A Auto run any ROMs in slots 6 or 7

822B Further NODE work in case the ROM has just been initialised

824F Test the NODE ring once more and move to the finalisation code if not

8255 More NODE specific code

8273 NODE high memory code assembled for EE00

83E3 Node setup code  

 

1.2 Finalisation code

8567 Clear the screen setup the 80 column, type 3 screen tables

8575 Setup the USER keyword

858B Go to the Ready prompt if there's no autorun file

858E Auto run setup code and jump into the 32K image to attempt the load/run the file  

 

Part 2: The 32K image once copied into place

The 32K image has 2 parts, the original 24K of ROM, re-compiled to occupy a flat 24K instead of 8K fixed and two 8K pages, with a few additional changes.

An extra 8K comprising of 80 column screen driver, sufficient parts of the CP/M BIOS and BDOS to run the discs and the BASIC extensions required for disc use.

 

2.1 Changes to "OS" at 0000 to 1FFF

0000-0007 RST 0 code removed and replaced with what looks like an attempt to use the CP/M warm boot instead, except the warm boot code isn't included in the truncated CP/M image.

0194-0205 Memory test etc. replaced with some utility routines, the "ROM" paging code just ensures that the RAM only mode is maintained.

0205-020A BASIC entry point changed to not to page in paged ROM 0

025D-0273 Ready prompt revised to consider the keyboard tables as well as the screen setup

126F-1270 Bug fix LD B,6 changed to LD B,5

189F-18A0 ROM paging disabled  

 

2.2 Changes to "ASSEM" at 2000-3FFF

None  

 

2.3 Changes to "BASIC" which is now assembled for 4000-5FFF

4525-452A bug fix around spaces after keywords?

4554-44557 "USER" keyword renamed "DISC"

47BD-46C2 "LEN " renamed "LEN" and 2nd "LN" changed to "FRE"

4CB2-4CB4 change run to close any open files before running a program

54FF-5503 ROM paging disabled

5669-5676 Bug fix around caps lock use?

57C3-58BA International keyboard support removed, replaced with various patches and part of the basic extensions.

59F6-59FE Syntax checking extended to the basic extensions  

 

2.4 8k additional support code 6000 to 7FFF

6000 80 column screen jump table

6026 Possible "spare" code setting up virtual screens

6056 80 column screen support routines

6300 CP/M BDOS supporting functions 13 to 41, the disc functions, only

6F00 CP/M BIOS, disc buffers and drivers

7700 MTX BASIC extensions    

 

 

 

Martin's original Word document
Also contains the disassembled program listing

 

 

mailto: Webmaster

 Terms & Conditions