Kernel Rewrite #6.1

This commit is contained in:
Rémy GIBERT 2016-06-15 08:21:42 +02:00
parent 3e17ac840c
commit 60be01ed6c
15 changed files with 259 additions and 200 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -11,9 +11,10 @@ AUTO 6
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/IO.I .INB INC/IO.I
.INB INC/LIBGFX.I
*-------------------------------------- *--------------------------------------
ZPBASE .EQ ZPDRV ZPBASE .EQ ZPDRV
ZPCOLOR .EQ ZPDRV+2 ZPBitBlt .EQ ZPDRV+2
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -324,25 +325,37 @@ VLINE rts
*-------------------------------------- *--------------------------------------
FILLREC rts FILLREC rts
*-------------------------------------- *--------------------------------------
* * BitBlt
* 0 : hStockObject *--------------------------------------
* 1 : Operation * 0 : Operation
* Replace * 1 - Replace
* Combine (Ora) * 2 - Combine (Ora)
* CombineEx (And with Src Mask,Ora with Src BM) * 3 - CombineEx (And with Src BitMask,Ora with Src BitMap)
* 2 : SrcX * 4 - Exchange
* 4 : SrcY * 2 : pSrcBitMap
* 6 : DestX * 4 : pSrcBitMask
* 8 : DestY * 6 : pDstBitMap
* 12 : Width * 8 : SrcAX
* 14 : Height * 10 : SrcAY
* 12 : SrcBX
* 14 : SrcBY
* 16 : DestX
* 18 : DestY
* *
*-------------------------------------- *--------------------------------------
BITBLT BITBLT >STYA ZPBitBlt
lda (ZPBitBlt)
rts rts
*-------------------------------------- *--------------------------------------
DRV.CS.END DRV.CS.END
*-------------------------------------- *--------------------------------------
Shift.0 .HS 0000000000000000
.HS 0120040810204000
*--------------------------------------
Shift.1 .HS 0000000000000000
.HS 0000000000000001
*--------------------------------------
*--------------------------------------
Mono.NMasks .DA #%01111110 Mono.NMasks .DA #%01111110
.DA #%01111101 .DA #%01111101
.DA #%01111011 .DA #%01111011

View File

@ -3,10 +3,23 @@ PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
*-------------------------------------- *--------------------------------------
LIBGFX.test .EQ 4 S.BITMAP.F .EQ 0
S.BITMAP.F.BBP1 .EQ %00000001
S.BITMAP.F.BBP2 .EQ %00000010
S.BITMAP.F.BBP4 .EQ %00000100
S.BITMAP.F.BBP8 .EQ %00001000
S.BITMAP.RowBytes .EQ 1
S.BITMAP.W .EQ 4
S.BITMAP.H .EQ 6
S.BITMAP.DATA .EQ 8
*--------------------------------------
LIBGFX.InitDevA .EQ 4
LIBGFX.CUR.show .EQ 6
LIBGFX.CUR.Hide .EQ 8
LIBGFX.CUR.Select .EQ 10
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE INC/LIBGFX.I SAVE INC/LIBGFX.I

View File

