All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.pawelkrol.CPU6502.Commodore.MemoryConfiguration.scala Maven / Gradle / Ivy

The newest version!
package com.github.pawelkrol.CPU6502
package Commodore

class MemoryConfiguration(ioRegister: ByteVal) {

  private val charEnSignal = (ioRegister & 0x04)() != 0x00

  private val hiRamSignal = (ioRegister & 0x02)() != 0x00

  private val loRamSignal = (ioRegister & 0x01)() != 0x00

  val hasBasic = hiRamSignal && loRamSignal

  val hasIO = charEnSignal && (hiRamSignal || loRamSignal)

  val hasChargen = !charEnSignal && (hiRamSignal || loRamSignal)

  val hasKernal = hiRamSignal

  def readFrom0000To9FFF(address: Int, ram: Array[ByteVal]) =
    ram(address)

  def readFromA000ToBFFF(address: Int, ram: Array[ByteVal], basic: Array[ByteVal]) =
    if (hasBasic)
      basic(address - 0xa000)
    else
      ram(address)

  def readFromC000ToCFFF(address: Int, ram: Array[ByteVal]) =
    ram(address)

  def readFromD000ToDFFF(address: Int, ram: Array[ByteVal], chargen: Array[ByteVal], io: Array[ByteVal]) =
    if (hasChargen)
      chargen(address - 0xd000)
    else
      if (hasIO)
        io(address - 0xd000)
      else
        ram(address)

  def readFromE000ToFFFF(address: Int, ram: Array[ByteVal], kernal: Array[ByteVal]) =
    if (hasKernal)
      kernal(address - 0xe000)
    else
      ram(address)

  def writeTo0000ToCFFF(address: Int, value: ByteVal, ram: Array[ByteVal]) =
    ram(address) = value

  def writeToD000ToDFFF(address: Int, value: ByteVal, ram: Array[ByteVal], io: Array[ByteVal]) =
    if (hasIO)
      io(address - 0xd000) = value
    else
      ram(address) = value

  def writeToE000ToFFFF(address: Int, value: ByteVal, ram: Array[ByteVal]) =
    ram(address) = value
}

object MemoryConfiguration {

  def apply(ioRegister: ByteVal) = new MemoryConfiguration(ioRegister)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy