home *** CD-ROM | disk | FTP | other *** search
/ ISV Strong Games / ISV_STRONG_GAMES.iso / utils / gamesuite / !Stasis / Alien / Raw / AlSource next >
Text File  |  1995-01-22  |  4KB  |  215 lines

  1. #type &ffa
  2. #name StasisRaw
  3. #base 0
  4. #set Service_PsychoStarting=&80300
  5. #set Service_PsychoDying   =&80301
  6. #set Service_UKStasisFormat=&80310
  7. #set Service_StasisSave    =&80311
  8. #set Service_StasisIdentify=&80312
  9. #set stasis_alien          =1
  10. #set raw_filetype       =&FFD
  11.  
  12. .ModuleHeader
  13. .start
  14. DCD 0
  15. DCD init
  16. DCD final
  17. DCD service
  18. DCD title
  19. DCD help
  20. DCD helptable
  21. DCD 0
  22. DCD 0
  23. DCD 0
  24. DCD 0
  25. .title
  26. DCB  "StasisRaw"
  27. DCB 0
  28. ALIGN
  29. .help
  30. DCB  "Stasis Alien",9,"1.00 (24 Jan 1995) - For raw data samples"
  31. DCB 0
  32. ALIGN
  33. .helptable
  34. DCB  "StasisRaw"
  35. DCB 0
  36. ALIGN
  37. DCD 0
  38. DCD 0
  39. DCD 0
  40. DCD rawhelp
  41. DCD 0;End Marker
  42. .rawhelp
  43. DCB "This module allows Stasis to handle raw data.  The samples can be replayed, and saved by the *StasisSave Raw command.",0
  44. ALIGN
  45. .service
  46. ;R12 is the only register we may corrupt in a service call
  47. SUBS R12,R1,#&80000
  48. MOVMI PC,R14 ;for a quick return
  49. SUB R12,R12,#&300
  50. TEQ R12,#Service_UKStasisFormat-&80300
  51. TEQNE R12,#Service_StasisIdentify-&80300
  52. TEQNE R12,#Service_StasisSave-&80300
  53. MOVNE PC,R14
  54. TEQ R12,#Service_StasisIdentify-&80300
  55. BEQ identify
  56. TEQ R12,#Service_StasisSave-&80300
  57. BEQ save
  58. .ukformat
  59. STMFD R13!,{R3-R4,R14}
  60. MOV R3,#&FFD
  61. CMP R2,R3
  62. LDMNEFD R13!,{R3-R4,PC}^
  63. ;identified a raw sample by its filetype.
  64.  
  65. ADR R0,alienblock
  66. MOV R1,#0; claim service call
  67. LDMFD R13!,{R3-R4,PC}
  68.  
  69. .alienblock
  70. DCB "StAl"; ID Word - required - used to check if the block is valid.
  71. DCD getinfo-alienblock;get info routine
  72. DCD putinfo-alienblock;put info routine
  73. DCD 0     ;release routine (we don't have one)
  74. DCD 0     ;must be zero
  75. DCD 0     ;for future use
  76. DCD 0     ;for future use
  77. DCD name1-alienblock
  78. DCD formatname-alienblock
  79. DCD raw_filetype
  80. DCD title-alienblock
  81. DCD 0
  82. ALIGN
  83.  
  84. ;The info routine is entered with
  85. ;R0 points to the stasis slot decription block
  86. ;R1 points to your sample
  87.  
  88. ;The file length as loaded may be accessed by LDR R0,[R10,#4]
  89.  
  90. ;The info entry should return:
  91.  
  92. ;R1=name *
  93. ;R2=length
  94. ;R3=finetune * &4000=default, &2000=1 octave lower, &8000=1 octave higher etc 
  95. ;R4=repofs *
  96. ;R5=replen *
  97. ;R6=datastart
  98. ;R7=volume *
  99. ;R8=special (return R8=0)
  100. ; *= may return zero if not supported
  101.  
  102. .getinfo
  103. MOV R11,R1;our sample address
  104. MOV R1,#0; sample name - not supported by raw samples
  105. LDR R2,[R10,#4]; file length
  106. MOV R3,#0
  107. MOV R4,#0
  108. MOV R5,#0
  109. MOV R7,#0
  110. MOV R6,R11
  111. MOV R7,#0
  112. MOV R8,#0
  113. MOV PC,R14
  114.  
  115. .putinfo
  116. AND R0,R8,#%111111111         ;what we don't support ie everything
  117. MOV PC,R14
  118.  
  119. ; This service call is used to build a list of recognised filetypes
  120.  
  121. .identify
  122. ADD R0,R0,#1
  123. CMP R2,#0
  124. MOVEQ PC,R14
  125. ADR R12,alienblock
  126. STR R12,[R2],#4
  127. MOV PC,R14
  128.  
  129. ;On entry to a save routine, R0 is the slot number (for us to pass
  130. ;to Stasis_GetSlotInfo.
  131. ;R2 points to the filename
  132. ;R3 points to the namecheck routine in Stasis which compares the name
  133. ;pointed to by R1 to that entered at the command line
  134.  
  135. ;We pass on the Service call if we don't recognise the save type
  136. ;ie return with MOV PC,R14 with registers unchanged.
  137. ;If we want to save in our format we return with
  138. ;R0 preserved.
  139. ;R1=0 to claim the service call
  140. ;R2 points to a filled-in header block
  141. ;R3 is the length of the header block
  142. ;R4 is the filetype
  143. ;Stasis will add the sample data in logarithmic format after the header
  144. ;
  145. ;Otherwise return with R2=0 after carrying out the whole save process
  146. ;yourself.
  147. ;To return an error, return with R2=1 and R0 pointing to an error block.
  148.  
  149. .rawformat
  150. .save
  151. STMFD R13!,{R1,R14}
  152. ADR R1,name1
  153. MOV R14,PC
  154. MOV PC,R3       ;BL to R3
  155. LDMFD R13!,{R1,R14}
  156. MOVNES PC,R14;return if no match
  157. STMFD R13!,{R0,R5-R10,R14}
  158. MOV R1,#0
  159. ADR R2,rawformat
  160. MOV R3,#0
  161. MOV R4,#raw_filetype
  162. LDMFD R13!,{R0,R5-R10,PC}
  163. ;return and let Stasis do the rest
  164.  
  165. .init                  ;My standard init/final service calls.
  166. STMFD R13!,{R0-R4,R14}
  167. ADR R0,start
  168. MOV R1,#Service_PsychoStarting
  169. MOV R2,#0; the R12 value
  170. MOV R3,stasis_alien
  171. ADR R4,alienblock
  172. SWI OS_ServiceCall
  173. CMP R1,#0
  174. LDMFD R13!,{R0-R4,R14}
  175. ADREQ R0,initerrtext
  176. ORRVS R14,R14,#1<<28
  177. MOVS PC,R14
  178.  
  179. .final
  180. STMFD R13!,{R0-R4,R14}
  181. ADR R0,start
  182. MOV R1,#Service_PsychoDying
  183. MOV R2,#0
  184. MOV R3,stasis_alien
  185. ADR R4,alienblock
  186. SWI OS_ServiceCall
  187. CMP R1,#0
  188. LDMFD R13!,{R0-R4,R14}
  189. ADREQ R0,finalerrtext
  190. ORRVS R14,R14,#1<<28
  191. MOVS PC,R14
  192.  
  193. .initerrtext
  194. DCD &809DFE
  195. DCB "StasisRaw : Initialisation veto",0
  196. ALIGN
  197. .finalerrtext
  198. DCD &809DFF
  199. DCB "StasisRaw : RMKill veto",0
  200.  
  201. .name1
  202. DCB "Raw",0
  203. .name2
  204. DCB "Raw",0
  205. .formatname
  206. DCB "Raw Data",0
  207. ALIGN
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.