check float bits

This commit is contained in:
Irmen de Jong 2023-02-16 22:19:30 +01:00
parent c59df6ec20
commit 3cce985f03
2 changed files with 20 additions and 1 deletions

View File

@ -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<String> {
return listOf("syslib")

View File

@ -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"
}
})