mirror of
https://github.com/KarolS/millfork.git
synced 2025-04-13 05:39:54 +00:00
Allow adding fixed deltas to some outputs; #7 Fix Lynx output
This commit is contained in:
parent
927c39585c
commit
1ec816496d
@ -179,15 +179,23 @@ Default: `main,*`
|
||||
|
||||
* `startaddr_be` – the same, but big-endian
|
||||
|
||||
* `startpage` – the high byte of `startaddr`
|
||||
|
||||
* `endaddr` – little-endian 16-bit address of the last used byte of the compiled output (usually not the segment end)
|
||||
|
||||
* `endaddr_be` – the same, but big-endian
|
||||
|
||||
* `startaddr+123`, `startaddr_be+123`, `endaddr+123`, `endaddr_be+123` – the same, but incremented by the given number
|
||||
|
||||
* `startaddr-123`, `startaddr_be-123`, `endaddr-123`, `endaddr_be-123` – the same, but decremented by the given number
|
||||
|
||||
* `startpage` – the high byte of `startaddr`
|
||||
|
||||
* `length` – little-endian 16-bit length of the compiled output; `endaddr - startaddr + 1`
|
||||
|
||||
* `length_be` – the same, but big-endian
|
||||
|
||||
* `length+123`, `length_be+123` – the same, but incremented by the given number
|
||||
|
||||
* `length-123`, `length_be-123` – the same, but decremented by the given number
|
||||
|
||||
* `allocated` – all used bytes
|
||||
|
||||
|
@ -21,7 +21,7 @@ HAS_BITMAP_MODE=1
|
||||
[output]
|
||||
;TODO
|
||||
style=single
|
||||
format=$80,$08,$3,$00,length_be,$42,$53,$39,$33,allocated
|
||||
format=$80,$08,$3,$00,length_be+10,$42,$53,$39,$33,allocated
|
||||
extension=o
|
||||
|
||||
|
||||
|
@ -232,15 +232,28 @@ object Platform {
|
||||
|
||||
val os = conf.getSection("output")
|
||||
val outputPackager = SequenceOutput(os.get(classOf[String], "format", "").split("[, \n\t\r]+").filter(_.nonEmpty).map {
|
||||
case "startaddr" => StartAddressOutput
|
||||
case "startaddr_be" => StartAddressOutputBe
|
||||
case "startaddr" => StartAddressOutput(0)
|
||||
case "startaddr_be" => StartAddressOutputBe(0)
|
||||
case "startpage" => StartPageOutput
|
||||
case "endaddr" => EndAddressOutput
|
||||
case "endaddr_be" => EndAddressOutputBe
|
||||
case "endaddr" => EndAddressOutput(0)
|
||||
case "endaddr_be" => EndAddressOutputBe(0)
|
||||
case l if l.startsWith("startaddr+") => StartAddressOutput(parseNumber(l.stripPrefix("startaddr+")))
|
||||
case l if l.startsWith("startaddr-") => StartAddressOutput(-parseNumber(l.stripPrefix("startaddr-")))
|
||||
case l if l.startsWith("startaddr_be+") => StartAddressOutputBe(parseNumber(l.stripPrefix("startaddr_be+")))
|
||||
case l if l.startsWith("startaddr_be-") => StartAddressOutputBe(-parseNumber(l.stripPrefix("startaddr_be-")))
|
||||
case l if l.startsWith("endaddr+") => EndAddressOutput(parseNumber(l.stripPrefix("endaddr+")))
|
||||
case l if l.startsWith("endaddr-") => EndAddressOutput(-parseNumber(l.stripPrefix("endaddr-")))
|
||||
case l if l.startsWith("endaddr_be+") => EndAddressOutputBe(parseNumber(l.stripPrefix("endaddr_be+")))
|
||||
case l if l.startsWith("endaddr_be-") => EndAddressOutputBe(-parseNumber(l.stripPrefix("endaddr_be-")))
|
||||
case "pagecount" => PageCountOutput
|
||||
case "allocated" => AllocatedDataOutput
|
||||
case "length" => AllocatedDataLength
|
||||
case "length_be" => AllocatedDataLengthBe
|
||||
case "length" => AllocatedDataLength(0)
|
||||
case "length_be" => AllocatedDataLengthBe(0)
|
||||
case l if l.startsWith("length+") => AllocatedDataLength(parseNumber(l.stripPrefix("length+")))
|
||||
case l if l.startsWith("length_be+") => AllocatedDataLengthBe(parseNumber(l.stripPrefix("length_be+")))
|
||||
case l if l.startsWith("length-") => AllocatedDataLength(-parseNumber(l.stripPrefix("length-")))
|
||||
case l if l.startsWith("length_be-") => AllocatedDataLengthBe(-parseNumber(l.stripPrefix("length_be-")))
|
||||
case "length_be" => AllocatedDataLengthBe(0)
|
||||
case "d88" => D88Output
|
||||
case "tap" => TapOutput
|
||||
case n => n.split(":").filter(_.nonEmpty) match {
|
||||
|
@ -38,17 +38,19 @@ case class BankFragmentOutput(alwaysBank: String, start: Int, end: Int) extends
|
||||
}
|
||||
}
|
||||
|
||||
object StartAddressOutput extends OutputPackager {
|
||||
case class StartAddressOutput(bonus: Int) extends OutputPackager {
|
||||
def packageOutput(mem: CompiledMemory, bank: String): Array[Byte] = {
|
||||
val b = mem.banks(bank)
|
||||
Array(b.start.toByte, b.start.>>(8).toByte)
|
||||
val x = b.start + bonus
|
||||
Array(x.toByte, x.>>(8).toByte)
|
||||
}
|
||||
}
|
||||
|
||||
object StartAddressOutputBe extends OutputPackager {
|
||||
case class StartAddressOutputBe(bonus: Int) extends OutputPackager {
|
||||
def packageOutput(mem: CompiledMemory, bank: String): Array[Byte] = {
|
||||
val b = mem.banks(bank)
|
||||
Array(b.start.>>(8).toByte, b.start.toByte)
|
||||
val x = b.start + bonus
|
||||
Array(x.>>(8).toByte, x.toByte)
|
||||
}
|
||||
}
|
||||
|
||||
@ -59,17 +61,19 @@ object StartPageOutput extends OutputPackager {
|
||||
}
|
||||
}
|
||||
|
||||
object EndAddressOutput extends OutputPackager {
|
||||
case class EndAddressOutput(bonus: Int) extends OutputPackager {
|
||||
def packageOutput(mem: CompiledMemory, bank: String): Array[Byte] = {
|
||||
val b = mem.banks(bank)
|
||||
val x = b.end + bonus
|
||||
Array(b.end.toByte, b.end.>>(8).toByte)
|
||||
}
|
||||
}
|
||||
|
||||
object EndAddressOutputBe extends OutputPackager {
|
||||
case class EndAddressOutputBe(bonus: Int) extends OutputPackager {
|
||||
def packageOutput(mem: CompiledMemory, bank: String): Array[Byte] = {
|
||||
val b = mem.banks(bank)
|
||||
Array(b.end.>>(8).toByte, b.end.toByte)
|
||||
val x = b.end + bonus
|
||||
Array(x.>>(8).toByte, x.toByte)
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,18 +92,18 @@ object AllocatedDataOutput extends OutputPackager {
|
||||
}
|
||||
}
|
||||
|
||||
object AllocatedDataLength extends OutputPackager {
|
||||
case class AllocatedDataLength(bonus: Int) extends OutputPackager {
|
||||
def packageOutput(mem: CompiledMemory, bank: String): Array[Byte] = {
|
||||
val b = mem.banks(bank)
|
||||
val size = b.end - b.start + 1
|
||||
val size = b.end - b.start + 1 + bonus
|
||||
Array(size.toByte, size.>>(8).toByte)
|
||||
}
|
||||
}
|
||||
|
||||
object AllocatedDataLengthBe extends OutputPackager {
|
||||
case class AllocatedDataLengthBe(bonus: Int) extends OutputPackager {
|
||||
def packageOutput(mem: CompiledMemory, bank: String): Array[Byte] = {
|
||||
val b = mem.banks(bank)
|
||||
val size = b.end - b.start + 1
|
||||
val size = b.end - b.start + 1 + bonus
|
||||
Array(size.>>(8).toByte, size.toByte)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user