NEW PREFIX /A2OSX.BUILD AUTO 4,1 *-------------------------------------- ZPDRV .EQ $30 ZPLIB .EQ $40 32 bytes for TCPIP *-------------------------------------- * PS Context : 48 bytes MAX *-------------------------------------- pEvent .EQ $D4 pPs .EQ $D6 pCode .EQ $D8 pData .EQ $DA pStack .EQ $DC pLocal .EQ $DE 8 Bytes ZPBIN .EQ $E0 32 bytes ZPBIN.SIZE .EQ 40 8+32 *-------------------------------------- * A2osX GLOBAL PAGE * $BD00->$BD0F : Public Vetors *-------------------------------------- A2osX.SYSCALL .EQ $BD00 A2osX.LIBCALL .EQ $BD03 A2osX.ATKCALL .EQ $BD06 A2osX.ROMCALL .EQ $BD09 A2osX.BADCALL .EQ $BD0C *-------------------------------------- A2osx.SLEEP .EQ $BD10 *-------------------------------------- * $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 WORD, (->255.99 Mhz) A2osX.Z80SLOT .EQ $BEE8 A2osX.Z80SPEED .EQ $BEE9 WORD A2osX.InKernel .EQ $BEEB A2osX.TIMER16 .EQ $BEEC WORD A2osX.RANDOM16 .EQ $BEEE WORD *-------------------------------------- * $BEF0->$BEFF : Kernel Config Block *-------------------------------------- A2osX.HZ .EQ $BEF0 5/6 for 50/60Hz A2osX.F .EQ $BEF8 A2osX.F.CHROOT .EQ %10000000 ChRooting to /RAMx A2osX.F.PMODE .EQ %01000000 Preemptive Mode A2osX.S .EQ $BEF8 $BEF9->$BEFF, 7 slots A2osX.S.Z80 .EQ $80 A2osX.S.VSDRIVE .EQ $81 A2osX.S.ATCARD .EQ $82 A2osX.S.DII .EQ $C0 A2osX.S.BLK .EQ $C1 A2osX.S.SP .EQ $C2 A2osX.S.COM .EQ $E0 A2osX.S.XY .EQ $E1 A2osX.S.NIC .EQ $E2 A2osX.S.DISABLE .EQ $FF *-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- * .EQ $00 * .EQ $02 SYS.Stat .EQ $04 SYS.MKDir.YA .EQ $06 SYS.MKNod.YA .EQ $08 SYS.MKFIFO .EQ $0A * .EQ $0C * .EQ $0E SYS.OpenDir.YA .EQ $10 SYS.ReadDir.A .EQ $12 SYS.CloseDir.A .EQ $14 * .EQ $16 * .EQ $18 * .EQ $1A * .EQ $1C * .EQ $1E SYS.FPutC.AY .EQ $20 SYS.PutChar.A .EQ $22 SYS.GetC.A .EQ $24 SYS.GetChar .EQ $26 SYS.FPutS .EQ $28 SYS.PutS.YA .EQ $2A * .EQ $2C * .EQ $2E SYS.FOpen .EQ $30 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.FClose.A .EQ $32 SYS.FRead .EQ $34 SYS.FWrite .EQ $36 SYS.FFlush .EQ $38 SYS.FSeek .EQ $3A SYS.FSeek.SET .EQ $00 SYS.FSeek.CUR .EQ $01 SYS.FSeek.END .EQ $02 SYS.FTell .EQ $3C SYS.FEOF .EQ $3E SYS.Remove.YA .EQ $40 SYS.Rename .EQ $42 * .EQ $44 * .EQ $46 SYS.GetDevByID.A .EQ $48 SYS.GetDevByName.YA .EQ $4A SYS.GetDevStatus.A .EQ $4C SYS.DevIOCTL .EQ $4E * .EQ $50 SYS.SScanF .EQ $52 * .EQ $54 * .EQ $56 SYS.PrintF.YA .EQ $58 SYS.SPrintF.YA .EQ $5A SYS.FPrintF.YA .EQ $5C * .EQ $5E * .EQ $60 * .EQ $62 SYS.LoadFile .EQ $64 SYS.LoadTxtFile.YA .EQ $66 SYS.ChTyp .EQ $68 SYS.ChMod .EQ $6A SYS.ChOwn .EQ $6C SYS.ChGrp .EQ $6E SYS.AToF .EQ $70 SYS.AToI.YA .EQ $72 SYS.AToL .EQ $74 SYS.StrToF .EQ $76 SYS.StrToL .EQ $78 * .EQ $7A SYS.RealPath.YA .EQ $7C * .EQ $7E *-------------------------------------- SYS.StrLen.YA .EQ $80 SYS.StrCpy .EQ $82 SYS.StrCat .EQ $84 SYS.StrMatch .EQ $86 SYS.StrUpr.YA .EQ $88 SYS.StrLwr.YA .EQ $8A SYS.StrCmp .EQ $8C SYS.StrICmp .EQ $8E SYS.Time.YA .EQ $90 SYS.CTime2Time .EQ $92 SYS.PTime2Time .EQ $94 SYS.StrFTime .EQ $96 SYS.LoadLib.YA .EQ $98 SYS.UnloadLib.A .EQ $9A SYS.LoadDrv.YA .EQ $9C SYS.FileSearch .EQ $9E *-------------------------------------- SYS.ExecPSNewEnv.YA .EQ $A0 SYS.ExecPS.YA .EQ $A2 SYS.CreatePSNewEnv.YA .EQ $A4 SYS.CreatePS.YA .EQ $A6 * .EQ $A8 * .EQ $AA SYS.GetPSStatus.A .EQ $AC SYS.GetPSList.YA .EQ $AE * .EQ $B0 SYS.GetArg.A .EQ $B2 SYS.ExpandStr.YA .EQ $B4 * .EQ $B6 SYS.PutEnv.YA .EQ $B8 SYS.SetEnv .EQ $BA SYS.GetEnv.YA .EQ $BC SYS.UnsetEnv.YA .EQ $BE *-------------------------------------- SYS.FAdd .EQ $C0 SYS.FSub .EQ $C2 SYS.FMult .EQ $C4 SYS.FDiv .EQ $C6 SYS.FPwr .EQ $C8 * .EQ $CA SYS.LRIntF .EQ $CC SYS.Float .EQ $CE SYS.Log .EQ $D0 SYS.Sqr .EQ $D2 SYS.Exp .EQ $D4 SYS.Cos .EQ $D6 SYS.Sin .EQ $D8 SYS.Tan .EQ $DA SYS.ATan .EQ $DC * .EQ $DF *-------------------------------------- SYS.GetMemStat.YA .EQ $E0 SYS.FreeMem.A .EQ $E2 SYS.GetMemPtr.A .EQ $E4 SYS.GetMemByID.A .EQ $E6 SYS.GetMem.YA .EQ $E8 SYS.GetMem0.YA .EQ $EA SYS.NewStr.YA .EQ $EC SYS.SListAdd .EQ $EE SYS.SListLookup .EQ $F0 SYS.SListGetByID .EQ $F2 SYS.SListUpdateByID .EQ $F4 SYS.SListNew .EQ $F6 SYS.SListFree.A .EQ $F8 SYS.LoadStkObj .EQ $FA SYS.NewStkObj.YA .EQ $FC SYS.FreeStkObj.A .EQ $FE *-------------------------------------- SYS.Kernel.JMP .EQ $E000 SYS.GuiOSD.JMP .EQ $E200 *-------------------------------------- * ProDOS ERROR CODES : $00->$5F * Lib ERROR CODES : $80->$BF * Kernel ERROR CODES : $C0->$FF *-------------------------------------- K.E.OOM .EQ $FF Out Of Memory Error K.E.OOH .EQ $FE Out Of Handle Error *-------------------------------------- K.E.NSP .EQ $DD No Such Process Error *-------------------------------------- K.E.SYN .EQ $CF Syntax Error K.E.ENVF .EQ $CE Env is Full K.E.IBIN .EQ $CD Invalid BIN format K.E.FTB .EQ $CC File Too Big Error *-------------------------------------- * MEM STRUCT *-------------------------------------- S.MEM.F .EQ 0 S.MEM.F.INUSE .EQ %10000000 (Internal Flag) 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.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.MSTAT.ML .EQ 0 S.MSTAT.MF .EQ 2 S.MSTAT.MH .EQ 4 S.MSTAT.MLast .EQ 6 * S.MSTAT.XL .EQ 8 S.MSTAT.XF .EQ 10 S.MSTAT.XH .EQ 12 S.MSTAT.XLast .EQ 14 * S.MSTAT.DL .EQ 16 S.MSTAT.DF .EQ 18 S.MSTAT.DH .EQ 20 S.MSTAT.DCount .EQ 22 * S.MSTAT .EQ 24 *-------------------------------------- * DEVMGR (new API) = Smartport *-------------------------------------- * JMP : (A=Device) * DRV : AUXLC entry point * BLK : ROM Entry point Cn($Cnff) * PRT : ROM Entry point Cn($Cnff)+3 *-------------------------------------- S.DEV.DRV.JMP .EQ 2 S.DEV.S .EQ 4 S.DEV.S.BLOCK .EQ %10000000 S.DEV.S.WRITE .EQ %01000000 S.DEV.S.READ .EQ %00100000 S.DEV.S.ONLINE .EQ %00010000 S.DEV.S.NOFMT .EQ %00001000 S.DEV.S.WENABL .EQ %00000100 S.DEV.S.IRQ .EQ %00000010 S.DEV.S.OPENED .EQ %00000001 S.DEV.F .EQ 5 *S.DEV.F.PRT .EQ %10000000 *S.DEV.F.BLK .EQ %01000000 *S.DEV.F.DII .EQ %00100000 S.DEV.BUSID .EQ 6 S.DEV.DEVID .EQ 7 S.DEV.ROM.JMP .EQ 8 word * S.DEV.NAME .EQ 11 4+\0 MAX * S.DEV .EQ 16 *----------- Smartport ---------------- DEVMGR.STATUS .EQ 0 DEVMGR.READBLOCK .EQ 2 DEVMGR.WRITEBLOCK .EQ 4 DEVMGR.FORMAT .EQ 6 DEVMGR.CONTROL .EQ 8 DEVMGR.INIT .EQ 10 DEVMGR.OPEN .EQ 12 DEVMGR.CLOSE .EQ 14 DEVMGR.READ .EQ 16 DEVMGR.WRITE .EQ 18 DEVMGR.IRQ .EQ 20 *-------------------------------------- S.DSTAT.S .EQ 0 S.DSTAT.S.BLOCK .EQ %10000000 S.DSTAT.S.WRITE .EQ %01000000 S.DSTAT.S.READ .EQ %00100000 S.DSTAT.S.ONLINE .EQ %00010000 S.DSTAT.S.NOFMT .EQ %00001000 S.DSTAT.S.WENABL .EQ %00000100 S.DSTAT.S.IRQ .EQ %00000010 S.DSTAT.S.OPENED .EQ %00000001 S.DSTAT.SIZE .EQ 1 3 bytes S.DSTAT.IDS .EQ 4 1 (LEN) + 16 MAX S.DSTAT.T .EQ 21 S.DSTAT.T.RAM .EQ $00 Memory Expansion Card (RAM disk) S.DSTAT.T.3.5 .EQ $01 3.5" disk S.DSTAT.T.PROFILE .EQ $02 ProFile-type hard disk S.DSTAT.T.GENSCSI .EQ $03 Generic SCSI S.DSTAT.T.ROM .EQ $04 ROM disk S.DSTAT.T.CDROM .EQ $05 SCSI CD-ROM S.DSTAT.T.TAPE .EQ $06 SCSI tape or other SCSI sequential device S.DSTAT.T.HD .EQ $07 SCSI hard disk * .EQ $08 Reserved S.DSTAT.T.SPRINTER .EQ $09 SCSI printer S.DSTAT.T.5.25 .EQ $0A 5-1/4" disk * .EQ $0B Reserved * .EQ $0C Reserved S.DSTAT.T.PRINTER .EQ $0D Printer S.DSTAT.T.CLOCK .EQ $0E Clock S.DSTAT.T.MODEM .EQ $0F Modem S.DSTAT.T.DISKII .EQ $10 S.DSTAT.T.PRODOS .EQ $11 S.DSTAT.T.NET .EQ $12 Network board S.DSTAT.T.XY .EQ $13 X,Y Pointing Device S.DSTAT.T.CHAR .EQ $14 S.DSTAT.T.GFX .EQ $15 S.DSTAT.ST .EQ 22 S.DSTAT.ST.EXT .EQ $80 S.DSTAT.ST.DSKSW .EQ $40 S.DSTAT.ST.NOREM .EQ $20 S.DSTAT.VERSION .EQ 23 * S.DSTAT .EQ 25 *-------------------------------------- * PS STRUCT *-------------------------------------- S.PS.F .EQ 0 S.PS.F.INIT .EQ %10000000 S.PS.F.RUN .EQ %01000000 S.PS.F.HOLD .EQ %00100000 S.PS.F.SLEEP .EQ %00010000 S.PS.F.EVENT .EQ %00001000 S.PS.F.DUPENV .EQ %00000100 S.PS.F.PREEMPTED .EQ %00000001 S.PS.PPID .EQ 1 S.PS.PID .EQ 2 S.PS.CPID .EQ 3 S.PS.hCS .EQ 4 S.PS.hDS .EQ 5 S.PS.hSS .EQ 6 S.PS.UID .EQ 7 S.PS.hENV .EQ 8 S.PS.hPREFIX .EQ 9 S.PS.hStdIn .EQ 10 S.PS.hStdOut .EQ 11 S.PS.hStdErr .EQ 12 S.PS.RC .EQ 13 S.PS.ARGC .EQ 14 S.PS.hARGS .EQ 15 S.PS.STATS .EQ 16 S.PS.A .EQ 17 S.PS.X .EQ 18 S.PS.Y .EQ 19 S.PS.P .EQ 20 S.PS.PC .EQ 21 WORD S.PS.ZP.SIZE .EQ 23 S.PS.ZP .EQ 24 S.PS.ZP.CODE .EQ 24 S.PS.ZP.DATA .EQ 26 S.PS.ZP.STACK .EQ 28 S.PS.ZP.LOCAL .EQ 30 * S.PS .EQ S.PS.ZP+ZPBIN.SIZE *-------------------------------------- * 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.B2 is a hMem S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.B1 is a hMem S.EVT.hDEV .EQ 1 S.EVT.B1 .EQ 2 S.EVT.B2 .EQ 3 S.EVT.W1 .EQ 4 S.EVT.W2 .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.JMP .EQ 3 word * S.NODE.DEV .EQ 5 *-------------------------------------- * S.NODE.LNK *-------------------------------------- S.NODE.SSOCK.HSKT .EQ 2 S.NODE.SSOCK.OPEN .EQ 3 S.NODE.SSOCK.CLOSE .EQ 4 S.NODE.SSOCK.READ .EQ 5 S.NODE.SSOCK.WRITE .EQ 6 S.NODE.SSOCK.STATUS .EQ 7 * S.NODE.SSOCK .EQ 8 *-------------------------------------- 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 6 *-------------------------------------- MAN SAVE /A2OSX.BUILD/INC/A2OSX.I