BASFILE - A virtual disk manager for the Sharp PC-1500/A and the TRS-80 PC-2

© Christophe Gottheimer, 1986-2012
Download ZIPped archive: basfile.zip (340 KB).

Description:

BASFILE is a virtual disk manager for the Sharp PC-1500/A and the TRS-80 PC-2.

Notes: This code is expected to run in the Sharp PC-1500/A and the TRS-80 PC-2. This version is still in pre-alpha release. It is not fully mature and bugs may be present.

Disclaimer:You use this software at your own risk! I am not responsible for any damage, data loss or corruption occurring when using this software. C.G.

0. History

BASFILE was inspired by XMEM, an X-Functions module for the HP-41C/CV/CX. In 1986 I was a student engineer, and had friendly "programming battles" with a friend who owned a HP-41CX. Since I owned a PC-1500, I tried as a challenge to write a XMEM utility in PC-1500 machine language. The XMEM of the HP-41 is an extended memory used for storage of programs (no execution) or data and text files (and some others later). The programs may only be saved to/loaded from XMEM, but data and text files were accessed as relative files, with write and read functions, and even insert and delete.

I lost the original code (saved on an audio cassette), but I recovered my handwritten notes and some parts of the code on some "work-in-progress" audio archives I made. More recently, people on the forum of www.silicium.org motivated me to rebuild my XMEM manager. This new version is called BASFILE. I also introduced the new function B1COPY to save to/load from the bank 1 of the bank-switchable CE-163 module (This module has 2 banks of 16K).

Definition of the terms used in this presentation:
    . XMEM designates the RAM area removed from the BASIC RAM and managed as a virtual RAM disk.
    . Bank1 stands for the area managed by BASFILE on a CE-163 module.
    . BASIC RAM stands for the "normal" BASIC program area.
    . RESERVE memory stands for the RESERVE area where the key F1..F6 are defined.
    . User ML code stands for an area reserved for your own ML code (i.e. space reserved by a NEW &nnnn).

All the examples and addresses are assuming a CE-161/CE-163 module.

For the different modules, base is mapped as follow:
    &0000 : CE-161/CE-163 (16K module)
    &2000 : CE-159 (8K module)
    &3800 : CE-155 (8K module)
    &4000 : Standard RAM (with or without CE-151 4K module)

And this is the memory organization with BASFILE loaded:
    base + &0008 .. &00C4 : RESERVE memory
    base + &00C5 .. &012F : XMEM pointers
    base + &0130 .. &1147 : BASFILE code
    base + &1148 .. &nnnn : XMEM
    base + &nnnn .. &47FF : BASIC RAM for PC-1500/PC-2
    base + &nnnn .. &57FF : BASIC RAM for PC-1500A

Due to the keyword table coming with BASFILE, it may be located anywhere. The base address should be &nnC5 where &nn has to aligned on 2K boundary, ie, &00, &08, &10, &18, &20, &28, &30, &38, &40, &48 ...

1. Installation

1.1 Contents
Archive contents:
COPYING The GPLv2 license.
README This introduction.
basfile.c The C relocator. To build it, you need gcc and do gcc -o basfile basfile.c
BASFILEnnnn.BIN The binary image usable with PockEmul or the make your own WAV file.
BASFILEnnnn.WAV The WAV audio files made by bin2wav from the PocketTools.
BASFILEnnnn.FRAG The LHfragments files for use with the lhTools.
BASFILE00C5.ASM A disassembled file from the image BASFILE00C5.BIN
BASFILE00C5-B1.ASMA disassembled file from the image BASFILE00C5-B1.BIN
1.2 Images naming
The images names are BASFILEnnnn[-[R0][B1]].ext with:
    nnnn     : The base address in hexadecimal
    [-R0]    : The images for ROM0, with keyboard driver
    [-B1]    : The images for the bank1 extension (CE-163 only)
    [-R0B1] : The images for both ROM0 and bank1 extension
1.3 Provided images
BASFILE is relocatable using the provided basfile.c program. To simplify the installation, the binaries and WAV images for several addresses are provided as follows:
    BASFILE00C5.WAV : At address 0x00C5 - Need a CE-161 or CE-163 module
    BASFILE20C5.WAV : At address 0x20C5 - Need a CE-159 module
    BASFILE38C5.WAV : At address 0x38C5 - Need a CE-155 module
    BASFILE40C5.WAV : At address 0x40C5 - Need a CE-151 or in RAM for PC-1500A

