mirror of
https://github.com/irmen/prog8.git
synced 2024-11-25 19:31:36 +00:00
add support for second alternative emulator (box16 in case of cx16 target)
This commit is contained in:
parent
a7736d88a9
commit
6367c6d116
@ -31,7 +31,8 @@ fun pathFrom(stringPath: String, vararg rest: String): Path = FileSystems.getDe
|
|||||||
|
|
||||||
private fun compileMain(args: Array<String>): Boolean {
|
private fun compileMain(args: Array<String>): Boolean {
|
||||||
val cli = ArgParser("prog8compiler", prefixStyle = ArgParser.OptionPrefixStyle.JVM)
|
val cli = ArgParser("prog8compiler", prefixStyle = ArgParser.OptionPrefixStyle.JVM)
|
||||||
val startEmulator by cli.option(ArgType.Boolean, fullName = "emu", description = "auto-start emulator after successful compilation")
|
val startEmulator1 by cli.option(ArgType.Boolean, fullName = "emu", description = "auto-start emulator after successful compilation")
|
||||||
|
val startEmulator2 by cli.option(ArgType.Boolean, fullName = "emu2", description = "auto-start alternative emulator after successful compilation")
|
||||||
val outputDir by cli.option(ArgType.String, fullName = "out", description = "directory for output files instead of current directory").default(".")
|
val outputDir by cli.option(ArgType.String, fullName = "out", description = "directory for output files instead of current directory").default(".")
|
||||||
val dontWriteAssembly by cli.option(ArgType.Boolean, fullName = "noasm", description="don't create assembly code")
|
val dontWriteAssembly by cli.option(ArgType.Boolean, fullName = "noasm", description="don't create assembly code")
|
||||||
val dontOptimize by cli.option(ArgType.Boolean, fullName = "noopt", description = "don't perform any optimizations")
|
val dontOptimize by cli.option(ArgType.Boolean, fullName = "noopt", description = "don't perform any optimizations")
|
||||||
@ -119,13 +120,17 @@ private fun compileMain(args: Array<String>): Boolean {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startEmulator==true) {
|
if(startEmulator1==true || startEmulator2==true) {
|
||||||
if (compilationResult.programName.isEmpty())
|
if (compilationResult.programName.isEmpty()) {
|
||||||
println("\nCan't start emulator because no program was assembled.")
|
println("\nCan't start emulator because no program was assembled.")
|
||||||
else {
|
return true
|
||||||
compilationResult.compTarget.machine.launchEmulator(compilationResult.programName)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (startEmulator1==true)
|
||||||
|
compilationResult.compTarget.machine.launchEmulator(1, compilationResult.programName)
|
||||||
|
else if (startEmulator2==true)
|
||||||
|
compilationResult.compTarget.machine.launchEmulator(2, compilationResult.programName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,6 @@ interface IMachineDefinition {
|
|||||||
fun getFloat(num: Number): IMachineFloat
|
fun getFloat(num: Number): IMachineFloat
|
||||||
|
|
||||||
fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List<String>
|
fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List<String>
|
||||||
fun launchEmulator(programName: String)
|
fun launchEmulator(selectedEmulator: Int, programName: String)
|
||||||
fun isRegularRAMaddress(address: Int): Boolean
|
fun isRegularRAMaddress(address: Int): Boolean
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,12 @@ internal object C64MachineDefinition: IMachineDefinition {
|
|||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun launchEmulator(programName: String) {
|
override fun launchEmulator(selectedEmulator: Int, programName: String) {
|
||||||
|
if(selectedEmulator!=1) {
|
||||||
|
System.err.println("The c64 target only supports the main emulator (Vice).")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for(emulator in listOf("x64sc", "x64")) {
|
for(emulator in listOf("x64sc", "x64")) {
|
||||||
println("\nStarting C-64 emulator $emulator...")
|
println("\nStarting C-64 emulator $emulator...")
|
||||||
val cmdline = listOf(emulator, "-silent", "-moncommands", "$programName.vice-mon-list",
|
val cmdline = listOf(emulator, "-silent", "-moncommands", "$programName.vice-mon-list",
|
||||||
|
@ -32,8 +32,17 @@ internal object CX16MachineDefinition: IMachineDefinition {
|
|||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun launchEmulator(programName: String) {
|
override fun launchEmulator(selectedEmulator: Int, programName: String) {
|
||||||
for(emulator in listOf("x16emu")) {
|
val emulatorName: String = when(selectedEmulator) {
|
||||||
|
1 -> "x16emu"
|
||||||
|
2 -> "box16"
|
||||||
|
else -> {
|
||||||
|
System.err.println("Cx16 target only supports x16emu and box16 emulators.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(emulator in listOf(emulatorName)) {
|
||||||
println("\nStarting Commander X16 emulator $emulator...")
|
println("\nStarting Commander X16 emulator $emulator...")
|
||||||
val cmdline = listOf(emulator, "-scale", "2", "-run", "-prg", "$programName.prg")
|
val cmdline = listOf(emulator, "-scale", "2", "-run", "-prg", "$programName.prg")
|
||||||
val processb = ProcessBuilder(cmdline).inheritIO()
|
val processb = ProcessBuilder(cmdline).inheritIO()
|
||||||
|
@ -166,7 +166,9 @@ For MacOS you can use the Homebrew system to install a recent version of OpenJDK
|
|||||||
|
|
||||||
Finally: an **emulator** (or a real machine ofcourse) to test and run your programs on.
|
Finally: an **emulator** (or a real machine ofcourse) to test and run your programs on.
|
||||||
In C64 mode, the compiler assumes the presence of the `Vice emulator <http://vice-emu.sourceforge.net/>`_.
|
In C64 mode, the compiler assumes the presence of the `Vice emulator <http://vice-emu.sourceforge.net/>`_.
|
||||||
If you're targeting the CommanderX16 instead, there's the `x16emu <https://github.com/commanderx16/x16-emulator>`_.
|
If you're targeting the CommanderX16 instead, there's a choice of the official `x16emu <https://github.com/commanderx16/x16-emulator>`_
|
||||||
|
and the unofficial `box16 <https://github.com/indigodarkwolf/box16>`_ (you can select which one you want to launch
|
||||||
|
using the ``-emu`` or ``-emu2`` command line options)
|
||||||
|
|
||||||
.. attention:: **Commander-X16 V38 versus V39**
|
.. attention:: **Commander-X16 V38 versus V39**
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ TODO
|
|||||||
|
|
||||||
For next release
|
For next release
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
- add -sym vicemonlist support when launching box16 emulator (requires box16 bugfix to not freeze)
|
||||||
- rename libdirs option to srcdirs?
|
- rename libdirs option to srcdirs?
|
||||||
- can we derive module.name from module.source (taking just the filename base)?
|
- can we derive module.name from module.source (taking just the filename base)?
|
||||||
- can Position.file be a Path- making the source variable for nodes unnecessary?
|
- can Position.file be a Path- making the source variable for nodes unnecessary?
|
||||||
@ -29,6 +29,9 @@ Future
|
|||||||
- refactor the compiler optimizers into own project submodule
|
- refactor the compiler optimizers into own project submodule
|
||||||
- make it possible to use cpu opcodes such as 'nop' as variable names by prefixing all asm vars with something such as ``v_``
|
- make it possible to use cpu opcodes such as 'nop' as variable names by prefixing all asm vars with something such as ``v_``
|
||||||
- [problematic due to 64tass:] add a compiler option to not remove unused subroutines. this allows for building library programs. But this won't work with 64tass's .proc ...
|
- [problematic due to 64tass:] add a compiler option to not remove unused subroutines. this allows for building library programs. But this won't work with 64tass's .proc ...
|
||||||
|
Perhaps replace all uses of .proc/.pend by .block/.bend will fix that?
|
||||||
|
(but we lose the optimizing aspect of the assembler where it strips out unused code.
|
||||||
|
There's not really a dynamic switch possible as all assembly lib code is static and uses one or the other)
|
||||||
- introduce byte-index operator to avoid index multiplications in loops over arrays?
|
- introduce byte-index operator to avoid index multiplications in loops over arrays?
|
||||||
see https://www.reddit.com/r/programming/comments/alhj59/creating_a_programming_language_and_cross/eg898b9?utm_source=share&utm_medium=web2x&context=3
|
see https://www.reddit.com/r/programming/comments/alhj59/creating_a_programming_language_and_cross/eg898b9?utm_source=share&utm_medium=web2x&context=3
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user