Kernel version 0.8 : added Room in GP for SmartPort/ProDOS BlkDev interface

This commit is contained in:
Rémy GIBERT 2016-11-25 17:20:28 +01:00
parent 7a030f049b
commit 67a73ae571
17 changed files with 133 additions and 114 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -40,7 +40,7 @@ A2osX.QC.Start1 sei
bpl .1
lda #$CF protect zero page, stack and page 1
sta MEMTABL
lda #$03
lda #$07
sta MEMTABL+$17 protect ProDOS & A2osX global page
lda #$8C Reset 80 col screen ($0C=FF=HOME)
@ -49,12 +49,6 @@ A2osX.QC.Start1 sei
>LDAXI MSG.INIT1
jsr A2osX.QC.PrintAX
ldx #0
.2 lda $1200,x Setup Global Page
sta $BE00,x
inx
bne .2
.3 jsr MLI
.DA #MLISETPREFIX
.DA MLISETPREFIX00

View File

@ -169,10 +169,10 @@ A2osX.MLIQuit >LDAXI MSG.INIT0OK
DisableRamDRV php
sei
lda DEVPTRS3D2
cmp DEVPTRS0D1
cmp DEVPTRS S0D1=NOVEV
bne .1
lda DEVPTRS3D2+1
cmp DEVPTRS0D1+1
cmp DEVPTRS+1 S0D1=NODEV
beq .9 S3D2=NODEV, nothing to do
.1 ldx DEVCNT
@ -203,9 +203,9 @@ DisableRamDRV php
stz DEVLST,x
dec DEVCNT
lda DEVPTRS0D1
lda DEVPTRS
sta DEVPTRS3D2
lda DEVPTRS0D1+1
lda DEVPTRS+1
sta DEVPTRS3D2+1
plp

View File

@ -33,6 +33,7 @@ CS.START cld
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG0 .DA MSG0
.DA 0
*--------------------------------------
CS.INIT >SYSCALL GetArgC
@ -89,16 +90,12 @@ CS.DOEVENT ldy #S.EVT.hDEV
ldy #S.EVT.DATALO
lda (pEvent),y
pha
>SYSCALL HexOutA
lda #'('
>SYSCALL COutA
pla
cmp #$20
bcc .1
>SYSCALL COutA
.1 lda #')'
>SYSCALL COutA
>PUSHA
>PUSHA
>LDYA L.MSG0
>SYSCALL CPrintFYA
clc
rts
@ -111,6 +108,8 @@ CS.QUIT ldx #DEVMGR.CLOSE
rts
*--------------------------------------
CS.END
MSG0 >CSTR "[%h]"
*--------------------------------------
.DUMMY
.OR 0
DS.START

View File

@ -8,9 +8,9 @@ AUTO 6
.OR $2000
.TF /A2OSX.BOOT/BIN/DNSINFO
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBTCPIP.I
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/LIBTCPIP.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2

View File