Some special images are also provided:
    BASFILE00C5-B1.WAV : At address 0x00C5 with CE-163 Bank1 (CE-163 only)

For use with the old ROM (ROM0), do the test:
    PEEK &E2B9
If you get 56, you have a new ROM and you may use the standard images with the keyboard driver. If you get another value than 56, you have a bugged ROM0 and you should use the images with the RESERVE memory. These images have the -R0 in their name. (Note that Bank1 extension is usable with the ROM0.)
These images are:
    BASFILE00C5-R0.WAV : At address 0x00C5 - Need a CE-161 or CE-163 module
    BASFILE20C5-R0.WAV : At address 0x20C5 - Need a CE-159 module
    BASFILE38C5-R0.WAV : At address 0x38C5 - Need a CE-155 module
    BASFILE40C5-R0.WAV : At address 0x40C5 - Need a CE-151 or in RAM for PC-1500A
    BASFILE00C5-R0B1.WAV : At address 0x00C5 with CE-163 Bank1 (CE-163 only)

The program needs 4219 bytes. Depending of the image you want to load, do the following:
    NEW &1148 for BASFILE00C5.WAV and BASFILE00C5-R0.WAV
    NEW &3148 for BASFILE20C5.WAV and BASFILE20C5-R0.WAV
    NEW &4948 for BASFILE38C5.WAV and BASFILE38C5-R0.WAV
    NEW &5148 for BASFILE40C5.WAV and BASFILE40C5-R0.WAV
    NEW &13B0 for BASFILE00C5-B1.WAV and BASFILE00C5-R0B1.WAV
and load the BASFILE with CLOAD M
After 5 minutes and a few seconds, BASFILE is loaded.
1.4 Installation
Depending of the image you have loaded, do the following according to your image.

BASFILE00C5.WAV:
    NEW &1148
    POKE &785B,&0F,&8B
    POKE &79D1,&08
    POKE &79D4,&55
    MINIT

BASFILE00C5-B1.WAV:
    NEW &13B0
    POKE &785B,&0F,&8B
    POKE &79D1,&08
    POKE &79D4,&55
    MINIT

BASFILE00C5-R0.WAV:
    NEW &1148
    POKE &79D1,&08
    CALL &0F88
    MINIT (F1/I)
* Note that the POKE &79D1,&08 and the CALL &0F88 should be called each time the computer is powered on.

BASFILE00C5-R0B1.WAV:
    NEW &13B0
    POKE &79D1,&08
    CALL &0F88
    MINIT (F1/I)
* Note that the POKE &79D1,&08 and the CALL &0F88 should be called each time the computer is powered on.

BASFILE20C5.WAV:
    NEW &3148
    POKE &785B,&2F,&8B
    POKE &79D1,&18
    POKE &79D4,&55
    MINIT

BASFILE20C5-R0.WAV:
    NEW &3148
    POKE &79D1,&18
    CALL &2F88
    MINIT (F1/I)
* Note that the POKE &79D1,&18 and the CALL &2F88 should be called each time the computer is powered on.

BASFILE38C5.WAV:
    NEW &4948
    POKE &785B,&47,&8B
    POKE &79D1,&24
    POKE &79D4,&55
    MINIT

BASFILE38C5-R0.WAV:
    NEW &4948
    POKE &79D1,&24
    CALL &4788
    MINIT (F1/I)
* Note that the POKE &79D1,&24 and the CALL &4788 should be called each time the computer is powered on.

BASFILE40C5.WAV:
    NEW &5148
    POKE &785B,&4F,&8B
    POKE &79D1,&24
    POKE &79D4,&55
    MINIT

BASFILE40C5-R0.WAV:
    NEW &5148
    POKE &79D1,&28
    CALL &4F88
    MINIT (F1/I)
* Note that the POKE &79D1,&28 and the CALL &4F88 should be called each time the computer is powered on.

In case of custom image generation (see 2. below), follow the instructions given by the relocator program as for the installation.

2. Image generation

If you want to install BASFILE to another location, use the basfile program.
Compile basfile:
    gcc -o basfile basfile.c
Run the basfile with the new location wanted in hexadecimal without 0x:
    /basfile [--rom0] [--bank1] [mylocation]
