mirror of
https://github.com/mcanlas/6502-opcodes.git
synced 2024-06-12 13:29:32 +00:00
implement nested jump registry
This commit is contained in:
parent
53214fad91
commit
72c3aa4292
|
@ -25,7 +25,7 @@ class AsmDocumentContext {
|
|||
|
||||
def toDoc: AsmDocument = {
|
||||
val asmFragmentsAndSubroutines =
|
||||
xs.toList ::: jumps.toList
|
||||
xs.toList ::: jumps.toList ++ jumps.flatMap(_.jumpRegistry).toList
|
||||
|
||||
AsmDocument(asmFragmentsAndSubroutines)
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ case class AsmFragment(xs: List[Statement]) extends TopLevelAsmDocumentFragment
|
|||
xs.map(_.toAsm).mkString("\n")
|
||||
}
|
||||
|
||||
case class Subroutine(name: String, fragment: AsmFragment) extends TopLevelAsmDocumentFragment {
|
||||
case class Subroutine(name: String, fragment: AsmFragment, jumpRegistry: ListSet[Subroutine]) extends TopLevelAsmDocumentFragment {
|
||||
def toAsm: String =
|
||||
name + ":" + "\n" + fragment.toAsm
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ trait AsmSyntax {
|
|||
|
||||
f(ctx)
|
||||
|
||||
Subroutine(s, ctx.toFragment)
|
||||
Subroutine(s, ctx.toFragment, ctx.getJumps)
|
||||
}
|
||||
|
||||
def jump(s: Subroutine)(implicit ctx: AssemblyContext): Unit = {
|
||||
|
|
|
@ -66,16 +66,57 @@ class Easy6502Spec extends AnyFlatSpec with should.Matchers {
|
|||
)
|
||||
}
|
||||
|
||||
"sub demo" should "compile" in {
|
||||
"snake" should "compile" in {
|
||||
val init =
|
||||
sub("init") { implicit a =>
|
||||
registers.X.incr
|
||||
}
|
||||
|
||||
val readKeys =
|
||||
sub("readKeys") { implicit a =>
|
||||
val _ = a
|
||||
}
|
||||
|
||||
val checkCollision =
|
||||
sub("checkCollision") { implicit a =>
|
||||
val _ = a
|
||||
}
|
||||
|
||||
val updateSnake =
|
||||
sub("updateSnake") { implicit a =>
|
||||
val _ = a
|
||||
}
|
||||
|
||||
val drawApple =
|
||||
sub("drawApple") { implicit a =>
|
||||
val _ = a
|
||||
}
|
||||
|
||||
val drawSnake =
|
||||
sub("drawSnake") { implicit a =>
|
||||
val _ = a
|
||||
}
|
||||
|
||||
val spinWheels =
|
||||
sub("spinWheels") { implicit a =>
|
||||
val _ = a
|
||||
}
|
||||
|
||||
val loop =
|
||||
sub("loop") { implicit a =>
|
||||
jump(readKeys)
|
||||
jump(checkCollision)
|
||||
jump(updateSnake)
|
||||
jump(drawApple)
|
||||
jump(drawSnake)
|
||||
jump(spinWheels)
|
||||
}
|
||||
|
||||
val doc =
|
||||
asmDoc { implicit ctx =>
|
||||
asm { implicit a =>
|
||||
jump(init)
|
||||
jump(loop)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user