@ -12,6 +12,8 @@ AUTO 6
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/LIBGFX.I .INB INC/LIBGFX.I
*-------------------------------------- *--------------------------------------
ZPPtr1 .EQ ZPLIB
*--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
@ -28,14 +30,53 @@ CS.START cld
*-------------------------------------- *--------------------------------------
.1 .DA LIB.LOAD .1 .DA LIB.LOAD
.DA LIB.UNLOAD .DA LIB.UNLOAD
*-------------------------------------- .DA InitDevA
.DA CUR.Show
.DA CUR.Hide
.DA CUR.Select
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD LIB.LOAD
LIB.UNLOAD clc LIB.UNLOAD clc
rts rts
*--------------------------------------
InitDevA sta hDev
>SYSCALL SYS.GetDevInfoA
bcs .9
>STYA ZPPtr1
clc
rts
.9 stz hDev
sec
rts
*--------------------------------------
.INB LIB/LIBGFX.S.CUR
*-------------------------------------- *--------------------------------------
CS.END CS.END
hDev .BS 1
*--------------------------------------
CUR.Arrow.And .DA #%00000001
.DA #%00000011
.DA #%00000101
.DA #%00001001
.DA #%00010001
.DA #%00100011
.DA #%01110101
.DA #%00011000
*--------------------------------------
CUR.Arrow.Ora .DA #%00000000
.DA #%00000000
.DA #%00000010
.DA #%00000110
.DA #%00001110
.DA #%00011100
.DA #%00001000
.DA #%00000000
*--------------------------------------
MAN MAN
SAVE LIB/LIBGFX.S SAVE LIB/LIBGFX.S
ASM ASM

View File

@ -1,10 +1,12 @@
# A2osX # A2osX
Multi-Tasking OS for Apple II Multi-Tasking OS for Apple II
## Requires : ## Requires :
Enh IIe (65c02 cpu) with 128k, //c, IIgs Enhanced IIe (65c02 cpu) with 128k, //c, IIgs
## General Information: ## General Information:
**A2OSX.BOOT.po** : 140k A2osX boot disk will all binaries **A2OSX.BOOT.po** : 140k A2osX boot disk with all binaries
**A2OSX.SRC.po** : 800k S-C MASM boot disk with all sources **A2OSX.DEV.po** : 140k A2osX disk will ASM binaries & INClude files
**A2OSX.SRC.po** : 800k S-C MASM boot disk with all sources
OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
(OApple+shift+1,OApple+shift+2,OApple+shift+3 on FR keyboard) (OApple+shift+1,OApple+shift+2,OApple+shift+3 on FR keyboard)

View File

@ -10,6 +10,7 @@ AUTO 6
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/LIBGFX.I
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -29,6 +30,7 @@ CS.START cld
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBGFX .DA LIBGFX
L.DEVNAME.GFX .DA DEVNAME.GFX L.DEVNAME.GFX .DA DEVNAME.GFX
L.DEVNAME.MOUSE .DA DEVNAME.MOUSE L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
L.MSG.INIT .DA MSG.INIT L.MSG.INIT .DA MSG.INIT
@ -37,6 +39,10 @@ L.MSG.INIT .DA MSG.INIT
CS.INIT >LDYA L.MSG.INIT CS.INIT >LDYA L.MSG.INIT
>SYSCALL SYS.PSTROutYA >SYSCALL SYS.PSTROutYA
>LDYA L.LIBGFX
>SYSCALL SYS.LoadLibYA
sta hLIBGFX
>LDYA L.DEVNAME.GFX >LDYA L.DEVNAME.GFX
>SYSCALL SYS.GetDevByNameYA >SYSCALL SYS.GetDevByNameYA
bcc .10 bcc .10
@ -80,6 +86,9 @@ CS.INIT >LDYA L.MSG.INIT
pla pla
sta pDev sta pDev
lda hDevGFX
>LIBCALL hLibGFX,LIBGFX.InitDevA
* jmp .8 * jmp .8
lda #15 lda #15
@ -146,14 +155,10 @@ CS.DOEVENT ldy #S.EVT.hDEV
cmp hDevMouse cmp hDevMouse
bne .99 bne .99
lda (pEvent)
and #S.EVT.F.MOUSE
beq .99
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
and #4 mouse move and #4 mouse move
beq .99 beq .98
>PUSHBI 15 COLOR >PUSHBI 15 COLOR
@ -173,7 +178,7 @@ CS.DOEVENT ldy #S.EVT.hDEV
ldx #DEVMGR.GFX.SETPIXEL ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX jsr GoDevGFX
clc .98 clc
rts rts
.99 sec .99 sec
@ -188,7 +193,9 @@ GoDevMouse jmp (pDevMouse)
CS.END CS.END
DEVNAME.GFX >PSTRING "GFX" DEVNAME.GFX >PSTRING "GFX"
DEVNAME.MOUSE >PSTRING "MOU1" DEVNAME.MOUSE >PSTRING "MOU1"
LIBGFX >PSTRING "libgfx.o"
MSG.INIT >PSTRING "DESKTOP:Init...\n" MSG.INIT >PSTRING "DESKTOP:Init...\n"
hLibGFX .BS 1
hDevGFX .BS 1 hDevGFX .BS 1
pDevGFX .BS 2 pDevGFX .BS 2
hDevMouse .BS 1 hDevMouse .BS 1

