PR#3 PREFIX /A2OSX.BUILD LOMEM $A00 INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BUILD/DRV/DHGR.DRV *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/IO.I .INB /A2OSX.BUILD/INC/LIBGUI.I *-------------------------------------- ZPCmdPtr .EQ ZPDRV ZPBase .EQ ZPDRV+2 ZPCount .EQ ZPDRV+4 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp Dev.Detect cld,jmp abs=DRV .DA #$61 6502,Level 1 (65c02) .DA #1 DRV Layout Version 1 .DA 0 .DA CS.END-CS.START Code Length .DA DEV.HEADER-CS.START Device Header Offset .DA DRV.CS.START-CS.START Driver Code Offset .DA DRV.CS.END-DRV.CS.START Drv Code Length *-------------------------------------- * Relocation Table *-------------------------------------- L.MSG.DETECT .DA MSG.DETECT .DA 0 End Of Reloc Table *-------------------------------------- Dev.Detect >LDYA L.MSG.DETECT >SYSCALL PrintF.YA clc rts *-------------------------------------- CS.END MSG.DETECT >CSTR "Apple IIe/IIc DHGR Driver.\r\n" *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) .DA #0 .BS 6 DEV.HEADER.NAME >CSTR "GFX" .BS 1 *-------------------------------------- * Driver Code *-------------------------------------- DRV.CS.START .DA STATUS .DA A2osX.BADCALL .DA A2osX.BADCALL .DA A2osX.BADCALL .DA CONTROL .DA A2osX.BADCALL .DA OPEN .DA CLOSE .DA A2osX.BADCALL .DA WRITE .DA A2osX.BADCALL *-------------------------------------- J.Cmds .DA SETPIXEL .DA GETPIXEL .DA HLINE .DA VLINE .DA FILLRECT .DA BITBLT *-------------------------------------- L.DSTAT .DA DSTAT L.DIV7.0 .DA DIV7.0 .DA DIV7.256 .DA DIV7.512 L.MOD7.0 .DA MOD7.0 .DA MOD7.256 .DA MOD7.512 .DA 0 end or relocation *-------------------------------------- STATUS >LDYA L.DSTAT clc rts *-------------------------------------- OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A ldy #0 ldx #0 .1 lda L.DIV7.0,y sta DIV7.lo,x lda L.MOD7.0,y sta MOD7.lo,x iny lda L.DIV7.0,y sta DIV7.hi,x lda L.MOD7.0,y sta MOD7.hi,x iny inx cpx #3 bne .1 .8 clc rts *-------------------------------------- CONTROL sta CLRTEXT sta CLRMIXED sta SETHIRES sta CLR80STORE sta CLRPAGE2 sta SETIOUDIS sta SETDHIRES * sta CLR80DISP * sta SETDHIRES * sta CLRDHIRES * sta SET80DISP * sta SETDHIRES * sta CLRDHIRES * sta SETDHIRES lda #3 sta A2osX.ASCREEN clc rts *-------------------------------------- CLOSE clc rts *-------------------------------------- WRITE >STYA ZPCmdPtr sta SET80STORE lda (ZPCmdPtr) .1 tax ldy CB.CmdLen,x .2 lda (ZPBase),y sta CB.Cache,y dey bpl .2 lda CB.CmdLen,x clc adc ZPCmdPtr sta ZPCmdPtr bcc .3 inc ZPCmdPtr+1 .3 jsr .10 lda (ZPCmdPtr) bne .1 sta CLR80STORE .8 clc rts .10 jmp (J.Cmds,x) *-------------------------------------- .INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE .INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT .INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT *-------------------------------------- LBUF.SetBounds1YA jsr DIVMOD7YA A=DIV, X=MOD sta LBUF.C1 tay lda Mono.Head,x sta LBUF.AND,y rts *-------------------------------------- LBUF.SetBounds2YA jsr DIVMOD7YA cmp LBUF.C1 A=DIV, X=MOD beq .2 sta LBUF.C2 tay lda Mono.Tail,x sta LBUF.AND,y lda #0 .1 dey cpy LBUF.C1 beq .8 sta LBUF.AND,y bra .1 .2 and LBUF.C1 sta LBUF.C2 tay lda Mono.Tail,x sta LBUF.AND,y .8 rts *-------------------------------------- LBUF.DrawAtY lda BASEL,y setup line Base Ptr sta ZPBase lda BASEH,y sta ZPBase+1 ldy LBUF.C1 y C1->C2 .1 ldx COL.BANK,y sta $C000,x lda (ZPBase),y and LBUF.AND,y ora LBUF.ORA,y sta (ZPBase),y iny cpy LBUF.C2 bcs .1 rts *-------------------------------------- * IN: * Y = LO * A = HI * OUT: * A = DIV * X = MOD *-------------------------------------- DIVMOD7YA dec bne DIVMOD7Y2 beq DIVMOD7Y1 DIVMOD7Y0 lda DIV7.0,y ldx MOD7.0,y rts DIVMOD7Y1 lda DIV7.256,y clc adc #$24 ldx MOD7.256,y rts DIVMOD7Y2 lda DIV7.512,y clc adc #$49 ldx MOD7.512,y rts *-------------------------------------- DRV.CS.END *-------------------------------------- .INB /A2OSX.SRC/DRV/DHGR.DRV.T *-------------------------------------- CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.Y1+1 GETPIXEL .DA S.CB.X2+1 HLINE .DA S.CB.X2+1 VLINE .DA S.CB.Y2+1 FILLRECT .DA S.CB.DstPtr+1 BITBLT *-------------------------------------- CB.Cache .BS S.CB *-------------------------------------- DIV7.lo .BS 3 DIV7.hi .BS 3 MOD7.lo .BS 3 MOD7.hi .BS 3 *-------------------------------------- LBUF.C1 .BS 1 LBUF.C2 .BS 1 LBUF.ORA .BS 80 LBUF.AND .BS 80 *-------------------------------------- XDIV7 .BS 1 XMOD7 .BS 1 XCOL7 .BS 1 GBYTE .BS 1 *-------------------------------------- DSTAT .DA #0 .DA #0,#0,#0 >PSTR "Apple II DHGR" .BS 3 .DA #S.DSTAT.T.GFX .DA #0 .DA $0900 *-------------------------------------- DEVSTAT.MODES .DA #S.CB.MODE.MONO+S.CB.MODE.C16 DEVSTAT.W .DA 560 X.SIZE DEVSTAT.H .DA 192 Y.SIZE *-------------------------------------- MAN SAVE /A2OSX.SRC/DRV/DHGR.DRV.S ASM