mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-02-10 10:30:58 +00:00
Invokable JIT compiler version
This commit is contained in:
parent
4577983799
commit
4dcc033ed0
48
src/libsrc/apple/jit.pla
Normal file
48
src/libsrc/apple/jit.pla
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
//
|
||||||
|
// PLASMA JIT bytecode compiler
|
||||||
|
//
|
||||||
|
include "inc/cmdsys.plh"
|
||||||
|
//
|
||||||
|
// Module don't free memory
|
||||||
|
//
|
||||||
|
const modkeep = $2000
|
||||||
|
const modinitkeep = $4000
|
||||||
|
//
|
||||||
|
// Indirect interpreter DEFinition entrypoint
|
||||||
|
//
|
||||||
|
struc t_defentry
|
||||||
|
byte interpjsr
|
||||||
|
word interpaddr
|
||||||
|
word bytecodeaddr
|
||||||
|
byte callcount
|
||||||
|
byte bytecodesize
|
||||||
|
end
|
||||||
|
//
|
||||||
|
// JIT compiler constants
|
||||||
|
//
|
||||||
|
const jitcount = $10
|
||||||
|
const jitcomp = $03E2
|
||||||
|
const jitcodeptr = $03E4
|
||||||
|
//
|
||||||
|
// AUX bytecode interpreter entrypoint
|
||||||
|
//
|
||||||
|
const interpentry = $03DC
|
||||||
|
//
|
||||||
|
// JIT compiler entry
|
||||||
|
//
|
||||||
|
def compiler(defptr)#0
|
||||||
|
puts("JIT compiler invoked!\n")
|
||||||
|
|
||||||
|
defptr=>interpaddr = interpentry
|
||||||
|
end
|
||||||
|
//
|
||||||
|
// Install JIT compiler
|
||||||
|
//
|
||||||
|
if *jitcomp
|
||||||
|
puts("JIT compiler already installed!\n")
|
||||||
|
return 0
|
||||||
|
fin
|
||||||
|
puts("Installing JIT compiler\n")
|
||||||
|
*jitcomp = @compiler
|
||||||
|
return modkeep
|
||||||
|
done
|
21
src/makefile
21
src/makefile
@ -4,13 +4,16 @@ PLVM = plvm
|
|||||||
PLVMZP_APL = vmsrc/apple/plvmzp.inc
|
PLVMZP_APL = vmsrc/apple/plvmzp.inc
|
||||||
PLVM01 = rel/apple/A1PLASMA\#060280
|
PLVM01 = rel/apple/A1PLASMA\#060280
|
||||||
PLVM02 = rel/apple/PLASMA.SYSTEM\#FF2000
|
PLVM02 = rel/apple/PLASMA.SYSTEM\#FF2000
|
||||||
|
PLVMJIT = rel/apple/PLASMAJIT.SYSTEM\#FF2000
|
||||||
PLVM802 = rel/apple/PLASMA16.SYSTEM\#FF2000
|
PLVM802 = rel/apple/PLASMA16.SYSTEM\#FF2000
|
||||||
PLVM03 = rel/apple/SOS.INTERP\#050000
|
PLVM03 = rel/apple/SOS.INTERP\#050000
|
||||||
SOSCMD = rel/apple/SOS.CMD\#FE1000
|
SOSCMD = rel/apple/SOS.CMD\#FE1000
|
||||||
CMD = rel/apple/CMD\#061000
|
CMD = rel/apple/CMD\#061000
|
||||||
|
CMDJIT = rel/apple/CMDJIT\#061000
|
||||||
PLVMZP_C64 = vmsrc/c64/plvmzp.inc
|
PLVMZP_C64 = vmsrc/c64/plvmzp.inc
|
||||||
PLVMC64 = rel/c64/PLASMA
|
PLVMC64 = rel/c64/PLASMA
|
||||||
ED = rel/ED\#FE1000
|
ED = rel/ED\#FE1000
|
||||||
|
JIT = rel/apple/JIT\#FE1000
|
||||||
SOS = rel/apple/SOS\#FE1000
|
SOS = rel/apple/SOS\#FE1000
|
||||||
ROD = rel/ROD\#FE1000
|
ROD = rel/ROD\#FE1000
|
||||||
SIEVE = rel/SIEVE\#FE1000
|
SIEVE = rel/SIEVE\#FE1000
|
||||||
@ -76,7 +79,7 @@ TXTTYPE = .TXT
|
|||||||
#SYSTYPE = \#FF2000
|
#SYSTYPE = \#FF2000
|
||||||
#TXTTYPE = \#040000
|
#TXTTYPE = \#040000
|
||||||
|
|
||||||
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(SOSCMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(DGR) $(DGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(CMD) $(CMDJIT) $(JIT) $(SOSCMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(DGR) $(DGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||||
-rm vmsrc/plvmzp.inc
|
-rm vmsrc/plvmzp.inc
|
||||||
|
|
||||||
c64: $(PLVMZP_C64) $(PLASM) $(PLVM) $(PLVMC64)
|
c64: $(PLVMZP_C64) $(PLASM) $(PLVM) $(PLVMC64)
|
||||||
@ -85,7 +88,7 @@ c64: $(PLVMZP_C64) $(PLASM) $(PLVM) $(PLVMC64)
|
|||||||
all: apple c64
|
all: apple c64
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03)
|
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM03)
|
||||||
-rm -rf rel
|
-rm -rf rel
|
||||||
-rm samplesrc/*.o samplesrc/*~ samplesrc/*.a
|
-rm samplesrc/*.o samplesrc/*~ samplesrc/*.a
|
||||||
-rm toolsrc/*.o toolsrc/*~ toolsrc/*.a
|
-rm toolsrc/*.o toolsrc/*~ toolsrc/*.a
|
||||||
@ -149,6 +152,10 @@ $(CMD): vmsrc/apple/cmd.pla vmsrc/apple/cmdstub.s $(PLVM02) $(PLASM)
|
|||||||
./$(PLASM) -AOW < vmsrc/apple/cmd.pla > vmsrc/apple/cmd.a
|
./$(PLASM) -AOW < vmsrc/apple/cmd.pla > vmsrc/apple/cmd.a
|
||||||
acme --setpc 8192 -o $(CMD) vmsrc/apple/cmdstub.s
|
acme --setpc 8192 -o $(CMD) vmsrc/apple/cmdstub.s
|
||||||
|
|
||||||
|
$(CMDJIT): vmsrc/apple/cmdjit.pla vmsrc/apple/cmdjitstub.s $(PLVMJIT) $(PLASM)
|
||||||
|
./$(PLASM) -AOW < vmsrc/apple/cmdjit.pla > vmsrc/apple/cmdjit.a
|
||||||
|
acme --setpc 8192 -o $(CMDJIT) vmsrc/apple/cmdjitstub.s
|
||||||
|
|
||||||
$(SOSCMD): vmsrc/apple/soscmd.pla $(PLVM03) $(PLASM)
|
$(SOSCMD): vmsrc/apple/soscmd.pla $(PLVM03) $(PLASM)
|
||||||
./$(PLASM) -AMOW < vmsrc/apple/soscmd.pla > vmsrc/apple/soscmd.a
|
./$(PLASM) -AMOW < vmsrc/apple/soscmd.pla > vmsrc/apple/soscmd.a
|
||||||
acme --setpc 4094 -o $(SOSCMD) vmsrc/apple/soscmd.a
|
acme --setpc 4094 -o $(SOSCMD) vmsrc/apple/soscmd.a
|
||||||
@ -156,6 +163,9 @@ $(SOSCMD): vmsrc/apple/soscmd.pla $(PLVM03) $(PLASM)
|
|||||||
$(PLVM02): vmsrc/apple/plvm02.s
|
$(PLVM02): vmsrc/apple/plvm02.s
|
||||||
acme -o $(PLVM02) -l vmsrc/apple/plvm02.sym vmsrc/apple/plvm02.s
|
acme -o $(PLVM02) -l vmsrc/apple/plvm02.sym vmsrc/apple/plvm02.s
|
||||||
|
|
||||||
|
$(PLVMJIT): vmsrc/apple/plvmjit02.s
|
||||||
|
acme -o $(PLVMJIT) -l vmsrc/apple/plvmjit02.sym vmsrc/apple/plvmjit02.s
|
||||||
|
|
||||||
$(PLVM802): vmsrc/apple/plvm802.s
|
$(PLVM802): vmsrc/apple/plvm802.s
|
||||||
acme -o $(PLVM802) -l vmsrc/apple/plvm802.sym vmsrc/apple/plvm802.s
|
acme -o $(PLVM802) -l vmsrc/apple/plvm802.sym vmsrc/apple/plvm802.s
|
||||||
|
|
||||||
@ -351,7 +361,12 @@ $(MON): samplesrc/mon.pla $(PLVM02) $(PLASM)
|
|||||||
./$(PLASM) -AMOW < samplesrc/mon.pla > samplesrc/mon.a
|
./$(PLASM) -AMOW < samplesrc/mon.pla > samplesrc/mon.a
|
||||||
acme --setpc 4094 -o $(MON) samplesrc/mon.a
|
acme --setpc 4094 -o $(MON) samplesrc/mon.a
|
||||||
|
|
||||||
$(SOS): libsrc/apple/sos.pla $(PLVM02) $(PLASM)
|
$(SOS): libsrc/apple/sos.pla $(PLVM03) $(PLASM)
|
||||||
./$(PLASM) -AMO < libsrc/apple/sos.pla > libsrc/apple/sos.a
|
./$(PLASM) -AMO < libsrc/apple/sos.pla > libsrc/apple/sos.a
|
||||||
acme --setpc 4094 -o $(SOS) libsrc/apple/sos.a
|
acme --setpc 4094 -o $(SOS) libsrc/apple/sos.a
|
||||||
|
|
||||||
|
$(JIT): libsrc/apple/jit.pla $(PLVMJIT) $(PLASM)
|
||||||
|
./$(PLASM) -AMO < libsrc/apple/jit.pla > libsrc/apple/jit.a
|
||||||
|
acme --setpc 4094 -o $(JIT) libsrc/apple/jit.a
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
cp rel/apple/CMD#061000 prodos/CMD.BIN
|
cp rel/apple/CMD#061000 prodos/CMD.BIN
|
||||||
|
cp rel/apple/CMDJIT#061000 prodos/CMDJIT.BIN
|
||||||
cp rel/apple/PLASMA.SYSTEM#FF2000 prodos/PLASMA.SYSTEM.SYS
|
cp rel/apple/PLASMA.SYSTEM#FF2000 prodos/PLASMA.SYSTEM.SYS
|
||||||
|
cp rel/apple/PLASMAJIT.SYSTEM#FF2000 prodos/PLAJIT.SYSTEM.SYS
|
||||||
cp rel/apple/PLASMA16.SYSTEM#FF2000 prodos/PLASMA16.SYSTEM.SYS
|
cp rel/apple/PLASMA16.SYSTEM#FF2000 prodos/PLASMA16.SYSTEM.SYS
|
||||||
cp rel/apple/SOS.INTERP#050000 prodos/SOS.INTERP.\$05
|
cp rel/apple/SOS.INTERP#050000 prodos/SOS.INTERP.\$05
|
||||||
cp rel/apple/SOS.CMD#FE1000 prodos/SOS.CMD.REL
|
cp rel/apple/SOS.CMD#FE1000 prodos/SOS.CMD.REL
|
||||||
@ -30,6 +32,7 @@ cp rel/apple/UTHERNET#FE1000 prodos/sys/UTHERNET.REL
|
|||||||
cp rel/apple/UTHERNET2#FE1000 prodos/sys/UTHERNET2.REL
|
cp rel/apple/UTHERNET2#FE1000 prodos/sys/UTHERNET2.REL
|
||||||
cp rel/apple/SOS#FE1000 prodos/sys/SOS.REL
|
cp rel/apple/SOS#FE1000 prodos/sys/SOS.REL
|
||||||
cp rel/apple/GRAFIX#FE1000 prodos/sys/GRAFIX.REL
|
cp rel/apple/GRAFIX#FE1000 prodos/sys/GRAFIX.REL
|
||||||
|
cp rel/apple/JIT#FE1000 prodos/sys/JIT.REL
|
||||||
cp ../sysfiles/FP6502.CODE#060000 prodos/sys/FP6502.CODE.BIN
|
cp ../sysfiles/FP6502.CODE#060000 prodos/sys/FP6502.CODE.BIN
|
||||||
cp ../sysfiles/ELEMS.CODE#060000 prodos/sys/ELEMS.CODE.BIN
|
cp ../sysfiles/ELEMS.CODE#060000 prodos/sys/ELEMS.CODE.BIN
|
||||||
|
|
||||||
|
1529
src/vmsrc/apple/cmdjit.pla
Executable file
1529
src/vmsrc/apple/cmdjit.pla
Executable file
File diff suppressed because it is too large
Load Diff
48
src/vmsrc/apple/cmdjitstub.s
Normal file
48
src/vmsrc/apple/cmdjitstub.s
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
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
|
||||||
|
;
|
||||||
|
; INIT VM ENVIRONMENT STACK POINTERS
|
||||||
|
;
|
||||||
|
STY PPL
|
||||||
|
STY IFPL ; INIT FRAME POINTER
|
||||||
|
LDA #$B0
|
||||||
|
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/cmdjit.a"
|
||||||
|
_CMDEND = *
|
||||||
|
}
|
@ -338,7 +338,7 @@ CMDENTRY = *
|
|||||||
; PRINT FAIL MESSAGE, WAIT FOR KEYPRESS, AND REBOOT
|
; PRINT FAIL MESSAGE, WAIT FOR KEYPRESS, AND REBOOT
|
||||||
;
|
;
|
||||||
FAIL INC $3F4 ; INVALIDATE POWER-UP BYTE
|
FAIL INC $3F4 ; INVALIDATE POWER-UP BYTE
|
||||||
LDY #31
|
LDY #11
|
||||||
- LDA FAILMSG,Y
|
- LDA FAILMSG,Y
|
||||||
ORA #$80
|
ORA #$80
|
||||||
JSR $FDED
|
JSR $FDED
|
||||||
@ -358,7 +358,7 @@ READPARMS !BYTE 4
|
|||||||
CLOSEPARMS !BYTE 1
|
CLOSEPARMS !BYTE 1
|
||||||
!BYTE 0
|
!BYTE 0
|
||||||
DISABLE80 !BYTE 21, 13, '1', 26, 13
|
DISABLE80 !BYTE 21, 13, '1', 26, 13
|
||||||
FAILMSG !TEXT "...TESER OT YEK YNA .DMC GNISSIM"
|
FAILMSG !TEXT ".DMC GNISSIM"
|
||||||
PAGE0 = *
|
PAGE0 = *
|
||||||
;******************************
|
;******************************
|
||||||
;* *
|
;* *
|
||||||
@ -384,10 +384,10 @@ PAGE3 = *
|
|||||||
BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY
|
BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY
|
||||||
JMP IINTRPX
|
JMP IINTRPX
|
||||||
}
|
}
|
||||||
DEFCMD !FILL 28
|
DEFCMD = * ;!FILL 28
|
||||||
ENDBYE = *
|
ENDBYE = *
|
||||||
}
|
}
|
||||||
LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY
|
LCDEFCMD = * ;*-28 ; DEFCMD IN LC MEMORY
|
||||||
;*****************
|
;*****************
|
||||||
;* *
|
;* *
|
||||||
;* OPXCODE TABLE *
|
;* OPXCODE TABLE *
|
||||||
|
2353
src/vmsrc/apple/plvmjit02.s
Executable file
2353
src/vmsrc/apple/plvmjit02.s
Executable file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user