A2osX/INC/A2osX.I.txt
2016-01-16 23:06:36 +01:00

472 lines
13 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* Aux ZP
*--------------------------------------
pCode .EQ $10
pData .EQ $12
pStack .EQ $14
pLib .EQ $16
pDev .EQ $18
pEvent .EQ $1A
pPs .EQ $1C
ZPDRV .EQ $80
ZPBIN .EQ $90
ZPLIB .EQ $A0 32 bytes for TCPIP
*--------------------------------------
* !!!!!!! RESERVED APPLESOFT.I !!!!!!!
* $5E -> $C8
*--------------------------------------
* $B0 -> $FF KERNEL RESERVED
*--------------------------------------
ZPMemMgr .EQ $E0
*--------------------------------------
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 : <free>
* 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
*--------------------------------------
*** Z80 Reserved ***
*--------------------------------------
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
Z80JMP .EQ $1000
*--------------------------------------
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
*--------------------------------------
pDevJmp .EQ $BE10
pCodeJmp .EQ $BE13
pLibJmp .EQ $BE16
*--------------------------------------
* $11 bytes min !!!!
*--------------------------------------
MLICALL.PARAMS .EQ $BEC0
*--------------------------------------
* $BEE0->$BEFF : Public Variables
*--------------------------------------
A2osX.SCREENS .EQ $BEE0
A2osX.SCREENS.S .EQ %00000001 System Screen
A2osX.SCREENS.C .EQ %00000010 Console Screen
A2osX.SCREENS.G .EQ %00000100 Graphic Screen
A2osX.ASCREEN .EQ $BEE1 Active Screen
A2osX.TIMER16 .EQ $BEE4
A2osX.RANDOM16 .EQ $BEE6
A2osX.CPUTYPE .EQ $BEE8
A2osX.CPUSPEED .EQ $BEE9
A2osX.Z80SLOT .EQ $BEEA
*--------------------------------------
* Kernel Entry Point
*--------------------------------------
KERNEL.SYSCALL .EQ $D000
KERNEL.COLDBOOT .EQ $D100
*--------------------------------------
* KERNEL CONSTANTS DEFINITON
*--------------------------------------
K.TIMER16RESOLUTION .EQ 5 every 5 VBL (50hz), so 100ms
*--------------------------------------
K.ENV.SIZE .EQ $100
K.DEV.MAX .EQ 32
K.PS.MAX .EQ 64
*--------------------------------------
K.ARPCACHE.SIZE .EQ 10
K.DNSCACHE.SIZE .EQ 10
K.SKTTABLE.SIZE .EQ 64
K.ETH.FRAME.LEN .EQ 1514
K.IP.TTL .EQ 64
K.DNS.MAXLEN .EQ 64
K.DYNPORT.START .EQ 49152
K.DYNPORT.END .EQ 65535
K.TCP.WINDOW .EQ 4096
*--------------------------------------
H.BIN.HEADER .EQ 0
H.BIN.HEADER.DRV65 .EQ $4C8D 6502:cld,jmp abs
H.BIN.HEADER.LIB65 .EQ $7C8D 6502:cld,jmp (abs,x)
H.BIN.HEADER.BIN65 .EQ $7C8D 6502:cld,jmp (abs,x)
H.BIN.HEADER.DRV80 .EQ $A28D Z80:
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.GetMemByNameA .EQ $08
SYS.GetMemByNameYA .EQ $0A
*--------------------------------------
SYS.NewPStrYA .EQ $10
SYS.PStrCpyA .EQ $12
SYS.PStrCat .EQ $14
SYS.PStrCmp .EQ $16
SYS.PStrGetTkn .EQ $18
*--------------------------------------
SYS.LoadBinA .EQ $20
SYS.LoadLibYA .EQ $22
SYS.UnloadLibA .EQ $24
SYS.LoadDrvA .EQ $26
*--------------------------------------
SYS.ExpandPStrA .EQ $30
SYS.ExpandPStrYA .EQ $32
SYS.GetEnvVarA .EQ $34
SYS.GetEnvVarYA .EQ $36
SYS.SetEnvVarH .EQ $38
SYS.SetEnvVarP .EQ $3A
SYS.DelEnvVarA .EQ $3C
SYS.DelEnvVarYA .EQ $3E
*--------------------------------------
SYS.MLICreateFile .EQ $40
SYS.MLICreateDirA .EQ $42
SYS.MLICreateDirYA .EQ $44
SYS.MLIDestroyA .EQ $46
SYS.MLIDestroyYA .EQ $48
SYS.MLIRename .EQ $4A
SYS.MLISetFileInfo .EQ $4C
SYS.MLIGetFileInfoA .EQ $4E
SYS.MLIGetFileInfoYA .EQ $50
SYS.MLIOnline .EQ $52
SYS.MLISetPrefixA .EQ $54
SYS.MLISetPrefixYA .EQ $56
SYS.MLIGetPrefixA .EQ $58
SYS.MLIGetPrefixYA .EQ $5A
SYS.MLIOpenA .EQ $5C
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.GetDevByNameA .EQ $82
SYS.GetDevByNameYA .EQ $84
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.CheckPrefixA .EQ $A0
SYS.FileSearch .EQ $A2
SYS.LoadFileA .EQ $A4
SYS.LoadFileYA .EQ $A6
SYS.ListDirInitA .EQ $A8
SYS.ListDirNextA .EQ $AA
SYS.ListDirCloseA .EQ $AC
*--------------------------------------
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.PSTROutA .EQ $D2
SYS.PSTROutYA .EQ $D4
SYS.HexOutA .EQ $D8
SYS.HexOutYA .EQ $DA
SYS.DecOutA .EQ $DC
SYS.DecOutYA .EQ $DE
*--------------------------------------
* 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
*--------------------------------------
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
*--------------------------------------
* BIN STRUCT
*--------------------------------------
S.BIN.CODE .EQ 0
*--------------------------------------
* DEV STRUCT
*--------------------------------------
S.DEV.CODE .EQ 0
S.DEV.JMP .EQ 2
S.DEV.F .EQ 4
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 5 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.FLAGS.ARPOFFLOAD .EQ 1
*--------------------------------------
* 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
*--------------------------------------
* 'XY' Class Driver Functions
*--------------------------------------
DEVMGR.XY.SETPOS .EQ 12
*--------------------------------------
* 'NET' Class Driver Functions
*--------------------------------------
DEVMGR.NET.SEND .EQ 12
DEVMGR.SETIPCFG .EQ 14
*--------------------------------------
* 'GFX' Class Driver Functions
*--------------------------------------
DEVMGR.GFX.SETPIXEL .EQ 12
DEVMGR.GFX.GETPIXEL .EQ 14
DEVMGR.GFX.HLINE .EQ 16
DEVMGR.GFX.VLINE .EQ 18
DEVMGR.GFX.BITBLT .EQ 20
*--------------------------------------
* 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.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.hCMD .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.SYS .EQ %10000000
S.EVT.F.WND .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.TIMER .EQ %00001000
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.SIZE .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 Pattern for file filtering
S.LISTDIR.hPATTERN .EQ 15 Pattern for file filtering
*
S.LISTDIR.SIZE .EQ 16
*--------------------------------------
MAN
SAVE INC/A2OSX.I