1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-06-02 00:41:40 +00:00

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 * `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 * `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() { void main() {
init_rw_memory()
byte y byte y
while true { while true {
start_frame() start_frame()

View File

@ -157,16 +157,12 @@ object Platform {
case "default" => case "default" =>
log.error("Cannot use default as ram_init_segment") log.error("Cannot use default as ram_init_segment")
None None
case x if banks.contains(x) => case x if banks.contains(x) => Some(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 => case x =>
log.error("Invalid ram_init_segment: " + x) log.error("Invalid ram_init_segment: " + x)
None 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 { val bankNumbers = banks.map(b => b -> (as.get(classOf[String], s"segment_${b}_bank", "00") match {
case "" => 0 case "" => 0
case x => parseNumber(x) case x => parseNumber(x)
@ -204,7 +200,7 @@ object Platform {
val codeAllocators = banks.map(b => b -> new UpwardByteAllocator(bankStarts(b), bankCodeEnds(b))) val codeAllocators = banks.map(b => b -> new UpwardByteAllocator(bankStarts(b), bankCodeEnds(b)))
val variableAllocators = banks.map(b => b -> new VariableAllocator( val variableAllocators = banks.map(b => b -> new VariableAllocator(
if (b == "default" && CpuFamily.forType(cpu) == CpuFamily.M6502) freeZpBytes else Nil, bankDataStarts(b) match { 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)) 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 override def heapStart: Int = 0
} }
class AfterCodeByteAllocator(val endBefore: Int) extends ByteAllocator { class AfterCodeByteAllocator(startIfNoCode: Int, val endBefore: Int) extends ByteAllocator {
var startAt = 0x200 var startAt = startIfNoCode
def notifyAboutEndOfCode(org: Int): Unit = startAt = org def notifyAboutEndOfCode(org: Int): Unit = startAt = org
override def preferredOrder: Option[List[Int]] = None 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" -> (if (cpu == Cpu.Intel8086) new UpwardByteAllocator(0x100, 0xb000) else new UpwardByteAllocator(0x200, 0xb000))),
Map("default" -> new VariableAllocator( Map("default" -> new VariableAllocator(
if (CpuFamily.forType(cpu) == CpuFamily.M6502) pointers else Nil, 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, if (CpuFamily.forType(cpu) == CpuFamily.M6502) 4 else 0,
pointers, pointers,
".bin", ".bin",