mirror of
https://github.com/irmen/prog8.git
synced 2024-12-22 18:30:01 +00:00
make %memtop exclusive i.e. the first address NOT to use (like kernal MEMTOP)
This commit is contained in:
parent
4bdabe1961
commit
1b528491c2
@ -14,7 +14,7 @@ interface IMachineDefinition {
|
||||
val FLOAT_MAX_POSITIVE: Double
|
||||
val FLOAT_MEM_SIZE: Int
|
||||
val PROGRAM_LOAD_ADDRESS : UInt
|
||||
val PROGRAM_TOP_ADDRESS: UInt
|
||||
val PROGRAM_MEMTOP_ADDRESS: UInt
|
||||
val BSSHIGHRAM_START: UInt
|
||||
val BSSHIGHRAM_END: UInt
|
||||
val BSSGOLDENRAM_START: UInt
|
||||
|
@ -12,7 +12,7 @@ class AtariMachineDefinition: IMachineDefinition {
|
||||
override val FLOAT_MAX_NEGATIVE = -9.999999999e97
|
||||
override val FLOAT_MEM_SIZE = 6
|
||||
override val PROGRAM_LOAD_ADDRESS = 0x2000u
|
||||
override val PROGRAM_TOP_ADDRESS = 0xffffu // TODO what's memtop
|
||||
override val PROGRAM_MEMTOP_ADDRESS = 0xffffu // TODO what's memtop?
|
||||
|
||||
override val BSSHIGHRAM_START = 0u // TODO
|
||||
override val BSSHIGHRAM_END = 0u // TODO
|
||||
|
@ -14,7 +14,7 @@ class C128MachineDefinition: IMachineDefinition {
|
||||
override val FLOAT_MAX_NEGATIVE = Mflpt5.FLOAT_MAX_NEGATIVE
|
||||
override val FLOAT_MEM_SIZE = Mflpt5.FLOAT_MEM_SIZE
|
||||
override val PROGRAM_LOAD_ADDRESS = 0x1c01u
|
||||
override val PROGRAM_TOP_ADDRESS = 0xfeffu
|
||||
override val PROGRAM_MEMTOP_ADDRESS = 0xff00u
|
||||
|
||||
override val BSSHIGHRAM_START = 0u // TODO
|
||||
override val BSSHIGHRAM_END = 0u // TODO
|
||||
|
@ -15,7 +15,7 @@ class C64MachineDefinition: IMachineDefinition {
|
||||
override val FLOAT_MAX_NEGATIVE = Mflpt5.FLOAT_MAX_NEGATIVE
|
||||
override val FLOAT_MEM_SIZE = Mflpt5.FLOAT_MEM_SIZE
|
||||
override val PROGRAM_LOAD_ADDRESS = 0x0801u
|
||||
override val PROGRAM_TOP_ADDRESS = 0xcfe0u // $9fff if floats are used
|
||||
override val PROGRAM_MEMTOP_ADDRESS = 0xcfe0u // $a000 if floats are used
|
||||
// note that at $cfe0-$cfff are the 16 'virtual registers' R0-R15
|
||||
|
||||
override val BSSHIGHRAM_START = 0xc000u
|
||||
|
@ -14,7 +14,7 @@ class CX16MachineDefinition: IMachineDefinition {
|
||||
override val FLOAT_MAX_NEGATIVE = Mflpt5.FLOAT_MAX_NEGATIVE
|
||||
override val FLOAT_MEM_SIZE = Mflpt5.FLOAT_MEM_SIZE
|
||||
override val PROGRAM_LOAD_ADDRESS = 0x0801u
|
||||
override val PROGRAM_TOP_ADDRESS = 0x9effu
|
||||
override val PROGRAM_MEMTOP_ADDRESS = 0x9f00u
|
||||
|
||||
override val BSSHIGHRAM_START = 0xa000u // hiram bank 1, 8Kb, assumed to be active
|
||||
override val BSSHIGHRAM_END = 0xbfffu // Rom starts at $c000
|
||||
|
@ -12,7 +12,7 @@ class Neo6502MachineDefinition: IMachineDefinition {
|
||||
override val FLOAT_MAX_NEGATIVE = -9.999999999e97
|
||||
override val FLOAT_MEM_SIZE = 6
|
||||
override val PROGRAM_LOAD_ADDRESS = 0x0800u
|
||||
override val PROGRAM_TOP_ADDRESS = 0xfbffu
|
||||
override val PROGRAM_MEMTOP_ADDRESS = 0xfc00u // kernal starts here
|
||||
|
||||
override val BSSHIGHRAM_START = 0u // TODO
|
||||
override val BSSHIGHRAM_END = 0u // TODO
|
||||
|
@ -14,7 +14,7 @@ class PETMachineDefinition: IMachineDefinition {
|
||||
override val FLOAT_MAX_NEGATIVE = Mflpt5.FLOAT_MAX_NEGATIVE
|
||||
override val FLOAT_MEM_SIZE = Mflpt5.FLOAT_MEM_SIZE
|
||||
override val PROGRAM_LOAD_ADDRESS = 0x0401u
|
||||
override val PROGRAM_TOP_ADDRESS = 0x7fffu
|
||||
override val PROGRAM_MEMTOP_ADDRESS = 0x8000u
|
||||
|
||||
override val BSSHIGHRAM_START = 0u
|
||||
override val BSSHIGHRAM_END = 0u
|
||||
|
@ -14,7 +14,7 @@ class VirtualMachineDefinition: IMachineDefinition {
|
||||
override val FLOAT_MAX_NEGATIVE = -Float.MAX_VALUE.toDouble()
|
||||
override val FLOAT_MEM_SIZE = 8 // 64-bits double
|
||||
override val PROGRAM_LOAD_ADDRESS = 0u // not actually used
|
||||
override val PROGRAM_TOP_ADDRESS = 0xffffu // not actually used
|
||||
override val PROGRAM_MEMTOP_ADDRESS = 0xffffu // not actually used
|
||||
|
||||
override val BSSHIGHRAM_START = 0u // not actually used
|
||||
override val BSSHIGHRAM_END = 0u // not actually used
|
||||
|
@ -287,7 +287,7 @@ internal class ProgramAndVarsGen(
|
||||
}
|
||||
}
|
||||
asmgen.out(" ; memtop check")
|
||||
asmgen.out(" .cerror * > ${options.memtopAddress.toHex()}, \"Program too long by \", * - ${options.memtopAddress.toHex()}, \" bytes, memtop=${options.memtopAddress.toHex()}\"")
|
||||
asmgen.out(" .cerror * >= ${options.memtopAddress.toHex()}, \"Program too long by \", * - ${(options.memtopAddress-1u).toHex()}, \" bytes, memtop=${options.memtopAddress.toHex()}\"")
|
||||
}
|
||||
|
||||
private fun block2asm(block: PtBlock) {
|
||||
|
@ -264,7 +264,7 @@ internal fun determineProgramLoadAddress(program: Program, options: CompilationO
|
||||
}
|
||||
|
||||
options.loadAddress = loadAddress
|
||||
options.memtopAddress = program.toplevelModule.memtopAddress?.first ?: options.compTarget.machine.PROGRAM_TOP_ADDRESS
|
||||
options.memtopAddress = program.toplevelModule.memtopAddress?.first ?: options.compTarget.machine.PROGRAM_MEMTOP_ADDRESS
|
||||
}
|
||||
|
||||
|
||||
|
@ -191,8 +191,8 @@ Directives
|
||||
but with this you can change it to another value. This can be useful for example to 'reserve' a piece
|
||||
of memory at the end of program space where other data such as external library files can be loaded into.
|
||||
This memtop value is used for a check instruction for the assembler to see if the resulting program size
|
||||
exceeds the given memtop address. This value is inclusive, so $9eff means that the program can use up to
|
||||
and including the address $9eff and that $9f00 is the first address out of bounds.
|
||||
exceeds the given memtop address. This value is exclusive, so $a000 means that $a000 is the first address
|
||||
that program can no longer use. Everything up to and including $9fff is still usable.
|
||||
|
||||
|
||||
.. data:: %option <option> [, <option> ...]
|
||||
|
@ -1,6 +1,21 @@
|
||||
TODO
|
||||
====
|
||||
|
||||
make repeat support 65536 iterations
|
||||
|
||||
make memtop adjust automatically when you use %address larger than the default . Then simply set it at $ffff because apparently the programmer knows better?
|
||||
|
||||
scripts/cx16_images : add an option to keep the first palette entry black (there's already the option to retain the first 16 entries)
|
||||
|
||||
support this usage of defer:
|
||||
|
||||
if diskio.f_open(filename) {
|
||||
defer diskio.f_close()
|
||||
...
|
||||
}
|
||||
|
||||
need help with: PET disk routines (OPEN, SETLFS etc are not exposed as kernal calls)
|
||||
|
||||
...
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
%import diskio
|
||||
%import textio
|
||||
%import zsmkit_high
|
||||
%memtop $8bff ; zsmkit is loaded from 8c00 onwards
|
||||
%memtop $8c00 ; zsmkit is loaded from 8c00 onwards
|
||||
|
||||
;; Proof Of Concept ZSM player using a binary blob version of zsmkit by MooingLemur
|
||||
;; This version is a bit simpler as "demo1".
|
||||
|
Loading…
Reference in New Issue
Block a user