A2osX/DRV/DHGR.DRV.S.txt

435 lines
9.5 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
2015-03-14 21:48:35 +00:00
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/DRV/DHGR.DRV
2015-03-14 21:48:35 +00:00
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/PRODOS.I
.INB /A2OSX.BUILD/INC/IO.I
.INB /A2OSX.BUILD/INC/GFX.EVE.I
2017-11-14 16:57:34 +00:00
.INB /A2OSX.BUILD/INC/LIBGUI.I
2015-03-14 21:48:35 +00:00
*--------------------------------------
2017-11-14 16:57:34 +00:00
ZPCmdPtr .EQ ZPDRV
2017-11-15 07:27:12 +00:00
ZPBasePtr .EQ ZPDRV+2
ZPBMShiftPtr .EQ ZPDRV+4
ZPScrShiftPtr .EQ ZPDRV+6
ZPBMDataPtr .EQ ZPDRV+8
ZPBMMaskPtr .EQ ZPDRV+10
ZPBMSavePtr .EQ ZPDRV+12
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.START cld
2015-06-03 18:30:57 +00:00
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
2015-06-03 18:30:57 +00:00
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL PrintF.YA
2015-06-03 18:30:57 +00:00
lda MACHID
and #MACHID.T
cmp #MACHID.T.IIc
bne .1
lda #$80
sta DSTAT+S.DSTAT.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.DSTAT.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.DSTAT.ST
bmi .3
>LDYA L.MSG.DETECT.80C
.3 >SYSCALL PrintF.YA
2015-06-03 18:30:57 +00:00
clc
rts
2017-11-14 16:57:34 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
CS.END
MSG.DETECT >CSTR "Apple IIe/IIc DHGR Driver.\r\n"
MSG.DETECT.IIC >CSTR "Apple //c detected, Assuming 'Le Chat Mauve' Mode.\r\n"
MSG.DETECT.EVE >CSTR "'Le Chat Mauve EVE' Board Detected.\r\n"
MSG.DETECT.80C >CSTR "No Specific H/W Found, Assuming 80c Mode.\r\n"
2015-06-03 18:30:57 +00:00
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #0
.BS 6
2017-11-14 16:57:34 +00:00
DEV.HEADER.NAME >CSTR "GFX"
.BS 1
2015-06-03 18:30:57 +00:00
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA STATUS
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA CONTROL
.DA A2osX.BADCALL
.DA OPEN
2015-03-14 21:48:35 +00:00
.DA CLOSE
.DA A2osX.BADCALL
2017-11-14 16:57:34 +00:00
.DA WRITE
.DA A2osX.BADCALL
*--------------------------------------
2017-11-14 16:57:34 +00:00
J.Cmds .DA SETPIXEL
2015-03-14 21:48:35 +00:00
.DA GETPIXEL
.DA HLINE
.DA VLINE
.DA FILLRECT
2015-03-14 21:48:35 +00:00
.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
2017-11-23 16:51:52 +00:00
L.SHIFT .DA SHIFT.L1
.DA SHIFT.L2
.DA SHIFT.L3
.DA SHIFT.L4
.DA SHIFT.L5
.DA SHIFT.L6
2017-11-14 16:57:34 +00:00
L.DSTAT .DA DSTAT
2017-11-15 07:27:12 +00:00
L.Color.Pixels .DA Color.Pixels
2015-03-14 21:48:35 +00:00
.DA 0 end or relocation
*--------------------------------------
2017-11-14 16:57:34 +00:00
STATUS >LDYA L.DSTAT
clc
rts
*--------------------------------------
OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A
ldx #0
2017-11-23 16:51:52 +00:00
ldy #1
2017-11-23 16:51:52 +00:00
.1 lda L.SHIFT,x Get relocated LO BYTE
sta Shift.L.LO,y
inx
2017-11-23 16:51:52 +00:00
lda L.SHIFT,x Get relocated HI BYTE
sta Shift.L.HI,y
inx
iny
2017-11-23 16:51:52 +00:00
cpx #12
bne .1
2017-11-23 16:51:52 +00:00
ldx #0 SHIFT.L1 = SHIFT.R6 !!!
ldy #6
.2 lda L.SHIFT,x Get relocated LO BYTE
sta Shift.R.LO,y
2017-11-23 16:51:52 +00:00
inx
lda L.SHIFT,x Get relocated HI BYTE
sta Shift.R.HI,y
2017-11-23 16:51:52 +00:00
inx
dey
bne .2
2015-03-14 21:48:35 +00:00
*--------------------------------------
CONTROL ldy #0
bit DSTAT+S.DSTAT.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
2016-06-07 06:10:18 +00:00
clc
rts
*--------------------------------------
CLOSE clc
rts
2017-11-14 16:57:34 +00:00
*--------------------------------------
WRITE >STYA ZPCmdPtr
2017-11-16 07:12:03 +00:00
sta SETHIRES Make sure SET80STORE active a $2000
2017-11-14 16:57:34 +00:00
sta SET80STORE
2017-11-15 16:29:23 +00:00
lda (ZPCmdPtr) Get Cmd
2017-11-14 16:57:34 +00:00
.1 tax
ldy CB.CmdLen,x
2017-11-15 16:29:23 +00:00
.2 lda (ZPCmdPtr),y
2017-11-14 16:57:34 +00:00
sta CB.Cache,y
dey
bpl .2
2017-11-15 16:29:23 +00:00
2017-11-14 16:57:34 +00:00
.3 jsr .10
sta CLR80STORE
2017-11-16 07:12:03 +00:00
clc
2017-11-14 16:57:34 +00:00
rts
.10 jmp (J.Cmds,x)
*--------------------------------------
* IN:
* Y = LO
2017-11-14 16:57:34 +00:00
* A = HI
* OUT:
* A = DIV
* X = MOD
*--------------------------------------
2017-11-14 16:57:34 +00:00
DIVMOD7YA dec
bmi .2
clc
beq .1
2017-11-15 16:29:23 +00:00
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
2015-03-14 21:48:35 +00:00
*--------------------------------------
* IN:
* Y,A = num1 (16)
* X = num2 (8)
* OUT:
* Y,A = (Y,A) * X
*--------------------------------------
YAMultX stx GBYTE
sty GWORD
sta GWORD+1
ldy #0 Result LO
tya Result HI
bra .3
.1 pha
tya
clc
adc GWORD
tay
pla
adc GWORD+1
.2 asl GWORD
rol GWORD+1
.3 lsr GBYTE
bcs .1
bne .2
rts
*--------------------------------------
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.LBUF
2017-11-23 16:51:52 +00:00
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX
.INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT
*--------------------------------------
2015-06-03 18:30:57 +00:00
DRV.CS.END
*--------------------------------------
.INB /A2OSX.SRC/DRV/DHGR.DRV.T
*--------------------------------------
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
*--------------------------------------
2017-11-23 16:51:52 +00:00
Shift.L.LO .BS 7
Shift.L.HI .BS 7
Shift.R.LO .BS 7
Shift.R.HI .BS 7
*--------------------------------------
2017-11-14 16:57:34 +00:00
CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
.DA S.CB.Y1+1 GETPIXEL
.DA S.CB.X2+1 HLINE
2017-11-15 16:29:23 +00:00
.DA S.CB.Y2+1 VLINE
2017-11-14 16:57:34 +00:00
.DA S.CB.Y2+1 FILLRECT
.DA S.CB.DstPtr+1 BITBLT
.DA S.CB.DstPtr+1 GETRECTBUFSIZE
2017-11-14 16:57:34 +00:00
*--------------------------------------
CB.Cache .BS S.CB
BM.Cache .BS S.BM
2017-11-14 16:57:34 +00:00
*--------------------------------------
LBUF.C1 .BS 1
LBUF.C1.MASK .BS 1 Bits to CLR in VMEM : 11100000 00000000 00111111
LBUF.C1.DATA .BS 1 Bits to SET/ORA/XOR : 000ccccc cccccccc cc000000
LBUF.C2 .BS 1 C1 C2
LBUF.C2.MASK .BS 1
LBUF.C2.DATA .BS 1
LBUF.MASK .BS 80
LBUF.DATA .BS 80
*--------------------------------------
BLT.BMDataPtr .BS 2
BLT.BMMaskPtr .BS 2
BLT.DX .BS 2
BLT.DY .BS 1
2017-11-20 06:59:59 +00:00
BLT.BMBitOfs .BS 1
BLT.BMBitOfsL .BS 1
2017-11-20 06:59:59 +00:00
BLT.SCRBitOfs .BS 1
BLT.ScrColIdx .BS 1
2017-11-20 06:59:59 +00:00
*--------------------------------------
2015-03-23 17:09:21 +00:00
GBYTE .BS 1
GWORD .BS 2
2015-03-14 21:48:35 +00:00
*--------------------------------------
2017-11-14 16:57:34 +00:00
DSTAT .DA #0
.DA #0,#0,#0
>PSTR "Apple II DHGR"
.BS 3
.DA #S.DSTAT.T.GFX
.DA #0
2017-11-20 06:59:59 +00:00
.DA #0
.DA #91
*--------------------------------------
DEVSTAT.MODES .DA #S.CB.MODE.MONO+S.CB.MODE.C16
DEVSTAT.W .DA 560 X.SIZE
DEVSTAT.H .DA 192 Y.SIZE
2016-06-22 21:12:09 +00:00
*--------------------------------------
2015-03-14 21:48:35 +00:00
MAN
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S
2015-03-14 21:48:35 +00:00
ASM