diff --git a/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt b/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt index ab242ea68..e63426423 100644 --- a/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt +++ b/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt @@ -20,7 +20,13 @@ class VirtualMachineDefinition: IMachineDefinition { override lateinit var zeropage: Zeropage // not actually used override lateinit var golden: GoldenRam // not actually used - override fun getFloatAsmBytes(num: Number) = TODO("float asm bytes from number") + override fun getFloatAsmBytes(num: Number): String { + // little endian binary representation + val bits = num.toFloat().toBits().toUInt() + val hexStr = bits.toString(16).padStart(8, '0') + val parts = hexStr.chunked(2).map { "\$" + it } + return parts.joinToString(", ") + } override fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List { return listOf("syslib") diff --git a/virtualmachine/test/TestVm.kt b/virtualmachine/test/TestVm.kt index d826c3a4a..970bd7e45 100644 --- a/virtualmachine/test/TestVm.kt +++ b/virtualmachine/test/TestVm.kt @@ -4,6 +4,9 @@ import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.shouldBe import prog8.code.core.* import prog8.code.target.VMTarget +import prog8.code.target.c64.C64MachineDefinition +import prog8.code.target.cx16.CX16MachineDefinition +import prog8.code.target.virtual.VirtualMachineDefinition import prog8.intermediate.* import prog8.vm.VirtualMachine import prog8.vm.VmRunner @@ -132,4 +135,14 @@ class TestVm: FunSpec( { """ runner.runProgram(irSource) } + + test("vm machine float bits") { + val cx16machine = CX16MachineDefinition() + cx16machine.getFloatAsmBytes(Math.PI) shouldBe "\$82, \$49, \$0f, \$da, \$a2" + val c64machine = C64MachineDefinition() + c64machine.getFloatAsmBytes(Math.PI) shouldBe "\$82, \$49, \$0f, \$da, \$a2" + + val vm = VirtualMachineDefinition() + vm.getFloatAsmBytes(Math.PI) shouldBe "\$40, \$49, \$0f, \$db" + } })