COMMODORE 64 ASSEMBLY LANGUAGE ARCADE GAME PROGRAMMING
This book is dedicated to mypaients.
COMMODORE 64 ASSEMBLY LANGUAGE ARCADE GAME PROGRAMMING STEVE BRESS
ITABITAB BOOKS Inc. Blue Ridge Summit, PA 17214
Game design by Dan and Steve Bress. Illustrations by Elisa Frances Mosely. Revenge of the Phoenix artwork by Denise McDonald.
PAC-Man is a trademark of Bally, Midway Mfg. Co. DONKEY KONG is a trademark of Nintendo. CENTIPEDE is a trademark of ATARI, Inc.
FIRST EDITION FIRST PRINTING Copyright © 1985 by TAB BOOKS Inc. Printed in the United States of America Reproduction or publication of the content in any manner, without express permission of the publisher, is prohibited. No liability is assumed with respect to the use of the information herein. Library of Congress Cataloging in Publication Data Bress, Steve. Commodore 64 assembly language arcade game programming. On t.p. the registered trademark symbol "TM" is superscript following "64" in the title. Includes index. 1. Commodore 64 (Computer)-Programming. 2. Assembler language (Computer program language) I. Title. QA76.8.C64B73 1985 001.64'2 85-2803 ISBN 0-8306-0919-9 ISBN 0-8306-1919-4 (pbk.)
Contents Introduction 1-You and Your TV
viii
1
How a Computer Displays a Picture What Is Animation 2
2-A Language for Games
3
Assembly Language 4 Using an Assembler 4 What an Assembler Can Do for You 5 How to Choose an Assembler 6
3-Underlying Concepts
9
Bits and Bytes 9 The Hardware 10 6510 Architecture 11
4-The 6510 Assembly Language
13
Instruction Types 13 Addressing Modes 14 Immediate Mode Addressing-Zero Page Addressing-Zero Page Indexed Addressing-Absolute Addressing-Absolute Indexed Addressing-Indirect Addressing with Indexes-Implied AddressingRelative Addressing-Indirect Addressing
5-0rganizing Your Program
17
6-Working with Interrupts
19
7-Technical Information
21
Commodore 64 Address Space 21 Memory Control and Mapping 22 Graphics Memory Locations 28 Standard Text Mode 24 Color Memory 'Z1 Custom Character Sets 28 Multicolor Mode 28 Extended Background Color Mode 28 Bit Mapping 29 Multicolor Bitmapped Mode Sprites 30 Sprite Pointers-Sprite Controls Collision Detection 32 Blanking the Screen 33 The Raster Register 33 Video Interrupts 33 Scrolling 33 Joysticks 34
8-Sound Effects
36
Filtering 36 The Sound Generator Demo 41 The Sound Editor 41
9-Creating Graphics
47
Hand Coding Graphics 47 Using a Graphics Tablet 52 Using a Koalapad Using the Sprite Maker 55 Using the Screen Maker Utility 56
10-Some Arcade Games
57
Pac-Man 57 Donkey-Kong 58 Centipede 58 Revenge of the Phoenix 59 Game Play-Scoring
11-Elements of Game Design
61
Visual Impact 62 Sound Effects 62 Difficulty Levels 62 Scoring 63
12-How Boghop Works The Start of the Program 65 The Macro Library-RAM Definitions-Musical Definitions-The Data Section-The Point Plotting Routine-The Equates Statements-Defining the System-Initializing RAM The Main Program Loop 70 Scores-Moving the Bad Guys-Incrementing the Level of Play-Seeing if the Bad Guy Is HitSeeing if the Player Is Hit-Launching the Shots-Moving the Bad Guy's Shots-Moving the Player's Shots-Checking the Shot Positions Animating the Sprites 73
64
Displaying the Number of Lives-Resetting the Game-Maintaining the Timing The Interrupt Routines 74 The Player Controls-Clear and Pull-INT1-Moving Mountains The Movement Subroutines 76 An End Note 76
Appendix A-The Instruction Set
77
Appendix B-The Macro Library
99
Appendix C-The Program Listings
119
Glossary
254
Index
257
Introduction This book, written for those who want a greater understanding of their computer's operation, is recommended for programmers who are familiar with the essential concepts of machine language and experienced in programming home computers in BASIC. It is also for machine language programmers. Many of the examples given in the book are machine language subroutines that can be used by machine language programmers or called from BASIC to increase the speed of BASIC programs. This book is divided into three sections: • Thchnical information • Game and graphics design
viii
• A description of the code for a game program
After you have mastered some of the programming techniques, you will be shown how to take a game concept and turn it into a video game. Many of the routines presented in this book were created expressly for use in video game programming. However, in many cases techniques used in programming video games carry over into all other fields of programming. By experimenting with the new concepts and techniques as you read, you will find that you are increasing your understanding of how to fully utilize your Commodore 64.
Chapter 1 You and Your TV Vutually every home in the country has at least one ferent points on the screen receive different intentelevision set, and televisions, like many other sities. domestic appliances, tend to be taken for granted. When the beam gets to the right edge of the Most people do not have any idea of how they work. screen, a horizontal sync pulse causes the beam to Since you are interested in having the television cut its intensity and return to the left side of the display your ideas and visions in the form of a video screen on the next line down. This process is game, you should have some idea of how an image repeated 262-1/2 times to form one display screen. is generated on the television screen to best utilize At the end of the screen, a vertical sync pulse is in. the capabilities of your computer. itiated. During the vertical sync pulse, the beam returns to the upper left side of the screen and the HOW A COMPUTER DISPLAYS A PICTURE whole process is ready to start again. On the ComThe face of a video display is coated with special modore 64, the computer's hardware automatically phosphors. An electron beam strikes the face of the inserts both the horizontal and vertical sync pulses, tube causing the phosphors to glow. On a black and so the programmer need not worry about generating white monitor, this process produces a dot. This them. When a Commodore 64 is driving the monitor, glowing dot is called a pixel. A pixel is the smallest area that a computer can control on the screen. A 200 scan lines are used to display text and graphics color monitor uses three electron beams and three with the other 62 lines being used for the border. different colored phosphors to create one pixel. The display process is repeated 60 times per second, The electron beam scans from left to right providing a flicker free display. across the face of the monitor. By controlling the There is a time correlation between the speed intensity of the electron beam during its scan, dif- of the microprocessor and the ~ition of the beam
1
on the face of the screen. Some special effects can be created by using this fact and changing the display parameters on the fly. In the time it takes for the microprocessor to go through one machine cycle, the beam travels approximately 6 pixels on the display screen. WHAT IS ANIMATION As you were reading the description of the generation of a TV frame, you may have noticed that the only thing that a monitor can display is a series of still frames. Thus the question of how you can get animation out of still pictures arises. There is a characteristic of the human eye called the flicker fusion frequency, which allows us to view TV shows and movies without seeing that they are made up of still frames. This frequency is 24 frames a second. Any time a series of pictures is shown at a rate faster than 24 hertz, the eye can no longer distinguish the individual pictures. If the computer makes small changes in its display faster than 24 times per second, these changes will give the appearance of being continuous. It is important to understand that the programs
2
you will be writing create a series of still frames, not continuous motion. Because the computer updates the screen 60 times per second, this is the fastest that any changes can occur on the screen. If an object is in motion at the speed of one pixel per screen change, it takes about 5.3 seconds for the object to get from one side of the screen to the other. If the object needs to go faster, it has to move more than one pixel per screen update. On the other hand, if the object is to go slower, it has to stay still during some screen updates. Because the video monitor provides a known minimum update time of 1/60 second, this tends to become the time period by which most aspects of the game are measured. This period of'lime (1/60 second) will be called a screen. From what you have read, you might assume that completely different displays could alternate 30 times per second, and the eye would fuse them. This is true; multiplexing is the term used to refer to this technique. Some care must be taken when you attempt to use this technique. The differences between the two screens should not be excessive, and best results are achieved using small fast moving objects.
Chapter 2 A Language for Games The first question that arises when you are starting work on a computer project is, "What language should I program in?" Your first inclination might be to use BASIC. However, if your program is using any type of continuous motion, BASIC would most likely be too slow to be useful. If you try to write anything more than the most simplistic game in BASIC, you will find the motion of the objects slow and erratic. There are limits to how quickly sounds and colors can be changed. All of these problems arise because the BASIC interpreter controls the computer, not the program. Every line in a BASIC program must be analyzed, decoded, and translated into a series of machine language instructions EVERY time the line is encountered. BASIC is also a very general language in that similar lines may have different functions. By the time a line is analyzed, the resulting section of machine code is not efficient. For all of these reasons, a BASIC program will never run particularly fast. To achieve smooth animation, the program must
be able to update the screen at least 30 times per second. Because BASIC does not have an easy way to talk to the hardware registers, (PEEK and POKE commands must be used), calculating new positions and updating the registers can easily take longer than 1/30 second, causing erratic motion. This same problem occurs when the sound registers must be updated. There may not be enough time to make a consistent sound. Machine language, on the other hand, is the most efficient form that a program may take. Each instruction in the program is executed exactly as it is entered. There is no interpretation done on the code, so it runs at the highest possible speed. You also know the status of the entire computer at every step-which rarely happens in a BASIC program. The major drawback to programming in machine language is that it is a collection of hexadecimal codes. This is fine for the computer, because the binary data that these codes represent can be immediately executed, but it is cumbersome for the programmer. Most programmers do not en-
3
joy memorizing all of the hex codes, and even fewer enjoy reading such a program when it is finished.
ASSEMBLY LANGUAGE The alternative to these two extremes is to program in assembly language. Assembly language is a language that uses an assembler that translates the mneumonics (memory aids) for the CPU's instruction set into the binary data that the processor can execute. This translation takes place once before the program is run, so the final program will be machine code. You end up with all of the speed advantages of a machine language program with none of the headaches. A properly written assembly ·language program is just as efficient as its machine language counterpart, so there is no reason to program in machine language if you can gain access to an assembler. With an assembly language program, the programmer normally has more than enough time to do all of the calculations and updates to keep the animation constant and smooth. The program can also make use of all of the hardware features of the computer to create effects that are not possible through BASIC. When you are using assembly language, the computer is completely under software control, making it possible to determine what the computer is doing at all times. An assembly language program executes faster than any other type of program, which makes assembly language the language of choice for programming games. Learning to program in assembly language is not as traumatic an experience as most programmers would have you believe. Unlike BASIC the machine will always be doing exactly what yo~ tell it to do. The main difference between BASIC and assembly language is that in assembly language you must keep track of where the data is in memory and where it must go. BASIC keeps track of variables for you, but it won't tell you where they are. In assembly language, you can define various memory locations so that they have some meaning to you. For instance, you could define $20 to be the player horizontal position. ($ indicates a hexadecimal number; $20 is equal to 32 in the decimal system. 4
See Chapter 3 for more information.) Whenever you need to find out what the horizontal position is or need to modify it, you would look into location $20. You can create your own variables in BASIC using the same technique. You would POKE the value into $20 and PEEK it back out whenever you needed it. This is a particularly useful technique when you mix BASIC and assembly language, because each program will know where to find the data from the other program.
USING AN ASSEMBLER The rest of this book assumes that you will be programniing in assembly language, and most of the examples are written in assembly language. If you are a BASIC programmer, you may be able to use some of these routines to speed up parts of your programs. Each assembler has its own set of pseudo opcodes-the instructions that tell the assembler to do something other than create code. In order to ensure that you will be able to use these routines, the following is a listing of the pseudo-opcodes used by Commodore's Macro Assembler Development System, which is the assembler used in this book. By modifying these instructions to match those of your assembler, you should be able to run any of the examples in this book. Normally, you can type in one of these instructions anywhere that it is legal to type in one of the CPU's opcodes. .BYTE
:WORD .DBYTE
* .LIB .END
Reserves one or qlore bytes of data starting at the current location counter value Reserves 16 bit data in a LOW byte-HIGH byte format Reserves 16 bit data in a HIGH byte-LOW byte format Program location counter Insert another disk file following this command End of file marker Assigns a value toa symbol
<
Specifies the low order 8 bits of a 16 bit value Specifies the high order 8 bits of a 16 bit value Starts a macro Ends a macro
carry some meaning (at least to you) to the memory locations and program segments, the program > becomes infinitely more readable than if the addresses themselves had been used. .MAC But wait, did that last sentence use "readable" .MND when referring to an assembly language program? Yes it did. Assembly language programs become ilAll of the above may be preceded by a label. legible to others because it is rare to see a full listing of the program with all of its definitions; and, often ? Precedes a number that a disassembly of a program is called the original prospecifies which parameter gram. (A disassembly has no legitimate names, just to pass to the macro. It addresses.) can also be used as a All good assemblers also have the ability to use label. macro-instructions (macros). A macro is a shorthand TheSe are all of the commands that may be dif- notation that represents a series of assembly ferent from those in your assembler. With this list, language commands. For example, a macro that inyou should be able to read all of the program listings crements a two byte value by a one byte value could and modify them to work with your assembler. be coded as follows: Many assemblers come with a program that will translate files with this sYntax into their own syn- .MAC OBINC ;REGISTER NAME, DATA tax. If your assembler has one of these programs, LOA ?1 ;LOAO THE LOWER BYTE you will not have to make many changes by hand CLC ;CLEAR THE CARRY BIT to assemble the listings on the distribution disk. ;AOO WITH CARRY THE DATA AOC #?2 ;STORE THE LOWER BYTE STA ?1 WHAT AN ASSEMBLER CAN DO FOR YOU ;LOAO THE UPPER BYTE LOA ?1+1 ;AOO THE CARRY BIT An assembler relieves you from memorizing the AOC #$00 ;STORE THE UPPER BYTE ?1+1 actual machine codes for each of the instructions. STA ;ENO OF MACRO It also calculates the distance from one instruction .MNO to another for those times when a branch must be taken from the main program. This is not a par- This macro is used to increment any two conticularly big deal for a short program (under 50 secutive bytes, such as a score. If the score needed lines), but as a program grows larger and more com- to be incremented by $20, you would type: plex, the task of repeatedly doing these calculations by hand becomes unreasonable. (If you are the type OBINC SCORE,$20 of person who finds great enjoyment in hand coding machine language programs, let me apologize here whi~ would be expanded by the assembler to read: for suggesting there is a better way. The rest of us LOA SCORE will let the computer do the tedious jobs). The most useful feature of an assembler is its. CLC ability to let you assign names. A name can be given AOC #$20 to a memory location, hardware registers, or a loca- STA SCORE tion within the program. Once names have been LOA SCORE + 1 assigned, it is no longer necessary to remember long AOC #$00 lists of confusing addresses. You only need to STA SCORE +1 remember the names you have assigned to the addresses. Since you will normally assign names that This is Certainly easier than typing the same
5
series of instructions every time that you need to increment a two byte value. A program that uses macros will be easier to read as you work on it than one written using individual instructions. Once you have written and debugged a macro, it becomes a tool that can be quickly used whenever necessary. By building up a library of macros, you will be able to program quite difficult functions in a minimal amount of time. There are many cases in which it is a better idea to use a subroutine instead of a macro. Each time a macro name is entered into a program, the assembler expands it into its individual instructions. This means that each time the macro is called, it is treated as if you have entered all of its instructions by hand, and uses the same ~ount of memory as if you had. For a function that is repeatedly used and takes a large amount of code, it is better to use a subroutine. A subroutine is called using the JSR instruction and is only stored once in the program. If you write a routine to display text on the screen that many different parts of the program are going to be calling on often, it is best treated as a subroutine. You may build up a library of subroutines in the same manner in which you build up a library of macros. Normally, in the course of working on a game you will run into a situation that requires you to write a specialized routine to perform a certain function. If you think that you will be able to use this function at a later time, you should incorporate it into either your subroutine or macro library. This way, you will quickly have the major routines that are common to most programs at your fingertips. An assembler must also provide some means of defining data areas and data. Thbles of data can be defined, given a name, and stored by the assembler. A good assembler allows you to define data in terms of mathematical expressions. It also allows data to be defined as one or two byte values. There is a further option on two byte values as to whether the high byte or the low byte will be stored first. For many programs, text must be stored for later printing. On some assemblers, you have the option for text to be stored with the high bit on or 6
off. This can be useful for finding the end of a text string. Finally, an assembler must allow you to enter assembly language commands. After all, that is the point of an assembler. HOW TO CHOOSE AN ASSEMBLER If you are to successfully create your own
machine language video games, you must become familiar with your primary design aid, the assembler program. Next to your computer, a good assembler program is the most essential tool for the creation of a machine language program. There are three parts to a good assembler package: • A text editor • The assembler • A machine language monitor The text editor is the part of the assembler that you will spend the most time with. It allows you to enter, modify, and update your program. Some assemblers allow you to use a word processor to enter your program. Whatever method you choose, make sure that you are comfortable with the editing commands that are available on your text editor. It is a good idea to try out an editor before buying it. Some assemblers come with editors that are very limiting in what they allow you to do. Limitations in the editor take from your programming time, so it pays to shop around for a good one. Once the program has been entered into the editor, it must be assembled before it can be used. Some assembler packages force you to load the assembler at this point, while others already have it loaded. An assembler that has all of the programs you need loaded simultaneously is called a coresident assembler.
A coresident assembler can save you quite a bit of time if you like to write a small section of code and immediately try to assemble it to check for errors. If you have a coresident package, remember always to save your source code before attempting to run your program. You can lose all of your latest work if your new program locks up the computer,
forcing you to turn it off. In fact, no matter what type of assembler you are using, you should save your source code often as you are writing it. Another aspect to examine while you are choosing an assembler is the speed with which it can assemble your source code and generate the necessary files on disk. Unfortunately, you can't expect the assembler to work faster than the disk can move the data. You also should be sure that any printouts generated by the assembler contain all of the information that you would like. The following are some of the items that differ between assemblers: • • • • •
Sorted symbol table with absolute addresses Macro expansion Data expansion Absolute addresses for all code Absolute addresses for RAM registers
Depending on how you approach debugging your program, these different functions will have different levels of importance to you. A symbol table is generated by all assemblers at some point. It is a list of the names used in the program and the addresses that correspond to the names. A printout of the table can help you verify the assembler is working properly and gives you a quick guide to any location used by the program. For this reason it helps if the machine sorts the table alphabetically before printing. On the other hand, if the assembler only prints out the symbol names and its internal representation of the addresses (usually filled in later by the assembler), the printout is useless for most purposes. If you are going to use macros in your program, it is useful to have an assembler that lets you specify whether or not it should expand the macro before it is printed. When a macro is expanded for print, the macro name is expanded for print, the macro name is printed followed by the code it generates with all of the substitutions shown. On the printout, all of the instructions of the expanded macro are generally preceded by a + symbol. Without a macro expansion on the printout, you must constantly refer back and forth between a listing of your macro
library and the section of code where the macro was called. This can be quite time consuming and prone to error as you expand the macro by hand for debugging pur,poses. But once all of your macros have been debugged and you are familiar with them, you rarely need to see them expanded on your printouts. Since most assemblers allow you to use expressions in data statements, you should be able to get a printout of the calculated data. With such a listing, you can verify that the assembler generated the expected data. Again, once you are familiar with the operation of your assembler and your data has been debugged you rarely need to see this part of the printout. Beware of an assembler that won't tell you where it has put your code or data. Your assembler should have in its printout absolute addresses for every instruction, data statement, and hardware or RAM register that has been used. If your assembler does not provide this information, you will find your program extremely difficult to debug. The output of most assemblers is an intermediate file that contains all of the information needed about your program. This file is usually one form of a hex file. Hex files store the information about the program in a hexadecimal format that can be easily transmitted or loaded into the computer. (Binary data is more difficult to transfer from one machine to another.) You will use a program called a loader to translate the hex file into a binary file and place the data in the proper place in the computer. One potentially useful option on most loaders is the ability to relocate the loading address of a program. For example, if you write a program to be placed on a cartridge, it needs to run from a different place in memory than if it is to be stored in RAM. The ability to relocate a program allows you to test it in one loca~ion although it is intended to run at another. The last piece of an assembly language development system is a monitor. This is a program that allows you to examine the computer's memory and change or move the contents. It also must allow you to load and save areas of memory from the disk
7
drive. A good monitor has a small disassembler that allows you to view memory as assembly language commands. A word of caution: it is not a good idea to get a monitor in a cartridge. A monitor on a cartridge resides in a permanently fixed place in memory. If your program needs to use this area, you can't use the monitor. In fact, if the monitor must reside in
8
only one predefined place in the computer, it can be useless. Either the monitor should be relocatable,
or you should be given two or more different versions of the monitor. If you have a version of the monitor that resides in high RAM and another version that stays in low RAM, usually you will be able to use one of them.
Chapter 3 Underlying Concepts At this point, some of the essentials that you need to know in order to understand the rest of this book will be presented. The terms and names that will be used will be defined. The hardware of the Commodore 64, and in particular, a programming model of the 6510 microprocessor will be discussed. Also, the hexadecimal numbering system (base 16), which is used throughout this book, will be described. This numbering system makes the most sense when dealing with computers. Since an understanding of the hexadecimal numbering system and its relationship to bits and bytes will make the hardware descriptions easier to understand, it will be presented first. BITS AND BYTES
A bit is the smallest meaningful piece of information that can be stored. It can have only two values, 1 or O. Other terms for these values are shown below:
1
o
ON
OFF
SET
CLEAR LOW
HIGH
All of the siinaIs inside of the computer can only be in one of these two possible states. So how does the computer perform so many functions if it only has two states to work with? By grouping a collection of bits together, the group of bits together can have a value that is equal to 2 raised to the power of the number of bits in the group. If we grouped 4 bits together, the group could have 16 possible values according to the equation 2"N where N is the number of bits in the group:
2"N N=4 2"4 2.2.2.2=16 A grouping of 4 bits is called a nibble. Each of the 9
four bits is given a value depending on its position in the group. Spreading the bits out horizontally, the bit on the right is called the least significant bit (LSB). The bit on the left is called the most significant bit (MSB). The location of each bit in the byte is given a value of 2 N, where N is the number of bits from the LSB that the location in question is. For instance the LSB is located on itself so its distance (N) would be O. Therefore, the LSB can have a value of 0 or 1 depending on the state of its bit. The next bit on the left would have a value of A
2A1. The group of four bits could have sixteen values, othrough 15, as you have seen. As discussed earlier, the value of the bit depends on its location in the group and its state. To compute the value of the group of bits, you simply add together the value of each location in the group whose corresponding bit is ON. By summing the total of all of the positions in a group, the maximum value of a group can be determined. In the case of a nibble, the maximum value would be 15. If 8 bits were grouped together, the equation would be:
Table 3·1. The Relationship Between the Binary, Hex, and Decimal Number Systems.
2 8 21 21 2'
0 0 0 0 0 0 0 0 1 1 1 1 1
0 0 0 0 1 1
1 1 0 0 0 0 1 1 1 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1
DEC HEX 0 1 2 3
2 3
4
4
5
5
6 7 8 9
6 7 8 9 A B
10 11 12 13 14 15
0 1
C D E F
2AN N=8
2 8 A
2*2*2*2*2*2*2*2=256 So a group of 8 bits can have 256 different values. This grouping is referred to as a byte. Since 0 is the first of the possible values of a byte, the range of values is from 0 to 255. Inside the Commodore 64, all of the data is represented and transferred as bytes. This is what is meant when the C-64 is referred to as an 8 bit machine. A byte is the standard unit of storage in the Commodore 64. It was mentioned earlier that hexadecimal would be the standard notation to be used in this book. This is because one hexadecimal (hex) digit can represent 16 values or one nibble if it is representing a group of 4 bits. Thus it requires 2 hex digits to represent any 8 bit value or any byte. The correlation between the 4 bits of a nibble, its decimal value, and its hex value is shown in Thble
3-1.
10
You may notice that until the tenth value, (the number 9) the same numbers are used in both hex and decimal numbering systems. In hex however, the next 6 numbers are represented by the first 6 letters in the alphabet. From this point forward, all hex numbers will be preceded by a dollar sign ($) to differentiate a hex number from a decimal number. This is the standard notation used by virtually all assemblers that assemble code for the 6500 series of microprocessors. If there is no $ preceding a number, it is assumed to be a decimal number, unless it contains any of the letters A-F, in which case you can assume that a mistake has been made.
THE HARDWARE Like all computers, the Commodore 64 is made of a number of complex integrated circuit chips. You can conceptualize the internal workings of the computer as being broken down into 5 different sections:
Central processing unit Memory Video generation Sound Input and Output In the Commodore 64, the central processing unit (CPU) is a 6510 microprocessor chip. It executes the same instruction set as a 6502 microprocessor as used in Apple and ATARI computers. It runs with a clock frequency of 1.0225 MHz. For all practical purposes, this can be considered to be a 1 MHz clock. The 6510 has an addressing range of 65536 bytes (64K). There are two different types of memory in the Commodore 64. It has 64K of dynamic RAM, which can be banked into the address space of the other chips as necessary. There is also 20K of ROM in the system. In this ROM are the BASIC programming language and the operating system of the Commodore 64. The operating system is responsible for reading the keyboard, updating the real-time clock, and transferring data in and out of the system, among other things. Since the CPU can only address 64K of memory, all of the RAM cannot be accessed simultaneously with all of the ROM. 1b overcome this problem, the technique of bank switching is used. For instance, if you are not using BASIC, there is no need for the BASIC ROM to be accessible. In this case, it can be replaced with RAM. The CPU cannot tell the difference, so it can be "tricked" into addressing more then 64K of memory. Video generation is a task that is taken care of by a 6567 Video Interface chip (VIC 11). All of the various graphic modes of the Commodore 64 are generated by this chip. In the process of generating the video signal, the VIC-II chip refresh~ the dynamic ram chips used in the system. The VIC-II chip also generates the system, clock from the 8.18 MHz dot clock. Sound is generated by a 6591 Sound Interface Device chip (SID). This chip can generate 3 independent voices each in a frequency range of 0 to 4 kHz. This corresponds to a range of about 9 octaves. Each voice has an independent volume envelope and a choice of waveforms. The SID chip can also provide
a number of filtering options for use with its own signals or an externally supplied signal. Input and output functions are handles primarily by a pair of 6526 Compkx Interface Adapter chips. Serial communication functions as well as the parallel port are maintained by these chips. They also handle input from the joysticks and the real time clock. These chips each provide a pair of independent 16-bit timers. H you understand how these four devices work, you can make the computer do anything it is capable of. Your program will be primarily concerned with the VIC-II chip and the SID chip. The CPU is the chip that the program is written for, and it is directed to modify the registers in the other chips at the appropriate time for the intended function. Writing almost any type of program eventually comes down to controlling just a few chips. Once you control the major chips the rest of the program should be easy. 6510 ARCHITECTURE In order to program in assembly language, you must understand the internal functions of the microprocessor. Figure 3-1 is a block diagram of the 6510. The value of the program counter is output on the address lines of the microprocessor whenever a data access is to be performed on the systems memory. In the Commodore 64, all of the hardware registers appear to be memory locations to the microprocessor, so accesses to hardware registers and memory appear identical. The accumulator is the most important register in the computer. Almost all of the data that passes through the system goes through the accumulator. Every arithmetic function, other than incrementing and decrementing, is performed in the accumulator. Data can be read into the accumulator from memory, modified, and stored back into memory. The X and Y registers are very similar. They move data in a manner similar to the accumulator. They can also be used as an index to an array of data. It should be noted that while these two registers are similar, their functions are not identical. Some instructions require the use of the X register while others use the Y register.
11
LSB
7
0
I ACCUlIULlTOR I 7
I
0
X REGJSTBR
7
I
0 Y REGJSTER
I
I
7 HIGH BTI'E 0 7 LOY BTl'E 0
I
PROGRAlII COUNTER
87
111 STACK
I
0 POINTERl
o 7 I ~VI IBIDI I IZlel ST~TUS RlGJSTER ..... ......
. ..... ..-
-.....
CARRY ZERO
lRQ DISABLE DECDIAL KODE BRK: COIDIAND OVERFLOW
NlGATIVS
Fig. 3-1. Block diagram of the 6510 microprocessor.
Each of the bits in the status register correspond to one of the conditions in the microprocessor. Some of these bits can be changed under software control. In the Commodore 64, the stack (a temporary data storage area between $0100 to $01FF) is controlled by the stack pointer. This register contains the address of the next empty space on the stack.
12
At the start of a program the stack pointer is usually initialized to $FF, which corresponds to the top of the stack. The microprocessor defines the stack to start at $0100. The stack pointer is used as an index from the bottom of the stack. With these concepts in mind, it is time to look at the language.
Chapter 4 The 6510 Assembly Language In Appendix A are a series of charts that describe all of the instructions available in the 6510 as well as their addressing mode options. You may wish to refer to these charts as you are reading the following sections on instruction types and addressing modes. As you begin to program in assembly language, you will find yourself constantly referring to these charts. All of the instruction lines used in assembly language take the following format: LABEL OPCODE OPERAND ;comment The opcode is the instruction that you want executed. The operand is the data, label, or memory address that will be operated on. Comments are particularly useful in documenting your program and should be used often. A properly documented program is much easier to read and understand. A comment can either follow an instruction or be on a line by itself. A comment must be preceded by a semicolon.
Labels prevent assembly language from becoming unmanageable. A label must start in column 1 of the program line. A label can be assigned a value or can take on the value of the program counter during assembly. When used as the operand in a branch instruction, the assembler determines the length of a branch, which is much easier than calculating the branch distance by hand. Also, if a change is made in the program, the assembler can compensate for any changes in the branch. If the calculations are done by hand, they have to be redone every time there is a change. INSTRUCTION TYPES There are 4 classes of instructions in the 6510. These are: • • • •
Data movement Arithmetic Thsting Flow of control 13
Data movement instructions are instructions that
Immediate (Indirect,X) cause a value to be loaded from memory, stored Zero page (Indirect),Y into memory, or transferred from one register to Zero page,X Implied another. There are a number of options as to how Absolute Relative the address of the byte to be loaded will be deter- Absolute,X Indirect mined. In the load accumulator instruction, LOA, Absolute;Y there are eight different addressing modes that can be used to determine which byte to load. The dif- Many of the addressing modes can be used by the ferent addressing modes are explained in the follow- LOA, or load accumulator, instruction. This instrucing section. tion causes a byte to be loaded into the accumulator. Arithmetic instructions are used to modify data in some way. This class of instruction includes Immediate Mode Addressing logical operations, such as the ANO and ORA inIn the immediate mode, the data that follows structions. There are instructions that allow a byte the # character will be loaded into the accumulator. to be rotated as well as addition and subtraction commands. As with the data movement instruc- Instead of entering data to be loaded, you could tions, most of the available addressing modes can enter a label that has previously been equated to a value. For example, if you had defined the label be used by the arithmetic instructions. 7esting instructions allow a nondestructive test BLACK to equal 0, the following statements would of data in the microprocessor. For instance, when be identical: a CMP instruction is used to check a value in LOA #$00 the ACCUMULATOR, the data in the LOA #BLACK ACCUMULATOR will not be changed in any way. The bits in the STATUS register will be changed In either case, a 0 is loaded into the accumulator. in the same way as if the data to be compared was In all of the other modes, data is loaded from a subtracted from the ACCUMULATOR. These in- memory location as indicated by the operand: structions are generally used to modify the STATUS register prior to executing a branch instruction. Zero Page Addressing Flow of control instructions are the branching The zero page of memory, the memory locations and jump instructions. These are used to change the in the range $00 to $FF, has a special meaning to order in which different sections of code are ex- the 6510. A location in this range can be accessed ecuted. The branch instructions are all conditional faster than anywhere else in memory. This results branching instructions. That is, each instruction from the fact that the upper byte of the address will checks one of the bits in the status register and, always be $00, so it need not be read from the depending on its value, will either branch to the in- operand during program execution. This also means struction pointed to in the operand or execute the that a program will be shorter because the upper next instruction in line. byte of the address is not part of the code. Exclusive Jump and jump to subroutine instructions also use of zero page memory can cut the program size fall into the flow of control category. These are and execution time by a third. known as absolute commands because they do not Zero page addressing modes take a one byte check any conditions before performing a jump. value as an operand to select the memory location. For example, if you want to load the contents of memory location $23 into the accumulator, you ADDRESSING MODES could enter the following: In the 6510 microprocessor, there are 11 types of addressing modes. They are: LOA $23
14
Zero Page Indexed Addressing Zero page indexed addressing uses the contents of the X register to determine the memory address to be accessed. Using the load accumulator instruction as an example, the memory address to be loaded is generated in the following way:
1. A memory address is specified in the instruction. 2. The value of the X register is added to this address. 3. The data from this generated address is loaded into the accumulator. Zero page indexed addressing can only be used with the X register. Since the X register can contain an 8 bit value, an offset of up to $FF from the address specified in the instruction can be generated. Indexed addressing is used extensively when you are looking up a value in a table of data. A value corresponding to the distance into the lookup table would be loaded into the X register, then the indexed load instruction would be issued.
Absolute AddreSSing Absolute addressing uses a two byte value in the operand to generate a 16 bit memory address. Due to this, the 6510 can address any byte in the range of $0000 to $FFFF. Normally, the assembler will select the most efficient version of this instruction. If it is possible to use zero page addressing instead of absolute addressing, the assembler will generate this form of the instruction. Absolute Indexed Addressing Absolute Indexed addressing works in the same way as zero page indexed addressing except that a two byte address is specified in the operand. Also, the Y register can be used as the index register in absolute indexed addressing. Using a load accumulator instruction, the following steps are taken to load a byte:
1. A memory address is specified in the instruction.
2. The value of the index register is added to this address. 3. The data from this generated address is loaded into the accumulator.
Indirect Addressing with Indexes So far, all of the addressing modes have assumed that you knew where the data you were interested in was ahead of time. Since this is not always the case, there needs to be a way for the computer to determine an address during program execution. Indirect addressing means that you are not telling the microprocessor where the data that you want to use is, but rather you are telling the microprocessor where it can find the address of the data that you want. The indirect address will always be stored in zero page memory in two consecutive memory locations. The lower order byte of the address is stored in the first memory location, and the high order byte of the address is stored in the next location. This gives a 16 bit address, so that the data can be anywhere in the microprocessor's normal address space. When you give an indirect addressing command, the operand will be the address in zero page that contains the first byte of the address of the pair of memory locations where the appropriate address is stored. It is important to reserve enough space in zero page RAM to hold all of the indirect addresses that you may be generating. At this point, indirect addressing should seem pretty easy to use, but there is a catch. The 6510 does not have true indirect addressing abilities for data movement or arithmetic instructions. Instead there are two subclasses of indirect addressing available. These are: • Indexed Indirect X • Indirect Indexed Y We will look at the second one first because it is the most often used. As is implied by the name indirect indexed Y, this command is a combination of indirect addressing and indexed addressing. As 15
was mentioned earlier, the command will have the address of where the address may be found. After the microprocessor generates an address from the two zero page memory locations, the contents of the Y register is added to the address to form the final address. The data at this final address can then be accessed. If the value of the Y register is 0, the command will act like a true indirect addressing command. You must be sure that the Y register is set to the desired value before executing this command, or you will never be sure of where the data is coming from (or going to). In indexed indirect X addressing, the value of the X register is added to the zero page address of where the indirect address can be found. This new zero page address is then used to generate the final address of where the data can be located. If the X register is set to zero, this command will act like a normal indirect addressing command. The normal use for this command is to use the X register as an index into a table of addresses located in zero page RAM. Implied Addressing Instructions that use implied addressing are only one byte long. Instead of having to give an address in the instruction, the microprocessor decides on which one of its internal registers to use based on the instruction. For instance, the TAX instruction will transfer the contents of the accumulator
16
to the X register. This is known to the microprocessor without the need for any other addresses. Because the microprocessor doesn't need to calculate or load an address when using implied addressing, these instructions execute faster than any other type of instruction. Relative Addressing All of the branching instructions in the 6510 use the relative addressing mode. In this mode, instead of specifying an address for the destination of the branch, an offset from the current instruction to the destination of the branch it specifies in the operand. The offset is a one byte value. This gives a branch instruction the ability to branch over a range of + 127 bytes to -127 bytes. Normally, you will use a label as the destination of the branch when writing your program, and the assembler will calculate the offset. Indirect Addressing There is only one instruction that uses indirect addressing in the 6510; it is an indirect jump. An indirect jump uses the principles of indirect addressing that were discussed earlier. The main difference between the indirect jump and the other indirect instructions is that a 2 byte value (16 bit) can be given as the address where the indirect data can be found. When using an indirect jump, the X and Y registers play no part in the address generation procedure.
ChapterS Organizing Your Program Now that you have some understanding of what an assembler does and of the 6510 assembly language, you can begin to think about how to organize your program. All programs can be broken down as follows: • • • • • •
Macro library System definitions RAM definitions Data definitions Main program Subroutines
Although it may not be obvious at this point, this is a very logical outline. The macro library must be assembled first. Quite often there will be macros that define data areas. A macro must be defined prior to its first use. There is no penalty in terms of storage space for a macro that is not used. The source code for a complete macro library is given in the file MACLIB, Listing C-1 in Appendix C. All of the macros in the file are described in detail in Appendix B. As they are given in the file, the
macros will work with the Commodore Macro Assembler program. If you are using another assembler, you may have to modify them slightly before they can be used. Once the macros are in the system, the machine's hardware registers should be defined. This is the starting point when you try to learn how a new computer works, as it forces you to become familiar with the hardware. A full set of system definitions can be found in the file SYSDEF, Listing C-2 in Appendix C. The names that are assigned to the various hardware registers by this file are used throughout the book, so it would be a good idea to refer to the listing at some point. Most of the registers will be described in detail in a later chapter. The RAM that is to be used as variables for the program needs to be defined next. You will usually find that programming is easier if you define your variables before you start to write your program. These definitions do not have to be completed during the first sitting. As you progresS in your program, you will find that you have not defined all of the RAM that you would like to use. Additions to 17
the RAM definitions tend to continue until the program is shipped or scrapped, whichever comes first. After all the hardware registers and RAM that you are planning to use have been defined, you are ready to start entering data. Where you put the data is a matter of available space and personal preference. If you are going to put data immediately preceding the code, it would be a wise move to put a jump to the first instruction of your program before you define your first byte of data. In this way, you will always know what the starting address of your program is, no matter how the size of the data section may change. The data section will contain all the data that is not code. This may seem like quite a few preliminaries to the actual program, but all of the steps do need to be taken. The actual source code that you will be creating will be making constant references to all of the names and definitions that have been defined previously. When you are starting any program, especiallyone in assembly language, it is important to break the program into a number of smaller routines. Quite often, the small routines can be individually tested and later merged to form a complete program. Also, small segments can be saved for use later in other similar programs so that you won't have to start from scratch every time. Unless you write perfect programs every time, small program segments will be much easier to debug. If you write an entire program and then try to make it run, it can become quite difficult to determine where in the program the problem is. On the other hand, if you had tested all the small program segments before merging them into a complete program, the only problems that you might encounter should be in the interconnections between the program segments. Since you already know that all of the pieces of the program work, you should not have any difficulty finding the bugs.
18
As you are writing your program, do not be alarmed if you realize that you have not defined something you need to use. Simply write what you have forgotten on paper and use it in the code as if it had been defined. Then, when you feel like taking a break from the creative process, go back and insert your addition into the proper definition file. Until you try to assemble your program, the computer does not know or care what has or has not been defined. You may have been wondering why the subroutines should be placed at the end of your program. Unlike the macro library, any subroutine in your program will use a certain amount of memory, whether it is used or not. Because of this, any subroutine that is not used should be deleted so as not to waste memory space or the time that it takes the assembler to assemble the subroutine. By following this general outline; you will have a manageable and modular way with which to approach the design of your program. Most assemblers have a command that allows you to chain together different parts of your program. If your assembler has the ability, you may find it desirable to write all of the different modules of your program as separate files, and then let the assembler link them together as it assembles the program. This has some advantages over creating one massive file. For instance, if you need to add a definition to your RAM definitions, you only need to load the file with your other definitions. If your disk drive is particularly slow (as all Commodore 64 drives are), you will find a partitioning of your program quite a time saver. As your program progresses, the definitions and data areas will rarely need modifying. Keeping all of the parts of the program separate allows you to edit or print the part of the program that you are currently working on without having to deal with those parts of the program that have been tested and debugged.
Chapter 6 Working with Interrupts In the Commodore 64 interrupts serve as a major source of timing and program control. The interrupts are normally used to maintain the real time clocks and the type ahead keyboard buffer. Interrupts can also be used to signal sprite collisions and inform the program when a specific scan line has been reached. 10 best understand what an interrupt is, consider a normal program. The microprocessor reads its instructions one at a time and executes them in order. Whatever it is told to do first, is done first. If there is a certain condition that makes it necessary to perform a certain operation immediately, this condition must be repeatedly checked throughout the program to ensure it is taken care of promptly. For example, a collision between a bullet and a player sprite should immediately initiate an explosion sequence. In a normal program, you have to monitor the collision status register constantly and take appropriate action. The alternative is to let the hardware check for the collision. When a collision occurs, the VIC II chip can send an interrupt request to the
microprocessor. If interrupts are enabled, the processor will execute an indirect jump through location $FFFE when it finishes executing its current instruction. Location $FFFE usually points to a point in ROM that has an indirect jump instruction for a point in RAM. In the Commodore 64, the RAM location that ultimately will direct the jump is $0314. If the address of your routine to initiate the explosion sequence is placed in locations $0314 and $0315, this sequence will only be called on when a collision is detected. Using an interrupt for this purpose relieves the main program of scanning the collision register constantly. Because of this, less of a burden is placed on the microprocessor during the main program. Interrupts should be used for the part of your program that needs the highest priority in terms of microprocessor time. For instance, if you want to change the background color at a certain point on the screen, you need to use an interrupt. The VIC II chip can generate an interrupt on any scan line that you specify. This type of interrupt is called a raster interrupt. By using raster interrupts, your in-
19
terrupt routine can gain access to the processor at a specific (relatively) point on the screen. Interrupts are useful when the main program involves lengthy calculations or is going to be busy for quite some time. If you are trying to maintain animation while the main program is running, you need to use some form of interrupt to take control at least once every other screen. Otherwise, the animation will appear jerky. Before enabling your interrupt routine and thereby disabling the Commodore 64's operating system, you should disable all other sources of in· terrupts in the machine. Once this is done, you can always find the cause of the interrupt easily. Most of the functions performed by Commodore's operating system either are unnecessary in a game or can be done in a different manner. The KILL macro essentially shuts down all of the devices in the system capable of generating in· terrupts. Once the interrupts from these chips have been disabled, you can safely change the interrupt vectors to point at your interrupt routine. After the KILL macro is called, there are no in· terrupts generated in the system. This is a good time to change the addresses stored in the interrupt vectors. The nonmaskable interrupt vector (NMINV) should be changed to point at a return from interrupt (RTI) instruction. Nonmaskable in· terrupts are rarely, if ever. used in a game program. The maskable interrupt vector (CINV) should be changed to point at the first instruction of your in· terrupt routine. Listing C·3 in Appendix C is the source code for a program that uses a RASTER interrupt to change the background color of the screen in the middle of the screen. This is also a good time to en· sure that you are using your assembler properly. If you can successfully enter and run this short pro· gram, you should have no problem getting some of the longer programs to run later. The macro library and the system definitions that were defined earlier (Listings C·1 and C·2) are inserted into the program by the .LIB directive of the assembler. An ex· ecutable version of this program is shown in Listing C·4. To run the executable form of this program
20
enter the following commands: LOAD "DEMO.O",8,1 SYS 4096
After setting up the system, the main program just loops through itself. The only way that any changes can occur is through interrupts. The first interrupt is generated at the mid point in the screen, as specified by the first RAST macro. After chang. ing the screen color to blue, this interrupt uses the RAST command to set an interrupt to occur at the bottom of the screen. Next, the address of the second interrupt is placed in the interrupt vector. The second interrupt (INTI) works in the same manner as the first, only it points to the first inter. rupt when it is done. By using two interrupt ser. vice routines in this manner, different things can be done on each half of the screen. You may have noticed that you can see the point on the screen where the colors change, and it seems to be moving. This occurs because the microprocessor must finish the instruction it is cur· rently working on before it can process the inter· rupt. Since an instruction may take from two to six . machine cycles to execute, and the electron beam "travels about three pixels per instruction cycle, the color can change in an 18 pixel area. This assumes that the VIC II chip is consistent about when it notifies the processor about the interrupt. Any tim. ing inconsistencies in the VIC II chip enlarges the area where the color changes. By adding a delay in the interrupt service routine before changing the background color, you can force the color change area to be in the border where it won't show. After running this program, you can not reset the Commodore 64. By disabling the operating system, you have disabled the keyboard scan routines, effectively making the computer deaf to outside stimuli. When you have finished watching your new program and want to reset the machine, turn it off and back on again.
Warning: Always be sure that you have saved your program and source code before trying to run a new program!
Chapter 7 Technical Information Up until now, this book has dealt with concepts and generalities when referring to the hardware in the Commodore 64. This was important to get you used to the capabilities of the hardware without bogging you down with details. This chapter will go into the details of getting the computer to generate the effects you are after. This chapter will probably be the chapter to which you will refer most often when writing a game program. All of the information that you will need in order to program the VIC II chips and the SID chip will be explained in this chapter. After you have become familiar with the hardware in the Commodore 64, you will not need the full explanation of the hardware registers. When you are up to such a level, you will find it easier to use the listing of the SYSDEF file in Appendix C as a quick reference guide to the registers. Unless otherwise noted, all references to addresses in this chapter use hexadecimal notation. The names that have been assigned to the registers are the standard names that have been defined in the hardware definition listing, SYSDEF (Listing C-2 in Appendix C). By using this naming conven-
tion for the registers, you will begin to gain familiarity with the register names as they are used in the assembler. All of the names are made up of 6 characters or less, so no matter what type of assembler you are using, the same names will be acceptable. Macros that supply many of the functions described below have been provided. Descriptions of all of the macros can be found in Appendix B, and Listing C-1 in Appendix C provides the source code. The macros may use a few more instructions to perform the function than would be required if you were to provide the data yourself. They do have advantages, however. Your program will be easier to understand if you use the macros, as there will be a recognizable name given to the macro as opposed to a sequence of assembly language instructions. COMMODORE 64 ADDRESS SPACE
As you know, inside the Commodore 64 is a 6510 microprocessor, which controls the machine.
21
It uses a 16 bit address bus allowing it to access 2,,16 or 65536 bytes of memory. This is all the memory that can be accessed at one time. Fortunately, as mentioned briefly before, through a technique called bank switching, different types of memory can be switched into or out of this address space. Through the use of bank switching, the 8K BASIC ROM can be accessed instead of 8K of RAM. The Commodore 64 switches other sections of RAM with ROM, and also switches an area of RAM with some hardware registers, such as the VIC II chip. When choosing the appropriate memory map for your program, you must decide which of the functions provided by the Commodore 64 you will be using. For instance, if you do not need BASIC, you can switch the BASIC ROM out of the memory space. Doing so will give you 8K of RAM that you would not otherwise be able to use. Some of the memory maps available to you will allow you to switch the 4K I/O space at $0000 with 4K of RAM. What this means is that you will no longer have access to the hardware registers at these locations. When it becomes necessary to change any of the values in one of these registers, you will need to switch the I/O space back into the RAM space. This is generally more trouble than it is worth, unless you desperately need the extra memory. You also have the option of switching out the 8K KERNAL ROM. In most cases, you will not be using any of the KERNAL routines. If this is the case, there is no reason to keep it in memory. 8K of RAM can be switched into the space where the KERNAL ROM was.
switching of the different memory areas. Three of these lines are controlled by the microprocessor using its internal I/O port. The three internal control lines are the least significant three bits at address $0001. This is the hardware I/O port of the 6510 processor. Data can be written to this port just as it can be written to any other memory location. Bits 0 and 1 are used to select from the four primary memory maps that are available. Bit 2 selects whether the I/O devices or the character generator ROM will be addressable by the microprocessor in the range of addresses from $0000 to $DFFF. Bit 2 has no effect on the system when the memory map with 64K of RAM accessible is selected. The remaining two control lines are internally pulled high when there is no cartridge plugged into the computer and can be ignored for a disk based program. Figure 7-1 shows all of the memory mapping possibilities.
l'fW
IBBlfAL BOJI 01'
!WI
EOOO DOOO
41[ I/O
01'
ax
01'
BASIC ROil
01'
AOOO
lWI
41[ lWI
COGO
!WI
01'
ROIl PLUG-IN
ax
!WI 01'
8000 Caution: All interrupts in the system should be shut down before the KERNAL ROM is switched . out of memory. The six bytes of memory from $FFFA to $FFFF in the KERNAL contain the vectors for the interrupts. After the KERNAL has been switched out, new interrupt vectors need to be stored in RAM. MEMORY CONTROL AND MAPPING
ax
ROIl PLUG-IN
32J[ ]WI
0000
There are five control lines that control the bank Fig. 7-1. Memory mapping options chart.
22
ROil
The memory maps in Figs 7-2,7-3,7-4, and 7-5 can be selected through software.
GRAPHICS MEMORY LOCATIONS Although the Commodore 64 has 64K of memory, the VIC chip can only reference 16K of memory at anyone time. Fortunately, you can change which of the four 16K blocks of memory in
the computer the VIC chip will be able to use. When the Commodore 64 is powered up, bank 0 of memory ($OOOO-$3FFF) is selected. If you wish to change the bank of memory that the VIC chip will use, you must set the least significant two bits of $DDOO to the value that represents the desired bank. Before doing so, you must set bits 0 and 1 of $DD02 to 1. This will select the control bits that
LORA)( BIRAM
=0 =0
16K BAlI
COGO
18K BAlI
8000
0000 Fig. 7-2. 64K RAM memory map.
23
."".,
ax
DRK.AL BOil
1000
-
IDlWI = 0 1 BllWI
4K I/O
DOOO
4K RAIl
COGO
lex lWI 8000
32K lWI
0000 Fig. 7-3. 52K RAM memory map.
control-memory select to outputs. The BANK macro will select the proper bank for you. If you want to change the bank yourself, use the information in Thble 7-1 for the appropriate values: Table 7·1. The Values to Use When Selecting the Bank of Memory the VIC Chip Will Use. VALUE
3 2
0 1
1
2 3
o 24
BANK #
MEMORY RANGE ADDRESSED
$OOOo-$3FFF $4OOO-$7FFF $8OOO-$BFFF $COOO-$FFFF
STANDARD TEXT MODE When the Commodore 64 is first turned on, it owers up in its standard text mode. When in this mode, the screen is arranged as 40 characters by 25 lines. This gives a total of 1000 characters that can be displayed on the screen at anyone time. The character to display in each position can be found in the 1000 bytes of RAM starting at $0400. If you want, you can instruct the VIC chip to use a different area of memory to find the text to be displayed. The upper four bits of the VIDBAS register ($D018) control where the VIC chip will
find the text. Thxt memory will always be found on $0400 boundaries. Each byte in the text memory area is used as an index into a character generator section of memory. Since a byte can have 256 values, each position on the screen can display one of 256 patterns. When the Commodore 64 is powered up, the graphics information that the text memory
references is in the character generator ROM. The VIC chip can be instructed to use a different area of memory as the character generator by changing the lower four bits of the VIDBAS register ($D018). This section of memory will be referred to as graphics memory, as the information can be of any type of graphics, not necessarily text. The Commodore 64 has a built-in character
:rrFP'
8JC IWl
:moo DOOO
COGO
LOlWI BIRAM
=1 =0
4K I/O 4K BAlI
18K IWl 8000
32K IWl
0000 Fig. 7-4. 60K RAM memory map with no KERNAL ROM.
25
ax
KIR1fAL ROil
EOOO
LOlWI = 1 BlRAlI = 1
41{ I/O
DOOO
4K RAIl
COOO
ax
BASIC BOil
ax
RAIl
8000
32J[
!WI
0000 Fig. 7-5. The default memory map with 42K RAM.
generator ROM, which is physically at $DOOO-$DFFF. You may have noticed that this is the same address range where the hardware registers in the Commodore 64 are. This is possible only because the hardware registers are not available to the microprocessor at the same time as the character generate ROM is. Bit 2 of the I/O port at $01 controls whether the ROM or hardware
26
registers will be available to the microprocessor. When this bit is set to a 1, the hardware registers will be available. When this bit is set to 0, the character generator ROM can be read by the microprocessor. The VIC chip does not see the character generator at this address, however. The VIC chip has been tricked into seeing the character generator from $1000-$1FFR The VIC chip also
sees an image of the character generator ROM from $9000-$AFFF. Notice that the VIC chip can only see an image of the character generator when in banks 0 and 2 of memory. The microprocessor does not see the character generator in the same place that the VIC chip does, so there is no conflict with the microprocessor when using one of the areas in memory to store data that the VIC chip thinks is the character generator. You will normally choose either bank 1 or 3 for your graphics, so that the image of the character generator does not get in your way. If you do need to use text in your program, you can either copy data out of the character generator or create your own character set. The TXBAS macro can be used to change the base address where the text will be located. Similarly, the GRABAS macro can be used to change the base address of graphics memory. It is important to remember that the text and graphics base addresses must be added to the bank that is currently selected in order to find the absolute address in memory where the data will be found. For example, if you had selected bank 1 of memory ($4000-$7FFF) and the text base address was $0400, the text data would be found at $4400. If you want to change the base address of the registers yourself, the values to use can be found in Thble 7-2. When changing a value for the TEXT mode, only the upper bits should be changed in the VIDBAS register. Similarly, when changing a graphics base address, only the lower bits should be changed. A dash indicates a don't care condition. You must remember to add the BASE address register to the addresses to find the real address.
COLOR MEMORY As discussed earlier, when in the text mode, the screen is arranged as 25lines of 40 characters. Each of the characters can be one of 256 different patterns. In addition to being able to select the character to be displayed at each position on the screen, you can also select the color that you would like each character to be. The Commodore 64 provides 16 colors that can be used. There is an area in memory that is reserved to hold the color information. This section of memory is called the color
Table 7-2. The Values To Use To Change the Base Address for Text or Graphics.
VIDBASVAWE Upper Bits
TEXT BASE ADDRESS
$0$1$2-
$0000 $0400 $0800 $OCOO $1000 $1400 $1800 $1COO
$3$4-
$5$6-
$1$8$9$A-
$2000
$B-
$2400 $2800 $2C00
$C-
$3000
$0-
$3400
$E-
$3800
$F-
$3C00
VIDBASVAWE Lower Bits
$-0 $-2 $-4 $-6 $-8
$-A
GRAPHICS BASE ADDRESS
$0000
$0800 $1000 * $1800 * $2000 $2800
$-C
$3000
$-E
$3800
* In BANK 0 and 2, ROM images will appear here.
RAM. Color RAM starts at $D800 and continues to $DBE7. Unlike the normal RAM used in the Commodore 64, color RAM is made up of nibbles rather than bytes. When you read a value out of color ram, only the least significant four bits are valid. You will read an eight bit value, but the data in the upper four bits is not predictable. Quite often, you must mask the upper four bits before using data from the color RAM. Color memory does not move, and the VIC chip cannot use a different section of memory for the color information. The MVCOL macro will fill color
27
RAM with a single color. For instance, if you wanted all ofthe text to be white, you would enter "MVCOL WHITE:' The text memory and color RAM are treated differently by the different graphics modes. If your picture doesn't look like you expect, check to be sure that the proper graphics mode has been selected.
CUSTOM CHARACTER SETS
placed in one of the locations where the VIC chip can see the character generator ROM. MULTICOLOR MODE
To this point, all of the graphics in the text mode have· been able to use only two colors for each character position on the screen. Normally a video game will use many more than two colors. Th allow more colors to be displayed in a given area on the screen, the Commodore 64 has a multicolor mode that can be selected. In this mode, the character can use the character color and the colors in BCOLO ($D021-the background color), BCOL1 ($D022), or BCOL2 ($D023). Using this mode, each pixel in a character location can be one of 4 colors. U nfortunately, you have to sacrifice 112 of the horizontal resolution to use this mode. This is usually a reasonable sacrifice considering how much more color can be used. In order to turn on the multicolor mode, you must set bit 4 of the XSCRL® ($D012) or use the MULTON macro. To turn off the multicolor mode, you must clear bit 4 of the XSCRL register or use the MULTOF macro. In the text mode the multicolor mode is selected individually for' each character position on the screen. If the color in color RAM for a given character position is less than 8, that character position will be in the standard text mode. If the color in color RAM is 8 or greater, that character position will be in the multicolor mode. This allows you to mix standard and multicolor modes on the same screen. As stated earlier, you sacrifice 112 of the horizontal resolution of the normal text mode when you select the multicolor mode. This means that each character will be made up of an array of 4 by 8 pixels. It still takes 8 bytes to define a character but instead of each bit corresponding to a pixel o~ the screen, each PAIR of bits represents one of 4 registers to use to find the color for the bit pair. The following chart shows the correlation between bit pairs and registers.
Although the Commodore 64 has a built in character set, you will probably find that set limiting in what it allows you to do. The text mode can be used for quite a few different types of games if you redefine the character set. You can build up figures that are larger than one character size by placing the different pieces of the figure in adjacent locations. This gives you quite a bit of flexibility in using graphics as long as you define your own character set. Each character is defined in memory as an array of 8 by 8 bits. This is stored as eight sequential bytes. Each byte has eight bits, and each bit represents one pixel on the screen. If a bit is on, the corresponding pixel on the screen will be turned on in the character color. If the bit is off, the background color is used for that pixel. The value in the text RAM is used as a lookup into the graphics RAM to choose which set of eight bytes will represent a character. If you decide to make your own character set, you will have to define any text characters that you may need as well as your graphics figures. Once you instruct the VIC chip to get its graphics data from RAM, it will no longer be able to use the character generator ROM. Using a machine language monitor, you can enter the data for your character set into RAM. When you are finished, you should save your new set to the disk for later use. The first 8 bytes in your character set will be displayed if you place a 0 into a text memory location (assuming that you had previously instructed the VIC chip to get its graphics information from the place in memory where your new character set was placed). Your Bit Pair character set must begin on a multiple of $0800 in 00 the current bank. The character set may not be 01
28
Register BCOLO BCOL1
Bit Pair Register 10 11
BCOL3 Lower 3 bits of COLOR RAM
EXTENDED BACKGROUND COLOR MODE In certain applications where you do not need a very large character set Oess than 65 characters), you can use more colors than the standard text mode will allow by using the extended background color mode. In this mode, you do not sacrifice any resolution to gain extra colors; you only sacrifice the number of characters available from your character set. You can control both the foreground color (using the color RAM) and the background color of each character. The two most significant bits of the character code are used to select a background color from one of four registers, BCOLO to BCOL3. Because of this, only the first 64 characters from your character set can be used. The extended background color mode is enabled by setting bit 6 of the YSCRL ($D011) register. This mode can be turned off by clearing bit 6 of the YSCRL register. The following chart shows the relationship between the most significant two bits of the character code and the background color:
Bit Pair Register 00 01 10 11
BCOLO BCOL1 BCOL2 BCOL3
BIT MAPPING Even though the various text modes available to you in the Commodore 64 provide many different options for displaying graphics, they still restrict you to using predefined shapes. For the majority of video game applications, you will be unable to use a text mode. The Commodore 64 has a high resolution bit mapped graphics mode that allows you to control each pixel on the screen individually. The display has a resolution of 320 pixels horizontally by 200 pixels vertically. This gives a total of 64000
pixels that can be controlled on the screen. Since each pixel is represented by a bit in graphics memory, 8000 bytes of graphics memory are required to represent the display. There are two different types of bit mapped modes available on the Commodore 64. They are: • Standard bitmapped mode: 320H by 200V, two colors per 8 by 8 group of pixels. • Multicolor bitmapped mode: 160H by 200V, four colors per 8 by 8 group of pixels. To turn on the standard bitmapped mode, you must set bit 5 of the YSCRL register. The GRAPH macro will perform this function for you. 10 turn off the bitmapped mode, you must clear bit 5 of the YSCRL register. You can use the TEXT macro to perform this function. In the standard bitmapped mode, the colors for each 8 by 8 group of pixels are stored in text memory. The high 4 bits control the color of a pixel if its associated memory bit is on, while the lower 4 bits specify the color of a pixel if its bit is off. Color RAM is not used in the standard bitmapped mode. Thble 7-3 shows how the bytes of graphics memory are organized with regard to the screen. This sequence is repeated for all 25 rows. Table 7-3. The Bytes of Graphics Memory as Organized with Regard to the Screen.
ROW 0
ROW 1
0 1 2 3 4 5 6 7
$140 $141 $142 $143 $144 $145 $146 $147
$8 $C $0 $E $F
$10 $11 $12 $13 $14 $15 $16 $17
$18 ......... $138 $139 $13A $138 $13C $130 $13E $13F
$148 $149 $14A $148 $14C $140 $14E $14F
$150 $151 $152 $153 $154 $155 $156 $157
$158 ........ $278 $279 $27A $278 $27C $270 $27E $27F
$8 $9
$A
29
Multlcolor Bltmapped Mode 10 turn on the multicolor bit mapped mode, you must first turn on the bit mapped graphics mode as shown above. Then you must set bit 5 of the YSCRL register. You can turn off the multicolor mode by clearing bit 5 of the YSCRL register. The macros MULTON and MULTOF can be used to turn on and off the multicolor modes. In the multicolor mode, four colors can be displayed in each 4 by 8 group of pixels. Each byte in graphics memory is broken down into 4 bit pairs. Each bit pair specifies where the color information will be found for each pixel. In addition to the two colors that are defined in text memory, the color RAM is used in this mode to hold one more color. The fourth color is the background color that is stored in BCOLO ($D021). The correspondence between the bit pairs in graphics RAM and where the color is found is shown in the following chart:
Bit Pair Color 00 01 10 11
SPRITES
BCOLO UPPER NIBBLE OF CHARACTER RAM LOWER NIBBLE OF CHARACTER RAM COLOR RAM
pear to move in front of a sprite with a lower priority. This can be used to give the illusion of three dimensional movement. The priority of a sprite to the background graphics is individually selected for each sprite. If the background is given priority, the sprite will appear to move behind the background graphics. For instance, if a tree was being displayed in the bit mapped graphics mode, and a sprite in the shape of a dog was to move past the tree, the dog would appear to be moving behind the tree. Each sprite is a block 24 pixels horizontally by 21 pixels vertically. The pixels that are set to one use 1 of the 16 available colors. The pixels that are set to zero allow the background color to show through (are transparent). Like the other graphics modes, a sprite can be selected to be in the multicolor mode, giving it a resolution of 12 by 21 in three colors plus transparent. Wherever a sprite is transparent, whatever is behind the sprite will show through. For those times when a larger sprite is necessary, the VIC chip has the option of doubling the horizontal size, the vertical size, or both. You will not increase the detail available in your sprite by using one of the multiply options, only the size. When a sprite is expanded, each of the pixels is twice the size of the pixels in a normal sprite.
Sprite Pointers A sprite is a small moveable object block that Once a sprite has been defined, the VIC chip can move independently of the background needs to be told where to find the pattern. The sprite graphics. The VIC chip can display eight sprites on definition must be in the currently selected bank the screen at anyone time. Sprites can be displayed of memory for it to be displayed. Since each sprite on anyone of the display modes, and they will look definition takes up 64 bytes, a sprite definition will the same in all of them. You can have up to 256 dif- always start on a $0040 boundary in memory. ferent sprites defined at anyone time, but only eight A 16K bank of memory can hold 256 sprite can be displayed at the same time. The sprite to be definitions, so it will only require one byte to tell displayed can be changed by changing a one byte the VIC chip which sprite to display. The sprite pointer, so animation can be easily performed by pointer is a number which, when multiplied by 64, quickly switching through a few different sprite pat- will give the starting address of the sprite definiterns. Sprites can be moved very smoothly by simply tion. Sprite definitions may not be placed in a secgiving the VIC chip the X and Y coordinates of the tion of memory where the VIC chip sees an image upper left comer of the sprite. of the character generator ROM. Sprites have different display priorities. That The VIC chip will read the eight sprite pointers means that the sprite with a higher priority will ap- from the last eight bytes of the lK of text memory,
30
an offset of $03F8 from the text base address. Since only 1000 out of 1024 bytes of text memory are used to display characters on the screen, the sprite pointers will not interfere with screen graphics. For example, since the default setting of the text memory is at $0400, the first sprite pointer will be $07F8.
disable the multicolor mode. When the multicolor mode is enabled, the horizontal resolution drops from 24 pixels across to 12 pixels. Each pair of bits in the sprite definition is treated as a bit pair, whose value determines which of the four colors will be selected for the pixel. Table 7-4 shows the relationship between the bit pairs and the color registers.
Sprite Controls For most of the sprite control registers, each bit in the register corresponds to one of the sprites. For example, bit 0 represents sprite 0, bit 1 represents sprite 1, and so on. The rest of the sprite controls require a value (such as a vertical location), so there is one register for each sprite. Enabling a sprite. Before a sprite can be seen, it must be enabled. The register SPREN ($DOI5), has an enable bit for each sprite. If the bit is set, the sprite will be enabled. The sprite will only be seen if the X and Y positions are set to the visible portion of the screen. A sprite can be disabled by clearing the appropriate bit. Setting the sprite color. There are eight registers that are used to hold color information, one for each sprite. Any of the 16 available colors may be selected for each sprite. Each bit that is set in the sprite definition will cause a pixel to be displayed in the sprite color. If the bit is clear, the pixel will be transparent. The sprite color registers are:
Table 7-4. The Relationship Between the Bit Pairs and the Color Registers In the Multlcolor Mode.
Name
Address
SPRCLO SPRCLl SPRCL2 SPRCL3 SPRCL4 SPRCL5 SPRCL6 SPRCL7
$D027 $D028 $D029 $D02A $D02B $D02C $D02D $D02E
Setting the multicolor mode. The multicolor mode can be individually selected for each ($DOlC)/sprite by setting the appropriate bit in the MLTSP ($DOlC) register. Setting a bit will enable the multicolor mode, clearing the bit will
Bit Pair Description 00 01
TRANSPARENT, SCREEN COLOR SPRITE MULTICOLOR REGISTER #0 ($0025)
10 11
SPRITE COLOR REGISTER SPRITE MULTICOLOR REGISTER #1 ($0026)
Using the sprite multipliers. Each of the sprites can be expanded in either the X or Y direction. When a sprite is expanded, each pixel is displayed as twice the normal size in the direction of the expansion. The resolution of the sprite does not increase, only the size. To expand a sprite in the X direction, the appropriate bit must be set in the SPRXSZ ($DOID) register. To return the sprite to its normal size, clear and bit. The expansion of a sprite in the Y direction is done in the same way as the X expansion. You must set the appropriate bit in the SPRYSZ ($DOI7) register to expand the sprite. The sprite can be returned to its normal size by clearing its bit in the . SPRYSZ register. The sprite can also be expanded in both the X and Y directions by setting its bit in both registers. Positioning sprites. Each sprite can be positioned independently anywhere on the visible screen and off the visible screen in any direction. Since the screen is 320 pixels wide, it takes more than one byte to specify a horizontal position. Each sprite has its own X position register and Y position register, and a bit in an extra most significant bit register. These registers are shown in Table 7-5. 31
The location specified by the registers is the position where the upper left comer of the sprite will appear.
Table 7-6. The Screen Coordinates at which Normal and Expanded Sprites Will Be Fully Visible.
POSITION
x
Y
X EXP
Y EXP
$18 $140 $18 $140
$32 $32 $E5 $E5
$18 $128 $18 $128
$32 $32 $00 $00
Table 7-5. The Position Registers for the Sprites.
Address
Name
$0000 $0001 $0002 $0003 $0004 $0005 $0006 $0007 $0008 $0009 $OooA $OooB $OooC $0000 $OOOE $OOOF $0010
SPROX SPROY SPR1X SPR1Y SPR2X SPR2Y SPR3X SPR3Y SPR4X SPR4Y SPR5X SPR5Y SPR6X SPR6Y SPR7X SPR7Y XMSB
Description SPRITE 0 HORIZONTAL SPRITE 0 VERTICAL SPRITE 1 HORIZONTAL SPRITE 1 VERTICAL SPRITE 2 HORIZONTAL SPRITE 2 VERTICAL SPRITE 3 HORIZONTAL SPRITE 3 VERTICAL SPRITE 4 HORIZONTAL SPRITE 4 VERTICAL SPRITE 5 HORIZONTAL SPRITE 5 VERTICAL SPRITE 6 HORIZONTAL SPRITE 6 VERTICAL SPRITE 7 HORIZONTAL SPRITE 7 VERTICAL MOST SIGNIFICANT BIT REGISTER
The value placed in the Y position register will specify the vertical position of the sprite on the screen. This value may be up to 255. For an unexpanded sprite to be completely visible, the Y value must be between $32 and $E9. Any other values will place the sprite partially off the screen. Whatever value is placed in the X position register is the least significant 8 bits of a 9 bit value. Each sprite has a ninth bit in the XMSB ($DOlO) register. An unexpanded sprite will be completely visible if the 9 bit X value is greater than $18 and less than $140. The HINC and HDEC macros can be used to perform 9 bit increments and decrements of the X position. Table 7-6 shows the screen coordinates for expanded and unexpanded sprites to be fully visible on the screen. Any sprite positions outside of these limits will be partially or fully off of the screen. This provides an easy way to reveal a sprite gradually. Assigning sprite priorities. As mentioned before, each sprite has a display priority with
32
UPPER LEFT UPPER RIGHT ". LOWER LEFT LOWER RIGHT
respect to the other sprites and to the background. You can create a three dimensional effect by allowing different sprites to pass in front of each other. The priority of one sprite to another is predetermined by the VIC chip. Sprite 0 has the highest priority, meaning that it will appear to be in front of all other sprites. Sprite 7 has the lowest priority of all the sprites. Each sprite can be individually selected to either have a higher priority than the background or a lower priority. If the sprite's bit in the BPRIOR ($D01B) register is clear, the sprite will appear to pass in front of the background. When the bit for the sprite is set in the BPRIOR register, the sprite will appear to move behind the background image and in front of the background color. Because sprites can have transparent as one of their colors, any sprite that passes behind a higher priority sprite with transparent in it will show through in the transparent areas. COLLISION DETECTION
The VIC chip can detect collisions between sprites and also between a sprite and the background. The VIC chip will defect collisions between the nontransparent portions of sprites. When a collision between two sprites occurs, their bits are set in the SSCOL ($DOlE) register. The data in the SSCOL register will stay valid until the byte is read. After the register is read, the data will be cleared, so it is important to store the data somewhere before analyzing it. The VIC chip will detect a collision even if the sprites are off the screen. One thing that should be noted is that the SSCOL register will only tell you which sprites are
involved in collisions, not which sprite hit which sprite. If you are multiplexing sprites, the data in the SSCOL register may be useless. Sprite to background collisions are handled in almost the same way. The SBCOL ($DOIF) register will detect a collision between the nontransparent portion of a sprite and the background. In a multicolor screen mode, the bit pair 01 is considered transparent for collision detection. Like the SSCOL register, the data is cleared after reading it. BLANKING THE SCREEN
The entire screen can be blanked to the border color by clearing bit 4 of the YSCRL register. The screen can be turned back on by setting bit 4 of the YSCRL register. Blanking the screen does not disrupt any data on the screen. When the screen is blanked, your program will run slightly faster because the VIC chip doesn't need to fetch any data from memory.
Bit
o 1 2 3 7
Type of Interrupt RASTER SPRITE TO BACKGROUND COLLISION SPRITE TO SPRITE COLLISION LIGHT PEN SET ON ANY ENABLED INTERRUPT
Once an interrupt bit has been set, a 1 must be written to that bit position in order to clear it. This allows you to process interrupts one at a time, without having to store the data elsewhere. Interrupts will only be sent to the microprocessor if the corresponding bit in the video intemtpt mask register, VIRQM ($DOIA), is set. You will still be able to read the interrupts from the VIRQ register, but if the appropriate bit in the VIRQM register is not set, no interrupts will be generated. See the section on using interrupts for more information on using interrupts properly.
THE RASTER REGISTER
The VIC chip keeps track of which scan line the electron beam is currently on. Since there are more than 255 scan lines in one TV frame, this will be a 9 bit value. The least significant 8 bits of the current scan line can be read by reading the RASTER ($DOI2) register. The ninth bit can found in bit 7 of the YSCRL register. You can write a 9 bit value to the RASTER register and bit 7 of the YSCRL register. When the scan line reaches the value that you stored, bit 0 of the VIRQ ($D019) register will be set. If bit 0 of the VIRQM ($DOIA) register is set, an interrupt will be sent to the microprocessor. You must remember to store a ninth bit when storing a RASTER number, or the comparison will not take place. The RAST macro will set the 9 bit raster number for you. VIDEO INTERRUPTS
Different conditions within the VIC chip can generate interrupts. The interrupt status can be read by reading the video interrupts register, VIRQ ($DOI9). The bits have the following meanings:
SCROLLING
One of the most advanced features of the VIC chip is its ability to smoothly scroll the screen in either the X or Y direction. The VIC chip can scroll the screen using hardware, freeing the microprocessor from the task of finely scrolling the screen. When the screen needs to be scrolled, the VIC chip can be instructed to scroll the screen within a range of 8 pixels in the X direction, the Y direction, or both. The least significant three bits of the YSCRL ($DOll) register control the amount of vertical scrolling. Since this register is also used for a number of control functions, the register should be read before it is changed. The XSCRL ($DOI6) register works in the same way as the YSCRL register except that the XSCRL register controls the amount of horizontal scrolling. When changing either of these registers, the lower 3 bits should be masked to 0, and the number of pixels to be scrolled should be OR'd to the new value. The result of this procedure can then be stored back into the register.
33
The following is a routine that can be used to change the value of the YSCRL or XSCRL register. This example shows how to set the YSCRL register to a scroll value of 7 without disturbing the value of the upper bits of the register.
LOA AND ORA
STA
YSCRL #$F8
#$07 YSCRL
;LOAD THE DATA ;MASK THE LOWER 3 BITS ;SCROLL 7 PIXELS ;STORE THE NEW VALUE
As the scrolling value goes from 0 to 7 in the YSCRL register, the screen will scroll down. As the value in the XSCRL register goes from 0 to 7, the screen will scroll to the right. When scrolling the screen, you will usually want to expand the border area of the screen. This will give you an area to place the new graphics to be scrolled onto the screen where they will not be seen. The VIC chip has two controls that will expand the border. The first of these is a 38 column mode. This mode can be selected by clearing bit 3 of the XSCRL register. The VIC chip can be returned to the 40 column mode by setting bit 3 of the XSCRL register. In the 38 column mode, one column on the right side of the screen and one column from the left side of the screen are covered by the border color. This will give you a buffer area where changes to the screen will not be seen. The other border expansion option is useful for vertical scrolling. By clearing bit 3 of the YSCRL register, when the vertical scroll is set to 3, half of the top row and half of the bottom row will be covered by the border. The VIC chip can be returned to the normal 25 row mode by setting bit 3 of the YSCRL register. When the vertical scroll is set to 0, the top line will be entirely covered by the border. When the vertical scroll is set to 7, the bottom line of the screen will be entirely covered by the border. Once you have reached a maximum scroll value in the X or Y direction, you will have to shift each character on the screen in the direction of the scroll in order to continue scrolling. After moving all of the characters on the screen, you can reset the fine
34
scrolling registers to their minimum value and continue to use the hardware registers to scroll the screen. There are a number of things that must be taken into account when writing a scrolling program. In order for the screen to appear to be in continuous smooth motion, the routine that will shift each character must be extremely fast. Also, if you are using a number of different colors in color RAM, each character in color RAM must be moved in the direction of the scroll at the same time as the characters in screen memory. If you do not need to scroll the entire screen, your program can be much shorter and will run faster. If your program does not run fast enough, you will see breaks in your graphics where the characters that have been scrolled are adjacent to characters that have not yet been scrolled. If possible, your routine should be fast enough to reposition the entire screen in one screen update time (1/60 of a second). You can get by with a slower routine if you scroll your screen memory into a different area of memory than the one that is currently being displayed. This must be completed before the fine scrolling register reaches its limit, so when the entire screen needs to be repositioned, it will be ready. Instead of repositioning the entire screen at that point, which would have to be done within 1/60 of a second, all you need to do is to use the TXBAS or GRABAS macro to instruct the VIC chip to get the data from the area that has already been repositioned. The macro that you will use depends on the graphics mode that the screen is in.
JOYSTICKS At some point, you will want to allow the player to have control over his character in the game. The most common form of input to a video game is a joystick. The Commodore 64 has two input ports that can be used for joysticks. By setting both DDRA ($DC02) and DDRB ($DC03) to $00, the two ports will be configured as inputs. Once the ports have been configured, the data from the joysticks can be read from JOY1 ($DCOO) or JOY2 ($DC01). Bit 4 of a joystick port represents the fire button on that joystick. If that bit is clear, the fire button
is depressed. The lower five bits of a joystick port represent the direction of the joystick as shown below:
Bit
Direction
o
UP
1 2 3
DOWN LEFT RIGHT
4
FIRE BUTTON
When a contact on the joystick is pressed, its corresponding bit in the joystick register is clear. When two out of the lower four bits are clear, the joystick is on an angle. If you find it more conve-
nient or manageable to have a bit set representing a closed switch, the NOT macro can be used to invert the data. Before using the joystick data as any type of an index into a table of data, you must mask the unused bits in the register. You will normally want to mask the entire upper nibble and treat the fire button separately. The following routine will invert the joystick data from port 0 and mask the unused bits as well as the fire bit. The result will be a four bit value that represents the joystick direction.
LOA JOY1
NOT AND #$OF
;REAO THE JOYSTICK PORT ;COMPLEMENT THE ; ACCUMULATOR ;MASK THE UPPER BITS TO 0
35
Chapter 8 Sound Effects One of the most advanced features of the Commodore 64 is its ability to generate sounds. Built into the Commodore 64 is a highly advanced sound generator, the sound interface device or SID chip. This chip has the capability of generating three independent tones over a range of more than six octaves. It has controls in each channel to control the attack, decay, and release times, and a sustain level for the volume of each channel. In fact, most of the features found in a musical synthesizer can be found in the SID chip. Figures 8-1, 8-2, 8-3, and 8-4 show some of the different waveforms that the SID chip can generate. Figure 8-1 shows a triangular waveform, which will produce the cleanest tone, as it is a fairly close approximation of a pure sine wave. Figure 8-2 shows a sawtooth waveform. You will notice that it has sharper edges to it than the triangular waveform. Sharp edges on a waveform tend to generate various harmonics of the tone, so in general, the sharper the edges in a waveform, the more harmonics will be generated. The differences in the harmonic content can be heard as a difference in harshness of the tone.
36
A triangular waveform will produce a very smooth, soft tone, while the square waveform, as shown in Fig. 8-3, produces a very sharp biting tone. When you select the square waveform in the SID chip, you have extra control over the tone of the sound. You can program in a pulsewidth for the wave, which varies the symmetry of the square wave. Depending on the settings that you use, the waveform will be more rectangular than square, as shown in Fig. 8-4. The SID chip can also generate a noise waveform. This is a random signal that changes at the oscillator frequency. Many games will use this waveform to generate explosions, wind storms, or any type of sound that is not a specific tone. In addition, if channel 3 is set to generate noise, the amplitude of the waveform can be read by the microprocessor at any time. Because this is a constantly changing value, the number read will be a random number. FILTERING After you have created a sound, you can change
Fig. B-1. Triangular waveform.
Fig. 8·2. Sawtooth waveform.
37
Fig. 8-3. Square waveform.
Fig. 8-4. Rectangular waveform.
38
it drastically by having the sound pass through one or more types of filters. An audio filter changes the sound by cutting down the volume of certain frequencies. Different types of filters will modify a sound in different ways. Each channel can be individually selected as to whether or not it will be passed through the filter. The ability to route the audio outputs through one or more filters is a very powerful feature of the Commodore 64. Unlike most computers, which allow you to generate only simple tones, the filtering modes of the SID chip allow you to generate complex tones by modifying the harmonic content of the tones. The filters accomplish this task through a technique known as subtractive synthesis. By using an input source that is high in harmonics, the filter can selectively eliminate specific frequencies. Depending on the filtering mode, the same initial tone can be used to create many different sounds. In addition to using the filtering modes in a static fashion (setting them and leaving them), you can control the filter settings in real time. By doing so, you will be able to create sounds such as wind
storms and jet engines. These are sounds that cannot normally be generated well by a home computer. There are three types of filters in the SID chip, a low pass filter, a band pass filter, and a high pass filter. More than one type of filter can be selected at one time. When multiple filters are selected, the effects are additive. A notch filter can be created by selecting both the low pass and high pass filters. The filters will affect the sound in the following ways. Low pass filter. When the low pass filter is selected, all frequencies above the cutoff frequency are attenuated at the rate of 12 dB/Octave. This filtering mode will generate a full sound. Band pass filter. The bandpass filter will attenuate all of the frequencies above and below the cutoff frequency at the rate of 6 dB/Octave. A bandpass filter produces thin sounds. High pass filter. All of the frequencies below the cutoff frequency will be attenuated at the rate of 12 dB/Octave when the highpass filter is selected. Tinny sounds can be generated when using this mode. Figures 8-5 through 8-7 show graphics fre-
v
o I u
m e
Frequency Fig. 8-5. The effects of changing the filter cutoff frequency for a Io-pass filter (continued on p. 40).
39
v
o I u m
e
Frequency
v o I u
m e
Frequency
40
quency amplitude as the cutoff frequency of the filters are changed.
THE SOUND GENERATOR DEMO Included in Appendix C is a program that shows many of the abilities of the SID chip. Listing C-5 is the source code; listing C-6 is the assembled code. This program loads three machine language files COMMON in Listing C-7, SNDDEF, in Listing C-8, and DATA in Listing C-9. By listening to this demo, you will begin to hear some of the possible sounds that can be created on the Commodore 64. As the demo is running, it will show you on the screen what effect it is currently demonstrating. Some of the longer attack and decay times will take a while to demonstrate, so please be patient. 10 run the demo, type in the following after checking to make sure the volume on your monitor is turned up:
LOAO"SOUNO OEMO",8,1 SYS 4096 The sounds and effects in the program are by no
means all of the sound effects that can be created by the SID chip. Depending on how sophisticated you care to become, you will be able to get many effects that are not directly obvious. For instance if you write a program that changes the volume of one of the channels in real time, you will have full control over generating different types of tremelo effects. There are program segments in the demo that can be used directly or expanded to help generate almost any type of sound or tune. The routine that generates the short tune that is played to show the effects of different waveforms simply reads a list of notes and note times. If the value of a note is $00, then the routine will quit. By changing the note values in the note table and the time values in the time table, this routine will play any type of tune.
THE SOUND EDITOR In order to aid you in choosing values for the different registers, in the SID chip, a sound editing program has been included in Appendix C. Listing
v o I
u
m e
Frequency Fig. 8-6. The effects of changing the filter cutoff frequency for a hi-pass filter (continued on p. 42).
41
v o
I u
m e
Frequency
v o
I u
m
e
Frequency
42
v o
I u
m e
Frequency
v o
I u
m e
Frequency Fig. 8-7. The effects of changing the filter cutoff for a band- pass filter (continued on p. 44).
43
v o I
u m e
Frequency
COlO is the source coed; Listing C-ll is the assem- Table 8·1. The Controls for the Sound Editor Program. bled code. The Sound Editor shows all the SID CURSOR DOWN Moves the cursor down one f'IeId chips' registers on the Screen using the naming conMoves the cursor up one field CURSOR UP ventions discussed in Chapter 3. A cursor can be CURSOR RIGHT Moves the cursor one field to the moved aroUnd the screen, allowing you to change right the values that will be loaded into any of the SID CURSOR LEFT Moves the cursor one field to the registers. All of the numbers are typed onto the left screen in hexadecimal notation, so the data that you 0-9 Allowable numbers for the data create can be easily entered into your assembler. fields After all of the data fields that you care to change Allowable letters for the data fields A-F have been updated, you can instruct the Sound Editor to transfer the data to the SID chip. If you F1 Transfers the data from the screen have enabled one of the channels, this should proto the SID chip and the software duce a sound. 10 run the Sound Editor, type: timer,
LOAO"SOUNO EOIT", 8, 1 SYS 4096
The controls for the Sound Editor are shown in Thble 8-1. 44
A brief description of the registers used by the Sound Editor follows. For a more detailed description of each register, refer to the section on the SID chip. A listing of hexadecimal values for 6+ octaves
worth of notes is provided in the COMMON file, Listing C-7 in Appendix C. In the following descrip-
VIATDC VISURL VIFRLO VIFRHI VIPWLO VIPWHI VICORG
tion, wherever all three voices have identical registers, voice #1 is used as an example.
The high nibble controls the attack time for this channel; the low nibble controls the decay time. The high nibble controls the sustain level for the channel; the low nibble controls the release time. This is the low order 8 bits of a 16 bit value that specifies a frequency for the channel. This is the high order 8 bits of a 16 bit value that specifies a frequency for the channel. This is the low order 8 bits of a 12 bit value that specifies the pulse width of the channel when you are generating a square wave. The lower nibble of this register contains the high order 4 bits of a 12 bit value that specifies a pulse width of the channel when generating a square wave. This register is the control register for the sound channel. It controls the type of waveform as well as the synchronization mode. The enable bit for the channel is in this register.
The following registers affect all three voice channels. FLCNLO FLCNHI MODVOL RESFLT
The least significant 3 bits of this register are the low order 3 bits of an 11 bit value that controls the filter frequency. This register contains the high order 8 bits of an 11 bit value that determines the filter frequency. The filtering mode and the maximum volume for all three voice channels is controlled by this register. This register contains the resonance value and the filter enables for all three channels
The last two registers used by the Sound Editor are not SID registers but RAM locations. These registers are treated as a 16 bit value that is used as a time counter. They are decremented every 1/60
of a second. When the 16 bit value has been decremented to $0000, the release sequence is initiated for all three channels.
SNIYI'MI
This is the low order 8 bits of a 16 bit value that determines the time in 1160 second intervals before the release sequence is initiated.
SNDTMl+l
This is the high order 8 bits of a 16 bit value that determines the time in 1/60 second intervals before the release sequence is initiated.
45
By experimenting with different values in the registers, you will very quickly get a feel for what effect different values have on the sound. Being able to specify the amount of time to play the sound can
46
greatly speed up the time it takes to polish a game, as the values for the sounds can be determined separately from the main program.
Chapter 9 Creating Graphics Up until now,this book has been primarily concerned with background information necessary for creating the program that will ultimately become a game. This is certainly an important part of learning to program a game, but by no means all of it. Because a video game is an audio-visual experience, it will be necessary to create the graphics data that will be operated on by the program. There are a number of methods that can be used to create and enter graphics information into the computer. The method that you choose is purely a matter of personal preference. This chapter will discuss a few of the options available to you when it is time to create graphics data. Also, instructions for using the graphics utility programs in Appendix C are given in this chapter. HAND CODING GRAPHICS At some point, you will probably be entering graphics data into your machine by hand. As this can be a very time consuming process, this section will show you some techniques that may make your job a little easier.
Before you sit down to enter graphics data, you should have a good idea of what you want the final object to look like. You will need to know the graphics mode that you will be working in. Also, you must decide what colors you are going to use. For instance, if you are using multicolored sprites, each sprite can have one color of its own and can use 2 colors that are common to all the other sprites. 10 ensure that you will have the proper colors available to you, it would be wise to have decided how all of the characters should look before you start. Once you have chosen a graphics mode to work in, you will be able to start drawing your characters. In Figs. 9-1 through 9-7 you will find some sample graphics layout sheets. These sheets have a fine grid that is proportional to the dimensions of a pixel on the TV screen. The heavy grid is proportional to one character cell on the screen. There are 25 lines of 40 characters each on the Commodore 64. One thing that you should keep in mind when you are creating graphics for use on the Commodore 64 is that it is often necessary to use more than one
47
Fig. 9-1. A grid showing character spaces and individual pixels.
48
Fig. 9-2. A grid showing character spaces and double-wide dots for multicolor modes.
49
Fig. 9-3. A grid showing character spaces.
50
pixel of a color on a line to guarantee that the pixel can be seen on the television. Thlevision sets were not designed to be able to display drastic color changes on adjacent pixels. Depending on your color choices, a single pixel in an area of the screen may not be seen. This is due to the time that it takes the TV to turn on and off the appropriate electron guns that brighten a pixel. If the TV does not have enough time to adjust the guns, the pixel will have just started to light when the beams are changed for the next pixel. On the other hand, if you have 2 or more adjacent pixels on a line of the same color, there will be enough time for the beams to be readjusted and the pixels displayed. The form in Fig. 9-1 is the form to use if you are going to be using the standard bitmapped graphics mode. You will notice that each pixel is rectangular in shape, rather then square as might have been expected. Thus, care must be taken when attempting to draw geometric patterns on the screen. Since the pixels are rectangular, the normal equations for generating geometric shapes do not hold true. However, if you take into account the 4/3 aspect ratio of the pixels, any shape can be drawn properly. The form in Fig. 9-2 is to be used if you are going to be using one of the multicolor modes for your graphics. You will notice that ea~h pixel on this form is twice as wide as the pixels on the form 9-1. This is because it takes two bits to represent the four colors available to each block in the multicolor mode, as opposed to the one bit that is needed to determine whether the foreground or background color will be used in the standard color mode. Once again, the pixels are not square, and care must be taken when you are creating shapes. The form in Fig. 9-3 is generally used to represent the screen in the character graphics mode. It also can be used as an overlay to represent one of the color memory areas in the bitmapped graphics mode. The forms in Fig. 9-4 through 9-7 can be used as design aids when you are creating sprites. There are four different sizes available. The different sizes correspond to the sprite X and Y multiplier options. If you decide to use one of the expanded sprites,
Fig. 9-4. A grid for an unexpanded sprite.
be sure to modify your program to change the SPRXSZ and SPRYSZ registers to the size option that you desire. The size of the grid on the sprite form is identical to the grid on the other graphics forms. This allows the sprites that you create to be placed on top of your background graphics forms to see how the entire screen will look. Once you have translated your drawing into a series of bytes, you have a couple of options as to what to do with the data. If you have a machine language monitor, you may choose to use the Memory Display option to display the range of memory where you would like your graphics data to go. At this point, your monitor should allow you to change the data on the screen. By using the data from your drawings to modify the data on the screen, you will create a section of memory that represents your graphics. After you have finished entering the data into the monitor, be sure to save the range of memory that you have just modified to the disk. The next step is to enter the address of your graphics into your program so that it can find the graphics later. Your other option is to enter the data into your assembler using the .BYTE directive. You can then assign names to all of the different areas of your graphics. The assembler can be directed to store the graphics data anywhere in memory. The main disadvantage of entering the data into the assembler is that the data will be reassembled each time a
51
Fig. 9-5. A grid for a horizontally expanded sprite.
change is made in your program. Depending on the amount of graphics data that you have, this can add substantially to the time that it will take to assemble the file. Another option would be to assemble the graphics data separately from the main program. If you do this, you must give the main program the addresses of where the graphics data will be located. In this case, the graphics data need be assembled only once. (Or, at least only as often as is needed to get the data correct.)
use of one graphics mode over another. If your application requires the use of a certain graphics mode, the graphics package that you choose must use the
USING A GRAPHICS TABLET A more popular way in which to enter graphics data into the Commodore 64 for use within the program is to use commercially available graphics packages to generate pictures. One of the most popular and useful of these is the Koala Pad. This package comes with a touch pad and software that allows you to easily generate background screens. Almost any type of graphics package will help speed up the process of generating graphics. A word of caution: before selecting a graphics package to aid with your drawings, it would be wise to be sure that it will fullfill your needs. There are two major pieces of information that you will need about the package: • What graphics mode does it use? • How can the picture be retrieved form the disk? Different types of games will benefit from the
52
Fig. 9-6. A grid for a vertically expanded sprite.
Fig. 9-7. A grid for a sprite that has been expanded both horizontally and vertically.
same mode. Otherwise, the data created will not be useful for your program. This sounds like good advice in theory; however, you will probably find that most of the available packages will use the multicolor bitmapped mode. On the other hand, even if the program can not be used to generate data, it may be useful for testing color choices and to see how things will look. It is quite possible that you will find a graphics package that will seem to do everything that you would like it to, only to find later on that you can't get your picture back off the disk. It wouldn't seem to be very useful to create a picture if you can't use it. Some graphics packages use what appear to be protected file names to prevent you from retrieving your picture without using the software that created it. You should contact the manufacturer of the graphics package if there is no documentation on how to load the picture without their software. If
you can get no satisfactory information from the manufacturer, or they claim that you have no right to know, you should not buy their software package. When shopping for a graphics package, one especially useful feature is a zoom mode. Using a zoom mode, you will normally be able to change individual pixels on the screen with a minimum of effort. This will allow you, among other things, to clean up a drawing that was made free-hand or create a shape pixel-by-pixel, which is too intricate to create in any other way. Be wary of a piece of software that will not allow you to use all 16 of the colors that the Commodore 64 can display or does not use the full resolution of the screen. After all, there is no reason to sacrifice any of the abilities of your machine because of some other programmer's shortcomings. In fact, most good graphics programs will give you a pallette of more than 16 colors by giving you mix-
53
tures of the different colors in different patterns. This can give you a choice of many colors and shades of colors that you may not have been aware were possible. Another feature that you wi11leam to appreciate greatly is an OOPS command. This usually allows you to erase the last changes that you have made to your drawing. This is a very useful function when you wish to experiment with color changes and other types of changes or additions that you might not be sure you like. If you don't like your change, you simply give the OOPS command and your drawing is returned to the state it was in before the change. The following section will give some information about the Koala Pad from Koala Thchnologies. Some of the information has come from the manufacturer and is not in the documentation that comes with the package. This is not by any means the only software package that will aid in game design; it is only being used as an example. A number of manufacturers have recently released light pens with graphics software, which may be useful. There are also digitizing tablets, joystick controlled graphics software, and keyboard controlled graphics software, which might be suitable. To attempt to evaluate all of the different packages is beyond the scope of this book. The preceding information should aid in your evaluation of a product in the stores, and the following information on the Koala Pad should show you what type of information you will need to properly use the package of your choice. Using a Koala Pad
The Koala Pad is a touch sensitive tablet with an active area of 4" by 4" and a resolution of 256 by 256 points. The pad plugs into one of the joystick ports on the Commodore 64 and is treated as a pair of game paddles by the software. File format. Before you try to use the data created on the Koala Pad, you will want to convert the name of the file to something more usable. When the software saves a screen to the disk, it precedes your file name with a single byte whose value is $81. This character prints on the screen as 54
an inverted spade and is inaccessible from the keyboard. Koala uses this character as a flag to identify files that it has saved on the disk. This character is followed by the character string PIC, which is followed by a picture letter and a space. A pair of utility programs that will convert file names to and from the Koala Pad format are in Appendix C. These are: Listing C-12 KO-COM
Changes the name from Koala format to Commodore format.
Listing C-13 COM-KO
Changes the name from Commodore format to Koala format.
These are BASIC programs that will prompt you for the current filename and the name that you would like the file to be called. When using COMKO, the program will insert the special character at the beginning of the name for you. After you have changed the name of the file into something that can be loaded, you will be able to use your machine language monitor to examine and reconfigure the data. The data is stored on disk in the following format: Koala Memory Map $6000 - $7F3F $7F40 - $8327 $8328 - $870F $8710
Graphics image Color memory image Color RAM image Background color
Note: If you are using a cartridge based machine language monitor, you may not be able to read the file as the cartridge replaces the RAM where the data will be loaded. After you have loaded the file, you can relocate the graphics data and the color data to anywhere that is convenient to your program. You should then save your newly created file back to the disk. You will probably want to move the data since the Koala software is more interested in reducing the size of the disk file than in placing the data in a usefullocation. It would be a good idea to move the color
memory areas to the beginning of a page boundary. its true size and color, so you will be able to see exThis will make it easier and faster to manipulate actly what the finished sprite will look like. In the the data later. The background color may be stored upper left comer of the screen, there will be a white wherever is convenient. box if you are in the plot mode; otherwise you will The data was created using the multicolored bit- be in the unplot mode and the comer will be blank. mapped mode, so be sure to set the multicolor mode Th run the Sprite Maker program, you must bit in the VIC chip before displaying the picture. type the following: Also, note that the border color is not stored in the LOAD"SPRITE MAKER", 8 file. You must set the border color to the appropriate RUN value before displaying the picture. DISPLAY PIC, Listing C-14 in Appendix C, will display a Koala Pad picture on the screen. It will Enter the name to be used when saving or load the machine language routine MVIT in Listing loading from disk. C-15. This program follows the steps above to The SPRITE MAKER uses a combination of display the picture. It will also set the border color joystick and keyboard controls. All of the control to black. It will display the picture until the shift options are shown below. key is pressed on the keyboard. This program will Moves the cursor around not display a picture if you change the location of JOYSTICK the zoomed sprite the data in the file. Th run this program enter: FIRE BUTTON Plots or unplots a point LOAD"DISPLAY PIC",8
F1 Thggles the plotting mode RUN F3 Enables the multicolor mode F4 Disables the multicolor mode Enter the name of the picture to be displayed when F5 Changes the sprite color prompted. The file name must have been previously F6 Changes the background color changed using the KO-COM utility. A picture in the F7 Changes the multicolor 1 Koala Pad format is in Listing C-16 in Appendix C register under the name PIC A CASTLE. This picture can FS Changes the multicolor 0 be viewed using the DISPLAY PIC program. This register drawing could make a nice background for a game, S Saves the sprite to the disk if you were so inclined. L Loads the sprite from the disk USING THE SPRITE MAKER
Listing C-17 in Appendix C is a sprite making utility in BASIC. It loads two machine language routines, SLIRO in Listing C-1S and CLSP2 in Listing C-19. Using this program, you will be able to quickly create a sprite in either the one color or multicolor mode. You will be able to change any of the colors in the sprite or the background color. After you have finished designing a sprite, you will be able to save it to the disk for use in a program later. As you are drawing your sprite on the screen, you will be plotting squares on a 24 by 21 array of squares on the left side of the screen. In the upper right section of the screen, the sprite is shown in
The joystick will move the cursor around the screen. When the fire button is pressed, a square will either be plotted or unplotted, depending on the plot mode at the time. Pressing the F1 key toggles the plotting mode. The mode is set to OFF when the program is first run. The F3 key will enable the multicolor mode. Pressing the F4 key disables the multicolor mode. The multicolor mode is off when the program is first run. Pressing F5 will increment the sprite color register. The F6 key increments the background color. Pressing F7 will increment the sprite multicolor 1 register. This will only show an effect when the multicolor mode has been selected. Pressing FS will increment the sprite multicolor 0
55
register. This will only show an effect when the FIRE BUTTON Plots the selected character on the screen multicolor mode has been selected. Pressing the S Increments the current button will save the sprite to the disk using the name Fl character number that you had entered earlier. Pressing the L button Decrements the current will load a sprite pattern from the disk with the F3 character number name that you entered earlier. Increments the character color After you have finished editing a sprite, the F5 Increments the background color sprite data will be at $4000. By using a machine F7 Loads a file from the disk language monitor, you will be able to save the binary L Saves a file to the disk sprite data from $4000 to $403R If you will be us- S ing multiple sprites, you may wish to move the data to a safe area in memory so that you can merge your After you run the program, the screen will clear new sprites with the old ones. and the first character in the character set will be displayed in the upper left hand comer of the screen. USING THE SCREEN MAKER UTILITY The next character in the upper left hand comer If you are going to use a character graphics of the screen shows the current character color. If mode, you will need some way to specify the place- this color is the same as the background color, the ment of the character graphics on the screen. The space will appear blank. SCREEN MAKER Listing C-20 in Appendix C will Pressing the Fl key will select the next aid you in defining a screen of graphics. This pro- character from the character set. You will see the gram will load three machine language routines, character in the upper left comer of the screen. By CLBACKl in Listing C-21, CLSPl in Listing C-22, repeatedly pressing the Fl button, you can scan and SLIRO in Listing C-18. This program will allow through your entire character set. Button F3 will you to select any of the characters out of your select the previous character from the character set. character set, and place it in any position on the By using these two buttons, you will be able to move screen. This will allow you to see quickly how your forward or backward through the character set. screen will look. When you are finished, you will The F5 key will increment the character color. be able to save the screen to the disk. 10 run the This is the color that will be placed into the color program, type: RAM when the character number is placed in the screen RAM. Pressing the F7 key will increment LOAD"SCREEN-MAKE",8 the background color. This is useful when you wish RUN to see what the screen would look like with different background colors. Enter the filename to be used when loading or savYou may load a screen to be edited using the ing a file to the disk when prompted. The follow- L command. When you are finished making ing controls are used in this program: changes, you should use the S command to save the screen back to the disk. When a screen is saved to JOYSTICK Moves the cursor around the the disk, the color information is saved to the disk screen along with the character placement information.
56
Chapter 10 Some Arcade Games Before attempting to design your own video game, it would probably be helpful to understand how some other games are designed. In this chapter, you will be shown some of the ways in which some popular arcade video games could be programmed into the Commodore 64. In fact, the description of how to program these games may be quite accurate in terms of how the original was done. Bear in mind, however, that arcade machines tend to have some specialized hardware for graphics creation.
PAC-MAN The most popular arcade game in recent times is PAC-MAN. This is a maze type game in which the player controls PAC-MAN in his journey around the maze while being chased by computer controlled ghosts. If PAC-MAN is hit by one of the ghosts, he loses a life. On the other hand, if PACMAN manages to eat one of the power pellets on the playfield, for a short amount of time the ghosts will turn blue. During this period of time, PACMAN may eat his enemies for a greater score.
Difficulty levels are created by changing the speed of all of the characters and changing the amount of time that PAC-MAN has in which to eat the ghosts. PAC-MAN must eat all of the pellets on the playfie1d in order to advance to the next difficulty level. 1\vice during each level of playa bonus character appears on the screen for a short period of time. If PAC-MAN can eat the bonus character, he gets bonus points. The bonus character is worth more points on the higher levels. If you were to program PAC-MAN on the Commodore 64, you would probably use the multicolor character graphics mode for the maze and the pellets. PAC-MAN and the four ghosts would be sprites. The bonus character could also be a sprite. At this point, you would have two sprites to spare because the Commodore 64 allows eight sprites, and only six have been allocated. These remaining two sprites could be used as the four power pallets by repositioning the sprites after the top 2 pellets have been displayed. This technique will be discussed in more detail in a later chapter.
57
Since the Commodore 64 maintains collision KONG very carefully, you may see how its designers registers to determine collisions between sprites and avoided the problem of needing a large number of between sprites and background, determining when sprites. When a barrel rolls past Mario and heads PAC-MAN hits a ghost or power pellet should be for the next lower level, it will normally roll off the no problem. The only part of the program that may edge of the screen rather than descending to the be difficult is the part where it is determined which next level. Because the player's eyes are normally of the normal pellets PAC-MAN has eaten. For the focused on Mario and the portions of the screen most part, putting PAC-MAN on the Commodore above him, he will not normally notice the disap64 would be a very direct translation. On the arcade pearing barrels. Because the machine does this, it game, the video monitor is rotated 90 degrees, never needs more than five sprites to display all of which makes the maze taller than it is wide. This the barrels. This same technique will work for a would be the only major discrepency between the translation of DONKEY-KONG for the Commodore arcade machine and a Commodore 64 translation. 64. If five sprites were reserved for fireballs and" barrels and one for Mario, there would still be two left over for hammers. In fact, you would have even DONKE\(.KONG more flexibility in the use of sprites. For the most part there are only 3 or 4 sprites displayed on any In DONKEY-KONG, the player controls Mario, given line. Using the technique of repositioning who is trying to rescue a girl from the clutches of sprites, you could reposition the sprites on different DONKEY-KONG, a large ape. To do this, Mario lines. must climb the various structures that DONKEYLike PAC-MAN, in the arcade, DONKEYKONG sits on. 10 make Mario's life more difficult, KONG's screen is rotated 90 degrees from a norDONKEY-KONG keeps throwing barrels and hammal television. For this reason, any translation of mers down at Mario. On some screens, there are fireballs that he must dodge. As Mario climbs DONKEY-KONG to the Commodore 64 will be toward DONKEY-KONG, he can pick up articles of wider and shorter than the original. the girl's clothing that she has dropped on her way up. Mario can also pick up a hammer and proceed to beat up the barrels and fireballs for a short CENTIPEDE amount of time. Mario can jump over the barrels In CENTIPEDE, a nasty centipede is running and fireballs, for which he gains points. If Mario can loose in a field of mushrooms. It starts at the top get up to the level where DONKEY-KONG is stan- of the screen and winds its way down the screen ding, he either rescues the girl, or depending on the until it gets to the bottom, where the player's gun level, DONKEY-KONG carries the girl higher up on is. The players must shoot the centipede without the structure. Mario is then presented with the next getting hit by it. The centipede has 11 body level of play. The arcade version of the game has segments. If the head is hit, the next body segment four different types of structures that must be becomes the new head. If a body segment is hit, climbed. the centipede breaks into two parts, each of which Thmslating DONKEY-KONG to the Com- has its own head. Whenever a segment of the cenmodore 64 is very similar to translating PAC-MAN. tipede hits a mushroom, it drops down to the next The background structures, DONKEY-KONG, and line and turns around. the girl can all be made up of character graphics. In addition to the centipede, the player must The articles of clothing that the girl has dropped also avoid the spiders and fleas. Fleas add to the can also be made up of character graphics. This mushroom field, while spiders destroy mushrooms. leaves all of the sprites free for Mario, the barrels Scorpions poison the mushrooms that they touch. and the fireballs. A poisoned mushroom causes the centipede to deIf you watch an arcade version of DONKEY- scend straight down the screen.
58
This game could be a bit of a problem to translate because of the large number of moving objects. The mushrooms can be made using multicolor programmable characters. Since the Commodore 64 has only eight sprites to work with, there would appear to be a shortage of sprites to use in the translation. However, by using the technique of sprite multiplexing, you can trick the computer into working as if it had 16 sprites. This technique is discussed further in a later chapter; if used properly, it would allow the game to be translated for the Commodore 64. Eleven sprites are used for the centipede's segments, 1 sprite for the player, 1 sprite for the shot, 1 for the flea, 1 for the spider, and 1 for the scorpion. This totals 16 sprites, or the number of sprites that multiplexing would provide.
THE REVENGE OF THE PHOENIX 1b help illustrate how some of the different techniques describe in this book translate into a game, an arcade style game, Revenge of the Phoenix, has been included in Listing C-23 in Appendix C. This game uses almost all of the techniques that have been covered earlier. It is included to help illustrate the capabilities of the Commodore 64. 1b play the game, type the following: LOAD "PHOENIX V1.4N", 8,1
SYS 32768 At this point, the program will go into its introduction mode. If left alone, it will demonstrate how the game plays and eventually return to the introduction. You may interrupt this process at any time by pressing one of the fire buttons. The game can be played by either one or two players. You Can choose which mode you want to play by moving the arrow with the joystick on the title page. By pointing at the character that represents the mode that you would like to play and pressing the fire button, you will initiate game play in that mode. Since the two players (high wizard and low wizard) do not have exactly the same capabilities, you may choose which of the two players you would like to control.
Game Play In Return of the Phoenix, you will be playing
the character of a wizard protecting a castle from the magical phoenix. You are able to stun the phoenix with spells shot from your staff. The goal is to prevent the phoenix from building a bridge in the sky. They will try to get to the bottom of the screen, pick up an energy spell, and bring it to the top of the screen, where a section will be added to the bridge. Game play will continue until the three tier bridge is completed. At this point, both you and the phoenix will have a score. If your score is higher than theirs, you win. One of the wizards can fly around the screen and go virtually anywhere that a phoenix can. The other wizard must stay near the bottom of the screen. This gives each of the wizards unique playing characteristics. Which one that you care to play is very much a matter of personal preference. There are nine levels of difficulty in Return of the Phoenix. The skill level that you are currently playing is shown at the top of the screen in the center. As you are playing, the program constantly monitors your playing ability and modifies the skill level accordingly. If the program feels that you are playing very well, it will increase the level of difficulty. On the other hand, if you are playing poorly, the skill level will be decreased. The skill level can only be decreased if you are above level 4. Starting at level 2, the phoenix will start dropping sleep spells on the wizards. If you are hit, you will be unable to move for about three seconds. At the higher levels, the phoenix will shoot more often and move faster and at some levels, the wizards will move faster also.
Scoring In this game, you are competing against the phoenix for the high score. The phoenix are controlled by the computer, and they have a different method of scoring then do the wizards. The number of points that the phoenix gets depends on how long you can prevent them from getting energy bricks to the bridge. After every four seconds, the value of the bricks to the phoenix decreases. The bricks can be worth from 5 to 98 points depending on how long you can keep the phoenix from getting a brick to the bridge. All of the rest of the scoring is more
59
standard and shown in Thble 10-1. When the two player mode is selected, both players are working for one score. The players' score is in the upper left comer of the screen. Unlike most video games, in which the two players are competing, both players are working together for a common goal. The phoenix score is in the upper right
comer of the screen. This is just as valid a score as the players' score, in that they are working toward their own objectives. If the wizards beat the phoenix score, the bridge will flash and fall down at the end of the game. Similarly, if the phoenix beat the wizards score, they will display their message at the end of the game.
Table 10-1. The Scoring System for the Revenge of the Phoenix Game.
Wizard shooting phoenix with energy brick ................................ 98 Wizard shooting phoenix without brick ................................... 26 Wizard shooting all 4 phoenix ......................................... 1000 Phoenix putting a wizard to sleep ...................................... 325
60
pOints pOints pOints pOints
Chapter 11 Elements of Game Design Much of this book has been dedicated to the techniques of programming a video game on the Commodore 64. In this chapter, some of the concepts that need to be used during the design of the game will be discussed.
Be fun Have an interesting plot Be visually stimulating Have sound effects and music Have varying difficulty levels Keep score When you are designing a game, you are writing a program that is intended to be used for the amusement of others. Trying to make the game fun to play should be your primary consideration. There are some problems in trying to design an enjoyable game, however. For instance, when you come up with a game concept, you may think your game will be the best game ever written, only to find, after you have written the program, that it is
boring. This can be caused by a number of factors. More often than not, the game idea was good, but the computer lacked the ability to display a game as complex as you wanted. One thing to beware of when designing a game, is the tendency to have the game play in exactly the same way each time it is played. If there are no random elements in the game, each move by the player will cause a specific move by the computer. This may be challenging at first, but will quickly become boring once it is mastered. The PAC-MAN arcade machine had this problem and it didn't take long before patterns that showed how to beat the machine every time were published. All it takes is an occasional random move for the play to be unpredictable-which will add to the challenge of the game. After you have spent some time programming the Commodore 64, you will have a good idea of what it is capable of doing. If you take into account the capabilities of the computer during the design phase of your program, you will have a much easier
61
time writing the program. Many of the routines explained in this book will enable you to write more complex games than you may have thought possible. Techniques such as sprite multiplexing make it easy to display more sprites in the same area of the screen than is otherwise possible. This will give you more flexibility in the design of your game, which will make it more fun. Your game can usually be made more interesting if you discuss some of your ideas with others before you start programming. Because everybody sees things differently, you may be given some ideas that will greatly enhance the play of the game. Many of the large game corporations put a number of game designers in a room and have them toss ideas back and forth. A bull session such as this can be the fastest way to get creative input into the design of a video game. VISUAL IMPACT
The visual impact of the game is the first thing anyone playing your game will notice. If the animation is interesting, it will quickly attract attention. The proper use of color is important. When you are using a normal television as a monitor, certain colors interact with each other better than others. Black characters on a white background will give quite a bit of contrast. The characters will be very clear and sharp. On the other hand, red characters on a blue background will appear fuzzy and indistinct. Varying the animation sequences that are used to make up a moving figure can add to the attraction of the game, if they are changed at the appropriate time. A game in which a character explodes and fades out after it is shot will be a more interesting game than one in which the character simply disappears. Similarly, figures can be changed to indicate that something is being carried, or that the player is at a different level. At times, simply flashing the colors of a character will add to the visual effect of the game. SOUND EFFECTS
Sound effects and music can add greatly to the
62
appeal of a game. If nothing else, music played while the title page is displayed will hold a player's attention as they are reading the credits, rules, or whatever else you may choose to put on a title page. In some cases, background music may be· appropriate to a game. When this is done, it should be played at a relatively low volume with respect to the rest of the sound effects. Loud background music can be quite a distraction and a nuisance when it drowns out the sound effects. You may want to consider creating an option that will allow the game to be played without any background music. Many games provide a brief break as the player moves from one level of play to another. Quite often, during this pause, a short piece of animation is shown on the screen along with some music. If a game takes a long time to play, these breaks give the player a time to relax and catch his breath.
DIFFICULTY LEVELS
Virtually every game has different difficulty levels. The variations can range from simply increasing the speed of some of the characters at different scores to starting a completely different portion of the game after a task is completed. For the most part, a game will be the same each time that it is played. Changing the level of difficulty based on the skill of the player will keep the player interested in playing the game even after he has mastered the beginning levels. Presenting him with a new challenge as a reward for gaining skill in the game will help to keep the player interested. You can make the game more fun to play by increasing the speed of the characters at higher levels and increasing the amount of shooting that the player is allowed to do. Some games will introduce a new character at each new difficulty level, so the player will keep playing in order to see all of the different characters. In the game Return of the Phoenix, Listing C-23 in Appendix C, each new level of difficulty has a new speed for the characters and a different rate of fire. The level of difficulty is decided by the players' skill. If he is playing well, the level of play will increase. When the player starts doing poorly,
the level of play will be reduced. This self adjusting difficulty (SAD) system keeps the game interesting by constantly adjusting the level of game play to the player.
SCORING A player can tell how well he is doing by looking at the score. Almost all games should have a score of one sort or another. A player should be awarded points for actions that help him toward the goal of the game. The number of points awarded can vary greatly for different types of actions and can even be based on the current level of difficulty. In most cases, you will want to display the score constantly so that the player can tell how he is doing. Usually, when an action results in points being added to the score, some appropriate sound effect is generated. This sound serves to inform the player that he has done something good without forcing him to look at the score. Under some circumstances, a bonus should be awarded for completing a specific task. Bonuses are often used to tempt a player into a course of action, for some immediate points, which is not necessarily beneficial in the long run. Deciding on the number of points to award for the various actions is very subjective. You want a normal score to be high enough to make the player feel that he has accomplished something, but not so high as to be incomprehensible. You will probably not decide on your final scoring method on your first try, but will refine it during the testing process. Note: When you first decide on a scoring method, be sure to reserve enough bytes for the score to accommodate an extremely high scoring
player. This will avoid the rollover when the score changes from all 9s to all Os. Never assume that just because you can't get over a certain score that no one can. As an added feature, you may wish to include a feature that allows the highest scoring players to place their names on a scoreboard. Although not necessary, this feature can add to the competition between a number of players. The next chapter describes in detail the operation of the BOGHOP game, which is in Appendix C. This game has been designed to demonstrate virtually all the programming techniques described in this book. If you have never programmed in assembly language, you may wish to try assembling the program as an exercise. Before doing so, you should make a copy of the source code disk and only work with the copy. The program has been structured in such a way that small changes can completely change game play. By reading the comments in the program listing, you will be able to see where you can make changes. This provides you with an easy way to start experimenting with an assembly language program. This concludes the introduction to arcade game programming on the Commodore 64. Just as in any other field, the best way to learn is by doing. In this book, you have been given a strong foundation on which to build your program. By using the various definition files and libraries from Appendix C, you can spend more time writing your game program and less time coding the groundwork. I hope that you find a great deal of enjoyment in writing games and sharing them with others, as we have.
63
Chapter 12 How BOGHOP Works This chapter describes the routines in the BOGHOP game in Appendix C. A number of the routines are general purpose in nature and you may find applications for them in other programs. For each routine, the purpose of the routine will be listed; then a description of how the routine was implemented will be presented. Assembler directives will also be described where applicable. Before reading this section, you should play the game for a while. This will help you to visualize what the program is doing. BOGHOP in Listing C-24 is the source code for the main program. BOGHOP.O in Listing C-25 is the assembled version. The other files used are described below. To run the game, type: LOAD"BOGHOP.O" , 8,1 SYS5120
The number of points that you get for shooting any given bad guy increases with each successive wave. The code for the game in Appendix C is spread over a number of files. In addition to BOGHOp, these files are: 64
Listing Listing Listing Listing Listing Listing Listing Listing
C-l C-2 C-26 C-27 C-7 C-28 C-29 C-30
MACLIB SYSDEF BOGDEF BOGDAT COMMON XXPLaI' LOOKUP BOGSPR
MACLIB is the macro library. The source code for all of the macros described in this book can be found in this file. Detailed descriptions of the macros can be found in Appendix B. All of the assembly language programs in Appendix C use this file. SYSDEF contains the system definitions. Names are assigned to all the hardware registers that will be used throughout the program. This file is also used by the other programs in the book. BOGDEF has all of the RAM definitions (the variables and buffer areas) that are used in the BOGHOP program. The definitions in this file are specific to the BOGHOP program and will not be used by any other program.
BOGDAT is a date definition file. Lookup charts and other data to be used by the BOGHOP program are defined in this file. Like BOGDEF, this file is used e~lusively by the BOGHOP program. As its name implies, COMMON is a file that is used by virtually all of the assembly language programs in this book. In this file, names are assigned to notes over an eight octave range. This is a useful file for any program that uses the SID chip. XXPLOT contains a subroutine named XPUYf, which is used to exclusive OR a point to the screen. It uses data from the LOOKUP file, which must be loaded into memory before using XPLaf. The advantage of exclusive ORing a point to the screen is that if the same point is plotted twice, the screen will be returned to the same condition as before the first point was plotted. Note that OOPLaf, Listing C-31, allows points to be ORed rather than exclusive ORed to the screen. BOGSPR contains the data that defines the shapes of the sprites that will be used in the BOGHOP program. The code portion of the program is in the BOGHOP file (Listing C-24). This file loads the other routines during assembly. The following description tells how the BOGHOP file loads the other files and how they relate to the BOGHOP program, and how the BOGHOP program runs.
THE START OF THE PROGRAM The first line of the program is a PUT statement with the name of the program. After you have finished editing the program, you can delete the line number and semicolon, (which turns the line into a comment) and press the RETURN key to save the program to disk. By saving the program in this way, you will always save the program to the disk with the same name. Because it is common to use similar names for different sections of a long program, the possibility of saving the program under an already used filename and thereby destroying the other file is eliminated. Following the put statement are a number of other comment lines used to document the program. It is a good idea to put the date of the last update to the program in the program itself, so you will be
able to distinguish one printout from another. If you are making a number of different changes to the program in the same day, you should also put the time of the last update in the program. The name of the program module should be in the first few lines of the program so that you can quickly tell what program you are working on. The Macro Library
The .LIB directive is used to load in libraries of code, data, and definitions. In this program, a library of macro definitions, a library of system defmitions, and a program segment of RAM definitions specific to this game are loaded in. A library of note definitions and note time values as well as data specific to the program are also loaded. When a .LIB directive is used, the assembler will treat the code to be inserted as if it were typed into the program at that point. By inserting other program segments into your program in this way, you will not have to make any changes to your libraries to use them in other programs. You also gain an advantage in the speed of editing. Had you entered all of the different sections as one large program, every time that you tried to edit the program, you would have to wait for the entire thing to be loaded into memory. In the Commodore 64, this could take quite a while. Also, it is easier to print listings of only the portion of the program that you are currently working on, if the program is broken into smaller segments. The macros in the macro library and the system definitions have been described in detail elsewhere, so they will not be described here. The BOGDEF file contains the zero page RAM allocations that will be used for. the game. Whenever possible, the zero page of RAM should be used for all variables. Doing so will cause the code generated by the assembler to be 2/3 as large and execute significantly faster than if the variables are elsewhere in memory. In this program, variables are allocated using the DS macro rather than using equates. The DS macro reserves the number of bytes following the macro call for the label preceding the macro call.
65
This frees you from having to keep track of where each variable is going to be placed in memory. More importantly, if you find at a later time that you need to insert a variable between two existing variables, you will not need to redo all of the equates following the new variable. You would need to redo all the equates if you were using indexed addressing and a new variable had to be in a specific place. When you are using equates, it is easy to make a mistake and define two or more variables with the same memory location. A mistake of this type can be very difficult to debug. When using the DS macro, the assembler will keep track of the addresses of the variables and generate them each time the program is assembled. RAM Definitions
In the beginning of the RAM definition section of the program (the BOGDEF section) program, all of the shadow registers for the SID chip are defined. As mentioned earlier, you will usually change a value of one of the shadow registers for the SID chip rather then changing the SID chip directly. Most of the registers in the SID chip are write only registers. For this reason, you will not be able to find out what the current value is in one of the registers. In this program, the value in the shadow registers will be transferred to the appropriate register in the SID chip during one of the interrupt routines. The technique of shadowing registers will always leave the current value of a hardware register in a variable location, so that the software will always have access to the value. Also defined in the RAM definition section of the program are a number of general purpose registers. These locations can be defined in the same way for virtually every program you write. You may not use all of them every time, but they provide a good starting place. All of the two byte definitions will be used as pointers for indirect addresses. SRC and DST are used as source and destination pointers for data transfers. The NOfPT and NOfTM registers are used to hold the address of a sequence of notes and their respective durations for generating music.
66
The SNDTM registers are used as software timers to control the voice channels. Whenever a value is placed in one of the SNDTM registers, it is decremented until it reaches O. Once the value reaches 0, the appropriate voice channel will be disabled, causing the release sequence to be initiated. The OPTION register can be used to hold the number of whatever option is being used during the game. Options can be things such as one or two players and easy or hard play. The RAND registers contain random numbers. During one of the interrupts, a new value is placed into one of the four RAND registers. Every four screens, there will be new values in each of the RAND registers. The value placed in the RAND registers is derived from the RANDOM registers, the SCREEN, timer, and the other RAND registers. This helps ensure that there will be a fresh value in the RAND registers whenever you need a random number. The RANDOM register, which is part of the SID chip, changes at a rate proportional to the frequency of voice 3. If this register were to be used directly to get a random number, there is a good chance that your program would be so fast that the value could not change since the last time it was read. In the LEVEL register, you will usually find the current difficulty of play. The next four registers are used as system timing registers. SCREEN is incremented once every 1/60 of a second. RANSEC is incremented every 1/60 of a second, but counts from 0 to 59. SECOND is incremented once per second when RANSEC goes from 59 to o. ENABLE is set to a 1 at the end of the INTO interrupt routine. This register is used to synchronize the main program with the interrupt routines, thereby keeping the timing of the system absolute. At the end of the main program loop, ENABLE will be set to O. The program will then enter a short loop until ENABLE goes to 1. This will ensure that the main program loop is executed only once per screen (1/60 second). There are four buffer areas defined in RAM. BUF and BUF1 are to be used as temporary storage and work areas for any of the routines in the main program loop. Each buffer area is defined to be eight
bytes long. MBUF is a buffer area that is to be used only during macro calls. Similarly, IBUF is to be used only during interrupt routines. i Some restrictions must be observed for the proper use of the buffer areas. These bufi±areas are for the internal use of routines only! The should not be used to pass data from one routine to other. If data needs to be passed, a variable shquld be defined in which to pass the data. The pro~er buffer area must be used for each routine. Allovying an interrupt routine to use BUF or BUFl can result in unpredictable operation of your program. If an interrupt is received while a routine that uses BUF or BUFl is in process, the interrupt can destroy the data if the interrupt routine also uses these buffer areas. If you find that you need a larger buffer area, you should probably define a special area for the routine that needs it. The LPCNT registers are for use as loop counters. Under normal circumstances, you will be using the X or Y registers as loop counters. In some cases, you will be changing the X and Y registers during a loop, making them useless as loop counters. As with the buffer areas, do not use the LPCNT registers in both the main program loop and in an interrupt routine. The next series of variables are used to specify a point to the point plotting routine. COLOR requires a number from to 3 to determine the bit pair to be plotted on the screen. POINT and CTEMP are internal registers to the point plotting routine. GBASE is a two byte address that specifies the base address of the high resolution screen to be used by the point plotting routine. If you are using a general purpose plotting routine, XOR can be used to specify whether the point should be OR'd or EXCLUSIVE OR'd onto the screen. XPNT has the horizontal position of the point and YPNT has the vertical position of the point. In this game, the point plotting routine is written to subtract the offset of a sprite position, so that the coordinates of the point can be transferred directly from the sprite position to the point position. HMSB is a register that holds the ninth bit of a nine bit horizontal sprite position. This is used as a temporary register for calculating the ninth bit.
°
The result is usually transferred into another register. Most of the sprite horizontal positions are stored after being divided in half. This allows the horizontal positions to be stored in 8 bits. Before being stored in the VIC chip, the data must be expanded back into a nine bit format. One of the main advantages of storing the data in an 8 bit format is that a horizontal position can be checked using a single byte comparison; the position does not have to be expanded into two bytes before a comparison. There are macros that unpack a nine bit value into either a two byte value or a one byte value after dividing the 9 bit value by 2, but they are less efficient then storing the divided value initially. HORNC and VERNC hold the increment to be used when changing the position of one of the computer controlled characters. By changing these values by varying amounts depending on the level of play, the characters are given different speeds in the horizontal and vertical directions. The following definitions are more specifically related to this game, although many of them will be useful in other types of games. The number of lives that the player has left can be found in LIVES. When LIVES = 0, the games is over. Four bytes are reserved to hold the SCORE. Since the data stored in SCORE is stored in a BCD format, the score can have up to eight digits. Many games preset the least significant digit to 0, which would give nine digits. In this game, the score is run through a leading zero suppression routine that prevents insignificant zeros from preceding the score. MOUNTV has the vertical position of the mountains, while MOUNTH has the horizontal positions. MOUNTP contains the sprite pointers for the mountains. Colors for the mountains are held in MOUNTC. Each of these registers are defined to be eight bytes long, one byte for each of the mountain sprites. Since the horizontal positions of the mountain sprites are stored in a nine bit format, the MNTMSB holds the ninth bit for the horizontal position. WHOLIV is a byte that has the status of each character on the screen. If a character is still alive,
67
its corresponding bit will be set in WHOLIV. The player's characters is in bit O,the computer controlled characters (BAD GUYS or MEANIES) are represented by bits 1-7. This scheme of using one bit per character is also used by SHar5 to tell which shot is in flight. TMSCOL is a temporary register used to hold the last valid sprite to sprite collision data as read from SSCOL. Since the data in SSCOL is cleared by reading it, it is necessary to put the data in a safe place until it can be used. This is even more critical when using the sprite multiplexing and repositioning techniques, as the data in SSCOL may not be relevent to your program if you wait until you are ready to use the data before reading it. Similarly, TMBCOL is used to store the data read from SBCOL for sprite to background collisions. SSCOL and SBCOL are transferred to TMSCOL and TMBCOL during INTO. There are eight bytes reserved for each of the following player and bad guy parameters: horizontal positions, vertical positions, colors, directions, and explosion status. Sixteen bytes are reserved for use as pointers to the movement charts used by the bad guys to determine their movements. SHar5H holds the horizontal position of the shots, stored in an eight bit format. SHar5V holds the vertical position of the sprites. SHar5D contains the direction that each shot is to go. Eight bits have been allocated for each of the last three parameters. This concludes the RAM definitions for all of the variables used by the program. Usually, it is a good idea to try defining all of the variables before you begin to write any code. By doing so, you will force yourself to decide on an approach to take in programming your game before you start coding it. You will find that programming will go faster once you have defined your variables. Of course, if you miss a few, you can add them later.
Musical Definitions The COMMON file is loaded in next. This file contains frequency definitions for the SID chip. These definitions cover an eight octave range. The
68
format is as follows:
1. The first letter is the name of the note. 2. The second letter is either N for NATURAL or S for SHARP. 3. The third position is for a number between 0 and 7 which specifies the octave number. COMMON also contains definitions of note times. These times are based around a timer of 1/60 of a second. That is, if you decrement these values once every 1/60 of a second, you will get the proper duration of a note. If you are going to be creating complex musical rhythms, you should verify that the times used for notes in all channels is such that the beat is kept constant. You may have to adjust the times to match your application.
The Data Section BOGDAT, the next file loaded into the program, is a data section. In it are all of the data and lookup charts that will be used throughout the program. BITPOS is a lookup table that can be used to set a bit. BITAND is a lookup table that can be used to clear a bit. Following these lines are a number of lookup charts that are used to determine that bad guys' motion. Each chart ends with a 0 so that the routine that uses these charts can find the end. The next charts are used to determine which movement charts are to be associated with which type of bad guy. BASLK is a chart that contains the base addresses of the lookup charts that contain the base addresses of the movement charts. BADSEQ is a chart that is used to determine which type of bad guy will appear at each level. By extending this chart and the next three charts that will be described, the game can be made to have any number of levels (up to 255). SPEEDH is a lookup chart that is used to determine the horizontal speed of the bad guys depending on the level. Similarly, SPEEDY is used to choose a vertical speed for the bad guys. FIRPOW is used to determine how often the bad guys should shoot. A random number is chosen,
and if the number is less than the value in FIRPOW, the bad guy can shoot. NUMBER is a lookup chart that indicates where the image of the various numbers can be found in memory. NUL is all zeros, for use by the leading zero suppression routine. TYPELK is a chart of sprite pointers that point to the first sprite in an animation sequence for the bad guys. SHTDR is a table used to choose a direction for a bad guys' shot. COLK and POR are used by the point plotting routine. The Point Plotting Routine
XXPLaf is the next file to be loaded into the program. It contains only one routine, the point plotting routine XPLaf. XPLaf refers to lookup tables that can be found in the LOOKUP file. The lookup tables contain data that serves to map the screen into normal cartesian coordinates. By storing the horizontal coordinate the XPNT and the vertical in YPNT, the proper point on the screen can be found. The base address of the screen must be stored in GBASE. Since the routine is written to make use of a multicolor bit-mapped screen, valid horizontal values will normally be within the range O-$AO. XPLaf has been rewritten to subtract the offset associated with sprite positions before processing the point. At the beginning of the routine, the sprite adjustment is made, and the resulting point is checked to see if it is in a range to be plotted on the screen. If the point can not be plotted on the visible screen, the routine will end with an RTS instruction. The vertical position of the point is transferred to the X register. The horizontal position is divided by four and transferred to the Y register. The X register is then used as an index into VLKUPL, which has the lower eight bits of the base addresses of each scan line. This byte is added to the low byte of GBASE, which contains the base address of the screen. The result is stored in POINT. This sequence is repeated for the high byte of the scan line base address, which is in VLKUPH. The result of the addition of a byte from VLKUPH and
GBASE+ 1 is stored in POINT+ 1. The value in the Y register is used as an index into a table of horizontal offsets of the byte on the screen. As with the vertical lookups, the appropriate offsets are added into the address in POINT. An indirect address that points to the byte that contains the point to be plotted in now in POINT. The horizontal position in XPNT is loaded into the accumulator and AND'd with a $03. The result is then transferred into the X register for use as an index into a table that will specify the bits to change. In preparation for loading a byte indirectly, the Y register is cleared to O. An indirect load is then performed using the value in POINT, the loaded value being stored in CTEMP for use later. The Y register is then loaded with the value in COLOR. Next, a byte that contains a bit pattern corresponding to the color in COLOR is loaded, using Y as an index. This byte is AND'd with a mask from a lookup table of mask values, which is chosen using the X register as an index. The result will be a byte that has only those bits that correspond to the position and color of the point to be plotted set. This byte is exclusive OR'd with the byte previously stored into CTEMP. The Y register is once again cleared to 0 in preparation for an indirect addressing instruction. Using a store indirect instruction, the new byte, with the bits changed corresponding to the plotted point, is stored back into screen memory using the address in POINT. The last instruction in this subroutine is a return from subroutine instruction. The routine will destroy the original contents of the A, X, and Y registers. The Equates Statements
The main lookup tables that were used by the point plotting routine have been assembled separately from the program. In order to make use of this data, the data file must be loaded into memory before the program is run. In order for the assembler to make use of data (or code) that is to be assembled at a different time, any names referring to code in the other file must be defined. The LOOKUP file includes the lookup tables described earlier, as well as a number set that can be used in scores. The addresses of where the data can be
69
found in memory have been defined with equate statements in the main program.
Defining the System The next section of the main program code sets the parameters for the system. The Commodore 64's operating system is disabled, the keyboard is disabled, and the joysticks are configured as input devices. The border and background colors 'are set to black. Bank 1 of RAM is selected as the graphics page. The base address of the high resolution bit map is set to an offset of $2000 in this bank of RAM, giving it an absolute address of $6000. This address is then stored in GBASE for use in the point plotting routine. The base address of the text page is set to an offset of $ICOO, giving it an absolute address of $5COO. The screen mode is set to bit mapped graphics and the multicolor mode is selected. Color RAM is cleared to white, text RAM is cleared to $56 (green and purple), and the graphics page is cleared to $00. Initializing RAM Before the main program can be executed, all of the RAM variables must be set to their initial values. For example, the variable LIVES contains a number that represents how many player characters the player will start with Sound generators are enabled, the scores are cleared to 0, and starting positions are defined. Before starting the main loop, the collision registers are cleared, RASTER interrupts are enabled from the VIC chip on scan line $FB, and the interrupt disable bit is cleared. THE MAIN PROGRAM LOOP START marks the beginning of the main program loop. The first thing that needs to be done is to determine whether or not the game is still in play. This is done by ORing the LIVES register with all of the explosion registers. If the result is 0, the game is over. In this case, a jump to STWID, which is past the majority of the code, will be executed. The only other portion of the main program that will be executed is a check to see if the game should reset.
70
Scores Since the screen has been set to be in a high resolution, multicolor bit map mode, the scores will have to be drawn from an appropriate character generator. The program will use a set of numbers that have been defined in the LOOKUP file. These characters will be drawn on the screen in the color as specified in the color RAM. Each number is comprised of 16 bytes. The score routine is run only once every 16 screens. The timing is accomplished by loading SCREEN, ANDing it with $OF, and comparing the result to $OF. If the comparison is equal, the routine is executed. Otherwise, a jump is to NOSCRl, bypassing the routine. All of the timing elements in the program use this method to determine when to run a routine. This routine prepares all four bytes of the score to be displayed. Each byte of SCORE contains two digits of the score. Each nibble of SCORE will be separated and stored in BUF through BUF+ 7. The high nibble will be shifted into the low nibble using the NIBLR macro. For the digits that are in the low nibble, the upper nibble will be masked to 0 using the AND #$OF instruction. Once all of the digits have been place in BUF, the score will be run through a leading zero suppression routine. Although this is not essential for the proper operation of the game, it tends to make the game look more professional. A score without leading zeroes is also easier for the player to read. Leading zero suppression is accomplished by checking the most significant digit of the score first. If the byte is a 0, the byte is replaced with a $OA. When the score is displayed, a $OA will be displayed as a blank. This sequence will be repeated for the most significant 7 digits. If a digit other than a 0 is encountered, the program will branch to NZSUp, ending the suppression routine. This will prevent significant zeroes from being suppressed. At this point, the score is ready to be displayed. 10 prepare for the display loop, the X register is cleared to 0, and the base address of the video screen ($6000) is stored in BUFI + 2. In the beginning of the loop, the most significant digit of the score is loaded into the accumulator
taken
and shifted left by one bit. The byte is then transferred into the Y register, where it will be used as an index into a table of addresses that correspond to the numbers in the character table. The byte had to be shifted left because it was to be used as an index to a table of two-byte addresses, as opposed to a table of single-byte data. The address of the digit is stored in BUF1, and the Y register is cleared to 0 to prepare for the inner loop. In the inner loop of the score routine, a byte is loaded indirectly from the address in BUF1 and stored indirectly at the address in BUF1+2. The Y register is then incremented and checked for $10. If Y is not yet $10, the routine loops to MKSCR2 and moves the next byte of the digit to the screen. When the digit is finished, a two byte increment of $10 is performed on BUF1+2. This increment changes the indirect address to point at the next character position on the screen. The X register is then incremented and compared to 8. If the X register is not yet 8, the routine loops to MKSCR1, which will move the next digit to the screen. When the X register reaches 8, the routine ends with all 8 digits displayed on the screen.
a result, the proper movement subroutine is called. After checking all four bits of the direction register, the MEANMV register pair is incremented to point at the next instruction byte. The loop counters and index registers are then incremented, and the program branches back to the top of the loop. This sequence is repeated until all of the live bad guys have been moved. Had the direction byte contained a $00, it would indicate the end of the movement table. In this case, a new movement table would be selected. The type of bad guy is determined by using LEVEL as an index into BADSEQ, which is a table of bad guy types. The type byte is then shifted left in preparation of use as an index into a base address table of movement patterns. This sequence allows specific types of movement to be used with specific types of bad guys. The routine then loads a random number that will determine which of the four possible movement patterns will be selected for the bad guy. The new address, which points to the movement pattern, is loaded and stored in the appropriate MEANMV register pair. The direction byte is then loaded and control is passed to the movement portion of the routine.
Moving the Bad Guys
This is the routine that moves the bad guys. At the top of the loop, WHOLIV is checked to see if the bad guy is still alive. The explosion register is then checked for 0 to verify that the bad buy is not in the explosion process. If the bad guy is alive, a byte is loaded using an address found in the appropriate MEANMV register. This byte is treated as a direction byte. If it is not $00, a branch is taken to the movement portion of the routine. The byte is stored in BUF1 for use later. The direction register is checked, and if the direction is 1, the direction bytes is inverted. The speed of movement is determined by using LEVEL as an index into SPEEDH and SPEEDY. These values are placed into the horizontal and vertical increment registers, HORNC and VERNC, which are used by the movement subroutines. Starting from the least significant bit, the lower four bits of the direction byte represent up, down, left, and right. The direction byte is rotated right, and if the carry bit is set as
Incrementing the Level of Play
In order to advance to the next level of play, all of the bad guys have to be killed. WHOLIV contains the current status of the bad guys. Each of the first 7 bits of WHOLIV corresponds to one of the bad guys. When all of the bits are 0, all of the bad guys are dead. This is checked by loading WHOLlY into the accumulator, ANDing it with #$7F, and checking it for O. If it isn't 0, the routine jumps to LEVDN, bypassing this routine. When the level of play needs to be incremented, new vertical positions, as well as new horizontal positions, are chosen for all of the bad guys. The directions are cleared, and new sprite pointers are chosen. WHOLIV is reset to $FF. LEVEL is then incremented and checked for $12, which is the highest level defined. If you wish to define more levels of play, this number needs to be increased. If the level exceeds $12, LEVEL is decremented to $12. 71
Seeing If the Bad Guy Is Hit
The purpose of this routine is to determine whether or not the player's shot was hit by one of the bad guys, and if it was, to determine which bad guy hit the shot. The hardware collision registers can be used to determine whether or not a collision took place, but they cannot necessarily be used to determine which characters were hit. If two or more sprites collided, and the shot hit a sprite, you can not differentiate between the various collisions. Because the player and his shot are displayed on alternate screens, the collision status is only valid on even screens, and the routine will be bypassed on odd screens. If it is determined that a collision took place, collision checking will be done through the software. Software collision checking could be used instead of hardware collision checking, and in many cases is preferable, but a combination of the two will run faster. In the next section you will see a situation in which the hardware can be used exclusively for collision checking. The temporary sprite collision register TMSCOL is loaded and checked for a collision in sprite O. Sprite 0 is the player's shot. If it wasn't hit, there is no need to check any further, so a branch will be taken to BCOLND, passing over the routine. Had the sprite been hit, WHOLlY would have been shifted left one bit to align its bits with the bits in TMSCOL. These two bytes are ANDed together and ANDed with $FE. This procedure will clear the shot collision bit. If the result is 0, any collisions were with dead bad guys and can be ignored. Otherwise, the result will be shifted to the right one bit in preparation for the software collision check loop. This value will be place in BUF for use in the following routine. BUF is rotated right to check the least significant bit. Because this bit is rotated into the CARRY bit, it can be checked with a BCC instruction. If the .carry bit is clear, there was no collision with this sprite, and a branch will be taken to the end of the loop. If the sprite was involved in a collision, its explosion register will be checked to see if the bad guy was already dead. At this point, after it has been determined that the bad guy is alive and has been involved in a collision, it must be whether or not the
72
bad guy is near enough to the player's shot to have been hit. An offset is added to the bad guy's vertical position, and the shot vertical position is subtracted from it. The result is then compared to a value that corresponds to the height of the bad guy. If the carry bit is clear, the bad guy was within range of the shot vertically. The horizontal position is checked in the same way. If both the horizontal and vertical positions of the bad guy are in range, the bad guy was hit. A value is then loaded into the appropriate MEANE explosion timer register. The shadow registers for voice channel 2 of the SID chip are initialized to the values that will cause an explosion. The number of points for the bad guy is then calculated and added into the score. Before the addition takes place, the decimal mode is set. After the new score is calculated, the decimal mode must be cleared. Failure to clear the decimal mode will lead to erratic operation of the program. Before exiting the routine, the player's shot is disabled so that it can't hit more than one bad guy. Seeing If the Player Is Hit
Since the bad guys shots are drawn into the background and the player is a sprite, a collision can be detected between the two by checking the sprite to background collision register (SBCOL) in the VIC chip. During INTO, the data is transferred from the VIC chip into TMBCOL so that it will be available for use when needed. This routine checks bit 0 of TMBCOL and if it is set, initiates the explosion sequence for the player. Before the explosion sequence is initiated, the player explosion register is checked to make sure that the player is not already dead. The shadow registers for voice 1 are set to the proper values for an explosion, and LIVES is decremented. A value is stored into the explosion times to both force a delay before the next player appears and to allow time for the explosion to be seen. launching the Shots
Once very four screens, the program will try to launch a shot for the bad guys. The SHOTS register
is loaded, shifted right, and then ANDed with WHOLIV. The resulting byte had a bit set for every bad guy who is both alive and doesn't have a shot in flight. This byte is stored in BUF for use in the following loop. In the shot launching loop, BUF is rotated right. If the CARRY bit is clear, the routine branches to the end of the loop. With the CARRY bit set, the routine has a chance to launch a shot. The Y register is loaded with LEVEL. The ACCUMULATOR is then loaded with a value from FIRPOW indexed by Y. This value is compared to RAND2. If RAND2 is less than the value from FIRPOW, the routine will try to launch a shot. As at last check before launching a shot, the appropriate explosion register is checked. If the bad guy is not exploding, the shot will be launched. The appropriate bit in SHOTS is set to indicate that the shot is in flight. Shot X and Y positions are taken form the bad guy. An offset is added into the vertical position before storing the value into the shot vertical register. A random number, which is masked and used as an index into a table of shot directions is loaded. This value is stored into the shot direction register. The shot X and Y coordinates are loaded into XPNT and YPNT in preparation for plotting the shot on the screen. A jump to the XPLOT subroutine, which will exclusively OR the shot to the screen, is then executed. Voice channel 2 is set up to generate a tone to indicate that a shot has been launched. A frequency is chosen depending on the number of the bad guy who launched the shot. A higher tone will be generated for a higher bad guy number. After the sound generator is enabled, a jump is executed past the end of the loop. Moving the Bad Guys' Shots
In order to move one of the bad guys' shots, it must first be unplotted from the old position and then replotted in the new position. SHOTS is used to determine whether or not a shot is in flight by storing it in BUF and rotating BUF to the right. If the carry bit is set, a shot is in flight. The X and Y position of the shot is moved to XPNT and YPNT before the jump to the XPLOT
subroutine. After the shot is unplotted, the shot direction is placed in BUFl. This byte is rotated right, and if the carry bit is set, the shot's position is incremented in the proper direction. The lower three bits of the shot direction register represent the directions up, down, and left starting from the least significant bit. A bad guy will never shoot to the right. The speed of the shot is determined by the SPEEDV and SPEEDH tables indexed by LEVEL. Moving the Player's Shot
Moving the player's shot is much easier than moving the bad guys' shots. Since the player's shot is a sprite, it can be moved by changing its horizontal position. SHOTS is checked to see if a shot is in flight. If it is, SHOTS is incremented twice. Checking the Shot Positions
The horizontal position of the player's shot is checked first. If the shot is in flight, and this check reveals that it has reached the right side of the screen, its bit in SHOTS is cleared. The bad guys' shots must also be checked to see if they have reached the right side, the top, or the bottom. If the shot has reached one of the limits, the shot is unplotted, and its bit in SHOTS is cleared. Animating the Sprites
All the sprites in this game use four sprite patterns to achieve animation. The sprite pattern is changed once every 16/60 of a second. The lower two bits of the sprite pointers determine which of the four patterns will be shown at any given time. This routine strips the lower two bits from the sprite pointer, increments them, and recombines the result with the pointer, pointing at the next sprite in the sequence. Displaying the Number of Lives
This routine uses the same technique as the display score routine to display the number of lives remaining. The value in LIVES is shifted left and 73
used as an index into the table of number addresses. A short loop is then used to move the $10 bytes of data, which form a number, to the screen starting at $60CO. Resetting the Game In case you want to reset the game before it is over, this routine has been provided. It reads the value of joystick 2 and if the fire button is pressed, jumps to STARr. Maintaining the Timing
In order to maintain consistent timing for the entire main loop, the program must wait at this point for an interrupt to occur. Since the interrupts occur every 1160 of a second, they can be used to set the smallest timing unit. This routine works by loading ENABLE with $00. ENABLE is then loaded and checked until it is no longer $00. At this point, a jump is taken back to START, which is the top of the loop. ENABLE will be changed during the INTO interrupt routine. THE INTERRUPT ROUTINES
INTO is the main interrupt routine for this program. When the program is initialized, a RASTER interrupt is set to occur on scan line $FB. This is the first line of border color at the bottom of the screen. At this point, any changes in the sprite and screen color registers will not be seen until the beam reaches the top of the visible portion of the screen. Since there is a large border at the top and the bottom of the screen, there is a lot of time to make changes to the various registers during this interval. When the RASTER interrupt is generated, the C-64's operating system pushes the A, X, Y, and STATUS registers, as well as a return address, onto the stack. After the registers have been saved, an indirect jump is taken through CINY, which was initialized to point at INTO. On entry to the INTO interrupt routine, the sprite collision registers are transferred into their temporary registers, TMSCOL and TMBCOL. The system timers are updated next. SCREEN and RANSEC are incremented, and RANSEC is checked for $3C. If
74
RANSEC equals $3C, it is cleared and SECOND is incremented. After the timing is updated, the sprite control registers in the VIC chip are updated. The routine sets up a loop that will move the positions, colors, and sprite pointers for the mountain chain into the VIC chip. The MNTMSB register is moved into the XMSB register. All sprites are expanded in the X and Y direction, and the sprite multicolor mode is cleared. Since the beam has not yet reached the top of the visible portion of the screen, the mountain sprites will be all set up when the beam is in position to display them. Some more timing is taken care of next. If the player explosion register is not 0, it is decremented. Similarly, SNIJI'M1 and SNIJI'M2 are decremented if they are not O. When either one reaches 0, the release sequence is started in its corresponding voice channel. The shadow registers of the SID chip registers are next transferred into their corresponding registers. A new random number is generated next. The lower two bits of SCREEN determine which of the four RAND registers will be updated with the new random number. Rather than simply transferring RANDOM into a RAND register, the random number is a combination of all of the RAND registers as well as RANDOM and RANSEC. This forces the random number to change no matter what frequency voice channel 3 is set to. The Player Controls
Before the end of the INTO interrupt routine, the player's joystick is checked, and the player moved if necessary. LIVES is checked first to verify that the player is still alive. If he is, PLAYE is checked to make sure that the player is not exploding. The player is moved on alternate screens as a way to keep his speed reasonably slow. The joystick data is loaded and inverted, and the upper four bits are masked to O. If the lower four bits equal $F, the joystick is centered and the movement routine is bypassed. If the joystick was moved, the data is put in IBUF, where it will be rotated to determine the direction of movement. When the joystick data is rotated right, the lower four bits represent up, down,
left, and right respectively. The player is moved by rotating the joystick data to the right, and for each bit set, moving the player by one in the appropriate direction. Rather than simply using an INC instruction, the player direction is changed using ADC and SBC instructions. This allows the new position to be checked to be sure that it is in bounds for the player before the new position is stored. After the player position has been adjusted, the joystick data is checked to see if the fire button has been pressed. If it has, SHars is checked to see if the shot is already in flight. PLAYE is also checked to prevent the player from shooting if he is exploding. IF a shot can be fired, bit one of the SHars register is set to one, indicating a shot in flight. The player position is transferred into the shot position after adding an offset corresponding to the players gun. SHOfSn is set to $08, indicating that the shot should go to the right. Voice 1 of the SID chip is then initialized to a shooting sound.
Clear and Pull At the end of the interrupt routine, the interrupt vector CINV is set to point at INTI. A RASTER interrupt is enabled to occur on scan line $54, which corresponds to the bottom of the mountains. A $01 is stored in ENABLE so that the main loop may exit its hold loop and execute the code once again. Use of the ENABLE register in this way prevents the main loop from running free, causing unpredictable timing in the program. The IPULL macro is used as the last instruction of the routine, clearing the video interrupts, restoring the A, X, and Y registers, and returning from the interrupt.
INn As this is another interrupt routine, all of the registers are pushed onto the stack before the routine is entered. Once in the routine, the sprite collision registers are cleared by loading them into the accumulator. After clearing the registers, 3 NOP instructions are executed. These are used as time delays to ensure that the beam is off the visible portion of the screen before the background color is changed to green. As in INID, the sprite control
registers in the VIC chip are updated with player and bad guy positions, colors, and sprite pointers. Since these horizontal positions are stored in an eight bit format, they must be expanded into nine bit values. This is accomplished by shifting the byte to the left and storing the byte in the sprite horizontal position register. If the CARRY bit is set by this operation, the corresponding bit is set in HMSR In this case, HMSB is being used as a temporary register to generate a byte with all of the ninth bits of the sprite horizontal positions. After all of the new values have been loaded into the VIC chip, HMSB is transferred into the XMSB register. The player and his shot are displayed using the same sprite. When the player's shot is enabled, the player will be displayed on even screens and the shot is displayed on odd screens. On odd screens, the shot position will be moved into the VIC registers, and the sprite pointer will be changed to point at a shot sprite. Bit 0 of XMSB is also changed accordingly. The sprite X and Y multipliers are cleared, and the multicolor sprite mode is enabled for all sprites. WHOLlY is loaded and shifted left, and bit 0, indicating the player sprite, is set. The resulting byte has a bit set for each of the sprites to be displayed. This value is stored in the sprite enable register, SPREN.
Moving Mountains On each screen, the mountains move one pixel to the left. When one of the mountain segment sprites leaves the visible portion of the screen on the left, it is moved past the visible portion of the screen on the right. In this way, the mountains appear to move smoothly and continuously. A loop is set up to check the mountain sprite positions. The sprite horizontal position is unpacked from a nine bit number with the ninth bit in MNTMSB to a two byte number. If the sprite position if $01E8, which is off the screen on the left, it is repositioned to $0170, which is off the screen to the right. After the mountains have been moved, the explosion counters for the bad guys are checked. If one of the explosion timers is not 0, it is
75
decremented. When an explosion timer is decremented to 0, the appropriate bit in WHOLlV is cleared. This indicates that the bad guy should not be displayed any longer. Before the end of the interrupt routine, CINV is set to point at INTO, which is the next interrupt routine to be executed. A raster interrupt is enabled to occur on scan line $FB, which is on the first scan line below the visible portion of the screen. Video interrupts are cleared, and the A, X, and Y registers are restored to their values before the interrupt. At this point, an RTI instruction is executed, returning program execution to the point where the interrupt was generated. THE MOVEMENT SUBROUTINES There are four subroutines that are used to adjust the bad guys' position registers. Each routine uses the appropriate ADC or SBC to change the value in the appropriate position register. Before it stores the new value into the position register, the
76
new value is checked to be sure that it is in the proper range to be on the screen. These subroutines use the Y register as an index into the bad guy position registers. This allows the subroutines to be called from within movement loops without any preparation other than the use of the Y register as the loop counter. AN END NOTE The last instruction in the program before the .END assembler directive is a NOP instruction. Due to a bug in the Commodore assembler, the instruction counter does not always point to the last instruction in the file. This will usually occur when the last instruction in the file is a macro call. Th prevent this from being a problem, the NOP instruction forces the instruction counter to point a standard OP CODE past the last instruction in program. Even if the assembler doesn't save the last byte of the program, it will only be an instruction that is not even a part of the program.
Appendix A The entire instruction set for the 6510 microprocessor is described in this section. For each instruction, you are given the instruction name as well as a short description of what the instruction does. The STATUS bits affected by the instruction are shown, followed by a long description of the instructions' operation. Below these is a chart of the addressing mode options for the instruction, the code, format, the number of bytes the instruction requires, and the number of clock cycles the instruction requires to execute. For certain instructions, an asterisk appears in the column following the number of clock cycles. This indicates that you must add one to the number of cycles if the operation crosses a page boundary. The instructions are arranged alphabetically in this section.
77
ADC
Add memory to accumulator with carry.
NZCIDV
*** * The data in the ACCUMULATOR is added to the immediate data or the data in the specified memory location. The CARRY bit is added into bit 0 of the result. If the result exceeds 8 bits, the CARRY bit will be set after the addition. If the DECIMAL mode is set, the addition will be performed treating the data as binary coded decimal data. In this mode, the carry bit will be set for results over 99.
Addressing Kode It1MEDIATE ZERO PAGE ZERO PAGElX ABSOLUTE ABSOLUTElX ABSOLUTElY (INDI RECT ~X) ( INDI RECT) ,Y
AND
OP
Code .:S9
65 75 6D 7D 79 61
71
Instruction Format ADC ADC ADC ADC ADC ADC ADC ADC
tfOPER OPER OPERlX OPER OPER,X OPERlY (OPERlX) (OPER) ,Y
No.
No.
Bytes
Cycles
2 2 2
2
3
3 3 3
4 4 4 4
2 2
5
6
'* '* *
JJ{D memory with accum~ato~
NZCIDV
**
A logical AND is performed between the data in the ACCUMULATOR and the immediate data or the data in the specified memory location.
Addressing Kode It-1MED I ATE ZERO PAGE ZERO PAGE ,:x: ABSOLUTE ABSOLUTE, ;{ ABSOLUTE, '( (INDI RECT ,;0 ( no.JD I F.:ECn , '(
78
OP
Code 29 25
35 20
3D 39 21 31
Instruction Format AND
No.
Bytes
~ND
tfOPER OPER
AND AND AND AND AND At,j[)
OPER~X
2
OPER OPER,X OPER ,OO{ (OPEF:,><) 0:: OPER) ,Oo(
:3
2 2
3 :3 2 2
No.
Cycles 2 :3 4 4 4 4 I~' <= oJ
* *
ASL
Shift one bit lefl NZC.IDV
***
The contents of the ACCUMULATOR or the specified memory location are shifted left one bit. The most significant bit is shifted into the CARRY bit and the least significant bit is cleared.
Addressing )(ode
Code
ACCUMULATOR ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X
8A 86 16 8E 1E
BCC
OP
Instruction Format
ASL ASL ASL ASL ASL
A OPER OPER,X OPER OPER,X
No. Bytes
No. Cycles 2 5
2 2
6 6
3 3
7
Branch on carry clear. NZCIDV
A branch is performed if the CARRY bit is clear.
Addressing )(ode
Code
OP
Instruction Format
RELATIVE
90
BCC
BIT
OPER
No. B7f,es
No. Cycles
2
2
Test bits in memory with accumulator. NZCIDV
11'*
lie
The contents of the ACCUMULATOR are logically ANDed with the specified memory location, but the result of the operation is not stored. Bit 7 of the result is stored in the NEGATIVE bit of the STATUS register and bit 6 of the result is stored in the OVERFLOW bit of the STATUS register.
Addressing )(ode
Code
OP
Instruction Format
ZERO PAGE ABSOLUTE
24 2C
BIT BIT
OPER OPER
No. Bytes
No. Cycles
2 3
3 4
79
BCS
Branch on carry sel
NZCIDV A branch is performed if the CARRY bit is set.
OP
Addressing llode
Code
RELATIVE
B13
BEQ
Instruction Format BCB
OPER
No.
Mo.
Bytes
Cycles
2
2
Branch on result zero.
NZCIDV A branch is performed if the ZERO bit is set.
Addressing Kode
Code
RELATIVE
Fa
BM!
OP
Instruction Format BEQ
OPER
No.
No.
BJtes
Cycles
2
2
Branch on result minus.
NZCIDV A branch is performed if the NEGATIVE bit is set.
80
Addressing llode
Code
OP
Instruction Format
RELATIVE
313
8MI
OPER
No. Bytes
Cycles
2
2
No.
BNE
Branch on result not zero. NZCIDV
A branch is performed if the ZERO bit is clear.
Addressing Mode
OP
Instruction
Code
RELATIVE
D0
BNE
BPL
Format
OPER
No. Bytes
No. Cycles
2
Branch on result plus. NZCIDV
A branch is performed if the NEGATIVE bit is clear.
OP
Addressing Mode
Code
RELATP')E
10
BRK
Instruction Format BPL
OPER
No. Bytes
No. Cycles
2
2
Force break. NZCIDV
The break command is used to initiate an interrupt under software control. This command can't be masked by the interrupt disable bit. By examining bit 4 of the status register, you can determine whether the interrupt routine was initiated through a break command or an external interrupt.
Addressing Mode H'lPLIED
OP Code
Instruction Format BRf(
No. Bytes
No. Cycles 7
81
BVC
Branch on OftrfioW' clear.
NZCIDV A branch is performed if the OVERFLOW bit is clear.
Addressing Mode
Code
RELATIVE
50
BVS
OP
Instruction Format BVC
OPER
No.
No. Cycles
Bytes
2
2
Branch on oftrfloW' sel
NZCIDV A branch is performed if the OVERFLOW bit is set.
Addressing Mode
Code
RELATIVE
70
OP
CLC
Instruction Format BVS
OPER
Bytes
No.
No. Cycles
2
2
Clear carry bit..
NZCIDV o CLC clears the CARRY bit in the STATUS register.
82
Addressing Mode
Code
IMPLIED
18
OP
Instruction Format CLC
No.
Bytes
No. Cycles 2
CLD
Clear decimal mode.
NZCIDV o CLD clears the DECIMAL mode bit in the STATUS register.
Addressing Mode
Code
Instruction Format
Bytes
Cycles
IMPLIED
D8
CLD
1
2
CLI
OP
No.
No.
Clear interrupt disable bit.
NZCIDV o CLI clears the INTERRUPT DISABLE bit in the STATUS register.
Addressing Mode
Code
Instruction Format
It1PLI ED
58
CLI
OP
CLV
No.
Bytes
No.
Cycles 2
Clear overflow bit.
NZCIDV o CLV clears the OVERFLOW bit in the STATUS register.
Addressing Mode
Code
I t-1PL I ED
88
OP
Instruction Format CL\..i
No.
Bytes
No.
Cycles 2
83
CMP
Compare memory and accumulator. Nzcrnv
***
The immediate data or the data in the specified memory location are subtracted from the ACCUMULATOR. The result is not stored, but the bits in the STATUS register are affected. The flags are affected as follows: A < MEMORY A MEMORY A >= MEMORY
OP
Addressing Mode IMMEDIATE ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X ABSOLUTE,Y ( INDI RECT ,X)
CPX
CARRY ZERO ZERO
Code C9 C5 D5 CD DD D9 C1 D1
CLEAR SET CARRY CLEAR CARRY
Instruction Format CMP ttOPER CMP OPER CMP OPER~X CMP OPER CMP OPER,X CMP OPER,Y CMP (OPER,X) CMP (OPER),Y
SET SET
No. Bytes
No. Cycles 2 3 4 4 4 4 6
2 2 2 3 3 3 2 2
5
* * *
Compare memory and X register. NZCrnV
***
The immediate data or the data in the specified memory location are subtracted from the X REGISTER. The result is not stored, but the bits in the STATUS register are affected. The flags are affected as follows: X X X
84
< >=
MEMORY MEMORY MEMORY
CARRY ZERO ZERO
CLEAR SET CARRY CLEAR CARRY
Addressing Mode
Code
OP
Instruction Format
It1MEDIATE ZERO PAGE ABSOLUTE
E0 E4 EC
CPX CPX CPX
ttOPER OPER OPER
SET SET
No. Bytes
No. Cycles
.,.....2
2 3
:3
4
Cpy
Compare memory and Y register.
NZCIDV
*** The immediate data or the data in the specified memory location are subtracted from the Y REGISTER. The result is not stored, but the bits in the STATUS register are affected. The flags are affected as follows:
Y < Y = Y>=
Addressing
Kode
IMtvlEDIATE ZERO PAGE ABSOLUTE
DEC
MEMORY MEMORY MEMORY
OP Code C0 C4
CC
CARRY ZERO ZERO
CLEAR
SET CARRY
Instruction Format CPY Cpy CPY
SET SET
CLEAR CARRY
ttOPER OPER OPER
No.
No.
Bytes
Cycles 2
2 2
3 4
3
Decrement memory by one.
NZCIDV
** DEC decrements the specified memory location by one.
Kode
OP Code
ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X
C6 D6 CE DE
Addressing
Instruction Format DEC DEC DEC DEC
OPER OPER,X OPER OPER,X
No.
No.
Bytes
Cycles
2 2 3 3
6 6
5 7
85
DEX
Decrement X register by one. NZCIDV
**
DEX decrements the contents of the X register by one.
Addressing Mode IMPLI ED
DEY
OP Code
Instruction Format
CA
DEX
No. Cycles
No. Bytes
2
Decrement Y register by one. NZCIDV
**
DEY decrements the contents of the Y register by one.
Addressing Mode
OP Code
Instruction Format
Il lPLI ED
88
DEY
v
EOR
N'O.
No. Cycles
Bytes
oj .L..
Exclusiw-OR memory with accumulator. NZCIDV
**
EOR performs an exclusive OR between the ACCUMULATOR and the immediate data or the specified memory address.
Addressing Mode
OP Code
IMMEDIATE ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X
49 45 55 4D
ABSOLUTE~Y
59 41 51
(INDIRECT,X) ( It-lD I RECn , Y 86
5D
Instruction Format EOR EOR EOR EOR EOR EOR EOR EOR
ttOPER OPER OPER,X OPER OPER,X OPER,Y (OPER,X) (OPER),Y
N'O.
Bytes 2 2 2 3 3 3 2 2
No. Cycles 2 3
4 4 4 4 6
5
* * *
INC
Increment memory by one.
NZCIDV
**
INC increments the specified memory address by one.
Addressing
OP
Mode
Code
ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X
E6
INX
F6
EE
FE
Instruction Format INC INC INC INC
OPER OPER,X OPER OPER,X
No.
No.
Bytes
Cycles
2 2
5
3 3
6 7
6
Increment X register by one.
NZCIDV
**
INX increments the contents of the X register by one.
Addressing
Mode
Code
OP
Instruction Format
IMPLIED
E8
INX
INY
No.
No.
Bytes
Cycles 2
Increment Y relister by one.
NZCIDV
** INY increments the contents of the Y register by one.
Addressing
Mode IMPLI ED
OP
Code C8
Instruction Format INY
No.
Bytes
No.
Cycles 2
87
JMP
Jump to new location. NZCIDV
JMP changes the address in the program counter. Program execution continues at the new address.
Addressing Mode
Code
ABSOLUTE INDIRECT
4C 6C
OP
JSR
Instruction Format JMP .JMP
OPER (OPER)
No. Bytes
No. Cycles
3 3
3 5
Jump to subroutine. NZCIDV
JSR changes the address in the program counter after pushing a return address onto the stack. Program execution continues at the new address.
Addressing Mode
Code
OP
Instruction Format
ABSOLUTE
213
JSF.:
LDA
OPER
Bytes
No.
No. Cycles
.-, ..;,
6
Load accumulator. NZCIDV
**
LDA loads the ACCUMULATOR with data from the specified memory location. If the IMMEDIATE mode is specified, the data to be loaded will be the second byte of the instruction.
Addressing Kode IMMEDIATE ZERO PAGE ZERO PAGE,X ABSOLUTE A8S0LUTE,X ABSOLUTE,Y ( INDI RECT ,X) ( INDI RECT) ,Y
88
OP
Code A9 A5 B5 AD BD 89 A1 81
Instruction Format LDA LDA LDA LDA LDA LDA LDA LDA
+tOPER OPER OPER,X OPER OPER~X
OPER,Y (OPER,X) (OPER),Y
No.
Bytes
No. Cycles
2 2 2 3 3 3 2
2 3 4 4 4 4 6
2
5
* * *
LDX
Load X register.
NZCIDV
** LDX loads the X REGISTER with data from the specified memory location. If the IMMEDIATE mode is specified, the data to be loaded will be the second byte of the instruction.
Addressing
OP
Mode
Code
IMMEDIATE ZERO PAGE ZERO PAGE,Y ABSOLUTE ABSOLUTE,Y
A2 A6 B6 AE BE
LDY
WtructioD Format
LDX LDX LDX LDX LDX
#OPER OPER OPER,Y OPER OPER,Y
No. Bytes
No. Cycles
2
2 :3
2
2
4 4 4
:3 :3
*
Load Y register.
NZCIDV
** LDY loads the Y REGISTER with data from the specified memory location. If the IMMEDIATE mode is specified, the data to be loaded will be the second byte of the instruction.
Addressing
OP
llode
Code
Hit-tED I ATE ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X
A0 A4 B4 AC BC
WtruCtiOD Format
LDY LDY LDY LDY' LDY
#OPER OPER OPER,Y OPER OPER,Y
No. Bytes
2 2 2 3 ~
.:;.
No. Cycles
2 :3 4 4 4
* 89
LSR
Shift. right. one bit. (memory or accumulator). NZCIDV
0** LSR shifts the ACCUMULA10R or the specified memory location to the right one bit. A 0 is shifted into the most significant bit, clearing the negative bit in the STATUS register. The least significant hit is shifted into the CARRY bit.
Addressing Mode
ACCUMULATOR ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X
OP Code
4A
46 56 4E 5E
NOP
Instruction Format
LSR LSR LSR LSR LSR
A OPER OPER,X OPER OPER,X
No. Bytes
No. Cycles
1
2 5
2 2 3 3
6 6 7
No operation. NZCIDV
This instruction doesn't do anything for 2 cycles.
90
Addressing Mode
Code
OP
Instruction Format
It-1PLI ED
EA
NOP
No. Bytes
No. Cycles
2
ORA
OR memory with accumulator. NZCIDV
**
ORA performs a logical OR between the ACCUMULATOR and the immediate data or the data in the specified memory location.
Addressing llode
IHHEDIATE ZERO PAGE ZERO PAGE!X ABSOLUTE ABSOLUTE!X ABSOLUTE,Y ( INDI RECT ,:~o ( INDI RECn ! y
PHA
OP
Code
Instruction Format
09 05 15
ORA ORA
eD lD
ORA ORA ORA ORA ORA
19 01 11
OF~A
No. Bytes
nOPER OPER OPER,X OPER OPER,X OPER,Y (OPER,X) (OPER),Y
2 -j .... 2 3 3 3 2 2
No. Cycles 2 :3 4 4 4 4 6
* *
5
Push accumulator on to .tack. NZCIDV
PHA pushes the ACCUMULATOR onto the stack.
. Addressing llode
Code
OP
Instruction Format
IMPLI ED
48
PHA
PHP
No.
Bytes
No. Cycles 3
Push status register on to stack NZCIDV
PHP pushes the STATUS byte onto the stack.
Addressing llode
Code
OP
:nstruction Format
IHPLI ED
08
PHP
No.
Bytes
No. Cycles 3
91
PLA
Pull accumulator from stack. NZCIDV
**
PLA pulls the ACCUMULA10R off the stack.
Addressing )(ode
Code
OP
Instruction Format
IMPLIED
68
PLA
PLP
No.
No. Cycles
Bytes
4
Pull status register from stack. NZCIDV from .tack
PLP pulls the STATUS byte off the stack..
Addressing Mode
Code
OP
Instruction Format
IMPLIED
28
PLP
ROL
No.
No. Cycles
Bytes
4
Rotate memory or accumulator one bit left. NZCIDV
***
ROL rotates the ACCUMULA10R or the specified memory location one bit to the left through the CARRY bit. The CARRY bit is rotated into the least significant bit and the most significant bit is rotated into the CARRY bit.
92
Addres8in1 Mode
Code
ACCUMULATOR ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X
2A 26 36 2E 3E
OP
Instruction Format ROL ROL ROL ROL ROL
+tOPER OPER OPER,X OPER OPER,X
No.
Bytes
No. Cycles
1
2
2 2 3 3
5 5
6 7
ROR
Rotate memory or accumulator one bit right. NZCIDV
***
ROR rotates the ACCUMULATOR or the specified memory location one bit to the right through the CARRY bit. The CARRY bit is rotated into the most significant bit and the least significant bit is rotated into the CARRY bit.
Addressing Mode
Code
ACCUMULATOR ZERO PAGE ZERO PAGE~X ABSOLUTE ABSOLUTE ,X
6A 66 76 6E 7E
OP
RTI
Instruction Format
ROR ROR ROR ROR ROR
ttOPER OPER OPER~X
OPER OPER,X
No.
Bytes 2 2 3 3
No.
Cycles 2 5
6 6 7
Return from interrupt. NZCIDV from atack
RTI returns from an interrupt by pulling the STATUS byte off the stack and pulling the PROGRAM COUNTER off the stack. The values pulled from the stack were pushed onto the stack by the interrupt or BRK instruction.
OP
Addressing Mode
Code
Instruction Format
Bytes
IMPLIED
40
RTI
1
RTS
No.
No.
Cycles 6
Return from subroutine. NZCIDV
RTS returns from a subroutine to the instruction following the jump to subroutine instruction.
Addressq Mode
Code
OP
Instruction Format
IMPLIED
69
RTS
No. Bytes
No.
Cycles 6
93
SBC
Subtract memory from accumulator with carry.
NZCIDV
*** * SBC subtracts the immediate data or the specified memory location from the ACCUMULATOR using the CARRY bit as a borrow bit. This instruction will subtract the complement of the CARRY bit from the least significant bit of the ACCUMULATOR. If the DECIMAL mode is set, the data will be treated as binary coded decimal data. In this case, 99 is the highest value that can be represented in the ACCUMULATOR. As with the binary mode of operation, the CARRY bit will be cleared if the value goes below zero.
Addressing
Mode IMMEDIATE ZERO PAGE ZERO PAGE!X ABSOLUTE ABSOLUTE ,X ABSOLUTE,Y ( INDI RECT ,X)
OP
Instruction
Format
Code E9 E5 F5 ED FD F9 El Fl
SEC
SBC SBC SBC SBC SBC SBC SBC SBC
#OPER OPER OPER!X OPER OPER,X OPER!Y (OPER,X) (OPER) ,Y
No.
No.
Cycles
Bytes
2 2 2 3 3 3 2 2
2 3 4 4 4 4 6
5
* * *
Set carry bit.
NZCIDV 1
SEC sets the CARRY bit in the STATUS register.
Addressing
94
OP
Ilode
Code
IMPLIED
38
Instruction
Format SEC
No. Bytes
No.
Cycles 2
SED
Set decimal mode.
NZCIDV 1
SED sets the DECIMAL mode bit in the STATUS register.
Addressing Kode
Code
OP
Instruction Format
IMPLI ED
F8
SED
SEI
No. Bytes
No. C,.::les 2
Set interrupt disable bit.
NZCIDV 1
SEI sets the INTERRUPT DISABLE bit in the STATUS register.
Addressing ){ode
Code
IMPLI ED
78
STA
OP
Instruction Format
No. Bytes
No. Cycles
1
2
SEI
Store accumulator in memory.
NZCIDV STA stores the contents of the ACCUMULATOR into the specified memory location.
Addressing )(ode ZERO PAGE ZERO PAGE,X ABSOLUTE ABSOLUTE ,X ABSOLUTE,Y (INOI RECT ,X) ( INOI RECT) ,Y
OP
Code 85 95 8D 90 99 81
91
Instruction Format STA STA STA STA STA STA STA
OPER OPER,X OPER OPER,X OPER,Y (OPER,X) (OPER) ,Y
No. Bytes
No. Cycles
2 2 3 3 3 2 2
3 4 4
5 5 6 6
95
STX
store X register in memory. NZCIDV
STX stores the contents of the X REGISTER into the specified memory location.
Addressing Mode
Code
ZERO PAGE ZERO PAGE~Y ABSOLUTE
86 96 8E
STY
OP
Instruction Format STX STX STX
No. Bytes
No. Cycles
OPER
2
3
OPER~Y
"....
4 4
OPER
3
Store Y register in memory. NZCIDV
STY stores the contents of the Y REGISTER into the specified memory location.
Addressing Mode
Code
OP
Instruction Format
ZEF:O PAGE ZERO PAGE ~ x: ABSCILUTE
84 '7'4 Be
STy' ST"-( STY
TAX
OPER OPER~X
OPER
No. Cycles
No. Bytes 2 2 3
'J
~,
4 4
Transfer accumulator to X register. NZCIDV
** TAX transfers the data in the ACCUMULATOR to the X register.
96
Addressing Mode
OP COde
Instruction Format
IMPLIED
AA
TAX
No. Bytes
No. Cycles 2
TAY
Transfer accumulator to Y register.
NZCIDV TAY transfers the data in the ACCUMULATOR to the Y register.
Kode
OP Code
Instruction Format
IMPLIED
AS
TAY
AddressiDj
TSX
No.
No. Bytes
Cycles 2
Transfer stack pointer to X register. .N Z C I D V
** TSX transfers the current STACK POINTER to the X register.
Kode
OP Code
Instruction Format
IMPLI ED
BA
T!3X
AddressiDj
TXS
No.
Bytes
No.
Cycles 2
Transfer X register to stack pointer.
NZCIDV TXS transfers the data in the X register to the STACK POINTER.
OP Code
Instruction
Kode
Format
No. Bytes
Cycles
IMPLIED
9A
TXS
1
2
Addressinl
No.
97
TXA
Transfer X regist.er to accumulat.or.
NZCIDV TXA transfers the data in the X register to the ACCUMULATOR.
Addressinj Mode
Code
OP
Instruction Format
IMPLI ED
8A
TXA
TYA
**
No. Bytes
No.
Cycles 2
Transfer Y register to accumulator.
NZCIDV TYA transfers the data in the Y register to the ACCUMULATOR.
Addressing
98
)(ode
OP Code
Instruction Format
IMPLI ED
98
TYA
No.
BJtes
** No.
Cycles 2
Appendix B Descriptions of all the macros in the MACLIB file are in this section. Each description includes the macro name, the 6510 registers that are affected by calling the macro, a description of what the macro does, and the syntax of the instruction line. If a macro requires any parameters, they are described also. Most of the macros have been discussed elsewhere in the text of the book, and this section provides a quick reference guide to them. The macros are arranged alphabetically.
99
ADRES
REGISTERS DESTROYED
A X Y SP
1*1 I I I ADRES loads a two byte address into memory locations.
AD RES
?1,?2
?l=Address to be loaded into memory. ?2=Destination address of the address.
ANOP
REGISTERS DESTROYED
A X Y SP
I I I 1 I
This macro produces no code, but provides a convenient place to hang a label.
ANOP
ASI2
REGISTERS DESTROYED
A X Y SP
1*1 1 I 1 ASL2 shifts a two byte value 1 bit to the left.
ASL2
?1
?l=Address of the first of two bytes to shift left. 100
BANK
REGISTERS DESTROYED
A X Y SP
1*1
1 1 1
BANK selects the 16K bank of memory that the VIC chip can access.
BANK
?1
?l=Number of the bank to select.
0=$0000-$3FFF 1=$4000-$7FFF 2=$8000-$BFFF 3=$C000-$FFFF
BGT
REGISTERS DESTROYED
A X Y SP I
1
I
1
I
A branch is performed if the CARRY bit is set and the ZERO bit is set.
BGT
?1
?l=Destination address for the jump.
BLE
REGISTERS DESTROYED
A X Y SP
( 1 1 1 I A branch is performed if the CARRY bit is clear or the ZERO bit is set.
BLE
?1.
?l=Destination address for the jump. 101
BLNK
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 BLNK blanks the screen to the border color.
BLNK
DBADC
REGISTERS DESTROYED
A X Y SP
1*1 I 1 1 DBADC adds one two byte value to another.
DBADC
?1~?2,?3
?l=Address of the first number. ?2=Address of the second number. ?3=Destination address of result.,
DBDEC
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 DBDEC decrements a two byte number by a specified value.
DBDEC
?1,?2
?l=Address of the number to be decremented. ?2=Number to be subtracted. 102
DBADCI
REGISTERS DESTROYED
A X Y SP
1*1
1 1
1
DBADCI adds a one byte number to a two byte number.
DBADCI
?1,?2,?3
?l=Address of the first number. ?2=Immediate data or the address of the number to add. ?3=Destination address of result.
DBINC
REGISTERS DESTROYED
A X Y SP
1
*1
1 1
1
DBINC increments a two byte number by a specified value.
D8INC
?1,?2
?l=Address of the number to increment. ?2=Number to be added.
DBPL
REGISTERS DESTROYED
A X Y SP
1
1 1
1
1
DBPL decrements the X or Y register and branches if the NEGATIVE bit is clear.
DBPL
?1,?2.
?l=X or Y to specify the register to be used. ?2=Destination of the branch NOTE--Either the contents of the X register or the Y register will be altered depending on ?1. 103
DBSBC
REGISTERS DESTROYED
A X Y SP
1*1 I I I DBSBC subtracts one two byte value from another.
DBSBC
"?1,"?2,"?3
"?l=Address of the first number. "?2=Address of the number to subtract. "?3=Destination address of result.
DBSBCI
REGISTERS DESTROYED
A X Y SP
I* I I I I
DBSBCI subtracts a one byte number from a two byte number.
DBSBCI
"?1,"?2,"?3
"?l=Address of the first number. "?2=lmmediate data or the address of the number to subtrac t • "?3=Destination address of result.
DS
REGISTERS DESTROYED
A X Y SP
I I I I I
DS defines a number of bytes to be allocated for data storage starting at the current program counter location.
DS
"?1
"?l=Number of bytes to allocate. This macro should be preceded by a label. 104
FILBYT
REGISTERS DESTROYED
A X Y SP
1*1 1*1 1 FILBYT fills up to 255 bytes of memory with the same value.
FILBYT
'?1,?2,?3
?l=Address of the first byte to fill. ?2=Data to load into memory. ?3=Number of bytes to fill.
FILL
REGISTERS DESTROYED
A X Y SP
1*1*1*1 1 FILL fills a number of 256 byte pages of memory with a value.
FILL ?1,?2,?3 ?l=Address of the first byte to fill. ?2=Data to fi 11 the area wi tho ?3=Number of 256 byte pages to fill.
GRAB AS
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 GRABAS sets the base address of graphics in the current bank.
GRABAS
?1
?l=The base address of graphics memory. This address must be a mu 1 tip 1 e of $9899. 105
GRAPH
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 GRAPH enables a bit mapped graphics mode.
GRAPH
HDEC
REGISTERS DESTROYED
A. X Y SP
1*1*1 I 1 HDEC decrements a nine bit sprite position with the ninth bit in HMSB. The X register must contain the index number of the byte to decrement in an 8 byte array of· horizontal positions.
HDEC ?l=Base address of the horizontal position array.
HINC
REGISTERS DESTROYED
A. X Y SP
1*1*1 1 I HINC increments a nine bit sprite position with the ninth bit in HMSB. The X register must contain the index number of the byte to increment in an 8 byte array of horizontal positions.
HINC
?1
?l=Base address of the horizontal position array. 106
IPULL
REGISTERS DESTROYED
A X Y SP
1*1*1*1 1 IPULL restores the A, X, and Y registers to their original values before an interrupt routine and clears the video interrupt.
IPULL
JCC
RBGlStERS DESTROYED
A X Y SP
I
1
1
I
I
JCC causes a jump if the CARRY bit is clear.
...TCC
?1
?l=Destination address for the jump.
JCS
REGISTERS DESTROYED
A X Y SP
1 1 1 1 1 JCS causes a jump if the CARRY bit is set.
JCS
?1
?l=Destination address for the
jump~
107
JEQ
REGISTERS DESTROYED
A X Y SP
I I I I I JEQ causes a jump if the ZERO bit is set.
JEQ
"?1
"?l=Destination address for the jump.
JGE
REGISTERS DESTROYED
A X Y SP
I I I I I JGE causes a jump if the CARRY bit is set.
.JGE
"?1
"?l=Destination address for the jump.
JGT
REGISTERS DESTROYED
A X Y SP
I I I I I JGT causes a jump if the ZERO bit is clear and the CARRY bit is set.
JGT
?1
?l=Destination address for the jump. 108
JLE
REGISTERS DESTROYED
A X Y SP
I I I I I JLE causes a jump if the CARRY bit is clear and the ZERO bit is set.
JLE
"?1
"?l=Destination address for the jump.
JLT
REGISTERS DESTROYED
A X Y SP
I I I I I JLT causes a jump if the CARRY bit is clear.
J.LT
"?1
"?l=Destination address for the jump.
JMI
REGISTERS DESTROYED
A X Y SP
I I I I I
JMI causes a jump if the NEGATIVE bit is set. JM I
"? 1
?l=Destination address for the jump. 109
JNE
REGISTERS DESTROYED
A X Y SP
1 1 1
1
I
JNE causes a jump if the ZERO bit is clear.
JNE
'?1
'?l=Destination address for the jump.
JPL
REGISTERS DESTROYED
A X Y SP
I I I I I JPL causes a jump if the NEGATIVE bit is clear.
JPL
?1
?l=Destination address for the jump.
LDMEM
REGISTERS DESTROYED
A X Y SP
1*1 1 1 I LDMEM moves data from one location to another or loads an immediate value into memory using the accumulator.
LDMEM
'? 1 ,'?2
?l=Immediate data or memory location to move. '?2=Destination address. 110
LDMEMX
REGlSTERS DESTROYED
A X Y SP
I 1*1 1 I LDMEMX moves data from one location to another or loads an immediate value into memory using the X register.
LDMEMX
? 1 , ?2
?l=Immediate data or memory location to move. ?2=Destination address.
LDMEMY
REGISTERS DESTROYED
A X Y SP
1 1 1*1 1 LDMEMY moves data from one location to another or loads an immediate value into memory using the Y register.
LDMEMY
? 1 , ?2
?l=Immediate data or memory location to move. ?2=Destination address.
LSR2
RlGlSTIRS DBSTROYED
A X Y SP
[* I I I I LSR2 shift a two-byte value 1 bit to the right.
LSR2
?1
?l=Address of the first of two bytes to shift right. 111
KIll
REGISTERS DESTROYED
A X Y SP
1*1*1 1*1 KILL turns off the Commodore's operating system: 1. BASIC is disconnected. 2. Joysticks are enabled for input. 3. System timers are turned off. 4. Raster interrupts are enabled. 5. All pending interrupts are cleared. 6. Page 0 of RAM is cleared. 7. The NMI vector is set to point at an RTI instruction.
KILL
MULTOF
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 MULTOF disables a multicolor graphics mode.
t1ULTOF
MULTON
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 MULTON enables a multicolor graphics mode.
HULTON 112
MVCOL
REGISTERS DESTROYED
A X Y SP
1*1*1*1 1 MVCOL fills color RAM with a value. t1~)COL
"? 1
?l=Va 1 ue tCI f ill color· RAt1
MVMEM
IN
i th.
REGISTERS DESTROYED
A X Y SP
1*1 *1 *1 1 Moves a number of 256 byte pages of memory to a different area in memory.
?l=Starting address of memory to move. ?2=Destination address of data. "?3=Number of 256 byte pages to move.
NIBLL
REGISTERS DESTROYED
A. X Y SP
1*1 I I I NIBLL shifts the lower byte of the accumulator into the upper byte. NIBLL 113
NIBLR
REGISTERS DESTROYED
A X Y SP
1*1 I 1 1
NIBLR shifts the upper byte of the accumulator into the lower byte.
NIBLR
NOT
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 Nor complements the contents of the accumulator.
NOT
PUNPCK
REGISTERS DESTROYED
A X Y SP
1* 1 1 1 1 PUNPCK unpacks a nine bit horizontal position into a two byte number. The X register must contain the index number of the byte to unpack in an 8 byte array of horizontal positions. PUNPCK
'? 1 , '?2 , ,?:3
?l=Base address of the horizont~l position array. ?2=Addr'ess of the most significant bit register. ?3=Destination of the unpacked bytes. 114
QDDEC
REGIStERS DESTROYED
A X Y SP
1*1 I I 1 QDDEC decrements a four byte number by a specified value.
QDDEC
?1,?2
?l=Address of the number to be decremented. ?2=Number to be subtracted.
QDINC
REGISTERS DES'l'ROYED
A X Y SP
1*1 1 1 I QDINC increments a four byte number by a specified value.
QDINC
?1,?2
?l=Address of the number to increment. ?2=Number to be added.
RAST
REGISTERS DES'l'ROYED
A X Y SP
1*1 1 1 1 RAST enables the VIC chip to generate an interrupt on a specified scan line. RAST ?1
?1 = Immediate data or memory location that specifies the scan line on which to generate an interrupt. 115
SMNPC
REGISTERS DESTROYED
A X Y SP
1*1 I
1
1
SMNPC unpacks a nine bit horizontal position into a one byte number. The X register must contain the index number of the byte to unpack in an 8 byte array of horizontal positions. The resulting single byte is the nine bit horizontal position divided by 2. SMNPC
?1,?2,?3
?l=Address of the horizontal position register. ?2=Address of the most significant bit register. ?3=Destination of the unpacKed bytE!'.
SMNPCX
REGISTERS DESTROYED
A X Y SP
1*1 I I I SMNPCX unpacks a nine bit horizontal position into a one byte number. The X register must contain the index number of the byte to unpack in an 8 byte array of horizontal positions. The resulting single byte is the nine bit horizontal divided by 2.
St-1NPCX
? 1 , ?2 , ?3
?l=Base address of the horizontal position array. ?2=Address of the most significant bit register. ?3=Destination of the unpacKed byte.
TEXT
REGISTERS DESTROYED
A
X
Y SP
1*1 1 1 1 TEXT enables a character graphics mode.
TEXT 116
TPDEC
REGISTERS DESTROYED
A X Y SP
1*1 I I I TPDEC decrements a three byte number by a specified value.
TPDEC
?1,?2
?l=Address of the number to be decremented. ?2=Number to be subtracted.
TPINC
REGISTERS DESTROYED
A X Y SP
1*1 1 1 1 TPINC increments a three byte number by a specified value.
TPINC
?1,?2
?l=Address of the number to increment. ?2=Number to be added.
TXBAS
REGISTERS DESTROYED
A X Y SP
1*1 I I 1 TXBAS sets the base address of TEXT memory in the current bank.
TXBAS
?1
?l=Base address of TEXT. Must be a multiple of $0400. 117
UNBLNK
REGISTERS DESTROYED
A X Y SP-
1*1 1 1 I UNBLNK enables the screen display.
UNBLNK
UNPACK
REalSTERS DESTROYED
A X Y SP
1*1 I I I UNPACK unpacks a nine bit horizontal position into a two byte number. The X register must contain the index number of the byte to unpack in an 8 byte array of horizon~ positions.
UNPACK
?1,?2,?3
?l=Address of the horizontal position register. ?2=Address of the most significant bit register. ?3=Destination of the unoacKed bytes.
118
Appendix C In this section, you will find listings of all the source code files mentioned in the book. Memory dumps are provided for the binary files, such as sprites and lookup charts. Memory dumps are also provided for the assembled versions of the programs described in this book. If you are going to enter one of the binary files by hand, you must be sure to enter the data exactly as shown. Otherwise, the program may not run, or in the case of graphics, will not look right. Thble C-l is a list of the programs in this Appendix. The type of each program and its loading address are also provided. A program can be ·one of the following types:
Listing Number N.... C C C C C C C C C C
1 2 3 4 5 6 7 8
9 10
MACLIB SYSDEF INTER-DEMO INT DEMO.O SOUND SOUND DEMO COMMON SNDDEF DATA EDIT SND
Type SRC SRC SRC BIN SRC BIN SRC SRC SRC SRC
Addr.ss
BAMDR
$1000
4096
$1000
4096
119
Listing Numbe... C 11 C 12 C 13 C 14 C 15 C 16 C 17 C 18 C 19 C - 20 C 21 C 22 C 23 C 24 C - 25 C 26 C 27 C 28 C 29 C 30 C 31
Name SOUND EDIT KO-COM COM-KO DISPLAY PIC MVIT PIC A CASTLE SPRITE MAKER SLIB.O CLSP2 SCREEN-MAKE CLBACKI CLSP! PHOENIX Vl.4N BOGHOP BOGHOP.O BOGDEF BOGDAT XXPLOT LOOKUP BOGSPR OOPLOT
Type BIN BAS BAS BAS BIN BIN BAS BIN BIN BAS BIN BIN BIN SRC BIN SRC SRC SRC BIN BIN SRC
Add ....ss $1000
BASADR 4096
$2000 $6000
8192
$8000 $4000 $6000
$4000 $8000
32768
$1400
5120
$1000 $4000
SRC
An assembly language source code file. This type of file should be loaded by an assembler.
BAS
A BASIC program. This type of file can be loaded by entering LOAD"NAME",a The program can then be RUN.
BIN
A binary data file. This type of file can be loaded by entering LOAD"NAME",8,1 or by a machine language monitor. If the file is a program, it can be run by entering SYS BASADR, where BASADR is the decimal address of where the program will be loaded. If the file is not a program, no BASADR will be listed.
A short description of each of the files follows. Listing Col, MACLIB, is the macro library source code. Listing C-2, SYSDEF, is a file of system definitions. Listing C-3, INTER-DEMO, is the source code for INT DEMO.O, a demonstration of the use of interrupts to change background colors. Listing C-4, INT DEMO.O is the assembled version of INTER-DEMO. Listing C-5, SOUND, is the source code file for the SOUND DEMO program. Listing C-6, SOUND DEMO, is the assembled SOUND file, which can be run. Listing C-7, COMMON, is a file of musical definitions.
120
Listing C-8, SNDDEF, is a file of RAM definitions used by both SOUND and EDIT SOUND. Listing C-9, DATA, is a data file used by SOUND. Listing C-10, EDIT SND, is the source code for the SOUND EDIT program. Listing C-ll, SOUND EDIT, is a screen editor for the SID chip. With this program, you can test sound effects in your program later. Listing C-12, KO-COM translates a Koala Pad picture filename into a· more usable format. Listing C-13, COM-KO, translates a Koala Pad picture filename in the Commodore format to the Koala Pad format. Listing C-14, DISPLAY PIC, will display a Koala Pad picture on the screen if its name has been translated to the Commodore format. This program can display PIC A CASTLE. Listing C-15, MVIT, is a machine language subroutine used by DISPLAY PIC. This routine will display a picture once it is loaded into the computer. Listing C-16, PIC A CASTLE, is a Koala Pad picture file whose name has been translated to the Commodore format. Listing C-17, SPRITE MAKER, is a utility program that aids in the design of sprites. Listing C-18, SLIRO contains some machine language routines that are called by the SPRITE MAKER program. Listing C-19, CLSP2, contains sprites used by the SPRITE MAKER program. Listing C-20, SCREEN-MAKE, is a utility program that is designed to aid in the design of character graphics screens. Listing C-21, CLBACK1, is a file that has the character set to be used by the SCREEN-MAKE program. You can add to this file or replace it with a character set of your own. If you replace this file, your new file must load into memory starting at $6000. Listing C-22, CLSP1, is a sprite used by the SCREEN-MAKE program. Listing C-23, PHOENIX V1.4N, is a ready-to-run arcade style game. Listing C-24, BOGHOp, is the main code file for the game BOGHOP. Listing C-25, BOGHOP.O, is a ready-to-run arcade game that is fully described in Chapter 12. Listing C-26, BOGDEF, is a file of RAM variables used by the BOGHOP game. Listing C-27, BOGDAT, is a data file used by the BOGHOP game. Listing C-28, XXPUYf, is a point plotting subroutine. The LOOKUP file must be loaded and the variables defined, as in the beginning of the BOGHOP program, for this routine to work. Points are exclusively OR'd to the screen by this program. Listing C-29, LOOKUp, is a data file that is used by XXPLOf and OOPLOf. Listing C-30, BOGSPR, is a file of sprites used by the BOGHOP program. Listing C-31, OOPUIT, is a point plotting routine similar to XXPLOf. The only difference is that OOPLOf ORs as point to the screen instead of exclusively ORing it.
Listing C-1: The MACLIB Source Code 1898 1818 1828 1838 1848 1858 1868 1970
PUT"dl8 :MACLIB THIS IS A MACRO LIBRARY IT SHOULD BE THE FIRST LIBRARY LOADED LATEST ADDITIONS 93/16/84
121
1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1269 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 ?4 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510 1528 1538 1540 1550 1560 1570 1580 1590 1600 1610 1620 1630 1640 1650 1660
122
.MAC IPULL LDA #$FF STA VIRQ PLA TAY PLA TAX PLA RTI .MND .MAC KILL IKILLS O/S SEI LDMEM #$06~PORT jDISCONNECT BASIC LDA #$90 STA CIANT1 STA CIANT2 LDA CIANTl LDA CIANT2 LDA #$00 STA $DC02 ;JOYSTICK ENABLE STA $DC03 STA $DC0E ;KILL TIMERS STA $DC0F STA $DD9E STA $DD0F LDMEM #$01~VIRQM ;RAST INT ONLY LDMEM #$FF~VIRQ ICLEAR VID INTS LDX #$02 LDA #$00 STA $00,X ; CLEAR PAGE 0 INX BNE ?4 LDX #$FF TXS ADRES RET~NMINV .MND .MAC ADRES LOA #1 STA ?2 LOA #>"?1 STA ?2+1 .MNO
;SOURCE,DEST
.MAC DBINC LOA ?1 CLC ADC #n STA ?1 LOA #$00 ADC ?1+1 STA ?1+1 .MNO
ITv.)O BYTE INC
1679 1689 1699 1799 1719 1729 1739 1749 1759 1769 1779 1789 1799 1899 1819 1829 1839 1849 1 :359 1869 1879 188£1
1899 1999
.MAC OBOEC LOA ?1 SEC SBC #?2 STA ?1 LOA ?1+1 SBC #$913 STA ?1+1 .MNO
;2 BYTE DEC
.tvlAC RAST LOA ?1 STA RASTER LDA \'SCRL ANO #$7F STA YSCRL .tvlND .t1AC DS *=!<:+?1 .tvlNO
1 '7'1 0
1920 19:39 lNO
1959 17'69 1979 1989 ?6 1999 20130 2919 29213 2939 2949 213513 29613 21370 29813 21399 211313 2119 2129 2139 2149 ?5 2159 2169 2179 ?6 2189 2199 2299 2219 2220
2239 22413 ?4 2250
.MAC HINC INC ?l.X BNE ?6 LOA HMSB ORA BITPOS~)< STA Ht1SB .t1NO
;MSB OFFSET IN X
.MAC HOEC DEC ?l,X LOA ?l,X CMP #$FF BNE ?6 LOA HMSB AND BITPOS,>< BNE ?5 LOA HMSB ORA BITPOS ,X STA HMSB BNE ?6
; tvlSB OFFSET I N X
;BRANCH ALWAYS
LOA HMSB ANO BITAND,X STA HMSB .MND .MAC UNPACK LDA -;>2 AND BI TPOS,:;< BEQ ?4 LOA #-$131 STA ?3+1 LOA ?1
ILOAD X--SRC.MS8.DST
123
22613 22713 22813 22913 231313 23113 23213 23313 23413 ?4 2350 23613 2370 2380 2;::'7'0 2400 2410 2420 2430 2440 ?4 2450 2460 2470 2480 24',,0 2500 2510 2520
2540 2550 256~3
257£1 25:30 25';;0
2600 261 €1 2620
'7-'4
STA ?3 .MNO .MAC PUNPCK LOA ?2 ANO SITPOS,X SEQ ?4 LOA #$01 STA ?3+1 LOA ?1,X STA ?3 .tvlNO .t1AC SMNPC LDA ?2 AND BITPOS ,X SEQ ?4 LDA #$131 8TA ?3 ROR ?3 LDA ?1 ROR A :3TA ?3 .tvlND
iSRC,MSS,DST--
.t'lAC St"lNF'e>< lDA ?2 AND BITPOS ,X BEGl ?4 LDA #$01
; I NDEXED BY X
ETA ?3 ROF~ ?3
LDA ?1,/ F.:oJR H 8TA ?:3
2640 265€1 2,~,60
;A, +E: ,=C
275(1
.MAC DBADC lDA ?1 ClC ADC '72 :,:;TA ?3 LDA '1+1 ADC ?2+ 1 :3TA ?:3+ i .t'lND
2760 2770 27813 2790 2800 2810 28213 2830 2840
.!'1AC DBADCI LDA ?1 CLC ADC ?2 STA ?3 LDA ?1+1 ADC #$130 STA ?3+1
;A,+B,=C
2670
2680 2t.90
2700 2710 2720
2730 2740
124
2850 2860 2870 2880 2890 2900 2910 2920 2930 2940 2950 2960 2970 2980 2990 3000 3010 3020 3030 3040 3050 3060 3070 3080 3090 3100 3110 3120 3130 3140 3150 3160 3170 3180 3190 3200 3210 3220 3230 3240 3250 3260 3270 3280 3290 3300 3310 3320 3330 3340 3350 3360 3370 3380 3390 3400 ?4 3410 3420 3430
.MND .MAC DBSBC LDA ?1 SEC SBC 12 STA ?3 LDA ?1+1 SBC ?2+1 STA ?3+1 .MND
;A,-B,=C
.MAC DBSBCI LDA ?1 S.EC SBC ?2 STA 13 LDA ?1+1 S8C +1$00 STA ?3+1 .MND
jA,-B,=C
.MAC NIBLR LSR A LSR A LSR A LSR A .MND
jMOVE NIBBLE RIGHT
.MAC NIBLl ASL A ASL A ASL A ASl A .MND
;MOVE NIBBLE lEFT
.MAC ASL2 ASL ?1 ROL ?1+1 .MND
;TWO BYTE ASl
.11AC lSR2 LSR ?1 ROR ?1+1 .MND
;TWO BYTE lSR
.MAC BGT BEQ ?4 BCS ?1 .MND
;BRAANCH IF
.MAC BLE
jBRANCH IF (=
>
125
3440 3450 3460 3470 3480 3490 3500 3510 3520 3530 3540 3550 3560 3570 3580 3590 ?4 3600 :3610. 3620 3630 3640 3650 3660 3670 3680 36913 37013 3710
3720 37313 37413 ?4 3750 3760 ·:3770
:3780 3790 3800 381 (1 3820 3830 3840 :3850 38.::'0 3870 :3880 3890 :3900 :3910 39213 3930 3940 3950 3%0 2970 39813 :39913 40013 4010 41320
126
?4
BCC ?1 BEQ ?1 .t1ND
.MAC DBNE DE?l BNE ?2 .MND
iDEC BRANCH IF NOT 0
.MAC DJNE DE?l BEQ ?4 JMP ?2 .MND
.MAC DBPL DE?l BPL ?2 .t'lND
iDEC BRANCH +
.t-1AC JCC BC:3 ?4 ~Tt1P ? 1 .t-1ND
; JUt1P I F CARRY CLR
.t-1AC JC:3 BCC ?4 ~Tt-IP ? 1 .MND
.t-IAC JEQ BNE ?4 .Jt1P ? 1 ?4
.~1ND
?4
.MAC ~TGE BLT ·?4 .JMP ?1 .t-IND
?4
.MAC ~TGT BEQ ?4 BCC ?4 .JMP ?1 .MND
.t-1AC JLE
413313 413413 413513 413613 413713 413813 4e'fe 411313 41113 41213 41313 41413 41513 41613 41713 41813 41913 421313 42113 42213 42313 42413 42513 42613 42713 42813 42913 43013 4310 43213 4330 43413 4351) 43613 4370 4:3::::0 43'7'1) 4400 4410 44213
?3 ?4
8EQ ?3 8CS ?4 JMP ?1 .MND
?4
.MAC ~TL T 8CS -;'4 JMP ?1 .MND
?4
• t'lA C ~Tt'lI 8PL ?4 JMP ?1 .MND
?4
.MAC JNE 8EQ ?4 JMP ?1 .MND
?4
.MAC ~TPL 8tH ?4 Jt1P ?1 .MND
.MAC LDtiEt1 LDA ?1 STA '?2 .t-1ND
.t'lAC LDMEMX
t:T>< ?2 .t'lND
44:~:€1
4440 4450 44613 4470 44813 44'fe 451313 45113 4520 453(1 4540 4550 45,5t1
45713 45813 4590 46(10 461.)
• t"lAC LDt1Et"f{ LDY ?1 .Mf--m
.t1AC 8Af--W LDA lt$e3 STA $DD02 SEC SSC 1t?1 STA -$DDee .tiND
• t'lAC t1()t'1E~1 ADRES ?1 ~SCRPT
; SRC , DST , ItPAGES
127
4620 46313 .1640 4650 4660 4670 4680 4690 4700 4710 4720 4730 4740 4750 4760 4770 4780 4790 4800 4810 4820 4830 4840 4850 4860 4870 4880 4890 4900 4910 4920 4930 4940 4950 4960 4970 4980 4990 51300 5010 5020 5030 5040 5050 5060 5070 5080 5090 5100 5110 5120 5t30 5140 5150 5160 5170 5180 5190 5200
128
?5
?4 ?5
?4 ?5
?4
AORES ?2,SCROST LDY #$013 LOX #$00 LDA (SCRPT), Y STA (SCROST), Y INY BNE ?5 INC SCRPT+1 INC SCRDST+1 INX CPX #?3 BNE ?5 .MND .MAC MVCOL ;COLOR ADRES $0800,SCROST LDY #$00 LOX #$00 LOA #?1 STA (SCROST) , Y INY BNE ?5 INC SCROST+1 LOA SCROST+1 CMP #$OC BNE ?4 .MNO .MAC FILL AORES ?1,SCROST LOY #$00 LOX #$130 LOA #n - STA (SCROST>, Y INY BNE ?5 INC SCRDST+l INX CPX #?3 BNE ?4 .MND .MAC FILBYT ADRES ?l,DST LOY #$013 LOA #n STA (OST) ,Y INY CPY #?3 BNE ?4 .MNO .MAC ANOP .MNO
52113 52213 52313 52413 52513 52613 52713 52813 52913 531313 53113 53213 53313 53413 53513 53613 53713 53813 53913 541313 54113 54213 54313 54413 54513 54613 54713 5489 54913 551313 55113 55213 55313 5540 55513 5560 5570 55813 55913 56013 56113 5620 56313 5640 5650 56613 56713 56813 56913 571313 57113 57213 57313 57413 57513 57613 57713 57813 57913
.t1AC
TE~-
LDA YSCRL AND It$DF STA YSCRL .MND .MAC GRAPH LDA YSCRL ORA 1t$2e STA YSCRL .MND .MAC MULTON LDA XSCRL ORA 1t$1e STA XSCRL .MND .MAC MULTOF LOA XSCRL ANO #$EF STA XSCRL .MNO .MAC BLNK LOA YSCRL AND #$EF STA YSCRL .MNO .MAC UNBLN1 LOA YSCRL I' ORA #$113 STA YSCRL .MND
I
.MAC TXBAS, LOA 1t)?1 I ASL A ASL A STA BUF1 LOA VIOBAS ANO lt$eF ORA BUF1 STA VI DBAS .MND 'I
I'
.MAC GRABAk LDA 1t)?1 LSR A LSR A
r 129
5800 581 ~3 5820 58~a3
5840 5850 5860 58713
STA BUFl LDA VI DBA:3 AND #$F0 oF.: A BUFl STA 1,)1 DBAS .t'·lND
5880 58~'13
59013 5910 5'?213 59313 5';-413 59513 59613 5~'70
59813 59913 6131313 613113 613213 6030 60413 61350 60613 61370 61380 61390 611313 6110 61213 61313 61413 6150 61613 61713 61813 6190 621313 62113 62213 6230 62413 6250 6260 62713 62813 62913 63130 63113 6320 63313 63413 63513 <:,3613 6370 6380
130
.t1AC NOT EOR #$FF .t·1ND
: COt1PLEt lENTS ACC
.t1AC TPINC LDA 71 CLC ADC #.-,, ......, STA 71 LDA #$1313 ADC 71+1 STA ?1+1 LDA #$1313 ADC ?1+2 STA ?1+2 .MND
jTHREE BYTE INC
.MAC QDINC LDA ?1 CLC ADC #72 STA ?1 LDA #$1313 ADC' ?1 + 1 STA ?1+1 LDA #$013 ADC ?1+2 STA ?1+2 LDA #$130 ADC ?1+3 STA ?1+3 .MND
jFOUR BYTE INC
.MAC TPDEC LDA ?1 SEC SBC #72 STA ?1 LDA ?1+1 SBC #$1313 STA ?1+1 LDA ?1+2 SBC #$00 STA ?1+2 .tvlt--m
;3 BYTE DEC
v
63913 641313 64113 64213 64313 6449 64513 6469 6479 6489 6499 65139 65113 65213 65313 6549 6559 6569 65713
.MAC QOOEC lOA ?1 SEC S8C #?2 STA ?1 lOA ?1+1 SBC #$99 STA ?1+1 lOA ?1 +2 SBC #$1313 STA ?1+2 lOA ?1+3 SBC #$99 STA ?1+3 .MNO
;4 8YTE OEC
.ENO
Listing C-2: The SYSDEF Source Code 1999 1910 1929 1939 1049 1959 19613 1979 19813 1099 _ 111313 1119 11213 11313 11413 11513 1169 1179 11813 1199 12913 12113 12213 1239 12413 1259 1260 12713 12813 12?e 13013 13113 1329 1339 13413 13513
jPUT"al9:SYSOEF" j jFOR THE COMMOOORE-64 ;SYSTEM OEFINITIONS jSYSOEF
13613 1379 1389 13'?9 141313 14J.n
j JOYI JOY2 OORA OORB
$OC99 = $OC91 = $OC92 = $OCe3
;VIC CHIP AOORESSES $013139 SPRex $01391 SPR9Y SPRIX $013132 $01393 SPRIY SPR2X = $01394 SPR2Y $013135 SPR3X = $013136 SPR3': $De97 SPR4X $013138 SPR4Y $09139 SPR5X $01313A $Oe9B SPR5Y 3PR6X $0139C SPR6Y $013130 $013eE SPR7X $00eF SPR7Y $01319 XMSB $0011 YSCRl RASTER $01312 $01313 lPX $0914 LPY SOREt-.j $0915
14213 1439 14413 14513 1469 14713 14813 14913 15913 15113 15213 15313 15413 15513 15613 1579 15813 1599 161313 1619 16213 16313 16413 1659 1669 16713 16813 16913 17139 17113
$01316 XSCRl SPRYSZ $0917 $01318 VIOBAS ~)I RQ = $D919 ,)1 RQM $0131A ,,,0)018 B:.'·f~·r UF MlTSP = $091C SPRXSZ = $01310 SSCOl = $091E SBCOl = $OelF 80RCl = $09213 BCOle = $01321 BCOU = $01322 8COl2 $01323 SPMCl9 = $01325 SPMCll = $01326 SPRCl9 = $01327 $0928 SPRCLl SPRCl2 $0929 SPRCl3 = $092A SPRCl4 = $01328 SPRCl5 = $092C SPRCl6 = $01320 SPRCl7 = $092E VIFRlO = $04139 ,VOICE 1 FREQ lO VIFRHI = $0491 VI PWlO = $04132 ,VOl CE 1 PULSE WI OTH VIPWHI $0493 VICORG $0494 VIATOC $0495 VlSURl $0496 V2FRlO V2FRHI V2PWlO
$04137 $04138 $04139
131
17213 17313 17413 17513 17613 17713 17813 17913 181313 18113 18213 18313 18413 18513 18613 18713 18813 18913 191313 19113 19213 19313 19413 19513 19613 19713 19813 19913 2131313 213113 213213 213313 213413
$04eA V2PWHI V2CORG = $04eB V2ATOC $D4eC $D4eD V2SURL V3FRLO V3FRHI V3PWLO V3PWHI V3CORG V3ATOC 1)3SURL
$D4eE $D4eF $D410 $D411 $D412 $D413 $04i4
FLCNLO FLCNHI RESFLT MOI)VOL
$0415 $D416 $D417 $D418
SPOTX SPOTY RANDOM ENVLOP
= = = =
$D419 $D41A $D41B $D41C $8131313
ORGVAL i ,COLORS i BLACK WHITE = RED = CYAN =
13 $1 $2 $3
213513 213613 213713 213813 213913 211313 21113 21213 21313 21413 21513 21613 21713 21813 21913 2200 22113 22213 22313 2248 22513 22613 22713 22813 22913 231313 23113 23213 23313 2348 23513 23613 23713
PURPL GREEN BLUE YELOl.-,1 ORNGE 8ROWN LTRED GRAY1 GRAY2 LTGRN LT8LU GRAY3 OSYS CINV NI1INV PRTDIR PORT CIANT1 CIANT2 SPRPTl SPRPT2 SPRPT3 SPRPT4 SPRPT5 SPRPT6 SPRPT7 SPRPT8 TXSCRN
'$4
$5
$6 $7 $:3 = $9 $A $8 $C $D = $E $F $EA31
= = =
= = =
$13314 $13318 $1313 $131 $DCeD $DDeD $5FF8 $5FF9 $5FFA $5FFB $5FFC $5FFD $5FFE $5FFF $13488
INT VECTOR NMI VECTOR PORT DIR I/O PORT
.END
Listing C-3: The INTER-DEMO Program, Source Code for the INT DEMO.O Program
11300 1010 10213 1030 1040 lese 10613 1070 10813 113913 11130 11113 11213 11313 11413 11513 11613 1170 11813 11913 12138 1210
132
j PUT" 010: INTER-DEMO" jLOAD"ASM",8 ;
; I NTERRUPT DEMO ;
;TO START THE DEMO FROM BASIC ,TYPE 'SYS 4096' ; ;CREATED 7/17/84 ; (C) COPYRIGHT 1984, STEVEN BRESS iLATEST ADDITIONS 11/15/84 ie3:3e PM .OPT NOLIST,NOSYM .PAGE 'MACRO LIBRARY' .UB MACLlB .PAGE 'SYSTEM DEFINITIONS' .LIB SYSDEF .OPT LIST
12213 12313 12413 12513 12613 1270 1280 12913 1300 13113 1320 13313 1340 13513 1369 1379 1389 1390 14013 1410 14213 1439 1449 1459 1469 1479 1489 1499 1599
= $1131313
*
Jt-1P TOP .PAGE 'INTERRUPT DEMO CODE'
; RET TOP
RTI SEI
TWID
KILL ADRES INTe,CINIJ RAST *$96 CLI Jt1P TWI D
; INTe
;SHUT OFF OPERATING SYSTEM iCINV POINTS TO INTe jINTERRUPT AT MID SCREEN ;CLEAR INTERRUPT DISABLE ;MAIN PROGRAM DOES NOTHING
LDMEM #BLUE,BCOLe ;CHANGE BACKGROUND COLOR RAST *$FB ;NEXT INTERRUPT AT BOTTOt-l ADRES INT1,CINV ;POINT TO NEXT INTERRUPT IPULL ; RETURN
; INT1
LDMEt-l *GREEN, BCOL0 ; CHANGE COLOR RAST 1*$96 ,NEXT INTERRUPT AT MID SCREEN ADRES INT9,CINV ;POINT TO FIRST INTERRUPT I PULL ; R,ETURI'l NOP .END
Listing C-4: The INT DEMO.O Program · : 19139 • : 11398 .:113113 • : 1918 .: 1029 • : 1928 • : 11339 • : 1938 .: 10413 • : 1948 • : lese • : 1958
4C 85 9D A9 80 DO 09 A9 FF 19 93 80
94 91 DD 99 €IE 80 A9 139 9A 80 A9 12
19 A9 AD 8D DC €IF FF 95 A9 19 113 00
413 €Ie 9D 92 80 DO 80 €Ie 133 93 80 AD
78 80 DC DC €IF A9 19 E8 80 A9 15 11
78 9D AD 8D DC 91 De 09 18 67 133 00
A9 DC eD 133 80 80 A2 FB 133 80 A9 29
96 8D DO DC €IE lA 132 A2 A9 14 96 7F
• : 1969 • : 11368 • : 1979 · : 1978 • : 1989 • : 11388 • : 113913 • : 11398 · : leAe .: 19A8 · : 19B9
80 136 De De 80 68 80 AD A9 15 A8
11 8D AD A9 15 A8 21 11 67 93 68
09 21 11 8E 133 68 De 09 80 A9 AA
58 De De 8D A9 AA A9 29 14 FF 68
4C A9 29 14 FF 68 96 7F 133 80 413
64 FB 7F 133 80 413 80 80 A9 19 EA
113 8D 80 A9 19 A9 12 11 113 09 €Ie
A9 12 11 19 09 €IS De De 80 68 €Ie
Listing C-5: The SOUND Program, Source Code for the SOUND DEMO Program 1000 10113 113213 10313 11340 lese 1060 113713 1080
;PUT"dJ0:S0UND" ;LOAD"ASM" ,8 ,SOUND EFFECTS ;CREATED 6/313/84 :LATEST ADDITIONS 7/132/84 i
113913 1100 111 €I 11213 11313 11413 11513 11613 11713 11813
• OPT .LIB .LIB .LIB .LIB
*
LI ST ,NOSYM, NOGEN MACLIB SYSDEF COMMON SNDDEF
= $1131313 Jt-1P TOP
133
1190 121313 1210 12213 TOP 12313 12413 12513 1260 1270 1280
12're 1300 1310 i320 13313 1340 1350 1360 1370 1380 1390 14013 14113 14213 1430 1440 1450 1460 1470 14813 14913 151313 1510 1520 1530 1540 1550 1560 1570 15813 15913 1600 1610 1620 1630 1640 1650 1660 1670 1680 1690 1700 1710 1720 17313 17413 17513 1760 17713
134
START
.LIB DATA SEI KILL ADRES INTe ,CINV RAST #$FB t-1 l)COL vJHITE FILL $0400,$213,$134 GRABA:3 $1813 0 CLI ANOP LDMEt-1 #$10,WAVTYP
jMIDDLE FF:EQUENCY BASE LINE ;TRIANGLE WAl.-'E ADRES MTRI,SRC JSR PRINT LDMEM #$00,S3PWLO STA V3PWLO LDMEM #$08!S3PWHI STA V3PWHI LDMEM #$0F!MMOD STA MODVOL LDMEM #$00!RFIL STA RESFLT LDMEM #$ee,FLCNLO STA FLCNHI LDMEM #$77,S3ATDC STA V3ATDC LDMEM #$77!S3SURL STA V3SURL NXTWAV LDMEM WAVTYP,S3CORG STA V3CORG ADRES TUNES,NOTPT3 LDY #$130 LDA (NOTPT3) ,Y STA S3FRLO STA V3FRLO INY LDA (NOTPT3) ,Y STA S3FRHI STA V3FRHI DBINC NOTPT3,$02 ADRES TUNTM,NOTTM3 LDY #$130 LDA (NOTTI'13) ,Y STA SNDTM3 DBINC NOTTM3! 1 LDA vJAlJT'{ P ORA #$01 STA S3CORG
17813 17913 181313 18113 1820 18313 18413 18513 18613 18713 18813 1890 1900 1910 1920 1930 19413 1950 1960 1970 1'T'80 1990 21300 2010 2020 2030 2040 2050 2060 21379 213813 20913 211313 21113 2120 2130 2140 21513 21613 21713 2i81:l 21913 221313 22113 2220 2230 2240 2250 2260 22713 22813 22913 2300 2310 23213 23313 23413 23513 23613
STA t.)3CORG LDMEM #$00,ENABLE TklI Dl
ENABLE Tl,JIDI kIAt)TYP vJl.)DN WAl.-'TYP C~1P #$213 BNE NXMSGI (;DRI:.:::, MSAll..i, :3RC ,JSR PRINT NXMSGI CMP #$40 B~~E NXt1SG2 ADRES MSQU,SRC JSR PRINT t-.!XI-1SG2 CMP #$813 BNE NXMSG3 ADRES MNOI,SRC JSR PRINT
,
LDA BEQ ASL BEQ LDA
NX~1SG3
JMP NXTVJAV
j WVDN
ANOP
;
jCHANGING PULSEWIDTH
PWCHI
TilHD2
SEI LDMEM #$4e,WAVTYP LDMEM #$e0,V3ATDC STA S3ATDC LDMEM #$FF,V3SURL STA S3SURL ADRES MCPW,SRC JSR PRINT ADRES INTl ,CINV CLI ADRES AN4,S3FRLO LDMEM S3FRLO,V3FRLO LDME~1 S3FRHI.V3FRHI DBDEC S3PWLO;$e8 LDt-1Et-1 S3PWLO,V3PWLO LDMEM S3PWH I , V3PvJH I LDMEM #$0e,ENABLE LDA ENABLE BEQ TWID2 LDA S3PWLO ORA S3Pl.
CHANGING OCTAVES
2370 2380 2390 2433 2410 2420 2430 2440 2450 2460 2479 2489 2499 2509 2510 2520 2539 2540 2550 2560 2570 25813 25913 261313 2619 2620 2630 2640 2650 2660 2670 2680 2690 2700 "2710 2720 2730 2740 2750 2760 2770
ADRES MOCT,SRC JSR PRINT Lm'l EM it$ 20 , J.oJAVT'{ P ADRES OCTAVE ,NOTPT3 ADRES OCTTM,NOTTM3 ADRES INT0,CINV LDMEM #$29,S3CORG STA V3CORG LDY LDA STA STA
#$00 (NOTPT3) , Y V3FRLO S3FRLO
LDA (NOTTM3) , Y STA SNDTM3 INY LDA (NOTPT3) ,Y STA V3FRHI STA S3FRHI DBINC NOTPT3,2 DBINC NOTTM3,1 LDMEM #$77,V3ATDC STA S3ATDC STA V3SURL STA S3SURL LDMEt"l #$21,\j3CORG STA S:3CORG Tl~II
D3
LDMEM #$00,ENABLE LDA ENABLE BEQ T["'II D:3
2780 2790 2800 jCHANGING ATTACK TIME 2810 2820 ADRES 11ATT, SRC 2830 JSR PRINT 2840 2850 SEl 2860 ADRES INTi ,CINV 2870 CLI 2880 2890 LDMEM it$01,WAVTYP 2900 LDMEM #$05, S3ATDC 2910 2920 STA V3ATDC LDMEt"l it$03,\J3SURL 2930 2940 STA S3SURL 2950 ADRES BN4,S3FRLO
2960 2970 2980 2990 3000 3010 3020 3030 3040 3050 3069 3979 3089 3990 3190 3119 3120 3139 3140 3159 3169 3179 3189 3199 3299 3210 3220 3239 3249 3250 3269 3279 3289 3299 3309 3310 3320 3330 3340 3350 3360 3370 3389 3390 3409 3410 3420 3439 3440 3450 3460 3479 3480 3499 3500 3510 3520 3530 3540
LDMEM S3FRLO,V3FRLO LCt1EM S3FRH I ,!..-"3FRH I CHAT
TWID4
LDMEM #$21,S3CORG STA V3CORG LDA S3ATDC NIBLR TAX LDA ATLK,X STA SNDTM3 LDMEM #$0~,TIMOUT LDA TIMOUT BEQ TWID4 LDMEM #$20,S3CORG STA V3CORG LDA S3ATDC CLC ADC #$10 STA S3ATDC STA V3ATDC AND #$F9 BNECHAT
; ;CHANGE DECAY NEXT
ADRES MDEC,SRC JSR PRINT LDMEM #$91,WAVTYP LDMEM 4+$50,S3ATDC STA V3ATDC LDMEM #$03,S3SURL STA V3SURL ADRES CN4,S3FRLO LDMEM S3FRLO,V3FRLO LDMEM S3FRHI,V3FRHI ;
CHDC
TW"ID5
LDMEM #$21,S3CORG STA V3CORG LDA S3ATDC AND #$0F TAX LDA DCLK,X STA SNDTM3 LDMEM #$99,TIMOUT LDA TIMOUT BEQ TWID5 LDMEM #$20,S3CORG STA V3CORG LDA S3ATDC CLC ADC #$01 STA 83ATDC STA V3ATDC
135
3550 AND #$0F 35613 BNE CHDC 3570 35813 35913 CHANGE SUSTAIN 3600 36113 ADRES t-ISUS, SRC 36213 JSR PRINT 3630 36413 LDMEM #$29,V3ATDC 36513 STA S3ATDC 36613 LDMEM #$e9,S3SURL 3670 STA l,,'3SURL 36813 ADRES DN4,S3FRLO 3690 LDMEM S3FRLO,V3FRLO 371313 LDMEt-l S3FRHI,\)3FRHI 3710 ; 37213 CHSlI LDI'-IEI'-I #$21, S3CORG 3730 STA V3CORG 3740 LDMEM #$01, SNDTI'-13 37513 LDMEM #$1313 ,TH10UT 3760
37713 Tl,JI D6 378€1
37';>0 38130 3810 3820 383(1 384~3
3850 :3860 3870
LDA TIMOUT SEQ Tk'ID6 Lm1EM #$213, S3CORG STA V3CORG LDA S3SURL CLC ADC #$10 STA S3SURL STA V3SURl AND #$F0 BNE CH'3U
:388~3
3890 ; CHANGE RELEASE 3';>1313 39113 ADRES MREL,SRC ,,,TSR PRINT 3920 3';>30 :39413 LDMEM #$Fe,S3SURL STA V3SURL 39513 ADRES EN4,S3FRLO 39613 LDMEM S3FRLO,V3FRLO 3976 39813 LDMEM S3FRHI,V3FRHI 3990 LDMEM #$21,83CORG 4131313 CHRE STA l,,'3CORG 40113 LDMEM #$01,SNDTM3 41328 4938 4849 LDMEM #$99,TIMOUT 4950 4868 TWID7 LDA TIMOUT BEQ TWID7 4979 4089 40913 LDMEM #$29,S3CORG 4199 STA V3CORG 4119 LDA 838URL AND #$9F 4129 4139 TAX
136
4149 4159 4169 4170 4189 4199 4290. 4210 4229 4239 4249 4259 4269 4279 4289 4299 4399 4310 4329 4339 4349 4359 4369 4379 4389 4399 4499 4419 4429 4439 4449 4459 4469 4479 4489 4499 4599 4519 4529 4539 4548 4558 4569 4579 4589 4599 4698 4619 4629 4639 4648 4659 4669 4679 4689 4699 4798 4710 4728
LDA DCLK,X STA SNDTM3 TWID8
LDMEM #$99,TIMOUT LDA TlMOUT BEQ TWID8 L.DA
S3SURL
CLC ADC STA STA AND BNE
#$91 S3SURL V3SURL #$9F CHRE
;
;CHANGE LO PASS FILTER ADRES MFLO,SRC JSR PRINT LDMEM K1F,MMOD STA MODVOL LDMEM K96,RESFLT STA RFIL ADRES LDMEM LDMEM ADRES LDMEM LDMEM
$9999,S3FRLO S3FRLO,V3FRLO S3FRHI,V3FRHI $9999,S2FRLO S2FRLO,V2FRLO S2FRHI,V2FRHI
LDMEM #$99,FILLO STA FLCNLO LDMEM #$98,FILHI STA FLCNHI LDMEM #$99,S3ATDC STA V3ATDC STA V2ATDC STA S2ATDC LDMEM #$F9,S3SURL STA V3SURL STA S28URL STA V2SURL
CHLFL TWID9
LDMEM #$21,S3CORG STA V3CORG STA S2CORG STA V2CORG LDMEM K99,ENABLE LDA ENABLE BEQ TWID9 DBINC S3FRLO,$29 DBDEC S2FRLO,$29 LDMEM S2FRLO,V2FRLO
4730 4740 4750 4760 47713 4780 47913 4800 4819 4829 4839 4849 4859 4869 4879 4889 4899 49913 4919 4929 49313 4949 4950 4969 49713 498(1 49913 59130 50113 513213 5030 5949 5050 51360 50713 50813 509[1 5100 5110 5120 5130 5140 5150 5160 5170 5180 5199 5299 5219 5229 5230 5249 5259 5269 5279 5289 5299 5399 5319
LDMEM S2FRHI,V2FRHI LDMEM S3FRLO,V3FRLO LDMEM S3FRHI,l.-'3FRHI LDA S3FRLO ORA S3FRHI BNE CHLFL CHANGE HIGH-PASS FILTER AD RES ~1FH I ,SRC JSR PRINT ADRES $1391313,S3FRLO ADRES $9999,S2FRLO LDMEM S3FRLO,V3FRLO LDMEM S2FRLO,V2FRLO LDMEM S3FRHI,V3FRHI LDMEM S2FRHI,V2FRHI LDMEM #$4F,MMOD STA MODVOL CHHFL TWIDA
LDMEM #$913,ENABLE LDA ENABLE BEQ TWIDA DBINC 8:3FRLO, $213 DBDEC S2FRLO,$29 LD~1EH S2FRLO ,'l2FRLO LD~1a1 82FRHI,,)2FRHI LDMEt1 S3FRLO,V3FRLO LDHEt1 83FRHI,V3FRHI LDA S3FRLO ORA S3FRHI BNE CHHFL
,CHANGE BAND-PASS FILTER ADRES MFBA,SRC JSF: PRINT ADRES $90130,S3FRLO ADRES $9990,S3FRLO LDMEM S3FRLO ,1')3FRLO LDMEM 82FRLO,V2FRLO LDMEl"l S3FRHI,V3FRHI LDMEM 82FRHI,V2FRHI LDMEM #$2F,MMOD STA MODVOL j
CHBFL TWIDB
LDMEM #$99,ENABLE LDA ENABLE BEQ TWI,DB DBINC DBDEC LDMEM LDMEM LDMEM LDMEM
S3FRLO,$29 S2FRLO,$29 S2FRLO,V2FRLO S2FRHI,V2FRHI S3FRLO,V3FRLO S3FRHI,V3FRHI
5320 LDA S3FRLO 5330 ORA S3FRHI 5340 BNE CHBFL 53513 STA S3CORG STA V3CORG 5360 5370 STA S2CORG STA V2CORG 53813 5390 54913 CHANGING RESONANCE 54113 54213 ADRES MRES,SRC 5439 ~TSR PRINT 54413 LDt1EM #$81, S3CORG 54513 54613 STA V3CORG 54713 LDI"lEt1 #$80, FLCNHI STA F"Ii...HI 54813 5490 ADRES GN4.S3FRLO LDMEM S3FRLO ,1)3FRLO 55913 LDMEM S3FRHI ,V3FRHI 5510 Lm1E~1 #$1 F ,t"'lMOD 5529 STA t10DI')OL 5530 5540 5559 CHRES LDMEM #$01, SNDTtv13 LDME~'l #'$130, TIMOUT 5560 55713 nHDC LDA TII"10UT BEQ TWIDC 5589 5590 56013 LDA RFIL 5610 CLC 5,!>213 ADC #$10 5630 STA RFIL STA RE8FLT 56413 56513 AND #$F0 5669 BNE CHRES 5679 ; 56813 JRING MODULATION ON 5699 5799 ADRES MRMO,SRC 5719 JSR PRINT 5729 5739 LDMEM #$77,SlATDC 5749 STA VIATDC 5759 STA S1SURL 5769 STA V1SURL 5779 STA S3ATDC 5789 STA V3ATDC 5799 STA S3SURL STA V3SURL 5899 5819 STA S2SURL STA V2SURL 5829 5839 STA S2ATDC STA V2ATDC 5849 5859 ADRES DS9,S3FRLO 5869 5879 LDMEM S3FRLO,V3FRLO 5889 LDMEM S3FRHI,V3FRHI LDA MMOD 5890 ORA #$89 5999
137
59113 59213 59313 5949 59513 5'?':'1)
STA MOOVOL LDMEM #$2e,S3CORG STA V3CORG LDMEM #$14,S1CORG ADRES INT13,CINV {~Ok'F~:;; t"100iY,NI,HPT1 AORES MODTM,NOTTM1 LOY #$99 LOA (NOTPT1) , Y STA S1FRLO STA V1FRLO LOA (NOrTM1), Y STA SNOTM1 INY LOA (NOTPTl) , Y STA S1FRHI STA V1FRHI DB I NC NOTTM 1 , $01 OBINC NOTPT1,$92
59713 59813 59913 6999 61319 613213 613313 61349 6858 6869 6979 6889 68913 6199 6119 LOMEM #$15,S1CORG STA V1CORG 6129 6139 LDt1EM #'$013, ENABLE 61413 61513 nJIDD LDA ENABLE BEQ TWIOD 61613 e,1713 61813 ;CHANGING SYNCHRONIZATIOH 61 ~'13 ADRES MS'yN, SRC ,!i2e13 JSR PRIHT 6211:1 6220
62313 62413 62513 62613 62713 62813 62913 6399 63113 63213 63313 63413 63513 63613 63713 63813 63913 641313 64113 64213 6439 TWIOE 64413 64513 64613 64713 64813 64913
138
LDMEM #$22,S1CORG STA V1CORG ADRES ~10DLK, NOTPT 1 AORES MODTM,NOTTM1 LDY #$013 LOA
651313 65113 65213 6539 65413 65513 65613 6519 6589 6599 6699 6619 6629 6639 6649 6659 66613 6679 6689 6699 6799 6710 6729 6739 6749 6759 6769 6778 6789 6799 6880 6819 68213 6830 6840 6850 68613 68713 68813 68913 691313 69113 69213 69313 6949 69513 6969 6979 69813 69913 781313 713113 78213 713313 713413 713513 71360 713713 71389
;
PRINT
PRTLP
PRTNO
ANOP FILBYT $95913,$29,$28 AORES $135913,OST LOY #$913 LOA (SRC),Y BEQ PRTNO STA (Osn,Y INY JMP PRTLP RTS
;
INT0
SEI INC INC LOA EOR BNE
SCREEN RANSEC RANSEC #$3C SYNC1
STA RANSEC INC SECOND ;
SYNCl
ANOP SNDTM1 OECTMl SNOTMl OECTMl SlCORG AND #$FE STA SlCORG STA ~)1 CORG LDY #$130 LDA (NOTPT1),Y BNE MI'lUS1 LOMEM #$131,ENABLE JMP DECTM1 LOA BEQ DEC BNE LOA
;
STA S1FRLO STA V1FRLO LOA' (HOTTM1),Y STA SNOTM1 INY LOA (NOTPT1) , Y STA SlFRHI STA V1FRHI OBINC NOTTM1,$131 OBINC NOTPT1,$92 LOA S1CORG ORA #$131 STA S1CORG STA VICORG OE;;CTM1 ANOP
MMUS1
LOA BEQ DEC BNE
SNOTM3 OECTM3 SNOTM3 OECTM3
7090 7100 7110 7120 7130 7140 7150 7160 7170 7180 7190 7200 7210 7220 7230 7240 7250 7260 7270 7280 7290 7300 7310 7320 7330 7340 7350 7360 7370 7380 7390 7400 7410
LOMEM #$10,S3CORG STA V3CORG LOY #$00 LOA (NOTPT3), Y BNE MMUS3 LOMEM #$01,ENABLE JMP OECTM3 ; MMUS3
STA V3FRLO STA S3FRLO INY LOA (NOTPT3), Y STA V3FRHI STA S3FRHI OBINC NOTPT3,$92 LOY #$99 LOA (NOTTM3), Y STA SNOTM3 OBINC NOTTM3,1 LDA ORA STA STA
WAVTYP #$91 S3CORG V3CORG
; OECTM3 ANOP
; LOMEM #$0 1 ,ENABLE RAST #$FB PULL NOP
7420 7430 7440 7450 7460 7470 7480 7490 7500 7510 7520 7530 7540 7550 7560 7570 7580 7590 7600 7610 7620 7639 7640 7659 7660 7670 7680 7690 7700 7718 7720 7738 7748
INTl
SEI INC INC LOA EOR BNE
SCREEN RANSEC RANSEC #$3C SYNC2
STA RANSEC INC SECONO LOA SNOTM3 BEQ SYNC2 OEC SNOTM3 BNE SYNC2 LDMEM #$01,TIMOUT ; SYNC2
LOMEM #$01,ENABLE LDA WAVTYP CMP #$91 BEQ LEAVE LDMEM #$49,V3CORG LDMEM #$41,S3CORG
; LEAVE
RAST #$FB PULL NOP • END
Listing C-6: The SOUND DEMO Program B* PC SR AC XR YR SP • ;C03E 32 90 C3 08 F6
• : 1090 • :1908 .: 1010 .: 1918 .: 1920 .: 1028 .: 1030 • :1938 .:1040 • :1948 • : 1050 · :1958 .: 1060 .: 1068 .: 1970 .: 1978
4C 43 54 53 52 4E 45 57 41 53 41 4E 56 48 50 54
4B 4F 20 54 45 47 46 54 56 51 56 4F 45 41 55 48
12 50 31 45 53 4C 4F 4F 45 55 45 49 46 4E 4C 00
40 59 39 56 53 45 52 4F 46 41 46 53 4F 47 53 43
28 52 38 45 54 20 40 54 4F 52 4F 45 52 49 45 48
43 49 34 4E 52 57 09
48 52 45 52 20 40 4E 57 41
29 47 2C 20 49 41 53 20 40 20 40 57 00 47 49 4E
20 48 20 42 41 56 41 57 00 57 00 41 43 20 44 47
.: 1080 .: 1088 .: 1090 .: 1098 .: 10A0 • :19A8 .: 10B0 .:10B8 .: 10C0 .: 10C8 .: 1000 .: 1008 .: 10E0 .: 10E8 .: 10F0 · :19F8 .: 1100 • : 1108 • : 1110 · : 1118 • : 1120 · : 1128
49 56 47 41 00 47 54 4E 53 56 47 45 45 4E 53 52 4E 53 52 4E 50 54
4E 45 49 43 43 29 49 47 54 45 49 41 00 47 53 00 47 53 00 47 41 45
47 53 4E 4B 48 44 40 49 41 4C 4E 53 43 20 20 43 20 20 43 29 53 52
20 00 47 20 41 45 45 4E 49 00 47 45 48 4C 46 48 48 46 48 42 53 00
4F 43 20 54 4E 43 00 47 4E 43 20 20 41 4F 49 41 49 49 41 41 20 43
43 48 41 49 47 41 43 20 20 48 52 54 4E 20 4C 4E 20 4C 4E 4E 46 48
54 41 54 40 49 59 48 53 4C 41 45 49 47 50 54 47 50 54 47 44 49 41
41 4E 54 45 4E 20 41 55 45 4E 4C 40 49 41 45 49 41 45 49 20 4C 4E
139
·:1130 .:1138 .:1140 .:1148 .:1150 .:1158 .:1160 .:1168 .:1170 .:1178 .:1180 .:1188 .:1190 .:1198 .:11A0 .:11A8 .:1180 .:1188 .:11C0 .:11C8 .:1100 .:1108 .:IIE0 .:IIE8 .:IIF0 .:11F8 .:1200 . :1208 .:1210 .:1218 .:1220 .:1228 .:1230 .:1238 .:1240 .:1248 .:1250 .:1258 .:1260 .:1268 .:1270 .:1278 .:1280 .:1288 .:1290 .:1298 .:12A0 .112A8 .:1280 .:1288 .:12C0 .:12C8 .:1208 .:1208 •.: 12E8 .:12E8 .:12F8 .:12F8 .11388
140
47 4F 49 4C 4E 4E 41 43 54 43 20 45 53 61 IE 3C 07 0A 0F 01 01 01 01 0C 18 30 61 C3 87 0F lE 00 3C 3C BC 3C 01 DO 00 0E 80 A9 00 9A 80 A9 12 11 85 91 21 20 80 E6 18 29 A9 A9 80
49 4E 4E 41 00 47 54 48 49 48 53 51 00 08 86 3C 61 68 0F 01 02 01 02 01 02 04 08 10 21 43 86 00 3C 3C 3C 3C A9 AD 80 DC 0F FF 95 A9 19 19 00 00 21 20 C9 A9 A9 21 4A F8 18 18 85
4E 41 47 54 43 20 4F 52 4F 41 59 55 0C C3 00 3C 08 09 0F 01 02 01 02 51 A3 47 8F IF 3E 70 FA 3C 3C 3C 3C 00 00 00 02 80 DO 80 00 03 03 80 AD A9 A0 C8 DC 04 28 E8 4A 85 85 85 0F
47 4E 20 49 48 40 52 4F 4E 4E 4E 45 01 10 00 3C 8F 61 0F 01 02 01 03 01 02 05 0A 15 2A 54 A8 3C 3C 3C 3C 78 80 DC DC 0F A9 19 E8 80 A9 15 11 00 00 00 00 85 91 E0 85 45 50 23 80
20 43 40 4F 41 4F 00 4E 20 47 43 4E 18 87 3C 00 0C 08 0F 01 02 01 04 91 23 47 8F 32 3C 79 F3 3C 3C 3C 3C 78 00 AD 80 DC 01 00 00 18 31 03 00 85 A2 F8 Fl 21 20 04 45 80 A9 20 10
52 45 4F 4E 4E 44 53 49 4F 49 20 43 02 21 3C 0C 30 00 0F 01 04 01 0A 01 03 06 0C 19 32 64 C8 3C 3C Be 3C A9 DC 00 03 80 80 A2 F8 03 80 A9 29 20 00 E6 A9 A0 C8 08 AD 18 24 89 04
45 53 00 52 44 55 20 4F 47 49 55 4C 59 4E 5A 41 4E 00 4E 47 46 52 49 45 30 04 0F 43 3C 3C 07 E9 08 8F 00 0F 0F 00 01 01 06 09 01 01 10 lA C301 86 03 0C 07 18 0E 31 lC 63 38 C7 70 8F El 3C 3C 3C 3C 3e 3C 3C 3C 06 85 80 00 DO A9 DC 80 0E DO lA 00 02 A9 A2 FF A9 10 14 03 F8 80 7F 80 A9 08 A9 01 21 A5 00 85 08 A2 00 F8 F2 A9 18 00 08 58 85 22 19 A9 A9 08
.:1308 .:1310 .:1318 .:1320 .:1328 .:1330 .:1338 .:1340 .:1348 .:1350 .:1358 .:1360 .:1368 .:1370 .:1378 .:1380 .:1388 .:1390 .:1398 .:13A0 .:13A8 .:1380 .:1388 .:13C0 .:13C8 .:1300 .:13D8 .:13E0 .:13E8 .:13F0 .:13F8 .:1400 .:1408 .:1410 .:1418 .:1420 .:1428 .:1430 .:1438 .:1440 .:1448 .:1450 .:1458 .:1460 .=1468 .:1470 .:1478 .11480 .:1488 .:1490 .:1498 .:14A0 .:14A8 .:1480 .:1488 .:14C0 .:14C8 .:.1400 .:1408
85 19 80 80 13 D4 A9 A0 D4 04 A9 85 81 01 31 12 F0 C9 A9 40 10 00 85 78 13 04 10 80 58 0A 80 85 A5 11 F0 A9 78 09 85 85 8D A9 00 81 0F 02 28 A9 8D 85 04 FC 23 14 A9 80 85 85 0A
10 8D 17 16 04 A5 AD 00 C8 A5 00 30 30 85 A5 04 FC 20 10 D0 85 08 23 A9 D4 85 85 14 A9 A5 0F 0F 0F D4 FC 00 85 19 2A 30 14 20 81 30 D4 85 A5 00 13 16 A9 A9 20 03 01 13 16 0A 80
80 18 04 04 A9 5D 85 81 81 2A 65 A9 85 30 5D A9 06 00 85 08 23 A9 20 40 85 16 23 03 31 09 04 A5 8D A9 A5 85 22 A9 A9 A9 03 85 2A 85 85 2A 30 65 D4 A9 00 8C 09 A9 85 04 A9 A5 0F
11 04 A9 A9 77 85 2A 2A 2A 18 28 11 ID A9 09 00 5D 08 23 A9 20 58 09 85 13 A9 20 A9 85 80 A5 10 10 00 0F 04 A9 20 11 11 A9 04 8D ID 0A A9 18 31 85 21 85 85 19 19 50 A9 A5 09 04
D4 A9 00 77 85 04 A9 85 85 69 85 85 A5 00 01 85 F0 A9 20 48 09 85 19 5D A9 67 09 19 09 0E 0F E9 04 85 05 8D 10 85 85 85 19 8D 0E C8 A5 00 69 85 13 8D 38 22 78 8D A9 03 85
A9 00 80 85 16 8D 11 09 0A 02 28 31 30 65 85 38 32 36 09 85 19 22 4C A9 FF 85 19 80 A9 04 38 00 A5 38 10 12 85 5D 28 31 8D 12 D4 81 2A 65 01 31 8D 12 A5 A9 A9 15 05 80 09 ~o 0E A9 21
0F 85 15 13 80 12 85 8D 8D 85 A9 A0 18 31 04 A5 A5 85 19 22 C9 A9 31 00 8D 22 A9 15 lC A5 E9 85 10 A5 D0 D4 23 A9 A9 A9 15 D4 85 2A 18 28 85 A9 14 04 38 10 FD 03 85 14 A9 04 85
85 lA 04 80 14 D4 28 0E 0F 2A 8F 00 69 85 8D 38 50 22 C9 A9 80 10 13 8D 14 A9 FD 03 85 0A 08 10 80 38 08 A9 20 92 A4 31 03 A0 09 80 69 85 30 77 D4 85 F0 85 8D 58 13 04 IF A5 04
.:14E0 .:14E8 .:14F0 .:14F8 .:1588 .:1588 .:1518 .:1518 .:1520 .:1528 .:1538 .:1538 .:1540 .:1548 .:1550 .:1558 .:1560 .:1568 .:1570 .:1578 .:1580 .:1588 .:1590 .:1598 .:15A0 .:15A8 .:1580 .:1588 .:15C0 .:15C8 .:15D0 .115D8 .:15E0 .115E8 .115F8 .:15F8 .11680 .11608 .11610 .11618 .11620 .:1629 .11638 .:1638 .:1648 .:1648 .:1650 .:1658 .:1660 .:1668 .:1670 .:1678 .:1680 .:1688 .:1690 .:1698 .:16A8 .:16A8 .:1680
80 4A 00 20 18 29 A9 01 13 04 8A 80 12 08 A5 80 85 02 23 04 14 85 0A 80 00 20 18 29 A9 F0 85 8D A9 01 3C 12 D8 AS 01 D8 85 19 D4 00 A5 07 07 00 85 13 12 85 04 D4 FC A9 38 88 A5
12 AA 85 85 69 F8 18 85 04 A9 A5 0F 04 11 3C 12 13 A9 20 85 04 0A 80 12 85 85 69 F0 10 85 09 0E 21 85 F0 D4 11 3C 8S C6 23 8D 85 85 0A A9 D4 85 18 8D A9 15 8D A9 A5 00 E9 85 88
04 80 3C 04 18 08 85 50 A9 C3 89 04 A5 85 F0 04 8D 85 09 13 A9 A5 0F 04 3C 04 10 D0 85 16 A9 D4 85 1D FC A5 85 F8 16 A9 20 18 1A 0A 8D 00 A5 17 8D 13 F0 8D 12 00 09 65 28 88 80
A5 C8 A5 80 85 08 23 A9 03 85 80 A9 13 10 FC A5 13 85 19 A9 01 09 04 A9 A5 80 95 D8 23 8D 15 A5 04 A9 A9 16 1D FC 80 E2 09 D4 A9 A5 0F 85 08 8D 16 D4 85 0D D4 85 18 0A 85 A5 88
13 11 3C 12 13 A9 28 58 85 89 8E 21 29 A9 A9 13 04 22 A9 00 85 80 A9 01 3C 12 16 A9 20 14 85 0A 8D 80 28 29 A9 A5 14 85 19 A9 00 09 D4 08 8D 15 D4 8D 16 D4 85 38 69 85 87 87 04
4A 85 F0 04 80 Al 89 85 16 A9 04 85 0F 00 20 18 29 A9 20 85 09 0E 21 85 F0 04
eo
CC 09 D4 0A 8D 12 85 85 8F 08 16 D4 22 A9 06 85 8D A9 A5 08 D4 A9 0C 8D A9 03 A5 20 0A A5 80 A5
4A 4A 10 A9 FC A9 A5 13 13 04 85 22 19 A9 13 80 80 14 18 85 A5 0A 84 80 AA 80 85 3C 85 04 69 01 0F 00 18 85 80 13 16 80 A9 12 04 A5 85 04 10 A9 FC A9 A5 16 14 D4 85 22 19 A9 A9 IF A5 09 0F D4 D4 A9 3C A5 84 8D AA BD 853C 18 69 29 0F A9 10 1F 85 8D 17 89 A9 0E D4 00 85 07 8D D4 A9 A9 08 00 85 D4 85 14 D4 21 85 8D 08 38 F0. 85 09 A5 87 88 E9 87 04 89 80
.:1688 8E .:16C0 89 .:16C8 22 .:1600 A9 .:1608 A9 .:16E0 A5 .:16E8 87 .:16F0 08 .:16F8 80 .:1780 38 .:1788 85 .:1710 A5 .:1718 88 .:1728 87 .:1728 09 .:1730 04 .:1738 12 .:1740 89 .:1748 85 .:1750 85 .:1758 07 .:1760 04 .:1768 85 .:1770 38 .:1778 69 .:1780 85 .:1788 07 .:1790 07 .:1798 04 .:17A0 8D .:17A8 C4 .:1780 80 .:1788 11 .:17C8 85 .:17C8 16 .:1700 A9 .:1708 04 .:17E0 85 .:17E8 10 .:17F8 FC .:17F880 .:1888 3F .:1808 89 .:1818 04 .:1818 80 .:1828 85 .:1828 0C .:1830 85 .:1838 8A .:1848 80 .:1848 12 .:1858 8D .:1858 A9 .:1860 A9 .:1868 A8 .:1870 04 .:1878 85 .:1880 69 .:1888 85
04 05 A9 00 88 89 04 80 18 F8 89 07 E9 04 80 A5 85 19 8A 0A 80 A5 19 A5 20 0A A5 8D A5 0F 85 08 85 04 04 19 A5 19 A9 A5 17 85 19 85 13 15 04 8A 80 18 04 14 E8 2A 88 81 86 01 20
A5 8A 18 85 85 8D A5 08 04 FC A9 38 88 A5 0E 89 22 A9 A9 A5 07 08 80 38 85 A5 08 87 09 04 04 04 23 80 85 85 0A 80 88 lA 04 22 A9 14 04 80 A9 A5 8F 04 A9 83 85 85 81 2C 80 85 A5
8A 08 85 89 87 8E 8A D4 A9 A5 88 E9 85 08 04 85 A9 08 08 09 04 80 18 F0 09 07 E9 04 80 A5 80 A9 20 12 18 0A 8D 18 85 18 29 A9 77 80 85 00 3E 09 04 A9 14 A9 26 2C 26 85 01 2C 26
80 C4 23 A9 A9 04 8D A9 80 89 65 28 88 80 A5 8A 11 85 85 80 A5 08 04 FC A9 38 00 A5 0E 09 12 2C 09 04 A9 A5 0F 04 3C 69 F0 11 85 86 16 04 85 80 A5 20 85 19 A9 A9 85 18 04 A9 18
8F A9 28 88 88 A5 8F 4F 85 18 8A 85 A5 88 8A 08 85 89 89 0E 0A 04 A9 A5 00 E9 85 08 04 05 04 85 19 A9 32 09 04 A9 A5 10 00 85 11 04 80 85 89 8E 19 85 82 80 11 12 85 C8 A5 8e 69
04 A5 FA 85 89 19 850A 85 88 87 8D 04 A5 85 19 38 A5 69 28 85 8A 87 A5 87 80 04 A5 80 0F C4 A9 23 20 A9 00 A9 80 04 A5 80 0F A9 2F 00 85 09 18 65 0A 20 85 08 A5 80'08 A5 0A 0A 08 85 03 22 A9 A9 81 80 80 85 09 80 0E A9 1F 81 85 3C F0 85 lA E6 A9 23 20 80 85 85 13 14 04 12 80 A9 81 04 A5 89 80 84 80 A9 31 15 83 85 27 85 20 80 88 81 26 2C 18 65 20 e2 85
141
·:1899 .:1898 .:leA9 .:leA8 .:1889 .:1888 .:18C9 .:18C8 .:1809 .:1808 .:18E9 .:18E8 .:18F9 .:18F8 .:1900 .:1998 .:1910 .:1918 .:1920 .:1928 .:1939 .:1938 .:1949 .:1948 .:1950 .:1958 .:1960 .:1968 .:1970
26 15 85 85 19 A9 A9 A9 04 85 69 85 26 23 85 12 25 C0 A9 F0 60 49 A5 A5 04 01 80 81 2C
A9 85 38 22 A9 E8 2A 99 81 96 01 20 A9 85 38 A9 A9 28 05 06 78 3C 18 02 A9 85 90 26 18
99 92 A5 A9 22 85 85 81 2C 80 85 A5 09 02 A5 99 99 09 85 91 E6 00 F9 29 09 38 04 85 69
65 80 38 11 85 26 2C 26 85 01 2C 26 65 80 38 85 A9 F9 25 24 38 94 4E FE 81 4C 81 06 01
27 94 F9 85 92 A9 A9 85 18 04 A9 18 27 94 F9 24 20 A9 A0 C8 E6 85 C6 85 26 92 2C 80 85
85 04 FC 23 80 11 12 95 C8 A5 09 69 85 04 FC A9 91 90 00 4C 39 39 18 92 09 19 85 91 2C
27A9 A9 99 A9 65 29 99 94 04 85 27 85 20 80 09 81 26 2C 18 65 20 92 85 27 A9 A9 09 4C 48 95 85 24 C8 85 24 81 22 26 19 A5 39 E6 SA 00 4A 80 04 97 A9 85 05 18 C8 04 A5 A9 00
.:1978 .:19813 .:1988 .:1999 .:1998 .:19A9 .:19A8 .:19813 .:1988 .:19C9 .:19C8 .:1909 .:1908 .:19E9 .:19E8 .:19F9 .119F8 .:lAI9 .:lAI8 .:lAl1 .• I·IA18 .IIA29 .:lA28 .:lA39 .:lA38 .IIA49
65 132 27 134 09 04 91 04 04 85 A0 18 31 94 09 09 68 E6 85 C6 A9 F8 41 AD A9
20 85 A5 D4 4A A0 85 85 85 2A 09 69 85 80 AD A9 AA 39 39 10 81 89 85 11 FF AA 68
85 26 92 A5 A9 99 38 99 9A A9 81 91 31 12 11 FF 68 A5 E6 09 85 A9 84 08 80 48
20 A9 99 10 19 81 4C C8 A5 90 39 85 A5 04 09 80 49 39 3A 94 38 48 A9 29 19 EA
A5 1313 91 F9 85 2A E4 81 2A 65 85 39 50 A9 29 19 EA 49 A5 A9 A5 80 F8 7F 08 48
Listing C-7: The COMMON Source Code 1000 1010 1020 1030 1040 1050 1060 1070 10813 11390 11013 1110 11213 1130 11413 11513 11613 11713 11813 11913 121313 12113 12213 12313 12413 1250
142
; PUT" Al9: COMMON" j
;THIS IS COMMON--THE STANDARD ;AOOITIONS FOR COMMODORE MUSIC 113/29/83 ; jNOTE DEFINITIONS ; CN9 $918C CS9 = $811C ON9 $8120 OS9 = $1313E $0151 EN9 FN9 $13166 FS9 = $8178 $13191 GN9 $91A9 GS9 AN9 $91C3 $0100 AS9 8N9 = $131FA $13218 CNl CSl $13238 $925A C>Nl OSl $13270 $92A3 ENl $92CC FNl FSl $02F6
= = = =
1260 12713 12813 1290 13013 13113 13213 1330 1340 13513 1360 13713 13813 13913 14130 14113 14213 14313 1440 14513 14613 14713 14813 14913 15130 15113
GNl GSl ANl AS! BNl CN2 CS2 ON2 DS2 EN2 FN2 FS2 GN2 GS2 AN2 AS2 8N2 CN3 CS3 DN3 DS3 EN3 FN3 FS3 GN3 GS3
$0323 $0353 $0386 $13388 $03F4 $134313 $134713 $13484 $04F6 $13547 $13598 =. $95EO = $13647 = '$06A7 $979C = $13777 $07E9 $13861 $98El $13968 $99F7 = $9A8F $138313 $98DA $9C8F $9D4E
=
=
=
=
26 65 85 4E 94 00 19 2A 18 28 10 A9 99 F8 7F 09 78 3C 10 91 50 12 80 80 68 49
18 69 27 85 92 80 C6 10 80 12 97 A9 8D 9E 80 9F 69 92 85 28 A5 39 99 65 91 85 80 12 80 11 68 A8 E6 38 09 19 FI 18 853C C9 81 04 A9 12 09 11 08 A8 68 88 5F
15213 1530 1540 15513 15613 1570 15813 15913 16130 1610 16213 16313 16413 16513 16613 1670 16813 16913 171313 17113 17213 1730 1740 :750 17,~0
17713 1780 1790 18ee 1810 1820 18313 18413 18513 18613 18713
AN3 A83 8N3 CN4 C84 ON4 084 EN4 FN4 FS4 GN4 G84 AN4 A84 BN4 CN5 C85 DN5 DS5 EN5 FN5 FS5 GN5 GS5 AN5 AS5 BN5 CN6 CS6 DN6 DS6 EN6 FN6 FS6 GN6 GS6
= $eE18 = $0EEF = $eF02 = $leC3
= $11C3 = $1201 = $13EF = $151F = $1660 = $1785 = $1932 = $lA9C = $1C31 = $lDOF = $lFA5 = $2187
= $2386 $25A2
= $27DF = $2A3E = $2CCl
= $2F68 = $323C = $3539 = $3863 = $388E = $3F48 = $43eF = $47eC = $4845 = $4F8F = $5470 = $5982 = $5ED6 = $6479 = $6A73
18813 1890 191313 1910 19213 19313 19413 1950 1960 19713 19813 19913 2131313 20113 2020 213313 21340 213513 2060 2070 2080 2090 2100 21113 21213 21313 2140 21513 2160 21713 2180 2190 2200
AN6 = $7eC7 A86 = $777C BN6 = $7E97 CN7 = $8,~1 E CS7 = $8E18 ON7 = $9688 OS7 = $9F7E EN7 = $A8FA FN7 = $8306 FS7 = $8DAC GN7 = $C8F3 G87 = $D4E6 AN7 = $E18F AS7 = $EEF8 BN7 = $F02E ; ;NOTE TIME CHART ; WHL = $3C iWHOLE NOTE HLF = $lE ;HALF NOTE QRT = $0F jQUARTER NOTE TRP = $14 ;TRIPLET EGT = $137 iEIGHTH NOTENOTE SXT = $03 ;SIXTEENTH NTH = $136 ;NINTH NOTE-l/3 TRIPLET OHF = $2D ; DOTTED HALF DQR = $16 JDOTTED QUARTER DEG = $0A JDOTTED EIGHTH DSX = $04 JDOTTED SIXTEENTH
.END
Listing C-8: The SNDDEF Source Code 1099 1019 1020 1039 1949 1959 1969 1979 1989 1990 1109 11113 11 '20
1139 1149 11513 11613 11713 11813 11913
;PUT"~9:SNDDEF"
; ;RAM DEFINITIONS ; *SlCORG =DS$92 1 S2CORG OS 1 S3CORG OS 1 81FRLO OS 1 81FRHI OS 1 82FRLO 08 1 82FRHI OS 1 S8FRUJ 08 1 83FRHI OS 1 81PWLO 08 1 SlPWHI 08 1 82PWLO 08 1 82PWHI OS 1 S3PWLO OS 1 S3PWHI 08 1
121313 1210 12213 12313 1249 12513 12613 1270 128~
1290 13013 13113 13213 13313 13413 13513 13613 1379 1389 13913
SlATOC 82ATDC 83ATDC 818URL 828URL 838URL FILLO FILHI t1t100 RFIL 8NOTMl SNDTM2 8NOTM3 SCRPT SCR08T 8RC OST NOTPTl NOTPT2 NOTPT3
08 08 08 08 08 08 08 08 OS 08 08 08 08 OS OS 08 08 OS 08 08
1 1 1 1 1 1 1 1 1 1 1 1 2 2
2 2
2 2 2
143
141313 14113 14213 14313 14413 14513 14613 14713 14813 14913 15139 15113 15213 15313 15413
HOTTt11 HOTTtv12 NOTTt13 OPTIOH RAHD1 RAHD2 RAND3 RAHD4 LEVEL
.
DS 2 DS 2 D'~ .:::> 2 OS 1 OS 1 OS 1 DS 1 OS 1 OS 1
15513 15613 BUF 1570 BUF1 15813 IBUF 15913 t18UF 161313 16113 l,.JA'!TYF' 16213 16313 CURS 16413 H'(B 16513 BASE 16613 16713 16813
;
SCREEN RANSEC SECOND ENABLE TIt"10UT
OS DS OS DS
D'" 8 .j
D'~
DB
DS 1 DS 1 DS 2 .END
D'~ .:::>
Listing C-9: The DATA Source Code
1131313 1019 113213 1030 19413 10513 1060 19713 1989 19913 11013 111 a 1129 11313 1149 11513 11613 11713 1189 11913 12139 12113 12213 12313 1249 12513 12613 12713 12813 12913 1300 13113 1329 1330 1340 1350 1360 1370 1380 1390
144
jPUT I ;JJ0:DATA" jPUT THE DATA HERE RET
RTI . BYTE ',' (C) COPYR I GHT 1 984 ~ STEVEN BRES!O;"
;
MTRI MSAW MSQU t1NOI MCPvJ MOCT MATT MDEC MSUS MREL MFLO MFHI MFBA MRES MRMO MRMC MSYN
• BYTE .BYTE . BYTE .BYTE .BYTE .BYTE • BYTE .BYTE . BYTE .BYTE • BYTE .BYTE .BYTE .BYTE . BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE
"TRIANGLE WAlJEFORW $00 'SAWTOOTH vJAVEFORtvl' $90 'SQUARE WAVEFORM' $09 "NOI SE LJAlJEFORW $1313 'CHANG I l'iG PULSEl..) I DTH' $09 'CHANG I NG OCTAVES " $013 'CHANGING ATTACK TIME' $013 'CHANGING DECAY TIt-'lE" $1313 'CHANGING SUSTAIN LEVEL' $1313 "CHANGING RELEASE TIt1E' $013 'CHANGING LO-PASS FILTER" $00 'CHANGING HI-PASS FILTER' $1313 'CHANGING BAND-PASS FILTER' $013 'CHANGING RESONANCE' $00 'RING MODULATION ON' $013 'CHANGING MODULATOR' $130 'SYNCHRONIZATION ON'
8
DS'" 8 DS 8
1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510
MSYS
. BYTE $00 • BYTE 'CHANGING SYNC FREQUENCIES' . BYTE $00
; OCTAVE .WORD CN0,CN1,CN2,CN3,CN4,CN5,CN6,CN7,$0000
; OCTTM ; TUNES TUNTM ; ATLK
1520 DCLK 1530 ; 1540 MODLK 1550 1560 1570 MODTM 1580 1590 1600 1610
. BYTE WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,$00 .WORD AN2,BN2,CN3,GN3,FN3,EN3,DN3,CN3,$0000 .BYTE QRT,QRT,QRT,QRT,QRT,QRT,QRT,QRT,$90 .BYTE $01,$01,$01,$01,$01,$01,$01,$01,$91,$02,$92,$92,$02,$04, $06,$09 .BYTE $01,$01,$91,$01,$01,$01,$01,$01,$01,$92,$02,$133,$04,$0A, $10,$lA .WORD .WORD .WORD • BYTE . BYTE . BYTE
CN0,EN0,GN0,AN0,CN1,EN1,GN1,AN1,CN2,EN2,GN2,AN2 CN3,EN3,GN3,AN3,CN4,EN4,GN4,AN4,CN5,EN5,GN5,AN5 CN6,EN6,GN6,AN6,CN7,EN7,GN7,AN7,$e00e WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHl,WHL WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL WHL,WHL,WHL,WHL,WHL,WHL,WHL,WHL,$09
.END
Listing C-10: The EDIT SND Program, Source Code for the SOUND EDIT Program 1000 1010 1020 1030 1040 1050 1960 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 118fl 1190 1200 1210 1220 1230
;PUT"~0:EDIT SND" ;LOAD"ASM",8 ; iTHIS IS A SOUND EFFECTS DEMO ; I(C) COPYRIGHT 1984, STEVEN BRESS
;CREATED 7/9/84 iLATEST ADDITIONS 7/16/84 .OPT LIST,NOSYM,NOGEN . LI B . LIB . LIB .LIB
MACLI B SYSDEF COMMON SNDDEF
...
= $1090 ..TMP TOP
RET CURSH
RTI .WORD .WORD $01EA .WORD $0000 .WORD
1240 1250 STMR 1269 1270 REGI 1280 1290
$090A,$0017,$0924,$005A,$0967,$0074,$00AA,$09B7,$00C4 $00FA,$0107,$9114,$e14A,$eI57,$0164,$019A,$01A7,$01B4, $01F7,$0204,$923A,$9247,$e254,$028A,$0297,$02A4,$0000, $iBAF
.BYTE S1ATDC,S2ATDC,S3ATDC,S1SURL,S2SURL,S3SURL,S1FRLO,S2FRL0 .BYTE S3FRLO,S1FRHI,S2FRHI,S3FRHI,S1PWLO,S2PWLO,S3PWLO,SlPWHI .BYTE S2PWHI,S3PWHI,S1CORG,S2CORG,S3CORG,FILLO,FILHI,MMOD
145
1300 131'0 1320 13313 1340 1350 1360 1370 1380 1390 1400 1410 1420 1439 1449 1459 1469 1479 1489 1499 1509 1510 1529 1539 1540 1550 1569 1570 1580 1590 1600 16113 1620 1630 1640 16513 1669 1670 1680 1699 17913 1719 1729 1739 1749 1759 1769 1779 1780 1799 18130 1810 1820 1830 1840 18513 1860 18713 18813
146
. BYTE TOP
RFIL~SNDTM1,SNDTM2
~NOP
KILL MVCOL WHITE LDMEM #BLUE,BORCL STA BCOL0 LDMEM #$01,SPREN STA BPRIOR STA SPRCLe ADRES $0400~BASE LDMEM #$00,$DCe3 LDMEM #$FF,$DC02 LDMEM #$7F,$DC99 MVMEM $2999,$9409,$94 AORES INT9,CINV RAST #$FB CLI ;
START
P.
STl
CRWT PCLRl
ANOP LDA CURS ASL A TAX LOA CURSH,X STA BUF LOA CURSH+1,X STA BUF+1 LOA BUF ORA BUF+1 BNE STl LOMEM #$90,CURS JMP START LOA LOY CLC AOC STA
BUF+1 NYB
LDA ANO BEQ LDA JMP
SCREEN #$10 CRWT # CYAN PCLR1
#$08 BUF+1
LOA #WHITE STA (BUF) ~ Y LDA AND JNE J8R
SCREEN #$19 CHDN2 $FFE4
STA BUF ~TEQ CHDN2 CMP #$lD
,COLOR OFFSET
18',,13 191313 19113 19213 1 ~'3e 19413 19513 1 ';>613 19713 1980 1990 2000 20113 2020 2930 2940 2050 2060 2070 2080 2090 2100 2110 2120 2130 2140 2150 2160 2170 '?180 2190 22013 22113 22213 2230 2240 2250 22613
JEQ CMP .JEQ CMP JEQ Ct'lP ,JEQ CMP JEQ CMP ~TCS
CHOK3
CRRT #$11 CRDN #$91 CRUP #$9D CRLF #$85 TRIG #$47 CHDN2 #$41 CHOK3 #$3A CHDN2 #$39 CHOKI CHDN2
;CURSORS
;FUNCTION ;G
CMP BCS CMP JCS CMP BCS JMP ANOP AND #$9F
;A ; :==9+1 ; €I
;
CHOK1
ANOP STA BUF1
CHOK2
ANOP LDA CURS ASL A TAX LDA CURSH,X STA BUF LDA CURSH+ 1 ,X STA BUF+1
2270 22:=:~3
22913 231)13 p'JCH 2:::10 23413 2350 2:3613 2370
LDA BUF ORA BUF+l Bt··lE PUCH LDt1EI"1 #$·(10, CURS ,Jt1F CHOK2 LD'y' NYB DBADC BASE,8UF,BUF i..DA SUFi STA (8UF) ,Y LC>A EiUF+i CLC ;PIJTS DATA AT $D80e ADC #$D4 :::TA BUF+l l..O(~
24130 24113 2420
2430 24413 24513 2460 t···lXRO 24713
tI'.·J: 11
I
~
STA (BUF) ,Y' CPY #$130 BNE t'-iXRO INY srt t'f'{B JMP CHDN2 LDMEt'1 #'$('n3, t{'(B I t,lC CU~:S
147
24813 24913 251313 2510 2520 2530 2540 25513 25613 25713 25813 2599 26013 2610 2629 2639 2649 2659 2669 2679 2689 2699 2799 2710 2729 2739 2749 2750 2769 2770 2789 2799 2899 2819 28213 2839 2849 2850 2869 2879 2889 2899 29913 2919 2929 29313 2949 29513 29613 2979 2989 2999 39139 313113 313213 31339 30'l9 3959 3969
148
JMP CHDN2 CRUP
ANOP LDMEM #$00 l NYB LDA CURS SEC SBC #$03 STA CURS BPL CHDN2 LDMEM #$lC,CURS JMP CHDN2
CRDN
ANOP LDMEM #$99,NYB LDA CURS CLC ADC #$93 STA CURS CMP #$lD BCC CHDN2 LDMEM #$99,CURS JMP CHDN2
; CRRT
ANOP INC CURS LDMEM #$99,NYB LDA CURS CMP #$lD BCC CHDN2 LDMEM #$99 l CURS JMP CHDN2
CRLF
ANOP LDMEt1 #$99,NYB DEC CURS BPL CHDN2 LDMEM #'$lC ,CURS
CHDN2
ANOP
;CHAHGE CURSOR COLOR
Tl,iI D
NT13
LDMEM #$0e l ENABLE LDA ENABLE SEQ TWID ..JMP START SEI INC SCREEN
313713 38813 313913 3188 3118 31213 31313 3148 31513 31613 31713 3189 31913 3299 3219 3229 32313 32413 32513 3260 32713 32813 32913 33013 33113 33213 33313 3340 33513 3369 3379 3380 3399 3490 3419 34213 34313 3449 3459 3469 3479 3489 34913 3589 35113 3529 35313 35413 35513 35613 3579 35813 35913 361313 36113 3629 36313 36413 3659
INC LDA EOR BNE
SYNC1
RAN SEC RANSEC #$3C SYNC1
STA RANSEC INC SECOND ANOP LDA SNDTM1 ORA SNDTM1+1 BEQ SNDDN DB DEC SNDTM1, 1 LDA SNDTM1 ORA SNDTM1+1 BNE SNDDN LDA AND STA STA
SlCORG #$FE SlCORG V1CORG
LDA AND STA STA
S2CQRG #$FE S2CORG V2CORG
LDA AND STA STA
S3CORG #$FE S3CORG V3CORG
;
SNDDN
ANOP JSR $FF9F
jSCAN KEY
LDMEM #$91,ENABLE RAST #$FB PULL
TRIG TRGLP
ANOP LDX #$139 TXA ASL A TAY LDA CURSH,Y STA BUF LDA CURSH+1 ,Y STA BUF+1 DBADC BASE,BUF,BUF LDY #$139 LDA
149
3660 3670 3680 3690 3700 3710 3720 3730 3740 3750 3760 3770 3780 3790 3800 3810 3820 3830 3840 3850 3860 3870 3880 3890 3900 3910 3920 3930 3940 3950 3960 3970 3980 3990 4000 4010 4020 4030 4040 4050 4060 4070 4080 4090 4100 4110 4120 4130 4140 4150 4160 4170 4180 4190 4200 4210 4220 4230 4240
150
JSR ASCBIN ORA BUF1 STA BUF1 LDY STA INX CPX BNE
REGI,X $00,Y #$1B TRGLP
LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM
S1ATDC,V1ATDC S2ATDC,V2ATDC S3ATDC,V3ATDC S1SURL,V1SURL S2SURL,V2SURL S3SURL,V3SURL S1FRLO,V1FRLO S2FRLO,V2FRLO S3FRLO,V3FRLO S1FRHI,V1FRHI S2FRHI,V2FRHI S3FRHI,V3FRHI S1PWLO,V1PWLO S2PWLO,V2PWLO S3PWLO,V3PWLO S1PWHI,V1PWHI S2PWHI,V2PWHI S3PWHI,V3PWHI FILLO,FLCNLO FILHI,FLCNHI MMOD,MODVOL RFIL,RESFLT S1CORG,V1CORG S2CORG,V2CORG S3CORG,V3CORG
JMP CHDN2 ;. ;
ASCBIN ANOP STA CMP BCS CLC ADC RTS
BUF1+2 #$07 NUM
; IS IT A LETTER
#$09
;DROP IT TO NUMBER
;
NUM
AND #$0F RTS
;
BlNASC ANOP
RTS NOP
4259 4269
NOP • END
Listing C0011: The SOUND EDIT Program PC SR AC XR YR SP .,C93E 32 99 C3 99 F6
.:1999 .:1998 .:1910 .:1918 .:1929 .:1928 .:1939 .:1938 • : 1940 .:1948 .:1950 .:1058 .:1960 .:1968 .:1979 .:1078 .:1980 .:1988 .:1990 .:1998 .:19A9 .:19A8 .:10B0 .:1988 .:10C0 .:19C8 .:1000 .:1008 .:10E0 .:19E8 .:19F0 .:19F8 .:1199 .:1198 .:1119 .:1118 • : 1120 .:1128 .11139 .:1138 .:1140 .:1148 .:1150 .:1158 .:1160 .:1168
4C 24 AA 97 64 EA 47 A4 11 99 0E lA A9 AD 80 DC 0F FF 95 A9 19 85 91 21 20 15 A9 A9 92 99 90 90 09 94 A9 12 11 94 3E 99 A4 38 54 29 E4 12
58 99 99 01 01 91 92 02 12 06 10 18 99 90 92 80 DO 80 90 93 93 21 20 C9 00 09 00 00 DC 85 85 A2 F9 09 12 09 "09 19 A5 85 5F 29 11 10 FF C9
19 SA 87 14 9A F7 54 99 13 98 02 lC 80 DC DC 9F A9 19 E8 80 A9 A0 C8 DC 80 80 85 80 A9 IE 29 99 E6 F9 80 AD 58 85 3D 5E IS 18 A9 F0 85 10
49 99 99 01 91 91 92 09 14 9A 03 78 90 AD 80 DC 91 09 00 18 90 99 09 09 21 18 60 03 7F A9 A9 81 IF A9 15 11 A5 3D 95 4C ~9
F9 91 03 3D 09
9A 67 C4 4A A7 94 8A 09 15 08 04 A9 DC 90 93 80 80 A2 F8 93 85 A2 F8 Fl 00 00 A9 DC 80 20 04 IE E6 49 93 09 5E 80 3E 23 08 95 91 4C 09 03
99 99 99 91 91 02 92 09 16 90 17 06 80 DO DC 0E lA 92 A2 A9 20 00 E6 A9 A9 80 04 A9 00 85 85 91 21 80 A9 29 9A 95 09 11 85 A9 3D 3E 93 4C
17 99 74 90 FA 99 57 91 84 01 3A 92 97 92 AF 03 95 07 9F 9C 18 19 85 91 00 DO A9 90 80 9E DO 80 09 A9 A9 99 FF 9A 10 80 A9 08 A9 91 21 A5 96 80 01 80 27 00 85 61 FF 80 DC A9 IF A9 21 A0 29 C8 E8 E9 14 93 F8 80 7F 80 AA 80 19 85 97 A9 A53E 3E A5 93 4C A5 38 12 20 4C 3E IF 12
.:1170 .:1178 .:1180 .:1188 .:1190 .:1198 .:11A0 .:11A8 .:1180 .:1188 .:11C0 .:11C8 .:1109 .:1108 .II1E0 .II1E8 .:11F0 .:11F8 .:1200 .:1208 .:1210 .:1218 .:1220 .:1228 .:1230 .:1238 .:1240 .:1248 .:1250 .:1258 .:1260 .:1268 .:1270 .:1278 .:1289 .:1288 .11299 .:1298 .:12A9 .:12A8 .:1280 .:1288 .112C0 .:12C8 .:1200 .:1208 .:12E0 .:12E8 .:12F0 .:12F8 .:1300 .:1398
C9 91 00 03 4C SA 89 45 85 3D 5E 18 3E 3E 91 5F E6 5F 10 12 69 A9 5E 10 3E 19 85 11 49 A5 38 09 18 94 80 94 91 AD A9 AA 89 85 3D 99 9A 29 40 00 12 04 80 A5
11 09 03 4C 3E 99 95 A5 3D 95 4C 65 85 18 3D 4C 5E A5 3C A9 03 00 A9 90 12 94 38 78 3C 18 E9 85 A5 04 08 80 85 11 FF 68 04 3E A5 81 9A 6A 19 C3 80 A5 00 95
00 93 4C A8 12 93 4C 5E 80 3E A9 3D 3E 69 C0 3E 4C 5E A9 90 85 85 00 13 A9 A9 A5 E6 00 95 01 lC 02 A5 04 12 38 09 80 49 10 A5 61 3D 85 13 99 A5 0C 14 04 80
03 4C 32 12 C9 4C 3E 9A 95 00 11 85 A5 04 90 12 3E 38 lC 85 5E 5E 85 A9 90 lC 38 38 94 lC 85 A5 29 03 A5 04 A9 29 19 A2 85 60 65 29 45 95 90 11 04 80 AS 90
4C F5 12 C9 41 3E 12 AA 10 07 A4 3D 45 85 00 A9 12 E9 85 5F C9 4C 5F 00 85 85 F0 E6 85 F9 18 18 FE 29 04 20 F8 7F 09 00 3D 18 3E 6A A0 45 00 80 A5 06 16 04
99 11 C9 47 89 12 29 80 85 A9 5F A5 91 3E 96 00 A9 03 5E A5 10 3E A5 85 5F 5E FC 39 39 2E A5 95 85 FE 29 9F 80 80 68 8A 89 65 85 13 01 85 E8 05 13 04 80 A5
12 C9 C990 85 00 99 93 9E C9 C9 30 9F 85 94 19 3E A5 99 85 A5 60 61 65 3D A5 A9 91 C8 84 85 5F 00 85 85 5E 4C 3E 5E 18 90 26 12 E6 5E C9 5E 4C C6 5E A9 90 4C 23 A5 39 E6 3A A5 18 lC E9 lC 09 92 80 85 03 FE 85 FF A9 12 00 11 09 A8 68 9A A8 05 10 3D 85 3E A0 9A 9A 81 3D 45 8C E9 18 04 A5 80 13 A5 15 14 04 97 80
151
.: 1310 .: 1318 .: 1320 .: 1328 .: 1330 .: 1338 .:1340 · : 1 348 · : 1 350 .:1358 • : 1360 .:1368 .: 1370 .:1378
07 06 D4 8D A5 03 10 D4 8D A5 08 3E 18 EA
D4 8D A5 02 0F D4 8D A5 18 02 D4 12 69 EA
A5 01 0A D4 8D A5 11 18 D4 8D A5 85 09 EC
09 D4 8D A5 10 0E D4 8D A5 04 04 47 60 01
8D A5 0F 0D D4 8D A5 16 lA D4 8D C9 29 05
0E 08 D4 8D A5 0A 17 D4 8D A5 12 07 0F F0
D4 8D A5 09 0C D4 8D A5 17 03 D4 80 60 41
A5 08 08 D4 8D AS 15 19 D4 8D 4C 04 60 59
• :2000 · :2008 • :2010 • :2018 • :2020 · :2028 • :2030 • : 2038 • :2040 • :2048 • :2050 • :2958 • :2060 • :2068 • :2070 • :2978 • :2080 • :2088 • :2090 • :2098 • : 20A0 · :20A8 • :2080 • :2988 • :20C0 • :20C8 • :20D0 • :20D8 · :20E0 · :20E8 • :20F0 • :20F8 · :2100 • :2108 • : 2110 • : 2118 • : 2120 · : 2128 .: 2130 · :2138 · :2140
20 3D 02 30 04 20 20 20 20 20 20 3D 32 30 12 20 20 20 20 20 20 3D 32 30 0C 20 20 20 20 20 20 3D 32 30 08 20 20 20 20 20 20
20 24 01 20 03 20 20 20 20 20 20 24 13 20 0C 20 20 20 20 20 20 24 06 20 0F 20 20 20 20 20 20 24 06 20 09 20 20 20 20 20 20
16 30 14 20 3D 20 20 20 20 20 16 30 15 20 3D 20 20 20 20 20 16 30 12 20 3D 20 20 20 20 20 16 30 12 20 3D 20 20 20 20 20 16
31 30 04 20 24 20 20 20 20 20 31 30 12 20 24 20 20 20 20 20 31 30 0C 20 24 20 20 20 20 20 31 30 08 20 24 20 20 20 20 20 31
01 20 03 16 30 20 20 20 20 20 13 20 0C 16 30 20 20 20 20 20 96 20 0F 16 30 20 20 20 20 20 06 20 09 16 30 20 20 20 20 20 10
14 20 3D 33 30 20 20 20 20 20 15 20 3D 33 30 20 20 20 20 20 12 20 3D 33 30 20 20 20 20 20 12 20 3D 33 30 20 20 20 20 20 17
04 20 24 01 20 20 20 20 20 20 12 20 24 13 20 20 20 20 20 20 0C 20 24 06 20 20 20 20 20 20 08 20 24 06 20 20 20 20 20 20 0C
03 16 30 14 20 20 20 20 20 20 0C 16 30 15 20 20 20 20 29 20 0F 16 30 12 29 20 20 20 20 20 09 16 30 12 20 20 20 20 20 20 0F
152
• :2148 .: 2150 • :2158 • :2160 • :2168 .: 2170 • :2178 • :2180 · :2188 • :2190 • :2198 • :21A0 • :21A8 • :2180 • :2188 .: 21 C0 • : 21 C8 .: 21D0 • :21D8 • :21E0 • :21E8 • :21F0 • :21F8 · :2200 · :2208 · : 2210 • :2218 • :2220 • :2228 · :2230 · :2238 • :2240 • :2248 • :2250 • :2258 • :2260 • :2268 • :2270 • :2278 • :2280 • :2288 • :2290 • :2298 • :22A0 • :22A8 • :2280 · :2288 • :22C0 • :22C8 · :22D0 • :22D8 • :22E0 • :22E8 • :22F0 • :22F8 • :2300 • :2308 • :2310 · :2318
3D 32 30 0C 20 20 20 20 20 20 3D 32 30 08 20 20 20 20 20 20 3D 32 30 12 20 20 20 20 20 20 3D 0C 30 0F 20 20 20 20 20 20 3D 0E 30 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24 10 29 0F 20 20 20 20 20 20 24 10 20 09 20 20 20 20 20 20 24 03 20 07 20 20 20 20 20 20 24 03 20 0C 20 20 20 20 20 20 24 04 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30 17 20 3D 20 20 20 20 20 16 30 17 20 3D 20 20 20 20 20 16 30 0F 20 3D 20 20 20 20 20 06 30 0E 20 3D 20 20 20 20 20 12 30 14 13 3D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30 0C 29 24 20 20 20 20 20 31 30 08 20 24 20 20 20 20 20 31 30 12 20 24 20 20 20 20 20 0C 30 08 20 24 20 20 29 20 20 05 30 0D 0E 24 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 0F 16 30 20 20 20 20 20 10 20 09 16 30 20 20 20 20 20 03 20 07 16 30 20 20 20 20 20 03 20 09 0D 30 20 20 20 20 20 13 20 31 04 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 3D 33 30 20 20 20 20 20 17 20 3D 33 30 20 20 20 20 20 0F 20 3D 33 30 20 20 20 20 20 0E 20 3D 0F 30 20 20 20 20 20 06 20 3D 14 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 24 10 20 20 20 20 20 20 08 20 24 10 20 20 20 20 20 20 12 20 24 03 20 20 20 20 20 20 0C 20 24 04 20 20 20 20 20 20 0C 20 24 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16 30 17 20 20 20 20 20 29 09 16 30 17 20 20 20 20 20 120 07 16 30 0F 20 29 20 20 20 20 0F 06 30 16 20 20 20 20 20 20 14 13 30 31 20 20 20 20 20 29 20 20 20 20 20 20 20 20 20 20
• :2329 • :2328 · :2330 · :2338 · :2349 · :2348 · :2359 · :2358 • :2360 • :2368 · :2370 · :2378 · :2380 · :2388 · : 23'?0 · :2398
29 29 29 29 20 29 29 20 20 29 20 20 29 20 20 20
29 29 29 29 29 29 29 20 20 20 20 20 29 20 20 20
29 29 29 29 29 20 29 20 20 29 20 20 20 20 20 20
29 29 29 29 29 29 29 20 20 29 20 20 20 20 20 20
29 29 29 29 20 29 20 29 20 20 20 20 20 20 29 20
29 29 29 20 29 29 20 20 29 20 29 20 20 20 20 20
29 29 29 20 29 29 29 20 20 20 29 20 20 20 20 20
29 29 29 29 29 20 20 20 20 29 29 29 29 20 20 29
· :23A0 · :23A8 · :2380 · :2388 · :23C0 · :23C8 · :23D0 · :23D8 · :23E0 · :23E8 · :23F0 · :23F8 .: 2490
29 20 20 29 20 20 20 20 20 04 24 15 7F
29 20 20 20 29 20 20 20 20 F6 24 95 FF
29 20 20 29 20 20 20 20 20 09 00 32 00
20 29 20 20 20 20 20 20 20 Fl 35 05 00
29 29 20 20 20 20 20 20 20 00 91 05 FF
29 20 29 20 20 20 20 20 20 3D 7F 80 FF
29 20 20 29 20 29 20 20 20 04 94 95 00
29 20 29 20 20 20 20 20 20 34 05 FF 90
Listing C-12: The Ko-COM Program 5 GOTO 110 25 A$="R0:"+CN$+A$ 30 OPEN 15,8,15,A$ 40 CLOSE15 50 END 110 INPUT"WHAT IS THE KOALA FILE NAME";KN$ 120 INPUT"WHAT IS THE COMMODORE FILE NAME";CN$ 139 A$=CHR$(129)+LEFT$(KN$+" " , 14) 149 CN$=CN$+"=" 150 GOTO 25
Listing C-13: The COM-KO Program 5 GOTO 110 25 A$="R0:"+A$+CN$ 30 OPEN 15,8,15,A$ 40 CLOSE15 50 END 110 INPUT"WHAT IS THE KOALA FILE NAME";KN$ 120 INPUT"WHAT IS THE COMMODORE FILE NAME",CN$ 139 A$=CHR$( 129) +LEFT$( KN$+" " ,14) 140 CN$="="+CN$ 159 GOTO 25
Listing C-14: The DISPLAY PIC Program 10 213 313 40 613
IF A=0 THEN A=l :LOAD"MVIT" ,8,1 IF A=1THEN A=2:INPUT"l.<,IHAT IS nu:. Fll_E NAME";QR1HU)t'=lO IF A=2THEN A=3:FOR X=l TO 5130:NEXT:SYS8192 WAIT 653,1:WAIT653,1,1 STOP
1~l'a·,:3,l
153
Listing C-15: The MVIT Subroutine
8*
PC SR AC XR YR SP · ,C133E 321313,C3 1313 F6
· :2131313 · : 21313:3 · : 2131 0 · :2018 · : 20213 · :2028 , :213313 · :21338 .: 21340
4C 3A 27 48 FD FF FE E8 FC
13 32 32 A9 A9 A13 C8 EO A9
20 03 113 40 130 00 D0 134 83
2F 18 08 85 85 A2 F9 D0 85
18 69 48 FC FE 013 E6 Fe FD
69 137 8A A9 A9 Bl FD A9 A9
3D 4C 48 7F 5C FC E6 28 1313
49 De 98 85 85 91 FF 85 85
· :21348 .: 213513 · :21358 ,: 213613 · :21368 .: 21370 .: 21378 .: 20813 · :2088 · :213913 · :2(!98 · : 20A13 ' :2eA8
FE 1313 E6 Fe 133 130 213 213
A9 81 FD AD 8D DD AD 8D
0D De DO 68
0B 09 09 AA
D8 FC E6 10 132 A9 18 18 20 213 Ie 213 68
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
8D €t8
85 FF '11 FE FF E8 87 8D DD 38 613 4A DO 29 D0 A9 AD 18 8D 18 80 16 8D 11 28 613
A13 C8 E13 21 E9 4A F0 5C D0 D0 D0 De
1313 De 134 De 01 8D 0D 13A 29 AD AD 68
1-:':3
A2 F9 De A9 8D 138 13B 13A 0F 16 11 A8 42 50
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF FF FF FF FF FF FF ,FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Listing C-16: The PIC A CASTLE Koala Pad Picture File 8*
PC SR AC XR YR SP · ;C93E 32 99 C3 99 F6
· :69139 · :6998 .: 61319 · :691'8 · :613213 · :61328 · :613313 · :6038 · :61349 · :6048 • :6950 · :6058 .: 6969 · :6068 · :69713 · :6078 .: 613813 · :61388 · :61390 , :613'?8 · :613AO · :613A8 · : 613 Be · :60B8 .: 613C0 , :60C8 · : 60DI3 , :60D8 .: 69E13
154
FF 7F FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF 55 FF
· :60E8 · :60F13 · :69F8 .:611313 · :6108 .:6119 • : 6118 · : 61213 • :6128 .: 61313 · :6138 .: 61413 · :6148 .: 61513 · :6158 .: 61613 · :6168 · : 61713 • :6178 .: 61813 • :6188 • :61913
• :6198 • :61A13 · :61A8 • : 61 Be · : 61 B8 • : 61 C13 · : 61 C8 · : 61 De · :61D8 · : 61 E0 · :61 E8 .: 61 Fe · :61F8
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF FF FF FF FF 55 AA 55 FF FF AA 55 AA 55 55 55 FF 55 FF 55 FF AA FF 55 FF 55 AA AA
.:6200 .:6208 .:6210 .:6218 .:6220 .:6228 .:6230 .:6238 .:6240 .:6248 .:6250 .:6258 .:6260 . :6268 .:6270 .:6278 .:6280 .:6288 .:6290 .:6298 .:62A0 .:62A8 .:6280 .:62B8 .:62C0 .:62C8 .:6200 .:62D8 .:62E0 .:62E8 .:62F0 .:62F8 .:6300 .:6308 .:6310 .:6318 .:6320 .:6328 .:6330 .:6338 .:6340 .:6348 .:6350 , : 6.358 .:6360 .:6368 .:6370 .:6378 .:6380 .:6388 .:6390 .:6398 .:63A0 .:63A8 .:63B0 .:63B8 .:63C0 .:63C8 .:6300
FE 55 FF 55 FF FF FF FF FF FF 55 55 55 FF FF FF 55 55 FF 55 FF 55 FF 55 55 55 55 55 AA AA FF AA FF FF FF 55 AA 55 55 55 55 AA 07 EB FA 57 BF AF FF FF 55 55 55 FF FF FF FF AA AA
FE 55 FF 55 FF FF FF FF FF FF 55 55 55 FF FF FF 55 55 FF 55 FF 55 FF 55 55 55 55 55 AA AA FF AA FF FF FF 55 AA 55 55 55 55 AA 07 EB FA 57 BF AF FF FF 55 55 55 FF FF FF FF AA AA
FE 55 FF 55 FF FF FF FF FF FF 55 55 55 FF FF FF 55 55 FF 55 FF 55 FF 55 55 55 55 55 AA AA FF AA FF FF FF 55 AA 55 55 55 55 AA 07 EB FA 57 BF AF FF FF 55 55 55 FF FF FF FF AA AA
FE 55 FF 55 FF FF FF FF FF FF 55 55 55 FF FF FF 55 55 FF 55 FF 55 FF 53 55 55 55 55 AA AA FF AA FF FF FF 55 AA 55 55 55 55 AA 05 AA AA FF AA AF FF FF 55 55 55 FF FF FF FF AA AA
FE 55 FF 55 FF FF FF FF FF FF 55 55 55 FF FF FF 55 55 FF 55 FF 55 FF 50 95 55 55 55 AA AA FF AA FF FF FF 55 AA 55 55 55 55 AA 05 AA AA FF AA AF FF FF 55 55 55 FF FF FF FF AA A9
FE 55 FF 55 FF FF FF FF FF FF 55 55 55 FF FF FF 55 55 FF 55 FF 55 FF 40 15 55 55 55 AA AA FF AA FF FF FF 55 AA 55 55 55 51 AA 05 AA AA FF AA AF FF FF 55 55 45 FF FF FF FF AA A5
FE 55 07 69 FA FE BF AF FF FF 55 55 55 FF FF FF 55 55 FF 55 FF 55 FF 00 F5 55 55 55 AA AA FF AA FF FF FF 05 AA 55 55 55 50 AA FO AA AA FF 66 BF FF FF 55 55 01 FF FF FF BF AA 95
AA 55 07 69 FA FE BF AF FF FF 55 55 55 FF FF FF 55 55 FF 55 3F 55 FC 28 FO 55 55 55 AA AA FF AA FF FF FF 35 AA 55 55 55 7C 0A FO 8A AA FF 99 FF FF 3F 55 54 00 FF FF FF BF AA 55
.:6308 .:63E0 .:63E8 .:63F0 .:63F8 .:6400 .:6408 .:6410 .:6418 .:6420 .:6428 .:6430 .:6438 .:6440 .:6448 .:6450 .:6458 .:6460 .:6468 .:6470 .:6478 .:6~80
.:6488 .:6490 .:6498 .:64A0 .:64A8 .:64B0 .:64B8 .:64C0 .:64C8 .:6400 .:6408 .:64E0 .:64E8 .:64F0 .:64F8 .:6580 .:6508 .:6518 .:6518 .:6520 • :6528 .16538 .:6538 .:6548 .:6548 .~6558
.:6558 .:6568 .:6568 .:6570 .:6578 .:6580 .:6588 .:6590 .:6598 .:65A0 .:65A8
A8 0F 55 FC A8 57 AA FF FF FF 55 FF 55 FF FF FC 0F FF 55 55 55 55 03 FF 3B 66 BB DO AA FC 0F AA 54 00 3F FF FF AF FE 55 AA 56 AA A2 AA AA AA 7D AA 55 A9 AA AF 03 DA AA AA A9 AA
A0 03 55 FA A8 55 AA FF FF CF 55 FF 55 FF FF F0 03 FF 55 55 57 55 A0 FF CE 99 EF 77 AA F0 03 AA 54 00 0F FF FF AF FA 55 AA 39 AA A2 AA AA AA 59 AA 55 AA AA BF A9 6A AA AA AA 5A
81 A0 15 EA A0 55 6A FF FF 03 55 FF 55 FF FF C0 AB FF 54 55 5A 05 AA BF 3B 66 BB DO AA C0 00 AA 50 00 0F FF FF A9 AA 55 AA 59 AA AA AA AA AA 59 AA 55 AA AA FF AA 6A AA AA AA A5
55 AA A5 AA A2 55 5A FF FC 00 55 FF 55 FF FF 02 AA FF 50 15 6A 75 AA AF CE AA EF 77 AA 00 A8 2A 50 00 00 FF FF A9 AA 55 AA 59 AA AA AA AA AA 56 AA 55 AA 6A FF AA 6A AA AA AA A6
55 55 AA AA AB AE AA AA 82 0A 55 55 5A 56 FF FF F0 F2 50 54 15 15 FF.FF 55 55 FF FF FF FE AA AA AA AA FF 7F 40 0F 05 F5 6A AA 5F 55 AA 56 AB AA 3B CE 6A AA FB ED DO 77 A8 80 02 2A AA AA FE FF 43 BF 80 A2 A8 AA 3F BF FF FF AA AA 6A 9A 55 55 AA AA 65 95 AA AA AA AA AA AA AA AA AA AA 55 55 6A 9A 55 55 AA AA 59 55 FF FF A9 A6 AA AA AA AA AA AA AA AA 9A 6A
55 55 AA AA BA EA A8 A0 2A AA 55 55 55 ~5 FF FF EA AA 55 55 05 A5 FF FF 54 50 FF 3F FE FA AA AA AA AA 5D 59 FF FF FE FB AA AA 55 55 A9 AA 6A 9A 3B CE 6A AA FB ED DO 77 95 55 AA AA AA AA FF FF BF BF AA AA AA AA BF AF FF FF 55 55 55 55 AA AA FF FF AA AA FF FF FF FF 55 55 55 55 55.55 AA AA 55 55 AA AA FF FF FF FF 55 55 55 55 55 55 55 55 FF FF 55 55 55 55
155
· : 6580 '1'A 6A AA AA AA AA .:6588 AA AA AA AA AA AA .:65C0 55 55 55 55 55 57 · : ,~~,C8 AA AA A8 AE 8A EA .:65D0 75 D5 55 55 55 55 .:65D8 lD 47 lD 47 lD 47 .:65E0 95 66 99 66 99 66 .:65E8 AE 89 EE 89 EE 89 .:65F0 EE 88 EE 88 EE 88 · : ,~5F8 AA AA AA AA AA AA .:6600 AA AA AA AA AA AA .:6608 AA AA AA AA AA AA .:6610 A9 A9 A6 A6 9A 6A .:6618 FF FF FF FF FF FF .:6620 AA AA AA AA AA AA .:6628 55 55 55 55 55 55 .:6630 A8 AA AA AA AA AA .:6638 FF FE 9A 9A A6 A6 .:6640 AA AA AA AA AA AA .:6648 AA AA AA AA AA AA .:6650 AA AA AA AA AA AA .:6658 AA AA AA AA AA AA .:6660 AA AA AA AA AA AA · : ,~668 AA AA AA AA AA AA .:6670 AA AA AA AA AA AA .:6678 AA AA AA AA AA AA .:6680 AA AA AA AA AA AA .:6688 FF FF FF FF FF FF · : 66'1'0 AA AA AA AA AA AA .:6698 AA AA AA AA AA AA .:66A0 AA AA AA AA AA AA .:66A8 FF FF FF FF FF FF .:66B0 55 55 55 55 55 55 .:66B8 FF FF FF FF FF FF .:66C0 FF FF FF FF FF FF .:66C8 AA AA AA AA AA AA .:6600 AA AA AA AA AA AA .:66D8 AA AA AA AA AA AA .:66E0 55 55 55 55 55 55 .:66E8 AA AA AA AA AA AA .:66F0 AA AA AA AA AA AA .:66F8 55 55 55 55 55 55 .:6799 AA AA AA AA AA AA .:6708 AA AA AA AA AA AA .:6710 AA AA AA AA AA AA .:6718 26 89 26 89 26 89 .:6720 99 66 99 66 99 66 .:6728 77 DE 77 DE 77 DE .:6730 DD 77 DD 77 DD 77 .:6738 55 55 55 88 EE 88 .:6740 AA AA AA 77 DO 77 .:6748 AA AA AB DO 77 DD .:6750 AA AA 77 DO 77 DD .:6758 FF FF 66 99 66 99 .:6760 AA AA 77 DD 77 DO .:6768 FF F9 66 99 66 99 .:6770 AA DD 77 DO 77 DO .:6778 55 EE BB EE 88 EE .:6780 AA AA AA AA AA AA
156
55 55 AA 55 AA lD 99 EE EE FF 55 55 55 55 55 AA 55 55 AA AA AA AA AA AA AA AA AA FF AA AA AA FF 55 FF FF AA AA AA 55 AA AA 55 AA AA AA 26 99 77 DD ~E
DO 77 77 66 77 66 77 BB AA
55 55 AA 55 AA 47 66 89 BB FF 55 55 55 55 55 AA 55 55 AA AA AA AA AA AA AA AA AA FF AA AA AA FF 55 FF FF AA AA AA 55 AA AA 55 AA AA AA 89 66 DE 77 8B 77 DO DO 99 DD 99 DO EE AA
.:6788 · : ,~,7'1'0 .:6798 .:67A0 .:67A8 .:6780 .:67B8 .:67C0 · :67C8 .:67D0 .:6708 .:67E0 .:67E8 .:67F0 .:67F8 .:6800 · : ,~808 .:6810 .:6818 .:6820 .:6828 · : 6E:30 .:6838 .:6840 .:6848 .:6850 .:6858 .:6860 .:6868 .:6870 · : 6878 .:6880 .:6888 .:6890 .:6898 .:68A0 .:68A8 .:68B0 .:68B8 .:68C0 .:68C8 .:68D0 .:68D8 .:68E0 .:68E8 .:68F0 .:68F8 .:6900 .:6908 .:6910 .:6918 .:6920 .:6928 · : ,~93e .:6938 · : 6'1'40 .:6948 .:6950 .:6958
FF AA FF AA AA AA FF FF AA FF AA AA AA AA AA AA AA AA AA AA AA AA AA AA 55 FA 37 66 77 EE 9.9 BB BB 99 E7 EE BB EE 66 FF AA AA FF FF FF FF FF FF FF AA AA FF FF AA AA AA AA FF FF
FF AA FF AA AA AA FF FF AA FF AA AA AA AA AA AA AA AA AA AA AA AA AA AA 55 E5 CD 99 DE BB 66 EE 99 BB DD BB EE BB 99 FF AA AA FF FF FF FF FF FF FF AA AA FF FF AA AA AA AA FF FF
FF AA FF AA AA AA FF FF AA FF AA AA AA AA AA AA AA AA AA AA AA AA AA AA 55 95 37 66 77 EE AE 66 66 EE 77 EE BB EE 66 FF AA AA FF FF FF FF FF FF FF AA AA FF FF AA AA AA AA FF FF
FF AA FF AA AA AA FF FF AA FF AA AA AA AA AA AA AA AA AA AA AA AA AA AA 56 55 CD 99 DE BB 7B 99 99 BB DD BB EE BB 99 FF AA AA FF FF FF FF FF FF FF AA AA FF FF AA AA AA AA FF FF
FF FF AA AA FF FF AA AA AA AA AA AA FF FF FF FF AA AA FF FF AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA 56 56 55 55 37 CD 66 99 77 DE EE BB AE 6B 66 99 66 99 EE BB 77 DD EE BB BB EE EE BB 66 99 FF FF AA AA AA AA FF FF FF FF FF FF FF FF FF FF FF FF FF FF AA AA AA AA FFFF FF FF AA AA AA AA AA AA AA AA FF FF FF FF
FF AA FF AA AA AA FF FF AA FF AA AA AA AA AA AA AA AA AA AA AA AA AA AA 5B 55 31 66 77 EE 9E 66 66 EE 77 EE BB EE 66 FF AA AA FF FF FF FF FF FF FF AA AA FF FF AA AA AA AA FF FF
FF AA FF AA AA AA FF FF AA FF AA AA AA AA AA AA AA AA AA AA AA AA AA AA 6F 55 CD 99 DE BB 67 99 99 BB DO BB EE BB 99 FF AA AA FF FF FF FF FF FF FF AA AA FF FF AA AA AA AA FF FF
.:6960 .:6968 .:6970 .:6978 .:6980 .:6988 .:6990 .:6998 .:69A0 .:69A8 .:6980 .:69B8 .:69C0 .:69C8 .:69D0 .:6908 .:69E0 .:69E8 .:69F0 .:69F8 .:6A00 .:6A08 .:6A10 .:6A18 .:6A20 .:6A28 .:6A30 .:6A3S .:6A40 .:6A48 .:6A50 .:6A5S .:6A60 .:6A68 .:6A70 .:6A78 .:6A80 .:6A88 .:6A90 .:6A98 .:6AA0 .:6AA8 .:6AB0 .:6AB8 .:6AC0 .:6ACS .:6AD0 .:6A08 .:6AE0 .:6AES .:6AF0 .:6AF8 .:6B00 .:6B08 .:6B10 .:6B18 .:6B20 .:6B28 .:6B30
AA FF FF FF AA 7A FF 10 99 BB 99 BA 99 BS BB BB BB BB BB EE AA AA AA FF FF FF FF 55 AA FF FF FF FF FF 55 FF FF AA AA AA AA FF FF FF 5B AA AA 2E BB 6E 6E EE DB BB BB 00 EE OD 66
AA FF FF FF AA 7A FF 47 66 OE 66 EO 66 EE EE EE EE EE EE BB AA AA AA FF FF FF FF 55 AA FF FF FF FF FF 55 FF. FF AA AA AA AA FF FF FF 5B AA AA 8B EE BB 9B BB 7E EE EE 77 BB 77 99
AA FF FF FF AA EA FF 10 99 B7 99 BB 99 BB BB BB BB BB BB EE AA AA AA FF FF FF FF 55 AA FF FF FF FF FF 55 FF FF AA AA AA AA FF FF FF 6F AA AA 2E BB 6E 66 EE OF BB BB 00 EE DD 66
AA FF FF FF AA EA FF 47 66 OE 66 EE 66 EE EE EE EE EE EE BB AA AA AA FF FF FF FF 55 AA FF FF FF FF FF 55 FF FF AA AA AA AA FF FF FF 6F AA AA 8B EE BB 9B BB 76 EE EE 77 BB 77 99
AA FF FF FF AA EA FF 10 99 BB 99 BB 99 BB BB BB BB BB BB EE AA AA AA FF FF FF FF 55 AA FF FF FF FF FF 55 FF FF AA AA AA AA FF FF FF 6F AA AA 2E BB 6E 66 EE 00 BB 95 OA ED 9D F6
AA FF FF FF AB AA FF 47 66 00 66 EE E6 EE EE EE EE EE EE BB AA AA AA FF FF FF FF 55 AA FF FF FF FF FF 55 FF FF AA AA AA AA FF FF FF 6F AA AA 8B EE BB 99 BB 77 EE 05 7A B9 B7 F9
AA AA FF FF FF FF FF FF AB AF AA AA FF FF 10 47 99 66 B7 00 09 66 BB EE 59 06 BB EE BB EE BB EE BB EE BB EE BB EE EE BB AA AA AA AA AA AA FF FF FF FF FF FF FF FF 55 55 AA AA FF FF FF FF FF FF FF FF FF FF 55 55 FF FF FF FF AA·AA AA AA AA AA AA AA FF FF FF FF FF FF 6F 6F AA AA AA AA 2E 8B BB EE 6E BB 66 99 6E BB DO 77 BB 6E 95 05 OA 7A ED B9 9D B7 F6 F9
.:6B38 EE BB .:6B40 AA AA ~:6B48 55 55 .:6B50 AA AA .:6B58 AA AA .:6B60 AA AA .:6B68 AA AA .:6B70 FF FF .:6B78 FF FF .:6B80 FF FF .:6B88 FF FF .:6B90 FF FF .:6B98 FF FF .:6BA0 AA AA .:6BA8 AA AA .:6B80 AA AA .:6BB8 AA AA .:6BC0 55· 55 .:6BC8 FF FF .:6B00 FF FF .:6B08 FF FF .:6BE0 FF FF .:6BE8 55 55 .:6BF0 AA AA .:6BF8 AA AA .:6C00 95 95 .:6C08 AA AA .:6C10 FF FF .:6C18 3B CE .:6C20 DD 77 .:6C28 78 EE .:6C30 99 66 .:6C38 E6 B9 .:6C40 66 99 .:6C48 5D B7 .:6C50 05 95 .:6C58 5A 5A .:6C60 DE 76 .:6C68 E6 D9 .:6C70 F6 F9 .:6C78 06 97 .:6C80 FF FF .:6C88 FF FF .:6C90 FF FF .:6C98 FF FF .:6CA0 FF FF .:6CA8 FF FF .:6CB0 FF FF .:6CB8 55 55 .:6CC0 55 55 .:6CC8 55 55 .:6C00 55 55 .:6CD8 FF FF .:6CE0 FF FF .:6CE8 FF FF .:6CF0 FF FF .:6CF8 FF FF .:6000 AA AA .:6008 55 55
EE AA 55 AA AA AA AA FF FF FF FF FF FF AA AA AA AA 55 FF FF FF FF 55 AA AB 55 AA FF 3B DD 7B 99 FE 66 6D 05 AA AA FF FF 56 FF FF FF FF FF FF FF 55 55 55 55 FF FF FF FF FF AA 55
BB AA 55 AA AA AA AA FF FF FF FF FF FF AA AA AA AA 55 FF FF FF FF 55 AA AB 55 AA FF CE 77 EE 66 B9 99 9B 95 AA AA FF EE 65 FF FF FF FF FF FF FF 55 55 55 55 FF FF FF FF FF AA 55
D6 AA 55 AA AA AA AA FF FF FF FF FF FF AA AA AA AA 55 FF FF FF FF 55 AA AD 55 AA FF 3B DD 78 99 EE 66 66 EO EE EE 77 7B 99 FF FF FF FF FF FF FF 55 55 55 55 FF FF FF FF FF AA 55
97 AA 55 AA AA AA AA FF FF FF FF FF FF AA AA AA AA 55 FF FF FF FF 55 AA AO 55 AA FF CE 77 EE 66 BB 99 9B B7 BB BB 00 EE 65 FF FF FF FF FF FF FF 55 55 55 55 FF FF FF FF FF AA 55
06 AA 55 AA AA AA AA FF FF FF FF FF FF AA AA AA AA 55 FF FF FF FF 55 AA B5 55 AA FF 3B DD 7B 99 EE E6 66 DO EE EE 77 BB 99 FF FF FF FF FF FF FF 55 55 55 55 FF FF FF FF FF AA 55
97 AA 55 AA AA AA AA FF FF FF FF FF FF AA AA AA AA 55 FF FF FF FF 55 AA B5 55 AA FF CE 77 EE 66 BB 99 99 77 BB BB DD EE 65 FF FF FF FF FF FF FF 55 55 55 55 FF FF FF FF FF AA 55
157
.: t.Dle · : 6D18 · :6D2e · :6D28 · :6D3e · :6038 · :604e · :6048 · :6D5e · :6058 • :606e • :6068 · :6D7e · :6078 · :608e · :6088 • :60ge · :6098 · :60Ae · :60A8 · :60B0 · :60B8 · :60ce · :60C8 · :6000 · :6008 · :60Ee • :60E8 · :60F0 · :60F~ · :6E0e · :6E08 .: 6El €I • : 6E18 · :6E20 · :6E28 .: 6E3e · :6E38 .: 6E4e · :6E48 · :6E5e · :6E58 .: 6E60 · :6E68 .: 6E70 · :6E78 .: 6E80 · :6E88 .: 6E90 · :6E98 · :6EA0 · :6EA8 · :6E8e · :6E88 · :'::.EC0 · :6EC8 · :6ED0 · :6E08 · :6EE0
158
55 55 AA 55 FF EA FF FF FF 3B 77 7B 99 BB 90 BB 09 77 90 BB 99 BB FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 2E 99 9D 95 F8 EE E6 EE 37 8F
55 55 AA 55 FF EA FF FF FF CE 00 EE 66 EE 67 EE 66 00 77 EE 66 EF FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 88 66 77
65 FE 88 B9 B8 CO FF
55 55 AA 55 FD AA FF FF FF 3B 77 7B 99 BB 90 BB 09 77 90 BB 99 BB FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 2E 99 9D 95 F8 EE E6 EE 37 BF
55 55 AA 55 FO AA FF FF FF CE 00 EE 66 EE 67 EE 76 00 77 EE 66 EF FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 8B 66 77
65 FE 8B B9 88 CD FF
55 55 AA 55 FO AA FF FF FF 3B 77 7B 95 BB 99 BB 00 77 90 BB 99 BB FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 2E 99 90 99 FF EE EE EE 37 BF
55 55 AA 55 FO AA FF FF FF CE 00 EE 65 EE 66 EE 77 00 77 EE 66 EE FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 8B 66 77
65 FE BB BB B8 CO FF
55 55 AA 55 FD AA FF FF FF 3B 77 7B 95 BB 99 BB 00 37 90 BB 99 BB FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 2E 99 9D 99 FF EE EE 6E 37 BF
55 55 AA 55 FF EA FF FF FF CE 00 EE 65 EE 66 EE 77 CO 55 FF 66 EE FF FF FF FF AA 55 AA AA AA AA AA AA FF AA FF FF AA FF AA AA AA 55 FF 7F FF FF FF 88 66 77
66 FE 8B BB 8B CD FF
· :6EE8 · :6EFe · :6EF8 · :6Fee • :6F08 • :6Fle • :6F18 · :6F20 • :6F28 • :6F3e · :6F38 • :6F4e • :6F48 • :6F5e • :6F58 • :6F6e • :6F68 • :6F70 · :6F78 • :6F8e .:6F88 .:6F90 .:6F98 .:6FA0 .:6FA8 .:6FBe .:6F88 • :6Fce .:6FC8 · :6Foe .:6F08 · :6FE0 .:6FE8 .: 6FF0 • :6FF8 · : 7013(1 · : 713138 · : 7e 1 (1 · : 7018 · : 7020 · ;7028 · : 70313 · :70:38 · : 7(<40 · :7048 .: 7050
FF BB BB FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA AB 55 FF FF FF 26 99 6E DD EA EE EE E6 38 87
FF EE EE FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA AB 55 FF FF FF 89 66 88 77 A8 8B 88 B9 CE DO 77 DD EE 88 B8 EE 55 55
55 55 FF FF · :7058 55 55 · : 7060 55 55 · :7068 55 55 · : 7(170 55 55 · : 7078 55 55 .: 7080 55 55 .: 7088 55 55 .: 709\3 AA AA · :7098 55 55 · :70A0 55 c c · :70A8 55 55 .: 7080 AA AA · :70B8 FF FF ...1 ...'
FF BB BB FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA AB 55 FF FF FF 26 99 6E 00 EA EE EE EE 38 87 77
EE BB 55 55 FF 55 55 55 55 55 55 55 AA 55 55 55 AA FF
FF EE EE FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA AB 55 FF FF FF 89 66 88 77 B8 88 B8 89 CE DD DD 88 EE 55 55 FF 55 55
55 55 55 55 55 AA 55 55 55 AA FF
FF BB BB FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA AB 55 FF FF FF 26 99 6E DD EE EE EE EE 38 87
FF EE EE FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA A8 55 FF FF FF 89 66 88 77
88 BB BB 88
FF BB BB FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA AO 55 FF FF FF 26 9." 6E DD EE EE EA EE 38 87
CE DO 77 DO 77 EE 88 EE B8 EE BS 55 55 55 55 55 55 FF FF FF 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 AA AA AA 55 55 55 55 55 55 55 55 55 AA AA AA FF FF FF
FF EE EE FF FF FF 55 AA AA AA AA AA 55 FF FF FF FF FF FF AA AA AA AA AA AA AO 55 FF FF FF 89 66 88 77
8B 88 B8 BB CE DD DD 88 DO 55 55
FF 55 55 55 55 55 55 55
AA 55 55 55 AA FF
55 55 55 55 55 55 55 55 55 55 55 55 F9 F9 FF FF FF FF FF FF FF FF CE 3B 66 99 EE 7B 66 99 EE BB EE BB EF BF EE, FB CE 3B EE 7B DD 77 EE BB DD B7 AA AA 55 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF AA AA AA AA AA AA AA AA AA AA AA AA 55 55 FF FF FF FF FF FF FF FF FF FF AA AA 9F 9F • :7230 AA AA · :72'38 .: 7246 AA AA AA AA · :7248 .: 7250 AA AA 8B 2E · :7258 99 ':,6 · :7260 'n BB BB 6E · :7268 .: 7270 66 66 99 66 66 99 · :7278 .: 7289 66 66 99 · :7288 77 DF 77 DD 77 • :7299 59 56 59 56 99
.: 79C9 · :79C8 .: 79D9 • :79D8 · :79E9 • :78E8 · :79F9 • :79F8 .:7199 · :7198 .:7119 • :7118 .: 7129 • :7128 .: 7139 • :7138 .: 7149 • :7148 .: 7158 · :7158 .: 7169 · :7168 .: 7178 · :7178 · : 7188 · :7188 • : 7198 · :7198 .:71A9 · :71A8 · : 71 B8 · : 71B8 · : 71 C9 · : 71 C8 · : 71 D9 · : 71 D8 .:71E9 · : 71 E8 · : 71 F9 · : 71 F8 · : 72913 · :7208 .:7219 · : 7218 · :7228 · :7228
55 55 55 55 55 55 F9 FF FF FF FF 3B 99 7B 99 BB BB BF BB 3B 7B 77 BB B7 AA 55 FF FF FF FF FF FF FF AA AA AA AA AA AA 55 FF FF FF FF FF AA 9F AA AA AA AA 2E 66 6E 99 99 99
55 55 55 55 55 55 F9 FF FF FF FF CE 66 EE 66 EE EE EF EE CE EE DD EE DD AA 55 FF FF FF FF FF FF FF AA AA AA AA AA AA 55 FF FF FF FF FF AA 9F AA AA AA AA 8B
55 55 55 55 55 55 F9 FF FF FF FF 3B 99 7B 99 BB BB BF FB 3B 7B 77 BB B7 AA 55 FF FF FF FF FF FF FF AA AA AA AA AA AA 55 FF FF FF FF FF AA 9F AA AA AA AA 2E 66 6E 99 99 99
55 55 55 55 55 55 55 55 55 55 55 55 F9 F9 FF FF FF FF FF FF FF FF CE 3B 66 99 EE 7B 66 99 EE BB EE BB EF BF FE FB CE 3B EE 7B DD 77 EE'BB DD B7 AA AA 55 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF AA AA AA AA AA AA AA AA AA AA AA AA 55 55 FF FF FF FF FF FF FF FF FF FF AA AA 9F 9F AA AA AA AA AA AA AA AA 8B 2E 99 66 BB 6E 66 99 66 99 66 99 DD 77 66 99
55 55 55 55 55 55 E5 FF FF FF FF CE 66 EE 66 EE' EE EF FE CE EE DD EE DD AA 55 FF FF FF FF FF FF FF AA AA AA AA AA AA 55 FF FF FF FF FF AA 9F AA AA AA AA 8B 99 BB 66 66 66 DD 66
37 9D 66 DD 6E 55 FF FF FF FF FF FF FF AA AA AA AA AA AA FF FF FF FF FF FF FF FF DA AA AA AA FF 37 BB 6E 99 BB 99 99 9'?' • : 7308 3B .: 73Ee 7'[.0 · :73E8 BB .: 73Fe .t,6 .: 73F~: E6 .: 74139 FF · :7408 FF · : 74113 FF · : 7418 FF • : 742E~ FF · :7428 FF .: 7439 FF · :7438 55 · :7440 AA · :7448 AA · :7458 AA · :7458 AA · :74613 AA · :7468 AA
· :7298 • : 72A9 · : 72A8 • :72B9 • :72B8 • :72C9 • :72C8 • :72D9 • :72D8 • : 72E9 • :72E8 .: 72F9 .:72F8 • :7399 • :7388 • :7310 .:7318 .:7329 .:7328 · :7339 .:7338 · :7348 .:7348 · :7359 .:7358 · :7369 · :7368 · :7379 · :7378 · :7388 · :7388 .: 7398 .:7398 · :73A9 · :73A8 · :73B9 · :73B8 .: 7:3C9 · :73C8 · :73D9
CD 37 77 9D 99 66 77 DD BB 6E 55 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF AA AA AA AA AA AA AA AA AA AA AA AA FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DA DA AA AA AA AA AA AA FF FF CD 37 EE BB BB 6E 66 99 EE BB 66 99 66 99 66 99 CE 3B 77 yD
EE 99 99 FF FF FF FF FF "'F FF 55 AA AA AA AA AA AA
BB 6':, E6 FF FF FF FF FF FF FF 55 AA AA AA AA AA AA
CD 37 77 9D 99 66 77 DD BB 6E 55 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF AA AA AA AA AA AA AA AA AA AA AA AA FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DA DA AA AA AA AA AA AA FF FF CD 37 EE BB BB 6E 66 99 FF FF 66 59 66 99 66 ,?'y CE 3B 77 '?D EE 88 99 66 99 E'"'-' FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 55 AA AA AA AA AA AA AA AA AA AA AA AA
CD 37 77 9D 99 66 77 DD BB 6E 55 55 FF FF FF FF FF FF FF FF FF FF FF FF FF FF AA AA AA AA AA AA AA AA AA AA AA AA FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DA DA AA AA AA AA AA AA FF FF CD 37 EE BB BB 6E 66 99 FF FF 66 59 66 99 66 99 CE 3B 77 9D EE 88 9'?' 66 .;";- E6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 55 55 AA AA AA AA AA AA AA AA AA AA AA AA
CD 77
99 77
BB 55 FF FF FF FF FF FF FF AA AA AA AA AA AA FF FF FF FF FF FF FF FF DA AA AA AA FF CD EE BB 65 FF 56 66 66 CE
,, ""
EE 99 99 FF FF FF FF FF FF FF 55 AA AA AA AA AA AA
159
.:7470 · :7478 .:7480 .:7488 .:7490 .:7498 .:74A0 .:74A8 .:74B0 .:74B8 .:74C0 .:74C8 .:74C0 .:74C8 .:74D0 .:74D8 .:74E0 .:74E8 .:74F0 .:74F8 .:7500 .:7508 .:7510 .:7518 .i7520 .:7528 .:7530 .:7538 .:7540 .:7548 .:7550 .:7558 .:7560 · :7568 .:7570
55 FF AA FF FF FF FF FF 97 55 AA FF AA FF FF 37 BB 6E EE AA 59 99 99 3B B7 BB BB 6E FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF A7 55 AA FF AA FF FF CD EE BB BA AA 56 66 66 CE DD EE EE BB FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF A7 55 AA FF AA FF FF 37 BB 6E EA AA 55 99 99 3B B7 BB BB 6E FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF A7 55 AA FF AA FF FF CD EE BB BA AA 56 66 66 CE DD EE EE BB FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF A5 55 AA FF AA FF FF 37 BB 6E EA AA 55 99 99 3B 87 BB BB 6E FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF A9 55 AA FF AA FF FF CD EE BB BA AA 56 66 66 CE DD EE EE BB FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF A9 55 AA FF AA FF FF 37 BB 6E EA AA 55 99 99 3B B7 BB BB 6E FF FF FF FF FF FF FF
55 FF AA FF FF FF FF FF A9 D5 AA FF AA FF FF 9D EE BB BA AA 56 66 66 CE DD EE EE BB FF FF FF FF FF FF FF
.:7638 .:7640 .:7648 .:7650 .:7658 .:7660 .:7668 .:7670 .:7679 .:7680 .:7688 .:7690 · : 7,598 .:76A0 .:76A8 .:76B0 .:76B8 .:76C0 · :76C8 .:76D0 .:76D8 .:76E0 · :76E8
AA AA 99 66 26 6E EE 66 9D AA AA AA AA AA 55 FF FF FF FF FF FF FF FF
AA A9 66 99 89 BB BB 99 77 AA AA AA AA AA 55 FF FF FF FF FF FF FF FF
AA AA 99 66 26 6E EE 66 9D AA AA AA AA AA 55 FF FF FF FF FF FF FF ~F
AA A9 66 99 89 BB BB 99 77 AA AA AA AA AA 55 FF FF FF FF FF FF FF FF
AA AA 99 66 26 6E EE 66 9D FF FF FF FF 55 AA AA AA AA AA 55 AA 55 55
AA AA AA A9 AA A9 66 99 66 99 66 99 89 26 89 BB 6E BB BB EE BB 99 66 99 77 9D 77 77 DD 77 77 DD Tr 77 DD 77 77 DD 77 DD 77 DD EE BB EE 66 "7"7' 66 66 99 66 66 99 66 66 '7"7' 66 99 '::,6 'i9 66 9'i 66 '7'9 64 '7'9
9'7' 66 99
.: 76F0 55 55 55 55 FF 88 EE 88 AA AA AA AA FF 77 DD 77
.:76F8 .:7700 .:7708 · : 771 0 · : 7 71::;:
AA AA AA AA
AA AA AA AA
AA AA AA AA
AA AA i"A AA
· : 7720 AA
f~A
AA AA
· :7722 AA AA AA AA
.:7730 AA AA AA AA .:7738 B5 85 85 85 .:7740 FF FF FF FF
FF FF FF FF FF FF FF FD FF
77 DD 77 DD 77 DD 77 DD
77 77 77 77
DD 77 DD
DD DD ED FF
77 77 AD FF
DD DD
AB FF
.:7748 55 55 55 55 55 55 55 55
· :7578 55 55 55 55 55 55 55 55 .:7580 55 55 55 55 55 55 55 55
.:7750 FF FF FF FF FF FF FF FF .:7758 FF FF FF FF FF FF FF FF
.:7588 · : 75913 · :7598 .:75AO
.:7768 AA AA AA AA AA EA EA EA .:7770 AF AF AF AB AB AA AA AA .:7778 FF FF FF FF FF FF FF 7F
I
55 AA 55 AA
55 AA 55 AA
55 AA 55 AA
55 AA 55 AA
55 AA 55 AA
55 AA 55 AA
55 AA 55 AA
:75A8 55 55 55 55 55 55 55 55
.:75BO .:75B8 .:75C0 .:75C8 .:75D0 · :75D8 .:75E0 · :75E8 .:75F0 .:75F8 .:7600 .:7608 · : 7.::,1 0 .:7618 .:7620 · :7628 .:7630
160
55 AA 55 AA AA FF FF FF FF FF FF FF FF BF AA AA AA 5E 99 6B D5
AA FF FF FF FF FF FF FF FF BF AA AA AA 57 66 A8 75
AA FF FF FF FF FF FF FF FF BF AA AA AA 55 7F A8 D5
AA FF FF FF FF FF FF FF FF BF AA AA AA 55 7F AA 75
AA FF FF FF FF FF FF FF FF BF AA AA AA 55 7F AA D5
AA FF FF FF FF FF FF FF FF BF AA AA AA 55 7F AA 85
AA FF FF FF FF FF FF FF FF BF AA AA AA 55 5F AA 95
AA FF FF FF FF FF FF FF FF 8F AA AA AA 55 5F AA B5
.:7760 7E 5F 57 57 57 57 55 55
.:7780 55 56 55 56 55 56 55 56
.:7788 .:7790 .:7798 .:77A0 .:77A8 .:7780 .:7788 .:77C0 .:77C8 .:77D0 .:77D8 .:77E0 .:77E8 .:77F0 .:77F8 .:7800 .:7808
DO OD 37 E6 66 BB 87 DD DD DD DD DD 99 66 66 66 99
77 77 CD 99 99 EE DD 77 77 77 77 77 66 99 99 99 66
DD DD 37 E6 66 8B B7 DD DD DD DD DD 99 66 66 66 99
77 77 CD 99 99 EE DD 77 77 77 77 77 66 99 99 99 66
DO DD 37 E6 66 BB 87 DD DD DD DD DD 99 66 66 66 99
77 '( CD 99 99 EE DD 77 77 77 77 77 66 99 99 99 66
DD DD 37 E6 66 88 B7 DD DD DD DD DD 99 66 66 66 99
77 77 CD 99 99 EE DD 77 77 77 77 77 66 99 99 99 66
• :78113 · :7818 • :7829 • :7828 · :78313 • :7838 · :7840 • :7848 • :7858 • :7858 • ;78613 · : 7858
77 00 77 00 77 00 77 00
99 99 EE EE DO BB 77 77 77 77
77
66 66 BB BB 77 EE DD DD DO DO DD
99 99 EE EE DO BB 77
77
77 77
77 DC 77 DO · :7~.7S EF 88 EE , :7888 :=F BF SF · : 788:? 1'" .. I=F FF ,: 7890 ;=1= =F FF · :7898 FF F:C FF · : 78Ae FF FF FF • : 7:3A8 r·.!:' !')'" D!5 .: 7880 AA AA AA · :7888 7F 5<; 51= · :78'::-0 FF FE FF • : 78C:3 97' 6~ '-;09 .: 78DO DD 77 DO ..... :78D8 37 .... 37 · :78E8 E6 99 E6 , : 78E;3 EE B8 EE -I=" 9B EE .: 78Fe 1:._ · :78F8 E6 9 C E6 · : 7'7'8£1 DD 77 DD , :7908 DD 77 DD · : 7'7'18 77 DO 77 • : 7918 DO 77 DD • :7928 DD 77 DD · :7928 9'7' 66 9'? .: 79313 66 99 66 · :7938 99 66 99 , :7949 EE BB EE · :7948 99 66 '7'9 ,:7958 DD 77 DO • :7958 99 66 99 .:7969 77 DD 77 • :7968 99 66 '?9 · :7979 EE eB EE • :7978 DD 77 DD ,:7989 DO 77 DO , :7988 77 DO 77 .:7998 77 DD 77 , :7998 77 DO 77 • : 79A13 DD 77 DD • :79A8 DD 77 DO , : 79B13 77 DD 77 • :79B8 77 DO 77 • : 79C13 AE BB EF • :79C8 55 55 55 • : 79D13 FF FF FF • :79D8 FF FF FF • : 79E9 FF FF FF • ;787:':-
..'~
,~
I
~
99 99 EE EE 77 DO EE BB DD 77 DD 77 DO 77 DO 77 DC' 77 77 DO BE, EE SF BF FF FI= 66 66 BB BB
FF
~!=
FF FF FF FF F!5 B!S riA AA SF 5F
FE
rF
.::.,:, ,~ ? 77 DD
CD 37 99 E6 88
9B ?y 77 77
DD 77 77
66 '7'9 66 BB 66 77
66 DO 66 BB 77 77
DO DO DO 77 77
DD DO 8B 55 FF FF FF
66 66 BB BB 77 EE DO DD DD DD DO 77 B8
6F FF FF FF FF AD o-lA 57 FE 65 77 CD 99 8E BB 9?
99 99 EE EE DO BB
66 66 BB BB 77
EE DD DD DO DO DO DO 77 EE 88 6F 58 FF FF "F FF FF FF FF <;AD AD AA AA 57 57 FF FE 77 77 77 77 77
,~
'n 66 DO 77 37
E6 E EE ::E EE E6 E6 DD 77 DO DD 77 DO 77 ;)D 77 DD 77 DD DO 77 DO 99 66 99 66 99 66 99 66 99 EE BB EE 99 66 9'7' DD 77 DO 99 66 99 77 DO 77 99 66 99 EE BB EE DO 77 DO DO 77 DO 77 DD 77 77 DO 77 77 DO 77 DD 77 DO DD 77 DO 77 DD 77 77 DD 77 EE BB EE D5 D5 D5 FF FF FF FF FF FF FF FF FF
[::)
'7'7' 1;:8
38
97' 77 77
DD 77 77
66 9'7' 66 BB 66 77
66 DO 66 BB 77 77
DO DO DD 77
77 DD DD 8B 05 FF FF FF
· :79E8 · :79F8 · :79F8 • :7A88 • :7A98 • :7A10 • :7A18 • :7A213 • :7A28 • :7A313 • :7A38 • :7A413 • :7A48 • :7A513 • :7A58 • :7A613 • :7A68 • :7A713 • :7A78 , :7A813 • :7A88 • :7A99 • :7A98 , :7AA8 , :7AA8 , :7AB9 • :7AB8 · :7AC13 , :7AC8 • :7AD9 , :7AD8 , :7AE9 · :7AE8 , :7AF8 · :7AF8 .: 7B99 · :7B98 • :7B19 · :7B18 , :7B29 , :7B28 ,:7B38 , :7B38 , :7B48 · :7B48 ,:7859 , :7858 .: 7B68 · :7B68 , :7B78 · :7B78 .: 7888 · :7B88 · :7B98 , :7898 · :7BA0 , :7BA8 · :78B8 · :78B8
F9 AA AB 55 66 66 38 E6
F9 AA AB 56 99 99 CE 99 77 DD EE BB E6 99 DD 77 DD 77 77 DD EE BB 99 66 99 66 66 99 99 66 EE BB 99 66 99 66 99 66 99 66 99 66 DO 77 DO 77 99 66 DD 77 DD 77 DO 77 DD 77 77 DO 66 99 77 DD 77 DD 95 A5 FF FF FF FF FF FF FF FF 05 05 FF FF A7 A'7' BB EE 99 66 2E 8B E6 99 EE BB EE 8B E6 99 AA AA AA AA AA AA "F FF FF FF FF FI= FF FF FF FF
FE AA AA 55 66 66 38 E6
FE AA AA 96 99 99 CE 99 77 DD EE BB E6 99 DD 77 DD 77 77 DD EE BB 99 66 99 66 66 99 99 66 EE BB 99 66 99 66 99 66 99 66 99 66 DO 77 DO 77 99 66 DD 77 DO 77 DO 77 DO 77 77 DO 66 99 77 DD 77 DD E5 E5 FF FF FF FF FF FF FF FF 05 05 FF FF AA AA BB EE 99 66 2E 8B E6 9'7' EE BB EE B8 E6 99 AA AA AA AA AA AA FF FI=" FF FF FF FF FF FF FF FF
FE AA AA A5 66 66 38 E6 77
EE E6 DD DD 77
EE 99 99 66 99 EE 99 99 99 99 99 DD DO 99 DO DO DD DO 77
66 77 77
E5 FF FF FF FF BD FF AA 7B 99 2E E6 EE EE E6 AA AA AA FF FF FF FF FF
FE AA AA A6 99 99 CE 99 DD BB 99 FF FF 55 FF AA AA 55 AA FF AA AA AA AA AA FF FF AA FF FF FF 55 FF AA FF FF A5 FF FF FF FF AD FI= AA 6E 66 8B '7'9 BB 88
99 AA AA AA FF FF FF FF FF
FE AA AA AD 66 66 38 E6 77
EE E6 AA AA AA 55 FF FF FF FF 55 FF FF FF FF FF AA AA FF AA AA AA AA AA FF AA AA F9 FF FF FF FF AB FF AA 7B 99 2E E6 EE EE E6 AA AA AA FF FF FF FF FF
FE EA AA A7 99 99 CE 99 DD BB 99 AA AA AA 55 FF FF FF FF 55 FF FF FF FF FF AA AA FF AA AA AA AA AA FF AA AA FE FF FF FF FF AB FF AA 5E 66 8B 99 BB BB 99 AA AA AA FF FF FF FF FF
161
.:78C8 .:78C8 .:78D0 .:78D8 .:78E0 .:78E8 .:78F0 .:7SF8 .:7C00 · : 7C08 · : 7C10 · :7Cl:3 .:7C20 · : 7C28 .:7C30 .:7C38 .:7C40 · :7[:48 .:7C50 .:7C58 .:7C60 .:7C68 .:7C70 .:7C78 .:7C80 .:7C88 .:7C90 .:7C98 .:7CA0 · :7CA8 .:7CB0 · :7C88 .:7CC0 .:7CC8 .:7C00 .:7C08 .:7CE0 .:7CE8 .:7CF0 .:7CF8 .:7D00 .:7D08 .:7010 · : 7Dl '=! .:7020 .:7D28 .:7D30 .:7D38 .:7D40 .:7D48 .:7D50 .:7058 .:7060 .:7068 .:7070 .:7078 .:7080 .:7088 .:7090
162
FF FF FF FF FF FF AA AA FF AA AA AA AA AA AA AA AA A8 55 55 FF FF FF 95 AA F6 99 26 09 BS DO E6 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF B5
FF FF FF FF FF FF AA AA FF AA AA AA AA AA AA AA AA A8 55 55 FF FF FF 95 AA FD 66 89 66 EE 77 99 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF AO
FF FF cF FF FF FF AA AA FF AA AA AA AA AA AA AA AA A8 55 55 FF FF FF 95 AA FE 99 26 09 8B 00 E6 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF AO
FF FF FF FF FF FF AA AA FF AA AA AA AA AA AA AA AA A8 55 55 FF FF FF A5 AA FO 66 89 66 EE 77 99 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF AB
FF FF FF FF FF FF AA AA FF AA AA AA AA AA AA AA AA AA D5 55 FF FF FF E9 AA FF 99 26 D9 B8 DO E6 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF AB
FF FF Fe FF FF FF AA AA FF AA AA PiA AA Ai; AA AA AA AA D5 55 FF FF FF FE AA FF 66 89 66 EE 77 99 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF AA
FF FF FF FF FF FF AA AA FF ,~A
AA AA AA AA AA AA AA AA D5 55 FF FF FF FF EA FF 09 26 09 BB 00 E6 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF AA
FF FF FF FF FF FF AA AA FF AA AA AA AA AA AA AA AA AA 85 55 FF FF FF FF EA FF E6 89 66 EE 77 99 55 55 55 55 55 55 55 55 AA 55 55 AA 55 FF 55 55 55 55 55 55 55 55 55 55 55 FF AA
. :7D98 .:7DA0 .:70A8 .:70B0 .:7D88 .:70C0 .:7DC8 .:7000 .:7DD8 .:7DE0 .:70E8 .:7DF0 .:7DF8 .:7E00 .:7E08 .:7E10 .:7E18 .:7E20 .:7E28 .:7E30 .:7E38 .:7E40 .:7E48 .:7E50 .:7E58 .:7E60 .:7E68 .:7E70 .:7E78 .:7E80 .:7E88 .:7E90 .:7E98 .:7EA0 .:7EA8 .:7E80 .:7EB8 .:7EC0 .:7EC8 .:7ED0 . :7ED8 .:7EE0 .:7EE8 .:7EF0 .:7EF8 .:7F00 .:7F08 .:7F10 .:7F18 .:7F20 .:7F28 .:7F30 .:7F38 .:7F40 .:7F48 .:7F50 .:7F58 .:7F60 .:7F68
55 FF FF FF FF 95 AA B7 3B D9 77 BB B7 FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA E5 55 55 AA AA AA 8D FF 26 D9 66 99 E6 80 E7 91 11 17 7E
55 FF FF FF FF A5 AA AC CE 66 DO EE DD FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA F9 55 55 AA AA AA AD FF 89 66 99 66 99 EB E7 AE EE 78 EE
55 FF FF FF FF E9 AA A7 38 D9 77 BB B7 FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA F9 55 55 AA AA AA AD FF 26 D9 66 99 E6 DE 58 00 99 87 DE
55 FF FF FF FF FA AA AC CE 66 00 EE DD FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA FE 55 55 AA AA AA A8 FF 89 66 99 66 99 B9 EE EE EE 78 EE
55 FF FF FF FF FF EA AB 3B 09 77 BB B7 FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA FF 95 55 AA AA AA A8 FF 26 D9 66 99 E6 92 95 91 10 87 9D
D5 FF FF FF FF FF EA A8 CE 66 DD EE DO FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA FF 95 55 AA AA AA AA BF 89 66 99 66 99 E7 BE EE EE 87 EO
D5 FF FF FF FF FF FA AA 3B D9 77 BB B7 FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA FF E5 55 AA AA AA AA 8F 26 D9 66 99 A6 90 91 00 11 99 DE
85 FF FF FF FF FF 7A AA CE 66 DD EE DD FF FF AA FF AA FF AA AA 55 FF AA AA FF FF FF FF FF FF FF FF FF 55 AA FF FF FF AA FF E5 55 AA AA AA AA AA 89 66 99 66 99 BE 5D 92 BE BE EA
· :7F7e · :7F78 · :7F88 · :7F88 · :7F98 • :7F98 · :7FA8 · :7FA8 • :7FBe · :7FB8 • :7FC8 • :7FC8 • :7FD8 • :7FD8 · :7FE8 • :7FE8 • :7FF9 · :7FF8 • :8888 • :8998 • :8919 • :8018 • :8828 • :8828 • :8838 • :8838 .: 8948 • :81348 .: 8858 • :81358 .: 8969 · :8868 · : 81379 · :8978
CE 18 8E 78 E7 EE 88 EE 87 89 95 99 9E 89 89 89 89 98 89 E5 95 E8 A5 85 85 EE 95 75 C8 89 8E 95 E5 Be
• :8088 1:15
• :8886 · :8898 · :8898 · :88Ae · :89A8 .: 8888 · :8888 • :88C8 · :88C8 • :89D8 · :89D8 • :8eEe · :88E8 · :88F8 · :88F8 • :81813 • :8188 · : 8119 • : 8118 .: 8128 • :8128 • :8139 • :.8138 .: 8149
D5 98 58 ec E5 8E 5E E9 89 ED 5E 135 ED 8F 9E 85 85 9E C8 AE 95 95 8E C9
EE 8E EE 87 EE EE 89 8E 78 8E 9E 19 79 89 89 99 89 89 89 D5 8E 25 85 85 E9 85 25 58 C8 85 8E 95 5E 8C 05 DE 85 DE ec 5E 8E A8 5E 88 DE 5E 5E ED E8 EE 85 DE 8E 88 8E 513 E5 8E C9
EC 9A 88 E7 88 EC 88 88 E8 9E lE 19 79 8E 98 98 89 98 89 95 95 95 85 85 95 8E 85 E8 88 95 95 89 E9 8C 85 ED D5 8E 9C 85 8E 19 lE 88 8E 58 58 5E 8C 9E 85 95 8E Fe E9 E8 95 BE B9
EC EE E8 E8 E8 EE EE 813 E8 9E 89 E9 CF E8 E9 89 E9 8C 88 E5 85 E5 F8 88 89 75 85 FC C8 E9 95 E8 9C 8C 89 ED D5 C8 813 85 E8 88 CF C8 E9 ED 5E CF Fe 89 E5 E5 C9 FC 58 EE 85 F9 CF
88 88 18 E8 88 CE CE 98 E8 89 9A 99 C8 79 98 98 89 8C 89 15 95 5E 8C 85 85 85 15 C8 98 E9 eE 95 8C 8C 8E E8 85 EC 9B 95 85 8E 8E 88 89 ED 85 CE eF 85 8E 15 8C CF 85 9E 15 9C CF
EE EC 88 88 E7 7E EE EE 78 E9 E9 EE 8C 89 E9 E9 99 88 98 E5 E7 85 C8 88 85 85 85 C8 9C 89 89 E8 FC 9C 89 88 8E C8 88 85 E5 5E CF C8 89 E8 5E CF EC 58 95 58 8C CE A5 8E A5 C9 CE
81 CE A8 78 82 9D EC 88 713 89 18 E8 8C 89 E9 9E 89 C8 89 15 5E 95 9C 85 95 85 95 C8 138 89 85 99 88 8C B9 58 E9 Fe CB 89 85 95 9F C8 8E E8 8E 8F 88 95 8E 8E eF C8 85 lE E5 8C C9
EE 8E 78 87 E9 8E EC 88 B7 89 EE E9 9E 82 89 8E 89 89 99 45 E8 5E 58 58 EE 15 95 88 C8 89 85 7E C8 88 5E 88 E8 Fe 88 E9 85 .E5 88 88 5E E8 EE CF C8 E5 BE 9E CF C8 85 E8 E8 C9 C8
· : 8148 · : 8158 · :8158 .: 81613 • :8168 .: 8178 · :8178 • :8188 · :8188 • : 8198 · :8198 · :81A8 · :81A8 • :8188 · :8188 .: 81C8 • :81C8 .: 81D8 • :81D8 · :81E9 • :81E8 .: 81 F9 • :81F8 · :82813 · :8288 · : 8218 · :8218 · :8228 · :8228 • :8238 · :8238 • :8248 • :8248 · :8258 • :8258 • :8269 · :8268 • :8278 · :8278 · :8289 · :8288 · :82913 · :8298 · : 82A8 · :82A8 · :8288 · :8288 · :82ce • :82C8 · :82D9 · :82D8 • :82E8 · :82E8 • :82F8 • :82F8 • :8389 · :8388 .: 8318 · :8318
5E 5E 5E 5E CF 85 E9 8E 9E 8F 5E 85 9E 8E 8F 19 15 95 9E 9F E9 59 E9 5E F9 85 89 85 8E eF 85 98 59 99 CF 85 58 85 59 85 85 58 89 85 F5 85 8E 9E 95 E5 5E E5 5E 5E 58 8E 5E 9E 8E
5E 58 5E 5E CF 5E E5 EE lE FC E8 85 EE 8E 8F EE 15 EE E5 9F E9 58 E9 5E 8F 85 89 B5 EE ec 85 B9 95 AE 8F 85 89 95 EE F8 85 89 B5 E9 5F 85 BE 85 E5 F8 5E 5E 5E E9 E5 E8 DE BE E8
89 E5 5E 5E CF 89 15 8E 9E 8F 89 95 9E E5 9F 89 15 lE E5 9F 89 95 E9 8E F9 85 98 85 lE 9C 85 95 95 8E 8C 95 85 95 9E F9 95 89 85 8E 8F 95 lE 15 E5 8F 513 5E 5E E5 F5 85 95 9E 95
58 5E 5E CF CF 89 E5 8E C8 FC 89 E5 8E FC CF 98 E5 EE FE CF 89 59 E9 E8 F8 85 89 85 EE FC 85 89 95 EE FC 85 89 95 EE CF 58 89 85 EE C9 E8 8E 85 EE F8 5E D5 5E E5 CF EE E5 8E E9
58 5E 5E ec FC E9 85 lE C8 8F E9 85 9E EC 8F 89 95 8E EC CF 98 95 E9 8C F8 95 98 85 E5 C9 85 89 85 9E C9 B5 95 95 8E C8 89 89 95 9E C8 8E 8E 15 9E 8C 5E 5E 5D E5 8C 95 lE 9E E9
5E 5E 5E CF CE E8 E5 E5 C8 C8 EE E5 EE C8 EC EE E5 EE C9 EC 89 59 E9 C5 E8 59 98 85 E5 C9 89 58 85 5E E8 89 89 95 58 CE 89 89 85 8E E8 89 E9 75 7E EC 5E E8 5E 5E CE 9E E8 5E E9
5E E5 E8 eF C8 89 15 85 8F 9C 9E 9E 9E 9F 89 E9 59 85 C9 C8 89 85 E9 95 88 B9 58 85 E5 C8 9B 58 95 95 C9 98 58 85 E5 C8 98 85 89 5E C9 9E 95 15 9E 8C 5E 5E 5E E5 C8 85 lE 15 9E
5E E8 5E CF C8 E9 5E 9E 8F 88 E9 E8 5E CF C8 58 ED EE E9 89 59 E9 E9 58 88 89 85 E8 5E C8 98 B5 59 5E C9 89 85 85 E5 C8 89 85 85 EE C9 8E 85 E5 58 C8 5E 5E 5E 5E C8 85 2E 8E 8E
163
· :83213 · :8328 · :83313 · :8338 · :83413 · :8348 · :8359 · :8358 · :8369 ..:8368 • :83713 · :8378 · :8389 · :8388 • :8399 · :8398 • : 83A9 · :83A8 • :83B9 · :83B8 · :83ce · :83C8 · :83D9 · :8308 · :83Ee · :83E8 · :83F9 · :83F8 .: 841313 · :84138 · : 8419 • : 8418 · :8429 · :8428 · :8439 · :8438 · :84413 · :8448 · :84513 · :8458 · :84613 · :8468 · :84713 • :8478 · :84813 • :8488 • :8499 · :8498 · : 84A9 · : 84A8 • :84B9 · :84B8 · :84C9 • :84C8 · :84D9 · :84D8 • :84E9 · :84E8 · :84F9
164
8E FE FE FE 8E FE 9E 9E AE DE EE FE F9 8E 49 4E 4E 5E FE A7 lE DE AE 4E B7 FB 2E AE 85 eE FB FE B5 Fe eE 1313 45 25 08 Fe Fe F9 4E 25 FE 5B F9 85 F9 FE FF F5 F9 5E FE 4B F5 FE FE
5E FE FE 9E FE eE OE 6E eE FE DE 6E OC OE FE 2E 4E 9E 6E CE lE AE FE BE F7 AB FE F5 CE 4E 69 55 eE 813 EE Fe A9 F5 4B 20 68 19 25 Fe FE FB F9 F5 F5 FE FC F5 F9 F9 FE F9 F5 FE F5
Ee FE FE FE FE 2E FE FE 4E AE 138 9E 6E FE FE F7 9E AE lE 6E F9 EE AE 8E C7 38 FE FE 513 2E 19 eE D5 Fe F5 DC 8E 5E F5 8E FB eE F5 49 FE FB 49 F5 95 FE FC 45 FE FE 4E FB C5 FE FE
Fe FE FE FE FE FE FE 4E AE 8E 17 AE FC 8E FE A7 BE 4E lE F9 139 B9 FE C13 AF F9 99 4E De CC F5 45 FE Ae Ee 9B F5 4E 95 3F 2B 05 15 F0 FF FC F9 F5 F5 Fe 9F F5 F5 F9 F9 F9 F5 FE EE
ec FE FE FE FE 6E 2E 8E AE 9E 49 FE AE BE AE 99 FE FE FE BE 813 2E 4E 4E FE 9B 69 EE BE FE Fe F9 4E ce EE 4C 05 55 813 FE F8 F5 135 FE Fe FC FE FE F5 FC FC F5 F5 FE Fe FC F9 F5 FE
ce FE FE FE OE eE 9E FE FE FE AE 9E lE FC F9 EE 89 FE 19 A9 FE 29 513 9E AC eB FE B5 413 Be F5 89 Fe lE 113 A8 135 D5 F5 Ae F8 45 05 135 FF FC F9 F9 F9 F9 F9 D5 F5 Fe F9 F9 F9 FE FE
eB FE FE FE 4E 9E FE 4E 8E CE lE 9E 9E FE FE 7E 9E AE E9 FB FE 49 A9 FE 2B eE FE FE AE 6B Ee !:IB F9 Fe F8 FC F5 F0 95 2F 48 95 Fe 45 FB Ae F5 F9 EE FC F9 45 F5 45 FC FC EE F5 F5
ce FE FE FE AE FE 9E 9E CE 9E FE FE FE 9E AE 8E EE 4E F7 9E FE AE 19 FE 1313 FE AE F5 FE 5B 913 F5 Fe 2E OC 1313 D5 213 65 Ee lC Ee 55 F5 F8 FC F5 F9 F9 FF FC F9 F5 F9 F9 F9 F9 F5 FE
· :84F8 • :851313 · :85138 · :85113 • :8518 · :8529 • :8528 · :8539 • :8538 • :8549 • :8548 • :8559 • :8558 • :8569 • :8568 · :8570 · :8578 • :8589 · :8588 · :85913 · :8598 • :85A~ · :85A8 .: 85Be · :85B8 · :85C~ · :85:8 · : 85('13 · :85D8 · : 85E13 · :85E8 · :85F9 · :85F8 · :861313 · :86138 · : 86113 · : 8618 · :86213 · :8628 · :86313 · :8638 · :8649 · :8648 • :86513 · :8658 • :8669 · :8668 · :8679 • :8678 • :8689 · :8688 • :8699 • :8698 • : 86A9 · :86A8 • :8689 • :8688 • :86C0 • :86C8
FE FF 55 F9 eE 9E FF 40 F9 4D 6E F9 5E E5 95 FE 9C 89 F9 45 FE 9C 15 139 8E A;=C A5 19 135 9E 8C C9 E5 F9 AE FC F9 F5 FB FE Fe 99 89 59 4B FF A9 A9 F5 79 49 DE F5 95 9E E0 60 9D
FE FF F5 FE FE 3E 9F FO 9E DD FE 89 F9 8E F5 9E 813 45 FE 85 eE FC F5 39 F5 FE
?C 05 89 45 AE iC F9 15 49 Ae FF F9 45 FB AE 6C F9 C5 FB 213 AC B9 F5 89 AB F9 EE B5 AE A0 F5 90 CD
4E FB F5 45 FE FE 5F E5 lD FD 9E F9 95 4E 45 lE AC 65 FE 25 FE FC A5 FE E5 9E 8C E5 F9 B5 CE 4C A9 65 29 FE EF F9 F8 FB FE 8F 9B F9 AB 8E DC FB D5 99 FE 9C 6E 15 FE 50 35 EE FD
FF Fe F9 F5 FE FC 99 69 FD BO 69 49 F5 6E 85 OF Fe 95 FE F5 513 913 A5 4E F5 139 Fe F5 B9 15 5F FC A9 F5 49 CE F0 F9 F5 FB 9E 013 F9 05 FB FE E9 29 85 89 FE BF 95 F5 DE 19 CC FD 2E
FE Fe F9 F5 BE 6E 99 49 90 20 9E 89 45 4E F5 FE AC 65 BE F5 613 2C F5 BE 85 49 Fe F5 139 F5 45 AC FB 05 E9 De FF F'i
F5 A9 eE FF 49 OB lB FE BF 85 F5 5B AE 4F F5 95 8E 9E 4F DD 2D
6F Fe F9 F5 6E FF F9 99 BO 90 F9 99 25 FE 9E BF eE 45 FE B5 FF Fe 85 FE 135 FF Be 05 49 05 Ae AC FB F5 139 Fe FE F5 F9 89 E0 ec E5 F5 FB eE A9 F5 F5 A9 AE FC A5 B5 4E FE F9 A9 65
4C Fe E9 F5 Fe 4F EB A9 FO F5 4C 49 95 CE lE 6C FB B5 F5 135 ec FC 85 FE 4E 8F 1313 15 E9 F5 6F FC 25 89 139 Fe F0 F5 F9 FB 4E 6B 85 59 89 913 FB 85 A9 05 49 FB 95 2E FE 4E 18 FD FD
Fe Fe F9 F5 AE 2F C9 FO E5 4E 29 49 F5 FO FE Fe 4C 45 15 FE ce DB 4E A5 99 ED FC F9 A5 FE FE ec 95 29 49 Fe F0 F5 09 A8 20 FB F5 99 A9 A9 9B A5 89 F9 F5 9B D5 FE 9E 0E F8 ED CD
• :8609 · :8608 • :86E9 • :86E8 .: 86F9
3D FD 5E A5 40
FO 85 29 05 F5
CO 09 B9 4E AE
90 49 F9 25 DE
AE AE EF FE F5
FO 2E 29 F5 05
80 AE 99 9E A5
AD 4E F9 FE F5
• :86F8 .: 8799 • :8798 • : 8719
F5 95 AE 91
15 35 49 99
A5 2E E5 FF
C5 F5 8C FF
F5 F5 AF 99
BO FE 4E 99
AE FE 2C FF
F5 AE lB FF
Listing C-17: The SPRITE MAKER Program 1 REM SAVE"d)9:MAKE SPRITE",8 5 P=9:BASE=23552:CO=1:CL=9:CK=9 19 REM CLIMB SCREEN MAKER 29 POKE 53269,3 25 IF PEEK(32769)=lTHEN GOT043 39 IF A=0 THEN A=l :LOAD "SUB.O" ,8,1 49 IF A=l THEN A=2:LOAD "CLSP2",8,1 43 INPUT"IJJHAT 1 S THE 1"1 I.E NAME" ;t'~$ 59 POKE 56578,PEEK(56578)OR3:REM BANKl 52 FOR X=9T07: POKE 24576+X, 13 : POKE 24576+ 8+X ,"?:)~ :'Ji:x.T 69 POKE 56576,(PEEK(56576)AND 252)OR 2 79 POKE 53272,129 89 POKE 53287,7:POKE 53288,7 81 POKE 53275,9 85 SX=24:SY=59:0X=9:0y=e 913 POKE 53248,24:POKE 53249,59 91 BC=6:POKE 53280.8C:POKE53281.BC 92 POKE 53259,255:POKE 53251,59' 95 IF PEEK(32768)=1 THEN GOTO 132 96 IF Q=2 THEN GOTO 121 199 SYS 32768+3 1113 3YS 327.S8~6 121 POKE 32769,1 139 FOR X=l TO 8:POKE 23552+X+1015,0:NEXTX 131 POKE 24568,1 132 POKE 53287 f e 149 REM LOOP 159 Jl=PEEK(5632e):Jl=25~-Jl 169 J2=PEEK(56321):J2=255-J2 179 1== Jl AND 16 1813 IF F = 9 THEN GET A$ 199 IF A$=" {??}"THEN P=ABS(i-P:> 299 IF A$=" C??} "THE"'l P=P 291 IF A$=" {??} "THEN CK=PEEK( 532(5) : CK=( Cr(+ 1 )ANDi 5: POKE 53285, CK 292 IF A$="(??}"THEN CO=«CJ+l)AND15):P[:>(E 53288.CO 293 IF A$="?}"THEN BC=«BC+~)ANDi5) 213 4 IF A$=" (??) Ii THEN CL=PEEK ( 53286) : CL= ( CL + 1 ) AND 15: POKE 5328':., CL 2135 IF A$=1i {??} "THEN ROKE53276, 2 296 IF A$="{??}"THEN POKE53276,9 297 IF A$="S" THEN GOSUB2999 298 IF A$="L" THEN GOSUB3990 299 IF A$="C" THEN GOSUB4990 219 A$="" 220 IC(Jl AND 1)= THEN OY=OY-1 2313 IF(J1 AND 2)= 2 THEN 01'=01'+1 249 IF(J1 AND 4)= 4 THEN OX=OX-1 259 IF(Jl AND 8)= 8 THEN OX=OX+l 279 IF OX<9 THEN OX=23 289 IF OX>23 THEN OX=9 299 IF OY<3 THEN OY=24 399 IF OY)23 THEN OY=3
165
3131 SX=24+(8*OX):SY=5e+(8*OY) 3132 IF SX(256 THEN POKE 53264,13 3133 IF SX>255 THEN SX=SX-256:POKE 53264,3 3113 POKE 53248,SX:POKE 53249,SY 3213 IF c=eTHEN C=l:POKE 53287,1 :3313 IF C= 1THEN c=e: POKE 53287.13 3413 POKE BASE,P 3513 POKE 5328e,8C:POKE 53281,BC 359 IF F=16 THEN POKE BASE+(OY*4e)+ox,p:POKE 55296+(OY*40)+OX,1 3613 SYS32768 4913 GOTO 1413 51313 REM THIS IS 5ee--SAVE THE SCREEN + COLOR 2131313 RE~1 WRITE FILE SUBROUTINE 2010 OPEN 8,8,8,"·;ve:"+N$+" .SP,S,W" 213213 FOR x=e TO 1131313 213313 PRINT~8.CHR$(PEEK(23552+X»: 213413 NEXT X . . 213513 CLOSE 8 291313 RETURN 3131313 REM READ FILE SUBROUTINE 313113 OPEN 8,8,8,N$+".SP,S,R" 313213 FOR x=e TO 101313 313313 GET~8,DB$ 313 35 IF DB$="" THEN DB$=CHR$ ( 0 ) 31336 POKE 23552+X,ASC(DB$) 313413 NEXT X 313513 CLOSE 8 391313 RETURN 4131313 REM CLEAR SCREEN 413113 SYS32768+3 413213 SYS32768+6 413313 RETURN 5131313 REM BANKe 513613 POKE 56578,PEEK(56578)OR3 513713 POKE 56576,(PEEK(56576)AND 252)OR3 513813 POKE 53272,213 521313 RETURN 551313 REM BANKl 55613 POKE 56578,PEEK(56578)OR3 55713 POKE 56576,(PEEK(56576)AND 252)OR2 55813 POKE 53272,1213 561313 RETURN 6131313 REM WORK ON NEW SPRITE 613113 GOSUB 5131313 60213 INPUT "WHICH SPRITE DO YOU WANT TO WORK ON";SP 6039 GOSUB550e 6940 SYS 32768+3 6990 RETURN Listing C-18: The SLlB.O File
B*
PC ·SR AC XR YR SP . ! ce3E :32 013 C3 1313 F6
.: 813013 4C 2A 813 4C 92 813 4C AE
166
• :80138 ,:813113 • :81318 · :813213 • :8828 · : 8132:8 · :81338
813 413 BF 8F 132 136 8~
40 813 7F 7F 131 AA Fe
131 FE FE 813 48 A9 A9
132 FD FD 413 98 78 1313
04 FB FB 213 48 85 85
138 F7 F7 113 8A FB
113 EF EF 138 48 A9 FD 85
213 DF DF 134 A9 5C FE
· : 813413 A8 80 • :8048 B1 FB · :8050 48 E8 · : 8135:3 t=E 68 • : 813613 1313 :3A · : 8136:3 7F C'r .: 813713 Ai 131) · :8078 69 28 .: '30813 85 FC
FE 7F 8D FF F0 135 68 1D :::a Ee 08 De ';>D 013 40 E6 48 EE FE 7F 13:3 De D8 EE 8D FE 7F A5 :35 F8 A9 130 A0 00 AD FF · :81388 i5 De 80 68 68 AA
7F 22 F1 FE AD FF FB 65 7F 68
48 813 A6 A2 FE 7F 18 FC C9 A8
• : E:~~1';'0 68 60 A9 1313 85,FD A9 D8
A0 C8 DC A9 A9 FE FF
130 De D0 5C 1313 E8 FF
A2 F8 F1 85
1313 E6 60 FE ';:' 1 FD Ea 134 FF FF
A9 FE A9 Aa C8 Da 02
01 A5 1313 013 De F2 FF
130 1313 00 013 1313 1313 1313 99 913 1313 1313 139 1313 1313 013 139 913 99 00 FF
1313 130 1313 1313 1313 1313 1313 99 1313 1313 1313 99 1313 1313 013 139 1313 99 FF
1313 1313 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 99
1313 1313 1313 1313 1313 139 1313 99 1313 1313 1313 99 139 99 99 99 1313 99 FF
1313 1313 1313 1313 1313 913 913 99 1313 1313 1313 913 99 99 99 09 99 99 FF
· :813'7'8 • :8eAe · :813A8 • :813813 • :81388 • :80Ce · :8eC8
85 91 FE 85 A2 FB ,se
FE FD C9 FD 1313 E6 t=F
· : 4(17101 · :4078 • :40813 • :4088 • :413913 .: 41398 • :4eAe • :4aA8 • :4eBe • :41388 • :4ece • :49C8 • : 40D9 • :41308 • :40E0 • :4eE8 • :4eFe • :49F8 .:41913
013 1313 FF Ft= FF FF FF FF FF FF FF FF FF FF FF FF FF FF 913
1313 1313 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Listing C-19: The CLSP2 File 8* PC SR AC XR YR SP • ;ce3E 32 1313 C3 1313 F,s
.: 41)1313 • :413138 .:413113 · :41318 • :413213 · :4028 · : 413313 • :41338 • :413413 • :4048 • :49513 • :41358 • :41369 • :4068
FF 139 139 1313 1313 1313 1313 1313 FF 99 1313 139 00 99
1313 FF 913 1313 1313 1313 1313 90 00 FF 139 99 00 90
1313 1313 FF 1313 1313 1313 99 130 013 130 FF 99 139 99
FF 99 913 1313 1313 913 99 90 FF 913 99 99 09 99
1313 FF 1313 1313 1313 1313 99 130 1313 FF 913 99 90 1313
1313 99 FF 1313 1313 1313 99 90 00
130 FF 99 139 1313
FF 99 1313 913 1313 139 99 99 FF 139 1313 99 139 09
00
FF 1313 1313 1313 99 99 1313 99 FF 99 913 99 1313
1313 1313 BF FF FF FF 8F FF FF FF 8F FF FF FF FF FF FF FF 99
Listing C-20: The SCREEN-MAKE Program 1 REM SAVE"d)a:MAKE SCREEN" ,8 5 p=a:BASE=23552:CO=1 113 REM CLIMB SCREEN MAKER 213 POKE 53269,3 25 IF PEEK(32769)=1THEN GOT041 39 IF A=a THEN A= 1 : LOAD "CL8ACK1",8,1 49 IF A=l THEN A=2:LOAD " CLSP 1 " , 8 , 1 41 IF A=2 THEN A=3:LOAD "SLIB.O" ,8,1 48 INPUT"WHAT IS THE FILE NAME"jN$ 50 POKE 56578,PEEK(56578)OR3:REM BANK 1 60 POKE 56576, (PEEK(56576)AND 252)OR 2 79 POKE 58272,120 80 POKE 53287,7:POKE 58288,7 81 POKE 53275,3 85 SX=24:SY=59:0X=9:0Y=9 99 POKE 53248,24:POKE 53249,513 91 BC=6:POKE 5328e,8C:POKE53281,BC 95 REM IF PEEK(32769)=1 THEN GOTO 132 96 REM IF Q=2 THEN GOTO 121 11313 SYS 32768+8:SYS 32768+6
167
121 130 132 140 150 160 170 1:30 190 200 201 202 213:3 204 205 206 207
POKE 327613,1 FOR ><=1 TO :3:POKE 2:3:Y'S';:,'< POI
220 IF(JI AND 1)= THEN OY=OY-l 230 IF(JI AND 2)= 2 THEN OY=OY.l 240 IF(JI AND 4)= 4 THEN OX=OX-l 250 IFeJI AND 8)= 8 THEN OX=OX+I 260 IF F=16 THEN POKE 8ASE+(OY*40)+OX,P:POkE 55296+(OY*40)+OX,CO 270 IF OX<0 THEN OX=39 280 IF OX >3'7' THEN m<=0 290 IF OY{0 THEN OY=24 300 IF OY)24 THEN OY=0 30 i SX=24+ (8*m<) : 8'1=50 + (8*OY) 302 IF SX(256 THEN POKE 53264,0 303 IF SX>255 THEN SX=SX-256:POKE 53264,3 310 POKE 53248,SX:POKE 53249,SY 320 IF C=0THEN C~I:POKE 53287,1 330 IF C=ITHEN C=0:POKE 53287,0 340 POI{E BASE, P: POKE 552'?6, CO 350 POKE 53280,BC:POKE 53281,BC 490 GOTO 140 500 REM THIS IS 500--SAVE THE SCREEN + COLOR 510 REM SYS28672 1000 REM SAl)E FILE 1010 OPEN 8,8,8,14l0:"+NS+ I .BC,S,kl " 1020 FOR X=0 TO 1000 1030 PRINTI=I8, CHR$( PEEK( 23552.>0) ; eiiR'*, , proEK (55296+X) ) ; 1040 NEXT X 1050 CLOSE 8 1900 RETURN 2000 REM LOAD FILE 2010 OPEN 8,8,8,N$+I.BC,8,R" 2020 FOR X=0 TO 1000 2030 GETI=I8,DB$,DCS 2035 IF DB$="ITHENDB$=CHRS(0) 2036 IF DCS="ITHENDCS=CHRS(e) 20413 POKE 23552+X,A8C(DBS):POKE55296+X,A8C(DCS) 2050 NEXTX 2060 CLOSE8 2900 RETURN 3000 REM CLEAR 8CREEN 3010 8Y832768+3 3020 5Y532768+6 3030 RETURN
168
Listing C-21: The CLBACK1 File 8* PC SR AC XR YR SP • ;ce3E 32 1313 C3 1313 F6
• :613130 • :613138 .:6010 • : 6018 • :6020 • :6028 .: 6030 • :6038 • :60413 • :61348 • :6050 • :61358 • :61360 • :6068 • :6070 • :·51378 • :60813 • :61388 • : 613$'13
130 FF FF C0 03 FF FF 013 013 00 00 C0 03 813 013 18 18 130 013
130 133 C0 C0 83 133 C13 130 130 1313 130 FF FF 130 130 38 0C 1313 013
130 06 60 FF FF 06 613 1313 00 FF FF 1313 1313 130 00
C8 133 013 1313
00 0C 30 C13 133 13C 313 1313 1313 133 C13 013 00 013 00 FF FF 1313 013
130 18 18 C0 133 18 18 013 00 06 613 1313 1313 FF FF 08 1313 013 1313
013 30 13C C13 133 30 13C 1313 013 13C 30 1313 130 133 C13 08 013 130 1313
013 613 133 FF FF C13 133 1313 1313 18 18 1313 1313 06 613 013 130 FF FF
1313 FF FF C13 133 FF FF 1313 013 313 0C 013 1313 8C 30 130 1313 133 C13
I=F FF 1313 C0 C13 C13 1313 C3 24 131 18 1313 1313 013 1313 1313 1313 1313 1313 FF FF 1313
1313 1313 C13 C0 C13 C0 013 66 08 132 66 1313 013 130 1313 013 1313 1313 1313 1313 BA FF
1313 1313 C13 C0 C13 C13 1313 18 10 13C C3 1313 1313 013 1313 013 1313 1313 1313 62 FF FF
138 1313 FF FF 88 013 FF 8F 80 813 FF FF 00 1313 FF FF 1313 013 FF FF 013 013 FF 8F 1313 00 FF FF 1313 130 FF FF 08 013 FF FF 1313 1313 FF 8F 1313 1313 FF FF 1313 00 FF FF 1313 130 FF FF 1313 1313 FF FF 01.3 130 FF FF 013 00 FF FF 00 00 FF FF FF FF 130 1.30
1313 130 013 1313 1313 00 1313 1313 1313 1313 1313 130 1313 1313 00 1.30 00 FF
1313 130 1313 1313 1313 00 1313 1313 1313 1313 1313 1313 013 1313 013 00 00 FF
.: 61398 • :60Ae • :6eA8 .: 613813 • :61388 .: 613C13 • :60C8 • :6000 • :60D8 • :60E0 • :60E8 • :60F13 • :613F8 .:6100 • : 61138 • : 61113 • : 6118 • :6120 • : 6128 .: 6130 • :6138 • :61413
86 ec 18 613 3.3 18 €Ie 1313 1313 1313 1313 1313 013 013 C0 ':13 C13 C0 130 1313 130 00 00 18 10 20 40 20 40 313 113 213 30 137 131 1313 3F 13F 1313 FF 1F 03 FF FF FF FF FF F8 FF 81 1313 FF FF 1F 013 1313 013 013 8A 22 1313 88 22 130 1313 FF
• :4078 • :40813 • :41388 • :40913 • :4098 • : 40A13 • :413A8 • :4080 • :41388 • :40C13 • :413C8 .: 41300 • :4008 • :413E13 • :413E8 • :40F0 • :40F8 .:411.30
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 130
313 13C 1313 00 C13 C0 130 66 80 C0 138 1313 1313 130 1313 E0 00 137 1313 FF FF FF
C13 133 1313 C0 C13 C0 130 C3 58 02 18 1313 1313 1313 1313 C13 1313 133 1313 130 1313 1313
Listing C-22: The CLSP1 File B* PC SR AC XR YR SP • ;C133E 32 1313 C3 1313 F6
• :4000 • :413138 .:40113 • :41318 • :40213 • :4828 • :41330 • :4038 • :41.340 • :41.348 • :40513 • :4058 • :4060 • :4068 .: 4070
FF 1313 1313 1313 1313 138 130 1313 1.30 05 FF FF FF FF FI=
00 FF 1313 1313 1313 013 1313 1313 FF FF FF FF FF FF FF
00 1313 FF 1313 1313 1313 130 1313 00 00 130 01.3 013 00 00
FF 1313 1313 1313 1313 1313 1313 1313 FF FF 013 00 013 013 130
1313 FF 1313 1313 00
1313 130 1313 1.30 3F FF FF FF FF FF
1313 1313 FF 1313 013 1313 130 1313 FF FF FF FF FF FF FF
FF 1313 1313 1313 1313 1313 1313 130 22 00 1313 00
1313 FF 1313 1313 1313 1313 1313 1313 FF FF 130 00 00 00 00 00 00 00
FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF 00
Listing C-23: The PHOENIX V1.4N Program • :1000 01 01 01 01 01 01 01 01 • :1008 01 01 01 01 01 01 01 01
• : 1010 01 01 01 01 01 01 01 01 • :1018 01 01 01 01 01 01 01 01
169
.: 11212121 • : 112128 • : 11213121 • : 112138 • : 11214121 • : 112148 • : 11215121 • : 112158 • : 11216121 • : 112168 • : 11217121 • :112178 • : 11218121 • : 112188 • : ~09121 • : 112198 • : 1 121 A121 • : 1 121 A8 • : 1121BI21 • : 1121BB • : 1121CI21 • : 1121C8 • : 1121DI21 • : 1121DB • : 1121EI21 • : 1121E8 • : 1121FI21 • : 1121F8 • : 11121121 • : 111218 .:111121 .:1118 • : 112121 • : 1128 • : 113121 • : 1138 • : 114121 • : 1148 • : 115121 • : 1158 • : 116121 • : 1168 • : 117121 • : 1178 • : 118121 · : i 188 • : 119121 • : 1198 • : 11AI21 • : l1A8 • : l1BI21 • : l1B8 • : 11CI21 • : llC8 • : llDI21 • : llD8 • : l1EI21 • : llE8 • : l1FI21
170
1211 121121 121121 121121 121121 121121 121121 121121 1211 1211 121121 1210 1211 1213 1213 121121 01 1213 121121 121121 1211 121121 1213 121121 121121 1211 1219 121121 121121 121121 1213 1218 I21F I21F I21F I21B 1218 I21F I21F I21F 1219 1218 I21F I21F 121121 1217 1218 1218 1218 121121 1219 1218 1219 1218 1219 1218 1219 1219 121121
1211 121121 1213 121121 1218 121121 121121 121121 1211 1211 121121 00 1211 1213 1213 121121 1211 1213 121121 1213 1211 121121 121121 121121 121121 1211 1219 121121 121121 1211 I21D 1219 1212 1212 1213 121121 1219 121121 121121 121121 1219 1218 121121 121121 1215 1217 1218 I21F I21F I21F 1217 1218 1219 I21F 1219 1219 1218 1218 I21F
1211 121121 121121 121121 121121 121121 121121 1211 1211 1211 121121 121121 1211 1213 1211 121121 1211 03 121121 1213 121121 1211 121121 121121 121121 1211 1211 121121 1217 121121 1211 1219 I21F I21F I21F 1213 1218 I21F I21F I21B 1219 1218 121121 1214 1219 1217 1218 121121 121121 121121 1217 1218 121121 121121 1219 1218 1218 1219 I21F
1211 121121 121121 121121 121121 1213 121121 1211 I21D 1211 121121 121121 1211 1213 1211 121121 1211 1213 121121 1213 121121 1211 121121 121121 121121 1211 1211 121121 121121 121121 1211 1213 1213 121121 121121 I21D 1219 1213 121121 I21F 1219 1218 121121 121121 I21D 1219 1218 I21B I21F I21F 1219 1218 I21F I21F 1219 1218 1219 I21F I21F
1211 121121 121121 1213 121121 121121 121121 1211 1211 121121 121121 1213 1213 1213 1211 0121 1211 03 121121 1213 121121 1211 121121 121121 121121 121121 1213 121121 121121 121121 1211 I21F I21F I21B I21F 1211 1219 I21F I21F I21F 1219 1218 I21F 1213 1218 1219 1218 121121 121121 I21F 1219 1218 121121 1218 1219 1218 1219 121121 121121
1211 121121 121121 1213 121121 121121 121121 1211 1211 121121 121121 121121 1213 1213 1211 121121 1211 121121 121121 1213 121121 1211 121121 I21D 1213 121121 1213 121121 121121 121121 1211 1213 121121 121121 121121 1219 1219 121121 121121 121121 1218 1218 121121 121121 I21F 1218 1218 I21F I21F 1219 1218 1219 I21F I21F 1219 1219 1219 I21F 1219
1211 121121 121121 121121 121121 121121 1211 1211 1211 121121 121121 1217 1213 1213 1211 1210 1211 1211 121121 1211 121121 1213 121121 121121 1213 1213 1211 121121 121121 121121 121121 I21C I21F 1217 I21F 1219 1219 I21F 1211 I21B 1217 1218 I21F 1217 1219 1218 1219 I21B 121121 1219 1218 1218 121121 1219 1218 1219 1219 1213 1219
1211 121121 1211 1213 121121 1217 121121 1211 1211 121121 121121 1211 1213 1213 121121 00 1211 121121 121121 1211 121121 1213 121121 121121 1213 1218 1211 121121 1213 121121 1211 1213 121121 I21F 121121 1219 I21F 1213 121121 1219 1218 I21F 121121 121121 1219 1218 1219 I21F I21F 1218 1218 1218 I21F 1219 1218 1217 1218 I21C 1219
• : llF8 1217 .:12121121 1218 .:121218 1219 • : 121121 1218 .:1218I21F • : 122121 1218 • : 1228 1217 • : 123121 1219 • : 1238 1219 .:124121 I21F • : 1248 1219 • : 125121 1219 • : 1258 1219 • : 126121 1218 • : 1268 I21F • : 127121 1217 • : 1278 1219 • : 128121 1219 • : 1288 1218 • : 129121 1219 • : 1298 1218 • : 12AI21 1219 • : 12A8 1219 .:12BI21 1218 • : 12B8 1219 • : 12CI21 1219 • : 12C8 1217 • : 12DI21 1219 • : 12D8 1218 • : 12EI21 1219 • : 12E8 1219 • : 12FI21 1219 • : 12F8 1219 • : 13121121 1218 • : 131218 1218 • : 131121 1218 • : 1318 1219 .:132121 1219 • : 1328 1218 • : 133121 1218 • : 1338 1219 • : 134121 1219 • : 1348 1219 • : 135121 1219 • : 1358 1218 .:136121 1219 • : 1368 1219 • : 137121 1219 • : 1378 I21C • : 138121 1219 • : 1388 1219 • : 139121 1219 • :1398 1219 .:13AI21 1219 • : 13A8 I21F .:13BI21 1219 • : 13B8 I21C .:13CI21 1219 • : 13C8 1219
1218 1218 1218 1218 1218 1218 1219 1218 1218 1218 1218 1219 1219 1218 1219 1219 1219 1219 1218 1219 1218 1219 1219 1218 1218 1219 1217 121~3
1218 1218 1219 1219 1219 1218 1218 1219 1219 I21F 1218 1219 1219 1219 I21F 1219 1219 1219 1219 I21F I21F 1219 1217 1219 I21C 1219 I21C 1219 1219 I21F 1219
1219 1218 1218 1219 I21F 1218 1219 1218 1218 1219 1218 1219 1218 1218 1219 1218 1217 1218 1219 1219 1219 1217 1218 1218 1218 1219 1219 08 08 1218 1219 1217 1219 1218 1218 1219 1219 I21C 1219 1218 1219 1219 I21C 1219 1219 1219 1219 1219 I21F I21F I21C 1219 1219 I21F I21F I21F 1215 I21F 1219
1219 1218 1218 I21F 1214 1218 1219 1218 1219 1219 1218 1219 1218 1219 1219 1218 1217 1218 1218 1218 1219 1217 1218 1218 1217 1219 1219 1218 1218 1218 1219 1217 1218 1218 1218 1219 1218 I21F 1219 1218 1218 1217 I21F I21F 1219 1219 1219 I21C I21C 1219 1217 I21F I21C I21C 1217 1219 1215 I21C I21C
1219 1219 1218 I21F 1219 1219 1219 1218 1213 1219 1218 1219 1218 1219 1219 1218 1217 1218 1219 1217 1218 1217 1218 1218 1218 1218 1219 1218 1218 1218 1219 1219 1218 1218 1218 1217 1218 I21C 1219 1219 1218 1217 1219 1219 1219 1219 1219 I21C I21C 1219 1217 I21F I21C 1215 1219 I21F 1215 I21C I21C
1218 1218 1219 1217 1219 1218 1218 1218 1218 121121 I21F 1211 1219 1219 1218 1218 1219 1217 1219 1218 1219 1218 1218 1218 1213 I21F 1213 1219 1218 1219 1217 1219 1219 1219 1219 1218 1218 1218 1218 I21F I21F 121121 1218 1218 1219 1218 1218 1218 1219 1219 1219 1218 1218 1218 I21F 1212 1219 1219 1219 1219 1218 1218 1219 1219 1218 1219 1219 1218 1218 1219 121121 1219 1218 1218 1218 1218 1219 1219 1219 1219 09 1218 1218 08 1219 1219 1219 07 1218 1218 1219 1219 1219 1219 1219 1219 1218 1219 1218 1218 1218 1218 1218 1219 1219 1219 1219 1219 1218 1219 1219 1218 1218 1218 1218 1218 1218 1219 1218 1218 1218 1218 1218 1218 1218 1218 I21A 1219 1219 1219 1219 1218 1218 1219 1219 1219 1219 1217 1219 1219 1219 I21F 1219 I21C 1219 1219 1219 1219 1219 1219 1219 1219 1219 I21C I21C 1219 1219 1219 1219 1215 I21F I21C 1219 1217 1217 1219 I21F 1219 1219 1219 1219 1219 1219 1219 I21C I21C I21F
0C 0F 0F 00 00 0F E8 • : 140B E2 • : 1410 E8 • : 141B E2 .:1420 E2 • : 142B EB • : 1430 E2 • • • • • • •
: 1300 : 130B : 13E0 : 13EB : 13F0 : 13F8 : 1400
• : 143B
• : 1440 • : 144B
• : 1450 • : 145B
• : 1460 • : 146B
0C 0C 0C 0F 0F 00 E8 E2 E2 E2 E2 EB
0C 0F 0C 04 00 0F
E2 E2
EB E8 E8 EB EB E8 EB E8 E8 E8 EB EB EB E8 EB EB EB E8 E8 E8 EB E8 13 EB E8 EB EB El EB EB E8 E8 13 E8 E8 E8 EB 13
0C 0C 0'3 02 00 00
82 E2 E2 E2
E2 E2 E2 B2 E2 E2 E2 E2 El E2 E2 E2 E2 E2 E2 E8 EB E2 E2 E2 E2 E1 E2 E8 E2 E2 E2
• : 1470 E2 .:147B EB • : 1480 E8 • : 148B EB · : 14'30 E8 • : 14'38 EB · : 14A0 E8 · : 14AB EB • : 14B0 E8 • : 14B8 EB • : 14C0 EB • : 14CB EB • : 1400 EB • : 140B EB • : 14E0 E8 · : 14EB EB · : 14F0 EB • :14FB EB • : 1500 EB • : 150B EB • : 1510 E8 • : 1518 EB · : 1520 E8 • : 152B 13 • : 1530 EB • : 1538 EB • : 1540 EB • : 154B EB • : 1550 13 • : 155B EB • : 1560 E8 • : 1568 EB · : 1570 EB • : 157B E1 • : 1580 E8 • : 158B E8 • : 15'30 E8 • : 15'3B EB • : 15A0 13
0C 0F 0C 0F 0F 00
EB E8 EB E8 EB E8 EB E8 EB E8 EB E8 EB E8 EB EB EB E8 E8 E8 EB E8 13 E8 E8 E8 EB E1 EB E8 E8 E8 13 E8 EB E8 EB 13
E2 E2 E2 E2 E2 E2 E2 E8 E2 E2 E2 E2 E2 EB E2 E2 E2 EB E8 E2 E2 E2 E2 E8 E2 E2 E2 E8 EB EB E8 E8 EB EB E8 E8 EB EB E8 E8 EB EB E8 E8 EB EB EB EB EB EB EB EB EB EB EB E8 EB E8 EB E8 EB EB EB E8 EB EB EB EB EB EB EB E8 13 13 EB E8 EB E8 EB EB EB EB El E1 E8 EB E8 E8 EB E8 E8 E8 13 13 E8 E8 E8 E8 E8 E8 EB EB 13 13
0C 0C 0F 0F 0F 00 E2 E2 E8 E2 E8
0C 0C 0C 00 00 00 E2 E2 E8 E2 E8
0C 0C 0'3 01 0F 00 E2 E2
E8 E2
EB
E2 E2 E2 E2 E2 E2
EB EB E2 E2 E8 EB E2 E2 E2 EB EB EB E2 E2 E8 E8 EB EB E8 E8 EB EB E8 E8 E8 EB E8 E8 EB EB E8 E8 EB E8 E8 E8 EB EB E8 E8 EB EB E8 E8 EB EB EB E8 EB EB EB E8 EB EB E8 EB EB EB EB EB E3 EB EB E8 E8 EB EB E8 EB EB 13 E8 EB E8 E8 E8 EB EB E8 EB 13 EB E8 E8 E8 E8 E8 EB EB EB 13 EB
E8 E2
E8 E2 E2
E8 E2 E8 EB E8 E8 E8 E8 E8 E8 E8 EB EB EB E8 EB E8 EB E8 EB E8 EB EB EB E3 EB EB EB EB 13 E8 EB E8 E8 13 EB E8 E8 E8 13 E8
· : 15AB • : 15B0 • : 15BB • : 15C0 • : 15CB • : 1500 • : 150B • : 15E0 • : 15E8 .:15F0 • : 15FB · : 1600 • : 160B
• : 1610 • : 161B
• : 1620 • : 162B
· : 1630 • : 1638 • : 1640 • : 164B
• : 1650 • : 165B
· : 1660 • : 166B
• : 1670 .:167B
• : 1680 • : 1688 • : 16'30 • : 16'3B
• : 16A0 • : 16AB · : 16B0 • : 16B8 • : 16C0 • : 1fiCB · : 1600 • : 160B • : 16E0 · : 16EB • r, 15F0 · : 16FB · : 1700 • : 170B
· :1710 .:1718 · : 1720 • : 172B
· : 1730 • : 173B
• • • • •
: 1740 : 1748 : 1750 : 1758 : 1760
• : 176B
• : 1770 .. : 1778
EB EB EB E8 13 EB EB EB EB 13 EB EB E8 E8 E1 EB EB EB EB 13 EB EB EB EB 13 EB EB E8 E8 E3 EB EB EB E8 E3 EB EB EB E1 13 EB E1 E8 E1 Ei E8 E1 E8 E1 E1 E8 45 E8 EB E1 EB E4 EB El
EB EB EB E8 13 E8 EB E8 EB E1 EB E8 E8 E8 El E8 EB EB E8 E1 EB EB EB E8 El E8 EB E8 E8 13 EB E8 EB EB 13 EB EB EB E1 E1 E8 El EB E1 E1 E8 E1 EB E1 E1 EB E8 EB E1 E1 E8 E5 EB E1
EB E8 EB E8 13 E8 E8 E8 E8 El EB E8 EB E8 E1 E8 EB E8 EB El EB EB EB E8 E1 E8 E8 EB E8 E1 EB E8 EB E8 13 EB EB E1 E1 E1 EB El E1 E1 E1 E8 E1 E8 EB E5 EB EB E5 EB E4 E8 E8 E8 E8
EB E8 EB E8 13 E8 EB EB EB E1 EB EB EB E8 E1 E8 EB E8 EB El EB EB EB E8 E1 E8 EB E8 E8 13 EB E8 EB E8 13 EB EB EB EB E1 EB E1 EB EB El E8 E1 51 E8 45 EB E8 51 E8 E4 E8 EB 51 EB
EB E8 EB EB 13 E8 EB E8 EB E1 EB EB EB E8 13 EB EB E8 EB 13 EB E8 EB E8 E1 E8 EB EB E8 13 EB E8 EB E8 E3 EB EB El EB 13 E1 E1 E1 EB El E1 E1 El EB E8 E1 E1 54 E8 E5 E1 El E1 EB
EB EB E8 EB EB EB E8 E3 13 E3 EB EB EB EB EB EB EB E3 13 E3 EB EB E8 EB EB EB EB E3 13 E3 E8 E8 EB EB E8 E8 EB E3 13 E3 EB EB E8 E8 E8 EB E8 E3 13 EB E8 E8 EB EB E8 EB EB EB E3 E3 EB EB E8 E8 EB EB EB EB E3 EB EB EB EB EB E1 E1 EB EB 13 E1 E1 E1 EB EB E1 E1 EB EB E1 E1 El E1 EB EB E1 A4 EB EB E8 EB E1 E1 EB EB EB E4 E8 E1 E8 EB E1 E1 EB E8 El E4 EB EB
EB E8 E8 E3 EB E8 EB E8 13 EB EB E8 E8 13 EB E8 EB E8 13 E3 EB E8 E8 E8 E3 E8 EB E8 E3 E8 EB E8 EB E3 EB EB EB E1 13 El E1 EB E1 E1 El E1 EB El E1 El E5 EB 14 E1 E1 E4 E8 E1 El
171
; :1780 • :1788 • :1790 • :1798 • :17A0 • :17A8 .:17B0 • :17B8 .:17C0 • :17C8 .:17D0 • :17D8 .:17E0 • :17E8 • :17F0 • :17F8 • :1800 • :1808 • :1810 • :1818 • :1820 • :1828 • :1830 • :1838 • :1840 • :1848 • :1850 · :1858 · :1860 • :1868 · :1870 • :1878 · :1880 • :1888 · :1890 · :1898 · :18A0 • :18A8 · :18B0 • :18B8 · :18C0 · :18C8 · :18D0 • :18D8 · :18E0 .:18E8 · :18F0 • :18F8 • :1900 • :1908 · :1910 · :1918 .:1920 • :1928 .:1930 · :1938 • :1940 • :1948 .:1950
172
E1 E8 E5 E8 E1 E1 E1 E1 E8 E1 E1 E1 E1 AA AA AA E2 43 F2 F3 F3 42 F3 F1 F3 43 F3 F3 A2 43 A3 03 F3 F3 F3 F3 03 92 82 32 F3 43 F3 43 63 63 83 F3 83 D3 03 F3 A3 60 F3 23 23 43 60
E1 E8 E1 E1 E1 E1 E8 E1 El E1 E1 E1 E1 AA AA AA F2 F3 F1 F3 F3 F2 F3 F1 F3 F3 F2 F3 F1 F3 A3 F2 E3 F3 D3 F3 B2 82 F2 F2 F3 93 B3 B3 23 C3 E3 63 83 F3 F3 13 F3 F0 83 03 53 F3 C3
E5 E8 E1 E1 E1 E1 E1 E8 E1 E8 E8 E1 E1 AA AA AA F3 F3 43 F3 F3 F3 43 F2 F3 F3 43 F3 F2 03 43 03 F3 73 03 93 A2 F2 42 F3 03 03 43 03 F3 F3 F3 03 F3 F3 03 43 83 C0 A3 E3 F3 F3 83
E5 E8 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 AA AA AA F3 F3 F3 F3 F3 F3 F3 F3 F3 F3 F2 F3 F3 F3 83 D3 03 33 F3 23 F2 E2 02 F3 B3 F3 F3 F3 B3 A3 F3 F3 03 93 83 43 F3 30 F3 F3 03 43 F3
E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 AA AA AA E3 F3 F3 F3 E3 F3 F3 F2 E3 F2 F3 F3 E2 83 02 93 F3 F3 F3 F3 D2 F2 A2 43 E3 F3 F3 A3 03 A3 E3 A3 A3 A3 F3 03 C3 80 83 A3 A3 E3 F3
E1 E1 E8 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 AA AA AA F3 F3 F2 F3 F3 F3 F3 F2 F3 F3 F3 F3 02 13 D3 F3 F3 83 A3 B3 A2 A2 02 F3 83 83 D3 03 F3 43 43 A3 F3 F3 33 03 13 F0 D3 03 F3 43 40
E1 E1 E8 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 AA AA AA F3 43 42 F3 F3 63 43 F2 F3 53 43 F2 F2 03 43 F3 03 83 63 B3 F2 F2 42 D3 A3 A3 23 F3 F3 F3 A3 03 D3 13 C3 F3 43 03 03 63 D3 D3 03
E1 E5 E8 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 AA AA AA 03 51 F2 F3 D3 53 F3 F2 03 53 F3 F1 A3 53 D3 83 03 A3 F3 F3 F2 B2 B2 D3 E3 83 F2 F3 03 A3 83 F3 83 93 43 D3 20 23 F3 F3 A3 F0 43
• :1958 D3 · :1960 92 • :1968 F3 · :1~70 F3 • :1978 93 • :1980 13 • :1988'52 • :1990 A2 • :1998 F2 • :19A0 F2 • :19A8 F2 • :19B0 F2 .:19B8 F2 • :19C0 F3 • :19C8 F2 • : 19D0 F2 • :19D8 F3 • :19E0 F2 • :19E8 F3 • :19F0 F2 • :19F8 82 • :lA00 F3 • :lA08 F2 • :1A10 D3 • :1A18 E2 • :1A20 92 • :1A28 F3 · :lA30 82 • :1A38 E3 • :1A40 F9 • :1A48 E3 .:1A50 D3 • :lA58 F2 • :1A60 43 • :1A68 F9 • :1A70 53 • :1A78 F3 .:1A80 F2 • :lA88 93 • :lA90 90 • :lA98 E3 • :1AA0 F3 • :1AA8 A2 • :lA80 52 • :1AB8 42 • :1AC0 22 • :1AC8 E2 • :lAD0 83 • :1AD8 F3 .:1AE0 F0 • :1AE8 F3 .:1AF0 F3 • :1AF8 F3 .:1B00 F3 • :1B08 F3 • :1810 F3 • :lB18 F3 • :1820 F3 • :lB28 F3
93 F2 D3 63 F0 F3 42 12 82 F2 FZ 42 F2 F2 49 F2 D3 F2 F2 49 F2 F3 B2 A2 49 F2 C3 43 F3 89 B3 63 F3 53 49 G3 F3 23 F3 F0 43 A3 02 22 A2 G2 A2 F3 43 83 D3 F3 F3 F3 F3 43 F3 F3 43
02 42 A2 F2 B3 F3 F3 03 00 40 22 83 82 F2 42 42 F2 F2 F2 F2 82 F2 F2 F2 F2 F2 F9 F2 F9 F2 F2 F3 F3 F3 F2 F2 D3 F2 F9 F2 C3 23 83 A3 02 62 F2 42 E9 92 42 92 03 F3 F3 53 F3 63 E3 43 A3 F3 F3,F3 D3 43 53 03 23 43 F3 53 A3 E3 43 E3 43 03 F3 00 03 A3 23 F3 F2 F2 F2 F2 02 A2 F2 82 F2 F2 93 A3 A3 E3 F3 F3 43 03 F3 F3 F3 F3 F3 F3 13 F3 F3 F3 F3 F3 F3 FA F3 F3
82 82 F3 93 60 F2 42 82 F2 F2 F2 02 F2 F2 F2 F3 F3 F2 F2 A2 D3 23 F2 A2 02 F2 C3 03 23 F0 C3 13 43 F3 43 A3 03 F3 43 80 F3 03 A2 22 42 F2 22 F3 F3 F0 E3 F3 F3 F3 F3 03 F3 FA F3
A2 52 F3 03 F0 22 22 F2 E2 F2 F2 42 F2 E2 F2 F3 E3 F2 F2 02 53 53 32 22 F2 A3 93 93 43 C0 03 03 C3 89 C0 F3 F3 43 A3 80 A3 A3 12 F2 C2 12 42 A3 D3 80 F3 F3 F3 F3 F3 43 F3 43 F3
F2 03 C3 F3 43 02 03 F2 F2 F2 F2 F2 F2 F2 F2 F3 F3 F2 F2 42 F3 A3 52 F2 02 82 43 F3 F0 80 A3 F3 13 A9 F0 F3 43 03 43 F0 63 F3 F2 E2 02 C2 F2 13 A3 43 33 F3 F3 F3 F3 F3 F3 F5 F3
42 A3 E3 80 23 D2 F3 F2 F2 F2 F2 F2 52 F2 F2 F3 F2 F2 F2 E2 03 A2 42 F2 82 82 F2 03 60 F0 F3 82 03 F9 A0 93 E2 F3 10 E3 23 02 02 E2 F2 42 02 43 40 A3 F3 F3 F3 F3 F3 F3 53 FA F3
· : IB30 • : IB3B .:lB40 • : IB4B .:1B50 • : IB5B • : IB60 .:1B68 .:1B70 .:lB78 .:1B80 • : IB8B .:lB90 .:lB98 .:lBA0 .:lBAB .:lBB0 • : IBBB .:lBC0 .:lBC8 .:lB00 .:1BOB .:1BE0 • :IBE8 .:lBF0 • :lBFB .:lC00 .:lC08 .:lC10 .:lC18 .:lC20 • :IC28 • :lC30 • :lC38 .:lC40 • :1C48 • :lC50 • :1C58 • :1C60 • :lC68 • :lC70 • :1C78 .:1C80 • :1C88 .:lC90 • :lC98 • :1CA0 • :lCA8 • :lCB0 • :lCBB • :lCC0 • :lCC8 .:lC00 • :lCD8 • :lCE0 • :lCEB • : lCF0 • : lCF8 .:1000
F3 F3 FA F3 F3 F3 FA Fl Fl F3 F3 91 Fl 43 F3 F3 B3 25 73 83 F3 05 41 11 E3 F3 23 B3 B3 03 03 E3 F4 23 F3 23 F4 03 13 A3 B3 F3 A3 B3 E3 B3 F3 E3 F3 93 A3 83 93 81 B3 13 F3 F3 33 63 E3 23 13 03 E3 F3 B3 F3 F3 04 lA 60 1923 13 90 11 10 03 A0 00 00 03 lA IB 0183 83 F4 00 00 43 CD ID 01 43 03 57 00 00 B3 IF 00 00 83 03 21 01 00 03 33 AB 00 83 83 84 00 00 83 86 5F 00 83 03 D8 00 00 83 8B 3C 00 43 83 3D 00 00 03 2D 3F 00 43 83 BF 00 00 03 41 B9 00 83 43 92 00 00 43 93 33 01 83 83 E5 00 00 83 E7 E8 00 83 03 C2 00 01 83 4B 3B 01 83
FA Fl F3 F3 F1 F3 F4 Fl F3 B3 F5 61 03 23 41 F3 54 E4 F3 63 A4 A3 A3 A3 03 F3 13 83 03 43 03 F3 F3 A3 53 93 A3 B3 03 F3 F3 A3 D3 F3 A3 43 A9 01 A5 lA 10 11 03 F0 0143 7C 00 03 20 00 B3 ID 01 43 A7 01 83 3100 43 82 00 43 23 01 83 AC 00 03 87 00 83 89 00 03 3C 00 03 30 01 83 3F 00 83 07 00 83 31 01 83 BA 00 83 BC 00 43 BE 00 03 10 01 43 12 00 43 EE 00
Fl E3 F3 F5 43 21 03 F3 13 03 F3 53 83 F3 F3 03 A3 03 43 03 F3 43 63 85 38 10 00 F3 43 00 F5 83 00 AB 83 00 83 43 00 37 83 00 DB 83 00 8E 03 01 91 43 00 BB 83 00 37 03 01 4B 43
Fl F3 F3 F5 13 Bl F3 03 15 F3 F3 B3 C3 F3 F3 B3 43 F3 93 A3 93 F3 F3 10 E9 F3 03 00 7C 03 00 CE 83 00 A9 B3 00 23 83 00 88 83 00 8C 83 00 67 83 00 31 03 00 BO 83 01 11
83 00 EE
F3 FA F3 F5 03 53 F5 03 F4 83 B3 04 43 F3 F3 43 F3 43 B3 F3 F3 A3 03 56 05 FF CA B3 00 70 83 00 CF 83 00 AA B3 01 85 03 00 8A 83 00 80 83 00 90 83 01 43 03 00 E6 43 01 3A 03 00
• : 100B • :1010 • : 101B • : 1020 • : 102B • : 1030 • : 1038 • : 1040 • : 104B • : 1050 • : ID58 .:1060 • : 1 D68 .:1070 • : ID7B • : IDB0 • : lDBB • : ID90 • : ID98 • : 10A0 • : IDAB .:10B0 • : 10BB • : 10C0 • : IDC8 • : 1000 • : 1008 .:10E0 • : lOEB • : 10F0 • : IDFB • : lE00 • : lE0B • :lE10 • :lE1B • :1E20 • : lE28 • : lE30 • : 1E3B .:1E40 • : 1E48 • : 1E50 • : lE5B • : 1 E60 .:lE68 • : lE70 • : lE7B • : 1E80 • : lEBS • : lE90 • : lE9B • : lEA0 • : lEAB .:lEB0 • : lEB8 • : lEC0 • : lECB • : lE00 • : lE08
00 01 CC 00 00 B0 40 00 84 4D 00 88 BD 00 OD 4D 00 91 0D 00 BE 40 00 EA 4D 01 A0 41 00 2B Bl 01 A5 41 00 A7 81 00 5C B1 00 60 01 00 B4 81 00 09 81 00 0D 81 00 E9 81 00 3C 01 01
52 00 40 FE: 00 40 lA
40 00 CO 00 00 A9 00 00 5E 40 00 63 40 00 67 4D 00 BB 4D 00 E7 40 00 13 00 00 Fl 81 00 CB Bl 00 56 81 00 81 81 00 AE 41 00 3A 01 00 66 B1 01 6B B1 01 BF 01 00 12 Bl 01 C6 41
CB 40 00 A7 40 00 B3 40 00 87 40 00 8D 40 00 90 00 00 95 4D 00 E9 00 01 4E 41 00 CA 01 00 A4 Bl 00 F6 81 00 5B 81 00 37 01 00 2B 41 00 69 81 00 95 81 00 49 01 01 13 81 00 17
00 F4 40 00 AB 00 00 50 40 00 61 4D 00 66 00 00 92 4D 00 E6 40 00 12 8D 00 1B 01 00 7B Bl 00 CD 01 00 F7 81 00 5D 41 00 88 81 01 3D 81 00 6A 81 00 96 81 00 72 01 01 15 01 01
00 00 A6 40 00 B2 40 00 86 4D 00 64 80 00 8F 4D 00 94 40 00 C0 BD 01 3B 00 01 19 Bl 00 F3 81 00 56 81 00 5A 81 00 AE B1 00 62 Bl 00 67 Bl 00 93 01 00 C0 81 00 3A 81 01 3E FF
F3 40 00 CF 40 00 5C 40 00 60 40 00 DO 40 00 69 00 00 BO 40 00 11 00 01 9E 81 01 F2 Bl 00 CC 81 00 7F 81 00 83 81 00 5F 81 00 64 81 00 09 81 00 BO Bl 00 Cl 81 01 14 01 01 FF
00 A5 40 00 Bl 40 00 B5 40 00 62 4D 00 8E 4D 00 93 4D 00 BF 0D 01 4B 4D 00 A1 81 00 A3 01 00 56 Bl 00 80 81 00 5E 81 00 61 01 00 65 81 01 92 Bl 00 BE Bl 00 EA 81 01 30 81 FF
4D 00 CE 40 00 AA 4D 00 5F 40 00 65 4D 00 68 40 00 BC 0D 00 E8 40 00 3C Bl 00 A2 01 00 18 81 00 A6 81 00 82 81 00 37 81 00 63 01 00 6B 41 00 94 01 00 EB 81 00 EB 81 01 17 7F
173
• : 1 EE0 • : lEEB · : lEF0 • : 1 EFB · : 1F00 · : 1F0B • : 1F10 • : IF1B · : 1 F20 • : 1F2B · : 1 F30 · : 1 F3B • : 1 F40 · : 1F4B · :1F50 · : 1F5B · : 1F50 · :1F58 • : 1 F70 · :1F7B • : 1 FB0 · : 1F8B • :1F90 .:1F9B • : 1FA0 · :1FA8 • : 1 F80 • : 1F88 .:1FC0 • : 1FC8 · : 1FD0 · : 1FD8 • : 1FE0 • : 1 FE8 .:1FF0 • : 1FF8 · :2000 • :2008 • :2010 · :2018 • :2020 · :2028 • :2030 • :2038 · :2040 · :2048 · :2050 • :'2058 · :2050 • :2058 · :2070 • :2078 · :2080 · :2088 • :2090 · : 2098 · :20A0 · :20A8 • :20B0
174
B2 00 20 00 FF FF FF FF FF FF 75 FF FF FF FF FF FF FF FF FF 00 00 11 00 00 FB FF 00 00 00 11 30 82 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
FF FF ED FF B2 F7 10 F3 40 00 FF 00 F7 E7 10 00 00 00 F3 20
FD 7D FF CF FF FF FD FF FD 7D FF FF FF FF ED FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 00 00 00 00 00 00 00
00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DF 00 00 00 00 00 00 00 00 30 20 FB 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ED FF FF FF 00 00 00 30 FF 10 00 00 00 FF 00 10 F3 00 00 30 FF FF FF FF CC FF FF FF FF 00 FF FF ED FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30 F1 00 FD FF EF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 70 D1 00 F9 04 E1 00 7D F3 E5 00 F9 30 F1 00 FD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ED FF FF FF 42 00 FF 00 C3 FF 00 01 00 55 00 00 F3 00 00 01 FF FF FF FF FD ED FF FF FF EF FF FF ED FF FF FF 00 00 00 2A AA AA 80 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 B5 B0 7D E7 FF FF CE FF FF FF FF FF CF 7F FF FF FF 7F FF 1B 41 00 FF 00 85 00 7D 04 FB 80 F7 00 85 80 7D 00 00 02 AA AA AA 02 80 00 28 2A AA A0 0A A0 00 00 30 00 0A A0 03 00
FF B1 DF FF E7 F7 00 F3 00 F3 00 B2 FF F7 50 F3 00 CF 20 00 FD FD FF FD FF FD FF 5D ED ED FF 7F FF 81 FF FF 00 00 0A AA AA A8 02 80 00 20 2A AA A0 2A A8 0C 00 00 00 2A A8 03 00
• :20BB .:20C0 · :20CB .:20D0 · :20DB · :20E0 • :20EB · :20F0 .:20FB • :2100 • : 210B
· :2110 • :211B
• :2120 · :2128
• :2130 • :213B
• :2140 • :214B
.:2150 • : 215B
• :2150 • :215B
.:2170 • :2178 • :2180 • :2188 .:2190 • : 21 98 .:21A0 • :21AB • :21B0 · :2188 · :21C0 • :21C8 • :21D0 • :21D8 · :21E0 • :21E8 • : 21 F0 · :21F8 • :2200 .:2208 • :2210 • :221B
• :2220 · :2228 .:2230 .:2238
· :2240 • :224B
• :2250 .:2258
.:2250 • :2258 • :2270 · :2278 · :2280 · :2288
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2A B0 00 00 0A 80 00 A0 00 20 00 28 0A 00 2A 00 00 28 0F 03 03 C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AB 00 00 00 0B 80 00 80 00 20 00 A0 02 00 80 80 00 20 03 03 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AB 00 00 00 28 80 02 80 00 A0 00 A0 02
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 A0 00 00 00 28 80 02 00 00 80 00 A0 0A 02 02 00 08 20 20 B0 00 A0 A0 03 0F 03 03 0F 0C 00 00 00 00 00 00 00 A8 00 0A 00 80 00 AA 00 02 00 82 00 A8 00 20 00 20 00 A8 00 0F 00 00 00 00 00 00 00 00 F0 F0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 B0 00 00 00 A0 80 02
00 02 80 02 A8 28 0B 0C 08 03 AB 3C 03 3C 00 00 00 82 08 20 80 08 02 00 20 20 20
3121 00 00 00 00 FF
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F 00 00 00 00 A0 80 0A 00 02 00 02 2A A0 08 2E
08 03 8A F0 03 F0 00 00 00 82 08 20 80 08 02 00 28 20 20 30 00 00 00 00 FF
C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F 00 00 00 02
80 80 0A 00 0A 00 0A 0A 00 08 8B 88 03 00 00 03 F0 00 00 00 82 08 20 B0 08 02 00
C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C 00 00 00 02 80 A0 28 00 08 00 08 02 00 0B 2E
08 0F 00 00 03 C0 00 00 00 A8 0A 80 A8 08 02 A0 28 22 20 20 20 20 30 30 00 00 00 00 00 00 00 00 FF F0
• :2290 • :2298 • :22A0 • :22A8 • :22B0 • :22B8 • :22C0 • :22C8 • :2200 • :2208 • :22E0 • :22E8 • :22F0 • :22F8 • :2300 • :2308 • :2310 • :2318 • :2320 • :2328 • :2330 • :2338 • :2340 .• :2348 .:2350 • :2358 • :2350 • :2358 .:2370 • :2378 • :2380 • :2388 .:2390 • :2398 • :23A0 • :23A8 • :23B0 • :23B8 .:23C0 • :23C8 • :2300 • :2308 • :23E0 • :23E8 .:23F0 • :23F8 • :24'00 • :24'08 • :2410 • :2418 • :2420 • :2428 • :2430 • :2438 .:2440 • :2448 • :2450 • :2458 • :2450
00 00 00 0A 00 20 28 00 08 00 08 00 C0 08 08 08 0C 00 00 03 00 00 00 00 B0 08 80 80 02 02 00 22 20 20 0C 00 00 00 00 F0 00 00 00 '00 00 00 00 '00 00 00 00 00 00 00 00 00 00 '00 00
00 00 00 0A 00 20 A0 00 28 00 28 02 00 C2 0C 20 3C 00 00 0F 00 00 00 00 B0 08 20 80 00 82 00 22 20 20 03 00 00 0'0 00 F0 00 00 00 00 0'0 '00 0'0 00 0'0 '00 00 '00 00 00 00 '00 00 '00 00
00 00 00 0A 00 28 A0 00 20 00 20 02 00 02 00 20 30 00 00 0C 00 00 00 00 80 08 20 80 00 82 00 20 A0 20 03 '0'0 00 00 00 F0 00 00 0'0 00 0'0 '00 0'0 00 00 '00 00 '00 00 00 00 00 00 00 00
00 00 00 2B 00 08 A0 00 20 00 A0 0A 00 00 C0 80 F0 00 00 3C 00 00 00 00 80 08 20 80 00 82 00 20 A0 20 03 00 0'0 00 0'0 F0 00 00 00 '00 0'0 '00 00 00 00 '00 00 '00 00 00 00 '00 00 00 00
AA FF A0 28 00 0A 80 00 A0 00 80 28 00 00 3F 00 C0 00 00 30 00 00 00 00 80 08 20 80 00 82 00 20 20 20 03 00 '00 '00 00 3C '00 00 0'0 00 0'0 '00 0'0 '00 00 00 00 '00 00 0'0 00 '00 00 00 00
AA FF 80 A0 00 0A 80 00 80 02 80 A0 00 03 00 02 C0 00 00 F0 00 00 00 00 80 08 20 AA 0A 02 A8 20 20 20 3C 00 0'0 0'0 0'0 3C 0'0 00 00 '00 00 '00 0'0 '00 00 '00 0'0 '00 00 '00 00 00 00 00 00
AA FF 00 A0 00 0A 00 00 80 02 00 A0 00 00 00 C2 00 00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '00 00 '00 0'0 3C 0'0 00 00 00 00 00 00 00 00 '00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0'0 00 00 0'0 00 3C 0'0 00 00 00 '00 '00 0'0 '00 0'0 00 00 00 00 00 00 00 0'0 00 00
• :2458 • :2470 • :2478 • :2480 • :2488 .:2490 • :2498 • :24A0 • :24A8 • :24B0 • :24B8 • :24C0 • :24C8 • :2400 • : 2408 • :24E0 • : 24E8 • :24F0 • :24F8 • :2500 • :2508 • :2510 • : 2518
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C 00 00 · :2520 00 · :2528 00 · :2530 00 · :2538 03
• :2540 00 • :2~48 C0 · :2550 30 · :2558 1213 • :2550 F0 • :2558 30 • :2570 0C • :2578 0F • :2580 F0 • :2588 3F • :2590 C0 • :2598 FC • :25A0 '03 • :25A8 FI0 .:25BI0 30 • :25B8 0C • :25C0 03 • :25C8 '0'0 • :250'0 00 • :2508 00 • :25E0 00 • :25E8 '00 • :25F0 0'0 • :25F8 '00 • :25'00 '00 • :26'08- 00 .:2610 00 • :2518 '00 • :2620 00 • :2528 '00 • :2630 '00 • :2638 '00
00 00 00 00 00 00 00 00 00 00 00 00 '00 '0'0 00 00 00 00 00 00 0F 00 00 00 00 00 03 0'0 C0 CC 00 C0 3'0 0C 0C 00 30 00 C3 00 C0 30 I0C 0C CI0 00 00 0'0 '00 0'0 '00 0'0 '00 0'0 '0'0 '0'0 00 00 '0'0
'00 0'0 00 00 00 00 00 00 00 00 00 00 00 '00 00 00 00 00 00 00 0F 00 00 00 00 00 0C C3 03 0C 03 00 CC 3'0 30 00 C0 03 C3 03 '00 CC 30 3'0 CI0 '0'0 '0'0 '0'0 '00 0'0 '0'0 0'0 '00 0'0 '0'0 '0'0 '00 0'0 '0'0
'00 00 00 00 00 00 00 00 00 00 00 0'0 '00 00 00 00 00 00 00 00 0F C0 00 00 00 00 0C C3 0C 00 03 00 CC 3'0 3F 00 FC 03 3C 03 '00 CC 30 C0 '0'0 00 '00 0'0 00 00 '0'0 0'0 '00 0'0 '00 0'0 '00 00 '0'0
00 00 00 00 00 00 00 00 00 00 00 '00 '00 00 00 00 00 00 00 00 03 F0 00 00 00 00 30 CC 0C 3C 0C 03 0C CI0 C0 03 00 0C 30 0C '03 0C CI0 C3 CI0 '00 '0'0 0'0 '00 0'0 '0'0 '0'0 '0'0 '0'0 00 00 00 '0'0 '0'0
'0'0 00 00 '00 00 00 0'0 00 0'0 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF F0 30 CC 0C 0C 0C 03 I0C CI0 C0 03 00 0C 0C 0C '03 0C C0 C0 C0 00 '00 00 '00 00 '0'0 '0'0 '0'0 0'0 '00 00 00 '0'0 '0'0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F FF FF FF C0 C0 30 0C 30 30 0C 03 03 00 0C 00 30 30 30 I0C 03 00 C3 00 00 00 00 00 00 0'0 '00 '0'0 00 00 00 00 '0'0 '0'0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FF FF FF 00 C0 30 03 C0 FC 0C 03 03 FC 0F F0 30 C0 FC 0C 03 00 3C '00 00 '00 21'0 '00 '0'0 '0'0 '0'0 '0'0 00 00 00 00 0'0 '00
175
• :2640 00 00 • :2648 00 00 • :2650 00 00 · :2658 00 00 • :2660 00 00 • :2668 00 00 • :2670 00 00 • :2678 00 00 • :2680 00 00 • :2688 00 00 • :2690 00 00 .:2698 00 00 • :26A0 00 00 • :26A8 00 00 • :26B0 00 00 • :26B8 00 00 • :26C0 00 00 • :26C8 00 00 • :2600 00 00 • : 2608 00 00 • :26E0 00 00 .:26E8 00 00 .:26F0 00 00 .:26F8 00 00 · :2700 00 00 • : 2708 00 00 • : 2710 00 00 • :2718 00 00 .:2720 00 00 .:2728 00 00 • :2730 00 00 • :2738 00 00 • :2740 00 00 • :2748 1210 00 • :2750 00 00 · :2758 00 00 • :2760 00 00 • :2768 00 00 • :2770 00 00 • :2778 1210 00 • :2780 00 00 .:2788 00 00 .:2790 00 00 • :2798 00 00 • :27A0 00 00 • :27A8 00 00 • :27B0 00 00 .:27B8 00 00 .:27C0 00 00 • :27C8 00 00 • :270121 00 00 • :2708 1210 00 • :27E0 00 00 .:27E8 00 00 • :27F0 00 00 • :27F8 00 00 • :2800 00 00 • :2808 00 00 • :2810 00 00
176
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0~
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.:2818 00 00 • : 2820 00 00 · : 2828 00 00 • :2830 00 00 • : 2838 00 00 • :2840 00 00 • : 2848 00 00 • :2850 00 00 .:2858 00 00 • :2860 00 00 · :2868 00 00 • :2870 00 00 • :2878 00 00 • :2880 00 00 • :2888 00 00 • :2890 00 00 • :2898 00 00 • :28A0 00 00 • :28A8 00 00 • :28B0 00 00 • :28B8 00 00 • :28C0 00 00 • :28C8 00 00 • :2800 00 00 • :2808 00 00 · :28E0 00 00 • : 28E8 00 00 • :28F0 00 00 • :28F8 00 00 • :2900 00 00 · :2908 00 00 • : 2910 00 00 • : 2918 00 00 • :2920 00 00 • :2928 00 00 · :2930 00 00 • :2938 00 00 • :2940 00 00 • :2948 00 00 • :2950 00 00 • :2958 00 00 · :2960 00 00 • :2968 00 00 • : 2970 00 00 • :2978 00 00 • :2980 00 00 • :2988 00 00 • :2990 00 00 • :2998 00 00 • :29A0 00 00 • :29A8 00 1210 • :29B0 00 00 • :29B8 00 00 • :29C0 00 00 .:29C8 00 00 • :2900 00 00 • :2908 00 00 • :29E0 00 00 • :29E8 00 00
00 00 00 00 00 "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 1210 00 00 00 00 0121 00 00 1210 00 00 121121 0121 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 121121 00 0121 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 021 00 00 00 00 00 00 00 00 00 121121 00 00 00 00 00 00 00 00 00 00 0121 0121 1210 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12'0 00 021 00 00 00 121121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 00 00 0121 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1110 00 00 00 00 00 00 00 00 121121 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 0121 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;210 00 00 00 '21121 0121 00 00 1210 00 00 00 00 00 00 0121 00 00 121121 00 0121 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00
.:29F0 • :29FB .:2A00 • :2A0B .:2A10 • :2A1B • :2A20 • :2A2B .:2A30 • :2A3B • :2A40 • :2A4B • :2A50 • :2A5B .:2A60 • :2A68 • :2A70 • :2A78 • :2A80 • :2A88 • :2A90 • : 2A98 • :2AA0 • :2AA8 • :2AB0 • :2AB8 • :2AC0 • :2AC8 • :2A00 • :2A08 • :2AE0 .:2AE8 .:2AF0 • :2AF8 • :2£100 • :2B0B • :2£110 • :2B1B • :2£120 • :2£128 • :2£130 • :2B3B • :2£140 .:2B48 • :2850 • :2B5B • :2£160 • :2B6B • :2£170 • :2B78 • :2£180 .:2B8B • :2B90 • :2B98 • :2BA0 • :2BA8 • :2£1£10 • :2£1£18 .:2BC0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 1Z10 00 00 01Z1 00 00 00 00
00 00 00 00 00 00 00 0121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 121121
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01Z1 1Z1121 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 00 00 00 0121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01Z1 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 1210 00 0121 01Z1 00 00 1210 00 00 00 00 00 00 00 00
• :2BCB • :2B00 • :2BOB • :2BE0 • :2BEB • :2BF0 • :2BFB • :2C00 • :2C0B .:2C10 • :2C1B • :2C20 • :2C2B • :2C30 • :2C38 • :2C40 • :2C48 .:2C50 • :2C5B • :2C60 • :2C6B .:2C70 • :2C78 .:2C80 • :2C8B • :2C90 • :2C98 • :2CA0 • :2CAB • :2CB0 • :2CB8 • :2CC0 • :2CCB • :2C00 • :2C08 • :2CE0 • :2CE8 • :2CF0 • :2CF8 • :2000 • :200B • :2010 • :201B • :2020 • :2028 • :2030 • :2038 .:2040 • :2048 .:2050 • :205B • :2060 • :206B .:2070 • :207B .:2080 • :208B • :2090 • :209B
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00 00 00 00 00 00 0(71 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 00 FF 00 FF 00
00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 01Z1 00 00 00 00 1Z10 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00
00 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01Z1 00 01Z1 00 01Z1 00 00 1210
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01Z1 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 0121
1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 1210 00 1210 00 00 1210 00 1210 00 00 00 00 IDIi.l
00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 0121 00 00 00 00 00 00 00 00 00 00 00 00 01Z1 1210 01Z1 01Z1 00 00 00 1210
177
• :2DA0 .:2DA8 .:2DB0 • :2DB8 • :2DC0 • : 2DCB .:2DD0 • :2DDB • :2DE0 • :2DEB • :2DF0 • :2DFB • :2E00 • :2E0B .:2E10 • :2E18 • :2E20 .:2E2B • :2E30 • :2E3B • :2E40 .:2E4B .:2E50 · :2E58
• :2E50 • :2E5B .:2E70 • : 2E78 • :2EB0 • :2EBB • :2E90 • : 2E9B • :2EA0 • :2EAB • :2EB0 • :2EBB • :2EC(lI • :2ECB • :2ED0 • : 2EDB • :2EE0 • :2EEB • :2EF0 • :2EFB • :2F00 • :2F0B • :2F10 • :2F1B • :2F20 • :2F2B
• :2F3121 • :2F3B • :2F40 • :2F48 • :2F50 • :2F5B • :2F50 • : 2F5B .:2F70
178
FF FF FF FC 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 121121 00 00 00 1210 00 00 0121 00 00 00 00 00 00 00 1210 00 00 00 00 00 0C 33 03 0C 0C 3121 30 C0 C0 121121 1213 00 I2IC 0C 30 30
00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 121121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 121121 00 00 0121 00 00 0C 3121 CC 0C 0C 3121 30 CI2I CI2I 00 03 00 0C 0C 30 30
00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 121121 00 00 00 00 00 00 1210 00 00 00 00 00 0121 00 00 00 00 00 00 00 00 00 00 0C 30 CC 0C 0C 30 3121 CI2I CI2I 1210 03 00 0C IZIC 30 00
00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 0121 00 00 00 1210 00 00 00 00 00 00 00 1210 0el
00 121121 00 00 0C 30 CC (lIC 0C 30 3121 FF 00 121121 03 00 0C IZIC 30 0121
00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 0121 0121 00 00 00 00 00 00 0C 30 30 0C 0C 3121 3121 CC 1210 121121 03 00 0C IZIC 30 F0
00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 121121 00 el0
0121 1210 00 00 00 00 00 0C 30 30 0C !ZIC 30 30 C3 00 121121 03 1210 IZIC 0C 30 30
00 00 00 0C 33 03 03 F0 30 30 FF 00 00 03 00 03 F0 0F C0 3F 00 1210 00 03 03 0F "'C 3F C0 FF C0 00 00 00 00 00 121121 1210 0121 00 00 00 00 0e 30 30 I2IC 0C 3121 3121 C3 00 0121 03 00 IZIC 0C 30 30
00 00 00 0C 33 03 (11C 0C 30 30 C0 C0 00 03 00 (lIC (11C 30 30 C0 C0 0121 00 1213 03 0C 00 30 30 C0 00 00 00 00 00 00 00 0121 00 00 00 00 00 0C 3121 30 0C
0C 3121 30 C0 C0 0121 03 00
0C 0C 30 30
• :2F78 .:2F80 • : 2F88 • :2F90 • :2F98 • :2FA0 • :2FAB • :2FB0 • :2FB8 • :2FC0 • :2FC8 .:2FD0 • :2FDB • :2FE0 • :2FE8 • :2FF0 • :2FF8 • :3000 • : 300B
.:3010 • : 301B
• :312120 • : 31212B • :3030 • : 303B
• • • • •
:3040 : 31214B :3050 : 3058 :3050
• :305B
• : 3070 • : 307B
• : 312180 • : 30B8
• • • • • • • • • · • • • • ·
:3090 : 31219B : 30A0 : 30AB :30B0 : 3121B8 :30C0 : 30CB : 30D0 :30DB : 30E0 : 3121EB :30F0 : 30FB :310121
• : 310B
• :311121 .:311B
· :3120 • : 3128 • :3130 • : 313B
• : 3140 • : 314B
C0 C0 00 00 03 03 0C 00 30 30 C0 00 00 00 00 00 00 00 00 00 00 121121 0121 00 0C 30 30 0C I2IC 30 30 C0 C0 00 03 00 I21C 0C 30 30 C0 C0 00 00 1213 03 0C 00 30 30 CI2I 00 1210 00 00 00 1210 00 00
C0 C0 00 00 03 03 0C 00 30 30 C0 00 00 00 00 00 00 00 00 00 00 1210 00 00 0C 30 30 0C 0C 30 30 C0 C0 00 03 00 I21C 0C 30 30 C0 C0 00 00 03 03 I2IC 121121 3121 30 C0 00 00 00 121121 00 0121 1210 00
C0 C0 00 00 03 03 0C 00 30 30 C0 00 00 00 00 00 00 00 00 00 00 121121 1210 00 0C 30 30 03 F0 0F C0 C0 C0 00 03 FF 1213 F0 !ZIF C0 3F 00 00 00 1213 03 I2IF FC 30 3121 FF CI2I 0C 03 121121 CIZI 0C 00 00
C0 C0 00 00 03 03 0C 00 3F C0 C0 00 00 00 00 00 00 00 00 00 00 0121 1210 00 I2IC 30 00 00 00 00 00 00 00 00 1210 00 1210 00 0121 00 00 00 00 0121 1210 00 12I\!1 1210 0121 1210 00 121121 00 00 121121 1210 00 1210 1210
C0 C0 00 00 03 FF 0F F0 33 121121
FF 00 00 00 00 00 00 00 00 00 00 121121 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 0121 00 0121 00 00 0121 1210 00 1210 1210 00 00 00 121121 121121 00 121121 00 00 00 121121
C0 C0 00 00 03 03 0C 00 30 C0 C0 00 00 00 00 00 00 00 00 00 00 1210 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 121121 00 00 00 00 00 00 00 00 00 00 0121 00 00 00 121121 1210 00 121121 00 00 00 00
C0 C0 00 00 03 03 0C 00 30 C0 C0 00 00 00 00 00 00 00 00 00 00 1210 00 00 I2IC 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 121121 00 0121 0121 121121 00 00 1210 00 00 00 00
C0 C0 00 00 03 03 0C 00 30 30 CI21 00 00 00 00 00 00 00 0121 00 1210 00 00 00 I2IC 30 00 00 00 00 00 00 00 00 00 00 1210 00 1210 00 00 00 00 e0 00 00 0121 00 iZ10
0121 00 0121 0121 00 00 1210 00 121121 00
.:3150 00 00 • :3158 00 00 • :3160 00 00 • :3168 00 00 .:3170 00 00 .:3178 0C 0C .:3180 30 30 • :3188 00 00 • :3190 00 00 • :3198 00 00 .:31A0 00 00 • :31A8 00 00 .:31B0 00 00 • :31B8 00 00 .:31C0 00 00 .:31C8 00 00 .:31D0 00 00 .:31D8 00 00 .:31E0 00 00 .:31E8 00 00 • :31F0 00 00 • :31F8 00 00 .:32000000 .:32080000 .:321000 00 .:321800 00 • :3220 00 00 • :3228 00 00 • :3230 00 00 • :3238 00 00 • :3240 00 00 • :3248 00 00 .:3250 00 00 • :3258 00 00 • :3260 00 00 • :3268 00 00 .:327000 00 .:3278 00 00 .:3280 00 00 • :3288 00 00 .:3290 00 00 · :3298 00 00 • : 32A0 00 00 • : 32A8 00 00 .:32B0 00 00 • :32B8 0C 0C .:32C0 30 30 · :32C8 00 00 • :32D0 00 00 • :32D8 00 00 • :32E0 00 00 • : 32E8 00 00 · :32F0 00 00 • :32F8 00 00 • :3300 00 00 • :3308 00 00 • :3310 00 00 • :3318 00 00 • :3320 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 0C 0C 3030 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 0C 0C 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 0C 0C 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 0C 0C 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
• :3328 00 00 00 00 00 00 00 .:3330 00 00 00 00 00 00 00 .:3338 00 00 00 00 00 00 00 .:3340 00 00 00 00 00 00 00 • :3348 00 00 00 00 00 00 00 .:3350 0000 00 0000 00 00 • :3358 00 00 00 00 00 00 00 .:3360 00 00 00 00 00 00 00 • :3368 00 00 00 00 00 00 00 • :3370 00 00 00 00 00 00 00 • :3378 00 00 00 00 00 00 00 .:3380 00 00 00 00 00 00 00 • :3388 00 00 00 00 00 00 00 .:3390 00 00 00 00 00 00 00 • :3~98 00 00 00 00 00 00 00 .:33A0 00 00 00 00 00 00 00 .:33A8 00 00 00 00 00 00 00 .:33B0 00 00 00 00 00 00 00 • :33B8 00 00 00 00 00 00 00 .:33C0 00 00 00 00 00 00 00 • :33C8 00 00 00 00 00 00 00 .:33D0 00 00 00 00 00 00 00 .:33D8 00 00 00 00 00 00 00 .:33E0 00 00 00 00 00 00 00 • :33E8 00 00 00 00 00 00 00 .:33F0 00 00 00 00 00 00 00 • :33F8 0C 0C 0C 0C 0C 0C 0C • :3400 30 30 30 30 30 30 30 • :3408 00 00 00 00 00 00 00 .:34100000 00 00 00 00 00 • :3418 00 00 00 00 00 00 00 .:342000 00 00 00 00 00 00 .:342800000000000000 .:3430 00 00 00 00 00 00 00 • :3438 00 00 00 00 00 00 00 .:3440 00 00 00 00 00 00 00 • :3448 00 00 00 00 00 00 00 .:3450 00 00 00 00 00 00 00 .:3458 00 00 00 00 00 00 00 .:3460 00 00 00 00 00 00 00 • :3468 00 00 00 00 00 00 00 • :3470 00 00 00 00 00 00 00 • :3478 00 00 00 00 00 00 00 .:3480 00 00 00 00 00 00 00 • :3488 00 00 00 00 00 00 00 .:3490 00 00 00 00 00 00 00 • :3498 00 00 00 00 00 00 00 .:34A0 00 00 00 00 00 00 00 • :34A8 00 00 00 00 00 00 00 .:34B0 00 00 00 00 00 00 00 • :34B8 00 00 00 00 00 00 00 .:34C0 00 00 00 00 00 00 00 • :34C8 00 00 00 00 00 00 00 • : 34D0 00 00 00 00 00 00 00 • : 34D8 00 00 00 00 00 00 00 .:34E0 00 00 00 00 00 00 00 • : 34E8 00 00 00 00 00 00 00 .:34F0 00 00 00 00 00 00 00 • : 34F8 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '210 00 00 ~0
00 1210
179
• :3500 • :3508 • :3510 · :3518 · :3520 • :3528 • :3530 : : 3538 • :3540 • :3548 • :3550 • :3558 • :3560 • :3568 • :3570 • :3578 • :3580 • :3588 • :3590 • :3598 .:35A0 • :35A8 • :3580 • :3588 .:35C0 • :35C8 • :3500 • :3508 • :35E0 • : 35E8 · :35F0 • :35F8 · :3600 • :3608 • :3610 • :3618 · :3620 · :3628 .:3630 • :3638 • :3640 • : 3648 • :3650 • :3658 • :3660 • :3668 • :3670 • : 3678 • :3680 • :3688 · :3690 · :3698 • :36A0 • : 36A8 · :3680 · :3688 · :36C0 · : 36C8 · :3600
180
00 00 00 00 00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 0C 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 1210 00 00 00
00 00 00 00 00 00 00 0C 3F FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FC 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00 A0 80 20 88 A8 A0 28
00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 82 00 88 80 20 88 80 88 80
00 '210 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02
00 A0 80 88 A8 80 A0 80
• :3608 • : 36E0 • :36E8 • :36F0 • : 36F8 • :3700 • :3708 • : 3710 • : 3718 .:3720 • : 3728 .:3730 • :3738 • :3740 • : 3748 • : 3750 • : 3758 • :3760 • :3768 • :3770 • : 3778 • :3780 • : 3788 • :3790 • :3798 • J37A0 • : 37A8 • :3780 • :3788 • :37C0 • :37C8 • :3700 • :37D8 .:37E0 • :37E8 • :37F0 • : 37F8 • : 3800 • :3808 .:3810 • :3818 • :3820 .:3828 • :3830 .:3838 • :3840 • :3848 • :3850 • :3858 .:3860 • :3868 • :3870 • :3878 • :3880 • :3888 · :3890 • :3898 • :38A0 • :38A8
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 80 80 88 20 A0 88 20 00 00 00 00 2A 20 22 22 08 22 22 22 00 00 00 00 00 08 08
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 80 80 A8 20 80 88 08 00 00 00 00 22 20 2A A2 08 2A 22 22 00 00 00 00 00 08 08
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 80 80 88 20 80 88 08 00 00 00 00 22 20 28 A2 20 22 22 22 00 00 00 00 00 08 08
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA 00 80 A8 88 20 A8 88 A0 00 00 00 00 22 20 08 82 2A 22 22 28 00 00 00 00 00 0A 82
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 11 10 20
22 2A 04 14 28 00 00 00 00 00 08 02 02 02 22 A0 82 82 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 11 10 20 22 02 04 11 22 00 00 00 00 00 08 08 82 02 20 20 82 22 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 11
10 22 22 08 11 14 22 00 00 00 00 00 08 08 82 02 20 82 22 82 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.:38B0 • :38B8 .:38C0 • :38C8 .:38D0 • : 38D8 .:38E0 • :38E8 · :38F0 • : 38F8 • :3900 • :3908 .:3910 • :3918 • :3920 • :3928 .:3930 • :3938 .:3940. • :3948 .:3950 • :3958 .:3960. • :3968 • :3970 • :3978 .:3980 • :3988 .:3990 • :3998 .:39A0 • :39A8 .:39B0 .:39B8 .:39C0 • :39C8 • :39D0 • :39D8 .:39E0 • :39E8 .:39F0 • : 39F8 .:3A00 • :3A08 .:3A10 • :3A18 .:3A20 • :3A28 .:3A30 .:3A38 .:3A40 • :3A48 .:3A50 • :3A58 .:3A&0 .:3A&8 .:3A70 .:3A78 .:3A80
82 82 22 AA 20 20 82 82 22 A2 22 22 20 20 00 00 00 00 00 00 00 00 00 00 00 00 0.0. CC 00 C0 00 0.0 00 44 00 C0 0.0 00 00 00 00 00 00 00 0.0 00. 00 00 00 00 00 00 00 00 00 ~0 00 0C 00 CC 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 CC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 1F 03 03 00 00 08 3A 0101 00 00
82 00 8A 88 22 22 02 A2 22 22 22 22 20 80 00 00 00 00 00 00 00 00 00 00 00 00 CC FF C2 C2 0.0. 0.0. 4455 C2 C2 00 00 00 00 00. 00 00 00 00. 0.0. 00 00 00 00 00 00 00 00 00 00 0C 0F CC FC 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 0F CC FC 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 5F 55 87 57 00 03 FA FF 8D FD 00 00
00 00 00 00 00 00 00 0000 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00. 00. 15 11 11 0C 0.2 02 02 02 0.0. 00 0.0 00. 3F 33 33 08 02 0.2 02 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00. 0.0. 0.0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00 A0 20 20 40 30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00. 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00 A0 20 20 40 30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC CC FF FF 8383 83 83 00 00 00 00 88 88 AA AA 81818181 00 00 00 00
• :3A88 .:3A90 .:3A98 .:3AA0 .:3AA8 .:3AB0 .:3AB8 .:3AC0 • :3AC8 .:3AD0 .:3AD8 .:3AE0 • :3AE8 .:3AF0 • :3AF8 .:3B00 .:3B08 .:3B10 • :3B18 .:3B20 .:3B28 .:3B30 .:3B38 .:3B40 • :3B48 .:3B50 • :3B58 .:3B60 .:3B&8 .:3B70 • :3B78 .:3B80 • :3B88 .:3B90 • :3B98 .:3BA0 • :3BA8 .:3BB0 .:3BB8 .:3BC0 • :3BC8 .:3BD0 • :3BD8 .:3BE0 .:3BE8 .:3BF0 • :3BF8 .:3C00 • :3C08 .:3C10 • :3C18 .:3C20 • :3C28 .:3C30 • :3C38 .:3C40 • :3C48 .:3C50 .:3C58
00 00 00 00 00 00 00 00 00 00 80 30 00 00 00 00 00 00 00 00 00 00 00 80 30 00 00 00 00 00 00 00 00 00 11 02 00 33 02 00 00 00 00 00 00 00 00 00 00 02 20 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 03 A0 30 00 00 00 00 00 00 00 00 00 00 03 A0 30 00 00 00 00 00 00 00 00 00 11 00 00 33 00 00 00 00 00 00 00 00 00 00 00 02 20 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 0F A8 B0 00 00 00 00 00 00 00 00 00 00 0F A8 B0 00 00 00 00 00 00 00 00 00 11 00 00 33 00 00 00 00 00 00 00 00 00 00 00 02 EC 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 3F FF B0 00 00 00 00 00 00 00 00 00 00 3F FF B0 00 00 00 00 00 00 00 00 00 ID C0 00 3B C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 0A 03 88 88 A8 30 30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0808 0A 03 88 88 A8 30 30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00
181
.:3C60 .:3C68 .:3C70 .:3C78 .:3C80 • :3C88 .:3C90 .:3C98 .:3CA0 .:3CA8 .:3CB0 • :3CB8 .:3CC0 • :3CC8 • :3CD0 • :3CD8 .:3CE0 • :3CE8 • :3CF0 • :3CF8 • :3D00 • :3D08 .:3D10 • :3D18 .:3D20 • :3D28 • :3D30 • :3D38 .:3D40 • :3D48 .:3D50 .:3D58 .:3D60 • :3D68 .:3D70 • :3078 .:3D80 • :3D88 .:3D90 • :3D98 .:3DA0 • :3DA8 .:3DB0 • :3DB8 .:3DC0 • :3DC8 • :3DD0 • :3DD8 .:3DE0 • :aDE8 .:3DF0 • :3DF8 .:3E00 • :3E08 • :3E10 • :3E18 .:3E20 • :3E28 .:3E30
182
00 00 00 02 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 20 02 00 08 02
00 00 00 02 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 20 02 00 08 02
00 00 00 02 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8A 20 02 00 08 02
00 00 00 00 00 00 02 00 EC 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 00 00 28 00 00 00 A0 00 0A 00 80 00 20 00 20 00 A8 00 02 00 A0 00 0A 00 02 00 08 00 2A 00 A0 00 02 00 02 00 80 00 28 00 02 00 80 00 00 00 2A 00 82 00 02 00 0A 00 A8 00 2A 00 00 00 20 00 0F 00 80 00 80 00 80 00 00 00 00 00 00 80 20 20 80 02 00 80 A2 08 02 02 08
00 00 00 00 00 00 00 00 00 00 00 00 00 20 80 00 A2 02 08 08 20 20 20 82 00 80 20 82 08 02 00 0A 08 20 82 02 80 00 20 02 82 00 80 20 80 88 0C 20 80 80 00 00 00 0A 00 00 28 00 A0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 8A 20 20 02 02 80 00 08 08 02 02 08 08 08 08 08 08 8080 80 80 80 80 80 80 80 80 82 02 08 08 02 02 00 00 02 02 08 08 20 20 82 82 08 08 80 80 00 00 20 20 02 02 82 82 00 00 80 80 20 20 82 82 02 02 0C 0C 20 20 22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.:3E38 08 0A 080808080000 .:3E40 20 80 00 00 00 00 00 00 • :3E48 02 02 02 02 02 02 00 00 .:3E50 00 00 00 00 00 00 00 00 • :3E58 82 A8 88 82 80 80 00 00 .:3E60 00 00 00 00 80 82 00 00 .:3E68 80 80 80 80 80 A0 00 00 .:3E70 80 82 80 80 20 0A 00 00 .:3E7802 82 82 82 82 02 00 00 .:3E80 A8 08 08 08 08 08 00 00 .:3E88 02 02 02 02 02 02 00 00 .:3E90 00 00 00 00 00 00 00 00 • :3E98 02 02 02 02 02 0A 00 00 .:3EA0 02 00 00 00 02 80 00 00 • :3EA8 A0 20 20 20 20 80 00 00 .:3EB0 28 28 82 82 82 28 00 00 • :3EB8 0A 00 00 00 00 00 00 00 .:3EC0 A0 80 80 80 80 80 00 02 .:3EC8 00 00 00 00 80 80 80 00 • :3ED0 2A 20 20 20 20 2A 00 00 • :3ED8 02 02 02 02 02 82 00 00 .:3EE0 22 22 0A 0A 0A 02 00 00 .:3EE8 00 00 00 00 00 00 00 00 .:3EF0 80 80 80 80 80 80 00 00 • :3EF8 2A 22 20 20 20 20 00 00 • :3F00 02 02 82 82 80 80 00 00 • :3F08 02 02 02 02 88 20 00 00 .:3F10 0A 08 08 08 08 08 00 00 • :3F18 80 00 00 00 00 00 00 00 .:3F20 08 08 08 08 08 08 00 00 • :3F28 00 00 00 00 00 00 00 00 .:3F30 00 00 00 00 00 00 00 00 • :3F38 00 00 00 00 00 00 00 00 • :3F40 30 DF 7D BB 7F EF 7D 7F • :3F48 7F EE 7D 8F 7F CE 70 FF .:3F50 3F 9E 7F 82 7F 80 7F 8D • :3F58 3F 82 7F C0 3D C7 7D OF .:3F60 7F FF 7F 90 7D 8F 3D CF • :3F68 70 80 7F 8B 7F 82 70·04 .:3F70 7F 86 3F 92 3D 82 7F CB • :3F78 70 8A 7D BE BD BA 7D 00 .:3F80 9B F5 8F F5 FF Bl 4A B0 • :3F88 8B F5 0E B1 9A 31 4B 31 .:3F90 DB 75 0A F5 8A F5 0A Fl .:3F98 CE F5 0A F5 DB F1 7F 71 .:3FA0 8A 71 0A F1 CF Fl 0A F1 .:3FA8 AA F5 FB F1 9B F5 4B 71 .:3FB0 FF 71 FF F5 DF F5 4B F5 .:3FB8 DF F5 3B 71 FF F5 FF 71 .:3FC0 8C 7D 8C 75 B4 75 80 8A • :3FC8 80 79 84 79 D0 39 81 31 .:3FD0 D8 79 B0 7D 80 7D 80 75 .:3FD8 C6 7D 90 7D C5 79 F5 31 .:3FE0 80 79 82 7D BA 7S C7 71 .:3FE8 AA 7D C2 7S CS 7D 8A FB .:3FF0 F7 79 FF 7D D2 7D 8A 7D .:3FF8 97 75 F3 71 FF 7D FF FF .:4000 68 00 29 08 14 20 08 C4 .:40082068042909666008
• :4010 2A 20 68 26 29 00 .:40180266 60 2A 83 AA • :4020 11 00 33 00 00 FF • :4028 CC C0 00 00 00 00 .:4030 00 00 00 00 00 00 • :4038 00 00 00 00 00 00 .:4040 68 00 29 08 68 20 • :4048 29 68 04 29 69 66 .:4050 2A 29 68 26 29 00 • :4056 02 66 60 2A 83 AA .:4060 11 00 33 00 00 FF • :4068 CC C0 00 00 00 00 .:4070000000000000 • :4078 00 00 00 00 00 00 .:4080680029 08 68 20 • :4088 29 68 04 29 69 66 .:4090 2A 29 68 26 29 00 .:4098026660 2A 83 AA .:40A0 11 00 33 00 00 FF • :40A8 CC C0 05 55 54 05 .:4080000000 00 00 00 • :4088 00 00 00 00 00 00 .:40C0 68 00 29 08 14 20 • :40C8 20 68 04 29 09 66 • :40D0 2A 20 68 26 29 00 • :40D8 02 66 60 2A 83 AA • :40E0 11 00 33 00 00 FF • :40E8 CC C0 05 55 54 05 • : 40F0 00 00 00 00 00 00 • :40F8 00 00 00 00 00 00 • :4100 11 11 00 15 51 00 • :4108 00 0A 81 00 03 01 • :4110 C1 00 17 C1 00 5F • :4118 15 5A 00 3F F1 00 .:4120 00 3F F1 00 04 40 • :4128 40 00 07 70 00 00 .:4130 00 00 00 00 00 00 • :4138 00 00 00 00 00 00 .:4140 11 11 00 15 51 00 • :4148 00 0A 81 00 03 01 .:4150 C1 00 17 C1 00 5F .:4158 15 5A 00 3F F1 00 .:4160 00 3F F1 00 04 40 .:4168 40 00 07 70 00 00 • :4170 00 00 00 00 00 00 • :4178 00 00 00 00 00 00 .:4180 08 00 00 20 00 00 .:41880002 00 00 02 00 .:4190 00 00 00 00 00 00 .:4198 00 00 00 00 00 00 .:41A0 00 00 00 00 00 00 .:41A8 00 00 00 00 00 00 .:4180 00 00 00 00 00 00 • :4188 00 00 00 00 00 00 • :41C0 08 00 00 02 00 00 • :41C8 00 28 00 00 20 00 .:41D0 00 00 00 00 00 00 .:41D8 00 00 00 00 00 00 .:41E0 00 00 00 00 00 00
A6 11 C0 00 00 00 29 69 A6 11 C0 00 00 00 29 69 A6 11 C0 55 00 00 08 60 A6 11 C0 55 00 00 02 00 C1 37 00 00 00 00 02 00 C1 37 00 00 00 00 28 00 00 00 00 00 00 00 02 00 00 00 00
80 33 00 00 00 00 C4 68 80 33 00 00 00 00 C4 68 80 33 00 54 00 00 C4 08 B0 33 00 54 00 00 B1 07 00 71 04 00 00 00 B1 07 00 71 04 00 00 00 00 08 00 00 00 00 00 00 00 08 00 00 00
• :41E8 .:41F0 • :41F8 .:4200 .:4208 .:4210 • :4218 .:4220 .:4228 .:4230 • :4238 .:4240 • :4248 .:4250 • :4258 .:4260 • :4268 • :4270 • :4278 .:4280 • :4288 .:4290 • :4298 .:42A0 .:42A8 • :4280 · :4288 .:42C0 • :42C8 .:42D0 .:42D8 • :42E0 • :42E8 • :42F0 • :42FB .:4300 .:4308 .:4310 • :4318 .:4320 .:4328 .:4330 .:4338 .:4340 .:4348 • :4350 • :4358 • :4360 • :4368 .:4370 • :4378 · :4380 • :4388 • :4390 • :4398 • :43A0 • :43A8 • :4380 • :4388
00 00 00 FF FF FF FF FF FF 00 00 00 00 FF 00 00 00 00 00 E0 00 00 98 28 40 00 00 00 00 00 40 73 99 00 00 00 00 00 00 00 62 00 00 00 04 00 00 04 48 00 00 00 00 00 08 3C 91 00 00
00 00 00 FF FF FF FF FF FF 00 00 18 00 C0 3C 00 00 00 00 00 98 00 40 88 10 00 00 00 00 00 C9 40 22 00 00 ·00 00 00 00 00 00 00 00 00 00 04 00 43 04 00 00 00 40 00 91 08 20 00 00
00 00 00 FF FF FF FF FF FF 00 00 00 FF 03 00 3C 00 00 00 00 00 E0 44 40 88 00 00 00 00 7C 22 A9 7C 00 00 00 00 E0 00 93 00 00 00 07 00 00 04 CE 42 00 00 00 00 08 20 91 08 00 00
00 00 00 FF FF FF FF FF FF 00 00 00 00 FF 00 00 00 00 00 80 00 7C 88 28 7C 00 00 00 00 BB 40 12
98 00 00 00 00 00 00 80 00 00 00 00 04 00 F2 04 4F 00 00 80 00 8E 08 20 8E 00 00
00 00 00 FF FF FF FF FF FF 00 00 3C 01 C0 3C 00 00 00 00 00 98 82 40 88 10 00 00 00 00 C3 A9 40 C3 00 00 00 00 00 63 00 00 00 00 00 00 07 4F 42 04 00 00 00 40 3E 91 08 3E 00 00
00 00 00 FF FF FF FF FF FF 00 00 00 FF 03 00 3C 00 00 00 00 00 90 44 40 00 00 00 00 00 40 02 99 00 00 00 00 00 00 C1 92 00 00 00 05 00 00 04 48 00 00 00 00 00 08 20 91 00 00 00
00 00 00 FF FF FF FF FF FF 00 00 00 80 FF 00 00 00 00 00 98 00 40 88 10 00 00 00 00 00 C9 78 12 00 00 00 00 00 00 C0 00 00 00 00 00 04 00 42 04 00 00 00 40 00 91 0F 20 00 00 00
00 00 00 FF FF FF FF FF FF 00 00 7E 03 C0 3C 00 00 00 00 00 80 82 78 88 00 00 00 00 00 22 A9 40 00 00 00 00 00 00 92 E0 00 00 00 00 00 04 48 42 00 00 00 00 80 20 91 08 00 00 00
183
.:4~C0 00 00 00 00 00 00 00 00 • :43C8 00 00 00 00 00 00 00 00 .:43D0 00 00 44 F9 10 64 21 10 • :43D8 64 21 B0 54 20 R0 54 20 .:43E0 40 54 20 R0 4C 21 B0 4C • :43E8 21 10 44 F9 10 00 00 00 .:43F0 00 00 00 00 00 00 00 00 • :43F8 00 00 00 00 00 00 00 00 .:4400 80 20 70 80 20 88 80 21 • :4408 04 80 22 02 80 22 02 80 .:4410 22 02 80 22 02 44 42 02 • :4418 44 42 02 2E 82 02 2A 82 .:4420 02 1101 04 11 00 88 11 • :4428 00 70 00 00 00 00 00 00 .:4430 00 00 00 00 00 00 00 00 • :4438 00 00 00 00 00 00 00 00 .:4440202000 30 20 00 30 20 • :4448 00 28 20 00 28 20 00 24 .:445020 00 22 20 00 22 20 00 • :4458 21 20 00 20 A0 00 20 R0 .:4460 00 20 60 00 20 60 00 20 • :4468 20 00 00 00 00 00 00 00 .:4470 00 00 00 00 00 00 00 00 .:4478 00 00 00 00 00 00 00 00 .:44808023 FC 8022 00 80 22 • :4488 00 80 22 00 80 22 00 80 .:4490 22 00 80 23 F0 44 42 00 .:4498 44 42 00 2E 82 00 2A 82 .:44A000 11 02 00 11 02 00 11 .:44R8 03 FC 00 00 00000000 .:4480 00 00 00 00 00 00 00 00 .:448800 00 00 00 00 00 00 00 .:44C0 AA A0 00 AA A0 00 00 00 • : 4'4C8 00 FF F0 00 FF F0 00 00 .:44D0 00 00 55 50 00 55 50 00 .:44D8 00 00 00 AA A0 00 AR R0 .:44E0 00 00 00 00 00 00 00 00 • :44E8 00 00 00 00 00 00 00 00 .:44F0 00 00 00 00 00 00 00 00 • :44F8 00 00 00 00 00 00 00 00 .:4500 AR RA 00 RR RA 00 00 00 • :4508 00 FF F0 00 FF F0 00 00 .:4510 00 00 55 50 00 55 50 00 .:451800 00 00 AA A0 00 AR A0 .:45200000000000 00 00 00 • :4528 00 00 00 00 00 00 00 00 .:453000 00 00 00 00 00 00 00 • :4538 00 00 00 00 00 00 00 00 .:4540 RA RA 00 RA AA 00 00 00 • :4548 00 FF FF 00 FF FF 00 00 .:455000 00 55 50 00 55 50 00 • :4558 00 00 00 AA R0 00 RR A0 .:4560 00 00 00 00 00 00 00 00 • :4568 00 00 00 00 00 00 00 00 .:4570 00 00 00 00 00 00 00 00 • :4578 00 00 00 00 00 00 00 00 • :4580 AA AR 00 RA RR 00 00 00 • :4588 00 FF FF 00 FF FF 00 00 • :4590 00 00 55 55 00 55 55 00
184
• :4598 00 00 .:45R0 00 00 • :45R8 00 00 .:45B0 00 00 • :45B8 00 00 .:45C0 AR RA • :45C8 00 FF .:45D0 00 00 • :45D8 00 00 .:45E0 00 00 • :45E8 00 00 .:45F0 00 00 .:45F8 00 00 .:4600 RR RR • :4608 00 FF .:4610 00 00 • :4618 00 00 .:4620 00 00 • :4628 00 00 .:4630 00 00 • :4638 00 00 .:4640 AA RR • :4648 00 FF .:465000 00 • :4658 00 00 .:4660 00 00 • :4668 00 00 .:4670 00 00 • :4678 00 00 .:4680 RA AR • :4688 00 FF .:4690 00 00 • :4698 00 00 .:46A0 00 00 • :46R8 00 00 .:468000 00 • :46B8 00 00 .:46C0 AR RR • :46C8-00 FF .:46D0 00 00 • :46D8 00 00 .:46E0 R0 00 • :46E8 00 00 .:46F0 00 00 • :46F8 00 00 .:4700 AR RR • :4708 00 FF .:4710 00 00 • :4718 00 00 .:4720 R0 00 • :4728 00 00 .:47300000 • :4738 00 00 .:4740 AA RR .1474800 FF .:4750 00 00 • :4758 00 00 .:4760 A0 00 • :4768 00 00
00 RR 00 00 00 00 00 00 00 00 00 AA FF 00 55 55 00 AA 00 00 00 00 0000 00 00 R0 AR FF 00 55 55 00 RR 00 00 00 00 00 00 00 00 R0 AA FF F0 55 55 00 RR 00 00 00 00 00 00 00 00 A0 RR FF F0 55 55 00 AR 00 00 00 00 00 00 00 00 R0 RA FF F0 55 55 00 RA 00 00 00 00 00 00 00 00 RR RR FF F0 55 55 00 RA 00 00 00 00 00 00 00 00 AA AA FF FF 55 55 00 AA 00 00 00 00
R0 00 00 00 00 RA FF 00 RA 00 00 00 00 RR FF 00 AR 00 00 00 00 AA FF 00 RR 00 00 00 00 RR FF 50 RR 00 00 00 00 RA FF 50 RA 00 00 00 00 RA FF 50 AR 00 00 00 00 AA FF 50 AA 00 00
00 RR 00 00 00 00 00 00 00 00 00 00 FF 00 55 55 00 AR 00 00 00 00 00 00 00 00 A0 00 FF 00 55 55 00 AA 00 00 00 00 0000 00 00 R0 00 FF F0 55 55 00 RA 00 00 00 00 00 00 00 00 R0 00 FF F0 55 55 00 RA 00 00 00 00 00 00 00 00 A0 00 FF F0 55 55 R0 RA 00 00 00 00 00 00 00 00 RR 00 FF F0 55 55 R0 AR 00 00 00 00 00 00 00 00 AA 00 FF FF 55 55 A0 AA 00 00 00 00
R0 00 00 00 00 00 00 00 RR 00 00 00 00 00 00 00 RR 00 00 00 00 00 00 00 RR 00 00 00 00 00 00 50 RR 00 00 00 00 00 00 50 RR 00 00 00 00 00 00 50 RR 00 00 00 00 00 00 50 AR 00 00
• :477121 • :4778 • :478121 • :4788 • : 47'3121 • :47'38 • :47AI2I • :47A8 • :478121 • :47B8 .:47CI2I • :47C8 .:470121 • :4708 .:47EI2I • :47E6 .:47FI2I .:47F6 .:460121 • :4606 .:4610 • :4616 .:462121 • :4626 .:463121 • :4636 .:464121 • :4848 .:465121 • :4656 • :466121 • :4666 • :467121 • :4878 • :466121 • :4868 • : 46'3121 • : 48'36 • :46AI2I • :46A6 • :46BI2I • :48B8 .:48CI2I • :48C6 • :4130121 • :4808 • : 46EI2I • :46E8 • :4aFI2I • :48FB • : 4'3121121 • : 4'31216 • :491121 • :4'316 .:4'320 • : 4'32B .:4'33121 • :4'336 .:4'34121
121121 121121 AA 121121 121121 121121 AI2I 121121 121121 121121 AA 121121 121121 121121 AA 121121 121121 121121 40 4121 FA 45 00 00 0121 0121 8121 6121 5F 6A 121121 0121 121121 00 121121 121121 121121 121121 121121 121121 121121 121121 121121 0121 121121 121121 121121 121121 121121 1210 A2 11 1214 00 35 21 81 3121 IZ!I2I
121121 121121 AA FF 121121 121121 121121 121121 121121 121121 AA FF 121121 121121 121121 121121 121121 121121 15 5E 55 65 1210 00 1210 1210 2A A7 AA BA 00 121121 1210 0121 121121 121121 121121 0121 121121 121121 121121 121121 1210 0121 121121 121121 1210 121121 121121 121121 F7 FF 00 FF A3 FF F7 FF 31
121121 121121 AA FF 55 121121 121121 121121 121121 121121 AA FF 55 121121 121121 121121 121121 121121 00 AF lA 54 00 00 00 0121 1210 5F 2F AI2I 1210 1210 00 00 121121 121121 1210 121121 121121 121121 121121 121121 0121 1210 1210 0121 121121 0121 121121 121121 FI2I 121121 07 1210 22 121121 DI2I 121121 121121
121121 121121 AA FF 55 AA 121121 121121 121121 121121 AA FF 55 AA 121121 121121 121121 121121 15 5121 EF 05 121121 0121 121121 0121 2A AI2I 75 I2IA 121121 121121 121121 0121 121121 121121 121121 121121 121121 121121 121121 121121 0121 0121 1210 121121 121121 121121 121121 121121 FF 3F 121121 FF FF F7 FF FF FO
121121 121121 121121 121121 55
121121 121121 AA FF 55
121121 121121 121121 FF 55
A~
~w
HH HH
121121 121121 121121 121121 AA FF 55 AA 121121 121121 121121 121121
121121 121121 121121 121121 AA FF 55 AA 121121 121121 121121 121121 00 AE lE 4121 1210 0121 121121 00 1210 F7 27 6121 1210 121121 121121 0121 121121 121121 121121 121121 121121 121121 121121 121121 121121 0121 121121 0121 121121 121121 121121 121121 FF FF FF
121121 121121 121121 121121 121121 FF 55 AA 121121 121121 121121 121121 65 94 AB 01 1210 121121 1210 0121 '3A E8 70 1212 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 121121 OF 121121 1210 00 F7 51 121121 1217 1121
121121 121121 AA FF 55
55
18 5121 51 1210 1210 1210 1210 AA 20 A0 A2 1210 1210 1210 0121 121121 121121 121121 121121 121121 121121 121121 121121 121121 00 1210 121121 121121 121121 1210 121121 121121 50 121121 D0 32 20 FF 121121 FF 121121 FF 0121 FO 1210 F7
121121 121121 121121 121121 121121 121121 55 AA 121121 121121 121121 121121 A'3 6A 54 41 00 121121 121121 1210 FE BF A6 62 1210 0121 121121 1210 121121 121121 121121 121121 121121 121121 121121 1210 1210 121121 121121 121121 1210 121121 121121 121121 7F F4 121121 F3 FF 30 36 FF F7
• : 4'348 .:4'35121 • : 4'358 .:4'36121 • : 4'368 .:4'37121 • : 4'378 • :4'38121 • : 4'388 • : 4'3'3121 • : 4'3'38 .:49AI2I .:49A8 • :498121 • :4988 • :49CI2I • :49C8 • : 49DI2I • :49D8 .:49EI2I • :49E8 • : 49FI2I • :49F8 • :4A00 • :4A06 .:4A10 • :4A16 .:4A20 • :4A26 .:4A30 • :4A36 .:4A40 • :4A46 .:4A5121 • :4A56 .:4A6121 • :4A66 .:4A7121 • :4A76 .:4A6121 • :4A66 .:4A'3121 • :4A'36 • :4AAI2I • :4AA8 • :4A80 • :4AB8 • :4ACI2I • :4AC8 .:4AOI2I • :4AOB • :4AEI2I • :4AEB • : 4AFI2I • : 4AFB • :480121 • :4B08 .:481121 • :481B .:482121
31 121121 121121 71 21 121121 121121 07 FF 11 11 31 71 1212 Bl 121121 121121 11 5121 21 121121 31 31 A3 11 1214 1210 35 21 31 3121 121121 31 121121 121121 9121 21 121121 121121 94 FF 11 11 31 71 23 81 121121 0121 11 5121 21 0121 31 31 AI2I 11 121121 121121 31
FF F7 FF FF FF FF FF FF FF FF DO F2 F3 FF 3F DD F3 DD FF FF FF FF 73 F7 FF 00 FF 23 FF F7 FF 31 FF F3 FF FF FF FF FF FF FF FF 00 F2 F3 FF 3F 00 F3 00 FF FF FF FF 73 F7 FF 00 FF 23
1215 0121 121121 121121 121121 121121 2F 121121 121121 '3121 07 121121 FI2I 121121 121121 121121 121121 121121 121121 121121 121121 FF FF BI2I 121121 '34 0121 22 0121 00 0121 00 04 00 121121 121121 121121 121121 2F 121121 121121 '30 84 121121 FI2I 1210 121121 121121 121121 1210 121121 1210 121121 FF FF 3121 121121 '33 121121 22
F6 FF FF F5 FF FF FF F5
FF FF 8121 FD FF FF FI2I 5F FF FD FF F5 FF FI2I FD FF 3F 121121 FF FF F7 FF FF FO B6 FF FF F5 FF FF FF F5 FF FF 80 80 FF FF FI2I 5F FF FO FF F5 FF 8121 FO FF 3F 121121 FF FF
01 121121 121121 24 121'11 121121 1212 FD D7 121121 121121 121121 121121 121121 8121 20
1212 121121 121121 Dl 121121 121121 F2 1210 50 0121 '3121 2121 00 1210 00 1210 01 1210 121121 24 121121 121121 1212 80 B4 121121 0121 1210 121121 00 121121 2121 02 121121 121121 01 121121 00 82 0121 50 121121 B0 2121
71 FF AF FF FF FF FF 32
FF FF 87 FF 36 FF FF Fl 5D FF FF 31 FD FF 33 FF FF FF 32 FF FF FF 00 F7 71 FF 2F FF FF FF FF 32 FF FF B7 FF 32 FF FF Fl 50 FF FF 31 FO FF 33 FF FF FF 32 F8
31 121121 1121 10 1121 121121 1211 121121 4121 121121 121121 77 121121 121121 DI2I 121121 121121 32 121121 121121 121121 1214 FE. DF 121121 121121 121121 94 51 1210 11 10 31 1210 1121 10 1121 121121 121121 121121 4121 1210 0121 77 1121 1210 '3121 121121 121121 32 121121 121121 121121 04 86 08 0121 121121 0121 33
FF FF F5 FO 31 FF 37 FF DD 3121 7A FF FF FF 19 3D FF FF BF FF FE. DI2I FI2I 7F B4 1210 F3 FF 30 32 FF 94 FF FF Fl FO 31 FF 35 FF 00 31 3A FF FF FF 19 30 FF FF BF FF F2 D0 88 7F A4 0121 F3 FF
185
· :4B28 .:4B30 • :4B38 • :4B40 • : 4B48 • :4B50 • :4B58 · : 4B50 • : 4B58 • : 4B70 • : 4B78 • :4B80 • :4B88 · : 4B'30 • : 4B'38 · :4BA0 · :4BA8 .:4BB0 • :4BB8 · :4BC0 • :4BC8 • : 4BD0 • :4BD8 • :4BE0 .:4BE8 • :4BF0 • :4BF8 • :4C00 • :4C08 .:4C10 • :4C18 • : 4C20 • : 4C28 .:4C30 · : 4C38 · : 4C40 .:4C48 • : 4C50 • :4C58 • : 4C50 · : 4C58 • : 4C70 • : 4C78 .:4C80 .:4C88 .:4C'30 • :4C'38 .:4CA0 • :4CA8 .:4CB0 • :4CB8 .:4CC0 · :4CC8 .:4CD0 • :4CD8 .:4CE0 • :4CE8 .:4CF0 • :4CF8
186
21 31 30 00 31 00 00 31 21 00 '210 13 FF 11 11 31 71 00 B1 00 00 11 40 21 00 31 31 AA 00 00 55 00 00 00 00 00 31 00 00 Fl 21 00 00 F7 FF 11 11 31 71 23 Bl 00 00 11 40 21 00 31 31
FF F7 FF 31 FF F3 FF FF FF FF FF FF FF FF DD F2 F3 FF 3F DD F3 DD FF FF FF FF 73 00 00 00 00 00 00 00 00 31 FF F3 FF FF FF FF FF FF FF FF DD F2 F3 FF 3F 00 F3 OD FF FF FF FF 73
00 D0 00 00 01 00 00 00 00 00 2F 00 00 80 13 00 F0 00 00 00 00 00 00 00 00 FF FF 00 00 FF 00 00 AA 00 00 00 05 D0 00 00 00 00 2F 00 00 80 D7 00 F0 00 00 00 00 00 00 00 00 FF FF
F7 FF FF FD A2 FF FF F5 FF FF FF F5 FF FF 80 70 FF FF F0 5F FF FO FF F5 FF B0 FD. AA 00 00 55 00 00 00 00 FO E5 FF FF F5 FF FF FF F5 FF FF 80 FD FF FF F0 5F FF FD FF F5 FF F0 FD
00 00 00 00 D1 00 00 24 00 00 02 30 12 00 00 00 00 00 00 20 02 00 00 Dl 00 00 B2 00 FF 00 00 AA 00 00 00 00 D1 00 00 24 00 00 02 FO D7 00 00 00 00 00 00 20 02 00 00 Dl 00 00 F2
FF FF DD F7 71 FF 2F FF FF FF FF 33 FF FF B7 FF 33 FF FF Fl 59 FF FF 31 FD FF 33 00 00 00 00 00 00 00 00 F7 71 FF 2F FF FF FF FF 32 FF FF B7 FF 32 FF FF Fl 5D FF FF 31 FD FF 33
51 3D 00 33 03 FF 10 93 31 FF 00 FF 10 F1 00 FD 10 31 00 FF 01 37 00 FF 40 DD 00 31 00 72 77 FF 00 F7 00 FF 10 19 00 30 00 FF 32 FF 00 2F 00 FF 00 F2 00 00 A2 90 AA 00 00 FF 00 00 55 00 00 AA 00 00 00 00 00 00 10 F7 31 FF 00 FF 10 Fl 0D FD 10 31 00 FF 01 37 00 FF 40 DD 00 31 00 7A 77 FF 00 FF 00 FF D0 1'3 003D 00 FF 32 FF 00 SF 00 FF 00 F2 00 00 E5 D0
• :4D00 • :4D08 • : 4D10 · :4D18 • :4D20 • : 4D28 .:4D30 • :4D38 • : 4:Q40 • : 4D48 · :4D50 · :4D58 • : 4D50 • : 4D58 • : 4D70 • : 4D78 • : 4D80 • :4D88 · : 4D'30 · :4D'38 • : 4DA0 · :4DA8 • :4DB0 · :4DB8 .:4DC0 • : 4DC8 • :4DD0 • : 4DD8 • :4DE0 • : 4DE8 · : 4DF0 · : 4DF8 • : 4E00 • :4E08 • : 4E10 • : 'tE 18 .:4E20 • : 4E28 • :4E30 • :4E38 .:4E40 • : 4E48 • : 4E50 .:4E58 • : 4E50 • :4E58 .:4E70 • :4E78 • : 4E80 .:4E88 • :4E90 • :4E98 • :4EA0 · : 4EA8 .:4EB0 • : 4EB8 .:4EC0 • : 4EC8 .:4ED0
A2 F7 01 FF 00 DD 00 FF 21 23 21 FF 21 F7 30 FF 00 21 21 FF 00 F3 00 FF 71 FF 21 FF 00 FF 00 FF 53 FF FF FF 01 FF 01 DD 21 F2 71 F3 02 FF 21 3F 00 DF 00 F3 01 DF 50 FF 21 FF 00 FF 21 FF 31 73 A0 F7 11 FF 04 DD 00 FF 3523 21 FF 31 F7 30 FF 00 31 31 FF 00 F3 00 FF 71 FF 21 FF 00 FF 00 FF 57 FF FF FF 11 FF 11 DD 31 F2 71 F3 20 FF Bl 3F 00 DD 00 F3 11 DD
70 00 53 00 22 00 00 00 00 01 D0 00 00 00 00 2F 00 00 '30 53 00 F1 00 00 00 00 00 00 00 00 FF FF 70 00 D7 00 22 00 00 00 00 05 D0 00 00 00 00 2F 00 00 90 57 00 F0 00 00 00 00 00
FF 3F 00 FF FF F7 FF FF FD E2 FF FF F5 FF FF FF F5 FF FF 80 7D FF FF F0 5F FF FD FF F5 FF F2 FD FF 3F 00 FF FF F7 FF FF FD F5 FF FF F5 FF FF FF F5 FF FF 80 FD FF FF F0 5F FF FD
00 5D 00 C0 20 00 00 00 00 D1 00 00 24 00 00 02 7D 53 00 00 00 00 00 00 20 02 00 00 D1 00 00 F2 00 5D 00 D0 20 00 00 00 00 Dl 00 00 24 00 00 02 FD 55 00 00 00 00 00 00 00 02 00
FF FF FF 22 FB FF FF DD F7 71 FF 2F FF FF FF FF 23 FF FF A7 FF 23 FF FF Fl 59 FF FF 21 FD FF 23 FF FF FF 32 FF FF FF DD F7 71 FF 2F FF FF FF FF 32 FF FF B7 FF 35 FF FF Fl 5D FF
DB 00 00 00 73 51 00 03 00 21 00 10 0D 10 00 01 00 40 00 00 77 00 00 50 00 00 12 00 00 00 00 E2 DF 00 00 00 77 51 00 15 10 31 00 10 10 10 00 01 00 40 00 00 77 00 00 50 00 00 12
7F E5 00 F3 FF 3D 22 FF 53 FF FF F1 FD 21 FF 27 FF DD 21 72 FF F7 FF 09 2D FF FF 2F FF F2 D0 D0 7F F4 00 F3 FF 3D 3E FF D7 FF FF F5 FD 31 FF 37 FF DD 31 7A FF FF FF 19 3D FF FF
• :4E08 • :4EEI21 • :4EE8 .:4EFI21 • :4EF8 • :4FI21I21 • :4F1218 • : 4F 1 121 • : 4F18 .:4F2121 .:4F28 .:4F3121 • :4F38 • : 4F4121 • :4F48 .:4F5121 .:4F58 • :4F6121 • :4F68 .:4F7121 • :4F78 .:4F8121 • :4F88 .:4F9121 • :4F98 • :4FAI21 • :4FA8 • :4FBI21 • :4FB8 • :4FCI21 • :4FC8 • :4F0I21 .:4F08 .:4FEI21 • : 4FE8 • :4FFI21 • : 4FF8 • :5121121121 • :51211218 • :51211121 • :512118 • :51212121 • :512128 • n51213121 • :512138 • :51214121 • :512148 • ::51215121 • :5058 • ;51215121 • :512158
5121 21 121121 31 31 AB 81 0121 121121 A5 21 A1 3121 121121 Al 121121 121121 71 21 121121 121121 7F FF 81 81 Al 71 I21B A1 121121 121121 81 5121 21 121121 Al Bl A2 8121 121121 121121 AI21 2121 A121 3121 121121 8,121 0121 121121 e,121 20
• ;:51217121 121121
• :512178 • :51218121 • :512188 • :51219121 • :512198 .:51218121 • :5121A8
FF FF FF FF 73
F7 FF 00 FF 23 FF F7 FF Al FF F3 FF FF FF FF FF FF FF FF 00 F2 F3 FF 3F 00 F3 00 FF FF FF FF F3 F7 FF DD FF 22 FF F7 FP AI21 FF F3
FF FF FF F!= FF FF FF FF OD
121121 121121 121121 FF FF F8 121121 OF 121121 22
121121 0121 121121 121121 1210 0121 121121 121121 121121 121121 2F 121121 121121 8121 FF 121121 Fl 81 121121 121121 121121 121121 121121 121121 121121 FF FF EI21 121121 C3 121121 22
121121 DI21 121121 121121 1211 DI21 121121 121121 121121 121121
2F 121121 121121 C3 121121 FF 8121 8121 C3 8121 A121 F2 121121 71 F3 FI2I
FF F5 FF FI21 FO FF BF 121121 FF FF F7 FF FF FO A6 FF FF F5 FF FF FF F5 FF FF 8121 FO FF FF FI21 OF FF FO FF F5 FF F2 FO FF BF 121121 FF FF F7 FF FF ED E2 FF FF F5 FF FF FF F5
FF FF 8121 FD FF
121121 01 121121 121121 F2 121121 50 121121 8121 20
121121 121121 121121 121121 01 121121 121121 24 121121 121121 1212 FO 07 121121 121121 121121 121121 121121 121121 2121 1212 121121 121121 01 121121 121121 F2
121121 50 121121 CI21 20
121121 0121 121121 121121 Dl 121121 121121 24 121121 121121
FF 31 FO FF 33 FF FF FF A2 FF FF FF FO F7 Fl FF 2F FF FF FF FF AF FF FF AF FF AF FF FF F1 00 FF FF Al FO FF 23 FF FF FF A2 FB FF FF DO F6 FI21 FF 2F
FF FF
FF
02 FF
EO 83 121121 121121 121121 121121
A2 FF FF A7 FF A7
121121 121121 121121 1214 Fe, OB 1210 121121 1210 F3 51 121121 81 121121 21 121121 9121 80 9121 121121 1211 121121 4121 121121 121121 77 121121 121121 0121 121121 121121 92 121121 121121 121121 121121 A6 OB 121121 121121 121171 E3 4121 121121 1211 121121 2121 121121 8121 1211 9121 121121 1211 iZll21
4121 121121 121121 77 121121
BF FF F2 0121 OC FF Ae, 0121 FE'! FF 30 AF FF FF FF FF Fl FO A1 FF A7 FF 00 A3 FA FF FF FF 89 AF FF FF AF FF F2
0121 F9 FF E4 121121 F2 FF 3D A3 FF C3 FF FF Fl FO AI21 FF A6 FF DO AI21 F2 FF F7
• :5121BI21 • :5121B8 .:5I21CI21 • :5121C8 • :51210121 • :512108 • :5121E0 • :50EB .:5I21FI21 .:5I21F8 • r. 51121121 • :511218 • :511121 • :5118 • :512121 • :5128
• :513121 • :5138 .:514121 • :5148 • :515121 • :5158 • :516121 • :5168 • :517121 • :5178 • :518121 • :5188 .:519121 • :5198 • :51AI21 • :51A8 • :51BI21 • :51B8 • :51CI21 • :51C8 • :510121 • :5108 • :51EI21 • :51E8 • :51FI21 • :51F8 • :52121121 • :521218 .:521121 • :5218 • • • • • •
:5220 :5228 :5230 :5238 :5240 :5248
·
~5250
• :525B
• :5250
• :5258 • ::527121
• : 52'7B • ;;5280
B2 FF 8121 FF 121121 FF 121121 FF AI21 121121 121121 8121 4121 2121 121121 AI21 AI21 Al 11 1214 121121 35 21 31 3121 121121 31 121121 121121 Bl 21 121121 121121 8F FF 11 11 31 71 21 81 121121 121121 11 5121 21 121121 31 31 A2 1121 121121 121121 3121 2121 BI21 3121 121121 3121 121121 121121 BI21 2121 121121 121121 B3
3F 00 F2 00 FF FF FF FF F3 F7 FF 00 FF
121121 121121 121121 121121 121121 0121 121121 FF FF 3121 121121 93 121121 23 2f! FF 121121 F7 D0 FF 121121 31 121121 FF 1210 F3 0121 FF 121121 FF 121121 FF 121121 FF 121121 FF 2F FF 1121 FF 121121 FF 9121 00 B3 F2 121121 F3 FI21 FF 121121 3F 121121 00 121121 F3 121121 00 121121 FF 121121 FF 121121 FF 121121 FF FF 73 FF F7 BI21 FF 121121 DD 93 FF 121121 22 22 FF 121121 F7 0121 FF 121121 3121 121121 FF 1211 F3 DI21 FF 121121 FF 121121 FF 121121 FF 121121 FF 2F FF 121121
EI21 OF FF FO FF F5 FF FI21 FO FF 3F 121121 FF FF F7 FF FF FO B2 FF FF F5 FF FF FF F5 FF FF 8121 FO FF FF FI21 5F FF FO FF F5 FF FI21 FD FF 3F 121121 FF FF F7 FF FF FO A2 FF FF F5 FF FF
121121 2121 1212 121121 121121 01 121121 121121 F2
121121 50 121121 9121 20
121121 121121 121121 121121 01 121121 121121 24 121121 121121 1212 BO 37 121121 121121 121121 121121 121121 121121 2121 1212 121121 121121 01 121121 121121 F2 121121 5D 121121 8121 20
FF FI21 D9 FF FF AI21 FO FF 22 FF FF FF 32 FF FF FF 00 F7 71 FF 2F FF FF FF FF 3121 FF FF B7 FF 33
FF FF Fl 50 FF FF 31 FO FF 33 FF FF FF 32 FB FF FF FD F6 7121 FF 2F FF FF FF
121121 121121 121121 121121 D1 121121 121121 24 121121 121121 FF 02 FF F5 BD 32
8121 88 121121 AC 121121 FF '32 FF 121121 AF 121121 FF 121121 E2 121121 0121 E2 0121 OF 7F 121121 B4 121121 121121 121121 F3 33 FF 51 30 121121 3B 11 FF 1121 BB 31 FF 121121 FF 1121 Fl 10 FO 1121 31 121121 FF 1211 35 121121 FF 4121 00 121121 31 121121 7A 77 FF 1121 FF 121121 FF 9121 19 121121 30 121121 FF 32 FF 121121 BF 121121 FF 121121 F2 1214 DI21 B2 B9 DB 7F 121121 A4 121121 121121 121121 F2 B3 FF 5121 3D 121121 3B 1213 FF 1121 B3 3121 FF 121121 FF 1121 Fl I21D FD 1121 3121 121121 FF 1211 34 121121 FF
187
· :5288 · :5290 · :5298 · ;52A0 · :52A8 · ~52B0 · :52B8 · :52C0 · :52C8 · :52D0 · :52D8 · ~52E0 · :52E8 " 152F0 · :52F8 · :5300 · :5308 · :5310 · :5318 • :5320 · :5328 • :5330 • :5338 · :5340 • :5348 · :5350 • :5358 · :5360 · :5368 • :5370 • :5378 • :5380 • :5388 · :5390 • :5398 · :53A0 • :53A8 · :53B0 • :53B8 · :53C0 • :53C8 • :53D0 • :53D8 • :53E0 • :53E8 · :53F0 · :53F8 · :5400 • :5408 · :5410 • :5418 · :5420 • :5428 · :5430 · :5438 · :5440 · :5448 · :5450 • :5458
188
FF 10 10 30 71 22 B0 00 00 11 40 20 00 30 30 A2 11 04 00 35 21 B1 30 00 31 00 00 Fl 21 00 00 F7 FF 11 11 31 71 22 Bl 00 00 11 50 21 00 31 31 F2 10 00 00 34 20 B0 30 00 30 00 00
FF FF DD F2 F3 FF 3F DD F2 DD FF FF FF FF 73 F7 FF DD FF A3 FF F7 FF 31 FF F3 FF FF FF FF FF FF FF FF DD F2 F3 FF 3F DD F3 DD FF FF FF FF 73 F7 FF DD FF A2 FF F7 FF 30 FF F3 FF
00 90 B3 00 F0 00 00 00 00 00 00 00 00 FF FF F0 00 D7 00 22 00 D0 00 00 05 D0 00 00 00 00 2F 00 00 90 F7 00 F0 00 00 00 00 00 00 00 00 FF FF B0 00 97 00 22 00 D0 00 00 05 D0 00
FF FF 80 BD FF FF F0 5F FF FD FF F5 FF B0 FD FF 3F 00 FF FF F7 FF FF FD F6 FF FF F5 FF FF FF F5 FF FF 80 FD FF FF F0 5F FF FD FF F5 FF F0 FD FF 3F 00 FF FF F7 FF FF FD F6 FF FF
B3 00 00 00 00 00 00 20 02 00 00 Dl 00 00 B2 00 5D 00 D0 20 00 00 00 00 Dl 00 00 24 00 00 02 FD F7 00 00 00 00 00 80 20 02 00 00 Dl 00 00 F2 00 5D 00 D0 20 00 00 00 00 Dl 00 00
FF FF B7 FF 33 FF FF F0 59 FF FF 30 FD FF 32 FF FF FF 32 FF FF FF DD F7 71 FF AF FF FF FF FF 32 FF FF B7 FF 32 FF FF Fl 5D FF FF 31 FD FF 33 FF FF FF 32 FF FF FF DD F6 70 FF AF
40 00 00 77 00 00 90 00 00 32 00 00 00 00 A2 DF 00 00 00 F7 Dl 00 53 10 31 00 10 5D 10 00 01 00 40 00 00 77 00 00 D0 00 00 32 00 00 00 04 F6 DF 00 00 00 B3 D0 00 13 10 30 00 10
DD 31 3A FF FF FF 18 3D FF FF BF FF F2 D0 B9 7F F4 00 F3 FF 3D 33 FF F7 FF FF Fl FD 31 FF 37 FF DD 31 7A FF F7 FF 19 3D FF FF BF FF F2 D0 F0 7F F4 00 F2 FF 3D 32 FF B7 FF FF Fl
• :5460 · :5468 .:5470 • :5478 • : 548ei • :5488 • :5490 • :5498 · :54A0 • :54A8 • :54B0 • :54B8 • :54C0 • :54C8 • r.54D0 • :54D8 • :54E0 • :54E8 • :54F0 • :54F8 • :5500 · :5508 · :5510 • :5518 · :5520 · :5528 · :5530 · :5538 • :5540 • :5548 · :5550 · :5558 • :5560 · :5568 · :5570 · :5578 · :5580 · :5588 · :5590 • :5598
F0 20 00 00 B7 FF 10 10 30 71 72 B0 00 00 10 50 20 00 30 30 A0 10 00 00 34 20 30 30 00 30 00 00 70 20 00 00 DD FF 10 10
FF FF FF FF FF FF FF DD F2 F3 FF 3F DD F2 DD FF FF FF FF 73 F7 FF DD FF 23 FF F7 FF 30 FF F3 FF FF FF FF FF FF FF FF DD
· :55A0 30 r:2
· • · · · · · · · · · · • · · · • ·
:55A8 :55B0 :55B8 :55C0 :55C8 :55D0 :55D8 :55E0 :55E8 :55F0 :55F8 :5600 :5608 :5610 :5618 :5620 :5628 :5630
71 20 B0 00 00 10 40 20 00 30 30 EF EF EF FF CF FF FF
F3 FF 3F DD F2 DD FF FF FF FF 73 FF 71 30 38 32 02 FB
00 00 00 2F 00 00 90 B7 00 F0 00 00 00 00 00 00 00 00 FF FF F8 00 DD 00 22 00 D0 00 00 0D D0 00 00 00 00 2F 00 00 80 DD 00 F0 00 00 00 00 00 00 00 00 FF FF E7 FF FF FF FF FF FF
F5 FF FF FF F5 FF FF 80 FD FF FF F0 5F FF FD FF F5 FF F0 FD FF 3F 00 FF FF F7 FF FF FD E6 FF FF F5 FF FF FF F5 FF FF 80 FD FF FF F0 5F FF FD FF F5 FF F0 FD 22 00 7F 04 7B 10 30
24 00 00 02 BD B7 00 00 00 00 00 80 20 02 00 00 D1 00 00 F2 00 5D 00 C0 20 00 00 00 00 Dl 00 00 24 00 00 00 FD D5 00 00 00 00 00 00 20 02 00 00 D1 00 00 F2 EF FF FF FF FF 7B FF
FF FF FF FF 32 FF FF B7 FF 32 FF FF F0 5D FF FF 30 FD FF 32 FF FF FF 32 FF FF FF DD F6 70 FF 2F FF FF FF FF 38 FF FF BF FF 38 FF FF F0 59 FF FF 30 FD FF 32 20 15 20 73 00 30 00
lD 10 00 01 00 40 00 00 77 00 00 90 00 00 32 00 00 00 04 F6 DF 00 00 00 F7 51 00 09 10 30 00 10 4D 10 00 01 00 40 00 00 77 00 00 D0 00 00 32 00 00 00 00 E6 FF FF FF 7C FF FF FF
FD 30 FF 34 FF DD 30 7A FF FF FF 18 3C FF FF BF FF F2 D0 B8 7F E4 00 FA FF 3D 3A FF DF FF FF Fl FD 30 FF 34 FF DD 30 7A FF FF FF 18 3C FF FF BF FF F2 D0 D8 FB 20 11 FF 00 FF 31
• :5638 • :5640 • :5648 .:5650 • :5658 .:5660 • : 5668 .:5670 • :5678 • :5680 • :5688 .:5690 .:5698 .:56A0 • :56A8 .:56B0 • : 56B8 .:56C0 .:56C8 .:56D0 • :56D8 • :56E0 • : 56E8 .:56F0 • : 56F8 • :5700 .:5708 • :5710 • :,5718 • :5720 .:5728 .:5730 .:5738 .:5740 .:5748 .:5750 • :5758 .:5760 .:5768 • :5770 • :5778 .:5780 • :5788 .:5790 • :5798 .:57A0 .:57A8 .:5780 • :57B8 • :57C0 • :57C8 • :57D0 .:57D8 .:57E0 • :57E8 .:57F0 • :57F8 .:5800 • :581218
7B FF EF FF FF FD FD FF FF 0D lD 0D 28 38 0D 20 FF 0D 20 20 30 00 D3 38 00 FF FF FF F1 CF FF FF 7B 39 FF FF FF F7 F3 FF FF 40 09 09 30 30 00 87 F9 48 20
87 39 1218 28 30 89 79 E8
20 14 38 EF 10 FF 00 DF 00 FB 0D FD FD FF 00 10 00 4C 6D D3 FF 08 FD D3 FF 00 FF 00 FD 0D FF 20 FF FF E7 30 FF 30 FF FB FF B4 FF 00 0D 0D 81 FD FF FB FF F7 71 FF 30 D3 18 3D 32 FF 02 FF F3 FF 20 14 38 39 10 FF 00 DF 00 FB 07 78 F9 F9 00 14 00 44 65 49 89 89 FF 39 FF'00 FF 0121 FF 00 89 89 F9 F9 E8 30 FF 30 87 F8 F8 39 F9 09 09 1210 FF FF 79 78 79 79 F9 F'3
20 30 D3 00 FF 10 FB 02 10 D3 FF D3 FB FF EF FF DF EF FD FF 30 FF FF D3 FF 22 00 7D 14 73 10 30 39 38 D3 00 FF 78 F9 00 10 FD F8 C9 FB FF FF 87 D9 EF FF F!=
39 F8 FF FF 78 79 0'3
73 FF FF FF FD FD 7F FF F3 0D 20 0D 00 00 FF 10 ED 00 0D 00 00 00 80 0D 4C FF FF FF FF FF 7B FF 9D F8 FF FF FF 78 79 FF F3 00 38 09 00 00 FF 78 F9 00 1210 08 79 1218 80 0121 48 87 F9
31 00 00 00 0D FD 00 00 30 FD FD FD CF FD FF FF 1D FF D3 FF FD 04 FF FF FF 20 14 20 73
00 30 00 18 08 00 00 00 97 09 00 30 FF 39 FF FF FF FF 79 F8 FF FF F8 78 48 FF FF F9 89 19
FF FF DF 11 FD FD FF CF 57 0D 0D 00 DB 0D 01 00 D3 10 2D FF CF 2D 03 B2 FB FF FF FF FC FF F7 FF 18 18 FF 51 FB 98 F9 CF 57 00 39 08 DB 00 08 79 1219 10 22 F9 87 28
03 38 F'3 F8 F'3
73 FF FB 30 3D 3D FF 20 00 ED DF FF FF D3 FC FF ED EF CD FF FF FD 88 FF FF F7 20 51 FF 00 FF 30 78 FF F3 30 30 97 FF 20 00 C7 19 FF FF FF F9 97 E9 EF 78 F9 89 F9 48 F8 78 F9 29
• :5810 • :5818 • :5820 .:5828 • :5830 .:5838 • :5840 • :5848 • :5850 • :5858 .:5860 • :5868 .:5870 • :5878 • :5880 .:5888 .:5890 .:5898 .:58A0 • :58A8 .:58B0 • :58B8 .:58C0 • :58C8 • :58D0 .:58D8 • :58E0 .:58E8 • :58F0 • :58F8 .:5900 • : 591218 • :5910 • : 591 8 • :5920 • :5928 • :5930 • :5938 · :5940 .:5948 • : 5950 .:5958 .:5960 • : 5968 .:5970 • :5978 .:5980 • :5988 .:5990 • : 5998 .:59A0 • :59A8 • : 5980 .:5988 • : 59C0 • :59C8 .:59D0 • :59D8 • :59E0
39 30 39 08 F9 39 38 79 07 08 09 F8 78 87 78 F9 F8 F9 F7 F8 F9 F9 E8 89 F8 F9 F9 00 87 FC F9 79 30 78 9C 09 F8 20 78 1C 0F 1210 00 FF 0C 0C CF FC FC FF 7C FF FC Fe EC F7 2F FF 3C FF 0C FF
E9 FD C9 89 F8 78 FD 78 F7 FF F9 FF 89 F8 50 19 18 29 37 00 29 F8 48 89 20 30 08 28 37 0C FD F9 F9 78 CF F9 F9 7B 78 FC FF F9 FF FF FC F9 FC 87 CF FC B7 0C 7F F9 FC A7
F8 FF FD F8 F9 19 EF 79 78 F9 FF F8 19 89 59 08 38 08 09 09 29 79 30 87 F9 F9 09 00 89 C8 F9 F9 FF 78 F9 FA F9 83 F7 F9 CF F8 35
FF CF 4C C9 7F SF CF 7C 0C C9 FC 3C FC FB BC 9F
7F 34 79 18 39 38 30 79 08 F9 18 87 09 89 FD F9 79 F8 89 F9 F9 89 E8 F7 F9 53 F9 F7 89 C9 39 00 78 79 9C FA 39 29 39 DC C9 F8 37 FC 0F 5F FC F9 C5 FB F5 FC FC DF EF FF FF 3C F9
FF FF 78 78 F9 73
F8 79 F8 F9 F8 78 F9 F9 19 38 89 09 89 F9 19 79 09 78 09 39 79 87 08 C9 39 F9 89 F9 F9 FA F8 79 89 FA FC F8 F7 CF FF F5 80 9F 9C 9F 9F F7 C9 F9 9F F9 0F 0F FC
20 78 79 38 09 31 08 89 08 09 FF 09 09 78 F9 FF 78 E9 F8 F8 F8 79 F9 F8 F9 F8 89 F7 F8 F9 53
]9 87 79 39 39 08 39 09 0F 00 09 F7 FC 0C CF FF FC F9 CF F9 F7 FC DF F7 FF FF FF 4C
FF 38 87 F9 F9 FF F9 87 18 F9 FF F9 C9 58 09 02 08 79 09 09 00 03 18 28 F9 D8 29 07 F8 F8 FD 78 87 78 93 F9 F9 79 F9 FA 58 F8 F7 FC CF FC 07 CF 9F DB 0C 09 C9 CF 17 2F FF DF 0F
11 F9 89 F8 39 73 F8 87 39 39 30 78 29 08 E9 DF F8 F7 FF F9 F8 E9 87 C8 F9 F8 F9 07 F8 F9 FF 28 87 FF 09 F9 39 79 F9 FF 39 38 39 FC 9F CF C7 FC FF F7 FF F9 FC E8 E7 CF FF FF F8
189
.:59E8 .:59F0 • :59F8 • :5A00 • :5A08 · ~5A10 • :5A18 • :5A20 • :5A28 · :5A30 • :5A38 .:5A40 • :5A48 .;5A50 • :5A58 • :5A60 · :5A58 .:5A70 • :5A78 .:5A80 • :5A88 • :5A90 · :5A98 • :5AA0 • :5AA8 .:5A90 • :5A98 .:5AC0 .:5AC8 • :5AD0 • :5AD8 · :5AE0 · :5AE8 · :5AF0 • :5AF8 • :5900 • :5908 • :5910 • :5918 .~5920
• :5928 • :5930 • :593B
.:5940 • :S94B • :5950 • :5958 .:5950 • :5958 • :5970 • :587B
FF 31 31 A2 :1 00 00 31 21
31 30 00 31 00 00 71 21
00 00 53
FF 11 11 31 71 22
31 00 00 11 50 21 00 31 31 A2 01 00 00 21 21 21 30 00 21 00 00 71 21 00 00 7F FF 01 01 21 71 02
• :58B0 .:5B88 .:5990 · :589B • :59A0 • :58AB • :5880 • :588B 21
190
FF 00 FF FF FF F0 73 FF FD F7 70 FF FF 00 3F DD 53 00 FF 00 FF 23 22 FF FF 00 F7 F7 D0 FF FF 00 FF 31 00 FD FF 01 E2 F3 00 7F FF 00 FF FF 00 F5 FF 00 FF FF 00 FF FF 2F FF FF 00 F5 FF 00 FF FF 90 FF DD 53 B0 F2 00 FD F3 F0 FF FF 00 FF 3F 00 F0 OD 00 5F F3 00 FF DD 00 FO FF 00 FF FF 00 F5 FF 00 FF FF FF 90 73 FF FD F7 70 FF FF 00 3F DO 57 00 FF 00 FF 23 22 FF FF 00 F7 F7 D0 FF FF 00 FF 21 00 FD FF 0D E6 F3 00 FF FF 00 FF FF 00 F5 FF 00 FF FF 00 FF FF 2F FF FF 00 F5 FF 00 FF FF B0 FF DD 48 B0 F2 00 FO F3 Fl FF FF 00 FF 3F 00 F0
00 00 F2 00 5D 00 C0 20 00 00 00 00 Dl 00 00 24 00 00 02 FD 53 00 00 00 00 00 00 20 02 00 00 Dl 00 00 B2 00 5D 00 C0 20 00 00 00 00 D1 00 00 24 00 00 02 FD 57 00 00 00 00 00 00
FD FF 33 FF FF FF 32 F9 FF FF DD F7 71 FF 2F FF FF FF FF 32
FF FF 97 FF 32 FF FF Fl 59
FF FF 31 FD FF 33 FF FF FF 22 F9 FF FF DD F7 71 FF 2F FF FF FF FF 23 FF FF 87 FF 23 FF FF
00 F2 00 00 B2 98 D9 7F 00 E4 00 00 00 F3 73 FF 51 3D 00 33 13 FF 10 53 31 FF 00 FF 10 Fl lD FD 10 31 00 FF 01 37 t:'00 .r 40 DD 00 31 00 72 77 FF 00 F7 00 FF 50 19 00 3D 00 FF 32 FF 00 3F 00 FF 00 F2 00 00 E2 Dl D9 7F 00 E4 00 00 00 F3 73 FF 51 3D 00 2A 03 FF 00 7F 21 FF 00 FF 10 Fl 0D FD 10 21 00 FF 01 27 00 FF 40 DD 00 21 00 7A 77 FF 00 FF 00 FF 50 09
.:59C0 .:59C8 .:5900 .:5B08 .:59E0 • :5BE8 • :59F0 .. :5BF8 .:5C00 .:5C08 • : SC10 • :5C18 .:5C20 • :5C28 • :5C30 • :5C38 • :5C40 .:5C48 • :5C50 • :5C58 .:5C50 • : 5C58 • :5C70 • :5C78 • :5C80 · :5C88 .:5C90 • :5C98 .:5CA0 · :5CA8 · ~5C90 • :5CB8 · :5CC0 · :5CC8 · ~5CD0 • :5CD8 .. :5CE0 · :5CE8 • :5CF0 .:5CF8 • :5000 • :5D08 • :5D!0 • :5D18 .:5D20 • :5028 • :5D30 • :5D38 · :5D40 • :5D4B • :5D50 • :5D5B • :5D50 • :5D6B .:5D70 • : 5D7B • :5DB0 • :5DBB • :5D'=l0
00 00 01 40 21 00 21 31 00 00 00 00 00 00 00 70 00 00 00 00 00 0D 00 00 0D lD 0D 08 38 0D 00 00 0D 00 00 30 00 D3 38 00 00 00 00 01 CF FF FF 79 39 FF FF FF F7 F3 FF FF 40 09 09
OF F3 OF FF FF FF FF 73 00 71 30 38 30 00 00 00 38 10 00 00 0D 0D 00 00 0D 00 0D 00 00 0D 00 00 07 00 00 00 00 0D 81 00 00 71 30 18 32 02
F3 20 3B 10 00 00 07 F9 00 00 55 B9 FF
00 00 00 00 00 00 FF FF 07 00 00 00 00 00 00 10 00 00 D0 00 00 00 10 00 D3 08 D3 00 00 0D 00 00 30 30 00 00 00 0D 0D 00 07 00 D3 3D FF FF FF 14 39 FF OF F8 7B F9 14 44 49 B9 39
SF FF FO FF F5 FF F0 FD 00 00 70 00 70 10 30 00 30 D3 00 00 10 00 00 10 D3 00 D3 00 00 00 00 D0 00 0D 00 30 00 00 D3 00 00 00 7D 14 73 10 30 39 3B D3 00 FF .7B F9 00 10 FD FB C9
20 Fl 00 20
02 00 00 Dl 00 00 F2 00 00 00 00 00 70 00 73
00 00 00 0D 00 70 00 03 0D 00 0D 00 00 00 10 0D 00 0D 00 00 00 B0 0D 00 00 00 00 FF FF 7B FF 9D FB FF FF FF 7B 79 FF F3 00 3B 09
59 FF FF 21 FD FF 23 00 10 00 73 00 30 00 31 00 00 00 0D 00 00 00 30 00 0D 0D 00 0D 00 00 lD 00 D3 00 0D 00 00 00 00 00 10 00 73
00 30 00 18 0B 00 00 00 97 09 00 30 FF 39 FF
00 32 00 00 00 00 E6 00 00 00 70 00 00 00 00 00 D0 11 0D 00 00 00 07 0D 0D 00 D0 0D 01 00 D3 10 0D 00 00 0D 03 00 00 00 00 00 FC FF F7 FF 18 lB FF 51 F8 9B F9 CF 57 00 39 0B
FF FF AF FF F2 00 FA 00 00 11 00 00 00 31 73 00 00 30 3D 3D 00 00 00 0D D0 00 00 D3 00 00 0D 00 0D 00 00 0D 88 00 00 07 00 01 FF 00 FF 30 78 FF F3 30 30 97 FF 20 00 C7 19 FF
.:5D98 .:5DA0 • :5DA8 .:5DB0 • :5DB8 .:5DC0 • :5DC8 • :5DD0 • :5DD8 • :5DE0 • :5DE8 .:5DF0 • :5DF8 .:5E00 • :5E08 • :5E10 • :5E18 • :5E20 • :5E28 .:5E30 • :5E38 • :5E40 • :5E48 .:5E50 • :5E58 .:5E60 • : 5E68 .:5E70 • : 5E78 .:5E80 • :5E88 .:5E90 • :5E9B • :5EA0 • :5EA8 .:5EB0 • :5EB8 • :5EC0 • :5EC8 .:5ED0 .:5ED8 .:5EE0 • :5EE8 .:5EF0 • :5EF8 • :5F00 • :5F08 • :5F10 • :5F18 • :5F20 • :5F2B • :5F30 • :5F38 .:5F40 .:5F48 · : SFS0 .:5FS8
.:5F60 • :5F58
30 30 00 87 F9 48 20 87 39 08 28 30 89 79 E8 E9 FD C9 89 F8 78 FD 78 F7 FF F9 FF 89 F8 50 19 18 29 37 00 29 F8 48 B9 20 30 08 28 37 0C FD F9 F9 78 CF F9 F'3 7B 78 FC FF F'3 FF FF
FF FF FF 89 F9 E8 FF 87 F8 F9 09 FF 79 79 F9 39 30 39 08 F9 39 38 79 07 08 09 F8 78 87 78 F9 F8 F9 F7 F8 F9 F9 E8 89 F8 F9 F9 00 87 FC F9 79 30 78 9C 09 F8 20 78 lC
00 00 00 89 F9 30 30 F8 39 09 00 FF 78 79 F9 F8 FF FD F8 F9 19 EF 79 78 F9 FF F8 19 89 59 0B 38 08 09 09 29 79 30 87 F9 F9 09 00 89 C8 F9 F9 FF 7B F9 FA F'3 83 F7 F9 0F CF 00 F8 00 35 FF FF
FB FF FF 87 D9 EF FF FF 39 F8 FF FF 78 79 09 7F 34 79 18 39 38 30 79 08 F9 18 87 09 89 FD F9 79 F8 89 F9 F9 B9 E8 F7 F9 53 F9 F7 89 C9 39 00 78 79 9C FA 3'3 29 39 DC C9 F8 37 FC
00 00 FF 78 F9 00 00 08 79 08 80 00 48 87 F9 FF FF 78 78 F9 73 F8 79 FB F9 F8 78 F9 F9 19 38 89 09 89 F9 19 79 09 78 09 39 79 87 08 C9 39 F9 89 F9 F9 FA F8 79 8'3 FA FC FB F7 CF
FF FF FF 79 F8 FF FF F8 78 48 FF FF F9 89 19 20 7B 79 38 09 31 08 89 08 09 FF 09 09 78 F9 FF 78 E9 F8 F8 F8 79 F9 F8 F9 F8 89 F7 F8 F9 53
79 87 79 39 39 08 39 0'3 0F 00 0'3 F7 FC
DB 00 08 79 09 10 22 F9 87 28 03 38 F9 F8 F9 FF 38 87 F9 F9 FF F9 87 1B F9 FF F9 C9 58 09 02 08 79 09 09 00 03 1B 2B F9 D8 29 07 F8 F8 FD 78 87 78 93 F9
FF FF F9 97 E9 EF 78 F'3 89 F9 48 F8 78 F9 29 11 F9 89 F8 39 73 F8 87 39 39 30 78 29 08 E9 DF F8 F7 FF F9 F8 E9 87 C8 F9 F8 F9 07 F8 F9 FF 28
87 FF 09 F'3 !=9 3'3 79 7'3 F9 F9 FA FF 58 3'3 FB 38 F7 39 FC FC
.:5:=70 FC 0C CF 0F FF 0C CF 9F
F9 FC 87 CF FC B7 0C 7F F9 FC A7 2F 3C 0C 9C 9C Bl 00 00 00 00 00 • :602B 00 .:6030 00 • : 6038 00 .:6040 00 • :6048 00 .:6050 00 .:6058 00 • : 6060 00 • : 6068 00 • : 6070 00 • : 607B 00 • :5080 00 • : 6088 00 .:6090 00 • :6098 00 .:60A0 00 • : 60A8 00 • : 50B0 00 • :60B8 00 .:51C000 • :61C8 00 .:61D000 • :61D8 00 .:61E000 • :61E8 00 .:61F000 • :61F8 00 • :5200 00 • :6208 00 • : 6210 00 • : 621 B 00 • :5220 00 • :6228 00 • :5230 00 • :523B 00 .:5240 00 .:5F78 • :5F80 • :5FB8 • : 5F90 • :5F98 • :5FA0 .:5FAB .:5FB0 • :5FB8 .':5FC0 • :5FC8 .:5FD0 .:5FD8 .:5FE0 • :5FE8 .:5FF0 • :5FF8 • : 6000 • :6008 .:6010 • : 601 B .:6020
0C CF FC FC FF 7C !=:=
FC FC EC F7 FF FF FF 9C 9C F3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4C C'3 7F 5F CF 7C 0C C9 FC 3C FC FB BC 9F 9C 9C FF 00 00 00 00 00 00 00 00 00 00 00 00 '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5F FC F9 C5 FB F5 FC FC DF EF FF FF 3C F9 9C 9C FD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
F5 80 9F 9C 9F 9F F7 C9 F9 9F F9 0F 0F FC 9C 9C F2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
CF FF FC F9 CF F9 F7 FC DF F7 FF FF FF 4C 9C 9C 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
FC 07 CF 9F DB 0C 09 C9 CF 17 2F FF DF 0F 9C 9C A6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
CF C7 FC FF F7 ~t::"
r.
F9 FC E8 E7 CF FF FF FB 9C 9C D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
191
• :5248 • :5250 • :5258 • :525121 • :5258 • :5270 • :5278 .:6280 • :5288 • : 62'30 • :62'38 • :62A0 • :52A8 • :628121 • :6288 • : 1:.2CI2I • :62C8 .:62D0 • :52D8 .:62E0 • :62E8 • : 1:.2FI2I • :1:.2F8 • :631210 • :1:.308 • :6310 • : 1:.318 • :6320 • :6328 • :6330 • :6338 .:634121 .:6348 • :6350 • :6358 • :5360 • :5368 • : 1:.370 • :5378 .:538121 • :6388 • : 53'3121 • : 53'38 • :53AI2I • :63A8 • :1:.380 • :5388 .:53CI2I • :53C8 • :1:.30121 • :5308 • : 53EI2I • :53E8 • : 53F0 • :53F8 • : 54121121 • :541218 • :1:.410 • :6418
192
121121 1210 121121 121121 0121 0121 121121 121121 1210 121121 00 1210 121121 00 0121 1210 121121 00 00 00 00 00 00 03 FF FF
121121 0121 121121 121121 121121 00 121121 1210 1210 121121 121121 0121 1210 0121 121121 121121 121121 00 00 00 00 00 FF FF FF FF
55 55
FF C0 00 121121 0121 00 00 1210 121121 121121 121121 00 00 00 121121 121121 0121 121121 00 00 1210 00 1210 0121 121121 121121 121121 121121 00 0121 FF FF
FF FF FF 00 00 121121 121121 121121 121121 0121 121121 00 121121 00 1210 1210 1210 121121 00 00 0121 00 1210 121121 121121 121121 0121 121121 1210 1213 FF F5
121121 121121 121121 121121 1210 121121 121121 1210 1210 1210 00 121121 1210 121121 00 1210 121121 0121 00 121121 121121 1210 00 00 121121 0121 1210 00 121121 121121 121121 1210 1210 00 00 00 00 00 00 00 00 3F 3F FF FF FF FF FF FF AA FF AA 55 FF FF AA FF FF FF FF FC FF 121121 FC 121121 121121 0121...... 121121 121121 0121 121121 00 0121 121121 121121 00 00 00 1210 00 0121 00 121121 1210 1210 121121 00 121121 121121 0121 00 00 00 0121 1210 121121 00 00 121121 121121 0121 121121 121121 121121 121121 1210 121121 121121 121121 121121 0121 03 FF FF FF D5
121121 121121 121121 1210 121121 121121 1210 121121 00 0121 121121 00 0121 121121 0121 121121 00 00 00 0F FF FF FA AA AA AA FF AA AA AF FF FF FI2I 0121 0121 0121 121121 00 00 1210 00 0121 121121 121121 00 00 00 121121 00 00 121121 1210 0121 1210 121121 3F FF 55
121121 121121 121121 121121 121121 0121 00 00 1210 1210 00 00 00 00 121121 1210 00 00 03 FF FF FA AA AA AA AA FF AA AA AA AF FF FF CI2I 121,121 121121 121121 00 00 1210 00 00 00 121121 1210 00 00 121121 00 121121 121121 121121 0121 121121 1213 FF FA
121121 121121 121121 121121 121121 0121 121121 00 0121 00 0121 00 121121 00 121121 121121 0121 00 3F FF FA AA AA AA AA AA FF AA AA AA AA AF FF FC 1210 1210 1210 1210 00 00 0121 00 00 121121 121121 00 00 1210 00 1210 0121 121121 0121 1210 I2IF FF AA 55 55 55 55 55 55 6A
121121 121121 121121 00 121121 0121 1210 00 1210 00 121121 00 1210 0121 00 121121 00 0F FF FE AA AA AA AA AA AA FF AA AA AA AA AA 8F ~F
FI2I 121121 121121 1210 00 121121 00 00 1210 121121 1210 00 1210 1210 0121 00 121121 1210 121121 121121 FF FE AA 56 AA
.:5420 .:5428 .:543121 • :5438 .:5440 • :5448 • :6450 • :5458 .:6460 • :6468 .:6470 • :6478 • :6480 • :6488 • :64'30 • :64'38 • :1:.4A0 • :64A8 • : 1:.480 • :5488 • : 1:.4C0 • :54C8 • : 1:.4D0 • :64D8 • :64E0 • : 1:.4E8 • :64F0 • :64F8 .:6500 • :551218 • :6510 • :6518 .:5520 • :5528 • : 553121 • :5538 • : 55l~12I .:6548 .:1:.55121 • :6558 .:555121 • :6568 • : 1:.570 .:6578 • :558121 • :5588 • : 55'3121 • :55'38 • :55A0 • :55A8 • : 558121 • :5588 • :55CI2I • :55C8 • :550121 • :5508 .:65EI2I • :65E8 • :55FI2I
AA AA AA AA A8 FF FF FF FF EA AA 55 AA AA FF FF 0121 00 00 00 00 00 121121 0121 00 0121 1210 0121 00 00 00 0121 121121 121121 1213 FF AA AA AF FF C0 0fl!
0121 121121 121121 0121 0121 00 00 121121 121121 121121 QI0 03 FF F5
AP. A9 FF
AA AA AA 8F FF FF FF FF FF FF FE 55 AA AA 5F FF F0 00 00 00 00 00 1210 00 00 00 00 00 0121 0121 00 0121 00 121121 I2IF FD AA A8
AA AA 8F FF FF FF FF FF FF FF FF FD AA AA 55 FF FF 00 00 0121 00 00 1210 1210 00 00 00 00 0121 1210 00 00 0121 0121 FF F5 AA AF
AA AF FF FF FF 00 1210 00 0121 FF FF FF FA AA 55 57 FF C0 00 00 00 00 00 1210 00 00 00 00 0121 0121 0121 00 1210 1213 FF D5 AA FF -c= FC ,- ;- r, :=C 0121 00 00 0121 121121 00 00 illiZI 1210 00 00 0121 121121 121121 0121 121121 121121 0121 00 00 00 00 1210 00 0121 00 0121 121121 00 0121 0121 0121 121121 1210 121121 121121 121121 121121 0121 121121 121121 121121 0121 1210 3F 0121 121121 FF FF 3F EA FA FF AA AA AA 7F SF 57
A8 FF FF FI2I 00 00 00 1210 00 00 0F FF FF EA 55 55 FF FC 00 00 00 00 00 00 00 00 00 00 0121 00 1210 00 00 I2IF FE 55
AF FF C0 00 0121 0Q.
0121 121121 1210 00 1210 00 00 121121 1210 121121 121121 121121 1210 1213 FF FA 55
FF FF FI2I 00 00 00 00 00 00 00 00 0F FF FF 55 55 AF FF C0 00 00 00 1210 00 00 00 00 00 00 00 00 00 00 3F FA
FF FC 00 1210 00 00 00 1210 00 00 00 00 3F FF A'3 55 AA FF F0 00 00 00 1210 1210 00 00 00 00 00 00 00 00 00 FF AA 55 56 8F Fr= FC CI2I 00 1210 00 0121 1210 1210 00 121121 121121 121121 121121 121121 1210 00 0121 0121 00 00 00 00 00 1210 0121 0121 121121 121121 121121 121121 121121 0121 121121 121121 0121 1210 0121 1210 3F 03 FE FF 55 '35
FF 121121 1210 1210 00 00 00 00 00 00 00 00 00 FF AA 95 AA 8F FF 00 00 1210 121121 00 1210 00 1210 00 00 121121 1210 0121 0F FE AA 5A FC 00 1210 0121 1210 1210 121121 121121 1210 121121 1210 1210' 1210 1210 121121 121121 0121 121121 00 121121 1210 3F A5
• : 65F8 • :6600 • :5608 • ~5510 • : 5518 • :5520 • : 5528 • : 5530 • :6538 .:5640 • :6648 • : 5650 • :6658 .:6650 • : 5558 • : 5670 • :6678 • : 5680 • : 5688 .:6690 • :5698 • :66A0 • : 56A8 • : 65B0 • :66B8 • : 56C0 • :56C8 • :6600 .:6608 • : 66E0 .:56E8 .:56F0 • : 56F8 • :6700 • :6708 • :5710 • :5718 .:6720 • :5728 • :5730 • :6738 • :5740 • : 5748 • :5750 • :6758 • :: 5750 • :5768 • ~5770 • :6778 • :5780 • :5788 • : 5790 • :5798 • :57A0 • :67A8 • :67B0 · :67E18 · ::57C0 • :57C8
C0 00 00 00 00 00 00 00 00 00 00 00 00 3F F5 AA BF F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FE AA 5F FC 00 00 00 00 00 0121 00 00 3F F5 AB FF 0121 00 00 00
F0 00 1210 00 00 00 00 00 00 00 00 00 00 FF 05 AB FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF EA 57 FF 00 00 00 00 00 00 00 00 FF 05 AF FC 01£1 00 00 1210
FF 00 00 00 00 00 00 00 00 00 00 00 03 FF 55 AF FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F FA 55
FF C0 00 00 00 00 00 00 00 00 00 00 0F FE
BF F0 00 00 00 00 00 00 00 00 00 00 3F FA
55 55
BF F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FE 55 BF F0 00 00 00 00 00 00 0A
FF C0 00 00 00 00 00. 00 02 FF FE
FF C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 FF 55
AF FC 00 00 00 00 00 F0 2A
FA
55 55 55
BF F0 010 0.0 00 00
FF C0 00 01Z! 00
FF 00 00 00 0Q)
00 00
AF FC 00 00 00 00 00 00 00 00 00 00 FF EA 5A FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F A5 AB FF 00 00 00 00 0121 FF AA EA 5A FC 00 00 121121 00 1210
AA FF 00 00 00 00 00 00 00 00 00 03 FF AA 6A F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F A9 AA FF C0 00 00 00 121121 FE FA AA 5A F0 00
AA BF F0 00 00 00 00 00 00 00 00 0F FE AA AA C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 AA AA BF F0 00 00 00 121121 AA 7F AA AA C0 00 IZIIZI 00 0(l, 010 00 (1HZ! 00 00
· : 57D0 • : 57D8 · ::57E0 • :67E8 · :67F0 • : 67F8 · ~5800 • :5808 · ~5810 • : 6818 • :5820 • : 6828 • :: 5830 • : 5838 • :5840 • : 5848 • : 5850 • :5858 • :6860 • :6868 • :5870 • : 6878 .:5880 • :6888 • :5890 • :6898 .:68A0 • :68A8 • :68B0 • :58B8 .:68C0 • :58C8 .:5800 • :5808 • :68E0 • :58E8 • ~68F0 • :58F8 • :6900 • :5908 • :5910 • :5918 • :6920 • :5928 • :6930 • :5938 • ~ 6940 • :6948 • : 5950 • :6958 • :5960 • :5968 • :5970 .:5978 · ::6980 • :5988 • : 5990 • : 6998 • ~59A0
00 00 0121 00 00 121121 00 00 00 00 010 00 00 00 00 00 00 00 00 00 00 00 FF 7F 5F FC 00 00 00 00 FF AB A9 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 fZhlJ
0121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F 5F 57 FF 00 00 00 00 FF AF A9 FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001210 00 IZl0 00 0121 00 00 00 00 00 0.0 00 00 00 00 00 00 00 00 00 00 0F 57
00 00 00 00 00 1210 00 00 00 00 00 00 1£10 00 00 00 00 00 00 00 00 00 03
FF C0 00 00 00 FF AF A5 F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
BF F0 00 00 00 FF AF 95 C0 .00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
55 55 55
\210 00 00 IZI0 1210 1210 fZlIZI 0121 1210 00 00 00 00 00 00 0121 1210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 15 05 95 95 A5 AF AB AA FC FF FF 00 00 C0 00 00 00 00 00 00 FF FF FF AF AB BF 05 05 F4 C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0121 0121 00 00 00 00 00 00 00 00 00 00
00 0121 00 0.0 00 00 00 00 010 00 010 0121 00 010 00 1210 00 1210 00 00 00 00 00 01 AA AA FF F0 00 00 FF AB FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1210 00 00 00
193
• :59AB • : 59B0 • :59BB • :59C0 • :59CB · :6900 · :590B · ~69E0 · :59EB · :69F0 · :59FB • :5A00 · :5A0B • ~5Ai0 • :5A1B • :5A20 • :5A2B · :5A30 • :5A3B • :5A40 • :5A4B • : 5A50 · :5A5B • :5A60 • :5A5B • : 5A70 • :&I=I7B · :5AB0 • :5ABB • :5A90 • :5A9B .:5AA0 • : 5AAB .:5AB0 • :5ABB • :5AC0 • :5ACB • :5A00 • :5AOB • :5AE0 • :5AEB • :5AF0 • :5AFB • :5B00 • :5B0B • :5B10 • :5B1B .:5B20 • : 5B2B • :5B30 .:5B3B • : 5B40 • :5B4B .:5B50 • : 5B5B • : 5B50 • :5B5B .:5B70
194
00 00 00 00 00
00 00 00 00 00
00 00 00 00 00 FF 3F 0F FF 7F 5F BF AF AB 54 55 5F 00 00 00 00 00 00 EA FF FF AF AA AA BA FF FF FC BC BF 00 00 FF 00 00 FF 00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 0F 3F FF FF FE AA FF F5 FF AA 5A A9 FF FF 55 FF FF FF FF EB FF FF FF FF FF FF FF FF FF FF FF FF FF EB EB FB
00 00 00 00 00 03 57 AB 5F FC 00 FF AB FF AA BF AB F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 FF AA EA 55 55
AA FF FF FF FF FF FE AB
00 00 00 00 00 00 57 AA 7E AB C0 EB AA FF At=! AA BE F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FA AF FF 5A FF 95 FF FF FF FF FF AA FB
00 00 00 00 00 00 15 AA FE BE BF FF AA FF AA AA AA B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FF FO 55 A5 55 5F FF FF FF FF AA BE EB
00 00 00 00 00 00 05 A9 FE EA AA FF BA FF AA BA AB F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FF F5 55 FF 57 A5 FF FF FF AF FF FF FF E8
00 0000 00 00 00 0A 55
FA EB EB FF AA AF AA AA BF B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 FA AA 55 55 FE FF A9 FF FF FF FF AB FF FF FA
.:5B7B .:5B8fjZ1 • :6B8B .:6B90 • :5B9B .:5BA0 • :5BAB .:6BB0 • :5BBB .:5BC0 • :5BCB .:5B00 • :6B08 • :5BE0 • :5BEB .:5BF0 • : 5BFB .:5C00 • :5C0B .:5C10 • :5C1B .:5C20 • :5C2B • :5C30 • :5C3B .:5C40 • :5C4B • :5C50 • :5C5B • :5C50 • :5C5B • : 5C70 • : 5C7B .:5CB0 • :5CBB .:5C90 • :5C9B .:5CA0 • :5CAB .:5CB0 • : 5CBB • :5CC0 • : 5CCB • : 5C00 .:5COB • :5CE0 • :5CEB .:5CF0 • :5CFB • :5000 • :500B • : 5010 • :501B • : 5020 • : 502B • :5030 .:603B .:5040 • :504B
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0E FF FF FE FF FA FF FF EB FF FF FF FF FF FF FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A FF AA AA FF FA FF AF FF FF FF
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EA AA A9 55 FF EA AF BF FF FF FF
FF FF
FF FF FF C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
FF AB FF C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EA AA AA 95 AA AF BF FA FF FF FF FF FF FF FF F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FA EA A5 55 AA FF AF FF FF FF FF FE AF FA FF F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 FA FA 95 56 EB FF FF FE AF FF
FF FF FF FF FF AF 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FE FF AA A5 AA FF BF FF FF EF FF FF FF FF FF FA F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F FF i=F FE AA AA AA FE BF FF FF FF FF FF FF Fr-
EB FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
• :5D50 • : 5D58 .:5D50 • :6068 • :5D70 • :6D78 .:5D80 .:5088 .:5D9fl1 • :5D98 • : 50A0 • : 5DA8 • :6DB0 • :60138 • :60CflI • :60C8 • : 5DDflI • :6DDB • : 5DE0 • :60E8 • : 5DF0 • :60F8 • : 5EflI0 • :6E0B • :5E10 • :5E18 • : 5E20 • : 5E28 • : 5E30 • : 6E38 • :6E40 • : 6E48 .:6E5fl1 • : 6E58 • : 5E60 • : 6E68 • : 5E70 • :6E78 .:6E80 • :6E88 .:6E90 • :6E98 .:6EA0 • : 6EA8 • : 6EB0 • :6EB8 .:6EC0 • :6EC8 .:6ED0 • :6ED8 • :6EE0 • :6EE8 • :6EF0 • : 6EF8 .:6F00 • :6F08 .:6F10 • :6F18 .:6F20
00 00 00 121121 3E FE FA FF FE FF FA FF FF FF FF FF FF FA FF FA FF EA FF FflI 1210 1210 00 00 00 1210 1210 1210 121121 121121 00 00 00 00 00 C0 00 00 00 0E FF FF FF FE FF FF FA FF FE F9 FE FF FA EA FA
00 121121 0121 121121 3E EA FF AF FF AB FF AF FF OF FF FF FF EA AF AA FF FA EA B0 1210 1210 00 00 0121 121121 0121 00 121121 121121 00 00 00 00 00 F0 00 00 00 3F AB FF FF AA AF FF FA FF FE F9 FE FF FF AA AA
00 121121 121121 121121 3E FE FF AA BF AA 57 AA FF FF FF FF FA AA AA AA AB FF AB FC 00 00 00 0121 0121 0121 00 00 121121 121121 00 00 00 00 0F F0 00 00 00 3A FF FF FF AA FF FA FF AA FA E5 AA FA BF AA AA
00 121121 121121 121121 3F BE FF AA AA EA 55
56 AA FF FF FF AA FF FE AA FF FF AA BC 00 00 00 1210 1210 1210 1210 1210 12121 121121 00 00 00 00 FF FC 00 00 00 3A FA BF AF AA FF FF FF BF EA A5 FF FF FF AA AA
00 1210 121121 1210 3E FE FF AA AA FF 05 55 5B FF FF FE BF FF FE AA FF FF AA BC 1210 00 00 00 0121 00 0121 121121 121121 1210 00 00 00 3F FE BF C0 00 00 FA FF FF FF AA FF EB FF BF AB A9 FA FF FF AA AA
00 0121 121121 1213 FA FF 5F 55 AA FF FF 95 56 7F FF EA BF AF FE FB FF FF AF AC 00 0121 00 00 00 00 1210 121121 121121 00 00 00 00 FA FA F5 FF 00 0F EA FF FF FF BE FF FF EA F5 AF 95 FA FF FF AA AA
00 1210 121121 1213 AA AB 55 55 55 7F FF AA 55 90 FF AA FF FF AB FA FF FA EA AC 00 00 00 00 00 00 00 1210 121121 00 00 00 00 FB AB 75 AA e0 0E AB AF FF FF AA FF FF EA D5 BF 5A FF BF FF AA BA
00 00 00 flIF EA AA 55 55 55 55 AA EA 95 A5 FA BF FF FF FF FA FF FF AA AC 00 00 0121 0121 00 00 0121 00 0iZ1 00 00 00 03 FO AD 7F AF FF 0E BF FF FA FF AA AB FF E9 57 F5
AA FF FF FF AA AA
• :5F28 • : 5F30 • : 5F38 .:5F40 • :5F48 .:5F5fl1 .:6F58 .:5F50 • : 5F58 • : 5F70 .:6F78 • : 5F80 • :6F88 • : 5F90 • :6F98 .:5FA0 • :6FA8 • : 5FB0 • :5FBB .:5FC0 • : 5FC8 • : 5FD0 • :6FD8 • : 5FE0 • :6FE8 • : 5FF0 .:5FF8 .:701210 .:7008 .:7010 • :7018 • :7020 .:712128 .:7030 • :7038 .:7040 .:7048 • :7050 .:7058 .:7060 • :7068 • :7070 • :7078 .:7080 • :7088 • :7090 • : 70'38 • :70A0 • :70A8 • :7fl1BflI • :7fl1B8 • :70C0 • :70C8 .:70D0 • :7008 • :70E0 .:70E8 • :70F0 • :70F8
FF EA FF FA FE 0121 00 00 00 00 00 00 00 0121 0121 0121 0121 03 FB FE FE EA FE FE:: FF FA FF FF FF FF EA FA FA FE FF FA FF FF FF FF FF FB FF FF FE F0 00 0121 00 0121 00 00 00 00 00 00 03 FA EB
FF EB BF AA AA 1210 00 00 00 00 00 00 00 121121 1210 121121 121121 0;=
AA BF AB AA AA AE FF FA FF FF FE AA AA AA AA FF AB AA FF FE BA FB EF FB FF FF FF B0 00 121121 1210 121121 00 00 00 00 00 00 0F FA FF
FE EA FF AA AA CflI 121121 00 00 00 00 00 0121 1210 0121 121121 121121 0F AA 5B 55 EA AA BE FF FF AA FF FE AA A5 AB A9 FE FA j=F FF FF FF FF FF EB FF FF FF BC 00 0121 00 121121 00 00 1210 00 00 00 0F FA FF
FE EA FF FE FE CflI 121121 00 00 00 00 00 00 0121 121121 0121 121121 3E BF 55 '35 7E AF FE FF FF AA FA AA A5 55 BF A9 BF AB FA FF EB EB FF FF EA FF FF FF AC 00 00 0121 0121 00 00 00 00 00 00 0F AA FF
FA FA AF AA FF CflI 1210 00 00 00 00 00 0121 0121 121121 121121 1210 3E AA 55 E'3 57 FA BE FF AF AA AA A5 55 56 FF AA FB BF FB AF BF EE FF FF AA AF FF FA FF 00 00 121121 121121 0121 00 00 00 00 00
FA FA FF AA FF CflI 1210 00 00 00 00 00 0121 0121 121121 121121 0121 FF EA
EA BB BF AA FF CflI 00 00 00 00 00 00 00 00 1210 121121 1210 FF EA 55 AA FE FF D5 BD 5F 55 BE EA FF FA FF AA AB FF A9 55
AB BE FF AA FE CflI 00 0121 00 00 00 00 0121 0121 0121 0121 1213 FA AA 55
FF AB F5 EA FA AA 05
55 55 55 9A
56 AA FF A9 BB BA FE FF EF EB EA FF AF EA FF FF AB 00 00 1210 0121 0121 00 00 00 00 00 3E 3E AF AA BF FF
AA AA FF AA FF AA FE EA FB EE FF FF EF FE FF FF AB 00 1210 121121 0121 00 00 00 0121 00 3F FE AA FF
AA AA F5 6A FF AA FE FF AF EB FF EA FF FE BF FF AB 00 1210 121121 121121 1210 00 00 00 00 FF FE FA AF
195
· : 7100 FF • : 7108 FF · :7110 FF • :7118 FA · :7120 EA · : 7128 EA · :7130 FE · :7:38 FF · : 71 ':1·0 FA · : 71 4·13 FF • ;: 71 ::',0 FF · :7158 FF · :;7160 FA · :7168 FE · :7170 EA · ; 7178 FF · ,718121 FE • :7:88 FF · ::7190 FF · :7198 FF · :71A0 =:B · :71AB FF · ::71BI21 FF • :71B8 FE • : 71C0 FA • : 7iC8 FF · :71D0 FE · :71D8 00 · :71EI21 00 · :711::8 00 · :71F0 00 · :71F8 00 .:7200 00 · :7208 00 · :7210 00 · :7218 0F .:7220 EA · :7228 FE · :7230 FF · :7238 FA .:7240 FA .:7248 FF .:7250 FF • :7258 EB .r.7250 E9 · :7258 FE .:7270 FF • :7278 FF • :7280 FF • :728.8 FF • :7290 FF • : 7298 FF • :72A0 FF .:72A8 EB .:72B0 FF • :72B8 EF • :72C0 FF • :72C8 FA .:7200 FF
196
FF FF FF FE EB AA EA FE AA FF FF FF FF FF AA AB FE FF BE BF
..
FF FF FF FA AB A9 AA EA AA FF FF FF FF FF AA FF ;=E
AB FF FF FF
FF FF FE FF AF FF BE BF FF AA FE rF C0 F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F I21F FE EA BE BA FF EB AA AA AA AA FF FF . r FA EF AF AA AA FF BF FF BF FF FF FF FF FF FF FE AA BF AB FF FA FF AF FF EB FA BF FF FF EA EA FF FF ~~
EA BF FF FB AF
AF FF FF FB FO 55 BF AA AA FF FF AB FF AF AA EF FA FF
FF FF FF FA 05 '35 55 AB FF 95 AA AA AA FF FF FF FF FF FF FF FF FF EA AA EA FF EA FA FE FF FF FF FF FF FF FF FF FF :=F FA EF FF ,--r- EA FF i=F !=E FF AF FA AA FE FF FF BF AF EA B0 BF EB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 I21F 3F 3F AF AA FA BA AA AA FF FF FF AB BF AA EA FA AA FF FA A5 A5 55 5A 5F AB AB AF EF EE AF 5B AA AF AA EA FF AA AA FF AF AA FF FF AF FF FF FF FF FF FF FF FF FF AB FF FF FF FF FF AA AA AA FF FF FF FA EA AA FF FF FF 1-
FF FF FF EA D5 5A FF AA A5 BF FF FF !=F FF AA FF FF AF AB FF FF FF FF FF AA FF EA EB 00 00 00 00 00 00 00 FF AA FA EB AA AF 55 BE AF AE AA FF FF AA AA FF FF FA FF AA AA FF AA FA
FF FF FF EB F5 5B 7F AA AA FE BF FF AA FF AA FF FF BF !=F
:=F rF FF FF FF AA FF
rr
EB 00 00 01Z1 00 00 00 03 FF EA AA FF AA F5 5B FA AE AF 55 55 7F FF AA 55
FF FF FF FF AA FF AA FF
• :7208 .:72E0 .:72E8 .:72F0 • :72F8 .:7300 • : 7308 • :7310 • :7318 .:7320 • : 7328 .:7330 • :7338 .:7340 • :7348 .:7350 · :7358 .:7350 · :7358 .:7370 .:7378 · :7380 · :7388 .:7390 · :7398 • :73A0 • :73A8 .:73B0 • :73B8 · :73C0 • :73C8 • :7300 · :7308 .:73E0 • :73E8 .:73F0 .:73F8 .:7400 • :7'41218 • :7410 • :7418 .:7420 .:7428 .:7430 .:7438 .:7440 .:7448 .:7450 · :7458 .:7460 • :7458 .:7470 • :7478 .:7480 • :7488 .:7490 .:7498 .:74A0 .:74A8
FF FF FF FF FF FF FF FF FB 00 00 00 00 00 00 0F FF 7F FF FE EB FE EA EB FF EF FF FF FE FF FA FF FF EA FF FF FA FF FA FF FF FF FF FF FF EE FA EA FA EC 00 00 00 03 FB FE FE FE EF
FF FF FF FF FF FF FF FF FA C0 00 00 00 00 00 0F FE 7A BF AF AO F9 AB AB FF AF FF FF FF AF FF AB FF FA FE AB FF FF AA FF FF FF FF FF FF FF FE EA FA FC 00 00 00 0E BB EA FF BF 7F
FF EA FF FF FF FF FF FF FA C0 00 00 00 00 00 FF FA EA BF FF AB FE EB AF FA AF FA AF EB AF 57 AA AA FE FF FF FF FF FA EA FF FE BF FF FF FF FF EA FA FC 00 00 00 3E AB AA AB 6B 5F
FF FF FF FF EF FF FF FF FE F0 00 00 00 00 00 FF EB AA AB FF AA AF 7F BE BF AF FF FF FF AA 55 59 AA BF FF FF FF FF FA FF FF FF FF FF FF FF FF EA FF FC 00 00 00 FE AA AA FF 56 5E
AF FF AB FF FB FF FF FF FE B0 00 00 00 00 0F FE EO AA AB FF AA 5A 57 FF FE AF FF FF FF AA 55 55 5A AF 7F FF FF FF FE FF FF FF FF AF FF FF FF FA FF BC 00 00 00 FE AA AA FF 6B 7A
FF FF FF FF FB FF FF FF BE B0 00 00 00 00 0F FA EB AA AA FA AA 55 FF AB FE FF FF FF FF AA 70 A5 AA BF FF FF FF FF FF FF FF FF FF FF FF FF FF FA FF BF 00 00 03 EE AA FE FE BF EA
BF FF FF FF FE AF AB FF AE AC 00 00 00 00 3F AA 7A EA FA FA AA 55 AB AA FA FF AF FF FF AA 55 5A AA FE FF AB FF FF FF AF FF FF FF FF AB FF FF AA BF AF 00 00 03 EA AA AA E9 FA AA
FF AB FF AB FE AA AA FF AF AC 00 00 00 00 FB AA 5E 7E FA AA AA 55 AF FF FE FF FF FF FA AF 5F AA FF FA FF FF FF FF FF AF FF FF FF FF FF FF EB EB FF AF 00 00 03 EA FA AB 95 A9 AA
.:74B0 • :74B8 .:74C0 • :74C8 .:74D0 .:74D8 .:74E0 • :74E8 .:74F0 .:74F8 .:7500 .:7508 .:7510 • :7518 .:7520 • :7528 .:7530 • :7538 .:7540 • :7548 .:7550 ~ :7558 .:7560 • :7568 • :7570 • :7578 .:7580 • :7588 • :7590 • :7598 • :75A0 • :75A8 .:75B0 .:75B8 • :75C0 • :75C8 • :75D0 • :75D8 .:75E0 • :75E8 • :75F0 • :75F8 .:7600 • :7608 • :7610 • :7618 • :7620 • :7628 .:7630 • :7638 .:7640 • :7648 .:7650 • :7658 .:7660 • :7&&8 • :7670 • :7678 .:7680
FF FA FF FA FE FE FF FF EA FF FF FE FF FF FA FA EA FF FF FF FF FF FF FA FF FF FF FF FE FB FE C0 00 00 FA FF E9 FA FF FF FF FA FF FB FF FE FA FF FF FE FF FF FF FF FF FF FF FF FF
FF FA FF FA EA FE FF FF EA FF FA AA FF FA AA FF AA FF FF FF FF FF FF AA FF FF FF FF FE AA FF C0 00 00 3A FF 95 A5 FF FF FF FA FF FA FF FA FF AF BF FF AF FF AA BF FA BF FF FF FF
FF FA FF EA EB FE FF FF EA FE AA AA EA AA AA FF AA FF FF FF FF FF FF AA AB FF FF FF FF FE AF F0 00 03 FF AE 5A 55 FF FF FF FF FF FA FF FA FF FF FF FF AA AB AA AF FF FF FF FF FF
AE FE FF EA EB FE FF FE AA AA AA FF AA AA A9 AF AA FF FF FE FF AB FF AA FF FF FE AF FF FF AF F0 00 03 EA FF 95 A5 FF FF FF FF AF FF FF FA AB FF FF FF AA AA FF AB FF FF FF FF FF
AE FE FF EA EB FE FF FA A9 AA BF FF AA AA AA FF AA FF FF FF AF FF FF AA FF FF FF FF FF FF EB B0 00 00 FF FF E9 FA FF FF FF FF AF EB FF FA FF FF FF FD AA AA 5F EA FF FF EA FF FF
AA FF BF AA EF FE EB FF A5 BF FF FF AA AA 96 FA AA FF FF FF AF FF FF AA FF FF FF FF FF FF FA B0 00 0F FA FF FE BF AB FF FF FF AF AF FF EA FF FE FF D5 AA AA FF FA 7F FF FF FF FF
AA BF BF AB AF FE FF AA A9 AA FF FF AA AA 6A FF AA FF FF FF BF FE FB AB BF FF FF FF FF FF FB B0 00 0E AA FF FF 6B 56 BF FF FF BF FF FF EA FF FA FF FF A5 AS FF EA FF FF FF FF FF
AA BF AF BF BF FE FF FF EA AA AB FF AA A9 AA FF AA FF FF FF BE BF AF BE FB BB EB EB EB EE EB F0 00 0F AA AF FF 56 A5 6F FF FA FF AF FF FA FF EA FF FD AA AA FF AA FF FF FF AB FF
• :7&88 .:7690 • :7&98 .:76A0 • :76A8 .:76B0 • :7&B8 .:76C0 .:76C8 .:76D0 .:7&D8 .:76E0 .:76E8 .:76F0 • :7&F8 .:7700 · :7708 .:7710 • :7718 .:7720 • :7728 .:7730 • :7738 • :7740 • :7748 .:7750 • :7758 • :7760 • :77&8 .:7770 • :7778 .:7780 .:7788 .:7790 • :7798 .:77A0 • :77A8 .:77B0 .:77B8 • :77C0 • :77C8 • :77D0 .:77D8 .:77E0 • :77E8 .:77F0 • :77F8 • :7800 • :7808 • :7810 • :7818 • :7820 • :7828 • :7830 • :7838 .:7840 • :7848 .:7850 • :7858
EB FF FF FF FF FF FF FF BF FE FF FB FC 00 0F FE FF FF FF FA F9 FF FA FF FF FF FF FF FF FF FF FF FF FF FE FF FF FF FF FF FF FA FF FF FF FA FF FF FE AF F5 57 FF FF FF FF FF FF FF
EA FF FF FF FF FF FF FF FF FF FF FB BB C0 3A AA FF FA BF FE F9 FF FA FF FF FF FF FF FF FF FF FA AA FF FA FF FF FF FF FF FF FF FF FF FF AA FF FF FF FF F7 57 FF FF FF AF FA FF FF
FA FF FF FE BF FF FF FF FF FF FF FF AA C0 FF AA FF FF FF F9 E5 FF EA FA FF FF FF FF FF FE AA AA AA FF AA FF FF FF FF FF FF FF AA AF FF AA FF FF FF FF F7 D5 FF FF FF AB FA AF FF
FA FF FF BB FF FF FF FF AF FF FF FF AA C3 FA AE AF FF FF E5 95 FF AA FF FF FF FF FF FF AA AA AA AA FE AA EA AB FF FF FF FF FF AA AA FF AA EA FF FF FF F7 FD SF FF FF AB FF FF FF
FF AF FF FF FF FF AB FF FF FF FB FF AA FF AA EF AA FF FF E5 95 FE AA FF FF FF FF FA AA AA AA AA BF AA AA FF EB FF AF FF FF FF AA AA AA AA FF FF FF FF F7 FF FF FF FF EF FF FF FF
FF AB FF FF FF FF FF FF FF FF FA FF AA AB FE BF AF FE AA F9 E5 FE AA AF FF FF FF AA AA AA AF FF FF AA A5 AA AB FF FF FF FF FF AA AA AA FA FF FF FF FF F& FF FF FF FF EF FF FF FF
FF AA BF FF FF FF FF FF FF FF FA 7F AA AB FF AB BF FF EB FE F9 FE AB AF FF FF FA AA AA AB FF FF F5 55 55 AA AB FE AF AF AF 5F 5A 5A FF AA FF FF FF AA A& EF FF FF FF EA BF AF FF
FF AB FF FF FF FA FF FF EB FF FA 5F AA AA AF FA FF FF FF FF BE FE BF AF FF FF EA AB FF FF FF FF 55 55 55 AA AA FF FF AF AF 5F 5A 5A AA AA FF FF FF FA A& AS FF FF FF FA FF FF FF
197
.:7860 FF • :7868 E5 .:7870 FB • :7878 FF .:7880 FA • :7888 FF .:7890 FF • :7898 D5 .:78A0 FA • :78A8 FF .:78B0 FF • :78B8 FF • :78C0FE .:78C8 AA .:78D0 FA • :78D8 FF .:78E0 FF .:78E8 FF .:78F0 FF • :78F8 FF .:7900 SA • :7908 FA .:7910 55 · :7918 FF .:7920 DA .:7928 A6 .:7930 7F • :7938 FF .:7940 FF .:7948 FF .:7950 FF .:7958 C0 .:7960 FF .:7968 FF .:7970 FF .:7978 FF .:7980 FA .:7988 FA .:7990 FF .:7998 FE .:79A0 FF .:79A8 EA .:79B0 FF .:79B8 FA .:79C0 FF .:79C8 FF .:79D0 FD .:79D8 FA .:79E0 FA .:79E8 FA .:79F0 FF .:79F8 FF .:7A00 FA .:7A08 AB .:7A10 FF • :7A18 FF .:7A20 EA .:7A28 FF .:7A30 FF
198
FF F9 SF EA FA FF FF F5 FF FF FF FF FF FE AA FF AF FF BF FF AA AF F5 AF FA AS SF FF FF FF FF 2A 3F AB FF FF EA EA FA AA FF FA EA AA FF FF FD FF AA FF FB EF AA FF FA FE A9 FF FF
FF FE DF AA FF FF FF FF FF AA BF FF FF EA AA BF FF FF BF FF AS 55 SA SF DA AS 95 AF FF AA FE 20 AF AF FF FF AA AA EA AA FE AA AA AA FF FF FF AF FF FF AB EF AF F5 AB AA A9 FF FF
FF FF BE AF FA FF FF EF AF AA AA BF FF FF EA FF AF FF BF FF 6B 55 FA SA FA AS AS FA FF FE F2 02 83 AF FF FE AA FE EA AA AA AA EA AA FF FF FF BF FF BF FB AE FD 57 FF AA AA FF FF
FF EA FE AA FA FF FF EA AA EA AA AA 7F FF FF FF FF FF AA FF AS FF SF FF DA A6 69 BF EA AA E0 A0 00 AA FF FA AA AA EA AF AA AA FA AA FF FF FF FE FE BF BA AA 55 7F FF AA AA AA FF
FF EA EA AA FE FF FF FA 6A FF FF FF 55 7F FF AA FF FF AA FF AA FA SF FB FA A6 56 AB FF FA A2 80 28 2A BF FE AA EA EA AA EB FA AA AA FF FF BF AE FF BE AA AS 57 FF FF AA AA AA FF
FE AA EB FB AA FF FF FE 55 55 F5 57 FF 55 7F AA AA FF AA FF F5 FF F5 AF AA A2 55 BF AA AA F5 55 57 AA EF FF AA FE AA AF AA AF AA AA FF FF AF BE BE BF AA 55 SF FF FF AA AA AA AF
FA AA AA AF AA FF FF AB 95 55 55 F5 AB FF 55 55 AA AF AA FF FA AF 55 FA AA 80 55 AF FA FE F5 7F 57 AA EF EA AA AA AA BF AA FF AA AA FF FF AB AE BA AA A9 55 7F FF FF AA AA AA AF
.:7A38 .:7A40 .:7A48 .:7A50 • :7A58 .:7A60 • :7A68 .:7A70 • :7A78 .:7A80 • :7A88 .:7A90 • :7A98 .:7AA0 • :7AA8 .:7AB0 • :7AB8 .:7AC0 .:7AC8 .:7AD0 .:7AD8 .:7AE0 .:7AE8 .:7AF0 • .: 7AF8 .:7B00 • :7B08 .:7B10 .:7B18 .:7B20 • :7B28 .:7B30 • :7B38 .:7B40 • :7B48 .:7B50 • :7B58 .:7B60 .:7B68 .:7B70 .:7B78 .:7980 .:7B88 .:7B90 .:7998 .:79A0 .:79A8 .:79B0 .:79B8 .:79C0 .:79C8 .:7BD0 .:7BD8 .:7BE0 .:7BE8 .:7BF0 • :7BF8 .:7C00 • :7C08
FF FA FA SF FF FF 0F 3F FF FF FF FA EA 57 FF FF EB FF FF FA FF FA FF FF FF FF FF 55 FF FF FF FA FF FF FF FF FF FF FF FF FF FA FA FA FA 55 FA AA FA 7D EB FF FA D7 EB EB EB EB EB
FE F5 AF AS BA FE C0 0F FF FF FF F5 D5 6B FF FF AA BE FF FA FF EA FF FA FF FF FF 7F 7F FF FF qA FE FF FF FF FF FF FF FF FF F5 AF F5 AF F5 AF 5A AB D5 AE BA AF 57 D7 D7 D7 D7 D7
FE FA FA AF EF F0 F0 2B FF FF FF FA 5D 97 FF AF AA AA FF FA FF AA FF AA BF FF FF 7F FF FF FE AA EA FF FF FF AF AF AF SF AF FA FA F6 AA 5F FA A5 AF 5F FF EF FA FD AA 55 AA 55 AS
FA F5 AF AS BA C0 03 80 FF FF FF F5 EA 6B FF FF AA AA FF FF FE AA EA AA BF FF FF 7F FF FF EA AA AA FF FF FF SF SF SF AF SF F5 AF FA FF F5 FF 59 EA F5 AA FA AF 55 5A A5 59 95 5A
FA FA FA AF FF 02 C0 28 3F FF FF FA EA 97 FF AB AA FF FF FF FF FA FF AB FF FF FF 3F FF FE AA AF AA FF FF FF AA AA SA SA SF FA FA 59 EA D5 AF AA 55 55 FF AF FA 59 A5 5A AA A5 A5
FA F5 AF F5 AA FA 00 00 FF FF FF F5 F5 6B FF FF AA AA FF FF FE AA AB AB FF FF FC 3F FF AA AB FF AA FF FF FF 55 65 69 65 9F F5 AF A6 AF 7F FA 9F 55 A5 AF FA AF 68 5A A5 5A 5A 96
AA AA FA F5 FA AF 55 DF FF FA F5 F5 AA AA 55 55 F5 F5 F5 F5 FA FA FA F5 SF F5 97 6B FF FF FF FF AA AA AA AA FF FF FF FF EA AA AA AF FF FE AA EB FF FF FF FF F0 C0 0F 03 FE EA AA AA BF FF FF FF AA AA FF FF FF FF FF FF AS 55 AA SA 55 AS A6 59 SF AF FA F5 FA AF 5A F5 FA AF D57F AE FA 7F FF 55 55 AF AA BE AB EF FA FA A9 A2 82 25 49 55 9A AS AA 55 A9 AA 56
• :7C10 • :7C18 .:7C20 • :7C28 .:7C30 • :7C38 .:7C40 • :7C48 • :7C50 · :7C58 .:7C60 • :7C68 • :7C70 • :7C7B • :7C80 • :7C88 • :7C90 · :7C98 · :7CA0 • :7CA8 .:7CB0 • :7CB8 .:7CC0 • :7CC8 · :7CD0 · :7CD8 .:7CE0 • :7CE8 .:7CF0 • :7CF8 .:7D00 • :7D08 · :7D10 • :7D18 .:7D20 • :7D28 • :7D30 • :7D38 .:7D40 • :7D48 .:7D50 • :7D58 • :7D60 .:7D68 .:7D70 • :7D78 • :7D80 • :7D88 .:7D90 • :7D98 .:7DA0 • :7DA8 .:7DB0 • :7DB8 .:7DC0 • :7DC8 .:7DD0 • :7DD8 • :7DE0
AA FF 57 FF FF FF FF 00 00 F5 FA FA FA FA FA FA FA FF FF FD FA FF FA 5F FA F5 FA 5B FF FF FF AA FF F6 F0 01 FF FD FF 57 FB 55 FF FE FF FF 5F E5 FE F5 EA FA FA FD 7E FF FF F0 EA
AA FF 55 FF FF FF FC 00 00 35 FA F5 F5 F5 F5 F5 FA FB FA 55 AF FF F5 F5 F5 5F AF AF FF FF FF FA EA 5A 0C Fl AF 55 AF F5 AA 6B AA AA FF FE FE 56 7F 96 5A F5 5A FD F6 FF 70 C3 2A
EA FF FD FF FF FF FF D6 E9 F5 AA 56 5A A5 AA A5 AA EA AF F7 EA FF FA 5F F9 D5 FA BF FF FF FF FA FF EA FC 0C FA F5 FA 5F FF A5 5A AA FF AA FE A5 FF 55 EA F5 FA FD 7E FF 58 F0 3A
EA FF FF FF FF FF FE DA BD F5 AA A5 A5 55 5A 5A AA AA FA 5F AF FF F5 F5 5A 5F AF 7F FF FF FF FD 7A 5A 03 FF FF 5F AF F5 FA 5A 6A AA FA AA EA 5A F5 A5 EA FA 7A FD 56 FF 70 CF 0A
D6 FF FF FF FF FF EA D5 A9 F5 AA 56 5A 69 96 A5 A9 AA AB A5 AA FF FA 5F A5 F5 FA FF FF FF FF 55 6F E9 F2 FD AF 57 BA 5F AF A5 5A AF AA AA EA 65 5F 6A 6A F5 5A FD D5 FF 9F C3 3A
DE FF FF FF FF FA AA E9 BD E5 A9 5A A5 D5 5A 75 A5 88 B9 A9 EF FF F5 F5 5A 5F AF FF FF FF FA 55 7A 5F BA 65 FA F5 FA 57 FE 55 5F FF AA A9 AA 55 F5 5A EA FA FA FE 7E FF 5A F3 C2
D7 7F FF FF FF AA AA E5 A9 A5 A5 D5 5B FA AA FE A5 22 A5 AA BA FF FA 5F A5 5F BA FF FF FF AA 55 7E F5 9A 95 FE 55 AF F5 EB 5A 55 FF AA A9 AA A5 5F A5 FD A5 F5 5A 57 AA 7F F0 3E
7D BF FF FF FA AA AA E9 FD A5 95 F5 AF FE 5B ,, 94 28 95 AA 6F FF F5 F5
5A F5 AD FF FF FA AA 55 7A 5F 99 55 AF 5F FA 5F BE A5 55 FF AA 95 AA 5A 55 5A D5 5A FF A5 55 59 5D CB BA
• : 7DE8 .:7DF0 • :7DF8 .:7E00 • :7E08 • :7E10 · : 7E18 .:7E20 • :7E28 .:7E30 • :7E38 .:7E40 · : 7E48 .:7E50 • :7E58 .:7E60 • :7E58 .:7E70 · : 7E78 .:7E80 • :7E88 .:7E90 • :7E98 .:7EA0 • :7EA8 .:7EB0 • : 7EB8 • :7EC0 • :7EC8 .:7ED0 · :7ED8 • :7EE0 • :7EE8 · :7EF0 • :7EF8 .:7F00 • :7F08 · :7F10 • : 7F 18 .:7F20 · :7F28 .' :7F30 · :7F38 .:7F40 • :7F48 .:7F50 • : 7F58 .:7F60 .:7F58 .:7F70 .:7F78 .:7F80 • :7F88 .:7F90 .:7F98 .:7FA0 .:7FA8 .:7FB0 • :7FB8
FF FA FF FA FA FA AA F9 FF FF AA AA AA E5 D5 E9 57 EA 5A FA
FF F5 FF F5 AF FF AF AD FF FA AA AA AF DA 7D 55 7D AF A5 AA
FF FA FF FA FA AF FA F9 FF EA AA AA BF E5 F7 E5 F7 FA 56 BE
FF F5 FF F5 AF FA AF AD FF AA AA AA FF DA 7F 55 55 BF A5 AA
FF FA FF FA FA AF FA F9 FE AA AA AA BF E5 55 EB DD FA 5A FA
FF F5 FF F5 AF FA AF AD FA AA AA AA AB DA 7D 65 7D AF A9 AF
FF FA FF FA FA AF FA F9 EA AA AA AA AA E5 F7 E5 F5 FA 56 FA
FF F5 FF F5 AF FA AF AD AA AA AA AA AA DA 7F E9 5F AF A9 AF
F5 5F F5 5F F5 5F F5 5F 77 5D F5 5F F5 5F F5 5F
55 F5 FA AA 55 F5 5F F5 5F F5 FA AF 5F F5 FA AF FF AE EB AE D5 FF FB BE 55 7F EB FE F5 DF E7 BD E5 6E E5 5A AF FA FA AF FF FF EF FF EF 71 EF 30 FF 38 CF 32 FF02 FF FB 7B 20 FF 38 EF 10 FF 00 FF 00 FD 0D FD FD FF 00 FF 00
D7 EB 5F 55 55 FF 5F FA FB
7D BE F5 7D 7D EB
D7 FA 5F D7 D7 BF
F5 AE F5 7D 7D EB
F7 EB 5F D7 D7 BE
5D BE F5 7D 7D EB
F5 5F :=5 5F :=5
AF FA AF r'A AF AF FA AE FB AE r'A AF FA AE FB AF
D5 5F 55 FF 5D 5:-
AA AF FA BE 5F BF AB EB FE 55 7F F5 DF FA AF FA AF A9 6F E5 6F A5 5A A5 6A AF FA AF FA FA AF FA AF FF FF FF FF E7 22 EF 20 FF 00 FF 15 FF 7F FF 20 FF 04 FF 73 FF 7B FF 00 FF 10 7B 30 FF 30 FF 00 14 20 73 31 EF 30 FF 00 FF D3 FF 00 DF 00 FF 00 FB FF FD 0D FD 1121 FD FD FF FB 7F 1210 10 02 FF 1210 4C 10 F3 30 F7 55 F5
BA AF F7 55
BF 55 FA 67 A5 AF FA FF FF FF FF 7C FF FF FF FF FF DF 11 FD FD FF CF 57
EB 7D
AF 5F 5A EA BF FF FB 20
11 FF 00 FF 31 73 FF FB 3121 3D 3D FF 20 00
199
.:7FC0 • :7FC8 .:7F00 • :7F08 .:7FE0 • :7FE8 .:7FF0 • :7FF8 • :8000 • :8008 .:8010 • :8018 • :8020 • :8028 • :8030 • :8038 • :8040 • :8048 • :8050 • :8058 • :8060 • :8068 .:8070 • :8078 • :8080 • :8088 • :8090 • :8098 • : 80A0 • :80A8 • :80B0 · :80B8 • :80C0 • :80C8 • :8000 • :8008 .:80E0 • :80E8 • :80F0 • :80F8 • :8100 · :8108 .:8110 • :8118 · :8120 • :8128 • :8130 · :8138 .:8140 • :8148 .:8150 •. :8158 .:8160 • :8168 • :8170 • :8178 .:8180 • :8188 .:8190
200
0060 03 10 FF 08 00 FO 03 28 FF 00 38 FF 00 00 FO 00 20 FF 20 FF FF FF 4C FC 88 4F 50 59 20 3139 54 45 56 45 53 53 45 52 46 43 45 20 20 53 54 42 52 45 CC F0 C0 C0 C0 C0 0C 0C 0C 00 00 00 0F 30 C0 00 00 00 0F 00 C0 00 C0 C0 C3 FF 03 00 C0 00 00 00 C0 C0 C0 C0 FF C0 C0 00 C0 C0 0C 30 30 00 00 00 3F C0 C0 00 C0 C0 3F 00 03 C0 C0 00 00 00 00 00 00 00 80 75 70 40 35 20 01 01 01 00 00 00 20 35 99 06 09 0A 09 09 08 0A 05 06 05 08 04 CF FE FD 7F 01 02 80 00 03 0A 07 01 03 03 04 47 06 47 47 06 47 47 05 47 47 05 47 0C 07 47 47 05 ED
03 FF 03 FB FF EF FF OF 28 52 38 45 28 4F 31 45 53 3F 00 3F 00 FF C0 3F 00 03 00 3F 00 3F 00 30 00 3F 00 FC 00 00 00 65 45 01 00 99 06 01 0A 02 F8 04 08 01 40 05 05 05 05 05 05
00 20 00 00 00 FF 10 ED 43 49 33 4E 50 52 39 56 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 30 00 00 99 06 02 0A 01 F7 08 05 01 47 0C 47 47 47 47 47
FO FO FO CF FO FF FF 10 29 47 2C 20 29 40 38 45 3F 00 0C 00 3F 00 FF C0 03 00 FF C0 0F C0 FF C0 3F 00 3F 00 00 00 98 55 01 00 10 04 05 08 09 FC EF 10 08 02 05 07 05 05 05 05 05
00 00 00 OB 00 01 00 03 20 48 20 42 20 41 33 4E C0 C0 3C 00 C0 C0 00 C0 0F 00 C0 00 30 00 00 C0 C0 C0 C0 C0 00 00 90 50 01 00 08 04 05 08 09 F3 DF 20 06 01 47 47 ED ED 47 47 47
EO OF FF FF 03 FC FF ED 43 54 53 52 50 4E 2C 20 C3 C0 0C 00 00 C0 03 00 33 00 FF 00 C0 00 03 00 C0 C0 C0 C0 00 0085 45 01 00 14 05 0A 09 06 3F BF 40 05 02 05 05 05 05 05 05 06
• :8198 47 05 • :81A0 47 06 • :81A8 47 05 .:81B0 47 05 • :81B8 E9 07 • :81C0 E9 07 • :81C8 47 05 .:81D0 0F 0F • :81D8 0F 0F • :81E0 0F 0F • :81E8 0F 0F .:81F00F 1E • :81F8 3C 3C .:8200 3C 3C • :8208 32 19 .:8210 85 17 • :8218 1F 15 .:8220 0112 • :8228 32 19 .:8230 85 17 • :8238 32 19 • :8240 31 1C • :8248 A5 1F .:8250 32 19 • :8258 85 17 .:8260 1F 15 • :8268 A5 IF • :8270 32 19 • :8278 Dl 12 .:8280 31 lC • :8288 1F 15 .:8290 C3 10 • : 8298 31 1 C .:82A0 85 17 • : 82A8 01 12 .:8280 A5 1F • :8288 32 19 • :82C0 01 12 • :82C8 31 1C • :8200 1F 15 • :8208 C3 10 • :82E0 31 1C • :82E8 85 17 • :82F0 D1 12 • :82F8 A5 1F .:8300 0F 0F • :8308 0F 0F .:8310 0F 0F • :8318 0F 0F .:8320 0F 0F • :8328 0F 0F • :8330 07 07 • :8338 06 07 · : 8340 07 06 • :8348 07 07 • :8350 05 07 • :8358 07 06 • :8360 07 07 • :8368 06 07
ED 47 47 47 0C 0C 47 0F 0F 0F 1E 0F 3C 00 85 1F 01 02 85 32 31 A5 87 85 Dl A5 32 1F 31 85 C3 32 85 01 A5 32 IF 31 85 C3 32 85 01 1F 32 0F 0F 0F 0F 0F 0F 06 07 07 06 07 07 06 07
05 47 05 0C 05 47 05 47 07 47 07 47 05 00 0F 0F 0F 1E 1E 0F 0F 0F 0F 0F 3C 3C 00 A5 17 31 1532 12 85 0F 1F 17 01 19 85 1C 32 1F 31 21 A5 17 1F 12 02 1F 32 19 1F 15 31 1C 85 1701 10 32 19 1F 1 7 D1 12 31 1F 32 19 1F 15 31 1C 85 17 01 10 32 19 1F 17 01 12 31 15 85 19 00 0F 0F 0F 0F 20 0F 0F 0F 0F 0F 0F 1E 07 07 05 07 07 06 07 07 05 07 07 06 07 07 06 07
05 07 05 05 06 06 00 lE 0F 0F 0F 0F 3C 1F lC 19 17 15 12 17 19 1C 1F 15 0F 19 15 1C 17 12 19 15 12 1C 19 15 1C 17 12 19 15 12 1C 17 00 0F 0F 0F 0F 0F 07 06 07 07 06 07 07 06 07
47 47 ED ED 0C 0C lE 0F 0F 0F 0F 0F 3C 31 32 85 1F 85 IF 1F 85 32 31 32 85 1F A5 85 01 32 1F C3 31 85 1F A5 85 01 32 1F C3 31 85 D1 0F 0F 0F 0F 0F 0F 07 07 06 07 07 06 07 07 06
05 05 05 05 07 07 0F 0F 0F 0F 0F 20 3C 1e 19 17 15 17 15 15 17 19 1C 19 17 15 1F 17 12 19 15 10 1C 17 15 1F 17 12 19 15 10 1C 17 12 0F 0F 0F 0F 0F 0F 06 07 07 0E. 0.7 07 06 07 07
• :B370 07 05 07 07 · :8378 0F 3C 00 00 .:83B0 01 A9 00 8D • :8388 DD AD 0D DC • :B390 00 BD 02 DC • :8398 0E DC 8D 0F .:B3A0 AD 0F DD A9 • : 83AB A9 81 8D 19 • :B3B0 14 03 A9 B7 • :83B8 00 85 02 A9 • :83C0 00 85 04 A9 • :83C8 00 A2 00 B1 • : 83D0 D0 F9 E6 03 • :83D8 24 D0 F0 A9 .:B3E0 20 B5 03 A9 • :83E8 60 85 05 A0 • :B3F0 02 91 04 C8 • :83F8 E6 05 EB E0 .:8400 00 85 02 A9 • :B408 00 B5 04 A9 .:8410 ~0 A2 00 B1 • :8418 D0 F9 E6 03 .:8420 04 D0 F0 A9 • :8428 18 85 03 A9 .:8430 D8 85 05 A0 • :8438 02 91 04 C8 .:8440 E6 05 EB E0 .:8448 01 8D 1A D0 .:8450 D0 A9 21 85 • :8458 32 A9 82 85 .:8450 38 A9 82 85 • :8468 0C D4 A9 95 .:8470008D lC D0 • :8478 AS 50 85 51 .:8480 85 54 8555 • :8488 A9 30 85 43 • :8490 5F A9 0A BD • :8498 8D F9 5F A9 • :84A0 A9 0D 8D FB • :84A8 FC 5F A9 0F .:84B0 0185 18 85 • :84B8 lB 85 1C 85 .:B4C0 1F A9 28 85 • :84C8 3D A9 88 85 • :B400 3F A9 E8 85 · :8408 41 A9 3E 85 • :84E0 44 A9 SF 8D • :84E8 80 lD D0 8D .:84F0 8D 2100 A9 .:84F8 A9 20 4A 4A .:8500 D0 29 F0 05 • :8508 AD 11 D0 09 • :8510 AD 16 D0 09 • :8518 A2 00 A9 1C • :B520 AD 1B D0 29 • :8528 18 D0 A9 03 .:B530 E9 01 8D 00 • :8538 30 A9 81 85 .:B540 36 A9 B1 85
05 78 0D AD BD DC 63 03 8D 5C 9C 02 E6 00 00 00 D0 20 14 5C 02 E6 00 00 00 D0 04 A9 29 33 39 8D A9 85 A9 A9 F8 0C 5F 8D 19 lD 3C 3E 40 42 15 17 00 85 95 20 10 0A 0F 8D DD 31 37
0F 0F A9 06 DC 8D 0D DD 03 DC AD 0E BD 18 A9 23 15 03 85 03 B5 05 91 04 05 E8 85 02 B5 04 A2 00 F9 E6 00 F0 B5 03 85 05 9104 05 E8 85 02 85 04 A2 00 F9 E6 D0 F0 FF 8D A9 04 A9 FE A9 19 0D D4 00 85 52 85 E0 85 09 8D 5F A9 8D FA A9 0E FD 5F 85 lA 85 1E A9 58 A9 B8 A9 lB A9 20 D0 A9 D0 A9 8D 20 95 AD BD lB 80 11 8D 16 0A B5 05 95 02 DD A9 64 A9 CE A9 25
0F 85 0D A9 BD DO 03 80 A9 A9 A0 C8 E0 A9 A9 B1 03 A9 A9 A0 CB E0 A9 A9 Bl 03 A9 19 85 85 8D A9 4F 53 56 FF 0B 5F 80 A9 85 85 85 85 85 85 7F 0F D0 18 D0 D0 D0 95 BD 38 B5 85 BD
· :8548 • :B550 • :8558 • :B560 · :8568 • :B570 · :8578 • :B580 · :8588 · :8590 • :8598 · :85A0 · :85A8 · :B580 • :8588 • : 85C0 · :85C8 • : 85D0 • :8pD8 · :85E0 · :85E8 • :85F0 • :85F8 .:8600 • :8608 · :8610 • :8618 .:8520 • :8628 .:8530 • :8638 .:8540 • :8548 .~8550
• :8658 .:8650 • :8668 .:8570 • :8678 • :85B0 • :8588 .:8690 • :8698 .:86A0 • :86A8 .:86B0 • :8688 .:86C0 • :86C8 • :.86D0 • :86D8 .:86E0 • :86E8 .:86F0 • :86F8 .:8700 • :8708 .:8710 • :8718
05 D4 A9 84 0F BD 1B 04 8D 00 D4 81 C8 Bl 30 BD 8D 08 D4 A9 8D 08 D4 A9 8D 0B D4 85 30 18 69 02 65 31 85 31 02 85 32 A9 33 A0 00 81 38 85 68 A5 85 38 A9 00 A5 36 1B 69 00 65 37 85 12 D0 AD 11 11 D0 58 A9 95 BD FE 0.F 01 DC 85 8D A5 9D C9 20 8D FE 0F 4C D0 85 8E 29 07 A5 44 3D A9 0185 9C 6A 85 9C A5 07 C9 25 B0 A9 02 8D FF 10 D0 81 7B A9 9C 85 03 A9 5C 85 05 B1 02 91 04 03 E5 05 E8 A9 00 85 02 A9 00 85 04 A0 00 A2 00 C8 D0 F9 E6 E0 04 D0 F0 01 8D FF 0F F0 03 4C D4 85 02 A9 9C 85 04 A9 5C A2 00 8102 F9 E6 03 E6 D0 F0 A9 00 85 03 A9 00 85 05 A0 00 91 04 C8 D0 05 E8 E0 04 89 A9 00 8D 29 10 F0 03 A9 00 85 02 A9 00 85 04 A0 00 A2 00 C8 D0 F9 E6 E0 24 D0 F0 A9 10 85 03 A9 D8 85 05 8102 9104 03 E6 05 E8
8D 06 A0 00 32 8D 01 D4 20 8D 21 8D 28 85 B5 30 A5 32 00 65 36 85 38 lB 65 39 0.1 B5 37 A9 D0 29 00 85 AD 00 29 10 90 EE 23 86 B0 F0 49 81 66 9C 9C C9 5A 4C 0F A5 A9 00 A9 00 A0 00 C8 D0 E0 24 A9 10 A9 D8 81 02 03 E6 4C 33 A5 8D 85 78 85 03 85 05 9104 05 E8 85 02 85 04 A2 00 F9 E6 D0 F0 FF 0F 4C D4 A9 9C A9 5C B1 02 03 E6 A9 00 A9 00 A0 00 C8 D0 E0 04
D4 A9 B1 30 07 D4 Bl 32 04 D4 04 D4 29 A5 A9 00 18 69 33 85 6A B~ 69 01 85 39 35 A9 F8 BD 7F BD 9D 85 DC 2D F0 0E A9 01 AD IF DD A2 F0 02 A5 43 7A B0 C9 85 8D 29 85 02 85 04 A2 00 F9 E6 D0 F0 85 03 85 05 91 04 05 E8 89 A9 29 10 A9 00 A9 00 A0 00 C8 D0 E0 24 A9 10 A9 D8 8102 03 E6 4C 33 A5 80 85 78 85 03 85 05 91 04 05 E8 85 02 85 04 A2 00 F9 E6 00 F0
201
.:8720 4C 33 89 78 E5 • :8728 A5 9E 49 3C D0 .:8730 E5 9D A5 9F 29 • :8738 A5 44 8D 10 D0 .:8740 5C B0 lC A2 00 • :8748 3C 99 00 D0 B5 .:8750 D0 B5 18 9D 27 · :8758 E8 C8 C8 E0 07 · :8750 55 8D 0F D0 A5 · :8758 D0 A5 iF 8D 2E • :8770 F0 03 4C 39 88 · :8778 5A D0 5D A0 00 • :8780 lE A9 54 85 30 • :8788 31 A9 CE 85 35 · :8790 37 A9 01 85 95 · :8798 04 D4 8D 0B D4 • :87A0 5A Bl 30 8D 00 • :87A8 30 BD 01 D4 A5 • :8790 02 85 30 A9 00 • :87B8 31 A5 35 18 59 .:87C0 A9 00 55 37 85 · :87C8 D0 0E A5 28 29 · :87D0 D4 09 01 8D 04 • :87DB C5 5B D0 5D A0 • :87E0 D0 22 A9 04 85 • :87E8 85 33 A9 FE 85 .:87F0 85 39 A9 0185 • :87F8 8D 04 D4 8D 08 • :8800 A5 95 D0 35 85 · :8808 8D 07 D4 C8 81 · :8810 D4 A5 32 18 59 • ~8818 A9 00 55 33 85 .:8820 18 59 0185 38 • :8828 39 85 39 A5 29 .:8830 09 D4 09 01 8D • :8838 29 A5 8D 29 08 • :8840 07 85 3C 18 59 • :8848 90 07 A5 44 lD · :8850 44 A5 43 C9 3F · :8858 44 29 80 F0 10 .:8850 E9 01 95 3C 90 • :8858 3D 41 81 85 44 • :8870 04 D0 2E A2 07 • :8878 E9 01 95 3C 80 .:8880 3D 418185 44 • :8888 18 D0 15 A5 44 .:8890 1095 3C 18 59 • :8898 90 07 A5 44 lD .:88A0 44 A9 F9 8D 12 · :88A8 D0 29 7F 8D 11 .:88908D 19 D0 58 A8 • :8898 40 EA EA 03 0E .:88C0 0A 02 02 03 00 • :88C8 03 0D 07 08 0A .:88D0 07 08 0A 02 03 • : 88D8 05 05 05 01 01 .:88E0 00 00 00 00 00 • :88E8 00 00 00 04 00 .:88F0 0A 08 07 0D 0E
202
9F E5 04 85 03 D0 A5 4F A0 00 4F 99 D0 F5 D0 E8 43 8D D0 A5 C5 5A Bl 35 A9 81 A9 81 A9 40 Bl 35 D4 C8 30 18 55 31 01 85 37 A5 FE 8D D4 85 00 81 32 A9 38 A9 95 A9 D4 81 59 Bl 32 8D 02 85 33 A5 A9 00 29 FE 08 D4 D0 2E 01 95 49 81 D0 15 B5 3C 07 A5 A5 8D B5 3C 07 A5 A5 43 29 80 0195 49 81 D0 AD D0 A9 58 AA 05 07 0120 02 03 0D 07 01 00 00 00 00 03 03 01
9E 9E 27 C9 B5 01 4F A5 0E 95 A5 D0 85 85 8D 85 B1 59 85 35 95 04 28 38 82 B2 40 38 32 0S 32 38 55 SD 85 A2 3C 85 A5 38 44 29 38 44 C9 D0 3C 85 11 FF 58 08 21 0D 08 01 00 01 0A
• :88F8 .:8900 • :8908 • :8910 • :8918 .:8920 • :8928 .:8930 • :8938 .:8940 • :8948 .:8950 • :8958 .:8950 • :8958 .:8970 • :8978 .:8980 • :8988 .:8990 • :8998 .:89A0 • :89A8 .:8990 • :8988 .:89C0 • : 89C8 • :89D0 • :89D8 • :89E0 • :89E8 .:89F0 • :89F8 .:8A00 • :8A08 • :8A10 • :8A18 .:8A20 • :8A28 • :8A30 • :8A38 • :8A40 • :8A48 .:8A50 • :8A58 .:8A50 • :8A58 .:8A70 • :8A78 .:8A80 .:8A88 .:8A90 • :8A98 .:8AA0 • :8AA8 .:8A90 • :8AB8 .:8AC0 • :8AC8
08 07 8D 0D DC AD D0 8D 0E DC 8D 0F 8D 18 4C 7C A9 95 00 A8 10 A9 D4 A9 8D 0D 85 28 A9 01 A9 20 08 D4 0185 8D lC A9 C0 85 82 85 55 8D 15 A9 80 FE 8D 0F 85 85 85 11 D0 00 85 A9 00 A2 00 85 70 04 A9 03 81 E5 03 DC D0 95 18 A0 00 99 20 D0 F3 00 A0 A9 05 85 25 85 AA 85 A8 85 AC 8D 25 19 85 85 lA 85 lE FF 0F A9 00 81 8D D0 03 95 C8 18 C8 18 59 8E 85 8F 4C
0D DC 0D 02 8D DD 03 83 8D 95 A5 00 D4 8D 8D 8D A9 8C D0 85 A9 A9 D0 8D 0E 83 85 A9 75 8D A9 85 D8 02 A5 EE E8 A2 00 A0 07 85 A9 A9 A9 A9 D0 iF 85 A9 85 85 85 4C B1 71 03 8E 98
0E 8D DD DC 0F A2 A9 A9 15 00 8D 8D A9 00 01 08 9F 8D 8D 7D 0F E9 A9 12 D4 A9 85 78 A9 lD 00 5F 85 91 05 A2 C8 09 E8 05 A9 24 00 00 00 50 A9 8D 19 07 55 8D 95 lE 8D 8D 85 A9 8A
EA 78 A9 0D DD AD A9 00 8D 8D 03 DC DC 8D 0E FF 9A A9 81 8D 19 0F 8D 14 03 A2 02 E8 D0 F9 05 D4 8D 05 D4 A9 80 8D 15 D4 8D 07 D4 8D 15 D4 8529 8D 18 D4 1A D0 A9 i9 D0 A9 85 7E A9 85 81 A9 85 55 A9 88 SD 12 D4 85 2A 8D 0F D4 40 85 84 87 A9 3B 8D 18 D0 18 8D 15 D0 8D 17 85 5C 85 A8 85 02 05 A9 10 04 C8 D0 E8 85 05 00 A0 01 E0 08 D0 98 99 F8 C8 98 C0 A9 04 99 05 99 20 A9 07 85 85 A9 A9 85 A7 A9 85 AB A9 85 3F A9 03 85 18 25 D0 A9 85 lC 85 8D 2E D0 A2 00 A0 A9 1C 85 10 2E C9 8929 0F 85 8F A9 85 90 A5 8D A9 00 04 A0 00 29 40 F0
00 0D lB 8D DD 53 03 03 A9 85 0C 04 D4 D4 D4 8D A9 FF 45 03 90 FF D4 A9 A9 85 8D A9 D0 D0 5D 85 85 F9 E0 98 F7 5F 08 20 00 25 14 18 lC 07 85 01 lD AD 00 8E FF 85 D8 8D 55 91 27
.:8A00 C8 Bl .:8A08 C8 71 .:8AE0 69 03 .18AE8 85 8E .:8AF0 09 04 .:8AF8 8180 .:8800 71 80 .:880803 85 .:8B10 8E A0 .:8818 40 91 .:8820 80 02 .:882809 02 .:8B30 20 00 .:8838 11 D0 .:8840 A9 00 .:884800 AD .:8850 10 00 .:8858 8D 5A .:8B60 8B C9 .:8868 A5 83 .:8B70 1030 • :8878 29 3F .:888077 4C .:8888 A8 85 .:8B90 4C 96 .:8898 85 8D .:88A0 18 65 • :88A8 44 1D .:8B8090 10 • :8888 3C 80 .:8BC0 85 44 • :88C8 38 ES .:8800 04 A9 • :88D8 0F 8S .:88E0 C9 E8 • :88E8 E8 E0 .:88F0 A2 00 .:88F8 AS 44 .:8C00 77 29 • :8C08 lF 8C .:8C10 AS 44 .:8C18 77 29 .:8C20 E0 04 • :8C28 D0 09 .:8C30 4C 7C .:8C38 41 AS .:8C40 7D D0 • :8C48 31 AD .:8CS0 F0 28 .:8CS8 AS 55 .:8C60 3D 49 .:8C68 8E AS .:8C70 8D 6A .:8C78 00 97 .:8C80 A5 88 .:8C88 D0 37 .:8C90 AD 01 .:8C98 28 AS .:8CA0 F0 85
80 80 85 A0 91 85 85 80 00 8F DO 80 A9 29 85 00 03 81 06 3D 49 DD 96 72 88 66 9C 49 8S 07 66 9C 40 4F 90 04 8S 3D FD 8S 3D FE D0 A5 83 88 37 00 AS 85 81 42 18 A5 C9 A5 DC 82 50
85 8F A9 5C 18 85 90 A5 8D 18 80 A9 00 65 8E 00 81 8F 29 F0 8F 4C 98 8A C8 8F A9 5C 18 C8 90 A5 80 18 69 A9 00 65 8E 85 Bl 8F 29 0F 09 4C 98 8A A9 03 AD 00 DO 29 FC 00 DO A9 00 80 F8 80 12 D0 AD 7F 80 11 00 S8 A0 AD FE 0F F0 DC 20 01 DC 29 4C 7C 83 A6 4E 85 9C A2 00 A5 00 03 4C E8 88 49 81 D0 79 AS 810072 AS 9F 15 81 F0 05 8S 88 A5 A1 290F D0 06 89 2D 81 89 10 81 9S 77 8D 90 10 8S 3C 95 3C 90 07 AS 81 85 44 66 8D 3C 38 E5 9C 9S AS 44 3D 41 81 8D 90 0F 85 4F 9S 4F C9 40 80 9S 4F 66 8D 90 18 6S 9C 95 4F 04 A9 E8 9S 4F F0 03 4C 5F B8 3C C9 1880 12 49 81 D0 08 8S 09 01 95 77 4C 3C C9 3F 90 0F 49 81 F0 08 85 09 02 9S 77 E8 CE A5 88 C9 06 9D C9 30 90 03 A5 82 29 01 D0 C9 06 F0 38 AS A5 65 C9 02 F0 DC 09 EF C9 FF 82 09 01 8S 82 SE A2 06 A5 44 F0 02 A9 01 85 8S 8D 66 8E AS 69 08 8S 4C 20 82 29 02 D0 41 06 F0 38 A5 7E 6S C9 01 F031 09 EF C9 FF F0 09 02 85 82 A9 A207 A5 44 3D
.:8CA8 49 81 F0 02 A9 0185 8E .:8C80 A5 43 85 80 66 8E A5 80 .:8C886A 1869 08 85 48 20 2F .:8CC0 97 A5 65 C9 02 00 07 A9 .:8CC8 05 85 55 4C 84 8D AD 00 .:8C00 DC 09 F0 A8 A5 70 F0 03 .:8CD8 4C 84 8D A5 88 C9 06 D0 .:8CE0 03 4C 84 80 98 09 FE C9 .18CE8 FF F0 0A C6 55 A5 55 C9 .:8CF0 48 00 02 E6 55 98 09 FO • :8CF8 C9 FF F0 0A E6 S5 AS 55 .:8D00 C9 D5 00 02 C6 5S 98 09 • :8D08 F8 C9 FF F0 38 A2 06 8S .:8010 3C 38 E9 01 95 3C 80 07 • :8D18 A5 44 3D 41 81 85 44 8S .:8020 3C 38 E9 01 95 3C 80 07 .:8D28 A5 44 3D 418185 44 AS .:8030 4E C9 04 90 1085 3C 38 • :8D38 E9 01 95 3C 80 07 A5 44 .:8040 3D 41 81 8S 44 98 09 F7 .:8D48 C9 FF F0 38 A2 06 85 3C .:8D50 18 69 01 95 3C 90 07 A5 • :8DS8 44 lD 49 81 85 44 85 3C .:8060 18 69 01 95 3C 90 07 A5 .:8D68 44 lD 49 8185 44 A5 4E .:8070 C9 04 90 1085 3C 1869 • :8D78 01 95 3C 90 07 A5 44 1D .:808049818544 AD 01 DC A8 • :8D88 A5 7E F0 03 4C 23 BE AS .:8090 88 C9 06 D0 03 4C 23 8E .:8D98 A5 65 C9 01 D0 07 A9 05 .:8DA0 85 56 4C 23 8E 98 09 F8 • :8DA8 C9FF F0 38 A2 07 85 3C .:8D80 38 E9 0195 3C 80 07 A5 .:8D88 44 3D 418185 44 85 3C .:80C0 38 E9 01 95 3C 80 07 A5 .:8DC8 44 3D 418185 44 AS 4E .:8DD0 C9 04 90 10 85 3C 38 E9 • :8DD8 01 95 3C B0 07 AS 44 3D • :8DE0 41 81 85 44 98 09 F7 C9 .:8DE8 FF F0 38 A2 07 85 3C 18 .:8DF0 69 01 95 3C 90 07 A5 44 • :8DF8 lD 49 81 85 44 85 3C 18 .:8E00 69 01 95 3C 90 07 A5 44 • :8E08 1D 49 81 B5 44 AS 4E C9 .:8E10 04 90 10 85 3C 18 69 01 • :8E18 9S 3C 90 07 AS 44 1D 49 .:8E20 81 85 44 A2 00 BS 4F C9 • :8E28 E8 90 08 B5 72 D0 07 A9 .:8E30 01957220 5E 97 E8 E0 • :8E38 04 D0 EA A2 00 86 8D 8S .:8E40 4F C9 43 80 14 85 72 F0 .:eE48 10 E6 76 E6 76 E6 76 E6 .:8E50 76 E6 76 A9 00 95 72 E6 .:8ES8 eD Ee E0 04 D0 El AS eD .:8E60 F0 36 A2 00 AS 67 C9 40 • :8E68 D0 02 A9 3F B5 67 4A 4A .:8E70 A8 F8 A5 80 F0 22 B9 F5 • :8E78 80 18 6S SF 8S SF A9 00
203
.:8E80 • :8E88 .:8E90 • :aE9a .:8EA0 • :8EA8 .:8EB0 • :8E88 .:8EC0 • :8EC8 .:8E00 • :8E08 .:8EE0 • :8EE8 .:8EF0 • :8EF8 .:8F00 • :8F08 .:8F10 • :8F18 .:8F20 .:8F28 .:8F30 .:8F38 .:8F40 • :8F48 .:8F50 • :8F58 .:8F60 .:8F68 .:8F70 • :8F78 .:8F80 • :8F88 .:8F90 • :8F98 .:8FA0 • :8FA8 .:8FB0 .:8F88 .:8FC0 • :8FC8 .:8F00 • :8F08 .:8FE0 • :8FE8 • :8FF0 .:8FF8 .:9000 • :9008 .:9010 • :9018 • :9020 • :9028 .:9030 • :9038 .:9040 • :9048 .:9050
204
65 60 85 65 61 85 80 F0 05 08 A2 00 0C A5 44 F6 42 4C 3F 90 0C F0 05 06 E0 02 00 F0 58 A5 A2 00 A5 85 80 66 4C 10 8F A2 A4 4E A5 44 30 01 85 96 96 A5 95 45 B5 4F A5 81 10 8C 97 4C 00 B8 A5 A0 01 4C 83 85 80 14 B5 72 95 20 4C 95 20 4C 95 20 E8 76 00 03 29 07 C9 90 A2 00 FF 00 07 13 90 E6 1029 C8 A9 08 18 95 A0 00 AB 18 69 65 AC 85 4C 13 90 Bl AB 85 71 AB 85 8595 A0 05 95 91 03 85 AB AC C6 76 C8 81 AB 18 71 A8 0A 0A 0A 80 29 0F A8 18 69 65 AC 85 4C 69 8F 12 20 78 66 00 08 01 85 66 07 A5 44 A9 01 85 6A 85 8E CA A5 44 A9 0185
60 A9 00 85 67 61 20 80 97 C6 E8 E0 04 00 09 B5 42 C9 18 80 30 4F 8100 05 98 8E 85 42 C9 A5 44 30 4F 81 42 4C AO 8E E8 07 A5 8B C9 06 9F 29 03 00 40 83 85 8E A5 81 8E 90 05 66 80 6680 80 36 A5 09 51 81 80 20 49 81 F0 02 A9 B5 3C 85 95 66 6A 18 69 06 95 18 69 0A 95 57 49 8185 8120 22 8F E8 E0 04 9F 29 20 F0 05 2F 8F A0 00 A5 A2 00 66 8080 F0 08 B9 C2 88 52 8F 89 C4 88 52 8F 89 C6 88 E0 04 00 OE A5 4C 13 90 A5 9F 06 F0 03 4C 13 A0 00 81 A8 C9 A9 06 85 8B 4C 0F 85 95 A5 95 81 AB 85 80 C8 71 A8 85 8E A5 29 0F 9180 A5 03 85 A8 A9 00 AC C6 76 00 Cl 29 40 F0 31 C8 80 C8 A9 5C 18 8E A5 95 29 0F 00 8180 29 F0 80 A5 A8 18 69 A9 00 65 AC 85 00 8C 4C 13 90 85 80 C8 A9 5C 85 8E A5 95 0A 85 95 A0 00 81 05 95 9180 A5 03 85 AB A9 00 AC C6 76 F0 03 A5 88 C9 06 00 98 20 7F 98 A5 A9 00 85 90 A9 A9 00 85 8A A2 30 49 81 F002 8E 66 8E A5 43 18 69 09 85 8E 30 49 81 F0 02 80 66 80 A5 42
• :9058 6A .:9060 A0 • :9068 66 .:9070 F5 • :9078 00 .:9080 80 • :9088 8A .:9090 A5 • :9098 CF .:90A0 F0 • :90A8 A5 .:90B0 30 • :90B8 8F .:90C0 CA • :90C8 A9 .:9000 6A • :9008 81 .:90E0 80 .:90E8 A2 .:90F0 38 .:90F8 4F .:9100 0A .:910885 .:9110 18 .:911860 .:91206F • :9128 65 .:9130 00 .:9138 81 .:9140 3B .:914808 .:9150 E8 • :9158 08 • :9160 E8 .:916865 .:9170 85 .:9178 CA .:9180 85 • :9188 90 .:9190 10 • :9198 84 .:91A0 19 • :91A8 A9 .:91B0 65 • :91B8 98 .:91C0 68 • :91C8 43 .:9100 90 • :9108 E6 .:91E0 92 • :91E8 20 • :91F0 C9 • :91F8 C9 .:9200 85 • :9208 85 .:9210 A5 • :9218 29 .:9220 85 • :9228 A5
85 80 18 69 00 A2 00 A5 96 90 10 B9 45 C9 0E 80 69 0C 38 F5 07 A5 8A 19 E8 E0 04 00 818596 C8 A2 03 A5 44 02 A9 0185 3F 6A 85 90 49 81 F0 02 66 8F A5 3E A5 44 30 49 01 85 8E 66 85 8E CA A5 F0 02 A9 01 A5 3C 6A 85 00 89 80 00 F5 4B C9 0E 00 69 0A 38 B0 2A A5 8A 8A F8 8A 00 69 01 85 6C 85 60 08 4C 18 69 01 85 70 85 70 08 B8 A0 00 E8 A2 00 A5 8A 24 8A 10 0C A9 80 85 7E 24 8A 50 0C A9 80 85 70 8A F0 18 F8 5F 85 5F A9 60 A9 00 65 00 EA 08 A2 80 29 0F F0 2F B5 84 00 49 818583 A9 00 84 72 81 F8 1865 00 65 63 85 64 85 64 E6 E8 E0 04 00 00 49 A5 A6 A6 65 A5 20 0F A5 4E C9 4E A9 09 85 A5 7F C9 14 00 OB 88 B0 02 F0 12 C9 00 F0 0A C6 68 A9 00 85 A6 85 20 A9 9F 29 01 F0 0F 85 97 A5 98 A5 6029 60 29 F0 85
09 85 80 81 85 96 80 00 38 13 89 55 57 C9 0C 4F 81 85 OA A2 00 C0 02 00 30 49 81 90 66 90 CA A5 44 A9 0185 6A 85 8F 81 F002 8E A5 30 44 3D 49 85 80 66 80 A0 00 1869 0B B0 36 89 F5 50 C9 19 49 81 11 A56C A9 00 65 20 91 A5 6F A9 00 C8 C0 04 E0 0200 29 C0 F0 A5 7E 00 20 E8 97 A5 70 00 20 1A 98 A9 25 18 03 65 60 618561 00 A5 8A 38 66 80 2B A5 83 A9 80 95 95 72 89 62 85 62 63 A9 00 20 20 49 C8 08 A5 C9 0600 00 08 88 08 F0 2E 68 4C 06 90 1F A5 18 A5 4E 01 F0 0E 4E A9 09 7F A9 00 00 85 SA 27 A5 5F 5F 29 F0 0F 85 99 9A A5 61
• :9230 29 • :9238 85 .:9240 0F • :9248 98 • :9250 63 • :9258 0F .:9260 9C • :9268 69 .:9270 45 • :9278 0A .:9280 18 • :9288 0A .:9290 A5 • :9298 80 .:92A0 94 • :92A8 E5 .:92B0 95 • :92B8 0E .:92C0 91 • :92C8 00 .:92D0 D0 • :92D8 0A .:92E0 03 • :92E8 D0 .:92F0 10 • :92F8 05 .:9300 A9 .:9308 A2 .:9310 85 • :9318 10 .:932069 .:9328 A5 .:9330 90 • :9338 57 .:9340 41 .:9348 E5 .:9350 E9 .:9358 82 .:9360 5D • :9368 E9 .:9370 82 .:9378 5E .:9380 D0 • :9388 00 .:939006 .:9398 AD .:93A0 lC • :93A8 29 .:93B0 94 .:93B8 0F .:93C0 C9 .:93C8 A2 .:93D0 94 • :93D8 96 .:93E0 65 • :93E8 A6 .:93F0 A9 • :93F8 00 • :9400 69
0F 85 9C 4C 85 97 A5 63 29 F0 85 9B A5 97 45 85 85 8F 18 69 69 45 0A 0A 9C 18 85 8E 85 96 C5 97 D0 14 86 93 C5 8F A5 9F 85 04 B5 8D B1 02 F7 A0 85 04 CA CA 00 85 0A B5 03 B1 D0 F7 10 85 8185 12 B5 C9 FB 81 85 A5 5D 04 85 29 FD A5 5E 04 85 29 FE EA A5 09 A5 85 AE D0 13 85 0F 85 B0 07 C9 A5 0F 4C C8 07 D0 00 E4 A0 00 29 0F 2E AA 96 C8 D8 18 A5 95 03 85
9B A5 61 29 61 92 A5 62 A5 62 29 F0 29 0F 85 99 85 9A A5 64 A5 64 29 F0 0A 0A 0A 0A 8D A5 98 18 A5 99 0A 0A 45 85 91 A5 85 93 A5 9B 18 69 45 85 69 45 85 97 85 90 85 92 85 98 A9 45 D0 1A 86 97 86 95 C5 93 C5 91 D0 08 D0 02 86 8F 29 01 F0 31 A9 60 85 05 85 02 B5 8E 9104 C8 C0 00 A5 04 18 A9 00 65 05 10 DC 4C 28 04 A9 60 85 8D 85 02 B5 029104 C8 A0 00 A5 04 04 CA CA 10 8D A2 0066 57 18 69 02 90 07 A5 81 81 E8 E0 04 C9 40 90 08 5D 4C 61 93 85 82 A9 00 C9 40 90 08 5E 4C 79 93 85 82 A9 00 9F 29 07 C9 0F 4A 85 AD A5 9F 29 07 A5 0F 85 9C A9 00 85 AF 4C BC 93 A5 07 F0 03 4C 85 9C A5 AE 93 E6 2E A5 04 A9 00 85 0F D0 03 4C B1 AF 10 3F AA BD DE 88 BD EE 88 85 Bl AF 85 8F 71 AF 85 90 91 8F A5 AF AF A9 00 65
F0 29 85 A5 29 85 18 69 0A 9A 0A 95 A9 85 A2 C5 D0 86 A0 A9 A2 85 10 69 85 93 05 8E C0 18 E2 8D 95 3D D0 38 A5 85 38 A5 85 06 69 C9 A5 A9 9F AA 85 2E 2E AA 86 18 95 C8 A0 18 B0
.:9408 85 B0 E8 E4 0F .:9410 9C 85 0F 4C AA • :9418 29 40 F0 48 86 .:9420 AF 85 8F C8 A9 • :9428 AF 85 90 A0 00 .:9430 F0 85 95 A5 97 • :9438 BD DE 88 18 65 .:9440 EE 88 A6 96 05 • :9448 A5 AF 18 69 03 .:9450 00 6~ 8085 80 • :9458 F0 03 4C D3 93 .:9460 0F 4C AA 94 86 • :9468 AF 85 8F C8 A9 .:9470 AF 85 90 A0 00 • :9478 0F 85 95 A6 97 .:9480 18 65 2E AA BD .:9488 0A 0A 0A 0595 .:9490 8F A5 AF 18 69 • :9498 A9 00 65 B0 85 .:94A0 0F F0 03 4C D3 • :94A8 85 0F A5 8C D0 .:94B0 29 0F C9 0F D0 .:94B8 10 18 65 63 85 .:94C0 69 00 85 64 D8 • :94C8 08 F0 02 E6 4E .;94D0 68 A9 40 85 84 • :94D8 86 85 87 A9 01 .:94E0 A6 4E E8 8A 0A • :94E8 A2 00 A8 B9 45 .:94F0 60 E8 C8 E0 10 • :94F8 8B C9 06 D0 03 .:9500 A5 83 29 0F D0 .:9508 A5 A0 F0 FC 4C .:9510 A9 04 8D 21 D0 .:9518 9E A9 3C 45 9E .:9520 9E E6 9D E6 A6 .:9528 7F A5 68 F0 0A .:953006 A9 00 85 A6 .:95380185 A0 A0 00 .:9540 04 D4 A5 29 8D • :9548 2A 8D 12 D4 A5 .:9550 29 0F 85 2F A5 .:9558 D0 A5 42 8D 0E .:9560 29 40 F0 06 A5 .:9568 85 2F A5 9F 29 .:9570 A5 5D 85 53 A5 .:9578409006 A5 2F .:9580 2F A5 57 85 54 .:9588 85 41 9006 A5 .:9590 85 2F A5 46 0A .:9598 2F 09 40 85 2F .:95A0 A5 5E 8553 A5 • :95A8 40 90 06 A5 2F .:95B0 2F A5 59 85 54 • :95B8 85 41 90 06 A5 .:95C0 85 2F A5 48 0A • :95C8 2F 09 40 85 2F .:95D0 84 F0 26 D6 84 .:95D8 20 A5 A3 4A 4A
D0 94 96 5C Bl 29 2E 95 85 E8 A5 96 5C Bl BD EE A6 03 B0 93 31 29 63 A5 A9 85 85 0A 80 D0 4C 02 40 E6 D0 E6 C6 85 A5 0B 44 55 D0 2F 01 4B 09 A5 2F 90 4C 4C 09 A5 2F 90 A2 B5 69
C4 A5 85 97 C8 Bl 18 71 8F 29 0F AA AA BD 91 8F AF A9 E4 0F 9C 85 C8 B1 18 71 8F 29 DE 88 88 0A 96 91 85 AF E8 E4 A5 9C A5 83 F8 A9 A5 64 4E C9 14 85 85 85 8C EA 0A 0A 9D 98 F4 A5 8D 98 85 8C 8B 78 9F E6 18 85 67 E6 68 D0 2D A9 28 8D D4 A5 85 2F 8D 0F A5 44 09 80 F030 0A 85 10 85 45 0A 0920 36 A5 CD 95 0A 85 10 85 47 0A 09 20 06 A5 0~ B5 84 D0 40 95
205
.:9SE0 4F 4S .:9SE8 AS 83 .:9SF0 44 3D • :9SF8 9S E8 .:9600 F0 02 • :9608 C6 7E • :9610 69 D0 • :9618 F0 07 .:9620 98 EA • :9628 96 8D .:9630 D0 AD • :9638 D0 A2 .:9640 9D 00 • :9648 D0 89 .:96S0 20 00 • :96S8 C0 08 .:9660 D0 A9 • :9668 8D 10 .:9670 AS 42 • :9678 01 F0 .:9680 D0 AS • :9688 96 AS .:9690 SA 8D • :9698 6D 18 .:96A0 A2 6A • :96A8 E8 E0 .:9680 19 D0 • :9688 78 A9 .:96C0 8D 0F • :96C8 AD 10 .:96D0 AS 44 • :96D8 D0 09 .:96E0 8D 12 • :96E8 8D 11 .:96F0 A9 9S .:96F8 19 D0 .:9700 A9 AS • :9708 06 D4 .:9710 20 8D .:97180980 .:9720 8D 04 .:972804 D4 .:9730 AS 8D • :9738 D4 A9 .:9740 8D 00 • :9748 80 8S .:97S0 04 D4 .:97S8 D4 A9 .:9760 8D 0S • :9768 A9 0S .:9770 00 D4 • :9778 8S 28 .:9780 D4 09 .:9788 A9 20 .:9790 0S D4 .:979807 8D .:97A0 D4 AS .:97A8 28 AS .:97B0 0901
206
9F 4A 69 3D 4181 4181 8S E0 04 D0 C6 7D AS EA AS 69 03 20 78 C6 6A D0 A9 88 8D 1S 03 A9 11 D0 29 00 A0 00 D0 89 4F 18 00 99 99 F8 SF D0 E1 A9 00 8D 26 D0 AS SS 8D 0E D0 0E AS 46 S8 8D 0D 48 0A 8D 0D D0 A2 D4 6S 9F 6A 6A 6S 04 D0 E9 68 A8 68 0D 8D 21 D0 AS 43 D0 29 7F 29 80 F0 80 8D 10 D0 AD 11 D0 A9 0F 8D 1S 03 68 A8 68 8D 0S D4 A9 03 8D 00 D4 AS 8S 28 AS D4 09 01 A9 S0 8S 0S D4 A9 04 8D 01 D4 AS 28 28 AS 28 09 01 8S S0 8S 69 D4 A9 8S 8D 01 D4 AS 28 29 AS 28 29 01 8S 28 8S 6A 60 A9 8S 8D 01 D4 A9 28 29 07 28 29 FE 8S 28 8D
18 9S 8S 83 44 4C D1 AS 7E F0 F0 07 98 AS 03 20 14 03 E4 8D 7F 8D 89 3C 00 9D 27 D0 E8 E8 0S 8D D0 AS 8D 0F AS 9F 0A 8D D0 4C 0C D0 00 8S 6S 9D 4F 9S A9 FF AA 68 D0 AS 8D 0E 8D 10 08 AD D0 A9 D0 29 8D 14 A9 FF AA 68 A9 8S 01 D4 28 29 28 29 8S 28 69 60 8S 8D D4 A9 29 07 29 FE 28 8D 60 A9 8D 06 A9 20 07 09 FE 8D 8D 04 A9 SA 06 D4 20 8D 0920 8D 04 04 D4
3C AS FE 7D 02 C6 6A 7F A9 12 11 00 01 89 C8 2S 2F D0 29 0C 94 AS A1 7S A1 8D 40 S6 D0 D0 10 FB 7F 03 8D 40 8D A9 07 FE 8D A9 06 20 09 8D 04 SA D4 8D 20 04 D4 8D A9 00 8S D4 A9
.:97B8 20 .:97C0 D4 • :97C8 8D .:97D0 AS .:97D8 AS .:97E0 01 • :97E8 8S .:97F0 A9 • :97F8 01 .:9800 28 • :9808 28 .:9810 8S • :9818 69 .:9820 AS • :9828 D4 .:9830 29 • :9838 29 .:9840 28 • :9848 60 .:98S0 8D • :98S8 A9 .:986007 • :9868 FE .:9870 8D • :9878 AS .:9880 29 • :9888 29 .:9890 8S .:9898 B0 .:98A0 F0 • :98A8 CS .:9880 4C • :9888 9F .:98C0 00 • :98C8 00 .:98D0 01 • :98D8 E8 .:98E0 44 • :98E8 29 .:98F0 8E .:98F8 AC .:9900 D4 .:9908 8D .:9910 A9 • :9918 1D .:9920 12 .:9928 11 .:9930 E6 .:9938 8S .:9940 19 .:994878 .:99S0 8D .:9958 A9 .:9960 FC • :9968 03 .:9970 85 .:9978 8S .:9980 8S .:9988 8S
8S 6A 60 A9 8S 8D 01 D4 A9 28 29 07 28 29 FE 8S 28 8D 6A 60 A9 AS 8D 06 D4 A9 30 29 07 09 29 FE 8D 28 8D 04 60 A9 29 8D 06 D4 A9 30 8D 07 0920 FE 8D 04 8D 04 D4 A9 29 8D 06 D4 A9 30 8D 00 0980 8S 8D 04 D4 04 D4 A9 28 29 FE 29 FE 8S FE 8S 2A 8D AS 64 1990 14 04 B0 0F SF F0 04 48 99 4C 29 01 F0 89 4F 00 38 E9 01 D0 89 3C E8 C8 C0 8D 10 D0 03 D0 28 21 D0 AS 8D 0S D4 A9 81 8D 01 D4 A9 01 8S 8D D0 8D 17 D0 AD 11 D0 A9 01 9E AS 9E 9E E6 9D D0 68 A8 A9 00 8S F9 SF A9 10 8D FB SF A9 1F 8D 1C D0 S0 8S S1 S4 A9 30 3D A9 63 3F A9 CD
A9 06 30 09 8D 04 29 D4 8D 20 04 D4 8D A9 00 8S D4 A9 0S 1S D4 28 09 80 8S 29 60 CS AS 90 B0 FE 22 F0 99 00 06 A2 AE 8D A9 04 68 EA D0 D0 8S 49 EA 68 44 12 SF 8D A9 8S 8S 8S 8S
77 8D 0S D4 A9 08 8D 00 D4 80 8S 28 04 D4 09 D4 A9 60 8D 0S D4 A9 04 8D 00 D4 AS 8S 28 AS D4 09 01 A9 C0 8S 0S D4 A9 02 8D 01 D4 AS 28 28 AS 28 09 01 8S C0 8S 69 D4 A9 8S 8D 01 D4 AS 28 29 AS 28 29 01 8S 28 8S 6A 60 28 60 AS 60 AS 2A 78 A9 00 61 F004 63 CS 60 0A AS 62 0S 90 00 99 78 AS A2 00 A0 1989 4F 4F 00 9D 9D 00 D0 D0 E2 AS 00 AS 9F 21 D0 CA D0 1D A9 04 8D 06 D4 A9 0S 8D 00 D4 A9 FF 8D A9 FB 8D 29 7F 8D A0 E6 9F 3C D0 04 A9 FF 8D AA 68 40 8D F8 SF 8D FA SF A9 11 8D 1S D0 A9 D0 85 4F S2 8S S3 3C A9 F0 3E A9 9D 40 A9 00
.:9990 • :9998 • :99A0 • :99A8 • :9980 • :9988 • :99C0 • : 99C8 • :99D0 • :9908 • : 99E0 • : '39E8 • : 99F0 • :99F8 • :9A00 • :9A08 .:9A10 • :9A18 .:9A20 • :9A28 • :9A30 • :9A38 • :9A40 • :9A48 • :9A50 • :9A58 • : 9A60 • : 9A68 • :9A70 • : 9A78 • :9A80 • :9A8B
8D 8D D4 8D AD 58 A0 80 0D 21 AD 85 A5 A0 00 FF 80 00 BO A9 04 913 00 D0 A0 00 85 9B DB 00
04 2A A9 15 11 A9 A5 80 A5 00 00 '3C 9C F0 85 80 04 85 00 00 04 80 AD 58 00 0F AB C8 18 05 21 D,0 18 69
D4 D0 86 03 D0 00 9D 04 9F E8 DC A5 00 E3 A8 10 04 98 D4 80 A9 15 11 A9 81 A9 A9 B1 71 A9 A0 03
A9 8D 8D A9 29 85 C9 04 29
8E 2D '30 03 4C A9 00 8D A9 A9 06 4A 03 D0 00 A8 01 1C AB AB 04 00 85
01 2B 14 F8 7F '3D 18 4C 03 21 01 C'3 4C 80 1C A9 0B 02 CF 04 BD A9 29
85 10 85 85 85 85 4C 91 AB
8D D0 03 8D BD A9 D0 7C D0 00 OC 04 7C 99 85 00 D4 80 80 A9 14 FB 7F A0 43 98 AC 80 BE 82 BD A9
29 8D A9 12 11 00 0B 83 07 A5 29 '30 83 78 AC 85 BD 01 05 81 03 8D BD A2 C9 A9 4C C8 A5 9A A5 00
D0 08 98 D0 D0 B5 A9 00 AE A0 10 07 A5 A'3 A9 90 15 D4 04 80 A9 12
11 04 FF 00 21
A9 9B AD AB 65
• :9A90 • :9A98 • :'3AA0 • :9AA8 • :9A80 • : '3ABB • :9AC0 • :9AC8 .:'3A00 • : '3A08 • :'3AE0 • : '3AE8 .:9AF0 .:9AF8 .:9B00 • :9808 • :9B10 • :9818 .:9B20 .:9828 .:9B30 • :9838 .:9B40 • :9B48 • :9B50 • :9B58 • :9B60 • :9B68 • :9B70 • :9878 • :9B80
AC 98 85 85 B5 09 29 18 AC '3A BO 8E 95 40 0A AB 65 50 9A 7C 01 C9 4C 4A A5 8C 9E 04 8D 80 68
85 29 BD 8E '35 04 0F 69 85 4C C8 A0 A5 4C 0A 18 AC 9A A5 83 OC 04 7C 9A 9B 21 E6 85 12 11 AB
AC 40 C8 A0 A5 4C 05 03 AC 1A A9 00 '3B 05 0A 69 B5 A5 90 A5 29 90 83 A5 F0 00 9F 9E D0 D0 68
CA F0 A9 00 9B C4 95 85 CA '3B 5C B1 00 9B 05 03 AC 98 C9 A0 10 07 1'15 9F 07 A9 A5 E6 AD A9 AA
D0 3F 5C 81 D0 9A '31 A8 F0 C8 1B 80 07 AO 95 85 CA F0 1A AO 85 A5 A0 29 AC 01 9E 90 11 FF 6B
BA C8 18 8D 07 AO BO A'3 03 B1 71 29
A5 21 91 AB F0 03 D0 00 9C 9C F0 03 21 85 49 EA D0 80 40
4C 131 71 2'3 A5 21 A5 00 4C AB AB 0F 95 00 BO A9 03 4C 03 OC A5 D0 E3 D0 D0 A0 3C A9 29 19 EA
lA A8 AB F0 95 00 AB 65 50 B5 85 85 0'3 0A
A5 00 4C 4E 4C 2D 90 03 4C 013 C8 E6 D0 F8 7F 00 EA
Listing C-24: The BOGHOP Program, Source Code for the BOGHOP.O Program
; PUT" liH3 : BOGHOP" jLOAD"ASM" ,8
1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110
iTO START THE GAME FROM BASIC ;TYPE "SYS 5120'
11213
;03:30 PM
,
jBOGHOP GAME
;
,CREATED 7/17/84 j(C) COPYRIGHT 1984, STEVEN BRESS ;
!LATEST ADDITIONS 11/15/84
1130
207
.OPT LIST,NOSYM,NOGEN 1140 11513 116(1 • PAGE 'MACRO LI BRARY" 1170 · LI B MACLI B .PAGE "SYSTEl'l DEFINITIONS' 1180 .LIB SYSDEF 1190 .PAGE "RAM DEFINITIONS' 1200 • lIE: :~:09DEF 1210 .PAGE 'NOTE DEFINITIONS' 1220 · LI B COl'lMm,j 1230 1240 = $14013 1250 * 126(1 ~Tl'lP TOP 1270 1280 ;LOOKUPS IN FILE LKUP 1 2'f~3
1300 131e 1320 13'313 1~::4e 1350 1360 1370 1380 1 :390 14e0 1410 1420 143e 1440 1450 1460 1470 1480 1490 1500 1510 1520 1530 1540 1550 1560 1570 1580 15ge 1600 1610 1620 1630 1640 1650 1660 1670 1680 16ge 17ee 17113 17213
208
· PAGE 'DATA SEGMENT" .LIB BOGDAT ;DATA FILE .PAGE 'POINT PLOTTING' .LIB XXPLOT · PAGE " BOG HOP CODE" ZERO = $11342 $1052 ONE $1062 TWO $1072 THREE $11382 FOUR F I \')E $1092 $10A2 SIX $113B2 SEVEN EIGHT $10C2 $II21D2 NINE $113E2 NUL $113F2 VCLKLO $11 eB VCLKHI $1125 VLKUPL $11FD VLKUPH $12CD HLKUPL $12F5 HLKUPH i RET TOP
RTI SEI KILL AD RES INT13,CINV iSET-UP I'ST INTERRUPT LDMEM #BLACK,BORCL STA BCOLe BANK 1 GRABAS $2130e iSCREEN ~ $6000 TXBAS $IC00 iTEXT ~ $5C00 AD RES $61300,GBASE GRAPH jBIT-MAPPED GRAPHICS ON MULTON JMULTI COLOR MODE ON MVCOL WHITE iCLEAR COLOR RAM TO WHITE FILL $600e,$00,$20 ,CLEAR GRAPHICS PAGE FILL $5C013,$56,$134 iGREEN AND PURPLE
1730 1740 1750 1760 1770 1780 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010 2020 2030 2040 2050 2060 2070 2080 2090 2100 2110 2120 2130 2140 2150 2160 2170 2180 2190 2200 2210 2220 2230 2240 2250 2260 2270 2280 2290 2300 2310
LDMEM #$03,LIVES jSTART WITH 3 LIVES STA COLOR LDMEM #$01,HORNC LDMEM #$01 ,VERNC LDMEM #$14,PLAYP jPLAYER SPRITE POINTER LDMEM #$2A,MOUNTV jMOUNTAIN VERTICAL SETTING STA MOUNTV+l STA MOUNTV+2 STA MOUNTV+3 LDMEM #$2D,MOUNTV+4 STA MOUNTV+5 STA MOUNTV+6 STA MOUNTV+7 LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM
#$00,MOUNTH ;MOUNTAIN HORIZONTAL INITIAL POSITION #$30!MOUNTH+1 #$60,MOUNTH+2 #$90,MOUNTH+3 #$C0,MOUNTH+4 #$F0,MOUNTH+5 #$20,MOUNTH+6 #$50,MOUNTH+7
LDMEM #$09,MOUNTC jMOUNTAIN COLOR STA MOUNTC+1 STA MOUNTC+2 STA MOUNTC+3 STA MOUNTC+4 STA"MOUNTC+5 SVC MOUNTC+6 STA MOUNTC+7 LDMEM #$20,MOUNTP ;POINTER LDMEM #$21,MOUNTP+1 LDMEM #$22,MOUNTP+2 LDMEM03$23,MOUNTP+3 LDMEM #$20,MOUNTP+4 LDMEM #$21,MOUNTP+5 LDMEM #$22,MOUNTP+6 LDMEM #$23,MOUNTP+7 LDMEM #WHITE,PLAYC ;PLAYER COLOR LDMEM #GREEN,MEANC STA MEANC+1 STA MEANC+2 STA MEANC+3 STA MEANC+4 STA MEANC+5 STA MEANC+6 LDMEM #RED,SPMCL0 LDMEM #YELOW,SPMCLl LDMEM #$FF,BPRIOR
208
23213 23313 23413 23513 23613 23713 23813 23913 241313 24113 24213 24313 24413 24513 24613 24713 24813 24913 251313 25113 25213 25313 25413 25513 2569 2579 2589 2599 2699 26113 2629 26313 2649 26513 26613 26713 2689 2699 27913 2710 27213 2730 27413 2750 27613 2770 27813 27913 281313 2810 28213 28313 2848 2858 2868 2870 2888 2898 2988
210
LDMEM #$Ce,MNTMSB ;SET THE MSB IN MOUNTH+7 ; ;THE MOUNTAINS WILL BE SET UP ;DURING INTe ; ; INTi WI LL SET UP THE PLAI ERS LDMEM #$ee,SCORE ;CLEAR SCORE STA SCORE+l STA SCORE+2 STA SCORE+3 LDMEM #$el,LEVEL ;START
~
LEVELl
SET SOUND GENERATOR 3 TO NOISE TO BE USED FOR RANDOM NUMBERS ADRES AN3,S2FRLO ADRES CN4,SlFRLO LDMEM #$eF,MMOD ;VOLUME=MAX LDMEM #$29,SlCORG jTRIANGLE WAVE LDMEM #$28~SlATDC LDMEM #$88,SlSURL LDA #GN6 STA S3FRHI LDMEM #$88,V3CORG LDMEM #$89,V3CORG jRESET CHANNEL STA S3CORG ;
;INITIALIZE PLAYER POSITIONS LDMEM #$FF,WHOLIV LDMEM #$3e,PLAYH LDMEM #$7e,PLAYV LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM
#$68,MEANV ;BAD GUY VERT #$7e,MEANV+l #$88,MEANV+2 #$90,MEANV+3 #$A8,MEANV+4 #$Be,MEANV+5 #$C5,MEANV+6
LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM
#$90,MEANH ;BAD GUY HORIZ #$95,MEANH+l #$85,MEANH+2 #$90,MEANH+3 #$7e,MEANH+4 #$75,MEANH+5 #$95,MEANH+6
ADRES BEEl ,MEANMV ADRES BEE2,MEANMV+2
2910 2920 2930 2940 2958 2960 2970 2980 2990 3000 3018 3820 3038 3040 3050 3060 3070 3080 3090 3100 3119 3120 3130 3140 3159 3169 3170 3189 3199 3299 3219 3228 3230 3249 3259 3269 3279 3289 3290 3399 3310 3320 3338 3340 3358 3360 3378 3380 3390 3400 3410 3420 3430 3440 3458 3469 3470 3489 3499
ADRES ADRES ADRES ADRES ADRES
BEE3,MEANMV+4 BEE4,MEANMV+6 BEE1,MEANMV+8 BEE2,MEANMV+$A BEE3,MEANMV+$C
LDA SSCOL LDA SBCOL
;CLEAR COLLISION REGISTERS
RAST "$FB
CLI ; START
ANOP
,BEGINNING OF PROGRAM
LDA ORA ORA ORA ORA ORA ORA ORA ORA JEQ
,SEE IF GAME OVER
LIVES PLAYE MEANE MEANE+l MEANE+2 MEANE+3 MEANE+4 MEANE+5 MEANE+6 STWID
;PASS OVER CODE IF OVER
; ;UPDATE THE SCORE ;SUPPRESS LEADING ZEROS
LDA AND CMP JNE
SCREEN ,"$0F "$8F NoseR1
LDMEM "$9A,BUF STA BUF+1 STA BUF+2 STA BUF+3 STA BUF+4 STA BUF+5 STA BUF+6 STA BUF+7
,
LDA SCORE+3 AND "$F9 NIBLR STA BUF
NXDIGl LDA AND STA ; NXDIG2 LDA AND
SCORE+3 "$8F BUF+1
,DON'T UPDATE SCORE IVERY OFTEN ,4 TIMES/SECOND
;CLEAR TO NUL
;MASK HIGH BYTE ,SHIFT DATA RIGHT ;PUT IN BUFFER ,MASK LOW BYTE ,NEXT BUFFER POSITION
SCORE+2 "$F0
211
3500 3510 3520 3530 3540 3550 3560 3570 3580 3590 3600 3610 3620 3630 3640 3650 3660 3670 3680 3690 3700 3710 3720 3730 3740 3750 3760 3770 3780 3790 3800 3810 3820 3830 3840 3850 3860 3870 3880 3890 3900 3910 3920 3930 3940 3950 3960 3970 3980 3990 4000 4010 4020 4030 4040 4050 4060 4070 4888
212
NIBLR STA BUF+2 ;
NXDIG3 LDA SCORE+2 AND tI.0F STA BUF+3 ;
NXDIG4 LDA SCORE+1 AND tI.F0 NIBLR STA BUF+4 ;
NXDIG5 LDA SCORE+1 AND tI.0F STA BUF+5 ;
NXDIG6 LDA SCORE AND tI.F8 NIBLR STA BUF+6 NXDIG7 LDA SCORE AND tI.0F STA BUF+7
!DI GIT
;. ;LEADING ZERO SUPPRESSION
LDA BUF+8 BNE NZSUP
;IF NOT 8--NO SUPPRESS
LDMEM tI.0A,BUF+0 ;PUT IN NUL LDA BUF+1 BNE NZSUP LDMEM tI.0A,BUF+1 LDA BUF+2 BNE NZSUP LDMEM tI.0A,BUF+2 LDA BUF+3 BNE NZSUP LDMEM tI.0A,8UF+3 LDA 8UF+4 8NE NZSUP LDMEM tI.0A,BUF+4 LDA BUF+5 BNE NZSUP LDMEM tI.8A,BUF+5 LDA BUF+6
~090
4100 4110 4120 4138 4148 4150 4168 4170 4180 4190 4200 4210 4220 4230 4240 4250 4260 4270 4280 4290 4300 4310 4320 4330 4340 4350 4360 4370 4380 4390 4400 4410 4420 4430 4440 4450 4460 4470 4480 4490 4500 4510 4520 4530 4540 4550 4560 4570 4580 4590 4600 4610 4620 4630 4640 4650 4660 4670
BNE NZSUP LDMEM ; NZSUP
~$0A,BUF+6
ANOP
;ALL LEADING 0=NUL
; ;THE SCORES ARE IN BUF TO BUF+7 LDX ~$00 LDMEM ~$00,LPCNT1 ADRES $6000,BUF1+2 MKSCRI LDA BUF,X ASL A TAY LDA NUMBER,Y STA BUF1 LDA NUMBER+ 1 , Y STA BUF1+1 LDY ~$00 MKSCR2 LDA (BUF1),Y STA (BUF1+2),Y INY CPY ~$1 0 BNE MKSCR2 DBINC BUF1+2,$10 INX CPX ~$08 BNE MKSCR1
,REPEAT FOR 8 DIGITS
NOSCR1 ANOP ;
;SCORES ARE ON SCREEN ; ;MOVE THE CURRENT BAD GUYS LDA SCREEN AND ~$01 JEQ MVEM8
;MOVE THE BAD GUYS ON jEVERY OTHER SCREEN
LDX ~$00 LDY ~$00 STY LPCNTl ; MVEM
ANOP LDA WHOLIV LDY LPCNTl AND BITPOS,Y BEQ MVEM3 LDA MEANE,Y
213
BNE MVEM3 4680 4690 LDA (MEANMV,X) ; GET NEXT MOVEMENT BYTE 4700 ;GOOD CODE--MOVE BNE MVEMI 4710 4720 ; 47~0 ;CHOOSE A NEW DIRECTION 4740 LDY LEVEL 4750 LDA BADSEQ,Y 4760 4770 ASL A TAY 4780 4790 LDA BASLK,Y ;THE BASE ADDRESS OF ;THE LOOKUP TABLE OF 4800 STA BUF 4810 LDA BASLK+l ,Y ;MOVEMENT PATTERNS 4820 STA BUF+l ;IS IN BUF 4830 ;GET A RANDOM NUMBER 4840 LOA RANDl ;TO CHOOSE A NEW MOVEMENT PATTERN AND #$06 4850 TAY 4860 4870 L!:>A (BUF), Y 4880 ;PUT THE NEW ADDRESS INTO STA MEANMV,X 4890 4900 INY ;THE MOVEMENT REGISTERS LOA
214
5279 5289 5299 5399 5319 5329 5339 5349 5359 5369 5379 5389 5399 5499 5419 5429 5439 5449 5459 5469 5479 5480 5499 5590 5519 5529 5539 5540 5559 5569 5570 5589 5599 5600 5610 5620 5630 5649 5650 5660 5679 5689 5690 57013 5710 5729 5730 5740 5750 5769 5770 57813 5799 5809 5810 58213 58313 58413 58513
; MVEM4 ; MVEM5 ; MVEM6 j MVEM3
ROR BUFl BCC MVEM5 JSR DN ROR BUF1 BCC MVEM6 JSR LT ROR BUF1 BCC MVEM3 JSR RT ANOP LDA MEANMV,X CLC ADC #$01 STA MEANMV,X LDA MEANMV+ 1 ,X ADC #$00 STA MEANMV+ 1 ,X INX INX INC LDA CMP JNE
MVEM8
LPCNTl LPCNTl #$97 MVEM
jINCREMENT MOVEMENT
jBUMP LOOP COUNTER i DO IT 7 TIMES
At,IOP
j
jDONE MOVING HERE j
i CHECK AND INCREMENT LElJEL NEXT jWHEN WHOLIV=0--GOTO NEXT LEVEL LDA WHOLIV AND #$7F JNE LEVDN
iPLAYER DOESN'T COUNT jBRANCH TO LEVEL CHECK DONE
LDMEM #$FF,WHOLIV j
jRESTART BAD GUYS POSITIONS LDX #$1313 LDMEM #$713,BUF LDA RANDl AND #$7F ADC BUF STA MEANV LDA AND ADC STA
iVERTICAL OFFSET ;GET A RANDOM NUMBER iNUMBER TO ADD TO OFFSET jFIRST VERTICAL
RAND2 #$7F BUF tvlEANlJ+ 1
LDA RAND3 AND #$7F
215
5860 5870 5880 5890 5900 5910 5920 5930 5940 5950 5960 5970
59~0
5990 6000 6019 6020 6030 6040 6050 6060 6070 6080 6090 6100 6110 6120 6130 6140 6150 6160 6170 6180 6190 6200 6210 6220 6230 62413 6250 6260 6270 6280 6290 6300 6310 63213 6330 6340 6350 6360 6370 6380 6390 6400 6410 64213 6430 6440
216
ADC BUF STA MEANV+2 LDA ADC ADC STA
RAND4 #$7F BUF MEANV+3
LDA EOR AND ADC STA
RAND1 RAND2 #$7F BUF MEANV+4
LDA EOR AND ADC STA
RAND2 RAND3 tI$7F BUF MEANV+5
LDA EOR AND ADC STA
RAND3 RAND1 #$7F BUF MEANV+6
LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM
jMODIFY RANDOM tI
#$90,MEANH jHORIZONTALS #$85,MEANH+1 #$95,MEANH+2 #$70,MEANH+3 tI$75,MEANH+4 #$90.MEANH+5 #$8e~MEANH+6
LDMEM #$00,MEAND jCLEAR DIRECTIONS STA MEAND+1 STA MEAND+2 STA MEAND+3 STA MEAND+4 STA MEAND+5 STA MEAND+6 ADRES ADRES ADRES ADRES ADRES ADRES LDX LDA ASL ASL TAX STX STX INX STX STX
NUL,MEANMV jSET MOVEMENT DIRECTION NUL,MEANMV+2 ,POINTERS TO POINT NUL,MEANMV+4 jAT KNOWN ZEROS NUL,MEANMV+6 ,CAUSING NEW DIRECTIONS NUL,MEANMV+8 JTO BE CHOSEN NUL,MEANMV+$0A
LEVEL BADSEQ,X A A
jGET LEVEL jFIND THE NEXT BAD GUY jMULTIPLY BY 4 ,USE AS A SPRITE POINTER BASE
MEANP MEANP+6
jDON'T ALL FLAP AT ONCE
MEANP+1 MEANP+3
6450 6460 6470 6480 6490 6500 6510 6520 6530 6540 6550 6560 6570 6580 6590 6600 6610 6620 6630 6640 6650 6660 6670 6680 6690 6700 6710 6720 6730 6740 6750 6760 6770 6780 6790 6800 6810 6820 6830 6840 6850 6860 6870 6880 6890 6900 6910 6920 6930 6940 6950 6960 6970 6980 6990 7000 7010 7020 7030
INX STX MEANP+2 INX STX MEANP+4 STX MEANP+5
; ;ALL DONE WITH RESETTING INC LOA CMP BCC
LEVEL LEVEL #$12 LEVDN
;MAXIMUM DEFINED LEVEL
;LEVEL TOO HIGH DEC LEVEL ; LEVDN ANOP ; ;CHECK THE SCREEN POSITION ;TO CHANGE DIRECTION LDX #$00 LDY #$00 ;CLEAR INDEXES ; DIRCK1 LDA MEANH,X CMP #$16 ;REVERSE DIRECTION BCS DIRCK2 ;IF AT THE LEFT SIDE LDA #$01 STA MEAND,X
; DIRCK2 CMP #$98 BCC DIRCK3
;OF THE SCREEN ;CHECK RIGHT SIDE
LOA #$00 STA MEAND,X
; DIRCK3 INX CPX #$07 BNE DIRCK1
;REPEAT FOR ALL 7
; ;CHECK COLLISIONS BETWEEN THE ;PLAYER'S SHOT AND THE BAD GUYS iNO CHECK FOR A DEAD BAD GUY
i
iTHE PLAYER AND HIS SHOT ARE iMULTIPLEXED WITH THE SHOT ON ;ODD SCREENS LDA SCREEN AND #$01 JNE BCOLND
;THE SHOT ISN'T UP IF 1 ;NO BAD GUYS HIT--
FIRST FIND IF THERE IS A HIT THEN FIND WHO WAS HIT LDA TMSCOL AND #$01
;WAS THE SHOT HIT
217
7040 7050 7060 7070 7080 7090 7100 7110 7120 7130 7140 7150 7160 7170 7180 7190 7200 7210 7220 7230 7240 7250 7260 7270 7280 7290 7300 7310 7320 7330 7340 7350 7360 7370 7380 7390 7400 7410 7420 7430 7440 7450 7460 7470 7480 7490 7500 7510 7520 7530 7540 7550 7560 7570 7580 7590 7600 7610 7620
218
JEQ BCOLND
JBY A BAD GUY
A HIT IF HERE--SEE IF ALIVE LOA ASL STA LOA AND AND BEQ
WHOLIV A BUF TMSCOL #$FE BUF BCOLND
;POSITION BITS TO MATCH COLLISION REGISTER ;CLEAR PLAYER SHOT ;IF ZERO---NO HIT
;
;FIND THE HIT HERE LSR A STA BUF BHITe
LOX #$00 ANOP ROR BUF BCC NOBCOL LOA MEANE,X BNE NOBCOL
;IF CLEAR--NOT HIT ;SEE IF EXPLODING ;NEXT I F IT IS
;
; IF HERE--MIGHT BE HIT LDA CLC ADC SEC SBC CMP BCS
MEANV,X
;SEE IF THE VERT IS IN RANGE
#$10
;ADD AN OFFSET
SHOTSV+0 #$10 NOBCOL
;SUBTRACT PLAYER SHOT ;IF THE RESULT IS NOT ;IN RANGE--BRANCH
;VERTICAL IS IN RANGE, CHECK HORIZONTAL LOA CLC AOC SEC SBC CMP BCS
MEANH,X #$0C SHOTSH+0 #$0C NOBCOL
IT'S A HIT IF HERE START EXPLOSION START EXPLOSION TIMER LOA STA LDA STA
#$C0 MEANE!X #$18 MEANP!X
JABOUT 3 SECONDS
EXPLODE HERE WITH SOUND
76313 76413 76513 76613 76713
ADRES LDMEM LDMEM LDMEM LDMEM LDMEM
7.~8e
76913 771313 77113 77213 77313 77413 77513 77613 7779 77813 77913 781313 7819 7829 7839 7849 7859 7869 7879 7889 7899 7999 7919 7929 7939 7949 7959 7969 7979 7989 7999 S999 8019 S929 8939 S94e S959 8969 8979 8989 8999 81913 8119 8129 81313 8149 81513 8169 81713 81813 81913 8299 8219
GN6,S2FRLO ;HI EXPLOSION TONE #$e5,S2ATDC #$ee,S2SURL #$8e,V2CORG ;CLEAR SOUND CHANNEL #$81,S2CORG ;ENABLE CHANNEL #$18,SNDTM2
;ADD TO SCORE HERE ;
;199 POINTS + 8.LEVEL LDA ASL ASL ASL SED CLC ADC STA LDA ADC STA LDA ADC STA LDA ADC STA CLD
LEVEL A A A
;MULTIPLY LEVEL BY 8
jSET DECIMAL ARITHMETIC MODE jCLEAR THE CARRY BIT SCORE+9 SCORE+9 SCORE+l #$91 SCORE+l SCORE+2 #$99 SCORE+2 SCORE+3 #$99 SCORE+3
jADD THE 199 POINTS
;
jKILL SHOT AFTER A HIT LDA AND STA JMP
SHOTS #$FE SHOTS BCOLND
j
NOBCOL INX CPX #$97 BNE BHITe ;
BCOLND ANOP ;
;SEE IF PLAYER WAS HIT ;THE PLAYER IS ON EVEN SCREENS LDA SCREEN AND #$91 BEQ NOPCOL LDA TMBCOL AND #$131
219
8220 8230 8240 8250 8260 8270 8280 8290 8300 8310 8320 8330 8340 8350 8360 8370 8380 8390 8400 8410 8420 8430 8440 8450 8460 8470 8480 8490 8500 8510 8520 8530 8540 8550 8560 8570 8580 8590 8600 8610 8620 8630 8640 8650 8660 8670 8680 8690 8700 8710 8720 8730 8740 8750 8760 8770 8780 8790 8866
220
BEQ NOPCOL PLAYER HIT IF HERE PRETTY EASY WHEN THE HARDWARE CAN CHECK COLLISIONS FOR YOU!!! LDA LIVES BEQ NOPCOL
jIF DEAD, DON'T KILL
LDA PLAYE BNE NOPCOL
;MAKE SURE NOT ALREADY ; IN EXPLOSION
DEC LIVES LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM ADRES
#$C0,PLAYE jSTART EXPLODE #$18,PLAYP ;POINT AT EXPLOSION #$30,SNDTM1 #$80,V1CORG ,RESET CHANNEL #$1A,SlATDC #$81,S1CORG EN5,S1FRLO iHIGH EXPLOSION
j
NOPCOL ANOP
jLAUNCH SHOTS NEXT LDA SCREEN AND #$03 BNE NOLNCH i
jTRY TO LAUNCH A SHOT LDX LDA NOT LSR AND STA
#$00 SHOTS A WHOLIV BUF
;ONE SHOT IN THE AIR jAT ANY ONE TIME jONLY LIVE BAD GUYS ;CAN SHOOT
j
LCHITl ROR BUF BCC LCHIT2 LDY LDA CMP BCC
LEVEL FIRPOW,Y RAND2 NOLNCH
LDA MEANE,X BNE LCHIT2 FIRE IF HERE LDA SHOTS ORA BITPOS+ 1 ,X
;IF RANDOM #
88113 88213 88313 884(1 88513 88613 88713 88813 88913 891313 89113 89213 89313 89413 89513 89613 89713 89813 89913 '?13ee 913113 913213 913313 913413 913513 913613 913713 913813 913913 911313 91113 91213 91313 91413 91513 91613 91713 91813 91913 921313 92113 92213 92313 92413 92513 92613 92713 92813 92913 93130 93113 93213 93313 93413 9359 98613 93713 98813 93913
STA SHOTS LDA MEANI)~X CLC ADC #$138 STA SHOTSV+ 1 ~X
;ADD AN OFFSET
LDA MEANH ~X STA SHOTSH+l,X LDA AND TAY LDA STA STX LDA STA LDA STA JSR
RAND3 #$133
;PICK A RANDOM DIRECTION ;FOR THE SHOT
SHTDR~Y
SHOTSD+1,X BUFl SHOTSH+ 1 ~X XPNT SHOTSV+1 ~x YPt'lT XPLOT
;PUT X IN TEMP REGISTER
;PLOT THE SHOT
;PUT SOUND HERE ADRES EN4,S2FRLO TXA ; GET BAD GUY NUMBER CLC ;PREPARE TO ADD ADC S2FRHI ;HIGHER TONE FOR STA S2FRH I ; HIGHER NUMBER LDMEM #$20,\')2CORG ; SAWTOOTH WA\,JE LDMEM #$139,S2ATDC LDMEM #$1313,S2SURL LDMEM #$21,S2CORG LDMEM #$1 4 , SNDTt"12 JMP NOLNCH ; ;ONCE A SHOT HAS BEEN ENABLED ; IT I S MOVED AUTOMATI CALLY ;BY THE MOVE SHOT ROUTINE LCHIT2 INX CPX #$137 BNE LCHIT1 NOLNCH ANOP
j
jUNPLOT THE SHOTS, THEN MOVE LDA SCREEN AND #$131 JEQ NSHTe
221
94OO 941O 942O 9430 9440 9450 9460 9470 9480 9490 9509 9510 9529 9539 9549 9550 9560 9570 9580 9599 9600 9619 9620 9630 9640 9650 9660 9679 9689 9690 9700 9710 9729 9739 9749 9759 9769 9770 9789 9790 9809 9810 9820 9830 9840 9850 9869 9870 9880 9890 9900 9910 9920 9930 9949 9950 9960 9979 9989
222
LDMEM #$03,COLOR LDX #$01 STX LPCNTl LDMEM SHOTS,BUF ROR BUF ;
MVSHT0 ANOP LDX LPCNTl ROR BUF BCC MVSHT4 LDA STA LDA STA
,SEE IF SHOT IN FLIGHT
SHOTSH,X XPNT SHOTSV,X YPNT
JSR XPLOT
iUNPLOT THE POINT
LOX LPCNT1 LOY LEVEL LDA STA ROR BCC
SHOTSD,X BUFl SUFi MVSHTl
LDA SHOTSV,X CLC SSC SPEEDV,Y STA SHOTSV,X ;
MVSHTl ROR BUFl BCC MVSHT2 LDA SHOTSV,X SEC AOC SPEEDV,Y STA SHOTSV,X MVSHT2 ROR BUFl BCC MVSHT3 LDA SHOTSH,X CLC SBC SPEEDH,Y STA SHOTSH,X ; MVSHT3 ANOP ; ;PREPARE TO PLOT
LDA STA LOA STA
SHOTSH,X XPNT SHOTSV,X YPNT
JSR XPLOT
iMOVE UP ;ADD IN ONE TO SPEED
99913 i 10131313 MVSHT4 ANOP 113010 INC LPCNTI 101320 LDA LPCNTI 1130313 11313413 CMP #$08 11313513 JNE MVSHTe 101360 i 113070 NSHT0 ANOP 101380 ; 101390 iMOVE PLAYER SHOT 1011313 1131113 LDA SHOTS 1131213 Ar'-lD #$131 BEQ NSHTI ;IF SHOT IS INFLIGHT 101313 10140 INC SHOTSH ;MOVE SHOT TO RIGHT 10150 101613 INC SHOTSH 1131713 i 1131813 NSHTI ANOP 1131913 11321313 10210 jCHECK TO SEE IF THE SHOTS HAVE 113220 jREACHED THE EDGE--CANCEL SHOT 113230 ;WHEN EDGE IS REACHED 102413 10250 ;CHECK PLAYER'S SHOT FIRST 10260 10270 LDA SHOTS 113280 AND #$01 i IS PLAYER SHOT ACTIIJE? BEQ NSHT2 10290 10300 10310 LDA SHOTSH 10320 Ct1P #-f>Ae jRIGHT EDGE OF SCREEN 10330 BCC NSHT2 10340 10350 LDA SHOTS jCLEAR SHOT ENABLE BIT 10360 AND #$FE 10370 STA SHOTS 10380 113390 NSHT2 ANOP 11341313 1134113 ;CHECK THE BAD GUYS SHOTS 104213 113430 LDX #$131 113440 NSHT3 LDA SHOTSH,X 104513 CMP #$ec iLEFT SIDE 113460 BCS NSHT4 jNOT THERE YET 1134713 104813 Jt-1P CLRSHT jUNPLOT AND CLEAR ENABLE 113490 10500 NSHT4 LDA SHOTSV,X 1.0510 CMP #$F4 BCC NSHT5 105213 10530 10540 JMP CLRSHT 105513 Ie 5C:.0 NSHT5 CMP #$50 iADJUST LATER---1135713 BCS NSHT6
223
10580 10590 10600 10610 10620 10630 10640 10650 10660 10670 10680 10690 10700 10710 10720 10730 10740 10750 10760 10770 10780 10790 113800 10810 10820 10830 10840 10850 10860 10870 10880 10890 10909 19910 10920 19939 10940 19950 19960 10970 10989 19999 1113130 11919 11029 11030 11949 11050 11069 11070 11080 11090 11100 11110 11129 11130 11140 11150 11160
224
;
CLRSHT LOA SHOTS AND ANDPOS,X STA SHOTS iUNPLOT THE SHOT STX LOA STA LOA STA
i
NSHT6
BUF SHOTSH,X XPNT SHOTSV,X YPNT
;SAVE X REGISTER
JSR XPLOT
iUNPLOT THE POINT
LDX BUF
;GET THE X BACK
ANOP INX CPX #$98 BNE NSHT3
;
!ANIMATE SPRITES NEXT ;ALL SPRITES USE A FOUR SPRITE !ANIMATION SEQUENCE. 4/SECOND LDA AND CMP BNE
SCREEN #$07 #$06 NOAN1
!DO IT EVERY 15'TH iSCREEN ,BYPASS CODE
LOX #$90 ANSP0
ANOP LDA PLAYP!X AND #$93 TAY LDA PLAYP,X AND #$FC STA BUF INY TYA AND #$03 ORA BUF STA PLAYP,X INX CPX #$08 BNE ANSP0
NOANl
ANOP LDA SCREEN
i SPRITE POINTER !STRIP LO\J..IER 3 BITS ;CLEAR 2 LSB'S
;CLEAR OVERFLOW
111713 111813 111913 1121313 112113 112213 112313 112413 112513 112613 112713 112813 112913 1131313 113113 11320 11330 11340 11350 11360 11370 11389 11390 11409 11419 114213 11430 11449 11450 11469 114713 114813 114913 11590 115113 11529 11539 115413 115513 115613 115713 11589 115913 11690 116113 116213 116:313 116413 11 ':;.513 116613 11670 11680 116913 1171313 117113 11720 117313 11740 117513
AND ti$eF BNE NOLV ADRES $6eCe,BUF
LlVLP
NOLV
; STI,JI D
TlI..II D
INTe
SYNC1
LDA ASL TAY LDA STA LDA STA LDY LDA STA INY CPY BNE
LIVES A NUMBER,Y BUF+2 NUMBER+ 1 ,Y BUF+3 ti$e0 (BUF+2),Y (BUF) ,Y 1*$113 LlVLP
ANOP
LDA JOY2 AND #$10 JEQ TOP
jRESET
LD,.,1EM ti$ge, ENABLE LDA ENABLE BEQ TWID JMP START
ANOP LDA SSCOL ; GET SPR ITE COLLI SI ONS STA TMSCOL !PUT IN TEMP REGISTER LDA SBCOL ;SPRITE--BACKGROUND STA TMBCOL ;COLLISIONS LDt1EM tiBLUE, BCOL0 INC SCREEN INC RANSEC LDA RANSEC EOR ti$3C Bt'-lE SYNC1 STA RA~~SEC INC SECOND ANOP
225
11760 11770 117813 117913 11800 11810 11820 118313 11840 118513 11860 11870 118813 11890 11900 11910 11920 11930 11940 11950 11960 11970 11980 11990 12000 12010 12020 12030 12040 12050 12060 12070 12080 12090 12100 12110 12120 12130 12140 12150 12160 12170 12180 12190 12200 12210 12220 12230 12240 12250 12260 12270 12280 12290 12300 12310 12320 12330 12340
226
SHADl
SHAD2
LDX #$130 STX HMSB LDY #$013 ANOP LDA MOUNTV,X STA SPR0Y,Y LDA MOUNTP,X STA SPRPT1,X LDA MOUNTH,X STA SPR0X,Y LDA MOUNTC,X STA SPRCLe,X INY INY INX CPX #$08 BNE SHADI LDA MNTMSB STA XMSB LDMEM #$00,MLTSP LDMEM #$FF,SPRXSZ STA SPRYSZ STA SPREN LDA PLAYE BEQ TM0 DEC PLAYE LDA PLAYE BNE TM0 LDMEM #$14,PLAYP
TM0
LDA BEQ DEC BNE
SNDTM1 TM1 SNDTMl TMl
LDA S1CORG AND #$FE STA S1CORG ;
TM1
LDA BEQ DEC BNE
SNDTM2 TM2 SNDTM2 TM2
LDA S2CORG AND #$FE STA S2CORG TM2
LDA BEQ DEC BNE
SNDTM3 TM3 SNDTM3 TM3
123513 123613 123713 123813 123913 1241313 124113 124213 124313 124413 124513 124613 124713 124813 124913 1251313 125113 125213 125313 125413 125513 125613 125713 125813 125913 1261313 126113 126213 126313 126413 126513 126613 126713 126813 12690 1271313 127113 127213 127313 127413 127513 127613 127713 127813 127913 1281313 128113 128213 128313 128413 128513 128613 128713 128813 128913 1291313 129113 129213 129313
TM3
ANOP
SHADOW SID CHIP LDMEM LDMEM LDMEM LDMEM LDt'lEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM LDMEM
S1ATDC ,!)1ATDC S2ATDC; !)2ATDC S3ATDC,V3ATDC 818URL,V1SURL S2SURL, V2SURL S3SURL,V3SURL 81FRLO,V1FRLO S2FRLO,V2FRLO S3FRLO,V3FRLO S1FRHI,V1FRHI S2FRHI,V2FRHI S3FRHI,V3FRHI S1PWLO,V1PWLO S2PWLO,V2PWLO S3PWLO,V3PWLO 81PWHI,V1PWHI S2PWHI,V2PWHI S3PWHI ,V3P~'JHI FILLO,FLCNLO FILHI,FLCNHI MMOD;MODVOL RFIL,RESFLT S1CORG,V1CORG 82CORG,V2CORG S3CORG,V3CORG
j
jGENERATE A RANDOM NUMBER jUSE RAND1-RAND4 BASED AN SCREEN LDA AND TAX LDA ADC ADC EOR SBC ADC STA
SCREEN #$133 RANDOM RAND1 RAND3 RAND2 RAND4 RANSEC RAND1,X
JPOINT TO A RAND REGISTER :THE FOLLOWING ,SEQUENCE THROWS ;A NUMBER OF RANDOM ;NUMBERS TOGETHER ,TO FORM A NEW RANDOM ;NUMBER
;MOVE THE PLAYER USING JOY1 LDA LIVES JEQ NOMOV4
; SEE IF GAl"lE OVER ;DOWT MO!JE IF OVER
LDA PLAYE JNE NOMOV4
,DON'T MOVE IF EXPLODING
227
12'~4e
LOA
12950 12960 12970
~·.lQT
12980
12990 12000 130113 1313213 131330 1313413 1313513 1313613 1313713 1313813 130913 131(113 131113 131213 131 :313 131413 131513 131613 131713 131813 131'7'13 1321313 132113 132213 132313 132413 132513 132613 132713 132813 132913 1331313 133113 133213 133313 133413 133513 133613 133713 133813 133913 1341313 134113 134213 134313 134413 134513 134613 134713 134813 134913 1351313 135113 135213
228
~TOY1
STA IBUF+1 AND #$0F BEG! NOMOl)3
TURN THE BITS OVER PUT THE DATA AWAY CHECK TO SEE IF THE BRANCH IF NOT
LOA SCREEN At'lD #$131 BNE NOt10 l)3
;SLOW MOVEMENT BY ,MOVING ON ALTERNATE ; SCREENS
; IF HERE-MOl.,,'E CHARACTER LDMEM I BUF+ 1 , I BUF ;COPY JOY TO BUF ROR IBUF ,CHECK FIRST BIT BCC N:X:B IT 1 ; IF CARRY CLEAR-JUtvlP LDA SEC SBC CMP BCC
PLAYl) #$131 #$68 N:X:B IT 1
,CHECK FOR TOP
STA PLAYV i N:X:B IT 1 ROR IBUF BCC N>
PLA'(l) #$131 #$E8 N:X:BIT2
;CHECK FOR BOTTOM
STA PLAYV NXBIT2 ROR IBUF BCC NXBIT3 LDA SEC SBC CMP BCC
jMOVE LEFT
PLAYH #$131 #$113 N:X:BIT3
STA PLAYH NXBIT3 ROR IBUF BCC NOMOV3 LDA CLC ADC CMP BCS
;MOVE RIGHT
PLAYH #$131 #$313 NOMOl.,,'3
STA PLAYH NOt10V3 LOA ~TOY1 AND #$113
iCHECK FIRE BUTTON
13539 13549 135513 13569 135713 135813 135913 136913 136113 13629 13639 13649 136513 136613 136713 136813 136913 137139 13710 137213 13730 13740 13759 13769 13779 13789 137913 13899 13819 138213 13830 13849 13850 13869 13879 13889 13890 13999 13919 13920 139313 13949 13959 13969 139713 13989 13999 14999 14919 14929 14939 14949 14959 14969 149713 14989 14999 14109 14119
BNE NOMOV4
INOT PRESSED--BRANCH
LDA SHOTS AND #$91 BNE NOMOV4
; SHOT INFLI GHT? IPLAYER SHOT ;IF NOT--FIRE •...
LDA PLAYE BNE NOMOV4 LDA SHOTS ORA #$131 STA SHOTS
;SET SHOT IN FLIGHT BIT ;FOR THE PLAYER
;SET SHOT START POSITION TO GUN LDA PLAYH CLC ADC #$95 STA SHOTSH LDA PLAYV CLC ADC #$137 STA SHOTSV LDMEM . LDMEM LDMEM ADRES LDMEM
;ADD OFFSET TO SHOT
IADD VERTICLE OFFSET
#$e8,SHOTSD ;SHOT DIRECTION #$81,S1CORG #$2e,SNDTM1 CN3,S1FRLO #$28,S1ATDC
; SHOT STARTED NOMOV4 ANOP
ADRES INTl ,CINV LDMEM #$91,ENABLE RAST #$54 IPULL
INTl
SEI LDA SSCOL LDA SBCOL
;CLEAR COLLISIONS
NOP NOP NOP LDMEM #GREEN,BCOL9 LDX #$913
229
14129 14139 14149 14159 14169 14179 14189 14199 14299 14219 14229 14239 14249 14259 14269 14279 14289 14299 14399 143113 143213 14339 14349 14359 14369 14379 14389 14399 14499 144113 14429 14430 14449 14459 14469 14479 14489 14499 14599 14519 14529 14539 14549 14559 14569 14579 14589 14599 14699 14610 14629 14630 14640 14650 14669 14678 14688 14698 14700
230
SHAD3
SHAD4
STX HMSB LDY #$90 ANOP LDA PLAYV!X 8TA SPR0Y!Y LDA PLAYP!X STA SPRPT1!X LDA PLAYH,X ASL A STA SPR0X!Y BCC SHAD4 LDA HMSB ORA BITPOS!X STA HMSB INY INY INX CPX #$08 BNE SHAD3 LDA HMSB STA XMSB
,MULTIPLEX PLAYER AND HIS SHOT ;THE PLAYER IS ALREADY UP LDA SCREEN AND #$91 BEQ NOMLT
;SHOT ON ODD SCREENS
LDA SHOTS AND #$91 BEQ NOMLT
;SEE IF SHOT ACTIVE ;IF NOT ACTIVE-FORGET IT
;SHOT ACTIVE IF HERE LDA STA LOA STA LOA A8L STA LOA AND STA BCC
#$lC SPRPT1 SHOTSV SPR0Y SHOTSH A SPR0X XMSS #$FE XMSB NOMLT
;GET SHOT VERTICAL ;STORE IN SPRITE 9 ;GET SHOT HORIZONTAL ;MULTIPLY BY 2 !PUT IN VIC CHIP ;GET Mse ;CLEAR MSB iREPLACE IT ;GO HOME IF Mse CLEAR
ORA #$01 8TA XMSB
;SET Mse IF HERE
ANOP
;MULTIPLEXING DONE
;
NOMLT
LDMEM #$88,SPRXSZ ;SET SPRITE SIZE STA SPRYSZ ;TO SMALL LDMEM #$FF,MLTSP ;MULTI COLOR SPRITES
14710 14720 14730 14740 14750 14760 14770 14780 14790 14800 14810 14820 14830 14840 14850 14860 14870 14880 14890 14900 14910 14920 14930 14940 14950 14960 14970 14980 14990 150013 15010 15020 15030 15040 15050 15060 151370 15080 15090 151130 151 it! 15129 15130 15140 15150 15160 15170 15189 151913 152130 15210 152213 152313 15240 152513 15260 15270 15280 152913
LDA ASL ORA STA
WHOLIV A #$01 SPREN
; ENABLE THE LIVE BAD GUYS ;ENABLE PLAYER ALWAYS ;TURN SPRITES BACK ON
;
;THE MOUNTAINS ARE UP ISO THEY CAN NOW BE MOVED LDX #$00 LDMEM MNTMSB,HMSB MVMNT0 HDEC MOUNTH INX CPX #$98 BNE MVMNT0 ; LDMEM HMSB,MNTMSB ;MOUNTAINS HAVE BEEN MOVED ONE ;PIXEL TO THE LEFT ;THEY MUST NOW BE ADJUSTED FOR ;A WRAPAROUND EFFECT TO APPEAR ; CONTINUOUS LDX #$00 MVMNT1 ANOP PUNPCK MOUNTH,MNTMSB,IBUF LDA IBUF+1 CMP #$131 BNE MVMNT2 LDA IBUF CMP #$E8 BNE MVMNT2 ;MOUNTAIN SECTION AT 0--MOVE IT ;TO $01713 LDA ORA STA LOA STA
MNTMSB BITPOS,X MNTMSB #$713 MOUNTH,X
MVMNT2 INX CPX #$08 BNE MVMNTl
;00 THE NEXT SECTION
;THE MOUNTAINS ARE FINISHED LDX EXPLP1 LDA BEQ DEC BNE
#$1313 MEANE,X EXPLP2 MEANE,X EXPLP2
;DECREMENT EXPLOSION COUNTERS
231
15399 15319 15329 15339 15349 15359 15369 15379 15389 15399 15499 15419 15429 15439 154413 154513 15469 15479 15489 154913 1551313 155113 155213 15538 155413 155513 155613 15570 15588 15590 156913 15619 15628 15639 15640 15659 15669 15678 156813 15690 1571313 15719 15720 15738 15748 15750 15769 15770 15788 15798 15890 15810 1582:8 15839 15849 15859 15860 15879 15880 15898
232
LDA WHOLIV AND ANDPOS,X STA I..oJHOLIV
jCLEAR BIT FROM WHOLIV
EXPLP2 INX CPX #$97 BNE EXPLP1
ADRES INT0,CINV RAST #$FB IPULL
UP
UP1 DN
DWN1 LT
LT1 RT
RT1
ANOP LDA MEANI), Y SEC SBC ""ERNC CMP #$68 BCC UP1 STA MEANV,Y RTS ANOP LDA MEANV,Y CLC ADC VERNC CMP #$E8 BCS DWN1 STA MEANV,Y RTS ANOP LDA MEANH,Y SEC SBC HORNC CMP #$9E BCC LTl STA MEANH,Y RTS ANOP LDA MEANH,Y CLC ADC HORNC CMP #$A9 BCS RT1 STA MEANH,Y RTS
.OPT LIST NOP .END
; UNDER MOUNTAINS
Listing C-25: The BOGHOP.O Program B* PC SR AC XR YR SP • ;ce3E 32 1313 C3 1313 F6
• : 1131313 • : 113138 • : 1 €I 1 €I • : 11318 • : 113213 • : 11328 .: 113313 • : 1 €I 38 · : 11340 • : 11348 • : 11350 • : 11358 • : 113613 • : 11368 • : 1 €I 70 • : 1 €I 7S • : 1ese • : 1 1388 • : 113913 • : 11398 .:leAe .: leA8 • : lese • : 1eB8 • : lece • : lec8 • : leDe • : 11308 • : leEe • : 1 eE8 • : 1 €I Fe • : 1 e F8 .:111313 • : 11138 .:11113 .:1118 .:112e • : 1128 • : 113e • : 1138 • : 114e • : 1148 .:11513 • : 1158 • : 11613 • : 1168 • : 11713 • : 1178 • : 11813 • : 1188 .:11913
28 52 38 45 28 4F 31 45 53 :3F 130 3F €Ie FF ce :3F 1313 133 1313 3F 1313 3F 1313 313 1313 3F 1313 FC 130 €Ie ee Fe 3e 713 e4 e6 07 e3 43 83 C3 133 43 83 C3 83 43 83 C3 83 43
43 49 34 4E 513 52 39 56 53 €Ie 1313 €Ie €Ie €Ie 00 €Ie 1313 130 1313 1313 ee ee €Ie ee 1313 ee €Ie ee 1313 ee 1313 18 58 98 134 e6 137 e4 44 84 C4 134 44 84 C4 134 44 84 C4 134 44
29 47 2C 213 29 40 38 45 3C €Ie ec €Ie 3F 1313 FF C0 133 €Ie FF ce €IF ee FF C0 3F 130 3F 1313 €Ie ee €Ie 413 813 ce e5 e6 137 135 45 85 C5 135 45 85 C5 135 45 85 C5 135 45
213 48 213 42 213 41 34 4E C0 ce 3e €Ie ce ce €Ie ce €IF ee ce 1313 313 130 1313 ce ce ce C0 ce €Ie ee 28 68 A8 134 €IS e6 137 e6 46 86 C6 136 46 86 C6 86 46 86 C6 136 46
43 54 53 52 513 4E 2C 213 C3 ce ec 1313 €Ie ce 133 €Ie 33 130 FF 130 ce 1313 03 1313 ce ce ce ce ee €Ie 513 913 De 134 €IS 136 e7 e7 47 87 C7 137 47 87 C7 137 47 87 C7 137 47
4F 213 54 45 45 43 213 42 CC ce ec €Ie €IF €Ie €IF €Ie e3 €Ie €Ie ee FF €Ie €Ie €Ie 3F 130 3F ce €Ie €Ie 78 B8 F8 134 135 136 013 413 813 ce €Ie 413 88 ce 138 413 813 ce 138 48 se
513 31 45 53 52 45 53 52 F0 ce ec €Ie 313 €Ie 013 ce FF e0 €Ie e0 ee ee 313 €Ie ce ce €Ie ce €Ie 1313 Ae Ee 213 134 e5 136 131 41 81 Cl 131 41 81 Cl 81 41 81 Cl 131 41
cH
59 39 56 53 46 213 54 45 ce ce ec €Ie ce €Ie C0 ee 03 ee ee ce ee C0 313 ee ce C0 133 1313 1313 1313 C8 138 48 134 135 136 132 42 82 C2 e2 42 82 C2 132 42 82 C2 132 42 S2
• : 1198 • : 11 Ae • : llA8 .:llBe • : 11 B8 • : 11 ce • : 11 C8 • : 11 De • : 1108 • : 11 Ee • : 11 E8 .:llFe · : 11 F8 .: 121313 • : 12138 • : 121 €I • : 1218 • : 12213 • : 1228 .: 1230 · : 1238 • : 12413 • : 1248 • : 12513 • : 1258 .: 126e • : 1268 .: 12713 · : 1278 · : 1280 • : 1288 • : 1290 • : 1298 • : 12Ae • : 12A8 • : 12se .: 12S8 • : 12ce • : 12C8 • : 12013 • : 1208 .: 12Ee , : 12E8 • : 12Fe • : 12F8 • : 138e • : 13138 • : 13113 · : 1318 • : 13213 .: 1328 • : 1338 • : 1338 • : 13413 .:1348 • : 13513 • : 1358
83 C3 133 43 83 C3 133 43 83 C3 133 43 83 1313 01 132 133 €IS 136 137 08 0A 0S ec eo €IF 113 11 12 14 15 16 17 19 lA lB lC lE IF 18 58 98 08 18 1313 €Ie 1313 1313 81 e~
1313 1313 1313 1313 1313 1313 138
84 C4 134 44 84 C4 134 44 84 C4 134 44 84 130 131 132 133 135 136 137 €IS 0A eB ee 00 eF 113 11 12 14 15 16 17 19 lA lB lC lE IF 2e 613 Ae Ee 213 1313 ee 1313 138 81 Fl FF 713 FF 72 FF FF FF
85 C5 135 45 85 C5 135 45 85 C5 135 45 85 1313 01 02 133 135 136 137 08 eA eB 0e eo eF le 11 12 14 15 16 17 19 lA lB lC lE IF 28 68 A8 E8 28 138 ee 1313 88 81 1313 1313 813 813 1313 138 1313 138
86 C6 136 46 86 C6 136 46 86 C6 136 46 86 1313 131 02 133 135 136 137 €IS eA eB €Ie eo €IF le 11 12 14 15 16 17 19 lA lB lC lE IF 3e 7e se Fe 313 e8 €Ie €Ie €Ie 81 FF FF FF FF DO EF FF FF
87 .C7 137 47 87 C7 137 47 87 C7 137 47 87 €Ie 131 132 133 135 136 137 08 0A es ec 0D eF 113 11 12 14 15 16 17 19 lA lB lC lE IF 38 78 S8 F8 38 813 ee 138 1313 131 1313 138 €Ie 1313 1313 813 813 1313
ce 1313 413 813 ce 1313 413 813 ce €Ie 413 813 1313 131 02 133 135 136 137 138 eA eB ee eo €IF 113 11 12 14 15 16 17 19 lA lB lC lE IF ee 4e 8e ce e0 ee 138 ee 1313 131 FF FF FF FF FF FF 7D FF FF
Cl 131 41 81 Cl 131 41 81 Cl 131 41 81 1313 131 132 133 €IS 136 137 138 eA 0B ec eo eF 113 11 12 14 15 16 17 19 lA 1B lC lE IF 138 48 88 C8 138 ee 1313 ee 138 131 1313 1313 2F €Ie 4F 138 1313 813 88
C2 132 42 82 C2 132 42 82 C2 132 42 82 1313 131 132 03 135 136 137 €IS eA 0B ee 00 eF 113 11 12 14 15 16 17 19 lA lB lC lE IF 1 €I 513 ge De 1 €I ee 8e ee 1313 131 72 FF FF FF F7 58 FF OF Fe
233
• : 13613 .: 1368 • : 13713 • : 1378 .: 13813 • : 1 :388 • : 13913 .: 1398 .: 13A13 .: 13A8 • : 13813 • : 1388 .: 13C13 • : 13C8 .: 13013 • : 1308 • : 13E0 • : 13E8 • : 13F0 • : 13F8 • : 141313 • : 1408 • : 141 €I .:1418 .: 1420 • : 1428 .: 1430 • : 1438 .: 1449 • : 1448 • : 14513 • : 1458 • : 14613 • : 1468 • : 14713 • : 1478 .:14813 • : 1488 .: 14913 • : 1498 .: 14A13 .: 14A8 • : 14813 .: 1488 .: 14C13 .:14C8 .:1409 .: 1408 .: 14E13 • : 14E8 .: 14F9 .: 14F8 • : 15913 • : 15138 .:1519 • : 1518 .:1529 .:1528 .: 15313
234
1313 1313 1313 1313 1313 1313 1313 1313 1313 1313 €Ie 1313 135 €Ie 1313 1313 130 00 4C 138 4C 213 DF DF 14 04 09 a4 98 a2 134 139 134 138 132 a6 132 138 139 135 136 135 139 138 136 1313 92 96 91 94 96 92 96 91 94 96 94 94 131
7F FF FF FF OF FF FF FF FF FF 7F FF FF FF FF FF FF FF C8 D0 8F 413 8F 8F 04 04 08 a5 eA 94 134 a8 135 13A €Ie 06 13A 9A 131 134 136 91 138 13A 132 €Ie 92 92 139 a5 92 92 92 99 95 92 96 134 135
1313 1313 1313 1313 1313 1313 1313 1313 1313 1313 1313 1313 1313 €Ie 1313 1313 013 €Ie 15 39 18 813 7F 7F 134 96 13A 95 13A 134 136 aA a5 9A €Ie a6 132 98 135 136 136 135 139 13A 136 135 96 13A 131 95 95 96 9A 91 95 139 94 135 95
70 FF FF FF 85 FF FF FF FF FF FF FF FF FF FF 2F FF FF EE AO 131 FE FE ~3 €I 06 136 132 131 132 96 136 132 131 92 1313 96 13A 139 131 136 134 135 138 132 136 135 96 9A 95 91 135 136 9A 95 91 99 94 135 91
213 1313 1313 1313 132 013 1313 1313 70 €Ie 1313 1313 1313 €Ie 1313 C13 1313 €Ie 50 51 132 FD FD 04 02 94 136 95 96 92 a4 136 135 96 134 132 0A 138 a5 136 134 131 138 9A 134 138 134 13A 95 99 98 94 9A 95 99 99 96 94 95
FF FF FF FF FF FF FF FF 00 FF 05 FF FF FF FF FF FF FF 138 08 134 F8 F8 08 0A 95 06 09 136 9A a5 136 139 96 136 136 0A 139 135 1313 134 131 13A 132 136 138 94 138 95 98 98 94 98 95 98 94 94 95 135
52 1313 1313 E13 1313 132 1313 1313 132 01 22 1313 1313 €Ie 1313 1313 1313 1313 EE C9 138 F7 F7 €Ie 139 95 136 138 134 139 135 136 138 94 136 132 138 139 131 a9 135 139 138 132 134 13A 134 138 131 9A 9A 94 98 91 9A 136 94 95 134
FF FF FF F7 00 OF FF FF FF FF FF FF FO FF FF FF FF F6 50 FF 113 EF EF 113 135 01 134 99 136 135 al 134 a9 96 136 136 13A 131 al €Ie 135 139 13A 136 1313 9A 96 99 95 132 9A 96 99 95 92 94 95 95 94
• : 1538 .:15413 • : 1548 • : 15513 • : 1558 .: 15613 .: 1568 .:15713 • : 1578 .: 15813 • : 1588 • : 15913 • : 1598 • : 15A13 .: 15A8 • : 15813 • : 1588 • : 15C13 • : 15C8 • : 15013 • : 1508 • : 15E13 • : 15E8 • : 15Fe • : 15F8 • : 161313 • : 16a8 • : 16113 .:1618 • : 16213 .: 1628 .: 16313 • : 1638 • : 16413 • : 1648 • : 165a • : 1658 • : 16613 • : 1668 • : 16713 • : 1678 • : 16813 • : 1688 .:169a • : 1698 • : 1'6A9 • : 16A8 • : 16813 • : 1688 • : 16ee • : 16C8 • : 16De • : 16D8 • : 16E9 .: 16E8 .: 16F9 • : 16F8 • : 171313 • : 17138
136 136 136 136 134 134 136 135 135 135 135 135 131 131 132 135 139 131 136 136 135 132 136 134 06 136 135 91 131 136 a2 131 1313 13A 13A 139 134 132 134 131 13A 135 132 99 136 93 133 133 93 96 95 133 91 93 91 0A 93 138 13A
136 136 136 136 136 136 132 131 134 131 134 134 135 135 132 04 1313 135 134 134 135 136 134 01 134 132 al 95 135 132 136 135 €Ie 139 132 134 135 134 131 139 132 139 138 136 132 133 93 133 139 94 95 95 €Ii 93 91 0A 93 139 132
132 134 132 134 134 134 96 135 135 135 135 135 131 131 136 06 134 134 134 06 135 1313 135 05 136 136 135 91 138 138 134 134 1313 9A a8 131 131 136 135 138 9A 131 132 134 136 133 133 135 139 94 135 91 93 93 91 9A 98 133 92
136 136 136 136 136 136 132 131 134 131 134 135 135 134 132 06 135 136 135 136 04 €Ie 134 04 132 134 a4 al 131 132 a2 136 132 132 al 139 134 €Ie 132 13A 138 135 136 136 132 135 133 131 913 136 95 91 93 93 93 0A 99 93 13A
132 94 132 134 134 136 135 135 135 135 1313 135 131 136 132 04 135 132 135 132 134 €Ie 135 05 06 96 136 92 135 94 135 136 135 131 138 131 136 1313 135 139 132 134 134 134 136 135 94 131 94 93 95 95 133 93 93 eA 98 93 133
136 135 136 1313 136 132 131 134 134 134 1313 135 135 136 136 135 131 136 131 132 06 134 131 132 04 134 13a 01 134 132 131 132 132 a2 132 a5 135 1313 131 135 136 136 135 133 132 135 94 135 96 93 133 91 134 99 133 0A 99 9A 93
136 134 136 1313 134 136 135 135 135 135 1313 131 131 132 134 135 131 132 131 136 136 05 135 05 06 136 13a €II 136 131 a4 136 a6 13A 139 139 134 134 a9 aA 134 134 ea 133 136 135 94 133 94 93 133 91 134 99 133 13A 138 132 93
134 134 134 1313 136 132 131 134 134 134 134 135 135 136 135 139 135 136 136 134 0.::, 04 01 134 132 134 €Ie 94 134 136 138 134 132 134 138 131 91 135 135 138 al 136 €Ie 133 133 135 133 133 94 133 93 95 134 139 93 133 99 132 133
· : 1719 · : 1718 .": 1729 .: 1728 .: 1739 .:1738 .: 1749 .:1748 .: 1759 .: 1758 .: 1769 .: 1768 .: 1779 · : 1778 .: 1789 .: 1788 .: 1799 .: 1798 · : 17A9 .: 17A8 · : 1789 · : 1788 .: 17C0 · : 17C8 · : 17D13 · : 1708 · : 17E9 .: 17E8 · : 17F0 · : 17F8 · : 1800 · : 1898 · : 1810 · : 1818 · : 1820 · : 1828 · : 1830 · : 1838 · : 18413 · : 1848 · : 1850 · : 1858 · : 1860 · : 1868 · : 1879 · : 1878 · : 1889 · : 1888 .:1890 · : 1898 .: 18A9 .: 18A8 .: 18B0 · : 1888 .: 18C0 .: 18C8 .: 18D9 · : 1808 · : 18E9
99 93 9A 93 95 00 05 95 96 92 05 96 96 96 96 92 14 90 15 15 99 16 17 00 17 03 03 90 19 10 90 132 95 02 94 98 96 00 AS 44 A9 18 7D 79 F5 AA 60 63 78 9D AD 80 DC 01 D9 D0 18 80 93
99 93 9A 92 95 90 01 06 92 96 06 02 96 96 96 05 74 99 BA 10 99 13 66 00 83 04 02 42 82 C2 01 02 66 133 06 98 06 55 66 AA 89 7D FD CD 12 A0 89 A0 A9 DC 90 03 80 8D A2 FB 93 8D A9
99 99 92 92 95 09 95 06 06 96 06 05 05 95 92 95 14 99 15 16 09 17 17 90 17 91 00 10 10 19 01 03 61 02 07 06 08 AA 38 AS 3A 25 11 12 85 00 38 00 06 8D DO DC 0E lA 92 A2 A9 14 90
98 99 9A 02 93 06 95 05 92 91 90 05 91 95 96 95 A9 ID 99 3B 91 99 66 8F BF 00 04 52 92 D2 01 03 02 02 01 06 0';> FF E9 67 4A 11 85 85 62 Bl 18 91 85 00 A9 8D OD 09 A9 FF 18 03 80
98 99 9A 02 93 96 01 05 96 95 99 05 05 91 06 90 14 15 013 16 16 99 17 17 17 04 03 10 19 10 91 134 91 03 02 05 04 C0 32 38 4A 85 62 61 AS 61 3D 61 91 DO 90 9E 80 A9 99 9A 80 A9 29
98 93 93 93 93. 06 05 05 92 91 90 96 01 95 92 09 CA 58 90 66 8C 00 38 9B 99 03 02 62 A2 E2 01 133 131 05 94 08 136 30 C9 E9 A8 61 AS AS 67 85 3C 60 A9 AD 80 DC 0F FF 95 A9 19 IF 09
98 93 93 93 93 06 95 05 95 95 96 06 95 96 96 99 14 15 00 16 16 99 17 17 91 92 91 10 19 10 01 04 131 02 94 136 05 0C C7 eE AS AS 61 62 29 63 18 49 99 90 92 8D DO 8D 99 8E 93 8D 80
93 93 93 93 93 96 91 02 95 91 92 96 91 92 06 21 99 8F E5 00 E8 38 99 A7 92 91 00 72 82 90 92 03 01 65 95 139 04 133 80 C9 64 65 18 79 93 A4 45 78 80 DC DC 9F A9 19 E8 80 A9 15 21
· : 18E8 09 .: 18F0 91 .: 18F8 85 · : 1999 44 · : 1998 85 • : 1919 44 · : 1918 A9 .: 1929 29 · : 1928 19 .: 1939 A9 .:1938 A9 .: 1940 25 .:194809 · : 1959 99 · : 1958 D9 .: 1969 F2 .:1968 25 .: 1970 24 .:1978 04 .: 1989 69 · : 1988 6A · : 1990 70 .:1998 20 .: 19A0 77 .: 19A8 79 · : 19B0 7B · : 1988 7D .: 19C0 7F .:19C8 8A .: 1900 8E · : 19D8 21 .: 19E0 23 · : 19E8 21 · : 19F0 23 · : 19F8 95 · : lAe0 A8 .: lA08 02 .: lA19 00 · : lA18 85 .: lA29 85 .: lA28 A9 .: lA39 A9 .: lA38 A9 .: lA40 A9 .: lA48 A9 · : lA50 A9 .: lA58 12 .: lA60 A9 .: lA68 A9 .: lA7e A9 .: lA78 A9 · : lA89 A9 .: lA88 A9 .: lA99 A9 .: lA98 A9 .: lAA9 A9 .:lAA8 A9 .:lAB0 A9 .:1A88 A9
A9 8D 44 80 44 8D 69 80 8D D8 01 AS 85 A2 FB A9 A9 C8 00 A9 A9 85 85 A9 A9 A9 A9 A9 85 85 85 85 85 85 85 85 8D A9 913 6E 18 C3 9F 28 79 88 04 30 68 89 A9 C5 95 99 75 21 74 A0 CA
93 90 AD 18 AD 18 85 11 16 85 91 25 24 99 E6 99 09 09 F2 91 14 71 74 09 69 C0 213 09 88 8F 81 83 85 87 A5 A9 25 FF A9 85 85 85 85 85 85 80 85 85 85 85 85 85 85 85 85 85 85 85 85
80 DO 18 09 18 D9 65 D0 D9 25 24 C9 A9 A9 25 85 A2 FB A9 85 85 85 85 85 85 85 85 85 85 A9 A9 A9 A9 A9 85 85 00 80 00 6F 07 05 19 11 09 12 04 94 9D 9F Al A3 96 98 9A C4 C6 C8 CA
02 A9 09 A9 09 A9 AD AD A9 A9 C8 DC 69 ~9
E8 24 99 E6 03 69 8C 72 75 78 7A 7C 7E 88 8C 20 22 29 22 61 A6 AA A9 18 85 A9 A9 A9 A9 A9 A9 D4 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9 A9
DD 29 29 lC 29 09 11 16 99 90 D0 D9 85 91 E9 A9 A9 25 85 A9 A9 85 85 A9 A9 A9 A9 85 85 85 85 85 85 85 85 85 07 D0 6C 91 9E 10 29 88 64 A9 FF 70 79 99 B9 99 85 79 95 14 14 14 14
38 4A F9 9A 9F 85 D0 09 85 A2 FB Fl 25 24 29 5C 56 E8 6B 91 2A 73 76 39 99 F9 50 89 8D 80 82 84 86 A4 A7 A8 8D A9 85 85 85 85 85 85 85 80 85 85 85 85 85 85 85 85 85 85 85 85 85
E9 4A 95 9A 95 64 09 99 24 99 E6 A9 A0 C8 D9 85 91 E9 85 85 85 A9 85 85 85 85 85 85 85 A9 A9 A9 A9 A9 85 A9 26 ce 60 37 08 96 92 14 0A 80 91 9C 9E A0 A2 95 97 99 98 C5 C7 C9 C8
235
.:lAC0 .:lAC8 .:lA00 .:lA08 .:lAE0 .:lAE8 .:lAF0 .:lAF8 .:1800 .:1808 .:1810 .:1818 .:1820 .:1828 .:1830 .:1838 .:1B40 .:1848 .:1850 .:1B58 .:1B60 .:1868 .:1870 .:1878 .:1880 .:1888 .:1890 .:1898 .:1BA0 .:lBA8 .:1B80 .:18B8 .:1BC0 .:18G8 .:1B00 .:1B08 .:1B~0
.:lBE8 .:lBF0 .:lBF8 .:1C00 .:1C08 .:1C10 .:lC18 .:1C20 .:1C28 .:lC30 .:1C38 .:lC40 .:1C48 .:1C50 .:1C58 .:1C60 .:1C68 .:1C70 .:1C78 .:1C80 .:1C88 .:1C90
236
A9 A9 A9 AO 80 80 05 05 4C 0F 85 85 A5 85 A5 85 A5 85 A5 85 A5 A5 A5 A5 A5 A5 A5 A2 85 0A EA 91 46 65 05 79 A5 76 00 A8 17 81 C5 75 95 89 85 06 44 A2 22 66 C4 69 A5 1B 49 A9 65
21 74 A0 lE 12 11 85 89 A8 F0 3C 40 6F 3C 6E 3E 60 40 6C 42 3C 30 3E 3F 40 41 42 00 46 A8 17 46 18 47 A5 lC 91 89 32 89 85 3C 8A C4 C5 01 6A A5 85 22 66 44 18 00 5C A5 10 70 3C
85 85 85 00 00 00 05 05 IF 03 85 85 29 A5 29 A5 29 A5 29 A5 00 00 00 00 00 00 00 A9 A9 B9 85 C8 69 85 38 A2 A4 B5 A4 GB 30 95 65 95 A1 18 A4 44 45 66 44 90 69 95 C9 91 A9 85 85
CC CE 00 AO AO 58 86 8A A5 4C 30 41 F0 6F F0 6E F0 60 F0 6C 34 2C 24 1C 14 0C 04 00 60 E9 45 C0 10 47 29 00 5C 00 37 17 A5 C4 33 C4 C4 85 5C 49 66 44 90 03 01 C5 07 29 FF 3C 90
A9 A9 A9 IF 11 A5 05 05 38 01 85 85 4A 29 4A 29 4A 29 4A 29 A9 A9 A9 A9 A9 A9 A9 85 85 17 A0 10 85 E8 01 A0 39 00 B9 85 33 C8 45 A9 85 69 B9 FF 44 90 03 20 95 E8 F0 7F 85 A5 A5
14 14 14 00 00 68 87 88 29 18 3E 42 4A 0F 4A 0F 4A 0F 4A 0F 0A 0A 0A 0A 0A 0A 0A 5C 47 85 00 00 46 E0 00 00 03 71 05 3C 29 Bl 38 00 44 B9 AO 85 90 03 20 CC C4 E8 03 F0 91 33 34
85 85 85 A9 29 05 05 00 0F A9 85 85 4A 85 4A 85 4A 85 4A 85 85 85 85 85 85 85 85 A9 85 44 B1 F7 A9 08 03 84 14 Al 17 B9 06 3C 29 75 A4 12 00 44 03 20 BE 22 B5 E6 4C 03 A2 29 29
CO CF 01 F8 7F 84 88 03 C9 0A 3F 43 4A 30 4A 3F 4A 41 4A 43 3C 30 3E 3F 40 41 42 00 3C 89 44 A5 00 00 4G 5C F0 C4 0A CC A8 95 07 C5 37 18 F0 A5 20 80 22 85 C5 5C E0 4C 00 7F 7F
.:1C98 .:lCA0 .:1CA8 .:1CB0 .:1C88 .:lCC0 .:1CC8 .:1C00 .:lC08 .:1CE0 .:1CE8 .:1CF0 .:1CF8 .:1000 .:1008 .:1010 .:1018 .:1020 .:1028 .:1030 .:1038 .:1040 .:1048 .:1050 .:1058 .:1060 .:1068 .:1070 .:1078 .:1080 .:1088 .:1090 .:1098 .:10A0 .:10A8 .:10B0 .:1088 .:10C0 .:10C8 .:1000 .:1008 .:10E0 .:10E8 .:1DF0 .:10F8 .:1E00 .:1E08 .:1E10 .:1E18 .:1E20 .:1E28 .:1E30 .:1E38 .:1E40 .:1E48 .:1E50 .:1E58 .:lE60 .:lE68
65 65 65 29 45 A5 85 85 85 85 85 85 85 85 85 85 85 85 BO 86 86 37 37 16 98 E0 F0 01 0A 3C 66 B5 C9 0C A9 A9 A9 A9 03 0A A5 69 85 04 8F 93 27 C0 30 A9 A9 A5 A5 3C 23 00 04 85 A8
3C 3C 3C 7F 35 35 A3 96 98 9A AO 81 C4 C6 C8 CA CC CE 05 C3 BF A5 A2 B0 90 07 03 00 85 F0 3C 90 10 38 C0 79 05 80 A9 0A 60 00 6F 4C A5 29 A5 85 85 1A 3E 38 04 66 18 4F 85 95 B9
85 85 85 65 29 45 A9 A9 A9 A9 85 85 A9 A9 A9 A9 A9 A9 17 E8 E8 37 00 04 04 00 4C 03 3C 76 90 18 B0 E5 95 85 85 80 18 F8 69 85 08 F9 38 01 B4 B4 1B 85 85 29 49 3C C5 A5 90 95 34
9E 9F A0 3C 7F 33 90 95 75 80 AE B2 10 10 10 10 10 10 0A 86 86 C9 A0 A9 A9 E9 F9 4C A5 4A 68 69 58 05 B5 07 12 0B 85 18 01 6E A5 10 29 F0 00 A9 A9 11 05 03 FF 90 34 04 18 06 18
A5 A5 A5 85 65 29 85 85 85 85 85 85 85 85 85 85 85 85 0A BE C1 12 00 01 00 A5 10 F9 92 85 B5 10 B5 C9 A9 A9 A9 04 1C 65 85 A5 04 E8 01 2B 23 18 80 A9 A9 00 4A 5C 90 10 69 A5 95
35 36 33 AJ 3C 7F 95 97 99 9B AF 83 C5 C7 C9 C8 CO CF AA 86 86 90 B5 95 95 38 A5 10 29 3C 85 38 95 0C 18 64 00 A9 A5 6C 60 6F 29 E0 F0 A5 C6 85 80 81 2A 70 25 A4 58 04 08 35 E6
29 69 45 A5 85 65 A9 A9 A9 A9 85 A9 A9 A9 A9 A9 A9 A6 86 C0 C2 02 95 AO AO 29 92 A5 FE A2 D0 E5 18 B0 95 85 85 81 37 85 A5 69 FE 07 31 6B 68 BC 04 85 85 A2 91 37 85 14 95 29 86
7F 7F 34 34 A2 3C 85 70 90 00 B0 E2 E2 E2 E2 E2 E2 37 80 E8 E6 C6 C9 C9 E8 01 29 91 25 00 64 00 69 4C BO 08 15 85 0A 6C 6E 00 85 00 A5 F0 A9 A9 04 02 06 00 85 89 85 85 OE 03 44
• : 1E79 • : 1 E78 .:1E89 .: lE88 • : lE99 • : 1 E98 • : 1 EA9 • : 1 EA8 • : lE89 • : 1 E88 • : 1 EC9 · : 1 EC8 • : 1 E09 • : 1 E08 · : 1EE9 • : 1 EE8 • : lEF9 • : 1 EF8 • : 1 Fe9 • : 1 F138 • : 1 F113 · : 1 F 18 .:lF29 · : 1 F28 .:lF3e · : IF38 · : IF4e · : 1 F48 • : IF59 · : 1 F58 · : IF69 • : 1 F68 .: IF79 • : 1 F78 .: IF80 • : 1 F88 · : 1 F99 • : 1 F98 .: IFA0 .: IFA8 • : IFB9 • : 1 F88 .:1FC9 • : 1 FC8 · : IF09 · : 1 F08 · : 1FE13 • : IFE8 · : IFF13 · : 1 FF8 .14:!000 • : 2998 .:2919 • : 2018 .: 2929 .: 2028 • : 2939 • :2938 • :2949
85 29 15 98 85 85 lE 29 93 04 3C DO A4 913 95 38 913 95 85 5C A5 E6 A5 29 C9 DO C9 14 67 A6 38 913 29 95 E8 C13 68 89 3E AD 8F F0 85 96 A5 E6 85 F8 88 08 A'i' 10 A5 09 F9 29 C6 85 09
06 49 85 A9 12 93 E8 131 85 85 99 85 37 138 DO 79 98 05 66 C9 04 05 05 FE ec C9 513 85 B5 3C 29 B5 FC 3C A5 85 9A EA 91 01 18 FC 92 80 39 3A 713 5F 90 De 00 09 84 94 9A FE 1C 93 99
85 18 98 29 A9 A9 E9 De 69 3C 42 66 B5 85 66 12 85 B5 213 98 29 A5 C9 85 B0 F4 Be 04 DD E8 97 BC 85 95 38 3C A8 17 3C DC A9 4C AD 21 49 A2 99 85 27 E5 80 80 F9 A9 C6 85 09 A5 A5
67 A9 8A 80 99 14 97 133 A2 66 85 213 E5 DO 44 18 05 05 413 Fe 91 04 A9 D4 93 99 16 86 85 E9 C9 29 3C 8C 29 A9 89 85 C8 29 99 EC IF 00 3C 90 91 78 De A5 1C 17 9A 14 1B 92 96 10 11
85 1F 18 98 85 85 09 4C 91 3C 05 413 85 18 913 95 18 85 18 133 Fe 29 99 A2 4C 93 A5 3C 66 08 136 93 C8 E8 13F 69 E9 3F ce 19 85 lA 09 E6 09 86 De 99 C8 913 00 09 C6 85 09 A5 A5 F9 80
DE 85 65 04 15 lC 98 19 86 A6 85 18 44 F9 138 DO F9 67 E6 4C 134 91 136 131 44 4C 04 B5 213 09 00 A8 98 E9 De 85 17 A9 19 00 38 AD 85 38 134 68 85 1313 C8 80 A9 80 B4 BC 96 lC 93 94 95
85 97 98 A9 A9 4C A5 IF 5C 5C 67 A6 66 12 B5 66 91 B5 5C BD E6 F9 A5 B5 IF 44 3D D5 49 CF lA 85 29 98 21 3D 85 130 09 133 A5 lE 93 E6 85 A0 813 00 E8 113 FF 15 A5 A5 A5 F0 29 C6 04
66 A9 85 99 21 A6 38 A9 A5 66 85 5C 44 18 DO 44 18 OD A5 lE 05 13C D4 D5 B5 IF 13 85 18 A5 A2 BC 93 09 A9 A5 3E Bl F7 4C 38 09 A9 39 39 09 9D 85 E13 De 80 09 B4 1B 92 9A FE 10 A5
• : 2948 • :2959 · :2958 .: 2969 • : 2968 · : 2979 • : 2978 • : 21389 · :21388 .: 21399 · :21398 · : 213Ae · : 29A8 · : 2eB13 · :2eB8 .: 213ce · :29C8 · :29De • : 21308 · :2eEe • :29E8 .: 29Fe · :29F8 .:2190 • :2198 • : 211 13 · : 2118 .:2129 • : 2128 · : 2130 · : 2138 • : 2149 · : 2148 .: 2159 • : 2158 .: 2169 • : 2168 .: 2179 • : 21 78 • : 21 S9 • : 2188 • : 2199 · : 2198 • : 21A0 · :21A8 • : 21 B9 · : 21 B8 .:21C13 · :21C8 • : 21 De • :2108 · : 21 E9 • : 21 E8 • :.21F9 • :21F8 • : 2299 · : 2298 · : 2219 · : 2218
12 04 80 A5 97 96 04 80 A5 133 19 04 80 A5 138 38 33 39 6F 21 29 09 913 68 13B B9 A5 92 94 85 36 84 04 A5 98 29 98 95 133 12 11 A8 De 95 A9 BC 1313 14 De 38 131 A5 80 80 19 17 91 913 78
80 A5 90 95 04 80 A5 132 13F 04 80 A5 18 92 04 29 65 95 21 AD 9F 49 13B 99 A5 132 94 85 18 94 A5 De A5 9C 85 85 85 80 A9 De 00 68 AD 8D 90 90 De 85 E13 29 F9 DO 99 19 09 09 9A A5 C9
9C 14 04 80 A5 91 13A 04 80 A5 11 18 04 80 A5 133 35 33 A5 913 F9 A5 A5 132 9C 85 38 94 69 AD 04 2C 94 18 E5 18 96 14 131 AD A9 AA 1F 21 85 ~8
913 68 A5 01 IF 80 09 09 A9 A9 99 99 FF
04 80 A5 99 99 04 80 A5 113 9E 04 80 A5 134 94 AA 45 A5 B4 DC 46 4D
A5 96 16 04 80 A5 13F eo 04 80 A5 16 lA 04 80 AD 34 6B Fe 49 AS
85
'rC 38
85 18 9C E9 66 91 139 29 A5 18 69 A9
9C 69 66 131 4C C9 DC 131 D4 69 97 81 A~' 61 A9 28 93 A9 85 38 11 De FF 80 68 49 De EA D9 A2 9C 99 5F B5 137'A5 C8 C8 68 80 Fe 25 A9 1C 91 09 AD 19 99 95 99 80 FF 80 91 80 85 68 09 17
13 04 80 A5 9E 98 04 80 A5 9A 17 D4 80 A5 12 IB E5 De 93 FF 38 4C E9 66 131 4C C9 99 39 29 De 139 05 85 85 85 85 21 A9 29 19 78 EA 99 91 94 68 E8 113 A5 80 A5 09 99 10 1C 15 06 A5
80 A5 14 97 04 80 A5 139 13C 04 80 A5 17 93 04 04 36 133 4C 85 29 66 91 4C C9 913 19 98 B9 113 39 131 85 DO 92 95 11 8D 54 7F 00 AD EA 86 00 0A 10 E13 09 04 F8 05 29 01 09 09 09 78 68
13 15 04 80 A5 98 13B 04 80 A5 15 19 04 80 A5 65 65 4C 6F 40 91 4C C'r
99 E8 9B 99 A5 92 De A5 85 05 A9 A9 A9 A9 15 80 80 68 lE A9 68 B5 99 03 138 A5 29 5F 9A FE 80 80 A5 A2 85 3D
237
• :2229 • :2228 • :22313 • :2238 • :22413 • :2248 · :22513 • :2258 • :22613 • :2268 • :2279 • :2278 .: 22813 • :2288 .: 22913 · :2298 • : 22A9 · :22A8 .: 22813 · :2288 .: 22ce • :22C8 • :22D9 • :2208 .: 22E0
93 14 98 DC 99 85 C9 D9 913 De D6 14 A'1' 15 11 FF 68 C9 B9 80 99 99 65 1313 FF
14 85 14 A5 3D 4D 91 98 A9 D5 85 85 8D 93 013 8D 413 68 90 133 38 95 69 613 FF
D9 68 85 68 133 85 D9 A5 79 A2 D9 91 80 A9 29 19 89 '1'9 99 99 E5 013 C9 EA 00
139 D9 68 85 14 78 11 913 95 99 137 E8 14 F8 7F 09 9D 93 18 90 69 69 A9 1313 1313
A5 97 E8 99 F9 85 A5 1D 78 85 A5 E9 93 8D 80 68 013 99 65 90 C9 89 89 FF FF
68 A5 E9 A2 92 4C 4C 93 E8 85 91 97 A9 12 11 A8 38 90 6A 69 0E 95 93 FF FF
1D 68 98 99 A9 A5 C9 14 E9 Fe 3D D9 IF D9 013 68 E5 99 C9 89 99 99 99 99 09
93 3D D9 A5 91 4D E8 85 98 138 13 EC 8D AO A9 AA 6A 60 E8 95 133 18 95 913 013
.: 49913 • :41398 • : 4919 .:4918 .: 41320 • :4928 · :41339 · :4938 .: 49413 • :4948 .: 4959 • :4958 • :4969 • :41368 ;: 4979 • :4978 .: 4989 • :41388 • :4999 • :4998 • :49A9 • :4eA8 · :4989 • :4988 · :49C9 • :49C8 • :49D9 • :4908 .: 49E9 · :40E8 .: 49F0 • :49F8
213 29 EA 99 09 1313 1313 99 2C 29 AB 9A 99 139 99 99 29 813 AA 139 913 99 99 139 99 99 9C 99 09 99 139 09
913 813 C9 132 1313 1313 99 99 99 29 A8 92 99 913 99 99 99 CA C9 93 1313 99 99 99 99 813 98 99 99 90 99 99
1313 FA eA A9 913 1313 913 139 913 89 913 BC 99 99 99 99 913 8F 9A C2 99 1313 99 99 29 EB 9A 99 99 99 913 00
8C 89 138 1313 1313 1313 913 99 82 89 EA 139 99 99 99 99 8F 1313 A9 139 1313 913 99 913 9A C9 92 99 99 00 90 09
913 3A 29 139 99 913 99 99 99 29 92 99 99 99 99 99 1313 29 98 99 139 139 99 99 8E C0 98 99 99 99 90 90
1313 AE 9E 913 99 913 139 913 99 8E 9E 99 99 99 99 99 29 FA 98 28 99 99 99 139 89 B8 99 99 09 99 09 99
82 09 138 139 913 99 99 913 82 99 88 139 99 99 99 99 813 99 98 99 99 99 99 139 313 29 99 99 99 99 99 09
1313 99 9C 013 99 913 99 99 99 9A 92 99 99 99 .99 99 813 99 92 99 99 99 99 913 A8 2B F9 99 09 99 09 99
238
.:41139 • :4198 · : 41113 • : 4118 .: 4120 • :4128 • :41313 • : 4138 • : 41413 · : 4148 • : 41513 • : 4158 • : 41613 · : 4168 · : 41713 · : 4178 · : 4180 • : 4188 .:4190 · : 4198 • : 41Ae • :41A8 • : 4189 • : 41 B8 • : 41 ce • : 41 C8 .:4109 • :4108 • : 41 E9 • : 41 E8 • : 41 Fe • : 41 F8 • :421313 • :42138 • : 4219 · : 4218 • :4229 · :4228 • :42313 • :4238 • :42413 • :4248 • :4259 • :4258 • :4269 • :4268 • :42713 • :4278 • :4289 • :4288 • :4299 • :4298 • :42A0 • : 42A8 • :4289 • :4288 • :42C9 • :42C8 • :4209
131 A4 29 99 99
ea
99 90 13'7' 94 28 91 99 99 139 1313 813 99 26 913 913 98 139 1313 139 18 64 139 139 139 139 139 0A
913 99 99 913 99 99 913 9A 92 99 1313 99 99 913 913 A9 913 89 913 139 99 99 99 99 92 99
1313 813 eA 132 69 AA 9A 99 1313 92 48 99 ea 139 99 139 913 99 139 99 139 99 1313 99 913 913 99 99 90 913 99 139 913 613 lA 82 49 8A 9A 139 92 139 69 139 213 913 139 18 913 99 913 99 913 139 99 99 913 99 913 99 1313 139 139 99 1313 96 113 130 132 01 A9 96 013 132 68 1313 80 09 91 99 213 80 913 132 99 139 913 99 99 913 1313 1313 130 1313 1313 013 130 613 1313 132 29 8A 138 18 131 40 213 913 613 130 136 Ae ea 48 99 913 1313 913 90 130 139 1313 1313 1313 139 139 139 130 82 Ae Ae 28 1313 813 99 99 99 99 99 99 99 99 99 99 913 913 99 99 99 99 139 99 99 139 99 99 99 99 99 99 99 A9 A9 82 99 A9 99 99 99 913 1313 99 139 1313 139 1313 139 99 139 99 99 139 99 139 139 139 99 99 139 99 99 99 99 9A 98 99 139 A9 99 92 913 913 139 99 913 99 99 99 99 913 99 99 99 99 139 99 99 99 99 99 99 99 99 139 99 A9 9A 92 89 29 99 99 99 99 99 99
69 18 132 99 139 913 99 99 98 24 92 1313 139 139 99 99 28 0A
139 99 29 913 1313 1313 A4 98 139 139 139 1313 1313 139 0A
99 913 99 99 99 139 99 98 29 99 1313 99 99 99 1313 Ae 89 99 99 99 99 99 1313 98 A9 99
26 99 98 99 139 913 99 99 Ae 91 A0
99 99 99 99 139 24 49 913 0A 90 99 1313 00 136 132 113 138 913 1313 1313 1313 1313 1313 139 99 99 99 99 99 99 139 99 1313 139 99 139 913 92 99 99 99 99 99 99 139 213 99 99
49 913 139 913 913 99 139 99 41 139 139 813 99 99 139 99 139 91 139 49 131 99 1313 013 91 A0 1313 84 1313 913 139 99 A9 913 99 1313 99 99 99 139 28 99 139 1313 99 99 99 913 9A 99 139 913 99 99 99 99 A8 99 99
-
• :4208 • : 42E0 • :42E8 .: 42F0 • : 42F8 • : 4300 • : 4308 • : 43113 • :4318 • :4320 • :4328 • : 4330 • : 4338 • :43413 · :4348 • :4350 · : 4358 • :4360 • :4368 · :4370 .: 4378 • : 4380 · :4388 · : 4390 • :4398 • :43Ae • :43A8 · :43813 · :43B8 .: 43C0 · :43C8 • :43013 • : 4308 • :43Ea • :43E8 • :43Fa • :43F8 .: 44013 • :44138 · : 44113 · : 4418 • :4420 • :4428 .: 4430 · :4438 • :4440 • :4448 • :44513 • :4458 .: 44613 • :4468 • :44713 • :4478 .: 44813 • : 4488 • :4490 · : 4498 • : 44A0 • :44A8
00 00 00 130 00 08 00 AB 2A 80 0F 132 00 138 00 A0 2A 013 3E 80 1313 132 00 AA 1313 313 00 130 00 08 013 AA 132 00 130 130 100 28 1313 100 09 100 88 23 C0 28 130 00 132 813 28 138 213 138 109 89 130 00 113
00 00 00 00 00 00 B0 00 00 00 00 00 2E A8 00 AA AA 80 02 EA 00 92 132 80 013 00 130 130 2E 013 00 AA AF 00 02 EA 00 20 eE 1313 013 138 1313 013 2B AB 80 0A BA C0 813 1313 1313 013 130 013 00 00 013 00 2E AF 813 AB EA 813 02 133 813 138 1313 1313 010 013 100 1313 133 1013 00 101 210 1010 20 80 1010 22 2C 00 2E 20 1313 1313 C1 1313 00 03 132 1313 eA ec 80 ec 213 113 eA 80 1313 1313 B1 89 130 00 80 013 00 70 8C 1313
00 00 00 00 00 0C 00 A8 02 80 0B 02 00 138 00 AC 03 130 0C 013 013 02 ce EA 0A 08 00 00 00 0A 130 AA 132 00 0a 013 1013 2A 013 00 08 40 102 22 80 AO 013 1010 132 80 28 138 12 3E 1010 40 013 20 213
00 00 00 00 00 00 00 00 00 013 00 00 2A A8 C0 AA AA 80 02 EF 00 92 0A 80 00 00 00 00 2A 80 00 AA AA 00 0A EA 1313 213 02 00 00 138 0B 1313 2A AA 80 132 B8 F0 1313 00 130 130 130 00 130 00 2C 00 AA AA 813 2B EB 130 08 133 813 2a 1313 013 1310 1313 1310 1010 132 1310 100 eA 210 00 30 80 100 31 20 20 08 0A 130 1313 132 1313 1010 102 133 80 08 08 813 138 213 20 132 80 1313 1310 80 813 00 00 C0 1313 00 213 C8 1313
00 00 00 00 0B B0 00 00 0B 00 2E 28 0B AA AA 80 03 EA 80 02 0a C0 0A 28 0B 00 2A 00 00 AE AC 00 03 EA 00 es 0C 1313 130 132 0[1 130 138 7B 813 2A FA ce 20 00 132 00 00 130 00 00 00 00 2A AC 013 AA EA 80 132 03 813 08 02 ea 130 1313 1013 1313 42 1313 1013 02 130 1013 18 AC 80 23 102 1013 21 20 013 013 82 1313 1313 132 00 010 01 08 70 08 313 20 04 10 134 100 22 90 010 GO 80 00 1310 810 88 00 213 81
• : 4480 00 • :44B8 02 • : 44C0 38 • : 44C8 00 • : 4400 00 • : 4408 02 • : 44E0 00 • :44E8 08 • : 44F0 03 • : 44F8 22 • : 4500 00 • :4508 00 • : 451 0 813 • :4518 32 • :4520 130 • :4528 20 • : 4530 20 · :4538 00 • :4540 013 • : 4548 00 .: 4550 80 • :4558 32 • :4560 013 · :4568 213 .: 4570 08 · :4578 130 .: 4580 013 · :4588 00 • : 4590 '80 • :4598 eE • :45Ae 00 • :45A8 80 • :45Be 138 • :45B8 013 • :45ce a0 · :45C8 00 • :4500 80 • :4508 :32 • : 45Ee 00 · :45E8 813 · : 45F~3 02 • :45FS 810 · :461013 1313 · :460S 00 • : 4610 F0 · : 4618 133 · : 4':,213 013 · :4628 100 • : 46313 00 • :4638 00 .: 4640 013 · :4648 013 • :46513 5C · :4658 2C • : 46610 80 · :4668 00 • :4670 013 .:4678 00 • : 4680 02
22 00 B0 08 00 00 02 C0 08 02 50 00 00 8C 02 00 08 20 50 00 013 8C 32 1313 138 0A
50 00 130 813 132 013 213 00 50 1313 013 8C 32 00 20 08 130 00 00 5C 1313 1310 1313 1313 130 eA 813 57 08 1313 08 013 AA
02 2A 00 00 08 00 04 02 41 A0 00 C0 eE 00 80 08 013 0A 00 713 133 1313 80 132 130 013 00 C0 02 013 BC 02 00 28
00 ce 03 ~3 a 80 010 00 02 00 013 0F 013 130 00 00 1313 1313 C8 20 810 AA 013 813 138 1313
00 03 A8 00 00 02 80 0C 02 23 00 00 80 32 00 08 20 00 1313 013 Be 32 130 213 A0 00 00 00 813 0E 013 80 213 130 0a 1010 80 32 013 80 a2 00 00
32 00 00 08 00 02 01 80 28 00 70 00 0a 83 02 00 08 00 50 00 013 8C 02 130 0S 013 70 00 00 80 132 130 213 0a 70 1010 00 83 02 010 0S
~30
~33
70 133 130 130 00 1313 130 010 5E 80 00 013 1313 1013 132
ea FC 1313 00 130 1313 013 23 813 7C 02 130 813 00 FE
02
1313
02 04 00 00 08 00 08 02 22 80 00 C0 32 C0 80 08 00 1313 00 C0 eE 013 813 02 130 00 00 C0 03 130 80 132 00 a0 0a ce 00 ce 810 00 013 00 130 130 00 00 1313 1313 130 100 1313 FA BD 80 813 013 1313 013 80
00 00 24 00 00 03 80 08 02 04 00 00 B0 32 013 08 80 00 130 013 Be 32 013 138 80 1313 00 00 80 eF 138 213 20 1313 0a 1013 Be :32 1010 A0
a8 010 00 00 7C 1313 130 100 1313 1013 02 1313 1F 2F 1313 00 130 1313 0A
23 00 00 0C 00 02 02 80 10 00 70 132 00 80 02 B0 138 130 70 132 1313 83 132 1313 08 00 70 00 00 80 132 130 2a 1313 7a 1313 013 813 02 130 as 1310 00 133 00 ce 013 130 00 00 Ae 20 80 F3 130 130 130 138 F3
239
• :4688 · :4690 · :4698 · : 46A0 · :46A8 • :4680 · :4688 .: 46C0 .:46C8 .:4600 .:4608 .:46E0 .:46E8 .:46F0 .:46F8 · :4700 .:4708 .:4710 .:4718 .:4720 .:4728 .:4730 .:4738 .:4740 .:4748 .:4750 .:4758 .:4760 .:4768 .:4770 .:4778 .:4780 .:4788 .:4790 .:4798 .:47A0 .:47A8 .:4780 .:4788 .:47C0 .:47C8 .:4700 .:4708 .:47E0 .:47E8 .:47F0 .:47F8 .:4800 .:4808 .:4810 .:4818 .: 4820 .:4828 · :4830 .:4838 .:4840 .:4848 .: 4850 .:4858
240
80 14 80 80 FE 00 00 02 A0 FE 2A A0 AB 0A 80 18 00 00 00 00 00 00 00 28 00 00 00 00 00 00 00 27 00 00 00 00 00 00 00 28 00 00 00 00 00 00 00 00 07 00 00 87 FF 1F FF 80 00 F1 FF
28 80 55 2A 00 80 00 A8 2A A0 OE 2B A0 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1F 07 01 F8 FF FF 00 FO 00 FF
9E 80 38 OE 0A 00 00 00 AA A3 A0 3E 2A A0 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 FO FF 07 FF FF 00 C0 7F E0
A0 57 2F 00 E8 00 00 02 A0 FF 2A 80 AA 00 80 A5 00 00 00 00 00 00 00 6A 00 00 00 00 00 00 00 5A 00 00 00 00 00 00 00 A5 00 00 00 00 00 00 00 00 0F 00 00 EF FF 3F FF C0 00 F8 FF
2F E0 17 0A 00 00 00 2A AA A0 F6 2B A0 8A 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7F 6F 03 00 FF FF 00 DF 80 FF
50 85 E0 OF 02 00 00 80 FA 28 A0 CF 0A A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 88 FF 0F FF FF 00 E0 FF F0
80 45 23 80 A0 00 00 0A 80 02 0A 00 AB 00 00 28 09 00 09 00 00 00 00 18 00 00 00 00 00 00 00 28 00 00 00 00 00 00 00 27 00 00 00 00 00 00 00 00 1F 03 00 F7 FF 7F FF E8 00 FF FF
29 E0 03 08 00 00 00 AA 2A A0 9F 22 A0 AA 80 00 80 90 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 0e 00 00 00 00 7E FF 03 FE FF 00 80 BF C0 FF
• :4860 · :4868 • :4870 · :4878 • :4880 · :4888 • :4890 • :4898 • :48A0 • :48A8 • :48B0 • :48B8 • : 48C0 • :48C8 • :4800 • :4808 • :48E0 • :48E8 • : 48F0 • :48F8 • : 4900 • :4908 • :4910 .:4918 · :4920 · :4928 • :4930 • :4938 • :4940 · :4948 • :4950 • :4958 · :4960 • :4968 · :4970 · :4978 • :4980 • :4988 · :4990 · :4998 • : 49A0 · : 49A8 • :4980 · :4988 · :49C0 · :49C8 • :4900 · :4908 · :49E0 · :49E8 · :49F0 · :49F8 · :4A00 · :4A08 • :4A10 · :4A18 • :4A20 · :4A28 · :4A30
F8 FF 7F FF 00 00 00 00 FE FF FF FF 10 00 80 FF 00 FF F7 FE 18 00 00 F3 00 00 00 00 00 00 FF 1F E0 FF FF F8 04 00 C0 F7 00 00 00 00 18 00 00 08 00 00 00 00 0C 00 00 A8 00 00 00
FF FE FF EF 00 00 23 01 00 FF FF 8F 00 FE 00 F0 7F 00 FF FO 09 08 00 E0 3E 00 00 00 10 03 00 FF 3F E0 FF FF 00 1F 00 80 00 00 00 00 00 3C 00 00 00 00 00 00 00 3C 00 00 00 00 00
FF FF FF FF 00 00 00 F8 4F E3 FF FF 00 00 FF 00 FC EF E0 FF 00 00 0E 00 00 00 00 00 00 FC 0F C0 FF 7F F8 FF 00 80 6F 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 3C 00 00 00 00
F8 FF 8F FF 00 00 00 00 FF FF EF FF 38 00 C0 FF 00 FF F8 FF 98 00 00 75 00 00 00 00 00 00 FF 1F E0 FF FF FC 0E 00 E0 EF 00 00 00 00 08 00 00 18 00 00 00 00 08 00 00 58 00 00 00
FF FF FF F7 00 00 77
03 00 FF FF 7F 00 FF 00 F8 BF 80 FF FE 00 0E 00 C0 00 00 00 00 78 07 00 FF 3F E0 FF FF 00 3F 00 F0 00 00 00 00 00 C2 00 00 00 00 00 00 00 C2 00 00 00 00 00
FF FF FF FF 00 00 00 FO FF F7 FF FF 00 00 FF 00 FE EF F8 FF 00 00 FF 00 00 00 00 00 00 FE 0F C0 FF FF F8 FF 00 80 E8 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 18 00 00 00 00
FC FF OF FF 00 01 00 00 FF FF OF FF 7C 00 E0 FF 00 FF FB FF 08 00 F0 73 00 00 00 00 00 00 FF 3F E0 FF FF FC 0F 00 70 FF 00 00 00 00. 18 00 00 00 00 00 00 00 18 00 00 00 00 00 00
FF FF FF 00 00 00 FF 07 41 FF FF 00 00 FF 00 F8 OF C0 FF 90 00 0E 00 00 00 00 00 00 F8 07 80 FF 7F F0 FF 00 00 37 00 F0 00 00 00 00 00 C2 00 00 00 00 00 00 00 C2 00 00 00 00 00
• :4A38 • :4A40 • :4A48 • :4A5e • :4A58 • :4A60 • :4A68 • :4A7e • :4A78 • :4A8e • :4A88 • :4Age • :4A98 • :4AA0 • :4AA8 • :4A8e • :4A88 • :4Ace • :4AC8 • :4ADe • :4AD8 • :4AEe • :4AE8 • :4AF0 • :4AF8 • :4899 • :4Be8 • : 4Ble • :4818
00 59 1313 130 013 1313 1313 013 1313 ec 00 130 1313 1313 013 00 013 ec 013 1313 1313 130 1313 013 013 18 09 1313 139
00 013 3E 130 013 013 130 1313 1313 013 7F 1313 130 013 00 130 00 1313 7F 1313 913 1313 1313 130 1313 00 3E 08 130
00 1313 eo 49 00 130 013 130 00 1313 00
68 130 013 130 013 00 1313 130 2A 1313 1313 1313 013 013 99 09 1313 1313
00 49 1313 00 013 1313 1313 130 130 68 130 1313 00 013 1313 013 013 2A 09 139 1313 1313 1313 1313 1313 138 1313 1313 1313
00 1313 2A 00 130 130 1313 013 1313 1313 49 1313 013 130 013 013 013 013 2A 1313 1313 1313 1313 130 1313 130 2A 14 130
00 00 1313 14 013 130 013 1313 1313 013 1313 14 00 013 130 130 00 013 1313 14 1313 1313 913 00 1313 013 1313 130 09
00 2A 1313 1313 1313 130 1313 00 1313 2A 00 130 00 013 013 013 013 2A 139 139 1313 1313 1313 013 09 2A 08 1313 99
130 1313 49 00 1313 1313 1313 013 130 013 2A 013 1313 130 1313 1313 00 130 2A 913 913 1313 130 1313 130 00 130 130 1313
• :48213 • :4828 • :48313 • :4838 • :4840 • :4848 • :48513 • :4858 • :48613 • :4868 • :48713 • :4878 • :4880 • :4888 • :4890 • :4898 • :48Ae • : 48A8 • :48813 • :4888 • :48ce • :48C8 • :48De • :48D8 • :48Ee • :4BE8 • :4BFe • :48F8 • :4Cge
1313 1313 1313 1313 0C 00
013 08 1313 013 1313 00 0C 00 130 138 013 00 1313 90 131 1313 Ee 3F 1313 1313 1313 00 FF
1313 1313 1313 1313 00 7F 013 130 130 013 00
013 00 7F 130 1313 130 1313 1313 00 1313 3F 1313 813 1313 1313 130 013 FF
1313 1313 1313 00 00 130 68 130 1313 00 130 00 130 130 68 1313 1313 00 1313 09 013 Ee 7F 1313 1313 013 1313 013 013
1313 1313 1313 00 68 013 013 3C 1313 00 1313 00 68 00 013 3C 013 00 1313 013 133 913 Ee 137 1313 130 1313 013 0(;
1313 1313 1313 1313 1313·1313 00 00 1313 130 49 1313 1313 14 130 00 1313 00 130 130 1313 1313 013 00 1313 1313 49 013 00 14 1313 00 130 1313 013 013 1313 1313 130 130 813 1313 FF Fe eo 7F 813 1313 1313 130 013 130 1313 1313 1313 1313 FF FF
1313 1313 1313 00 2A 130 130 1313 013 1313 013 00 2A 00 00 00 1313 130 013 09 IF 139 ce 133 1313 00 130 1313 132
1313 1313 1313 00 130 2A 013 013 013 013 00 1313 013 2A 00 130 013 00 1313 013 ce FF 1313 1313 1313 00 130 00 1313
listing C-26: The BOGDEF Source Code 191313 113113 19213 11330 113413 113513 113613 113713 113813 19913 11013 1110 1120 11313 11413 11513 1160 11713 1180 11';>13 1200 12113 12213 12313 12413
iPUT"dJe:80GDEF" iGET"CAST" i ;BOG HOP RAM DEFINITIONS ;BOGDEF i ;LOCATIONS 13 & 1 ARE HARDWARE ISO USABLE RAM STARTS AT $02 $132 *SlCORG = DS 1
S2CORG S3CORG S1FRLO SlFRHI S2FRLO S2FRHI S3FRLO S3FRHI SlPWLO SlPWHI S2PI"'LO S2PWHI S3PWLO 1250 83PWHI
DS DS DS D'-· .::> D'~ .::>
DS DS DS DS DC
-'
D'~
1 1 1 1 1 1 1 1 1 1 1 1
;SID CHIP SHADOW ;REGISTERS
'" DS DC-' 1 DS 1 241
12613 12713 12813 12913 131313 13113 1329 13313 1349 1359 1369 1379 1389 1399 1499 1419 1429 1439 1449 1459 1469 1479 1489 1499 15913 1519 1529 1539 1549 1559 1569 1579 1589 1599 1699 1619 1629 1639 1649 16513 16613 1679 1689 1699 1799 1719 17213 1739 17413 17513 17613 17713 17813 17913 181313 18113 18213 18313 18413
242
SlATDC S2ATDC S3Al DC SlSURL S2SURL S3SURL FILLO FILHI MMOD RFIL
DS DS DS DS DS DS DS DS DS DS
SNDTMl SNDTM2 SNDTM3 i SRC DST SCRPT SCRDST
DS 1 DS 1 DS 1
iSOFTWARE TIMERS
DS DS DS DS
2 2 2 2
iPOINTERS FOR DATA jMOVEMENT
DS DS DS DS DS DS DS DS DS DS DS DS
2 2 2 2 2 2 1 1 1 1 1 1
jPOINTERS TO NOTES
DS DS DS DS
1 1 1 1
jSYSTEM TIMING REGISTERS
BUF BUFl IBUF MBUF LPCNTl LPCNT2 LPCNT3 LPCNT4
DS DS DS DS DS DS DS DS
8 8 8 8 1 1 1 1
jTEMPORARY DATA BUFFERS
i COLOR POINT CTEMP GBASE YPNT XPNT
DS DS DS DS DS DS
2 1 2 1 1
• HMSB
DS
i9'TH BIT REGISTER
HORNe
DS 1
jHORIZONTAL INCREMENT
1 1 1 1 1 1 1 1 1 1
iEND OF SHADOWS
;
NOTPTl NOTPT2 NOTPT3 NOTTMl NOTTM2 NOTTM3 OPTION RANDl RAND2 RAND3 RAND4 LEVEL ;
SCREEN RAN SEC SECOND ENABLE ;
jPOINTERS TO NOTE TIMES
jRANDOM NUMBER REGISTERS
jCURRENT LEVEL OF PLAY
i LOOP COUNTERS
;THESE REGISTERS ARE ;USED BY THE PLOTTING jROUTINE ;Y-COORDINATE ;X-COORDINATE
18513 186(1 187(1 1:380 18913 1 '?e 13 1910 1920 19313 19413 1950 1'7'60 19713 1980 1'7'90 2000 21310 21320 213313 2040 20513 213 60 2070 2080 2090 21130 21113 21213 2130 21413 21513 21613 21713 21813 21913 221313 22113 22213 22313 22413 2250 22613 22713 2289 22913 231313 23113 23213 23313 23413 2359 2369
VERNC
OS 1
;VERT! CAL INCREMENT
L I IviES SCORE t"'10UNTI) MOUNTH MOUNTP MOUNTC
DS OS OS OS OS OS
;NUMBER OF LIVES LEFT ;SCORE COUNTER ;t10UNTAIN VERTI CAL ,MOUNTAIN HORIZONTAL ; SPR ITE PO INTERS ;MOUNTAIN COLORS
1 4 8 8 8 8
MNTMSB OS
;EXTRA MSB--MOUNTAIN
l,JHOLIV OS TMSCOL OS TMBCOL OS
;WHICH BAD GUY LEFT ;TEMP SSCOL ;TEMP SBCOL
PLAYH MEANH
OS 1 OS 7
;PLAYER HORIZONTAL ;BAO GUY HORIZONTAL
PLAYI) MEAN~}
OS OS 7
;PLAYER VERTICAL ;BAO GUY VERTICAL
PLAYC MEANC
OS 1 OS 7
;PLAYER COLOR ;BAD GUY COLOR
PLAYD t1EANO ; PLAYE MEANE ; PLAYP MEANP ; MEANMV
OS 1 OS 7
;PLAYER DIRECTION ;BAO GUY DIRECTION
OS 1 OS 7
;PLAYER EXPLOSION ;BAD GUY EXPLOSION
OS OS 7
;PLAYER SPRITE POINT ;BAD GUY POINTER
OS $113
;MOVEMENT CHART
OS
; SHOTS IN FLI GHT
OS 8 OS 8 OS 8
;SHOT HORIZONTAL ;SHOT VERTICAL ;SHOT DIRECTION
OS OS OS
;PLAYER SPEED ;BAD GUY SPEED-HORIZ ;BAD GUY SPEED-VERT
; SHOTS ; SHOTSH SHOTSV SHOTSO ; PLAYSP BAOSPH BAOSPV
.END
Listing C-27: The BOGDAT Source Code
1131313 113113 11320 11339
PUT"0l0:BOGDAT" LOAD"ASM" ,8 THIS IS BOGOAT--THE DATA FILE
243
1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 14910 15100 1510 1520 1530 15410 1550 15610 1570 1580 1590 16100 1610 16210
244
;FOR BOG HOP BITPOS .BYTE S01,S02,S04,S08,SI0,S20,S40,S80 BITAND .BYTE SFE,$FD,·$FB,SF7,SEF ,SDF ,SBF ,S7F ANDPOS .BYTE SFE,SFD,SFB,SF7,SEF,SDF,SBF,S7F TYPELK .BYTE S00,S04,S08,S0C,$10,S14
;MOVEMENT PATTERNS FOR DIFFERENT ;TYPES OF CHARACTERS BEEI
.BYTE · BYTE .BYTE .BYTE .BYTE
BEE2
.BYTE 4,6,6,6,6,6,6,6,2,6,2,6,2,$A,2,$A,$A,$A,8,$A,8,$A .BYTE 8,9,8,9,9,1,9,1,5,1,5,5,1,1,5,4,6,6,6 .BYTE $00,$00,$00
BEE3
.BYTE 6,6,6,4,4,4,5,5,5,1,5,5,1,1,9,9,9,8,9,8,8,$A,8 .BYTE $A,8,$A,$A,2,$A,2,2,6,6,2,6,6,4,6,4 .BYTE $00,$00,$00
BEE4
.BYTE · BYTE .BYTE · BYTE • BYTE.
5,5,8,8,$A,$A,2,2,6,6,4,4,4,6,6,2,$A,$A,$A,8,8,9 1,9, 1 ,5,5,5,1 ,5,4,5,5, 1 , 'r , 8 , $A, 2,6,2 5,5,8,8,$A,$A,2,2,6,6,4,4,4,6,6,2,$A,$A,$A,8,8,9 1,9,1,5,5,5,1,5,4,5,5,1,9,8, $A, 2,6,2 $00,$00,$00
.BYTE .BYTE .BYTE .BYTE
4,6,4,4,6,4,4,6,4,4,5,4,4,5,5,4,5,5,5,1,5,5,1,5 5,4,4,6,6,2,6,2,6,6,4,6,6,4,6,4 5,4,4,6,6,2,6,2,6,6,4,6,6,4,6,4 $00,$00t$00
.BYTE .BYTE · BYTE .BYTE
4,6,4,6,4,6,4,6,4,6,4,6,6,2,6,2,6,2,6,2,5,1,5,1 5,1,5,1,5,4,5,4,5,4,5,4,5,4,5,4 5, 1 ,5, 1 ,5,4,5,4,5,4,5,4 $00,$00,$00
; BIRDI
; BIRD2
4,4,6,2,SA,9,5,4,4,6,6,4,5,5,1 ,9,8,$A,2,6,6,6,4,4 5,5,1,5, 'r, 8,9,8, ·$A, SA, 2 ,6,6,4,6,2 4,4,6,2,$A,9,5,4,4,6,6,4,5,5,1,9,8,SA,2,6,6,6,4,4 5,5,1,5,9,8,9,8 ,$A ,$A, 2,6,6,4,6,2 $00,$00,$00
j
BIRD3
· BYTE 4,5,4,5,5,5,5, 1 ,5, 1 ,5, 1 ,5, 1 ,5, 1 ,5, 1 ,5, 1 ,4,6,6,2 .BYTE 6,2,2,6,2,2,6,4,5,5,4,6,6,4,5,5 .BYTE $00,$00,$00
j
BIRD4
; BAT 1
• BYTE 4, 5 , 5 , 1 , 1 ,5 , 1 , 5 , 4 , 6 , 2 , 6 , 2 , 6 , 6 , 4 , 4 , 5 , 5 , 1 , 1 , 6 , 6 , 4 .BYTE 6,6,2,2,6,4,5,5,5,4,4,6,6,6,2,6 .BYTE $00,$00,$00
.BYTE 4,5,4,6,4,5,4,5,1,5,1,4,1,5,4,5,2,5,4,6,4,6,2,6 .BYTE 4,6,2,6,2,6,4,6,4,6,4,5,1,5,4,6
1639 1649 1659 1669 1679 1689 1699 1799 1719 17213 17313 1749 1759 1769 1779 1789 17913· 18139 18113 18213 1839 1849 1859 1869 1879 1889 1899 1990 1919 1929 1930 1949 1959 1969 1979 1989 1999 201313 21310 213.213 29313 213413 2950 2969 2970 2980 2999 2199 2119 2129 2139 2149 2159 2169 2179 2189 2199 2299 2219
• BYTE $99,$99,$99 j BAT 2 j BAT3
• BYTE 1,5,1,1,2,1,1,4,1,5,8,1,5,4,6,4,6,2,8,2,4,2,1,6 • BYTE 2,6,4,2,5,1,4,8,1,5,4,6,6,2,6,4 . BYTE $99,$99,$99 . BYTE 2,5,2,6,2,$A,9,$A,2,1,2,$A,4,$A,2,8,1,8,2,9,8,9 . BYTE 4,1,9,1,5,9,1,4,5,1,4,6,5,4,1,2,4,6 • BYTE $99,$99,$90
BAT4
. BYTE 4,5,4,1,5,2,5,1,9,5,1,9,8,$A,9,5,$A,8,$A,2,$A,8,2,6 . BYTE 4,1,5,9,1,5,4,6,4,6,2,8,2,6,4,5 . BYTE $99,$99,$99
FROGl
. BYTE 6,4,6,4,3,3,3,6,2,6,2,6,2,6,3 . BYTE 3,3,3,5,5,5,5,5,3,3,3,3,4,4,4,3,3,3,5,1,1,5,3,3,3 • BYTE $99,$99,$99
FROG2
. BYTE 4,6,4,4,6,4,4,6,3,3,3,3,5,5,5,5,5,3,3,3,3 . BYTE 5,1,1,5,1,1,5,1,1,3,3,3,4,4,4,3,3,3,3,3 . BYTE $99,$99,$09
FROG3
. BYTE 1,1,1,3,3,3,3,3,$A,$A,$A,$A,$A,$A,$A • BYTE 3,3,3,8,9,8,9,8,9,8,9,3,3,3,$A,2,2,$A,2,2,$A,3,3,3,3 . BYTE $90,$09,$09
j FROG4
SNAKEl
. BYTE 8,8,8,8,3,3,3,9,9,9,3,3,3,$A,$A,2,$A,$A,3,3,3j3 . BYTE 2,2,2,2,3,3,3,5,5,5,3,3,3,3,3 . BYTE $90,$90,$09
. BYTE 6,6,6,6,6,5,1,5,5,1,5,5,1,5,6,6,5,5,5,5,2,6,2,6 . BYTE 2,6,2,5,5,2,6,6,1,5,1,5,1,5,6,6 . BYTE $99,$90,$09
j SNAKE2 . BYTE 6,2,6,2,5,5,5,6,6,6,6,6,5,1,5,1,5,1,6,6,5,5 . BYTE 1,5,6,2,6,6,2,6,6,2,6,6,2,5,5,5 . BYTE $130,$1313,$139
; jDIFFERENT CHARACTERS HAVE ;DIFFERENT MOVEMENT PATTERNS. jTHE FOLLOWING ADDRESS CHARTS ;ALLOW THE PROPER MOVEMENT TO BE jSELECTED FOR THE CHARACTER. j .WORD BEE1,BEE2,BEE3,BEE4 BEELK .WORD $9999,$9999 ; BIRDLK .WORD BIRD1,BIRD2,BIRD3,BIRD4 .WORD $9999,$9999 j BATLK .WORD BAT1,BAT2,BAT3,BAT4 .WORD $9999,$9999
245
2220 2230 2240 2250 2260 2270 2280 2290 2300 2310 2320 2330 2340 2350 2360 2370 2380 2390 240€1 2410 2420 2430 24413 2450 2460 2470 2480 2490 2513 13 2510 25213 25313 25413 2550 2560 25713 25813 2590 2600 2610 26213 26313 2640 2650 26613 2670 2680 26913 27013 27113 27213 27313 27413 2750 27613 2770 27813 27913 281313
246
; FROGLK .WORD .WORD i SNAI
FROG1,FROG2,FROG3,FROG4 $0000,$0000 SNAKE1, SNAKE2, SNAKE2, SNAKEI $0000,$0000 BEELK,BIRDLK,BATLK,FROGLK,SNAKLK
iBY CHANGING THE PATTERN LOOKUP ;TABLES, THE CHARACTER WILL it-10VE DIFFERENTLY. iBADSEQ IS THE SEQUENCE IN WHICH ;THE DIFFERENT CHARACTERS WILL ;APPEAR ON THE SCREEN. BADSEQ .BYTE 0,1,2,3,4,1,0,4,3,2,1,3,2,0,4,3,2,1,0,0 ; : THE FOllO!;') I NG lOOKUP CHART IS iUSED TO FIND THE BASE ADDRESS ;OF THE CHARACTER SET FOR THE ;NUMBERS. THIS SET IS FOR USE IN ;A HIGH RESOLUTION MULTI-COLOR ; t10DE . ;THE NUMBER SET IS IN THE FILE-i"lKUP"--WHICH MUST BE lOADED ;PRIOR TO RUNNING THE PROGRAM. NUMBER . WORD ZERO, ONE, TWO, THREE, FOUR, F I t.')E , S I X .WORD SEVEN,EIGHT,NINE,NUL,$0000 i iTHE FOLLOWING TWO CHARTS SET THE jVERTICAL AND HORIZONTAL SPEEDS jOF THE CHARACTERS DEPENDING iON THE LEVEL OF PLAY j SPEEDH .BYTE 1,1,1,1,1,1,2,2,2,3,3,4,3,4,3,5,6 SPEEDV . BYTE 1,2, 1 , 1 , 1 , 1 ,2,3,2, 2,3,5, 2,5,4,6,7 i iTHE FOLLOWING CHART IS USED TO jDETERMINE HOW OFTEN THE BAD GUYS ;WILL FIRE. A VALUE OF ZERO WILL iNOT LET ANY BAD GUYS SHOOT FIRPOW .BYTE 1,2,4,4,5,8,8,6,6,5,8,6,9,6,6,8,9 j SHTDR
.BYTE $134,$136,$135,$134
28113 COLK 28213 POR 28313 28413
.BYTE $ee,$55,$AA,$FF .BYTE $Ce,$3e,.eC,.e3 .END
Listing C-28: The XXPLOT Subroutine Source Code
Ieee Ie Ie 113213 113313 113413 113513 113613 113713 113813 113913 111313 11113 11213 11313 11413 11513 11613 11713 11813 11913 121313 12113 12213 12313 12413 12513 12613 12713 12813 12913 131313 13113 13213 13313 13413 13513 13613 13713 13813 13913 141313 14113 14213 14313 14413 14513 14613 14713 14813
;PUT"~e:xxPLoT
; YIN YPNT ;X/2 IN XPNT ;COLOR IN COLOR ;GRAPHICS BASE ADDRESS IN GBASE ; !EXCLUSIVE OR'S A POINT ; ;SINCE THE INPUT TO THIS ROUTINE ;WILL BE SPRITE POSITIONS, THE ;XPNT AND YPNT REGISTERS WILL lBE ADJUSTED FOR THE SPRITE OFFSET ; >< LDA )(PNT SEC SBC #$eE ;HORIZONTAL OFFSET/2 Ct1P #.A0 BCS RTR1 LSR A U,:R A
TAY LDA CLC ADC STA LDA ADC STA LDA CLC ADC STA LDA ADC STA
GBASE VLKUPL,X POINT GBASE+l VLKUPH,X POINT+l POINT HLKUPL,Y POINT POINT+l HLKUPH,Y POINT+l
LDA XPNT AND #$133
;STRIP BIT POS
TA~"<
LDY'#$ee LDA (POINT),Y ;AND PAND,X ;CLEAR BIT
247
1490 1500 1510 1520 1530 1540 1550 1560 RTR1 1570 1580 1590
STA LDY LDA AND EOR LDY STA RTS
CTEMP COLOR COLK,Y POR,X CTEt1P #$00 (POIt'IT) ,Y
.END
Listing C-29: The LOOKUP Data File .:1000 .: 1008 · : 1010 • : 1018 · : 1020 .:1028 .: 1030 .:1038 .:1040 .:1048 · : 1050 .: 1058 .: 1060 .:1068 .: 1070 .:1078 .: 1080 .:1088 .: 1090 · : 1098 · : 10A0 .:10A8 .: 1080 .:1088 .: 10C0 · : 10C8 .: 1000 · : 1008 .: 10E0 · : 10E8 .: 10F0 .:10F8 · : 1100 · : 1108 • : 1110 • : 1118 · : 1120 · : 1128 · : 1130 .: 1138 .:1140 • : 1148 · : 1150 · : 1158 · : 1160
248
28 52 38 45 28 4F 31 45 53 3F 00 3F 00 FF C0 3F 00 03 00 3F 00 3F 00 30 00 3F 00 FC 00 00 00 F0 30 70 04 06 07 03 43 83 C3 03 43 83 C3
43 49 34 4E 50 52 39 56 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 58 98 04 06 07 04 44 84 C4 04 44 84 C4
29 47 2C 20 29 40 38 45 3C 00 0C 00 3F 00 FF C0 03 00 FF C0 0F C0 FF C0 3F 00 3F 00 00 00 00 40 80 C0 05 06 07 05 45 85 C5 05 45 85 C5
20 48 20 42 20 41 34 4E C0 C0 3C 00 C0 C0 00 C0 0F 00 C0 00 30 00 00 C0 C0 C0 C0 C0 00 00 28 68 A8 04 05 06 07 06 46 86 C6 06 46 86 C6
43 54 53 52 50 4E 2C 20 C3 C0 0C 00 00 C0 03 00 33 00 FF 00 C0 00 03 00 C0 C0 C0 C0 00 00 50 90 00 04 05 06 07 07 47 87 C7 07 47 87 C7
4F 20 54 45 45 43 20 42 CC C0 0C 00 0F 00 0F 00 C3 00 00 C0 FF 00 0C 00 3F 00 3F C0 00 00 78 88 F8 04 05 06 00 40 80 C0 00 40 80 C0 00
50 31 45 53 52 45 53 52 F0 C0 0C 00 30 00 00 C0 FF C0 00 C0 C0 C0 30 00 C0 C0 00 C0 00 00 A0 E0 20 04 05 06 01 41 81 Cl 01 41 81 Cl 01
59 39 56 53 46 20 54 45 C0 C0 0C 00 C0 00 C0 C0 03 00 C0 C0 C0 C0 30 00 C0 C0 03 00 00 00 C8 08 48 04 05 06 02 42 82 C2 02 42 82 C2 02
· : 1168 · : 1170 • : 1178 • : 1180 • :"1188 • : 1190 · : 1198 .: l1A0 · :l1A8 • : 1180 · : 1188 · : 11 C0 • : 11 C8 • : 1100 • : 1108 • : 11 E0 .: llE8 • : 11 F0 • : 11 F8 • : 1200 · : 1208 .:1210 · : 1218 · : 1220 .:1228 • : 1230 .: 1238 .: 1240 · : 1248 · : 1250 .:1258 .: 1260 .:1268 .: 1270 .:1278 • : 1280 .: 1288 • : 1290 .: 1298 .: 12A0 .: 12A8 · : 12B0 .: 12B8 · : 12C0 .: 12C8
03 43 83 C3 03 43 83 C3 03 43 83 C3 03 43 83 C3 03 43 83 00 01 02 03 05 06 07 08 0A 08 0C 00 0F 10 11 12 14 15 16 17 19 1A 18 lC lE lF
04 44 84 C4 04 44 84 C4 04 44 84 C4 04 44 84 C4 04 44 84 00 01 02 03 05 06 07 08 0A 08 0C 00 0F 10 11 12 14 15 16 17 19 lA 18 lC lE lF
05 45 85 C5 05 45 85 C5 05 45 85 C5 05 45 85 C5 05 45 85 00 01 02 03 05 06 07 08 0A 08 0C 00 0F 10 11 12 14 15 16 17 19 lA 18 lC lE lF
06 46 86 C6 06 46 86 C6 06 46 86 C6 06 46 86 C6 06 46 86 00 01 02 03 05 06 07 08 0A 08 0C 00 0F 10
11 12 14 15 16 17 19 lA 1B 1C 1E lF
07 47 87 C7 07 47 87 C7 07 47 87 C7 07 47 87 C7 07 47 87 00 01 02 03 05 06 07 08 0A 0B 0C 00 0F 10 11 12 14 15 16 17 19 lA 18 1C 1E lF
40 80 C0 00 40 80 C0 00 40 80 C0 00 40 80 C0 00 40 80 00 01 02 03 05 06 07 08 0A 08 0C 00 0F 10
11 12 14 15 16 17 19 lA 18 lC lE lF 00
41 81 Cl 01 41 81 Cl 01 41 81 Cl 01 41 81 Cl 01 41 81 00 01 02 03 05 06 07 08 0A 08 0C 00 0F 10 11 12 14 15 16 17 19 lA 18 lC lE lF 08
42 82 C2 02 42 82 C2 02 42 82 C2 02 42 82 C2 02 42 82 00 01 02 03 05 06 07 08 0A 08 0C 00 0F 10 11 12 14 15 16 17 19 lA 18 le lE lF 10
• : 1200 • : 1208 · : 12E0 • : 12E8 • : 12F0 • : 12F8 • : 1300 • : 1398 • : 1310 • : 1318 • : 1320 • : 1328 • : 1330 • : 1338 • : 1340 • : 1348 • : 1350 .:1358 • : 1360
18 58 98 08 18 00 00 00 00 01 00 00 00 09 09 00 00 00 00
20 60 A0 E0 20 00 00 00 90 01 Fl FF 70 FF 72 FF FF FF 7F
28 68 A8 E8 28 00 00 00 00 01 00 00 00 09 00 90 00 09 99
30 70 B0 F0 30 00 00 00 00 01 FF FF FF FF 00 EF FF FF 70
38 78 B8 F8 38 00 00 00 00 01 00 00 00 00 00 00 00 00 20
40 80 C0 00 00 00 00 09 01 FF FF FF FF FF FF 70 FF FF FF
48 88 C8 08 00 00 00 00 01 00 00 2F 00 4F 90 99 00 00 52
50 90 00 10 00 00 00 00 01 72 FF FF FF F7 58 FF OF F9 FF
• : 1368 • : 1370 • : 1378 • : 1380 • : 1388 • : 1390 • : 1398 • : 13A0 .: 13A8 • : 13B0 • : 13B8 • : 13C0 • : 13C8 • : 1300 • : 1308 • : 13E0 • : 13E8 • : 13F0 • : 13F8
00 00 00 00 00 00 09 90 00 00 00 05 00 09 99 90 00 4C 98
FF FF FF OF FF FF FF FF FF 7F FF FF FF FF FF FF FF C8 09
00 00 00 00 00 00 00 00 00 00 00 00 00 09 00 09 09 15 39
FF FF FF 85 FF FF FF FF FF FF FF FF FF FF 2F FF FF EE AO
00 00 00 02 00 00 00 70 00 00 00 00 00 00 C0 99 09 50 51
FF FF FF FF FF FF FF 00 FF 05 FF FF FF FF FF FF FF 98 98
00 00 9C 00 00 00 09 99 99 0A 92 130 00 1313 09 130 813 013 02 1313 1313 09 013 00 A8 28 F9 90 013 013
• : 40F0 • : 40F8 .:4100 · :4108 • : 4110 .:4118 • : 4120 • : 41 ~8 • : 4130 • : 4138 • : 4140 • :4148 • :4150 • : 4158 • : 4160 • : 4168 • :4170 • : 4178 • :4180 • : 4188 • : 41913 • : 4198 • : 41A0 • : 41A8 .:41813 • :4188 • : 41 ce · : 41 C8 • : 41 09 • : 41 08 • : 41 Ee • : 41 E8 .:41Fe • : 41 F8 • :42130 .:42138
00 00 01 A4 20 00 00 00 00 00 09 94 28 01 00 00 00 99 80 913 26 00 80 08 1313 913 130 18 64 90 90 99 99 90 eA 00
00 00 00 60 00 00 00 90 00 00 90 40 02 20 00 00 00 00 00 92 99 89 20 00 90 913 09 29 01 60 e9 99 99 ge 82 09
00 00 80 AA 02 00 00 00 00 00 60 8A 00 00 00 00 00 00 06 91 92 00 80 00 00 913 613 8A 40 09 48 1313 99 e9 A0 80
90 09 0A 0A 48 00 00 00 00 90 lA 0A 60 00 00 00 00 00 Ie A9 68 01 00 00 130 130 013 08 20 06 130 139 913
00 00 02 90 00 00 90 00 09 90 82 00 00 18 00 00 00 00 99 96 99 00 02 00 90 013 132 18 00 A0 1313 99 1313
00 00 69 18 02 00 00 00 00 00 98 24 02 00 00 00 00 00 28 9A 00 00 213 00 90 99 A4 98 00 00 1313 139 913
00 00 E0 00 02 00 00 02 01 22 00 00 09 00 99 99 90 EE C9
FF FF F7 00 OF FF FF FF FF FF FF FO FF FF FF FF F6 50 FF
Listing C-30: The BOGSPR File B* PC SR AC XR YR SP • ; C03E 32 00 C3 00 F6
• : 4900 · : 4008 • : 4010 • : 4018 • :4020 • :4028 • :4030 • :4938 · :4040 • : 4948 • :4050 · :4958 · :4069 · :4068 · :413713 · :41378 • :4088 · :4088 • : 4098 · :4998 • :4eAe • : 40A8 · :4989 · : 40B8 · :49C9 • :49C8 • :4009 · :4908 • : 40E0 · : 40E8
29 20 EA 09 90 00 09 09 2C 29 AB 0A
09 00 1313 00 20 80 AA 00 ee 90 90 00 90 99 9C 00 00 00
00 80 C0 02 00 00 09 00 00 20 A8 02 90 013 1313 00 138 CA ce 93 139 09 09 00 130 89 98 00 00 00
00 FA 0A A0 00 00 00 09 00 89 00 BC 013 00 139 90 89 8F 0A C2 99 00 99 00 20 E8 9A 09 00 00
8C 80 08 00 00 00 00 00 82 80 EA 90 138 1313 1313 09 8F 00 Ae 130 1313 1313 00 00 9A C9 92 90 00 90
00 3A 20 00 00 09 00 00 00 20 02 913 90 1313 1313 130 139 20 138 1313 90 99 09 99 8E C9 98 00 00 09
00 AE 0E 00 00 99 09 99 09 8E 0E 139 90 130 1313 130 20 FA 138 28 1313 130 1313 00 80 88 09 90 00 00
82 00 08 00 00 99 00 99 82 00 B8 130 00 130 139 00 80 00 138 1313 913 99 00 00 30 29 913 00 00 013
00 09 26 09 08 00 00 00 00 00 A0 01 A0 00 0'0 00 00 00 24 49 90 0A 130 00 90 1313 136 02 10 08 1313 99 99 ee ee (n3 e0 A0 28 0A 00 00 00 00 09
00 00 49 90 00 00 00 00 00 00 41 00 00 80 00 00 00 09 00 91 00 40 01 00 130 913 01 A0 00 84 99 99 90 013 A0 09
249
• : 42113 • : 4218 • :42213 • :4228 • :42313 • :4238 .: 42413 • : 4248 • : 425e • :4258 • :42613 • :4268 • :42713 • :4278 • :4280 • :4288 • :42913 .r4298 • : 42Ae • :42A8 " :42Be • :42B8 • :42ee • : 42e8 • :42013 • :4208 • :42Ee • : 42E8 • : 42Fe • :42F8 • : 43ee • : 43e8 • : 431e • :4318 • :432e • :4328 • :43313 • :4338 • :43413 • :4348 • :435e • :4358 • :43613 • :4368 • :43713 • :4378 • : 43813 • : 4388 • :43913 • :4398 .: 43Ae • :43A8 .: 43813 • :43B8 • :43ee • :43C8 .: 43013 • :43D8 .: 43Ee
250
1313 1313 1313 1313 1313 131'1 eA 132 €Ie 1313 1313 1313 1313 1313 Ae 1313 813 €Ie 1313 1313 1313 €Ie €Ie 132 €Ie €Ie €Ie €Ie ee e0 e8 013 AB 2A 8e eF e2 ee 138 130 Ae 2A €Ie 3E 813 1313 132 130 AA 1313 3e 1313 013 1313 08 1313 AA 132 1313
1313 130 1313 1'113 1313 1313 1313 1313 €Ie 1313 1313 1313 1313 1313 1313 1313 €Ie 1313 1313 €Ie 1313 €Ie €Ie 813 €Ie €Ie 1313 €Ie ee ee ee 2E ee AA e2 ee e2 ee €Ie 2E €Ie AF 132 €Ie €IE €Ie €Ie 2S 80 BA 8e 1313 130 €Ie 013 2E 813 EA
1313 1313 1313 1313 1313 1313 Ae Ae 1313 1313 €Ie 1313 130 1313 eA Ae €Ie €Ie 1313 1313 1313 €Ie Ae 213 €Ie €Ie €Ie €Ie e0 €Ie ee A8 AA 813 EA e2 8e ee €Ie €Ie AA €Ie EA 213 1313 138 1313 AB eA ee ee 1313 1313 013 €Ie AF AB 813 02 133
1313 1313 1313 013 1313 1313 Ae 013 1313 1313 €Ie 1313 1313 1313 1'18 1'11'1 €Ie €Ie 1313 1313 1313 1313 eA €Ie €Ie 1313 €Ie €Ie ee €Ie ee €Ie AB e2 8e es e2 ee 138 €Ie Ae 133 ee €Ie 1313 1313 132 e0 EA eA 138 1313 130 1313 eA €Ie AA 132 1313
1313 1313 1313 1313 1313 1313 82 1'113 1313 ee 1313 1313 1313 1313 1313 1'12 €Ie 1313 1313 1313 1313 €Ie 132 €Ie €Ie €Ie 1313 €Ie ee ee €Ie 2A ee AA 132 ee eA €Ie €Ie 2A €Ie AA eA €Ie 132 €Ie eB 2A 813 B8 1313 1313 1313 130 2C AA 813 EB 138
1313 1313 130 1313 1313 1313 e8 21'1 1313 ee 1313 1313 130 1313 Ae 813 €Ie 1313 1313 1313 €Ie €Ie 138 Ae €Ie €Ie 1313 130 0e €Ie €Ie AB AA 813 EF e2 8e €Ie 1313 813 AA €Ie EA 213 €Ie 138 €Ie AA 132 Fe ee 1313 1313 €Ie 013 AA 2B 1313 a3
1313 013 1313 1313 1313 1313 €Ie 1313 1313 €Ie 1313 1313 00 1313 132 1313 €Ie 1313 1313 1313 €Ie €Ie 213 €Ie 1313 €Ie €Ie 1313 ee €Ie 2E ee AA 03 813 eB eA 130 2A €Ie Ae 133 1313 €Ie €Ie 1313 eB 813 FA 213 132 00 130 €Ie 2A 1313 EA 132 se
1313 013 013 1313 eo 1313 28 131'1 1313 1313 1313 1313 1313 1313 eA 1'113 €Ie €Ie 1313 1313 1313 €Ie A8 €Ie 1313 €Ie €Ie 013 ee €Ie 28 AA 813 EA e2 ee 28 €Ie €Ie AE €Ie EA 138 €Ie 132 1313 7B 2A ee 1313 ee 1313 013 1313 Ae AA 813 133 138
• :43E8 • :43F0 • : 43F8 • : 441313 .: 44138 • : 441 13 • : 4418 • :4421'1 • : 4428 • :44313 • : 4438 • :4440 • :4448 • :44513 • :4458 • : 44613 • : 4468 • :44713 • :4478 • :44813 • : 4488 • : 44913 • : 4498 • : 44Ae • :44A8 • :44Be • :44B8 • : 44ee • : 44e8 • : 44013 • :4408 • :44Ee • :44E8 • : 44Fe • : 44F8 • : 451313 • :45e8 • : 45113 • : 4518 • : 45213 • : 4528 • :45313 • : 4538 • :45413 • :4548 • :45513 • :4558 • :45613 • :4568 • :45713 • :4578 .: 4580 • :4588 • :45913 • :4598 • :45Ae • :45A8 .: 45813 • :45B8
1313 013 ee 28 1313 131'1 1'19 01'1 88 23 ee 28 1313 130 132 813 28 138 213 138 1313 813 1313 €Ie 113 €Ie 132 38 1313 €Ie 02 €Ie 138 133 22 €Ie €Ie 813 32 €Ie 213 213 €Ie €Ie €Ie 813 32 130 213 138 1313 1313 1313 813 eE 1313 813 €IS 130
1313 00 1'113 2A 013 1313 e8 41'1 132 22 813 AD ee 1313 132 813 28 138 0A 12 1313 3E B1 €Ie €Ie 413 813 €Ie €Ie 213 8e 213 22 €Ie €Ie 133 €Ie A8 e8 e0 €Ie e0 ee 132 132 8e ee €Ie 138 132 132 23 513 €Ie €Ie 130 €Ie 813 se 32 132 130 €Ie 138 138 213 213 €Ie 513 €Ie 1313 1313 1313 Be 8e 32 32 013 013 213 138 Ae eA 1313 513 1313 130 1313 1313 813 813 €IE 1'12 1313 €Ie 02 80 2e 1313 213 1313 28 (Ie 813 130 131'1 1313 133 1313 213 21'1 1313 2C 2E 1313 el 130 1'12 eA 813 213
138 00 1'10 1313 1313 131 1313 81'1 22 1313 2e 130 1313 03 1313 ee ee 113 813 1313 813 1313 1313 713 €Ie 132 2A €Ie €Ie €IS €Ie 134 132 41 Ae €Ie ee €IE €Ie 813 138 €Ie eA €Ie 713 133 1313 813 132 1313 1313 013 ce 132 130 Be
813 00 130 1313 132 1313 213 313 €Ie 213 138 130 132 130 133 138 813 213 1'12 1313 813 €Ie ee €Ie C8 32 913 €Ie e8 ee 132 el 813 28 1313 713 ee €Ie 83 132 €Ie 138 €Ie 513 €Ie 130 8e 132 1313 138 1313 713 1313 013 813 132 130 213 ae
213 00 1313 €Ie 013 eA 1313 8e 31 213
1313 00 €Ie 1313 132 1313 AC 23 eo 213 €!A 1313 1313 1313 00 132 132 1313 813 138 138 138 138 213 213 113 813 ee 1313 1313 813 ee €Ie €Ie €Ie 813 213 €Ie €Ie 81 132 23 134 €Ie 013 €Ie ee ee e8 tte e0 02 e8 132 132 se 22 re 813 ee €Ie 713 ee 132 32 €Ie ee 813 813 132 138 €Ie €Ie 138 €Ie €Ie €Ie 713 ce 132 0E 013 1313 83 813 02 132 013 1313 138 1313 1313 1313 713 ee 013 133 130 1313 813 813 132 02 20 1313 0(1 213 213 €Ie 13 ~) €Ie e2 1313 013 42 1313 1313 18 813 132 21 ee 82 ee 1313 131 713 313 134 134 22 €Ie 813 €Ie 88 213 €Ie €Ie 24 130 €Ie e3 8e €IS 132 134 €Ie 130 se 32 €Ie 138 813 €Ie 1313 1313 Be 32 1313 138 813 1313 Be 013 813 eF 1313
• : 45C0 • :45C8 • : 4500 • :4508 • : 45E0 • :45E8 • : 45F9 • : 45F8 .• : 461313 • :46138 • : 46113 • : 4618 • :46213 • : 4628 • : 46313 • :4638 • :.46413 • :4648 • : 46513 • :4658 • : 46613 • : 4668 • :4670 • :4678 • :46813 • :4688 • :46913 • :4698 • : 46A0 • : 46A8 .:46B0 .:46B8 .:46C9 .:46C8 • : 4609 .:4608 .:46E8 .:46E8 .:46Fe .:46F8 • : 47013 .:47138 .:47113 .:4718 .:47213 .:4728 .:47313 .:4738 .:47413 .:4748 .:47513 .:4758 .:4760 .:4768 .:4778 .:4778 .:4780 .;4788 .:47913
013 1313 813 32 130 813 132 813 130 1313 F9 133 1313 1313 1313 1313 138 1313 5C 2C 88 138 08 013 02 88 14 80 80 FE 00 88 92 A9 FE 2A A0 AB eA 813 18 1313 00 138 1313 1313 130 013 28 013 1313 1313 1313 013 80 130 27 013 1313
50 130 00 8C 32 1313 213 138
ee
1313 1313 5C 1313 139 1313 1313 138 9A 813 57 9B 1313 00 013 AA 2B 813 55 2A 00 80 88 A8 2A A9 OE 2B A9 2A 1313 88 813 1313 138 813 1313 1313 1313 1313 013 00 1313 130 013 013 1313 013 1313 130
00 C0 03 1313 813 1313 1313 132 1313 1313 13F 1313 1313 99 1313 1313 813 C8 20 813 AA 1313 1313 1313 1313 9E BO 38 OE 8A 013 88 913 AA A.3 A9 3E 2A Ae 2A 813 813 1313 1313 138 1313 130 1313 1313 1313 1313 1313 013 813 80 130 1313 013 00
013 1313 80 32 130 80 132 1313 1313 1313 713 133 1313 1313 1313 138 1313 1313 5E 80 1313 1313 130 013 02 A0 57 2F 013 E8 00 88 92 A9 FF 2A 88 AA 1313 813 A5 1313 1313 1313 138 1313
713 00 00 70 00 C13 013 00
130 83 02 130 138 132 1313 133 139 FC 1313 1313 1313 1313 1313 23 813 7C 132 138 130 1313 FE 2F E0 17 0A 130 013 88 2A AA A9 F6 2B A9 8A 1313 138 1313 1313 1313 013 1313 9~ 130 1313 130 6A 1313 1313 1313 1313 1313 1313 1313 130 1313 130 130 00 013 1313 1313 5A·913 1313 1313 013 1313
0D CO 813 1313 1313 013 1313 1313 90 1313 1313 1313 1313 139 1313 FA BO 813 80 013 00 013 813 50 B5 E9 OF 02 1313 813 89 FA 2B A9 CF 9A Ae 1313 88 1313 ee 130 1313 1313 130 1313 00 00 1313 1313 130 08 1313 1313 130 013 00
80 32 013 A9 138 013 1313 139 7C 139 013 1313 1313 138 132 1313 1F 2F 813 130 130 130 9A 813 45 23 80 A9 1313 80 eA 89 02 9A 99 AB se 1313 28 00 1313 1313 1313 1313 130 1313 18 130 1313 1313 013 138 1313 013 28 130 00
013 80 132 1313 138 1313 1313 133 1313 C9 130 913 1313 813 A9 20 813 F3 1313 1313 130 130 F3 29 E9 D3 OB 130 130 138 AA 2A Ae 9F 22 A9 AA 013 138 130 1313 1313 813 08 1313 1313 013 130 1313 1313 1313 80 00 130 013 130 013
• :4798 • :47A0 • :47A8 • :47BO • :47B8 • :47C9 • : 47C8 • : 4700 • :4708 • :47E9 • : 47E8 • :47F9 • : 47F8 • : 48130 • :48138 .:48113 • : 4818 • : 48213 • : 4828 • :48313 • :4838 • : 4840 • :4848 • : 4850 • : 4858 • : 4860 • :4868 • :48713 • :4878 • :4880 • :4888 • : 4898 • : 4898 .: 48A8 • : 48A8 • ~48B9 • : 48B8 • : 48ce • :48C8 • : 48013 • :4808 • : 48E13 • :48E8 • : 48F9 • :48F8 • : 49130 • : 49138 .:49113 • : 4918 • : 49213 • :4928 • :49313 • :4938 .: 49413 • :4948 • : 4950 • : 4958 • :49613 • :4968
013 00 013 013 013 28 1313 130 1313 013 1313 139 1313 1313 137 1313 138 B7 FF 1F FF 813 1313 F1 FF F8 FF 7F FF 013 130 88 99 FE FF FF FF 10
1313 80 FF 00 FF F7 FE 18 1313 130 F3 00 1313 1313 1313 1313 1313 FF 1F E13 FF
013 1313 130 130 013 1313 1313 1313 1313 1313 1313 1313 1313 1313 1313 1F 137 131 FB FF FF 1313 FO 1313 FF FF FE FF EF 013 1313 23 91 139 FF FF BF 139 FE 013 Fe 7F 1313 FF FO 013 08 1313 E0 3E 1313 1313 1313 113 133 013 FF 3F Ee
00 013 1313 013 00 130 00 013 130 1313 1313 A5 1313 1313 00 1313 1313 1313 013 913 1313 1313 1313 1313 1313 139 91 1313 1313 13F 130 1313 FO 1313 FF EF 137 FF FF 3F FF FF 130 C0 C0 1313 7F FB E0 FF FF F8 FF FF FF BF FF FF 130 130 1313 1313 813 88 FB 99 4F FF E3 FF FF EF FF FF 1313 38 13131313 FF ce 1313 FF FC 1313 EF FF E0 FB FF FF 130 08 1313 1313 9E 1313 013 75 1313 1313 1313 1313 88 138 130 013 130 80 FC 138 13F FF C13 1F FF E0 7F FF
1313 00 00 1313 013 1313 1313 1313 1313 013 1313 1313 1313 1313 1313 7F 6F 133 90 FF FF 130 OF 80 FF FF FF FF F7 130 1313 77
83 88 FF FF 7F 89 FF 138 F8 BF 813 FF FE 130 9E 1313 C9 1313 1313 1313 013 78 137 130 FF 3F E0
1313 013 1313 130 013 013 1313 1313 1313 1313 1313 1313 1313 133 1313 1313 BB FF 8F FF FF 1313 E9 FF F9 FF FF FF FF 013 1313 88 FO FF F7 FF FF 1313 1313 FF 88 FE EF F8 FF 013 1313 FF 1313 130 1313 1313 1313 1313 FE 9F C13 FF FF
130 00 130 1313 130 00 1313 1313 130 139 1313 1313 139 1313 1313 7E FF 133 FE FF 1313 80 BF C0 FF FF FF FF 80 130 1313 FF 87 41 FF FF 08 139 FF 1313 F8 OF ce FF 130 00 9E 1313 1313 1313 1313 1313 1313 F8 137 813 3F FF E0 7F FF F0
1313 1313 1313 130 1313 27 1313 130 1313 1313 1313 1313 913 1313 1F 133 1313 F7 FF 7F FF E8 1313 FF FF FC FF OF FF 013 131 98 89 FF FF OF FF 7C 1313 Ee FF 130 FF FB FF 138 1313 F9 73 00 1313 813 1313 013 013 FF
251
.:4970 .:4978 .:4980 .:4988 .:4990 .:4998 .:49A0 .:49A8 .:4980 .:4988 .:49C0 .:49C8 .:49D0 .:49D8 .:49E0 .:49E8 .:49F0 .:49F8 .:4A00 .:4A08 .:4A10 .:4AI8 .:4A20 .:4A28 .:4A30 .:4A~8
.:4A40 .:4A48 .:4A50 .:4A58 .:4A60 .:4A68 .:4A70 .:4A78 .:4A80 .:4A88 .:4A90 .:4A98 .:4AA0 .:4AA8 .:4AB0 .:4AB8 .:4AC0
FF F8 04 00 C0 F7 00 00 00 00 18 00 00 08 00 00 00 00 OC 00 00 A8 00 00 00 00 59 00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 0C
FF FF 00 IF 00 B0 00 00 00 00 00 3C 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 3E 00 00 00 00 00 00 00 7F 00 00 00 00 00 00 00
F8 FF 00 80 6F 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 49 00 00 00 00 00 00 00 6B 00 00 00 00 00 00
FF FC 0E 00 E0 EF 00 00 00 00 08 00 00 18 00 00 00 00 08 00 00 58 00 00 00 00 49 00 00 00 00 00 00 00 68 00 00 00 00 00 00 00 2A
FF FF 00 3F 00 F0 00 00 00 00 00 C2 00 00 00 00 00 00 00 C2 00 00 00 00 00 00 00 2A 00 00 00 00 00 00 00 49 00 00 00 00 00 00 00
F8 FF 00 80 EB 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00 14 00 00 00 00 00 00
FF FC 0F 00 70 FF 00 00 00 00 18 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 2A 00 00 00 00 00 00 00 2A 00 00 00 00 00 00 00 2A
FF 00 00 37 00 F0 00 00 00 00 00 C2 00 00 00 00 00 00 00 C2 00 00 00 00 00 00 00 49 00 00 00 00 00 00 00 2A 00 00 00 00 00 00 00
.:4AC8 .:4AD0 .:4AD8 .:4AE0 · :4AE8 .:4AF0 · :4AF8 .:4800 .:4808 .:4810 .:4BI8 .:4820 · :4828 .:4830 · :4838 .:4840 · :4848 .:4850 · :4858 .:4860 · :4868 .:4870 · :4878 .:4880 · :4888 .:4890 · :4898 .:48A0 · :48AS .:4820 · :4888 · : 48C(1 .:48C8 .:48D0 · :48D8 .:48E0 .:48E8 .:4BFB
252
PUT"~0:00PLOT
Y IN YPNT X/2 IN XPNT COLOR IN COLOR GRAPHICS 8ASE ADDRESS IN GBASE OR'S A POINT
3F
00 00 00 • :4BF8 00 .:4C00 FF
Listing C-31: The OOPLOT Subroutine Source Code 1000 11310 11320 1030 1040 1050 1060 1070 1080 1090 1100 1110
00 00 00 00 00 00 00 16 00 00 00 00 00 00 00 0e 00 00 08 00 00 00 00 0C 00 00 08 00 00 00 00 (11 00 E0
7F 00 00 00 00 00 00 00 3E 08 00 00 00 00 00 00 7F 00 00 00 00 00 00 00 7~
00 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 68 00 00 00 00 00 00 00 68 00 00 00
00 00 00 00 00 80 00 00 00 B0 3 c E0 00 7F 80 00 00 00 00 00 00 00 00 00 FF 00
00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 68 00 00 3C 00 00 00 00 68 80 00
3C 00 00 00 00 ~3:~·
00 E0 07 00 00 00 00 00
2A 00 00 00 00 00 00 00 2A 14 00 00 00 00 00 00 49 00 00 00 00 00 00 00 49
00 00 00 00 00 00 80 F~
00 80 00 00 00 00 FF
00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00 14 00 00 00 00 00 00 F0 -F 00 00 00 00 00 FF
00 2A 00 00 00 00 00 00 00 00 00 00 00 00 2A 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 2A 00 002A 00 00 00 00 00 00 00 00 00 00 00 00 2A 00 00 2A 00 00 00 00 00 00 00 00 00 00 00 00 IF C0 00 FF CB 00 03 00 00 00 00 00 00 00 00 00 00 00
11213 11313 OPLOT 11413 11513 11613 11713 11se 11913 121313 12113 12213 12313 124€1 12513 1-;:::,£13 12713 128~3
12913 131313 13113 13213 13313 13413 13513 13613 13713 1 :3:313 13'7'tl 1413 tl 14Hl 14213 14313 14413 14513 146tl 14713 14813 14913 151313 1 ~:.l 13 15213 15313 15413 15513 15613 15713 15813
AHOP LDA YPNT CMP #$C7 BCS RTR1 TAX LDA XPNT CMP #$Afj BCS RTR1 LSF; A LSR A TAY LDA GBASE CLC (;0': i-,iU< STA POlt-,lT LDA GBASE+1 ADC l)UWPH ,:X: STA POINT+1 LDA PO I h-iT CLC ADC HL~::UPL! ySTA POINT LDA POH~T+ 1 ADC Hlk:UFH! Y ~'::TA POINT+l lDA AND TA)< lD'-,... lDA AND STA lD"-{ lDA
\H-lT #$tl3
: :;TF~I P BIT POS
RTR1
#$1313 (POIl-H) ,Y PAt-·m ,)( CTEt-'lF' COLOR COlK ,YAt-~D POR ,>< ORA CTEt'iP LD-'{ #-;1;013 STA (POINT) ,Y RTS
POR PAND COlf<
. BYTE $Ce,$313,$eC,$e3 . BYTE $:3F ,$CF !$F:3,$FC . BYTE $ee!$55,$AA,$FF
! Ct _:·~r.:;:;':
131 T
.END
253
Glossary accumulator-An internal register in the microprocessor that is used by all arithmetic instructions and most data transfer instructions. assembler-A program that translates mneumonics for machine language instructions into machine language. bank-One of four 16K blocks of memory in the Commodore 64. bit-One binary digit. A bit can only have the values 0 and 1. bitmapped graphics-A graphics mode in which each pixel on the screen is represented by one or more bits in memory. byte-A grouping of eight bits. A byte can represent any value from 0 to 255. The Commodore 64 operates on memory one byte at a time.
in memory at the same time. disassembly-A recreation of assembly language source code created by reading the object code and assigning the mneumonics to the code. This is the reverse of assembling a program. flicker fusion frequency-24 cycles per second is the frequency at which the human eye will merge the individual screens being shown into continuous movement. graphics memory-An area in memory where the bitmapped graphics images are stored.
HEX-Abbreviation for hexadecimal. HEX file-An intermediate file produced by the assembler that can be loaded into memory using a loader program or transferred to another color RAM-A 1K area in memory, starting at machine. $DBOO, in which each byte represents the color hexadecimal-The base 16 numbering system. In this numbering system, a digit can have a value for one character on the screen. coresident assembler-An assembler program of 0 to 15. Numbers above 9 are represented by that has its editor, assembler, loader, and monitor the letters A through F.
254
interrupt-A signal that causes the microprocessor to stop executing the current program and execute another program in memory. The address where the first program was stopped is stored on the stack as well as the status register, so that program execution can continue at a later time. interrupt vector-1\vo bytes in memory that contain the address of the routine to be executed when an interrupt occurs. KERN AL-A set of machine language subroutines in ROM that can be called by your program to perform complex tasks. None of the KERNAL routines in the Commodore 64 are useful for games.
label-A string of characters that can be used to represent memory locations or data. loader-A program that translates a HEX file into binary data and stores it into memory. LSB-The least significant bit in a byte. macro-A user-definable macroinstruction made up of one or more instructions. It is treated like any other instruction during programming and expanded into its component instructions during assembly. maskable interrupt-An interrupt that can be disabled through software. mneumonics-Short character strings that are used as memory aids for assembly language instructions. monitor-A program that is used to examine and change memory locations. It also can be used to load and save areas of memory. MSB-The most significant bit in a byte. multiplexing-The technique of using one sprite to display two different images. The different images may overlap. nibble-A grouping of four bits. A nibble can be represented by one hexadecimal digit.
object code-Binary data that can be directly executed by the microprocessor. opcode-A value that represents the instruction to be executed. operand-The data that is to be operated on by the instruction. pixel-The smallest dot that can be generated by the computer to be displayed on the screen. program counter-An internal 16 bit register that is used to access the next memory location. screen-One refresh of the video display. The display is refreshed 60 times per second. scroll-Smooth movement of a portion of the screen. source code-Text that represents an assembly language program. This will be translated into machine code by the assembler. sprite-A small object that can be moved independently of the background. stack-An area of memory that is used by the microprocessor for temporary storage. stack pointer-A byte that is used as an index into the stack area. status register-An internal register whose bits are affected by the different instructions. Bits in the status register can be tested by branching instructions. touch pad-A device that plugs into the joystick port on the computer, and when touched on its surface, returns a X and Y coordinates representing the position on the pad where the touch occurred. zero page-The area in RAM from $0000 to $OOFF, which can be accessed by the microprocessor faster than any other area in memory. A program that uses zero page addressing extensively can be 2/3 the size that the program would be otherwise.
255
Index
Index <,4,5 .BYTE, 4, 51 .DBYTE,4 .END,4 .LlB, 4, 20, 65 .MAC, 5 .MND,5 .WORD,4 6510 chip, 9 6526 chip, 11 6567 chip, 11 6591 chip, 11 A absolute addresses, 7 absolute commands, 15 absolute indexed addressing, 15 accumulator, 11 ADC instruction, 78 address bus, 22 address lines, 11 addressing modes, 14 ADRES macro, 100 AND instruction, 78 animating sprites in BOGHOP, 73 animation, 2 ANOP macro, 100 Architecture, 6510, 11 arithmetic instructions, 13, 14 ASL instruction, 79 ASL2 macro, 100 assembler, 4 assembler, choosing an, 6 assembler, functions of, 5 assembly language, 4
B bad guys in BOGHOP, 71 band pass filter, 39 BANK macro, 24, 101 bank switching, 11, 22 banks of memory, 23 BASE address register, 27 BASIC, 3
BASIC program, 120 BCC instruction, 79 BCOLO register, 29 BCS instruotion, 80 BEQ instruction, 80 BGT macro, 101 BIN, 120 binary data, 4 binary data file, 120 binary files, 119 bit, 9 BIT instruction, 79 bit mapping, 29 bit mapped graphics grid, 48 blanking the screen, 33 BLE macro, 101 BLNK macro, 102 BMI instruction, 80 BNE instruction, 81 BOGDAT file, 65 BOGDAT source code, 243 BOGDEF,65 BOGDEF file, 64 BOGDEF source code, 241 BOG HOP game, 64 BOGHOP program, 64 BOG HOP program source code, 207 BOGHOP.O program, 233 BOGSPR file, 249 BPL instruction, 81 BPRIOR,32 BREAK instruction, 81 buffer areas, 67 bugs, 18 BVC instruction, 82 BVS instruction, 82 byte, 4,9
C cartridge monitors, 8 CENTIPEDE, 58 central processing unit, 11
chaining, 18 character generator ROM, 25 character generator section, 25 character graphics grid, 50 character sets, custom, 28 characters sets, custom, 28 chip, sound interface device, 11 chip, video interface, 11 chips, 10 CINV,20 CLBACK1,56 CLBACK1 file, 169 CLC instruction, 82 CLD instruction, 83 CLI instruction, 83 CLSP1,56 CLSP1 file, 169 CLSP2,55 CLSP2 file, 167 CLV instruction, 83 CMP instruction, 84 collision detection, 32 collision status register, 19 color on televisions, 51 color RAM, 27 color, sprite, 31 COM-KO program, 54, 153 commands, assembly language, 6 comments, 13 Commodore's Macro Assembler Development System, 4 COMMON file, 68 COMMON file, 41, 65 COMMON source code, 142 complex interface adapter chips, 11 concepts, game, 61 conditional branching instructions, 14 control lines, 22 controls, sprite, 31 coresident assembler, 6 CPX instruction, 84 CPY instruction, 85
259
~---
D data areas, defining, 6 data definitions, 18 DATA file, 41 data movement, 13 data movement instructions, 14 data section of BOGHOP, 68 DATA source code, 144 data, tables of, 6 DBADC macro, 102 DBADC1 macro, 103 DBDEC macro, 5 DBINC, 103 DBINC macro, 103 DBPL macro, 103 DBSBC macro, 104 DBSBCI macro, 104 DORA and DDRB registers, 34 debugging, 18 DEC instruction, 85 defining the system, 70 definitions, RAM, 66 demonstration, sound generator, 41 designing video games, 57 DEX instruction, 86 DEY instruction, 86 difficulty levels, 62 disassembly, 5 DISPLAY PIC program, 55, 153 display, video, 1 DONKEY-KONG, 58 OS macro, 104 OS macro, 65
E EDIT SND program source code, 145 editor, sound, 44 editor, text, 6 electron beam, 1 elements of game design, 61 enabling a sprite, 31 EOR instruction, 86 equates statements, 69 expansion, data, 7 expansion, macro, 7 expansion, sprite, 31
F FILBYT macro, 105 FILL macro, 105 filtering sounds, 36 flicker fusion frequency, 14 flow of control instructions, 2, 13 frame, 2 fusion frequency, 2 G
glossary, 254 GRABAS macro, 27, 105 GRAPH macro, 106 graphics tablet, 52
260
graphics, hand coding, 47 grids, graphic, 50 H hardware, 10 hardware registers, 26 harmonic content, 39 HDEC macro, 106 hex file, 7 hexadecimal, 10 high pass filter, 39 HINC macro, 106 immediate mode addressing, 14 implied addressing, 16 INC instruction, 87 indirect addressing, 16 indirect addressing with indexes, 15 initializing RAM, 70 instruction set 6510, 77 instruction types, 13 INT DEMO.O program, 133 INT1,20 INTER-DEMO source code, 132 interpreter, BASIC, 3 interrupt demonstration, 20 interrupt routines in BOGHOP, 74 interrupts, 19 interrupts, video, 33 INX instruction, 87 INY instruction, 87 IPULL macro, 107
J JCC macro, 107 JCS macro, 107 JEQ macro, 108 JGE macro, 108 JGT macro, 108 JLE macro, 109 JLT macro, 109 JMI macro, 109 JMP instruction, 88 JNE macro, 110 JOY1 and JOY2 registers, 34 joystick, 55 joysticks, 34, 74 JPL macro, 110 JSR, 6 JSR instruction, 88
K KERNAL routines, 22 KILL macro, 20, 112 KO-COM program, 54, 153 Koala Pad, 54
L labels, 13 LOA instruction, 88
LDMEM macro, 110 LDMEMX macro, 111 LDMEMY macro, 111 LOX instruction, 89 LOY instruction, 89 least significant bit, 9 level of play, BOG HOP, 71 LEVEL register, 66 levels, difficulty, 62 loader, 7 LOOKUP data file, 248 LOOKUP file, 65 low pass filter, 39 LSR instruction, 90 LSR2 macro, 111
M machine language, 3 MACLIB file, 64, 99 MACLIB source code, 121 Macro Assembler Development System, 4 macro library, 17, 65 macro-instructions, 5 macros, 5, 21, 99 main program, 1,718 main program, BOGHOP, 70 mask register, video interrupt, 33 maskable interrupt, 20 memory banks, 23 memory dumps, 119 memory locations, 4 memory maps, selecting, 22 microprocessor, 9 MLTSP register, 31 mnemonics, 4 mode, bitmapped, 29 modes, addressing, 14 modules, separate, 18 monitor, 1 monitor, assembly language, 7 most significant bit, 9 movement subroutines in BOGHOP, 76 multicolor bit mapped mode, 30 multicolor graphics grids, 49 multicolor mode, 28 multiplexing, 2 multipliers, sprite, 31 MULTOF macro, 30, 112 MULTON macro, 30,112 MVCOL macro, 27,113 MVIT subroutine, 154 MVMEM macro, 113
N names, assignment of, 5 nibble, 9 NIBLL macro, 113 NIBLR macro, 114 NMINV,20
noise, 36 nonmaskable interrupts, 20 NOP instruction, 76, 90 NOT macro, 114 NOTPT register, 66 NOTTM register, 66
o OOPLOT file, 65 OOPLOT subroutine source code, 252 opcode, 13 opcodes, 4 operand, 13 operating system, disabling, 20 OPTION register, 66 ORA instruction, 91
p PAC·MAN,57 packages, graphic, 5,253 PEEK,4 PHA instruction, 91 PHOENIX V1.4N program, 169 phosphors, 1 PHP instruction, 91 PIC A CASTLE, 55 PIC A CASTLE Koala Pad picture file, 154 pixel,1 PLA instruction, 92 players in BOG HOP , 72 PLP instruction, 92 point plotting routine, 69 pointer, stack, 12 pOinters, sprite, 30 POKE,4 positioning sprites, 31 priorities, sprite, 32 priority, sprite, 30 program counter, 11 pseudo opcodes, 4 pulse, sync, 1 PUNPCK macro, 114 purposes of games, 61 Q QOOEC macro, 115 QOINC macro, 115
R RAM,11 RAM definition, 66 RAM definitions, 17 RAM registers, 7 RAND registers, 66 RANSEC,66 RAST macro, 20, 115 raster interrupt, 19, 20 RASTER register, 33 register names, 21
Ed~ed
by Marilyn L. Johnson
registers, X and Y, 11 relative addressing, 16 relocation of loading address, 7 resetting, 20 Revenge of the Phoenix, 59 Revenge of the Phoenix game program, 169 ROL instruction, 92 ROM,11 ROR instruction, 93 routines, 18 RTI instruction, 93 RTS instruction, 93
S SBC instruction, 94 scores, 70 scoring, 63 screen, 2 screen maker utility, 56 SCREEN timer, 66 SCREEN·MAKE program, 167 scrolling, 33 SEC instruction, 94 SED instruction, 95 SEI instruction, 95 setting sprite color, 31 shots in BOGHOP, 72 SLlB.O, 55, 56 SLlB.O file, 166 SMNPC macro, 116 SMNPCX macro, 116 SNDDEF file, 41 SNDDEF source code, 143 SNDEF file, 41 SNDTM registers, 66 software, 53 SOUND DEMO program, 139 SOUND EDIT program, 151 sound editor, 41 sound effects in games, 62 sound interface device chip, 11 SOUND program source code, 133 source code file, 120 source code files, 119 speed of assembly, 6, 7 sprite grid, unexpanded, 51 sprite grids, expanded, 52 Sprite Maker, 55 SPRITE MAKER PROGRAM, 165 sprites, 30 SPRXSZ and SPRYSZ registers, 51 SRC, 120 SSCOL,33 SSCOL register, 32 STA instruction, 95 stack, 12 standard text mode, 24 status register, 12 STX instruction, 96 STV instruction, 96
subroutines, 6, 18 symbol table, 7 sync pulse, 1 SYSDEF,21 SYSDEF file, 64 SYSDEF source code, 131 system definitions, 17
T TAX instruction, 96 TAY instruction, 97 televisions, 1, 51 testing instructions, 13, 14 TEXT macro, 116 text editor, 6 text memory, 25 TEXT mode, 27 tones, 36 TPDEC macro, 117 TPINC macro, 117 TSX instruction, 97 TXA instruction, 98 TXBAS macro, 27, 17 TXS instruction, 97 TVA instruction, 98
U UNBLNK macro, 118 UNPACK macro, 118 update time, 2
V vertical sync pulse, 1 VIC chip, 23 VIC 11,11 VIDBAS,27 VIDBAS register, 24, 25, 27 video display, 1 video games, designing, 57 video interface chip, 11 video interrupts, 33 VIRQ register, 33 VIRQM register, 33 visual impact of games, 62
w waveforms, 36
X XSCRL register, 33 XXPLOT,69 XXPLOT file, 65 XXPLOT subroutine source code, 247
Y YSCRL register, 29, 33 Z zero page addressing, 14 zero page indexed addressing, 15
261
OTHER POPULAR TAB BOOKS OF INTEREST The Computer Era--1985 Calendar Robotics and ArtifiCial Intelligence (No. 8031-$6.95) Making CP/M-80 11 Work for You (No. 1764---$9.25 paper; $16.95 hard) Going On-Line with Your Micro (No. 1746-$12.50 paper; $17.95 hard) The Master Handbook of High-Level Microcomputer Languages (No. 1733-$15.50 paper; $21.95 hard) Getting the Most from Your Pocket Computer (No. 1723-$10.25 paper; $14.95 hard) Using and Programming the Commodore 64, including Ready-to-Run Programs (No. 1712-$9.25 paper; $13.95 hard) Computer Programs for the Kitchen (No. 1707-$13.50 paper; $18.95 hard) Beginner's Guide to Microprocessors-2nd Edition (No. 1695-$9.25 paper; $14.95 hard) The First Primer of Microcomputer Telecommunications (No. 1688-$10.25 paper; $14.95 hard) How to Create Your Own Computer Bulletin Board (No. 1633-$12.50 paper; $19.95 hard) Microcomputers for Lawyers (No. 1614-$14.50 paper; $19.95 hard) Mastering the VIC-20 (No. 1612-$10.25 paper; $15.95 hard) BASIC Computer Simulation (No. 1585-$15.50 paper; $21.95 hard) Solving Math Problems in BASIC (No. 1564-$15.50 paper; $21.95 hard) Learning Simulation Techniques on a Microcomputer Playing Blackjack and Other Monte Carlo Games (No. 1535-$10.95 paper; $16.95 hard) Basic BASIC-English Dictionary for the Apple TM, PETII and TRS-80™ (No. 1521-$17.95 hard) The Handbook of Microprocessor Interfacing (No. 1501-$15.50 paper; $21.95 hard) Investment Analysis with Your Microcomputer (No. 1479-$13.50 paper; $19.95 hard) The Art of Computer Programming (No. 1455-$10.95 paper; $16.95 hard) 25 Exciting Computer Games in BASIC for All Ages (No. 1427-$12.95 paper; $21.95 hard)
ITABI
Programming with dBASE 1111 (No. 1776-$16.50 paper; $26.95 hard) Lotus 1-2-3™ Simplified (No. 1748-$10.25 paper; $15.95 hard) Mastering Multiplan ll (No. 1743-$11.50 paper; $16.95 hard) How to Document Your Software (No. 1724-$13.50 paper; $19.95 hard) Scuttle the Computer Pirates: Software Protection Schemes (No. 1718-$15.50 paper; $21.95 hard) Using and Programming the VIC-201l, including Readyto-Run Programs (No. 1702-$10.25 paper; $15.95 hard) MicroProgrammer's Market 1984 (No. 1700-$13.50 paper; $18.95 hard) PayCalc: How to Create Customized Payroll Spreadsheets (No. 1694-$15.50 paper; $19.95 hard) Commodore 64 Graphics and Sound Programming (No. 1640-$15.50 paper; $21.95 hard) . Does Your Small Business Need a Computer? (No. 1624-$18.95 hard) Computer Companion for the VIC-2011 (No. 1613-$10.25 paper) Forecasting On Your Microcomputer (No. 1607-$15.50 paper; $21.95 hard) Database Manager in MICROSOnll BASIC (No. 1567$12.50 paper; $18.95 hard) Troubleshooting and Repairing Personal Computers (No. 1539-$14.50 paper; $19.95 hard) 25 Graphics Programs in MICROSOn ll BASIC (No. 1533-$11.50 paper; $17.95 hard) Making Money with Your Microcomputer (No. 1506$8.25 paper; $13.95 hard) C-BIMS: Cassette-Based Information Management System for the PETII (No. 1489-$10.95 paper; $16.95 hard) From BASIC to Pascal (No. 1466-$11.50 paper; $17.95 hard) Computer Peripherals That You Can Build (No. 1449$13.95 paper; $19.95 hard) Machine and Assembly Language Programming (No. 1389-$10.25 paper; $15.95 hard)
TAB BOOKS Inc.
Blue Ridge Summit. Pa. 17214 Send for FREE TAB Catalog describing over 750 current titles in print
Commodore 64™ Assembly Language Programming If you are intrigued with the possibilities of the program included in Commodore 64™ Assembly Language Programming (TAB Book No. 1919), you should definitely consider having the ready-torun disk containing the software applications. This software is guaranteed free of manufacturer's defects. (If you have any problems, return the disk within 30 days, and we'll send you a new one.) Not only will you save the time and effort of typing the programs, the disk eliminates the possibility of errors that can prevent the programs from functioning. Interested? Available on disk for the Commodore 64™ at $19.95 for each disk plus $1.00 each shipping and handling.
r------------------------------------I I I
I'm interested. Send me:
- - - - disk for the Commodore 64 - - - - TAB BOOKS catalog
(6422S)
_ _ _ _ _ Check/Money Order enclosed for $19.95 plus $1.00 shipping and handling for each disk ordered. _ _ _ _ ViSA _ _ _ _ _ MasterCard Account No. _ _ _ _ _ _ _ _ _ _ _ _ _ _ Expires __________ Name _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ Address City _ _ _ _ _ _ _ __
State _________ Zip _______
Signature
I I I I II I
Mail To:
TAB BOOKS INC.
~~~
Blue Ridge Summit, PA 17214 (Pa. add 6% sales tax. Orders outside U.S. must be prepaid with international money orders
.In U.S. dollars.) TAB1919
I I I I I I I I I I I I I I I I I
I II I
~-----------------------------------