home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 72 / IOPROG_72.ISO / soft / Codice / CRobots / Software / PCROB141.ZIP / LIB / PCROBOTS.BAS < prev    next >
Encoding:
BASIC Source File  |  1993-01-07  |  7.8 KB  |  454 lines

  1. '$INCLUDE: 'pcrobots.bi'
  2.  
  3. DEFINT A-Z
  4.  
  5. TYPE RegType
  6.     AX    as INTEGER
  7.     BX    as INTEGER
  8.     CX    as INTEGER
  9.     DX    as INTEGER
  10.     BP    as INTEGER
  11.     SI    as INTEGER
  12.     DI    as INTEGER
  13.     FLAGS as INTEGER
  14. end TYPE
  15.  
  16. TYPE RegTypeX
  17.     AX    as INTEGER
  18.     BX    as INTEGER
  19.     CX    as INTEGER
  20.     DX    as INTEGER
  21.     BP    as INTEGER
  22.     SI    as INTEGER
  23.     DI    as INTEGER
  24.     FLAGS as INTEGER
  25.     DS    as INTEGER
  26.     ES    as INTEGER
  27. end TYPE
  28.  
  29. DECLARE sub Interrupt (intnum, inreg as RegType, outreg as RegType)
  30.  
  31. DECLARE sub InterruptX (intnum, inreg as RegTypeX, outreg as RegTypeX)
  32.  
  33. DECLARE function MakeLong&(byval LoByte, byval HiByte)
  34. DECLARE sub SplitLong(byval Value&, LoByte, HiByte)
  35.  
  36. dim shared CRC as long
  37.  
  38. sub seedrand (seed as long)
  39.     CRC = seed
  40. end sub
  41.  
  42. function rand (limit as integer)
  43.     dim flip as INTEGER
  44.     dim i as INTEGER
  45.     CRC = CRC XOR time
  46.     FOR i = 1 TO 37
  47.       flip = CRC AND 1
  48.       IF CRC < 0 THEN
  49.         CRC = ((CRC \ 2) XOR &H80000000) - flip
  50.       ELSE
  51.         CRC = CRC \ 2
  52.       end IF
  53.       IF flip THEN
  54.         CRC = CRC XOR &H965A78E1
  55.       end IF
  56.     NEXT
  57.     rand = CRC mod limit
  58. end function
  59.  
  60. function MakeLong&(byval LoByte, byval HiByte)
  61.     dim Result as Long
  62.     dim Temp1 as Long
  63.     dim Temp2 as Long
  64.     Temp1 = LoByte
  65.     Temp2 = HiByte
  66.     Result = (Temp1 AND &H7FFF) + (Temp2 AND &H7FFF) * &H10000
  67.     IF Temp1 AND &H8000 THEN Result = (Result OR &H8000)
  68.     IF Temp2 AND &H8000 THEN Result = (Result OR &H80000000)
  69.     MakeLong = Result
  70. end function
  71.  
  72. sub SplitLong(byval Value&, LoByte, HiByte)
  73.     LoByte = (Value& AND &H7FFF)
  74.     HiByte = (Value& AND &H7FFF0000) \ &H10000
  75.     IF Value& AND &H8000 THEN LoByte = LoByte OR &H8000
  76.     IF Value& AND &H80000000 THEN HiByte = HiByte OR &H8000
  77. end sub
  78.  
  79. sub SwapTask
  80.     dim Regs as RegType
  81.  
  82.     Regs.AX = 0
  83.  
  84.     Interrupt &HE0, Regs, Regs
  85. end sub
  86.  
  87. sub Movement(byval Fast, byval Angle)
  88.     dim Regs as RegType
  89.  
  90.     Regs.AX = 1
  91.     Regs.BX = Fast
  92.     Regs.CX = Angle
  93.  
  94.     Interrupt &HE0, Regs, Regs
  95. end sub
  96.  
  97. function Scan(byval Angle, byval Res, Range)
  98.     dim Regs as RegType
  99.  
  100.     Regs.AX = 2
  101.     Regs.BX = Angle
  102.     Regs.CX = Res
  103.  
  104.     Interrupt &HE0, Regs, Regs
  105.  
  106.     Range = Regs.BX
  107.     Scan  = Regs.AX
  108. end function
  109.  
  110. function Shoot(byval Angle, byval Range)
  111.     dim Regs as RegType
  112.  
  113.     Regs.AX = 3
  114.     Regs.BX = Angle
  115.     Regs.CX = Range
  116.  
  117.     Interrupt &HE0, Regs, Regs
  118.  
  119.     Shoot = Regs.AX
  120. end function
  121.  
  122. sub GetXY(X, Y)
  123.     dim Regs as RegType
  124.  
  125.     Regs.AX = &H10
  126.  
  127.     Interrupt &HE0, Regs, Regs
  128.  
  129.     X = Regs.BX
  130.     Y = Regs.CX
  131. end sub
  132.  
  133. function Transmit(byval Target, byval Message)
  134.     dim Regs as RegType
  135.  
  136.     Regs.AX = &H11
  137.     Regs.BX = Target
  138.     Regs.CX = Message
  139.  
  140.     Interrupt &HE0, Regs, Regs
  141.  
  142.     Transmit = Regs.AX
  143. end function
  144.  
  145. function Receive(Source, Message)
  146.     dim Regs as RegType
  147.  
  148.     Regs.AX = &H12
  149.  
  150.     Interrupt &HE0, Regs, Regs
  151.  
  152.     Message = Regs.CX
  153.     Source  = Regs.BX
  154.     Receive = Regs.AX
  155. end function
  156.  
  157. function Damage
  158.     dim Regs as RegType
  159.  
  160.     Regs.AX = &H13
  161.  
  162.     Interrupt &HE0, Regs, Regs
  163.  
  164.     Damage = Regs.BX
  165. end function
  166.  
  167.  
  168. function Speed
  169.     dim Regs as RegType
  170.  
  171.     Regs.AX = &H14
  172.  
  173.     Interrupt &HE0, Regs, Regs
  174.  
  175.     Speed = Regs.BX
  176. end function
  177.  
  178.  
  179. function Battery
  180.     dim Regs as RegType
  181.  
  182.     Regs.AX = &H15
  183.  
  184.     Interrupt &HE0, Regs, Regs
  185.  
  186.     Battery = Regs.BX
  187. end function
  188.  
  189. function Ticks&
  190.     dim Regs as RegType
  191.  
  192.     Regs.AX = &H16
  193.  
  194.     Interrupt &HE0, Regs, Regs
  195.  
  196.     Ticks = MakeLong(Regs.CX, Regs.BX)
  197. end function
  198.  
  199. function lSin&(byval Angle)
  200.     dim Regs as RegType
  201.  
  202.     Regs.AX = &H17
  203.     Regs.BX = Angle
  204.  
  205.     Interrupt &HE0, Regs, Regs
  206.  
  207.     lSin = MakeLong(Regs.CX, Regs.BX)
  208. end function
  209.  
  210.  
  211. function lCos&(byval Angle)
  212.     dim Regs as RegType
  213.  
  214.     Regs.AX = &H18
  215.     Regs.BX = Angle
  216.  
  217.     Interrupt &HE0, Regs, Regs
  218.  
  219.     lCos = MakeLong(Regs.CX, Regs.BX)
  220. end function
  221.  
  222.  
  223. function lTan&(byval Angle)
  224.     dim Regs as RegType
  225.  
  226.     Regs.AX = &H19
  227.     Regs.BX = Angle
  228.  
  229.     Interrupt &HE0, Regs, Regs
  230.  
  231.     lTan = MakeLong(Regs.CX, Regs.BX)
  232. end function
  233.  
  234. function lAtan(byval Ratio&)
  235.     dim Regs as RegType
  236.  
  237.     Regs.AX = &H1A
  238.  
  239.     SplitLong Ratio&, Regs.CX, Regs.BX
  240.  
  241.     Interrupt &HE0, Regs, Regs
  242.  
  243.     lAtan = Regs.AX
  244. end function
  245.  
  246. function lSqrt&(byval Value&)
  247.     dim Regs as RegType
  248.  
  249.     Regs.AX = &H1b
  250.     SplitLong Value&, Regs.CX, Regs.BX
  251.  
  252.     Interrupt &HE0, Regs, Regs
  253.  
  254.     lSqrt = MakeLong(Regs.CX, Regs.BX)
  255. end function
  256.  
  257.  
  258. sub SetPattern(Buffer$)
  259.     IF len(Buffer$)=5 THEN
  260.         dim Regs as RegType
  261.  
  262.         Regs.AX = &H1C
  263.         Regs.BX = sseg(Buffer$)
  264.         Regs.CX = sadd(Buffer$)
  265.  
  266.         Interrupt &HE0, Regs, Regs
  267.     endIF
  268. end sub
  269.  
  270.  
  271. sub DebugFlag(byval Flag, byval Set)
  272.     dim Regs as RegType
  273.  
  274.     Regs.AX = &H1D
  275.     Regs.BX = Flag
  276.     Regs.CX = Set
  277.  
  278.     Interrupt &HE0, Regs, Regs
  279. end sub
  280.  
  281.  
  282. sub BuyArmour(byval ArmourUnits)
  283.     dim Regs as RegType
  284.  
  285.     Regs.AX = &H1E
  286.     Regs.BX = ArmourUnits
  287.  
  288.     Interrupt &HE0, Regs, Regs
  289. end sub
  290.  
  291.  
  292. sub BuyShells(byval Shells)
  293.     dim Regs as RegType
  294.  
  295.     Regs.AX = &H1F
  296.     Regs.BX = Shells
  297.  
  298.     Interrupt &HE0, Regs, Regs
  299. end sub
  300.  
  301.  
  302. function ShellsLeft
  303.     dim Regs as RegType
  304.  
  305.     Regs.AX = &H20
  306.  
  307.     Interrupt &HE0, Regs, Regs
  308.  
  309.     ShellsLeft = Regs.BX
  310. end function
  311.  
  312.  
  313. sub GetLocalMap(Buffer$)
  314.     dim Regs as RegType
  315.  
  316.     Buffer$ = string$(81, 0)
  317.  
  318.     Regs.AX = &H21
  319.     Regs.BX = sseg(Buffer$)
  320.     Regs.CX = sadd(Buffer$)
  321.  
  322.     Interrupt &HE0, Regs, Regs
  323. end sub
  324.  
  325.  
  326. sub Invisibility(byval InvisFlag)
  327.     dim Regs as RegType
  328.  
  329.     Regs.AX = &H22
  330.     Regs.BX = InvisFlag
  331.  
  332.     Interrupt &HE0, Regs, Regs
  333. end sub
  334.  
  335.  
  336. function GetShellStatus
  337.     dim Regs as RegType
  338.  
  339.     Regs.AX = &H23
  340.  
  341.     Interrupt &HE0, Regs, Regs
  342.  
  343.     GetShellStatus = Regs.BX
  344. end function
  345.  
  346.  
  347. function IsInvisible
  348.     dim Regs as RegType
  349.  
  350.     Regs.AX = &H24
  351.  
  352.     Interrupt &HE0, Regs, Regs
  353.  
  354.     IsInvisible = Regs.BX
  355. end function
  356.  
  357.  
  358. function lAtan2(byval Y, byval X)
  359.     dim Regs as RegType
  360.  
  361.     Regs.AX = &H25
  362.     Regs.BX = Y
  363.     Regs.CX = X
  364.  
  365.     Interrupt &HE0, Regs, Regs
  366.  
  367.     lAtan2 = Regs.AX
  368. end function
  369.  
  370. function GetRobotId
  371.     dim Regs as RegType
  372.  
  373.     Regs.AX = &H26
  374.  
  375.     Interrupt &HE0, Regs, Regs
  376.  
  377.     GetRobotId = Regs.AX
  378. end function
  379.  
  380. sub RegisterIFF (IFFname$)
  381.     dim Regs as RegType
  382.     dim Temp as string
  383.  
  384.     Temp = IFFname$ + chr$(0)
  385.  
  386.     Regs.AX = &H27
  387.     Regs.BX = sseg(Temp)
  388.     Regs.CX = sadd(Temp)
  389.  
  390.     Interrupt &HE0, Regs, Regs
  391. end sub
  392.  
  393. function CheckIFF (byval Id)
  394.     dim Regs as RegType
  395.  
  396.     Regs.AX = &H28
  397.     Regs.BX = Id
  398.  
  399.     Interrupt &HE0, Regs, Regs
  400.  
  401.     CheckIFF = Regs.AX
  402. end function
  403.  
  404. sub RegisterName (rName$)
  405.     dim Regs as RegType
  406.     dim Temp as string
  407.  
  408.     Temp = rName$ + chr$(0)
  409.  
  410.     Regs.AX = &H29
  411.     Regs.BX = sseg(Temp)
  412.     Regs.CX = sadd(Temp)
  413.  
  414.     Interrupt &HE0, Regs, Regs
  415. end sub
  416.  
  417. function FindName (byval StartId, Name$)
  418.     dim Regs as RegType
  419.     dim Temp as string
  420.  
  421.     Temp = Name$ + chr$(0)
  422.  
  423.     Regs.AX = &H2A
  424.     Regs.BX = sseg(Temp)
  425.     Regs.CX = sadd(Temp)
  426.     Regs.DX = StartId
  427.  
  428.     Interrupt &HE0, Regs, Regs
  429.  
  430.     FindName = Regs.AX
  431. end function
  432.  
  433. function GetTeamId
  434.     dim Regs as RegType
  435.  
  436.     Regs.AX = &H2B
  437.  
  438.     Interrupt &HE0, Regs, Regs
  439.  
  440.     GetTeamId = Regs.AX
  441. end function
  442.  
  443. function Configure(byval Fast, byval Manouevre, byval Range, byval Armour, byval AcceleRation, byval Invisible)
  444.     dim Regs as RegType
  445.  
  446.     Regs.AX = &H80
  447.     Regs.BX = (Fast AND &H7) + (Manouevre AND &H7) * 8 + (Range AND &H7) * 256 + (Armour AND &H7) * 4096
  448.     Regs.CX = (AcceleRation AND &H7) + (Invisible AND &H1) * 8
  449.  
  450.     Interrupt &HE0, Regs, Regs
  451.  
  452.     Configure = Regs.AX
  453. end function
  454.