mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-26 13:49:18 +00:00
440 lines
9.7 KiB
Plaintext
440 lines
9.7 KiB
Plaintext
NEW
|
||
PREFIX /A2OSX.BUILD
|
||
AUTO 4,1
|
||
.LIST OFF
|
||
.OP 65C02
|
||
.OR $2000
|
||
.TF DRV/DHGR.DRV
|
||
*--------------------------------------
|
||
.INB INC/MACROS.I
|
||
.INB INC/A2OSX.I
|
||
.INB INC/PRODOS.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 /A2OSX.SRC/DRV/DHGR.DRV.S.BLT
|
||
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.LBUF
|
||
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE
|
||
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX
|
||
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT
|
||
*--------------------------------------
|
||
DRV.CS.END
|
||
*--------------------------------------
|
||
.INB /A2OSX.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
|
||
*--------------------------------------
|
||
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 /A2OSX.SRC/DRV/DHGR.DRV.S
|
||
ASM
|