Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-07-01 17:40:32 +02:00
parent db6ce4e4cf
commit 12231d6fec
4 changed files with 266 additions and 154 deletions

Binary file not shown.

View File

@ -134,28 +134,26 @@ CS.QUIT lda hFont
clc
rts
*--------------------------------------
LoadResources bra .1
>PUSHWZ Aux type
>PUSHBI $CC Type
LoadResources >PUSHW L.FONTFILE
>PUSHBI O.RDONLY
>LDYA L.FONTFILE
>PUSHBI $CC Type
>PUSHWZ Aux type
>SYSCALL LoadStkObj
bcs .9
stx hFont
>PUSHWZ Aux type
>PUSHBI $CC Type
>PUSHW L.FONTFILEB
>PUSHBI O.RDONLY
>LDYA L.FONTFILEB
>PUSHBI $CC Type
>PUSHWZ Aux type
>SYSCALL LoadStkObj
bcs .9
stx hFontb
.1 >PUSHWZ Aux type
>PUSHBI $CB Type
>PUSHW L.PIXFILE
>PUSHBI O.RDONLY
>LDYA L.PIXFILE
>PUSHBI $CB Type
>PUSHWZ Aux type
>SYSCALL LoadStkObj
bcs .9
stx CB.PIX+S.CB.SrcPtr
@ -169,9 +167,11 @@ GFX.Open >PUSHBI 0
sta hDevGFX
.9 rts
*--------------------------------------
GFX.Write.YA >PUSHYA
GFX.Write.YA pha
>PUSHB hDevGFX
>PUSHBI IOCTL.WRITE
lda hDevGFX
pla
>PUSHYA
>SYSCALL IOCTL
rts
*--------------------------------------

View File

