Fix init_rw_memory on Atari 2600

This commit is contained in:
Karol Stasiak 2019-06-28 16:44:41 +02:00
parent 6deee5f69b
commit 39b07a8bae
5 changed files with 8 additions and 11 deletions

View File

@ -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

View File

@ -1,4 +1,5 @@
void main() {
init_rw_memory()
byte y
while true {
start_frame()

View File

@ -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))
}))

View File

@ -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

View File

@ -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",