From fd0f76705956d2d75d5ab190a4553eca174e75a7 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 15 Jun 2014 23:54:47 -0700 Subject: [PATCH] Move inter inner loop to page 0 for all VMs, use common zp include file --- src/samplesrc/hgr1test.pla | 2 +- src/vmsrc/cmdstub.s | 2 +- src/vmsrc/plvm01.s | 82 +++++++++++--------------- src/vmsrc/plvm02.s | 5 +- src/vmsrc/plvm03.s | 73 +++++++++-------------- src/vmsrc/{plvm02zp.inc => plvmzp.inc} | 21 +++---- 6 files changed, 76 insertions(+), 109 deletions(-) rename src/vmsrc/{plvm02zp.inc => plvmzp.inc} (84%) diff --git a/src/samplesrc/hgr1test.pla b/src/samplesrc/hgr1test.pla index ce49a28..1021b70 100644 --- a/src/samplesrc/hgr1test.pla +++ b/src/samplesrc/hgr1test.pla @@ -54,7 +54,7 @@ word hcolor[] = $0000,$552A,$2A55,$7F7F,$8080,$D5AA,$AAD5,$FFFF ; def draw_scan(d8p8, scanptr) ; asm draw_scan - !SOURCE "vmsrc/plvm02zp.inc" + !SOURCE "vmsrc/plvmzp.inc" WFIXL = $80 WFIXH = $81 WINT = $82 diff --git a/src/vmsrc/cmdstub.s b/src/vmsrc/cmdstub.s index f25de49..8670b7f 100644 --- a/src/vmsrc/cmdstub.s +++ b/src/vmsrc/cmdstub.s @@ -5,7 +5,7 @@ ROMEN = $C082 LCRWEN = $C083 LCBNK2 = $00 LCBNK1 = $08 - !SOURCE "vmsrc/plvm02zp.inc" + !SOURCE "vmsrc/plvmzp.inc" ;* ;* MOVE CMD DOWN TO $1000-$2000 ;* diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index 37a5248..dd796ce 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -8,31 +8,7 @@ ;* ;* VM ZERO PAGE LOCATIONS ;* -ESTKSZ = $20 -ESTK = $C0 -ESTKL = ESTK -ESTKH = ESTK+ESTKSZ/2 -VMZP = ESTK+ESTKSZ -IFP = VMZP -IFPL = IFP -IFPH = IFP+1 -IP = IFP+2 -IPL = IP -IPH = IP+1 -IPY = IP+2 -TMP = IP+3 -TMPL = TMP -TMPH = TMP+1 -NPARMS = TMPL -FRMSZ = TMPH -DVSIGN = TMP+2 -ESP = TMP+2 -SRC = $06 -SRCL = SRC -SRCH = SRC+1 -DST = SRC+2 -DSTL = DST -DSTH = DST+1 + !SOURCE "vmsrc/plvmzp.inc" ;* ;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO ;* @@ -45,16 +21,7 @@ DSTH = DST+1 ;* INTERPRETER HEADER+INITIALIZATION ;* *= $0280 -SEGBEGIN LDA #$00 ; INIT FRAME POINTER - STA IFPL - LDA #$80 - STA IFPH - LDA #SEGEND - STA SRCH - LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX - JMP A1CMD +SEGBEGIN JMP VMINIT ;* ;* SYSTEM INTERPRETER ENTRYPOINT ;* @@ -63,7 +30,7 @@ INTERP PLA PLA STA IPH LDY #$01 - BNE FETCHOP + JMP FETCHOP ;* ;* ENTER INTO USER BYTECODE INTERPRETER ;* @@ -78,18 +45,7 @@ IINTERP PLA LDA (TMP),Y STA IPL DEY - BEQ FETCHOP -;* -;* INTERP BYTECODE -;* -NEXTOPH INC IPH - BNE FETCHOP -DROP INX -NEXTOP INY - BEQ NEXTOPH -FETCHOP LDA (IP),Y - STA *+4 - JMP (OPTBL) + JMP FETCHOP ;* ;* MUL TOS-1 BY TOS ;* @@ -228,7 +184,7 @@ ADD LDA ESTKL,X LDA ESTKH,X ADC ESTKH+1,X STA ESTKH+1,X - INX +DROP INX JMP NEXTOP ;* ;* SUB TOS FROM TOS-1 @@ -967,3 +923,31 @@ LEAVE LDY #$01 RET RTS A1CMD !SOURCE "vmsrc/a1cmd.a" SEGEND = * +VMINIT LDY #$0D ; INSTALL PAGE 0 FETCHOP ROUTINE +- LDA PAGE0,Y + STA NEXTOP,Y + DEY + BPL - + LDA #$00 ; INIT FRAME POINTER + STA IFPL + LDA #$80 + STA IFPH + LDA #SEGEND + STA SRCH + LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX + JMP A1CMD +PAGE0 = * + !PSEUDOPC $00F0 { +;* +;* INTERP BYTECODE INNER LOOP +;* + INY + BEQ NEXTOPH +FETCHOP LDA (IP),Y + STA OPIDX + JMP (OPTBL) +NEXTOPH INC IPH + BNE FETCHOP +} diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index 393e29c..9ca82fd 100644 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -38,10 +38,7 @@ ALTRDOFF= $C002 ALTRDON = $C003 ALTWROFF= $C004 ALTWRON = $C005 - !SOURCE "vmsrc/plvm02zp.inc" -NEXTOP = $F0 -OPIDX = NEXTOP+8 -OPPAGE = OPIDX+1 + !SOURCE "vmsrc/plvmzp.inc" STRBUF = $0280 INTERP = $03D0 ;* diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 0417025..f73c028 100644 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -9,39 +9,16 @@ ; HARDWARE REGISTERS ; MEMBANK = $FFEF + !SOURCE "vmsrc/plvmzp.inc" +; +; XPAGE ADDRESSES +; XPAGE = $1600 -;* -;* VM ZERO PAGE LOCATIONS -;* -ESTKSZ = $20 -ESTK = $C0 -ESTKL = ESTK -ESTKH = ESTK+ESTKSZ/2 -VMZP = ESTK+ESTKSZ -IFP = VMZP -IFPL = IFP -IFPH = IFP+1 +NEXTOPX = XPAGE+NEXTOP IFPX = XPAGE+IFPH -IP = IFP+2 -IPL = IP -IPH = IP+1 IPX = XPAGE+IPH -IPY = IP+2 -TMP = IP+3 -TMPL = TMP -TMPH = TMP+1 TMPX = XPAGE+TMPH -NPARMS = TMPL -FRMSZ = TMPH -DVSIGN = TMP+2 -ESP = TMP+2 -SRC = $06 -SRCL = SRC -SRCH = SRC+1 SRCX = XPAGE+SRCH -DST = SRC+2 -DSTL = DST -DSTH = DST+1 DSTX = XPAGE+DSTH ;* ;* SOS @@ -73,8 +50,14 @@ DSTX = XPAGE+DSTH BNE PRHEX LDA #$01 STA MEMBANK - LDA #$00 ; CLEAR ALL EXTENDED POINTERS - STA TMPX + LDY #$0D ; INSTALL PAGE 0 FETCHOP ROUTINE + LDA #$00 +- LDX PAGE0,Y + STX NEXTOP,Y + STA NEXTOPX,Y + DEY + BPL - + STA TMPX ; CLEAR ALL EXTENDED POINTERS STA SRCX STA DSTX STA IFPX ; INIT FRAME POINTER @@ -89,6 +72,19 @@ SEGREQ !BYTE 4 !WORD $9F01 !BYTE $10 !BYTE $00 +PAGE0 = * + !PSEUDOPC $00F0 { +;* +;* INTERP BYTECODE INNER LOOP +;* + INY + BEQ NEXTOPH +FETCHOP LDA (IP),Y + STA OPIDX + JMP (OPTBL) +NEXTOPH INC IPH + BNE FETCHOP +} PRHEX PHA LSR LSR @@ -118,7 +114,7 @@ INTERP LDY #$00 PLA STA IPH INY - BNE FETCHOP + JMP FETCHOP ;* ;* ENTER INTO USER BYTECODE INTERPRETER ;* @@ -136,18 +132,7 @@ XINTERP PLA LDA (TMP),Y STA IPL DEY - BEQ FETCHOP -;* -;* INTERP BYTECODE -;* -NEXTOPH INC IPH - BNE FETCHOP -DROP INX -NEXTOP INY - BEQ NEXTOPH -FETCHOP LDA (IP),Y - STA *+4 - JMP (OPTBL) + JMP FETCHOP ;* ;* INTERNAL DIVIDE ALGORITHM ;* @@ -286,7 +271,7 @@ ADD LDA ESTKL,X LDA ESTKH,X ADC ESTKH+1,X STA ESTKH+1,X - INX +DROP INX JMP NEXTOP ;* ;* SUB TOS FROM TOS-1 diff --git a/src/vmsrc/plvm02zp.inc b/src/vmsrc/plvmzp.inc similarity index 84% rename from src/vmsrc/plvm02zp.inc rename to src/vmsrc/plvmzp.inc index d8f3831..5fc6d17 100644 --- a/src/vmsrc/plvm02zp.inc +++ b/src/vmsrc/plvmzp.inc @@ -3,6 +3,12 @@ ;* VM ZERO PAGE LOCATIONS ;* ;********************************************************** +SRC = $06 +SRCL = SRC +SRCH = SRC+1 +DST = SRC+2 +DSTL = DST +DSTH = DST+1 ESTKSZ = $20 ESTK = $C0 ESTKL = ESTK @@ -18,15 +24,10 @@ IPY = IP+2 TMP = IP+3 TMPL = TMP TMPH = TMP+1 -TMPX = TMP+2 NPARMS = TMPL FRMSZ = TMPH -DVSIGN = TMPX -ESP = TMPX -TICTOC = TMP+3 -SRC = $06 -SRCL = SRC -SRCH = SRC+1 -DST = SRC+2 -DSTL = DST -DSTH = DST+1 +DVSIGN = TMP+2 +ESP = TMP+2 +NEXTOP = $F0 +OPIDX = NEXTOP+8 +OPPAGE = OPIDX+1