@ -14,25 +14,18 @@ GBYTE .EQ ZPDRV+17
GBYTE2 .EQ ZPDRV+18
GWORD .EQ ZPDRV+20
TXTPTR .EQ ZPDRV+22
*--------------------------------------
* Y,A = Ptr to S.CB in MAIN
*--------------------------------------
X.OSD >STYA ZPCmdPtr
>STYA TXTPTR
ldy #S.CB-1
.10 jsr SHARED.TXTPTR.GetY
sta CB.Cache,y
dey
bpl .10
ldy CB.Cache+S.CB.DstPtr
X.OSD ldy CB.Cache+S.CB.DstPtr
lda CB.Cache+S.CB.DstPtr+1
bne .11 Ptr To Aux
tya hBM in Aux
beq .8 no Src BM
beq .7 no Src BM
>SYSCALL2 GetMemPtr
jsr K.GetMemPtr
.11 >STYA ZPDstBMPtr
ldx #0
.1 lda (ZPDstBMPtr)
@ -44,21 +37,22 @@ X.OSD >STYA ZPCmdPtr
.2 inx
cpx #S.BM
bne .1
.8 ldx CB.Cache+S.CB.CMD
jmp (J.Cmds,x)
.7 ldx CB.Cache+S.CB.CMD
jmp (.8,x)
*--------------------------------------
J.Cmds .DA SETPIXEL
.DA GETPIXEL
.DA HLINE
.DA VLINE
.DA FILLRECT
.DA BITBLT
.DA GETRECTBUFSIZE
.8 .DA OSD.SETPIXEL
.DA OSD.GETPIXEL
.DA OSD.HLINE
.DA OSD.VLINE
.DA OSD.FILLRECT
.DA OSD.BITBLT
.DA OSD.GETRECTBUFSIZE
.DA $ffff DRAWLINE
.DA DRAWTEXT
.DA GETTEXTSIZE
.DA OSD.DRAWTEXT
.DA OSD.GETTEXTSIZE
*--------------------------------------
SETPIXEL >LDYA CB.Cache+S.CB.Y1
OSD.SETPIXEL >LDYA CB.Cache+S.CB.Y1
ldx DstBM.Cache+S.BM.RowBytes
jsr YAMultX
pha
@ -71,8 +65,9 @@ SETPIXEL >LDYA CB.Cache+S.CB.Y1
sta ZPDstBMPtr+1
lda CB.Cache+S.CB.M
bit #S.CB.M.C16
bne SETPIXEL.C16
SETPIXEL.MONO lda CB.Cache+S.CB.X1
bne OSD.SETPIXEL.C16
OSD.SETPIXEL.M lda CB.Cache+S.CB.X1
pha
and #$7 MOD 7
tax
@ -96,27 +91,27 @@ SETPIXEL.MONO lda CB.Cache+S.CB.X1
lda CB.Cache+S.CB.COLOR
bne .1
lda (ZPDstBMPtr)
and Mono.NMasks,x
and Mono8.NMasks,x
sta (ZPDstBMPtr)
rts
.1 lda (ZPDstBMPtr)
ora Mono.Masks,x
ora Mono8.Masks,x
sta (ZPDstBMPtr)
rts
.2 lda (ZPDstBMPtr)
eor Mono.Masks,x
eor Mono8.Masks,x
sta (ZPDstBMPtr)
rts
SETPIXEL.C16
OSD.SETPIXEL.C16
*--------------------------------------
GETPIXEL
OSD.GETPIXEL
*--------------------------------------
HLINE
OSD.HLINE
*--------------------------------------
VLINE
OSD.VLINE
*--------------------------------------
FILLRECT
OSD.FILLRECT
*--------------------------------------
* BitBlt
* S.CB.X1 : SrcX1 in bitmap/mask
@ -128,14 +123,14 @@ FILLRECT
* S.CB.DstY : Destination Y (screen)
* S.CB.SrcPtr : pointer to S.BM
* S.CB.SrcPtr+1 = 0, hMem in S.CB.SrcPtr
* S.CB.DstPtr : pointer to Save Buffer
* S.CB.SrcPtr+1 = 0, hMem in S.CB.SrcPtr
* S.CB.DstPtr : pointer to Save Buffer
*--------------------------------------
BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
bne BITBLT.1
OSD.BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
bne OSD.BITBLT.1
tya
jsr K.GetMemPtr
BITBLT.1 >STYA ZPSrcBMPtr
>SYSCALL2 GetMemPtr
OSD.BITBLT.1 >STYA ZPSrcBMPtr
*--------------------------------------
@ -146,9 +141,9 @@ BITBLT.1 >STYA ZPSrcBMPtr
* Out:
* S.CB.DstPtr : Buffer Size (in bytes)
*--------------------------------------
GETRECTBUFSIZE
OSD.GETRECTBUFSIZE
GETRECTBUFSIZE.RTS
OSD.GETRECTBUFSIZE.RTS
rts
*--------------------------------------
* DRAWTEXT
@ -158,7 +153,7 @@ GETRECTBUFSIZE.RTS
* Out:
* A=hBM
*--------------------------------------
DRAWTEXT sec
OSD.DRAWTEXT sec
.HS 90 BCC
*--------------------------------------
* GETTEXTSIZE
@ -169,10 +164,10 @@ DRAWTEXT sec
* A,X = Width
* Y = Height
*--------------------------------------
GETTEXTSIZE clc
OSD.GETTEXTSIZE clc
php
lda CB.Cache+S.CB.hFONT
jsr K.GetMemPtr
>SYSCALL2 GetMemPtr
>STYA ZPFontPtr
ldy #S.FON-1
.1 lda (ZPFontPtr),y
@ -194,9 +189,9 @@ GETTEXTSIZE clc
lda FON.Cache+S.FON.PixH
sta CB.Cache+S.CB.SrcH
stz CB.Cache+S.CB.SrcH+1
.3 jsr SHARED.TXTPTR.GetNext
.3 jsr OSD.TXTPTR.GetNext
beq .4
jsr FON.GetChar
jsr OSD.FON.GetChar
lda (ZPCharPtr) Get Char PixelW
sec
adc CB.Cache+S.CB.SrcW
@ -209,34 +204,36 @@ GETTEXTSIZE clc
lda CB.Cache+S.CB.SrcW
ldx CB.Cache+S.CB.SrcW+1
ldy CB.Cache+S.CB.SrcH
bcc GETRECTBUFSIZE.RTS
bcc OSD.GETRECTBUFSIZE.RTS
sta DstBM.Cache+S.BM.W
stx DstBM.Cache+S.BM.W+1
sty DstBM.Cache+S.BM.H
stz DstBM.Cache+S.BM.H+1
lda #S.BM.F.BBP1
sta DstBM.Cache+S.BM.F
jsr BM.Create
bcs GETRECTBUFSIZE.RTS
sta DRAWTEXT.END+1 save hBM, ZPDstBMPtr=BMData
jsr OSD.BM.Create
bcs OSD.GETRECTBUFSIZE.RTS
sta OSD.DRAWTEXT.END+1 save hBM, ZPDstBMPtr=BMData
>LDYA CB.Cache+S.CB.TxtPtr
>STYA TXTPTR
stz GWORD reset Col index in BM
stz GWORD+1 reset Bit index in Col
DRAWTEXT.LOOP jsr SHARED.TXTPTR.GetNext
beq DRAWTEXT.END
jsr FON.GetChar
OSD.DRAWTEXT.LOOP
jsr OSD.TXTPTR.GetNext
beq OSD.DRAWTEXT.END
jsr OSD.FON.GetChar
lda (ZPCharPtr) Char PixW
sta GBYTE
jsr CHAR.GetNext Char ByteW
jsr OSD.CHAR.GetNext Char ByteW
sta GBYTE2
>LDYA ZPDstBMPtr
>STYA ZPTmpPtr
lda GWORD+1 Get Bit Index for shifting
jsr DRAWTEXT.JMP
jsr OSD.DRAWTEXT.JMP
lda GBYTE Get Char PixW
sec +1 for char spacing
@ -251,8 +248,10 @@ DRAWTEXT.LOOP jsr SHARED.TXTPTR.GetNext
clc
adc GWORD Update Col Index in BM
sta GWORD
bra DRAWTEXT.LOOP
DRAWTEXT.END lda #$FF SELF MODIFIED
bra OSD.DRAWTEXT.LOOP
OSD.DRAWTEXT.END
lda #$FF SELF MODIFIED
sta CB.Cache+S.CB.SrcPtr Save hBM in Src CB
stz CB.Cache+S.CB.SrcPtr+1
@ -260,26 +259,28 @@ DRAWTEXT.END lda #$FF SELF MODIFIED
sta CB.Cache+S.CB.CMD
jmp CB.Update
*--------------------------------------
DRAWTEXT.JMP asl
OSD.DRAWTEXT.JMP
asl
tax
jmp (.1,x)
.1 .DA DRAWTEXT.SHIFT0
.DA DRAWTEXT.SHIFT1
.DA DRAWTEXT.SHIFT26
.DA DRAWTEXT.SHIFT26
.DA DRAWTEXT.SHIFT26
.DA DRAWTEXT.SHIFT26
.DA DRAWTEXT.SHIFT26
.DA DRAWTEXT.SHIFT7
.1 .DA OSD.DRAWTEXT.SHIFT0
.DA OSD.DRAWTEXT.SHIFT1
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT26
.DA OSD.DRAWTEXT.SHIFT7
*--------------------------------------
DRAWTEXT.SHIFT0 lda FON.Cache+S.FON.PixH
OSD.DRAWTEXT.SHIFT0
lda FON.Cache+S.FON.PixH
.6 pha save Height counter
ldx GBYTE2 init Width counter
ldy GWORD get col index in BM
.7 jsr CHAR.GetNext
.7 jsr OSD.CHAR.GetNext
eor (ZPTmpPtr),y
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
iny
@ -298,12 +299,13 @@ DRAWTEXT.SHIFT0 lda FON.Cache+S.FON.PixH
rts
*--------------------------------------
DRAWTEXT.SHIFT1 lda FON.Cache+S.FON.PixH
OSD.DRAWTEXT.SHIFT1
lda FON.Cache+S.FON.PixH
.1 pha save Height counter
ldx GBYTE2 init Width counter
ldy GWORD get col index in BM
.2 jsr CHAR.GetNext
.2 jsr OSD.CHAR.GetNext
asl 8th bit in ->carry
eor (ZPTmpPtr),y
sta (ZPTmpPtr),y
@ -329,7 +331,7 @@ DRAWTEXT.SHIFT1 lda FON.Cache+S.FON.PixH
*--------------------------------------
* X = ShiftL x2 (Range 4..10)
*--------------------------------------
DRAWTEXT.SHIFT26
OSD.DRAWTEXT.SHIFT26
lda SHIFT8.L-4,x
sta .3+1
lda SHIFT8.L-3,x
@ -348,7 +350,7 @@ DRAWTEXT.SHIFT26
sta ColIndex
lda GBYTE2
.2 pha save Width counter
jsr CHAR.GetNext
jsr OSD.CHAR.GetNext
pha
and First.Masks,x x = 2->6, for X=3 : A=000xxxxx
tay Range 0..127
@ -384,13 +386,14 @@ DRAWTEXT.SHIFT26
bne .1
rts
*--------------------------------------
DRAWTEXT.SHIFT7 lda FON.Cache+S.FON.PixH
OSD.DRAWTEXT.SHIFT7
lda FON.Cache+S.FON.PixH
.1 pha save Height counter
ldx GBYTE2 init Width counter
ldy GWORD get col index in BM
.2 jsr CHAR.GetNext
.2 jsr OSD.CHAR.GetNext
lsr 1st bit in carry, for COL 1
bcc .3
pha Other 7 bits for COL 2
@ -415,13 +418,14 @@ DRAWTEXT.SHIFT7 lda FON.Cache+S.FON.PixH
bne .1
rts
*--------------------------------------
CHAR.GetNext inc ZPCharPtr
OSD.CHAR.GetNext
inc ZPCharPtr
bne .8
inc ZPCharPtr+1
.8 lda (ZPCharPtr)
rts
*--------------------------------------
FON.GetChar cmp FON.Cache+S.FON.Last
OSD.FON.GetChar cmp FON.Cache+S.FON.Last
bcc .1
bne .2
@ -453,7 +457,7 @@ FON.GetChar cmp FON.Cache+S.FON.Last
sta ZPCharPtr
rts
*--------------------------------------
BM.Create lda DstBM.Cache+S.BM.W
OSD.BM.Create lda DstBM.Cache+S.BM.W
ldx DstBM.Cache+S.BM.W+1
bit #7
beq .1
@ -462,7 +466,7 @@ BM.Create lda DstBM.Cache+S.BM.W
adc #8
bcc .1
inx
.1 sta DstBM.Cache+S.BM.RowBytes
.1 sta DstBM.Cache+S.BM.RowBytes
txa
lsr
@ -486,7 +490,7 @@ BM.Create lda DstBM.Cache+S.BM.W
tay
pla
adc /S.BM
jsr K.GetMem
>SYSCALL2 GetMem
bcs .9
>STYA ZPDstBMPtr
ldy #S.BM-1
@ -495,7 +499,7 @@ BM.Create lda DstBM.Cache+S.BM.W
dey
bpl .2
lda ZPDstBMPtr
* clc
* clc
adc #S.BM
sta ZPDstBMPtr
sta .4+1
@ -529,7 +533,7 @@ BM.Create lda DstBM.Cache+S.BM.W
* OUT:
* Y,A = (Y,A) * X
*--------------------------------------
YAMultX stx GBYTE
OSD.YAMultX stx GBYTE
sty GWORD
sta GWORD+1
@ -550,24 +554,25 @@ YAMultX stx GBYTE
bne .2
rts
*--------------------------------------
CB.Update >LDYA ZPCmdPtr
>STYA ZPSListDataPtr
ldx #0
.1 lda CB.Cache,x
jsr SHARED.SetDataByte
inx
cpx #S.CB
bne .1
CB.Update ldy #S.CB-1
sta SETWRITEAUX
.1 lda CB.Cache,y
sta (ZPCmdPtr),y
dey
bpl .1
sta CLRWRITEAUX
clc
rts
*--------------------------------------
CB.Cache .BS S.CB
*CB.Cache .BS S.CB
FON.Cache .BS S.FON
SrcBM.Cache .BS S.BM
DstBM.Cache .BS S.BM
*--------------------------------------
Mono.NMasks .DA #%11111110
Mono8.NMasks .DA #%11111110
.DA #%11111101
.DA #%11111011
.DA #%11110111
@ -576,7 +581,7 @@ Mono.NMasks .DA #%11111110
.DA #%10111111
.DA #%01111111
*--------------------------------------
Mono.Masks .DA #%00000001
Mono8.Masks .DA #%00000001
.DA #%00000010
.DA #%00000100
.DA #%00001000
@ -737,8 +742,9 @@ SHIFT8.L7 .DA #%00000000,#%10000000,#%00000001,#%10000001,#%00000010,#%10000010
.DA #%00110100,#%10110100,#%00110101,#%10110101,#%00110110,#%10110110,#%00110111,#%10110111
.DA #%00111000,#%10111000,#%00111001,#%10111001,#%00111010,#%10111010,#%00111011,#%10111011
.DA #%00111100,#%10111100,#%00111101,#%10111101,#%00111110,#%10111110,#%00111111,#%10111111
X.OSD.LEN .EQ *-X.OSD
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.osdx
LOAD usr/src/sys/kernel.s
SAVE usr/src/drv/dhgr.drv.s.osd
LOAD usr/src/drv/dhgr.drv.s
ASM

