home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / gamesuite_1 / GameSuite / Examples / BolMaster / !BolMaster / Sources / Macros < prev    next >
Encoding:
Text File  |  1995-08-12  |  2.2 KB  |  119 lines

  1. macro backtransnet m0
  2. ;translate a levelnet address into Amnesia coords.
  3. {
  4.   STMFD R13!,{R2-R3}
  5.   LDR R1,[R12,#v.levelnet]
  6.   SUB R1,m0,R1
  7.   LDR R2,[R12,#v.netxsize]
  8.   MOV R2,R2,LSL #2
  9.   SUB R2,R2,#1
  10.   AND R0,R1,R2
  11.   LDR R2,[R12,#v.netysize]
  12.   MOV R2,R2,LSL #2
  13.   SUB R2,R2,#1
  14.   LDR R3,[R12,#v.levelshift]
  15.   ADD R3,R3,#2
  16.   MOV R1,R1,LSR R3
  17.   AND R1,R1,R2
  18.   MOV R0,R0,LSL #12+baseshift-netshift
  19.   MOV R1,R1,LSL #12+baseshift-netshift
  20.   ADD R0,R0,#1<<(11+baseshift-netshift)
  21.   ADD R1,R1,#1<<(11+baseshift-netshift)
  22.   LDMFD R13!,{R2-R3}
  23. }
  24.  
  25. macro backtransdata m0
  26. ;translate a leveldata address into Amnesia coords
  27. {
  28.   STMFD R13!,{R2-R3}
  29.   LDR R1,[R12,#v.leveldata]
  30.   SUB R1,m0,R1
  31.   LDR R2,[R12,#v.netxsize]
  32.   SUB R2,R2,#1
  33.   AND R0,R1,R2
  34.   LDR R2,[R12,#v.netysize]
  35.   SUB R2,R2,#1
  36.   LDR R3,[R12,#v.levelshift]
  37.   MOV R1,R1,LSR R3
  38.   AND R1,R1,R2
  39.   MOV R0,R0,LSL #12+baseshift
  40.   MOV R1,R1,LSL #12+baseshift
  41.   ADD R0,R0,#1<<(11+baseshift)
  42.   ADD R1,R1,#1<<(11+baseshift)
  43.   LDMFD R13!,{R2-R3}
  44. }
  45.  
  46. macro transnet m0,m1,m2
  47. ;translate the Amnesia coords in m1,m2 to a levelnet address
  48. {
  49.   MOV m0,m2,LSR #12+baseshift-netshift
  50.   LDR R14,[R12,#v.levelshift]
  51.   MOV m0,m0,LSL R14
  52.   MOV m0,m0,LSL #netshift
  53.   LDR R14,[R12,#v.levelnet]
  54.   ADD m0,m0,R14
  55.   ADD m0,m0,m1,LSR #12+baseshift-netshift
  56. }  
  57.  
  58. macro transdata m0,m1,m2
  59. ;translate the Amnesia coords in m1,m2 to a leveldata address
  60. {
  61.   MOV m0,m2,LSR #12+baseshift
  62.   LDR R14,[R12,#v.levelshift]
  63.   MOV m0,m0,LSL R14
  64.   LDR R14,[R12,#v.leveldata]
  65.   ADD m0,m0,R14
  66.   ADD m0,m0,m1,LSR #12+baseshift
  67. }  
  68.  
  69.  
  70.  
  71. ;rem finds the remainder of m1/3 for m1<256  
  72. macro rem3 m0
  73. {
  74.   CMP m0,#192
  75.   SUBGE m0,m0,#192
  76.   CMP m0,#96
  77.   SUBGE m0,m0,#96
  78.   CMP m0,#48
  79.   SUBGE m0,m0,#48
  80.   CMP m0,#24
  81.   SUBGE m0,m0,#24
  82.   CMP m0,#12
  83.   SUBGE m0,m0,#12
  84.   CMP m0,#6
  85.   SUBGE m0,m0,#6
  86.   CMP m0,#3
  87.   SUBGE m0,m0,#3
  88. }  
  89.  
  90. macro DIV96 m0,m1
  91. ;divide by 96 for m1 < 6<<12
  92. {
  93. MOV m0,#0
  94. CMP m1,#3<<12
  95. SUBGE m1,m1,#3<<12
  96. ORRGE m0,m0,#1<<7
  97. CMP m1,#3<<11
  98. SUBGE m1,m1,#3<<11
  99. ORRGE m0,m0,#1<<6
  100. CMP m1,#3<<10
  101. SUBGE m1,m1,#3<<10
  102. ORRGE m0,m0,#1<<5
  103. CMP m1,#3<<9
  104. SUBGE m1,m1,#3<<9
  105. ORRGE m0,m0,#1<<4
  106. CMP m1,#3<<8
  107. SUBGE m1,m1,#3<<8
  108. ORRGE m0,m0,#1<<3
  109. CMP m1,#3<<7
  110. SUBGE m1,m1,#3<<7
  111. ORRGE m0,m0,#1<<2
  112. CMP m1,#3<<6
  113. SUBGE m1,m1,#3<<6
  114. ORRGE m0,m0,#1<<1
  115. CMP m1,#3<<5
  116. SUBGE m1,m1,#3<<5
  117. ORRGE m0,m0,#1
  118. }
  119.