Convert reno to .prg and .d64 because people are curious
This commit is contained in:
parent
c84c1c636d
commit
8a64fe3496
|
@ -1,3 +1,6 @@
|
||||||
all: mamelink.o down
|
all: mamelink.o down
|
||||||
|
|
||||||
down: mamelink.o down.o
|
down: mamelink.o down.o
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o down
|
|
@ -77,15 +77,18 @@ static void simple_cmd(char command) {
|
||||||
send_cmd_and_close(prepare_cmd(command));
|
send_cmd_and_close(prepare_cmd(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Init(char *initial_link_dir) {
|
int Init(char *initial_link_dir) {
|
||||||
if (initial_link_dir == NULL) {
|
if (initial_link_dir == NULL) {
|
||||||
initial_link_dir = getenv("MAMELINK");
|
initial_link_dir = getenv("MAMELINK");
|
||||||
}
|
}
|
||||||
assert(initial_link_dir != NULL);
|
if (initial_link_dir == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (linkdir != NULL) {
|
if (linkdir != NULL) {
|
||||||
free(linkdir);
|
free(linkdir);
|
||||||
}
|
}
|
||||||
linkdir = strdup(initial_link_dir);
|
linkdir = strdup(initial_link_dir);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Finish() {
|
void Finish() {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
void Init(char *initial_link_dir);
|
int Init(char *initial_link_dir);
|
||||||
void Finish();
|
void Finish();
|
||||||
void down(char *buf, unsigned short bytes, unsigned short c64Addr);
|
void down(char *buf, unsigned short bytes, unsigned short c64Addr);
|
||||||
void up(char *buf, unsigned short bytes, unsigned short c64Addr);
|
void up(char *buf, unsigned short bytes, unsigned short c64Addr);
|
||||||
|
|
55
mamelink/out2prg.js
Normal file
55
mamelink/out2prg.js
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
const fs = require('node:fs/promises');
|
||||||
|
const assert = require('node:assert/strict');
|
||||||
|
|
||||||
|
const die = (...message) => {
|
||||||
|
console.error(...message)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv.length != 3) {
|
||||||
|
die("Usage: node out2prg.js FILE.out")
|
||||||
|
}
|
||||||
|
|
||||||
|
const replaceExtension = (filename, ext) => {
|
||||||
|
const idot = filename.lastIndexOf(".")
|
||||||
|
return `${idot < 0 ? filename : filename.substr(0, idot)}.${ext}`
|
||||||
|
}
|
||||||
|
(async () => {
|
||||||
|
const outfilename = process.argv[2]
|
||||||
|
const data = await fs.readFile(outfilename)
|
||||||
|
assert.equal(data.readUint16LE(0), 0xffff, `${outfilename} does not start with magic FFFF bytes`)
|
||||||
|
const prgfilename = replaceExtension(outfilename, "prg")
|
||||||
|
const prgfile = await fs.open(prgfilename, "w")
|
||||||
|
try {
|
||||||
|
let off = 2
|
||||||
|
let nextAddress = null
|
||||||
|
let bootAddr = null
|
||||||
|
while (off < data.length) {
|
||||||
|
const startAddr = data.readUint16LE(off)
|
||||||
|
const endAddr = data.readUint16LE(off + 2)
|
||||||
|
if (startAddr == endAddr && bootAddr == null) {
|
||||||
|
bootAddr = startAddr
|
||||||
|
console.log(`To start, type SYS${bootAddr}`)
|
||||||
|
console.log(`Skipping byte: ${data.readUint8(off + 4)}`)
|
||||||
|
off += 5
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
assert.ok(endAddr >= startAddr, `Invalid address range ${startAddr}:${endAddr}`)
|
||||||
|
assert.ok(nextAddress == null || startAddr >= nextAddress, `Expected ${startAddr} to come after previous segment ending at ${nextAddress}`)
|
||||||
|
const paddingLength = nextAddress == null ? 0 : startAddr - nextAddress
|
||||||
|
const blobLength = endAddr - startAddr + 1
|
||||||
|
if (nextAddress == null) {
|
||||||
|
await fs.writeFile(prgfile, data.subarray(off, off + 2))
|
||||||
|
}
|
||||||
|
if (paddingLength > 0) {
|
||||||
|
await fs.writeFile(prgfile, Buffer.alloc(paddingLength))
|
||||||
|
}
|
||||||
|
off += 4
|
||||||
|
await fs.writeFile(prgfile, data.subarray(off, off + blobLength))
|
||||||
|
nextAddress = endAddr + 1
|
||||||
|
off += blobLength
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
await prgfile.close()
|
||||||
|
}
|
||||||
|
})()
|
BIN
mamelink/reno.d64
Normal file
BIN
mamelink/reno.d64
Normal file
Binary file not shown.
BIN
mamelink/reno.prg
Normal file
BIN
mamelink/reno.prg
Normal file
Binary file not shown.
Loading…
Reference in a new issue