diff --git a/src/samplesrc/rod.pla b/src/samplesrc/rod.pla index ab357e6..7ce8ee6 100644 --- a/src/samplesrc/rod.pla +++ b/src/samplesrc/rod.pla @@ -63,69 +63,69 @@ word textmode = @a2textmode // Common routines. // asm equates - !SOURCE "vmsrc/plvmzp.inc" + !SOURCE "vmsrc/plvmzp.inc" end // // def grscrn(rowaddrs) // asm grscrn(rowaddrs)#0 -GRSCRN = $26 -GRSCRNL = GRSCRN -GRSCRNH = GRSCRNL+1 - LDA ESTKL,X - STA GRSCRNL - LDA ESTKH,X - STA GRSCRNH - INX - RTS +GRSCRN = $26 +GRSCRNL = GRSCRN +GRSCRNH = GRSCRNL+1 + LDA ESTKL,X + STA GRSCRNL + LDA ESTKH,X + STA GRSCRNH + INX + RTS end // // def grcolor(color) // asm grcolor(color)#0 -GRCLR = $30 - LDA #$0F - AND ESTKL,X - STA GRCLR - ASL - ASL - ASL - ASL - ORA GRCLR - STA GRCLR - INX - RTS +GRCLR = $30 + LDA #$0F + AND ESTKL,X + STA GRCLR + ASL + ASL + ASL + ASL + ORA GRCLR + STA GRCLR + INX + RTS end // // def grplot(x, y) // asm grplot(x, y)#0 - STY IPY - LDA ESTKL,X - AND #$FE - CMP ESTKL,X - TAY - LDA (GRSCRN),Y - STA DSTL - INY - LDA (GRSCRN),Y - STA DSTH - LDA #$FF - ADC #$00 - EOR #$0F - TAY - AND GRCLR - STA TMPL - TYA - EOR #$FF - LDY ESTKL+1,X - AND (DST),Y - ORA TMPL - STA (DST),Y - LDY IPY - INX - INX - RTS + STY IPY + LDA ESTKL,X + AND #$FE + CMP ESTKL,X + TAY + LDA (GRSCRN),Y + STA DSTL + INY + LDA (GRSCRN),Y + STA DSTH + LDA #$FF + ADC #$00 + EOR #$0F + TAY + AND GRCLR + STA TMPL + TYA + EOR #$FF + LDY ESTKL+1,X + AND (DST),Y + ORA TMPL + STA (DST),Y + LDY IPY + INX + INX + RTS end // // Apple II routines. @@ -228,27 +228,27 @@ def rod#0 byte i, j, k, w, fmi, fmk, color while TRUE for w = 3 to 50 - for i = 1 to 19 - for j = 0 to 19 - k = i + j - color = (j * 3) / (i + 3) + i * w / 12 - fmi = 40 - i - fmk = 40 - k - grcolor(color)#0 - grplot(i, k)#0 - grplot(k, i)#0 - grplot(fmi, fmk)#0 - grplot(fmk, fmi)#0 - grplot(k, fmi)#0 - grplot(fmi, k)#0 - grplot(i, fmk)#0 - grplot(fmk, i)#0 - if keypressed()#1 - return - fin - next - next - next + for i = 1 to 19 + for j = 0 to 19 + k = i + j + color = (j * 3) / (i + 3) + i * w / 12 + fmi = 40 - i + fmk = 40 - k + grcolor(color)#0 + grplot(i, k)#0 + grplot(k, i)#0 + grplot(fmi, fmk)#0 + grplot(fmk, fmi)#0 + grplot(k, fmi)#0 + grplot(fmi, k)#0 + grplot(i, fmk)#0 + grplot(fmk, i)#0 + if keypressed()#1 + return + fin + next + next + next loop end // @@ -257,18 +257,18 @@ end when MACHID & $C8 is $08 // Apple 1 puts(@a1err) - return + return is $C0 // Apple /// keypressed = @a3keypressed - gotoxy = @a3gotoxy - grmode = @a3grmode - textmode = @a3textmode - if modaddr(@cmdsys):0 == $0010 - devcons = modaddr(@cmdsys).5 // devcons variable from cmdsys - else - puts(@a3err) - return - fin + gotoxy = @a3gotoxy + grmode = @a3grmode + textmode = @a3textmode + if modaddr(@cmdsys):0 == $0010 + devcons = modaddr(@cmdsys).5 // devcons variable from cmdsys + else + puts(@a3err) + return + fin otherwise // Apple ][ wend grmode(MIXMODE)#0 diff --git a/src/vmsrc/plvm802.s b/src/vmsrc/plvm802.s index 41c8eb4..030d4d3 100755 --- a/src/vmsrc/plvm802.s +++ b/src/vmsrc/plvm802.s @@ -51,8 +51,8 @@ ALTWROFF= $C004 ALTWRON = $C005 !SOURCE "vmsrc/plvmzp.inc" HWSP = TMPH+1 -DROP = $EE -NEXTOP = $EF +DROP = $EF +NEXTOP = DROP+1 FETCHOP = NEXTOP+3 IP = FETCHOP+1 IPL = IP @@ -321,6 +321,10 @@ CMDENTRY = * BIT $C051 BIT $C05F JSR $FC58 ; HOME +!IF DEBUG { + LDA #20 ; SET TEXT WINDOW ABOVE DEBUG OUTPUT + STA $23 +} ; ; INSTALL PAGE 0 FETCHOP ROUTINE ; @@ -403,14 +407,14 @@ PAGE0 = * ;* * ;****************************** !PSEUDOPC DROP { - PLA ; DROP @ $EE - INY ; NEXTOP @ $EF + PLA ; DROP @ $EF + INY ; NEXTOP @ $F0 BEQ NEXTOPH - LDX $FFFF,Y ; FETCHOP @ $F2, IP MAPS OVER $FFFF @ $F3 + LDX $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 JMP (OPTBL,X) ; OPIDX AND OPPAGE MAP OVER OPTBL -NEXTOPH SEP #$20 ; SET 8 BIT MODE - INC IPH - REP #$20 ; SET 16 BIT MODE +NEXTOPH LDX IPH + INX + STX IPH BRA FETCHOP } PAGE3 = * @@ -480,6 +484,19 @@ PRCHR ORA #$80 STA $7D0,X INX RTS +PRBYTE PHA + LDA #'$' + JSR PRCHR + PLA + JMP PRHEX +PRWORD PHA + LDA #'$' + JSR PRCHR + XBA + JSR PRHEX + PLA + JMP PRHEX + ;***************** ;* * ;* DEBUG TABLE * @@ -499,6 +516,9 @@ DBGTBL !WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; 00 02 04 06 08 ;* DEBUG STEP ROUTINE ;* STEP STX TMPL + LDX $C013 ; SAVE RAMRD + STX $C002 + STX TMPH SEP #$20 ; 8 BIT A/M !AS LDX #39 ; SCROLL PREVIOUS LINES UP @@ -510,9 +530,10 @@ STEP STX TMPL STA $750,X DEX BPL - - LDX #$00 - LDA #'$' - JSR PRCHR + BIT TMPH ; RAMRD SET? + BPL + + STA $C003 ++ LDX #$00 REP #$20 ; 16 BIT A/M !AL TYA @@ -520,43 +541,41 @@ STEP STX TMPL ADC IP SEP #$20 ; 8 BIT A/M !AS - XBA - JSR PRHEX - XBA - JSR PRHEX + JSR PRWORD LDA #':' JSR PRCHR - LDA #'$' - JSR PRCHR LDA (IP),Y - JSR PRHEX + JSR PRBYTE INX - LDA #'$' - JSR PRCHR REP #$20 ; 16 BIT A/M !AL TSC SEP #$20 ; 8 BIT A/M !AS - XBA - JSR PRHEX - XBA - JSR PRHEX + JSR PRWORD LDA #':' JSR PRCHR - TXA + STX TMPH TSX CPX HWSP - BEQ + - TAX - LDA #'$' + BEQ ++ + BCC + + LDX TMPH + LDA #' ' JSR PRCHR - LDA TOS+1,S - JSR PRHEX - LDA TOS,S - JSR PRHEX - BRA ++ -+ TAX + LDA #'<' ; STACK UNDERFLOW! + JSR PRCHR + JSR PRCHR + JSR PRCHR + JSR PRCHR + BRA DBGKEY ++ LDA $102,X + XBA + LDA $101,X + LDX TMPH + JSR PRWORD + BRA +++ +++ LDX TMPH LDA #' ' JSR PRCHR LDA #'-' @@ -564,28 +583,31 @@ STEP STX TMPL JSR PRCHR JSR PRCHR JSR PRCHR -++ ;LDX $C010 ++++ ;LDX $C010 LDA #' ' - JSR PRCHR CPX #40 BNE - +; LDX TMPL +; CPX #$48 ; FORCE PAUSE AT 'IS_GE' +; BEQ DBGKEY - LDX $C000 - ;BPL - - ;STX $C010 CPX #$9B - BNE + - STX $C010 + BNE ++ +DBGKEY STX $C010 - LDX $C000 BPL - CPX #$9B - BEQ + + BEQ ++ STX $C010 - ;SEC ; SWITCH TO EMU MODE - ;XCE - ;BRK -+ REP #$20 ; 16 BIT A/M + CPX #$80+'Q' + BNE ++ + SEC ; SWITCH TO EMU MODE + XCE + BRK +++ REP #$20 ; 16 BIT A/M !AL - LDX TMPL ++ LDX TMPL DBG_OP JMP (OPTBL,X) } ;********************************************************************* @@ -608,7 +630,7 @@ ADD PLA SUB LDA NOS,S SEC SBC TOS,S - STA NOS,X + STA NOS,S JMP DROP ;* ;* SHIFT TOS LEFT BY 1, ADD TO TOS-1 @@ -640,53 +662,38 @@ MULLP ASL TMP ;LSR TMP ; MULTPLR ;* ;* INTERNAL DIVIDE ALGORITHM ;* -_NEG EOR #$FFFF - INC - SEC - SBC TOS,S - STA TOS,S - RTS _DIV STY IPY LDY #$11 ; #BITS+1 LDX #$00 - LDA TOS,S + LDA TOS+2,S ; WE JSR'ED HERE SO OFFSET ACCORDINGLY BPL + LDX #$81 EOR #$FFFF INC - STA TOS,S -+ LDA NOS,S + STA TOS+2,S ++ LDA NOS+2,S BPL + INX EOR #$FFFF INC - STA TMP ; NOS,S -+ BEQ _DIVEX ++ STA TMP ; NOS,S + BEQ _DIVEX _DIV1 ASL ; DVDND DEY BCC _DIV1 STA TMP ;NOS,S ; DVDND LDA #$0000 ; REMNDR _DIVLP ROL ; REMNDR - CMP TOS,S ; DVSR + CMP TOS+2,S ; DVSR BCC + - SBC TOS,S ; DVSR + SBC TOS+2,S ; DVSR SEC + ROL TMP ;NOS,S ; DVDND DEY BNE _DIVLP -_DIVEX ;STA TMP ; REMNDR - LDY IPY +_DIVEX LDY IPY RTS ;* -;* NEGATE TOS -;* -NEG LDA #$0000 - SEC - SBC TOS,S - STA TOS,S - JMP NEXTOP -;* ;* DIV TOS-1 BY TOS ;* DIV JSR _DIV @@ -708,6 +715,14 @@ MOD JSR _DIV BNE NEG JMP NEXTOP ;* +;* NEGATE TOS +;* +NEG LDA #$0000 + SEC + SBC TOS,S + STA TOS,S + JMP NEXTOP +;* ;* INCREMENT TOS ;* INCR LDA TOS,S @@ -811,9 +826,7 @@ DUP LDA TOS,S ;* ;* PRIVATE EP STASH ;* -EPSAVE !BYTE $01 ; INDEX INTO STASH ARRAY (32 SHOULD BE ENOUGH) - !WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 - !WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 +EPSAVE !BYTE $01 ; INDEX INTO STASH ARRAY (16 SHOULD BE ENOUGH) !WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 !WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 ;* @@ -826,6 +839,14 @@ PUSHEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM STA EPSAVE,X INX INX +!IF DEBUG { + CPX #33 + BCC + + LDX #$80+'>' + STX $7D0+30 + LDX #$32 ++ +} STX EPSAVE LDX LCRDEN+LCBNK2 ; REN LC MEM JMP NEXTOP @@ -837,6 +858,13 @@ PULLEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM LDX EPSAVE DEX DEX +!IF DEBUG { + BPL + + LDX #$80+'<' + STX $7D0+30 + LDX #$00 ++ +} LDA EPSAVE,X TCS STX EPSAVE @@ -1615,6 +1643,7 @@ RET SEP #$20 ; 8 BIT A/M LDX $C010 + LDX TMPL } + TYX REP #$20 ; 16 BIT A/M !AL LDA IFP ; DEALLOCATE POOL