View File

@ -1,33 +0,0 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BOOT/SBIN/GFX/MOUSE.PTR
*--------------------------------------
*--------------------------------------
Arrow.And .DA #%00000001
.DA #%00000011
.DA #%00000101
.DA #%00001001
.DA #%00010001
.DA #%00100011
.DA #%01110101
.DA #%00011000
*--------------------------------------
Arrow.Ora .DA #%00000000
.DA #%00000000
.DA #%00000010
.DA #%00000110
.DA #%00001110
.DA #%00011100
.DA #%00001000
.DA #%00000000
*--------------------------------------
MAN
SAVE SBIN/GFX/MOUSE.PTR.S
ASM

View File

@ -136,145 +136,6 @@ S.LoadBinA.hMem .BS 1
S.LoadBinA.AuxType .BS 2 S.LoadBinA.AuxType .BS 2
S.LoadBinA.FileLen .BS 2 S.LoadBinA.FileLen .BS 2
*-------------------------------------- *--------------------------------------
* S.BinRelocateYA :
* YA = Ptr to Code
* R.AX = Code Length
* R.BX = Range Start address to relocate
* R.CX = Range End address to relocate
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
*--------------------------------------
S.BinRelocateYA >STYA ZPQuickPtr1
ldy #H.BIN.JMP relocate Main JMP
lda (ZPQuickPtr1),y
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
bra S.JmpRelocate
S.DrvRelocateYA >STYA ZPQuickPtr1
ldy #0
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
tax
iny
ora (ZPQuickPtr1),y
beq S.CodeRelocate $0000 = end of table
dey
txa
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
iny
bra S.JmpRelocate
S.CodeRelocate lda ZPQuickPtr1
clc
adc R.AL Make ZPQuickPtr2=End of code
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
lda ZPQuickPtr1+1
adc R.AH
sta ZPQuickPtr2+1
iny
tya add current offset in Y to Ptr
clc
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .5
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
clc
.5 lda (ZPQuickPtr1) get OPCODE
tax
lda OPCODES,x get OPCODE definition
bpl .7 abs addressing?
and #3 save Opcode length...
pha
ldy #1
lda (ZPQuickPtr1),y Get LO
sec
sbc R.BL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.BH
bcc .6 addr < AX, out of range
dey
lda (ZPQuickPtr1),y Get LO
sec
sbc R.CL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.CH
bcs .6 addr > CX, out of range
dey
lda (ZPQuickPtr1),y Get LO
clc
adc R.DL add DX to abs address
sta (ZPQuickPtr1),y store relocated addr LO
iny
lda (ZPQuickPtr1),y Get HI
adc R.DH
sta (ZPQuickPtr1),y store relocated addr HI
.6 pla
.7 clc A = OPCODE length
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .8
inc ZPQuickPtr1+1
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
sec
sbc ZPQuickPtr2
lda ZPQuickPtr1+1
sbc ZPQuickPtr2+1
bcc .5 yes, continue relocating
clc
rts
*--------------------------------------
* 65C02 OPCODES
* Bit 7 : 1 absolute addressing
* Bit 1-0 : opcode + @ length
*--------------------------------------
* x0.x1.x2.x3.x4.x5.x6.x7.x8.x9.xA.xB.xC.xD.xE.xF
OPCODES .HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 83.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
*--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.BIN SAVE SYS/KERNEL.S.BIN
LOAD SYS/KERNEL.S LOAD SYS/KERNEL.S

