NEW PREFIX AUTO 4,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 lda #$80 sta DCB+S.DCB.GFX.S $80=//c >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 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 >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 #191 lda #0 .4 ldy BASEL,x sty ZPPtr ldy BASEH,x sty ZPPtr+1 sta SETPAGE2 ldy #39 .5 sta (ZPPtr),y dey bpl .5 sta CLRPAGE2 ldy #39 .6 sta (ZPPtr),y dey bpl .6 dex bpl .4 rts *-------------------------------------- CS.END MSG.DETECT .AZ "Apple IIe/IIc DHGR Driver." MSG.DETECT.IIC .AZ "Apple //c detected, Assuming 'Le Chat Mauve' Mode." MSG.DETECT.EVE .AZ "'Le Chat Mauve EVE' Board Detected." MSG.DETECT.80C .AZ "No Specific H/W Found, Assuming 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 ldx #0 DEV.ID in A .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 #1 .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 cpx #12 bne .1 ldx #0 SHIFT.L1 = SHIFT.R6 !!! ldy #6 .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 bne .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 bmi .1 //c,EVE mode ldy #CONTROL.LCM-CONTROL.80C .1 ldx CONTROL.SWTCHES,y bmi .8 Ending $ff sta $C000,x iny bra .1 .8 *-------------------------------------- CLOSE 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.SWTCHES * sta CLRTEXT * sta CLRMIXED * sta SETHIRES * sta CLR80STORE * sta CLRPAGE2 * sta SETIOUDIS CONTROL.80C * sta CLRMIXED STA $CO52 ;Full Screen * sta SETHIRES STA $C057 ;HIRES * sta CLRTEXT STA $C050 ;Graphics * sta CLR80DISP STA $C00C ;80 Columns OFF * sta SETDHIRES STA $C05E ;AN3 OFF * sta CLRDHIRES STA $C05F ;AN3 ON * sta SETDHIRES STA $C05E ;AN3 OFF * sta CLRDHIRES STA $C05F ;AN3 ON * sta SET80DISP STA $C00D ;80 Columns ON * sta SETDHIRES STA $C05E ;AN3 OFF * sta CLRDHIRES STA $C05F ;AN3 ON * sta SETDHIRES STA $C05E ;AN3 OFF .DA #CLRTEXT * .DA #CLRMIXED .DA #SETHIRES * .DA #CLR80STORE * .DA #CLRPAGE2 .DA #SETIOUDIS .DA #CLR80DISP .DA #SETDHIRES .DA #CLRDHIRES .DA #SETDHIRES .DA #CLRDHIRES .DA #SET80DISP .DA #SETDHIRES .DA #CLRDHIRES .DA #SETDHIRES .DA #$FF CONTROL.LCM * sta CLRTEXT * sta CLRPAGE2 * sta CLRMIXED * sta SETHIRES * sta CLRAN2 * sta CLR80DISP * sta SETDHIRES * sta CLRDHIRES * sta SET80DISP * sta SETDHIRES * sta CLRDHIRES * sta SETDHIRES .DA #CLRTEXT * .DA #CLRMIXED .DA #SETHIRES * .DA #CLR80STORE * .DA #CLRPAGE2 .DA #SETIOUDIS .DA #CLRAN2 .DA #CLR80DISP .DA #SETDHIRES .DA #CLRDHIRES .DA #SET80DISP .DA #SETDHIRES .DA #CLRDHIRES .DA #SETDHIRES .DA #$ff *-------------------------------------- Shift.L.LO .BS 7 Shift.L.HI .BS 7 Shift.R.LO .BS 7 Shift.R.HI .BS 7 *-------------------------------------- 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 .BS 1 STATUS .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