166 lines
5.6 KiB
Plaintext
166 lines
5.6 KiB
Plaintext
| "@(#)gbuffer.pp.u 1.1 94/10/31 SMI"
|
|
|
|
| Copyright 1985 by Sun Microsystems, Inc.
|
|
|
|
| G-Buffer routines.
|
|
|
|
| set buf: set a rectangle in the g-buffer to a color.
|
|
#define bx r[3]
|
|
#define by r[4]
|
|
#define bw r[5]
|
|
#define bh r[6]
|
|
#define baddrlo r[7]
|
|
#define baddrhi r[8]
|
|
#define clipptr r[9]
|
|
#define offsetx r[10]
|
|
#define offsety r[11]
|
|
#define sizex r[12]
|
|
#define sizey r[13]
|
|
setbuf: movw d, color; fifo1->am; cjp, f1e .; |
|
|
; SavePts->scrmemp; ; |
|
|
movw d, bx; fifo1->am; cjp, f1e .; |
|
|
movw bx, y; am->scrmem; ; scrmp + |
|
|
movw d, by; fifo1->am; cjp, f1e .; |
|
|
movw by, y; am->scrmem; ; scrmp + |
|
|
movw d, bw; fifo1->am; cjp, f1e .; |
|
|
movw bw, y; am->scrmem; ; scrmp + |
|
|
movw d, bh; fifo1->am; cjp, f1e .; |
|
|
movw bh, y; am->scrmem; ; scrmp + |
|
|
; ; cjp, ~gbr .; |
|
|
; 0x6000->gbhiptr; ; |
|
|
movw d, clipptr; ClipList->am; ; |
|
|
sb0clip: ; SavePts->scrmemp; ; |
|
|
movw d, bx; scrmem->am; ; scrmp + |
|
|
movw d, by; scrmem->am; ; scrmp + |
|
|
movw d, bw; scrmem->am; ; scrmp + |
|
|
movw d, bh; scrmem->am; ; scrmp + |
|
|
movw clipptr, y; am->scrmemp; ; |
|
|
addw d, clipptr, clipptr; 4->am; ; |
|
|
movw,s d, offsetx; scrmem->am; ; scrmp + |
|
|
movw bw, acc; ; cjp, neg start; | neg == end of clip list
|
|
addw bx, acc, acc; ; ; |
|
|
subw,s offsetx, acc, y; ; ; |
|
|
movw bh, acc; ; cjp, neg sb0clip; |
|
|
addw by, acc, acc; ; ; |
|
|
movw d, offsety; scrmem->am; ; scrmp + |
|
|
subw,s offsety, acc, y; ; ; |
|
|
movw d, sizex; scrmem->am; cjp, neg sb0clip; scrmp + |
|
|
movw offsetx, acc; ; ; |
|
|
addw sizex, acc, acc; ; ; |
|
|
subw,s bx, acc, y; ; ; |
|
|
movw d, sizey; scrmem->am; cjp, neg sb0clip; scrmp + |
|
|
movw offsety, acc; ; ; |
|
|
addw sizey, acc, acc; ; ; |
|
|
subw,s by, acc, y; ; ; |
|
|
movw bx, acc; ; cjp, neg sb0clip; |
|
|
subw,s offsetx, acc, y; am->am; ; |
|
|
; ; cjp, ~neg sb0offy; |
|
|
subw d, bx, bx; ; ; |
|
|
addw d, bw, bw; ; ; |
|
|
sb0offy: movw by, acc; ; ; |
|
|
subw,s offsety, acc, y; am->am; ; |
|
|
; ; cjp, ~neg sb0sizex; |
|
|
subw d, by, by; ; ; |
|
|
addw d, bh, bh; ; ; |
|
|
sb0sizex: movw bx, acc; ; ; |
|
|
addw bw, acc, acc; ; ; |
|
|
movw sizex, y; am->am; ; |
|
|
addw d, offsetx, offsetx; ; ; |
|
|
rsubw,s offsetx, acc, acc; ; ; |
|
|
; ; cjp, ~neg sb0sizey; |
|
|
addw bw, acc, bw; ; ; |
|
|
sb0sizey: movw by, acc; ; ; |
|
|
addw bh, acc, acc; ; ; |
|
|
movw sizey, y; am->am; ; |
|
|
addw d, offsety, offsety; ; ; |
|
|
rsubw,s offsety, acc, acc; ; ; |
|
|
; ; cjp, ~neg sb0ok; |
|
|
addw bh, acc, bh; ; ; |
|
|
sb0ok: movw by, r[2]; ; cjs, go MulSWid; |
|
|
movw bx, acc; ; ; |
|
|
addw r[0], acc, baddrlo; ; ; |
|
|
addcw d, r[1], baddrhi; 0->am; ; |
|
|
sb0while: negw,s bh, y; ; ; | while (sh-- > 0) {
|
|
; ; cjp, ~neg sb0clip; |
|
|
movw baddrhi, y; am->gbhiptr; cjp, ~gbr .; |
|
|
movw baddrlo, y; am->gbloptr; cjp, ~gbr .; |
|
|
decw bw; am->brreg; ; |
|
|
incw bw, bw; ; push, go; | fastloop (bw, *ba++= color)
|
|
; ; cjp, ~gbr .; |
|
|
movw color, y; am->gbwdreg; rfct; |
|
|
addw d, baddrlo, baddrlo; SWidth->am; ; |
|
|
addcw d, baddrhi, baddrhi; 0->am; ; |
|
|
decw bh, bh; ; cjp, go sb0while; | end while
|
|
#undef bx
|
|
#undef by
|
|
#undef bw
|
|
#undef bh
|
|
#undef baddrlo
|
|
#undef baddrhi
|
|
#undef offsetx
|
|
#undef offsety
|
|
#undef sizex
|
|
#undef sizey
|
|
#undef clipptr
|
|
|
|
|
|
| bufscr: copy a rectangle in the g-buffer to a rectangle on the screen.
|
|
#define bw r[3]
|
|
#define bh r[4]
|
|
#define baddrlo r[5]
|
|
#define baddrhi r[6]
|
|
#define saddrlo r[7]
|
|
#define saddrhi r[8]
|
|
#define lowbytes r[9]
|
|
bufscr: movw d, lowbytes; fifo1->am; cjp, f1e bufscr; | flag. Neg == copy high bytes.
|
|
bsbw: movw d, bw; fifo1->am; cjp, f1e bsbw; |
|
|
bsbh: movw d, bh; fifo1->am; cjp, f1e bsbh; |
|
|
bsblo: movw d, baddrlo; fifo1->am; cjp, f1e bsblo; |
|
|
bsbhi: movw d, baddrhi; fifo1->am; cjp, f1e bsbhi; |
|
|
bsslo: movw d, saddrlo; fifo1->am; cjp, f1e bsslo; |
|
|
bsshi: movw d, saddrhi; fifo1->am; cjp, f1e bsshi; |
|
|
; ; cjs, go ropreg; |
|
|
bsinit: ; ; cjp, ~gbr bsinit; |
|
|
; 0x6000->gbhiptr; ; |
|
|
bswhile: negw,s bh, y; ; ; | while (sh-- > 0) {
|
|
; ; cjp, ~neg start; |
|
|
bsbhi1: movw baddrhi, y; am->gbhiptr; cjp, ~gbr bsbhi1; |
|
|
bsblo1: movw baddrlo, y; am->gbloptr; cjp, ~gbr bsblo1; gbrd | ma= ma_top
|
|
| bsvctl: ; ; cjp, ~vir bsvctl; | prime fifo
|
|
| ; GPVWord->vctlreg; ; |
|
|
| ; FBAllRopPrimeSrc2->vloareg; ; |
|
|
| movw FBCont, y; am->vhiareg; ; |
|
|
| bsprime: movw d, acc; gbrdreg->am; cjp, ~gbr bsprime; gbrd |
|
|
| romw 8, d, acc, 0xff00; ; ; |
|
|
| IMM; ; ; |
|
|
| bsvw0: movw acc, y; am->vwdreg; cjp, ~vir bsvw0; vmewr |
|
|
movw saddrlo, y; am->vloareg; ; | bx= by
|
|
movw saddrhi, y; am->vhiareg; ; |
|
|
bsvctl1: ; ; cjp, ~vir bsvctl1; |
|
|
testw (lowbytes); VByte->vctlreg; ; |
|
|
decw bw; am->brreg; cjp, neg bshigh; |
|
|
|
|
incw bw, bw; ; push, go; | fastloop (sw, *sa++= *ba++) low bytes.
|
|
bsfast: movw d, acc; gbrdreg->am; cjp, ~gbr bsfast; gbrd |
|
|
bsvw: movw acc, y; am->vwdreg; cjp, ~vir bsvw; vmewr |
|
|
; ; rfct; varegs+ |
|
|
; ; cjp, go bsvw1; |
|
|
|
|
bshigh: incw bw, bw; ; push, go; | fastloop (sw, *sa++= *ba++)
|
|
bsfasth: movw d, acc; gbrdreg->am; cjp, ~gbr bsfasth; gbrd |
|
|
bsvwh: rolw 8, acc, y; am->vwdreg; cjp, ~vir bsvwh; vmewr |
|
|
; ; rfct; varegs+ |
|
|
|
|
bsvw1: movw 0, y; am->vwdreg; cjp, ~vir bsvw1; vmewr | flush fifo
|
|
addw d, baddrlo, baddrlo; SWidth->am; ; | ma += ma_vert
|
|
addcw d, baddrhi, baddrhi; 0->am; ; |
|
|
addw d, saddrlo, saddrlo; SWidth->am; ; | sa += linebytes
|
|
addcw d, saddrhi, saddrhi; 0->am; ; |
|
|
decw bh, bh; ; cjp, go bswhile; | end while
|
|
#undef bw
|
|
#undef bh
|
|
#undef baddrlo
|
|
#undef baddrhi
|
|
#undef saddrlo
|
|
#undef saddrhi
|