Moved outcode calculation in a separate module.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4462 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
98
libsrc/tgi/tgi_outcode.s
Normal file
98
libsrc/tgi/tgi_outcode.s
Normal file
@@ -0,0 +1,98 @@
|
||||
;
|
||||
; 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.
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user