Merge branch 'master' into structs

This commit is contained in:
Irmen de Jong
2025-06-24 21:14:53 +02:00
9 changed files with 74 additions and 46 deletions
@@ -27,7 +27,7 @@ interface ICompilationTarget: IStringEncoding, IMemSizer {
var golden: GoldenRam
val libraryPath: Path?
val customLauncher: List<String>
val additionalAssemblerOptions: String?
val additionalAssemblerOptions: List<String>
val defaultOutputType: OutputType
fun initializeMemoryAreas(compilerOptions: CompilationOptions)
+2 -2
View File
@@ -13,8 +13,8 @@ class C128Target: ICompilationTarget,
override val name = NAME
override val defaultEncoding = Encoding.PETSCII
override val libraryPath = null
override val customLauncher: List<String> = emptyList()
override val additionalAssemblerOptions = null
override val customLauncher = emptyList<String>()
override val additionalAssemblerOptions = emptyList<String>()
override val defaultOutputType = OutputType.PRG
companion object {
+2 -2
View File
@@ -14,8 +14,8 @@ class C64Target: ICompilationTarget,
override val name = NAME
override val defaultEncoding = Encoding.PETSCII
override val libraryPath = null
override val customLauncher: List<String> = emptyList()
override val additionalAssemblerOptions = null
override val customLauncher = emptyList<String>()
override val additionalAssemblerOptions = emptyList<String>()
override val defaultOutputType = OutputType.PRG
companion object {
@@ -27,7 +27,7 @@ class ConfigFileTarget(
override val defaultOutputType: OutputType,
override val libraryPath: Path,
override val customLauncher: List<String>,
override val additionalAssemblerOptions: String?,
override val additionalAssemblerOptions: List<String>,
val ioAddresses: List<UIntRange>,
val zpScratchB1: UInt,
val zpScratchReg: UInt,
@@ -109,8 +109,6 @@ class ConfigFileTarget(
(customLauncherStr+"\n").lines().map { it.trimEnd() }
else emptyList()
val assemblerOptionsStr = props.getProperty("assembler_options", "").trim()
val assemblerOptions = assemblerOptionsStr.ifBlank { null }
val outputTypeString = props.getProperty("output_type", "PRG")
val defaultOutputType = OutputType.valueOf(outputTypeString.uppercase())
@@ -128,7 +126,7 @@ class ConfigFileTarget(
defaultOutputType,
libraryPath,
customLauncher,
assemblerOptions,
if(assemblerOptionsStr=="") emptyList() else assemblerOptionsStr.split(" "),
ioAddresses,
props.getInteger("zp_scratch_b1"),
props.getInteger("zp_scratch_reg"),
+2 -2
View File
@@ -13,8 +13,8 @@ class Cx16Target: ICompilationTarget,
override val name = NAME
override val defaultEncoding = Encoding.PETSCII
override val libraryPath = null
override val customLauncher: List<String> = emptyList()
override val additionalAssemblerOptions = null
override val customLauncher = emptyList<String>()
override val additionalAssemblerOptions = emptyList<String>()
override val defaultOutputType = OutputType.PRG
companion object {
+2 -2
View File
@@ -13,8 +13,8 @@ class PETTarget: ICompilationTarget,
override val name = NAME
override val defaultEncoding = Encoding.PETSCII
override val libraryPath = null
override val customLauncher: List<String> = emptyList()
override val additionalAssemblerOptions = null
override val customLauncher = emptyList<String>()
override val additionalAssemblerOptions = emptyList<String>()
override val defaultOutputType = OutputType.PRG
companion object {
+2 -2
View File
@@ -14,8 +14,8 @@ class VMTarget: ICompilationTarget,
override val name = NAME
override val defaultEncoding = Encoding.ISO
override val libraryPath = null
override val customLauncher: List<String> = emptyList()
override val additionalAssemblerOptions = null
override val customLauncher = emptyList<String>()
override val additionalAssemblerOptions = emptyList<String>()
override val defaultOutputType = OutputType.PRG
companion object {
@@ -28,6 +28,14 @@ internal class AssemblyProgram(
val assemblerCommand: List<String>
fun addRemainingOptions(command: MutableList<String>, program: Path, assembly: Path): List<String> {
if(options.compTarget.additionalAssemblerOptions.isNotEmpty())
command.addAll(options.compTarget.additionalAssemblerOptions)
command.addAll(listOf("--output", program.toString(), assembly.toString()))
return command
}
when(options.output) {
OutputType.PRG -> {
// CBM machines .prg generation.
@@ -47,8 +55,7 @@ internal class AssemblyProgram(
command.add("--list=$listFile")
}
command.addAll(listOf("--output", prgFile.toString(), assemblyFile.toString()))
assemblerCommand = command
assemblerCommand = addRemainingOptions(command, prgFile, assemblyFile)
if(!options.quiet)
println("\nCreating prg for target ${compTarget.name}.")
}
@@ -69,8 +76,7 @@ internal class AssemblyProgram(
if(options.asmListfile)
command.add("--list=$listFile")
command.addAll(listOf("--output", xexFile.toString(), assemblyFile.toString()))
assemblerCommand = command
assemblerCommand = addRemainingOptions(command,xexFile, assemblyFile)
if(!options.quiet)
println("\nCreating xex for target ${compTarget.name}.")
}
@@ -90,8 +96,7 @@ internal class AssemblyProgram(
if(options.asmListfile)
command.add("--list=$listFile")
command.addAll(listOf("--output", binFile.toString(), assemblyFile.toString()))
assemblerCommand = command
assemblerCommand = addRemainingOptions(command, binFile, assemblyFile)
if(!options.quiet)
println("\nCreating raw binary for target ${compTarget.name}.")
}
@@ -122,14 +127,10 @@ internal class AssemblyProgram(
command.add("--nostart") // should be headerless bin, because basic has problems doing a normal LOAD"lib",8,1 - need to use BLOAD
}
command.addAll(listOf("--output", binFile.toString(), assemblyFile.toString()))
assemblerCommand = command
assemblerCommand = addRemainingOptions(command, binFile, assemblyFile)
}
}
if(options.compTarget.additionalAssemblerOptions!=null)
assemblerCommand.add(options.compTarget.additionalAssemblerOptions!!)
val proc = ProcessBuilder(assemblerCommand)
if(!options.quiet)
proc.inheritIO()
+49 -20
View File
@@ -1,6 +1,7 @@
%import graphics
%import floats
%import math
%import palette
%import textio
%option no_sysinit
; Bubble Universe
@@ -8,43 +9,71 @@
main {
sub start() {
init_palette()
graphics.enable_bitmap_mode()
txt.color(15)
txt.print("\n\n\n bubble universe.")
txt.print("\n\n\n calculation is quite slow\n (floating point),\n\n using the emulator's\n warp mode is advised.")
sys.wait(200)
txt.cls()
const ubyte n = 200
const float r = floats.TWOPI/235
const ubyte s = 60
float t
uword[] @nosplit palette = [$000, $000, $00f, $f0f, $0ff, $fff]
cx16.FB_set_palette(palette, 0, len(palette))
repeat {
graphics.clear_screen(1,0)
graphics.clear_screen(1, 0)
ubyte i
for i in 0 to n {
ubyte j
float ang1_start = i as float + t
float ang2_start = i as float * r + t
float v=0
float u=0
ubyte j
for j in 0 to n {
float ang1 = ang1_start+v
float ang2 = ang2_start+u
u=floats.sin(ang1)+floats.sin(ang2)
v=floats.cos(ang1)+floats.cos(ang2)
ubyte c=2
if i>=100
c++
if j>=100
c+=2
graphics.colors(c,0)
; TODO nice rgb color?: GCOL i%/num_curves%*255,j%/iteration_length%*255,255-(i%/num_curves%+j%/iteration_length%)*128
float @zp ang1 = ang1_start+v
float @zp ang2 = ang2_start+u
float @zp u = floats.sin(ang1)+floats.sin(ang2)
float @zp v = floats.cos(ang1)+floats.cos(ang2)
graphics.colors(j/16+3+((i/16+3)<<4), 0)
uword a = 40 + ((2+u) * s) as uword
uword b = ((v+2)*s) as uword
graphics.plot(a,b)
graphics.plot(a, b)
}
}
t+=0.025
}
}
sub init_palette() {
ubyte idx
ubyte i
uword j
i, void, void = cx16.entropy_get()
if i & 1 == 0 {
; 'neon nebula'
for j in 0 to $f00 step $100 {
for i in 0 to 15 {
when i {
15 -> palette.set_color(idx, $faf)
14 -> palette.set_color(idx, $f48)
else -> palette.set_color(idx, j+i)
}
idx++
}
}
} else {
; 'slime on fire'
for j in 0 to $f00 step $100 {
for i in $00 to $f0 step $10 {
when i {
$f0 -> palette.set_color(idx, $aff)
$e0 -> palette.set_color(idx, $4f8)
else -> palette.set_color(idx, j+i)
}
idx++
}
}
}
}
}