This commit is contained in:
Mark Canlas 2021-09-06 04:16:08 -04:00
parent f126f9e3b0
commit d646020d55
14 changed files with 63 additions and 53 deletions

View File

@ -9,7 +9,7 @@ maxColumn = 120
align.openParenCallSite = false
align = more
align.preset = more
docstrings = ScalaDoc
docstrings.blankFirstLine = yes

View File

@ -1,9 +1,11 @@
package com.htmlism.nescant
/**
* @param name A name for this location, used to alias its address
* @param name
* A name for this location, used to alias its address
*
* @tparam A The input type of the write and the output type of the read
* @tparam A
* The input type of the write and the output type of the read
*/
case class ReadWriteLocation[A](name: String, address: ZeroPageAddress)

View File

@ -5,9 +5,11 @@ package com.htmlism.nescant
/**
* For a memory-mapped device that may return different values across multiple reads (e.g. a random number generator)
*
* @param name A name for this device, used to alias its address
* @param name
* A name for this device, used to alias its address
*
* @tparam A The output type of the read
* @tparam A
* The output type of the read
*/
case class VolatileDevice[A](name: String, address: ZeroPageAddress)

View File

@ -224,7 +224,7 @@ object MatchOpcodes {
def wideColumns: Seq[Int] =
for {
cc <- 0 to 3
y <- 0 to 1
y <- 0 to 1
xx <- 0 to 3
} yield (xx << 3) + (y << 2) + cc

View File

@ -45,6 +45,6 @@ abstract class PrimitiveBitExtractor(val length: Int) extends BitExtractor[Int]
Some(n & mask)
}
object OneBit extends PrimitiveBitExtractor(1)
object TwoBits extends PrimitiveBitExtractor(2)
object OneBit extends PrimitiveBitExtractor(1)
object TwoBits extends PrimitiveBitExtractor(2)
object ThreeBits extends PrimitiveBitExtractor(3)

View File

@ -84,7 +84,8 @@ class DefinitionGroupContext {
}
/**
* @param comment Typically used by resources to describe their type safety
* @param comment
* Typically used by resources to describe their type safety
*/
case class Definition[A](name: String, x: A, comment: Option[String])(implicit ev: DefinitionValue[A]) {
lazy val value: String =

View File

@ -49,20 +49,20 @@ object Color {
x.toString
}
case object Black extends Color
case object White extends Color
case object Red extends Color
case object Cyan extends Color
case object Purple extends Color
case object Green extends Color
case object Blue extends Color
case object Yellow extends Color
case object Orange extends Color
case object Brown extends Color
case object LightRed extends Color
case object DarkGrey extends Color
case object Grey extends Color
case object Black extends Color
case object White extends Color
case object Red extends Color
case object Cyan extends Color
case object Purple extends Color
case object Green extends Color
case object Blue extends Color
case object Yellow extends Color
case object Orange extends Color
case object Brown extends Color
case object LightRed extends Color
case object DarkGrey extends Color
case object Grey extends Color
case object LightGreen extends Color
case object LightBlue extends Color
case object LightGrey extends Color
case object LightBlue extends Color
case object LightGrey extends Color
}

View File

@ -3,7 +3,8 @@ package com.htmlism.mos6502.dsl
trait NamedResource[A] {
/**
* A `Definable` can emit multiple definitions. Usually in the case of `word`s being split across two byte-definitions
* A `Definable` can emit multiple definitions. Usually in the case of `word`s being split across two
* byte-definitions
*/
def toDefinitions(x: A): List[Definition[_]]
}

View File

@ -3,9 +3,11 @@ package com.htmlism.mos6502.dsl
import com.htmlism.mos6502.model._
/**
* @param name A name for this location, used to alias its address
* @param name
* A name for this location, used to alias its address
*
* @tparam A The input type of the write and the output type of the read
* @tparam A
* The input type of the write and the output type of the read
*/
case class ReadWriteLocation[A: Operand](name: String, address: ZeroAddress) {
def read(implicit ctx: AssemblyContext): Unit = {

View File

@ -5,9 +5,11 @@ package com.htmlism.mos6502.dsl
/**
* For a memory-mapped device that may return different values across multiple reads (e.g. a random number generator)
*
* @param name A name for this device, used to alias its address
* @param name
* A name for this device, used to alias its address
*
* @tparam A The return type of the read
* @tparam A
* The return type of the read
*/
case class VolatileDevice[A](name: String, address: ZeroAddress) {
def read(implicit ctx: AssemblyContext): Unit = {

View File

@ -2,17 +2,17 @@ package com.htmlism.mos6502.model
sealed trait AddressingMode
case object Immediate extends AddressingMode
case object ZeroPage extends AddressingMode
case object ZeroPageX extends AddressingMode
case object ZeroPageY extends AddressingMode
case object Absolute extends AddressingMode
case object AbsoluteX extends AddressingMode
case object AbsoluteY extends AddressingMode
case object Indirect extends AddressingMode // used by jump
case object IndirectX extends AddressingMode
case object IndirectY extends AddressingMode
case object Relative extends AddressingMode // used by branches
case object Immediate extends AddressingMode
case object ZeroPage extends AddressingMode
case object ZeroPageX extends AddressingMode
case object ZeroPageY extends AddressingMode
case object Absolute extends AddressingMode
case object AbsoluteX extends AddressingMode
case object AbsoluteY extends AddressingMode
case object Indirect extends AddressingMode // used by jump
case object IndirectX extends AddressingMode
case object IndirectY extends AddressingMode
case object Relative extends AddressingMode // used by branches
case object Accumulator extends AddressingMode
case object Implied extends AddressingMode
case object NoMode extends AddressingMode
case object Implied extends AddressingMode
case object NoMode extends AddressingMode

View File

@ -91,8 +91,8 @@ class DslSpec extends AnyFlatSpec with should.Matchers {
sealed trait Triforce
case object Courage extends Triforce
case object Wisdom extends Triforce
case object Power extends Triforce
case object Wisdom extends Triforce
case object Power extends Triforce
object Triforce {
implicit val enumTriforce: EnumAsm[Triforce] =
@ -113,9 +113,9 @@ object Triforce {
sealed trait TestDirection
case object Up extends TestDirection
case object Down extends TestDirection
case object Left extends TestDirection
case object Up extends TestDirection
case object Down extends TestDirection
case object Left extends TestDirection
case object Right extends TestDirection
object TestDirection {

View File

@ -19,7 +19,7 @@ object Direction {
sealed trait Direction
case object Up extends Direction
case object Down extends Direction
case object Left extends Direction
case object Up extends Direction
case object Down extends Direction
case object Left extends Direction
case object Right extends Direction

View File

@ -68,12 +68,12 @@ class Easy6502Spec extends AnyFlatSpec with should.Matchers {
}
"snake" should "compile" in {
val sysRandom = VolatileDevice[Int]("sysRandom", 0xfe.z)
val sysRandom = VolatileDevice[Int]("sysRandom", 0xfe.z)
val sysLastKey = VolatileDevice[AsciiValue]("sysLastKey", 0xff.z)
val appleLocation = ReadWriteLocation[Int]("appleLocation", 0x00.z)
val appleLocation = ReadWriteLocation[Int]("appleLocation", 0x00.z)
val snakeDirection = ReadWriteLocation[Direction]("snakeDirection", 0x02.z)
val snakeLength = ReadWriteLocation[Int]("snakeLength", 0x03.z)
val snakeLength = ReadWriteLocation[Int]("snakeLength", 0x03.z)
val initSnake =
sub("initSnake") { implicit a =>