@ -13,7 +13,7 @@ AUTO 6
.INB /A2OSX.DEV/INC/A2OSX.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
BlkDevCmd .EQ ZPBIN+2 $42
ZPPTR2 .EQ ZPBIN+2
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -101,26 +101,26 @@ DumpA2osXDev >LDYA L.MSG0
DumpProDOSDev >LDYA L.MSG2
>SYSCALL CPrintFYA
stz DEV.ID
stz BLKCALL.PARAMS CmdNum = 0, STATUS Call
stz BLKCALL.PARAMS+4 ask for Block 0
stz BLKCALL.PARAMS+5 (in case driver check block validity before checking CmdNum)
ldx DEVCNT
stx DEV.ID
.1 ldx DEV.ID
inc DEV.ID
cpx DEVCNT
bne .11
clc
rts
.11 lda #1
sta Drive
ldy #1
lda DEVLST,x
bpl .2
inc Drive
iny
.2 and #$F0
.2 sty Drive
and #$F0
sta BLKCALL.PARAMS+1 UnitNum for BLKCALL, if needed
lsr
lsr
lsr
@ -130,14 +130,16 @@ DumpProDOSDev >LDYA L.MSG2
and #$7
sta Slot
* lda DEVPTRS,y
* sta ZPPTR1
stz ZPPTR1
stz ZPPTR1 make Ptr1 = Cn00
lda DEVPTRS,y
sta ZPPTR2 make Ptr2 = Cnxx (prodos BLK entry point)
lda DEVPTRS+1,y
sta ZPPTR1+1
sta ZPPTR2+1
cmp #$C1
bcc .1 3rd Party Driver loaded in RAM...
bcc .8 3rd Party Driver loaded in RAM...
cmp #$C8
bcs .4 In ProDOS Space.../RAM or DisK II
@ -152,11 +154,11 @@ DumpProDOSDev >LDYA L.MSG2
bne .3
jsr GO.SmartPort Perform a Smartpot STATUS call
bcs .1
bcs .8
jsr PrintDevStatus
jmp .1
bra .8
.4 cmp #$ff RAM ?
bne .5
@ -175,9 +177,9 @@ DumpProDOSDev >LDYA L.MSG2
dey
bpl .71
>DEBUG
* jsr GO.BlockDev
>LDYA ZPPTR2 Get Block device PTR
jsr A2osX.BLKCALL
bcs .8
stx UsrBuf256+S.SPSTAT.BLKNUM
sty UsrBuf256+S.SPSTAT.BLKNUM+1
@ -185,7 +187,12 @@ DumpProDOSDev >LDYA L.MSG2
jsr PrintDevStatus
.8 jmp .1
.8 dec DEV.ID
bmi .9
jmp .1
.9 clc
rts
*--------------------------------------
S.SPSTAT.STATUS .EQ 0
S.SPSTAT.STATUS.BLK .EQ %10000000
@ -203,9 +210,6 @@ S.SPSTAT.SUBTYP .EQ 22
S.SPSTAT.VER .EQ 23
S.SPSTAT .EQ 25
*--------------------------------------
GO.BlockDev stz BlkDevCmd
jmp (ZPPTR1)
*--------------------------------------
GO.SmartPort ldy #$ff
lda (ZPPTR1),y
@ -235,10 +239,7 @@ GO.SmartPort ldy #$ff
.3 lda SMP.Params will be relocated
rts
*--------------------------------------
PrintDevStatus
ldy #S.SPSTAT.BLKNUM
lda /UsrBuf256
>PUSHYA
PrintDevStatus >PUSHW UsrBuf256+S.SPSTAT.BLKNUM
ldy #S.SPSTAT.NAME
lda /UsrBuf256
@ -265,8 +266,8 @@ DiskII.OFS .HS 010305FF
DiskII.SIG .HS 20000300
MSG0 >CSTR "ID Flags Name Address\n"
MSG1 >CSTR "%03d %b %4S $%H\n"
MSG2 >CSTR "ID Flags Name Description Size\n"
MSG3 >CSTR "%03d %b S%dD%d %S %L\n"
MSG2 >CSTR "ID Flags Name Description Size\n"
MSG3 >CSTR "%03d %b S%dD%d %S %05D\n"
RAM >PSTR "ProDOS Ram Disk "
DISK2 >PSTR "Apple Disk ][ "
GENERIC >PSTR "Generic Blk Dev "

View File

@ -8,10 +8,10 @@ AUTO 6
.OR $2000
.TF /A2OSX.BOOT/DRV/DHGR.DRV
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/IO.I
.INB INC/LIBGFX.I
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/IO.I
.INB /A2OSX.DEV/INC/LIBGFX.I
*--------------------------------------
ZPBase .EQ ZPDRV
ZPShiftLo .EQ ZPDRV+2

View File

@ -8,8 +8,8 @@ AUTO 6
.OR $2000
.TF /A2OSX.BOOT/DRV/SSC.I.DRV
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
*--------------------------------------
BUF.SIZE .EQ $20
BUF.MASK .EQ $1F

View File

@ -13,13 +13,6 @@ AUTO 6
.INB /A2OSX.DEV/INC/LIBTCPIP.I
*--------------------------------------
ZPTmpPTR .EQ ZPDRV
*--------------------------------------
.MA AR.SELECT
lda /W5100.AR.]1
sta W5100.AR,x
lda #W5100.AR.]1
sta W5100.AR+1,x
.EM
*--------------------------------------
.INB DRV/X.NET.W5100.S
*--------------------------------------

View File