If no location is given, the default CE-161/CE-163 base address 0x00C5 is taken.
If --rom0 is specified, replace the keyboard driver code with the RESERVE areas.
The image will have -R0 added in its name.
If --bank1 is specified, add the Bank1 extension with the special command B1COPY.
The image will have -B1 added in its name.
Both --rom0 and --bank1 may be specified. The image will have -R0B1 added in its name.

Follow the installation directives printed while patching the code.
You will get a binary image called BASFILEmylocation.BIN
To build a WAV file, you need to call bin2wav as follow:
    bin2wav BASFILEmylocation.BIN BASFILEmylocation.WAV -t bin -p 1500 -a 0xmyloaction -s 5 -n BASFILEmylocation
The NEW &mylocation+1148 (or +13B0) address is printed.

NOTE: this program needs to respect some rules, because it declares a new BASIC key table. This table should be installed only at addresses corresponding to 2K (&0800) boundaries. i.e. 0, &800, &1000 .. &4800, &5000,etc. are valid base addresses. The basfile will check the given address, and reject it if it does not start on a 2K boundary.
The address should be on the form 0xxxC5, with the high byte &xx one of the values 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, etc. and always with a lower byte to &C5.

Example:
    0x28C5 is valid
    0x1800 is not valid (not with the lower byte to 0xC5)
    0x14C5 is not valid (not aligned on a 2K boundary)

In the following example, we build BASFILE for the address &08c5:
    ./basfile 0x8c5
You will get:
    Relocating BASFILE code to &08C5
    BASFILE has NO bank1 B1COPY access. Removing code...
    Initializing BASFILE pointer to &1948
    BASFILE08C5.BIN: Checksum at &1946 = &879F
    Written BASFILE08C5.BIN, 4227 bytes, full checksum &88C5
    Creating LHFRAGMENT file BASFILE08C5.FRAG to use with lhdump
    BASFILE is now ready to loaded on the PC-1500/A/PC-2 with CLOAD M
On the PC-1500/A/PC-2, do:
    CLOAD M
    NEW &1948
    POKE &785B,&17,&8B
    POKE &79D1,&0C
    POKE &79D4,&55

On the PC-1500/A/PC-2, do:
    CLOAD M
    NEW &1948
    POKE &785B,&17,&8B
    POKE &79D1,&0C
    POKE &79D4,&55
and
  MINIT

3. Use it

3.0. The keyboard driver
If you have a new ROM, you may install an image with the keyboard driver. You will get:
. Auto-repeat of the keys (except Shift and DEF)
. OFF will power-off without reinitializing the keyword and keyboard vectors
. SHIFT+CA will "clear" the pending state of PCALL/PRETURN and restore the environment to the BASIC RAM (exit from PENVRN)
. ENTER will compile the new keywords. These keywords may be also abbreviated with !. MD! will compile MDIR. When the environment is set to a BASIC file in XMEM, ENTER in mode PRO will raise an ERROR 26. This will avoid modifying the file in XMEM and corrupting it.

If you have an old ROM or prefer to load a RESERVE memory based image, you will have to follow this procedure:
. At the first installation, do a
    CALL &nn00+&0F88
    CALL &nn00+&0F88
The first call will activate the keyword table vector. The second will copy the first page into the RESERVE memory.
. Each time the computer is powered-on, you need to redo
    CALL &nn00+&0F88 or press F6/I
. There are 2 pages. The switch is done by F6/I or CALL &nn00+&0F88

The two pages of the RESERVE memory are defined below:

Page 1F1 !F2 "F3 #F4 $F5 %F6 %
IMINITMMEMMDIRMNAMEMKILLCALL &xy88@
IIPSAVELOADGSAVEGLOADB1COPYHEX$
IIIPCALLPRETURNPENDALLPSTACKPENVRN 
Page 2F1 !F2 "F3 #F4 $F5 %F6 %
IMINITMMEMMDIRMNAMEMKILLCALL &xy88@
IIFCREATEFOPENFCLOSEB1COPYHEX$ 
IIIFWRITEFREADFEOFFSEEKFTELL 

Note that B1COPY is available only for the images with the bank 1 extension for the CE-163 module.
3.1. XMEM management
MMINIT [size]
    - Initialize the XMEM virtual disk with the size given. If no size is given, reduce the size of the XMEM to have no more byte free. Note that each file created in the XMEM require 16 bytes for its header.
MMEM n - Return XMEM informations depending of the value n
    n = 0 : Size of the XMEM
    n = 1 : Number of bytes free in the XMEM
    n = 2 : Absolute base address of the XMEM
    n = 3 : Absolute end address of the XMEM
    n = 4 : Current end address of the XMEM
