mirror of
https://github.com/irmen/prog8.git
synced 2026-04-26 05:17:54 +00:00
Merge branch 'master' into structs
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user