home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / HACK4-1OF5.SFX / hack4.1-5
Encoding:
Text File  |  1990-02-12  |  36.0 KB  |  781 lines

  1.                    ########
  2.              ##################
  3.          ######            ######
  4.       #####
  5.     #####  ####  ####      ##       #####   ####  ####  ####  ####  ####   #####
  6.   #####    ##    ##      ####     ##   ##   ##  ###     ##    ####  ##   ##   ##
  7.  #####    ########     ##  ##    ##        #####       ##    ## ## ##   ##
  8. #####    ##    ##    ########   ##   ##   ##  ###     ##    ##  ####   ##   ##
  9. #####  ####  ####  ####  ####   #####   ####  ####  ####  ####  ####   ######
  10. #####                                                                     ##
  11.  ######            ######        ╓OLUME 1, ╔SSUE #4
  12.    ##################             ╧CTOBER 5, 1992
  13.        ########
  14.  
  15. -----------------------------------------------------------------------------
  16. ┼DITOR'S ╬OTES:
  17. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  18.  
  19.   ═Y APOLOGIES ABOUT THIS ISSUE BEING POSTED LATER THAN WAS MENTIONED IN A
  20.   PREVIEW POST ON COMP.SYS.CBM NEWSGROUP. ─UE TO SOME PROBLEMS WITH CODING,
  21.   SCHOOL AND ═URPHY'S LAW THE ISSUE HAD TO BE DELAYED UNTIL NOW.
  22.  
  23.   ╔ HAVE ASKED THE SYSTEM ADMIN'S AT MY SITE CONCERNING A MAIL-SERVER BUT THEY
  24.   SAID THEY DID NOT HAVE ENOUGH MAN-POWER (GO FIGURE) TO GET SOMEBODY TO RUN IT.
  25.   ╔ WILL BE IMPLEMENTING A MAIL-SERVER SYSTEM IN MY ACCOUNT IN THE NEAR
  26.   FUTURE FOR RETRIEVAL OF PROGRAMS AND BACK-ISSUES. ╔'LL POST DESCRIPTIONS OF
  27.   HOW TO USE IT IT THE NEXT ISSUE OF ├= ╚ACKING AS WELL AS ON THE NEWSGROUP
  28.   COMP.SYS.CBM WHEN ╔ FINISH WRITING IT.
  29.  
  30.   ╔N THIS ISSUE OF ├= ╚ACKING WE ALSO START ON AN AMBITIOUS TASK: ─EVELOPING
  31.   A GAME FOR BOTH THE ├128 AND ├64 MODES THAT INCLUDES ALL OF THE FEATURES
  32.   FOUND IN COMMERCIAL GAMES. ╘AKE A LOOK IN THE ╠EARNING ═╠ ├OLUMN FOR MORE
  33.   INFORMATION.
  34.  
  35.   ┴LSO, ╘HE ARTICLE CONCERNING THE 1351 MOUSE HAS _AGAIN_ BEEN DELAYED DUE
  36.   TO TIME CONSTRAINTS. ╥EST ASSURED THAT IT WILL BE IN THE NEXT ISSUE OF
  37.   ├= ╚ACKING.
  38.  
  39.   ╔F YOU ARE INTERESTED IN HELPING WRITE FOR ├= ╚ACKING PLEASE FEEL FREE TO
  40.   MAIL DUCK@PEMBVAX1.PEMBROKE.EDU (OR DUCK@HANDY.PEMBROKE.EDU). ╫E'RE ALWAYS
  41.   LOOKING FOR NEW AUTHORS ON ALMOST ANY SUBJECT, SOFTWARE OR HARDWARE.
  42.  
  43. ================================================================================
  44.  
  45.   ┴LSO NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS FTP FROM
  46.   CCOSUN.CALTECH.EDU UNDER PUB/RKNOP/╚┴├╦╔╬╟.═┴╟.
  47.  
  48. ================================================================================
  49.  
  50.   ╬╧╘╔├┼: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN 
  51.   WHOLE, FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL 
  52.   AUTHORS FOR PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
  53.  
  54.      *** ┴╒╘╚╧╥╙ ╠╔╙╘┼─ ┬┼╠╧╫ ╥┼╘┴╔╬ ┴╠╠ ╥╔╟╚╘╙ ╘╧ ╘╚┼╔╥ ┴╥╘╔├╠┼╙ ***
  55.  
  56. ================================================================================
  57. ╔N THIS ISSUE:
  58.  
  59. ╠EARNING ═╠ - ╨ART 4
  60.  
  61.   ╔N THE NEXT ISSUE WE'LL EMBARK ON A PROJECT OF MAKING A SPACE INVADERS STYLE
  62. GAME FOR THE ├=64/128 FROM SCRATCH USING CUSTOM CHARACTERS, INTERRUPT-DRIVEN
  63. MUSIC, ANIMATION, USING THE JOYSTICK, MOUSE OR KEYBOARD. ╘HE ├64 AND ├128 
  64. VERSIONS WILL BE DEVELOPED CON-CURRENTLY, EACH PROGRAM TAKING ADVANTAGE OF 
  65. THE MACHINE'S CAPABILITIES. ╘HIS IS THE FIRST IN A SERIES - WRITTEN BY 
  66. ├RAIG ╘AYLOR.
  67.  
  68. ╘HE ─EMO ├ORNER: ╞╠╔ - MORE COLOR TO THE SCREEN
  69.  
  70. ┴LL OF US HAVE HEARD COMPLAINTS ABOUT THE COLOR CONSTRAINTS ON ├64.
  71. ╞╠╔ PICTURE CAN HAVE ALL OF THE 16 COLORS IN ONE CHARACTER POSITION.
  72. ╫HAT THEN IS THIS ╞╠╔ AND HOW IT IS DONE ? ╫RITTEN BY ╨ASI '┴LBERT' ╧JALA.
  73.  
  74. ╥╙-232 ├ONVERTER
  75.  
  76.   ╘HIS ARTICLE DETAILS PLAN FOR A ╒SER PORT ╘╧ ╥╙232 CONNECTOR USING JUST ╧╬┼
  77. ╔├ AND 4 CAPACITORS. ╘HE CIRCUIT IS INCLUDED, AND SUGGESTIONS ON ALTERNATIVE
  78. CHIPS AND PARTS ARE EXAMINED.  ╫RITTEN BY ╫ARREN ╘USTIN
  79.  
  80. ╔NTRODUCTION TO THE ╓╔├-╔╔
  81.  
  82.   ╘HIS ARTICLE EXAMINES THE ╓╔├-╔╔ CHIP IN DETAIL AND PROVIDES AN EXPLANATION
  83. OF THE VARIOUS REGISTERS ASSOCIATED WITH THE CHIP. ╫RITTEN BY ╨ASI '┴LBERT'
  84. ╧JALA.
  85.  
  86. ╠╔╘╘╠┼ ╥┼─ ╥┼┴─┼╥: ═╙-─╧╙ FILE READER FOR THE 128 AND 1571/81 DRIVES.
  87.  
  88. ╘HIS ARTICLE PRESENTS A PROGRAM THAT READS ═╙-─╧╙ FILES AND THE ROOT DIRECTORY
  89. OF ═╙-─╧╙ DISKS.  ╘HIS PROGRAM COPIES FILES FROM DISK TO DISK SO TWO DISK
  90. DRIVES ARE REQUIRED TO USE IT (OR A "VIRTUAL" DRIVE).  ╘HIS SCHEME IMPOSES NO
  91. LIMIT ON THE MAXIMUM SIZE OF A FILE TO BE TRANSFERRED.  ╘HE USER-INTERFACE
  92. CODE IS WRITTEN IN ┬┴╙╔├ AND PRESENTS A FULL-SCREEN FILE SELECTION MENU.  ╘HE
  93. GRUNT-WORK CODE IS WRITTEN IN ASSEMBLY LANGUAGE AND OPERATES AT MAXIMUM
  94. VELOSITY.  ├OMPLETE, EXPLAINED CODE LISITINGS ARE INCLUDED.  ┬Y ├RAIG ┬RUCE.
  95.  
  96. =============================================================================
  97. ╠EARNING ═ACHINE ╠ANGUAGE - ╨ART 4
  98. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  99.  
  100.                      +---------------------------+
  101.                      ▄ ╙PACE ╔NVASION - ╨ART 1   ▄
  102.                      ▄                           ▄
  103.                      ▄ ╨ROGRAMMING: ├RAIG ╘AYLOR ▄
  104.                      ▄ ╟RAPHICS   : ╨ASI ╧JALA   ▄
  105.                      ▄ ═USIC/╙OUND:              ▄
  106.                      ▄                           ▄
  107.                      +---------------------------+
  108.  
  109. ╔. ╔NTRODUCTION
  110.    ------------
  111.  
  112.   ╔N THIS AND FUTURE ╠EARNING ═ACHINE ╠ANGUAGE'S WE WILL DEVELOP A GAME CALLED
  113.   ╙PACE ╔NVASION. ╘HE GAME WILL BE SIMILAIR TO ╙PACE ╔NDVADERS AND WILL RUN ON
  114.   THE ├OMMODORE 64 OR THE ├OMMODORE 128 IN 80 COLUMNS. ╔T WILL FEATURE ALL THE
  115.   "FEATURES" AND "PARTS" THAT ARE FOUND IN COMMERCIAL GAMES WITH INTERRUPT-
  116.   DRIVEN MUSIC, CUSTOM CHARACTER DEFINITIONS, 100% MACHINE LANGUAGE, MULTI-LEVEL
  117.   GAME PLAY, AND INPUT FROM THE KEYBOARD, JOYSTICK OR MOUSE.
  118.  
  119.   ╬OTE ▄ ╔ AM LOOKING FOR SOMEONE TO HELP AID MUSIC COMPOSITION THAT WILL
  120.   -----+ BE INTRODUCED IN A LATER ISSUE. ╨ROGRAMMING OF THE 6502 IS HELPFUL
  121.   BUT NOT A REQUIREMENT. ╨LEASE EMAIL ME AT DUCK@PEMBVAX1.PEMBROKE.EDU IF
  122.   YOU ARE INTERESTED.
  123.  
  124.   ═ANY THANKS TO ╨ASI ╧JALA FOR HIS WORK WITH THE GRAPHICS IN THIS PROGRAM.
  125.  
  126.   ┴LSO PLEASE NOTE: ╘HIS ENTIRE PROGRAM HAS BEEN ASSEMBLED SUCESSFULLY WITH 
  127.   THE ┬UDDY-128 ASSEMBLER FOR BOTH THE ├=128 AND ├=64 VERSION. ─UE TO THE
  128.   LENGTH OF THE SOURCE FILES (OVER 1,500 LINES) ╔'M NOT SURE IF ┬UDDY-64 WILL
  129.   HANDLE IT. ╘HUS IF YOU GET ERRORS DURING ASSEMBLY, ALL ╔ CAN SAY IS: SORRY.
  130.   ╔F THIS IS THE CASE THEN THE NEXT ISSUE WILL HANDLE DIVIDING THE PROGRAM AND
  131.   DATA UP INTO SEGMENTS WHICH CAN THEN EACH BE LOADED SEPERATLY.
  132.  
  133.  
  134. ╔╔. ═ACHINE ╬OTES
  135.     -------------
  136.  
  137.   ╘HE ├OMMODORE 64 AND 128 PROGRAMS FOR ╙PACE ╔NVASION WILL DIFFER SLIGHTLY,
  138.   MOSTLY IN THE FOLLOWING AREAS:
  139.  
  140.        - CUSTOM CHARACTER DEFINITION
  141.        - MEMORY INITIALIZATION / SETUP
  142.        - SOUND / MUSIC
  143.  
  144.   ┬ECAUSE THE ACTUAL GAME PLAY AND THE CHANGES NESSCESARY BETWEEN THE AREAS 
  145.   LISTED ABOVE, WE WILL USE THE ┬UDDY ┴SSEMBLER NOTATION FOR CONDITIONAL 
  146.   ASSEMBLY TO ALLOW THE DEVELOPMENT OF ONLY ONE FILE CONTAINING THE SOURCE
  147.   CODE. ╔N ADDITION TO CONDITIONAL ASSEMBLY MOST OF THE ROUTINES WILL BE
  148.   WRITTEN AS ONE WITH JUMPS TO SUBROUTINES CONTAINING THE ├64 OR 128 DIRECT
  149.   CODE AS THE ALGORITHIMS ARE USUALLY THE SAME FOR EACH.
  150.  
  151.   ╔N ADDATION THERE WILL BE SEVERAL SOURCE FILES AND SOME MISCELLANEOUS INCLUDE
  152.   FILES FOR GRAPHICS AND SOUND. ╞OR THOSE OF YOU WHO ARE OR WILL BE CONVERTING
  153.   THE ASSEMBLY SOURCE OVER TO A DIFFERENT ASSEMBLER THE CONDITIONAL 
  154.   ASSEMBLY DIRECTIVES .IF (CONDITION) WILL ONLY BE TRUE IF THE CONDITION IS
  155.   NON-ZERO. ╔E: IF THE SYMBOL COMPUTER IS DEFINED AS 128 THEN THE FOLLOWING
  156.   EXAMPLE ILLUSTRATES IT:
  157.  
  158.        COMPUTER = 128
  159.        .IF COMPUTER-64         ; NON-ZERO ANSWER SO THEREFORE
  160.        ; 128 CODE GOES HERE
  161.        .ELSE
  162.        ; 64 CODE GOES HERE
  163.        .IFE                    ; END THE .IF CONDITION.
  164.  
  165.   ┴LSO NOTE THAT FOR MUCH OF THE PROGRAM WE WILL _NOT_ BE USING THE COMPUTER
  166.   ROUTINES AND INSTEAD BE DEVELOPING OUR OWN.
  167.  
  168.   ╔N ADDITION THE PROGRAM WILL SHOW YOU HOW TO USE ╔╥╤ INTERRUPTS TO SIMPLIFY
  169.   PROGRAMMING. ╫E WILL BE USING THEM TO PLAY MUSIC IN THE BACKGROUND ON THREE
  170.   VOICES (SOUND EFFECTS WILL TEMPORARILY PRE-EMPT THE THIRD VOICE FROM PLAYING).
  171.   ┴LSO ANIMATION OF CHARACTERS WILL BE DONE VIA THE ╔╥╤. ┴ LITTLE BACKGROUND
  172.   ON INTERRUPTS FOR THOSE OF YOU WHO ARE A BIT HAZY ON WHAT THEY ARE OR HAVE
  173.   NEVER SEEN THEM BEFORE (┴LSO TRY TAKING A LOOK AT ╥ASTERS: ╫HAT THEY ARE AND
  174.   HOW TO USE THEM IN ├= ╚ACKING #3 - ╫HILE THIS DOES NOT NECESSARILY COVER
  175.   WHAT WE ARE GOING TO BE USING INTERRUPTS FOR IT DOES DESCRIBE THEM QUITE 
  176.   WELL.) ┬ASICALLY THE COMPUTER GENERATES AN INTERRUPT EVERY 1/60TH A SECOND
  177.   FROM A TIMER ON THE COMPUTER (USUALLY FROM THE ├╔┴ CHIP OR THE SCREEN FOR 
  178.   THOSE OF YOU WHO ARE CURIOUS). ╘HE COMPUTER WILL SAVE ALL THE REGISTERS, JUMP
  179.   TO A SUBROUTINE - PERFORM THE INSTRUCTIONS THERE (USUALLY UPDATING TIME,
  180.   SCANNING THE KEYBOARD ETC...) AND THEN RECALL ALL THE REGISTERS AND RETURN
  181.   TO THE USER PROGRAM. ╘HIS IS AN INTERRUPT. ┴N ╔╥╤ INTERRUPT DESCRIBES AN
  182.   INTERRUPT THAT WE CAN ALLOW TO BE "TURNED ON" AND "TURNED OFF" - IE: WE
  183.   CAN TEMPORARILY DISABLE IT IF WE HAVE TO. ┴ ╬═╔ INTERRUPT DESCRIBES AN
  184.   INTERRUPT WHICH WE CAN _NOT_ TEMPORARILY DISABLE -- WE WILL NOT BE USING
  185.   ╬═╔ INTERRUPTS IN THIS PROGRAM.
  186.  
  187.   
  188. ╔╔╔. ╘HE ╨ROCESS
  189.      -----------
  190.  
  191.   ╨ART OF WHAT THIS SERIES OF ARTICLES IS FOCUSED AT IS THE DEVELOPMENT OF BEING
  192.   ABLE TO ANALYZE PROGRAMMING TASKS AND BREAK THEM DOWN INTO SMALLER WORKABLE
  193.   PROBLEMS. ╧NCE THESE PROBLEMS OR SUBROUTINES ARE COMPLETED YOUR ORIGINAL
  194.   PROBLEM IS SOLVED.
  195.  
  196.   ╠ET'S TAKE THIS APPROACH TO ╙PACE ╔NVASION:
  197.  
  198.   ╨ROBLEM ╙TATEMENT: ┬UILD A ╙PACE ╔NVADER PROGRAM CALLED ╙PACE ╔NVASION.
  199.   -----------------
  200.  
  201.   ╒SUALLY, GIVEN A PROBLEM YOU HAVE TO RE-WORK THE PROBLEM STATEMENT TO 
  202.   ENCOMPASS ALL OF WHAT YOU WANT. ╠ET'S TRY AGAIN:
  203.  
  204.   ╨ROBLEM ╙TATEMENT: ─EVELOP A ╙PACE ╔NVADER PROGRAM CALLED ╙PACE ╔NVASION
  205.   -----------------  UTILIZING THE 64 OR 128 SCREEN WITH INTERRUPT DRIVEN
  206.                      MUSIC / SOUND, AND ALLOWING INPUT FROM THE KEYBOARD, 
  207.                      JOYSTICK OR MOUSE.
  208.  
  209.   ╚MMM... ╘HE PROBLEM STATEMENT LISTED ABOVE IS BETTER BUT IT HAS NO REAL ORDER;
  210.   WE HAVE NO CLEAR IDEA OF WHERE TO START AND WHAT WE NEED TO DO. ╔T DOES 
  211.   HOWEVER TELL US THAT WE HAVE THE FOLLOWING SECTIONS:
  212.  
  213.        - 64 / 128 ╙CREEN ╚ANDLING
  214.        - ═USIC / ╙OUND
  215.        - ╔NPUT ╚ANDLING
  216.        - ╟AME ─RIVER (IMPLIED)
  217.  
  218.   ╠ET'S THINK A BIT MORE ABOUT EACH OF THESE SECTIONS AND WHAT EACH WILL
  219.   INVOLVE:
  220.  
  221.   128 / 64 ╙CREEN ╚ANDLING:      - ╨UTTING CHARACTERS ON SCREEN.
  222.   ------------------------       - ╔NITIALIZING THE ╙CREEN / ╥EGISTERS.
  223.                                  - ╙ETTING UP THE ├USTOM ├HARACTERS.
  224.                                  - ╚ANDLING ANY ┴NIMATION.
  225.  
  226.   ═USIC / ╙OUND:                 - ╙ETTING UP THE ╙OUND ├HIP ╥EGISTERS.
  227.   -------------                  - ╨LAYING A NOTE READ FROM ═EMORY.
  228.                                  - ┼XECUTING A ╙OUND ┼FFECT.
  229.  
  230.   ╔NPUT ╚ANDLING:                - ─EVICE ╙ELECTION (KEYBOARD, MOUSE, JOYSTICK).
  231.   --------------                 - ╦EYBOARD ╙CANNING.
  232.                                  - ═OUSE ╙CANNING.
  233.                                  - ╩OYSTICK ╙CANNING.
  234.  
  235.   ╟AME ─RIVER:                   - ╘ITLE ╙CREEN.
  236.   -----------                    - ╔NITIALIZATION OF ═EMORY.
  237.                                  - ╠EVEL ╙ETUP.
  238.                                  - ═OVEMENT OF ┴LIENS.
  239.                                  - ═OVEMENT OF ═ISSLES.
  240.                                  - ═OVEMENT OF ╨LAYER.
  241.                                  - ├OLLISION ├HECKING.
  242.                                  - ├OLLISION ╚ANDLING.
  243.                                  - ┼ND OF ╠EVEL.
  244.                                  - ╙CORE ╒PDATING.
  245.                                  - ┼ND - ╟AME HANDLING.
  246.                                  - ╚IGH ╙CORE ╒PDATE.
  247.  
  248.   ╙HREW! ╠ONG LIST 'EH? - ╬OW YOU MAY HAVE THOUGHT OF SOME NOT LISTED ABOVE,
  249.   AND WE MAY HAVE POSSIBLY OVERLOOKED SOME CRUCIAL ROUTINES -- THAT'S FINE --
  250.   THE ABOVE IS JUST INTENDED AS A BUILDING BLOCK - A PLACE TO START CODING FROM.
  251.  
  252.   ╔F WE THINK OF THESE AS SUBROUTINES WE CAN BUILD A SKELETON OUTLINE OF THE 
  253.   PROGRAM - YET WE NEED SOME ORDER IN HOW WE CALL THEM. ╧BVIOUSLY WE AREN'T
  254.   GOING TO MOVE THE PLAYER UNTIL WE SCAN THE INPUT AND THAT REQUIRES PRIOR 
  255.   DEVICE SELECTION ETC... 
  256.  
  257.   ╚MM... ╘AKING ORDER INTO ACCOUNT WE CAN RE-STATE THE PROBLEM AS:
  258.  
  259.   ╨ROBLEM ╙TATEMENT: ─EVELOP A GAME SIMILAIR TO ╙PACE ╔NVADERS CALLED ╙PACE
  260.   -----------------  ╔NVASION BY INITIALIZING MEMORY, THE DISPLAY DEVICE,
  261.                      SETTING UP ├USTOM ├HARACTERS, SETTING UP THE ═USIC
  262.                      ╥EGISTERS AND DISPLAYING THE TITLE SCREEN. ╞ROM THERE,
  263.                      SELECT THE INPUT DEVICE AND AFTER THAT SETUP THE CURRENT
  264.                      LEVEL. ╬EXT, WHILE PLAYING MUSIC IN THE BACKGROUND AND
  265.                      SCANNING THE INPUT DEVICE, MOVE THE ALIENS, MISSLES AND
  266.                      PLAYER CHECKING FOR COLLISIONS AND TAKING APPROPRIATE
  267.                      ACTION AS REQUIRED (PLAYER DIES, SCORE INCREASES ETC OR
  268.                      WHAT-NOT). ┴FTER EACH LEVEL DISPLAY IF THE PLAYER IS DEAD,
  269.                      OR SET-UP FOR THE NEXT LEVEL AND REPEAT. ╫HEN THE GAME HAS
  270.                      ENDED UPDATE THE HIGH SCORE IF NECESSARY.
  271.  
  272.   ╘RY SAYING THAT FIVE TIMES REAL FAST! :-) ┬UT THAT PROBLEM STATEMENT IS A
  273.   WHOLE LOT BETTER THAN THE ONE WE HAD AT THE BEGINNING WHICH SIMPLY SAID TO 
  274.   DEVELOP A GAME.
  275.  
  276.  
  277. ╔╓. ╬OT ┴LL ┴T ╧NE ╘IME - ╫HAT ╫E'RE ─OING ╘HIS ╘IME
  278.     ------------------------------------------------
  279.  
  280.   ╬OW THIS PROGRAM IS TOO COMPLEX, (AS SEEN BY THE PROBLEM STATEMENT ABOVE) TO
  281.   HAVE IN ONE ARTICLE SO THIS ISSUE WE'LL CONCENTRATE ON THE BASIC MAIN LOOP
  282.   AND THE INITIALIZATION OF THE ├USTOM ├HARACTERS AND THE TITLE SCREEN. 
  283.  
  284.   ╧RIGINALLY, ╔ WAS PLANNING ON UPDATING AND LISTING THE REVISED CODE IN EACH
  285.   ISSUE. ╚OWEVER, DUE TO SPACE LIMITATIONS AND THE ENORMITY OF THE PROGRAM 
  286.   CURRENTLY (1,500+ LINES!!) IT WILL BE PLACED FOR ANONYMOUS FTP AT 
  287.   CCOSUN.CALTECH.EDU UNDER THE DIRECTORY: PUB/RKNOP/╚┴├╦╔╬╟.═┴╟.
  288.  
  289.  
  290. ╓. ╘HE ═AIN ╠OOP
  291.    -------------
  292.  
  293.   ╫HAT IS A MAIN LOOP? ┬ASICALLY IT'S WHERE EVERYTHING GETS DONE. ╔T CALLS OTHER
  294.   SUBROUTINES AND KEEPS REPEATING UNTIL CERTAIN CRITERIA ARE MET - USUALLY WHEN
  295.   THE PLAYER REQUESTS TO EXIT THE GAME. ╚OWEVER, INSIDE YOU'LL FIND INNER LOOPS
  296.   FOR LEVEL PLAY ETC. 
  297.  
  298.   ╧UR MAIN LOOP FOR THIS PROGRAM WILL BE:
  299.  
  300. -------------------------------------------------------------------------------
  301. ;; * ═AIN ╠OOP - ╘HIS SHOULD BE THE LAST SECTION IN THE SOURCE CODE.
  302. ;
  303. ; ═AIN ╠OOP
  304. ;
  305.  
  306. MAIN'LOOP = *
  307.                JSR MEMORY'SETUP        ; ╙ET-╒P MEMORY.
  308.                JSR DISPLAY'SETUP       ;  "  "  DISPLAY.
  309.                JSR CHAR'SETUP          ;  "  "  CUSTOM CHARACTER DISPLAY.
  310.                JSR MUSIC'SETUP         ;  "  "  MUSIC CHIP.
  311.                JSR TITLE'SCREEN        ; ─ISPLAY THE TITLE SCREEN.
  312.                JSR SELECT'INPUT        ; ╙ELECT ╔NPUT ─EVICE.
  313.  
  314. LEVEL'LOOP = *
  315.                JSR PLAY'MUSIC          ; ╙TART THE MUSIC PLAYING.
  316.                JSR SETUP'LEVEL         ; ╙ETUP THE CURRENT LEVEL.
  317.  
  318.              - JSR ALIEN'MOVE          ; ═OVE ALIENS
  319.                JSR MISSLE'MOVE         ;  "   MISSLES
  320.                JSR PLAYER'MOVE         ;  "   PLAYER
  321.                JSR CHECK'COLLISION     ; ├HECK FOR COLLISIONS
  322.                LDX COLLISION'FLAG      ; ├HECK COLLISION FLAG.
  323.                BEQ -
  324.  
  325.                DEX                     ; ─ECREASE .╪ BY 1 SO IF ╪ WAS 1 THEN
  326.                BEQ PLAYER'DIE          ;    IT'S NOW 0 SO WE KNOW PLAYER DIED.
  327.                DEX                     ; ─ECREASE .╪ AGAIN SO IF ╪ WAS 2 THEN
  328.                BEQ ALIEN'DIE'SOUND     ;    IT'S NOW 0 SO WE MAKE ALIEN DEATH.
  329.                JSR END'LEVEL           ; ╔F WE GOT HERE - THAN END OF LEVEL.
  330.                JSR WAIT'NEXT           ; ╫AIT FOR NEXT KEYPRESS.
  331.                JSR INCREASE'LEVEL      ; INCREASE LEVEL #.
  332.                SEC                     ; ┴ND GO BACK....
  333.                BCS LEVEL'LOOP             
  334.  
  335. ALIEN'DIE'SOUND = *
  336.                JSR MAKE'ALIEN'SOUND    ; MAKE ALIEN SOUND.
  337.                SEC                     ; SET CARRY 
  338.                BCS -                   ; AND JUMP BACK.
  339.  
  340. PLAYER'DIE     JSR SHOW'PLAYER'DIE     ; ╙HOW IT ON-SCREEN.
  341.                LDA LIVES               ; ├HECK # OF LIVES.
  342.                BEQ END'OF'GAME         ; ╔F 0 THE END-OF-GAME.
  343.                BNE LEVEL'LOOP          ; GO BACK AND RE-START LEVEL.
  344.                BRK                     ; ╔F WE GET HERE - THAN AN ERROR.
  345.  
  346. END'OF'GAME    JSR END'GAME'SCREEN     ; ╙HOW END-OF-GAME SCREEN.
  347.                JSR HIGH'SCORE'UPDATE   ; ╒PDATE THE HIGH SCORE IF NEED-BE.
  348.                JSR WAIT'NEXT           ; ╫AIT FOR NEXT-GAME SELECTION.
  349.                LDA QUIT
  350.                BEQ +
  351.                JSR SETUP'LEVEL'1       ; ╙ET-╒P FIRST LEVEL.
  352.                SEC
  353.                BCS LEVEL'LOOP          ; AND START PLAYING IT.
  354.  
  355.              + JMP QUIT'GAME
  356. ;
  357. ; ┼ND OF ═AIN ╠OOP
  358. ;
  359. -------------------------------------------------------------------------------
  360.  
  361.   ╙OME OF THE ROUTINES LISTED ABOVE WE WILL LATER REPLACE WITH ACTUAL CODE. ╔T'S
  362.   MUCH EASIER TO SEE:
  363.  
  364.                INC LEVEL 
  365.  
  366.   THAN TO SEE A 
  367.  
  368.                JSR INCREASE'LEVEL
  369.  
  370.   AND TRY TO HUNT DOWN THE CODE. ╔'VE INCLUDED THEM IN FOR NOW SO THAT WE CAN
  371.   HAVE A BETTER IDEA OF WHAT IS GOING ON.
  372.  
  373.   ╔N THE FILE: INVASION.SRC MOST OF THE STATEMENTS ABOVE ARE COMMENTED OUT. 
  374.   ╧NCE WE WRITE THE ROUTINES WE'LL UN-COMMENT THEM. ╞OR NOW, THIS SERVES TO
  375.   STILL REMIND US OF THE ROUTINES WE NEED TO WRITE.
  376.  
  377.   ┴LSO THERE ARE A COUPLE OF PROGRAMMING TRICKS THAT ╔ USED IN THE MAIN LOOP 
  378.   THAT PROBABLY NEED SOME CLARIFYING.
  379.  
  380.   ╫HEN HANDLING THE COLLISIONS THE .╪ REGISTER IS LOADED WITH THE RESULT OF THE
  381.   COLLISION CHECKING - $00 = NO COLLISIONS, $01 = PLAYER DIED, $02 = ALIEN DIED,
  382.   $03 = END OF LEVEL. ┴NYTIME A LOAD TO A REGISTER IS DONE THE FLAGS ARE 
  383.   AUTOMATICALLY SET AS IF YOU HAD COMPARED IT TO 0 - HENCE WE CAN LDX THE 
  384.   COLLISION FLAG AND IMMEDIATELY BRANCH IF EQUAL TO ZERO FOR NO COLLISIONS. ╔N
  385.   ADDITION TO THE LOAD ANYTIME THE .╪ OR .┘ REGISTERS ARE INCREMENTED OR 
  386.   DECREMENTED AN IMPLICIT COMPARISON TO ZERO IS PERFORMED. ╙O IF THE .╪ REGISTER
  387.   IS 1 PREVIOUSLY, WE DECREMENT IT THEN IT WILL BE ZERO AND OUR ┬┼╤ INSTRUCTION
  388.   WILL BRANCH. ╔F IT'S TWO THEN IT WILL BE ONE AND WE CAN CONTINUE LIKE THIS.
  389.     [╬╧╘┼: ╘ECHNICALLY IT'S NOT A REAL COMPARISON TO ZERO BUT CALLING IT A
  390.     COMPARISON TO ZERO SERVERS OUR PURPOSE HERE. ╘HE ONLY SIGNIFICANT DIFFERENCE
  391.     WOULD BE IN THE EFFECT OF THE CARRY FLAG WHICH IS INSIGNIFICANT IN OUR 
  392.     CODE SEGMENT HERE.]
  393.  
  394.   ┴LSO IN SEVERAL LOCATIONS ARE THE TWO INSTRUCTIONS:
  395.  
  396.                SEC
  397.                BCS [LABEL]
  398.  
  399.   ╫HAT THESE ARE DOING ARE SIMPLY PROGRAMMING STYLE - THEY COULD BE SUBSTITUTED
  400.   WITH ╩═╨ [LABEL] - HOWEVER THEY OFFER ADVANTAGES OVER ╩═╨.  ╘HEY TAKE UP THE
  401.   A LARGER AMOUNT OF EXECUTION TIME, HOWEVER THEY ARE RELOCATABLE SO ANY MUCKING
  402.   AROUND / MOVING SECTIONS OF CODE DURING DEBUGGING WILL BE LESS LIKELY TO
  403.   CRASH. ╒SING OTHER FLAGS ARE ALSO VALID -- THE USE OF WHICH FLAG (╔ PREFER
  404.   THE CARRY FLAG) IS USUALLY DEPENDENT ON THE PROGRAMMER. ╟EOS DEFINES A
  405.   SIMILAIR MACRO CALLED ┬╥┴ (BRANCH ALWAYS) WHICH IS EQUIVLENT TO:
  406.  
  407.                CLV
  408.                BVC [LABEL]
  409.   
  410.   ╬OTE THAT THE ABOVE IS JUST PROGRAMMING STYLE, HELD OVER FROM MY PROGRAMMING
  411.   IN ASSEMBLY DAYS. ╘HE USE OF ╩═╨ IS PROBABLY PREFERABLE IN TERMS OF 
  412.   EXECUTION AND ALSO IN BEING ABLE TO BRANCH MORE THAN 127 BYTES AWAY (THE 
  413.   BRANCH INSTRUCTIONS ONLY HAVE A RANGE OF +128/-127).
  414.  
  415.  
  416. ╓╔. ├USTOM ├HARACTERS
  417.     -----------------
  418.  
  419.   ╙INCE WE'RE WRITING FOR EACH OF THE SEPERATE MODES (64 MODE, 128 MODE) WE HAVE
  420.   TO TAKE A LOOK AT THE DIFFERENCES BETWEEN THE ╓╔├ CHIP (64 MODE) AND THE 8563
  421.   CHIP IN THE 128.  
  422.  
  423.   ╘HE ╓IC-├HIP
  424.   ------------
  425.   ╘HE CHARACTER SETS IN THE ╓╔├ CHIP ARE DEFINED AS IN THE EXAMPLE BELOW OF 
  426.   THE CHARACTER CODE $00 "@" (ALL REFERENCES ARE TO SCREEN "POKE" CODES - NOT
  427.   PRINT CODES).
  428.  
  429.          .BYT #%00111100    ╘RY HOLDING THE PAGE (OR MOVING AWAY FROM THE
  430.          .BYT #%01100110    SCREEN) AND TAKING A LOOK AT THE PATTERNS THE 1'S
  431.          .BYT #%01101110    AND 0'S MAKE. ┼ACH CHARACTER IS THUS DEFINED AS 
  432.          .BYT #%01101110    EIGHT BYTES WHO'S BIT PATTERNS DEFINE IT.  ╚AVING A
  433.          .BYT #%01100000    TOTAL OF 256 CHARACTERS AVAILABLE MAKES IT
  434.          .BYT #%01100010    NECCESARY TO SET ASIDE A TOTAL OF 2,048 BYTES. 
  435.          .BYT #%00111100
  436.          .BYT #%00000000
  437.  
  438.   ╬OW, INSTEAD OF DESIGNING ALL 256 CHARACTER SETS WE'LL JUST TAKE ADVANTAGE OF
  439.   THE FACT THAT THE LETTERS AND NUMBERS WE WANT WILL ALREADY BE THERE -- WE'LL
  440.   JUST COPY THEM FROM THE ╥╧═ SET INTO ╥┴═, MODIFY SOME OF THE OTHER CHARACTERS
  441.   TO REFLECT WHAT WE WANT AND THEN TELL THE ╓╔├ CHIP TO LOOK AT ╥┴═ TO GET THE
  442.   CHARACTER SET DEFINITIONS.
  443.  
  444.   ╘HERE ARE SOME PROBLEMS WITH COPYING THE 'SYSTEM' CHARACTERS, HOWEVER. ╘HE
  445.   ├OMMODORE 64 USUALLY MASKS OUT THE CHARACTER SET AND TYPICALLY IT IS ONLY
  446.   AVAILABLE TO THE ╓╔├ CHIP SO THAT MORE SPACE CAN BE PRESENT FOR USER PROGRAMS
  447.   AND SUCH.  ╔T ALSO TAKES UP THE SECTION OF MEMORY THAT THE ╔/╧ BLOCK IN 
  448.   $D000-$DFFF DOES SO THAT SWITCHING IT IN WHILE INTERRUPTS ARE ENABLED IS SURE
  449.   TO RESULT IN A CRASH. 
  450.  
  451.   ╫E'RE ALSO GOING TO BE DOING A FEW THINGS THAT YOU MAY NOT EXPECT -- INSTEAD
  452.   OF COPYING ALL 256 CHARACTERS - WE'RE GONNA _JUST_ COPY THE FIRST 128. ╘HIS
  453.   WILL GIVE US ALL OF THE NORMAL CHARACTERS AS THE LAST 128 ARE THE REVERSE-
  454.   VIDEO COUNTERPARTS TO THE FIRST 128 CHARACTERS. ╫E'RE DOING THIS TO CONSERVE
  455.   SPACE AND BECAUSE WE REALLY DON'T NEED THAT MANY CHARACTERS DEFINED.
  456.  
  457.   ┴LSO LOCATION $01 CONTAINS WHAT $D000-$DFFF HOLDS AND WE WILL HAVE TO MODIFY
  458.   BIT 2 TO SWITCH THE CHARACTER ╥╧═ IN. ╚ENCE, THE FOLLOWING PROGRAM CODE IS
  459.   USED TO COPY THE CHARACTER SET:
  460.  
  461. -------------------------------------------------------------------------------
  462. COPY'CHARS = *                 ; MUST BE RUN W/ INTERRUPTS DISABLED
  463.                LDA $01         ; REGISTER 1 = THE CONTROL TO SWITCH IN THE CHAR.
  464.                                ; ROM.
  465.                PHA             ; SAVE IT AS WE'LL LATER NEED TO STA' IT BACK.
  466.                AND #%11111011  ; ┬IT 2 CONTROLS IT - CLEAR IT TO SWITCH IT IN.
  467.                STA $01         ; AND MAKE IT SO WE CAN READ IT IN.
  468.                LDA #>$3000     ; MOVE CHARS TO $3000
  469.                STA DEST+1
  470.                LDA #>$D800     ; FROM $D800 (START OF CHAR SET) (LOWER-CASE)
  471.                STA SRC+1
  472.                LDY #$00        ; LO-BYTES OF BOTH SRC, DEST = $00.
  473.                STY SRC
  474.                STY DEST
  475.                LDX #$10        ; COPY 2K OF DATA.
  476.              - LDA (SRC),Y     ; COPY BYTE.
  477.                STA (DEST),Y
  478.                INY
  479.                BNE -           ; CONTINUE UNTIL .┘ = 0.
  480.                INC SRC+1       ; INCREASE SOURCE & DEST BY 256
  481.                INC DEST+1
  482.                DEX             ; DECREASE .╪ COUNT.
  483.                BNE -           ; IF NON-ZERO THEN CONTINUE COPYING, ELSE
  484.                PLA             ; RESTORE VALUE OF $01 
  485.                STA $01         ; AND PUT BACK.
  486.                LDA $D018       ; SET ╓╔├-CHIP ADDRESS.
  487.                AND #$F1        ; TO SHOW CHAR SET.
  488.                ORA #$0C       
  489.                STA $D018       ; AND FINALLY TELL ╓╔├ WHERE THE CHAR SET IS...
  490.                RTS             ; AND RETURN.
  491. -------------------------------------------------------------------------------
  492.   
  493.   ╬OTE THAT WE STILL NEED TO CHANGE THE ACTUAL CHARACTERS WE'RE GONNA BE USING.
  494.   ╘HAT WILL BE HANDLED IN THE SECTION AFTER NEXT: ├HANGING THE ├HARACTERS AS 
  495.   THERE IS A GREAT DEAL OF SIMILARITY BETWEEN THE 128 AND 64 IMPLEMENTATIONS.
  496.  
  497.   ╘HE 8563 ├HIP
  498.   -------------
  499.   ╘HE 8563 80-├OLUMN CHIP USUALLY HAS 16K OR 64K ╥AM ATTATCHED TO THE CHIP 
  500.   WHICH THE ├╨╒ DOES NOT HAVE DIRECT CONTROL OVER. ╔T HAS TO DIRECT THE 8563 
  501.   TO STORE AND RETRIEVE VALUES TO THAT MEMORY. ╫HAT MAKES CONTROL OVER THAT 
  502.   MEMORY ALL THE MORE DIFFICULT IS THE FACT THAT THE 8563 ONLY HAS TWO LINES
  503.   OR ADDRESSES THAT THE ├╨╒ CAN CONTROL.  
  504.  
  505.   ╘HE 8563 HAS A CHARACTER SET IN MUCH THE SAME WAY THE ╓╔├ CHIP DOES, SAVE
  506.   ONE EXCEPTION - EACH CHARACTER SET CAN HAVE UP TO 16 LINES. ╬ORMALLY, THE LAST
  507.   EIGHT LINES ARE FILLED WITH $00 AND ARE NOT SHOWN. (╨ROVISIONS CAN BE MADE TO
  508.   HAVE 8X16 CHARACTERS BUT IT IS NOT NEEDED FOR THIS GAME AND THUS, WILL NOT BE
  509.   SHOWN - ╞OR MORE INFORMATION ╙EE ├= ╚ACKING ╔SSUE #2: 8563: ┴N ╔N-─EPTH ╠OOK.)
  510.   ╘HUS THE ALGORITHIM IS SIMILAIR TO THE ├=64 BUT 8 ZERO-BYTES WILL NEED TO BE
  511.   WRITTEN AT THE END OF EVERY EIGHT BYTES READ.
  512.  
  513.   ╚OWEVER, THE 8563 DOES MAKE THINGS EASIER FOR US! - ╫HEN THE COMPUTER IS FIRST
  514.   TURNED ON A COPY OF THE ├HARACTER ╙ET FROM ╥╧═ IS COPIED INTO THE 8563. ╘HE
  515.   8563 HAS NO ╥╧═ ├HARACTER ╙ET ASSOCIATED WITH IT AND THUS WE ARE ABLE TO JUST
  516.   SIMPLY MODIFY THE CHARACTER SET THAT IS IN THE 8563 MEMORY INSTEAD OF COPYING
  517.   IT OVER.  ┬ECAUSE OF THIS NO ROUTINE WILL BE PRESENTED TO COPY A CHARACTER
  518.   SET INTO THE 8563 MEMORY, RATHER THE DISCUSSION OF COPYING INDIVIDUALLY 
  519.   DEFINED CHARACTERS WILL TAKE PLACE IN THE NEXT SECTION. ╘HE ├=128 ALSO MAKES
  520.   LIFE EVEN EASIER FOR US AT THE END WHEN WE WILL EXIT THE PROGRAM, 
  521.   MODIFYING THE CHARACTER SET BACK TO THE "STANDARD" ├OMMODORE CHARACTER SET
  522.   BY A ROUTINE IN THE ╦┼╥╬┴╠ THAT WILL COPY THE CHARACTERS BACK. ╫E'LL TAKE A
  523.   LOOK AT IT CLOSER WHEN WE WRITE THE EXIT ROUTINE.
  524.  
  525.   ┴LSO NOTE THAT SINCE THE 8563 CHIP SUPPORTS THE 80 COLUMN SCREEN WE WILL
  526.   BE DEFINING TWO CHARACTERS THAT CAN BE PLACED SIDE BY SIDE FOR EACH ALIEN
  527.   SO THAT THE PLAYING FIELD WILL BE SIMILAIR TO THE ├64 VERSION. ╚OWEVER, FOR
  528.   THE TITLE SCREEN WE WILL BE SWITCHING THE 8563 INTO A "40 COLUMN" MODE
  529.   TO MAKE PROGRAMMING EASIER, IN ADDITION TO EXPANDING THE CHARACTER BIT-MAPPED
  530.   LOGO.
  531.   
  532.   ├HANGING THE ├HARACTERS
  533.   -----------------------
  534.   ┴ LOT OF THE TIMES YOU'LL FIND YOURSELF RE-USING SUBROUTINES AND CODE THAT
  535.   YOU HAVE PREVIOUSLY CREATED, GRADUALLY, OVER A PERIOD OF TIME BUILDING UP
  536.   A LIBRARY OF ROUTINES. ╫HEN THINKING THROUGH THE PURPOSE AND INTENT OF THIS
  537.   ROUTINE ╔ THOUGHT ABOUT POSSIBLY BUILDING IT SO IT WOULD READ A TABLE AND
  538.   CHANGE THE CHARACTER SET BASED ON THAT TABLE. ╘HE 64/128 CHARACTER SETS
  539.   WOULD BE THE SAME - THIS ROUTINE WOULD AUTOMATICALLY GENERATE THE EIGHT 
  540.   ADDITIONAL BYTES NEEDED BY THE 8563 IF NEED-BE AND IT WOULD CALL THE 
  541.   APPROPRIATE STORAGE ROUTINE - STORE TO EITHER THE 8563 OR THE COMPUTER
  542.   MEMORY. 
  543.  
  544.   ╬OW YOU MAY BE ASKING WHY WOULD YOU WANT TO STORE TO THE COMPUTER MEMORY
  545.   IN 128 MODE? ╫HY NOT JUST HAVE TWO SEPERATE VERSIONS? - ┘ES - THAT COULD
  546.   BE POSSIBLE BUT ╔'M IMPLEMENTING IT THIS WAY BECAUSE IN THE FUTURE ╔ MAY
  547.   SEE A NEED TO DEFINE CUSTOM CHARACTERS IN 128 MODE FOR THE 40 COLUMN SCREEN.
  548.   ╘HIS WAY ╔ CAN JUST EXTRACT THE ROUTINE, POP IT INTO MY PROGRAM AND ╔'VE GOT
  549.   THAT SECTION OF THE CODE COMPLETE. 
  550.  
  551.   ╘HIS IS WHAT ╔ WAS THINKING OF FOR THE DATA TABLE:
  552.  
  553.       .BYT 1 = 8563, 0 = COMP. MEMORY.
  554.       .WORD ADDRESS ; ADDRESS BASE OF CHAR-SET IN COMPUTER OR 8563 MEMORY.
  555.       .BYTE CHAR #  ; (TO START)
  556.       .BYTE # OF CHARS TO DEFINE
  557.       .BYTE # OF CHARACTERS TO DEFINE
  558.       .BYTE DATA,DATA,....,DATA8 ; CHARACTER DATA.
  559.       .BYTE DATA,DATA,....,DATA8 ; CHARACTER DATA. ETC....
  560.       . . .
  561.    
  562.   ┼NTRANCE INTO THE ROUTINE WILL CONSIST OF .┴┘ HOLDING THE LOCATION OF THE 
  563.   TABLE.  ╫E WILL KEEP THE ADDRESS OF THE TABLE AND KEEP INCREMENTING IT AS
  564.   WE GO ALONG IN Z-PAGE LOCATIONS.
  565.  
  566. -------------------------------------------------------------------------------
  567.        INSTALL'CHAR = *
  568.                STA ZP1                 ; SAVE .AY IN TABLE ADDRESS
  569.                STY ZP1+1
  570.                LDY #$00                ; READ COMPUTER MODE.
  571.                JSR GET'BYTE
  572.                STA MODE
  573.                JSR GET'BYTE            ; GET ADDRESS BASE.
  574.                STA ADR
  575.                JSR GET'BYTE
  576.                STA ADR+1
  577.                JSR GET'BYTE            ; GET NUMBER OF CHARACTERS TO COPY.
  578.                STA NUMB            
  579.                JSR GET'BYTE            ; GET NEXT CHARACTER #.  
  580.                STA WRK                 ; SAVE IN TEMP. LOCATION.
  581.                LDA #$00
  582.                STA WRK+1
  583.                ASL WRK                 ; SHIFT LEFT X3 TIMES = *8
  584.                ROL WRK+1
  585.                ASL WRK
  586.                ROL WRK+1
  587.                ASL WRK
  588.                ROL WRK+1
  589.                LDA MODE                ; IF FOR 8563 THEN MULTIPLY 1 MORE TIME.
  590.                BEQ +      
  591.                ASL WRK
  592.                ROL WRK+1
  593.              + LDA ADR                 ; ADD CHARACTER ADDRESS IN.
  594.                CLC
  595.                ADC WRK
  596.                STA WRK
  597.                LDA ADR+1
  598.                ADC WRK+1
  599.                STA WRK+1               ; ADDRESS NOW CALCULATED
  600.                JSR SETADRS             ; SET ADDRESS IN PROPER CHIP
  601.   LOOP'INSTALL LDX #$08                ; COPY 8 BYTES.
  602.              - JSR GET'BYTE
  603.                JSR WRITEBYTE           ; WRITE OUT BYTE.
  604.                DEX
  605.                BNE -
  606.                LDA MODE                ; IF 128 THEN FILL OUT 8 MORE $00 BYTES.
  607.                BEQ +
  608.                LDA #$00
  609.                LDX #$08
  610.              - JSR WRITEBYTE
  611.                DEX
  612.                BNE -
  613.              + DEC NUMB
  614.                BNE LOOP'INSTALL
  615.                RTS       
  616. -------------------------------------------------------------------------------
  617.  
  618.   ╫HAT? ╫E HAVE THRE SUBROUTINES : WRITEBYTE, SETADRS, AND GET'BYTE THAT WE
  619.   HAVEN'T EXAMINED YET. ╘HESE ARE GOING TO BE THE ROUTINES THAT ARE DEPENDANT
  620.   ON THE COMPUTER TYPE. ┴LSO, WRITEBYTE WILL REQUIRE THAT .╪┘ NOT BE DISTURBED;
  621.   SETADRS REQUIRES THAT .┘ NOT BE DISTURBED HENCE THE FOLLOWING:
  622.  
  623. -------------------------------------------------------------------------------
  624.        SETADRS TYA             ; SAVE .YX
  625.                PHA
  626.                TXA
  627.                PHA
  628.                LDA MODE        ; CHECK COMPUTER TYPE.
  629.                BEQ +           ; IF ├=64, THEN JUMP AHEAD.
  630.                LDX #18         ; ╓─├ REGISTER - CURRENT MEMORY ADDRESS HI
  631.                LDA WRK+1       ; GET ADDRESS HI
  632.                JSR WR'VDC
  633.                LDX #19         ; ╓─├ REGISTER - CURRENT MEMORY ADDRESS LO
  634.                LDA WRK         ; GET ADDRESS LO
  635.                JSR WR'VDC
  636.              + PLA             ; RESTORE .╪┘
  637.                TAX
  638.                PLA
  639.                TAY
  640.                RTS             ; AND RETURN.
  641. -------------------------------------------------------------------------------
  642.   
  643.   ╬OTE THAT WE REALLY DON'T NEED A SETADRS FOR THE ├=64 -- WE CAN JUST INDEX 
  644.   OFF (WRK) IN THE WRITEBYTE ROUTINE WHICH FOLLOWS:
  645.  
  646. -------------------------------------------------------------------------------
  647.   WRITEBYTE    STA TEMP        ; SAVE AS WE NEED IT LATER.
  648.                TXA             ; ╙AVE .╪┘
  649.                PHA
  650.                TYA
  651.                PHA
  652.                LDA MODE        ; NOW CHECK COMPUTER TYPE.
  653.                BEQ +           ; IF C64 JUMP AHEAD
  654.                LDA TEMP        ; RECALL TEMP.
  655.                JSR WR'VRAM 
  656.                SEC
  657.                BCS ++          ; JUMP AHEAD
  658.              + LDY #$00        ; ├64 / Y-INDEX = $00
  659.                LDA TEMP        ; GET VALUE
  660.                STA (WRK),Y     ; STORE
  661.                INC WRK         ; NOW INCREASE ADDRESS
  662.                BNE +
  663.                INC WRK+1
  664.              + PLA             ; NOW RETURN AFTER RECALLING .╪┘
  665.                TAY
  666.                PLA
  667.                TAX
  668.                RTS             ; AND RETURN.
  669. -------------------------------------------------------------------------------
  670.  
  671.   ╬OTE THAT THE FOLLOWING ROUTINE IS FAIRLY SHORT BUT IT IS CALLED NUMEROUS
  672.   TIMES WITHIN THE ROUTINES THAT USE DATA TABLES SUCH AS INSTALL'CHAR, 
  673.   WRITE'TXT AND WRITE'COL. 
  674.  
  675. -------------------------------------------------------------------------------
  676.   GET'BYTE = *
  677.                LDA (ZP1),Y
  678.                INY
  679.                BNE +           ; IF ZERO THEN INCREASE ZP1 HI
  680.                INC ZP1+1
  681.              + RTS
  682. -------------------------------------------------------------------------------
  683.  
  684.   ╬OT BAD 'EH?  ┴ QUICK NOTE: ╘HE INSTRUCTIONS: ╨╠┴, ╘┴┘, ╨╠┴, ╘┴╪, ╨╚┴, ETC.. 
  685.   ARE ROUTINES THAT ╨USH OR ╨ULL (PHA,PLA) THE .┴ ONTO THE STACK. ╘HE ╘┴┘, ╘┴╪,
  686.   ╘╪┴, ╘┘┴ ARE INSTRUCTIONS THAT TRANSFER A REGISTER TO ANOTHER (IE: THE ╘┴┘
  687.   TRANSFERS THE ┴ REGISTER TO .┘, ╘╪┴ TRANSFERS .╪ TO .┴ ETC...) ┬Y USING THE
  688.   COMBINATION OF THESE WITH THE STACK WE CAN SAVE THE REGISTERS AND LATER
  689.   RE-CALL THEM SO THAT THEY ARE THE SAME WHEN WE ENTERED THE ROUTINE. ╘HE
  690.   STACK IS USUALLY A "MYSTERY" ITEM TO NEW PROGRAMMERS OF THE 6502 SERIES. 
  691.   ┬ASICALLY IT'S JUST LIKE ANY OTHER STACKS IN THE REAL WORLD - THE LAST ITEM
  692.   THROWN (╔'M NON-PRACTICING PERFECTIONIST SO ╔ THROW STUFF.. ;-) ) OR PUSHED
  693.   ON THE STACK WILL THE FIRST ITEM REMOVED OR PULLED FROM THE STACK. ╞OR 
  694.   EXAMPLE ╔'VE GOT A STACK OF BOOKS SITTING NEAR ME :
  695.  
  696.                ═APPING THE ├OMMODORE 128
  697.                128 ╔NTERNALS
  698.  
  699.   AND ╔'M HOLDING ═APPING THE ├OMMODORE 64 IN MY HANDS. ╔F ╔ PUSH (OR TOSS)
  700.   THE BOOK ONTO THE STACK (AND HOPEFULLY HIT THE STACK INSTEAD OF THE FLOOR)
  701.   ╔'LL HAVE THE FOLLOWING STACK:
  702.  
  703.                ═APPING THE ├OMMODORE 64
  704.                ═APPING THE ├OMMODORE 128
  705.                128 ╔NTERNALS
  706.  
  707.   AND IT SHOULD BE EASY TO SEE THAT IF ╔ "PULL" THE NEXT BOOK OFF THE STACK
  708.   THAT ╔'LL GET THE ═APPING THE ├OMMODORE 64 BOOK. ╘HE NEXT BOOK TO BE "PULL"ED
  709.   AFTER THAT WOULD BE THE ═APPING THE ├OMMODORE 128 BOOK. ╘HIS IDEA CAN BE
  710.   APPLIED TO THE 6502 STACK -- ╔T WILL KEEP STORING VALUES (UP TO 256) WHEN YOU
  711.   "PUSH" THEM ON (VIA THE ╨╚┴ INSTRUCTION) AND WILL RETRIEVE THE LAST VALUE
  712.   STORED WHEN YOU "PULL" THEM OFF (VIA THE ╨╠┴ INSTRUCTION). ┴NOTHER ╨╠┴
  713.   INSTRUCTION WOULD RETURN THE NEXT VALUE THAT HAD BEEN STORED.
  714.  
  715.   ╘HE ├HARACTER ┬ITMAPS
  716.   ---------------------
  717.  
  718.   ╨ASI ╧JALA IS TO BE CREDITED WITH ALL THE GRAPHICS AND MANY THANKS GO OUT
  719.   TO HIM.
  720.  
  721.   ╘HE GAME LOGO IS MADE UP OF 120 CUSTOM DEFINED CHARACTERS THAT WILL BE 
  722.   PRINTED IN THE FOLLOWING MANNER (ON THE 128 SCREEN THEY WILL BE CENTERED).
  723.  
  724.   (IN REVERSE VIDEO)...
  725.  
  726.            ┴┬├─┼╞╟╚ . . . [UP TO 40 CHARACTERS]
  727.            ╔╩╦╠═╬╧╨
  728.            ╤╥╙╘╒╓╫╪    
  729.  
  730.   AND EVERYTHING WILL LINE UP.
  731.  
  732.   ╙O THAT IT WILL LOOK LIKE A "MINI-BITMAP".  ╫E COULD HAVE USED BITMAP MODE
  733.   AND MADE A VERY NICE LOOKING TITLE SCREEN BUT THAT WOULD HAVE INVOLVED 
  734.   SWITCHING AND ALLOCATING MEMORY FOR THE BITMAP, ETC . . . ╧N BOTH THE
  735.   8563 AND THE ╓╔├ THAT INVOLVES A BIT MORE WORK AND SO CUSTOM CHARACTERS
  736.   WILL BE USED FOR THE TITLE SCREEN. ╘HE REGULAR LETTER AND NUMERIC CHARACTERS
  737.   WILL BE AVAILABLE SO THAT WE CAN DISPLAY CREDITS AND GAME INSTRUCTIONS
  738.   BELOW THE LOGO.
  739.  
  740.   ╬OW - IN THE PROGRAM LISTING WE COULD LIST THEM AS BINARY #'S AND THAT WOULD
  741.   MAKE EDITING THEM VERY EASY BUT WE'RE GONNA USE THEIR DECIMAL REPRESENTATION
  742.   IN THE PROGRAM LISTING.
  743.  
  744.   ╘HE CHARACTERS ARE DEFINED SIMILAIR TO THE LOGO EXCEPT THEY ARE TREATED AS
  745.   SINGLE CHARACTERS. ╔N THE 128 VERSION DUE TO THE 80 COLUMN SCREEN WE ARE
  746.   GOING TO USE TWO CHARACTERS SIDE BY SIDE TO SIMULATE ONE ALIEN SO THAT THE
  747.   PLAYING FIELD WILL BE SIMILAIR TO THE ├64 VERSION. ╔N ADDATION, DURING THE
  748.   MAIN LOOP WE WILL MODIFY THE CHARACTER SETS TO SUPPORT ANIMATION OF THE 
  749.   ALIENS. ╔N THE DATA LISTING THERE IS A REFERENCE TO "FRAMES" - FOR EACH OF
  750.   THE ALIENS THERE ARE 8 DIFFERANT FRAMES.
  751.  
  752.   ╧H! - ╘HERE WILL BE MORE CHARACTERS DEFINED IN THE FUTURE. ╥IGHT NOW ╔'M 
  753.   MAINLY INTERESTED IN GETTING SOME BASE CHARACTERS DOWN SO YOU CAN SEE HOW
  754.   CUSTOM CHARACTERS ARE IMPLEMENTED.  ╫HEN WE START SETTING UP DIFFERENT LEVELS
  755.   AND SUCH WE'LL ADD MORE CHARACTERS THEN. ├URRENTLY THE CUSTOM CHARACTERS
  756.   ARE NOT USED - ONLY THE CHARACTERS FOR THE LOGO. ╞OR THOSE OF YOU WHO ARE
  757.   CURIOUS TRY INSTALLING THE CHARACTERS VIA INSTALL'CHAR AND TAKING A LOOK
  758.   AT THE ALIENS.
  759.  
  760.  
  761. ╓╔╔. ╘ITLE ╙CREEN
  762.      ------------
  763.  
  764.   ╘HE TITLE SCREEN IS USUALLY A LEAD-IN TO THE ACTUAL GAME AND IT'S AIM IS
  765.   TO TELL THE PLAYER HOW TO PLAY THE GAME, ANY AVAILABLE OPTIONS AND P'HAPS
  766.   PRESENT A NICE GRAPHIC OR TWO TO "WOW" THE USER INTO PLAYING. ╔N ADDATION,
  767.   THE MAIN MUSICAL THEME CAN BE INTRODUCED HERE TO UNIFY THE GAME-PLAYING.
  768.   ╘HE DISCUSSION BELOW DOES NOT TAKE INTO ACCOUNT COLOR BUT REST-ASSURED WE
  769.   WILL BE USING VARYING COLORS IN THE TITLE SCREEN. ╘HE FORMAT FOR THE COLOR
  770.   DATA WILL BE ALMOST IDENTICAL TO THE TITLE SCREEN FORMAT EXCEPT IT WILL
  771.   BE STRUCTURED VIA THE FOLLOWING:
  772.  
  773.        .WORD ADDRESS
  774.        .BYTE NUM_OF_CHARS TO PUT COLOR ($00= END OF DATA)
  775.        .BYTE COLOR_VALUE
  776.  
  777.   ╘HE ROUTINE (COLOR'TEXT) CAN BE FOUND IN THE SOURCE LISTINGS AT THE END OF
  778.   THIS ARTICLE. ┬ECAUSE OF THE SIMILARITY BETWEEN IT AND WRITE'TEXT IT IS
  779.   NOT DISCUSSED IN THIS ARTICLE.
  780.  
  781.