PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *-------------------------------------- * KERNEL CONSTANTS DEFINITON *-------------------------------------- K.ENV.SIZE .EQ $100 K.EVT.MAX .EQ 16 K.DEV.MAX .EQ 32 K.PS.MAX .EQ 64 *-------------------------------------- * Aux ZP *-------------------------------------- ZPKERNEL .EQ $0 *-------------------------------------- ZPMEMMGR .EQ $8 *-------------------------------------- pCode .EQ $10 pData .EQ $12 pStack .EQ $14 pLib .EQ $16 pDrv .EQ $18 pPs .EQ $1A pDev .EQ $1C pEvent .EQ $1E ZPDRV .EQ $80 ZPBIN .EQ $90 ZPLIB .EQ $A0 32 bytes for TCPIP *-------------------------------------- * !!!!!!! RESERVED APPLESOFT.I !!!!!!! * $5E -> $C8 *-------------------------------------- R.VCPU16 .EQ $F0 R.AX .EQ R.VCPU16 R.AL .EQ R.VCPU16 R.AH .EQ R.VCPU16+$1 R.BX .EQ R.VCPU16+$2 R.BL .EQ R.VCPU16+$2 R.BH .EQ R.VCPU16+$3 R.CX .EQ R.VCPU16+$4 R.CL .EQ R.VCPU16+$4 R.CH .EQ R.VCPU16+$5 R.DX .EQ R.VCPU16+$6 R.DL .EQ R.VCPU16+$6 R.DH .EQ R.VCPU16+$7 *-------------------------------------- * 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 *-------------------------------------- TmpBuffer256 .EQ $0200 Main *-------------------------------------- D.STACK.BASE .EQ $0300 $03EF... D.STACK.TOP .EQ $03F0 ...Down to $0300 *-------------------------------------- *** IRQ Handler *** *-------------------------------------- * Main/Aux $400 -> $7FF : Console Screen * Main/Aux $800 -> $BFF : System Screen *-------------------------------------- KrnBuffer256 .EQ $0C00 *-------------------------------------- *** Z80 Reserved *** *-------------------------------------- Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00 Z80JMP .EQ $1000 *-------------------------------------- EvtMgr.Table .EQ $1100 K.EVT.MAX*S.EVT.SIZE=32*8=256b *-------------------------------------- DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b *-------------------------------------- TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=64*16=1k *-------------------------------------- * MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes) *-------------------------------------- MemMgr.Table .EQ $1800 MemMgr.HiMem .EQ $1800 Slot 0 is Reserved MemMgr.Free .EQ $1802 MemMgr.LoMem .EQ $1804 MemMgr.LastSlot .EQ $1806 *-------------------------------------- MemMgr.MLoMem .EQ $2000 MemMgr.MHiMem .EQ $BE00 MemMgr.XLoMem .EQ $2000 MemMgr.XHiMem .EQ $C000 *-------------------------------------- * A2osX GLOBAL PAGE * $BE00->$BE0F : Public Vetors *-------------------------------------- A2osX.SYSCALL .EQ $BE00 A2osX.LIBCALL .EQ $BE03 A2osX.MLICALL .EQ $BE06 A2osX.ROMCALL .EQ $BE09 *-------------------------------------- pCodeJmp .EQ $BE10 pLibJmp .EQ $BE13 pDrvJmp .EQ $BE16 pDevJmp .EQ $BE19 *-------------------------------------- * $12 bytes min !!!! *-------------------------------------- MLICALL.PARAMS .EQ $BEC0 *-------------------------------------- * $BEE0->$BEEF : Public Variables *-------------------------------------- A2osX.ASCREEN .EQ $BEE0 Active Screen A2osX.SCRNDEVS .EQ $BEE1 -> $BEE4 (4 devices) A2osX.CPUTYPE .EQ $BEE6 A2osX.CPUSPEED .EQ $BEE7 (->255.99 Mhz) A2osX.Z80SLOT .EQ $BEEA A2osX.TIMER16 .EQ $BEEC A2osX.RANDOM16 .EQ $BEEE *-------------------------------------- * $BEF0->$BEFF : Kernel Config Block *-------------------------------------- A2osX.HZ .EQ $BEF0 *-------------------------------------- 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.BIN.DS.SIZE .EQ 10 H.BIN.DEV.HEADER.O .EQ 10 H.BIN.DRV.CODE.O .EQ 12 H.BIN.DRV.CODE.LEN .EQ 14 H.BIN.RELOC.TABLE .EQ 16 *-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- SYS.GetMem .EQ $00 SYS.FreeMemA .EQ $02 SYS.GetMemPtrA .EQ $04 SYS.GetMemByIDA .EQ $06 SYS.GetMemByNameYA .EQ $08 SYS.LoadStockObjectYA .EQ $0A SYS.GetStockObjectA .EQ $0C SYS.FreeStockObject .EQ $0E *-------------------------------------- SYS.NewPStrYA .EQ $10 SYS.PStrCpy .EQ $12 SYS.PStrCat .EQ $14 SYS.PStrUprYA .EQ $16 SYS.PStr2StrArrayYA .EQ $1A *-------------------------------------- SYS.LoadDrvYA .EQ $20 SYS.LoadLibYA .EQ $22 SYS.UnloadLibA .EQ $24 *-------------------------------------- SYS.ExpandPStrYA .EQ $32 SYS.GetArgC .EQ $34 SYS.GetArgA .EQ $36 SYS.PutEnvYA .EQ $38 SYS.SetEnv .EQ $3A SYS.GetEnvYA .EQ $3C SYS.UnsetEnvYA .EQ $3E *-------------------------------------- SYS.MLICreateFile .EQ $40 SYS.MLICreateDirYA .EQ $44 SYS.MLIDestroyYA .EQ $48 SYS.MLIRename .EQ $4A SYS.MLISetFileInfo .EQ $4C SYS.MLIGetFileInfoYA .EQ $50 SYS.MLIOnline .EQ $52 SYS.MLISetPrefixYA .EQ $56 SYS.MLIGetPrefixYA .EQ $5A SYS.MLIOpenYA .EQ $5E SYS.MLINewLine .EQ $60 SYS.MLIRead .EQ $62 SYS.MLIWrite .EQ $64 SYS.MLICloseA .EQ $66 SYS.MLIFlushA .EQ $68 SYS.MLISetMark .EQ $6A SYS.MLIGetMarkA .EQ $6A SYS.MLISetEOF .EQ $6C SYS.MLIGetEOFA .EQ $70 SYS.MLISetBuf .EQ $72 SYS.MLIGetBuf .EQ $74 SYS.MLIGetTime .EQ $76 SYS.MLIAllocIRQ .EQ $78 SYS.MLIDeallocIRQ .EQ $7A SYS.MLIReadBlock .EQ $7C SYS.MLIWriteBlock .EQ $7E *-------------------------------------- SYS.GetDevByIDA .EQ $80 SYS.GetDevByNameYA .EQ $84 SYS.GetDevInfoA .EQ $86 SYS.GetKeyboardEvent .EQ $88 *-------------------------------------- SYS.ExecProcessNewEnvYA .EQ $90 SYS.ExecProcessYA .EQ $92 SYS.CreateProcessNewEnvYA .EQ $94 SYS.CreateProcessYA .EQ $96 SYS.GetPSByIDA .EQ $98 SYS.Sleep .EQ $9C *-------------------------------------- SYS.CheckPrefixYA .EQ $A0 SYS.FileSearch .EQ $A2 SYS.GetFullPathYA .EQ $A4 SYS.LoadFileYA .EQ $A6 SYS.ListDirInitYA .EQ $AA SYS.ListDirNextA .EQ $AC SYS.ListDirCloseA .EQ $AE *-------------------------------------- SYS.AddNetCfg .EQ $B0 SYS.SetNetCfg .EQ $B2 SYS.GetNetCfgA .EQ $B4 SYS.ClrNetCfgA .EQ $B6 *-------------------------------------- *SYS.ScreenSelectA .EQ $C0 *-------------------------------------- SYS.COutA .EQ $D0 SYS.PSTROutYA .EQ $D4 SYS.HexOutA .EQ $D8 SYS.HexOutYA .EQ $DA SYS.DecOutA .EQ $DC SYS.DecOutYA .EQ $DE *SYS.FGETC .EQ $F0 *SYS.FGETS .EQ $F2 *SYS.FPUTC .EQ $F4 *SYS.FPUTS .EQ $F6 *-------------------------------------- SYS.FOPEN .EQ $E0 SYS.FCLOSE .EQ $E2 SYS.FREAD .EQ $E4 SYS.FWRITE .EQ $E6 SYS.FFLUSH .EQ $E8 SYS.FSEEK .EQ $EA SYS.FTELL .EQ $EC SYS.FEOF .EQ $EE SYS.REMOVE .EQ $F0 SYS.RENAME .EQ $F2 SYS.OPENDIR .EQ $F4 SYS.READDIR .EQ $F6 SYS.CLOSEDIR .EQ $F8 SYS.MKDIR .EQ $FA SYS.MKNOD .EQ $FC SYS.MKFIFO .EQ $FE *-------------------------------------- S.FINFO.ACCESS .EQ $00 S.FINFO.TYPE .EQ $01 S.FINFO.AUXTYPE .EQ $02 S.FINFO.STORETYPE .EQ $04 S.FINFO.BLOCKSUSED .EQ $05 S.FINFO.MODDATE .EQ $07 S.FINFO.MODTIME .EQ $09 S.FINFO.CREATEDATE .EQ $0B S.FINFO.CREATETIME .EQ $0D S.FINFO .EQ $0F *-------------------------------------- * ProDOS ERROR CODES : $00->$5F * Lib ERROR CODES : $80->$BF * Kernel ERROR CODES : $C0->$FF *-------------------------------------- *$00 - No Error *$01 - Bad Call Number *$04 - Bad Parameter Count *$25 - Interrupt Table Full *$27 - I/O Error *$28 - No Device Connected *$2B - Write Protected *$2E - Disk Switched *$40 - Invalid Pathname *$42 - Maximum Number of Files Open *$43 - Invalid Reference Number *$44 - Directory Not Found *$45 - Volume Not Found *$46 - File Not Found *$47 - Duplicate File Name *$48 - Volume Full *$49 - Directory Full *$4A - Incompatible File Format *$4B - Unsupported Storage Type *$4C - End of File, No More Data *$4D - Beyond EOF *$4E - File Access Error, File Locked *$50 - File Already Open *$51 - Directory Structure Damaged *$53 - Invalid Parameter *$55 - Too Many Volumes *$56 - Bad Buffer Address *$57 - Duplicate Volume *$5A - File Structure Damaged *-------------------------------------- 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.ERRIDIR .EQ $CD Invalid Directory 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.SIZE .EQ 8 *-------------------------------------- * DEV STRUCT *-------------------------------------- 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.SIZE .EQ 16 *-------------------------------------- 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 *-------------------------------------- * PS STRUCT *-------------------------------------- S.PS.F .EQ 0 S.PS.F.INUSE .EQ %10000000 S.PS.F.HOLD .EQ %01000000 S.PS.F.EVENT .EQ %00100000 S.PS.F.ENV .EQ %00010000 S.PS.F.SLEEP .EQ %00001000 S.PS.F.INIT .EQ %00000100 S.PS.ID .EQ 1 S.PS.PID .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.hARGS .EQ 8 S.PS.hINDEV .EQ 9 S.PS.hOUTDEV .EQ 10 S.PS.hERRDEV .EQ 11 S.PS.CID .EQ 12 S.PS.LASTERROR .EQ 13 S.PS.PC .EQ 14 * S.PS.SIZE .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.LISTDIR STRUCT *-------------------------------------- S.LISTDIR.hONLINE .EQ 0 S.LISTDIR.ONLINEPTR .EQ 1 S.LISTDIR.REFNUM .EQ 2 ref_num file S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer S.LISTDIR.EL .EQ 5 entry_length S.LISTDIR.EIB .EQ 6 ENTRY_INDEX in block S.LISTDIR.EPB .EQ 7 entry_per_block S.LISTDIR.BLKPTR .EQ 8 entry PTR in block S.LISTDIR.FI .EQ 10 FILE_INDEX in DIR S.LISTDIR.FC .EQ 12 file_count S.LISTDIR.hPATH .EQ 14 Base path for file filtering S.LISTDIR.hPATTERN .EQ 15 Pattern for file filtering * S.LISTDIR.SIZE .EQ 16 *-------------------------------------- MAN SAVE INC/A2OSX.I