PR#3 PREFIX /A2OSX.BUILD LOMEM $A00 INC 1 AUTO 6 .LIST OFF *-------------------------------------- * SETPIXEL * In : YA = Ptr to CtrlBlk : * 1 : OP (XOR only) * 2 : Mode * 3 : Color * 4 : SrcX1 * 6 : SrcY1 *-------------------------------------- SETPIXEL lda CB.Cache+S.CB.MODE bit #S.CB.MODE.C16 bne SETPIXEL.C16 SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... lda DIV7.lo,x sta .1+1 lda DIV7.hi,x sta .1+2 lda MOD7.lo,x sta .2+1 lda MOD7.hi,x sta .2+2 lda DIV7.BASE,x ldx CB.Cache+S.CB.X1 clc .1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 pha save X DIV 7 lsr ldy CB.Cache+S.CB.Y1 clc adc BASEL,y setup line Base Ptr (A=Col) sta ZPBasePtr lda BASEH,y sta ZPBasePtr+1 ply lda COL.BANK,y tay sta $c000,y .2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 lda CB.Cache+S.CB.OP beq .5 lda (ZPBasePtr) XOR eor Mono.Masks,y y = mod 7 sta (ZPBasePtr) rts .5 lda (ZPBasePtr) ldx CB.Cache+S.CB.COLOR get color bne .6 and Mono.NMasks,y includes And $7F for mono sta (ZPBasePtr) rts .6 and #$7F switch back this byte to mono ora Mono.Masks,y sta (ZPBasePtr) rts SETPIXEL.C16 lda CB.Cache+S.CB.X1 lsr CB.Cache+S.CB.X1+1 divide by 4 ror lsr CB.Cache+S.CB.X1+1 ror tay Y=X/4 (range 0->139) lda DIV7.0,y A=X/4/7 (range 0->19) asl times 2 (range 0->38) ldx CB.Cache+S.CB.Y1 adc BASEL,x setup line Base Ptr (cc by asl) sta ZPBasePtr ZPBasePtr now point to first of... lda BASEH,x sta ZPBasePtr+1 ...the 4 columns lda MOD7.0,y get MOD asl times 4 to compute index in MASK tables asl tax set in X for Masks,NMasks lda CB.Cache+S.CB.COLOR asl times 4 to compute index in PIXELS table asl tay lda Color.Masks,x bits in 1st byte to light? beq .10 and Color.Pixels,y apply color sta GBYTE sta SETPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora GBYTE sta (ZPBasePtr) .10 inx iny lda Color.Masks,x beq .11 and Color.Pixels,y apply color sta GBYTE sta CLRPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora GBYTE sta (ZPBasePtr) .11 inc ZPBasePtr inx iny lda Color.Masks,x beq .12 and Color.Pixels,y apply color sta GBYTE sta SETPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora GBYTE sta (ZPBasePtr) .12 inx iny lda Color.Masks,x beq .13 and Color.Pixels,y apply color sta GBYTE sta CLRPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora GBYTE sta (ZPBasePtr) .13 rts *-------------------------------------- * GETPIXEL *-------------------------------------- GETPIXEL rts *-------------------------------------- MAN SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.PIX LOAD /A2OSX.SRC/DRV/DHGR.DRV.S ASM