NEW PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- * HLINE X1,X2 at Y1 (XOR,SET,ORA) *-------------------------------------- HLINE lda CB.Cache+S.CB.M cmp #S.CB.M.MONO bne HLINE.C16 HLINE.MONO >LDYA CB.Cache+S.CB.X1 jsr LBUF.SetBounds1YA >LDYA CB.Cache+S.CB.X2 jsr LBUF.SetBounds2YA lda CB.Cache+S.CB.COLOR beq .1 lda #%01111111 .1 ldx LBUF.C1 .2 sta LBUF.DATA,x cpx LBUF.C2 inx bcc .2 ldy CB.Cache+S.CB.Y1 jmp LBUF.DrawAtY HLINE.C16 lda CB.Cache+S.CB.X1 and #%11111100 tay lda CB.Cache+S.CB.X1+1 jsr LBUF.SetBounds1YA lda CB.Cache+S.CB.X2 ora #%00000011 tay lda CB.Cache+S.CB.X2+1 jsr LBUF.SetBounds2YA lda CB.Cache+S.CB.COLOR asl asl clc adc L.Color.Pixels sta .2+1 lda L.Color.Pixels+1 adc #0 sta .2+2 ldx LBUF.C1 .1 txa and #3 Compute index in Palette (Mod 4) tay .2 lda $ffff,y SELF MODIFIED sta LBUF.DATA,x cpx LBUF.C2 inx bcc .1 ldy CB.Cache+S.CB.Y1 jmp LBUF.DrawAtY rts *-------------------------------------- * VLINE Y1,Y2 at X1 (XOR,SET,ORA) *-------------------------------------- VLINE lda CB.Cache+S.CB.M cmp #S.CB.M.MONO bne VLINE.C16 VLINE.MONO >LDYA CB.Cache+S.CB.X1 jsr DIVMOD7YA tay lda COL.OFS,y sta ZPTmpByte Save COL (DIV) lda COL.BANK,y tay sta $C000,y Select proper BANK lda CB.Cache+S.CB.OP * cmp #S.CB.OP.XOR beq VLINE.MONO.XOR lda CB.Cache+S.CB.COLOR bne VLINE.MONO.WHITE VLINE.MONO.BLACK ldy CB.Cache+S.CB.Y1 clc .1 lda BASEL,y adc ZPTmpByte sta ZPBasePtr lda BASEH,y sta ZPBasePtr+1 lda (ZPBasePtr) and Mono.NMasks,x sta (ZPBasePtr) cpy CB.Cache+S.CB.Y2 iny bcc .1 rts VLINE.MONO.WHITE .1 lda BASEL,y adc ZPTmpByte sta ZPBasePtr lda BASEH,y sta ZPBasePtr+1 lda (ZPBasePtr) ora Mono.Masks,x sta (ZPBasePtr) cpy CB.Cache+S.CB.Y2 iny bcc .1 rts VLINE.MONO.XOR .1 lda BASEL,y adc ZPTmpByte sta ZPBasePtr lda BASEH,y sta ZPBasePtr+1 lda (ZPBasePtr) eor Mono.Masks,x sta (ZPBasePtr) cpy CB.Cache+S.CB.Y2 iny bcc .1 rts VLINE.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 ZPTmpByte sta SETPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora ZPTmpByte sta (ZPBasePtr) .10 inx iny lda Color.Masks,x beq .11 and Color.Pixels,y apply color sta ZPTmpByte sta CLRPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora ZPTmpByte sta (ZPBasePtr) .11 inc ZPBasePtr inx iny lda Color.Masks,x beq .12 and Color.Pixels,y apply color sta ZPTmpByte sta SETPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora ZPTmpByte sta (ZPBasePtr) .12 inx iny lda Color.Masks,x beq .13 and Color.Pixels,y apply color sta ZPTmpByte sta CLRPAGE2 lda (ZPBasePtr) and Color.NMasks,x reset existing pixel, ora ZPTmpByte sta (ZPBasePtr) .13 rts *-------------------------------------- MAN SAVE USR/SRC/DRV/DHGR.DRV.S.LINE LOAD USR/SRC/DRV/DHGR.DRV.S ASM