NEW PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 .TF DRV/DHGR.DRV *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/MLI.I .INB INC/IO.I .INB INC/GFX.I .INB INC/GFX.EVE.I .INB INC/GUI.I .INB INC/LIBGUI.I *-------------------------------------- ZPCmdPtr .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 *-------------------------------------- * 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 L.MSG.DETECT.IIC .DA MSG.DETECT.IIC L.MSG.DETECT.EVE .DA MSG.DETECT.EVE L.MSG.DETECT.80C .DA MSG.DETECT.80C .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 DSTAT+S.DIB.ST $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 DSTAT+S.DIB.ST 0=80C,$ff=EVE .2 stx $400 Set back Aux $400 sta CLRPAGE2 sty $400 Set back Main $400 sta CLR80STORE plp >LDYA L.MSG.DETECT.EVE bit DSTAT+S.DIB.ST bmi .3 >LDYA L.MSG.DETECT.80C .3 >SYSCALL puts clc 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) *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) .DA #0 .BS 6 DEV.HEADER.NAME .AZ "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 .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.DSTAT .DA DSTAT L.Color.Pixels .DA Color.Pixels .DA 0 end or relocation *-------------------------------------- STATUS >LDYA L.DSTAT clc rts *-------------------------------------- OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A 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 ldy #0 bit DSTAT+S.DIB.ST 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 lda #3 sta A2osX.ASCREEN clc rts *-------------------------------------- CLOSE clc rts *-------------------------------------- WRITE >STYA ZPCmdPtr sta SETHIRES Make sure SET80STORE active at $2000 sta SET80STORE lda (ZPCmdPtr) Get Cmd .1 tax ldy CB.CmdLen,x .2 lda (ZPCmdPtr),y sta CB.Cache,y dey bpl .2 .3 jsr .10 sta CLRPAGE2 sta CLR80STORE 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/BIN/DRV/DHGR.DRV.S.BLT .INB USR/SRC/BIN/DRV/DHGR.DRV.S.LBUF .INB USR/SRC/BIN/DRV/DHGR.DRV.S.LINE .INB USR/SRC/BIN/DRV/DHGR.DRV.S.PIX .INB USR/SRC/BIN/DRV/DHGR.DRV.S.RECT *-------------------------------------- DRV.CS.END *-------------------------------------- .INB USR/SRC/BIN/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 *-------------------------------------- DSTAT .DA #0 .DA #0,#0,#0 >PSTR "Apple II DHGR" .BS 3 .DA #S.DIB.T.GFX .DA #0 .DA #0 .DA #91 *-------------------------------------- .DA #S.CB.M.MONO+S.CB.M.C16 .DA #0 S .DA 560 W .DA 192 H *-------------------------------------- MAN SAVE USR/SRC/BIN/DRV/DHGR.DRV.S ASM