MDIR [filename]
    - List all files in the XMEM. The name is printed. The MODE key switches between name and full information display. In full information display, MDIR shows each entry as:
      NNNNNNNNNNN TTT SSSSS U
    where
      NNNNNNNNNNN is the filename (up to 11 characters)
      TTT is the type:
        AS : BASIC program
        LHX : LH5801 ML executable
        DAT : Data file with numeric and string data
        TXT : Text file
        GRP : Graphic file
        BK1 : Bank1 file descriptor (image -B1 only)
      SSSSS is the size in decimal
      U is the unit (0 to 7) assigned to the file or . if the file is not opened
If a filename is given, MDIR will display this file in full information mode.
The up-arrow key shows the previous file. The down-arrow key shows the next file. OFF or BREAK exits from MDIR. When the end of the XMEM is reached, MDIR will exit.
MNAME oldname,newname
    - Rename the file oldname to newname.
MKILL filename[,filename[,...]]
    - Remove the specified files from the XMEM. Their contents are lost! It is not possible to recover a file after MKILL.
3.2. BASIC and ML programs
3.2a. BASIC programs
PSAVE filename
    - Save the current BASIC program into the filename in XMEM.
PLOAD fiename
    - Load the filename from XMEM to BASIC program area.
PCALL [filename][,lineno]
    - Calls the BASIC program filename in XMEM, or the current BASIC program in the BASIC area if no name is given. When called, a call stack is filled, to let programs to return to the caller. There are 8 levels in the call stack. If lineno is given, the program starts at the give line.
PRETURN - Return to the caller program. If no caller, raise an error.
PENDALL - Finish the execution (like END). Kill the call stack and restore the environment to the BASIC area?
PSTACK - Initialize the call stack. This should be done by the first program calling some others.
PENVRN [filename]
    - Set the environment in the BASIC file specified or to the BASIC area if no name is given. When the environment is set into a BASIC program in XMEM, the ENTER key will raise an ERROR 26 to avoid the modification of the file. PENVRN or PENDALL or SHIFT+CA exits the environment and restores the BASIC area.
3.2b. ML programs
PSAVE startaddr,endaddr;filename
    - Save the binary area between startaddr and endaddr as an LH5801 ML executable. The original address is saved.
PLOAD [destaddr,]filename
    - Load the LH5801 ML executable at the given destaddr or at the original one if no destaddr is given.
PCALL filename[,variable]
    - Lauch the LH5801 ML executable. If a variable is given, the BC and A registers are filled from this variable. On return, if the carry is set, BC and A are used to return value to the varible. This is the same mechanism as the standard CALL execaddr[,variable].
3.3. Data and text files
FCREATE size[,T],filename
    - Create a data (or text file if ,T is given) of the given size. Data file may contain numeric data or string at the same time. Text file may contain only ASCII text.
FOPEN unit,filename
    - Open the filename and assign it the unit given. An unit is a number from 0 to 7. The file remains opened until it is closed or deleted.
FCLOSE [unit[,unit[,...]]]
    - Close the file assigned with the given unit or all units if no parameter is given.
FWRITE unit;val[,val[,...]]
    - Write the value into the file assigned with the unit. Several values may be specified with a command. If the file is a data file, numeric values or strings may be written. If the file is a text file, only ASCII string may be written.
FREAD unit
    - Read from the file assigned with the given unit. Numeric values or strings may be read from a data file. ASCII strings may be read from a text file.
FREAD (unit, nbchar)
    - Read only nbchar characters from a text file.
FEOF unit
    - Return 1 if there are no more data to read into the file assigned to the unit. 0 if some data are available.
FTELL unit
    - Return the current record for data file or the current offset for text file assigned with the unit.
FSEEK unit[,offset]
    - Set the unit read/write pointer to the given record or the given offset.
3.4. Graphic files
GSAVE [col1[,col2][,flags];]filename
    - Save the current graphic screen from col1 to col2 if specified to the filename. If col1 is not specified, take the column 0. If col2 is not specified, take the column 155. The flags is a string containing the following characters:
      C : Clear the column. Else the value is OR'ed with this in the file before to be saved.
      X : The column value is XOR'ed before to be saved.
      D : Duplicate the column. In this case, only 78 columns may be saved instead of 156.
