Add the brother240tool program.
This commit is contained in:
parent
a1f3087046
commit
2520834b18
3 changed files with 65 additions and 2 deletions
|
|
@ -129,8 +129,8 @@ reverse engineered it to find out.
|
|||
|
||||
Standard Linux mtools will access the filesystem image and allow you to move
|
||||
files in and out. However, you'll need to change the media type bytes at
|
||||
offsets 0x015 and 0x100 from 0x58 to 0xf0 before mtools will touch it. Once
|
||||
done, this will work:
|
||||
offsets 0x015 and 0x100 from 0x58 to 0xf0 before mtools will touch it. The
|
||||
supplied `brother240tool` will do this. Once done, this will work:
|
||||
|
||||
```
|
||||
mdir -i brother.img
|
||||
|
|
|
|||
|
|
@ -233,6 +233,13 @@ buildsimpleprogram brother120tool \
|
|||
libemu.a \
|
||||
libfmt.a \
|
||||
|
||||
buildsimpleprogram brother240tool \
|
||||
-Idep/emu \
|
||||
tools/brother240tool.cc \
|
||||
libbackend.a \
|
||||
libemu.a \
|
||||
libfmt.a \
|
||||
|
||||
runtest bitaccumulator-test tests/bitaccumulator.cc
|
||||
runtest bytes-test tests/bytes.cc
|
||||
runtest compression-test tests/compression.cc
|
||||
|
|
|
|||
56
tools/brother240tool.cc
Normal file
56
tools/brother240tool.cc
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#include "globals.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
static std::fstream inputFile;
|
||||
|
||||
void syntax()
|
||||
{
|
||||
std::cout << "Syntax: brother240tool <image>\n"
|
||||
"The disk image will be flipped from Brother to DOS format and back\n"
|
||||
"again.\n";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
uint8_t getbyte(uint32_t offset)
|
||||
{
|
||||
inputFile.seekg(offset, std::ifstream::beg);
|
||||
return inputFile.get();
|
||||
}
|
||||
|
||||
void putbyte(uint32_t offset, uint8_t value)
|
||||
{
|
||||
inputFile.seekp(offset, std::ifstream::beg);
|
||||
inputFile.put(value);
|
||||
}
|
||||
|
||||
int main(int argc, const char* argv[])
|
||||
{
|
||||
if (argc < 2)
|
||||
syntax();
|
||||
|
||||
inputFile.open(argv[1], std::ios::in | std::ios::out | std::ios::binary);
|
||||
if (!inputFile.is_open())
|
||||
Error() << fmt::format("cannot open input file '{}'", argv[1]);
|
||||
|
||||
uint8_t b1 = getbyte(0x015);
|
||||
uint8_t b2 = getbyte(0x100);
|
||||
if ((b1 == 0x58) && (b2 == 0x58))
|
||||
{
|
||||
std::cerr << "Flipping from Brother to DOS.\n";
|
||||
putbyte(0x015, 0xf0);
|
||||
putbyte(0x100, 0xf0);
|
||||
}
|
||||
else if ((b1 == 0xf0) && (b2 == 0xf0))
|
||||
{
|
||||
std::cerr << "Flipping from DOS to Brother.\n";
|
||||
putbyte(0x015, 0x58);
|
||||
putbyte(0x100, 0x58);
|
||||
}
|
||||
else
|
||||
Error() << "Unknown image format.";
|
||||
|
||||
inputFile.close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue