mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-03-23 07:35:00 +00:00
Simplify VM configurations and auto-load alternative VMs
This commit is contained in:
parent
795d56c2a7
commit
3a6c77a4eb
@ -47,5 +47,6 @@ fin
|
||||
*jitcomp = @compiler
|
||||
cmdsys.jitcount = 44
|
||||
cmdsys.jitsize = 96
|
||||
puts("16 BIT VM/JITC enabled.\n")
|
||||
return modkeep
|
||||
done
|
||||
|
@ -4,12 +4,12 @@ PLVM = plvm
|
||||
PLVMZP_APL = vmsrc/apple/plvmzp.inc
|
||||
PLVM01 = rel/apple/A1PLASMA\#060280
|
||||
PLVM02 = rel/apple/PLASMA.SYSTEM\#FF2000
|
||||
PLVMJIT = rel/apple/PLASMAJIT.SYSTEM\#FF2000
|
||||
PLVM802 = rel/apple/PLASMA16.SYSTEM\#FF2000
|
||||
PLVMJIT = rel/apple/PLVM-128\#FF2000
|
||||
PLVM802 = rel/apple/PLVM16\#FF2000
|
||||
PLVM03 = rel/apple/SOS.INTERP\#050000
|
||||
SOSCMD = rel/apple/SOS.CMD\#FE1000
|
||||
CMD = rel/apple/CMD\#061000
|
||||
CMDJIT = rel/apple/CMDJIT\#061000
|
||||
CMDJIT = rel/apple/CMD128\#061000
|
||||
PLVMZP_C64 = vmsrc/c64/plvmzp.inc
|
||||
PLVMC64 = rel/c64/PLASMA
|
||||
ED = rel/ED\#FE1000
|
||||
|
@ -931,39 +931,6 @@ def releaseheap(newheap)#1
|
||||
heap = newheap
|
||||
return @newheap - heap
|
||||
end
|
||||
def allocxheap(size)#1
|
||||
word xaddr
|
||||
xaddr = xheap
|
||||
xheap = xheap + size
|
||||
if systemflags & restxt1
|
||||
if uword_isle(xaddr, $0800) and uword_isgt(xheap, $0400)
|
||||
xaddr = $0800
|
||||
xheap = xaddr + size
|
||||
fin
|
||||
fin
|
||||
if systemflags & restxt2
|
||||
if uword_isle(xaddr, $0C00) and uword_isgt(xheap, $0800)
|
||||
xaddr = $0C00
|
||||
xheap = xaddr + size
|
||||
fin
|
||||
fin
|
||||
if systemflags & resxhgr1
|
||||
if uword_isle(xaddr, $4000) and uword_isgt(xheap, $2000)
|
||||
xaddr = $4000
|
||||
xheap = xaddr + size
|
||||
fin
|
||||
fin
|
||||
if systemflags & resxhgr2
|
||||
if uword_isle(xaddr, $6000) and uword_isgt(xheap, $4000)
|
||||
xaddr = $6000
|
||||
xheap = xaddr + size
|
||||
fin
|
||||
fin
|
||||
if uword_isge(xheap, $BF00)
|
||||
return 0
|
||||
fin
|
||||
return xaddr
|
||||
end
|
||||
//
|
||||
// Symbol table routines.
|
||||
//
|
||||
@ -1009,12 +976,12 @@ def lookupextern(esd, index)#1
|
||||
fin
|
||||
return 0
|
||||
end
|
||||
def adddef(bank, addr, deflast)#1
|
||||
def adddef(addr, deflast)#1
|
||||
word defentry
|
||||
defentry = *deflast
|
||||
*deflast = defentry + 5
|
||||
defentry->0 = $20
|
||||
defentry=>1 = bank ?? $03DC :: $03D6 // JSR $03DC (AUX MEM INTERP) or $03D6 (MAIN MEM INTERP)
|
||||
defentry=>1 = $03D6
|
||||
defentry=>3 = addr
|
||||
defentry->5 = 0 // NULL out next entry
|
||||
return defentry
|
||||
@ -1024,7 +991,7 @@ def loadmod(mod)#1
|
||||
word addr, defaddr, modaddr, modfix, modofst, modend
|
||||
word deftbl, deflast
|
||||
word moddep, rld, esd, sym
|
||||
byte refnum, defbank, filename[64], str[]
|
||||
byte refnum, filename[64], str[]
|
||||
byte header[128]
|
||||
//
|
||||
// Read the RELocatable module header (first 128 bytes)
|
||||
@ -1121,17 +1088,7 @@ def loadmod(mod)#1
|
||||
esd = esd + 4
|
||||
loop
|
||||
esd = esd + 1
|
||||
//
|
||||
// Locate bytecode defs in appropriate bank.
|
||||
//
|
||||
if ^MACHID & $30 == $30
|
||||
defbank = 1
|
||||
defaddr = allocxheap(rld - bytecode)
|
||||
modend = bytecode
|
||||
else
|
||||
defbank = 0
|
||||
defaddr = bytecode
|
||||
fin
|
||||
defaddr = bytecode
|
||||
codefix = defaddr - bytecode
|
||||
defofst = defaddr - defofst
|
||||
//
|
||||
@ -1141,7 +1098,7 @@ def loadmod(mod)#1
|
||||
//
|
||||
// This is a bytcode def entry - add it to the def directory.
|
||||
//
|
||||
adddef(defbank, rld=>1 + defofst, @deflast)
|
||||
adddef(rld=>1 + defofst, @deflast)
|
||||
rld = rld + 4
|
||||
loop
|
||||
//
|
||||
@ -1153,31 +1110,6 @@ def loadmod(mod)#1
|
||||
*addr = ^rld & $10 ?? *addr + lookupextern(esd, rld->3) :: lookupdef(fixup + codefix, deftbl)
|
||||
rld = rld + 4
|
||||
fin
|
||||
//addr = rld=>1 + modfix
|
||||
//if uword_isge(addr, modaddr) // Skip fixups to header
|
||||
// if type & $80 // WORD sized fixup.
|
||||
// fixup = *addr
|
||||
// else // BYTE sized fixup.
|
||||
// fixup = ^addr
|
||||
// fin
|
||||
// if ^rld & $10 // EXTERN reference.
|
||||
// fixup = fixup + lookupextern(esd, rld->3)
|
||||
// else // INTERN fixup.
|
||||
// fixup = fixup + modofst
|
||||
// if uword_isge(fixup, bytecode)
|
||||
// //
|
||||
// // Bytecode address - replace with call def directory.
|
||||
// //
|
||||
// fixup = lookupdef(fixup + codefix, deftbl)
|
||||
// fin
|
||||
// fin
|
||||
// if type & $80 // WORD sized fixup.
|
||||
// *addr = fixup
|
||||
// else // BYTE sized fixup.
|
||||
// ^addr = fixup
|
||||
// fin
|
||||
//fin
|
||||
//rld = rld + 4
|
||||
loop
|
||||
//
|
||||
// Run through the External/Entry Symbol Directory.
|
||||
@ -1200,15 +1132,6 @@ def loadmod(mod)#1
|
||||
fin
|
||||
esd = esd + 3
|
||||
loop
|
||||
if defbank
|
||||
//
|
||||
// Move bytecode to AUX bank.
|
||||
//
|
||||
*$003C = bytecode
|
||||
*$003E = modaddr + modsize
|
||||
*$0042 = defaddr
|
||||
call($C311, 0, 0, 0, $05) // CALL XMOVE with carry set (MAIN->AUX) and ints disabled
|
||||
fin
|
||||
else
|
||||
perr = $46
|
||||
fin
|
||||
@ -1216,7 +1139,7 @@ def loadmod(mod)#1
|
||||
return -perr
|
||||
fin
|
||||
//
|
||||
// Free up rld+esd (and bytecode on 128K) in main memory.
|
||||
// Free up rld+esd in main memory.
|
||||
//
|
||||
releaseheap(modend)
|
||||
//
|
||||
@ -1225,19 +1148,12 @@ def loadmod(mod)#1
|
||||
fixup = 0 // This is repurposed for the return code
|
||||
if init
|
||||
init = init + defofst
|
||||
fixup = adddef(defbank, init, @deflast)()
|
||||
fixup = adddef(init, @deflast)()
|
||||
if fixup < modinitkeep
|
||||
//
|
||||
// Free init routine unless initkeep
|
||||
//
|
||||
if defbank
|
||||
xheap = init
|
||||
else
|
||||
//
|
||||
// Free up init code in main memory.
|
||||
//
|
||||
releaseheap(init)
|
||||
fin
|
||||
releaseheap(init)
|
||||
if fixup < 0
|
||||
perr = -fixup
|
||||
fin
|
||||
@ -1366,6 +1282,9 @@ def parsecmd(strptr)#1
|
||||
return cmd
|
||||
end
|
||||
def resetmemfiles()#0
|
||||
byte terr
|
||||
|
||||
terr = perr // Save perr
|
||||
//
|
||||
// Close all files
|
||||
//
|
||||
@ -1377,6 +1296,7 @@ def resetmemfiles()#0
|
||||
memset($BF58, 0, 24)
|
||||
^$BF58 = $CF
|
||||
^$BF6F = $01
|
||||
perr = terr // Restore perr
|
||||
end
|
||||
def execsys(sysfile)#0
|
||||
byte refnum
|
||||
@ -1430,7 +1350,7 @@ heap = *freemem
|
||||
//
|
||||
// Print PLASMA version
|
||||
//
|
||||
prstr("PLASMA 2.0 Dev\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
prstr("PLASMA 64K 2.0 Dev\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
//
|
||||
// Init symbol table.
|
||||
//
|
||||
|
@ -1346,6 +1346,9 @@ def parsecmd(strptr)#1
|
||||
return cmd
|
||||
end
|
||||
def resetmemfiles()#0
|
||||
byte terr
|
||||
|
||||
terr = perr // Save perr
|
||||
//
|
||||
// Close all files
|
||||
//
|
||||
@ -1357,6 +1360,7 @@ def resetmemfiles()#0
|
||||
memset($BF58, 0, 24)
|
||||
^$BF58 = $CF
|
||||
^$BF6F = $01
|
||||
perr = terr // Restore perr
|
||||
end
|
||||
def execsys(sysfile)#0
|
||||
byte refnum
|
||||
@ -1412,7 +1416,7 @@ heap = *freemem
|
||||
//
|
||||
// Print PLASMA version
|
||||
//
|
||||
prstr("PLASMA JITC 2.0 Dev\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
prstr("PLASMA 128K 2.0 Dev\n")//; prbyte(version.1); cout('.'); prbyte(version.0); crout
|
||||
//
|
||||
// Init symbol table.
|
||||
//
|
||||
@ -1428,7 +1432,7 @@ strcat(strcpy(@sysmods, $280), "SYS/")) // This is the path to CMD
|
||||
syspath = @sysmods // Update external interface table
|
||||
syscmdln = @cmdln
|
||||
loadmod(jitmod)
|
||||
xheap = $0800 // Reset heap to point at low memory
|
||||
xheap = $0400 // Reset heap to point at low memory
|
||||
xheaptop = $A000 // Top where JIT loaded
|
||||
//
|
||||
// Try to load autorun.
|
||||
|
@ -1,12 +1,12 @@
|
||||
INTERP = $03D0
|
||||
LCRDEN = $C080
|
||||
LCWTEN = $C081
|
||||
ROMEN = $C082
|
||||
LCRWEN = $C083
|
||||
LCBNK2 = $00
|
||||
LCBNK1 = $08
|
||||
JITCOMP = $03E2
|
||||
JITCODE = $03E4
|
||||
INTERP = $03D0
|
||||
LCRDEN = $C080
|
||||
LCWTEN = $C081
|
||||
ROMEN = $C082
|
||||
LCRWEN = $C083
|
||||
LCBNK2 = $00
|
||||
LCBNK1 = $08
|
||||
JITCOMP = $03E2
|
||||
JITCODE = $03E4
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
;*
|
||||
;* MOVE CMD DOWN TO $1000-$2000
|
||||
@ -25,7 +25,7 @@ JITCODE = $03E4
|
||||
BNE -
|
||||
INC SRCH
|
||||
INC DSTH
|
||||
DEX ; STOP WHEN DST=$2000 REACHED
|
||||
DEX ; STOP WHEN DST=$2000 REACHED
|
||||
BNE -
|
||||
LDA #<_CMDEND
|
||||
STA SRCL
|
||||
@ -34,11 +34,11 @@ JITCODE = $03E4
|
||||
;
|
||||
; INIT VM ENVIRONMENT STACK POINTERS
|
||||
;
|
||||
STY PPL
|
||||
STY IFPL ; INIT FRAME POINTER = $AF00 (4K FOR JIT CODE)
|
||||
STY JITCODE
|
||||
STY JITCOMP
|
||||
STY JITCOMP+1
|
||||
STY PPL
|
||||
STY IFPL ; INIT FRAME POINTER
|
||||
STY JITCODE
|
||||
LDA #$AF
|
||||
STA PPH
|
||||
STA IFPH
|
||||
@ -46,7 +46,6 @@ JITCODE = $03E4
|
||||
LDX #$FE ; INIT STACK POINTER (YES, $FE. SEE GETS)
|
||||
TXS
|
||||
LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX
|
||||
|
||||
JMP $1000
|
||||
_CMDBEGIN = *
|
||||
!PSEUDOPC $1000 {
|
||||
|
@ -1,48 +1,48 @@
|
||||
INTERP = $03D0
|
||||
LCRDEN = $C080
|
||||
LCWTEN = $C081
|
||||
ROMEN = $C082
|
||||
LCRWEN = $C083
|
||||
LCBNK2 = $00
|
||||
LCBNK1 = $08
|
||||
INTERP = $03D0
|
||||
LCRDEN = $C080
|
||||
LCWTEN = $C081
|
||||
ROMEN = $C082
|
||||
LCRWEN = $C083
|
||||
LCBNK2 = $00
|
||||
LCBNK1 = $08
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
;*
|
||||
;* MOVE CMD DOWN TO $1000-$2000
|
||||
;*
|
||||
LDA #<_CMDBEGIN
|
||||
STA SRCL
|
||||
LDA #>_CMDBEGIN
|
||||
STA SRCH
|
||||
LDY #$00
|
||||
STY DSTL
|
||||
LDX #$10
|
||||
STX DSTH
|
||||
- LDA (SRC),Y
|
||||
STA (DST),Y
|
||||
INY
|
||||
BNE -
|
||||
INC SRCH
|
||||
INC DSTH
|
||||
DEX ; STOP WHEN DST=$2000 REACHED
|
||||
BNE -
|
||||
LDA #<_CMDEND
|
||||
STA SRCL
|
||||
LDA #>_CMDEND
|
||||
STA SRCH
|
||||
LDA #<_CMDBEGIN
|
||||
STA SRCL
|
||||
LDA #>_CMDBEGIN
|
||||
STA SRCH
|
||||
LDY #$00
|
||||
STY DSTL
|
||||
LDX #$10
|
||||
STX DSTH
|
||||
- LDA (SRC),Y
|
||||
STA (DST),Y
|
||||
INY
|
||||
BNE -
|
||||
INC SRCH
|
||||
INC DSTH
|
||||
DEX ; STOP WHEN DST=$2000 REACHED
|
||||
BNE -
|
||||
LDA #<_CMDEND
|
||||
STA SRCL
|
||||
LDA #>_CMDEND
|
||||
STA SRCH
|
||||
;
|
||||
; INIT VM ENVIRONMENT STACK POINTERS
|
||||
;
|
||||
STY PPL
|
||||
STY IFPL ; INIT FRAME POINTER
|
||||
LDA #$BF
|
||||
STA PPH
|
||||
STA IFPH
|
||||
LDX #$FE ; INIT STACK POINTER (YES, $FE. SEE GETS)
|
||||
TXS
|
||||
LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX
|
||||
JMP $1000
|
||||
STY PPL
|
||||
STY IFPL ; INIT FRAME POINTER = $BF00
|
||||
LDA #$BF
|
||||
STA PPH
|
||||
STA IFPH
|
||||
LDX #$FE ; INIT STACK POINTER (YES, $FE. SEE GETS)
|
||||
TXS
|
||||
LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX
|
||||
JMP $1000
|
||||
_CMDBEGIN = *
|
||||
!PSEUDOPC $1000 {
|
||||
!SOURCE "vmsrc/apple/cmd.a"
|
||||
!PSEUDOPC $1000 {
|
||||
!SOURCE "vmsrc/apple/cmd.a"
|
||||
_CMDEND = *
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -97,7 +97,7 @@ NOS = $03 ; TOS-1
|
||||
;* INTERPRETER INITIALIZATION *
|
||||
;* *
|
||||
;******************************
|
||||
* = $2000
|
||||
* = $2000
|
||||
;*
|
||||
;* MUST HAVE 128K FOR JIT
|
||||
;*
|
||||
@ -143,13 +143,6 @@ BADCPU !TEXT "65C802/65C816 CPU REQUIRED.", 13
|
||||
ANYKEY !TEXT "PRESS ANY KEY...", 0
|
||||
++ XCE ; SWITCH BACK TO EMULATED MODE
|
||||
|
||||
;*
|
||||
;* INITIALIZE STACK
|
||||
;*
|
||||
;INITSP LDX #$FE
|
||||
; TXS
|
||||
; LDX #$00
|
||||
; STX $01FF
|
||||
;*
|
||||
;* DISCONNECT /RAM
|
||||
;*
|
||||
@ -196,7 +189,7 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
STY DSTL
|
||||
LDA #$D0
|
||||
STA DSTH
|
||||
- LDA (SRC),Y ; COPY VM+CMD INTO LANGUAGE CARD
|
||||
- LDA (SRC),Y ; COPY VM+BYE INTO LANGUAGE CARD
|
||||
STA (DST),Y
|
||||
INY
|
||||
BNE -
|
||||
@ -208,10 +201,7 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
;*
|
||||
;* MOVE FIRST PAGE OF 'BYE' INTO PLACE
|
||||
;*
|
||||
STY SRCL
|
||||
LDA #$D1
|
||||
STA SRCH
|
||||
- LDA (SRC),Y
|
||||
- LDA $D100,Y
|
||||
STA $1000,Y
|
||||
INY
|
||||
BNE -
|
||||
@ -236,13 +226,13 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
LDA #"D"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
LDA #"J"
|
||||
LDA #"1"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
LDA #"I"
|
||||
LDA #"2"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
LDA #"T"
|
||||
LDA #"8"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
STY STRBUF
|
||||
|
@ -1,6 +1,6 @@
|
||||
;**********************************************************
|
||||
;*
|
||||
;* APPLE ][ 64K/128K PLASMA INTERPRETER
|
||||
;* APPLE ][ 128K PLASMA INTERPRETER
|
||||
;*
|
||||
;* SYSTEM ROUTINES AND LOCATIONS
|
||||
;*
|
||||
@ -61,10 +61,6 @@ JITCODE = $03E4
|
||||
;* *
|
||||
;******************************
|
||||
* = $2000
|
||||
LDX #$FE
|
||||
TXS
|
||||
LDX #$00
|
||||
STX $01FF
|
||||
;*
|
||||
;* MUST HAVE 128K FOR JIT
|
||||
;*
|
||||
@ -134,7 +130,7 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
STY DSTL
|
||||
LDA #$D0
|
||||
STA DSTH
|
||||
- LDA (SRC),Y ; COPY VM+CMD INTO LANGUAGE CARD
|
||||
- LDA (SRC),Y ; COPY VM+BYE INTO LANGUAGE CARD
|
||||
STA (DST),Y
|
||||
INY
|
||||
BNE -
|
||||
@ -146,10 +142,7 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
;*
|
||||
;* MOVE FIRST PAGE OF 'BYE' INTO PLACE
|
||||
;*
|
||||
STY SRCL
|
||||
LDA #$D1
|
||||
STA SRCH
|
||||
- LDA (SRC),Y
|
||||
- LDA $D100,Y
|
||||
STA $1000,Y
|
||||
INY
|
||||
BNE -
|
||||
@ -181,13 +174,13 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
LDA #"D"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
LDA #"J"
|
||||
LDA #"1"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
LDA #"I"
|
||||
LDA #"2"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
LDA #"T"
|
||||
LDA #"8"
|
||||
INY
|
||||
STA STRBUF,Y
|
||||
STY STRBUF
|
||||
@ -2035,11 +2028,11 @@ RET RTS
|
||||
NATV TYA ; FLATTEN IP
|
||||
SEC
|
||||
ADC IPL
|
||||
STA TMPL
|
||||
STA IPL
|
||||
LDA #$00
|
||||
ADC IPH
|
||||
STA TMPH
|
||||
JMP JMPTMP
|
||||
STA IPH
|
||||
JMP (IP)
|
||||
VMEND = *
|
||||
}
|
||||
;***************************************
|
||||
|
Loading…
x
Reference in New Issue
Block a user