home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / OUT.ZIP / SOURCE.ZIP / SOURCE.TXT < prev    next >
Text File  |  2004-01-16  |  8KB  |  189 lines

  1. =[ OUT source code ]========================================================
  2.                               badly commented code, but here it is anyway...
  3. ============================================================================
  4.  
  5. - getting started ----------------------------------------------------------
  6.  
  7. if you want to get started and check out or modify some screens, read on.
  8. the style of source code is 99% the same as with the 'delta' demo. a key
  9. feature being the screens may be included with my demo system, but also they
  10. can be used standalone. the screen source code has the extension '.so'.
  11.  
  12. a .so file can be assembled and ran standalone without any extra measures.
  13. it just includes a test environment 'tester.s' (including a fps counter and
  14. such) and takes off. mostly however, you need to press some stuff on the 
  15. numeric keypad to get things going. these keys directly access the custom 
  16. event routines of the screen.
  17.  
  18. if you want to assemble the demo as a whole you can open 'demo.s', assemble
  19. it and run. the demo system primarily depends on sync commands from the
  20. playing modfile, but can also be synced by keyboard input by changing an
  21. equate.
  22.  
  23. - the libraries ------------------------------------------------------------
  24.  
  25. there are various, most with the extension '.i'. a few others use the '.s'
  26. extension. the following are use by this demo:
  27.  
  28. dsp_fix  s : dsp bootstrapper by NoCrew
  29. earxplao s : the 'multitasking' dsp modplayer
  30. fscr2    i : video routines: palette, resolution, blitting and such
  31. math     i : guess what
  32. mem      i : dynamic memory management without the swiss cheese effect
  33. object3d i : primitive 3d objects and damaging routs for use with human fly
  34. s_flydsp s : the human fly rendering pipeline
  35. sys      i : some cookie shit, cache crap
  36. texture  i : perlin texture generator, some palettes
  37.  
  38. for a more detailed description of human fly, check out the other text 
  39. files, bundled with this package:
  40.  
  41. faq      txt : an early and incomplete faq
  42. format   txt : description of humanfly's native 3d object format
  43. flow_dsp txt : implementation details of dsp version of humanfly
  44. paint    txt : humanfly's paintmodes and their implementation
  45. rle      txt : description of humanfly's native rle sprite format
  46.  
  47. - the screens --------------------------------------------------------------
  48.  
  49. contourd so : dither-blurred multi frame rotozoomer
  50. dspbilin so : bilinear filtered rotozoomer
  51. dsprad   so : radial blurred logo '#atariscne'
  52. fast     so : fast environment mapped crosses with background
  53. gridspec so : wireframe city
  54. kaleido  so : 3d environment mapped kaleidoscope
  55. showpic  so : shows the intro picture
  56. spiral4  so : texturemapped spirals (helix) and alpha blended sprites
  57.  
  58. - screen code layout -------------------------------------------------------
  59.  
  60. a screen contains a jump table of custom events. the demo system has a list
  61. to the jump table of every screen. when running standalone, the table 
  62. address is put into a pointer, for instance:
  63.  
  64.     move.l    #Radial.table,fxAdr
  65.  
  66. the test environment then knows where to start.
  67.  
  68. a screen contains 4 compulsory first routines:
  69.  
  70.     DC.L    mainLoop
  71.     DC.L    init
  72.     DC.L    initRT
  73.     DC.L    deinitRT
  74.  
  75. all routines are terminated by an rts. 'mainLoop' should be self 
  76. explanatory. 'init' is the routine that is called prior to running the demo,
  77. i.e. the precalc stuff. 'initRT' is the routine that is called prior to
  78. running the screen itself, this needs to be a little zappy unless you want
  79. to pause with some still screen or whatever... 'deinitRT' is the routine
  80. that frees up all memory reserved by 'initRT'.
  81.  
  82. a failure of init, initRT, deinitRT, i.e. returning a negative number in
  83. d0, will cause the demo system to exit.
  84.  
  85. after these four the custom event routines start. the list is terminated by 
  86. a zero (dc.l 0).
  87.  
  88. as mentioned above, both in the demo system as well as in the standalone
  89. screens, the numerical keypad may be used to access these custom events.
  90.  
  91. event | key
  92. ------+-------
  93.  0    | (
  94.  1    | )
  95.  2    | /
  96.  3    | *
  97.  4    | 7
  98.  5    | 8
  99.  6    | 9
  100.  7    | -
  101.  8    | 4
  102.  9    | 5
  103.  A    | 6 
  104.  B    | +
  105.  C    | 1 
  106.  D    | 2 
  107.  E    | 3
  108.  F    | 0
  109. 10    | .
  110. 11    | enter
  111.  
  112. note: although only 18 events can be addressed by the keys, there may be up
  113. to 128 for use by the demo system. a key matching an unimplemented event is
  114. omitted.
  115.  
  116. - demo system --------------------------------------------------------------
  117.  
  118. the demo system consists basicly of only a few parts:
  119.  
  120. - the libraries
  121. - initialisation of the libraries
  122. - initialisation of the screens, their init routs are called
  123. - the event sequencer
  124.  
  125. the useful parts amongst the library are the memory manager which is really
  126. unmissable if you want to squeeze a demo in 4MB without a harddisk going
  127. off every 5 seconds and delaying the flow.
  128.  
  129. the demo system initializes all screens. each screen says they want a block
  130. of a certain size to the memory manager (Mem.register). after initialization
  131. the memory manager takes the biggest registered block (aligned on long 
  132. boundary also) (Mem.take). when a screen enters it's realtime initialisation
  133. it may call Mem.getBlock, which returns the block's address.
  134.  
  135. also the video part is very useful if you want to change resolution and 
  136. palette without stripes or other poo on your screen.
  137.  
  138. Screen.requestUpdate
  139.  
  140. this takes palette, resolution routine and screenbase addresses and changes
  141. them in the following vbl. passing a zero for each parameter means no
  142. change.
  143.  
  144. the event sequencer has two modes, controlled by the equate:
  145. 'MANUAL_CONTROL', which says all. Setting it to zero causes the mod file to
  146. control the events, see the section below. otherwise screens can be switched
  147. to by using the main part of the keyboard 0...9, Q..P (different in french
  148. and german, but the order is still there. ;) after you switch to a certain
  149. screen you can also control the screen's event by hammering on the keypad.
  150.  
  151. there's one more special thing: the 'testmode'. this equate can help with
  152. debugging if your screens are coded in a special way. the idea is to put
  153. every screen or palette or whatever critical action between:
  154.  
  155.         IFEQ    testmode
  156. ...
  157.         ENDC
  158.  
  159. this is mostly useful when running a screen standalone. when it crashes, at
  160. least you can see the desktop (or devpac) again.
  161.  
  162. it is useful, but admitantly, a watchdog would be a better solution.
  163.  
  164. - mod file event sequencer -------------------------------------------------
  165.  
  166. earxplao.s feeds itself with standard mod files, saved from protracker or
  167. flextrax. the key is the 'unused' 8xx command. this provides a means of
  168. synchronisation, yes, but instead of just using a $800 every so often to
  169. jump to the next event in your list, this actually allows the musician to
  170. control every event of the demo in what ever order he likes. the most basic
  171. commands are the following:
  172.  
  173. $800        : exit demo
  174. $801 - $87F : switch to screen 1 - 127
  175.  
  176. the switching is performed by means of the 'initRT' and 'deinitRT' routines
  177. in the screens' jumptables. a command to switch to a non-existing screen is
  178. ommited. 
  179.  
  180. to fire some events:
  181.  
  182. $880 - $8FF : fire the current screen's event 1 - 128
  183.  
  184. events are handled from left to right, that means channel 1 is handled
  185. first, proceeding to the higher numbered channels. all events on one 'row'
  186. in a pattern are handled in between a animation frame of the screen, i.e. 
  187. one call to a screen's 'mainloop'.
  188.  
  189. ============================================================= lineout 2004 =