GLOAD [col1[,col2][,flags];]filename
    - Load the graphic screen with the columns saved in the file from the col1 to the col2. If col1 is not specified, take the column 0. If col2 is not specified, take the column 155. The flags is a string containing the following characters:
      C : Clear the column. Else the value is OR'ed with this in the screen before to be displayed.
      X : The column value is XOR'ed before to be displayed.
      D : Duplicate the column. In this case, only 78 columns may be displayed instead of 156.
3.5. Bank1 (CE-163 only, -B1 images)
-------------------------- IMPORTANT NOTE --------------------------
The feature described in the 3.5 section is FULLY EXPERIMENTAL, so
save to a host or to a audio tape the important programs or data
before to transfer them in bank. YOU USE IT AT YOUR OWN RISK !!!!!

If you install the bank1 extensions, you SHOULD NEVER GO BY YOURSELF
IN THE BANK 1. You may corrupt the bank1 and loose all files and
data saved into this bank. Also this may let some incoherences
between the BK1 descriptors in XMEM and the data in bank 1.

If you installed an -B1 image with keyboard driver, you will crash
the PC1500/A/PC-2. Or you need to disable the keyboard driver before
switching manually to bank 1. To do this: POKE &79D4,0

NEVER COPY FROM/TO BANK1 a block which overlap on standard RAM, ie,
&4000..&47FF/&57FF. The result may be unpredictable and will be
corrupted.
--------------------------------------------------------------------

B1COPY filename%0,filename%1
    - Save the filename%0 from XMEM to a file located in the bank 1 of the CE-163 module. This will create a descriptor of type BK1. The header of the file is saved, and its data or code is copied into the bank 1.
B1COPY filename%1,filename%0
    - Load the filename%1 from the bank 1 to the XMEM. The filename%0 is recreated with the same characteristics (type and size) as the original.
B1COPY "sssseeeebdddd"
    - Copy to/from anywhere in bank 0 from/to anywhere in bank 1. You are own responsible of the data you put or get with the bank 1. The syntax of the string is:
      ssss :: The start address of the source block
      eeee :: The end address + 1 of the source block
      b :: The destination bank with < for bank 0 and > for bank 1
      dddd :: The destination address in the destination bank
For example,
B1COPY "000800C5>1008" will copy the RESERVE area (&0008..&00C4 (end address is + 1)) from bank 0 to &1008 in bank 1
B1COPY "2ADA2E78<11B0" will copy the block &2ADA..&2E77 from bank 1 to &11B0 in bank 0
MKILL filename%1
    - Delete a file from bank 1. This will delete the descriptor BK1 from XMEM and recover the space allocated to the data from the bank 1.
MMEM n - Return bank 1 informations depending of the value n
      n = 5 : Number of bytes free in bank 1
      n = 6 : Current end address in the bank 1
      n = 7 : Absolute end address of the bank 1

BASFILE uses the whole 16K (&00C5 .. &3FFF) by default for the bank1 extension. If you want to use a less amount of bank1 for XMEM backup, do the following before doing any B1COPY to bank1:
    Patch the contents of the pointers at &00CA/CB and &00CC/CD:
      &00CA : The current end address of the bank1 storage area
      &00CC : The absolute end address of the bank1 storage area

For example, we want to only from &08C5 to &27FF in bank1 for storage, do:
    POKE &00CA,&08,&C5
    POKE &00CC,&27,&FF

We do not need an absolute base address because the base address of the files stored in bank 1 are registered in the BK1 files, standing in bank0.
3.6. Others
HEX$ n - Return a 4 characters string of n converted to hexadecimal

4. Errors

4.1. Standard errors for the XMEM
ERROR 26 : ENTER in mode PRO with an environment set in XMEM
ERROR 210 : MINIT invalid argument
ERROR 211 : Incorrect file name
ERROR 212 : Duplicate file
ERROR 213 : No such file
ERROR 214 : Can not create file
ERROR 215 : File type error
ERROR 216 : File already opened
ERROR 217 : Unit is not opened
ERROR 218 : Unit is already opened
ERROR 219 : No room in file to write
ERROR 220 : No more data in file to read
ERROR 221 : Invalid delimiter found
ERROR 222 : No room in XMEM to save/create a file
ERROR 223 : No room in PCALL stack
ERROR 224 : PCALL stack is empty
ERROR 225 : Invalid flags for GSAVE/GLOAD
ERROR 226 : col1 >= col2 for GSAVE/GLOAD
4.2. Bank1 extension errors
ERROR 228 : No room in bank 1 to save the file

