diff --git a/src/libsrc/apple/dcgrlib.pla b/src/libsrc/apple/dcgrlib.pla index d8c787f..16b5fcd 100644 --- a/src/libsrc/apple/dcgrlib.pla +++ b/src/libsrc/apple/dcgrlib.pla @@ -448,8 +448,6 @@ export asm dcgrHLinScr(x1, x2, y)#0 INY STY TMPH LDY ESTKL-3,X ; Y COORD - ;CPY #192 - ;BCS + end asm _dcgrHLinScrA LDA $1000,Y ; HGRSCANL @@ -459,12 +457,12 @@ asm _dcgrHLinScrA LDY ESTKL-1,X ; X1 COORD end asm _dcgrHLinScrB -- JSR $1000 ; PLOT PIX W/ XCOORD IN Y REG +XHS JSR $1000 ; PLOT PIX W/ XCOORD IN Y REG INC ESTKL-1,X LDY ESTKL-1,X ; X1 COORD CPY TMPH ; X2 COORD - BNE - -+ RTS + BNE XHS + RTS end export asm dcgrVLinScr(y1, y2, x)#0 INX @@ -477,7 +475,7 @@ export asm dcgrVLinScr(y1, y2, x)#0 LDY ESTKL-1,X ; Y1 COORD end asm _dcgrVLinScrA -- LDA $1000,Y ; HGRSCANL +YVS LDA $1000,Y ; HGRSCANL STA DSTL LDA $2000,Y ; HGRSCANH STA DSTH @@ -488,8 +486,8 @@ asm _dcgrVLinScrB INC ESTKL-1,X LDY ESTKL-1,X ; Y1 COORD CPY TMPH ; Y2 COORD - BNE - -+ RTS + BNE YVS + RTS end export asm dcgrPixScr(x, y, w, h, pixptr)#0 INX @@ -515,7 +513,7 @@ YPIXS LDY ESTKL-2,X ; Y COORD BEQ RETPIXS INC ESTKL-2,X ; Y COORD++ CPY #192 ; OFF SCREEN? - BCS - + BCS YPIXS end asm _dcgrPixScrA LDA $1000,Y ; HGRSCANL @@ -739,17 +737,18 @@ export asm dcgrHLinMem(x1, x2, y, dstptr, dstspan)#0 STA DSTH DEY BNE - -+ INC ESTKL-2,X ; ADJUST BCS BELOW -XHM LDA ESTKL-1,X ; X1 COORD - CMP ESTKL-2,X ; X2 COORD - BNE + - TAY ++ LDY ESTKL-2,X ; ADJUST BNE BELOW + INY + STY TMPH + BNE + ; BRA end asm _dcgrHLinMemB - JSR $1000 ; PLOT PIX W/ XCOORD IN Y REG +XHM JSR $1000 ; PLOT PIX W/ XCOORD IN Y REG INC ESTKL-1,X ; X1++ ++ LDY ESTKL-1,X ; X1 COORD + CPY TMPH ; X2 COORD BNE XHM ; BRA -+ RTS + RTS end export asm dcgrVLinMem(y1, y2, x, dstptr, dstspan)#0 INX @@ -773,15 +772,11 @@ export asm dcgrVLinMem(y1, y2, x, dstptr, dstspan)#0 STA DSTH DEY BNE - -+ INC ESTKL-2,X ; ADJUST BCS BELOW -YVM LDA ESTKL-1,X ; Y1 COORD - CMP ESTKL-2,X ; Y2 COORD - BEQ + - LDY ESTKL-3,X ; X COORD ++ INC ESTKL-2,X ; ADJUST BNE BELOW +YVM LDY ESTKL-3,X ; X COORD end asm _dcgrVLinMemB JSR $1000 ; PLOT PIX W/ XCOORD IN Y REG - INC ESTKL-1,X ; Y1++ CLC LDA ESTKL-5,X ; SPAN ADC DSTL @@ -789,7 +784,10 @@ asm _dcgrVLinMemB LDA ESTKH-5,X ADC DSTH STA DSTH - BNE YVM ; BRA + INC ESTKL-1,X ; Y1++ + LDA ESTKL-1,X ; Y1 COORD + CMP ESTKL-2,X ; Y2 COORD + BNE YVM + RTS end export asm dcgrPixMem(x, y, w, h, pixptr, dstw, dsth, dstptr, dstspan)#0 @@ -825,11 +823,8 @@ export asm dcgrPixMem(x, y, w, h, pixptr, dstw, dsth, dstptr, dstspan)#0 CLC ADC ESTKL-4,X ; HEIGHT STA ESTKL-4,X ; -> BOTTOM EDGE -YPIXM LDA ESTKL-2,X ; Y COORD - CMP ESTKL-4,X ; AT BOTTOM? - BEQ RETPIXM - INC ESTKL-2,X ; Y COORD++ - CMP ESTKL-7,X ; OUT OF DST BOUNDS? + LDA ESTKL-2,X ; Y COORD +YPIXM CMP ESTKL-7,X ; OUT OF DST BOUNDS? BCS NXTPIXM end asm _dcgrPixMemA @@ -886,8 +881,11 @@ NXTPIXM CLC LDA ESTKH-9,X ADC DSTH STA DSTH - BNE YPIXM ; NEXT ROW -RETPIXM RTS + INC ESTKL-2,X ; Y COORD++ + LDA ESTKL-2,X ; Y COORD + CMP ESTKL-4,X ; AT BOTTOM? + BNE YPIXM ; NEXT ROW + RTS end // // Screen -> Memory Block Transfer diff --git a/src/samplesrc/dcgrtest.pla b/src/samplesrc/dcgrtest.pla index a294841..c7a8e6b 100644 --- a/src/samplesrc/dcgrtest.pla +++ b/src/samplesrc/dcgrtest.pla @@ -53,7 +53,9 @@ def dcgrTest#0 word i, j, k, ok7, om7, inci, incj, inck word backblk, backspan, backw7 word restrblk, restrspan, restrw7, restrw + byte mode + mode = 1 setlineplot(@dcgrPlotScr) setlinespans(@dcgrHLinScr, @dcgrVLinScr) for i = 0 to 191 step 2 @@ -80,14 +82,24 @@ def dcgrTest#0 restrw = restrw7 * 7 while ^$C000 < 128 ok7, om7 = divmod(k, 7) - if om7 < 0; om7 = 6+om7; fin dcgrMemBl7Mem(0, 0, restrw7, 16, backblk + ok7 * 4, backspan, restrw7, 16, restrblk, restrspan) - dcgrOpMem(OP_AND) - dcgrMemBl7Mem(0, 0, sprite7width, 16, sprite7mask[om7], sprite7span, restrw7, 16, restrblk, restrspan) - dcgrOpMem(OP_XOR) - dcgrMemBl7Mem(0, 0, sprite7width, 16, sprite7[om7], sprite7span, restrw7, 16, restrblk, restrspan) - dcgrOpMem(OP_SRC) - //dcgrPixMem(om7 + 2, 0, 16, 16, @sprite, restrw, 16, restrblk, restrspan) + if mode + if om7 < 0; om7 = 6+om7; fin + dcgrOpMem(OP_AND) + dcgrMemBl7Mem(0, 0, sprite7width, 16, sprite7mask[om7], sprite7span, restrw7, 16, restrblk, restrspan) + dcgrOpMem(OP_XOR) + dcgrMemBl7Mem(0, 0, sprite7width, 16, sprite7[om7], sprite7span, restrw7, 16, restrblk, restrspan) + dcgrOpMem(OP_SRC) + if k < 0 + dcgrColor(DCLR_WHITE) + dcgrHLinMem(0, restrw - 1, 0, restrblk, restrspan) + dcgrHLinMem(0, restrw - 1, 15, restrblk, restrspan) + dcgrVLinMem(0, 15, 0, restrblk, restrspan) + dcgrVLinMem(0, 15, restrw - 1, restrblk, restrspan) + fin + else + dcgrPixMem(om7 + 2, 0, 16, 16, @sprite, restrw, 16, restrblk, restrspan) + fin dcgrMemBl7Scr(ok7, 170, restrw7, 16, restrblk, restrspan) if k < 0; getc; fin if k > 136 or k < -16; inck = -inck; fin @@ -97,6 +109,7 @@ def dcgrTest#0 i = i + inci if j > 145 or j < 32; incj = -incj; fin j = j + incj + mode = !mode loop ^$C010 getc