From eaa0e3c7d42372a2393ebcf764002323c04c1d8b Mon Sep 17 00:00:00 2001 From: dschmenk Date: Wed, 10 Jan 2024 20:08:04 -0800 Subject: [PATCH] 16 bit VM is a disaster. Needed complete architecture overhaul --- src/{mk143 => mk140} | 0 src/mk4th | 2 +- src/mkbld | 2 +- src/mkdemos | 2 +- src/mkfpsos | 2 +- src/mkinet | 2 +- src/mksys | 2 +- src/vmsrc/apple/plvm802.s | 220 +++++++++++--------------- sysfiles/{BLANK143.po => BLANK140.po} | Bin 9 files changed, 100 insertions(+), 132 deletions(-) rename src/{mk143 => mk140} (100%) rename sysfiles/{BLANK143.po => BLANK140.po} (100%) diff --git a/src/mk143 b/src/mk140 similarity index 100% rename from src/mk143 rename to src/mk140 diff --git a/src/mk4th b/src/mk4th index 3a1143e..f392381 100755 --- a/src/mk4th +++ b/src/mk4th @@ -1,4 +1,4 @@ -cp ../sysfiles/BLANK143.po PLASMA2-4TH.po +cp ../sysfiles/BLANK140.po PLASMA2-4TH.po ./ac.jar -n PLASMA2-4TH.po PLASMA.4TH cat rel/HRFORTH#FE1000 | ./ac.jar -p PLASMA2-4TH.po sys/HRFORTH REL cat rel/HR2FORTH#FE1000 | ./ac.jar -p PLASMA2-4TH.po sys/HR2FORTH REL diff --git a/src/mkbld b/src/mkbld index 9e7efaa..9d4cf6c 100755 --- a/src/mkbld +++ b/src/mkbld @@ -1,4 +1,4 @@ -cp ../sysfiles/BLANK143.po PLASMA2-BLD.po +cp ../sysfiles/BLANK140.po PLASMA2-BLD.po ./ac.jar -n PLASMA2-BLD.po PLASMA.BLD cat rel/PLASM#FE1000 | ./ac.jar -p PLASMA2-BLD.po bld/PLASM REL cat rel/CODEOPT#FE1000 | ./ac.jar -p PLASMA2-BLD.po bld/CODEOPT REL diff --git a/src/mkdemos b/src/mkdemos index 99b9f91..d958814 100755 --- a/src/mkdemos +++ b/src/mkdemos @@ -1,4 +1,4 @@ -cp ../sysfiles/BLANK143.po PLASMA2-DEMOS.po +cp ../sysfiles/BLANK140.po PLASMA2-DEMOS.po ./ac.jar -n PLASMA2-INET.po PLASMA.DEMOS cat rel/INT32TEST#FE1000 | ./ac.jar -p PLASMA2-DEMOS.po demos/INT32TEST REL cat rel/apple/CONIOTST#FE1000 | ./ac.jar -p PLASMA2-DEMOS.po demos/CONIOTST REL diff --git a/src/mkfpsos b/src/mkfpsos index dbb36b1..b1295b0 100755 --- a/src/mkfpsos +++ b/src/mkfpsos @@ -1,4 +1,4 @@ -cp ../sysfiles/BLANK143.po PLASMA2-FPSOS.po +cp ../sysfiles/BLANK140.po PLASMA2-FPSOS.po ./ac.jar -n PLASMA2-FPSOS.po PLASMA.FPSOS cat ../sysfiles/SOS.KERNEL#0C0000 | ./ac.jar -p PLASMA2-FPSOS.po SOS.KERNEL \$0C cat ../sysfiles/SOS.DRIVER#0C0000 | ./ac.jar -p PLASMA2-FPSOS.po SOS.DRIVER \$0C diff --git a/src/mkinet b/src/mkinet index 20327da..546b44b 100755 --- a/src/mkinet +++ b/src/mkinet @@ -1,4 +1,4 @@ -cp ../sysfiles/BLANK143.po PLASMA2-INET.po +cp ../sysfiles/BLANK140.po PLASMA2-INET.po ./ac.jar -n PLASMA2-INET.po PLASMA.INET cat rel/INET#FE1000 | ./ac.jar -p PLASMA2-INET.po sys/INET REL cat rel/DHCP#FE1000 | ./ac.jar -p PLASMA2-INET.po sys/DHCP REL diff --git a/src/mksys b/src/mksys index c9e70d1..efa1778 100755 --- a/src/mksys +++ b/src/mksys @@ -1,4 +1,4 @@ -cp ../sysfiles/BLANK143.po PLASMA2-SYS.po +cp ../sysfiles/BLANK140.po PLASMA2-SYS.po ./ac.jar -n PLASMA2-SYS.po PLASMA.SYS #cat ../sysfiles/PRODOS#FF0000 | ./ac.jar -p PLASMA2-SYS.po PRODOS SYS cat rel/apple/CMD#061000 | ./ac.jar -p PLASMA2-SYS.po CMD BIN $1000 diff --git a/src/vmsrc/apple/plvm802.s b/src/vmsrc/apple/plvm802.s index 9f9278a..4a81cff 100644 --- a/src/vmsrc/apple/plvm802.s +++ b/src/vmsrc/apple/plvm802.s @@ -210,7 +210,7 @@ RAMDONE ;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE JSR PRODOS ; GET PREFIX !BYTE $C7 !WORD GETPFXPARMS - LDY STRBUF ; APPEND "CMDJIT" + LDY STRBUF ; APPEND "CMD128" LDA #"/" CMP STRBUF,Y BEQ + @@ -287,9 +287,19 @@ DINTRP PHP STX ESP TSX STX HWSP - LDX #>OPTBL + LDX #ESTKSZ/2 ; COPY ZERO PAGE EVAL STACK TO HW STACK + CMP ESP + BEQ + +- LDY ESTKH,X + PHY + LDY ESTKL,X + PHY + DEX + CPX ESP + BNE - ++ LDX #>OPTBL STX OPPAGE - LDY #$00 + LDY #$00 ; Y MUST BE ZERO FOR ENTER (DON'T CHANGE THIS) JMP FETCHOP ;************************************************************ ;* * @@ -436,10 +446,9 @@ PAGE3 = * BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY JMP IINTRPX } -DEFCMD !FILL 28 -ENDBYE = * +DEFCMD = * } -LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY +LCDEFCMD = * ; DEFCMD IN LC MEMORY ;***************** ;* * @@ -452,7 +461,7 @@ OPXTBL !WORD ZERO,CN,CN,CN,CN,CN,CN,CN ; 00 02 !WORD MINUS1,BREQ,BRNE,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E !WORD DROP,DROP2,DUP,DIVMOD,ADDI,SUBI,ANDI,ORI ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,SEL,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E + !WORD BRNCH,SEL,CALLX,ICALX,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E !WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E @@ -470,18 +479,28 @@ IINTRPX PHP SEI CLC ; SWITCH TO NATIVE MODE XCE - +ACCMEM16 ; 16 BIT A/M +_INTRPX +ACCMEM16 ; 16 BIT A/M LDY #$01 LDA (TOS,S),Y - DEY STA IP - PLA + PLA ; DROP RETURN ADDRESS STX ESP TSX STX HWSP - STX ALTRDON + LDX #ESTKSZ/2 ; COPY ZERO PAGE EVAL STACK TO HW STACK + CMP ESP + BEQ + +- LDY ESTKH,X + PHY + LDY ESTKL,X + PHY + DEX + CPX ESP + BNE - ++ STX ALTRDON LDX #>OPXTBL STX OPPAGE + LDY #$00 JMP FETCHOP ;* ;* JIT PROFILING ENTRY INTO INTERPRETER @@ -497,22 +516,8 @@ JITINTRPX PHP LDA (TOS,S),Y DEC STA (TOS,S),Y + BNE _INTRPX +ACCMEM16 ; 16 BIT A/M - BEQ RUNJIT - LDY #$01 - LDA (TOS,S),Y - DEY - STA IP - PLA - STX ESP - TSX - STX HWSP - STX ALTRDON - LDX #>OPXTBL - STX OPPAGE - JMP FETCHOP -; - !AL RUNJIT PLA ; BACK UP DEF ENTRY TO POINT TO JSR SEC SBC #$0002 @@ -619,7 +624,6 @@ _MULSLP ASL BNE _MULSLP STA NOS,S ; PROD JMP DROP - ;MUL LDX #$04 ; LDA NOS,S ; EOR #$FFFF @@ -1617,24 +1621,23 @@ EMUSTK STA TMP XCE !AS TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK + CLC + ADC #ESTKSZ SEC - SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 - CMP #$80 - ROR - ADC ESP ; ESP - STACK DEPTH + SBC HWSP ; PARAM STACK SIZE + LSR ; PARAM STACK COUNT TAX - TAY - CPY ESP + CPX #ESTKSZ/2 BEQ + + TAY - PLA STA ESTKL,Y PLA STA ESTKH,Y INY - CPY ESP + CPY #ESTKSZ/2 BNE - + PEI (IP) ; SAVE INSTRUCTION POINTER - PHY ; SAVE BASELINE ESP LDA PSR PHA PLP @@ -1646,21 +1649,20 @@ EMUSTK STA TMP CLC ; SWITCH BACK TO NATIVE MODE XCE +ACCMEM16 ; 16 BIT A/M - PLY ; MOVE RETURN VALUES TO HW EVAL STACK - STY ESP ; RESTORE BASELINE ESP PLA STA IP - STX TMPL - TSX ; RESTORE BASELINE HWSP + STX ESP + TSX STX HWSP - CPY TMPL + LDX #ESTKSZ/2 ; COPY ZERO PAGE EVAL STACK TO HW STACK + CMP ESP BEQ + -- DEY - LDX ESTKH,Y - PHX - LDX ESTKL,Y - PHX - CPY TMPL +- LDY ESTKH,X + PHY + LDY ESTKL,X + PHY + DEX + CPX ESP BNE - + LDX #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE STX OPPAGE @@ -1686,24 +1688,23 @@ EMUSTKX STA TMP XCE !AS TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK + CLC + ADC #ESTKSZ SEC - SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 - CMP #$80 - ROR - ADC ESP ; ESP - STACK DEPTH + SBC HWSP ; PARAM STACK SIZE + LSR ; PARAM STACK COUNT TAX - TAY - CPY ESP + CPX #ESTKSZ/2 BEQ + + TAY - PLA STA ESTKL,Y PLA STA ESTKH,Y INY - CPY ESP + CPY #ESTKSZ/2 BNE - + PEI (IP) ; SAVE INSTRUCTION POINTER - PHY ; SAVE BASELINE ESP STA ALTRDOFF LDA PSR PHA @@ -1713,130 +1714,97 @@ EMUSTKX STA TMP PLA STA PSR SEI - STX ALTRDON CLC ; SWITCH BACK TO NATIVE MODE XCE +ACCMEM16 ; 16 BIT A/M - PLY ; MOVE RETURN VALUES TO HW EVAL STACK - STY ESP ; RESTORE BASELINE ESP PLA STA IP - STX TMPL - TSX ; RESTORE BASELINE HWSP + STX ESP + TSX STX HWSP - CPY TMPL + LDX #ESTKSZ/2 ; COPY ZERO PAGE EVAL STACK TO HW STACK + CMP ESP BEQ + -- DEY - LDX ESTKH,Y - PHX - LDX ESTKL,Y - PHX - CPY TMPL +- LDY ESTKH,X + PHY + LDY ESTKL,X + PHY + DEX + CPX ESP BNE - -+ LDX #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE ++ STX ALTRDON + LDX #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE STX OPPAGE LDY #$00 JMP FETCHOP ;* ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* -ENTER PEI (IFP) ; SAVE ON STACK FOR LEAVE - TSX ; REFLECT SP IN SAVED HWSP - STX HWSP +ENTER LDA IFP + STA TMP INY - LDA (IP),Y + LDA (IP),Y ; FRAME SIZE AND #$00FF + TAX + INC + INC ; SAVE SPACE FOR PREV IFP EOR #$FFFF ; ALLOCATE FRAME SEC ADC PP STA PP STA IFP - +ACCMEM8 ; 8 BIT A/M INY - LDA (IP),Y + LDA (IP),Y ; PARAM COUNT + AND #$00FF BEQ + ASL TAY - LDX ESP ; MOVE PARAMETERS TO CALL FRAME -- LDA ESTKH,X +- PLA ; COPY PARAMS FROM STACK INTO FRAME + DEY DEY STA (IFP),Y - LDA ESTKL,X - INX - DEY + BNE - ++ TXY ; SAVE PREVIOUS IFP AT TOP OF FRAME + LDA TMP STA (IFP),Y - BNE - - STX ESP -+ +ACCMEM16 ; 16 BIT A/M LDY #$03 JMP FETCHOP ;* ;* LEAVE FUNCTION ;* -LEAVE INY ;+INC_IP - +ACCMEM8 ; 8 BIT A/M +LEAVE STX ALTRDOFF + INY ;+INC_IP LDA (IP),Y ; DEALLOCATE POOL + FRAME - BRA + -LEAVEX INY ;+INC_IP - +ACCMEM8 ; 8 BIT A/M - LDA (IP),Y ; DEALLOCATE POOL + FRAME - STA ALTRDOFF -+ STA TMPL - TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK - SEC - SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 - CMP #$80 - ROR - ADC ESP ; ESP - STACK DEPTH - TAX - CPX ESP - BEQ ++ + AND #$00FF TAY -- PLA - STA ESTKL,Y - PLA - STA ESTKH,Y - INY - CPY ESP - BNE - -++ +ACCMEM16 ; 16 BIT A/M - LDY TMPL ; DEALLOCATE POOL + FRAME - TYA CLC + ADC #$02 ; PREVIOUS IFP HIDDEN AT END OF FRAME ADC IFP STA PP - PLA ; RESTORE PREVIOUS FRAME + LDA (IFP),Y ; RESTORE PREVIOUS FRAME STA IFP +RET STX ALTRDOFF SEC ; SWITCH TO EMULATION MODE - XCE - !AS - LDA PSR - PHA - PLP - RTS ; RETURN IN EMULATION MODE - !AL -RETX STX ALTRDOFF -RET SEC ; SWITCH TO EMULATION MODE XCE !AS TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK + CLC + ADC #ESTKSZ SEC - SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 - CMP #$80 - ROR - ADC ESP ; ESP - STACK DEPTH + SBC HWSP ; PARAM STACK SIZE + LSR ; PARAM STACK COUNT TAX - CPX ESP - BEQ ++ + CPX #ESTKSZ/2 + BEQ + TAY - PLA STA ESTKL,Y PLA STA ESTKH,Y INY - CPY ESP + CPY #ESTKSZ/2 BNE - -++ LDA PSR ++ LDA PSR PHA PLP RTS ; RETURN IN EMULATION MODE diff --git a/sysfiles/BLANK143.po b/sysfiles/BLANK140.po similarity index 100% rename from sysfiles/BLANK143.po rename to sysfiles/BLANK140.po