Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-10-01 17:30:25 +02:00
parent a84f65a534
commit b70f92a871
9 changed files with 455 additions and 84 deletions

Binary file not shown.

310
DRV/GRAPPLER.DRV.S.txt Normal file
View File

@ -0,0 +1,310 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF drv/grappler.drv
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.e.i
.INB inc/com.i
*--------------------------------------
ZPTmpPtr1 .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 #32 SS
.DA #2 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
L.MSG.DETECT .DA MSG.DETECT
L.MSG.DETECT.OK .DA MSG.DETECT.OK
L.MSG.DETECT.KO .DA MSG.DETECT.KO
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 >STYA ARGS
>LDYA L.MSG.DETECT
>SYSCALL PutS
stz ZPTmpPtr1
lda #$C1
sta ZPTmpPtr1+1
.1 and #$0f
tay
lda A2osX.S,y
bne .3
ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x
lda (ZPTmpPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
bra .4
.3 inc FD.DEV.NAME+3
inc ZPTmpPtr1+1 no match, try next slot....
lda ZPTmpPtr1+1
cmp #$C8
bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL PutS
lda #MLI.E.NODEV Not Found in any slot, exiting
sec
rts
.4 lda ZPTmpPtr1+1
and #$0F
pha
tay
lda #A2osX.S.COM
sta A2osX.S,y
pla
asl
asl
asl
asl
sta DEVSLOTn0
.8 >PUSHW L.MSG.DETECT.OK
>PUSHW L.FD.DEV.NAME
>PUSHBI 2
>SYSCALL PrintF
>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
.9 rts
*--------------------------------------
CS.END
DEVSIG.Offset .HS 05070B0C
DEVSIG.Value .HS 38180114
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
MSG.DETECT .AZ "Orange Grappler Series // Boards"
MSG.DETECT.OK .AZ "Installed As Device : %s\r\n"
MSG.DETECT.KO .AZ "No HW Found."
ARGS .BS 2
*--------------------------------------
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 "lpt1"
*--------------------------------------
* Driver Code
*--------------------------------------
GRAPPLER.STATUS .EQ $C081
GRAPPLER.STATUS.BUSY .EQ %00001000
GRAPPLER.STATUS.NOPAPER .EQ %00000100
GRAPPLER.STATUS.SELECT .EQ %00000010
GRAPPLER.WDATA .EQ $C081
GRAPPLER.STRBL .EQ $C082
GRAPPLER.STRBH .EQ $C084
*--------------------------------------
ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
ZPCount .EQ ZPDRV+4
*--------------------------------------
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 READ
.DA WRITE
.DA 0 end or relocation
*--------------------------------------
STATUS jsr STATUS.CONTROL.Init
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 (ZPBufPtr),y
dey
bpl .2
clc
rts
STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
bne .3
ldy #S.DCB.COM-1
.2 lda DCB,y
sta (ZPBufPtr),y
dey
bpl .2
clc
rts
.3 cmp #S.IOCTL.STATCODE.EOF
bne STATUS.9
lda DIB+S.DIB.S
and #S.DIB.S.OPENED
beq OPEN.E
.8 clc
rts
STATUS.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
CONTROL jsr STATUS.CONTROL.Init
ldy #S.IOCTL.CTRLCODE
lda (ZPIOCTL),y
cmp #S.IOCTL.CTRLCODE.SETDCB
bne STATUS.9
ldy #S.DCB.COM-1
.2 lda (ZPBufPtr),y
sta DCB,y
dey
bpl .2
*--------------------------------------
OPEN lda DIB+S.DIB.S
bit #S.DIB.S.OPENED
beq OPEN.1
OPEN.E lda #MLI.E.OPEN
sec
rts
OPEN.1 lda #S.DIB.S.OPENED
tsb DIB+S.DIB.S
clc
rts
*--------------------------------------
CLOSE lda #S.DIB.S.OPENED
trb DIB+S.DIB.S
clc
rts
*--------------------------------------
READ jsr READ.WRITE.Init
clc
rts
*--------------------------------------
WRITE jsr READ.WRITE.Init
.1 inc ZPCount
bne .2
inc ZPCount+1
beq .8
.2 lda (ZPBufPtr)
inc ZPBufPtr
bne .3
inc ZPBufPtr+1
.3 sta GRAPPLER.WDATA,x
nop
sta GRAPPLER.STRBL,x
nop
nop
sta GRAPPLER.STRBH,x
bra .1
.8 clc
rts
*--------------------------------------
READ.WRITE.Init ldx DEVSLOTn0
STATUS.CONTROL.Init
>STYA ZPIOCTL
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
iny #S.IOCTL.BYTECNT
lda (ZPIOCTL),y
eor #$ff
sta ZPCount
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount+1
rts
*--------------------------------------
DRV.CS.END
*DEVSLOT0n .BS 1
*DEVSLOTCn .BS 1
DEVSLOTn0 .BS 1
*--------------------------------------
DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ
.DA #0,#0,#0
>PSTR "Grappler // Card"
.DA #S.DIB.T.CHAR
.DA #0
.DA K.VER
*--------------------------------------
DCB .DA #S.DCB.T.COM
.DA #0 FLAGS
.DA 0
.DA #0
.DA #0
.DA #0
.DA #0
*--------------------------------------
DRV.END
MAN
SAVE usr/src/drv/grappler.drv.s
ASM

View File

@ -113,7 +113,7 @@ DEVSIG.Value .HS 4848
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
MSG.DETECT .AZ "Apple PIC (Parallel Interface Card)"
MSG.DETECT.OK .AZ "PIC Installed As Device : %s\r\n"
MSG.DETECT.KO .AZ "No PIC Found.\r\n"
MSG.DETECT.KO .AZ "No PIC Found."
ARGS .BS 2
*--------------------------------------
FD.DEV .DA #S.FD.T.CDEV

View File

@ -1,18 +1,19 @@
NEW
AUTO 3,1
*--------------------------------------
LIBGUI.Draw .EQ 4
LIBGUI.SetCursor .EQ 6
LIBGUI.SetCursorPos .EQ 8
LIBGUI.HideCursor .EQ 10
LIBGUI.ShowCursor .EQ 12
LIBGUI.UpdateCursor .EQ 14
LIBGUI.ReadMouse .EQ 16
LIBGUI.GetScreenGC .EQ 18
LIBGUI.WND.Create .EQ 20
LIBGUI.SetCursor .EQ 4
LIBGUI.SetCursorPos .EQ 6
LIBGUI.HideCursor .EQ 8
LIBGUI.ShowCursor .EQ 10
LIBGUI.UpdateCursor .EQ 12
LIBGUI.ReadMouse .EQ 14
LIBGUI.GetScreenGC .EQ 16
LIBGUI.WND.New .EQ 18
LIBJUI.WND.Destroy .EQ 20
LIBGUI.WND.SetProp .EQ 22
LIBGUI.WND.GetProp .EQ 24
LIBGUI.WND.Show .EQ 26
LIBGUI.WND.Paint .EQ 28
*--------------------------------------
C.BLACK .EQ 0
C16.D.BLUE .EQ 1
@ -132,8 +133,9 @@ S.WND.DocW .EQ S.OBJ+32
S.WND.DocH .EQ S.OBJ+34
S.WND.DocX .EQ S.OBJ+36
S.WND.DocY .EQ S.OBJ+38
S.WND.fPaint .EQ S.OBJ+40
*
S.WND .EQ S.OBJ+40
S.WND .EQ S.OBJ+42
*--------------------------------------
S.MBAR.NEXT .EQ 0
S.MBAR.S .EQ 1

View File

@ -11,14 +11,10 @@ NEW
*--------------------------------------
CLIP.YA jsr CB.Get Put CB in cache
CLIP.CB.Cache ldx CB.Cache+S.CB.CMD
bpl CLIP.X
txa
and #$7F
CLIP.CB.Cache lda CB.Cache+S.CB.CMD
and #$7F remove S.CB.CMD.OSD
tax
CLIP.X jmp (J.CLIP-2,x)
jmp (J.CLIP-2,x)
*--------------------------------------
CLIP.Point
clc

View File

@ -1,32 +1,38 @@
NEW
AUTO 3,1
*--------------------------------------
Draw >PULLW ZPCBPtr Get CB
>PULLYA Get GC
DrawToYA jsr OBJ.Get
DrawCBCacheToYA ldx L.CB.Cache
stx ZPCBPtr
ldx L.CB.Cache+1
stx ZPCBPtr+1
DrawCBPtrToYA jsr OBJ.Get
.1 lda (ZPCBPtr)
beq .8
>LDYA ZPCBPtr
jsr CB.Get
cmp #S.CB.CMD.DRAWTEXT2
bne .77
>DEBUG
.77
jsr CLIP.CB.Cache
jsr CB.Get A = CB.CMD
cmp #S.CB.CMD.DRAWTEXT2
bne .2
lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
sta CB.Cache+S.CB.CMD
jsr GFXWrite.CB
bcs .9
.2 jsr CLIP.CB.Cache
bcs .7
ldx CB.Cache+S.CB.CMD
cpx #S.CB.CMD.DRAWLINE
bcc .2 Native DRV Cmd
bcc .6 Native DRV Cmd
jsr Draw.Jmp
bra .7
.2 jsr GFXWrite.CB
.6 jsr GFXWrite.CB
.7 lda (ZPCBPtr) Get Cmd
lsr
@ -276,14 +282,7 @@ DrawLine.IncX lda DX
bra .1
.8 rts
*--------------------------------------
DrawText2 lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
sta CB.Cache+S.CB.CMD
jsr GFXWrite.CB
bcs .9
jsr GFXWrite.CB
DrawText2 jsr GFXWrite.CB
lda CB.Cache+S.CB.SrcPtr
>SYSCALL2 FreeStkObj

View File

@ -72,20 +72,20 @@ WND.Quit lda WND.Screen+S.OBJ.hPARENT
>SYSCALL2 IOCTL
.8 clc
rts
WND.Quit.RTS rts
*--------------------------------------
* F8, X116, Y116, W16, H16
*--------------------------------------
WND.Create ldy WND.Stack.Top
cpy #WND.MAX
bcs .90
>LDYAI S.WND
WND.New >LDYAI S.WND
>SYSCALL2 getmem
bcs .9
bcs WND.Quit.RTS
>STYA ZPWNDPtr
ldy WND.Stack.Top
cpy #WND.MAX
bcs .90
lda #S.OBJ.T.WND
sta (ZPWNDPtr) S.OBJ.T
@ -96,6 +96,13 @@ WND.Create ldy WND.Stack.Top
dey
bne .1
ldy #S.WND.fPaint
lda L.WND.fPaint
sta (ZPWNDPtr),y
iny
lda L.WND.fPaint+1
sta (ZPWNDPtr),y
>PULLA
ldy #S.OBJ.H
sta (ZPWNDPtr),y
@ -146,6 +153,9 @@ WND.Create ldy WND.Stack.Top
.90 lda #E.OOH
.9 >RET 9
*--------------------------------------
WND.Destroy clc
rts
*--------------------------------------
* hWND8, Prop8, Value16
*--------------------------------------
WND.SetProp ldy #3
@ -198,6 +208,9 @@ WND.Show >SYSCALL2 GetMemPtr
jsr GetCBBuf
bcs WND.GetProp.RTS
lda #S.WND.S.ACTIVE
jsr WND.SetStatus
ldy #S.OBJ.Y1
lda (ZPWNDPtr),y
tax
@ -297,20 +310,83 @@ WND.Show >SYSCALL2 GetMemPtr
jsr PutA2CBBuf
>LDYA L.WND.Screen
jsr DrawToYA
jsr DrawCBPtrToYA
lda hCBBuf
>SYSCALL FreeMem
* clc
clc
.9 rts
*--------------------------------------
WND.New clc
rts
*--------------------------------------
WND.Paint >STYA ZPWNDPtr
WND.Paint pha hWND
clc
>SYSCALL2 GetMemPtr
>STYA ZPWNDPtr
ldy #S.WND.fPaint
lda (ZPWNDPtr),y
sta ZPPtr1
iny
lda (ZPWNDPtr),y
sta ZPPtr1+1
pla
jmp (ZPPtr1)
*--------------------------------------
WND.fPaint
* >SYSCALL2 GetMemPtr done by WND.Paint
* >STYA ZPWNDPtr
ldy #S.WND.BGBM+1
lda (ZPWNDPtr),y
bne .1
lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.COLOR
lda #S.CB.OP.SET
sta CB.Cache+S.CB.OP
ldy #S.WND.BGCOLOR
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.COLOR
ldy #S.OBJ.X1
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.X1
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.X1+1
ldy #S.WND.MBAR.Y2
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1+1
ldy #S.OBJ.X2
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.X2
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.X2+1
ldy #S.WND.SBAR.Y1
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1+1
stz S.CB.Y2+2 Ending 0
>LDYA L.WND.Screen
jmp DrawCBCacheToYA
.1 clc
rts
*--------------------------------------
WND.PaintBorders
@ -636,24 +712,22 @@ WND.PaintTopBarBMAtAX
WND.PaintTopBarTitle
jsr CB.Clear
lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
ldy #S.WND.TITLE
lda (ZPWNDPtr),y
pha
iny
lda (ZPWNDPtr),y
ply
ldx hSYSFONB
jsr FON.GetTextSize
lda #S.CB.CMD.DRAWTEXT2
sta CB.Cache+S.CB.CMD
lda #S.CB.OP.SET+S.CB.OP.INVERSE
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
lda hSYSFONB
sta CB.Cache+S.CB.hFont
ldy #S.WND.TITLE
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.TxtPtr
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.TxtPtr+1
jsr GFXWrite.CB
bcs .9
ldy #S.OBJ.W
lda (ZPWNDPtr),y
@ -696,7 +770,7 @@ WND.PaintTopBarTitle
clc
.9 rts
rts
*--------------------------------------
WND.PaintMBar jsr CB.Clear
@ -939,9 +1013,6 @@ WND.SetStatus ldy #S.OBJ.S
sta (ZPWNDPtr),y
rts
*--------------------------------------
WND.Close clc
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.wnd
LOAD usr/src/lib/libgui.s

View File

@ -113,7 +113,6 @@ CS.START cld
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA Draw
.DA SetCursor
.DA SetCursorPos
.DA HideCursor
@ -121,25 +120,17 @@ CS.START cld
.DA UpdateCursor
.DA MOU.ReadMouse
.DA GetScreenGC
.DA WND.Create
.DA WND.New
.DA WND.Destroy
.DA WND.SetProp
.DA WND.GetProp
.DA WND.Show
.DA WND.Paint
L.WND.fPaint .DA WND.fPaint
*--------------------------------------
J.Cmds .DA DrawLine
.DA DrawText2
*--------------------------------------
J.OBJ .DA J.WND
.DA J.MBAR
.DA J.MENU
.DA J.MENUITEM
.DA J.BUT
.DA J.TEXT
*--------------------------------------
J.WND .DA WND.New
.DA WND.Paint
.DA WND.Close
*--------------------------------------
J.MBAR .DA MBAR.New
.DA MBAR.Paint
.DA MBAR.Close

View File

@ -117,7 +117,7 @@ WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.
>PUSHW MouseData+S.MOUSE.Y1
>PUSHWI 280
>PUSHWI 90
>LIBCALL hLIBGUI,LIBGUI.WND.Create
>LIBCALL hLIBGUI,LIBGUI.WND.New
bcs CS.QUIT.RTS
sta hWND
@ -139,6 +139,8 @@ WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.
>LIBCALL hLIBGUI,LIBGUI.HideCursor
lda hWND
>LIBCALL hLIBGUI,LIBGUI.WND.Show
* lda hWND
* >LIBCALL hLIBGUI,LIBGUI.WND.Paint
>LIBCALL hLIBGUI,LIBGUI.ShowCursor
clc