mirror of https://github.com/wwarthen/RomWBW.git
9 changed files with 529 additions and 237 deletions
@ -1,182 +1,186 @@ |
|||
|
|||
FLASH4 (c) 2014 William R Sowerbutts <will@sowerbutts.com> |
|||
http://sowerbutts.com/8bit/ |
|||
|
|||
= Warning = |
|||
|
|||
FLASH4 has been tested and confirmed working on: |
|||
* N8VEM SBCv2 |
|||
* N8VEM N8-2312 |
|||
* N8VEM Mark IV SBC |
|||
* DX-Designs P112 |
|||
* ZETA SBC v2 |
|||
|
|||
However it remains somewhat experimental. If it works for you, please let me |
|||
know. If it breaks please also let me know so I can fix it! |
|||
|
|||
|
|||
= Introduction = |
|||
|
|||
FLASH4 is a CP/M program which can read, write and verify Flash ROM contents to |
|||
or from an image file stored on a CP/M filesystem. It is intended for in-system |
|||
programming of Flash ROM chips on Z80 and Z180 systems. |
|||
|
|||
FLASH4 aims to support a range of Flash ROM chips. Ideally I would like to |
|||
support all Flash ROM chips that are in use in Z80/Z180 N8VEM machines. If |
|||
FLASH4 does not support your chip please let me know and I will try to add |
|||
support. |
|||
|
|||
When writing to the Flash ROM chip, FLASH4 will only reprogram the sectors |
|||
whose contents have changed. This helps to reduce wear on the flash memory, |
|||
makes the reprogram operation faster, and reduces the risk of leaving the |
|||
system unbootable if power fails during a reprogramming operation. FLASH4 |
|||
always performs a full verify operation after writing to the chip to confirm |
|||
that the correct data has been loaded. |
|||
|
|||
FLASH4 is reasonably fast. Reprogramming and verifying every sector on a 512KB |
|||
SST 39F040 chip takes 21 seconds on my Mark IV SBC, versus 45 seconds to |
|||
perform the same task using a USB MiniPro TL866 EEPROM programmer under Linux |
|||
on my PC. If only a subset of sectors require reprogramming FLASH4 will be |
|||
even faster. |
|||
|
|||
FLASH4 works with binary ROM image files, it does not support Intel Hex format |
|||
files. Hex files can be easily converted to or from binaries using "hex2bin" or |
|||
the "srec_cat" program from SRecord: |
|||
|
|||
$ srec_cat image.hex -intel -fill 0xFF 0 0x80000 -output image.bin -binary |
|||
$ srec_cat image.bin -binary -output image.hex -intel |
|||
|
|||
FLASH4 can use several different methods to access the Flash ROM chip. The best |
|||
available method is determined automatically at run time. Alternatively you may |
|||
provide a command-line option to force the use of a specific method. |
|||
|
|||
The first two methods use bank switching to map sections of the ROM into the |
|||
CPU address space. FLASH4 will detect the presence of RomWBW or UNA BIOS and |
|||
use the bank switching methods they provide. |
|||
|
|||
On P112 systems the P112 B/P BIOS is detected and P112 bank switching is used. |
|||
|
|||
If no bank switching method can be auto-detected, and the system has a Z180 |
|||
CPU, FLASH4 will use the Z180 DMA engine to access the Flash ROM chip. This |
|||
does not require any bank switching but it is slower and will not work on all |
|||
platforms. |
|||
|
|||
Z180 DMA access requires the flash ROM to be linearly mapped into the lower |
|||
region of physical memory, as it is on the Mark IV SBC (for example). The |
|||
N8-2312 has additional memory mapping hardware, consequently Z180 DMA access on |
|||
the N8-2312 is NOT SUPPORTED and if forced will corrupt the contents of RAM; |
|||
use one of the supported bank switching methods instead. |
|||
|
|||
Z180 DMA access requires the Z180 CPU I/O base control register configured to |
|||
locate the internal I/O addresses at 0x40 (ie ICR bits IOA7, IOA6 = 0, 1). |
|||
|
|||
|
|||
= Usage = |
|||
|
|||
The three basic operations are: |
|||
|
|||
FLASH4 WRITE filename [options] |
|||
|
|||
This will rewrite the flash ROM contents from the named file. The file size |
|||
must exactly match the size of the ROM chip. After the write operation, a |
|||
verify operation will be performed automatically. |
|||
|
|||
FLASH4 VERIFY filename [options] |
|||
|
|||
This will read out the flash ROM contents and report if it matches the contents |
|||
of the named file. The file size must exactly match the size of the ROM chip. |
|||
|
|||
FLASH4 READ filename [options] |
|||
|
|||
This will read out the entire flash ROM contents and write it to the named |
|||
file. |
|||
|
|||
If your ROM chip is larger than the image you wish to write, use the "/PARTIAL" |
|||
(or "/P") command line option. To avoid accidentally flashing the wrong file, |
|||
the image file must be an exact multiple of 32KB in length. The portion of the |
|||
ROM not occupied by the image file is left either unmodified or erased. |
|||
|
|||
If you are using an ROM/EPROM/EEPROM chip which cannot be programmed in-system, |
|||
FLASH4 will not be able to recognise it, however the software can still |
|||
usefully READ and VERIFY the chip. Use the "/ROM" command line option to enable |
|||
"READ" or "VERIFY" mode with unrecognised chips. This mode assumes a 512K ROM |
|||
is fitted; smaller ROMs will be treated as a 512K ROM with the data repated |
|||
multiple times -- with a 256K chip the data is repeated twice, four times for a |
|||
128K chip, etc. |
|||
|
|||
One of the following optional command line arguments may be specified at the |
|||
end of the command line to force FLASH4 to use a particular method to access |
|||
the flash ROM chip: |
|||
|
|||
/ROMWBW For ROMWBW BIOS version 2.6 and later |
|||
/ROMWBWOLD For ROMWBW BIOS version 2.5 and earlier |
|||
/UNABIOS For UNA BIOS |
|||
/Z180DMA For Z180 DMA |
|||
/P112 For DX-Designs P112 |
|||
|
|||
If no option is specified FLASH4 attempts to determine the best available |
|||
method automatically. |
|||
|
|||
|
|||
= Supported chips and features = |
|||
|
|||
FLASH4 will interrogate your flash ROM chip to identify it automatically. |
|||
FLASH4 assumes that you have a single flash ROM device and it is located at the |
|||
bottom of the physical memory map. |
|||
|
|||
FLASH4 does not support setting or resetting the protection bits on individual |
|||
sectors within Flash ROM devices. If your Flash ROM chip has protected sectors |
|||
you will need to unprotect them by other means before FLASH4 can erase and |
|||
reprogram them. |
|||
|
|||
AT29C series chips employ an optional "software data protection" feature. This |
|||
is supported by FLASH4 and is left activated after programming the chip to |
|||
prevent accidental reprogramming of sectors. |
|||
|
|||
The following chips are supported: |
|||
|
|||
AT29F010 |
|||
AT29F040 |
|||
M29F010 |
|||
M29F040 |
|||
MX29F040 |
|||
SST 39F010 |
|||
SST 39F020 |
|||
SST 39F040 |
|||
AT29C512 |
|||
AT29C040 |
|||
AT29C010 |
|||
AT29C020 |
|||
|
|||
The following chips are supported but have unequal sector sizes; FLASH4 will |
|||
only erase and reprogram the entire chip at once rather than its normal |
|||
sector-by-sector operation: |
|||
|
|||
AT49F001NT |
|||
AT49F001N |
|||
AT49F002N |
|||
AT49F002NT |
|||
AT49F040 |
|||
|
|||
If you use a flash ROM chip that is not listed above please email me |
|||
(will@sowerbutts.com) and I will try to add support for it. |
|||
|
|||
|
|||
= Compiling = |
|||
|
|||
The software is written in a mix of C and assembler. It builds using the SDCC |
|||
toolchain and the SRecord tools. A Makefile is provided to build the executable |
|||
in Linux and I imagine it can be easily modified to build in Windows. |
|||
|
|||
You may need to adjust the path to the SDCC libraries in the Makefile if your |
|||
sdcc installation is not in /usr/local |
|||
|
|||
|
|||
= License = |
|||
|
|||
FLASH4 is licensed under the The GNU General Public License version 3 (see |
|||
included "LICENSE.txt" file). |
|||
|
|||
FLASH4 is provided with NO WARRANTY. In no event will the author be liable for |
|||
any damages. Use of this program is at your own risk. May cause rifts in space |
|||
and time. |
|||
|
|||
FLASH4 (c) 2014 William R Sowerbutts <will@sowerbutts.com> |
|||
http://sowerbutts.com/8bit/ |
|||
|
|||
= Warning = |
|||
|
|||
FLASH4 has been tested and confirmed working on: |
|||
* N8VEM SBCv2 |
|||
* N8VEM N8-2312 |
|||
* N8VEM Mark IV SBC |
|||
* DX-Designs P112 |
|||
* ZETA SBC v2 |
|||
|
|||
However it remains somewhat experimental. If it works for you, please let me |
|||
know. If it breaks please also let me know so I can fix it! |
|||
|
|||
|
|||
= Introduction = |
|||
|
|||
FLASH4 is a CP/M program which can read, write and verify Flash ROM contents to |
|||
or from an image file stored on a CP/M filesystem. It is intended for in-system |
|||
programming of Flash ROM chips on Z80 and Z180 systems. |
|||
|
|||
FLASH4 aims to support a range of Flash ROM chips. Ideally I would like to |
|||
support all Flash ROM chips that are in use in Z80/Z180 N8VEM machines. If |
|||
FLASH4 does not support your chip please let me know and I will try to add |
|||
support. |
|||
|
|||
When writing to the Flash ROM chip, FLASH4 will only reprogram the sectors |
|||
whose contents have changed. This helps to reduce wear on the flash memory, |
|||
makes the reprogram operation faster, and reduces the risk of leaving the |
|||
system unbootable if power fails during a reprogramming operation. FLASH4 |
|||
always performs a full verify operation after writing to the chip to confirm |
|||
that the correct data has been loaded. |
|||
|
|||
FLASH4 is reasonably fast. Reprogramming and verifying every sector on a 512KB |
|||
SST 39F040 chip takes 21 seconds on my Mark IV SBC, versus 45 seconds to |
|||
perform the same task using a USB MiniPro TL866 EEPROM programmer under Linux |
|||
on my PC. If only a subset of sectors require reprogramming FLASH4 will be |
|||
even faster. |
|||
|
|||
FLASH4 works with binary ROM image files, it does not support Intel Hex format |
|||
files. Hex files can be easily converted to or from binaries using "hex2bin" or |
|||
the "srec_cat" program from SRecord: |
|||
|
|||
$ srec_cat image.hex -intel -fill 0xFF 0 0x80000 -output image.bin -binary |
|||
$ srec_cat image.bin -binary -output image.hex -intel |
|||
|
|||
FLASH4 can use several different methods to access the Flash ROM chip. The best |
|||
available method is determined automatically at run time. Alternatively you may |
|||
provide a command-line option to force the use of a specific method. |
|||
|
|||
The first two methods use bank switching to map sections of the ROM into the |
|||
CPU address space. FLASH4 will detect the presence of RomWBW or UNA BIOS and |
|||
use the bank switching methods they provide. |
|||
|
|||
On P112 systems the P112 B/P BIOS is detected and P112 bank switching is used. |
|||
|
|||
If no bank switching method can be auto-detected, and the system has a Z180 |
|||
CPU, FLASH4 will use the Z180 DMA engine to access the Flash ROM chip. This |
|||
does not require any bank switching but it is slower and will not work on all |
|||
platforms. |
|||
|
|||
Z180 DMA access requires the flash ROM to be linearly mapped into the lower |
|||
region of physical memory, as it is on the Mark IV SBC (for example). The |
|||
N8-2312 has additional memory mapping hardware, consequently Z180 DMA access on |
|||
the N8-2312 is NOT SUPPORTED and if forced will corrupt the contents of RAM; |
|||
use one of the supported bank switching methods instead. |
|||
|
|||
Z180 DMA access requires the Z180 CPU I/O base control register configured to |
|||
locate the internal I/O addresses at 0x40 (ie ICR bits IOA7, IOA6 = 0, 1). |
|||
|
|||
|
|||
= Usage = |
|||
|
|||
The three basic operations are: |
|||
|
|||
FLASH4 WRITE filename [options] |
|||
|
|||
This will rewrite the flash ROM contents from the named file. The file size |
|||
must exactly match the size of the ROM chip. After the write operation, a |
|||
verify operation will be performed automatically. |
|||
|
|||
FLASH4 VERIFY filename [options] |
|||
|
|||
This will read out the flash ROM contents and report if it matches the contents |
|||
of the named file. The file size must exactly match the size of the ROM chip. |
|||
|
|||
FLASH4 READ filename [options] |
|||
|
|||
This will read out the entire flash ROM contents and write it to the named |
|||
file. |
|||
|
|||
If your ROM chip is larger than the image you wish to write, use the "/PARTIAL" |
|||
(or "/P") command line option. To avoid accidentally flashing the wrong file, |
|||
the image file must be an exact multiple of 32KB in length. The portion of the |
|||
ROM not occupied by the image file is left either unmodified or erased. |
|||
|
|||
If you are using an ROM/EPROM/EEPROM chip which cannot be programmed in-system, |
|||
FLASH4 will not be able to recognise it, however the software can still |
|||
usefully READ and VERIFY the chip. Use the "/ROM" command line option to enable |
|||
"READ" or "VERIFY" mode with unrecognised chips. This mode assumes a 512K ROM |
|||
is fitted; smaller ROMs will be treated as a 512K ROM with the data repated |
|||
multiple times -- with a 256K chip the data is repeated twice, four times for a |
|||
128K chip, etc. |
|||
|
|||
One of the following optional command line arguments may be specified at the |
|||
end of the command line to force FLASH4 to use a particular method to access |
|||
the flash ROM chip: |
|||
|
|||
BIOS interfaces: |
|||
/ROMWBW For ROMWBW BIOS version 2.6 and later |
|||
/ROMWBWOLD For ROMWBW BIOS version 2.5 and earlier |
|||
/UNABIOS For UNA BIOS |
|||
|
|||
Direct hardware interfaces: |
|||
/Z180DMA For Z180 DMA |
|||
/P112 For DX-Designs P112 |
|||
/N8VEMSBC For N8VEM SBC (v1, v2), Zeta (v1) SBC |
|||
|
|||
If no option is specified FLASH4 attempts to determine the best available |
|||
method automatically. |
|||
|
|||
|
|||
= Supported chips and features = |
|||
|
|||
FLASH4 will interrogate your flash ROM chip to identify it automatically. |
|||
FLASH4 assumes that you have a single flash ROM device and it is located at the |
|||
bottom of the physical memory map. |
|||
|
|||
FLASH4 does not support setting or resetting the protection bits on individual |
|||
sectors within Flash ROM devices. If your Flash ROM chip has protected sectors |
|||
you will need to unprotect them by other means before FLASH4 can erase and |
|||
reprogram them. |
|||
|
|||
AT29C series chips employ an optional "software data protection" feature. This |
|||
is supported by FLASH4 and is left activated after programming the chip to |
|||
prevent accidental reprogramming of sectors. |
|||
|
|||
The following chips are supported: |
|||
|
|||
AT29F010 |
|||
AT29F040 |
|||
M29F010 |
|||
M29F040 |
|||
MX29F040 |
|||
SST 39F010 |
|||
SST 39F020 |
|||
SST 39F040 |
|||
AT29C512 |
|||
AT29C040 |
|||
AT29C010 |
|||
AT29C020 |
|||
|
|||
The following chips are supported but have unequal sector sizes; FLASH4 will |
|||
only erase and reprogram the entire chip at once rather than its normal |
|||
sector-by-sector operation: |
|||
|
|||
AT49F001NT |
|||
AT49F001N |
|||
AT49F002N |
|||
AT49F002NT |
|||
AT49F040 |
|||
|
|||
If you use a flash ROM chip that is not listed above please email me |
|||
(will@sowerbutts.com) and I will try to add support for it. |
|||
|
|||
|
|||
= Compiling = |
|||
|
|||
The software is written in a mix of C and assembler. It builds using the SDCC |
|||
toolchain and the SRecord tools. A Makefile is provided to build the executable |
|||
in Linux and I imagine it can be easily modified to build in Windows. |
|||
|
|||
You may need to adjust the path to the SDCC libraries in the Makefile if your |
|||
sdcc installation is not in /usr/local |
|||
|
|||
|
|||
= License = |
|||
|
|||
FLASH4 is licensed under the The GNU General Public License version 3 (see |
|||
included "LICENSE.txt" file). |
|||
|
|||
FLASH4 is provided with NO WARRANTY. In no event will the author be liable for |
|||
any damages. Use of this program is at your own risk. May cause rifts in space |
|||
and time. |
|||
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue