PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *-------------------------------------- * KERNEL CONSTANTS DEFINITON *-------------------------------------- K.ENV.SIZE .EQ 256 K.EVT.MAX .EQ 16 K.DEV.MAX .EQ 16 K.FLT.MAX .EQ 8 K.PS.MAX .EQ 64 *-------------------------------------- * Kernel ZP Aux *-------------------------------------- ZPKERNEL .EQ $0 *-------------------------------------- ZPMEMMGR .EQ $10 *-------------------------------------- pCode .EQ $20 pData .EQ $22 pStack .EQ $24 pLib .EQ $26 pDrv .EQ $28 pPs .EQ $2A pDev .EQ $2C pEvent .EQ $2E *-------------------------------------- ZPDRV .EQ $30 ZPBIN .EQ $40 *-------------------------------------- * $3A-$3F ProDOS Block Device Drivers Main *-------------------------------------- * $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) *-------------------------------------- ZPLIB .EQ $E0 32 bytes for TCPIP *-------------------------------------- * Memory Map *-------------------------------------- A2osX.SaveSM .EQ $100 Aux A2osX.SaveSX .EQ $101 Aux *-------------------------------------- * Main $200 -> 2FF : (Used By ProDOS,Clock DRV....) * Main $300 -> 3EF : * Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...) * Aux $200 -> 3FD : /RAM Driver * Aux $3FE -> 3FF : IRQ Vector *-------------------------------------- UsrBuf256 .EQ $0200 Main *-------------------------------------- *D.STACK.BASE .EQ $0300 $03EF... D.STACK.TOP .EQ $03F0 ...Down to $0300 *-------------------------------------- *** $3F0-$3FF IRQ Handler.... *** *-------------------------------------- * Main/Aux $400 -> $7FF : Console Screen * Main/Aux $800 -> $BFF : System Screen *-------------------------------------- KrnBuf256 .EQ $0C00 Main *-------------------------------------- MLICALL.PARAMS .EQ $0D00 Main, $12 bytes min !!!! MLICALL.TMPBUF .EQ $0D12 Small buffer (14 bytes) for MLI calls 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 *-------------------------------------- *** Z80 Reserved $0F00-10FF*** *-------------------------------------- Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00 Z80JMP .EQ $1000 (00000h) Up To $10FF *-------------------------------------- EvtMgr.Table .EQ $1100 K.EVT.MAX*S.EVT.SIZE=32*8=256b *-------------------------------------- DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=16*16=256b *-------------------------------------- FltMgr.Table .EQ $1300 K.FLT.MAX*S.FLT.SIZE=8*32=256b *-------------------------------------- TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=64*16=1k *-------------------------------------- * MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes) *-------------------------------------- MemMgr.Table .EQ $1800 Slot 0 is Reserved MemMgr.LoMem .EQ $1800 MemMgr.Free .EQ $1802 MemMgr.HiMem .EQ $1804 MemMgr.LastSlot .EQ $1806 *-------------------------------------- MemMgr.MLoMem .EQ $2000 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 * $BD00->$BD0F : Public Vetors *-------------------------------------- A2osX.SYSCALL .EQ $BD00 A2osX.LIBCALL .EQ $BD03 A2osX.MLICALL .EQ $BD06 A2osX.BLKCALL .EQ $BD09 A2osX.PRTCALL .EQ $BD0C *-------------------------------------- pCodeJmp .EQ $BD10 pLibJmp .EQ $BD13 pDrvJmp .EQ $BD16 pDevJmp .EQ $BD19 *-------------------------------------- * $BEE0->$BEEF : Public Variables *-------------------------------------- A2osX.ASCREEN .EQ $BEE0 Active Screen A2osX.SCRNDEVS .EQ $BEE1 -> $BEE4 (4 screen devices) A2osX.CPUTYPE .EQ $BEE5 A2osX.CPUSPEED .EQ $BEE6 (->255.99 Mhz) A2osX.Z80SLOT .EQ $BEE7 A2osX.Z80SPEED .EQ $BEE8 A2osX.TIMER16 .EQ $BEEC A2osX.RANDOM16 .EQ $BEEE *-------------------------------------- * $BEF0->$BEFF : Kernel Config Block *-------------------------------------- A2osX.HZ .EQ $BEF0 A2osX.RAMDRVDIS .EQ $BEF8 If $80, prevent CHrooting to /RAMx A2osX.SLOTS .EQ $BEF8 $BEF9->$BEFF, 7 slots *-------------------------------------- H.BIN.HEADER .EQ 0 H.BIN.HEADER.DRV65 .EQ $4CD8 6502:cld,jmp abs H.BIN.HEADER.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x) H.BIN.HEADER.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x) H.BIN.HEADER.LIB80 .EQ $A28D Z80: H.BIN.HEADER.BIN80 .EQ $A28D Z80: H.BIN.JMP .EQ 2 H.BIN.CODE.TYPE .EQ 4 H.BIN.VERSION .EQ 5 H.BIN.CODE.LEN .EQ 8 * H.BIN.EXE.DS.SIZE .EQ 10 H.BIN.EXE.REL.TABLE .EQ 16 * H.BIN.DRV.HEADER.O .EQ 10 H.BIN.DRV.CODE.O .EQ 12 H.BIN.DRV.CODE.LEN .EQ 14 H.BIN.DRV.REL.TABLE .EQ 0 *-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- SYS.FileSearch .EQ $00 SYS.GetFullPathYA .EQ $02 SYS.LoadFile .EQ $04 SYS.SaveFile .EQ $06 * .EQ $08 * .EQ $0A * .EQ $0C * .EQ $0E *-------------------------------------- SYS.LoadDrvYA .EQ $10 SYS.LoadLibYA .EQ $12 SYS.UnloadLibA .EQ $14 SYS.LoadExeYA .EQ $16 SYS.TimeYA .EQ $18 SYS.CTime2Time .EQ $1A SYS.PTime2Time .EQ $1C * .EQ $1E *-------------------------------------- SYS.FOPEN .EQ $20 SYS.FOPEN.R .EQ $01 Open For Read SYS.FOPEN.W .EQ $02 Open For Write SYS.FOPEN.A .EQ $04 Append SYS.FOPEN.T .EQ $08 Open/Append in Text mode SYS.FOPEN.X .EQ $80 Create if not exists SYS.FCloseA .EQ $22 SYS.FREAD .EQ $24 SYS.FWRITE .EQ $26 SYS.FFLUSH .EQ $28 SYS.FSEEK .EQ $2A SYS.FSEEK.SET .EQ $00 SYS.FSEEK.CUR .EQ $01 SYS.FSEEK.END .EQ $02 SYS.FTELL .EQ $2C SYS.FEOF .EQ $2E SYS.RemoveYA .EQ $30 SYS.Rename .EQ $32 SYS.STAT .EQ $34 * .EQ $36 SYS.OPENDIRYA .EQ $38 SYS.ReadDirA .EQ $3A SYS.CloseDirA .EQ $3C SYS.MKDirYA .EQ $3E *-------------------------------------- SYS.COutA .EQ $40 SYS.SScanF .EQ $42 SYS.PPrintFYA .EQ $44 SYS.CPrintFYA .EQ $46 SYS.FPUTCA .EQ $48 SYS.FGETC .EQ $4A SYS.FPUTSYA .EQ $4C SYS.FGETS .EQ $4E *-------------------------------------- SYS.NewPStrYA .EQ $50 SYS.PStrCpy .EQ $52 SYS.PStrCat .EQ $54 SYS.PStrMatch .EQ $56 SYS.PStrUprYA .EQ $58 SYS.PStrLwrYA .EQ $5A SYS.PStrFTime .EQ $5C SYS.PStr2StrArrayYA .EQ $5E *-------------------------------------- SYS.ExecProcessNewEnvYA .EQ $60 SYS.ExecProcessYA .EQ $62 SYS.CreateProcessNewEnvYA .EQ $64 SYS.CreateProcessYA .EQ $66 SYS.GetPSByIDA .EQ $68 * .EQ $6A SYS.Sleep .EQ $6C * .EQ $6E *-------------------------------------- SYS.GetArgC .EQ $70 SYS.GetArgA .EQ $72 SYS.ExpandPStrYA .EQ $74 * .EQ $76 SYS.PutEnvYA .EQ $78 SYS.SetEnv .EQ $7A SYS.GetEnvYA .EQ $7C SYS.UnsetEnvYA .EQ $7E *-------------------------------------- SYS.GetDevByIDA .EQ $80 SYS.GetDevByNameYA .EQ $82 SYS.GetDevInfoA .EQ $84 * .EQ $86 *-------------------------------------- SYS.MKNodYA .EQ $88 SYS.MKNodA .EQ $8A SYS.MKFIFO .EQ $8C * .EQ $8E *-------------------------------------- SYS.GetMem .EQ $90 SYS.FreeMemA .EQ $92 SYS.GetMemPtrA .EQ $94 SYS.GetMemByIDA .EQ $96 * .EQ $98 SYS.LoadStockObjectYA .EQ $9A SYS.GetStockObjectA .EQ $9C SYS.FreeStockObject .EQ $9E *-------------------------------------- SYS.SetLoMem .EQ $A0 SYS.GetMemStatYA .EQ $A2 *-------------------------------------- * ProDOS ERROR CODES : $00->$5F * Lib ERROR CODES : $80->$BF * Kernel ERROR CODES : $C0->$FF *-------------------------------------- MEMMGR.ERROOM .EQ $FF Out Of Memory Error MEMMGR.ERROOH .EQ $FE Out Of Handle Error *-------------------------------------- DEVMGR.ERROOM .EQ $EF Out Of Memory Error DEVMGR.ERROOH .EQ $EE Out Of Handle Error DEVMGR.ERRICL .EQ $ED Invalid Command Line DEVMGR.ERRNOHW .EQ $EC No Hardware DEVMGR.ERRDNF .EQ $EB Device Not Found Error DEVMGR.ERRUNSUP .EQ $EA Unsupported Function *-------------------------------------- TSKMGR.ERROOH .EQ $DF Out Of Handle Error TSKMGR.ERRNSP .EQ $DD No Such Process Error *-------------------------------------- SYSMGR.ERRSYN .EQ $CF Syntax Error SYSMGR.ERRENVF .EQ $CE Env is Full SYSMGR.ERRIBIN .EQ $CD Invalid BIN format SYSMGR.ERRFTB .EQ $CC File Too Big Error SYSMGR.ERRFNF .EQ $CB File Not Found Error *-------------------------------------- * MEM STRUCT *-------------------------------------- S.MEM.F .EQ 0 S.MEM.F.AUX .EQ %10000000 Request Stock Object S.MEM.F.INIT0 .EQ %01000000 Fill with "0" S.MEM.F.CODE .EQ %00100000 S.MEM.F.NOMOVE .EQ %00010000 S.MEM.F.ALIGN .EQ %00001000 S.MEM.F.INUSE .EQ %10000000 (Internal Flag) S.MEM.REFCNT .EQ 1 S.MEM.OWNERPID .EQ 2 S.MEM.BIN .EQ 3 S.MEM.PTR .EQ 4 S.MEM.LEN .EQ 6 * S.MEM .EQ 8 *-------------------------------------- S.MEMSTAT.ML .EQ 0 S.MEMSTAT.MF .EQ 2 S.MEMSTAT.MH .EQ 4 * S.MEMSTAT.XL .EQ 8 S.MEMSTAT.XF .EQ 10 S.MEMSTAT.XH .EQ 12 * S.MEMSTAT.DL .EQ 16 S.MEMSTAT.DF .EQ 18 S.MEMSTAT.DH .EQ 20 * S.MEMSTAT .EQ 24 *-------------------------------------- S.DEVINFO.TYPE .EQ 0 S.DEVINFO.TYPE.CHAR .EQ %00000001 S.DEVINFO.TYPE.XY .EQ %00000010 S.DEVINFO.TYPE.NET .EQ %00000011 S.DEVINFO.TYPE.GFX .EQ %00000100 S.DEVINFO.FLAGS .EQ 1 S.DEVINFO.NET.FLAGS.ARPOFFLOAD .EQ %00000001 S.DEVINFO.NET.FLAGS.IPOFFLOAD .EQ %00000010 S.DEVINFO.NET.MAC .EQ 2 S.DEVINFO.NET.STATUS .EQ 8 S.DEVINFO.NET.STATUS.OK .EQ $80 S.DEVINFO.NET.STATUS.FD .EQ $40 S.DEVINFO.NET.STATUS.10 .EQ $01 S.DEVINFO.NET.STATUS.100 .EQ $02 S.DEVINFO.NET.STATUS.1000 .EQ $03 *-------------------------------------- * Generic Driver Functions *-------------------------------------- DEVMGR.OPEN .EQ 0 DEVMGR.GETEVENT .EQ 2 DEVMGR.COUT .EQ 4 DEVMGR.CLOSE .EQ 6 DEVMGR.GETINFO .EQ 8 DEVMGR.IRQ .EQ 10 *-------------------------------------- DEVMGR.SELECT .EQ 12 *-------------------------------------- * 'NET' Class Driver Functions *-------------------------------------- DEVMGR.NET.SEND .EQ 12 DEVMGR.SETIPCFG .EQ 14 *-------------------------------------- * 'GFX' Class Driver Functions *-------------------------------------- DEVMGR.GFX.SETPIXEL .EQ 14 DEVMGR.GFX.GETPIXEL .EQ 16 DEVMGR.GFX.HLINE .EQ 18 DEVMGR.GFX.VLINE .EQ 20 DEVMGR.GFX.BITBLT .EQ 22 *-------------------------------------- * DEVMGR (old API) *-------------------------------------- S.DEV.CODE .EQ 0 cld,jmp... S.DEV.JMP .EQ 2 ...(code,x) S.DEV.ID .EQ 4 S.DEV.F .EQ 5 S.DEV.F.INUSE .EQ %10000000 S.DEV.F.BUSY .EQ %01000000 S.DEV.F.SHARE .EQ %00100000 Device is shareable S.DEV.F.IRQ .EQ %00010000 Device is irq driven S.DEV.F.EVENT .EQ %00001000 Device is event driven S.DEV.F.COUT .EQ %00000100 Device supports Char OUT S.DEV.F.BLOCK .EQ %00000010 S.DEV.F.CHAR .EQ %00000001 S.DEV.NAME .EQ 6 5 Bytes : LEN+NUL KBD CON COMx LPTx ETHx * S.DEV .EQ 16 *-------------------------------------- * DEVMGR (new API) = Smartport *-------------------------------------- * JMP : * DEVID : * 00->0F : NUL,SYS & loadable drivers * X0 : X=Slot : Controller * XY : X=Slot, Y=Device (<$80) * > $80 : IDs for PIPE,SOCK.... *-------------------------------------- *S.DEV.JMP .EQ 0 *S.DEV.DEVID .EQ 2 *S.DEV.F .EQ 3 *S.DEV.F.BLOCK .EQ %10000000 *S.DEV.F.WRITE .EQ %01000000 *S.DEV.F.READ .EQ %00100000 *S.DEV.F.ONLINE .EQ %00010000 *S.DEV.F.NOFMT .EQ %00001000 *S.DEV.F.WENABL .EQ %00000100 *S.DEV.F.IRQ .EQ %00000010 *S.DEV.F.OPENED .EQ %00000001 *S.DEV.NAME .EQ 4 *S.DEV .EQ 8 *-------------------------------------- *DEVMGR..STATUS .EQ 0 *DEVMGR..READBLOCK .EQ 1 *DEVMGR..WRITEBLOCK .EQ 2 *DEVMGR..FORMAT .EQ 3 *DEVMGR..CONTROL .EQ 4 *DEVMGR..INIT .EQ 5 *DEVMGR..OPEN .EQ 6 *DEVMGR..CLOSE .EQ 7 *DEVMGR..READ .EQ 8 *DEVMGR..WRITE .EQ 9 *-------------------------------------- *S.DEVSTAT.F .EQ 0 same as S.DEV.F.* bitmasks *S.DEVSTAT.SIZE .EQ 1 3 bytes *S.DEVSTAT.IDSTRING .EQ 4 1 (LEN) + 16 MAX *S.DEVSTAT.TYPE .EQ 21 *S.DEVSTAT.SUBTYPE .EQ 22 *S.DEVSTAT.VERSION .EQ 23 *-------------------------------------- *-------------------------------------- * PS STRUCT *-------------------------------------- S.PS.F .EQ 0 S.PS.F.INUSE .EQ %10000000 S.PS.F.INIT .EQ %01000000 S.PS.F.HOLD .EQ %00100000 S.PS.F.SLEEP .EQ %00010000 S.PS.F.EVENT .EQ %00001000 S.PS.F.ENV .EQ %00000100 S.PS.PID .EQ 1 S.PS.PPID .EQ 2 S.PS.hCS .EQ 3 S.PS.hDS .EQ 4 S.PS.hPREFIX .EQ 5 S.PS.hENV .EQ 6 S.PS.hCMDLINE .EQ 7 S.PS.UID .EQ 8 S.PS.hINDEV .EQ 9 S.PS.hStdIn .EQ 9 S.PS.hOUTDEV .EQ 10 S.PS.hStdOut .EQ 10 S.PS.hERRDEV .EQ 11 S.PS.hStdErr .EQ 11 S.PS.CPID .EQ 12 S.PS.RC .EQ 13 S.PS.PC .EQ 14 * S.PS .EQ 16 *-------------------------------------- * LIB Function Indexes *-------------------------------------- LIBMGR.LOAD .EQ 0 LIBMGR.UNLOAD .EQ 2 *-------------------------------------- * Task Function Indexes *-------------------------------------- TSKMGR.INIT .EQ 0 TSKMGR.RUN .EQ 2 TSKMGR.DOEVENT .EQ 4 TSKMGR.QUIT .EQ 6 *-------------------------------------- * EVENT STRUCT *-------------------------------------- S.EVT.F .EQ 0 S.EVT.F.T10TH .EQ %10000000 S.EVT.F.T1SEC .EQ %01000000 S.EVT.F.hMEM2 .EQ %00100000 Indicates That S.EVT.DATAHI is a hMem S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.DATALO is a hMem S.EVT.F.NET .EQ %00000100 S.EVT.F.MOUSE .EQ %00000010 S.EVT.F.KEY .EQ %00000001 S.EVT.hDEV .EQ 1 S.EVT.DATA .EQ 2 S.EVT.DATALO .EQ 2 S.EVT.DATAHI .EQ 3 S.EVT.DATAW1 .EQ 4 S.EVT.DATAW2 .EQ 6 * S.EVT .EQ 8 *-------------------------------------- S.TIME.CENTURY .EQ 0 19,20,21.... S.TIME.YEAR .EQ 1 0.99 S.TIME.MONTH .EQ 2 1..12 S.TIME.DAY .EQ 3 1..31 S.TIME.HOUR .EQ 4 0..23 S.TIME.MINUTE .EQ 5 0..59 S.TIME.SECOND .EQ 6 0..61 S.TIME.WDAY .EQ 7 1..7 * S.TIME .EQ 8 *-------------------------------------- S.PFT.PATH .EQ 0 /dev, /mnt S.PFT.HANDLER .EQ 16 S.PFT.DATA .EQ 24 8 bytes OPAQUE data for handler * S.PFT .EQ 32 *-------------------------------------- * S.STAT *-------------------------------------- S.STAT.MODE .EQ 0 S.STAT.MODE.XO .EQ $0001 S.STAT.MODE.WO .EQ $0002 S.STAT.MODE.RO .EQ $0004 S.STAT.MODE.XG .EQ $0008 S.STAT.MODE.WG .EQ $0010 S.STAT.MODE.RG .EQ $0020 S.STAT.MODE.XU .EQ $0040 S.STAT.MODE.WU .EQ $0080 S.STAT.MODE.RU .EQ $0100 *S.STAT.MODE.SST .EQ $0200 *S.STAT.MODE.SGID .EQ $0400 *S.STAT.MODE.SUID .EQ $0800 S.STAT.MODE.REG .EQ $0000 S.STAT.MODE.DIR .EQ $1000 *S.STAT.MODE.CDEV .EQ $2000 *S.STAT.MODE.BDEV .EQ $3000 *S.STAT.MODE.LNK .EQ $4000 *S.STAT.MODE.DSOCK .EQ $5000 *S.STAT.MODE.SSOCK .EQ $6000 *S.STAT.MODE.FIFO .EQ $7000 S.STAT.DEV .EQ 2 WORD S.STAT.UID .EQ 4 WORD S.STAT.GID .EQ 6 WORD S.STAT.INO .EQ 8 QWORD S.STAT.NLINK .EQ 16 WORD S.STAT.SIZE .EQ 18 DWORD S.STAT.ATIME .EQ 22 S.TIME S.STAT.MTIME .EQ 30 S.TIME S.STAT.CTIME .EQ 38 S.TIME S.STAT.BLOCKS .EQ 46 DWORD S.STAT.BLKSIZE .EQ 50 WORD S.STAT.P.TYPE .EQ 52 BYTE S.STAT.P.AUXTYPE .EQ 53 WORD S.STAT.P.SLOT .EQ 55 BYTE S.STAT.P.DRIVE .EQ 56 BYTE S.STAT.P.DEVSTATUS .EQ 57 BYTE *S.STAT.P.DEVCNFLCT .EQ 58 BYTE S.STAT.P.DEVBLOCKS .EQ 59 BYTE * S.STAT .EQ 64 *-------------------------------------- * S.NODE *-------------------------------------- S.NODE.HANDLER .EQ 0 0=KRNL,!0=hLIB (LIBNFS,LIBTCPIP.....) S.NODE.T .EQ 1 S.NODE.T.REG .EQ 0 S.NODE.T.DIR .EQ 1 S.NODE.T.CDEV .EQ 2 S.NODE.T.BDEV .EQ 3 S.NODE.T.LNK .EQ 4 S.NODE.T.DSOCK .EQ 5 S.NODE.T.SSOCK .EQ 6 S.NODE.T.FIFO .EQ 7 *-------------------------------------- S.NODE.REG.REF .EQ 2 S.NODE.REG.IOBUF .EQ 3 * S.NODE.REG .EQ 4 *-------------------------------------- S.NODE.DIR.REF .EQ 2 S.NODE.DIR.IOBUF .EQ 3 S.NODE.DIR.EL .EQ 4 S.NODE.DIR.EPB .EQ 5 S.NODE.DIR.FC .EQ 6 word * S.NODE.DIR .EQ 8 *-------------------------------------- S.NODE.DEV.ID .EQ 2 * S.NODE.DEV .EQ 3 *-------------------------------------- * S.NODE.LNK *-------------------------------------- S.NODE.FIFO.S .EQ 2 S.NODE.FIFO.S.Opened .EQ 1 S.NODE.FIFO.S.Closed .EQ 2 S.NODE.FIFO.hMem .EQ 3 S.NODE.FIFO.Tail .EQ 4 S.NODE.FIFO.Head .EQ 5 * S.NODE.FIFO .EQ 5 *-------------------------------------- MAN SAVE /A2OSX.DEV/INC/A2OSX.I