@ -63,7 +63,9 @@ D.STACK.TOP .EQ $03F0 ...Down to $0300
KrnBuf256 .EQ $0C00 Main
*--------------------------------------
MLICALL.PARAMS .EQ $0D00 Main, $12 bytes min !!!!
KrnSTAT .EQ $0D12
BLKCALL.PARAMS .EQ $0D20 Max 6 Bytes copied to/from $42->$47 before Firmware call
PRTCALL.PARAMS .EQ $D030 Max 8 bytes for smartport cmdnum $0->$9
KrnSTAT .EQ $0D40 S.STAT
*--------------------------------------
KrnOut256 .EQ $0E00 Used to return Values to User Space
*--------------------------------------
@ -89,23 +91,25 @@ MemMgr.HiMem .EQ $1804
MemMgr.LastSlot .EQ $1806
*--------------------------------------
MemMgr.MLoMem .EQ $2000
MemMgr.MHiMem .EQ $BE00
MemMgr.MHiMem .EQ $BD00
MemMgr.XLoMem .EQ $2000
MemMgr.XHiMem .EQ $C000
*--------------------------------------
DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
*--------------------------------------
* A2osX GLOBAL PAGE
* $BE00->$BE0F : Public Vetors
* $BD00->$BD0F : Public Vetors
*--------------------------------------
A2osX.SYSCALL .EQ $BE00
A2osX.LIBCALL .EQ $BE03
A2osX.MLICALL .EQ $BE06
A2osX.SYSCALL .EQ $BD00
A2osX.LIBCALL .EQ $BD03
A2osX.MLICALL .EQ $BD06
A2osX.BLKCALL .EQ $BD09
A2osX.PRTCALL .EQ $BD0C
*--------------------------------------
pCodeJmp .EQ $BE10
pLibJmp .EQ $BE13
pDrvJmp .EQ $BE16
pDevJmp .EQ $BE19
pCodeJmp .EQ $BD10
pLibJmp .EQ $BD13
pDrvJmp .EQ $BD16
pDevJmp .EQ $BD19
*--------------------------------------
* $BEE0->$BEEF : Public Variables
*--------------------------------------
@ -507,12 +511,6 @@ S.DIR.PRODOS.FC .EQ 6
S.DIR.PRODOS .EQ 8
* no S.DIR
*--------------------------------------
* S.DIRENT for ReadDir
*--------------------------------------
S.DIRENT.NAME .EQ 0
* Variable size
S.DIRENT.STAT .EQ S.STAT
*--------------------------------------
S.PFT.PATH .EQ 0
S.PFT.HANDLER .EQ 23
S.PFT.DATA .EQ 24 8 bytes OPAQUE data for handler

View File

@ -115,8 +115,8 @@ MLI .EQ $BF00
*JSPARE .EQ $BF03
DATETIME .EQ $BF06
SYSERR .EQ $BF09
SYSDEATH .EQ $BF0C
SERR .EQ $BF0F
*SYSDEATH .EQ $BF0C
*SERR .EQ $BF0F
DEVPTRS .EQ $BF10
*DEVPTRS0D1 .EQ $BF10
*DEVPTRS1D1 .EQ $BF12
@ -137,8 +137,8 @@ DEVPTRS3D2 .EQ $BF26
DEVNUM .EQ $BF30
DEVCNT .EQ $BF31
DEVLST .EQ $BF32 -> $BF3F
DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list
PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B
*DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list
*PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B
MEMTABL .EQ $BF58 -> $BF6F
*GL.BUFF .EQ $BF70
*INTRUPT1 .EQ $BF80
@ -147,8 +147,8 @@ MEMTABL .EQ $BF58 -> $BF6F
*INTRUPT4 .EQ $BF86
DATELO .EQ $BF90
TIMELO .EQ $BF92
LEVEL .EQ $BF94
BUBIT .EQ $BF95
*LEVEL .EQ $BF94
*BUBIT .EQ $BF95
*SPARE1 .EQ $BF96
MACHID .EQ $BF98
MACHID.TYPE .EQ %11001000
@ -161,15 +161,15 @@ MACHID.RAM .EQ %00110000
MACHID.RAM.128 .EQ %00110000
MACHID.RAM.64 .EQ %00100000
MACHID.RAM.48 .EQ %00010000
MACHID.SPARE .EQ %00000100
*MACHID.SPARE .EQ %00000100
MACHID.COL80 .EQ %00000010
MACHID.CLK .EQ %00000001
SLTBYT .EQ $BF99
PFIXPTR .EQ $BF9A
MLIACTV .EQ $BF9B
CMDADR .EQ $BF9C
SAVEX .EQ $BF9E
SAVEY .EQ $BF9F
*SLTBYT .EQ $BF99
*PFIXPTR .EQ $BF9A
*MLIACTV .EQ $BF9B
*CMDADR .EQ $BF9C
*SAVEX .EQ $BF9E
*SAVEY .EQ $BF9F
*--------------------------------------
* code $BFA0 -> $BFF3
*--------------------------------------

View File

