diff --git a/src/libsrc/dgr.pla b/src/libsrc/dgr.pla index a4758d6..001cf97 100755 --- a/src/libsrc/dgr.pla +++ b/src/libsrc/dgr.pla @@ -50,461 +50,470 @@ end // Plot pixel // export asm dgrPlot(buff, x, y)#0 - ; GET BUFFER ADDRESS - STX ESP - LDA ESTKL+2,X - STA SRCL - LDA ESTKH+2,X - STA SRCH - LDA ESTKL,X ; Y COORD - AND #$FE - TAY - LDA (SRC),Y - STA GBASL - INY - LDA (SRC),Y - STA GBASH - LDA ESTKL+1,X ; X COORD - LSR ESTKL,X - LDX GCLR ; COLOR - PHP - SEI + ; GET BUFFER ADDRESS + STX ESP + LDA ESTKL+2,X + STA SRCL + LDA ESTKH+2,X + STA SRCH + LDA ESTKL,X ; Y COORD + AND #$FE + TAY + LDA (SRC),Y + STA GBASL + INY + LDA (SRC),Y + STA GBASH + LDA ESTKL+1,X ; X COORD + LSR ESTKL,X + LDX GCLR ; COLOR + PHP + SEI end asm _dgrPlotPix - JSR $3000 - PLP - LDX ESP - INX - INX - INX - RTS + JSR $3000 ; _dgrSetPix + PLP + LDX ESP + INX + INX + INX + RTS end // // Plot horizontal row of pixels // export asm dgrHLin(buff, x1, x2, y)#0 - ; GET BUFFER ADDRESS - STX ESP - LDA ESTKL+3,X - STA SRCL - LDA ESTKH+3,X - STA SRCH - LDA ESTKL,X ; Y COORD - AND #$FE - TAY - LDA (SRC),Y - STA GBASL - INY - LDA (SRC),Y - STA GBASH - LDA ESTKL+2,X ; X1 COORD - LSR ESTKL,X - PHP -- PLP - PHP - SEI - LDX GCLR ; COLOR + ; GET BUFFER ADDRESS + STX ESP + LDA ESTKL+3,X + STA SRCL + LDA ESTKH+3,X + STA SRCH + LDA ESTKL+1,X ; X2 COORD + STA TMPH + LDA ESTKL,X ; Y COORD + AND #$FE + TAY + LDA (SRC),Y + STA GBASL + INY + LDA (SRC),Y + STA GBASH + LDY ESTKL+2,X ; X1 COORD + PHP + SEI +- LDA ESTKL,X + LSR + TYA + LDX GCLR ; COLOR end asm _dgrHLinPix - JSR $3000 - LDX ESP - INC ESTKL+2,X ; X1 COORD - LDA ESTKL+2,X - CMP ESTKL+1,X ; X2 COORD - BCC - - BEQ - - PLP - INX - INX - INX - INX - RTS + JSR $3000 ; _dgrSetPix + LDX ESP + INC ESTKL+2,X ; X1 COORD + LDY ESTKL+2,X + CPY TMPH ; X2 COORD + BCC - + BEQ - + PLP + INX + INX + INX + INX + RTS end // // Plot horizontal row of pixels // export asm dgrVLin(buff, x, y1, y2)#0 ; GET BUFFER ADDRESS - STX ESP - LDA ESTKL+3,X - STA SRCL - LDA ESTKH+3,X - STA SRCH - LDA ESTKL+1,X ; Y1 COORD -- AND #$FE - TAY - LDA (SRC),Y - STA GBASL - INY - LDA (SRC),Y - STA GBASH - LDA ESTKL+1,X - LSR - LDA ESTKL+2,X ; X COORD - LDX GCLR ; COLOR - PHP - SEI + STX ESP + LDA ESTKL+3,X + STA SRCL + LDA ESTKH+3,X + STA SRCH + LDA ESTKL+1,X ; Y1 COORD + PHP + SEI +- AND #$FE + TAY + LDA (SRC),Y + STA GBASL + INY + LDA (SRC),Y + STA GBASH + LDA ESTKL+1,X + LSR + LDA ESTKL+2,X ; X COORD + LDX GCLR ; COLOR end asm _dgrVLinPix - JSR $3000 - PLP - LDX ESP - INC ESTKL+1,X ; Y1 COORD - LDA ESTKL+1,X - CMP ESTKL,X ; Y2 COORD - BCC - - BEQ - - INX - INX - INX - INX - RTS + JSR $3000 ; _dgrSetPix + LDX ESP + INC ESTKL+1,X ; Y1 COORD + LDA ESTKL+1,X + CMP ESTKL,X ; Y2 COORD + BCC - + BEQ - + PLP + INX + INX + INX + INX + RTS end // // Draw sprite // export asm dgrBLT(buff, x, y, width, height, src)#0 - LDA ESTKL,X ; SPRITE - STA SRCL - LDA ESTKH,X - STA SRCH - LDA ESTKL+5,X - STA DSTL - LDA ESTKH+5,X - STA DSTH - LDA ESTKL+4,X ; X1 COORD - CMP #80 - BPL ++++ - CLC - ADC ESTKL+2,X - BMI ++++ - STA ESTKH+2,X ; X2 COORD - LDA ESTKL+3,X ; Y1 COORD - CMP #48 - BPL ++++ - STA ESTKH+3,X ; Y COORD - CLC - ADC ESTKL+1,X - BMI ++++ - STA ESTKH+1,X ; Y2 COORD - STX ESP - LDA ESTKH+3,X -- CMP #48 - BCC + - LDA SRCL ; SKIP TO NEXT ROW - CLC - ADC ESTKL+2,X ; WIDTH - STA SRCL - LDA SRCH - ADC #$00 - STA SRCH - BNE +++ -+ AND #$FE - TAY - LDA (DST),Y - STA GBASL - INY - LDA (DST),Y - STA GBASH - LDA ESTKL+4,X ; X1 COORD - STA ESTKH+4,X ; X COORD - PHP - SEI --- CMP #80 - BCS ++ - STA TMP - LDA ESTKH+3,X ; Y COORD - LSR - LDY #$00 - LDA (SRC),Y - BMI ++ - TAX - LDA TMP + LDA ESTKL,X ; SPRITE + STA SRCL + LDA ESTKH,X + STA SRCH + LDA ESTKL+5,X + STA DSTL + LDA ESTKH+5,X + STA DSTH + LDA ESTKL+4,X ; X1 COORD + CMP #80 + BPL ++++ + CLC + ADC ESTKL+2,X + BMI ++++ + STA ESTKH+2,X ; X2 COORD + LDA ESTKL+3,X ; Y1 COORD + CMP #48 + BPL ++++ + STA ESTKH+3,X ; Y COORD + CLC + ADC ESTKL+1,X + BMI ++++ + STA ESTKH+1,X ; Y2 COORD + STX ESP + LDA ESTKH+3,X +- CMP #48 + BCC + + LDA SRCL ; SKIP TO NEXT ROW + CLC + ADC ESTKL+2,X ; WIDTH + STA SRCL + LDA SRCH + ADC #$00 + STA SRCH + BNE +++ ++ AND #$FE + TAY + LDA (DST),Y + STA GBASL + INY + LDA (DST),Y + STA GBASH + LDA ESTKL+4,X ; X1 COORD + STA ESTKH+4,X ; X COORD + PHP + SEI +-- CMP #80 + BCS ++ + STA TMP + LDA ESTKH+3,X ; Y COORD + LSR + LDY #$00 + LDA (SRC),Y + BMI ++ + TAX + LDA TMP end asm _dgrBLTPix - JSR $4000 - LDX ESP -++ INC SRCL - BNE + - INC SRCH -+ INC ESTKH+4,X ; X COORD - LDA ESTKH+4,X - BMI -- - CMP ESTKH+2,X ; X2 COORD - BCC -- - PLP -+++ INC ESTKH+3,X ; Y COORD - LDA ESTKH+3,X - BMI - - CMP ESTKH+1,X ; Y2 COORD - BCC - -++++ INX - INX - INX - INX - INX - INX - RTS + JSR $4000 ; _dgrSetPix + LDX ESP +++ INC SRCL + BNE + + INC SRCH ++ INC ESTKH+4,X ; X COORD + LDA ESTKH+4,X + BMI -- + CMP ESTKH+2,X ; X2 COORD + BCC -- + PLP ++++ INC ESTKH+3,X ; Y COORD + LDA ESTKH+3,X + BMI - + CMP ESTKH+1,X ; Y2 COORD + BCC - +++++ INX + INX + INX + INX + INX + INX + RTS end // // Internal set pixel routine +// - It expects the carry to be set for even or odd scanlines. Bad. +// - ACCUM has horizontal coordinate +// - X_REG has color +// - GBASE points to scanline // asm _dgrSetPix - BCS ++ - ; EVEN ROW - LSR - TAY - BCS + + BCS ++ + ; EVEN ROW + LSR + TAY + BCS + end asm _dgrSetEvnEvn - ; EVEN PIXEL - LDA $2000,X - AND #$0F - STA TMP - JSR $0100 ; LDA AUX (DST),Y - AND #$F0 - ORA TMP - STA $C005 ; WRITE AUX MEM - STA (GBASE),Y - STA $C004 ; WRITE MAIN MEM - RTS + ; EVEN PIXEL + LDA $2000,X + AND #$0F + STA TMP + JSR $0100 ; LDA AUX (DST),Y + AND #$F0 + ORA TMP + STA $C005 ; WRITE AUX MEM + STA (GBASE),Y + STA $C004 ; WRITE MAIN MEM + RTS end asm _dgrSetEvnOdd - ; ODD PIXEL -+ LDA $1000,X - AND #$0F - STA TMP - LDA (GBASE),Y - AND #$F0 - ORA TMP - STA (GBASE),Y - RTS - ; ODD ROW -++ LSR - TAY - BCS +++ + ; ODD PIXEL ++ LDA $1000,X + AND #$0F + STA TMP + LDA (GBASE),Y + AND #$F0 + ORA TMP + STA (GBASE),Y + RTS + ; ODD ROW +++ LSR + TAY + BCS +++ end asm _dgrSetOddEvn - ; EVEN PIXEL - LDA $2000,X - AND #$F0 - STA TMP - JSR $0100 ; LDA AUX (DST),Y - AND #$0F - ORA TMP - STA $C005 ; WRITE AUX MEM - STA (GBASE),Y - STA $C004 ; WRITE MAIN MEM - RTS + ; EVEN PIXEL + LDA $2000,X + AND #$F0 + STA TMP + JSR $0100 ; LDA AUX (DST),Y + AND #$0F + ORA TMP + STA $C005 ; WRITE AUX MEM + STA (GBASE),Y + STA $C004 ; WRITE MAIN MEM + RTS end asm _dgrSetOddOdd - ; ODD PIXEL -+++ LDA $1000,X - AND #$F0 - STA TMP - LDA (GBASE),Y - AND #$0F - ORA TMP - STA (GBASE),Y - RTS + ; ODD PIXEL ++++ LDA $1000,X + AND #$F0 + STA TMP + LDA (GBASE),Y + AND #$0F + ORA TMP + STA (GBASE),Y + RTS end +// +// This gets copied to $0100!!! +// asm auxRead - STA $C003 ; READ AUX MEM - LDA (GBASE),Y - STA $C002 ; READ MAIN MEM - RTS + STA $C003 ; READ AUX MEM + LDA (GBASE),Y + STA $C002 ; READ MAIN MEM + RTS end // // Draw 8x8 tile (forced to 2x2 block address) // export asm dgrTile(buff, x, y, src)#0 - STX ESP - LDA ESTKL,X ; TILE - STA SRCL - LDA ESTKH,X - STA SRCH - LDA ESTKL+3,X - STA DSTL - LDA ESTKH+3,X - STA DSTH - LDA ESTKL+2,X ; X1 COORD - CMP #80 - BPL ++++ - CLC - ADC #$08 - BMI ++++ - STA ESTKH+2,X ; X2 COORD - LDA ESTKL+1,X ; Y1 COORD - CMP #48 - BPL ++++ - STA TMPL ; Y COORD - CLC - ADC #$08 - BMI ++++ - STA ESTKH+1,X ; Y2 COORD - LDA TMPL ; Y COORD -- CMP #48 - BCC + - LDA SRCL ; SKIP TO NEXT ROW - ADC #$07 ; CARRY = 1 - STA SRCL - LDA SRCH - ADC #$00 - STA SRCH - BNE +++ -+ AND #$FE - TAY - LDA (DST),Y - STA GBASL - INY - LDA (DST),Y - STA GBASH - LDA ESTKL+2,X ; X1 COORD - STA TMPH ; X COORD - PHP - SEI --- LSR - TAY - CMP #40 - LDX #$00 - LDA (SRC,X) - INC SRCL - BNE + - INC SRCH -+ BCS + - STA $C005 ; WRITE AUX MEM - STA (GBASE),Y - STA $C004 ; WRITE MAIN MEM -+ LDA (SRC,X) - INC SRCL - BNE + - INC SRCH -+ BCS ++ - STA (GBASE),Y -++ INC TMPH ; X COORD - INC TMPH ; X COORD - LDX ESP - LDA TMPH - BMI -- - CMP ESTKH+2,X ; X2 COORD - BCC -- - PLP -+++ INC TMPL ; Y COORD - INC TMPL ; Y COORD - LDA TMPL - BMI - - CMP ESTKH+1,X ; Y2 COORD - BCC - -++++ INX - INX - INX - INX - RTS + STX ESP + LDA ESTKL,X ; TILE + STA SRCL + LDA ESTKH,X + STA SRCH + LDA ESTKL+3,X + STA DSTL + LDA ESTKH+3,X + STA DSTH + LDA ESTKL+2,X ; X1 COORD + CMP #80 + BPL ++++ + CLC + ADC #$08 + BMI ++++ + STA ESTKH+2,X ; X2 COORD + LDA ESTKL+1,X ; Y1 COORD + CMP #48 + BPL ++++ + STA TMPL ; Y COORD + CLC + ADC #$08 + BMI ++++ + STA ESTKH+1,X ; Y2 COORD + LDA TMPL ; Y COORD +- CMP #48 + BCC + + LDA SRCL ; SKIP TO NEXT ROW + ADC #$07 ; CARRY = 1 + STA SRCL + LDA SRCH + ADC #$00 + STA SRCH + BNE +++ ++ AND #$FE + TAY + LDA (DST),Y + STA GBASL + INY + LDA (DST),Y + STA GBASH + LDA ESTKL+2,X ; X1 COORD + STA TMPH ; X COORD + PHP + SEI +-- LSR + TAY + CMP #40 + LDX #$00 + LDA (SRC,X) + INC SRCL + BNE + + INC SRCH ++ BCS + + STA $C005 ; WRITE AUX MEM + STA (GBASE),Y + STA $C004 ; WRITE MAIN MEM ++ LDA (SRC,X) + INC SRCL + BNE + + INC SRCH ++ BCS ++ + STA (GBASE),Y +++ INC TMPH ; X COORD + INC TMPH ; X COORD + LDX ESP + LDA TMPH + BMI -- + CMP ESTKH+2,X ; X2 COORD + BCC -- + PLP ++++ INC TMPL ; Y COORD + INC TMPL ; Y COORD + LDA TMPL + BMI - + CMP ESTKH+1,X ; Y2 COORD + BCC - +++++ INX + INX + INX + INX + RTS end // // Draw a string of tiles // export asm dgrTileStr(buff, x, y, tilestr, strlen, tilebuff)#0 -- DEX - DEX - DEX - DEX - LDA ESTKL+9,X ; BUFF - STA ESTKL+3,X - LDA ESTKH+9,X - STA ESTKH+3,X - LDA ESTKL+8,X ; X COORD - STA ESTKL+2,X - LDA ESTKL+7,X ; Y COORD - STA ESTKL+1,X - LDA ESTKL+4,X ; TILE - STA ESTKL,X - LDA ESTKH+4,X ; TILE - STA ESTKH,X +- DEX + DEX + DEX + DEX + LDA ESTKL+9,X ; BUFF + STA ESTKL+3,X + LDA ESTKH+9,X + STA ESTKH+3,X + LDA ESTKL+8,X ; X COORD + STA ESTKL+2,X + LDA ESTKL+7,X ; Y COORD + STA ESTKL+1,X + LDA ESTKL+4,X ; TILE + STA ESTKL,X + LDA ESTKH+4,X ; TILE + STA ESTKH,X end asm _dgrTileTile - JSR $5000 - LDA ESTKL+4,X ; UPDATE X COORD - CLC - ADC #$08 - CMP #80 ; OFF RIGHT SIDE - BPL + - STA ESTKL+4,X - DEC ESTKL+1,X ; DEC STRLEN - BNE - -+ TXA - CLC - ADC #6 - TAX - RTS + JSR $5000 + LDA ESTKL+4,X ; UPDATE X COORD + CLC + ADC #$08 + CMP #80 ; OFF RIGHT SIDE + BPL + + STA ESTKL+4,X + DEC ESTKL+1,X ; DEC STRLEN + BNE - ++ TXA + CLC + ADC #6 + TAX + RTS end // -// Draw a string of tiles +// Fill a buffer with tiles // export asm dgrFill(buff, x, y, tile)#0 - LDA ESTKL+2,X - AND #$0F - STA ESTKL+2,X - LDA ESTKL+1,X - AND #$0F - STA ESTKL+1,X - LDA #$00 - SEC - SBC ESTKL+2,X ; ORIGINAL X - STA ESTKL+2,X - STA ESTKH+2,X - LDA #$00 - SEC - SBC ESTKL+1,X - STA ESTKL+1,X -- DEX - DEX - DEX - DEX - LDA ESTKL+7,X ; BUFF - STA ESTKL+3,X - LDA ESTKH+7,X - STA ESTKH+3,X - LDA ESTKL+6,X ; X COORD - STA ESTKL+2,X - LDA ESTKL+5,X ; Y COORD - STA ESTKL+1,X - LDA ESTKL+4,X ; TILE - STA ESTKL,X - LDA ESTKH+4,X ; TILE - STA ESTKH,X + LDA ESTKL+2,X + AND #$0F + STA ESTKL+2,X + LDA ESTKL+1,X + AND #$0F + STA ESTKL+1,X + LDA #$00 + SEC + SBC ESTKL+2,X ; ORIGINAL X + STA ESTKL+2,X + STA ESTKH+2,X + LDA #$00 + SEC + SBC ESTKL+1,X + STA ESTKL+1,X +- DEX + DEX + DEX + DEX + LDA ESTKL+7,X ; BUFF + STA ESTKL+3,X + LDA ESTKH+7,X + STA ESTKH+3,X + LDA ESTKL+6,X ; X COORD + STA ESTKL+2,X + LDA ESTKL+5,X ; Y COORD + STA ESTKL+1,X + LDA ESTKL+4,X ; TILE + STA ESTKL,X + LDA ESTKH+4,X ; TILE + STA ESTKH,X end asm _dgrFillTile - JSR $5000 - LDA ESTKL+2,X ; UPDATE X COORD - CLC - ADC #$08 - STA ESTKL+2,X - CMP #80 ; OFF RIGHT SIDE? - BMI - - LDA ESTKH+2,X ; RESTORE X COORD - STA ESTKL+2,X - LDA ESTKL+1,X ; UPDATE Y COORD - CLC - ADC #$08 - STA ESTKL+1,X - CMP #48 ; OFF BOTTOM? - BMI - - INX - INX - INX - INX - RTS + JSR $5000 + LDA ESTKL+2,X ; UPDATE X COORD + CLC + ADC #$08 + STA ESTKL+2,X + CMP #80 ; OFF RIGHT SIDE? + BMI - + LDA ESTKH+2,X ; RESTORE X COORD + STA ESTKL+2,X + LDA ESTKL+1,X ; UPDATE Y COORD + CLC + ADC #$08 + STA ESTKL+1,X + CMP #48 ; OFF BOTTOM? + BMI - + INX + INX + INX + INX + RTS end // -// Wait for VLB +// Wait for VLB - Doens't work on //c // asm vlbWait#0 -- LDA $C019 - BMI - -- LDA $C019 - BPL - - RTS +- LDA $C019 + BMI - +- LDA $C019 + BPL - + RTS end // // Set double lores graphics, return draw buffer @@ -645,7 +654,7 @@ end // Make sure we are a 128K //e or //c // if MACHID & $F0 <> $B0 - puts("\n128K REQUIRED FOR DOUBLE LO-RES.") + puts("\n128K required for double-lores.\n") ^$C010 while ^$C000 < 128; loop return -1 diff --git a/src/libsrc/sane.pla b/src/libsrc/sane.pla index c168a17..d09fd7a 100644 --- a/src/libsrc/sane.pla +++ b/src/libsrc/sane.pla @@ -565,13 +565,14 @@ asm auxmove(dst, src, len)#0 CLC BEQ + SEC -+ LDA ESTKH,X - ADC #$00 - STA $02FF ++ LDA #$00 + TAY + ADC ESTKH,X INX INX INX STX ESP + TAX PHP SEI STA $C009 ; SELECT ALTZP @@ -585,7 +586,6 @@ asm auxmove(dst, src, len)#0 STA $3C LDA $02FD STA $3D - LDY #$00 - LDA ($3C),Y STA ($42),Y INY @@ -594,7 +594,7 @@ asm auxmove(dst, src, len)#0 INC $43 + DEC $02FE BNE - - DEC $02FF + DEX BNE - STA $C008 ; SELECT MAINZP PLP @@ -728,7 +728,7 @@ def loadcode(codefile) byte ref word pcode, seglen byte filepath[64] - + //puts(codefile); puts(":\n") pcode = 0 ref = fileio:open(strcat(strcpy(@filepath, cmdsys:syspath), codefile)) diff --git a/src/libsrc/tone.pla b/src/libsrc/tone.pla index db8b34d..7440fa5 100644 --- a/src/libsrc/tone.pla +++ b/src/libsrc/tone.pla @@ -17,15 +17,15 @@ export asm tone2(pitch1, pitch2, duration)#0 INY + STA DSTL STY DSTH - LDY ESTKL+1,X + LDY ESTKL+1,X STY TMPL LDA ESTKL+2,X - TAX - CMP TMPL - BNE + - LDX #$00 -+ STX TMPH + TAX LDA #$00 + CPX TMPL + BNE + + TAX ++ STX TMPH PHP SEI - CLC diff --git a/src/vmsrc/a1cmd.pla b/src/vmsrc/a1cmd.pla index 22339c6..71d6841 100755 --- a/src/vmsrc/a1cmd.pla +++ b/src/vmsrc/a1cmd.pla @@ -149,8 +149,7 @@ asm call(addr,areg,xreg,yreg,sstatus)#1 STA CALL6502+2 LDA ESTKL,X PHA - LDA ESTKL+1,X - TAY + LDY ESTKL+1,X LDA ESTKL+3,X PHA LDA ESTKL+2,X diff --git a/src/vmsrc/cmd.pla b/src/vmsrc/cmd.pla index 0000624..53ac7d9 100755 --- a/src/vmsrc/cmd.pla +++ b/src/vmsrc/cmd.pla @@ -161,8 +161,7 @@ REGVALS = SRC STA TMPH LDA ESTKL,X PHA - LDA ESTKL+1,X - TAY + LDY ESTKL+1,X LDA ESTKL+3,X PHA LDA ESTKL+2,X diff --git a/src/vmsrc/cmdstub.s b/src/vmsrc/cmdstub.s index 09928ea..bd8db37 100644 --- a/src/vmsrc/cmdstub.s +++ b/src/vmsrc/cmdstub.s @@ -1,49 +1,48 @@ -INTERP = $03D0 -LCRDEN = $C080 -LCWTEN = $C081 -ROMEN = $C082 -LCRWEN = $C083 -LCBNK2 = $00 -LCBNK1 = $08 - !SOURCE "vmsrc/plvmzp.inc" +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 - LDA #$10 - STA DSTH -- LDA (SRC),Y - STA (DST),Y - INY - BNE - - INC SRCH - INC DSTH - LDA DSTH - CMP #$20 ; 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 -_CMDBEGIN = * - !PSEUDOPC $1000 { - !SOURCE "vmsrc/cmd.a" -_CMDEND = * -} \ No newline at end of file + 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 +_CMDBEGIN = * + !PSEUDOPC $1000 { + !SOURCE "vmsrc/cmd.a" +_CMDEND = * +} diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index ea4b51c..6faf1e1 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -88,7 +88,7 @@ MULLP LSR TMPH ; MULTPLRH ADC ESTKH+1,X ; PRODH + ASL ESTKL,X ; MULTPLNDL ROL ESTKH,X ; MULTPLNDH - DEY + DEY BNE MULLP STA ESTKH+1,X ; PRODH LDY IPY @@ -167,13 +167,7 @@ DIVMOD JSR _DIV ;* ;* NEGATE TOS ;* -NEG LDA #$00 - SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X +NEG JSR _NEG JMP NEXTOP ;* ;* INTERNAL DIVIDE ALGORITHM @@ -191,7 +185,7 @@ _DIV STY IPY LDA #$00 STA TMPL ; REMNDRL STA TMPH ; REMNDRH - LDA ESTKH,X + LDA ESTKH,X AND #$80 STA DVSIGN BPL + @@ -309,10 +303,12 @@ SHL STY IPY SBC #$08 SHL1 TAY BEQ SHL3 -SHL2 ASL ESTKL+1,X + LDA ESTKL+1,X +SHL2 ASL ROL ESTKH+1,X DEY BNE SHL2 + STA ESTKL+1,X SHL3 LDY IPY JMP DROP ;* @@ -802,24 +798,22 @@ BRFLS INX ORA ESTKL-1,X BNE NOBRNCH BRNCH TYA ; FLATTEN IP - CLC + SEC ADC IPL STA TMPL LDA #$00 + TAY ADC IPH STA TMPH ; ADD BRANCH OFFSET - INY - LDA (IP),Y - CLC + LDA (TMP),Y + ;CLC ; BETTER NOT CARRY OUT OF IP+Y ADC TMPL - STA TMPL + STA IPL INY - LDA (IP),Y + LDA (TMP),Y ADC TMPH STA IPH - LDA TMPL - STA IPL - LDY #$01 + DEY JMP FETCHOP BREQ INX LDA ESTKL-1,X @@ -860,6 +854,23 @@ IBRNCH LDA IPL STA IPH JMP DROP ;* +;* INDIRECT CALL TO ADDRESS (NATIVE CODE) +;* +ICAL LDA ESTKL,X +!IF SELFMODIFY { + STA CALLADR+1 +} ELSE { + STA TMPL +} + LDA ESTKH,X +!IF SELFMODIFY { + STA CALLADR+2 +} ELSE { + STA TMPH +} + INX + BNE _CALL +;* ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* CALL INY ;+INC_IP @@ -876,7 +887,7 @@ CALL INY ;+INC_IP } ELSE { STA TMPH } - TYA +_CALL TYA CLC ADC IPL PHA @@ -895,40 +906,6 @@ CALLADR JSR $FFFF LDY #$01 JMP FETCHOP ;* -;* INDIRECT CALL TO ADDRESS (NATIVE CODE) -;* -ICAL LDA ESTKL,X -!IF SELFMODIFY { - STA ICALADR+1 -} ELSE { - STA TMPL -} - LDA ESTKH,X -!IF SELFMODIFY { - STA ICALADR+2 -} ELSE { - STA TMPH -} - INX - TYA - CLC - ADC IPL - PHA - LDA IPH - ADC #$00 - PHA -!IF SELFMODIFY { -ICALADR JSR $FFFF -} ELSE { - JSR JMPTMP -} - PLA - STA IPH - PLA - STA IPL - LDY #$01 - JMP FETCHOP -;* ;* JUMP INDIRECT TRHOUGH TMP ;* JMPTMP JMP (TMP) diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index 2891b8a..c9d7ca2 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -660,10 +660,12 @@ SHL STY IPY SBC #$08 SHL1 TAY BEQ SHL3 -SHL2 ASL ESTKL+1,X + LDA ESTKL+1,X +SHL2 ASL ROL ESTKH+1,X DEY BNE SHL2 + STA ESTKL+1,X SHL3 LDY IPY JMP DROP ;* diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 96e20f2..ba7650f 100755 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -131,7 +131,7 @@ INTERP PLA PLA ADC #$00 STA IPH - + LDA IFPH PHA ; SAVE ON STACK FOR LEAVE/RET LDA IFPL @@ -161,7 +161,7 @@ XINTERP PLA LDA (TMP),Y STA IPL DEY - + LDA IFPH PHA ; SAVE ON STACK FOR LEAVE/RET LDA IFPL @@ -273,13 +273,7 @@ MULLP LSR TMPH ; MULTPLRH ;* ;* NEGATE TOS ;* -NEG LDA #$00 - SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X +NEG JSR _NEG JMP NEXTOP ;* ;* DIV TOS-1 BY TOS @@ -432,13 +426,13 @@ SHL STY IPY SBC #$08 SHL1 TAY BEQ SHL3 -SHL2 ASL ESTKL+1,X + LDA ESTKL+1,X +SHL2 ASL ROL ESTKH+1,X DEY BNE SHL2 + STA ESTKL+1,X SHL3 LDY IPY -; INX -; JMP NEXTOP JMP DROP ;* ;* SHIFT TOS-1 RIGHT BY TOS @@ -466,8 +460,6 @@ SHR3 CMP #$80 BNE SHR3 STA ESTKH+1,X SHR4 LDY IPY -; INX -; JMP NEXTOP JMP DROP ;* ;* LOGICAL NOT @@ -988,24 +980,22 @@ BRFLS INX ORA ESTKL-1,X BNE NOBRNCH BRNCH TYA ; FLATTEN IP - CLC + SEC ADC IPL STA TMPL LDA #$00 + TAY ADC IPH STA TMPH ; ADD BRANCH OFFSET - INY - LDA (IP),Y - CLC + LDA (TMP),Y + ;CLC ; BETTER NOT CARRY OUT OF IP+Y ADC TMPL - STA TMPL + STA IPL INY - LDA (IP),Y + LDA (TMP),Y ADC TMPH STA IPH - LDA TMPL - STA IPL - LDY #$01 + DEY JMP FETCHOP BREQ INX LDA ESTKL-1,X @@ -1044,19 +1034,26 @@ IBRNCH LDA IPL LDA IPH ADC ESTKH,X STA IPH -; INX -; JMP NEXTOP JMP DROP ;* +;* INDIRECT CALL TO ADDRESS (NATIVE CODE) +;* +ICAL LDA ESTKL,X + STA CALLADR+1 + LDA ESTKH,X + STA CALLADR+2 + INX + BNE _CALL +;* ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* -CALL INY ;+INC_IP +CALL INY ;+INC_IP LDA (IP),Y STA CALLADR+1 - INY ;+INC_IP + INY ;+INC_IP LDA (IP),Y STA CALLADR+2 - TYA +_CALL TYA CLC ADC IPL PHA @@ -1075,32 +1072,6 @@ CALLADR JSR $FFFF LDY #$01 JMP FETCHOP ;* -;* INDIRECT CALL TO ADDRESS (NATIVE CODE) -;* -ICAL LDA ESTKL,X - STA ICALADR+1 - LDA ESTKH,X - STA ICALADR+2 - INX - TYA - CLC - ADC IPL - PHA - LDA IPH - ADC #$00 - PHA - LDA IPX - PHA -ICALADR JSR $FFFF - PLA - STA IPX - PLA - STA IPH - PLA - STA IPL - LDY #$01 - JMP FETCHOP -;* ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* ENTER LDA IFPH @@ -1109,7 +1080,6 @@ ENTER LDA IFPH PHA INY LDA (IP),Y - PHA ; SAVE ON STACK FOR LEAVE EOR #$FF SEC ADC PPL diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index 769d876..2a9d18a 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -153,8 +153,7 @@ REGVALS = SRC LDA ESTKL,X PHA INX - LDA ESTKL,X - TAY + LDY ESTKL,X INX LDA ESTKL+1,X PHA