A2osX/DRV/DHGR.DRV.S.txt
2020-06-09 15:40:21 +02:00

518 lines
10 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,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/mli.e.i
.INB inc/io.i
.INB inc/gfx.i
.INB inc/gfx.eve.i
*--------------------------------------
ZPPtr .EQ ZPBIN
*--------------------------------------
* 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
*--------------------------------------
L.SHIFT .DA SHIFT.L1
.DA SHIFT.L2
.DA SHIFT.L3
.DA SHIFT.L4
.DA SHIFT.L5
.DA SHIFT.L6
.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
>PUSHW L.FD.DEV.NAME
>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
*--------------------------------------
DrvReloc lda FD.DEV+S.FD.DEV.DRVPTR
sec
sbc #DRV.CS.START
sta ZPPtr
lda FD.DEV+S.FD.DEV.DRVPTR+1
sbc /DRV.CS.START
sta ZPPtr+1
ldx #0
ldy #0
.1 lda L.SHIFT,x Get relocated LO BYTE
clc
adc ZPPtr
sta Shift.L.LO,y
inx
lda L.SHIFT,x Get relocated HI BYTE
adc ZPPtr+1
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
clc
adc ZPPtr
sta Shift.R.LO,y
inx
lda L.SHIFT,x Get relocated HI BYTE
adc ZPPtr+1
sta Shift.R.HI,y
inx
dey
bpl .2
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
* .DA $ffff
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
lda A2osX.SCRNDEVS+9
beq .1
lda #E.OOH
sec
rts
.1 stx A2osX.SCRNDEVS+9
stx DCB+S.DCB.GFX.DEVID
lda #S.DIB.S.OPENED
tsb DIB+S.DIB.S
*--------------------------------------
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
stz A2osX.SCRNDEVS+9
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