@ -37,13 +37,20 @@ AUTO 6
*--------------------------------------
jmp A2osX.BLKCALL1
*--------------------------------------
.BS $BE10-*
* PRTCALL (AUXLC to MAINLC)
* Used by Kernel
* In:
* Y,A = Ptr To Param Block
*--------------------------------------
jmp A2osX.PRTCALL1
*--------------------------------------
.BS $BD10-*
*--------------------------------------
jmp (pCode) pCodeJmp
jmp (pLib) pLibJmp
jmp (pDrv) pDrvJmp
jmp (pDev) pDevJmp
.BS $BE20-*
.BS $BD20-*
*--------------------------------------
GO.Reset jsr GO.A2osX
jmp K.KernelRun
@ -97,7 +104,34 @@ A2osX.MLICALL1 stx .1
jsr GO.A2osX
rts
*--------------------------------------
A2osX.BLKCALL1
* BLKCALL.PARAMS moved to MainZP/LC
* $42 Command Number
* $43 Unit Number
* $44-$45 Buffer Pointer
* $46-$47 Block Number
*--------------------------------------
A2osX.BLKCALL1 >STYA .2+1 setup device entry point $Cnxx
jsr GO.ProDOS
ldx #5
.1 lda BLKCALL.PARAMS,x
sta $42,x setup ZP in main memory for this block device calll
dex
bpl .1
.2 jsr $ffff
jsr GO.A2osX
rts
*--------------------------------------
* Smartport Call
*--------------------------------------
A2osX.PRTCALL1
clc
rts
*--------------------------------------
GO.ProDOS lda $D000 We re coming from AUXLC, saving bank...
sta GO.A2osX.BNK+1

View File

@ -10,11 +10,11 @@ Kernel.Init2 sei
>LDAXI MSG.Init2
jsr PrintCStrAX
>LDYAI A2osX.BE00
>LDYAI A2osX.GP
>STYA ZPQuickPtr1
>LDYAI $BE00
>LDYAI A2osX.SYSCALL
>STYA ZPQuickPtr2
>LDYAI A2osX.BE00.SIZE^$FFFF
>LDYAI A2osX.GP.SIZE^$FFFF
>STYA ZPQuickPtr3
jsr Kernel.Move
@ -89,10 +89,10 @@ Kernel.Init2 sei
jsr CPU.Init
>LDAXI MSG.Init2.OK
jsr PrintCStrAX
jsr PrintCStrAX
rts Do NOT replace this JSR/RTS with a JMP
*--------------------------------------
MSG.Init2 >CSTR "A2osX[Stage2]:Init\nInstalling KERNEL...\n - $BE00 (Global Page)...\n"
MSG.Init2 >CSTR "A2osX[Stage2]:Init\nInstalling KERNEL...\n - Global Page...\n"
MSG.D000BNK1 >CSTR " - $D000 Bank1...\n"
MSG.D000BNK2 >CSTR " - $D000 Bank2...\n"
MSG.E000 >CSTR " - $E000...\n"

View File

@ -49,11 +49,11 @@ ZPQuickPtr4 .EQ ZPKERNEL+6
*--------------------------------------
* Global Page
*--------------------------------------
A2osX.BE00 .EQ *
.PH $BE00
A2osX.GP .EQ *
.PH $BD00
.INB SYS/KERNEL.S.GP
.EP
A2osX.BE00.END .EQ *
A2osX.GP.END .EQ *
*--------------------------------------
* LC AUX $D000 BANK1 API Calls $00-$3E
*--------------------------------------
@ -120,13 +120,13 @@ A2osX.E000.END .EQ *
*--------------------------------------
.LIST ON
*--------------------------------------
A2osX.BE00.SIZE .EQ A2osX.BE00.END-A2osX.BE00
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP
A2osX.D001.SIZE .EQ A2osX.D001.END-A2osX.D001
A2osX.D002.SIZE .EQ A2osX.D002.END-A2osX.D002
A2osX.E000.SIZE .EQ A2osX.E000.END-A2osX.E000
*--------------------------------------
.LIST OFF
.DO A2osX.BE00.SIZE>$E0
.DO A2osX.GP.SIZE>$1E0
.LIST ON
* !!!!!!!!!!!!! ERROR:GP too big !!!!!!!!!!!!
.LIST OFF

View File

@ -5,7 +5,7 @@ AUTO 6
PREFIX /A2OSX.BOOT
BLOAD A2OSX.SYSTEM
DELETE A2OSX.SYSTEM
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1000
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$0A00
-A2OSX.SYSTEM
MAN
PREFIX /A2OSX.SRC