1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-04-07 16:41:59 +00:00

Left edge clip WIP

This commit is contained in:
David Schmenk 2024-09-10 11:47:09 -07:00
parent c8e3173348
commit b19f7d6d60
2 changed files with 48 additions and 37 deletions

View File

@ -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

View File

@ -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