mirror of
https://github.com/KarolS/millfork.git
synced 2025-04-11 08:37:00 +00:00
Fix init_rw_memory on Atari 2600
This commit is contained in:
parent
6deee5f69b
commit
39b07a8bae
@ -66,7 +66,7 @@ See [the ROM vs RAM guide](../api/rom-vs-ram.md) for more information.
|
||||
|
||||
* `ZPREG_SIZE` – size of the pseudoregister in bytes, or 0 on platforms that don't use it
|
||||
|
||||
* `TINY_MAIN_RAM` – 1 if the main ram is 256 bytes or less, 0 otherwise
|
||||
* `TINY_RW_MEMORY` – 1 if the main ram is 256 bytes or less, 0 otherwise
|
||||
|
||||
* `USES_IX_STACK`, `USES_IY_STACK` – 1 if given index register is used as a base pointer for stack-allocated variables, 0 otherwise
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
void main() {
|
||||
init_rw_memory()
|
||||
byte y
|
||||
while true {
|
||||
start_frame()
|
||||
|
@ -157,16 +157,12 @@ object Platform {
|
||||
case "default" =>
|
||||
log.error("Cannot use default as ram_init_segment")
|
||||
None
|
||||
case x if banks.contains(x) =>
|
||||
if (CpuFamily.forType(cpu) == CpuFamily.M6502 && zpRegisterSize < 4) {
|
||||
log.error("Using ram_init_segment requires zeropage register of size at least 4")
|
||||
}
|
||||
Some(x)
|
||||
case x if banks.contains(x) => Some(x)
|
||||
case x =>
|
||||
log.error("Invalid ram_init_segment: " + x)
|
||||
None
|
||||
}
|
||||
// used by 65816:
|
||||
// used by 65816 and in NES debugging:
|
||||
val bankNumbers = banks.map(b => b -> (as.get(classOf[String], s"segment_${b}_bank", "00") match {
|
||||
case "" => 0
|
||||
case x => parseNumber(x)
|
||||
@ -204,7 +200,7 @@ object Platform {
|
||||
val codeAllocators = banks.map(b => b -> new UpwardByteAllocator(bankStarts(b), bankCodeEnds(b)))
|
||||
val variableAllocators = banks.map(b => b -> new VariableAllocator(
|
||||
if (b == "default" && CpuFamily.forType(cpu) == CpuFamily.M6502) freeZpBytes else Nil, bankDataStarts(b) match {
|
||||
case None => new AfterCodeByteAllocator(bankEnds(b))
|
||||
case None => new AfterCodeByteAllocator(bankStarts(b), bankEnds(b))
|
||||
case Some(start) => new UpwardByteAllocator(start, bankEnds(b))
|
||||
}))
|
||||
|
||||
|
@ -84,8 +84,8 @@ class ZeropageAllocator(val freeZpBytes: List[Int]) extends ByteAllocator {
|
||||
override def heapStart: Int = 0
|
||||
}
|
||||
|
||||
class AfterCodeByteAllocator(val endBefore: Int) extends ByteAllocator {
|
||||
var startAt = 0x200
|
||||
class AfterCodeByteAllocator(startIfNoCode: Int, val endBefore: Int) extends ByteAllocator {
|
||||
var startAt = startIfNoCode
|
||||
def notifyAboutEndOfCode(org: Int): Unit = startAt = org
|
||||
|
||||
override def preferredOrder: Option[List[Int]] = None
|
||||
|
@ -21,7 +21,7 @@ object EmuPlatform {
|
||||
Map("default" -> (if (cpu == Cpu.Intel8086) new UpwardByteAllocator(0x100, 0xb000) else new UpwardByteAllocator(0x200, 0xb000))),
|
||||
Map("default" -> new VariableAllocator(
|
||||
if (CpuFamily.forType(cpu) == CpuFamily.M6502) pointers else Nil,
|
||||
new AfterCodeByteAllocator(0xff00))),
|
||||
new AfterCodeByteAllocator(0x200, 0xff00))),
|
||||
if (CpuFamily.forType(cpu) == CpuFamily.M6502) 4 else 0,
|
||||
pointers,
|
||||
".bin",
|
||||
|
Loading…
x
Reference in New Issue
Block a user