Files
Arquivotheca.SunOS-4.1.4/usr.etc/gp/pp/gbuffer.pp.u
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

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