1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-22 12:30:41 +00:00

Added clipping

git-svn-id: svn://svn.cc65.org/cc65/trunk@1320 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2002-06-22 11:17:06 +00:00
parent ccb0127ed9
commit 89752c9d29

View File

@ -7,23 +7,108 @@
.include "tgi-kernel.inc"
.import popax
.importzp ptr1, ptr2, ptr3, ptr4
.import popax
.import _tgi_getmaxx, _tgi_getmaxy
.export _tgi_bar
_tgi_bar:
sta ptr4 ; Get the coordinates
sta ptr4 ; Y2
stx ptr4+1
jsr popax
sta ptr3
sta ptr3 ; X2
stx ptr3+1
jsr popax
sta ptr2
sta ptr2 ; Y1
stx ptr2+1
jsr popax
sta ptr1
sta ptr1 ; X1
stx ptr1+1
jmp tgi_line ; Call the driver
; Make sure X1 is less than X2. Swap both if not.
lda ptr3
cmp ptr1
lda ptr3+1
sbc ptr1+1
bpl @L1
lda ptr3
ldy ptr1
sta ptr1
sty ptr3
lda ptr3+1
ldy ptr1+1
sta ptr1+1
sty ptr3+1
; Make sure Y1 is less than Y2. Swap both if not.
@L1: lda ptr4
cmp ptr2
lda ptr4+1
sbc ptr2+1
bpl @L2
lda ptr4
ldy ptr2
sta ptr2
sty ptr4
lda ptr4+1
ldy ptr2+1
sta ptr2+1
sty ptr4+1
; Check if X2 or Y2 are negative. If so, the bar is completely out of screen.
@L2: lda ptr4+1
ora ptr3+1
bmi @L9 ; Bail out
; Check if X1 is negative. If so, clip it to the left border (zero).
lda #$00
bit ptr1+1
bpl @L3
sta ptr1
sta ptr1+1
; Dito for Y1
@L3: bit ptr2+1
bpl @L4
sta ptr2
sta ptr2+1
; Check if X2 is larger than the maximum x coord. If so, clip it.
@L4: lda ptr3
cmp _tgi_xres
lda ptr3+1
sbc _tgi_xres+1
bcs @L5
jsr _tgi_getmaxx
sta ptr3
stx ptr3+1
; Check if Y2 is larger than the maximum y coord. If so, clip it.
@L5: lda ptr4
cmp _tgi_yres
lda ptr4+1
sbc _tgi_yres+1
bcs @L6
jsr _tgi_getmaxy
sta ptr4
stx ptr4+1
; The coordinates are now valid. Call the driver.
@L6: jmp tgi_bar
; Error exit
@L9: rts