5. ML custom area and BASFILE

Because BASFILE "wants" the XMEM to be just before the BASIC RAM, it is not recommended to locate ML code between BASIC RAM and XMEM. When you change the size of the XMEM (command MINIT), the BASIC RAM is moved. The "unkonwn" ML zone my be overwritten by the XMEM or the BASIC RAM.

There are 2 solutions:

1) Use a BASFILE starting at another address, and put the ML code below the BASFILE code. For example with a CE-161 module, installing the BASFILE code to &10C5 (image BASFILE10C5...) will let the space &00C5..&10C4 for ML code. Because of the constraint for relocating BASFILE, this solution requires the ML area to be a 2K multiple. To do so, just choose a BASFILE image starting at the upper address you want.

2) Insert the ML code between the BASFILE code and the XMEM. This will prevent the ML code to be overwritten by the XMEM or the BASIC RAM. This has the advantage that the size of the ML code may be any value you want, but it will never change after BASFILE is installed. To do so, once BASFILE is installed on the PC-1500, do:
    NEW &nnpp (start of BASIC RAM)
    POKE base + &00D2, &nn,&pp, &nn,&pp, &nn,&pp
    MINIT
The new XMEM is now located to &nnpp with a size of 0.
(Pointers may be checked by MMEM 2 and MMEM 3).
Now NEVER use the NEW &.... command. Let BASFILE do it itself.
For example, with a CE-161 and the image BASFILE00C5:
    NEW &1A80
    POKE &00D2, &1A,&80, &1A,&80, &1A,&80
    MINIT
Now a NULL XMEM is initialized.
    MINIT 2047
A XMEM of 2048 bytes is now allocated. The memory map is:
    &00C5 .. &1147 : BASFILE and XMEM pointers
    &1148 .. &1A7F : User ML code
    &1A80 .. &217F : XMEM (MMEM 0 return 2048 because a &FF is always inserted in the XMEM)
    &2180 .. &47FF : BASIC RAM (MEM return ;;;;)

Because files may move depending of the operations done, it is better to have relocatable or address independent ML routines. PCALL starts the ML code at the current file address. If the ML routine must be at a defined address, put the ML code to a User ML code area and just register a JP &MLcodeaddress with a PSAVE &xxxx,&yyyy;"codename" and after you will be able to call your code with PCODE "codename".

Example:
Do the following:
    POKE &7900, &BE,&E6,&69, &9A
    PSAVE &7900,&7903;"DOBEEP1"
You have created a new file of type LHX (LH5801 eXecutable) named "DOBEEP1".
And you can call it by
    PCALL "DOBEEP1"
... you will hear a beep !

6. Pointers and working areas

6.1. Standard XMEM
base + &00C5/C6/C7/C8/C9 : Working area for temporary values
base + &00CE : Level of the call stack
base + &00CF : Status flags (2 = PENVRN active)
base + &00D0 : Size of the XMEM (MMEM 0)
base + &00D2 : Absolute base address of the XMEM (MMEM 2)
base + &00D4 : Absolute end address of the XMEM (MMEM 3)
base + &00D6 : Current end address of the XMEM (MMEM 4)
base + &00D8 : Pointer to the last file
base + &00DA : Pointer to the file before the last one
base + &00DC : Base address for BASIC program environment
base + &00DE : End address for BASIC program environment
base + &00E0 .. &00FF : Units (8 x 4 bytes)
base + &0100 .. &012F : Call stack (8 x 6 bytes).
6.2. Bank1 extension
base + &00CA : Current end of the bank1 save area
base + &00CC : Absolute end of the bank1 save area

7. Known bugs

- GSAVE/GLOAD are not fully mature. They were developed as a demo...

8. To do

- Correct bug.
- Some optimizations may be realized in the F* unit management.
- Enhance the GSAVE/GLOAD and graphic files management.
- Add new powerful functions...

9. Credits

- Franck Eveno and Olivier de Smet for the tests.
- Members of the Mysilicium forum: http://www.silicium.org/forum/viewforum.php?f=46

10. Copyright and license

Copyright 1986-2012 Christophe Gottheimer

BASFILE is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. Note that I am not granting permission to redistribute or modify BASFILE under the terms of any later version of the General Public License.

This program is distributed in the hope that it will be useful (or at least amusing), but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program (in the file "COPYING"); if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Return to main page