1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602 |
- {
- $Id$
- This file is part of the Free Pascal run time library.
- Amiga exec.library include file
- Copyright (c) 1997 by Nils Sjoholm
- member of the Amiga RTL development team.
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit Exec;
- INTERFACE
- TYPE
- STRPTR = PChar;
- ULONG = Longint;
- LONG = longint;
- APTR = Pointer;
- BPTR = Longint;
- BSTR = Longint;
- pWord = ^Word;
- pLongint = ^Longint;
- pInteger = ^Integer;
- TYPE
- {$PACKRECORDS 4}
- { * List Node Structure. Each member in a list starts with a Node * }
- pNode = ^tNode;
- tNode = Record
- ln_Succ, { * Pointer to next (successor) * }
- ln_Pred : pNode; { * Pointer to previous (predecessor) * }
- ln_Type : Byte;
- ln_Pri : Shortint; { * Priority, for sorting * }
- ln_Name : STRPTR; { * ID string, null terminated * }
- End; { * Note: Integer aligned * }
- {$PACKRECORDS NORMAL}
- { * minimal node -- no type checking possible * }
- pMinNode = ^tMinNode;
- tMinNode = Record
- mln_Succ,
- mln_Pred : pMinNode;
- End;
- { *
- ** Note: Newly initialized IORequests, and software interrupt structures
- ** used with Cause(), should have type NT_UNKNOWN. The OS will assign a type
- ** when they are first used.
- * }
- { *----- Node Types for LN_TYPE -----* }
- Const
- NT_UNKNOWN = 0;
- NT_TASK = 1; { * Exec task * }
- NT_INTERRUPT = 2;
- NT_DEVICE = 3;
- NT_MSGPORT = 4;
- NT_MESSAGE = 5; { * Indicates message currently pending * }
- NT_FREEMSG = 6;
- NT_REPLYMSG = 7; { * Message has been replied * }
- NT_RESOURCE = 8;
- NT_LIBRARY = 9;
- NT_MEMORY = 10;
- NT_SOFTINT = 11; { * Internal flag used by SoftInits * }
- NT_FONT = 12;
- NT_PROCESS = 13; { * AmigaDOS Process * }
- NT_SEMAPHORE = 14;
- NT_SIGNALSEM = 15; { * signal semaphores * }
- NT_BOOTNODE = 16;
- NT_KICKMEM = 17;
- NT_GRAPHICS = 18;
- NT_DEATHMESSAGE = 19;
- NT_USER = 254; { * User node types work down from here * }
- NT_EXTENDED = 255;
- {
- This file defines Exec system lists, which are used to link
- various things. Exec provides several routines to handle list
- processing (defined at the bottom of this file), so you can
- use these routines to save yourself the trouble of writing a list
- package.
- }
- Type
- { normal, full featured list }
- pList = ^tList;
- tList = record
- lh_Head : pNode;
- lh_Tail : pNode;
- lh_TailPred : pNode;
- lh_Type : Byte;
- l_pad : Byte;
- end;
- { minimum list -- no type checking possible }
- pMinList = ^tMinList;
- tMinList = record
- mlh_Head : pMinNode;
- mlh_Tail : pMinNode;
- mlh_TailPred : pMinNode;
- end;
- { ********************************************************************
- *
- * Format of the alert error number:
- *
- * +-+-------------+----------------+--------------------------------+
- * |D| SubSysId | General Error | SubSystem Specific Error |
- * +-+-------------+----------------+--------------------------------+
- * 1 7 bits 8 bits 16 bits
- *
- * D: DeadEnd alert
- * SubSysId: indicates ROM subsystem number.
- * General Error: roughly indicates what the error was
- * Specific Error: indicates more detail
- *********************************************************************}
- const
- {*********************************************************************
- *
- * Hardware/CPU specific alerts: They may show without the 8 at the
- * front of the number. These are CPU/68000 specific. See 68$0
- * programmer's manuals for more details.
- *
- *********************************************************************}
- ACPU_BusErr = $80000002; { Hardware bus fault/access error }
- ACPU_AddressErr = $80000003; { Illegal address access (ie: odd) }
- ACPU_InstErr = $80000004; { Illegal instruction }
- ACPU_DivZero = $80000005; { Divide by zero }
- ACPU_CHK = $80000006; { Check instruction error }
- ACPU_TRAPV = $80000007; { TrapV instruction error }
- ACPU_PrivErr = $80000008; { Privilege violation error }
- ACPU_Trace = $80000009; { Trace error }
- ACPU_LineA = $8000000A; { Line 1010 Emulator error }
- ACPU_LineF = $8000000B; { Line 1111 Emulator error }
- ACPU_Format = $8000000E; { Stack frame format error }
- ACPU_Spurious = $80000018; { Spurious interrupt error }
- ACPU_AutoVec1 = $80000019; { AutoVector Level 1 interrupt error }
- ACPU_AutoVec2 = $8000001A; { AutoVector Level 2 interrupt error }
- ACPU_AutoVec3 = $8000001B; { AutoVector Level 3 interrupt error }
- ACPU_AutoVec4 = $8000001C; { AutoVector Level 4 interrupt error }
- ACPU_AutoVec5 = $8000001D; { AutoVector Level 5 interrupt error }
- ACPU_AutoVec6 = $8000001E; { AutoVector Level 6 interrupt error }
- ACPU_AutoVec7 = $8000001F; { AutoVector Level 7 interrupt error }
- { ********************************************************************
- *
- * General Alerts
- *
- * For example: timer.device cannot open math.library would be $05038015
- *
- * Alert(AN_TimerDev|AG_OpenLib|AO_MathLib);
- *
- ********************************************************************}
- CONST
- { ------ alert types }
- AT_DeadEnd = $80000000;
- AT_Recovery = $00000000;
- { ------ general purpose alert codes }
- AG_NoMemory = $00010000;
- AG_MakeLib = $00020000;
- AG_OpenLib = $00030000;
- AG_OpenDev = $00040000;
- AG_OpenRes = $00050000;
- AG_IOError = $00060000;
- AG_NoSignal = $00070000;
- AG_BadParm = $00080000;
- AG_CloseLib = $00090000; { usually too many closes }
- AG_CloseDev = $000A0000; { or a mismatched close }
- AG_ProcCreate = $000B0000; { Process creation failed }
- { ------ alert objects: }
- AO_ExecLib = $00008001;
- AO_GraphicsLib = $00008002;
- AO_LayersLib = $00008003;
- AO_Intuition = $00008004;
- AO_MathLib = $00008005;
- AO_DOSLib = $00008007;
- AO_RAMLib = $00008008;
- AO_IconLib = $00008009;
- AO_ExpansionLib = $0000800A;
- AO_DiskfontLib = $0000800B;
- AO_UtilityLib = $0000800C;
- AO_KeyMapLib = $0000800D;
- AO_AudioDev = $00008010;
- AO_ConsoleDev = $00008011;
- AO_GamePortDev = $00008012;
- AO_KeyboardDev = $00008013;
- AO_TrackDiskDev = $00008014;
- AO_TimerDev = $00008015;
- AO_CIARsrc = $00008020;
- AO_DiskRsrc = $00008021;
- AO_MiscRsrc = $00008022;
- AO_BootStrap = $00008030;
- AO_Workbench = $00008031;
- AO_DiskCopy = $00008032;
- AO_GadTools = $00008033;
- AO_Unknown = $00008035;
- { ********************************************************************
- *
- * Specific Alerts:
- *
- ********************************************************************}
- { ------ exec.library }
- AN_ExecLib = $01000000;
- AN_ExcptVect = $01000001; { 68000 exception vector checksum (obs.) }
- AN_BaseChkSum = $01000002; { Execbase checksum (obs.) }
- AN_LibChkSum = $01000003; { Library checksum failure }
- AN_MemCorrupt = $81000005; { Corrupt memory list detected in FreeMem }
- AN_IntrMem = $81000006; { No memory for interrupt servers }
- AN_InitAPtr = $01000007; { InitStruct() of an APTR source (obs.) }
- AN_SemCorrupt = $01000008; { A semaphore is in an illegal state
- at ReleaseSempahore() }
- AN_FreeTwice = $01000009; { Freeing memory already freed }
- AN_BogusExcpt = $8100000A; { illegal 68k exception taken (obs.) }
- AN_IOUsedTwice = $0100000B; { Attempt to reuse active IORequest }
- AN_MemoryInsane = $0100000C; { Sanity check on memory list failed
- during AvailMem(MEMF_LARGEST) }
- AN_IOAfterClose = $0100000D; { IO attempted on closed IORequest }
- AN_StackProbe = $0100000E; { Stack appears to extend out of range }
- AN_BadFreeAddr = $0100000F; { Memory header not located. [ Usually an
- invalid address passed to FreeMem() ] }
- AN_BadSemaphore = $01000010; { An attempt was made to use the old
- message semaphores. }
- { ------ graphics.library }
- AN_GraphicsLib = $02000000;
- AN_GfxNoMem = $82010000; { graphics out of memory }
- AN_GfxNoMemMspc = $82010001; { MonitorSpec alloc, no memory }
- AN_LongFrame = $82010006; { long frame, no memory }
- AN_ShortFrame = $82010007; { short frame, no memory }
- AN_TextTmpRas = $02010009; { text, no memory for TmpRas }
- AN_BltBitMap = $8201000A; { BltBitMap, no memory }
- AN_RegionMemory = $8201000B; { regions, memory not available }
- AN_MakeVPort = $82010030; { MakeVPort, no memory }
- AN_GfxNewError = $0200000C;
- AN_GfxFreeError = $0200000D;
- AN_GfxNoLCM = $82011234; { emergency memory not available }
- AN_ObsoleteFont = $02000401; { unsupported font description used }
- { ------ layers.library }
- AN_LayersLib = $03000000;
- AN_LayersNoMem = $83010000; { layers out of memory }
- { ------ intuition.library }
- AN_Intuition = $04000000;
- AN_GadgetType = $84000001; { unknown gadget type }
- AN_BadGadget = $04000001; { Recovery form of AN_GadgetType }
- AN_CreatePort = $84010002; { create port, no memory }
- AN_ItemAlloc = $04010003; { item plane alloc, no memory }
- AN_SubAlloc = $04010004; { sub alloc, no memory }
- AN_PlaneAlloc = $84010005; { plane alloc, no memory }
- AN_ItemBoxTop = $84000006; { item box top < RelZero }
- AN_OpenScreen = $84010007; { open screen, no memory }
- AN_OpenScrnRast = $84010008; { open screen, raster alloc, no memory }
- AN_SysScrnType = $84000009; { open sys screen, unknown type }
- AN_AddSWGadget = $8401000A; { add SW gadgets, no memory }
- AN_OpenWindow = $8401000B; { open window, no memory }
- AN_BadState = $8400000C; { Bad State Return entering Intuition }
- AN_BadMessage = $8400000D; { Bad Message received by IDCMP }
- AN_WeirdEcho = $8400000E; { Weird echo causing incomprehension }
- AN_NoConsole = $8400000F; { couldn't open the Console Device }
- AN_NoISem = $04000010; { Intuition skipped obtaining a sem }
- AN_ISemOrder = $04000011; { Intuition obtained a sem in bad order }
- { ------ math.library }
- AN_MathLib = $05000000;
- { ------ dos.library }
- AN_DOSLib = $07000000;
- AN_StartMem = $07010001; { no memory at startup }
- AN_EndTask = $07000002; { EndTask didn't }
- AN_QPktFail = $07000003; { Qpkt failure }
- AN_AsyncPkt = $07000004; { Unexpected packet received }
- AN_FreeVec = $07000005; { Freevec failed }
- AN_DiskBlkSeq = $07000006; { Disk block sequence error }
- AN_BitMap = $07000007; { Bitmap corrupt }
- AN_KeyFree = $07000008; { Key already free }
- AN_BadChkSum = $07000009; { Invalid checksum }
- AN_DiskError = $0700000A; { Disk Error }
- AN_KeyRange = $0700000B; { Key out of range }
- AN_BadOverlay = $0700000C; { Bad overlay }
- AN_BadInitFunc = $0700000D; { Invalid init packet for cli/shell }
- AN_FileReclosed = $0700000E; { A filehandle was closed more than once }
- { ------ ramlib.library }
- AN_RAMLib = $08000000;
- AN_BadSegList = $08000001; { no overlays in library seglists }
- { ------ icon.library }
- AN_IconLib = $09000000;
- { ------ expansion.library }
- AN_ExpansionLib = $0A000000;
- AN_BadExpansionFree = $0A000001; { freeed free region }
- { ------ diskfont.library }
- AN_DiskfontLib = $0B000000;
- { ------ audio.device }
- AN_AudioDev = $10000000;
- { ------ console.device }
- AN_ConsoleDev = $11000000;
- AN_NoWindow = $11000001; { Console can't open initial window }
- { ------ gameport.device }
- AN_GamePortDev = $12000000;
- { ------ keyboard.device }
- AN_KeyboardDev = $13000000;
- { ------ trackdisk.device }
- AN_TrackDiskDev = $14000000;
- AN_TDCalibSeek = $14000001; { calibrate: seek error }
- AN_TDDelay = $14000002; { delay: error on timer wait }
- { ------ timer.device }
- AN_TimerDev = $15000000;
- AN_TMBadReq = $15000001; { bad request }
- AN_TMBadSupply = $15000002; { power supply -- no 50/60Hz ticks }
- { ------ cia.resource }
- AN_CIARsrc = $20000000;
- { ------ disk.resource }
- AN_DiskRsrc = $21000000;
- AN_DRHasDisk = $21000001; { get unit: already has disk }
- AN_DRIntNoAct = $21000002; { interrupt: no active unit }
- { ------ misc.resource }
- AN_MiscRsrc = $22000000;
- { ------ bootstrap }
- AN_BootStrap = $30000000;
- AN_BootError = $30000001; { boot code returned an error }
- { ------ Workbench }
- AN_Workbench = $31000000;
- AN_NoFonts = $B1000001;
- AN_WBBadStartupMsg1 = $31000001;
- AN_WBBadStartupMsg2 = $31000002;
- AN_WBBadIOMsg = $31000003;
- AN_WBReLayoutToolMenu = $B1010009;
- { ------ DiskCopy }
- AN_DiskCopy = $32000000;
- { ------ toolkit for Intuition }
- AN_GadTools = $33000000;
- { ------ System utility library }
- AN_UtilityLib = $34000000;
- { ------ For use by any application that needs it }
- AN_Unknown = $35000000;
- CONST
- IOERR_OPENFAIL = -1; { device/unit failed to open }
- IOERR_ABORTED = -2; { request terminated early [after AbortIO()] }
- IOERR_NOCMD = -3; { command not supported by device }
- IOERR_BADLENGTH = -4; { not a valid length (usually IO_LENGTH) }
- IOERR_BADADDRESS = -5; { invalid address (misaligned or bad range) }
- IOERR_UNITBUSY = -6; { device opens ok, but requested unit is busy }
- IOERR_SELFTEST = -7; { hardware failed self-test }
- type
- pResident = ^tResident;
- tResident = record
- rt_MatchWord : Word; { Integer to match on (ILLEGAL) }
- rt_MatchTag : pResident; { pointer to the above }
- rt_EndSkip : Pointer; { address to continue scan }
- rt_Flags : Byte; { various tag flags }
- rt_Version : Byte; { release version number }
- rt_Type : Byte; { type of module (NT_mumble) }
- rt_Pri : Shortint; { initialization priority }
- rt_Name : STRPTR; { pointer to node name }
- rt_IdString : STRPTR; { pointer to ident string }
- rt_Init : Pointer; { pointer to init code }
- end;
- const
- RTC_MATCHWORD = $4AFC;
- RTF_AUTOINIT = $80;
- RTF_AFTERDOS = $04;
- RTF_SINGLETASK = $02;
- RTF_COLDSTART = $01;
- { Compatibility: }
- RTM_WHEN = $03;
- RTW_COLDSTART = $01;
- RTW_NEVER = $00;
- TYPE
- { ****** MemChunk **************************************************** }
- pMemChunk = ^tMemChunk;
- tMemChunk = Record
- mc_Next : pMemChunk; { * pointer to next chunk * }
- mc_Bytes : ULONG; { * chunk byte size * }
- End;
- { ****** MemHeader *************************************************** }
- pMemHeader = ^tMemHeader;
- tMemHeader = Record
- mh_Node : tNode;
- mh_Attributes : Word; { * characteristics of this region * }
- mh_First : pMemChunk; { * first free region * }
- mh_Lower, { * lower memory bound * }
- mh_Upper : Pointer; { * upper memory bound+1 * }
- mh_Free : Ulong; { * total number of free bytes * }
- End;
- { ****** MemEntry **************************************************** }
- pMemUnit = ^tMemUnit;
- tMemUnit = Record
- meu_Reqs : ULONG; { * the AllocMem requirements * }
- meu_Addr : Pointer; { * the address of this memory region * }
- End;
- pMemEntry = ^tMemEntry;
- tMemEntry = Record
- me_Un : tMemUnit;
- me_Length : ULONG; { * the length of this memory region * }
- End;
- { ****** MemList ***************************************************** }
- { * Note: sizeof(struct MemList) includes the size of the first MemEntry! * }
- pMemList = ^tMemList;
- tMemList = Record
- ml_Node : tNode;
- ml_NumEntries : Word; { * number of entries in this struct * }
- ml_ME : Array [0..0] of tMemEntry; { * the first entry * }
- End;
- { *----- Memory Requirement Types ---------------------------* }
- { *----- See the AllocMem() documentation for details--------* }
- Const
- MEMF_ANY = %000000000000000000000000; { * Any type of memory will do * }
- MEMF_PUBLIC = %000000000000000000000001;
- MEMF_CHIP = %000000000000000000000010;
- MEMF_FAST = %000000000000000000000100;
- MEMF_LOCAL = %000000000000000100000000;
- MEMF_24BITDMA = %000000000000001000000000; { * DMAable memory within 24 bits of address * }
- MEMF_KICK = %000000000000010000000000; { Memory that can be used for KickTags }
- MEMF_CLEAR = %000000010000000000000000;
- MEMF_LARGEST = %000000100000000000000000;
- MEMF_REVERSE = %000001000000000000000000;
- MEMF_TOTAL = %000010000000000000000000; { * AvailMem: return total size of memory * }
- MEMF_NO_EXPUNGE = $80000000; {AllocMem: Do not cause expunge on failure }
- MEM_BLOCKSIZE = 8;
- MEM_BLOCKMASK = MEM_BLOCKSIZE-1;
- Type
- {***** MemHandlerData *********************************************}
- { Note: This structure is *READ ONLY* and only EXEC can create it!}
- pMemHandlerData = ^tMemHandlerData;
- tMemHandlerData = Record
- memh_RequestSize, { Requested allocation size }
- memh_RequestFlags, { Requested allocation flags }
- memh_Flags : ULONG; { Flags (see below) }
- end;
- const
- MEMHF_RECYCLE = 1; { 0==First time, 1==recycle }
- {***** Low Memory handler return values **************************}
- MEM_DID_NOTHING = 0; { Nothing we could do... }
- MEM_ALL_DONE = -1; { We did all we could do }
- MEM_TRY_AGAIN = 1; { We did some, try the allocation again }
- type
- pInterrupt = ^tInterrupt;
- tInterrupt = record
- is_Node : tNode;
- is_Data : Pointer; { Server data segment }
- is_Code : Pointer; { Server code entry }
- end;
- pIntVector = ^tIntVector;
- tIntVector = record { For EXEC use ONLY! }
- iv_Data : Pointer;
- iv_Code : Pointer;
- iv_Node : pNode;
- end;
- pSoftIntList = ^tSoftIntList;
- tSoftIntList = record { For EXEC use ONLY! }
- sh_List : tList;
- sh_Pad : Word;
- end;
- const
- SIH_PRIMASK = $F0;
- { this is a fake INT definition, used only for AddIntServer and the like }
- INTB_NMI = 15;
- INTF_NMI = $0080;
- {
- Every Amiga Task has one of these Task structures associated with it.
- To find yours, use FindTask(Nil). AmigaDOS processes tack a few more
- values on to the end of this structure, which is the difference between
- Tasks and Processes.
- }
- type
-
- pTask = ^tTask;
- tTask = record
- tc_Node : tNode;
- tc_Flags : Byte;
- tc_State : Byte;
- tc_IDNestCnt : Shortint; { intr disabled nesting }
- tc_TDNestCnt : Shortint; { task disabled nesting }
- tc_SigAlloc : ULONG; { sigs allocated }
- tc_SigWait : ULONG; { sigs we are waiting for }
- tc_SigRecvd : ULONG; { sigs we have received }
- tc_SigExcept : ULONG; { sigs we will take excepts for }
- tc_TrapAlloc : Word; { traps allocated }
- tc_TrapAble : Word; { traps enabled }
- tc_ExceptData : Pointer; { points to except data }
- tc_ExceptCode : Pointer; { points to except code }
- tc_TrapData : Pointer; { points to trap data }
- tc_TrapCode : Pointer; { points to trap code }
- tc_SPReg : Pointer; { stack pointer }
- tc_SPLower : Pointer; { stack lower bound }
- tc_SPUpper : Pointer; { stack upper bound + 2 }
- tc_Switch : Pointer; { task losing CPU }
- tc_Launch : Pointer; { task getting CPU }
- tc_MemEntry : tList; { allocated memory }
- tc_UserData : Pointer; { per task data }
- end;
- {
- * Stack swap structure as passed to StackSwap()
- }
- pStackSwapStruct = ^tStackSwapStruct;
- tStackSwapStruct = Record
- stk_Lower : Pointer; { Lowest byte of stack }
- stk_Upper : ULONG; { Upper end of stack (size + Lowest) }
- stk_Pointer : Pointer; { Stack pointer at switch point }
- end;
- {----- Flag Bits ------------------------------------------}
- const
- TB_PROCTIME = 0;
- TB_ETASK = 3;
- TB_STACKCHK = 4;
- TB_EXCEPT = 5;
- TB_SWITCH = 6;
- TB_LAUNCH = 7;
- TF_PROCTIME = 1;
- TF_ETASK = 8;
- TF_STACKCHK = 16;
- TF_EXCEPT = 32;
- TF_SWITCH = 64;
- TF_LAUNCH = 128;
- {----- Task States ----------------------------------------}
- TS_INVALID = 0;
- TS_ADDED = 1;
- TS_RUN = 2;
- TS_READY = 3;
- TS_WAIT = 4;
- TS_EXCEPT = 5;
- TS_REMOVED = 6;
- {----- Predefined Signals -------------------------------------}
- SIGB_ABORT = 0;
- SIGB_CHILD = 1;
- SIGB_BLIT = 4;
- SIGB_SINGLE = 4;
- SIGB_INTUITION = 5;
- SIGB_DOS = 8;
- SIGF_ABORT = 1;
- SIGF_CHILD = 2;
- SIGF_BLIT = 16;
- SIGF_SINGLE = 16;
- SIGF_INTUITION = 32;
- SIGF_DOS = 256;
- {
- This file defines ports and messages, which are used for inter-
- task communications using the routines defined toward the
- bottom of this file.
- }
- type
- {****** MsgPort *****************************************************}
- pMsgPort = ^tMsgPort;
- tMsgPort = record
- mp_Node : tNode;
- mp_Flags : Byte;
- mp_SigBit : Byte; { signal bit number }
- mp_SigTask : Pointer; { task to be signalled (TaskPtr) }
- mp_MsgList : tList; { message linked list }
- end;
- {****** Message *****************************************************}
- pMessage = ^tMessage;
- tMessage = record
- mn_Node : tNode;
- mn_ReplyPort : pMsgPort; { message reply port }
- mn_Length : Word; { message len in bytes }
- end;
- { mp_Flags: Port arrival actions (PutMsg) }
- CONST
- PF_ACTION = 3; { * Mask * }
- PA_SIGNAL = 0; { * Signal task in mp_SigTask * }
- PA_SOFTINT = 1; { * Signal SoftInt in mp_SoftInt/mp_SigTask * }
- PA_IGNORE = 2; { * Ignore arrival * }
- { Semaphore }
- type
- pSemaphore = ^tSemaphore;
- tSemaphore = record
- sm_MsgPort : tMsgPort;
- sm_Bids : Integer;
- end;
- { This is the structure used to request a signal semaphore }
- pSemaphoreRequest = ^tSemaphoreRequest;
- tSemaphoreRequest = record
- sr_Link : tMinNode;
- sr_Waiter : pTask;
- end;
- { The actual semaphore itself }
- pSignalSemaphore = ^tSignalSemaphore;
- tSignalSemaphore = record
- ss_Link : tNode;
- ss_NestCount : Integer;
- ss_WaitQueue : tMinList;
- ss_MultipleLink : tSemaphoreRequest;
- ss_Owner : pTask;
- ss_QueueCount : Integer;
- end;
- { ***** Semaphore procure message (for use in V39 Procure/Vacate *** }
- pSemaphoreMessage = ^tSemaphoreMessage;
- tSemaphoreMessage = Record
- ssm_Message : tMessage;
- ssm_Semaphore : pSignalSemaphore;
- end;
- const
- SM_SHARED = 1;
- SM_EXCLUSIVE = 0;
- CONST
- { ------ Special Constants --------------------------------------- }
- LIB_VECTSIZE = 6; { Each library entry takes 6 bytes }
- LIB_RESERVED = 4; { Exec reserves the first 4 vectors }
- LIB_BASE = (-LIB_VECTSIZE);
- LIB_USERDEF = (LIB_BASE-(LIB_RESERVED*LIB_VECTSIZE));
- LIB_NONSTD = (LIB_USERDEF);
- { ------ Standard Functions -------------------------------------- }
- LIB_OPEN = -6;
- LIB_CLOSE = -12;
- LIB_EXPUNGE = -18;
- LIB_EXTFUNC = -24; { for future expansion }
- TYPE
- { ------ Library Base Structure ---------------------------------- }
- { Also used for Devices and some Resources }
- pLibrary = ^tLibrary;
- tLibrary = record
- lib_Node : tNode;
- lib_Flags,
- lib_pad : Byte;
- lib_NegSize, { number of bytes before library }
- lib_PosSize, { number of bytes after library }
- lib_Version, { major }
- lib_Revision : Word; { minor }
- lib_IdString : STRPTR; { ASCII identification }
- lib_Sum : ULONG; { the checksum itself }
- lib_OpenCnt : Word; { number of current opens }
- end; { * Warning: size is not a longword multiple ! * }
- CONST
- { lib_Flags bit definitions (all others are system reserved) }
- LIBF_SUMMING = %00000001; { we are currently checksumming }
- LIBF_CHANGED = %00000010; { we have just changed the lib }
- LIBF_SUMUSED = %00000100; { set if we should bother to sum }
- LIBF_DELEXP = %00001000; { delayed expunge }
- {
- This file defines the constants and types required to use
- Amiga device IO routines, which are also defined here.
- }
- TYPE
- {***** Device *****************************************************}
- pDevice = ^tDevice;
- tDevice = record
- dd_Library : tLibrary;
- end;
- {***** Unit *******************************************************}
- pUnit = ^tUnit;
- tUnit = record
- unit_MsgPort : tMsgPort; { queue for unprocessed messages }
- { instance of msgport is recommended }
- unit_flags,
- unit_pad : Byte;
- unit_OpenCnt : Word; { number of active opens }
- end;
- Const
- UNITF_ACTIVE = %00000001;
- UNITF_INTASK = %00000010;
- type
- pIORequest = ^tIORequest;
- tIORequest = record
- io_Message : tMessage;
- io_Device : pDevice; { device node pointer }
- io_Unit : pUnit; { unit (driver private)}
- io_Command : Word; { device command }
- io_Flags : Byte;
- io_Error : Shortint; { error or warning num }
- end;
- pIOStdReq = ^tIOStdReq;
- tIOStdReq = record
- io_Message : tMessage;
- io_Device : pDevice; { device node pointer }
- io_Unit : pUnit; { unit (driver private)}
- io_Command : Word; { device command }
- io_Flags : Byte;
- io_Error : Shortint; { error or warning num }
- io_Actual : ULONG; { actual number of bytes transferred }
- io_Length : ULONG; { requested number bytes transferred}
- io_Data : Pointer; { points to data area }
- io_Offset : ULONG; { offset for block structured devices }
- end;
- { library vector offsets for device reserved vectors }
- const
- DEV_BEGINIO = -30;
- DEV_ABORTIO = -36;
- { io_Flags defined bits }
- IOB_QUICK = 0;
- IOF_QUICK = 1;
- CMD_INVALID = 0;
- CMD_RESET = 1;
- CMD_READ = 2;
- CMD_WRITE = 3;
- CMD_UPDATE = 4;
- CMD_CLEAR = 5;
- CMD_STOP = 6;
- CMD_START = 7;
- CMD_FLUSH = 8;
- CMD_NONSTD = 9;
- { Definition of the Exec library base structure (pointed to by location 4).
- ** Most fields are not to be viewed or modified by user programs. Use
- ** extreme caution.
- }
- type
- pExecBase = ^tExecBase;
- tExecBase = Record
- LibNode : tLibrary; { Standard library node }
- { ******* Static System Variables ******* }
- SoftVer : Word; { kickstart release number (obs.) }
- LowMemChkSum : Integer; { checksum of 68000 trap vectors }
- ChkBase : ULONG; { system base pointer complement }
- ColdCapture, { coldstart soft capture vector }
- CoolCapture, { coolstart soft capture vector }
- WarmCapture, { warmstart soft capture vector }
- SysStkUpper, { system stack base (upper bound) }
- SysStkLower : Pointer; { top of system stack (lower bound) }
- MaxLocMem : ULONG; { top of chip memory }
- DebugEntry, { global debugger entry point }
- DebugData, { global debugger data segment }
- AlertData, { alert data segment }
- MaxExtMem : Pointer; { top of extended mem, or null if none }
- ChkSum : Word; { for all of the above (minus 2) }
- { ***** Interrupt Related ************************************** }
- IntVects : Array[0..15] of tIntVector;
- { ***** Dynamic System Variables ************************************ }
- ThisTask : pTask; { pointer to current task (readable) }
- IdleCount, { idle counter }
- DispCount : ULONG; { dispatch counter }
- Quantum, { time slice quantum }
- Elapsed, { current quantum ticks }
- SysFlags : Word; { misc internal system flags }
- IDNestCnt, { interrupt disable nesting count }
- TDNestCnt : Shortint; { task disable nesting count }
- AttnFlags, { special attention flags (readable) }
- AttnResched : Word; { rescheduling attention }
- ResModules, { resident module array pointer }
- TaskTrapCode,
- TaskExceptCode,
- TaskExitCode : Pointer;
- TaskSigAlloc : ULONG;
- TaskTrapAlloc: Word;
- { ***** System Lists (private!) ******************************* }
- MemList,
- ResourceList,
- DeviceList,
- IntrList,
- LibList,
- PortList,
- TaskReady,
- TaskWait : tList;
- SoftInts : Array[0..4] of tSoftIntList;
- { ***** Other Globals ****************************************** }
- LastAlert : Array[0..3] of LONG;
- { these next two variables are provided to allow
- ** system developers to have a rough idea of the
- ** period of two externally controlled signals --
- ** the time between vertical blank interrupts and the
- ** external line rate (which is counted by CIA A's
- ** "time of day" clock). In general these values
- ** will be 50 or 60, and may or may not track each
- ** other. These values replace the obsolete AFB_PAL
- ** and AFB_50HZ flags.
- }
- VBlankFrequency, { (readable) }
- PowerSupplyFrequency : Byte; { (readable) }
- SemaphoreList : tList;
- { these next two are to be able to kickstart into user ram.
- ** KickMemPtr holds a singly linked list of MemLists which
- ** will be removed from the memory list via AllocAbs. If
- ** all the AllocAbs's succeeded, then the KickTagPtr will
- ** be added to the rom tag list.
- }
- KickMemPtr, { ptr to queue of mem lists }
- KickTagPtr, { ptr to rom tag queue }
- KickCheckSum : Pointer; { checksum for mem and tags }
- { ***** V36 Exec additions start here ************************************* }
- ex_Pad0 : Word;
- ex_Reserved0 : ULONG;
- ex_RamLibPrivate : Pointer;
- { The next ULONG contains the system "E" clock frequency,
- ** expressed in Hertz. The E clock is used as a timebase for
- ** the Amiga's 8520 I/O chips. (E is connected to "02").
- ** Typical values are 715909 for NTSC, or 709379 for PAL.
- }
- ex_EClockFrequency, { (readable) }
- ex_CacheControl, { Private to CacheControl calls }
- ex_TaskID : ULONG; { Next available task ID }
- ex_Reserved1 : Array[0..4] of ULONG;
- ex_MMULock : Pointer; { private }
- ex_Reserved2 : Array[0..2] of ULONG;
- {***** V39 Exec additions start here *************************************}
- { The following list and data element are used
- * for V39 exec's low memory handler...
- }
- ex_MemHandlers : tMinList; { The handler list }
- ex_MemHandler : Pointer; { Private! handler pointer }
- ex_Reserved : Array[0..1] of Shortint;
- end;
- { ***** Bit defines for AttnFlags (see above) ***************************** }
- { Processors and Co-processors: }
- CONST
- AFB_68010 = 0; { also set for 68020 }
- AFB_68020 = 1; { also set for 68030 }
- AFB_68030 = 2; { also set for 68040 }
- AFB_68040 = 3;
- AFB_68881 = 4; { also set for 68882 }
- AFB_68882 = 5;
- AFB_FPU40 = 6; { Set if 68040 FPU }
- AFF_68010 = %00000001;
- AFF_68020 = %00000010;
- AFF_68030 = %00000100;
- AFF_68040 = %00001000;
- AFF_68881 = %00010000;
- AFF_68882 = %00100000;
- AFF_FPU40 = %01000000;
- { AFB_RESERVED8 = %000100000000; }
- { AFB_RESERVED9 = %001000000000; }
- { ***** Selected flag definitions for Cache manipulation calls ********* }
- CACRF_EnableI = %0000000000000001; { Enable instruction cache }
- CACRF_FreezeI = %0000000000000010; { Freeze instruction cache }
- CACRF_ClearI = %0000000000001000; { Clear instruction cache }
- CACRF_IBE = %0000000000010000; { Instruction burst enable }
- CACRF_EnableD = %0000000100000000; { 68030 Enable data cache }
- CACRF_FreezeD = %0000001000000000; { 68030 Freeze data cache }
- CACRF_ClearD = %0000100000000000; { 68030 Clear data cache }
- CACRF_DBE = %0001000000000000; { 68030 Data burst enable }
- CACRF_WriteAllocate = %0010000000000000; { 68030 Write-Allocate mode
- (must always be set!) }
- CACRF_EnableE = 1073741824; { Master enable for external caches }
- { External caches should track the }
- { state of the internal caches }
- { such that they do not cache anything }
- { that the internal cache turned off }
- { for. }
- CACRF_CopyBack = $80000000; { Master enable for copyback caches }
- DMA_Continue = 2; { Continuation flag for CachePreDMA }
- DMA_NoModify = 4; { Set if DMA does not update memory }
- DMA_ReadFromRAM = 8; { Set if DMA goes *FROM* RAM to device }
- procedure AbortIO(io : pIORequest);
- procedure AddDevice(device : pDevice);
- procedure AddHead(list : pList;
- node : pNode);
- procedure AddIntServer(intNum : ULONG;
- Int : pInterrupt);
- procedure AddLibrary(lib : pLibrary);
- procedure AddMemHandler(memhand : pInterrupt);
- procedure AddMemList(size, attr : ULONG;
- pri : Longint;
- base : Pointer;
- name : STRPTR);
- procedure AddPort(port : pMsgPort);
- procedure AddResource(resource : Pointer);
- procedure AddSemaphore(sigsem : pSignalSemaphore);
- procedure AddTail(list : pList;
- node : pNode);
- procedure AddTask(task : pTask;
- initialPC, finalPC : Pointer);
- procedure Alert(alertNum : ULONG;
- parameters : Pointer);
- function AllocAbs(bytesize : ULONG;
- location : Pointer) : Pointer;
- function Allocate(mem : pMemHeader;
- bytesize : ULONG) : Pointer;
- function AllocEntry(mem : pMemList) : pMemList;
- function AllocMem(bytesize : ULONG;
- reqs : ULONG) : Pointer;
- function AllocPooled( pooleheader : Pointer;
- memsize : ULONG ): Pointer;
- function AllocSignal(signalNum : Longint) : Shortint;
- function AllocTrap(trapNum : Longint) : Longint;
- function AllocVec( size, reqm : ULONG ): Pointer;
- function AttemptSemaphore(sigsem : pSignalSemaphore) : Boolean;
- function AttemptSemaphoreShared(sigsem : pSignalSemaphore): ULONG;
- function AvailMem(attr : ULONG) : ULONG;
- procedure CacheClearE( cxa : Pointer;
- lenght, caches : ULONG);
- procedure CacheClearU;
- function CacheControl( cachebits, cachemask: ULONG ): ULONG;
- procedure CachePostDMA(vaddress, length_IntPtr : Pointer;
- flags : ULONG );
- function CachePreDMA(vaddress, length_intPtr : Pointer;
- flags : ULONG): Pointer;
- procedure Cause(Int : pInterrupt);
- function CheckIO(io : pIORequest) : pIORequest;
- procedure ChildFree( tid : Pointer);
- procedure ChildOrphan( tid : Pointer);
- procedure ChildStatus( tid : Pointer);
- procedure ChildWait( tid : Pointer);
- procedure CloseDevice(io : pIORequest);
- procedure CloseLibrary(lib : pLibrary);
- procedure ColdReboot;
- procedure CopyMem(source, dest : Pointer;
- size : ULONG);
- procedure CopyMemQuick(source, dest : Pointer;
- size : ULONG);
- function CreateIORequest( mp : pMsgPort;
- size : ULONG ): pIORequest;
- function CreateMsgPort: pMsgPort;
- function CreatePool( requrements,puddlesize,
- puddletresh : ULONG ): Pointer;
- procedure Deallocate(header : pMemHeader;
- block : Pointer;
- size : ULONG);
- procedure Debug(Param : ULONG);
- procedure DeleteIORequest( iorq : Pointer );
- procedure DeleteMsgPort( mp : pMsgPort );
- procedure DeletePool( poolheader : Pointer );
- procedure Disable;
- function DoIO(io : pIORequest) : Shortint;
- procedure Enable;
- procedure Enqueue(list : pList;
- node : pNode);
- function FindName(start : pList;
- name : STRPTR) : pNode;
- function FindPort(name : STRPTR): pMsgPort;
- function FindResident(name : STRPTR) : pResident;
- function FindSemaphore(name : STRPTR) : pSignalSemaphore;
- function FindTask(name : STRPTR) : pTask;
- procedure Forbid;
- procedure FreeEntry(memList : pMemList);
- procedure ExecFreeMem(memBlock : Pointer;
- size : ULONG);
- procedure FreePooled( poolheader, memory: Pointer;
- memsize: ULONG);
- procedure FreeSignal(signalNum : Longint);
- procedure FreeTrap(signalNum : ULONG);
- procedure FreeVec( memory : Pointer );
- function GetCC : Word;
- function GetMsg(port : pMsgPort): pMessage;
- procedure InitCode(startClass, version : ULONG);
- procedure InitResident(resident : pResident;
- segList : ULONG);
- procedure InitSemaphore(sigsem : pSignalSemaphore);
- procedure InitStruct(table, memory : Pointer;
- size : ULONG);
- procedure Insert(list : pList;
- node, listNode : pNode);
- procedure MakeFunctions(target, functionarray : Pointer ;
- dispbase : ULONG);
- function MakeLibrary(vec, struct, init : Pointer;
- dSize : ULONG ;
- segList : Pointer) : pLibrary;
- function ObtainQuickVector(interruptCode : Pointer) : ULONG;
- procedure ObtainSemaphore(sigsem : pSignalSemaphore);
- procedure ObtainSemaphoreList(semlist : pList);
- procedure ObtainSemaphoreShared(sigsem : pSignalSemaphore);
- function OldOpenLibrary(lib : STRPTR): pLibrary;
- function OpenDevice(devName : STRPTR;
- unitNumber : ULONG;
- io : pIORequest; flags : ULONG) : Shortint;
- function OpenLibrary(libName : STRPTR;
- version : Integer) : pLibrary;
- function OpenResource(resname : STRPTR): Pointer;
- procedure Permit;
- function Procure(sem : pSemaphore;
- bid : pMessage) : Boolean;
- procedure PutMsg(port : pMsgPort;
- mess : pMessage);
- procedure RawDoFmt(Form : STRPTR;
- data, putChProc, putChData : Pointer);
- procedure ReleaseSemaphore(sigsem : pSignalSemaphore);
- procedure ReleaseSemaphoreList(siglist : pList);
- procedure RemDevice(device : pDevice);
- function RemHead(list : pList) : pNode;
- procedure RemIntServer(intNum : Longint;
- Int : pInterrupt);
- procedure RemLibrary(lib : pLibrary);
- procedure RemMemHandler(memhand : pInterrupt);
- procedure Remove(node : pNode);
- procedure RemPort(port : pMsgPort);
- procedure RemResource(resname : Pointer);
- procedure RemSemaphore(sigsem : pSignalSemaphore);
- function RemTail(list : pList) : pNode;
- procedure RemTask(task : pTask);
- procedure ReplyMsg(mess : pMessage);
- procedure SendIO(io : pIORequest);
- function SetExcept(newSignals, signalMask : ULONG) : ULONG;
- function SetFunction(lib : pLibrary;
- funcOff : LONG;
- funcEntry : Pointer) : Pointer;
- function SetIntVector(intNum : Longint;
- Int : pInterrupt) : pInterrupt;
- function SetSignal(newSignals, signalMask : ULONG) : ULONG;
- function SetSR(newSR, mask : ULONG) : ULONG;
- function SetTaskPri(task : pTask;
- priority : Longint) : Shortint;
- procedure Signal(task : pTask; signals : ULONG);
- procedure StackSwap( StackSwapRecord : Pointer );
- procedure SumKickData;
- procedure SumLibrary(lib : pLibrary);
- function SuperState : Pointer;
- function Supervisor(thefunc : Pointer): ULONG;
- function TypeOfMem(mem : Pointer) : ULONG;
- procedure UserState(s : Pointer);
- procedure Vacate(sigsem : pSignalSemaphore;
- bidMsg : pSemaphoreMessage);
- function Wait(signals : ULONG) : ULONG;
- function WaitIO(io : pIORequest) : Shortint;
- function WaitPort(port : pMsgPort): pMessage;
- {* Exec support functions from amiga.lib *}
- procedure BeginIO (ioRequest: pIORequest);
- function CreateExtIO (port: pMsgPort; size: Longint): pIORequest;
- procedure DeleteExtIO (ioReq: pIORequest);
- function CreateStdIO (port: pMsgPort): pIOStdReq;
- procedure DeleteStdIO (ioReq: pIOStdReq);
- function CreatePort (name: STRPTR; pri: integer): pMsgPort;
- procedure DeletePort (port: pMsgPort);
- function CreateTask (name: STRPTR; pri: longint;
- initPC : Pointer;
- stackSize : ULONG): pTask;
- procedure DeleteTask (task: pTask);
- procedure NewList (list: pList);
- IMPLEMENTATION
- {* Exec support functions from amiga.lib *}
- procedure BeginIO (ioRequest: pIORequest); Assembler;
- asm
- move.l a6,-(a7)
- move.l ioRequest,a1 ; get IO Request
- move.l 20(a1),a6 ; extract Device ptr
- jsr -30(a6) ; call BEGINIO directly
- move.l (a7)+,a6
- end;
- function CreateExtIO (port: pMsgPort; size: Longint): pIORequest;
- var
- IOReq: pIORequest;
- begin
- IOReq := NIL;
- if port <> NIL then
- begin
- IOReq := AllocMem(size, MEMF_CLEAR or MEMF_PUBLIC);
- if IOReq <> NIL then
- begin
- IOReq^.io_Message.mn_Node.ln_Type := NT_REPLYMSG;
- IOReq^.io_Message.mn_Length := size;
- IOReq^.io_Message.mn_ReplyPort := port;
- end;
- end;
- CreateExtIO := IOReq;
- end;
- procedure DeleteExtIO (ioReq: pIORequest);
- begin
- if ioReq <> NIL then
- begin
- ioReq^.io_Message.mn_Node.ln_Type := $FF;
- ioReq^.io_Message.mn_ReplyPort := pMsgPort(-1);
- ioReq^.io_Device := pDevice(-1);
- ExecFreeMem(ioReq, ioReq^.io_Message.mn_Length);
- end
- end;
- function CreateStdIO (port: pMsgPort): pIOStdReq;
- begin
- CreateStdIO := pIOStdReq(CreateExtIO(port, sizeof(tIOStdReq)))
- end;
- procedure DeleteStdIO (ioReq: pIOStdReq);
- begin
- DeleteExtIO(pIORequest(ioReq))
- end;
- function CreatePort (name: STRPTR; pri: integer): pMsgPort;
- var
- port : pMsgPort;
- sigbit : shortint;
- begin
- port := NIL;
- sigbit := AllocSignal(-1);
- if sigbit <> -1 then
- begin
- port := AllocMem(sizeof(tMsgPort), MEMF_CLEAR or MEMF_PUBLIC);
- if port = NIL then
- FreeSignal(sigbit)
- else
- begin
- port^.mp_Node.ln_Name := name;
- port^.mp_Node.ln_Pri := pri;
- port^.mp_Node.ln_Type := NT_MSGPORT;
- port^.mp_Flags := PA_SIGNAL;
- port^.mp_SigBit := sigbit;
- port^.mp_SigTask := FindTask(NIL);
- if name <> NIL then
- AddPort(port)
- else
- NewList(@port^.mp_MsgList);
- end;
- end;
- CreatePort := port;
- end;
- procedure DeletePort (port: pMsgPort);
- begin
- if port <> NIL then
- begin
- if port^.mp_Node.ln_Name <> NIL then
- RemPort(port);
- port^.mp_SigTask := pTask(-1);
- port^.mp_MsgList.lh_Head := pNode(-1);
- FreeSignal(port^.mp_SigBit);
- ExecFreeMem(port, sizeof(tMsgPort));
- end;
- end;
- function CreateTask (name: STRPTR; pri: longint;
- initPC: pointer; stackSize: ULONG): pTask;
- var
- memlist : pMemList;
- task : pTask;
- totalsize : Longint;
- begin
- task := NIL;
- stackSize := (stackSize + 3) and not 3;
- totalsize := sizeof(tMemList) + sizeof(tTask) + stackSize;
- memlist := AllocMem(totalsize, MEMF_PUBLIC + MEMF_CLEAR);
- if memlist <> NIL then begin
- memlist^.ml_NumEntries := 1;
- memlist^.ml_ME[0].me_Un.meu_Addr := Pointer(memlist + 1);
- memlist^.ml_ME[0].me_Length := totalsize - sizeof(tMemList);
- task := pTask(memlist + sizeof(tMemList) + stackSize);
- task^.tc_Node.ln_Pri := pri;
- task^.tc_Node.ln_Type := NT_TASK;
- task^.tc_Node.ln_Name := name;
- task^.tc_SPLower := Pointer(memlist + sizeof(tMemList));
- task^.tc_SPUpper := Pointer(task^.tc_SPLower + stackSize);
- task^.tc_SPReg := task^.tc_SPUpper;
- NewList(@task^.tc_MemEntry);
- AddTail(@task^.tc_MemEntry,@memlist^.ml_Node);
- AddTask(task,initPC,NIL)
- end;
- CreateTask := task;
- end;
- procedure DeleteTask (task: pTask);
- begin
- RemTask(task)
- end;
- procedure NewList (list: pList);
- begin
- with list^ do
- begin
- lh_Head := pNode(@lh_Tail);
- lh_Tail := NIL;
- lh_TailPred := pNode(@lh_Head)
- end
- end;
- procedure AbortIO(io : pIORequest); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L io,a1
- JSR -480(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddDevice(device : pDevice); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L device,a1
- JSR -432(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddHead(list : pList;
- node : pNode); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L list,a0
- MOVE.L node,a1
- JSR -240(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddIntServer(intNum : ULONG;
- Int : pInterrupt); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L intNum,d0
- MOVE.L Int,a1
- JSR -168(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddLibrary(lib : pLibrary); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L lib,a1
- JSR -396(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddMemHandler(memhand : pInterrupt); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L memhand,a1
- JSR -774(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddMemList(size, attr : ULONG;
- pri : Longint;
- base : Pointer;
- name : STRPTR); Assembler;
- asm
- MOVEM.L d2/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L size,d0
- MOVE.L attr,d1
- MOVE.L pri,d2
- MOVE.L base,a0
- MOVE.L name,a1
- JSR -618(A6)
- MOVEM.L (A7)+,d2/a6
- end;
- procedure AddPort(port : pMsgPort); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L port,a1
- JSR -354(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddResource(resource : Pointer); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L resource,a1
- JSR -486(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddSemaphore(sigsem : pSignalSemaphore); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a1
- JSR -600(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddTail(list : pList;
- node : pNode); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L list,a0
- MOVE.L node,a1
- JSR -246(A6)
- MOVE.L (A7)+,A6
- end;
- procedure AddTask(task : pTask;
- initialPC, finalPC : Pointer); Assembler;
- asm
- MOVEM.L a2/a3/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L task,a1
- MOVE.L initialPC,a2
- MOVE.L finalPC,a3
- JSR -282(A6)
- MOVEM.L (A7)+,a2/a3/a6
- end;
- procedure Alert(alertNum : ULONG;
- parameters : Pointer); Assembler;
- asm
- MOVEM.L d7/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L alertNum,d7
- JSR -108(A6)
- MOVEM.L (A7)+,d7/a6
- end;
- function AllocAbs(bytesize : ULONG;
- location : Pointer) : Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L bytesize,d0
- MOVE.L location,a1
- JSR -204(A6)
- MOVE.L (A7)+,A6
- end;
- function Allocate(mem : pMemHeader;
- bytesize : ULONG) : Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L mem,a0
- MOVE.L bytesize,d0
- JSR -186(A6)
- MOVE.L (A7)+,A6
- end;
- function AllocEntry(mem : pMemList) : pMemList; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L mem,a0
- JSR -222(A6)
- MOVE.L (A7)+,A6
- end;
- function AllocMem(bytesize : ULONG;
- reqs : ULONG) : Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L bytesize,d0
- MOVE.L reqs,d1
- JSR -198(A6)
- MOVE.L (A7)+,A6
- end;
- function AllocPooled( pooleheader : Pointer;
- memsize : ULONG ): Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L pooleheader,a0
- MOVE.L memsize,d0
- JSR -708(A6)
- MOVE.L (A7)+,A6
- end;
- function AllocSignal(signalNum : Longint) : Shortint; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L signalNum,d0
- JSR -330(A6)
- MOVE.L (A7)+,A6
- end;
- function AllocTrap(trapNum : Longint) : Longint; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L trapNum,d0
- JSR -342(A6)
- MOVE.L (A7)+,A6
- end;
- function AllocVec( size, reqm : ULONG ): Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L size,d0
- MOVE.L reqm,d1
- JSR -684(A6)
- MOVE.L (A7)+,A6
- end;
- function AttemptSemaphore(sigsem : pSignalSemaphore) : Boolean; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a0
- JSR -576(A6)
- MOVE.L (A7)+,A6
- TST.L d0
- SNE d0
- NEG.B d0
- end;
- function AttemptSemaphoreShared(sigsem : pSignalSemaphore): ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a0
- JSR -720(A6)
- MOVE.L (A7)+,A6
- end;
- function AvailMem(attr : ULONG) : ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L attr,d1
- JSR -216(A6)
- MOVE.L (A7)+,A6
- end;
- procedure CacheClearE( cxa : Pointer;
- lenght, caches : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L cxa,a0
- MOVE.L lenght,d0
- MOVE.L caches,d1
- JSR -642(A6)
- MOVE.L (A7)+,A6
- end;
- procedure CacheClearU; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -636(A6)
- MOVE.L (A7)+,A6
- end;
- function CacheControl( cachebits, cachemask: ULONG ): ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L cachebits,d0
- MOVE.L cachemask,d1
- JSR -648(A6)
- MOVE.L (A7)+,A6
- end;
- procedure CachePostDMA(vaddress, length_IntPtr : Pointer;
- flags : ULONG ); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L vaddress,a0
- MOVE.L length_IntPtr,a1
- MOVE.L flags,d0
- JSR -768(A6)
- MOVE.L (A7)+,A6
- end;
- function CachePreDMA(vaddress, length_intPtr : Pointer;
- flags : ULONG): Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L vaddress,a0
- MOVE.L length_intPtr,a1
- MOVE.L flags,d0
- JSR -762(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Cause(Int : pInterrupt); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L Int,a1
- JSR -180(A6)
- MOVE.L (A7)+,A6
- end;
- function CheckIO(io : pIORequest) : pIORequest; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L io,a1
- JSR -468(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ChildFree( tid : Pointer); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L tid,d0
- JSR -738(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ChildOrphan( tid : Pointer); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L tid,d0
- JSR -744(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ChildStatus( tid : Pointer); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L tid,d0
- JSR -750(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ChildWait( tid : Pointer); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L tid,d0
- JSR -756(A6)
- MOVE.L (A7)+,A6
- end;
- procedure CloseDevice(io : pIORequest); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L io,a1
- JSR -450(A6)
- MOVE.L (A7)+,A6
- end;
- procedure CloseLibrary(lib : pLibrary); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L lib,a1
- JSR -414(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ColdReboot; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -726(A6)
- MOVE.L (A7)+,A6
- end;
- procedure CopyMem(source, dest : Pointer;
- size : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L source,a0
- MOVE.L dest,a1
- MOVE.L size,d0
- JSR -624(A6)
- MOVE.L (A7)+,A6
- end;
- procedure CopyMemQuick(source, dest : Pointer;
- size : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L source,a0
- MOVE.L dest,a1
- MOVE.L size,d0
- JSR -630(A6)
- MOVE.L (A7)+,A6
- end;
- function CreateIORequest( mp : pMsgPort;
- size : ULONG ): pIORequest; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L mp,a0
- MOVE.L size,d0
- JSR -654(A6)
- MOVE.L (A7)+,A6
- end;
- function CreateMsgPort: pMsgPort; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -666(A6)
- MOVE.L (A7)+,A6
- end;
- function CreatePool( requrements,puddlesize,
- puddletresh : ULONG ): Pointer; Assembler;
- asm
- MOVEM.L d2/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L requrements,d0
- MOVE.L puddlesize,d1
- MOVE.L puddletresh,d2
- JSR -696(A6)
- MOVEM.L (A7)+,d2/a6
- end;
- procedure Deallocate(header : pMemHeader;
- block : Pointer;
- size : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L header,a0
- MOVE.L block,a1
- MOVE.L size,d0
- JSR -192(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Debug(Param : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L Param,d0
- JSR -114(A6)
- MOVE.L (A7)+,A6
- end;
- procedure DeleteIORequest( iorq : Pointer ); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L iorq,a0
- JSR -660(A6)
- MOVE.L (A7)+,A6
- end;
- procedure DeleteMsgPort( mp : pMsgPort ); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L mp,a0
- JSR -672(A6)
- MOVE.L (A7)+,A6
- end;
- procedure DeletePool( poolheader : Pointer ); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L poolheader,a0
- JSR -702(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Disable; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -120(A6)
- MOVE.L (A7)+,A6
- end;
- function DoIO(io : pIORequest) : Shortint; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L io,a1
- JSR -456(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Enable; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -126(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Enqueue(list : pList;
- node : pNode); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L list,a0
- MOVE.L node,a1
- JSR -270(A6)
- MOVE.L (A7)+,A6
- end;
- function FindName(start : pList;
- name : STRPTR) : pNode; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L start,a0
- MOVE.L name,a1
- JSR -276(A6)
- MOVE.L (A7)+,A6
- end;
- function FindPort(name : STRPTR): pMsgPort; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L name,a1
- JSR -390(A6)
- MOVE.L (A7)+,A6
- end;
- function FindResident(name : STRPTR) : pResident; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L name,a1
- JSR -96(A6)
- MOVE.L (A7)+,A6
- end;
- function FindSemaphore(name : STRPTR) : pSignalSemaphore; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L name,a1
- JSR -594(A6)
- MOVE.L (A7)+,A6
- end;
- function FindTask(name : STRPTR) : pTask; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L name,a1
- JSR -294(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Forbid; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -132(A6)
- MOVE.L (A7)+,A6
- end;
- procedure FreeEntry(memList : pMemList); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L memlist,a0
- JSR -228(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ExecFreeMem(memBlock : Pointer;
- size : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L memBlock,a1
- MOVE.L size,d0
- JSR -210(A6)
- MOVE.L (A7)+,A6
- end;
- procedure FreePooled( poolheader, memory: Pointer;
- memsize: ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L poolheader,a0
- MOVE.L memory,a1
- MOVE.L memsize,d0
- JSR -714(A6)
- MOVE.L (A7)+,A6
- end;
- procedure FreeSignal(signalNum : Longint); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L signalNum,d0
- JSR -336(A6)
- MOVE.L (A7)+,A6
- end;
- procedure FreeTrap(signalNum : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L signalNum,d0
- JSR -348(A6)
- MOVE.L (A7)+,A6
- end;
- procedure FreeVec( memory : Pointer ); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L memory,a1
- JSR -690(A6)
- MOVE.L (A7)+,A6
- end;
- function GetCC : Word; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -528(A6)
- MOVE.L (A7)+,A6
- end;
- function GetMsg(port : pMsgPort): pMessage; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L port,a0
- JSR -372(A6)
- MOVE.L (A7)+,A6
- end;
- procedure InitCode(startClass, version : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L startClass,d0
- MOVE.L version,d1
- JSR -72(A6)
- MOVE.L (A7)+,A6
- end;
- procedure InitResident(resident : pResident;
- segList : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L resident,a1
- MOVE.L seglist,d1
- JSR -102(A6)
- MOVE.L (A7)+,A6
- end;
- procedure InitSemaphore(sigsem : pSignalSemaphore); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a0
- JSR -558(A6)
- MOVE.L (A7)+,A6
- end;
- procedure InitStruct(table, memory : Pointer;
- size : ULONG); Assembler;
- asm
- MOVEM.L a2/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L table,a1
- MOVE.L memory,a2
- MOVE.L size,d0
- JSR -78(A6)
- MOVEM.L (A7)+,a2/a6
- end;
- procedure Insert(list : pList;
- node, listNode : pNode); Assembler;
- asm
- MOVEM.L a2/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L list,a0
- MOVE.L node,a1
- MOVE.L listNode,a2
- JSR -234(A6)
- MOVEM.L (A7)+,a2/a6
- end;
- procedure MakeFunctions(target, functionarray : Pointer ;
- dispbase : ULONG); Assembler;
- asm
- MOVEM.L a2/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L target,a0
- MOVE.L functionarray,a1
- MOVE.L dispbase,a2
- JSR -90(A6)
- MOVEM.L (A7)+,a2/a6
- end;
- function MakeLibrary(vec, struct, init : Pointer;
- dSize : ULONG ;
- segList : Pointer) : pLibrary; Assembler;
- asm
- MOVEM.L a2/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L vec,a0
- MOVE.L struct,a1
- MOVE.L init,a2
- MOVE.L dSize,d0
- MOVE.L seglist,d1
- JSR -84(A6)
- MOVEM.L (A7)+,a2/a6
- end;
- function ObtainQuickVector(interruptCode : Pointer) : ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L interruptCode,a0
- JSR -786(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ObtainSemaphore(sigsem : pSignalSemaphore); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a0
- JSR -564(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ObtainSemaphoreList(semlist : pList); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L semlist,a0
- JSR -582(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ObtainSemaphoreShared(sigsem : pSignalSemaphore); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a0
- JSR -678(A6)
- MOVE.L (A7)+,A6
- end;
- function OldOpenLibrary(lib : STRPTR): pLibrary; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L lib,a1
- JSR -408(A6)
- MOVE.L (A7)+,A6
- end;
- function OpenDevice(devName : STRPTR;
- unitNumber : ULONG;
- io : pIORequest; flags : ULONG) : Shortint; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L devName,a0
- MOVE.L unitNumber,d0
- MOVE.L io,a1
- MOVE.L flags,d1
- JSR -444(A6)
- MOVE.L (A7)+,A6
- end;
- function OpenLibrary(libName : STRPTR;
- version : Integer) : pLibrary; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L libName,a1
- MOVE.L version,d0
- JSR -552(A6)
- MOVE.L (A7)+,A6
- end;
- function OpenResource(resname : STRPTR): Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L resname,a1
- JSR -498(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Permit; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -138(A6)
- MOVE.L (A7)+,A6
- end;
- function Procure(sem : pSemaphore;
- bid : pMessage) : Boolean; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sem,a0
- MOVE.L bid,a1
- JSR -540(A6)
- MOVE.L (A7)+,A6
- TST.L d0
- SNE d0
- NEG.B d0
- end;
- procedure PutMsg(port : pMsgPort;
- mess : pMessage); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L port,a0
- MOVE.L mess,a1
- JSR -366(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RawDoFmt(Form : STRPTR;
- data, putChProc, putChData : Pointer); Assembler;
- asm
- MOVEM.L a2/a3/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L Form,a0
- MOVE.L data,a1
- MOVE.L putChProc,a2
- MOVE.L putChData,a3
- JSR -522(A6)
- MOVEM.L (A7)+,a2/a3/a6
- end;
- procedure ReleaseSemaphore(sigsem : pSignalSemaphore); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a0
- JSR -570(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ReleaseSemaphoreList(siglist : pList); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L siglist,a0
- JSR -588(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemDevice(device : pDevice); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L device,a1
- JSR -438(A6)
- MOVE.L (A7)+,A6
- end;
- function RemHead(list : pList) : pNode; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L list,a0
- JSR -258(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemIntServer(intNum : Longint;
- Int : pInterrupt); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L intNum,d0
- MOVE.L Int,a1
- JSR -174(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemLibrary(lib : pLibrary); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L lib,a1
- JSR -402(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemMemHandler(memhand : pInterrupt); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L memhand,a1
- JSR -780(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Remove(node : pNode); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L node,a1
- JSR -252(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemPort(port : pMsgPort); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L port,a1
- JSR -360(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemResource(resname : Pointer); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L resname,a1
- JSR -492(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemSemaphore(sigsem : pSignalSemaphore); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a1
- JSR -606(A6)
- MOVE.L (A7)+,A6
- end;
- function RemTail(list : pList) : pNode; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L list,a0
- JSR -264(A6)
- MOVE.L (A7)+,A6
- end;
- procedure RemTask(task : pTask); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L task,a1
- JSR -288(A6)
- MOVE.L (A7)+,A6
- end;
- procedure ReplyMsg(mess : pMessage); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L mess,a1
- JSR -378(A6)
- MOVE.L (A7)+,A6
- end;
- procedure SendIO(io : pIORequest); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L io,a1
- JSR -462(A6)
- MOVE.L (A7)+,A6
- end;
- function SetExcept(newSignals, signalMask : ULONG) : ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L newSignals,d0
- MOVE.L signalMask,d1
- JSR -312(A6)
- MOVE.L (A7)+,A6
- end;
- function SetFunction(lib : pLibrary;
- funcOff : LONG;
- funcEntry : Pointer) : Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L lib,a1
- MOVE.L funcOff,a0
- MOVE.L funcEntry,d0
- JSR -420(A6)
- MOVE.L (A7)+,A6
- end;
- function SetIntVector(intNum : Longint;
- Int : pInterrupt) : pInterrupt; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L intNum,d0
- MOVE.L Int,a1
- JSR -162(A6)
- MOVE.L (A7)+,A6
- end;
- function SetSignal(newSignals, signalMask : ULONG) : ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L newSignals,d0
- MOVE.L signalMask,d1
- JSR -306(A6)
- MOVE.L (A7)+,A6
- end;
- function SetSR(newSR, mask : ULONG) : ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L newSR,d0
- MOVE.L mask,d1
- JSR -144(A6)
- MOVE.L (A7)+,A6
- end;
- function SetTaskPri(task : pTask;
- priority : Longint) : Shortint; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L task,a1
- MOVE.L priority,d0
- JSR -300(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Signal(task : pTask; signals : ULONG); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L task,a1
- MOVE.L signals,d0
- JSR -324(A6)
- MOVE.L (A7)+,A6
- end;
- procedure StackSwap( StackSwapRecord : Pointer ); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L StackSwapRecord,a0
- JSR -732(A6)
- MOVE.L (A7)+,A6
- end;
- procedure SumKickData; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -612(A6)
- MOVE.L (A7)+,A6
- end;
- procedure SumLibrary(lib : pLibrary); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L lib,a1
- JSR -426(A6)
- MOVE.L (A7)+,A6
- end;
- function SuperState : Pointer; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- JSR -150(A6)
- MOVE.L (A7)+,A6
- end;
- function Supervisor(thefunc : Pointer): ULONG; Assembler;
- asm
- MOVEM.L a5/a6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L thefunc,a5
- JSR -30(A6)
- MOVEM.L (A7)+,a5/a6
- end;
- function TypeOfMem(mem : Pointer) : ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L mem,a1
- JSR -534(A6)
- MOVE.L (A7)+,A6
- end;
- procedure UserState(s : Pointer); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L s,d0
- JSR -156(A6)
- MOVE.L (A7)+,A6
- end;
- procedure Vacate(sigsem : pSignalSemaphore;
- bidMsg : pSemaphoreMessage); Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L sigsem,a0
- MOVE.L bidMsg,a1
- JSR -546(A6)
- MOVE.L (A7)+,A6
- end;
- function Wait(signals : ULONG) : ULONG; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L signals,d0
- JSR -318(A6)
- MOVE.L (A7)+,A6
- end;
- function WaitIO(io : pIORequest) : Shortint; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L io,a1
- JSR -474(A6)
- MOVE.L (A7)+,A6
- end;
- function WaitPort(port : pMsgPort): pMessage; Assembler;
- asm
- MOVE.L A6,-(A7)
- MOVE.L _ExecBase,A6
- MOVE.L port,a0
- JSR -384(A6)
- MOVE.L (A7)+,A6
- end;
- end.
- {
- $Log$
- Revision 1.1 1998-03-25 11:18:47 root
- Initial revision
- Revision 1.3 1998/01/26 12:02:42 michael
- + Added log at the end
-
- Working file: rtl/amiga/exec.pp
- description:
- ----------------------------
- revision 1.2
- date: 1997/12/14 19:02:47; author: carl; state: Exp; lines: +11 -10
- * small bugfixes
- ----------------------------
- revision 1.1
- date: 1997/12/10 13:48:45; author: carl; state: Exp;
- + exec dynamic library definitions and calls.
- =============================================================================
- }
|