mirror of
https://github.com/cc65/cc65.git
synced 2024-08-14 14:29:07 +00:00
d1e4687540
git-svn-id: svn://svn.cc65.org/cc65/trunk@4464 b7a2c559-68d2-44c3-8de9-860c34a00d81
99 lines
2.0 KiB
ArmAsm
99 lines
2.0 KiB
ArmAsm
;
|
|
; Ullrich von Bassewitz, 2009-10-25
|
|
;
|
|
; Generates clipping outcodes for Cohen Sutherland and others.
|
|
;
|
|
|
|
.include "tgi-kernel.inc"
|
|
.include "zeropage.inc"
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Data
|
|
|
|
.bss
|
|
|
|
; Clipping coordinates. They must be in this order!
|
|
tgi_clip_x1: .res 2
|
|
tgi_clip_y1: .res 2
|
|
tgi_clip_x2: .res 2
|
|
tgi_clip_y2: .res 2
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Generate a Cohen Sutherland outcode
|
|
;
|
|
; void outcode ()
|
|
; {
|
|
; unsigned char o = 0;
|
|
; if (Y < 0) {
|
|
; o = TGI_CLIP_BOTTOM;
|
|
; } else if (Y >= yres) {
|
|
; o = TGI_CLIP_TOP;
|
|
; }
|
|
; if (X < 0) {
|
|
; o |= TGI_CLIP_LEFT;
|
|
; } else if (X >= xres) {
|
|
; o |= TGI_CLIP_RIGHT;
|
|
; }
|
|
; return o;
|
|
; }
|
|
;
|
|
; The function return the outcode in A and the flags for the outcode are
|
|
; correctly set.
|
|
;
|
|
|
|
.code
|
|
.proc tgi_outcode
|
|
|
|
lda #TGI_CLIP_NONE
|
|
sta tmp1
|
|
|
|
; Check Y coordinate
|
|
|
|
lda tgi_clip_y1+1,y ; High byte of Y1
|
|
bmi L2 ; Jump if bottom clip
|
|
|
|
ldx tgi_clip_y1,y ; Low byte of Y1
|
|
cpx _tgi_yres
|
|
sbc _tgi_yres+1
|
|
bvs L1
|
|
eor #$80
|
|
L1: bpl L4
|
|
lda #TGI_CLIP_TOP ; Top clipping necessary
|
|
bne L3
|
|
L2: lda #TGI_CLIP_BOTTOM
|
|
L3: sta tmp1 ; Save temp outcode
|
|
|
|
|
|
; Check X coordinate
|
|
|
|
L4: lda tgi_clip_x1+1,y ; High byte of X1
|
|
bmi L7 ; Jump if left clip
|
|
|
|
ldx tgi_clip_x1,y ; Low byte of X1
|
|
cpx _tgi_xres
|
|
sbc _tgi_xres+1
|
|
bvs L5
|
|
eor #$80
|
|
L5: bmi L6
|
|
|
|
; No right or left clipping necessary
|
|
|
|
lda tmp1
|
|
rts
|
|
|
|
; Need right clipping
|
|
|
|
L6: lda #TGI_CLIP_RIGHT
|
|
ora tmp1
|
|
rts
|
|
|
|
; Need left clipping
|
|
|
|
L7: lda #TGI_CLIP_LEFT
|
|
ora tmp1
|
|
rts
|
|
|
|
.endproc
|
|
|
|
|