home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / games / gamesuite / Utilities / Effects / EffSource < prev    next >
Text File  |  1995-01-24  |  6KB  |  361 lines

  1.  
  2. ; PsychoEffect module
  3. ; This module provides one useful SWI PsychoEffect_Fade, where
  4. ;R0 = address to read source from
  5. ;R1 = address to write faded data to
  6. ;R2 = size of source
  7. ;R3 = output brightness
  8. ;R4 = width of screen in bytes
  9.  
  10. ;The brightness can range from 0-60.  0 produces a black output, and
  11. ;60 produces an untouched full brightness image.  If the brightness is
  12. ;not a multiple of 4 a dithered image is produced.
  13.  
  14. ;Code written by Andy Southgate 1994/95.  Permission to use freely, alter
  15. ;and recompile in any shape or form, and incorporate into your own
  16. ;code is granted.
  17.  
  18. ;This source should be compiled with ExtAsm, and needs the file LinFade in
  19. ;the path Effects:
  20.  
  21. #name Effects
  22. #type &ffa
  23. #base 0
  24.  
  25. DCD 0
  26. DCD 0
  27. DCD 0
  28. DCD 0
  29. DCD title
  30. DCD help
  31. DCD commandtable
  32. DCD &4C380
  33. DCD swicode
  34. DCD switab
  35. DCD 0
  36. .title
  37. DCB "PsychoEffect",0
  38. .help
  39. DCB "Psychosis Effects        1.00 (24 Jan 1995)",0
  40. ALIGN
  41. .commandtable
  42. DCB "PsychoEffect",0
  43. ALIGN
  44. DCD 0
  45. DCD 0
  46. DCD 0
  47. DCD effectshelp
  48.  
  49. DCD 0; *** END Marker ***
  50. .effectshelp
  51. DCB 27,0," provides special effects for games.  It provides the SWI:",10,13,13
  52. DCB 34,"PsychoEffect_Fade",34,",adr_from,adr_to,size,fade,width",10,13,13
  53. DCB "adr_from",9,"source address",10,13
  54. DCB " adr_to ",9,9,"output address",10,13
  55. DCB "size",9,9,"size of memory block to fade",10,13
  56. DCB "fade",9,9,"fade level. 0 is darkest (output is black), 60 is lightest",10,13
  57. DCB 9,9,"(image is unfaded)",10,13
  58. DCB "width",9,9,"width of screen mode - used for dithering.",10,13,13
  59. DCB "Andy Southgate 1995 - use freely",0
  60. ALIGN
  61.  
  62. .switab
  63. DCB "PsychoEffect",0
  64. DCB "Fade",0
  65. DCB "FadeTable",0
  66. DCB 0 ;*** END MARKER ***
  67. ALIGN
  68. .swicode
  69. LDR R12,[R12]
  70. CMP R11,#0
  71. BEQ fadeswi
  72. CMP R11,#1
  73. BEQ fadetableswi
  74. B unknownswierr
  75.  
  76. .fadetableswi
  77. ADR R0,fadetable
  78. MOV PC,R14
  79.  
  80. .fadeswi
  81. STMFD R13!,{R0-R10,R14}
  82. CMP R3,#61
  83. LDMGEFD R13!,{R0-R10,R14}
  84. BGE bigfadeerr
  85. CMP R4,R2
  86. LDMGTFD R13!,{R0-R10,R14}
  87. BGT badwidtherr
  88. CMP R4,#31
  89. MOVLT R4,#320
  90. TST R4,#15
  91. LDMNEFD R13!,{R0-R10,R14}
  92. BNE badwidtherr
  93.  
  94. MOV R10,R4
  95. ADR R5,fadetable
  96. AND R6,R3,#3
  97. BIC R3,R3,#3
  98. ADD R5,R5,R3,LSL #6
  99. CMP R6,#1
  100. BEQ dither1
  101. CMP R6,#2
  102. BEQ dither2
  103. CMP R6,#3
  104. BEQ dither3
  105.  
  106. .loop
  107. LDMIA R0!,{R6-R9}
  108. fade R6
  109. fade R7
  110. fade R8
  111. fade R9
  112. STMIA R1!,{R6-R9}
  113. SUBS R2,R2,#16
  114. BGT loop
  115. .fadeins
  116. LDMFD R13!,{R0-R10,PC}
  117.  
  118. .dither1
  119. .loop4
  120. STMFD R13!,{R2}
  121. MOV R2,R10
  122. .loop4b
  123. LDMIA R0!,{R6-R9}
  124. difade1 R6
  125. difade1 R7
  126. difade1 R8
  127. difade1 R9
  128. STMIA R1!,{R6-R9}
  129. SUBS R2,R2,#16
  130. BGT loop4b
  131. MOV R2,R10
  132. .loop4c
  133. LDMIA R0!,{R6-R9}
  134. difade1b R6
  135. difade1b R7
  136. difade1b R8
  137. difade1b R9
  138. STMIA R1!,{R6-R9}
  139. SUBS R2,R2,#16
  140. BGT loop4c
  141. LDMFD R13!,{R2}
  142. SUBS R2,R2,R10,LSL #1
  143. BGT loop4
  144. B fadeins
  145.  
  146. .dither2
  147. .loop5
  148. STMFD R13!,{R2}
  149. MOV R2,R10
  150. .loop5b
  151. LDMIA R0!,{R6-R9}
  152. difade2 R6
  153. difade2 R7
  154. difade2 R8
  155. difade2 R9
  156. STMIA R1!,{R6-R9}
  157. SUBS R2,R2,#16
  158. BGT loop5b
  159. MOV R2,R10
  160. .loop5c
  161. LDMIA R0!,{R6-R9}
  162. difade2b R6
  163. difade2b R7
  164. difade2b R8
  165. difade2b R9
  166. STMIA R1!,{R6-R9}
  167. SUBS R2,R2,#16
  168. BGT loop5c
  169. LDMFD R13!,{R2}
  170. SUBS R2,R2,R10,LSL #1
  171. BGT loop5
  172. B fadeins
  173.  
  174. .dither3
  175. .loop6
  176. STMFD R13!,{R2}
  177. MOV R2,R10
  178. .loop6b
  179. LDMIA R0!,{R6-R9}
  180. difade3 R6
  181. difade3 R7
  182. difade3 R8
  183. difade3 R9
  184. STMIA R1!,{R6-R9}
  185. SUBS R2,R2,#16
  186. BGT loop6b
  187. MOV R2,R10
  188. .loop6c
  189. LDMIA R0!,{R6-R9}
  190. difade3b R6
  191. difade3b R7
  192. difade3b R8
  193. difade3b R9
  194. STMIA R1!,{R6-R9}
  195. SUBS R2,R2,#16
  196. BGT loop6c
  197. LDMFD R13!,{R2}
  198. SUBS R2,R2,R10,LSL #1
  199. BGT loop6
  200. B fadeins
  201.  
  202.  
  203.  
  204.  
  205. .white
  206. .loop2
  207. LDR R4,[R0],#4
  208. STR R4,[R1],#4
  209. SUBS R2,R2,#4
  210. BGT loop2
  211. B fadeins
  212. .black
  213. MOV R4,#0
  214. .loop3
  215. STR R4,[R1],#4
  216. SUBS R2,R2,#4
  217. BGT loop3
  218. B fadeins
  219.  
  220.  
  221. macro fade m0
  222. {
  223. LDRB R3,[R5,m0,LSR #24]
  224. MOV m0,m0,LSL #8
  225. LDRB R4,[R5,m0,LSR #24]
  226. ORR R3,R4,R3,LSL #8
  227. MOV m0,m0,LSL #8
  228. LDRB R4,[R5,m0,LSR #24]
  229. ORR R3,R4,R3,LSL #8
  230. MOV m0,m0,LSL #8
  231. LDRB R4,[R5,m0,LSR #24]
  232. ORR m0,R4,R3,LSL #8
  233. }
  234. macro difade1 m0
  235. {
  236. LDRB R3,[R5,m0,LSR #24]
  237. MOV m0,m0,LSL #8
  238. ADD R5,R5,#256
  239. LDRB R4,[R5,m0,LSR #24]
  240. ORR R3,R4,R3,LSL #8
  241. MOV m0,m0,LSL #8
  242. SUB R5,R5,#256
  243. LDRB R4,[R5,m0,LSR #24]
  244. ORR R3,R4,R3,LSL #8
  245. MOV m0,m0,LSL #8
  246. LDRB R4,[R5,m0,LSR #24]
  247. ORR m0,R4,R3,LSL #8
  248. }
  249.  
  250. macro difade1b m0
  251. {
  252. LDRB R3,[R5,m0,LSR #24]
  253. MOV m0,m0,LSL #8
  254. LDRB R4,[R5,m0,LSR #24]
  255. ORR R3,R4,R3,LSL #8
  256. MOV m0,m0,LSL #8
  257. LDRB R4,[R5,m0,LSR #24]
  258. ORR R3,R4,R3,LSL #8
  259. MOV m0,m0,LSL #8
  260. ADD R5,R5,#256
  261. LDRB R4,[R5,m0,LSR #24]
  262. ORR m0,R4,R3,LSL #8
  263. SUB R5,R5,#256
  264. }
  265.  
  266. macro difade2 m0
  267. {
  268. LDRB R3,[R5,m0,LSR #24]
  269. MOV m0,m0,LSL #8
  270. ADD R5,R5,#256
  271. LDRB R4,[R5,m0,LSR #24]
  272. ORR R3,R4,R3,LSL #8
  273. MOV m0,m0,LSL #8
  274. SUB R5,R5,#256
  275. LDRB R4,[R5,m0,LSR #24]
  276. ORR R3,R4,R3,LSL #8
  277. MOV m0,m0,LSL #8
  278. ADD R5,R5,#256
  279. LDRB R4,[R5,m0,LSR #24]
  280. ORR m0,R4,R3,LSL #8
  281. SUB R5,R5,#256
  282. }
  283. macro difade2b m0
  284. {
  285. ADD R5,R5,#256
  286. LDRB R3,[R5,m0,LSR #24]
  287. MOV m0,m0,LSL #8
  288. SUB R5,R5,#256
  289. LDRB R4,[R5,m0,LSR #24]
  290. ORR R3,R4,R3,LSL #8
  291. MOV m0,m0,LSL #8
  292. ADD R5,R5,#256
  293. LDRB R4,[R5,m0,LSR #24]
  294. ORR R3,R4,R3,LSL #8
  295. MOV m0,m0,LSL #8
  296. SUB R5,R5,#256
  297. LDRB R4,[R5,m0,LSR #24]
  298. ORR m0,R4,R3,LSL #8
  299. }
  300. macro difade3 m0
  301. {
  302. LDRB R3,[R5,m0,LSR #24]
  303. MOV m0,m0,LSL #8
  304. ADD R5,R5,#256
  305. LDRB R4,[R5,m0,LSR #24]
  306. ORR R3,R4,R3,LSL #8
  307. MOV m0,m0,LSL #8
  308. LDRB R4,[R5,m0,LSR #24]
  309. ORR R3,R4,R3,LSL #8
  310. MOV m0,m0,LSL #8
  311. LDRB R4,[R5,m0,LSR #24]
  312. ORR m0,R4,R3,LSL #8
  313. SUB R5,R5,#256
  314. }
  315. macro difade3b m0
  316. {
  317. ADD R5,R5,#256
  318. LDRB R3,[R5,m0,LSR #24]
  319. MOV m0,m0,LSL #8
  320. LDRB R4,[R5,m0,LSR #24]
  321. ORR R3,R4,R3,LSL #8
  322. MOV m0,m0,LSL #8
  323. SUB R5,R5,#256
  324. LDRB R4,[R5,m0,LSR #24]
  325. ORR R3,R4,R3,LSL #8
  326. MOV m0,m0,LSL #8
  327. ADD R5,R5,#256
  328. LDRB R4,[R5,m0,LSR #24]
  329. ORR m0,R4,R3,LSL #8
  330. SUB R5,R5,#256
  331. }
  332.                   
  333. .err
  334. ORR R14,R14,#1<<28
  335. MOVS PC,R14
  336.  
  337. .unknownswierr
  338. ADR R0,unknownswitext
  339. B err
  340. .bigfadeerr
  341. ADR R0,bigfadetext
  342. B err
  343. .badwidtherr
  344. ADR R0,badwidthtext
  345. B err
  346. .unknownswitext
  347. DCD &666
  348. DCB "Psychosis Effects : Unknown SWI",0
  349. ALIGN
  350. .bigfadetext
  351. DCD &666
  352. DCB "Psychosis Effects : Too big a fade number",0
  353. ALIGN
  354. .badwidthtext
  355. DCD &666
  356. DCB "Psychosis Effects : Bad R4 - must be a multiple of 32 and  31<R4<R2",0
  357. ALIGN
  358.  
  359. .fadetable
  360. INCBIN Effects:LinFade
  361.