home *** CD-ROM | disk | FTP | other *** search
- ########
- ##################
- ###### ######
- #####
- ##### #### #### ## ##### #### #### #### #### #### #####
- ##### ## ## #### ## ## ## ### ## #### ## ## ##
- ##### ######## ## ## ## ##### ## ## ## ## ##
- ##### ## ## ######## ## ## ## ### ## ## #### ## ##
- ##### #### #### #### #### ##### #### #### #### #### #### ######
- ##### ##
- ###### ###### ╓OLUME 1, ╔SSUE #4
- ################## ╧CTOBER 5, 1992
- ########
-
- -----------------------------------------------------------------------------
- ┼DITOR'S ╬OTES:
- BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
-
- ═Y APOLOGIES ABOUT THIS ISSUE BEING POSTED LATER THAN WAS MENTIONED IN A
- PREVIEW POST ON COMP.SYS.CBM NEWSGROUP. ─UE TO SOME PROBLEMS WITH CODING,
- SCHOOL AND ═URPHY'S LAW THE ISSUE HAD TO BE DELAYED UNTIL NOW.
-
- ╔ HAVE ASKED THE SYSTEM ADMIN'S AT MY SITE CONCERNING A MAIL-SERVER BUT THEY
- SAID THEY DID NOT HAVE ENOUGH MAN-POWER (GO FIGURE) TO GET SOMEBODY TO RUN IT.
- ╔ WILL BE IMPLEMENTING A MAIL-SERVER SYSTEM IN MY ACCOUNT IN THE NEAR
- FUTURE FOR RETRIEVAL OF PROGRAMS AND BACK-ISSUES. ╔'LL POST DESCRIPTIONS OF
- HOW TO USE IT IT THE NEXT ISSUE OF ├= ╚ACKING AS WELL AS ON THE NEWSGROUP
- COMP.SYS.CBM WHEN ╔ FINISH WRITING IT.
-
- ╔N THIS ISSUE OF ├= ╚ACKING WE ALSO START ON AN AMBITIOUS TASK: ─EVELOPING
- A GAME FOR BOTH THE ├128 AND ├64 MODES THAT INCLUDES ALL OF THE FEATURES
- FOUND IN COMMERCIAL GAMES. ╘AKE A LOOK IN THE ╠EARNING ═╠ ├OLUMN FOR MORE
- INFORMATION.
-
- ┴LSO, ╘HE ARTICLE CONCERNING THE 1351 MOUSE HAS _AGAIN_ BEEN DELAYED DUE
- TO TIME CONSTRAINTS. ╥EST ASSURED THAT IT WILL BE IN THE NEXT ISSUE OF
- ├= ╚ACKING.
-
- ╔F YOU ARE INTERESTED IN HELPING WRITE FOR ├= ╚ACKING PLEASE FEEL FREE TO
- MAIL DUCK@PEMBVAX1.PEMBROKE.EDU (OR DUCK@HANDY.PEMBROKE.EDU). ╫E'RE ALWAYS
- LOOKING FOR NEW AUTHORS ON ALMOST ANY SUBJECT, SOFTWARE OR HARDWARE.
-
- ================================================================================
-
- ┴LSO NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS FTP FROM
- CCOSUN.CALTECH.EDU UNDER PUB/RKNOP/╚┴├╦╔╬╟.═┴╟.
-
- ================================================================================
-
- ╬╧╘╔├┼: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN
- WHOLE, FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL
- AUTHORS FOR PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
-
- *** ┴╒╘╚╧╥╙ ╠╔╙╘┼─ ┬┼╠╧╫ ╥┼╘┴╔╬ ┴╠╠ ╥╔╟╚╘╙ ╘╧ ╘╚┼╔╥ ┴╥╘╔├╠┼╙ ***
-
- ================================================================================
- ╔N THIS ISSUE:
-
- ╠EARNING ═╠ - ╨ART 4
-
- ╔N THE NEXT ISSUE WE'LL EMBARK ON A PROJECT OF MAKING A SPACE INVADERS STYLE
- GAME FOR THE ├=64/128 FROM SCRATCH USING CUSTOM CHARACTERS, INTERRUPT-DRIVEN
- MUSIC, ANIMATION, USING THE JOYSTICK, MOUSE OR KEYBOARD. ╘HE ├64 AND ├128
- VERSIONS WILL BE DEVELOPED CON-CURRENTLY, EACH PROGRAM TAKING ADVANTAGE OF
- THE MACHINE'S CAPABILITIES. ╘HIS IS THE FIRST IN A SERIES - WRITTEN BY
- ├RAIG ╘AYLOR.
-
- ╘HE ─EMO ├ORNER: ╞╠╔ - MORE COLOR TO THE SCREEN
-
- ┴LL OF US HAVE HEARD COMPLAINTS ABOUT THE COLOR CONSTRAINTS ON ├64.
- ╞╠╔ PICTURE CAN HAVE ALL OF THE 16 COLORS IN ONE CHARACTER POSITION.
- ╫HAT THEN IS THIS ╞╠╔ AND HOW IT IS DONE ? ╫RITTEN BY ╨ASI '┴LBERT' ╧JALA.
-
- ╥╙-232 ├ONVERTER
-
- ╘HIS ARTICLE DETAILS PLAN FOR A ╒SER PORT ╘╧ ╥╙232 CONNECTOR USING JUST ╧╬┼
- ╔├ AND 4 CAPACITORS. ╘HE CIRCUIT IS INCLUDED, AND SUGGESTIONS ON ALTERNATIVE
- CHIPS AND PARTS ARE EXAMINED. ╫RITTEN BY ╫ARREN ╘USTIN
-
- ╔NTRODUCTION TO THE ╓╔├-╔╔
-
- ╘HIS ARTICLE EXAMINES THE ╓╔├-╔╔ CHIP IN DETAIL AND PROVIDES AN EXPLANATION
- OF THE VARIOUS REGISTERS ASSOCIATED WITH THE CHIP. ╫RITTEN BY ╨ASI '┴LBERT'
- ╧JALA.
-
- ╠╔╘╘╠┼ ╥┼─ ╥┼┴─┼╥: ═╙-─╧╙ FILE READER FOR THE 128 AND 1571/81 DRIVES.
-
- ╘HIS ARTICLE PRESENTS A PROGRAM THAT READS ═╙-─╧╙ FILES AND THE ROOT DIRECTORY
- OF ═╙-─╧╙ DISKS. ╘HIS PROGRAM COPIES FILES FROM DISK TO DISK SO TWO DISK
- DRIVES ARE REQUIRED TO USE IT (OR A "VIRTUAL" DRIVE). ╘HIS SCHEME IMPOSES NO
- LIMIT ON THE MAXIMUM SIZE OF A FILE TO BE TRANSFERRED. ╘HE USER-INTERFACE
- CODE IS WRITTEN IN ┬┴╙╔├ AND PRESENTS A FULL-SCREEN FILE SELECTION MENU. ╘HE
- GRUNT-WORK CODE IS WRITTEN IN ASSEMBLY LANGUAGE AND OPERATES AT MAXIMUM
- VELOSITY. ├OMPLETE, EXPLAINED CODE LISITINGS ARE INCLUDED. ┬Y ├RAIG ┬RUCE.
-
- =============================================================================
- ╠EARNING ═ACHINE ╠ANGUAGE - ╨ART 4
- BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
-
- +---------------------------+
- ▄ ╙PACE ╔NVASION - ╨ART 1 ▄
- ▄ ▄
- ▄ ╨ROGRAMMING: ├RAIG ╘AYLOR ▄
- ▄ ╟RAPHICS : ╨ASI ╧JALA ▄
- ▄ ═USIC/╙OUND: ▄
- ▄ ▄
- +---------------------------+
-
- ╔. ╔NTRODUCTION
- ------------
-
- ╔N THIS AND FUTURE ╠EARNING ═ACHINE ╠ANGUAGE'S WE WILL DEVELOP A GAME CALLED
- ╙PACE ╔NVASION. ╘HE GAME WILL BE SIMILAIR TO ╙PACE ╔NDVADERS AND WILL RUN ON
- THE ├OMMODORE 64 OR THE ├OMMODORE 128 IN 80 COLUMNS. ╔T WILL FEATURE ALL THE
- "FEATURES" AND "PARTS" THAT ARE FOUND IN COMMERCIAL GAMES WITH INTERRUPT-
- DRIVEN MUSIC, CUSTOM CHARACTER DEFINITIONS, 100% MACHINE LANGUAGE, MULTI-LEVEL
- GAME PLAY, AND INPUT FROM THE KEYBOARD, JOYSTICK OR MOUSE.
-
- ╬OTE ▄ ╔ AM LOOKING FOR SOMEONE TO HELP AID MUSIC COMPOSITION THAT WILL
- -----+ BE INTRODUCED IN A LATER ISSUE. ╨ROGRAMMING OF THE 6502 IS HELPFUL
- BUT NOT A REQUIREMENT. ╨LEASE EMAIL ME AT DUCK@PEMBVAX1.PEMBROKE.EDU IF
- YOU ARE INTERESTED.
-
- ═ANY THANKS TO ╨ASI ╧JALA FOR HIS WORK WITH THE GRAPHICS IN THIS PROGRAM.
-
- ┴LSO PLEASE NOTE: ╘HIS ENTIRE PROGRAM HAS BEEN ASSEMBLED SUCESSFULLY WITH
- THE ┬UDDY-128 ASSEMBLER FOR BOTH THE ├=128 AND ├=64 VERSION. ─UE TO THE
- LENGTH OF THE SOURCE FILES (OVER 1,500 LINES) ╔'M NOT SURE IF ┬UDDY-64 WILL
- HANDLE IT. ╘HUS IF YOU GET ERRORS DURING ASSEMBLY, ALL ╔ CAN SAY IS: SORRY.
- ╔F THIS IS THE CASE THEN THE NEXT ISSUE WILL HANDLE DIVIDING THE PROGRAM AND
- DATA UP INTO SEGMENTS WHICH CAN THEN EACH BE LOADED SEPERATLY.
-
-
- ╔╔. ═ACHINE ╬OTES
- -------------
-
- ╘HE ├OMMODORE 64 AND 128 PROGRAMS FOR ╙PACE ╔NVASION WILL DIFFER SLIGHTLY,
- MOSTLY IN THE FOLLOWING AREAS:
-
- - CUSTOM CHARACTER DEFINITION
- - MEMORY INITIALIZATION / SETUP
- - SOUND / MUSIC
-
- ┬ECAUSE THE ACTUAL GAME PLAY AND THE CHANGES NESSCESARY BETWEEN THE AREAS
- LISTED ABOVE, WE WILL USE THE ┬UDDY ┴SSEMBLER NOTATION FOR CONDITIONAL
- ASSEMBLY TO ALLOW THE DEVELOPMENT OF ONLY ONE FILE CONTAINING THE SOURCE
- CODE. ╔N ADDITION TO CONDITIONAL ASSEMBLY MOST OF THE ROUTINES WILL BE
- WRITTEN AS ONE WITH JUMPS TO SUBROUTINES CONTAINING THE ├64 OR 128 DIRECT
- CODE AS THE ALGORITHIMS ARE USUALLY THE SAME FOR EACH.
-
- ╔N ADDATION THERE WILL BE SEVERAL SOURCE FILES AND SOME MISCELLANEOUS INCLUDE
- FILES FOR GRAPHICS AND SOUND. ╞OR THOSE OF YOU WHO ARE OR WILL BE CONVERTING
- THE ASSEMBLY SOURCE OVER TO A DIFFERENT ASSEMBLER THE CONDITIONAL
- ASSEMBLY DIRECTIVES .IF (CONDITION) WILL ONLY BE TRUE IF THE CONDITION IS
- NON-ZERO. ╔E: IF THE SYMBOL COMPUTER IS DEFINED AS 128 THEN THE FOLLOWING
- EXAMPLE ILLUSTRATES IT:
-
- COMPUTER = 128
- .IF COMPUTER-64 ; NON-ZERO ANSWER SO THEREFORE
- ; 128 CODE GOES HERE
- .ELSE
- ; 64 CODE GOES HERE
- .IFE ; END THE .IF CONDITION.
-
- ┴LSO NOTE THAT FOR MUCH OF THE PROGRAM WE WILL _NOT_ BE USING THE COMPUTER
- ROUTINES AND INSTEAD BE DEVELOPING OUR OWN.
-
- ╔N ADDITION THE PROGRAM WILL SHOW YOU HOW TO USE ╔╥╤ INTERRUPTS TO SIMPLIFY
- PROGRAMMING. ╫E WILL BE USING THEM TO PLAY MUSIC IN THE BACKGROUND ON THREE
- VOICES (SOUND EFFECTS WILL TEMPORARILY PRE-EMPT THE THIRD VOICE FROM PLAYING).
- ┴LSO ANIMATION OF CHARACTERS WILL BE DONE VIA THE ╔╥╤. ┴ LITTLE BACKGROUND
- ON INTERRUPTS FOR THOSE OF YOU WHO ARE A BIT HAZY ON WHAT THEY ARE OR HAVE
- NEVER SEEN THEM BEFORE (┴LSO TRY TAKING A LOOK AT ╥ASTERS: ╫HAT THEY ARE AND
- HOW TO USE THEM IN ├= ╚ACKING #3 - ╫HILE THIS DOES NOT NECESSARILY COVER
- WHAT WE ARE GOING TO BE USING INTERRUPTS FOR IT DOES DESCRIBE THEM QUITE
- WELL.) ┬ASICALLY THE COMPUTER GENERATES AN INTERRUPT EVERY 1/60TH A SECOND
- FROM A TIMER ON THE COMPUTER (USUALLY FROM THE ├╔┴ CHIP OR THE SCREEN FOR
- THOSE OF YOU WHO ARE CURIOUS). ╘HE COMPUTER WILL SAVE ALL THE REGISTERS, JUMP
- TO A SUBROUTINE - PERFORM THE INSTRUCTIONS THERE (USUALLY UPDATING TIME,
- SCANNING THE KEYBOARD ETC...) AND THEN RECALL ALL THE REGISTERS AND RETURN
- TO THE USER PROGRAM. ╘HIS IS AN INTERRUPT. ┴N ╔╥╤ INTERRUPT DESCRIBES AN
- INTERRUPT THAT WE CAN ALLOW TO BE "TURNED ON" AND "TURNED OFF" - IE: WE
- CAN TEMPORARILY DISABLE IT IF WE HAVE TO. ┴ ╬═╔ INTERRUPT DESCRIBES AN
- INTERRUPT WHICH WE CAN _NOT_ TEMPORARILY DISABLE -- WE WILL NOT BE USING
- ╬═╔ INTERRUPTS IN THIS PROGRAM.
-
-
- ╔╔╔. ╘HE ╨ROCESS
- -----------
-
- ╨ART OF WHAT THIS SERIES OF ARTICLES IS FOCUSED AT IS THE DEVELOPMENT OF BEING
- ABLE TO ANALYZE PROGRAMMING TASKS AND BREAK THEM DOWN INTO SMALLER WORKABLE
- PROBLEMS. ╧NCE THESE PROBLEMS OR SUBROUTINES ARE COMPLETED YOUR ORIGINAL
- PROBLEM IS SOLVED.
-
- ╠ET'S TAKE THIS APPROACH TO ╙PACE ╔NVASION:
-
- ╨ROBLEM ╙TATEMENT: ┬UILD A ╙PACE ╔NVADER PROGRAM CALLED ╙PACE ╔NVASION.
- -----------------
-
- ╒SUALLY, GIVEN A PROBLEM YOU HAVE TO RE-WORK THE PROBLEM STATEMENT TO
- ENCOMPASS ALL OF WHAT YOU WANT. ╠ET'S TRY AGAIN:
-
- ╨ROBLEM ╙TATEMENT: ─EVELOP A ╙PACE ╔NVADER PROGRAM CALLED ╙PACE ╔NVASION
- ----------------- UTILIZING THE 64 OR 128 SCREEN WITH INTERRUPT DRIVEN
- MUSIC / SOUND, AND ALLOWING INPUT FROM THE KEYBOARD,
- JOYSTICK OR MOUSE.
-
- ╚MMM... ╘HE PROBLEM STATEMENT LISTED ABOVE IS BETTER BUT IT HAS NO REAL ORDER;
- WE HAVE NO CLEAR IDEA OF WHERE TO START AND WHAT WE NEED TO DO. ╔T DOES
- HOWEVER TELL US THAT WE HAVE THE FOLLOWING SECTIONS:
-
- - 64 / 128 ╙CREEN ╚ANDLING
- - ═USIC / ╙OUND
- - ╔NPUT ╚ANDLING
- - ╟AME ─RIVER (IMPLIED)
-
- ╠ET'S THINK A BIT MORE ABOUT EACH OF THESE SECTIONS AND WHAT EACH WILL
- INVOLVE:
-
- 128 / 64 ╙CREEN ╚ANDLING: - ╨UTTING CHARACTERS ON SCREEN.
- ------------------------ - ╔NITIALIZING THE ╙CREEN / ╥EGISTERS.
- - ╙ETTING UP THE ├USTOM ├HARACTERS.
- - ╚ANDLING ANY ┴NIMATION.
-
- ═USIC / ╙OUND: - ╙ETTING UP THE ╙OUND ├HIP ╥EGISTERS.
- ------------- - ╨LAYING A NOTE READ FROM ═EMORY.
- - ┼XECUTING A ╙OUND ┼FFECT.
-
- ╔NPUT ╚ANDLING: - ─EVICE ╙ELECTION (KEYBOARD, MOUSE, JOYSTICK).
- -------------- - ╦EYBOARD ╙CANNING.
- - ═OUSE ╙CANNING.
- - ╩OYSTICK ╙CANNING.
-
- ╟AME ─RIVER: - ╘ITLE ╙CREEN.
- ----------- - ╔NITIALIZATION OF ═EMORY.
- - ╠EVEL ╙ETUP.
- - ═OVEMENT OF ┴LIENS.
- - ═OVEMENT OF ═ISSLES.
- - ═OVEMENT OF ╨LAYER.
- - ├OLLISION ├HECKING.
- - ├OLLISION ╚ANDLING.
- - ┼ND OF ╠EVEL.
- - ╙CORE ╒PDATING.
- - ┼ND - ╟AME HANDLING.
- - ╚IGH ╙CORE ╒PDATE.
-
- ╙HREW! ╠ONG LIST 'EH? - ╬OW YOU MAY HAVE THOUGHT OF SOME NOT LISTED ABOVE,
- AND WE MAY HAVE POSSIBLY OVERLOOKED SOME CRUCIAL ROUTINES -- THAT'S FINE --
- THE ABOVE IS JUST INTENDED AS A BUILDING BLOCK - A PLACE TO START CODING FROM.
-
- ╔F WE THINK OF THESE AS SUBROUTINES WE CAN BUILD A SKELETON OUTLINE OF THE
- PROGRAM - YET WE NEED SOME ORDER IN HOW WE CALL THEM. ╧BVIOUSLY WE AREN'T
- GOING TO MOVE THE PLAYER UNTIL WE SCAN THE INPUT AND THAT REQUIRES PRIOR
- DEVICE SELECTION ETC...
-
- ╚MM... ╘AKING ORDER INTO ACCOUNT WE CAN RE-STATE THE PROBLEM AS:
-
- ╨ROBLEM ╙TATEMENT: ─EVELOP A GAME SIMILAIR TO ╙PACE ╔NVADERS CALLED ╙PACE
- ----------------- ╔NVASION BY INITIALIZING MEMORY, THE DISPLAY DEVICE,
- SETTING UP ├USTOM ├HARACTERS, SETTING UP THE ═USIC
- ╥EGISTERS AND DISPLAYING THE TITLE SCREEN. ╞ROM THERE,
- SELECT THE INPUT DEVICE AND AFTER THAT SETUP THE CURRENT
- LEVEL. ╬EXT, WHILE PLAYING MUSIC IN THE BACKGROUND AND
- SCANNING THE INPUT DEVICE, MOVE THE ALIENS, MISSLES AND
- PLAYER CHECKING FOR COLLISIONS AND TAKING APPROPRIATE
- ACTION AS REQUIRED (PLAYER DIES, SCORE INCREASES ETC OR
- WHAT-NOT). ┴FTER EACH LEVEL DISPLAY IF THE PLAYER IS DEAD,
- OR SET-UP FOR THE NEXT LEVEL AND REPEAT. ╫HEN THE GAME HAS
- ENDED UPDATE THE HIGH SCORE IF NECESSARY.
-
- ╘RY SAYING THAT FIVE TIMES REAL FAST! :-) ┬UT THAT PROBLEM STATEMENT IS A
- WHOLE LOT BETTER THAN THE ONE WE HAD AT THE BEGINNING WHICH SIMPLY SAID TO
- DEVELOP A GAME.
-
-
- ╔╓. ╬OT ┴LL ┴T ╧NE ╘IME - ╫HAT ╫E'RE ─OING ╘HIS ╘IME
- ------------------------------------------------
-
- ╬OW THIS PROGRAM IS TOO COMPLEX, (AS SEEN BY THE PROBLEM STATEMENT ABOVE) TO
- HAVE IN ONE ARTICLE SO THIS ISSUE WE'LL CONCENTRATE ON THE BASIC MAIN LOOP
- AND THE INITIALIZATION OF THE ├USTOM ├HARACTERS AND THE TITLE SCREEN.
-
- ╧RIGINALLY, ╔ WAS PLANNING ON UPDATING AND LISTING THE REVISED CODE IN EACH
- ISSUE. ╚OWEVER, DUE TO SPACE LIMITATIONS AND THE ENORMITY OF THE PROGRAM
- CURRENTLY (1,500+ LINES!!) IT WILL BE PLACED FOR ANONYMOUS FTP AT
- CCOSUN.CALTECH.EDU UNDER THE DIRECTORY: PUB/RKNOP/╚┴├╦╔╬╟.═┴╟.
-
-
- ╓. ╘HE ═AIN ╠OOP
- -------------
-
- ╫HAT IS A MAIN LOOP? ┬ASICALLY IT'S WHERE EVERYTHING GETS DONE. ╔T CALLS OTHER
- SUBROUTINES AND KEEPS REPEATING UNTIL CERTAIN CRITERIA ARE MET - USUALLY WHEN
- THE PLAYER REQUESTS TO EXIT THE GAME. ╚OWEVER, INSIDE YOU'LL FIND INNER LOOPS
- FOR LEVEL PLAY ETC.
-
- ╧UR MAIN LOOP FOR THIS PROGRAM WILL BE:
-
- -------------------------------------------------------------------------------
- ;; * ═AIN ╠OOP - ╘HIS SHOULD BE THE LAST SECTION IN THE SOURCE CODE.
- ;
- ; ═AIN ╠OOP
- ;
-
- MAIN'LOOP = *
- JSR MEMORY'SETUP ; ╙ET-╒P MEMORY.
- JSR DISPLAY'SETUP ; " " DISPLAY.
- JSR CHAR'SETUP ; " " CUSTOM CHARACTER DISPLAY.
- JSR MUSIC'SETUP ; " " MUSIC CHIP.
- JSR TITLE'SCREEN ; ─ISPLAY THE TITLE SCREEN.
- JSR SELECT'INPUT ; ╙ELECT ╔NPUT ─EVICE.
-
- LEVEL'LOOP = *
- JSR PLAY'MUSIC ; ╙TART THE MUSIC PLAYING.
- JSR SETUP'LEVEL ; ╙ETUP THE CURRENT LEVEL.
-
- - JSR ALIEN'MOVE ; ═OVE ALIENS
- JSR MISSLE'MOVE ; " MISSLES
- JSR PLAYER'MOVE ; " PLAYER
- JSR CHECK'COLLISION ; ├HECK FOR COLLISIONS
- LDX COLLISION'FLAG ; ├HECK COLLISION FLAG.
- BEQ -
-
- DEX ; ─ECREASE .╪ BY 1 SO IF ╪ WAS 1 THEN
- BEQ PLAYER'DIE ; IT'S NOW 0 SO WE KNOW PLAYER DIED.
- DEX ; ─ECREASE .╪ AGAIN SO IF ╪ WAS 2 THEN
- BEQ ALIEN'DIE'SOUND ; IT'S NOW 0 SO WE MAKE ALIEN DEATH.
- JSR END'LEVEL ; ╔F WE GOT HERE - THAN END OF LEVEL.
- JSR WAIT'NEXT ; ╫AIT FOR NEXT KEYPRESS.
- JSR INCREASE'LEVEL ; INCREASE LEVEL #.
- SEC ; ┴ND GO BACK....
- BCS LEVEL'LOOP
-
- ALIEN'DIE'SOUND = *
- JSR MAKE'ALIEN'SOUND ; MAKE ALIEN SOUND.
- SEC ; SET CARRY
- BCS - ; AND JUMP BACK.
-
- PLAYER'DIE JSR SHOW'PLAYER'DIE ; ╙HOW IT ON-SCREEN.
- LDA LIVES ; ├HECK # OF LIVES.
- BEQ END'OF'GAME ; ╔F 0 THE END-OF-GAME.
- BNE LEVEL'LOOP ; GO BACK AND RE-START LEVEL.
- BRK ; ╔F WE GET HERE - THAN AN ERROR.
-
- END'OF'GAME JSR END'GAME'SCREEN ; ╙HOW END-OF-GAME SCREEN.
- JSR HIGH'SCORE'UPDATE ; ╒PDATE THE HIGH SCORE IF NEED-BE.
- JSR WAIT'NEXT ; ╫AIT FOR NEXT-GAME SELECTION.
- LDA QUIT
- BEQ +
- JSR SETUP'LEVEL'1 ; ╙ET-╒P FIRST LEVEL.
- SEC
- BCS LEVEL'LOOP ; AND START PLAYING IT.
-
- + JMP QUIT'GAME
- ;
- ; ┼ND OF ═AIN ╠OOP
- ;
- -------------------------------------------------------------------------------
-
- ╙OME OF THE ROUTINES LISTED ABOVE WE WILL LATER REPLACE WITH ACTUAL CODE. ╔T'S
- MUCH EASIER TO SEE:
-
- INC LEVEL
-
- THAN TO SEE A
-
- JSR INCREASE'LEVEL
-
- AND TRY TO HUNT DOWN THE CODE. ╔'VE INCLUDED THEM IN FOR NOW SO THAT WE CAN
- HAVE A BETTER IDEA OF WHAT IS GOING ON.
-
- ╔N THE FILE: INVASION.SRC MOST OF THE STATEMENTS ABOVE ARE COMMENTED OUT.
- ╧NCE WE WRITE THE ROUTINES WE'LL UN-COMMENT THEM. ╞OR NOW, THIS SERVES TO
- STILL REMIND US OF THE ROUTINES WE NEED TO WRITE.
-
- ┴LSO THERE ARE A COUPLE OF PROGRAMMING TRICKS THAT ╔ USED IN THE MAIN LOOP
- THAT PROBABLY NEED SOME CLARIFYING.
-
- ╫HEN HANDLING THE COLLISIONS THE .╪ REGISTER IS LOADED WITH THE RESULT OF THE
- COLLISION CHECKING - $00 = NO COLLISIONS, $01 = PLAYER DIED, $02 = ALIEN DIED,
- $03 = END OF LEVEL. ┴NYTIME A LOAD TO A REGISTER IS DONE THE FLAGS ARE
- AUTOMATICALLY SET AS IF YOU HAD COMPARED IT TO 0 - HENCE WE CAN LDX THE
- COLLISION FLAG AND IMMEDIATELY BRANCH IF EQUAL TO ZERO FOR NO COLLISIONS. ╔N
- ADDITION TO THE LOAD ANYTIME THE .╪ OR .┘ REGISTERS ARE INCREMENTED OR
- DECREMENTED AN IMPLICIT COMPARISON TO ZERO IS PERFORMED. ╙O IF THE .╪ REGISTER
- IS 1 PREVIOUSLY, WE DECREMENT IT THEN IT WILL BE ZERO AND OUR ┬┼╤ INSTRUCTION
- WILL BRANCH. ╔F IT'S TWO THEN IT WILL BE ONE AND WE CAN CONTINUE LIKE THIS.
- [╬╧╘┼: ╘ECHNICALLY IT'S NOT A REAL COMPARISON TO ZERO BUT CALLING IT A
- COMPARISON TO ZERO SERVERS OUR PURPOSE HERE. ╘HE ONLY SIGNIFICANT DIFFERENCE
- WOULD BE IN THE EFFECT OF THE CARRY FLAG WHICH IS INSIGNIFICANT IN OUR
- CODE SEGMENT HERE.]
-
- ┴LSO IN SEVERAL LOCATIONS ARE THE TWO INSTRUCTIONS:
-
- SEC
- BCS [LABEL]
-
- ╫HAT THESE ARE DOING ARE SIMPLY PROGRAMMING STYLE - THEY COULD BE SUBSTITUTED
- WITH ╩═╨ [LABEL] - HOWEVER THEY OFFER ADVANTAGES OVER ╩═╨. ╘HEY TAKE UP THE
- A LARGER AMOUNT OF EXECUTION TIME, HOWEVER THEY ARE RELOCATABLE SO ANY MUCKING
- AROUND / MOVING SECTIONS OF CODE DURING DEBUGGING WILL BE LESS LIKELY TO
- CRASH. ╒SING OTHER FLAGS ARE ALSO VALID -- THE USE OF WHICH FLAG (╔ PREFER
- THE CARRY FLAG) IS USUALLY DEPENDENT ON THE PROGRAMMER. ╟EOS DEFINES A
- SIMILAIR MACRO CALLED ┬╥┴ (BRANCH ALWAYS) WHICH IS EQUIVLENT TO:
-
- CLV
- BVC [LABEL]
-
- ╬OTE THAT THE ABOVE IS JUST PROGRAMMING STYLE, HELD OVER FROM MY PROGRAMMING
- IN ASSEMBLY DAYS. ╘HE USE OF ╩═╨ IS PROBABLY PREFERABLE IN TERMS OF
- EXECUTION AND ALSO IN BEING ABLE TO BRANCH MORE THAN 127 BYTES AWAY (THE
- BRANCH INSTRUCTIONS ONLY HAVE A RANGE OF +128/-127).
-
-
- ╓╔. ├USTOM ├HARACTERS
- -----------------
-
- ╙INCE WE'RE WRITING FOR EACH OF THE SEPERATE MODES (64 MODE, 128 MODE) WE HAVE
- TO TAKE A LOOK AT THE DIFFERENCES BETWEEN THE ╓╔├ CHIP (64 MODE) AND THE 8563
- CHIP IN THE 128.
-
- ╘HE ╓IC-├HIP
- ------------
- ╘HE CHARACTER SETS IN THE ╓╔├ CHIP ARE DEFINED AS IN THE EXAMPLE BELOW OF
- THE CHARACTER CODE $00 "@" (ALL REFERENCES ARE TO SCREEN "POKE" CODES - NOT
- PRINT CODES).
-
- .BYT #%00111100 ╘RY HOLDING THE PAGE (OR MOVING AWAY FROM THE
- .BYT #%01100110 SCREEN) AND TAKING A LOOK AT THE PATTERNS THE 1'S
- .BYT #%01101110 AND 0'S MAKE. ┼ACH CHARACTER IS THUS DEFINED AS
- .BYT #%01101110 EIGHT BYTES WHO'S BIT PATTERNS DEFINE IT. ╚AVING A
- .BYT #%01100000 TOTAL OF 256 CHARACTERS AVAILABLE MAKES IT
- .BYT #%01100010 NECCESARY TO SET ASIDE A TOTAL OF 2,048 BYTES.
- .BYT #%00111100
- .BYT #%00000000
-
- ╬OW, INSTEAD OF DESIGNING ALL 256 CHARACTER SETS WE'LL JUST TAKE ADVANTAGE OF
- THE FACT THAT THE LETTERS AND NUMBERS WE WANT WILL ALREADY BE THERE -- WE'LL
- JUST COPY THEM FROM THE ╥╧═ SET INTO ╥┴═, MODIFY SOME OF THE OTHER CHARACTERS
- TO REFLECT WHAT WE WANT AND THEN TELL THE ╓╔├ CHIP TO LOOK AT ╥┴═ TO GET THE
- CHARACTER SET DEFINITIONS.
-
- ╘HERE ARE SOME PROBLEMS WITH COPYING THE 'SYSTEM' CHARACTERS, HOWEVER. ╘HE
- ├OMMODORE 64 USUALLY MASKS OUT THE CHARACTER SET AND TYPICALLY IT IS ONLY
- AVAILABLE TO THE ╓╔├ CHIP SO THAT MORE SPACE CAN BE PRESENT FOR USER PROGRAMS
- AND SUCH. ╔T ALSO TAKES UP THE SECTION OF MEMORY THAT THE ╔/╧ BLOCK IN
- $D000-$DFFF DOES SO THAT SWITCHING IT IN WHILE INTERRUPTS ARE ENABLED IS SURE
- TO RESULT IN A CRASH.
-
- ╫E'RE ALSO GOING TO BE DOING A FEW THINGS THAT YOU MAY NOT EXPECT -- INSTEAD
- OF COPYING ALL 256 CHARACTERS - WE'RE GONNA _JUST_ COPY THE FIRST 128. ╘HIS
- WILL GIVE US ALL OF THE NORMAL CHARACTERS AS THE LAST 128 ARE THE REVERSE-
- VIDEO COUNTERPARTS TO THE FIRST 128 CHARACTERS. ╫E'RE DOING THIS TO CONSERVE
- SPACE AND BECAUSE WE REALLY DON'T NEED THAT MANY CHARACTERS DEFINED.
-
- ┴LSO LOCATION $01 CONTAINS WHAT $D000-$DFFF HOLDS AND WE WILL HAVE TO MODIFY
- BIT 2 TO SWITCH THE CHARACTER ╥╧═ IN. ╚ENCE, THE FOLLOWING PROGRAM CODE IS
- USED TO COPY THE CHARACTER SET:
-
- -------------------------------------------------------------------------------
- COPY'CHARS = * ; MUST BE RUN W/ INTERRUPTS DISABLED
- LDA $01 ; REGISTER 1 = THE CONTROL TO SWITCH IN THE CHAR.
- ; ROM.
- PHA ; SAVE IT AS WE'LL LATER NEED TO STA' IT BACK.
- AND #%11111011 ; ┬IT 2 CONTROLS IT - CLEAR IT TO SWITCH IT IN.
- STA $01 ; AND MAKE IT SO WE CAN READ IT IN.
- LDA #>$3000 ; MOVE CHARS TO $3000
- STA DEST+1
- LDA #>$D800 ; FROM $D800 (START OF CHAR SET) (LOWER-CASE)
- STA SRC+1
- LDY #$00 ; LO-BYTES OF BOTH SRC, DEST = $00.
- STY SRC
- STY DEST
- LDX #$10 ; COPY 2K OF DATA.
- - LDA (SRC),Y ; COPY BYTE.
- STA (DEST),Y
- INY
- BNE - ; CONTINUE UNTIL .┘ = 0.
- INC SRC+1 ; INCREASE SOURCE & DEST BY 256
- INC DEST+1
- DEX ; DECREASE .╪ COUNT.
- BNE - ; IF NON-ZERO THEN CONTINUE COPYING, ELSE
- PLA ; RESTORE VALUE OF $01
- STA $01 ; AND PUT BACK.
- LDA $D018 ; SET ╓╔├-CHIP ADDRESS.
- AND #$F1 ; TO SHOW CHAR SET.
- ORA #$0C
- STA $D018 ; AND FINALLY TELL ╓╔├ WHERE THE CHAR SET IS...
- RTS ; AND RETURN.
- -------------------------------------------------------------------------------
-
- ╬OTE THAT WE STILL NEED TO CHANGE THE ACTUAL CHARACTERS WE'RE GONNA BE USING.
- ╘HAT WILL BE HANDLED IN THE SECTION AFTER NEXT: ├HANGING THE ├HARACTERS AS
- THERE IS A GREAT DEAL OF SIMILARITY BETWEEN THE 128 AND 64 IMPLEMENTATIONS.
-
- ╘HE 8563 ├HIP
- -------------
- ╘HE 8563 80-├OLUMN CHIP USUALLY HAS 16K OR 64K ╥AM ATTATCHED TO THE CHIP
- WHICH THE ├╨╒ DOES NOT HAVE DIRECT CONTROL OVER. ╔T HAS TO DIRECT THE 8563
- TO STORE AND RETRIEVE VALUES TO THAT MEMORY. ╫HAT MAKES CONTROL OVER THAT
- MEMORY ALL THE MORE DIFFICULT IS THE FACT THAT THE 8563 ONLY HAS TWO LINES
- OR ADDRESSES THAT THE ├╨╒ CAN CONTROL.
-
- ╘HE 8563 HAS A CHARACTER SET IN MUCH THE SAME WAY THE ╓╔├ CHIP DOES, SAVE
- ONE EXCEPTION - EACH CHARACTER SET CAN HAVE UP TO 16 LINES. ╬ORMALLY, THE LAST
- EIGHT LINES ARE FILLED WITH $00 AND ARE NOT SHOWN. (╨ROVISIONS CAN BE MADE TO
- HAVE 8X16 CHARACTERS BUT IT IS NOT NEEDED FOR THIS GAME AND THUS, WILL NOT BE
- SHOWN - ╞OR MORE INFORMATION ╙EE ├= ╚ACKING ╔SSUE #2: 8563: ┴N ╔N-─EPTH ╠OOK.)
- ╘HUS THE ALGORITHIM IS SIMILAIR TO THE ├=64 BUT 8 ZERO-BYTES WILL NEED TO BE
- WRITTEN AT THE END OF EVERY EIGHT BYTES READ.
-
- ╚OWEVER, THE 8563 DOES MAKE THINGS EASIER FOR US! - ╫HEN THE COMPUTER IS FIRST
- TURNED ON A COPY OF THE ├HARACTER ╙ET FROM ╥╧═ IS COPIED INTO THE 8563. ╘HE
- 8563 HAS NO ╥╧═ ├HARACTER ╙ET ASSOCIATED WITH IT AND THUS WE ARE ABLE TO JUST
- SIMPLY MODIFY THE CHARACTER SET THAT IS IN THE 8563 MEMORY INSTEAD OF COPYING
- IT OVER. ┬ECAUSE OF THIS NO ROUTINE WILL BE PRESENTED TO COPY A CHARACTER
- SET INTO THE 8563 MEMORY, RATHER THE DISCUSSION OF COPYING INDIVIDUALLY
- DEFINED CHARACTERS WILL TAKE PLACE IN THE NEXT SECTION. ╘HE ├=128 ALSO MAKES
- LIFE EVEN EASIER FOR US AT THE END WHEN WE WILL EXIT THE PROGRAM,
- MODIFYING THE CHARACTER SET BACK TO THE "STANDARD" ├OMMODORE CHARACTER SET
- BY A ROUTINE IN THE ╦┼╥╬┴╠ THAT WILL COPY THE CHARACTERS BACK. ╫E'LL TAKE A
- LOOK AT IT CLOSER WHEN WE WRITE THE EXIT ROUTINE.
-
- ┴LSO NOTE THAT SINCE THE 8563 CHIP SUPPORTS THE 80 COLUMN SCREEN WE WILL
- BE DEFINING TWO CHARACTERS THAT CAN BE PLACED SIDE BY SIDE FOR EACH ALIEN
- SO THAT THE PLAYING FIELD WILL BE SIMILAIR TO THE ├64 VERSION. ╚OWEVER, FOR
- THE TITLE SCREEN WE WILL BE SWITCHING THE 8563 INTO A "40 COLUMN" MODE
- TO MAKE PROGRAMMING EASIER, IN ADDITION TO EXPANDING THE CHARACTER BIT-MAPPED
- LOGO.
-
- ├HANGING THE ├HARACTERS
- -----------------------
- ┴ LOT OF THE TIMES YOU'LL FIND YOURSELF RE-USING SUBROUTINES AND CODE THAT
- YOU HAVE PREVIOUSLY CREATED, GRADUALLY, OVER A PERIOD OF TIME BUILDING UP
- A LIBRARY OF ROUTINES. ╫HEN THINKING THROUGH THE PURPOSE AND INTENT OF THIS
- ROUTINE ╔ THOUGHT ABOUT POSSIBLY BUILDING IT SO IT WOULD READ A TABLE AND
- CHANGE THE CHARACTER SET BASED ON THAT TABLE. ╘HE 64/128 CHARACTER SETS
- WOULD BE THE SAME - THIS ROUTINE WOULD AUTOMATICALLY GENERATE THE EIGHT
- ADDITIONAL BYTES NEEDED BY THE 8563 IF NEED-BE AND IT WOULD CALL THE
- APPROPRIATE STORAGE ROUTINE - STORE TO EITHER THE 8563 OR THE COMPUTER
- MEMORY.
-
- ╬OW YOU MAY BE ASKING WHY WOULD YOU WANT TO STORE TO THE COMPUTER MEMORY
- IN 128 MODE? ╫HY NOT JUST HAVE TWO SEPERATE VERSIONS? - ┘ES - THAT COULD
- BE POSSIBLE BUT ╔'M IMPLEMENTING IT THIS WAY BECAUSE IN THE FUTURE ╔ MAY
- SEE A NEED TO DEFINE CUSTOM CHARACTERS IN 128 MODE FOR THE 40 COLUMN SCREEN.
- ╘HIS WAY ╔ CAN JUST EXTRACT THE ROUTINE, POP IT INTO MY PROGRAM AND ╔'VE GOT
- THAT SECTION OF THE CODE COMPLETE.
-
- ╘HIS IS WHAT ╔ WAS THINKING OF FOR THE DATA TABLE:
-
- .BYT 1 = 8563, 0 = COMP. MEMORY.
- .WORD ADDRESS ; ADDRESS BASE OF CHAR-SET IN COMPUTER OR 8563 MEMORY.
- .BYTE CHAR # ; (TO START)
- .BYTE # OF CHARS TO DEFINE
- .BYTE # OF CHARACTERS TO DEFINE
- .BYTE DATA,DATA,....,DATA8 ; CHARACTER DATA.
- .BYTE DATA,DATA,....,DATA8 ; CHARACTER DATA. ETC....
- . . .
-
- ┼NTRANCE INTO THE ROUTINE WILL CONSIST OF .┴┘ HOLDING THE LOCATION OF THE
- TABLE. ╫E WILL KEEP THE ADDRESS OF THE TABLE AND KEEP INCREMENTING IT AS
- WE GO ALONG IN Z-PAGE LOCATIONS.
-
- -------------------------------------------------------------------------------
- INSTALL'CHAR = *
- STA ZP1 ; SAVE .AY IN TABLE ADDRESS
- STY ZP1+1
- LDY #$00 ; READ COMPUTER MODE.
- JSR GET'BYTE
- STA MODE
- JSR GET'BYTE ; GET ADDRESS BASE.
- STA ADR
- JSR GET'BYTE
- STA ADR+1
- JSR GET'BYTE ; GET NUMBER OF CHARACTERS TO COPY.
- STA NUMB
- JSR GET'BYTE ; GET NEXT CHARACTER #.
- STA WRK ; SAVE IN TEMP. LOCATION.
- LDA #$00
- STA WRK+1
- ASL WRK ; SHIFT LEFT X3 TIMES = *8
- ROL WRK+1
- ASL WRK
- ROL WRK+1
- ASL WRK
- ROL WRK+1
- LDA MODE ; IF FOR 8563 THEN MULTIPLY 1 MORE TIME.
- BEQ +
- ASL WRK
- ROL WRK+1
- + LDA ADR ; ADD CHARACTER ADDRESS IN.
- CLC
- ADC WRK
- STA WRK
- LDA ADR+1
- ADC WRK+1
- STA WRK+1 ; ADDRESS NOW CALCULATED
- JSR SETADRS ; SET ADDRESS IN PROPER CHIP
- LOOP'INSTALL LDX #$08 ; COPY 8 BYTES.
- - JSR GET'BYTE
- JSR WRITEBYTE ; WRITE OUT BYTE.
- DEX
- BNE -
- LDA MODE ; IF 128 THEN FILL OUT 8 MORE $00 BYTES.
- BEQ +
- LDA #$00
- LDX #$08
- - JSR WRITEBYTE
- DEX
- BNE -
- + DEC NUMB
- BNE LOOP'INSTALL
- RTS
- -------------------------------------------------------------------------------
-
- ╫HAT? ╫E HAVE THRE SUBROUTINES : WRITEBYTE, SETADRS, AND GET'BYTE THAT WE
- HAVEN'T EXAMINED YET. ╘HESE ARE GOING TO BE THE ROUTINES THAT ARE DEPENDANT
- ON THE COMPUTER TYPE. ┴LSO, WRITEBYTE WILL REQUIRE THAT .╪┘ NOT BE DISTURBED;
- SETADRS REQUIRES THAT .┘ NOT BE DISTURBED HENCE THE FOLLOWING:
-
- -------------------------------------------------------------------------------
- SETADRS TYA ; SAVE .YX
- PHA
- TXA
- PHA
- LDA MODE ; CHECK COMPUTER TYPE.
- BEQ + ; IF ├=64, THEN JUMP AHEAD.
- LDX #18 ; ╓─├ REGISTER - CURRENT MEMORY ADDRESS HI
- LDA WRK+1 ; GET ADDRESS HI
- JSR WR'VDC
- LDX #19 ; ╓─├ REGISTER - CURRENT MEMORY ADDRESS LO
- LDA WRK ; GET ADDRESS LO
- JSR WR'VDC
- + PLA ; RESTORE .╪┘
- TAX
- PLA
- TAY
- RTS ; AND RETURN.
- -------------------------------------------------------------------------------
-
- ╬OTE THAT WE REALLY DON'T NEED A SETADRS FOR THE ├=64 -- WE CAN JUST INDEX
- OFF (WRK) IN THE WRITEBYTE ROUTINE WHICH FOLLOWS:
-
- -------------------------------------------------------------------------------
- WRITEBYTE STA TEMP ; SAVE AS WE NEED IT LATER.
- TXA ; ╙AVE .╪┘
- PHA
- TYA
- PHA
- LDA MODE ; NOW CHECK COMPUTER TYPE.
- BEQ + ; IF C64 JUMP AHEAD
- LDA TEMP ; RECALL TEMP.
- JSR WR'VRAM
- SEC
- BCS ++ ; JUMP AHEAD
- + LDY #$00 ; ├64 / Y-INDEX = $00
- LDA TEMP ; GET VALUE
- STA (WRK),Y ; STORE
- INC WRK ; NOW INCREASE ADDRESS
- BNE +
- INC WRK+1
- + PLA ; NOW RETURN AFTER RECALLING .╪┘
- TAY
- PLA
- TAX
- RTS ; AND RETURN.
- -------------------------------------------------------------------------------
-
- ╬OTE THAT THE FOLLOWING ROUTINE IS FAIRLY SHORT BUT IT IS CALLED NUMEROUS
- TIMES WITHIN THE ROUTINES THAT USE DATA TABLES SUCH AS INSTALL'CHAR,
- WRITE'TXT AND WRITE'COL.
-
- -------------------------------------------------------------------------------
- GET'BYTE = *
- LDA (ZP1),Y
- INY
- BNE + ; IF ZERO THEN INCREASE ZP1 HI
- INC ZP1+1
- + RTS
- -------------------------------------------------------------------------------
-
- ╬OT BAD 'EH? ┴ QUICK NOTE: ╘HE INSTRUCTIONS: ╨╠┴, ╘┴┘, ╨╠┴, ╘┴╪, ╨╚┴, ETC..
- ARE ROUTINES THAT ╨USH OR ╨ULL (PHA,PLA) THE .┴ ONTO THE STACK. ╘HE ╘┴┘, ╘┴╪,
- ╘╪┴, ╘┘┴ ARE INSTRUCTIONS THAT TRANSFER A REGISTER TO ANOTHER (IE: THE ╘┴┘
- TRANSFERS THE ┴ REGISTER TO .┘, ╘╪┴ TRANSFERS .╪ TO .┴ ETC...) ┬Y USING THE
- COMBINATION OF THESE WITH THE STACK WE CAN SAVE THE REGISTERS AND LATER
- RE-CALL THEM SO THAT THEY ARE THE SAME WHEN WE ENTERED THE ROUTINE. ╘HE
- STACK IS USUALLY A "MYSTERY" ITEM TO NEW PROGRAMMERS OF THE 6502 SERIES.
- ┬ASICALLY IT'S JUST LIKE ANY OTHER STACKS IN THE REAL WORLD - THE LAST ITEM
- THROWN (╔'M NON-PRACTICING PERFECTIONIST SO ╔ THROW STUFF.. ;-) ) OR PUSHED
- ON THE STACK WILL THE FIRST ITEM REMOVED OR PULLED FROM THE STACK. ╞OR
- EXAMPLE ╔'VE GOT A STACK OF BOOKS SITTING NEAR ME :
-
- ═APPING THE ├OMMODORE 128
- 128 ╔NTERNALS
-
- AND ╔'M HOLDING ═APPING THE ├OMMODORE 64 IN MY HANDS. ╔F ╔ PUSH (OR TOSS)
- THE BOOK ONTO THE STACK (AND HOPEFULLY HIT THE STACK INSTEAD OF THE FLOOR)
- ╔'LL HAVE THE FOLLOWING STACK:
-
- ═APPING THE ├OMMODORE 64
- ═APPING THE ├OMMODORE 128
- 128 ╔NTERNALS
-
- AND IT SHOULD BE EASY TO SEE THAT IF ╔ "PULL" THE NEXT BOOK OFF THE STACK
- THAT ╔'LL GET THE ═APPING THE ├OMMODORE 64 BOOK. ╘HE NEXT BOOK TO BE "PULL"ED
- AFTER THAT WOULD BE THE ═APPING THE ├OMMODORE 128 BOOK. ╘HIS IDEA CAN BE
- APPLIED TO THE 6502 STACK -- ╔T WILL KEEP STORING VALUES (UP TO 256) WHEN YOU
- "PUSH" THEM ON (VIA THE ╨╚┴ INSTRUCTION) AND WILL RETRIEVE THE LAST VALUE
- STORED WHEN YOU "PULL" THEM OFF (VIA THE ╨╠┴ INSTRUCTION). ┴NOTHER ╨╠┴
- INSTRUCTION WOULD RETURN THE NEXT VALUE THAT HAD BEEN STORED.
-
- ╘HE ├HARACTER ┬ITMAPS
- ---------------------
-
- ╨ASI ╧JALA IS TO BE CREDITED WITH ALL THE GRAPHICS AND MANY THANKS GO OUT
- TO HIM.
-
- ╘HE GAME LOGO IS MADE UP OF 120 CUSTOM DEFINED CHARACTERS THAT WILL BE
- PRINTED IN THE FOLLOWING MANNER (ON THE 128 SCREEN THEY WILL BE CENTERED).
-
- (IN REVERSE VIDEO)...
-
- ┴┬├─┼╞╟╚ . . . [UP TO 40 CHARACTERS]
- ╔╩╦╠═╬╧╨
- ╤╥╙╘╒╓╫╪
-
- AND EVERYTHING WILL LINE UP.
-
- ╙O THAT IT WILL LOOK LIKE A "MINI-BITMAP". ╫E COULD HAVE USED BITMAP MODE
- AND MADE A VERY NICE LOOKING TITLE SCREEN BUT THAT WOULD HAVE INVOLVED
- SWITCHING AND ALLOCATING MEMORY FOR THE BITMAP, ETC . . . ╧N BOTH THE
- 8563 AND THE ╓╔├ THAT INVOLVES A BIT MORE WORK AND SO CUSTOM CHARACTERS
- WILL BE USED FOR THE TITLE SCREEN. ╘HE REGULAR LETTER AND NUMERIC CHARACTERS
- WILL BE AVAILABLE SO THAT WE CAN DISPLAY CREDITS AND GAME INSTRUCTIONS
- BELOW THE LOGO.
-
- ╬OW - IN THE PROGRAM LISTING WE COULD LIST THEM AS BINARY #'S AND THAT WOULD
- MAKE EDITING THEM VERY EASY BUT WE'RE GONNA USE THEIR DECIMAL REPRESENTATION
- IN THE PROGRAM LISTING.
-
- ╘HE CHARACTERS ARE DEFINED SIMILAIR TO THE LOGO EXCEPT THEY ARE TREATED AS
- SINGLE CHARACTERS. ╔N THE 128 VERSION DUE TO THE 80 COLUMN SCREEN WE ARE
- GOING TO USE TWO CHARACTERS SIDE BY SIDE TO SIMULATE ONE ALIEN SO THAT THE
- PLAYING FIELD WILL BE SIMILAIR TO THE ├64 VERSION. ╔N ADDATION, DURING THE
- MAIN LOOP WE WILL MODIFY THE CHARACTER SETS TO SUPPORT ANIMATION OF THE
- ALIENS. ╔N THE DATA LISTING THERE IS A REFERENCE TO "FRAMES" - FOR EACH OF
- THE ALIENS THERE ARE 8 DIFFERANT FRAMES.
-
- ╧H! - ╘HERE WILL BE MORE CHARACTERS DEFINED IN THE FUTURE. ╥IGHT NOW ╔'M
- MAINLY INTERESTED IN GETTING SOME BASE CHARACTERS DOWN SO YOU CAN SEE HOW
- CUSTOM CHARACTERS ARE IMPLEMENTED. ╫HEN WE START SETTING UP DIFFERENT LEVELS
- AND SUCH WE'LL ADD MORE CHARACTERS THEN. ├URRENTLY THE CUSTOM CHARACTERS
- ARE NOT USED - ONLY THE CHARACTERS FOR THE LOGO. ╞OR THOSE OF YOU WHO ARE
- CURIOUS TRY INSTALLING THE CHARACTERS VIA INSTALL'CHAR AND TAKING A LOOK
- AT THE ALIENS.
-
-
- ╓╔╔. ╘ITLE ╙CREEN
- ------------
-
- ╘HE TITLE SCREEN IS USUALLY A LEAD-IN TO THE ACTUAL GAME AND IT'S AIM IS
- TO TELL THE PLAYER HOW TO PLAY THE GAME, ANY AVAILABLE OPTIONS AND P'HAPS
- PRESENT A NICE GRAPHIC OR TWO TO "WOW" THE USER INTO PLAYING. ╔N ADDATION,
- THE MAIN MUSICAL THEME CAN BE INTRODUCED HERE TO UNIFY THE GAME-PLAYING.
- ╘HE DISCUSSION BELOW DOES NOT TAKE INTO ACCOUNT COLOR BUT REST-ASSURED WE
- WILL BE USING VARYING COLORS IN THE TITLE SCREEN. ╘HE FORMAT FOR THE COLOR
- DATA WILL BE ALMOST IDENTICAL TO THE TITLE SCREEN FORMAT EXCEPT IT WILL
- BE STRUCTURED VIA THE FOLLOWING:
-
- .WORD ADDRESS
- .BYTE NUM_OF_CHARS TO PUT COLOR ($00= END OF DATA)
- .BYTE COLOR_VALUE
-
- ╘HE ROUTINE (COLOR'TEXT) CAN BE FOUND IN THE SOURCE LISTINGS AT THE END OF
- THIS ARTICLE. ┬ECAUSE OF THE SIMILARITY BETWEEN IT AND WRITE'TEXT IT IS
- NOT DISCUSSED IN THIS ARTICLE.
-
-