NEW
  AUTO 3,1
*--------------------------------------
* SETPIXEL
*	1 : OP (XOR,SET,ORA)
*   2 : Mode
*	3 : Color
*   4 : SrcX1
*   6 : SrcY1
*--------------------------------------
SETPIXEL		lda CB.Cache+S.CB.M
				bit #S.CB.M.C16
				bne SETPIXEL.C16

SETPIXEL.MONO	>LDYA CB.Cache+S.CB.X1

				jsr DIVMOD7YA
				lsr
				php

				ldy CB.Cache+S.CB.Y1
				clc
				adc BASEL,y
				sta ZPBasePtr
				lda BASEH,y
				sta ZPBasePtr+1

				plp
				ldy #0
				bcs .1

				iny

.1				sta IO.CLRPAGE2,y		Select proper BANK

				lda CB.Cache+S.CB.OP
*				cmp #S.CB.OP.XOR
				beq SETPIXEL.MONO.XOR

				lda CB.Cache+S.CB.COLOR
				bne SETPIXEL.MONO.WHITE
SETPIXEL.MONO.BLACK
				lda (ZPBasePtr)
				and Mono.NMasks,x
				sta (ZPBasePtr)

				rts

SETPIXEL.MONO.WHITE
				lda (ZPBasePtr)
				and #$7f				Clear Color Bit
				ora Mono.Masks,x
				sta (ZPBasePtr)
				rts
SETPIXEL.MONO.XOR
				lda (ZPBasePtr)
				and #$7f				Clear Color Bit
				eor Mono.Masks,x
				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)

				ldx CB.Cache+S.CB.Y1
*--------------------------------------
* Y = PixelX (0,139), X = PixelY (0,191)
*--------------------------------------
SETPIXEL.C16.YX lda DIV7.0,y			PixelX MOD 7 (range 0->19)
				asl						times 2  (range 0->38)
*				clc
				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 pixelX MOD7
				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

				sta IO.SETPAGE2
				
				jsr .81

.10				inx
				iny
				lda Color.Masks,x
				beq .11

				jsr .80

.11				inc ZPBasePtr
				inx
				iny
				lda Color.Masks,x
				beq .12

				sta IO.SETPAGE2
				
				jsr .81

.12				inx
				iny
				lda Color.Masks,x
				beq .88

.80				sta IO.CLRPAGE2
				
.81				and Color.Pixels,y		apply color
				sta ZPTmpByte
				lda (ZPBasePtr)
				and Color.NMasks,x		reset existing pixel, 
				ora ZPTmpByte
				sta (ZPBasePtr)

.88				rts
*--------------------------------------
* GETPIXEL
*--------------------------------------
GETPIXEL		rts
*--------------------------------------
MAN
SAVE usr/src/drv/dhgr.drv.s.pix
LOAD usr/src/drv/dhgr.drv.s
ASM
