diff --git a/compiler/test/UnitTests.kt b/compiler/test/UnitTests.kt index 8d7da371e..dc2cc530a 100644 --- a/compiler/test/UnitTests.kt +++ b/compiler/test/UnitTests.kt @@ -20,7 +20,7 @@ import prog8.compiler.target.c64.C64MachineDefinition.FLOAT_MAX_NEGATIVE import prog8.compiler.target.c64.C64MachineDefinition.FLOAT_MAX_POSITIVE import prog8.compiler.target.c64.C64MachineDefinition.Mflpt5 import prog8.compiler.target.c64.Petscii -import prog8.compiler.target.cx16.CX16MachineDefinition +import prog8.compiler.target.cx16.CX16MachineDefinition.CX16Zeropage import java.io.CharConversionException import java.nio.file.Path import kotlin.test.* @@ -304,11 +304,30 @@ class TestC64Zeropage { class TestCx16Zeropage { @Test fun testReservedLocations() { - val zp = CX16MachineDefinition.CX16Zeropage(CompilationOptions(OutputType.RAW, LauncherType.NONE, ZeropageType.BASICSAFE, emptyList(), false, false, Cx16Target)) + val zp = CX16Zeropage(CompilationOptions(OutputType.RAW, LauncherType.NONE, ZeropageType.BASICSAFE, emptyList(), false, false, Cx16Target)) assertEquals(zp.SCRATCH_REG, zp.SCRATCH_B1+1, "zp _B1 and _REG must be next to each other to create a word") } - // TODO way more tests for the Cx16 zeropage? + @Test + fun testFreeSpaces() { + val zp1 = CX16Zeropage(CompilationOptions(OutputType.RAW, LauncherType.NONE, ZeropageType.BASICSAFE, emptyList(), true, false, Cx16Target)) + assertEquals(88, zp1.available()) + val zp3 = CX16Zeropage(CompilationOptions(OutputType.RAW, LauncherType.NONE, ZeropageType.KERNALSAFE, emptyList(), false, false, Cx16Target)) + assertEquals(175, zp3.available()) + val zp4 = CX16Zeropage(CompilationOptions(OutputType.RAW, LauncherType.NONE, ZeropageType.FULL, emptyList(), false, false, Cx16Target)) + assertEquals(216, zp4.available()) + } + + @Test + fun testReservedSpace() { + val zp1 = CX16Zeropage(CompilationOptions(OutputType.RAW, LauncherType.NONE, ZeropageType.FULL, emptyList(), false, false, Cx16Target)) + assertEquals(216, zp1.available()) + assertTrue(0x22 in zp1.free) + assertTrue(0x80 in zp1.free) + assertTrue(0xff in zp1.free) + assertFalse(0x02 in zp1.free) + assertFalse(0x21 in zp1.free) + } } diff --git a/docs/source/todo.rst b/docs/source/todo.rst index dd744cbf0..c072b5e85 100644 --- a/docs/source/todo.rst +++ b/docs/source/todo.rst @@ -11,6 +11,7 @@ TODO - optimize several inner loops in gfx2 (highres 4 color mode) - use the 65c02 bit clear/set/test instructions for single-bit operations - try to fix the bresenham line routines in graphics and gfx2 (sometimes they're a pixel 'off') +- add modes 2 and 3 to gfx2 (lowres 4 color and 16 color) - add a flood fill routine to gfx2? - add a f_seek() routine for the Cx16 that uses its seek dos api? - optimizer: detect variables that are written but never read - mark those as unused too and remove them, such as uword unused = memory("unused222", 20) - also remove the memory slab allocation diff --git a/examples/cx16/tehtriz.p8 b/examples/cx16/tehtriz.p8 index 5381d6d19..37a0a1c21 100644 --- a/examples/cx16/tehtriz.p8 +++ b/examples/cx16/tehtriz.p8 @@ -33,7 +33,7 @@ main { sub start() { - cx16.screen_set_mode(0) ; low res + void cx16.screen_set_mode(0) ; low res sound.init() newGame() drawBoard()