NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF DRV/GUI/DHGR.DRV *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/MLI.I .INB INC/MLI.E.I .INB INC/IO.I .INB INC/GFX.I .INB INC/GFX.EVE.I *-------------------------------------- ZPPtr .EQ ZPDRV *-------------------------------------- * 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 0 .DA 0 .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- L.MSG.DETECT .DA MSG.DETECT L.MSG.DETECT.IIC .DA MSG.DETECT.IIC L.MSG.DETECT.EVE .DA MSG.DETECT.EVE L.MSG.DETECT.80C .DA MSG.DETECT.80C L.DRV.CS.START .DA DRV.CS.START L.FD.DEV .DA FD.DEV L.FD.DEV.NAME .DA FD.DEV.NAME .DA 0 End Of Reloc Table *-------------------------------------- Dev.Detect >LDYA L.MSG.DETECT >SYSCALL puts lda MACHID and #MACHID.T cmp #MACHID.T.IIc bne .1 * stz DCB+S.DCB.GFX.S //c : 80c Mode >LDYA L.MSG.DETECT.IIC bra .3 .1 php sei sta SET80STORE sta SETPAGE2 ldx $400 Save Aux $400 lda #$ff Make sure !=1 for comparing later sta $400 sta CLRPAGE2 ldy $400 Save Main $400 lda #$01 Select Foreground/BKgrnd Colors sta TXT16.ON Activate 16 color mode sta $400 Store something in Main sta SETPAGE2 eor $400 read back AUX, If EVE, must be F/BG colors bne .2 dec sta DCB+S.DCB.GFX.S 0=80C,$ff=EVE .2 stx $400 Set back Aux $400 sta CLRPAGE2 sty $400 Set back Main $400 sta TXT16.OFF plp >LDYA L.MSG.DETECT.EVE bit DCB+S.DCB.GFX.S bmi .3 >LDYA L.MSG.DETECT.80C .3 >SYSCALL puts >PUSHWI DRV.END >PUSHWI DRV.CS.END-DRV.CS.START >PUSHWI DRV.CS.START >LDYA L.DRV.CS.START >SYSCALL InsDrv bcs .9 >STYA FD.DEV+S.FD.DEV.DRVPTR >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV bcs .9 php sei >LDYAI $4000 >STYA $800 sta SETWRITEAUX >STYA $800 sta CLRWRITEAUX sta SETHIRES sta SET80STORE jsr ClrScr plp .9 rts *-------------------------------------- ClrScr ldx #0 txa lda #0 .1 ldy BASEL,x sty ZPPtr ldy BASEH,x sty ZPPtr+1 sta SETPAGE2 jsr .2 sta CLRPAGE2 jsr .2 inx cpx #192 bne .1 rts .2 ldy #39 .3 sta (ZPPtr),y dey bpl .3 rts *-------------------------------------- CS.END MSG.DETECT .AZ "Apple IIe/IIc DHGR Driver." MSG.DETECT.IIC .AZ "Apple //c : 'LCM Feline/80c' Mode." MSG.DETECT.EVE .AZ "Apple //e : 'LCM Eve' Board Detected." MSG.DETECT.80C .AZ "No Specific H/W Found, 'Video7 80c' Mode." *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- FD.DEV .DA #S.FD.T.CDEV .DA #0 HANDLER .DA #0 BUSID .DA #0 DEVID .DA 0 BUSPTR .BS 2 DRVPTR .DA 0 DCBPTR .DA 0 BUFPTR FD.DEV.NAME .AZ "GFX" *-------------------------------------- * Driver Code *-------------------------------------- ZPIOCTL .EQ ZPDRV ZPBasePtr .EQ ZPDRV+2 ZPBMShiftPtr .EQ ZPDRV+4 ZPScrShiftPtr .EQ ZPDRV+6 ZPBMDataPtr .EQ ZPDRV+8 ZPBMMaskPtr .EQ ZPDRV+10 ZPBMSavePtr .EQ ZPDRV+12 *-------------------------------------- ZPTmpWord .EQ ZPDRV+14 *-------------------------------------- LBUF.C1 .EQ ZPDRV+16 LBUF.C1.MASK .EQ ZPDRV+17 Bits to CLR in VMEM : 11100000 00000000 00111111 LBUF.C1.DATA .EQ ZPDRV+18 Bits to SET/ORA/XOR : 000ccccc cccccccc cc000000 LBUF.C2 .EQ ZPDRV+19 C1 C2 LBUF.C2.MASK .EQ ZPDRV+20 LBUF.C2.DATA .EQ ZPDRV+21 *-------------------------------------- BLT.BMMaskPtr .EQ ZPDRV+22 BLT.BMDataPtr .EQ ZPDRV+24 BLT.BMBitOfs .EQ ZPDRV+26 BLT.BMBitOfsL .EQ ZPDRV+27 BLT.ScrBitOfs .EQ ZPDRV+28 BLT.ScrColIdx .EQ ZPDRV+29 BLT.CMASK .EQ ZPDRV+30 *-------------------------------------- ZPTmpByte .EQ ZPDRV+31 *-------------------------------------- DRV.CS.START cld jmp (.1,x) .1 .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 *-------------------------------------- J.Cmds .DA SETPIXEL .DA GETPIXEL .DA HLINE .DA VLINE .DA FILLRECT .DA BITBLT .DA GETRECTBUFSIZE *-------------------------------------- J.LBUF.DrawAtY .DA LBUF.DrawAtY.XOR .DA LBUF.DrawAtY.SET .DA LBUF.DrawAtY.ORA .DA $ffff .DA LBUF.DrawAtY.AND.XOR .DA LBUF.DrawAtY.AND.SET .DA LBUF.DrawAtY.AND.ORA L.SHIFT .DA SHIFT.L1 .DA SHIFT.L2 .DA SHIFT.L3 .DA SHIFT.L4 .DA SHIFT.L5 .DA SHIFT.L6 L.Color.Pixels .DA Color.Pixels .DA 0 end or relocation *-------------------------------------- STATUS >STYA ZPIOCTL ldy #S.IOCTL.BUFPTR lda (ZPIOCTL),y sta ZPBasePtr iny lda (ZPIOCTL),y sta ZPBasePtr+1 ldy #S.IOCTL.STATCODE lda (ZPIOCTL),y beq .1 cmp #S.IOCTL.STATCODE.GETDIB bne STATUS.DCB ldy #S.DIB-1 .HS 2C bit abs .1 ldy #3 .2 lda DIB,y sta (ZPBasePtr),y dey bpl .2 clc rts STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB bne STATUS.9 ldy #S.DCB.GFX-1 .2 lda DCB,y sta (ZPBasePtr),y dey bpl .2 clc rts STATUS.9 lda #MLI.E.BADCTL sec rts *-------------------------------------- OPEN tax DEV.ID in A lda #S.DIB.S.OPENED bit DIB+S.DIB.S bne CLOSE.IOE txa ldx #0 .10 ldy A2osX.SCRNDEVS,x beq .20 inx cpx #K.SCR.MAX bne .10 lda #E.OOH sec rts .20 sta A2osX.SCRNDEVS,x sta DCB+S.DCB.GFX.DEVID lda #S.DIB.S.OPENED tsb DIB+S.DIB.S ldx #0 ldy #0 .1 lda L.SHIFT,x Get relocated LO BYTE sta Shift.L.LO,y inx lda L.SHIFT,x Get relocated HI BYTE sta Shift.L.HI,y inx iny cpy #6 bne .1 ldx #0 SHIFT.L1 = SHIFT.R6 !!! ldy #5 .2 lda L.SHIFT,x Get relocated LO BYTE sta Shift.R.LO,y inx lda L.SHIFT,x Get relocated HI BYTE sta Shift.R.HI,y inx dey bpl .2 *-------------------------------------- CONTROL lda DCB+S.DCB.GFX.DEVID NON STANDARD cmp A2osX.ASCREEN beq .8 sta A2osX.ASCREEN ldy #0 bit DCB+S.DCB.GFX.S bpl .1 //c,EVE mode ldy #CONTROL.EVE-CONTROL.80C .1 ldx CONTROL.80C,y beq .8 Ending 0 sta $C000,x iny bra .1 .8 clc rts CLOSE.IOE lda #MLI.E.IO sec rts *-------------------------------------- CLOSE lda #S.DIB.S.OPENED bit DIB+S.DIB.S beq CLOSE.IOE trb DIB+S.DIB.S ldx #0 lda DCB+S.DCB.GFX.DEVID .1 cmp A2osX.SCRNDEVS,x bne .2 stz A2osX.SCRNDEVS,x .2 inx cpx #K.SCR.MAX bne .1 clc rts *-------------------------------------- WRITE >STYA ZPIOCTL NON STANDARD sta SET80STORE lda (ZPIOCTL) Get Cmd .1 tax ldy CB.CmdLen,x .2 lda (ZPIOCTL),y sta CB.Cache,y dey bpl .2 .3 jsr .10 clc rts .10 jmp (J.Cmds,x) *-------------------------------------- * IN: * Y = LO * A = HI * OUT: * A = DIV * X = MOD *-------------------------------------- DIVMOD7YA dec bmi .2 clc beq .1 lda DIV7.512,y adc #$49 ldx MOD7.512,y rts .1 lda DIV7.256,y adc #$24 ldx MOD7.256,y rts .2 lda DIV7.0,y ldx MOD7.0,y rts *-------------------------------------- * IN: * Y,A = num1 (16) * X = num2 (8) * OUT: * Y,A = (Y,A) * X *-------------------------------------- YAMultX stx ZPTmpByte sty ZPTmpWord sta ZPTmpWord+1 ldy #0 Result LO tya Result HI bra .3 .1 pha tya clc adc ZPTmpWord tay pla adc ZPTmpWord+1 .2 asl ZPTmpWord rol ZPTmpWord+1 .3 lsr ZPTmpByte bcs .1 bne .2 rts *-------------------------------------- .INB USR/SRC/DRV/DHGR.DRV.S.BLT .INB USR/SRC/DRV/DHGR.DRV.S.LBUF .INB USR/SRC/DRV/DHGR.DRV.S.LINE .INB USR/SRC/DRV/DHGR.DRV.S.PIX .INB USR/SRC/DRV/DHGR.DRV.S.RECT *-------------------------------------- DRV.CS.END *-------------------------------------- .INB USR/SRC/DRV/DHGR.DRV.G *-------------------------------------- CONTROL.80C .DA #SETIOUDIS .DA #CLRTEXT .DA #SETHIRES .DA #CLR80DISP .DA #SETAN3 .DA #CLRAN3 .DA #SETAN3 .DA #CLRAN3 .DA #SET80DISP .DA #SETAN3 .DA #CLRAN3 .DA #SETAN3 .DA #0 CONTROL.EVE .DA #SETIOUDIS .DA #CLRTEXT .DA #SETHIRES .DA #HR1.OFF .DA #HR2.ON .DA #HR3.ON .DA #0 *-------------------------------------- Shift.L.LO .BS 6 Shift.L.HI .BS 6 Shift.R.LO .BS 6 Shift.R.HI .BS 6 *-------------------------------------- CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.Y1+1 GETPIXEL .DA S.CB.X2+1 HLINE .DA S.CB.Y2+1 VLINE .DA S.CB.Y2+1 FILLRECT .DA S.CB.DstPtr+1 BITBLT .DA S.CB.DstPtr+1 GETRECTBUFSIZE *-------------------------------------- CB.Cache .BS S.CB BM.Cache .BS S.BM *-------------------------------------- LBUF.MASK .BS 81 81 because of sta LBUF.DATA+1,x!!! LBUF.DATA .BS 81 *-------------------------------------- DIB .DA #0 .DA #0,#0,#0 >PSTR "Apple II DHGR" .BS 3 .DA #S.DIB.T.GFX .DA #0 .DA K.VER *-------------------------------------- DCB .DA #S.DCB.T.GFX .BS 1 DEV.ID .DA #0 S.DCB.GFX.S default to 0 .DA #S.CB.M.MONO+S.CB.M.C16 F .DA 560 W .DA 192 H *-------------------------------------- DRV.END .LIST ON DRV.CS.SIZE .EQ DRV.CS.END-DRV.CS.START DRV.SIZE .EQ DRV.END-DRV.CS.START .LIST OFF MAN SAVE USR/SRC/DRV/DHGR.DRV.S ASM