6502-opcodes/src/main/scala/com/htmlism/mos6502/dsl/IndexedAddressCollection.scala

15 lines
522 B
Scala

package com.htmlism.mos6502.dsl
import com.htmlism.mos6502.model.*
/**
* A typed collection, like memory mapped to screen pixels. Access by index instead of by address.
*/
case class IndexedAddressCollection[A](baseAddress: Int, name: String)(using ev: Operand[A]):
def apply(n: Int): GlobalAddress =
GlobalAddress(baseAddress + n)
def write(n: Int, x: A)(using ctx: AssemblyContext): Unit =
ctx.push(LDA, x, s"write ${ev.toShow(x)} to $name ($n)")
ctx.push(STA, GlobalAddress(baseAddress + n), "")