View File

@ -13,7 +13,9 @@ NEW
.INB inc/gfx.i
.INB inc/gfx.eve.i
*--------------------------------------
ZPPtr .EQ ZPBIN
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
ZPPtr3 .EQ ZPBIN+4
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -37,12 +39,7 @@ 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
L.X.OSD .DA X.OSD
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT
@ -94,6 +91,8 @@ Dev.Detect >LDYA L.MSG.DETECT
>STYA FD.DEV+S.FD.DEV.DRVPTR
jsr DrvReloc
>PUSHW L.FD.DEV
>PUSHW L.FD.DEV.NAME
>SYSCALL MKDEV
@ -109,6 +108,8 @@ Dev.Detect >LDYA L.MSG.DETECT
sta SETHIRES
sta SET80STORE
jsr OSD.install
jsr ClrScr
plp
@ -117,56 +118,126 @@ Dev.Detect >LDYA L.MSG.DETECT
DrvReloc lda FD.DEV+S.FD.DEV.DRVPTR
sec
sbc #DRV.CS.START
sta ZPPtr
sta ZPPtr1
lda FD.DEV+S.FD.DEV.DRVPTR+1
sbc /DRV.CS.START
sta ZPPtr+1
sta ZPPtr1+1
lda ZPPtr1
clc
adc #Shift.L.LO
sta ZPPtr2
lda ZPPtr1+1
adc /Shift.L.LO+1
sta ZPPtr2+1
lda ZPPtr1
clc
adc #Shift.L.HI
sta ZPPtr3
lda ZPPtr1+1
adc /Shift.L.HI+1
sta ZPPtr3+1
ldx #0
ldy #0
.1 lda L.SHIFT,x Get relocated LO BYTE
.1 lda (ZPPtr2),y
clc
adc ZPPtr
sta Shift.L.LO,y
adc ZPPtr1
sta (ZPPtr2),y
inx
lda (ZPPtr3),y
adc ZPPtr1+1
sta (ZPPtr3),y
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
lda ZPPtr1
clc
adc ZPPtr
sta Shift.R.LO,y
inx
adc #Shift.R.LO
sta ZPPtr2
lda L.SHIFT,x Get relocated HI BYTE
adc ZPPtr+1
sta Shift.R.HI,y
lda ZPPtr1+1
adc /Shift.R.LO+1
sta ZPPtr2+1
lda ZPPtr1
clc
adc #Shift.R.HI
sta ZPPtr3
lda ZPPtr1+1
adc /Shift.R.HI+1
sta ZPPtr3+1
ldy #0
.2 lda (ZPPtr2),y
clc
adc ZPPtr1
sta (ZPPtr2),y
inx
dey
bpl .2
lda (ZPPtr3),y
adc ZPPtr1+1
sta (ZPPtr3),y
iny
cpy #6
bne .2
rts
*--------------------------------------
OSD.install >LDYA L.X.OSD
>STYA ZPPtr1
>LDYAI X.OSD
>STYA ZPPtr2
lda /X.OSD.LEN
eor #$ff
pha
lda /X.OSD.LEN
eor #$ff
tax
ldy #0
sta SETWRITEAUX
.1 inx
bne .2
pla
inc
beq .8
pha
.2 lda (ZPPtr1),y
sta (ZPPtr2),y
iny
bne .1
inc ZPPtr1
inc ZPPtr2
bra .1
.8 sta CLRWRITEAUX
rts
*--------------------------------------
ClrScr ldx #0
txa lda #0
.1 ldy BASEL,x
sty ZPPtr
sty ZPPtr1
ldy BASEH,x
sty ZPPtr+1
sty ZPPtr1+1
sta SETPAGE2
jsr .2
@ -180,7 +251,7 @@ ClrScr ldx #0
rts
.2 ldy #39
.3 sta (ZPPtr),y
.3 sta (ZPPtr1),y
dey
bpl .3
rts
@ -373,12 +444,22 @@ WRITE >STYA ZPIOCTL NON STANDARD
dey
bpl .2
.3 jsr .10
clc
rts
.10 jmp (J.Cmds,x)
*--------------------------------------
OSD.TXTPTR.GetNext
sta CLRREADAUX
lda (TXTPTR)
sta SETREADAUX
beq OSD.TXTPTR.RTS
OSD.TXTPTR.Next inc TXTPTR
bne OSD.TXTPTR.RTS
inc TXTPTR+1
OSD.TXTPTR.RTS rts
*--------------------------------------
* IN:
* Y = LO
@ -473,10 +554,30 @@ CONTROL.EVE .DA #SETIOUDIS
.DA #0
*--------------------------------------
Shift.L.LO .BS 6
Shift.L.HI .BS 6
Shift.R.LO .BS 6
Shift.R.HI .BS 6
Shift.L.LO .DA #SHIFT.L1
.DA #SHIFT.L2
.DA #SHIFT.L3
.DA #SHIFT.L4
.DA #SHIFT.L5
.DA #SHIFT.L6
Shift.L.HI .DA /SHIFT.L1
.DA /SHIFT.L2
.DA /SHIFT.L3
.DA /SHIFT.L4
.DA /SHIFT.L5
.DA /SHIFT.L6
Shift.R.LO .DA #SHIFT.L6
.DA #SHIFT.L5
.DA #SHIFT.L4
.DA #SHIFT.L3
.DA #SHIFT.L2
.DA #SHIFT.L1
Shift.R.HI .DA /SHIFT.L6
.DA /SHIFT.L5
.DA /SHIFT.L4
.DA /SHIFT.L3
.DA /SHIFT.L2
.DA /SHIFT.L1
*--------------------------------------
CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
.DA S.CB.Y1+1 GETPIXEL
@ -508,6 +609,11 @@ DCB .DA #S.DCB.T.GFX
.DA 192 H
*--------------------------------------
DRV.END
*--------------------------------------
.PH $1000
.INB usr/src/drv/dhgr.drv.s.osd
.EP
*--------------------------------------
.LIST ON
DRV.CS.SIZE .EQ DRV.CS.END-DRV.CS.START
DRV.SIZE .EQ DRV.END-DRV.CS.START