152
SYS/KERNEL.S.REL.txt Normal file
View File

@ -0,0 +1,152 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.BinRelocateYA :
* YA = Ptr to Code
* R.AX = Code Length
* R.BX = Range Start address to relocate
* R.CX = Range End address to relocate
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
*--------------------------------------
S.BinRelocateYA >STYA ZPQuickPtr1
ldy #H.BIN.JMP relocate Main JMP
lda (ZPQuickPtr1),y
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
bra S.JmpRelocate
S.DrvRelocateYA >STYA ZPQuickPtr1
ldy #0
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
tax
iny
ora (ZPQuickPtr1),y
beq S.CodeRelocate $0000 = end of table
dey
txa
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
iny
bra S.JmpRelocate
S.CodeRelocate lda ZPQuickPtr1
clc
adc R.AL Make ZPQuickPtr2=End of code
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
lda ZPQuickPtr1+1
adc R.AH
sta ZPQuickPtr2+1
iny
tya add current offset in Y to Ptr
clc
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .5
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
clc
.5 lda (ZPQuickPtr1) get OPCODE
tax
lda OPCODES,x get OPCODE definition
bpl .7 abs addressing?
and #3 save Opcode length...
pha
ldy #1
lda (ZPQuickPtr1),y Get LO
sec
sbc R.BL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.BH
bcc .6 addr < AX, out of range
dey
lda (ZPQuickPtr1),y Get LO
sec
sbc R.CL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.CH
bcs .6 addr > CX, out of range
dey
lda (ZPQuickPtr1),y Get LO
clc
adc R.DL add DX to abs address
sta (ZPQuickPtr1),y store relocated addr LO
iny
lda (ZPQuickPtr1),y Get HI
adc R.DH
sta (ZPQuickPtr1),y store relocated addr HI
.6 pla
.7 clc A = OPCODE length
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .8
inc ZPQuickPtr1+1
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
sec
sbc ZPQuickPtr2
lda ZPQuickPtr1+1
sbc ZPQuickPtr2+1
bcc .5 yes, continue relocating
clc
rts
*--------------------------------------
* 65C02 OPCODES
* Bit 7 : 1 absolute addressing
* Bit 1-0 : opcode + @ length
*--------------------------------------
* x0.x1.x2.x3.x4.x5.x6.x7.x8.x9.xA.xB.xC.xD.xE.xF
OPCODES .HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 83.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.REL
LOAD SYS/KERNEL.S
ASM

View File

@ -243,6 +243,7 @@ A2osX.E000 .EQ *
.INB SYS/KERNEL.S.BIN .INB SYS/KERNEL.S.BIN
.INB SYS/KERNEL.S.DRV .INB SYS/KERNEL.S.DRV
.INB SYS/KERNEL.S.LIB .INB SYS/KERNEL.S.LIB
.INB SYS/KERNEL.S.REL
.INB SYS/KERNEL.S.TSK .INB SYS/KERNEL.S.TSK
.INB SYS/KERNEL.S.EVT .INB SYS/KERNEL.S.EVT
*-------------------------------------- *--------------------------------------

View File

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 211 KiB

BIN
ScreenShot.IP2.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

View File

@ -7,10 +7,12 @@ CREATE SBIN
CREATE SBIN/GFX CREATE SBIN/GFX
CREATE SYS CREATE SYS
CREATE USR CREATE USR
PREFIX /A2OSX.DEV
CREATE INC
CREATE BIN
PREFIX /A2OSX.SRC PREFIX /A2OSX.SRC
CREATE BIN CREATE BIN
CREATE DRV CREATE DRV
CREATE INC
CREATE LIB CREATE LIB
CREATE SBIN CREATE SBIN
CREATE SBIN/GFX CREATE SBIN/GFX