home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / HACK5A.SFX / hack5-1 next >
Encoding:
Text File  |  1990-02-12  |  36.1 KB  |  801 lines

  1.  
  2.                    @@@@@@@@
  3.              @@@@@@@@@@@@@@@@@@
  4.          @@@@@@            @@@@@@
  5.       @@@@@
  6.     @@@@@  @@@@  @@@@      @@      @@@@@   @@@@  @@@@  @@@@  @@@@  @@@@   @@@@@
  7.   @@@@@    @@    @@      @@@@    @@   @@   @@  @@@     @@    @@@@  @@   @@   @@
  8.  @@@@@    @@@@@@@@     @@  @@   @@        @@@@@       @@    @@ @@ @@   @@
  9. @@@@@    @@    @@    @@@@@@@@  @@   @@   @@  @@@     @@    @@  @@@@   @@   @@
  10. @@@@@  @@@@  @@@@  @@@@  @@@@  @@@@@   @@@@  @@@@  @@@@  @@@@  @@@@   @@@@@@
  11. @@@@@                                                                     @@
  12.  @@@@@@            @@@@@@             ╔SSUE #5
  13.    @@@@@@@@@@@@@@@@@@              ═ARCH 7, 1993
  14.        @@@@@@@@
  15.  
  16. -----------------------------------------------------------------------------
  17. ┼DITOR'S ╬OTES:
  18. BY ├RAIG ╘AYLOR
  19.  
  20.   ╔T SEEMS THAT EACH ISSUE OF ├= ╚ACKING HAS ALWAYS BEGAN WITH A "╙ORRY, ╔T'S
  21.   LATE BUT HERE IT IS MESSAGE." - ╫ELL, THIS ONE WILL START OUT AGAIN LIKE 
  22.   THAT - ╘HIS ISSUE WAS ORIGINALLY SCHEDULED TO BE OUT THE MIDDLE OF ╩ANUARY
  23.   BUT DUE TO SEVERAL DELAYS IN OBTAINING ARTICLES AND MY DELAYING TRYING TO
  24.   DEBUG THE MULTI-TASKING SOURCE CODE IT'S BEEN HELD UP UNTIL NOW. 
  25.   
  26.   ═Y APOLOGIES TO THE AUTHORS WHO HAVE HAD THEIR ARTICLES INTO ME ON TIME -
  27.   SCHOOL IS COMING FIRST FOR ME AND HAVING TO DO A LOT OF CODING FOR SEVERAL
  28.   CLASSES WAS THE MAJOR CONTRIBUTING FACTOR TO THE DELAYS. 
  29.  
  30.   ╬OW, AFTER THE APOLOGIES ARE OUT OF THE WAY - ╠ET'S TAKE A LOOK AT WHAT HAS
  31.   HAPPENED SINCE LAST TIME ╔ WROTE.
  32.  
  33.   - ╥╒╬ MAGAZINE IS NO LONGER WITH US.
  34.  
  35.   ┴S ONE OF THE LAST HOLD-OUTS ╔ WAS EXPECTING ╥╒╬ MAGAZINE TO KEEP ON PRINTING
  36.   UNTIL THE ├OMMODORE 64/128'S REALLY DID DIE OUT BUT APPARENTLY THE PUBLISHERS
  37.   DECIDED IT WOULDN'T BE SO. ╘HIS LEAVES THE ╘WIN ├ITIES MAGAZINE AS THE ONLY
  38.   ╒╙ MAGAZINE IN PUBLICATION FOR THE ├OMMODORE (6502 BASED) COMPUTERS THAT ╔ AM
  39.   AWARE OF. ╙PEAKING OF ╘WIN ├ITIES (NOT SURE IF HE'S COMBINING THE 64/128 OR
  40.   JUST COMING OUT WITH SEPERATE ╘WIN ├ITIES MAGAZINES) DOES ANYBODY KNOW OR
  41.   HAVE ANY INFORMATION ON WHEN THE NEXT ISSUE WILL BE OUT? ╧R HAS MY 
  42.   LASTEST ISSUE JUST NOT BEEN SENT OUT?
  43.  
  44.   ┴S ╔ WAS WRITING THIS ╔ GOT THE LATEST ISSUE OF ╘WIN ├ITIES WHICH HAS
  45.   EXPANDED TO ├=64 COVERAGE ALSO. ╘HE NEW ISSUE LOOKS VERY NICE, ABOUT 53
  46.   PAGES OF SO OF GOOD DECENT MATERIAL. ╔'D RECOMMEND GET A SUBSCRIPTION FOR
  47.   THOSE OF YOU WHO ARE LOOKING TO STILL HEAR ABOUT NEW ├OMMODORE PRODUCTS.
  48.  
  49.   ╔'D LIKE TO GET PEOPLE'S REACTIONS ON THE DEMISE OF ╥╒╬ AND WHAT WILL
  50.   PEOPLE WILL THINK WILL PROBABLY BE THE MAIN SOURCE OF INFORMATION FOR ├=
  51.   OWNERS.  ┴ LOT OF PEOPLE READING THIS MAGAZINE ARE ON THE COMP.SYS.CBM
  52.   NEWSGROUP BUT ╔'M WONDERING ABOUT INDIVIDUALS WHO DO NOT HAVE ACCESS TO
  53.   SUCH A NEWSGROUP AND DO NOT HAVE ACCESS TO THE INTERNET. ╠ET ME KNOW WHAT
  54.   YOU THINK - HOPEFULLY THROUGH A FRIEND W/ ACCESS TO THE INTERNET. ╙ORT OF
  55.   A CATCH-22 ╔ GUESS.
  56.  
  57.   - ┴ ═AIL-╙ERVER HAS BEEN SETUP TO AUTOMATE SENDING ISSUE REQUESTS.
  58.  
  59.   ╘HE FULL DETAILS OF HOW TO USE THE ═AIL-╙ERVER IS IN A DOCUMENTATION FILE
  60.   CONTAINED WITHIN BUT THIS MAIL-SERVER (WHOSE SOURCE CODE IS AVAILABLE FOR
  61.   ANYONE WHO WISHES TO SEE IT WRITTEN IN ╓┴╪ ─├╠ CODE) ALSO ALLOWS FILE
  62.   REQUESTS WHICH WILL BE UUENCODED AND SENT TO YOU. ╔ AM TRYING TO HAVE ALL OF
  63.   THE PROGRAMS IN EACH ISSUE AVAILABLE VIA REQUEST AS FOR SOME PEOPLE IT IS
  64.   A MINOR PAIN TRYING TO EXTRACT AND COMPILE THE PROGRAMS CONTAINED WITHIN.
  65.  
  66.   - ╔ SAW A NOTE RECENTLY THAT THE SPEED-UP BOARD WORK WAS STILL BEING DONE.
  67.  
  68.   ─OES ANYBODY KNOW ANYTHING FURTHER ABOUT THIS? ╔'M INTERESTED IN THIS AND
  69.   HOW IT WOULD BE CARRIED OUT / DONE BUT ASIDE FROM AN OCCASIONAL POST HERE
  70.   AND THERE ABOUT IT ╔ ACTUALLY HEAR VERY LITTLE. 
  71.  
  72.   - ╘HERE IS ALSO WORK ON AN ┴NSI ├ COMPILER BEING DONE.
  73.  
  74.   ╥ECENTLY A GROUP OF PEOPLE (ABOUT 9 CURRENTLY) ARE WORKING ON A ├ COMPILER
  75.   FOR THE ├=64 AND ├=128 WHICH WILL EVENTUALLY SUPPORT THE FULL ┴╬╙╔ ├
  76.   LIBRARY. ┴ LARGE LIST OF EXTENSIONS HAVE BEEN PROPOSED AND THE COMPILER
  77.   WILL PROBABLY BE RELEASED AS EITHER SHAREWARE OR POSSIBLY, PUBLIC DOMAIN.
  78.  
  79.   ┴CK! - ╘HIS MAGAZINE KEEPS GROWING. ╘HE LAST ISSUE WAS APPROX.
  80.   SOMEWHERE AROUND 3000 LINES, THIS ONE IS JUST A TAD OVER 6000. ╔'M
  81.   SURE THAT WE'RE NOT SUFFERING THE QUALITY JUST BECAUSE OF THE
  82.   QUANTITY. :-) ┬E SURE TO TAKE A LOOK AT THE PREVIOUS BACK ISSUES
  83.   AVAILABLE VIA THE ═AIL-╙ERVER AND DON'T BE AFRAID TO SUGGEST COMMENTS
  84.   OR SUGGESTIONS. ╫HILE USUALLY THE AUTHORS ARE TOO BUSY TO TAKE IDEAS
  85.   FOR NEW PROGRAMS WE ALWAYS WELCOME TO HEAR HOW USEFUL YOU FIND CERTAIN
  86.   PROGRAMS INCLUDED HEREIN ETC.
  87.  
  88.   ┴LSO ╔ AM LOOKING FOR ARTICLES ON ANY TYPE OF SOFTWARE PROJECT, HARDWARE
  89.   PROJECT OR GENERAL THEORY ARTICLES THAT YOU WOULD LIKE TO SUBMIT. ╩UST
  90.   LEAVE ME A MESSAGE VIA EMAIL AT "DUCK@PEMBVAX1.PEMBROKE.EDU". ╬OTE ALSO
  91.   THAT ╔'VE JUST SIGNED UP FOR A ╟┼╬╔┼ ACCOUNT AND CAN BE REACHED THERE VIA
  92.   ├.╘┴┘╠╧╥37 ONCE MY ACCOUNT IS APPROVED.
  93.  
  94. =============================================================================
  95.  
  96.   ╨LEASE NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS
  97.   ╞╘╨ FROM CCOSUN.CALTECH.EDU UNDER PUB/RKNOP/HACKING.MAG IN ADDITION TO THE
  98.   MAILSERVER WHICH IS DOCUMENTED IN THIS ISSUE.
  99.  
  100. =============================================================================
  101.   
  102.   ╬╧╘╔├┼: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN 
  103.   WHOLE, FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL
  104.   AUTHORS FOR PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
  105.   ┴ CHARGE OF NO GREATER THAN 5 ╒╙. ─OLLARS OR EQUIVLENT MAY BE CHARGED FOR
  106.   LIBRARY SERVICE / DISKETTE COSTS FOR THIS "NET-MAGAZINE." 
  107.  
  108. =============================================================================
  109. ╔N THIS ╔SSUE:
  110.  
  111. ═AIL-╙ERVER ─OCUMENTATION
  112.  
  113. ╘HIS ARTICLES DESCRIBES HOW TO ACCESS THE MAIL-SERVER FOR ├OMMODORE ╚ACKING
  114. AND INCLUDES A LIST OF CURRENTLY AVAILABLE FILES AND BACK-ISSUES.
  115.  
  116. ╙TRETCHING ╙PRITES
  117.  
  118. ╔T'S POSSIBLE TO EXPAND SPRITES TO MORE THAN TWICE THEIR ORIGINAL SIZE, BUT 
  119. THERE IS NO NEED TO EXPAND ALL OF THEM EQUALLY. ╘HIS ARTICLE EXAMINS HOW TO
  120. EXPAND THEM 2,3, OR MORE MULTIPLES OF THEIR ORIGINAL SIZE.
  121.  
  122. ╥OB ╚UBBARD'S ═USIC: ─ISASSEMBLED, ├OMMENTED AND ┼XPLAINED
  123.  
  124. ╘HIS ARTICLE WRITTEN BY ┴NTHONY ═C╙WEENEY, PRESENTS THE VALUABLE SOURCE TO
  125. ╥OB ╚UBBARD'S FIRST MUSIC ROUTINE. ╘HIS ROUTINE WAS USED IN ╥OB'S FIRST 20
  126. OR 30 MUSICS, INCLUDING SUCH CLASSICS AS ╘HING ON A ╙PRING (╟REMLIN ╟RAPHICS),
  127. ├OMMANDO (┼LITE), ╘HRUST (╞IREBIRD), ╔NTERNATIONAL ╦ARATE (╙YSTEM 3), AND
  128. ╨ROTEUS (ALSO KNOWN AS ╫ARHAWK, BY ╞IREBIRD). 
  129.  
  130. ┌╨═3 AND ┌├├╨ ┼NHANCEMENTS FOR ├╨/═ ╨LUS FROM ╙IMEON ├RAN
  131.  
  132. ┴LTHOUGH ALL THE ARTICLES TO DATE IN ├= ╚ACKING HAVE FOCUSED ON 6510/ 8502
  133. PROGRAMMING, THERE HAVE BEEN SOME INTERESTING DEVELOPMENTS ON THE ┌80 FRONT.
  134. ├128 ├╨/═ USERS SHOULD BE AWARE OF THE BENEFITS OF A NEW SET OF ENHANCEMENTS
  135. TO THE OPERATING SYSTEM THAT OFFERS INREASED SPEED AND FLEXIBILITY AS WELL
  136. AS NEW FEATURES. ╔F THAT ISN'T ENOUGH, THIS PACKAGE WILL ALSO RUN ┌├╨╥ 3.3
  137. UTILITIES AND APPLICATIONS THAT WON'T RUN UNDER STANDARD ├╨/═ ╨LUS.
  138.  
  139. ═ULTI-╘ASKING ON THE ├=128 - ╨ART 1
  140.  
  141. ╘HIS ARTICLE EXAMINES THE RUDIMENTS OF ═ULTI-╘ASKING AND ALSO DETAILS THE
  142. SYSTEM CALLS IN THE ═ULTI-╘ASKING PACKAGE TO BE RELEASED IN THE NEXT ISSUE
  143. OF ├= ╚ACKING.
  144.  
  145. ╠╔╘╘╠┼ ╥┼─ ╫╥╔╘┼╥: ═╙-─╧╙ FILE READER/WRITER FOR THE ├128 AND 1571/81.
  146.  
  147. ╘HIS ARTICLE IS AN EXTENSION ON ╠ITTLE ╥ED ╥EADER WHICH WAS PRESENTED IN THE
  148. LAST ISSUE AND ALLOWS FOR READING AND WRITING OF ═╙-─OS DISKETTES FROM AND TO
  149. 1571/81 DRIVES. 
  150.  
  151. =============================================================================
  152. ═AIL-╙ERVER ─OCUMENTATION
  153. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  154.  
  155. ╫HAT IS A MAIL-SERVER?
  156.  
  157.    ┴ MAILSERVER IS AN AUTOMATED JOB THAT WILL SCAN MY MAIL FILE FOR MESSAGES
  158.    WITH A SUBJECT LINE OF "═┴╔╠╙┼╥╓" AND WILL THEN AUTOMATICALLY CARRY OUT
  159.    CERTAIN OPERATIONS WITHIN THE BODY OF THE MAIL MESSAGE. ╘HIS MAKES IT EASIER
  160.    ON ME AND YOU. ┼ASIER FOR ME SO THAT ╔ DON'T HAVE TO DEAL WITH 50+ MESSAGES
  161.    EACH MONTH ASKING FOR FILES TO BE SENT OUT AND ALSO INSURES THAT YOUR FILES
  162.    THAT YOU REQUESTED WILL BE SENT WITHIN 24 HOURS. ╔N ADDITION IT ALLOWS 
  163.    FILES TO BE MORE EASILY SENT AND ACCESSED IN CASE YOU ARE NOT ABLE TO 
  164.    EXTRACT THE SOURCE FILES FROM ├= ╚ACKING. 
  165.  
  166.    ╔F YOU HAVE ╞╘╨ ACCESS PLEASE SEE THE ┼DITOR'S ╬OTES AT THE START FOR
  167.    INFORMATION ON ╥. ╦NOP'S ╞╘╨ SITE AND HOW TO ACCESS IT AS YOU MAY FIND
  168.    USING THAT SOMEWHAT QUICKER TO USE.
  169.  
  170. ╚OW TO USE THE MAIL-SERVER / ╫HAT IT IS.
  171.  
  172.    ╘HIS MAIL-SERVER IS INTENDED TO HELP ME KEEP TRACK / MORE EASILY UPDATE MY
  173.    MAILING LIST OF INDIVIDUALS WHO WISH TO SUB-SCRIBE OR GET BACK-ISSUES OF
  174.    ├= ╚ACKING MAILED TO THEM. 
  175.  
  176.    ╘O USE IT SIMPLY SEND A MESSAGE TO "DUCK@PEMBVAX1.PEMBROKE.EDU" (ME) WITH A
  177.    SUBJECT LINE OF "═┴╔╠╙┼╥╓" AND THEN WITH ONE OF THE FOLLOWING COMMANDS IN THE
  178.    BODY OF THE MAIL MESSAGE:
  179.  
  180. ├URRENTLY THE FOLLOWING COMMANDS ARE SUPPORTED:
  181.  
  182.   HELP              - SENDS CURRENT DOCUMENTATION F FILE LIST
  183.   SEND ISS<NUMBER>. - SENDS ISSUE # (1-4 CURRENTLY). ╥EMEMBER THE PERIOD!!
  184.   SUBSCRIBE         - SUBSCRIBE TO THE MAILING LIST AUTOMATICALLY
  185.  *SUBSCRIBE CATALOG - SUBSCRIBES TO A LIST THAT WILL BE SENT OUT 
  186.                       EVERYTIME THE CATALOG CHANGES.
  187.   CATALOG           - SHOW LIST OF AVAILABLE SOURCE /UUENCODED BINARIES
  188.   PSEND NAME        - SEND UUENCODED BINARY.
  189.  
  190. ├OMMANDS NO LONGER SUPPORTED:
  191.  
  192.   STATUS            - RETURNS THE CURRENT COMMANDS (THIS LIST)
  193.                       (USE THE HELP FILE)
  194.  
  195. ╨LEASE NOTE THAT THE MAILSERVER IS ONLY RUN AT 2:00 ┴═ ┼╙╘.
  196.  
  197. ├ATALOG ╠IST - ╠AST UPDATE ╞EBRUARY 27, 1993.
  198.  
  199.   ISS1.                 - ├= ╚ACKING, ╔SSUE #1
  200.   ISS2.                 - ├= ╚ACKING, ╔SSUE #2
  201.   ISS3.                 - ├= ╚ACKING, ╔SSUE #3
  202.   ISS4.                 - ├= ╚ACKING, ╔SSUE #4
  203.   ISS5.                 - ├= ╚ACKING, ╔SSUE #5
  204.   CONTENTS.LIS          - ├ONTENT ╠ISTING OF ╔SSUES #1-4
  205.   MAILSERV.012493       - ╓┴╪/─├╠ ═AILSERVER .SHARE FILE
  206.  
  207.  *INVASION1.SFX         - ╙PACE ╔NVASION ╙OURCE (╙TARTING WITH ╔SSUE 4)
  208.  *BMOVER.SFX            - ╟EOS 128 ┬ANKING WITH ┬ANKS 2F3 (╔SSUE #2)
  209.  *VDC-BG.SFX            - ╒SE OF 64╦ ╓─├ ╥┴═ IN ╟EOS (╔SSUE #3)
  210.  *C64.ZIP               - ├64 ┼MULATOR FOR ╔┬═
  211.  *LRR.SFX               - ╠ITTLE ╥ED ╥EADER (FROM ├= ╚ACKING #4)
  212.  
  213.   -- ╘EMPORARY ╞ILES -> ╧R FILES THAT WILL BE DELETED AS NEEDED FOR SPACE
  214.  
  215.  *ZEDV075.SFX           - ┌ED-128 ╘EXT ┼DITOR 
  216.  *RAMDOSII.SFX          - ╥┼╒ ─OS FOR THE ├=128 ┴LLOWS > 512K ╥┼╒.
  217.  
  218.   ╬╧╘┼: ╞ILES MARKED WITH "*" SHOULD BE REQUESTED VIA ╨╙┼╬─ - THEY WILL BE
  219.         SENT TO YOU IN UUENCODED FORM. ╘HEY MAY _NOT_ BE REQUESTED VIA ╙┼╬─.
  220.  
  221. =============================================================================
  222. ╘HE ─EMO ├ORNER: ╙TRETCHING ╙PRITES
  223. BY ╨ASI '┴LBERT' ╧JALA (PO87553@CS.TUT.FI)
  224.         ╫RITTEN: 16-═AY-91  ╘RANSLATION/╥EVISION 01-╩UN-92, ─EC-92
  225.  
  226. (┴LL TIMINGS ARE IN ╨┴╠, PRINCIPLES WILL APPLY TO ╬╘╙├ TOO)
  227.  
  228. ┘OU MIGHT HAVE HEARD THAT IT IS POSSIBLE TO EXPAND SPRITES TO MORE THAN
  229. TWICE THEIR ORIGINAL SIZE. ╔MAGINE A SPRITE SCROLLER WITH 6-TIMES EXPANDED
  230. SPRITES. ╚OWEVER, THERE IS NO NEED TO EXPAND ALL OF THEM EQUALLY. ╒SING
  231. THIS TECHNIQUE, IT IS POSSIBLE TO MAKE EASY SINUS EFFECTS AND CONSTANTLY
  232. EXPANDING AND SHRINKING LETTERS.
  233.  
  234. ╘HE ╓╔├ (VIDEO INTERFACE CONTROLLER) MAY BE FOOLED IN MANY THINGS. ╧NE OF
  235. THEM IS THE VERTICAL EXPANSION OF SPRITES. ╔F YOU CLEAR THE EXPAND FLAG AND
  236. THEN SET IT BACK STRAIGHT AWAY, ╓╔├ WILL THINK IT HAS ONLY DISPLAYED THE
  237. FIRST ONE OF THE EXPANDED LINES. ╔F WE DO THE TRICK AGAIN, ╓╔├ WILL CONTINUE
  238. TO DISPLAY THE SAME DATA AGAIN AND AGAIN. ┬UT WHY DOES ╓╔├ BEHAVE LIKE THIS ?
  239.  
  240.  
  241. _╠OGIC GATES WILL TELL THE TRUTH_
  242.  
  243. ╔T IS NOT REALLY A BUG, BUT A FEATURE. ╘HE HARDWARE DESIGN TO IMPLEMENT THE
  244. VERTICAL ENLARGEMENT WAS JUST AS SIMPLE AS POSSIBLE. ╘HOSE, WHO DO NOT CARE
  245. ABOUT HARDWARE SHOULD SKIP THIS PART... ╘HE WHOLE Y-ENLARGEMENT IS HANDLED
  246. WITH FIVE SIMPLE LOGICAL PORTS. ┼ACH SPRITE HAS AN ASSOCIATED ╙ET-╥ESET
  247. FLIP-FLOP TO TELL WHETHER TO JUMP TO THE NEXT SPRITE LINE (ADD THREE BYTES
  248. TO THE DATA COUNTER) OR NOT.
  249.  
  250. ╠ET'S CALL THE STATE OF THE FLIP-FLOP ╤ AND THE INPUTS ╥ (RESET) AND ╙ (SET).
  251. ╘HE FUNCTION OF A ╙╥ FLIP-FLOP IS QUITE SIMPLE: IF ╥ IS ONE, ╤ GOES TO ZERO,
  252. IF ╙ IS ONE, ╤ GOES TO ONE. ╧THERWISE THE STATE OF THE FLIP-FLOP DOES NOT
  253. CHANGE. ╔N THIS CASE THE FLIP-FLOP IS ╙ET, IF EITHER THE ┘-ENLARGEMENT BIT
  254. IS ZERO OR THE STATE OF THE FLIP-FLOP IS ZERO AT THE END OF A SCAN LINE. ╘HE
  255. FLIP-FLOP IS RESET, IF BOTH THE STATE AND THE ┘-ENLARGEMENT ARE ONES AT THE
  256. END OF THE LINE.
  257.  
  258. ╫HEN YOU CLEAR THE BIT IN THE VERTICAL EXPANSION REGISTER, THE FLIP-FLOP WILL
  259. BE SET REGARDLESS OF THE ELECTRON BEAM POSITION ON THE SCAN LINE. ╔F YOU
  260. SET THE BIT AGAIN BEFORE THE END OF THE LINE, THE FLIP-FLOP WILL BE CLEARED
  261. AND ╓╔├ WILL BE DISPLAYING THE SAME SPRITE LINE AGAIN. ╔N OTHER WORDS, ╓╔├
  262. WILL THINK THAT IT IS STARTING TO DISPLAY THE SECOND LINE OF THE EXPANDED
  263. SPRITE ROW. ╘HIS WAY ANY OF THE LINES IN ANY OF THE SPRITES MAY BE STRETCHED
  264. AS WANTED.
  265.  
  266.  .---- ├URRENT FLIPFLOP STATE (IF ONE, ENABLES ADD TO SPRITE POINTER)
  267.  |  .---- ┘-EXPANSION BIT.
  268.  |  |  .--- ┼ND OF LINE PULSE (BRIEFLY ONE AT END OF LINE)
  269.  |  |  |  .--- ╬EXT STATE (╫HAT STATE WILL BECOME UNDER THESE CONDITIONS)
  270.  |  |  |  |
  271.  0  0  0  1
  272.  0  0  1  1
  273.  0  1  0  NO CHANGE
  274.  0  1  1  1
  275.  1  0  0  1             ├LEAR $─017 -> FLIP-FLOP IS SET
  276.  1  0  1  1
  277.  1  1  0  NO CHANGE     ╙ET $─017   -> FLIP-FLOP RESETS AT THE END OF LINE
  278.  1  1  1  0
  279.  
  280. ╙O, SIMPLY, AT ANY TIME, IF VERTICAL EXPAND IS ZERO, THE ADD ENABLE IS SET
  281. TO ONE. ┴T THE END OF THE LINE - BEFORE ADDING - THE STATE IS CLEARED IF
  282. VERTICAL EXPAND IS ONE.
  283.  
  284.  
  285. _┼VEN ODDER ?_
  286.  
  287. ╙OMETHING VERY WEIRD HAPPENS WHEN WE CLEAR THE EXPANSION BIT RIGHT WHEN ╓╔├
  288. IS ADDING THREE TO THE SPRITE IMAGE COUNTERS. ╘HE VALUES IN THE COUNTERS WILL
  289. BE INCREASED ONLY BY TWO, AND THE DATA IS THEN READ FROM THE WRONG PLACE.
  290.  
  291. ╬ORMALLY THE DISPLAY OF A SPRITE ENDS WHEN ╓╔├ HAS SHOWN ALL OF THE 21
  292. LINES OF THE SPRITE (THE COUNTER WILL END UP TO $3F). ╔F THERE HAS BEEN A
  293. COUNTER MIXUP, $3F IS NOT REACHED AFTER 21 LINES AND ╓╔├ WILL GO ON COUNTING
  294. AND WILL DISPLAY THE SPRITE AGAIN, NOW NORMALLY. ╔F WE FOOL THE COUNTER ONLY
  295. ONCE, THE COUNTER VALUE $3F IS REACHED WHEN THE SPRITE IS DISPLAYED TWICE.
  296.  
  297.  
  298. _╞IDDLING_
  299.  
  300. ╔ DON'T THINK THE DISTORTED COUNTER EFFECT CAN BE USED FOR ANYTHING, BUT
  301. THERE IS MANY THINGS WHERE THE VARIABLE STRETCHING COULD BE USED. ╫HEN YOU
  302. OPEN THE BORDERS, YOU CAN BE SURE THAT THERE IS A CONSTANT AMOUNT OF TIME,
  303. IF YOU STRETCH THE SPRITES TO THE WHOLE LENGHT OF THE AREA. ┘OU MAY STRETCH
  304. ONLY THE FIRST AND LAST LINES, STRETCH THE OTHER LINES BY A CONSTANT OR
  305. USING A TABLE, OR USING A VARIABLE TABLE OR ANY OF THE COMBINATIONS POSSIBLE.
  306.  
  307.  
  308. _┴ RASTER ROUTINE IS A MUST_
  309.  
  310. ┬ECAUSE YOU HAVE TO ACCESS THE ╓╔├ REGISTERS ON EACH LINE DURING THE STRETCH,
  311. YOU NEED SOME KIND OF ROUTINE WHICH CAN DO OTHER KINDS OF TRICKS BESIDES THE
  312. STRETCH. ┘OU CAN OPEN THE SIDE BORDERS AND CHANGE THE BACKGROUND COLOR AND
  313. MAYBE YOU HAVE TO SHIFT THE SCREEN (AND THE BAD LINES WITH IT) DOWNWARDS.
  314. [╙EE PREVIOUS ├=╚ACKING ╔SSUES FOR TALK ABOUT RASTER INTERRUPTS.]
  315.  
  316. ╠OOK AT THE DEMO PROGRAM. ╔N THE BEGINNING OF THE RASTER ROUTINE THERE IS
  317. FIRST SOME TIMING, THEN A LOOP THAT LASTS EXACTLY 46 CLOCK CYCLES. ╔T TAKES
  318. EXACTLY ONE SCAN LINE TO EXECUTE. ╔NSIDE THE LOOP WE FIRST DO THE NECASSARY
  319. MODIFICATIONS TO THE VERTICAL SCROLL REGISTER, THEN WE CHANGE THE BACKGROUND
  320. COLOR AND THEN WE OPEN THE SIDE BORDERS. ┴ND FINALLY WE HANDLE THE STRETCHING
  321. USING THE STRETCH DATA, WHERE A ZERO-BIT MEANS THAT THE CORRESPONDING SPRITE
  322. WILL BE STRETCHED. ┴ ONE-BIT MEANS THAT ╓╔├ IS ALLOWED TO GO TO THE NEXT LINE
  323. OF THE SPRITE DATA.
  324.  
  325.  
  326. _╙TRETCHING TAKES TIME_
  327.  
  328. ┬ESIDES SHOWING THE STRETCHED SPRITES WE NEED TIME TO GENERATE THE STRETCHING
  329. DATA, UNLESS OF COURSE, THE STRETCH IS CONSTANT. ╫E HAVE TO HAVE 20
  330. ONE-BITS FOR EACH SPRITE IN OUR TABLE. ╔T IS NOT FEASIBLE TO DETERMINE THE
  331. STATE OF EACH BYTE IN THE TABLE, INSTEAD YOU CLEAR THE TABLE AND PLOT THE
  332. NEEDED BITS.
  333.  
  334. ╘HE ROUTINE IS QUITE STRAIGHTFORWARD, BUT MANY OPTIMIZATIONS MAY BE APPLIED
  335. TO MAKE IT FASTER. ╞IRST WE LOAD ┘ WITH THE STRETCH OF THE FIRST LINE (THE
  336. Y-COORDINATE OF THE DATA). ╘HEN WE USE IT AS AN INDEX TO THE TABLE AND PLOT
  337. THE RIGHT BIT AND INCREASE ┘ WITH THE EXPANSION VALUE. ╘HEN WE DO IT AGAIN
  338. UNTIL WE HAVE ALL OF THE 20 BITS SCATTERED TO THE TABLE. ╘HE LAST SPRITE LINE
  339. WILL THEN STRETCH UNTIL WE STOP THE STRETCHING, BECAUSE THE LAST LINE IS
  340. NOT ALLOWED TO BE DRAWN.
  341.  
  342.  
  343. _╙PEED IS EVERYTHING_
  344.  
  345. ╘HE CALCULATION ITSELF IS EASY, BUT OPTIMIZING THE ROUTINE IS NOT. ╔F ALL
  346. OF THE SPRITES ARE STRETCHED EQUALLY (BY INTEGER AMOUNTS) AND FROM THE SAME
  347. POSITION, THE ROUTINE IS THE FASTEST POSSIBLE.  ┘OU CAN ALSO HAVE VARIABLE
  348. AND SMOOTH STRETCH.  ╙MOOTH STRETCH USES OTHER THAN INTEGER EXPANSION VALUES
  349. AND THUS ALSO NEEDS MORE PROCESSOR TIME.  ╔F EACH SPRITE HAS TO BE STRETCHED
  350. INDIVIDUALLY, YOU NEED MUCH MORE TIME TO DO IT.
  351.  
  352. ╘HE FASTEST ROUTINE ╔ HAVE EVER WRITTEN USES SOME SERIOUS SELFMODIFICATION
  353. TRICKS. ╘HERE ARE ALSO SOME OTHER TRICKS TO SPEED UP THE STRETCH, BUT THEY
  354. ARE ALL SECRET ONES.. :-)  ╫ELL, WHAT THE H*CK, ╔ WILL INCLUDE IT ANYWAY.
  355. ┬Y THE TIME YOU READ THIS ╔ HAVE ALREADY MADE A FASTER ROUTINE..
  356.  
  357. ┘OU CAN SPEED UP THAT ROUTINE (BY 17%) BY UNROLLING THE INNER LOOP, BUT YOU
  358. HAVE TO USE A DIFFERENT ADDRESSING MODE FOR ╧╥┴ (ZERO-PAGE). ┘OU ALSO NEED
  359. TO PLACE SOME RESTRICTIONS TO THE TABLES USED.. ╔F YOU UNROLL BOTH LOOPS,
  360. YOU CAN GET ~25% FASTER ROUTINE THAN THE ╞ORE!-VERSION.
  361.  
  362.  
  363. _─EMO PROGRAM_
  364.  
  365. ╔ TRIED TO COLLECT ALL OF THE MAIN PRINCIPLES OF STRETCHING AND RASTER
  366. ROUTINES TO THE DEMO PROGRAM. ╔ USE THE TERM "RASTER ROUTINE" WHEN THE
  367. EXECUTION IS TIGHTLY SYNCHRONIZED TO THE ELECTRON BEAM AND TO THE SCREEN
  368. DISPLAY. ╘HE PROGRAM MAY BE UNCLEAR IN PLACES, BUT ╔ WANTED TO KEEP IT AS
  369. SHORT AS POSSIBLE. ╘HE ROUTINE OPENS THE SIDE BORDERS, SCROLLS THE SCREEN
  370. VERTICALLY, CHANGES THE BACKGROUND COLOR AND STRETCHES THE SPRITES.
  371.  
  372. ╘HE STRETCHER ROUTINE ALLOWS DIFFERENT Y-POSITION AND AMOUNT OF EXPANSION
  373. FOR EACH SPRITE. ╘HIS ROUTINE USES 1/8 FRACTIONS TO DO THE COUNTING, AND SO
  374. IT IS MUCH TOO SLOW TO USE IN A REAL DEMO.  ╓╔├ REGISTERS ARE INITIALIZED
  375. FROM A TABLE, INSTEAD OF SETTING THEM SEPARATELY. ╔NTERRUPT POSITION IS ONE
  376. LINE ABOVE THE SPRITES. ╘HE PROGRAM DOES NOT OPEN THE TOP OR BOTTOM BORDERS.
  377. (╔ USUALLY USE A ╬═╔ TO OPEN THE VERTICAL BORDERS, SO THAT ╔ ONLY NEED TO
  378.  USE ONE RASTER-╔╥╤ POSITION.)
  379.  
  380. ╔ TRIED TO MAKE A ╬╘╙├ VERSION, BUT ╔ COULDN'T GET IT TO SYNCHRONIZE.
  381. ╘HERE ARE ALSO LESS CYCLES AVAILABLE SO YOU CAN'T STRETCH ALL OF THE SPRITES
  382. INDIVIDUALLY IN ╬╘╙├ (WITH THIS ROUTINE THAT IS..).
  383.  
  384. --------------------------------------------------------------------------
  385. ╞AST-STRETCH FROM ═EGADEMO92 (PART: ╞ORE!)
  386.  
  387. ╙╔╬╨╧╙          ╙TRETCH SINUS INDEX
  388. ╙╔╬╙╨┼┼─        ╙TRETCH SINUS INDEX SPEED
  389. ┘╙╔╬╨╧╙         ┘-SINUS INDEX
  390. ┘╙╔╬╙╨┼┼─       ┘-SINUS INDEX SPEED
  391. ═┴╙╦            ┬IT MASK FOR PASSESS (USUALLY $01,$02,$04,$08,$10..)
  392.  
  393. ┘╙╔╬╒╙          ┘-SINUS TABLE
  394. ╙╘╥┼╘├╚         ╙PRITE LINE SIZES   (╠╙┬ OF THE ADDRESS MUST BE 0)
  395. ╙╔┌┼╘           ╙PRITE SIZE/2 TABLE (╠╙┬ OF THE ADDRESS MUST BE 0)
  396. ─┴╘┴            ╙TRETCH DATA TABLE (CLEARED BEFORE THIS ROUTINE)
  397.  
  398. [XX] MARKS SELFMODIFICATION. ╞OR EXAMPLE LOOP COUNTER, BIT MASK AND
  399. INDEX TO THE STRETCH AND SIZE DATA TABLES ARE STORED STRAIGHT IN THE
  400. CODE.
  401.  
  402. 0B90    LDA #$06        ; ╬UMBER OF SPRITES-1 (HERE ╔ USED ONLY 7 SPRITES)
  403. 0B92    STA $0B96
  404. 0B95    LDX #$[FF]      ; ╠OAD COUNTER
  405. 0B97    CLC             ; ├LEAR CARRY FOR ADC
  406. 0B98    LDA ╙╔╬╨╧╙,X    ; ╙TRETCH SINUS POSITION
  407. 0B9B    STA $0BD1       ; ╙ET LOW BYTES OF INDICES
  408. 0B9E    STA $0BB8
  409. 0BA1    ADC ╙╔╬╙╨┼┼─,X  ; ┴DD STRETCH SINUS SPEED (CARRY IS NOT SET)
  410. 0BA4    AND #$7F        ; ╘ABLE IS 128 BYTES (TWICE)
  411. 0BA6    STA ╙╔╬╨╧╙,X    ; ╙AVE NEW SINUS POSITION
  412. 0BA9    LDA ┘╙╔╬╨╧╙,X   ; ╟ET THE ┘ SINUS POSITION
  413. 0BAC    ADC ┘╙╔╬╙╨┼┼─,X ; ┴DD ┘ SINUS SPEED
  414. 0BAF    STA ┘╙╔╬╨╧╙,X   ; ╙AVE NEW ┘ SINUS POSITION
  415. 0BB2    TAY             ; ╨OSITION TO INDEX REGISTER
  416. 0BB3    LDA ┘╙╔╬╒╙,Y    ; ╟ET ┘-POSITION FROM TABLE (CAN BE 256 BYTES LONG)
  417. 0BB6    SEC             ; ADC EITHER SETS OR CLEARS CARRY, WE HAVE TO SET IT
  418. 0BB7    SBC ╙╔┌┼╘[1E]   ; ╙UBTRACT SIZE OF THE SPRITE/2 TO GET THE SPRITE
  419. 0BBA    CLC             ;  TO STRETCH FROM THE MIDDLE.
  420. 0BBB    TAY             ; ═AX╙IZE/2 < ┘-SINUS < ┴REA╚EIGHT-═AX╙IZE/2
  421. 0BBC    LDA ═┴╙╦,X      ; ╟ET THE ORA-MASK FOR THIS PASS
  422. 0BBF    STA $0BCB       ; ╙TORE MASK
  423. 0BC2    STA $0BDB
  424. 0BC5    LDX #$13        ; 19 LINES HERE + 1 AFTER
  425. 0BC7    LDA ─┴╘┴,Y      ; ╠OAD & ORA-MASK & STORE
  426. 0BCA    ORA #[$01]
  427. 0BCC    STA ─┴╘┴,Y
  428. 0BCF    TYA
  429. 0BD0    ADC ╙╘╥┼╘├╚[1E],X ; ┴DD THE STRETCH FROM THE TABLE (CARRY IS NOT SET)
  430. 0BD3    TAY
  431. 0BD4    DEX             ; DECREASE COUNTER
  432. 0BD5    BNE $0BC7       ; ─O THE 19 LINES
  433. 0BD7    LDA ─┴╘┴,Y      ; ╠OAD & ORA-MASK & STORE THE 20TH LINE
  434. 0BDA    ORA #[$01]
  435. 0BDC    STA ─┴╘┴,Y
  436. 0BDF    DEC $0B96       ; ╬EXT SPRITE(S)
  437. 0BE2    BPL $0B95
  438. 0BE4    RTS
  439.  
  440. ╘IMINGS:
  441. -------
  442. CLEAR 128 BYTES: 514  + 12 CYCLES       8.16 LINES
  443. 7 PASSES       : 3820 + 12 CYCLES       60.6 LINES = 8.66 LINES/PASS
  444.  
  445. ╘HE UNROLLED CLEAR ROUTINE CONSISTS OF ONE LOAD (LDA #$00) AND 128
  446. STORE INSTRUCTIONS (STA $NNNN). 12 CYCLES ARE COUNTED FOR ╩╙╥/╥╘╙.
  447.  
  448. ╙TRETCHING OF 8 SPRITES WOULD TAKE SLIGHTLY LESS THAN 80 LINES, WHICH IS ONE
  449. FOURTH OF THE TOTAL RASTER TIME. ─ISPLAYING A 128-LINE HIGH STRETCHER TAKES
  450. ABOUT 130 LINES (COUNTING SPRITE SETUP AND SYNCHRONIZATION), SCROLLER COUPLE
  451. OF LINES MORE. ╘OTAL 212 LINES LEAVES 100 LINES (6300 CYCLES) FREE FOR OTHER
  452. ACTIVITIES IN A ╨┴╠ SYSTEM. ╔N A ╬╘╙├ SYSTEM YOU WOULD HAVE ONLY 50 LINES
  453. LEFT.
  454.  
  455.  
  456. ┴ SIMPLE BASIC ROUTINE TO CREATE THE STRETCH DATA:
  457. -------------------------------------------------
  458. A=0:FOR F=0 TO 127:A=A+╚EIGHT*(2+SIN(F*╨╔/64)):POKE ╘ABLE+F,A:
  459. POKE ╘ABLE+F+128,A:A=A-INT(A):NEXT F
  460.  
  461. ╘HIS WILL ALSO HANDLE THE 'ROUNDING'. ┬ECAUSE OF THIS WE DON'T HAVE TO
  462. HANDLE FRACTIONS IN THE STRETCHER ROUTINE. ╘HE USE OF A TABLE ALSO GIVES THE
  463. OPPORTUNITY TO HAVE A SEPARATE SIZE FOR EACH SPRITE LINE. ╘HE TABLE DOES
  464. NOT NEED TO BE A SINUS, IT COULD HAVE TRIANGLE OR ANY OTHER 'WAVEFORM' AS
  465. LONG AS THE MINIMUM VALUE IN THE TABLE (SPRITE LINE SIZE) IS 1.
  466.  
  467.  
  468. ┴ BASIC ROUTINE TO DO THE SIZE/2 TABLE:
  469. --------------------------------------
  470. A=0:FOR F=0 TO 19:A=A+PEEK(╘ABLE+F):NEXT F: REM GET THE SIZE IN POSITION 0
  471. FOR F=0 TO 127:POKE ╙╘ABLE+F,A/2:A=A-PEEK(╘ABLE+F)+PEEK(╘ABLE+F+20):NEXT F
  472.  
  473. --------------------------------------------------------------------------
  474. _╙TRETCHER PROGRAM_
  475.  
  476. ┘╙├╥╧╠╠= $├╞00 ; ╓ERTICAL SCROLL TABLE (MOVES BAD LINES)
  477. ╙╘╥┼╘├╚= $├╞80 ; ╙TRETCH TABLE
  478. ├╧╠╧╥╙=  $├┼80 ; ╘ABLE FOR BACKGROUND COLORS
  479. ┘├╧╧╥─=  $0380 ; ╙PRITE Y-POSITIONS (EIGHT BYTES)
  480. ╚┼╔╟╚╘=  $0388 ; ╙PRITE STRETCHES   (EIGHT BYTES)
  481. ┘╨╧╙=    52    ; ╙PRITE Y-COORDINATE
  482. ╙╨╥├╧╠=  2     ; ╙PRITE COLORS
  483.  
  484.  
  485. *= $├000
  486.  
  487.         ╙┼╔             ; ─ISABLE INTERRUPTS
  488.         ╠─┴ #$7╞
  489.         ╙╘┴ $─├0─       ; ─ISABLE TIMER INTERRUPTS
  490.         ╠─┴ #<╔╥╤       ; ╧UR OWN INTERRUPT HANDLER
  491.         ╙╘┴ $0314
  492.         ╠─┴ #>╔╥╤
  493.         ╙╘┴ $0315
  494.         ╠─╪ #$3┼        ; ╫E CREATE A SPRITE TO CASSETTE BUFFER
  495. ╠╧╧╨    ╠─┴ ╙╨╥╔╘┼,╪
  496.         ╙╘┴ $0340,╪
  497.         ─┼╪
  498.         ┬╨╠ ╠╧╧╨
  499.         ╠─╪ #7
  500. ╠╧╧╨2   ╠─┴ #$─         ; ╙ET THE SPRITE IMAGE POINTERS
  501.         ╙╘┴ $07╞8,╪
  502.         ╠─┴ #╙╨╥├╧╠     ; ╙ET SPRITE COLORS
  503.         ╙╘┴ $─027,╪
  504.         ─┼╪
  505.         ┬╨╠ ╠╧╧╨2
  506.         ╠─╪ #$26
  507. ╠╧╧╨3   ╠─┴ ╓╔─┼╧,╪     ; ╔NIT ╓╔├
  508.         ╙╘┴ $─000,╪
  509.         ─┼╪
  510.         ┬╨╠ ╠╧╧╨3
  511.         ╠─╪ #$7╞        ; ├REATE THE Y-SCROLL TABLE
  512. ╠╧╧╨4   ╘╪┴             ;  AND CLEAR THE COLOR TABLE
  513.         ┴╬─ #$07
  514.         ╧╥┴ #$10        ; ╬ON-BLANK SCREEN
  515.         ╙╘┴ ┘╙├╥╧╠╠,╪
  516.         ╠─┴ #$00
  517.         ╙╘┴ ├╧╠╧╥╙,╪
  518.         ─┼╪
  519.         ┬╨╠ ╠╧╧╨4
  520.         ╙╘┴ $3╞╞╞
  521.         ╠─╪ #23         ; ├REATE A COLOR TABLE
  522. ╠╧╧╨5   ╠─┴ ┬┴├╦,╪
  523.         ╙╘┴ ├╧╠╧╥╙+8,╪
  524.         ╙╘┴ ├╧╠╧╥╙+32,╪
  525.         ╙╘┴ ├╧╠╧╥╙+56,╪
  526.         ╙╘┴ ├╧╠╧╥╙+80,╪
  527.         ╙╘┴ ├╧╠╧╥╙+96,╪
  528.         ─┼╪
  529.         ┬╨╠ ╠╧╧╨5
  530.         ╩╙╥ ├╚┴╬╟┼      ; ╔NIT SPRITE SIZES AND Y-POSITIONS
  531.         ├╠╔             ; ┼NABLE INTERRUPTS
  532.         ╥╘╙
  533.  
  534. ╔╥╤     ╠─╪ #$01
  535.         ╠─┘ #$08        ; 'NORMAL' $─016
  536.         ╬╧╨             ; ╘IMING
  537.         ╬╧╨
  538.         ╬╧╨
  539.         ┬╔╘ $┼┴         ; (┴DD ╬╧╨'S ETC. FOR ╬╘╙├)
  540. ╠╧╧╨6   ╠─┴ ┘╙├╥╧╠╠-1,╪ ; ═OVE THE SCREEN (BAD LINES)      5
  541.         ╙╘┴ $─011                                          4
  542.         ╠─┴ ├╧╠╧╥╙,╪    ; ╠OAD THE BACKGROUND COLOR        4
  543.         ─┼├ $─016       ; ╧PEN THE BORDER                  6
  544.         ╙╘┴ $─021       ; ╙ET THE BACKGROUND COLOR         4
  545.         ╙╘┘ $─016       ; ╙CREEN TO NORMAL                 4
  546.         ╠─┴ ╙╘╥┼╘├╚,╪   ; ╙TRETCH THE SPRITES              4
  547.         ╙╘┴ $─017                                          4
  548.         ┼╧╥ #$╞╞                                           2
  549.         ╙╘┴ $─017                                          4
  550.                         ; (┴DD ╬╧╨ FOR ╬╘╙├     +2)
  551.         ╔╬╪             ; ╔NCREASE COUNTER                 2
  552.         ┬╨╠ ╠╧╧╨6       ; ╠OOP 127 TIMES                 + 3
  553.                                                          ---
  554.         ╠─┴ #1          ; ┴CK THE RASTER INTERRUPT       =46
  555.         ╙╘┴ $─019                                        +17(SPRITES)
  556.                                                          ---
  557.         ╩╙╥ ─╧╙╘╥┼╘├╚   ; ╬EW STRETCH                    =63(WHOLE)
  558.  
  559.         ╩═╨ $┼┴31
  560.  
  561. ╙╨╥╔╘┼  ┬┘╘ 0,0,0,3,$╞┬,0,7,$7┼          ; ┴N ┼XAMPLE SPRITE
  562.         ┬┘╘ 0,$35,$─╞,0,$1─,$77,0,$┬7
  563.         ┬┘╘ $5─,0,$┬─,$83,$7┼,$┼╞,1,$─┼
  564.         ┬┘╘ $┬┬,1,$78,$┴┼,3,$70,$┼┬,0
  565.         ┬┘╘ 0,$┬┴,3,$60,$┼┼,3,$─8,$╞┬
  566.         ┬┘╘ 2,$╞6,$╞┼,$83,$┬─,$9╞,$┬┴,0
  567.         ┬┘╘ $37,$┼┼,0,$3─,$╞┬,0,7,$7┼
  568.         ┬┘╘ 0,3,$─╞,0,0,0,0
  569.  
  570. ╓╔─┼╧   ┬┘╘ $┼8,┘╨╧╙,$20,┘╨╧╙,$50,┘╨╧╙,$80,┘╨╧╙,$┬0,┘╨╧╙
  571.         ┬┘╘ $┼0,┘╨╧╙,$10.┘╨╧╙,$40,┘╨╧╙,$├1,$18,┘╨╧╙-1,0,0
  572.         ┬┘╘ $╞╞,8,$╞╞,$15,1,1,$╞╞,$╞╞,$╞╞,0,0,0,0,0,0,0,1,10
  573.         ; ╔NIT VALUES FOR ╓╔├ - SPRITES, INTERRUPTS, COLORS
  574.  
  575. ┬┴├╦    ┬┘╘ 0,$┬,$├,$╞,1,$╞,$├,$┬   ; ┼XAMPLE COLOR BARS
  576.         ┬┘╘ 0,6,$┼,$─,1,$─,$┼,6
  577.         ┬┘╘ 0,9,2,$┴,1,$┴,2,9
  578.  
  579. ─╧╙╘╥┼╘├╚
  580.         ╠─╪ #31            ; ├LEAR THE TABLE
  581.         ╠─┴ #0             ; (╒NROLLING WILL HELP THE SPEED,
  582. ╠╧╧╨7   ╙╘┴ ╙╘╥┼╘├╚,╪      ;  BECAUSE ╙╘┴ NNNN,╪ IS 5 CYCLES
  583.         ╙╘┴ ╙╘╥┼╘├╚+32,╪   ;  AND ╙╘┴ NNNX IS ONLY 4 CYCLES.)
  584.         ╙╘┴ ╙╘╥┼╘├╚+64,╪
  585.         ╙╘┴ ╙╘╥┼╘├╚+96,╪
  586.         ─┼╪
  587.         ┬╨╠ ╠╧╧╨7
  588.         ╙╘┴ ╥┼═┴╔╬─+1      ; ├LEAR THE REMAINDER
  589.         ╠─┴ #7
  590.         ╙╘┴ ├╧╒╬╘┼╥+1      ; ╔NIT COUNTER FOR 8 LOOPS
  591.         ╠─┴ #$80
  592.         ╙╘┴ ═┴╙╦+1         ; ╞IRST SPRITE 7, MASK IS $80
  593. ├╧╒╬╘┼╥ ╠─╪ #$00           ; ╘HE ARGUMENT IS THE COUNTER
  594.         ╠─┘ ┘├╧╧╥─,╪       ; Y-POSITION
  595.         ╠─┴ ╚┼╔╟╚╘,╪       ; ╚EIGHT OF ONE LINE (5 BIT INTEGER PART)
  596.         ╙╘┴ ┴──+1
  597.         ╠─╪ #20            ; ╚ANDLE 20 LINES
  598. ╠╧╧╨8   ╠─┴ ╙╘╥┼╘├╚+2,┘
  599. ═┴╙╦    ╧╥┴ #$00
  600.         ╙╘┴ ╙╘╥┼╘├╚+2,┘    ; ╙ET A ONE-BIT
  601.         ╙╘┘ ┘┴──+1
  602. ╥┼═┴╔╬─ ╠─┴ #0
  603.         ┴╬─ #7             ; ╨REVIOUS REMAINDER
  604. ┴──     ┴─├ #0             ;  ADD TO THE HEIGHT
  605.         ╙╘┴ ╥┼═┴╔╬─+1      ; ╙AVE THE NEW VALUE
  606.         ╠╙╥
  607.         ╠╙╥
  608.         ╠╙╥
  609.         ├╠├                ; ╘AKE THE INTEGER PART
  610. ┘┴──    ┴─├ #0
  611.         ╘┴┘                ; ╬EW VALUE TO Y-REGISTER
  612.         ─┼╪
  613.         ┬╬┼ ╠╧╧╨8
  614.         ╠╙╥ ═┴╙╦+1         ; ╒SE NEW MASK
  615.         ─┼├ ├╧╒╬╘┼╥+1      ; ╬EXT SPRITE
  616.         ┬╨╠ ├╧╒╬╘┼╥
  617.  
  618. ├╚┴╬╟┼  ╠─┴ #$00
  619.         ┴╙╠                ; ╙PRITE HEIGHT CHANGES WITH 2X SPEED
  620.         ┴╬─ #$3╞
  621.         ╘┴┘                ; 64 BYTES LONG TABLE
  622.         ╔╬├ ├╚┴╬╟┼+1       ; ╔NCREASE THE COUNTER
  623.         ╠─╪ #7             ; ─O EIGHT SPRITES
  624. ╠╧╧╨9   ╠─┴ ╙╔╬╒╙,┘
  625.         ╠╙╥
  626.         ╠╙╥
  627.         ├╠├                ; ╒SE THE SAME SINUS AS Y-DATA
  628.         ┴─├ #8
  629.         ╙╘┴ ╚┼╔╟╚╘,╪       ; ╙PRITE HEIGHT WILL BE FROM 1 TO 3 LINES
  630.         ╘┘┴
  631.         ┴─├ #10            ; ╬EXT SPRITE ENLARGEMENT WILL BE 10 ENTRIES
  632.         ┴╬─ #$3╞           ;  FROM THIS
  633.         ╘┴┘
  634.         ─┼╪
  635.         ┬╨╠ ╠╧╧╨9
  636.         ╠─╪ #7
  637.         ╠─┴ ├╚┴╬╟┼+1
  638.         ┴╬─ #$3╞
  639.         ╘┴┘
  640. ╠╧╧╨10  ╠─┴ ╙╔╬╒╙,┘        ; ┘-POSITION
  641.         ╙╘┴ ┘├╧╧╥─,╪
  642.         ╘┘┴
  643.         ┴─├ #10            ; ╬EXT SPRITE POSITION IS 10 ENTRIES FROM THIS ONE
  644.         ┴╬─ #$3╞
  645.         ╘┴┘
  646.         ─┼╪
  647.         ┬╨╠ ╠╧╧╨10
  648.         ╥╘╙
  649.  
  650. ╙╔╬╒╙   ┬┘╘ $20,$23,$26,$29,$2├,$2╞,$31,$34 ; ┴ PART OF A SINUS TABLE
  651.         ┬┘╘ $36,$38,$3┴,$3├,$3─,$3┼,$3╞,$3╞
  652.         ┬┘╘ $3╞,$3╞,$3╞,$3┼,$3─,$3├,$3┴,$38
  653.         ┬┘╘ $36,$34,$31,$2╞,$2├,$29,$26,$23
  654.         ┬┘╘ $20,$1├,$19,$16,$13,$10,$┼,$┬
  655.         ┬┘╘ 9,7,5,3,2,1,0,0,0,0,0,1,2,3,5,7
  656.         ┬┘╘ 9,$┬,$┼,$10,$13,$16,$19,$1├
  657.  
  658. --------------------------------------------------------------------------
  659. ╙TRETCHING SPRITES DEMO PROGRAM BASIC LOADER (╨┴╠)
  660.  
  661. 1 ╙=49152
  662. 2 ─┼╞╞╬╚(├)=├-48+7*(├>64)
  663. 3 ├╚=0:╥┼┴─┴$,┴:╨╥╔╬╘┴$:╔╞┴$="┼╬─"╘╚┼╬╨╥╔╬╘"<CLR>":╙┘╙49152:┼╬─
  664. 4 ╞╧╥╞=0╘╧31:╤=╞╬╚(┴╙├(═╔─$(┴$,╞*2+1)))*16+╞╬╚(┴╙├(═╔─$(┴$,╞*2+2)))
  665. 5 ├╚=├╚+╤:╨╧╦┼╙,╤:╙=╙+1:╬┼╪╘:╔╞├╚=┴╘╚┼╬3
  666. 6 ╨╥╔╬╘"├╚┼├╦╙╒═ ┼╥╥╧╥":┼╬─
  667. 100 ─┴╘┴ 78┴9648─1403┴9├08─1503┴23┼┬─96├09─4003├┴10╞7┴207┴90─9─╞807┴9029─, 3614
  668. 101 ─┴╘┴ 27─0├┴10╞3┴226┬──5├09─00─0├┴10╞7┴27╞8┼0──├8┴290709109─00├╞┴9009─, 3897
  669. 102 ─┴╘┴ 80├┼├┴10╞08─╞╞3╞┴217┬─╞├├09─88├┼9─┴0├┼9─┬8├┼9──0├┼9─┼0├┼├┴10┼┬20, 5281
  670. 103 ─┴╘┴ 67├15860┴201┴008┼┴┼┴┼┴24┼┴┬─╞╞├┼8─11─0┬─80├┼├┼16─08─21─08├16─0┬─, 4699
  671. 104 ─┴╘┴ 80├╞8─17─049╞╞8─17─0┼810┼0┼┼19─02014├14├31┼┴00000003╞┬00077┼0035, 3394
  672. 105 ─┴╘┴ ─╞001─7700┬75─00┬─837┼┼╞01─┼┬┬0178┴┼0370┼┬0000┬┴0360┼┼03─8╞┬02╞6, 3628
  673. 106 ─┴╘┴ ╞┼83┬─9╞┬┴0037┼┼003─╞┬00077┼0003─╞00000000┼834203450348034┬034┼0, 3015
  674. 107 ─┴╘┴ 3410344034├118330000╞╞08╞╞150101╞╞╞╞╞╞00000000000000010┴000┬0├0╞, 1859
  675. 108 ─┴╘┴ 010╞0├0┬00060┼0─010─0┼060009020┴010┴0209┴21╞┴9009─80├╞9─┴0├╞9─├0, 1876
  676. 109 ─┴╘┴ ├╞9─┼0├╞├┴10╞18─4─├1┴9078─35├1┴9808─45├1┴200┬├8003┬─88038─51├1┴2, 4314
  677. 110 ─┴╘┴ 14┬982├╞09009982├╞8├5┴├1┴900290769008─4─├14┴4┴4┴186900┴8├┴─0┼24┼, 3430
  678. 111 ─┴╘┴ 45├1├┼35├110├─┴9000┴293╞┴8┼┼68├1┴207┬99┼├14┴4┴1869089─880398690┴, 3474
  679. 112 ─┴╘┴ 293╞┴8├┴10┼├┴207┴─68├1293╞┴8┬99┼├19─800398690┴293╞┴8├┴10╞1602023, 3622
  680. 113 ─┴╘┴ 26292├2╞313436383┴3├3─3┼3╞3╞3╞3╞3╞3┼3─3├3┴383634312╞2├292623201├, 1654
  681. 114 ─┴╘┴ 191613100┼0┬09070503020100000000000102030507090┬0┼101316191├0000, 296
  682. 200 ─┴╘┴ ┼╬─,0
  683.  
  684. --------------------------------------------------------------------------
  685. ╒UENCODED ├64 EXUTABLE FOR STRETCHING SPRITES (╨┴╠)
  686.  
  687. BEGIN 644 STRETCH.64
  688. ═`0@-"`$`4[(╘.3$╒,@`╞"`(`┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─`40@#`$-(?
  689. ═╠├`┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩``(@(!`"!1╦(╨/
  690. ═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
  691. ═*0"╔"`4`0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"`8`╞2)#2$5#╞
  692. ═2╒-532!%4┼)/4┬(┌@``."60`@╥`╫.$$┘-├0╪1#$╘,#-!.4,╨.$0╤-3`╙03(╙3
  693. ═14)$.39#,#┼$-#`╨,╘-!,3!&-╘$╥,#=!.3!$.41&.#`╫03─╨,├┼$+"`╙-├$╘╨
  694. ═`%╠)90"#(#(╫1#!#03$╨1├-!,├(╓0─1$-4,╨.40╨,$0╨0╘$╤,$8╫03(╫1├┴%4
  695. ═,$1$0╙┴!,├─╨-╙`┘,3`┘1#`╨0╘9!.3`╨.40╠(#,╪.3<`╩`┼╞`(,@.#!#14-!┬
  696. ═,3!&,#┴$1─8╙1─$╥,3="1$9#0╙`┘1#@╪0╘4┘1$$╨0╘4┘1$(╪0╘4┘1$0╨0╘4┘1
  697. ═1$4╨0╘5#03$╨14(╥,"╨@-3(╪,0#╒"6<`@╥`╓-╘,╤-3@╓,$$╥,#%!,#`╪14%%?
  698. ═045!,├1%04)$1─9#13┴$,3%$,$)$.#!#14-%,39$,#┴$,├%$,#┴#,39$,$)$╟
  699. ═+"`╘-├─┘`$(*:`"#(#@╨0╘8╪1#$╫1#`╘.49&.$0╤-╘0╨13@╤,$4╨144╤.40╨4
  700. ═,├`╤-$,╤-$,╙,45!,#`╨,#`╨,#-&0├`╨,#<╫13`╨,╙4╠(#,╙.30`├╨╔╔`(,@╓
  701. ═1$8╨,#%$-╙<╨,$(╫-40╨,$)$.#,╫145&,#%$14)",#$╫.$%%,#,╫,$5",#`╨<
  702. ═,$)!,#,╓,$5%,#-$.$9",#)&-┬╨@,╙8╥.`#<"╞╚`@╥!&13@╙0─0┘1─)!,#`╙╬
  703. ═-╘5%,#`╙1$9",#`╨-╙=%,#`╨,╘1&,#`╨,#`╨,#!%.#,╘,├`╙-#4╨,╙0╪,#,╘╪
  704. ═0├`╙-$4╨+"`╙,#$╒`"─+:╨"#(#,╘,3`╙-#0╨,╙1#,3$╪,╙,╨,#`╨1─8╨.$9&┬
  705. ═,34╨,3`╤1─9&1─9&,#`╨,#`╨,#`╨,#`╨,#`╨,3!!,#`╨0├!#,$8╠(#$╪-3─`<
  706. ═=@═╠`(,@,#$╨1├!#,$(╨,#`╓,$4╨1#`╤,$0╨13`╓,#`╨.3`╥,$$╨,3!!,#(╨╦
  707. ═.4$╥,49!.3`╨.40╪,$-&.41!,$-&.41#,"╨@,3@╫-@##"╓╘`@╥!#1├┼$13!#0
  708. ═1─-!,3!&,3┴$-$1#,4$┘,#<╪1#,╒0╙%!.3@╨.$0╘-4,╤03(╨,$)#.#`╨,╘)$╟
  709. ═.#@╨,╙┴$-3%#,4$╥+"`╘,╙$╘`!`,;@"#(#$╘0├─╪,─-&,#─╨,#─┘.#)#1├┴#=
  710. ═-4%#,4$┘,#`╥.3`╫-├─╨,#┴$-$1#,31!-$$╘03$╪-├─╨,$$╪0╘%$,$4╥-$4╠╤
  711. ═(#,╘,╙``70╤╧`(,@-#5#,4-%,╙5#,3$╨0╘1!.3`╨,$$╥.3-&03┴%138╪0╙%!├
  712. ═,├`╫0├─┘14,╤-$$╘03$╪-├─╨.#┼$.#@╨,╙─╪-├─╨02╨@,╙0╫-`"╩#'``@╥`╥╩
  713. ═.3-&03┴#03$╨14-!,├`╫040╓.$,╤,├─╙1─$╪0├─┘14,╤.40╪,#`╙.3@╓.3!!\
  714. ═,├─╙1─$╪0╘$╤,$8╤-├`╥,#(╙+"`╙-├(╥`/<,<0"#(#(╓,├─╥0╙)&,╙$╙-#,╓*
  715. ═,╙@╙03-#,╘0╙13-&,╘8╙1├-&,╘8╙13-$,╘,╙03,╪,╙8╙-#,╤,─8╥0╙(┘,├8╥+
  716. ═,╙(╨,4,╠(#$╓-30`0╨╒╥`(,@,3─╤-├$╙,3`╨13!",#─╨-╙`╒,#,╨,├`╤,#`╨╥
  717. ═,#`╨,#`╨,#`╤,#(╨,╙`╒,#<╨.3!",$4╤,#$╙,38╤.3%#,#`╨,"╨@,├─╓`$\-┼
  718. ,╥`"#($5.1"╨╨````>
  719. ``
  720. END
  721. SIZE 1362
  722.  
  723. =============================================================================
  724. ╥OB ╚UBBARD'S ═USIC: ─ISASSEMBLED, ├OMMENTED AND ┼XPLAINED
  725. BY ┴NTHONY ═C╙WEENEY (U882859@POSTOFFICE.UTAS.EDU.AU)
  726.  
  727. [┼D'S ╬OTE: ╔ QUESTIONED THIS ARTICLE CONCERNING COPYRIGHT PROBLEMS AND HE
  728. HAS ASSURED ME THAT IT IS LEGAL TO PRESENT IT IN ENTIRITY LIKE THIS AS IT IS
  729. PAST A CERTAIN # OF YEARS. ┴CCORDINGLY ╔'M PRESENTING IT AND ANY CONCERNS
  730. SHOULD BE TAKEN UP WITH HIM AND NOT MYSELF.]
  731.  
  732. ╔NTRODUCTION:
  733. ************
  734.  
  735.   ╚OW DO YOU INTRODUCE SOMEONE LIKE ╥OB ╚UBBARD?? ╚E CAME, HE SAW AND HE
  736. CONQUERED THE '64 WORLD. ╔N MY ESTIMATION, THIS ONE MAN WAS RESPOSIBLE FOR
  737. SELLING MORE '64 SOFTWARE THAN ANY OTHER SINGLE PERSON. ╚ELL! ╔ THINK THAT ╥OB
  738. ╚UBBARD WAS RESPONSIBLE FOR SELLING MORE ├╧══╧─╧╥┼ 64'S THAN ANY OTHER PERSON!
  739. ╔ CERTAINLY BOUGHT MY '64 AFTER BEING BLOWN AWAY BY THE ═ONTY ON THE ╥UN MUSIC
  740. IN ─ECEMBER 1985. ╔N THE NEXT FEW YEARS, ╥OB WOULD TOTALLY DOMINATE THE '64
  741. MUSIC SCENE, RELEASING ONE HIT AFTER ANOTHER. ╔ WILL EVEN SAY THAT SOME REALLY
  742. TERRIBLE GAMES SOLD WELL ONLY ON THE STRENGTH OF THEIR BRILLIANT ╥OB ╚UBBARD
  743. MUSIC (EG. ╦NUCKLE┬USTERS AND ╫.┴.╥.).
  744.  
  745.   ╙O HOW DID ╥OB ACHIEVE THIS SUCCESS? ╞IRSTLY (OF COURSE) HE IS A SUPERB
  746. COMPOSER AND MUSICIAN, ABLE TO MAKE THE TUNES THAT BRING JOY TO OUR HEARTS
  747. EVERYTIME WE HEAR THEM! (ALSO CONSIDER THE AMAZING DIVERSITY OF STYLES OF
  748. MUSIC THAT ╥OB COMPOSED). ╙ECONDLY, HE WAS ABLE TO MAKE MUSIC WHICH WAS SUITED
  749. TO THE STRENGTHS AND LIMITATIONS OF THE ╙╔─ CHIP. ╩UST RECALL THE SOUNDFX USED
  750. AT THE BEGINNING OF ╘HRUST, OR IN THE ─ELTA IN-GAME MUSIC. ╨ERHAPS THE BIGGEST
  751. LIMITATION OF ╙╔─ MUST BE THE MEAGRE 3 CHANNELS THAT CAN BE USED, BUT MOST
  752. ╚UBBARD SONGS APPEAR TO HAVE FOUR, FIVE OR EVEN MORE INSTRUMENTS GOING (JUST
  753. LISTEN TO THE BEGINNING OF ╨HANTOMS OF THE ┴STERIODS FOR EXAMPLE... THAT'S
  754. ONLY ONE CHANNEL USED!!). ╔ COULD REALLY GO ON FOR (P)AGES IDENTIFYING THE
  755. OUTSTANDING THINGS THAT ╥OB ╚UBBARD DID, SO ╔ WILL FINALLY MENTION THAT ╥OB'S
  756. CODING SKILLS AND HIS MUSIC ROUTINES WERE A MAJOR FACTOR IN HIS SUCCESS.
  757.  
  758.  
  759. ╘HE ╞IRST ╥OB ╚UBBARD ╥OUTINE:
  760. *****************************
  761.  
  762.   ╥OB ╚UBBARD CREATED A SUPERB MUSIC ROUTINE FROM THE VERY FIRST TUNE WHICH
  763. WAS RELEASED (├ONFUZION). ╞URTHERMORE, ╥OB USED THIS ROUTINE TO MAKE MUSIC
  764. FOR A VERY LONG TIME, ONLY CHANGING IT _SLIGHTLY_ OVER TIME. ╘HE SOURCECODE
  765. THAT ╔ PRESENT HERE WAS USED (WITH SLIGHT MODIFICATIONS) IN: ├ONFUZION, ╘HING
  766. ON A ╙PRING, ═ONTY ON THE ╥UN, ┴CTION ┬IKER, ├RAZY ├OMETS, ├OMMANDO, ╚UNTER
  767. ╨ATROL, ├HRIMERA, ╘HE ╠AST ╓8, ┬ATTLE OF ┬RITAIN, ╚UMAN ╥ACE, ┌OIDS, ╥ASPUTIN,
  768. ═ASTER OF ═AGIC, ╧NE ═AN & ╚IS ─ROID, ╟AME ╦ILLER, ╟ERRY THE ╟ERM, ╟EOFF ├APES
  769. ╙TRONGMAN ├HALLENGE, ╨HANTOMS OF THE ┴STEROIDS, ╦ENTILLA, ╘HRUST,
  770. ╔NTERNATIONAL ╦ARATE, ╙PELLBOUND, ┬UMP ╙ET AND ╙PIKE, ╞ORMULA 1 ╙IMULATOR,
  771. ╓IDEO ╨OKER, ╫ARHAWK OR ╨ROTEUS AND MANY, MANY MORE! ┴LL YOU WOULD NEED TO DO
  772. TO PLAY A DIFFERENT MUSIC IS TO CHANGE THE MUSIC DATA AT THE BOTTOM, AND A FEW
  773. LINES OF THE CODE.
  774.  
  775.   ╘HIS PARTICULAR ROUTINE HAS BEEN RIPPED OFF BY MANY FAMOUS GROUPS AND
  776. PEOPLE OVER THE YEARS, BUT ╔ DON'T THINK THAT THEY WERE EVER GENEROUS ENOUGH
  777. TO SHARE IT AROUND. ├AN YOU REMEMBER ╘HE ╩UDGES AND ╥ED ╙OFTWARE?? ╘HEY MADE
  778. THE FAMOUS ╥ED-╚UBBARD DEMO, AND USED IT IN ╥HAA-╠OVELY AND MANY OF THEIR
  779. OTHER PRODUCTIONS. ╔'M SURE THAT THE (┴TARI) ╙╘ FREAKS READING THIS WILL LOVE
  780. ═AD ═AX (AKA ╩OCHEN ╚IPPEL), AND REMEMBER THE ┬╔╟ DEMO WHICH FEATURED APPROX
  781. 100 ╥OB ╚UBBARD TUNES CONVERTED TO THE ╙╘. ┴LTHOUGH ╔ HATE TO ADMIT IT, ╔
  782. DECIDED TO START SHARING AROUND MY OWN SOURCECODE AFTER RECEIVING THE AMAZING
  783. ╨ROTRACKER SOURCECODE (340╦!) ON THE ┴MIGA (THANKS ╠ARS ╚AMRE). ╘HAT MADE ME
  784. SHAMEFUL TO BE SELFISH, ESPECIALLY AFTER ╔ LEARNED ALOT OF FROM IT. ╫HY DON'T
  785. ┘╧╒ SHARE AROUND YOUR OLD SOURCECODES TOO!
  786.  
  787.   ╘HE PARTICULAR ROUTINE THAT IS INCLUDED BELOW WAS RIPPED FROM ═ONTY ON THE
  788. ╥UN, AND IT APPEARED IN MEMORY FROM $8000 TO ABOUT $9554. ╘HE COMPLETE
  789. ROUTINE HAD CODE FOR SOUNDFX IN IT, WHICH ╔ HAVE TAKEN OUT FOR THE SAKE OF
  790. CLARITY. ┴LTHOUGH THE ROUTINE IS REALLY TINY - A MERE 900 OR 1000 BYTES OF
  791. CODE, THERE ARE SOME AMAZINGLY COMPLEX CONCEPTS IN IT WHICH REQUIRE ALOT OF
  792. EXPLANATION IF YOU DON'T KNOW MUCH ABOUT COMPUTER MUSIC OR ╙╔─. ╞ORTUNATELY
  793. FOR YOU, ╔ HAVE PUT IN EXCELLENT LABEL NAMES FOR YOU, AND ALSO ALOT OF REALLY
  794. HELPFUL AND AMAZING COMMENTS. ╔N FACT, ╔ THINK THIS SOURCECODE MUST HAVE A
  795. MUCH BETTER STRUCTURE AND COMMENTS THAN ╥OB ╚UBBARD'S ORIGINAL!!! ╔ THINK THAT
  796. THE BEST WAY TO UNDERSTAND THE SOURCECODE IS TO STUDY IT, AND FIGURE OUT WHAT
  797. IS GOING ON USING THE COMMENTS.
  798.  
  799.   ╔N ADDITION TO THE COMMENTS IN THE SOURCE, THERE ARE *3* DESCRIPTIONS OF
  800. THE ROUTINE IN THIS ARTICLE. ╘HE FIRST TELLS YOU HOW TO USE THE MUSIC ROUTINE
  801.