Content-Type: multipart/related; start=<op.mhtml.1230080435216.431256454e29af27@192.168.1.103>; boundary=----------As25EEThP5cotakxnjg9wx
Content-Location: http://users.telenet.be/kim1-6502/6502/fbok.html
Subject: =?utf-8?Q?The=20First=20Book=20of=20KIM?=
MIME-Version: 1.0

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=fbok.html
Content-Type: text/html; name=fbok.html
Content-Id: <op.mhtml.1230080435216.431256454e29af27@192.168.1.103>
Content-Location: http://users.telenet.be/kim1-6502/6502/fbok.html
Content-Transfer-Encoding: 8bit

<html>
<head>
<meta name="description" content="The First Book of KIM">
<meta name="keywords" content="First Book Of KIM,KIM-1,Jim Butterfield,Charles Eaton,Lew Edwards,Peter Jennings,Ron Kushnier,Cass Lewart,Dan Lewart,Stan Ockers,James Van Ornum,Charles Parsons,Jim Pollock,Eric Rehnke,Joel Swank,Erik Van den Broeck,Users Notes">
<meta name="GENERATOR" content="Arachnophilia 4.0">
<meta name="FORMATTER" content="Arachnophilia 4.0">
<meta name="author" content="erik.vdbroeck at telenet.be">
<title>The First Book of KIM</title>
</head>
<body bgcolor="white" text="black">
<pre>
<div align="center"><img src="fbokpics/fbokcover.jpg" alt="cover picture"></div>
<UL>
<TT>


<p align="center">IN THIS BOOK ...</p> 

<p align="center">          you'll find:</p>

--A BEGINNER'S GUIDE TO KIM PROGRAMMING: which 
 takes the absolute beginner, step by step, through 
 the fundamentals of understanding and writing 
 programs . . .<div align="right">. . . <a href="#p5">PAGE 5</a></div>

--RECREATIONAL PROGRAMS: dozens of programs 
 including games, diversions and educational 
 programs; fully detailed so that you can learn 
 from the programming techniques as well as 
 have fun. All programs run on the basic KIM-1
 system . . .<div align="right">. . . <a href="#p23">PAGE 23</a></div>

--DIAGNOSTIC & UTILITY PROGRAMS: to help you 
 test your KIM computer - to help you test other devices, 
 such as cassette recorders - and to make your
 KIM a more powerful machine . . .<div align="right">. . . <a href="#p114">PAGE 114</a></div>

--EXPANDING YOUR KIM: guidelines on how to 
 expand your KIM from the basic small-but-powerful 
 KIM-1 system to a huge-and-super-powerful 
 machine. Understanding the jargon; seeing 
 what1s available in both hardware and software.
<div align="right">. . . <a href="#p143">PAGE 143</a></div>

--CONNECTING TO THE WORLD: an introduction to 
 the methods by which KIM can read or sense 
 other devices, and can in turn control other
 mechanisms . . . <div align="right">. . . <a href="#p155">PACE 155</a></div>

--POT POURRI: other useful pieces of information 
 about your KIM system; reference material,
 hints, etc . . . <div align="right">. . . <a href="#p166">PAGE 166</a></div>
<p align="center">
1</p>
<hr>




<div align="center">
Additional copies may be obtained
for $9.00 postpaid from:         

           ORB                   
           P.O. Box 311          
           Argonne, Illinois     
                     60439       

Quantity discounts available.    
</div>





                   Acknowledgements:
<div align="center">
Thanks to all who have supported the KIM-1/65O2 
User Notes, from which much of this material was
taken. A special thanks to Earl Nied for the use
of his KIM interfaced Selectric                </div>
<p align="center">
2</p>
<hr>

<center><img src="fbokpics/t.gif" width=44 height=55 alt="the first book of kim"><img src="fbokpics/h.gif" width=56 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/f.gif" width=47 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/b.gif" width=49 height=56><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/o.gif" ><img src="fbokpics/k.gif" width=53 height=57>





<img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/f.gif" width=47 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/k.gif" width=53 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/m.gif" width=67 height=56></center>



<div align="right">Dedicated to the person who just purchased a KIM-1
and doesn't know what to do with it .......   




















Edited By:            
<a href="mailto:fjb@torfree.net?subject=ref=FBOK @ www.ping.be/kim-1__6502">Jim Butterfield</a>
Stan Ockers    
<a href="mailto:eric@rehnke.net?subject=ref=FBOK @ www.ping.be/kim-1__6502">Eric Rehnke</a>   </div>

<div align="center">copyright 1977 by F.J. Butterfield</div>
<p align="center">
3</p>
<hr>
<a name="p4">
Individual programs in this book were
contributed by the various authors without
copyright restrictions.

These programs may be used or copied without
restriction.  It is, however, common courtesy
to quote author and source when copying; and
a copy of any published material should be
sent directly to the author.

In general, program authors welcome comments,
suggestions or revisions to their programs.
Depending on circuinstances, they may not find
it possible to reply to all correspondence.

If you develop a program that you'd like to
share vith other KIM users, send it in to
KIM/6502 User Notes, P.O. Box 33077,
N. Royalton Ohio 44133.  It might appear in
User Notes .. and even in a future <u>Book of KIM</u>.




The KIM-1 microcomputer is manufactured by
Commodore/MOS Technology, 950 Rittenhouse Road,
Norristown PA 19491. It may be obtained directly
from the manufacturer, or from many hobbyist computer
retail stores. At the time of writing, the complete
KIM-1 system (less power supply) sells for $245.

All programs in this book run on the basic KIM-1
system, (two require an audio amplifier).
<p align="center">
4</p>
<hr>
<a name="p5">


<center><img src="fbokpics/5.gif" width="500" height="752" alt="A BEGINNERS GUIDE TO KIM PROGRAMMING"></center>




<p align="center">
5</p>
<hr>

<u>A BEGINNER'S GUIDE TO KIM PROGRAMMING.</u>

Running programs can be fun.  But writing programs can be 
even more fun .. and exasperating, and exhilarating, too!

When you get the hang of it - and it will take time -
you'll be able to create your own games, diversions, or
useful routines.  This section tries to introduce you to
the mechanics of programming, so you can find your own way
at your own speed.

Don't be afraid to use ideas from other parts of this book. 
If you like, try changing parts of a program or two and see 
what happens.  And you can borrow whole sections of coding 
from another program if it does something you want.

LOOKING AT MEMORY

<u>Random Access Memory.</u>

If you've just turned your KIM system on, press the 
RS (Reset) button to get things started.  Hit the following 
keys: AD (for ADDRESS) 0 0 0 0. You've just entered the 
address of memory cell 0000, the lowest numbered one in 
memory. The display will show 0000 (the number 
you entered) on the left.  On the right, you'll see the 
contents of cell 0000:  it will be a two digit number. That 
number might be anything to start with; let's change it.

Press key DA (for DATA).  Now you're ready to change the 
contents of cell 0000.  Key in 44, for example, and you'll 
see that the cell contents have changed to 44.

Hit the + button, and KIM will go to the next address. 
As you might have guessed, the address following 0000 is 
0001.  You're still in DATA mode (you hit the DA key, 
remember?), so you can change the contents of this cell.
This time, put in your lucky number, if you have one. 
Check to see that it shows on the right hand part of the 
display.

This kind of memory - the kind you can put information into 
- is called RAM, which stands for Random Access Memory. 
Random access means this: you can go to any part of memory 
you like, directly, without having to start at the lowest 
address and working your way through.  Check this by going
straight up to address 0123 and looking at its contents 
(key AD 0 1 2 3) then address 0000 (key AD 0 0 0 0), which 
should still contain the value 44 that we put there.
<p align="center">
6</p>
<hr>

<u>Hexadecimal Numbers </u>

Now that you're back at address 0000, let's step through 
several locations using the + key. Don't worry about 
contents too much.  0001 will still contain your lucky 
number, of course, but keep stepping with the + key until 
you reach 0009.  What will the next address be?  Most people 
would think that the next number should be 0010, and that 
would be correct if KIM used the familiar decimal numbering 
scheme.  But KIM still has six more digits to go past 9,
because it uses a computer numbering scheme called
Hexadecimal.  Hit the + key and you'll see address 000A come up.

Don't let the alphabetic confuse you - to KIM, A is just 
the digit that comes after 9.  And there are more digits to 
come.  Keep pressing the + button and you'll see that A is 
followed by B, C, D, E and F.  Finally, after address 000F, 
you'll see address 0010 appear.

A word about pronunciation: don't call address 0010 "ten"; 
say "one zero" instead.  After all, it isn't the tenth value 
after 0000, it's really the sixteenth (the word Hexadecimal 
means: based on sixteen).

If you don't understand why the letters appear, don't worry
about it too much.  Just understand, for the moment, that 
the alphabetics represent genuine numbers.  So if you're 
asked to look at address 01ED, you'll know  that it's a 
legitimate address number like any other. And if you're 
told to store a value of FA in there, go right ahead -
you're just putting a number into memory.

When you get time, you'll find lots of books that explain 
Hexadecimal numbering in detail.  There's even an appendix 
in your 6502 Programming Manual on the subject. It makes 
important and worth-while reading.  But for now, just 
recognize that although the numbers may look a little 
funny, they are still exactly that: numbers.

<u>Read Only Memory </u>

So far, we've talked about one kind of memory, called RAM. 
You recall that we said that you can store numbers into 
RAM.

There's another kind of memory in KIM, but you can't store 
numbers there. It's called ROM, for Read Only Memory. This kind 
of memory contains fixed values that cannot be 
changed .
<p align="center">
7</p>
<hr>

For example, let's look at address 1C3A (key AD 1 C 3 A). 
You'll see the value 18, and that value never changes.  Try 
it: press DA 6 6 to try to change the contents to 66.  See 
how it won't work?

ROM contains pre-stored programs which do important things 
like lighting the display, detecting keyboard input, and 
reading or writing your cassette tape.  These programs are 
called the <u>Monitor</u>.  In fact, the name KIM stands for 
Keyboard Input Monitor in recognition of the importance of 
these programs.  We'll talk briefly about the Monitor 
programs later.

<u>Special Memory Locations </u>

A few addresses in KIM are connected to things that aren't 
really memory at all.  You can read up on them in the KIM 
User Manual when you're ready; we'll just point out a few 
examples here.

If you try to store a number into address 1700, for 
example, you might find that instead of storing the value, 
KIM will convert it to voltages and deliver these voltages 
to certain pins on your Application Connector at the edge 
of the board!  Another example: address 1704 connects to a 
very fast <u>timer</u> - look at that address and you'll see 
"time going by" as a blur!
<p align="center">
8</p>
<hr>

<u>MINI-PROGRAM A</u>: Swap the contents of two locations.

This is our first beginner's program.

It doesn't do much: just exchanges the contents of
locations 0010 and 0011.  But it's a start, and you'll
learn quite a few things about getting KIM programs 
going.

CAUTION:  before running this or any other program, be 
sure that you have set the contents of the KIM "vector"
locations as follows:

  Set address 17FA to 00
  Set address 17FB to 1C
  Set address 17FE to 00
  Set address 17FF to 1C

The first two locations are needed so that your SST 
switch and ST key will work right The last two make the 
BRK (break) instruction behave properly.  You MUST ALWAYS 
SET UP THESE LOCATIONS AS SOON AS YOU TURN ON YOUR KIM 
SYSTEM.

<u>Loading the Program </u>

We'll take time to describe how the program works later.
First, let's see how to load it.  A <u>listing usually</u> 
looks something like this:

  0200 A5 10    START LDA 10   address 10 to A
  0202 A6 11          LDX 11   address 11 to x
  0204 85 11          STA 11   A to address 11
  0206 86 10          STX 10   X to address 10
  0208 00             BRK      stop the program

The business end of the program - the part that goes into
the computer - is the group of numbers on the left hand 
side.  The stuff on the right helps explain what the 
program does.

If you look at the numbers on the left, you'll see that
the first one, 0200, looks like an address.  That's exactly
what it is, and we can start by entering it with 
AD 0 2 0 0. The next number in A5, and that will be its 
contents.  So hit DA A 5, and the display will confirm 
that we've put it in.
<p align="center">
9</p>
<hr>

Keep going on the same line.  Each line of the program 
listing may contain more than one value - for more than 
one address.

The next value is 10, and it needs to go into 0201.
You don't need to enter the address.  Just hit the + 
key and there you are - enter 1 0 and you've got it. 
Notice you didn't need to hit DA; you stay in Data mode 
until you press the AD key.  Continue to the next 
line: just hit + A 6 + 1 1 and keep going until you've 
put the 00 in location 0208.  Congratulations!  You've 
loaded your first program.  Now go backand check it 
for correctness.  Hit AD 0 2 0 0 and use the + key to 
step through and check the values.

Now let's run the program and see if it works.  First,
look at the contents of addresses 0010 and 0011.  Make 
a note of them; when the program runs, it will swap
those two values.

Keep in mind that loading the program doesn't make
anything happen.  You have to run it to do the job -
and that's what we'll do next.

<u>Running the Program </u>

Set address 0200.  That's where the first instruction 
in the program is located - you may have noticed that 
it's marked START in the listing.  Now the display 
shows 0200 A5, and we're ready to go.  So - hit GO. 
And the program will run.

Doesn't take long, does it? The display will have 
changed to 020A xx.  If the display shows any other 
address, something's wrong.  Check that your SST switch 
is off (left), that the program is entered correctly, 
and that your vectors are OK.

Your program ran in less than a fifty thousandth of a 
second. No wonder you didn't see the display 
flicker.

Now check that the program did indeed run correctly by
looking at the contents of locations 0010 and 0011.
You'll see that they have been exchanged.
<p align="center">
10</p>
<hr>

<u>How it works</u>

Inside the Central Processor (the heart of the 
computer) are several temporary storages called 
registers.  You can LOAD many of these registers with 
the contents of memory; and you can STORE the contents 
of the registers into memory.  The two registers we are 
using here are called A and X.

If we Load A from address 10, A now contains a copy of
the contents of 0010.  Location 0010 itself won't be
changed; it will also contain that number.  We do the
same thing when we Load X from address 0011.

Now our A and X registers contain copies of the numbers
in 0010 and 0011 respectively.  If we Store A into
address 0011, that address will now contain a copy of
the value in A - which was originally the contents of
address 0010, remember?  Finally, we Store X into 0010
to complete the swap.

Look at the listing again.  On the right hand side, we
have the program exactly as we have described it, but
abbreviated.  You can see that LDA means Load A and so
forth.  The BRK (Break) at the end stops the program.

<u>Step by Step </u>

Let's go through the program a step at a time - 
literally.  Maybe you're satisfied that it works.  Even 
so, follow this procedure.  It will show you how to 
test any KIM program.

First go back to addresses 0010 and 0011 and put a 
couple of brand new numbers there.  This will help you 
see the computer operating.

Now set address 0200 again, but don't press GO yet.

We're going to "Single Step" our program, and see every
instruction work.  So slide the SST (Single Step) 
switch over to the right ... and then read the next 
section carefully.
<p align="center">
11</p>
<hr>

 <u>Seeing the Registers </u>

Registers A and X, plus quite a few we haven't talked 
about, are inside the 6502 microprocessor chip. There's 
no way you can view them - they are buried deep within 
the electronics.

To help you out, the KIM Monitor system will write out 
a copy of these registers into memory where you can 
inspect them.  The contents of the A register may be 
seen at address 00F3, and the contents of the X 
register at 00F5.

Don't be confused: These locations are not the actual 
registers, just copies made for your convenience.  But 
it's a great convenience, for it allows you to see 
everything that's going on inside the microprocessor.

<u>A Small Step for a Computer, but ... </u>

If you're set up at location 0200 and your SST switch 
is on, hit the GO button once.  The display will show 
0202. That means: instruction at 0200 completed, ready 
to do the one at 0202.

Okay, let's check everything in sight. The first 
instruction was to load the A register, right? Enter 
address 00F3 and check that its contents (which 
correspond to the contents of A) are indeed the value 
from address 0010. If you like, look at 0010 and 
confirm that it hasn't changed.

NOW for a clever KIM touch.  If you're ready to proceed 
with the next instruction, hit PC (for Program Counter) 
and you'll find yourself back at address 0202, ready to 
perform the next instruction.

You've executed one instruction, performed one program 
step. Remember this: No matter how complex the program, 
it always operates one simple step at a time. And now 
you know how to check out each step, individually.

Hit GO and execute one more instruction. Check it out - 
remember that you'll find X at address 00F5.
<p align="center">
12</p>
<hr>

>From this point, find your own way through the last two 
instructions.  Don't bother about the BRK (Break); 
it just stops the program.  As the two registers are 
stored, you'll want to check that the memory addresses 
have been changed as expected.

<u>Summary </u>

The most important things that you've learned about 
coding are:

  --the BRK (code 00) command stops the program;
  --the SST switch causes a single instruction to be 
executed
  --the internal registers can be viewed.

BUT YOU MUST SET YOUR VECTORS PROPERLY (see the 
beginning of this section) OR NONE OF THE ABOVE WILL 
WORK!

A complete list of the register image addresses can be 
found in the KIM User Guide on <a target="man window" href="http://www.ping.be/kim-1__6502/6502/usrman.html#F313">page 39</a>, <a  target="man window" href="usrman.html#F313">Fig. 3-13</a> - 
when you need it.

>From here on, you don't have to take anybody's word for 
any KIM operation.  You can go to your KIM, set SST, 
and try it for yourself.

<u>Exercises </u>

1. Can you change the program so that it swaps the 
contents of locations 0020 and 0021?

2. Billy Beginner wrote the following program to swap 
the contents of locations 0010 and 0011:

   0200 A5 10   START LDA 10   put 0010 into A
   0202 85 11         STA 11   store A to 0011
   0204 A6 11         LDX 11   put 0011 into X
   0206 86 10         STX 10   store X to 0010
   0208 00            BRK      stop

It didn't work.  Can you see why?

3. Can you write a program to take the contents of 
address 0010 and place the same value in locations 
0011, 0012, and 0013?
<p align="center">
13</p>
<hr>

<u>MINI-PROGRAM B:  </u> Setting many locations to zero

Here's the program:

   0200 A9 00   START LDA #0    value 0 into A
   0202 A2 09         LDX #9    start X at 9
   0204 95 30   LOOP  STA 30,X  zero into 0030+X
   0206 CA            DEX       decrease X by 1
   0207 10 FB         BPL LOOP  back if X positive
   0209 00            BRK       stop the program

This program, when you load and run it, will set the
value of the ten locations from 0030 to 0039 to zero.

We can't give you a whole programming course here
Hopefully, you'll use the <a target="man window" href="http://www.ping.be/kim-1__6502/6502/proman.html">Programming</a> <a  target="man window" href="proman.html">Manual</a> and the
single-step feature to trace out exactly what the
program does.   But here are a few highlights:

When we load registers A and X in the first two
instructions, we don't want to load the contents of a
memory location.  Instead, we want the actual values 0
and 9.  To do this, we use a new kind of addressing
called IMMEDIATE addressing.

Immediate addressing, when we use it, says "Don't go to 
memory; use this value."  Immediate addressing can be 
spotted two ways.  First, note the # sign that we use 
in writing the program: that signals that we are using
immediate mode addressing.  Secondly, you may have 
noticed that the computer instruction (called the Op 
Code) has changed: the previous program used code A5 
to mean LDA; now we're using A9, which also means LDA 
but signals immediate addressing.

You can - and should - use the SST feature to check 
that immediate addressing works as advertised

The instruction at 0204 uses the X register for 
INDEXING.  That means that instead oŁ storing the A 
value in address 30, the computer first calculates an 
<u>effective address</u> by adding the contents of the X 
register to the "base address" of 30.  Since X contains 
9 the first time through, the effective address will be 
30+9 or 39 - and that's where we store our A value of 
00.  Later, X will be decreased to a value of 8, so 
we'll store into address 38.
<p align="center">
14</p>
<hr>

Indexing seems complicated, but remember that it's a 
very powerful feature of KIM.  Try to get the hang of 
it; it's well worth the effort.

The DEX instruction (Op Code CA) is the one that 
decreases X from 9 to 8 (and later to 7, 6, S and so 
on).  Eventually, as this part of the program is 
automatically repeated, X will reach a value of 00. 
Finally, when we decrement X one more time, X will go 
to value FF, which KIM "sees" as a negative number, 
kind of like the value -1.  KIM views all values in the
range 80 to FF as negative - when you're ready, the 
<a target="man window" href="http://www.ping.be/kim-1__6502/6502/proman.html">Programming</a> <a  target="man window" href="proman.html">Manual</a> will tell you more.

The BPL instruction at line 0207 is a CONDITIONAL 
TEST.  BPL means Branch Plus.  If the result of our 
previous operation (Decrement X) gives us a positive, 
or plus, number, we will branch back to address 0204 
and repeat the instructions from that point.  The X 
values of 9, 8, 7 .., down through 0 are all positive 
or plus; so each time we'll go back and set one more 
location in memory to value zero.  Finally, X becomes 
equal to value FF - a negative number.  So in this 
case, BPL won't branch:  the "plus" or "positive" 
condition isn't satisfied.

This last time, since BPL doesn't take us back, we 
proceed to the following instruction, BRK, which stops 
the program.  That's OX because we've done our job of 
setting addresses 0030-0039 to value zero.

Single step the program carefully, checking the value 
of X from time to time (location 00F5, remember?).
Satisfy yourself that you can see it working.

By the way, that funny address on the branch 
instruction (F0) is a special kind of addressing mode 
called RELATIVE addressing.  All branches use it: it's 
worth reading up on.

<u>Exercises</u>.

1. Can you change the program to place value 55 in the 
above locations?

2. Can you change the program to place value 00 in 
locations 0030 to 0037?

3. Can you change the program to place value FF in 
locations 00A0 to 00BF?
<p align="center">
15</p>
<hr>

INTERLUDE - PROGRAM TESTING

You've met one very powerful tool for checking out 
programs - the Single Step mode of operation.  Let's 
review it and talk about a few others.

The SST mode is especially useful because you can pause 
between instructions and look at memory or registers. 
The register values are copied into memory locations 
from 00EF to 00F5, and while they are not real
registers, just copies, they are just as good for 
testing purposes.  Not only can you look at them, you 
can change them to new values.  This ability to change a 
register can be handy in solving the "what if ... " type 
of question, or shortening testing of a loop.

For example, if you are single-stepping through
mini-program B and you don't want to go around the loop
a full ten times, you might use this trick.  Go around a
couple of times to get the loop started, and then change
X (00F5) to a much lower value, say 1 or 2.  Go back to
single-stepping.  A couple more turns around the loop,
and you're out.  Using this method, you won't have set
the whole ten locations to zero, of course.  But you
will see that the loop itself is working right.

<u>The Inserted BRK (Break) </u>

Sometimes SST seems slow.  You might have a long 
program, and you're sure that the first part is 
working.  What you want is a way to run directly through 
the first bit, and then stop and single-step the rest.

It's not hard.  Decide where you want the program to 
stop, so you can start single-stepping.  Then put a BRK 
command, code 00, at that point.

You'll have to wipe out a live instruction, of course, 
but that's OK.  You can put it back after the halt has 
happened.

Let's try doing that on mini-program B.  Let's say we 
want to run straight through to the BPL instruction at 
0207, and then single-step from that point on.
<p align="center">
16</p>
<hr>

Change 0207 (previously 10) to value 00, the BRK
command.  Now go to the beginning of the program
(0200); be sure SST is off, and hit GO.  You'll see
0209 00 on the display, which tells you that the halt
at 0207 has worked.  Now go back to 0207, put the value
of 10 (for BPL) back in, set the SST switch on, and
you're ready to step.  Easy? You bet - and you can save
lots of time this way in testing big programs.

<u>No Operation (NOP, code EA) </u>

It sounds funny, but a very handy instruction is one 
that doesn't do anything.  When the microprocessor 
encounters Op Code EA (NOP), it does nothing - just 
passes on to the next instruction.

The biggest use of the NOP instruction is to take out 
another instruction that you don't want any more; or to 
leave room in the coding to add another instruction 
later if you need to.

Some programmers write their programs in sections, and
at first they put a BRK instruction between each
section.  That way, when they are testing, the program
will stop after each part, and they can check to see
that each part runs OK.  When they are finished
testing, they change the BRK's to NOP's and the program
will run straight through.

<u>The ST (Stop) Key </u>

When everything is under control in program testing,
you won't need the ST key.  But sometimes the program
'gets away' on you - and the only way to find out what
it's doing is to use this key.

Let's wreck mini-program B by wiping out the DEX 
instruction.  We'll do this by replacing it with a NOP; 
so write value EA into location 0206.  What will 
happen?

When we run the program, the X register will never 
change from its starting value oŁ 9 because we don't 
have a DEX instruction.  So the program will keep 
branching back to LOOP forever, and it will never 
stop.  We've created this situation artificially, of 
course, but it could have happened by oversight when we 
were writing the program.
<p align="center">
17</p>
<hr>

Set address 0200, SST off, and hit GO.  Everything goes 
dead.  Our program is running but it will never stop. 
Meanwhile, the display is dark.  This time we know why 
it's happening.  But if we didn't, how would we solve 
it?

Press ST - stop - and the computer will freeze.  The 
display will light showing the next instruction we were 
about to execute.  If we wanted to pinpoint the 
trouble, we could flip over to SST now and track the 
problem down, step by step.

A last comment on the ST button: If the display goes 
dark and pressing ST doesn't relight it, the computer 
has a different problem.  It has gone berserk due to a 
completely illegal Op Code.  Press the RS (Reset) 
button now you'll need to start over and use the BRK 
and SST features to track down the trouble,
<p align="center">
18</p>
<hr>

<u>MINI-PROGRAM C: </u> Displaying values

KIM has a 6-digit display.  You can show information on 
the display quite easily, if you know how.

In the KIM Monitor programs there are several packages 
called <u>subroutines</u> that you can call upon to do 
certain jobs.  You could write the same coding for 
these jobs yourself; but use the monitor subroutines to 
save time and trouble.

When you give the command JSR SCANDS (coded 20 1F 1F), 
the Monitor will briefly light the display with the 
data it finds in addresses 00FB, 00FA, and 00F9. 
That's three locations, each displaying as two digits, 
so the full six-digit display is filled.

"Briefly" means exactly that.  The display lights for a 
split second. To get a steady display, you must repeat 
the JSR SCANDS command over and over again.  Use a 
loop, of course; no point in filling up your program
with JSR SCANDS instructions.

You should also know that when you call this Monitor 
subroutine, the contents of your registers are wiped 
out.  So if you have something important in the A 
register that you will want to use after giving JSR
SCANDS, be sure to put it safely somewhere in memory or 
you'll lose it.  The same goes for other registers like 
as X and Y.

Here's a simple program to show 0000 00 on the 
display.  Note that we must put the value 00 into 
addresses FB, FA, and F9 before we call JSR SCANDS

   0200 A9 00    START  LDA #0      zero into A
   0202 85 PB           STA POINTH  first 2 digits
   0204 85 FA           STA POINTL  next 2 digits
   0206 85 F9           STA INH     last 2 digits
   0208 20 1F 1F  LOOP  JSR SCANDS  light up!
   020B 4C 08 02        JMP LOOP    do it again
<p align="center">
19</p>
<hr>

This program never ends, so eventually you'll have to 
stop it with the RS or ST keys.  See how the last 
instruction jumps back to address 0208 so the display 
is lit continuously?  Another interesting point: see 
how the jump address at 020B is "backwards" - 08 02 
instead of 0208? This is called "low order first" 
addressing and you'll see a lot of it on the KIM 
system.

The single-step feature doesn't work too well on 
Monitor subroutines. That's normal, and it's not 
serious.  These subroutines are well tested and
dependable, so you shouldn't need to use SST with 
them.

<u>Exercises </u>

l. Can you change the program to make the display show 
5555 55?

2. Can you write a program to make the display show 
1234 56?

3, How about a program to show the word EFFACE? or 
FACADE? or COOCOO?






<p align="center">
20</p>
<hr>

<u>MINI-PROGRAM D: </u> reading the keypad

To read the KIM pushbuttons you have another Monitor 
subroutine called GETKEY.  You "call" it with 
JSR GETKEY (20 6A 1F).  This subroutine will give you 
the identity of the key that is being pressed at that 
moment as a value in the A register.  You can continue 
by using this value any way you want.  If no key is 
being pressed at the time, you'll get a value of 15 in 
A.

There are a couple of cautions on the use of 
JSR GETKEY.  First, you must not be in Decimal Mode. 
If you're not sure about this, give a CLD (D8) 
instruction at the beginning of your program. 
Secondly, before giving JSR GETKEY, you must "open up 
the channel" from the keyboard with either one of two 
subroutines:  JSR SCANDS or JSR KEYIN.  You've met 
JSR SCANDS before: it's used to light the display.  If 
you don't want to light the display, use JSR KEYIN 
(20 40 1F) before using JSR GETKEY.

This program reads the keyboard and displays what it 
sees:

   0200 D8       START CLD         clr dc mode
   0201 A9 00          LDA #0      zero into A
   0203 85 FB    STORE STA POINTH
   0205 85 FA          STA POINTL
   0207 85 F9          STA INH
   0209 20 1F 1F       JSR SCANDS  light display
   020C 20 6A 1F       JSR GETKEY  test keys
   020F 4C 03 02       JMP STORE

<u>Exercises</u>.

1. Do you think that the instruction at 0201 is really
needed?  Try removing it (change 0201 and 0202 to EA)
and see.

2. What values do you get for the alphabetic keys? For
keys like PC and GO?  Are there any keys that don't
work with JSR GETKEY?

3. Try running in decimal mode (change 0200 to SED, 
code F8). What happens?  Is it serious?  How about key 
F?

4. Can you change the program so that only the last 
digit of the display changes with the keyboard?
<p align="center">
21</p>
<hr>

CONCLUSION

You've reached the end of our little Beginner's Guide. 
But you've only started on the road towards 
understanding programming.

Use the tools we have given you here to forge your own 
path.  KIM is a very rich machine.  You have 56 Op 
Codes to choose from, and many powerful addressing 
combinations.  You don't need to learn them all right 
away, hut when you need them, they'll be there.

The KIM <a target="man window" href="http://www.ping.be/kim-1__6502/6502/proman.html">Programming</a> <a  target="man window" href="proman.html">Manual</a> makes good reading.  Don't
try to go through the whole thing at one sitting.  Stop 
and try a few things; you have the Single Step feature 
to help you understand what each instruction really 
does.

Try leafing through - or stepping through - other 
people's programs, to understand what makes them tick. 
Change the coding, if you like, to see what happens. 
When you see a program that does something you want to do,
borrow the coding - you don't need to re-invent the 
wheel.

Don't be discouraged when your program doesn't work on 
the first try.  Even experts have to spend time getting 
the "bugs" out of their coding.  It's part of the 
game:  Think of yourself as Sherlock Holmes, 
methodically tracking down the elusive villains.

A proverb says that a journey of a thousand miles 
starts with the first step.  In the same way, the 
biggest programs still operate one step at a time.

So forge ahead at your own speed.  Communicate with 
other KIM owners; you'll have a lot of information 
to swap.

But most of all:  have fun,







<p align="center">
22</p>
<hr>
<a name="p23">


<center><img src="fbokpics/23.gif" width="500" height="799" alt="GAMES AND DIVERSIONS"></center>




<p align="center">
23</p>
<hr>

<img src="fbokpics/a.gif" width=47 height=56 alt="addition"><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/n.gif" width=57 height=57><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>


DIRECTIONS -

HERE'S A HANDY LITTLE ADDING MACHINE PROGRAM.  KIM BECOMES
A SIX DIGIT ADDER.  "GO" CLEARS THE TOTAL SO YOU CAN START
OVER.  THEN ENTER A NUMBER AND HIT THE PLUS KEY TO ADD IT
TO THE PREVIOUS TOTAL.  IF YOU MAKE A MISTAKE IN ENTERING
A NUMBER, JUST HIT THE "0" KEY SEVERAL TIMES AND ROLL THE
BAD NUMBER OUT BEFORE ENTERING THE CORRECTION.  NO OVERFLOW
INDICATOR, AND NO SUBTRACTION OR MULTIPLICATION - MAYBE YOU
WOULD LIKE TO TRY YOUR HAND AT ADDING THESE. THE PROGRAM 
IS FULLY RELOCATABLE.



    0200 20 1F 1F START JSR SCANDS     light disnlay
    0203 20 6A 1F       JSR GETKEY     read keyboard
    0206 C5 60          CMP PREV       same as last tine?
    0208 F0 F6          BEQ START      yes, skip
    020A 85 60          STA PREV       no, save new key
    020C C9 0A          CMP #$0A       numeric key?
    020E 90 29          BCC NUM        yes,branch
    0210 C9 13          CMP #$13       GO key?
    0212 F0 18          BEQ DOGO       yes, branch
    02l4 C9 12          CMP #$12       +key?
    0216 D0 E8          BNE START      no, invalid key
    0218 F8 18          SED CLC        prepare to add
    02AA A2 FD          LDX #$FD       minus 3; 3 digits
    021C B5 FC    ADD   LDA POINTH+l,X display digit
    021E 75 65          ADC ACCUM+3,X  add total
    0220 95 FC          STA POINTH+1,X total to display
    0222 95 65          STA ACCUM+3,X  & to total accum
    0224 E8             INX            next digit
    0225 30 F5          BMI ADD        last digit?
    0227 86 61          STX FLAG       flag total-in-display
    0229 D8             CLD
    022A 10 D4          BPL START      return to start
    022C A9 00    DOGO  LDA #$0        set flaG for
    022E 85 61          STA FLAG       total-in-display
    0230 A2 02          LDX #2         for 3 digits...
    0232 95 F9    CLEAR STA INH,X      clear display
    0234 CA             DEX            next digit
    0235 10 FB          DPL CLEAR      last digit?
    0237 30 C7          BMI START      finished, back to go
    0239 A4 61    NUM   LDY FLAG       total-in-display?
    023B D0 0F          BNE PASS       no, add new digit
    023D E6 61          INC FLAG       Clear t-i-d flag
    023F 48             PHA            save key
    0240 A2 02          LDX #2         3 digits to move
<p align="center">
24</p>
<hr>

    0242 B5 F9    MOVE  LDA INH,X      get display digit
    0244 95 62          STA ACCUM,X    copy to total Accum
    0246 94 F9          STY INH,X      clear display
    0248 CA             DEX            next digit
    0249 10 F7          BPL MOVE       last digit?
    024B 68             PLA            recall key
    024C 0A 0A    PASS  ASL A ASL A    move digit..
    024E 0A 0A          ASL A ASL A    ..into position
    0250 A2 04          LDX #4         4 bits
    0252 0A       SHIFT ASL A          move bit from A
    0253 26 F9          ROL INH        ..to INH..
    0255 26 FA          ROL POINTL     ..to rest of
    0257 26 FB          ROL POINTL         display
    0259 CA             DEX            nuxt bit
    025A D0 F6          BNE SHIFT      last bit?
    025C F0 A2          BEQ START      yes. back to start


<div align="center">xxxxx HEX DUMP - ADDITION XXXXX</div>


0200 20 1F 1F 20 6A 1F C5 60 F0 F6 85 60 C9 0A 90 29
0210 C9 13 F0 18 C9 12 D0 E8 F8 18 A2 FD B5 FC 75 65
0220 95 FC 95 65 E8 30 F5 86 61 D8 10 D4 A9 00 85 61
0230 A2 02 95 F9 CA 10 FB 30 C7 A4 61 D0 0F E6 61 48
0240 A2 02 B5 F9 95 62 94 F9 CA 10 F7 68 0A 0A 0A 0A
0250 A2 04 0A 26 F9 26 FA 26 FB CA D0 F6 F0 A2







NOTE:    WHENEVER SPACE PERMITS, A HEX DUMP OF THE
      PROGRAMS LISTED WILL BE GIVEN.  THESE DUMPS
      WERE TAKEN FROM ACTUAL RUNNING PROGRAMS.  SO,
      IF THERE IS A DISCREPANCY BETWEEN THE LISTING
      AND THE DUMP, THE LISTING IS MOST PROBABLY IN
      ERROR.



<p align="center">
25</p>
<hr>

<img src="fbokpics/a.gif" width=47 height=56 alt="asteroid"><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/d.gif" width=50 height=56><DIV ALIGN="RIGHT">BY STAN OCKERS</div>


YOU ARE PILOTING YOUR SPACECRAFT BETWEEN MARS AND JUPITER WHEN
YOU ENCOUNTER A DENSE PORTION OF THE ASTEROID BELT.  PRESS KEY
ZERO TO MOVE LEFT, THREE TO MOVE RIGHT.  WHEN YOUR CRAFT IS HIT
THE DISPLAY WILL GIVE A NUMBER TO INDICATE HOW SUCESSFUL YOU
WERE.  THE PROGRAM STARTS AT 0200.


0200 A9 00               LDA #$00      ...INITIALIZE COUNTER...
0202 85 F9               STA 00F9
0204 85 FA               STA 00FA
0206 85 FB               STA 00FB
0208 A2 06               LDX #$06      ...INITIALIZE 00E2-00EB
020A BD CE 02 INIT       LDA 02CE,X
020D 95 E2               STA 00E2,X
020F CA                  DEX
0210 10 F8               BPL INIT
0212 A5 E8    TOGG       LDA 00E8      ...TOGGLE 00E8...
0214 49 FF               EOR #$FF
0216 85 E8               STA 00E8      (FLASHER FLAG)
0218 A2 05               LDX #$05      DELAY BETWEEN FLASHES
021A 20 48 02 LITE       JSR DISP      DISPLAY AND..
021D 20 97 02            JSR CHEK      CHECK FOR MATCH
0220 CA                  DEX
0221 D0 F7               BNE LITE
0223 20 40 1F            JSR KEYIN     SET DIRECTIONAL REGS.
0226 20 6A 1F            JSR GETKEY    GET KEYBOARD ENTRY
0229 C9 15               CMP #$15      A VALID KEY?
022B 10 E5               BPL TOGG      NO
022D C9 00               CMP #$00      KEY 0?
022F F0 06               BEQ LEFT      YES, GO LEFT
0231 C9 03               CMP #$03      KEY 3?
0233 F0 0A               BEQ RT        YES, GO RIGHT
0235 D0 0B               BNE TOGG      NOT A VALID KEY
0237 06 E7    LEFT       ASL 00E7      SHIFT CRAFT LEFT
0239 A9 40               LDA #$40      LEFT HAND EDGE?
023B C5 E7               CMP 00E7
023D D0 D3               BNE TOGG      NO, RETURN
023F 46 E7    RT         LSR 00E7      SHIFT RIGHT
0241 D0 CF               BNE TOGG      NOT RIGHT SIDE, RETURN
0243 38                  SEC           OFF EDGE, RETURN TO
0244 26 E7               ROL 00E7      RIGHT SIDE
0246 D0 CA               BNE TOGG      RETURN
                   *** DISPLAY SUBROUTINE ***
0248 A9 7F    DISP       LDA #$7F      PORT TO OUTPUT
024A 8D 41 17            STA 1741
0240 A9 09               LDA #$09      INIT. DIGIT
024F 8D 42 17            STA 1742
0252 A9 20               LDA #$20      BIT POSITION TO
0254 85 E0                STA 00E0      6TH BIT
0256 A0 02    BIT        LDY #$02      3 BYTES
0258 A9 00               LDA #$00      ZERO CHARACTER
025A 85 El               STA 00El
<p align="center">
26</p>
<hr>

025C B1 E2    BYTE       LDA (00E2),Y  GET BYTE
025E 25 E0               AND 00E0      NITH BIT = 1?
0260 F0 07               BEQ HOBT      NO, SKIP
0262 A5 El               LDA 00El      YES, UPDATE
0264 19 E4  00           ORA 00E4,Y    CHARACTER
0267 85 E1               STA 00El
0269 88                  DEY
D26A 10 F0               BPL BYTE      NEXT BYTE
026C A5 E1               LDA 00E1      CHAR. IN ACCUM.
026E C4 E8               CPY 00E8      SHIP ON?
0270 D0 08               BNE DIGT      NO, SKIP
0272 A4 E0               LDY 00E0      IS THIS SHIP
0274 C4 E7               CPY 00E7      DIGIT?
0276 D0 02               BNE DIGT      NO, SKIP
0278 09 08               ORA #$08      ADD IN SHIP
027A 8D 40 17 DIGT       STA 1740      LIGHT DIGIT
027D A9 30               LDA #$30      DELAY (DIGIT ON)
027F 8D 06 17            STA 1706
0282 AD 07 17 DELA       LDA 1707      TIME UP?
0285 F0 FB               BEQ DELA      NO
0287 A9 00               LDA #$00      TURN OFF SEGMENTS
0289 8D 40 17            STA 1740
028C EE 42 17            INC 1742      SHIFT TO NEXT DIGIT
028F EE 42 17            INC 1742
0292 46 E0               LSR 00ED      SHIFT TO NEXT BIT
0294 D0 C0               BNE BIT       MORE BITS
0296 60                  RTS
               **** CHECK SUBROUTINE ****
0297 C6 E9    CHES       DEC 00E9      DEC. TIMES THRU COUNT
0299 D0 1A               BNE MORE      SKIP IF NOT 48TH TIME
029B A9 30               LDA #$20      RESET TIMES THRU COUNT
029D 85 E9               STA 00E9
029F 8A                  TXA           SAVE X
02AO 48                  PHA
02A1 A2 FD               LDX #$FD      NEGATIVE 3 IN X
02A3 F8                  SED           DECIMAL MODE
02A4 38                  SEC           (TO ADD ONE)
02A5 B5 FC    NXTB       LDA 00FC,X    ..INCREMENT COUNTER
02A7 69 00               ADC #$00      WHICH IS MADE OF BYTES
02A9 95 FC               STA 00FC,X    IN DISPLAY AREA (00F9-
02AB E8                  INX           00FB)..
02AC D0 F7               BNE NXTB      NEXT BYTE
02AE D8                  CLD
02AF 68                  PLA           RETURN X
02B0 AA                  TAX
02B1 E6 E2               INC 00E2      ..SET UP FOR NEXT GROUP
02B3 A5 E2               LDA 00E2      OF BYTES..
02B5 C9 30    MORE       CMP #$30      ALL GROUPS FINISHED?
02B7 F0 09               BEQ RECY      YES, RECYCLE ASTR. FIELD
02B9 A0 00     MATCH     LDY #$00      SHIP - ASTEROID MATCH?
02BB A5 E7               LDA 00E7      LOAD CRAFT POSITION
02BD 31 E2               AND 00E2,Y    AND WITH ASTEROID BYTE
02BF D0 07               BNE FIN       IF MATCH, YOU'VE HAD IT
02C1 60                  RTS           EXIT MATCH SUBROUTINE
<p align="center">
27</p>
<hr>

02C2 A9 00    RECY       LDA #$00      GO THRU ASTEROID FIELD
02C4 85 E2               STA 00E2      AGAIN
02C6 F0 F1               BEQ MATCH     UNCONDITIONAL BRANCH
02C8 20 1F 1F FIN        JSR SCANDS    DISPLAY COUNT
02CB 4C C8 02            JMP FIN       CONTINUOUSLY

02CE D5       LOW POINTER, ASTEROID BELT
02CF 02       HIGH POINTER, ASTEROID BELT
02D0 08       MASK, BOTTOM SEGMENT
02D1 40       MASK, MIDDLE SEGMENT
02D2 0l       MASK, TOP SEGMENT
02D3 04       CRAFT POSITION
02D4 FF       FLAG (SHIP ON)

          ***** ASTEROID FIELD *****

02D5-  00 00 00 04 00 08 00 06 12 00 11 00 05 00 2C 00
02E5-  16 00 29 00 16 00 2B 00 26 00 19 00 17 00 38 00
02F5-  2E 00 09 00 lB 00 24 00 15 00 39 00 0D 00 21 00
0305-  10 00 00

        ***** HEX DUMP - ASTEROID *****


0200-  A9 00 85 F9 85 FA 85 FB A2 06 BD CE 02 95 E2 CA
0210-  10 F8 A5 E8 49 FF 85 E8 A2 05 20 48 02 20 97 02
0220-  CA D0 F7 20 40 1F 20 6A 1F C9 15 10 E5 C9 00 F0
0230-  06 C9 03 F0 0A D0 DB 06 E7 A9 40 C5 E7 D0 D3 46
0240-  E7 D0 CF 38 26 E7 D0 CA A9 7F 8D 41 17 A9 09 8D
0250-  42 17 A9 20 85 E0 A0 02 A9 00 85 E1 B1 E2 25 E0
0260-  F0 07 A5 E1 19 E4 00 85 E1 88 10 F0 A5 E1 C4 E8
0270-  D0 08 A4 E0 C4 E7 D0 02 09 08 8D 40 17 A9 30 8D
0280-  06 17 AD 07 17 F0 FB A9 00 8D 40 17 EE 42 17 EE
0290-  42 17 46 E0 D0 C0 60 C6 E9 D0 1A A9 30 85 E9 8A
02A0-  48 A2 FD F8 38 B5 FC 69 00 95 FC E8 D0 F7 D8 68
02B0-  AA E6 E2 A5 E2 C9 30 F0 09 A0 00 A5 E7 31 E2 D0
02C0-  07 60 A9 00 85 E2 F0 Fl 20 1F 1F 4C C8 02 D5 02
02D0-  08 40 01 04 FF 00 00 00 04 00 08 00 06 12 00 11
02E0-  00 05 00 2C 00 16 00 29 00 16 00 2B 00 26 00 19
02F0-  00 17 00 38 00 2E 00 09 00 1B 00 24 00 15 00 39
0300-  00 0D 00 21 00 10 00 00



CHANGES -
YOU CAN MAKE YOUR OWN ASTEROID FIELD STARTING AT 02D5.  THE
GROUP COUNT, (0286), WILL HAVE TO BE CHANGED IF THE FIELD SIZE
DIFFERS.  THE SPEED OF THE CRAFT MOVING THROUGH THE FIELD IS
CONTROLLED BY 027E. WHAT ABOUT A VARYING SPEED, SLOW AT FIRST
AND SPEEDING UP AS YOU GET INTO THE FIELD? WHAT ABOUT A FINAL
"DESTINATION COUNT" AND A SIGNAL TO INDICATE YOU HAVE REACHED
YOUR DESTINATION? HOW ABOUT ALLOWING A HIT OR TWO BEFORE YOU
ARE FINALLY DISABLED?
<p align="center">
28</p>
<hr>
<a name="bagels">

<img src="fbokpics/b.gif" width=49 height=56 alt="bagels"><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/g.gif" width=48 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/s.gif" width=49 height=57><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>


DIRECTIONS -

     THE COMPUTER HAS CHOSEN FOUR LETTERS, ALL OF WHICH ARE 
A,B,C,D,E, OR F.  LETTERS MAY BE REPEATED - FOR EXAMPLE, 
THE COMPUTER'S "SECRET COMBINATION" MIGHT BE CACF OR BBBB.
     YOU GET TEN GUESSES. EACH TIME YOU GUESS, THE COMPUTER 
WILL TELL YOU TWO THINGS: HOW MANY LETTERS ARE EXACTLY CORRECT 
(THE RIGHT LETTER IN THE RIGHT PLACE); AND HOW MANY LETTERS 
ARE CORRECT BUT IN THE WRONG POSITION.
     FOR EXAMPLE, IF THE COMPUTER'S SECRET COMBINATION IS 
CBFB AND YOU GUESS BAFD, THE TWO NUMBERS WILL BE 1 AND 1 
(THE 'F' MATCHES EXACTLY; THE 'B' MATCHES BUT IN THE WRONG PLACE).
THESE NUMBERS WILL SHOW ON THE RIGHT-HAND SIDE OF THE DISPLAY; 
THE CODE YOU ENTERED WILL APPEAR ON THE LEFT.
     MAKE A NOTE OF YOUR GUESSES AND THE COMPUTER'S RESPONSES. 
WITH A LITTLE MENTAL WORK, YOU SHOULD BE ABLE TO BREAK THE 
CODE EXACTLY IN SEVEN OR EIGHT WORDS. A CORRECT GUESS WILL 
PRODUCE A RESPONSE OF '4-0'. IF YOU DON'T GUESS RIGHT IN 
TEN MOVES, THE COMPUTER WILL GIVE YOU THE ANSWER.
     AFTER A CORRECT GUESS, OR AFTER THE COMPUTER TELLS YOU 
THE ANSWER, IT WILL START A NEW GAME (WITH A NEW SECRET CODE) 
THE INSTANT YOU TOUCH A NEW KEY.

   0200 E6 16    GO     INC RND+4      randomize
   0202 20 40 1F        JSR KEYIN      'on' pushbutton delay
   0205 D0 F9           BNE GO
   0207 D8              CLD
   0208 A9 0A    NEW    LDA #$0A       ten guesses/game
   020A 85 18           STA COUNT      new game starting
   020C A9 03           LDA #3         create 4 mystery codes
   020E 85 10           STA POINTR
   0210 38       RAND   SEC            one plus...
   0211 A5 13           LDA RND+1      ...three previous
   0213 65 16           ADC RND+4      random numbers
   0215 65 17           ADC RND+5
   0217 85 12           STA RND        =new random value
   0219 A2 04           LDX #4
   021B B5 12    RLP    LDA RND,X      move random numbers over
   021D 95 13           STA RND+1,X
   021F CA              DEX
   0220 10 F9           BPL RLP
   0222 A6 10           LDX POINTR
   0224 A0 C0           LDY #$C0       divide by 6
   0226 84 11           STY MOD        keeping remainder
   0228 A0 06           LDY #6
   022A C5 11    SET    CMP MOD
   022C 90 02           BCC PASS
   022E E5 11           SBC MOD
   0230 46 11    PASS   LSR MOD
   0232 88              DEY
   0233 D0 F5           BNE SET        continues division
   0235 18              CLC
   0236 69 0A           ADC #$0A       random value A to F
<p align="center">
29</p>
<hr>

   0238 95 00           STA SECRET,X
   023A C6 10           DEC POINTR
   023C 10 D2           BPL RAND
   023E C6 18    GUESS  DEC COUNT      new guess starts here
   0240 30 7A           BMI FINISH     ten guesses?
   0242 A9 00           LDA #0
   0244 A2 0C           LDX #$0C       clear from WINDOW...
   0246 95 04    WIPE   STA WINDOW,X   ...to POINTR
   0248 CA              DEX
   0249 10 FB           BPL WIPE
                 ;
                 ;      WAIT FOR KEY TO BE DEPRESSED
                 ;
   024B 20 CE 02 WAIT   JSR SHOW
   024E F0 FB           BEQ WAIT
   0250 20 CE 02        JSR SHOW
   0253 F0 F6           BEQ WAIT       debounce key
   0255 A5 08           LDA WINDOW+4   new guess?
   0257 F0 08           BEQ RESUME     no, input digit
   0259 29 60           AND #$60
   025B 49 60           EOR #$60       previous game finished?
   025D F0 A9           BEQ NEW        ...yes, new game;
   025F D0 DD           BNE GUESS      ...no, next guess
   0261 20 6A 1F ESUME  JSR GETKEY
   0264 C9 10           CMP #$10       guess must be in
   0266 B0 E3           BCS WAIT       range A to F
   0268 C9 0A           CMP #$0A
   026A 90 DF           BCC WAIT
   026C A8              TAY
   026D A6 10           LDX POINTR     zero to start
   026F E6 10           INC POINTR
   0271 B9 E7 1F        LDA TABLE,Y    segment pattern
   0274 95 04           STA WINDOW,X
   0276 98              TYA
   0277 D5 00           CMP SECRET,X   exact match?
   0279 D0 03           BNE NOTEX
   027B E6 0E           INC EXACT
   027D 8A              TXA            destroy input
   027E 95 0A    NOTEX  STA INPUT,X
   0280 A5 07           LDA WINDOW+3   has fourth digit arrived?
   0282 F0 31           BEQ BUTT       ...no
   0284 A0 03           LDY #3         ...yes, calculate matches
   0286 B9 0A 00 STEP   LDA INPUT,Y     for each digit:
   0289 29 18           AND #$18       has it already been
   028B F0 12           BEQ ON         matched?
   028D B9 00 00        LDA SECRET,Y
   0290 A2 03           LDX #3         if not, test
   0292 D5 0A    LOOK   CMP INPUT,X    ...against input
   0294 F0 05           BEQ GOT
   0296 CA              DEX
   0297 10 F9           BPL LOOK
   0299 30 04           BMI ON
   029B E6 0F    GOT    INC MATCH      increment counter
   029D 16 0A           ASL INPUT,X    and destroy input
   029F 88       ON     DEY
   02A0 10 E4           BPL STEP
<p align="center">
30</p>
<hr>

   02A2 A2 01           LDX #1         display counts
   02A4 B4 0E    TRANS  LDY EXACT,X
   02A6 B9 E7 1F        LDA TABLE,Y
   02A9 95 08           STA WINDOW+4,X
   02AB CA              DEX
   02AC 10 F6           BPL TRANS
   02AE 20 CE 02 DELAY  JSR SHOW       long pause for debounce
   02B1 E6 0F           INC MATCH
   02B3 D0 F9           BNE DELAY
   02B5 20 CE 02 BUTT   JSR SHOW       wait for key release
   02B8 D0 FB           BNE BUTT
   02BA F0 8F           BEQ WAIT
                 ;
                 ;      TEN GUESSES MADE - SHOW ANSWER
                 ;
   02BC A2 03    FINISH LDX #3
   02BE B4 00    FIN2   LDY SECRET,X
   02C0 B9 E7 1F        LDA TABLE,Y
   02C3 95 04           STA WINDOW,X
   02C5 CA              DEX
   02C6 10 F6           BPL FIN2
   02C8 A9 E3           LDA #$C3       'square' flag
   02CA 85 08           STA WINDOW+4
   02CC D0 E0           BNE DELAY      unconditional jump
                 ;
                 ;      SUBROUTINE TO DISPLAY
                 ;      AND TEST KEYBOARD
                 ;
   02CE A0 13    SHOW   LDY #$13
   02D0 A2 05           LDX #5
   02D2 A9 7F           LDA #$7F
   02D4 8D 41 17        STA PADD
   02D7 B5 04    LITE   LDA WINDOW,X
   02D9 8D 40 17        STA SAD
   02DC 8C 42 17        STY SBD
   02DF E6 11    POZ    INC MOD        pause loop
   02E1 D0 FC           BNE POZ
   02E3 88              DEY
   02E4 88              DEY
   02E5 CA              DEX
   02E6 10 EF           BPL LITE
   02E8 20 40 1F        JSR KEYIN
   02EB 60              RTS
                        END

    Program notes:

    1. Program enforces a pause of about 4 seconds after 
       displaying counts or answer. This guards against 
       display being "missed" due to bounce, or hasty keying.

    2. After count displayed, or at end of game(s), user 
       can blank display, if desired, by pressing <U>GO</U> or 
       any numeric key.  Game operation is not affected,
       but user may feel it 'separates' games better.
<p align="center">
31</p>
<hr>

    3. When a digit from the user's guess is matched, it 
       is destroyed so that it will not be matched again. 
       There are two significantly different types of 
       'destruction', however (at 27D and 29D); the test 
       at label STEP is sensitive to which one is used.

                    ;
                    ;       LINKAGES TO KIM MONITOR
                    ;
                    KEYIN   =$1F40
                    GETKEY  =$1F6A
                    TABLE   =$1FE7
                    PADD    =$1741
                    SBD     =$1742
                    SAD     =$1740
                    ;
                    ;       WORK AREAS
                    ;
   0000             SECRET  *=*+4   computer's secret code
   0004             WINDOW  *=*+6   display window
   000A             INPUT   *=*+4   player's input area
   000E             EXACT   *=*+1   # of exact matches
   000F             MATCH   *=*+1   # of other matches
   0010             POINTR  *=*+1   digit being input
   0011             MOD     *=*+1   divisor/delay flag
   0012             RND     *=*+6   random number series
   0018             COUNT   *=*+1   number of guesses left


                ***** HEX DUMP FOR 'BAGELS *****

       0200 E6 16 20 40 1F D0 F9 D8 A9 0A 85 18 A9 03 85 10
       0210 38 A5 13 65 16 65 17 85 12 A2 04 B5 12 95 13 CA
       0220 10 F9 A6 10 A0 C0 84 11 A0 06 C5 11 90 02 E5 11
       0230 46 11 88 D0 F5 18 69 0A 95 00 C6 10 10 D2 C6 18
       0240 30 7A A9 00 A2 0C 95 04 CA 10 FB 20 CE 02 F0 FB
       0250 20 CE 02 F0 F6 A5 08 F0 08 29 60 49 60 F0 A9 D0
       0260 DD 20 6A 1F C9 10 B0 E3 C9 0A 90 DF A8 A6 10 E6
       0270 10 B9 E7 1F 95 04 98 D5 00 D0 03 E6 0E 8A 95 0A
       0280 A5 07 F0 31 A0 03 B9 0A 00 29 18 F0 12 B9 00 00
       0290 A2 03 D5 0A F0 05 CA 10 F9 30 04 E6 0F 16 0A 88
       02A0 10 E4 A2 01 B4 0E B9 E7 1F 95 08 CA 10 F6 20 CE
       02B0 02 E6 0F D0 F9 20 CE 02 D0 FB F0 8F A2 03 B4 00
       02C0 B9 E7 1F 95 04 CA 10 F6 A9 E3 85 08 D0 E0 A0 13
       02D0 A2 05 A9 7F 8D 41 17 B5 04 8D 40 17 8C 42 17 E6
       02E0 11 D0 FC 88 88 CA 10 EF 20 40 1F 60
<p align="center">
32</p>
<hr>

LABEL TABLE FOR PROGRAM 'BAGELS'
<U>Address</U> <U>Label</U>   <U>Where used</U>

   02B5 BUTT    0282 02B8
   0018 COUNT   020A 023E
   02AE DELAY   02B3 02CC
   000E EXACT   027B 02A4
   02BE FIN2    02C6
   02BC FINISH  0240
   1F6A GETKEY  0261
   0200 GO      0205
   029B GOT     0294
   023E GUESS   025F
   000A INPUT   027E 0286 0292 029D
   1F40 KEYIN   0202 02E8
   02D7 LITE    02E6
   0292 LOOK    0297
   000F MATCH   0298 02B1
   0011 MOD     0226 022A 022E 0230 02DF
   0208 NEW     025D
   027E NOTEX   0279
   029F ON      0299
   1741 PADD    02D4
   0230 PASS    022C
   0010 POINTR  020E 0222 023A 026D 026W
   02DF POZ     02E1
   0210 RAND    023C
   0261 RESUME  0257
   021B RLP     0220
   0012 RND     0200 0211 0213 0215 0217 021B 021D
   1740 SAD     02D9
   1742 SED     O2DC
   0000 SECRET  0238 0277 028D 028E
   022A SET     0233
   02CE SHOW    024B 0250 02AE 02B5
   0286 STEP    02A0
   1FE7 TABLE   0271 02A6 02C0
   02A4 TRANS   02AC
   024B WAIT    024B 0253 0266 026A 02BA
   0246 WIPE    0249
   0004 WINDOW  0246 0255 0274 0280 02A9 02C3 O2CA 02D7



      Label tables, when available, are often useful
      for studying a program. For each label (alphabetically 
      arranged) you can see, on the left, the address
      belonging to the label; and on the right, where the
      label is used in the program.
<p align="center">
33</p>
<hr>

<img src="fbokpics/b.gif" width=49 height=56 alt="bandit"><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/t.gif" width=44 height=55><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>


   Start the Program at 0200 and on the right, you'll see the $25
   that KIM has given you to play with, The funny symbols on the
   left are your "wheels" - hit any key and see them spin.

   Every time you spin the wheels by hitting a key it costs you $1.
   When the wheels stop, you might have a winning combination,
   in which case you'll see money being added to your total
   on the right. Most of the time, you'll get nothing ...
   but that's the luck of the game.

   The biggest Jackpot is $15:  that's three bars across the
   display. Other combinations pay off, too; you'll soon learn
   to recognize the "cherry" symbol, which pays $2 every time
   it shows in the left hand window.

   There's no house percentage, so you can go a long time on
   your beginning $25. The most you can make is $99; and if
   you run out of money, too bad;  KIM doesn't give credit.






BANDIT       MICRO-WARE     ASSEMBLER 65XX-1.0 PAGE 01



0010:
0020:                       ******************************
0030:                       ***** ONE ARMED BANDIT   *****
0040:                       ***** BY JIM BUTTERFIELD *****
0050:                       ******************************
0060:
0070: 02D1                  WINDOW *     $0000  DISPLAY WINDOW
0080: 02D1                  AMT    *     $0005  CASH CACHE
0090: 02D1                  ARROW  *     $0006
0100: 02D1                  RWD    *     $0007  REWARD
0110: 02D1                  STALLA *     $0008  WAIT WHILE
0120: 02D1                  TUMBLE *     $0009
0130:
0140:                       LINKAGES TO KIM
0150:
0160: 02D1                  KEYIN  *     $1F40  IS KEY DEPRESSED?
0170: 02D1                  PADD   *     $1741
0180: 02D1                  SAD    *     $1740
0190: 02D1                  SBD    *     $1742
0200: 02D1                  TABLE  *     $IFE7  HEX:7 SEG
<p align="center">
34</p>
<hr>

0210:
0220:                MAIN PROGRAM
0230:
0240: 0200           BANDIT ORG   $0200
0250: 0200 A9 25     GO     LDAIM $25    GIVE HIM $25
0260: 0202 85 05            STA   AMT    TO START WITH
0270: 0204 20 BA 02         JSR   CVAMT  AND SHOW IT TO HIM.
0280: 0207 A9 00            LDAIM $00    RESET ARROW.
0290: 0209 85 06            STA   ARROW
0300:
0310:                MAIN   DISPLAY LOOP
0320:
0330: 020B 20 8D 02  LPA    JSR   DISPLY DISPLAY UNTIL
0340: 020E D0 FB            BNE   LPA    [GO] IS RELEASED.
0350: 0210 E6 09     ROLL   INC   TUMBLE RANDOMIZE TUMBLE.
0360: 0212 20 8D 02         JSR   DISPLY DISPLAY UNTIL
0370: 0215 F0 F9            BEQ   ROLL   A KEY 19 HTT.
0380:
0390: 0217 A9 03            LDAIM $03
0400: 0219 85 06            STA   ARROW
0410: 0210 F8               SED
0420: 021C 38               SEC
0430: 021D A5 05            LDA   AMT
0440: 021F E9 01            SBCIM $01    CHARGE ONE BUCK.
0450: 0221 85 05            STA   AMT
0460: 0223 20 BA 02         JSR   CVAMT  CONVERT FOR LED.
0470: 0226 26 09            ROL   TUMBLE
0480:
0490: 0228 20 8D 02  LPB    JSR   DISPLY
0500: 022B C6 08            DEC   STALLA DISPLAY A WHILE.
0510: 022D D0 F9            BNE   LPB
0520: 022F A6 06            LDX   ARROW
0530: 0231 A5 09            LDA   TUMBLE    MAKE A
0540: 0233 29 06            ANDIM $06       RESULT
0550: 0235 09 40            ORAIM $40
0560:
0570: 0237 95 01            STAAX WINDOW+01
0580: 0239 46 09            LSR   TUMBLE
0590: 023B 46 09            LSR   TUMBLE DO ALL
0600: 023D C6 06            DEC   ARROW  3 WINDOWS.
0610: 023F D0 E7            BNE   LPB
0620:
0630:                ALL WHEELS STOPPED COMPUTE PAYOFF
0640:
0650: 0241 A5 04            LDA   WINDOW+04
0660: 0243 C5 03            CMP   WINDOW+03 CHECK FOR
0670: 0245 D0 37            BNE   NOMAT     A MATCH.
0680: 0247 C5 02            CMP   WINDOW+02
0690: 0249 D0 33            BNE   NOMAT
0700: 024B A2 10            LDXIM $10
0710: 024D C9 40            CMPIM $40    PAY $15 FOR 3 BARS
0720: 024F F0 0D            BEQ   PAY
0730: 0251 A2 0B            LDXIM $08
0740: 0253 C9 42            CMPIM $42    PAY $10 FOR 3 UPS
0750: 0255 F0 07            BEQ   PAY
0760: 0257 A2 06            LDXIM $06
0770: 0259 C9 44            CMPIM $44    PAY $5 FOR 3 DOWNS
0780: 025B F0 01            BEQ   PAY
0790: 025D CA               DEX
<p align="center">
35</p>
<hr>

0800:
0810:                A WIN!!! PAY AMOUNT IN X
0820:
0830: 025E 86 07     PAY    STX   RWD    HIDE REWARD
0840: 0260 A9 80     PAX    LDAIM $80
0850: 0262 85 08            STA   STALLA
0860: 0264 20 8D 02  LPC    JSR   DISPLY   DISPLAY
0870: 0267 C6 08            DEC   STALLA   FOR A HALF
0880: 0269 D0 F9            BNE   LPC      A WHILE.
0890: 026B C6 07            DEC   RWD
0900: 026D F0 9C            BEQ   LPA
0910: 026F 18               CLC          SLOWLY ADD
0920: 0270 F8               SED          THE PAYOFF
0930: 0271 A5 05            LDA   AMT    TO THE AM'T.
0940: 0273 69 01            ADCIM $01
0950: 0275 B0 94            BCS   LPA
0960: 0277 85 05            STA   AMT
0970: 0279 20 BA 02         JSR   CVAMT
0980: 027C D0 E2            BNE   PAX
0990:
1000:                WHEELS NOT ALL THE SAME - CHECK FOR SMALL PAYOFF
1010:
1020: 027E A2 03     NOMAT  LDXIM $03
1030: 0280 C9 46            CMPIM $46    A CHERRY?
1040: 0282 F0 DA            BEQ   PAY
1050: 0284 20 8D 02  LOK    JSR   DISPLY
1060: 0287 A5 05            LDA   AMT    CAN'T PLAY
1070: 0289 D0 80            BNE   LPA    WITH NO DOUGH!
1080; 028B F0 F7            BEQ   LOK
1090:
1100:
1110:
1120:
1130:                DISPLAY SUBROUTINE
1140:
1150: 028D A6 06     DISPLY LDX   ARROW
1160: 028F 10 02            BPL   INDIS     ROLL
1170: 0291 F6 02     OVER   INCAX WINDOW+02 THE DRUM
1180: 0293 CA        INDIS  DEX
1190: 0294 10 FB            BPL   OVER
1200: 0296 A9 7F            LDAIM $7F
1210: 0298 8D 41 17         STA   PADD
1220: 029B A0 0B            LDYIM $08
1230: 029D A2 04            LDXIM $04
1240: 029F B5 00     LITE   LDAAX WINDOW LIGHT
1250: 02A1 8C 42 17         STY   SBD    ALL THE
1260: 02A4 8D 40 17         STA   SAD    WINDOWS
1270: 02A7 D8               CLD
1280: 02A8 A9 7F            LDAIM $7F
1290: 02AA E9 01     ZIP    SBCIM $01
1300: 02AC D0 FC            BNE   ZIP
1310: 02AE 8D 42 17         STA   SBD
1320: 02B1 C8               INY
1330: 02B2 C8               INY
<p align="center">
36</p>
<hr>

1340: 02B3 CA               DEX
1350: 02B4 10 E9            BPL   LITE
1360: 02B6 20 40 1F         JSR   KEYIN
1370: 0289 60
1380:
1390                 AMOUNT CONVERSION
1400:
1410: 02BA A5 05     CVAMT  LDA   AMT
1420: 02BC 29 0F            ANDIM $0F    TRANSLATE
1430: 02BE AA               TAX          AMOUNT
1440: 02BF BD E7 1F         LDAAX TABLE  TO LED
1450: 02C2 85 00            STA   WINDOW  CODE.
1460: 02C4 A5 05            LDA   AMT
1470: 02C6 4A               LSRA
1480: 02C7 4A               LSRA
1490: 02C8 4A               LSRA
1500: 02C9 4A               LSRA
1510: 02CA AA               TAX
1520: 02CB BD E7 1F         LDAAX TABLE
1S30: 02CE 85 01            STA   WINDOW+01
1540: 02D0 60               RTS




    SYMBOL TABLE 3000 30A2
    AMT     0005   ARROW  0006   BANDIT 0200   CVAMT  02BA
    DISPLY  028D   GO     0200   INDIS  0293   KEYIN  1F40
    LITE    029F   LOK    0284   LPA    020B   LPB    0228
    LPC     0264   NOMAT  27E    OVER   0291   PADD   1741
    PAX     O260   PAY    025E   ROLL   0210   RWD    0007
    SAD     1740   SBD    1742   STALLA 0008   TABLE  1FE7
    TUMBLE  0009   WlNDOW 0000   ZIP    02AA




     You'll notice that the listing for BANDIT looks a little 
     different from others in this book.  That's because it
     is the output of a resident assembler operating in 
     an expanded KIM-1 system.  See the section on expansion 
     or a further discussion of assemblers.

     You might like to change the pay outs so that there is 
     a "house percentage".  That way, visitors will eventually 
     run out of money if they play long enough. This has 
     two possible advantages: it will teach them the evils 
     of gambling, and they won't hog your KIM all day playing
     this game.
<p align="center">
37</p>
<hr>

<img src="fbokpics/b.gif" width=49 height=56 alt="bitz"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/z.gif" width=44 height=55><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>


A teaching program which drills you on binary and
hexadecimal numbering schemes.  It's kind of fun
just as a speed test.

Start the program at 0200 and you'll see eight bits
on the left side of the display.  Some of the bits
are in the lower position, meaning 'off' or zero.
Others will be in the top row, where they mean 'on'
or logic one.

All you have to do is translate those bits into hexadecimal
notation, and enter the hex value.  For example, if all
bits happen to be 'on', the number you'd enter is FF;
or if all the bits were 'off', you'd enter 00.
KIM rewards a correct answer with another problem.

If you're not yet at ease with the concept of bits
and how they relate to hexadecimal numbering, a few
runs of this program will help a lot.

0200 D8       START  CLD
0201 A9 01           LDA   #1   Set FLAG2
0205 85 1D           STA   FLAG2   .. to new problem
0205 20 40 1F MAIN   JSR   KEYIN   set directnl reg
0208 20 6A 1F        JSR   GETKEY   get key input
020B C5 14           CMP   PREV    same as last time?
020D F0 50           BEQ   LIGHT    yes, skip
020F 85 14           STA   PREV    record new input
0211 C9 15           CMP   #$15     no key?
0213 F0 1C           BEQ   NOKEY   yes, brnch
0215 A6 1C           LDX   FLAG1   first digit found?
0217 D0 0C           BNE   DIG1    yes, check second
0219 C5 16           CMP   SEED1   first digit match?
021B D0 42           BNE   LIGHT   no, ignore input
021D AA              TAX
021E BD E7 1F        LDA   TABLE,X  change to segment
0221 85 1C           STA   FLAG1     ..store.
0223 D0 3A           BNE   LIGHT        .. and exit
0225 C5 17    DIG1   CMP   SEED2   second digit match?
0227 D0 36           ENE   LIGHT   no, ignore input
0229 AA              TAX
022A BD E7 1F        LDA   TABLE,X   change to segment
022D 85 1D           STA   FLAG2
022F D0 2E           BNE   LIGHT
0231 A6 1D    NOKEY  LDX   FLAG2    problem solved?
0233 F0 2A           BEQ   LIGHT    not yet, skip
0235 A9 00           LDA   #0      Clear..
0237 85 1C           STA   FLAG1    ..for new problem
0239 85 1D           STA   FLAG2
023B AD F4 1A        LDA   TIMER   get random value
023E AA              TAX
023F 29 0F           AND   #$0F    extract last digit
0241 85 17           STA   SEED2    .. and store

<p align="center">
38</p>
<hr>


0243 8A              TXA
0244 4A 4A           LSRA LSRA    Extract first digit
0246 4A 4A           LSRA LSRA
0248 85 16           STA   SEED1   ..and store
024A 86 15           STX   SEED   Store whole number
024C A2 FC           LDX   #$FC   Minus 4 for window
024E A9 00    PATT   LDA   #0     Clear Accum
0250 26 15           ROL   SEED    ..then roll in..
0252 2A              ROL   A        ..two bits..
0253 26 15           ROL   SEED      ..and..
0255 2A              ROL   A          ..convert..
0256 A8              TAY               ..to..
0257 B9 7B 02        LDA   TAB,Y        ..segments
025A 95 1C           STA   FLAG1,X
025C E8              INX           next segment
025D D0 EF           BNE   PATT
025F A9 7F    LIGHT  LDA   #$7F   Set directional..
0261 8D 41 17        STA   SADD     ..registers
0264 A0 09           LDY   #9
0266 A2 FA           LDX   #$FA   Minus 6
0268 B5 1E    SHOW   LDA   FLAG2+1,X  Window contents
026A 8D 40 17        STA   SAD
026D C0 42 17        STY   SBD
0270 C6 11    WAIT   DEC   MOD
0272 D0 FC           BNE   WAIT
0274 C8 CS           INY   INY
0276 E8              INX
0277 30 EF           BMI   SHOW
0279 10 88           BPL   MAIN
027B 14 12    TAB    .BYTE $14,$12,$24,$22
027D 24 22
              ; end



           ***** HEX DUMP - BITZ *****

0200-   D8 A9 01 85 1D 20 40 1F 20 6A 1F C5 14 F0 50 85
0210-   14 C9 15 F0 1C A6 1C D0 0C C5 16 D0 42 AA BD E7
0220-   1F 85 1C D0 3A C5 17 D0 36 AA BD E7 1F 85 1D D0
0230-   2E A6 1D F0 2A A9 00 85 1C 85 1D AD 04 17 AA 29
0240-   0F 85 17 8A 4A 4A 4A 4A 85 16 86 15 A2 FC A9 00
0250-   26 15 2A 26 15 2A A8 B9 7B 02 95 1C E8 D0 EF A9
0260-   7F 8D 41 17 A0 09 A2 FA B5 1E 8D 40 17 8C 42 17
0270-   C6 11 D0 FC C8 C8 E8 30 EF 10 8A 14 12 24 22

<p align="center">
39</p>
<hr>
<img src="fbokpics/b.gif" width=49 height=56 alt="blackjack"><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/k.gif" width=53 height=57><img src="fbokpics/j.gif" width=47 height=56><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/k.gif" width=53 height=57><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>
Description:

     KIM uses a  'real' deck of cards in this game.
So when you've seen four aces going by, you know
that there will be no more - until the next shuffle.

BLACKJACK starts at address 0200.  You'll see the
cards being shuffled - the word SHUFFL appears on the
display - and then KIM will ask how much you want to bet.

You'll start with an initial amount of $20.  Your balance
is always shown to the right of the BET? question, so
on the first hand, you'll see BET? 20 on the display.

You may bet from $1 to $9, which is the house limit.
The instant you hit key 1 to 9 to signal your bet,
KIM will deal.  Of course, you can't bet more money
than you have ... and KIM ignores freeloaders who try
to bet a zero amount.

After the deal, you'll see both your cards on the left
of the display, and one of KIM's cards on the right.
(KIM's other card is a 'hole  card, and you won't see
it until it's KIM's turn to play).  Aces are shown
as letter A, face cards and tens as letter F, and
other cards as their value, two to nine.  As always,
Aces count value 1 or 11 and face cards count 10.

You can call for a third card by hitting the 3 button ..
then the fourth card with the 4 button, and so on.
If your total goes over 21 points, KIM will ungrammatically
say BUSTED, and you'll lose.  If you get five cards
without exceeding 21 points, you'll win automatically.
If you don't want any more cards, hit key 0.  KIM will
report your point total, and then will show and play
its own hand.  KIM, too, might go BUSTED or win on
a five-card hand.  Otherwise, the most points wins.

>From time to time, KIM will advise SHUFFL when the
cards start to run low.

Remember that you have a good chance to beat KIM at
this game.  Keep track of the cards that have been
dealt (especially aces and face cards), and you're
likely to be a winner.'

0200 A2 33    START  LDX #51      52 cards in deck
0202 8A       DK1    TXA          Create deck
0205 95 40           STA DECK,X    by inserting cards
0205 CA              DEX            into deck
0206 10 FA           BPL DK1         in sequence
0208 A2 02           LDX #2       Set up 5 locations
020A BD BB 03 INLOP  LDA INIT,X      ..into..
020D 95 75           STA PARAM        zero page
020F CA              DEX          addresshi/ dpt/ amt

<p align="center">
40</p>
<hr>


0210 10 F8           BPL INLOP
0212 AD 04 17        LDA TIMER   use random timer
0215 85 80           STA RND      to seed random chain
0217 D8       DEAL   CLD         main loop repeats here
0218 A6 76           LDX   DPT   next-card pointer
021A E0 09           CPX #9      less than 9 cards?
021C B0 34           BCS NOSHUF  9 or more, don't shuffle
              ; shuffle deck
021E A0 D8           LDY #SHUF-$300 Set up SHUFFL msg
0220 20 57 03        JSR FILL        put in WINDOW
0223 AC 33           LDY #51        ripple 52 cards
0225 84 76           STY DPT     set full deck
0227 20 30 03 SHLP   JSR LIGHT   illuminate display
022A 38              SEC
022B A5 81           LDA RND+1   Generate
022D 65 82           ADC RND+2    new
022F 65 85           ADC RND+5     random
0231 85 80           STA RND        number
0253 A2 04           LDX #4
0235 B5 80    RMOV   LDA RND,X   move over
0237 95 81           STA RND+1,X  the random
0239 CA              DEX           seed numbers
023A 10 F9           BPL RMOV
023C 29 3F           AND #$3F    Strip to 0-63 range
023E C9 34           CMP #52     Over 51?
0240 B0 E5           BCS SHLP    yes, try new number
              ; swap each card into random slot
0242 AA              TAX
0243 B9 40 00        LDA DECK,Y  get next card
0246 48              PHA         save it
0247 B5 40           LDA DECK,X  get random card
0249 99 40 00        STA DECK,Y   into position N
024C 68              PLA         and the original card
024D 95 40           STA DECK,X   into the random slot
024F 88              DEY         next in sequence
0250 10 D5           BPL SHLP    bck for next card
              ; ready to accept bet
0252 A0 DE    NOSHUF LDY #MBET-$300   Set up BET? msg
0254 20 57 03        JSR FILL        put in WINDOW
0257 A5 77           LDA AMT     display balance
0259 20 A6 03        JSR NUMDIS    .. put in WINDOW
025C 20 30 03 BETIN  JSR LIGHT   illuminate display
025F C9 0A           CMP #10     not key C to 9?
0261 B0 F9           BCS BETIN   nope, ignore
0263 AA              TAX
0264 86 79           STX BET     store bet amount
0266 CA              DEX
0267 30 F3           BMI BETIN   zero bet?
0269 E4 77           CPX AMT     sufficient funds?
026B B0 EF           BCS BETIN   no, refuse bet
              ; bet accepted - deal
026D A2 0B           LDX #11     Clean WINDOW and
026F A9 00           LDA #0          card counters
0271 95 90    CLOOP  STA WINDOW,X
0273 CA              DEX
0274 10 FB           BPL CLOOP


<p align="center">
41</p>

<hr>


              ; here come the cards
0276 20 78 03        JSR YOU    one for you..
0279 20 8F 03        JSR ME     & one for me..
027C 20 78 03        JSR YOU    another for you..
027F 20 64 03        JSR CARD   put my second card..
0282 86 7A           STX HOLE     ..in the hole
0284 20 28 03        JSR WLITE  wait a moment
              ; deal complete -  wait for Hit or Stand
0287 20 30 03 TRY    JSR LIGHT
028A AA CA           TAX DEX    key input?
028C 30 11           BMI HOLD   zero for Stand?
028E E4 96           CPX UCNT   N for card #n?
0290 D0 F5           BNE TRY    nope, ignore  key
              ; Hit - deal another card
0292 20 78 03        JSR YOU     deal it
0295 C9 22           CMP #$22    22 or over?
0297 B0 40           BCS UBUST   yup, you bust
0299 E0 05           CPX #5      5 cards?
029B F0 53           BEQ UWIN    yup, you win
029D D0 E8           BNE TRY     nope, keep going
              ; Stand - show player's total
029F A5 95    HOLD   LDA WINDOW+5   save KIM card
02A1 48              PHA              on stack
02A2 A2 00           LDX #0      flag player
02A4 20 0F 03        JSR SHTOT   .. for total display
02A7 A2 04           LDX #4
02A9 A9 00           LDA #0
02AB 95 90    HLOOP  STA WINDOW,X   clean window
02AD CA              DEX
02AE 10 FB           BPL HLOOP
              ; restore display card and hole card
02B0 68              PLA         display card
02B1 85 95           STA WINDOW+5  back to display
02B3 A6 7A           LDX HOLE    get hole card
02B5 20 6D 03        JSR CREC    rebuild
02B8 20 92 05        JSR MEX     play and display
              ; KIM plays here
02BB 20 28 03 PLAY   JSR WLITE   pause to show cards
02BE A5 9A           LDA MTOT    point total
02C0 C9 22           CMP #$22     ..22 or over?
02C2 B0 29           BCS IBUST    yup, KIM bust
02C4 65 9B           ADC MACE    add 10 for aces?
02C6 A6 91           LDX WINDOW+1  five cards?
02C8 D0 18           BNE IWIN      yes, KIM wins
02CA C9 22           CMP #*22    22+ including aces?
02CC 90 02           BCC POV     nope, count ace high
02CE A5 9A           LDA MTOT    yup, ace low
02D0 C9 17    POV    CMP #$17    17 or over?
02D2 B0 2C    SOS    HOLD2        yes, stand..
02D4 20 8F 03        JSR ME       no, hit..
02D7 D0 E2           BNE PLAY    unconditional Branch
              ; KIM wins here
02D9 20 28 03 UBUST  JSR WLITE   show player's hand..
02DC 20 55 03        JSR BUST    make BUST message..
02DF 20 28 03        JSR WLITE   ..and show it

<p align="center">
42</p>
<hr>


02E2 A5 77    IWIN   LDA AMT     decrease balance
02E4 F8 38           SED SEC
02E6 E5 79           SBC BET     ..by amount of bet
02E8 85 77    JLINK  STA AMT     store new balance
02EA 4C 17 02 XLINK  JMP DEAL    next play
              ; Player wins here
02ED 20 55 03 IBUST  JSR BUST    make BUST message..
02F0 20 28 03 UWIN   JSR WLITE   display pause
02F3 A5 77    ADD    LDA AMT     increase balance
02F5 F8 18           SED CLC
02F7 65 79           ADC BET     by amount of bet
02F9 A0 99           LDY #$99    $99 maximum..
02FB 90 01           BCC NOFLO   have we passed it?
02FD 98              TYA         yes, restore $99
02FE D0 E8           BNE JLINK   unconditional branch
              ; KIM stands - compare points
0300 A2 03    HOLD2  LDX #3      flag KIM..
0302 20 0F 03        JSR SHOTOT  .. for total display
0305 A5 9A           LDA MTOT    KIM's total..
0307 C5 97           CMP UTOT    vs. Player's total..
0309 F0 DF           BEQ XLINK   same, no score;
030B B0 D5           BCS IWIN    KIM higher, wins;
030D 90 E4           BCC ADD     KIM lower, loses.

              ; subroutines start here
              ; SHTOT shows point totals per X register
030F B5 97    SHTOT  LDA UTOT,X   player's or KIM's total
0311 F8 18           SED CLC
0313 75 98           ADC UACE,X   try adding Ace points
0315 C9 22           CMP #$22     exceeds 21 total?
0317 B0 02           BCS SHOVER   yes, skip
0319 95 97           STA UTOT,X   no, make permanent
031B D8       SHOVER CLD
031C B5 97           LDA UTOT,X   get revised total
031E 48              PHA          save it
031F A0 E2           LDY #TOT-$300  set up TOT- msg
0321 20 57 03        JSR FILL      put in WINDOW
0324 68              PLA          recall total
0325 20 A6 03        JSR NUMDIS   insert in window
              ; display pause, approx 1 second
0328 A0 80    WLITE  LDY #$80     timing constant
032A 20 30 03 WDO    JSR LIGHT    illuminate screen
032D 88              DEY         countdown
032E D0 FA           BNE WDO
              ; illuminate display
0330 84 7F    LIGHT  STY YSAV    save register
0332 A0 13           LDY #$13
0334 A2 05           LDX #$5     6 digits to show
0336 A9 7F           LDA #$7F
0338 8D 41 17        STA PADD    set directional reg
033B 35 90    DIGIT  LDA WINDOW,X
033D 8D 40 17        STA SAD     character segments
0340 8C 42 17        STY SBD     character ID    
0343 E6 7B    WAIT   INC PAUSE

<p align="center">
43</p>
<hr>


0345 DC FC           BNE WAIT    wait loop
0347 88 88           DEY DEY  
0349 CA              DEX
034A 10 EF           BPL DIGIT
034C 20 40 1F        JSR KEYIN   switch Dir Reg
034F 20 6A 1F        JSR GETKEY  test keyboard
0352 A4 7F           LDY YSAV    restore Y value
0354 60              RTS
              ; fill WINDOW with BUST or other message
0355 A0 E6    BUST   LDY #$BST $300
0357 84 74    FILL   STY POINTR
0359 A0 05           LDY #5      six digits to move
035B B1 74    FILLIT LDA (POINTR),Y  load a digit
035D 99 90 00        STA WINDOW,Y    put in window
0360 88              DEY
0361 10 F8           BPL FILLIT
0363 60              RTS
              ; deal a card, calc value & segments
0364 A6 76    CARD   LDX DPT      Pointer in deck
0366 C6 76           DEC DPT      Move pointer
0368 B5 40           LDA DECK,X   Get the card
036A 4A 4A           LSRA LSRA    Drop the suit
036C AA              TAX          0 to 12 in X
036D 18       CREC   CLC          no-ace flag
036E D0 01           BNE NOTACE   branch if not ace
0370 38              SEC          ace flag
0371 BD BE 03        LDA VALUE,X  value from table
0374 BC CB 03        LDY SEGS,X   segments from table
0377 60              RTS
              ; card to player,including display & count
0378 20 64 03 YOU    JSR CARD     deal card
037B E6 96           INC UCNT     card count
037D AC 96           LDX UCNT     use as display pointer
037F 94 8F           STY WINDOW-1,X   put card in Wndw
0381 A0 10           LDY #$10     ten count for aces
0383 90 02           BCC YOVER    no ace?
0385 84 98           STY UAOE     ace, set 10 flag
0387 18 F8    YOVER  CLD SED
0389 65 97           ADC UTOT     add points to..
038B 85 97           STA UTOT      ..point total
038D D8              CLD
038E 60              RTS
              ; card to KIM, including display & counts
038F 20 64 03 ME     JSR CARD     deal card
0392 CC 99    MEX    DEC MCNT     inverted count
0394 A6 99           LDX MCNT     use as (r) display pontr
0396 94 96           STY WINDOW+6,X   into window
0398 A0 10           LDY #$10     ten count for aces
039A 90 02           BCC MOVER    no ace?
039C 84 9B           STY MACE     aces set 10 flag
039E 18 F8    MOVER  OLC SED
03A0 65 9A           ADC MTOT     add points to..
03A2 85 9A           STA MTOT       .. point total
03A4 D8              CLD
03A5 60              RTS

<p align="center">
44</p>
<hr>


              ; transfer number in A  to display
03A6 48       NUMDIS PHA        save number
03A7 4A 4A           LSRA LSRA  extract left digit
03A9 4A 4A           LSRA LSRA
03AB A8              TAY
03AC B9 E7 1F        LDA TABLE,Y  convert to segments
03AF 85 94           STA WINDOW+4
03B1 68              PLA          restore digit
03B2 29 0F           AND #$0F     extract right digit
03B4 A8              TAY
03B5 B9 E7 1F        LDA TABLE,Y  convert to segments
03B8 85 95           STA WINDOW+5
03BA 60              RTS
               ; tables in hex format
03BB 03 00 20 01 02 03 04 05 06 07 08 09 10 10 10 10
03CB F7 DB CF E6 ED FD 87 FF EF F1 F1 F1 F1
03D8 ED F6 BE F1 F1 B8 FC F9 F8 D3
03E2 F8 DC F8 C0 FC BE ED 87 F9 DE

           XXXXXX HEX DUMP - BLACKJACK XXXXX


0200 A2 33 8A 95 40 CA 10 FA A2 02 BD BB 03 95 75 CA
0210 10 F8 AD 04 17 85 80 D8 A6 76 E0 09 B0 34 A0 D8
0220 20 57 03 A0 33 84 76 20 30 03 38 A5 81 65 82 65
0230 85 85 80 A2 04 B5 80 95 81 CA 10 F9 29 3F C9 34
0240 B0 E5 AA B9 40 00 48 B5 40 99 40 00 68 95 40 88
0250 10 D5 A0 DE 20 57 03 A5 77 20 A6 03 20 30 03 C9
0260 0A B0 F9 AA 86 79 CA 30 F3 E4 77 B0 EF A2 0B A9
0270 00 95 90 CA 10 FB 20 78 03 20 8F 03 20 78 03 20
0280 64 03 86 7A 20 28 03 20 30 03 AA CA 30 11 E4 96
0290 D0 F5 20 78 03 C9 22 B0 40 E0 05 F0 53 D0 E8 A5
02A0 95 48 A2 00 20 0F 03 A2 04 A9 00 95 90 CA 10 FB
02B0 68 85 95 A6 7A 20 6D 03 20 92 03 20 28 03 A5 9A
02C0 C9 22 80 29 65 9B A6 91 D0 18 C9 22 90 02 A5 9A
02D0 C9 17 B0 2C 20 8F 03 D0 E2 20 28 03 20 55 03 20
02E0 28 03 A5 77 F8 38 E5 79 85 77 4C 17 02 20 55 03
02F0 20 28 03 A5 77 F8 18 65 79 A0 99 90 01 98 D0 E8
0300 A2 03 20 0F 03 A5 9A C5 97 F0 DF B0 D5 90 E4 85
0310 97 F8 18 75 98 C9 22 B0 02 95 97 D8 B5 97 48 A0
0320 E2 20 57 03 68 20 A6 03 A0 80 20 30 03 88 D0 FA
0330 84 7F A0 13 A2 05 A9 7F 8D 41 17 B5 90 8D 40 17
0340 8C 42 17 E6 7B D0 FC 88 88 CA 10 EF 20 40 1F 20
0350 6A 1F A4 7F 60 A0 E6 84 74 A0 05 B1 74 99 90 00
0360 88 10 F8 60 A6 76 C6 76 B5 40 4A 4A AA 18 D0 01
0370 38 BD BE 03 BC CB 03 60 20 64 03 E6 96 A6 96 94
0380 8F A0 10 90 02 84 98 18 F8 65 97 85 97 D8 60 20
0390 64 03 C6 99 A6 99 94 96 A0 10 90 02 84 9B 18 F8
03A0 65 9A 85 9A D8 60 48 4A 4A 4A 4A A8 B9 E7 1F 85
03B0 94 68 29 0F A8 B9 E7 1F 85 95 60 03 00 20 01 02
03C0 03 04 05 06 07 08 09 10 10 10 10 F7 DB CF E6 ED
03D0 FD 87 FF EF F1 F1 F1 F1 ED F6 BE E1 F1 B8 FC F9
03E0 F8 D3 F8 DC F8 C0 FC BE ED 87 F9 DE

<p align="center">
45</p>
<hr>

<img src="fbokpics/b.gif" width=49 height=56 alt="black match"><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/k.gif" width=53 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/h.gif" width=56 height=57><DIV ALIGN="RIGHT">BY RON KUSHNIER
(MODIFIED BY   
THE EDITORS) </div>

DESCRIPTION -
     THERE ARE 21 MATCHES.  EACH PLAYER MUST TAKE 1,2, OR
3 MATCHES PER TURN.  THE PLAYER WHO WINDS UP WITH THE LAST
MATCH LOSES.  THE PLAYER PLAYS AGAINST THE COMPUTER AND GOES
FIRST.  STARTING ADDRESS - 0200, PRESS "GO". PLAYER ENTERS
A NUMBER ON THE KEYBOARD.  THE LEFT TWO DIGITS DISPLAY THE
PLAYERS NUMBER.  THE CENTER DIGITS DISPLAY THE COMPUTER'S
CHOICE AFTER SOME "THINK TIME".  THE RIGHTMOST DIGITS DISPLAY
A RUNNING TOTAL OF MATCHES LEFT.  THE COMPUTER HAS AN I.Q.
AND WILL BECOME DUMBER IF YOU LOSE, SMARTER IF YOU WIN.


 0200 A9 00             LDA #$00    ZERO PLAYER'S WINDOW
 0202 85 FB             STA 00FB
 0204 A9 21             LDA #$21    LOAD TOTAL
 0206 85 F9             STA 00F9    STORE TOTAL
 0208 20 1F 1F  ENTR    JSR SCANDS  DISPLAY TOTAL
 020B 20 6A 1F          JSR GETKEY  DID PLAYER ENTER #?
 020E C9 04             CMP #$04    IS NUMBER VALID?
 0210 10 F6             BPL ENTR    IF NOT, TRY AGAIN
 0212 C9 00             CMP #$00    IS NUMBER ZERO?
 0214 F0 F2             BEQ ENTR    IF SO, TRY AGAIN
 0216 85 FB             STA 00FB    STORE PLAYER'S it
 0218 F8                SED         SET DECIMAL MODE
 0219 38                SEC         SET CARRY
 021A A5 F9             LDA 00F9    LOAD TOTAL
 021C E5 FB             SBC 00FB    SUBTRACT PLAYER'S #
 021E 85 F9             STA 00F9    STORE RESULT IN TOTAL
 0220 20 FE 1E   WAIT   JSR AK      IS KEY STILL DEPRESSED?
 0223 D0 FB             BNE WAIT    IF SO, WAIT
 0225 A9 08             LDA #$08    LOAD WITH DELAY FACTOR
 0227 85 EE             STA 00EE    STORE AT 00EE
 0229 A9 FF      TIME   LDA #$FF    LOAD TIMER TO MAX
 022B 8D 07 17          STA 1707
 022E 20 1F 1F   DISP   JSR SCANDS  DISPLAY   AND TOTAL
 0231 2C 07 17          BIT 1707    IS TIME DONE?
 0234 10 F8             BPL DISP    NO, KEEP DISPLAYING
 0236 A5 EE             LDA 00EE    EXTEND TIMING INTERVAL
 0238 C6 EE             DEC 00EE
 023A D0 ED             BNE TIME
 023C C6 F9             DEC 00F9    .. COMPUTER DETERMINES
 023E A5 F9             LDA 00F9    CORRECT RESPONSE AS
 0240 29 10             AND #$10    THE REMAINDER AFTER
 0242 4A                LSR A       DIVIDING THE TOTAL
 0243 4A                LSR A       MINUS ONE BY FOUR...
 0244 4A                LSR A
 0245 18                CLC
 0246 65 F9             ADC 00F9
 0248 E6 F9             INC 00F9
 024A 29 03             AND #$03
 024C D0 02             BNE OVER
 024E A9 01             LDA #$01
 0250 AE 44 17   OVER   LDX 1744    LOAD WITH TIMER


<p align="center">
46</p>
<hr>


 0253 E0 A0             CPX #$A0   COMPARE WITH I.Q,
 0255 50 02             BCS COMP   IF GREATER, NO CHANGE
 0257 A9 02             LDA #$02   ELSE DEFAULT TO TWO
 0259 85 FA      COMP   STA 00FA   STORE COMPUTER'S CHOICE
 025B A5 F9             LDA 00F9   LOAD TOTAL
 025D 38                SEC        SET CARRY
 025E E5 FA             SBC 00FA   SUBTRACT COMPUTER'S CHOICE
 0260 85 F9             STA 00F9   STORE IN TOTAL
 0262 C9 01             CMP #$01   COMPARE WITH ONE
 0264 F0 04             BEQ DEAD   IF EQUAL, DISPLAY DEAD
 0266 30 10             BMI SAFE   IF MINUS, DISPLAY SAFE
 0268 50 9E             BCS ENTR   ELSE GET ANOTHER ENTRY
 025A A9 DE      DEAD   LDA #$DE   LOAD AND DISPLAY "DEAD"
 026C 85 FB             STA 00FB
 026E A9 AD             LDA #$AD
 0270 85 FA             STA 00FA
 0272 20 1F 1F   FIN    JSR SCANDS
 0275 18                CLC
 0276 90 FA             BCC FIN    UNCOND. JMP
 0278 A9 5A             LDA #$5A   LOAD AND DISPLAY
 027A 85 FB             STA 00FB      "SAFE"
 027C A9 FE             LDA #$FE
 027E 85 FA             STA 00FA
 0280 A9 00             LDA #$00   TOTAL TO ZERO
 0282 85 F9             STA 00F9
 0284 F0 EC             SEQ FIN   UNCOND. JMP
 
HEX DUMP - BLACK MATCH


0200 A9 00 85 FB A9 21 85 F9 20 1F 1F 20 6A 1F C9 04
0210 10 F6 C9 00 F0 F2 85 FB F8 38 A5 F9 E5 FB 85 F9
0220 20 FE 1E D0 FB A9 08 85 EE A9 FF 8D 07 17 20 1F
0230 1F 2C 07 17 10 F8 A5 EE C6 EE D0 ED C6 F9 A5 F9
0240 29 10 4A 4A 4A 18 65 F9 E6 F9 29 03 D0 02 A9 01
0250 AE 44 17 E0 A0 50 02 A9 02 85 FA A5 F9 38 E5 FA
0260 85 F9 C9 01 F0 04 30 10 50 9E A9 DE 85 FB A9 AD
0270 85 FA 20 1F 1F 18 90 FA A9 5A 85 FB A9 FE 85 FA
0280 A9 00 85 F9 F0 EC

<p align="center">
47</p>
<hr>

<img src="fbokpics/c.gif" width=48 height=56 alt="card dealer"><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><DIV ALIGN="RIGHT">BY DAN LEWART</div>

    DESCRIPTION -
         THIS PROGRAM WILL DEAL A FULL DECK OF 52 CARDS.
    THE VALUE AND SUIT OF THE CARDS APPEARS IN THE RIGHT
    TWO DIGITS OF THE DISPLAY.  PRESS ANY KEY TO GET
    ANOTHER CARD.  EACH WILL APPEAR ONLY ONCE.  WHEN ALL
    CARDS HAVE BEEN DEALT, THE PROGRAM MUST BE RESTARTED
    AT 0000.




0000   A2 06     INIT      LDX #$06     CLEAR DISPLAY
0002   A0 00               LDY #$00     (8C-91)=0
0004   94 8B     INIT 1    STY 008B,X
0006   CA                  DEX
0007   D0 FB               BNE INIT 1
0009   D8                  CLD
000A   A2 34               LDX #$34     FILL DECK
000C   86 92               STX 0092     STORE CARDS LEFT (52)
000E   C8                  INY          (93-C6)=1
000F   94 92     INIT 2    STY 0092,X
0011   CA                  DEX
0012   D0 FB               BNE INIT 2
0014   A5 92     NEWCRD    LDA 0092     DECK FINISHED?
0016   D0 03               BNE RANDOM
0018   4C 4F 1C            JMP START    YES, STOP
0018   AD 04 17  RANDOM    LDA 1704     GET RANDOM # (1-FF)
001E   D0 0B               BNE FASTER
0020   AD 44 17            LDA 1744
0023   D0 06               BNE FASTER
0025   A5 92               LDA 0092     BOTH CLOCKS OUT OF RANGE
0027   4A                  LSR          # APPROX. MIDDECK
0028   18                  CLC
0029   69 01               ADC #$01
002B   C5 92     FASTER    CMP 0092     GET NUMBER 1-34
002D   90 07               BCC FIND
002F   F0 05               BEQ FIND
0031   E5 92               SBC 0092
0033   4C 2B 90            JMP FASTER
0036   A2 33     FIND      LDX #$33     FIND ThE CARD
0038   38        FIND 1    SEC          KEEP SUBTRACTING CARD
0039   F5 93               SBC 0093,X   CARD=0 MEANS PICKED
003B   F0 93               BEQ UPDATE   CARD=1 MEANS IN DECK
003D   CA                  DEX          X=CARD POSITION
003E   10 F8               BPL FIND 1
0040   95 93     UPDATE    STA 0093,X   CARD=0
0042   C6 92               DEC 0092     1 LESS CARD LEFT
0044   8A                  TXA          GET FIRST 6 BITS OF X
0045   4A                  LSR          Y=(0-C)
0046   4A                  LSR
0047   A8                  TAY

<p align="center">
48</p>
<hr>



0048   B9 7B 00            LDA 007B,Y   GET VALUE FROM VALTBL
004B   85 90               STA 0090     STORE AS 5TH DISPLAY DIGIT
004D   8A                  TXA          GET LAST 2 BITS OF X
004E   29 03               AND #$03     Y=(0-3)
0050   A8                  TAY
0051   B9 88 00            LDA 0088,Y   GET SUIT FROM SUITBL
0054   85 91               STA 0091     STORE AS 6TH DISP. DIGIT
0056   20 62 00  K DOWN    JSR DISP     DISPLAY (8C-91)
0059   D0 FB               BNE K DOWN   UNTIL KEY UP
005B   20 62 00  K   UP    JSR DISP     DISPLAY (8C-91)
005E   D0 84               BNE NEWCRD   UNTIL KEY DOWN
0060   F0 F9               BEQ K UP
0062   A9 7F     DISP      LDA #$7F     SEGMENTS TO OUTPUT
0064   8D 41 17            STA 1741
0067   A0 00               LDY #$00     INITIALIZE
0069   A2 08               LDX #$08
006B   B9 8C 00  DISP 1    LDA 008C,Y   GET CHARACTER
006E   84 FC               STY 00FC
0070   20 4E 1F            JSR 1F4E     DISPLAY CHARACTER
0073   C8                  INY          NEXT CHARACTER
0074   C0 06               CPY #$06 
0076   90 F3               BCC DISP 1
0078   4C 3D 1F            JMP 1F3D     DONE, KEY DOWN?
            
		    	   XXXXXX TABLES XXXXX
0078   77        VALTBL    "A"
007C   5B                  "2"
007D   4F                  "3"
007E   66                  "4"
007F   6D                  "5"
0080   7D                  "6"
0081   07                  "7"
0082   7F                  "8"
0083   6F                  "9"
0084   78                  "T"
0085   1E                  "J"
0086   67                  "Q"
0087   70                  "K"
0088   6D        SUITBL    "S"
0089   76                  "H"
008A   5E                  "D"
008B   39                  "C"


HEX DUMP - CARD DEALER


0000 A2 06 A0 00 94 8B CA D0 FB D8 A2 34 86 92 C8 94
0010 92 CA D0 FB A5 92 D0 03 4C 4F 1C AD 04 17 D0 0B
0020 AD 44 17 D0 06 A5 92 4A 18 69 01 C5 92 90 07 F0
0030 05 E5 92 4C 2B 00 A2 33 38 F5 93 F0 03 CA 10 F8
0040 95 93 C6 92 4A 4A 4A A8 B9 7B 00 85 90 8A 29 03
0050 A8 B9 88 00 85 91 20 62 00 D0 FB 20 62 00 D0 B4
0060 F0 F9 A9 7F 8D 41 17 A0 00 A2 08 B9 8C 00 84 FC
0070 20 4E 1F C8 C0 06 90 F3 4C 3D 1F 77 5B 4F 66 6D
0080 7D 07 7F 6F 78 1E 67 70 6D 76 5E 39

<p align="center">
49</p>
<hr>

<img src="fbokpics/c.gif" width=48 height=56 alt="chess clock"><img src="fbokpics/h.gif" width=56 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/k.gif" width=53 height=57><DIV ALIGN="RIGHT">BY CASS LEWART</div>

DESCRIPTION -
     THE PROGRAM STARTS AT LOCATION 0200.  TWO INDEPENDENT
CLOCKS ARE OPERATED BY THE TWO PLAYERS BY DEPRESSING KEYS
1 OR 2 RESPECTIVELY.  THE RIGHT TWO DIGITS SHOW THE MOVE
NUMBER, THE LEFT FOUR DIGITS SHOW MINUTES AND SECONDS.
MAXIMUM TIME IS 99 MINUTES 59 SEC.  THE CLOCK PROGRAM CAN
BE FINELY TUNE BY CHANGING THE VALUE OF WORD 027F, INCREASE
BY 1 SLOWS THE CLOCK BY APPROXIMATELY 6 SEC/24 HOURS AND
VICE VERSA.

0200  A9 00              LDA #$00        ZERO ALL OF PAGE ZERO
0202  AA                 TAX
0203  9D 00 00  ZERO     STA 0000,X
0206  E8                 INX
0207  D0 FA              BNE ZERO
0209  20 1F 1F  DISF     JSR SCANDS      DISPLAY ZEROS
020C  20 6A 1F           JSR GETKEY      KEY PRESSED?
020F  C9 02              CMP #$02        KEY # 2?
0211  D0 F6              BNE DISP        NO, WAIT TILL 2 DOWN
0213  A9 01     LOOP     LDA #$01        FLAG TO 1
0215  85 D4              STA 00D4        (CLOCK *1 TO RUN)
0217  20 60 02           JSR TIME        GET CLOCK RUNNING
021A  20 31 02           JSR SAVE        SAVE TIME ON DISPLAY
021D  A9 02              LDA #$02        FLAG TO 2
021F  85 D4              STA 00D4        (CLOCK *2 TO RUN)
0221  20 60 02           JSR TIME        GET OTHER CLOCK RUNNING
0224  18                 CLC             ... INCREMENT MOVE
0225  A5 F9              LDA 00F9        NUMBER...
0227  69 01              ADC #$01
0229  85 F9              STA 00F9
022B  20 31 02           JSR SAVE        SAVE CLOCK 2 TINE
022E  4C 13 02           JMP LOOP        BACK TO CLOCK ~ 1
              XXXX SAVE TIME INDICATED SUBROUTINE XXXX
0231  A9 02     SAVE     LDA #$02        CLOCK * 2?
0233  C5 D4              CMP 00D4
0235  D0 11              BNE CLK1        NO, STORE FOR CLOCK # 1
0237  A5 FB              LDA 00FB        . .. STORE VALUES FOR
0239  85 D2              STA 00D2        CLOCK * 2 IN 0002
023B  A5 FA              LDA 00FA        AND 0003
023D  85 D3              STA 00D3
023F  A5 D0              LDA 00D0        ..  LOAD DISPLAY WITH
0241  85 FB              STA 00FB        VALUES FOR CLOCK # 1
0243  A5 D1              LDA 00D1
0245  85 FA              STA 00FA
0247  60                 RTS
0248  A5 FB     CLK1     LDA 00FB        ... STORE VALUES FOR
024A  85 D0              STA 00D0        CLOCK * 1 IN 00D0
024C  A5 FA              LDA 00FA        AND 0001
024E  85 D1              STA 00D1
0250  A5 D2              LDA 00D2        ... LOAD DISPLAY WITH
0252  85 FB              STA 00FB        VALUES FOR CLOCK * 2
0254  A5 D3              LDA 00D3
0256  85 FA              STA 00FA
0258  60                 RTS

<p align="center">
50</p>
<hr>



CLOCK ADVANCE SUBROUTINE
0260  F8        TIME     SED             SET DECIMAL MODE
0261  A9 04              LDA #$04        TIME MULTIPLIER TO 4
0263  85 D5              STA 00D5
0265  A9 F0     LOAD     LDA #$F0        SET TIMER
0267  8D 07 17           STA 1707
026A  20 1F 1F  LITE     JSR SCANDS      DISPLAY CLOCK
026D  20 6A 1F           JSR GETKEY      GET KEYBOARD ENTRY
0270  C5 D4              CMP 00D4        EQUAL TO FLAG?
0272  D0 01              BNE WAIT        NO1TIME OUT THEN UPDATE
0274  60                 RTS             YES, RETURN FROM SUBR.
0275  2C 07 17  WAIT     BIT 1707        TIME DONE?
0278  D0 F0              BPL LITE        NOT YET
027A  C6 D5              DEC 00D5        DECREMENT TIME MULT.
027C  D0 E7              BNE LOAD        NOT ZERO, RESET TIMER
027E  A9 BF              LDA #$BF        LAST LITTLE BIT OF TIME
0280  8D 06 17           STA 1706        INTO TIMER
0283  2C 07 17  TINY     BIT 1707        DONE?
0286  D0 FB              BPL TINY        NO
0288  18                 CLC             . ONE SECOND ADDED
0289  A5 FA              LDA 00FA        TO CLOCK..
028B  69 91              ADC #$01
028D  85 FA              STA 00FA        CCENTER TWO DIGITS)
02SF  C9 60              CMP #$60        A MINUTE UP?
0291  D0 05              BNE NOMN        NOT YET
0293  38                 SEC             YES, SEC. TO ZERO
0294  A9 00              LDA #$00
0296  85 FA              STA 00FA
0298  A5 FB     NOPAN    LDA 00FB        ... MINUTES INCREMENTED
029A  69 00              ADC #$00        IF CARRY SET
029C  85 FB              STA 00FB
029E  4C 60 02           JMP TIME        LOOP

          XXXXX HEX DUMP - CHESS CLOCK XXXXX
		  
0200- A9 00 AA 9D 00 00 E8 D0 FA 20 1F 1F 20 6A 1F C9
0210- 02 D0 F6 A9 01 85 D4 20 60 02 20 31 02 A9 02 85
0220- D4 20 60 02 18 A5 F9 69 01 85 F9 20 31 02 4C 13
0230- 02 A9 02 C5 D4 D0 11 A5 FB 85 D2 A5 FA 85 D3 A5
0240- D0 85 FB A5 D1 85 FA 60 A5 FB 85 D0 A5 FA 85 D1
0250- A5 D2 85 FB A5 D3 85 FA 60
0260- F8 A9 04 85 D5 A9 F0 8D 07 17 20 1F 1F 20 6A 1F
0270- C5 D4 D0 01 60 2C 07 17 10 F0 C6 D5 D0 E7 A9 BF
0280- 8D 06 17 2C 07 17 10 FB 18 A5 FA 69 01 85 FA C9
0290- 60 D0 05 38 A9 00 85 FA A5 FB 69 00 85 FB 4C 60
02A0- 02

<p align="center">
51</p>
<hr>

<img src="fbokpics/c.gif" width=48 height=56 alt="clock"><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/k.gif" width=53 height=57><DIV ALIGN="RIGHT">- Charles Parsons</div>


     This clock routine uses KIM's built in interval timer with the
interrupt option.  It works by loading $F4 into the timer (/1024) each
time the Non-Maskable Interrupt (NMI) occurs.  This theoretically pro-
duce a time of 249,856 microseconds or just under 1\4 second.  The adjust-
ment to 1\4 second is done with the timer (/1) in the interrupt routine.
A fine adjustment of the clock can be made by modifying the value in
location $0366.  Only two subroutines will be documented here (ESCAPE
TO KIM & HOUR CHIME) but many more can be added by simply replacing
the NOP codes starting at $03DE with jumps to your own subroutines.
For instance, a home control system could be set up using the clock
program.

     The escape to KIM allows KIM to run without stopping the clock.
This means that you can run other programs simultaneously with the
clock program unless your program also needs to use the NMI (such as
single step operation) or if there could be a timing problem (such as
with the audio tape operation).  Pressing the KIM GO button will get
you out of the KIM loop.

     To start the clock:

          1.  Connect PB7 (A-15) to NMI (E-6).
          2.  Initialize NMI pointer (17FA, 17FB) with 60 and 03.
          3.  Set up the time and AM-PM counter locations in page
              zero.
          4.  Go to address $03C0 and press GO.

     To get back into the clock display mode if the clock is run-
ning - start at location $03C9.

     <U>NOTE</U>:  These routines are not listed in any particular order
so be watchful of the addresses when you load them.


                         <U>PAGE ZERO LOCATIONS</U>

0070          NOTE                       Sets frequency of note
0080          QSEC                       1\4 second counter
0081          SEC                        second counter
0082          MIN                        minute counter
0083          HR                         hour counter
0084          DAY                        day counter for AM-PM



<p align="center">
52</p>
<hr>

                          <U>INTERRUPT ROUTINE</U>

     This routine uses the NMI to update a clock in zero page
locations.  Since the crystal may be slightly off one MHz a
fine adjustment is located at 0366.  NMI pointers must be set
to the start of this program.


0360 48              PHA                 save A
0361 8A              TXA
0362 48              PHA                 save X
0363 98              TYA
0364 48              PHA                 save Y
0365 A983            LDA #$83            fine adjust timing
0367 8D0417          STA TIME4
036A 2C0717  TM      BIT TIME7           test timer
036D 10FB            BPL TM              loop until time out
036F E680            INC QSEC            count 1\4 seconds
0371 A904            LDA #$04            do four times before
0373 C580            CMP QSEC            updating seconds
0375 D038            BNE RTN
0377 A900            LDA #$00            reset 1\4 second counter
0379 8580            STA QSEC
037B 18              CLC
037C F8              SED                 advance clock in decimal
037D A581            LDA SEC
037F 6901            ADC #$01            advance seconds
0381 8581            STA SEC
0383 C960            CMP #$60            until 60 seconds
0385 D028            BNE RTN
0387 A900            LDA #$00            then start again
0389 8581            STA SEC
038B A582            LDA MIN
038D 18              CLC
038E 6901            ADC #$01            and advance minutes
0390 8582            STA MIN
0392 C960            CMP #$60            until 60 minutes
0394 D019            BNE RTN
0396 A900            LDA #$00            then start again
0398 8582            STA MIN
039A A583            LDA HR              and advance hours
039C 18              CLC
039D 6901            ADC #$01
039F 8583            STA HR
03A1 C912            CMP #$12            until 12 hours
03A3 D002            BNE TH
03A5 E684            INC DAY             advance 1\2 day
03A7 C913    TH      CMP #$13            if 13 hours
03A9 D004            BNE RTN             start again with one
03AB A901            LDA #$01
03AD 8583            STA HR
03AF D8      RTN     CLD                 go back to hex mode
03B0 A9F4            LDA #$F4            start timer with interrupt
03B2 8D0F17          STA TIMEF           in 249,856 microseconds

<p align="center">
53</p>
<hr>

03B5 68              PLA
03B6 A8              TAY                 restore Y
03E7 68              PLA
03B8 AA              TAX                 restore X
03B9 68              PLA                 restore A
035A 40              RTI                 return from interrupt


                 <U>ESCAPE TO KIM IF 1 ON KIM IS PRESSED</U>

     This is a subroutine which will return to the KIM monitor routine
without stopping the real time clock.  It is done by pressing 1 on the
KIM keyboard.

0300  206A1F  KIM    JSR GETKEY          go back to KIM if
0303  0901           CMP #$01            KIM keyboard is one
0305  D00D           BNE ENDR
030?  201F1F         JSR SCANDS          delay to make sure
030A  206A1F         JSR GETKEY
030D  0901           CMP #$01
030?  D003           BNE ENDR
0311  4C051C         JMP SAVE1
0314  60      ENDR   RTN

                   <U>TWO TONE SOUND TO INDICATE HOURS</U>

     This is a subroutine which when added to the clock display
routine will use the real time clock data to produce one sound
per hour on the hour,  The output is a speaker circuit as shown
on <a target="man window" href="http://www.ping.be/kim-1__6502/6502/usrman.html#F51">Pg. 57</a>  of the <a target="man window" href="usrman.html#F51">KIM-1 Manual</a>.  It is hooked to PB0 rather than
PA0.  The specific notes can be changed by altering 0330 and 033C.

0320 A582     BEEP   LDA MIN             on the hour?
0322 D029            BNE END             if not return
0324 A581            LDA SEC             execute until SEC = HR
0326 38              SEC
0327 E583            SBC HR
0329 1024            BPL END
032B A580     AGAIN  LDA QSEC            first 1\4 second?
032D D006            BNE ONE
032F A91E            LDA #$1E            set high note
0331 8570            STA NOTE
0333 D00A            BNE GO              sound note for 1\4 second
0335 A901     ONE    LDA #$01            second 1\4 second?
0337 C580            CMP QSEC
0339 D014            BNE END
033B A928            LDA #$28            set low note
033D 8570            STA NOTE
033F A901     GO     LDA #$0l            set I/O ports
0341 8D0317          STA PBDD
0344 EE0217          INC PBD             toggle speaker
0247 A570            LDA NOTE
0349 AA              TAX                 set delay
034A CA              DEX
034B 10FD            BPL
034D 30DC            BMI AGAIN           keep sounding
034F 60       END    RTN

<p align="center">
54</p>
<hr>

                    <U>DISPLAY CLOCK ON KIM-1 READOUT</U>

03C0 A900            LDA #$00            reset 1\4 second counter
03C2 8580            STA QSEC
03C4 A9F4            LDA #$F4            start timer with interrupt
03C6 8D0F17          STA TIMEF
03C9 A581     DSP    LDA SEC             start here if clock is running
03CB 85F9            STA INH             display clock on KIM
03CD A582            LDA MIN
03CF 85FA            STA POINTL
03D1 A583            LDA HR
03D3 85FB            STA POINTH
03D5 201F1F          JSR SCANDS
03D8 200003          JSR KIM             escape to KIM
03DB 202003          JSR BEEP            sound on the hour
03DE EAEAEA
03E1 EAEAEA
03E4 EAEAEA
03E7 EAEAEA
03EA EAEAEA
03ED EAEAEA
03F0 EAEAEA
03F3 EAEAEA
03F6 EAEAEA
03F9 EAEAEA
03FC 4CC903          JMP DSP




              *****   Hex Dump - Clock *****


 0300-   20 6A 1F C9 01 D0 0D 20 1F 1F 20 6A 1F C9 01 D0
 0310-   03 4C 05 1C 60
 0320-   A5 82 D0 29 A5 81 38 E5 83 10 24 A5 80 D0 06 A9
 0330-   1E 85 70 D0 0A A9 01 C5 80 D0 14 A9 28 85 70 A9
 0340-   01 8D 03 17 EE 02 17 A5 70 AA CA 10 FD 30 DC 60

 0360-   48 8A 48 98 48 A9 83 8D 04 17 20 C0 17 10 FB E6
 0370-   80 A9 04 C5 80 D0 38 A9 00 85 80 18 F8 A5 81 69
 0380-   01 85 81 C9 60 D0 28 A9 00 85 81 A5 82 18 69 01
 0390-   85 82 C9 60 D0 19 A9 00 85 82 A5 83 18 69 01 85
 03A0-   83 C9 12 D0 02 E6 84 C9 13 D0 04 A9 01 85 83 D8
 03B0-   A9 F4 8D 0F 17 68 A8 68 AA 68 40
 03C0-   A9 00 85 80 A9 F4 8D 0F 17 A5 81 85 F9 A5 82 85
 03D0-   FA A5 83 85 FB 20 1F 1F 20 00 03 20 20 03 EA EA
 03E0-   EA EA EA EA EA EA EA EA EA EA EA EA EA EA EA EA
 03F0-   EA EA EA EA EA EA EA EA EA EA EA EA 40 C9 03

<p align="center">
55</p>
<hr>

<img src="fbokpics/c.gif" width=48 height=56 alt="code test"><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/t.gif" width=44 height=55><DIV ALIGN="RIGHT">BY STAN OCKERS</div>

  DESCRIPTION -
     THIS PROGRAM REQUIRES THAT A SPEAKER BE HOOKED
  TO PA0 AS IN <a target="man window" href="http://www.ping.be/kim-1__6502/6502/usrman.html#F51">FIGURE 5.1</a> OF THE <a target="man window" href="usrman.html#F51">KIM MANUAL</a>.  WHEN STARTED
  AT 0200, THE PROGRAM WILL SEND 5 LETTER CODE GROUPS,
  (INTERNATIONAL MORSE), OVER THE SPEAKER.  THE CODE GROUPS
  WILL CONSIST OF RANDOM CHARACTERS INCLUDING A-Z, 0-9, A
  PERIOD, COMMA, QUESTION MARK AND EQUAL SIGN.  AFTER THIS
  TRANSMISSION, YOUR RECEPTION CAN BE CHECKED BECAUSE THE
  GROUPS SENT WILL BE SHOWN ON THE DISPLAY.  PRESSING ANY
  KEY WILL CAUSE THE NEXT GROUP TO BE DISPLAYED.  LIMITATIONS
  IMPOSED BY THE 7 SEGMENT DISPLAYS MAKE SOME CHARACTERS
  PRETTY STRANGE AND THERE IS SOME REDUNDANCY; BUT BY SLOWING
  THE TRANSMISSION YOU SHOULD BE ABLE TO FIGURE OUT WHAT
  EACH CHARACTER IS.




0200 A2 0C             LDX #$0C       ... INITIALIZATION
0202 BD DF 02  INIT    LDA 02DF,X     .. 12 VALUES ARE LOADED
0205 95 E2             STA 00E2,X     FROM 00E2 ON UP ..
0207 CA                DEX
0208 10 F8             BPL INIT
020A A2 04     GRUP    LDX #$04       (SPACE LENGTH)
020C 20 A0 02          JSR SPACE      SPACE FOR ANOTHER GROUP
020F A9 06             LDA #$06       GROUP SIZE, 5 CHAR.
0211 85 E0             STA 00E0
0213 C6 E0     CHAR    DEC 00E0       NEXT CHAR. IN GROUP
0215 F0 F3             BEQ GRUP       FINISHED, GET NEW GROUP
0217 A2 03             LDX #$03       (SPACE LENGTH)
0219 20 A0 02          JSR SPACE      SPACE BETWEEN CHAR.
021C 20 CB 02  NUMB    JSR RAND       GET A RANDOM it
021F 29 3F             AND #$3F       MAKE SURE POSITIVE
0221 C9 28             CMP #$28       LESS THAN 41 (DECIMAL)?
0223 10 F7             BPL NUMB       NO, GET ANOTHER
0225 AA                TAX            USE AS INDEX
0226 BD 13 03          LDA 0313,X     GET DISPLAY CONVERSION
0229 A4 E2             LDY 00E2       CHAR. INDEX IN Y
022B 99 3B 03          STA 033B,Y     STORE CONVERSION
022E E6 E2             INC 00E2       INDEX UP ONE
0230 A5 E2             LDA 00E2       LAST CHARACTER?
0232 C9 1A             CMP #$1A
0234 F0 20             BEQ DEBO       YES, GO READOUT
0236 BD EB 02          LDA 02EB,X     GET CODE CHARACTER
0239 85 DF             STA 00DF       TEMPORARY STORE
023B 06 DF     BITS    ASL 00DF       SHIFT
023D F0 D4             BEQ CHAR       EMPTY, GET NEXT CHAR.
023F B0 0D             BCS DASH       IF CARRY SET, SEND DASH
0241 A2 01             LDX #$01       . ELSE SEND DOT
0243 20 82 02          JSR MARK
0246 A2 01     SPAC    LDX #$01       THEN SPACE

<p align="center">
56</p>
<hr>



0248 20 A0 02          JSR SPACE
0248 18                CLC
024C 90 ED             BCC BITS       UNCOND. JUMP
024E A2 03     DASH    LDX #S03       (DASH LENGTH)
0250 20 82 02          JSR MARK       SEND A DASH
0253 18                CLC
0254 90 F0             BCC SPAC       UNCOND. JUMP
0256 20 8E 1E  DEBO    JSR INIT1      DEBOUNCE KEY..
0259 20 B1 02          JSR DISP
025C D0 F8             BNE DEBO       WAIT FOR KEY RELEASE
025E 20 B1 02  WAIT    JSR DISP
0261 F0 FB             BEQ WAIT       WAIT FOR KEY DOWN
0263 18                CLC
0264 A5 E4             LDA 00E4       UPDATE POINTER TO
0266 69 05             ADC #$05       POINT AT NEXT GROUP..
0268 85 E4             STA 00E4
026A A0 04             LDY #$04       ..LOAD WINDOWS 00E8-
026C B1 E4     WIND    LDA (00E4),Y    00EC WITH CONVERSIONS
026E 99 E8 00          STA 00E8,Y     FOR DISPLAY..
0271 88                DEY
0272 10 F8             BPL WIND
0274 C6 E3             DEC 00E3       LAST GROUP?
0276 D0 DE             BNE DEBO       NO, GET ANOThER
0278 A9 36             LDA #$36       REINITILIZE POINTER
027A 85 E4             STA 00E4       TO RUN THRU GROUPS AGAIN
027C A9 05             LDA #$05
027E 85 E3             STA 00E3
0280 D0 D4             BNE DEBO       UNCOND. JUMP
      ***** MARK SUBROUTINE ****
0282 86 DD             STX 00DD       TEMP. STORE
0284 A5 E6     TIMM    LDA 00E6       SPEED BYTE
0286 8D 07 17          STA 1707       START TIMER
0289 A9 01             LDA #$01       PA0 TO OUTPUT
028B 8D 01 17          STA 1701
028E EE 00 17  TOGG    INC 1700       TOGGLE PA0
0291 A6 57             LDX 0057       DETERMINE FREQ.
0293 CA        FREQ    DEX
0294 D0 FD             BNE FREQ
0296 2C 07 17          BIT 1707       TIME UP?
0299 10 F3             BPL TOGG       NO
029B C6 DD             DEC 00DD       DETERMINE MARK LENGTH
029D D0 E5             BNE TIMM
029F 60                RTS
        ***** SPACE SUBROUTINE *****
02A0 86 DD     DISP    STX 00DD       TEMP. STORE
02A2 A5 E6     TIMS    LDA 00E6       SPEED BYTE
02A4 8D 07 17          STA 1707       START TIMER
02A7 2C 07 17  HOLD    BIT 1707       DONE?
02AA 10 FB             BPL HOLD       NO
02AC C6 DD             DEC 00DD       FULL TIME UP?
02AE D0 F2             BNE TIMS       NO
02B0 60                RTS

<p align="center">  
57</p>
<hr>


          ***** DISPLAY SUBROUTINE *******
02B1 A9 7F     DISP    LDA #$7F       CHANGE SEGMENTS..
02B3 80 41 17          STA PADD       TO OUTPUTS
02B6 A0 00             LDY #$0        INIT. RECALL INDEX
02B8 A2 09             LDX #$9        INIT. DIGIT NUMBER
02BA B9 E8 00  SIX     LDA 00E8,Y     GET CHARACTER
02B0 84 FC             STY 00FC       SAVE Y
02BF 20 4E 1F          JSR 1F4E       DISPLAY CHARACTER
02C2 C8                INY            SET UP FOR NEXT OAR.
02C3 C0 06             CMP #$06       6 CHAR. DISPLAYED?
02C5 90 F3             BCC SIX        NO
02C7 20 3D 1F          JSR 1F3D       KEY DOWN?
02CA 60                RTS            EXIT
          ***** RANDOM NUMBER SUBROUTINE ******
02CB 18        RAND    CLC            FROM J. BUTTERFIELD
02CC D8                CLD            KIM USER NOTES
02CD A5 E1             LDA 00E1       VOL. 1, *1
02CF 65 E4             ADC 00E4
02D1 65 E5             ADC 00E5
02D3 85 E0             STA 00E0
02D5 A2 04             LDX #$04
02D7 B5 E0     ROLL    LDA 00E0,X
02D9 95 E1             STA 00E1,X
02DB CA                DEX
02DC 10 F9             BPL ROLL
02DE 60                RTS
           ***** INITIALIZATION VALUES *******
02DF 00/05/3B/03/33/66/C0/C0/C0/C0/C0/00
           ***** TABLE OF CODE CHARACTERS *******
02EB 60/88/A8/90/40
02F0 28/D0/08/20/78/B0/48/E0/A0/F0/68/D8/50/10/C0/30
0300 18/70/98/B8/C8/FC/7C/3C/1C/0C/04/84/C4/E4/F4/56
0310 CE/32/8C
           ***** TABLE OF DISPLAY CONVERSIONS ******
0313 F7/FC/B9/DE/F9/F1/BD/F6/84/9E/F0/B8/B7
0320 D4/DC/F3/E7/D0/ED/F8/BE/EA/9C/94/EE/C9/BF/86/DB
0330 CF/E6/ED/FD/87/FF/EF/90/84/D3/C8

 *** STORAGE OF CHARACTERS SENT: 033B - 03FF

CHANGES-
     THE PROGRAM IS INITIALLY SET UP TO SEND AND DISPLAY
5 GROUPS OF 5 CHARACTERS EACH.  THEY ARE SENT AT A RATE
OF ABOUT 16 GROUPS PER MINUTE.  ALL OF THIS CAN OF
COURSE BE CHANGED.
- THE NUMBER OF CHARACTERS TO BE SENT (IN HEX) PLUS ONE
  SHOULD BE STORED IN 0233, (INITIALLY 1A).
- THE NUMBER OF GROUPS TO BE DISPLAYED AFTER TRANSMISSION
  SHOULD BE STORED IN 02E0  (INITIALLY 05).
- THE SPEED OF TRANSMISSION IS DETERMINED BY THE CONTENTS
  OF 02E3.  A HEX 33 GIVES ABOUT 16 GROUPS/MINUTE, A
  66 GIVES 8 WPM.
- THE TONE CAN BE VARIED BY THE CONTENTS OF 00E4.
- A MAXIMUM OF ONE PAGE OF CHARACTERS CAN BE SENT
  STORED IN A BLOCK POINTED TO BY 02E1 AND 02E2.
- FOR A DESCRIPTION OF HOW THE CHARACTERS ARE STORED,
  SEE OCT. '76 BYTE, PAGE 36.
- A PORTION OF THE CHARACTER SET, (SAY ONLY LETTERS),
  CAN BE SELECTED BY ADJUSTING THE BYTE AT 0222.

<p align="center">
58</p>
<hr>

<img src="fbokpics/c.gif" width=48 height=56 alt="craps"><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/s.gif" width=49 height=57><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>

DESCRIPTION -
      SET ADDRESS 0200, THEN HOLD "GO" DOWN .. YOU'LL SEE:
          - 2 DICE "ROLLING" ON THE LEFT
          - $10 BALANCE ON THE RIGHT
      LET "GO" ... THE DICE WILL STOP ROLLING, AND YOU'LL GET:
          - A WIN ON A TOTAL OF 7 OR 11; YOU'LL SEE YOUR DOLLAR
            BALANCE RISE; OR
          - A LOSS ON TOTALS OF 2,3, OR 12; YOUR DOLLAR BALANCE
            WILL DROP; OR
          - A "POINT" - THE CENTER SEGMENTS WILL LIGHT WITH THE
            ROLL AND YOU MUST TRY TO ROLL THIS TOTAL AGAIN
            BEFORE YOU ROLL 7 -
      PUSH THE "GO" BUTTON ONLY ON THE FIRST ROLL. FOR SUBSEQUENT
      ROLLS, PUSH ANOTHER BUTTON.


      0200 D8         START   CLD
      0201 20 40 1F           JSR KEYIN
      0204 20 CA 1F           JSR GETKEY
      0207 C5 40              CMP LAST
      0209 F0 79              BEQ LIGHT     same key as before?
      020B 85 40              STA LAST
      020D 49 15              EOR #$15      no-key test
      020F 85 41              STA FLAG      into flag
      0211 C9 06              CMP #6        GO key?
      0213 D0 05              BNE NOGO      nope..
      0215 A9 10              LDA #$10      yes, $10
      0217 20 A9 02           JSR DOBUX     put in window
      021A AD 04 17   NOGO    LDA TIMER     random value
      021D A2 C0              LDX #$C0      divide by 6
      021F 86 4E              STX DIVR
      0221 A2 05              LDX #5
      0223 C5 4E      RNDLP   CMP DIVR      divide..
      0225 90 02              BCC RNDOV        ..a..
      0227 E5 4E              SBC DIVR          ..digit
      0229 46 4E      RNDOV   LSR DIVR
      022B CA                 DEX
      0220 10 F5              BPL RNDLP
      022E AA                 TAX           die 0-5
      022F E8                 INX           die 1-6
      0230 BD E7 1F           LDA TABLE,X   segment
      0233 A4 41              LDY FLAG      which die?
      0235 F0 06              BEQ PLAY      second?
      0237 86 42              STX DIE       first, save it..
      0239 85 43              STA WINDX     ..& segment
      023B D0 47              BNE LIGHT     unconditional
      023D 85 47      PLAY    STA WINDOW+1  show die..
      023F A5 43              LDA WINDX      ..and other
      0241 85 46              STA WINDOW              one
      0243 A5 44              LDA BUX       out of dough?

<p align="center">
59</p>
<hr>



      0245 F0 3D              BEQ LIGHT     ..no bread
      0247 8A 18              TXA CLC
      0249 65 42              ADC DIE       add other die
      024B C5 45              CMP POINT     get the point?
      024D F0 28              BEQ WIN       ..yup
      024F A6 45              LDX POINT     point-zero...
      0251 F0 12              BEQ FIRST     ..first roll
      0253 C9 07              CMP #7        seven you lose
      0255 D0 2D              BNE LIGHT     ..nope
      0257 A5 44      LOSE    LDA BUX
      0259 F0 05              BEQ LOSX       nough dough?
      025B 18 F8              CLD SED        decimal add..
      025D E9 00              SBC #0         neg one
      025F D8                 CLD
      0260 20 A9 02           JSR DOBUX      put in window
      0263 D0 1F              BNE LIGHT      unconditional
      0265 A6 46      FIRST   LDX WINDOW     copy point
      0267 86 48              STX WINDOW+2
      0269 A6 47              LDX WINDOW+1
      026B 86 49              STX WINDOW+3
      026D 85 45              STA POINT
      026F AA                 TAX            point value
      0270 BD C6 02           LDA TAB-2,X    'win' table
      0273 F0 0F              BEQ LIGHT      ..says point
      0275 30 E0              BMI LOSE       ..says craps
      0277 A5 44      WIN     LDA BUX        ..says win
      0279 C9 99              CMP #$99       maximum bucks?
      027B F0 04              REQ WINX       yes, skip add
      027D F8                 SED            decimally add..
      027E 69 01              ADC #1         ..one
      0280 D8                 CLD
      0281 20 A9 02   WIUX    JSR DOBUX     make segments
      0284 A5 41      LIGHT   LDA FLAG      still rolling?
      0286 F0 04              BEQ NOINC     ..nope;
      0288 E6 46              INC WINDOW    ..yup, so..
      028A E6 47              INC WINDOW+1  ..roll em!
      028C A9 7F      NOINC   LDA #$7F
      028E 8D 41 17           STA PADD
      0291 A0 13              LDY #$13
      0293 A2 05              LDX #5
      0295 B5 46      LITE    LDA WINDOW,X
      0297 8D 40 17           STA SAD
      029A 8C 42 17           STY SBD
      029D E6 4F      PAWS    INC PAUSE
      029F D0 FC              BNE PAWS
      02A1 88 88              DEY DEY
      02A3 CA                 DEX
      02A4 10 EF              BPL LITE
      02A6 4C 00 02           JMP START
      02A9 85 44      DORUX   STA BUX
      02AB A0 00              LDY #0
      02AD 84 45              STY POINT     clear point
      02AF 84 48              STY WINDOW+2  .......

<p align="center">
60</p>
<hr>


      02B1 84 49              STY WINDOW+3  display
      02B3 A8 4A              TAY LSRA
      02B5 4A 4A 4A           LSRA LSRA LSRA
      02B8 AA                 TAX
      02B9 BD E7 1F           LDA TABLE,X
      02BC 85 4A              STA WINDOW+4
      02BE 98                 TYA
      02BF 29 0F              AND #$0F
      02C1 AA                 TAX
      02C2 BD 0F 1F           LDA TABLE,X
      02C5 85 4B              STA WIND0W+5
      02C7 60                 RTS
      0208 FF FF 00 00 00 01 00 00 00 01 FF      (TAB)

HEX DUMP - CRAPS
   0200-   D8 20 40 1F 20 6A 1F C5 40 F0 79 85 40 49 15 85
   0210-   41 C9 06 D0 05 A9 10 20 A9 02 AD 04 17 A2 C0 86
   0220-   4E A2 05 C5 4E 90 02 E5 4E 46 4E CA 10 F5 AA E8
   0230-   BD E7 1F A4 41 F0 06 86 42 85 43 D0 47 85 47 A5
   0240-   43 85 46 A5 44 F0 3D 8A 18 65 42 C5 45 F0 28 A6
   0250-   45 F0 12 C9 07 D0 2D A5 44 F0 05 18 F8 E9 00 D8
   0260-   20 A9 02 D0 1F A6 46 86 48 A6 47 86 49 85 45 AA
   0270-   BD C6 02 F0 0F 30 E0 A5 44 C9 99 F0 04 F8 69 01
   0280-   D8 20 A9 02 A5 41 F0 04 E6 46 E6 47 A9 7F 8D 41
   0290-   17 A0 13 A2 05 B5 46 8D 40 17 8C 42 17 E6 4F D0
   02A0-   FC 88 88 CA 10 EF 4C 00 02 85 44 A0 00 84 45 84
   02B0-   48 84 49 A8 4A 4A 4A 4A AA BD E7 1F 85 4A 98 29
   02C0-   0F AA BD E7 1F 85 4B 60 FF FF 00 00 00 01 00 00
   02D0-   00 00 FF





    Coding notes: CRAPS is a highly top-down program.
    The program always flows from START to LIGHT and
    back again with few breaks in sequence. The dice
    are randomized from TIMER (1704) and RNDLP contains
    a small division routine, dividing by 6; the
    remainder, randomly 0 to 5, gives the roll of
    one die. On the first roll of a run, we use
    the table at 02C8 to analyze the total: in this
    table, FF means you lose and 01 means you win.
    FLAG is zero if you're not pushing any button.
    Segments for the display are stored in table
    WINDOW, 0046 to 004B.

<p align="center">
61</p>
<hr>

<img src="fbokpics/d.gif" width=50 height=56 alt="duel"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/l.gif" width=37 height=56><DIV ALIGN="RIGHT">BY STAN OCKERS</div>

DESCRIPTION -
     THIS IS A  GAME FOR TWO PLAYERS.  WHEN THE PROGRAM IS
STARTED AT 0200, EACH PLAYER IS GIVEN TEN POINTS AS INDICATED
ON OPPOSITE SIDES OF THE DISPLAY.  THE CENTER DIGITS WILL
BE BLANK.  AFTER A RANDOM DELAY, THE CENTER DIGITS WILL LIGHT.
THE FIRST PLAYER TO PRESS HIS KEY WILL INCREASE HIS SCORE
BY ONE AND DECREASE HIS OPPONENT'S BY ONE.  THE CENTER DIGITS
WILL THEN BLANK FOR ANOTHER RANDOM DELAY.  IF A FLAYER
PRESSES HIS KEY WHILE THE CENTER DIGITS ARE BLANK, HIS SCORE
WILL BE DECREASED BY ONE.  WHEN ONE PLAYER REACHES ZERO THE
GAME IS OVER AND MUST BE RESTARTED AT 0200.  THE PLAYER TO
THE LEFT USES KEY ZERO AND THE ONE ON THE RIGHT USES KEY
SEVEN.




0200   A9 10              LDA #$10      INITIALIZE DIGITS
0202   85 F9              STA 00F9
0204   85 FB              STA 00FB
0206   AD 44 17  RAND     LDA 1744      GET "RANDOM" #
0209   29 1F              AND #$1F      NOT TOO BIG
020B   09 01              ORA #$01      NOT TOO SMALL
020D   85 EE              STA 00EE      PUT IN DECREMENT LOC.
020F   A9 00              LDA #$00      BLANK CENTER DIGITS
0211   85 FA              STA 00FA
0213   20 71 02  DISP     JSR LITE      DISPLAY DIGITS
0216   AD 07 17           LDA 1707      TIME UP?
0219   F0 0D              BEQ MORE      NO
021B   A9 FF              LDA #$FF
021D   8D 07 17           STA 1707      START TIMER
0220   C6 EE              DEC 00EE      FULL TIME UP?
0222   10 04              BPL MORE      NO, SKIP
0224   A9 36              LDA #$36      YES, CHANGE
0226   85 FA              STA 00FA      CENTER DIGITS
0228   D8        MORE     CLD           CLEAR FOR KEYBOARD
0229   20 40 1F           JSR KEYIN     INIT. KEYBOARD
022C   20 6A 1F           JSR GET KEY   KEY DEPRESSED?
022F   CS 15              CMP #$15      VALID KEY?
0231   10 E0              BPL DISP      NO
0233   C9 07              CMP #$07      RIGHT KEY?
0235   F0 0E              BEQ RITE      YES
0237   C9 00              CMP #$00      LEFT KEY?
0239   F0 02              BEQ LEFT      YES
023B   D0 D6              BNE DISP      NOT A 0 OR A 7
023D   A2 02     LEFT     LDX #$02      INDEX FOR LEFT
023F   A5 EE              LDA 00EE      TIME UP?
0241   10 14              BPL LOS1      NO DECREASE LEFT ONE
0243   30 06              BMI ADD1      YES, INCREASE LEFT
0245   A2 00     RITE     LDX #$00      INDEX FOR RIGHT
0247   A5 EE              LDA 00EE      CHECK TIME
0249   10 0C              BPL LOS1      NOPE, NOT YET

<p align="center">
62</p>
<hr>



024B   F8        ADD1     SED
024C   18                 CLC           INCREASE SCORE
024D   85 F9              LDA 00F9,X    BY ONE
024F   69 01              ADC #$01
0251   95 F9              STA 00F9,X
0253   8A                 TXA           INDEX TO OTHER
0254   49 02              EOR #$02      SIDE
0256   AA                 TAX
0257   F8        LOS1     SED           DECREASE SCORE
0258   38                 SEC           BY ONE
0259   B5 F9              LDA 00F9,X
025B   E9 01              SBC #$01
025D   95 F9              STA 00F9,X
025F   F0 0A              BEQ FIN       GO TO FIN IF ZERO
0261   20 71 02  WAIT     JSR LITE      WAIT FOR SWITCH
0264   20 40 1F           JSR KEYIN     TO BE RELEASED
0267   D0 F8              BNE           WAIT
0269   F0 9B              BEQ RAND      THEN START NEW DELAY
0268   20 71 02  FIN      JSR LITE      FINISHED LOOP
026E   B8                 CLV
026F   50 FA              BVC FIN       UNCOND. JUMP
               XXXXX  DISPLAY SUBROUTINE XXXXX
0271   A9 7F     LITE     LDA #$7F
0273   8D 41 17           STA SADD
0276   A2 09              LDX #$09      INIT. DIGIT ~
0278   A5 FB              LDA 00FB
027A   20 8B 02           JSR 2HEX
027D   A5 FA              LDA 00FA      GET CENTER DIGITS
027F   20 4E 1F           JSR CONVX     CONVERT NONHEX CHAR.
0282   20 4E 1F           JSR CONVX     TWO OF THEM
0285   A5 F9              LDA 00F9
0287   20 8B 02           JSR 2HEX
028A   60                 RTS
      XXXXX HEX CHARACTER CONVERSION SUBROUTINE XXXXX
028B   A8        2HEX     TAY
028C   4A                 LSR A        SUBROUTINE TO CONVERT
028D   4A                 LSR A        ONE WORD TO 2 HEX
028E   4A                 LSR A        CHARACTERS
028F   4A                 LSR A
0290   F0 0A              BEQ ZBLK
0292   20 48 1F           JSR CONVD
0295   98        2NDC     TYA          SECOND CHARACTER
0296   29 0F              AND #$0F
0298   20 48 1F           JSR CONVD
029B   60                 RTS
029C   A9 80     ZELK     LDA #$80     BLANK LEADING   ZEROS
029E   84 FC              STY 00FC
02A0   20 4E 1F           JSR CONVX    CONVERT NONHEX CHAR.
02A3   B8                 CLV
02A4   50 EF              BVC 2NDC     UNCOND. JUMP

<p align="center">
63</p>
<hr>

<img src="fbokpics/f.gif" width=47 height=57 alt="farmer brown"><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/b.gif" width=49 height=56><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/w.gif" width=67 height=57><img src="fbokpics/n.gif" width=57 height=57>


You are farmer Brown.  You are growing a beautiful crop of corn
But the following animals try to come and steal your corn:

<img src="fbokpics/64.gif" width="496" height="68" alt="animals">

As soon as you see one of these animals coming for your corn,
you can scare it away by calling its name.  Press the button
with the first letter of the animal's name.  So you would
press A to shoo away an ant, B to shoo away a bird, and so on.

If you press the right button, the animal will go back.  if you
press the wrong button, it will think you mean somebody else
and keep coming for your corn. And when all your corn is gone,
KIM will show 000 and the game is over.

The animal won't "shoo" unless it has completely entered the
display.  Speed of the animals can be adjusted by changing the
contents of location 02EA.

0200 A2 0D     START   LDX #$13
0202 86 6E             STX CORN     bushels of corn to start
0204 A9 00             LDA #0       clear the window
0206 95 60     SLOOP   STA WINDOW,X
0208 CA                DEX
0209 10 FE             BPL SLOOP
020B A2 0B     TEST    LDX #11      is window enipty?
020D B5 60     TLOOP   LDA WINDOW,X
020F D0 3B             BNE CONTIN   no. keep going
0211 CA                DEX
0212 10 F9             BPL TLOOP
0214 E6 6D             INC GOT      yes. make new animal
0216 A5 6C             LDA FLAG
0218 F0 09             BEQ MORE     did last animal get in?
021A C6 6D             DEC GOT
021C C6 6E             DEC CORN     take away some corn
021E D0 03             BNE MORE     any left?
0220 4C 25 19          JMP DONE     no, end of game
0223 AD 04 17  MORE    LDA TIMER    random value..
0226 4A 4A 4A          LSRA LSRA LSRA     ..to generate..
0229 4A 4A             LSRA LSRA          ..new random animal
022B C9 06             CMP #6       6 types of animal
022D 90 02             BCC MAKE
022F 29 93             AND #$03
0231 18        MAKE    CLC
0232 AA                TAX         animal type to X
0233 69 0A             ADC #$0A    key type A to F

<p align="center">
64</p>
<hr>



0235 85 6F             STA KEY
0237 B0 A4 02          LDA INDEX,X  animal 'picture' address
023A 85 70             STA POINL     to indirect pointer
023C A9 02             IDA #2
023E 85 71             STA POINH
0240 A0 05             LDY #5      six locations to move
0242 B1 70     ALOOP   LDA (POINL),Y   from 'picture'
0244 99 66 00          STA WINGS,Y      ..to 'wings'
0247 88                DEY
0248 10 F8             BPL ALOOP
024A 84 6C             STY FLAG    flag FF - animal coming
024C A2 05     CONTIN  LDX #5       test:
024E B5 66     CLOOP   LDA WTNGS,X   is animal out of 'wings'?
0250 D0 13             BNE NOKEY     no, ignore keyboard
0252 CA                DEX
0253 10 F9             BPL CLOOP
0255 20 40 1F          JSR KEYIN
0258 20 6A 1F          JSR GETKEY
025B C5 6F             CMP KEY       right animal named?
025D D0 06             BNE NOKEY     no, ignore key
025F A5 6C             LDA FLAG
0261 10 02             BPL NOKEY     animal retreating?
0263 E6 60             INC FLAG      make animal retreat
0265 C6 72     NOKEY   DEC DELAY     wait a while..
0267 D0 1E             BNE NOMOVE    before moving animal
0269 A9 20             LDA #S20      speed control value
026B 85 72             STA DELAY
026D A5 6C             LDA FLAG      move animal - which way?
026F 30 0D             BMI COMING     ..left
0271 A2 0A             LDX #10        ..right
0273 B5 5A     RLOOP   LDA WINDOW-6,X
0275 95 5B             STA WINDOW-5,X
0277 CA                DEX
0278 D0 F9             BNE RLOOP
027A 86 5A             STX WINDOW-6   clear extreme left
027C F0 09             BEQ NOMOVE     unconditional branch
027E A2 F0     COMING  LDX #$F0       -16
0280 B5 6C     OMLOOP  LDA WINDOW+12,X
0282 95 6B             STA WINDOW+11,X
0284 E8                INX
0285 30 F9             BMI CMLOOP
0287 A9 7F     NOMOVE  LDA #$7F       light KIM display
0289 8D 41 17          STA PADD
028C A0 13             LDY #$13
028E A2 05             LDX #5         six display digits
0290 B5 60     LITE    LDA WINDOW,X
0292 8D 40 17          STA SAD
0295 8C 42 17          STY SBD
0298 E6 73     LITEX   INC WAIT
029A D0 FC             BNE LITEX
029C 88 88 CA          DEY DEY DEX
029F 10 EF             BPL LITE
02A1 4C 0B 02          JMP TEST
index and animal 'pictures' in hexadecimal form
02A4 AA B0 B6 BC C2 C8 08 00 00 00 00 00 01 61 61 40 00 00
02B6 61 51 47 01 00 00 63 58 4E 00 00 00 71 1D 41 1F 01 00
02C8 63 58 4C 40 00 00 

<p align="center">
65</p>
<hr>

FARMER BROWN....

Exercises:

1. You can see that each animal occupies 6 memory locations,
   starting at 02AA (the Ant) - and the last location must always
   be zero.  Can you make up your own animals? The letters may
   not fit exactly, but you can always invent names or use
   odd ones (you could make an Aardvark, a Burfle, a Cobra, and
   so on).

2. The game might be more fun if the animals went faster after
   a while, so that sooner or later they would just zip by.
   The location that controls speed is at address 026A;
   the lower the number, the faster the animals will go.
   So if you could arrange to have the program decrease
   this number automatically once in a while, you1d get
   a nice speed-up feature.

3. You can't "shoo" the animal until it's completely entered
   the display; but you can still catch it after it's partly
   left.  The game would be harder - and maybe more fun -
   if you could only shoo it while it was completely in the
   display. Hint - testing location 005F (window-1) would
   tell you if an animal was on its way out.

4. You'd have a "Target Practice" game if you made the animal
   disappear (instead of backing up) when you pressed the
   right button.  With a little planning, you'll find that
   this is quite easy to do.


<BIG>
             ***** HEX DUMP - FARMER BROWN *****


0200-    A2 0D 86 6E A9 00 95 60 CA 10 FB A2 0B B5 60 D0
0210-    3B CA 10 F9 E6 6D A5 6C F0 09 C6 6D C6 6E D0 03
0220     4C 25 19 AD 04 17 4A 4A 4A 4A 4A C9 06 90 02 29
0230-    03 18 AA 69 0A 85 6F BD A4 02 85 70 A9 02 85 71
0240-    A0 05 B1 70 99 66 00 88 10 F8 84 6C A2 05 B5 66
0250-    D0 13 CA 10 F9 20 40 1F 20 6A 1F C5 6F D0 06 A5
0260-    6C 10 02 E6 6C C6 72 D0 1E A9 20 85 72 A5 6C 30
0270-    0D A5 0A B5 5A 95 5B CA D0 F9 86 5A F0 09 A2 F0
0280-    B5 6C 95 6B E8 30 F9 A9 7F 8D 41 17 A0 13 A2 05
0290-    B5 60 8D 40 17 8C 42 17 E6 73 D0 FC 88 88 CA 10
02A0-    EF 4C 0B 02 AA B0 B6 BC C2 C8 08 00 00 00 00 00
02B0-    01 61 61 40 00 00 61 51 47 01 00 00 63 58 4E 00
02C0-    00 00 71 1D 41 1F 01 00 63 58 4C 40 00 00
</BIG>

<p align="center">
66</p>
<hr>

<img src="fbokpics/h.gif" width=56 height=57 alt="hi-lo"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/min.gif" width=16 height=38><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/o.gif" width=50 height=57><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>

  DESCRIPTION -

       AN EASY GAME FOR ONE OR MORE PLAYERS.  KIM CHOOSES A
  SECRET NUMBER FROM 0l TO 98.  AT THE START, THE FIRST FOUR
  DIGITS SHOW THE HIGH AND LOW BOUNDS OF THE NUMBER - 99 HIGH
  AND 00 LOW.  AS GUESSES ARE ENTERED - ENTER THE GUESS AND
  PRESS A FOR ATTEMPT - THE BOUNDS CHANGE AS YOU ARE NARROWING
  DOWN THE POSSIBILITIES.  FOR EXAMPLE, GUESS 32 AND THE DISPLAY
  MIGHT CHANGE TO 32 00, MEANING THAT THE COMPUTER'S SECRET
  NUMBER IS BETWEEN THESE VALUES.  AFTER EACH LEGAL GUESS,
  THE COMPUTER SHOWS THE NUMBER OF ATTEMPTS MADE SO FAR.

  ONE PLAYER GAME: TRY TO GET THE MYSTERY NUMBER IN SIX ATTEMPTS.

  MULTI PLAYER GAME: EACH PLAYER TRIES TO AVOID GUESSING THE
  MYSTERY NUMBER - THE CORRECT GUESSER LOSES AND IS "OUT".





0200 F8        START   SED
0201 A5 E0     TOP     LDA RND  generate random #
0203 38                SEC      01 to 98
0204 69 00             ADC #0
0206 A2 01             LDX #1   overflow at 99
0208 C9 99             CMP #$99
020A D0 01             BNE OVR0
020C 8A                TXA
020D 85 E0     OVR0    STA RND
020F 20 40 1F          JSR KEYIN
0212 D0 ED             BNE TOP
0214 D8                CLD         initialize:
0215 A9 99             LDA #$99          hi
0217 85 FB             STA POINTH
0219 A9 00             LDA #0
021B 85 FA             STA POINTL      and lo
021D A2 A0     RSET    LDX #$A0 guess counter
021F 86 F9     NSET    STX INH
0221 86 E1             STX NGUESS
0223 20 1F 1F  GUESS   JSR SCANDS light display
0226 20 6A 1F          JSR GETKEY test key
0229 C9 13             CMP #$13   go key?
022B F0 D3             BEQ START
022D C5 E2             CMP LAST
022F F0 F2             BEQ GUESS  same key?
0231 85 E2             STA LAST

<p align="center">
67</p>
<hr>



0233 C9 0A             CMP #$0A   'A' key?
0235 F0 10             BEQ EVAL   yes, evaluate guess
0237 B0 EA             BCS GUESS  no key?
0239 0A                ASL A      roll character
023A 0A                ASL A      ..into..
023C 0A                ASL A      position..
023C 0A                ASL A
023D A2 03             LDX #3
023F 0A        LOOP    ASL A      ..then
0240 26 F9             ROL INH    ..into
0242 CA                DEX        ..display
0243 10 FA             BPL LOOP
0245 30 DC             BMI GUESS
0247 A5 F9     EVAL    LDA INH    guess lower..
0249 C5 E0             CMP RND    ..than number?
024B 90 06             BCCC OVR1  yes, skip
024D C5 FB             CMP POINTH no, check hi
024F B0 D2             BCS GUESS  out of range?
0251 85 FB             STA POINTH
0253 A6 E0     OVR1    LDX RND    number lower..
0255 E4 F9             CPX INH    ..than guess?
0257 90 08             BCC OVR2   yes, skip
0259 A6 FA             LDX POINTL no,check lo
025B E4 F9             CPX INH
025D B0 C4             BCS GUESS  out of range?
025F 85 FA             STA POINTL
0261 A6 E1     OVR2    LDX NGUESS 'guess' number
0263 E8                INX           ..plus 1
0264 E0 AA             CPX #$AA   past limit?
0266 F0 B5             SEQ RSET   yes, reset
0268 D0 B5             BNE NSET



             XXXXX HEX DUMP - HI LO XXXXX



0200 F8 A5 E0 38 69 00 A2 01 C9 99 D0 01 8A 85 E0 20
0210 40 1F D0 ED D8 A9 99 85 FB A9 00 85 FA A2 A0 86
0220 F9 86 E1 20 1F 1F 20 6A 1F C9 13 F0 D3 C5 E2 F0
0230 F2 85 52 C9 0A F0 10 B0 EA 0A 0A 0A 0A A2 03 0A
0240 26 F9 CA 10 FA 30 DC A5 F9 C5 E0 90 06 C5 FB B0
0250 D2 85 FB A6 E0 E4 F9 90 0B A6 FA E4 F9 B0 C4 85
0260 FA A6 E1 E8 E0 AA F0 B5 D0 B5

<p align="center">
68</p>
<hr>

<img src="fbokpics/h.gif" width=56 height=57 alt="horserace"><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/e.gif" width=47 height=57><DIV ALIGN="RIGHT">BY CHUCK EATON</div>
DESCRIPTION -
    THIS IS AN EIGHT LAP HORSE RACE AND YOU CAN BE THE
JOCKEY AND WHIP YOUR HORSE TO GO FASTER.  WARNING  ...WHIP
THE HORSE TOO MUCH AND HE PROBABLY POOPS OUT.  THE PROGRAM
STARTS AT 0200.
      HORSE               TRACK      WHIPPING BUTTON
PRINCE CHARMING            TOP              PC
COLORADO COWBOY           MIDDLE            C
IRISH RAIR                BOTTOM            4



0200  D8               CLD          ...INITIALIZATION...
0201  A2 13            LDX #$13
0203  BD D9 02  INIT   LDA 02D9,X   HORSES TO STARTING GATE
0206  95 7C            STA 007C,X
0208  CA               DEX
0209  10 F8            BPL INIT
020B  A9 7F     DISP   LDA #$7F     ...LIGHT DISPLAY...
020D  8D 41 17         STA 1741
0210  A0 00            LDY #$00
0212  A2 09            LDX #$09
0214  B9 7C 00  LITE   LDA 007C,Y
0217  84 FC            STY 00FC
0219  20 4E 1F         JSR 1F4E     OUTPUT DIGIT
021C  C8               INY
021D  C0 06            CPY #$06     SIX DIGITS DISPLAYED?
021F  90 F3            BCC LITE     NOT YET
0221  20 3D 1F         JSR 1F3D     TURN OFF DIGITS
0224  A5 8F            LDA LAP      CNT.FINISHED TOTAL LAPS?
0226  30 E3            BMI DISP     YES, FREEZE DISPLAY
0228  A2 03            LDX #$03
022A  CA        NEXT   DEX          NEXT HORSE
022B  30 DE            BMI DISP     FINISHED 3 HORSES
022D  D6 86            DEC 0086,X   DEC. CNT., HORSE X
022F  D0 F9            BNE NEXT     NOT ZERO, NEXT HORSE
0231  86 99            STX 0099     SAVE HORE INDEX
0233  A4 99            LDY 0099     AND PUT IN Y AS INDEX
0235  B6 83            LDX 0083,Y   DIGIT P05. OF HORSE IN X
0237  B9 ED 02         LDA 02ED,Y   MASK TO REMOVE HORSE
023A  35 7C            AND 007C,X   GET RID OF HORSE
023C  95 7C            STA 007C,X   RETURN REMAINING HORSES
023E  E8               INX          GO TO NEXT DIGIT RIGHT
023F  96 83            STX 0083,Y   UPDATE HORSE DIGIT POS.
0241  B9 ED 02         LDA 02ED,Y   GET MASK
0244  49 FF            EOR #$FF     CHANGE TO AN INSERT MASK
0246  15 7C            ORA 007C,X   PUT HORSE IN NEXT
0248  95 7C            STA 007C,X   DIGIT RIGHT
024A  E0 05            CPX #$05     REACHED RIGHT SIDE?
024C  30 2B            BMI POOP     NOT YET
024E  D0 06            BNE NLAP     OFF RIGHT SIDE, CHANGE LAP
0250  A5 8F            LDA 008F     CHECK LAP COUNTER
0252  F0 1B            BEQ LAST     IF ZERO, LAST LAP
0254  D0 23            BNE POOP


<p align="center">
69</p>
<hr>



0256 A2 02     NLAP    LDX #S02     ...CHANGE TO A NEW LAP
0258 38        DOWN    SEC          SHIFT ALL HORSE DIGIT
0259 B5 83             LDA 0083,X   POSITIONS SIX PLACES
025B E9 06             SBC #$06     DOWN...
025D 95 83             STA 0083,X
025F CA                DEX
0260 10 F6             BPL DOWN
0262 A2 06             LDX #$06
0264 B5 7C     STOR    LDA 007C,X   ...ALSO SHIFT DIGIT
0266 95 76             STA 0076,X   CONTENTS INTO STORAGE
0268 A9 80             LDA #$80     AREA AND CLEAR DISPLAY
026A 95 7C             STA 007C,X   AREA...
026C CA                DEX
026D D0 F5             BNE STOR
026F C6 8F     LAST    DEC 008F     DEC. LAP COUNTER
0271 D0 06             BNE POOP     NOT LAST LAP, CONTINUE
0273 A5 81             LDA 0081     LAST LAP, PUT FINISH
0275 09 06             ORA #$06     LINE IN LAST DIGIT
0277 85 81             STA 0081
0279 B9 89 00  POOP    LDA 0089,Y   HORSE Y POOP FLAG
027C F0 0A             BEQ NOPO     HORSE NOT POOPED
027E 20 C5 02          JSR RAND     ...POOPED, BUT MAY
0281 29 3C             AND #$3C     BECOME UNPOOPED DEPENDING
0283 D0 11             BNE FAST     ON RANDOM NUMBER
0285 99 89 00          STA 0089,Y
0288 20 C5 02  NOPO    JSR RAND     ...NOT POOPED, BUT MAY
028B 29 38             AND #S38     BECOME POOPED DEPENDING
028D 85 9A             STA 009A     ON RANDOM NUMBER...
028F B9 8C 00          LDA 008C,Y
0292 30 0B             BMI FAST
0294 29 38             AND #$38
0296 C5 9A             CMP 009A
0298 B0 05             BCS FAST
029A A9 FF             LDA #$FF     IF POOPED, SET POOP
029C 99 89 00          STA 0089,Y   FLAG TO "FF"
029F 20 3D 1F  FAST    JSR KEYIN         GET KEY FROM KEYBOARD
02A2 A0 FF             LDY #$FF        INIT. Y TO MAX
02A4 A6 99             LDX 0099        HORSE INDEX IN X
02A6 3D F0 02          AND 02F0,X      MASK (IS HORSE WHIPPED?)
02A9 F0 01             BEQ SKIP        NO, NOT BEING WHIPPED
02AB 88                DEY             WHIPPED, Y MADE SMALLER
02AC 98        SKIP    TYA             CHANGE SIGN IF POOPED
02AD 55 89             EOR 0089,X      EXC. OR WITH 00 OR FF
02AF 85 9A             STA 009A        SAVE SPEED UPDATE
02B1 20 C5 02          JSR RAND        GET A RANDOM NUMBER
02B4 38                SEC
02B5 29 01             AND #$01        ..LOWEST BIT OF #
02B7 65 9A             ADC 009A        COMBINE WHIP UPDATE,
02B9 18                CLC             RAND # (0 OR 1) & CARRY
02BA A6 99             LDX 0099        HORSE INDEX IN X
02BC 75 8C             ADC 008C,X      HORSES SPEED ADDED IN
02BE 95 8C             STA 008C,X      SAVE NEW SPEED
02C0 95 86             STA 0086,X      ALSO IN WINDOW COUNTER
02C2 4C 2A 02          JMP NEXT        LOOP

<p align="center">
70</p>
<hr>



     XXXXX RANDOM NUMBER SUBROUTINE XXXX
02C5 38        RAND    SEC
02C6 A5 92             LDA 0092        FROM J. BUTTERFIELD
02C8 65 95             ADC 0095        KIM USER NOTES *1
02CA 65 96             ADC 0096        PAGE 4
02CC 85 91             STA 0091
02CE A2 04             LDX #$04
02D0 B5 91     MOVE    LDA 0091,X
02D2 95 92             STA 0092,X
02D4 CA                DEX
02D5 10 F9             BPL MOVE
0207 60                RTS

                XXXXX TABLES - HORSERACE XXXX


02D8-  00/80/80/80/80/80/80/80
02E0-  FF/FF/FF/80/80/80/00/00/00/80/80/80/08/FE/BF/F7
02F0-  01/02/04

           XXXXX HEX DUMP - HORSERACE XXXX

0200 D8 A2 13 BD D9 02 95 7C CA 10 F8 A9 7F 8D 41 17
0210 A0 00 A2 09 B9 7C 00 84 FC 20 4E 1F C8 C0 06 90
0220 F3 20 3D 1F A5 8F 30 E3 A2 03 CA 30 DE D6 86 D0
0230 F9 86 99 A4 99 B6 83 B9 ED 02 35 7C 95 7C E8 96
0240 83 B9 ED 02 49 FF 15 7C 95 7C E0 05 30 2B D0 06
0250 A5 8F F0 1B D0 23 A2 02 38 B5 83 E9 06 95 83 CA
0260 10 F6 A2 06 B5 7C 95 76 A9 80 95 7C CA D0 F5 C6
0270 8F D0 06 A5 81 09 06 85 81 B9 89 00 F0 0A 20 C5
0280 02 29 3C D0 1A 99 89 00 20 C5 02 29 38 85 9A B9
0290 8C 00 30 0B 29 38 C5 9A B0 05 A9 FF 99 89 00 20
02A0 3D 1F A0 FF A6 99 3D F0 02 F0 01 88 98 55 89 85
02B0 9A 20 C5 02 38 29 01 65 9A 18 A6 99 75 8C 95 8C
02C0 95 86 4C 2A 02 38 A5 92 65 95 65 96 85 91 A2 04
02D0 B5 91 95 92 CA 10 F9 60 00 80 80 80 80 80 80 80
02E0 FF FF FF 80 80 80 00 00 00 80 80 80 08 FE BF F7
02F0 01 02 04

<p align="center">
71</p>
<hr>

<img src="fbokpics/k.gif" width=53 height=57 alt="key train"><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/y.gif" width=43 height=56><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/n.gif" width=57 height=57><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>

Ever wish you could touch-type your KIM keypad like some people
can type?  It's not hard; all you need is practice.  And what
better teacher to drill you on key entry than the KIM system 
itself?

Load this fully relocatable program anywhere.  Start it up, and
the display will show a random hexadecimal digit, from 0 to F.
Hit the corresponding key, and the display will blank, and then
present you with another random digit.  Hit the wrong key and
nothing will happen.

The educational principle involved is called <U>positive reinforcement</U>.
That is, you're rewarded for doing the right thing, and ignored if
you do it wrong.  A few minutes of practice a day. and you'll become
a speed demon on the keyboard!

0000 20 40 1F START  JSR KEYIN
0003 D0 FB           BNE START   key still depressed - blank
0005 AD 04 17        LDA TIMER   random value
0008 4A 4A           LSRA LSRA   wipe high order bits
000A 4A 4A           LSRA LSRA
000C 85 FF           STA TEMP    save the digit
000E 0A 0A           ASLA ASLA   move back left
0010 0A 0A           ASLA ASLA
0012 05 FF           ORA TEMP    repeat the digit
0014 85 F9           STA INH     put..
0016 85 FA           STA FOINTL    ..into..
0018 85 FB           STA P0INTH         .. display
001A 20 1F 1F LIGHT  JSR SCANDS  light display
001D 20 6A 1F        JSR GETKEY  test keys
0020 C5 FF           CMP TEMP    right key?
0022 F0 DC           BEQ START   yes, blank & rpeat
0024 D0 F4           BNE LIGHT


The random number used in this program is taken from the KIM timer.
This timer runs continuously and might be anywhere between 00 and FF
at the instant we push the button.  We use the four left hand (high order)
bits of the timer to produce the next digit.

Be sure that KIM is not in decimal mode when you run this program -
set address 00F1 to 00 before starting.  If You forget, you might
find that the alphabetic keys (A to F) don't work right.

Exercises:  can you make the program clear decimal mode automatically?
How about a counter to record the number of correct keystrokes you
have made?  That way, you could time yourself to see how many keys
you can get right in 60 seconds.  The count could be shown in the
two right hand digits of the display.  Do you think it should be
in decimal or hexadecimal?

<p align="center">
72</p>
<hr>

<img src="fbokpics/k.gif" width=53 height=57 alt="kim nim"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/m.gif" width=67 height=56><DIV ALIGN="RIGHT">BY JIM BUTTERFIELD</div>

Here's a jumbo NIM that's good for all skill levels.
Why?  Because KIM matches wits with you - literally.
Play a duffer's game and KIM will make lots of errors,
too.  Start winning a few - and KIM will move up to
the master player level.

Hit GO and several digits on the KIM display will light.
Each lit digit represents a pile of objects you can
pick from.  Decide which pile you want, and enter
its identity:  A for the left-hand pile through to
P for the right-hand pile.  The pile you have selected
will start to flash on and off.  Now enter the number
of items you want to take from that pile.

KIM will take its turn the same way - you'll see
the pile selected begin to flash, and then some
items will be taken away.  After the computer moves,
it's your turn again.

The winner is the player who takes the last object.
When this happens, KIM will identify the winner.
A new game can be started at any time by hitting GO.

  0200 20 40 1F START  JSR KEYIN   directional regs
  0203 20 6A 1F        JSR GETKEY
  0206 C9 13           CMP #$13    GO key?
  0208 D0 3A           BNE NOGO    nope, skip
  020A AD 04 17        LDA TIMER   get random nbr
  020D A2 02           LDX #2      split into 3
  020F A8       SPLIT  TAY         save A
  0210 29 07           AND #7      extract 3 bits
  0212 F0 03           BEQ ZINCH   unless zero..
  0214 18              CLC         ..add two
  0215 69 02           ADC #2
  0217 95 04    ZINCH  STA VALUE,X  store pile val
  0219 98              TYA          bring back rand
  021A 4A 4A 4A        LSRA LSRA LSRA
  021D CA              DEX
  021E 10 EF           BPL SPLIT
  0220 20 40 1F STALL  JSR KEYIN   wait for..
  0223 D0 FB           BNE STALL   ..key release
  0225 AD 04 17        LDA TIMER   new random nbr
  0228 A2 02           LDX #2      split 3 ways
  022A A8       SPLAT  TAY         again
  022B 29 07           AND #7      3 bits
  022D 95 07           STA VALUE+3,X
  022F 98              TYA
  0230 4A 4A 4A        LSRA LSRA LSRA
  0233 CA              DEX
  0234 10 F4           BPL SPLAT
  0236 85 01           STA PILE    pile zero
  0238 85 02           STA MOVE    it's your move
  023A A2 06           LDX #6      for each pile..

<p align="center">
73</p>
<hr>



  023C B5 03    DRESS  LDA VALUE-1,X  ..change to
  023E 20 2D 03        JSR SEG      ..segments
  0241 CA              DEX
  0242 D0 F8           BNE DRESS
  0244 A6 02    NOGO   LDX MOVE    whose move?
  0246 D0 3D           BNE NOKEY   computer's~ skip
  0248 C9 10           CMP #$10    hex digit keyed?
  024A B0 39           BCS NOKEY   no, skip
  024C 09 00           CMP #0      zero key?
  024E F0 35           BEQ NOKEY   yes, skip
  0250 C9 CA           CMP #$0A    alphabetic?
  0252 90 12           BCC NUM     no, numeric
  0254 38              SEC         change A-F
  0255 E9 09           SBC #9      ..to 1-6
  0257 A6 01           LDX PILE    pile already..
  0259 D0 2A           BNB NOKEY   ..selected?
  025B AA              TAX
  025C B5 0A           LDA FLASHR,X
  025E F0 25           BEQ NOKEY   nothing in pile?
  0260 86 01           STX PILE    OK, mark pile
  0262 95 CA           STA FLASHR  store flash code
  0264 B0 1F           BCS NOKEY   unconditional
  0266 A6 01    NUM    LDX PILE
  0268 F0 1B           BEQ NOKEY   no pile selected
  026A 85 03           STA TEMP    save number
  026C B5 03           LDA VALUE-i,X  pile value
  026E C5 03           CMP TEMP    pile big enough?
  0270 90 13           BCC NOKEY   nope
  0272 E5 03           SBC TEMP    yes, take out
  0274 20 2D 03        JSR SEG     compute segments
  0277 E6 02           INC MOVE    computer's move
  0279 20 16 03        JSR SURVEY  end of game?
  027C D0 07           BNE NOKEY   no, keep going
  027E 20 05 03        JSR MESSAG  yes, show messg
  0281 85 0B           STA WINDOW  ''I LOSE''
  0283 46 00           LSR IQ      get smart!
                ; all routines join here - display
  0285 A6 01    NOKEY  LDX PILE
  0287 A5 0A           LDA FLASHR  flash pile
  0289 55 0A           EOR FLASHR,X
  028B 95 0A           STA FLASHR,X
  02BD A9 7F           LDA #$7F
  028F 8D 41 17        STA PADD
  0292 A0 13    LIGHT  LDY #13
  0294 A2 05           LDX #5
  0296 B5 0B    LITE   LDA WINDOW,X
  0298 85 40 17        STA SAD
  029B 8C 42 17        STY SBD
  029E E6 11    LITEX  INC CUE
  02A0 D0 FC           BNE LITEX
  02A2 88 88           DEY DEY
  02A4 CA              DEX
  02A5 10 ED           BPL LITE
  02A7 E6 12           INC WAIT
  02A9 D0 E7           BNE LIGHT

<p align="center">
74</p>
<hr>



  02AB A9 F8           LDA #$F8
  02AD 85 12           STA WAIT
  02AF A6 02           LDX MOVE   whose move?
  02B1 F0 4E           BEQ EXIT   not computer's
  02B3 CA              DEX        first step?
  02B4 D0 2B           BNE TRY    no, skip stratgy
  02B6 A9 00           LDA #0
  02B8 A2 05           LDX #5     merge all piles..
  02BA 55 04    MERGE  EOR VALUE,X  ..by EOR-ing them
  C2BC CA              DEX
  02BD 10 FB           BPL MERGE
  02BF 85 CA           STA FLASHR  save EOR product
  02C1 A2 06           LDX #6      re-examine piles
  02C3 B5 03    LOOP   LDA VALUE-1,X
  02C5 45 0A           EOR FLASHR
  02C7 D5 03           CMP VALUE-1,X
  02C9 90 05           BCC FOUND
  02CB CA              DEX
  02CC D0 F5           BNE LOOP
  02CE F0 0B           BEQ MOVE
  02D0 A4 00    FOUND  LDY IQ   IQ high enuff?
  02D2 CC 04 17        CPY TIMER   ..randomly..
  02D5 B0 04           BCS MOVE    no, move dumb
  02D7 85 03           STA TEMP    amount
  02D9 86 01           STX PILE    pile number
  02DB A6 01    MOVE   LDX PILE
  02DD B5 0A           LDA FLASHR,X  flash mask
  02DF 85 0A           STA FLASHR    Flash...
  02E1 E6 02    TRY    INC MOVE    but don't make
  02E3 A5 02           LDA MOVE    ..the move till..
  02E5 C9 10           CMP #$10    ..time has passed
  C2E7 90 18           BCC EXIT
  02E9 A6 01           LDX PILE    time to move!
  02EB A5 03           LDA TEMP
  02ED 20 2D CD        JSR SEG     make move
  02F0 20 16 03        JSR SURVEY   end of game?
  02F3 D0 06           BNE KEEP    nope, keep goin
  02F5 20 05 03        JSR MESSAG    'U LOSE'
  02F8 38              SEC         dummy up..
  02F9 26 00           ROL IQ      ..the computer
  02FB A9 00    KEEP   LDA #0
  02FD 85 02           STA MOVE   it's your move
  02FF 85 01           STA PILE   un-flash
  0301 D8              CLD
  0302 40 00 02        JMP   START
  
  0305 A9 00    MESSAG LDA #0
  0307 85 02           STA MOVE   end of play
  0309 85 01           STA PILE   no flashing
  030B A2 06           LDX #6     move 7 digits
  030D BD 3B 03 MLOOF  LDA DATA,X   pick em up..
  0310 95 CA           STA FLASHR,X ..put em down
  0312 CA              DEX
  0313 10 F8           BPL MLOOP
  0315 60              RTS

<p align="center">
75</p>
<hr>



  0316 A9 00    SURVEY LDA #0
  0318 85 0A           STA FLASHR un-flash
  031A A2 06           LDX #6     for all piles..
  031C D5 03    REVUE  CMP VALUE-1,X
  031E B0 06           BCS SMALL
  0320 B5 03           LDA VALUE-1,X
  0322 85 03           STA TEMP
  0324 86 01           STX PILE
  0326 CA       SMALL  DEX
  0327 D0 F3           BNE REVUE
  0329 C6 03           DEC TEMP
  032B A8              TAY        test A
  032C 60              RTS
  
  032D 95 03    SEG    STA VALUE-1,X  store value
  032F F0 04           BEQ NIL        blank digit
  0331 A8              TAY
  0332 39 E7 1F        LDA TABLE,Y
  0335 95 0A    NIL    STA FLASHR,X   segments to wndw
  0337 A9 00           LDA #0
  0339 60              RTS
  
  033A FF 06 BE 00 B8 BF ED F9   (DATA)   0342


           XXXXX HEX DUMP - KIM NIM XXXX


0200 20 40 1F 20 6A 1F C9 13 D0 3A AD 04 17 A2 02 A8
0210 29 07 F0 03 18 69 02 95 04 98 4A 4A 4A CA 10 EF
0220 20 40 1F D0 FB AD 04 17 A2 02 A8 29 07 95 07 98
0230 4A 4A 4A CA 10 F4 85 01 85 02 A2 06 B5 03 20 2D
0240 03 CA D0 F8 A6 02 D0 3D C9 10 B0 39 C9 00 F0 35
0250 C9 0A 90 12 38 E9 09 A6 01 D0 2A AA B5 0A F0 25
0260 86 01 85 0A B0 1F A6 01 F0 1B 85 03 B5 03 C5 03
0270 90 13 E5 03 20 2D 03 E6 02 20 16 03 D0 07 20 05
0280 03 85 0B 46 00 A6 01 A5 0A 55 0A 95 0A A9 7F 8D
0290 41 17 A0 13 A2 05 B5 0B 8D 40 17 8C 42 17 E6 11
02A0 D0 FC 88 88 CA 10 EF E6 12 D0 E7 A9 F8 85 12 A6
02B0 02 F0 4E CA D0 2B A9 00 A2 05 55 04 CA 10 FB 85
02C0 0A A2 06 85 03 45 0A D5 03 90 05 CA D0 F5 F0 0B
02D0 A4 00 CC 04 17 B0 04 85 03 86 01 A6 01 B5 0A 85
02E0 0A E6 02 A5 02 C9 10 90 18 A6 01 A5 03 20 2D 03
02F0 20 16 03 D0 06 20 05 03 38 26 00 A9 00 85 02 85
0300 01 D8 4C 00 02 A9 00 85 02 85 01 A2 06 BD 3B 03
0310 95 0A 0A 10 F8 60 A9 00 85 0A A2 06 D5 03 B0 06
0320 B5 03 85 03 86 01 CA D0 F3 C6 03 A8 60 95 03 F0
0330 04 A8 B9 E7 1F 95 0A A9 00 60 FF 06 BE 00 B8 BF
0340 ED F9

<p align="center">
76</p>
<hr>

<img src="fbokpics/k.gif" width=53 height=57 alt="kim-tac-toe"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/min.gif" width=33 height=38><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/min.gif" width=33 height=38><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/e.gif" width=47 height=57>

<DIV ALIGN="RIGHT">BY LEW EDWARDS          </div>

     DIRECTIONS -
          PLAY BEGINS WITH KIM MAKING THE FIRST PLAY WHEN
     "GO" IS PRESSED.  THE SECOND THROUGH FOURTH DIGITS OF
     THE DISPLAY HOLD THE PATTERN WITH SQUARES NUMBERED AS:
     YOUR ENTRY WILL BE IMMEDIATE BUT          7 8 9
     KIM'S ACTION WILL BE DELAYED.  YOUR       4 5 6
     PLAYS LIGHT STEADILY WHILE KIM'S          1 2 3
     FLICKER.  A WINNING ROW BLINKS AND A DRAW BLINKS
     EVERYThING.  ON COMPLETION OF A GAME,  ThE "GO" KEY WILL
     START A NEW GAME.  IF YOU PREFER TO PLAY FIRST, PRESS THE
     11+1! KEY INSTEAD.  THE KIM HAS AN I.Q. LEVEL ThAT CAN BE
     CHANGED BY PRESSING "PC" AT GAMES END.  YOU WILL SEE
     "ODDS" AND KIM'S I.Q. DISPLAYED.  THE J.Q. IS INITIALLY
     SET TO 75%, (OC).  CHANGE IT TO WHAT YOU WISH AND THEN
     PRESS '1DA" TO RETURN TO ThE DONE LOOP AND START A NEW
     GAME IN ThE NORMAL MANNER.  THE I.Q. IS ADJUSTED UPWARD
     EACH TIME THE PLAYER WINS AND DOWNWARD EACH TIME KIM WINS.
     THE PROGRAM STARTS AT 0100.

0100  4C 10 03            JMP STIQ       JUMP TO START LOCATION
0103  EA EA EA            NOP'S
         ***** SUBROUTINE "LOAD BLINK" *****
0106  A9 20               LDA *$20       BLINK FLAG
0108  15 BF               ORA SQST,X     ADD IT TO THE..
010A  95 BF               STA SQST,X     INDEXED BYTE
010C  60                  RTS
010D  EA EA               NOP'S
             ***** TABLE - SEGMENTS ZZ ***
010F  08/08/08/40/40/40/01/01/01
                ***** TABLE - ROWS *****
0118  01/04/07/01/02/03/01/03
0120  02/05/08/04/05/06/05/05
0128  03/06/09/07/08/09/09/07
               *** SUBROUTINE "GET PLAY" ***
0130  85 D9     GPLA      STA TEMP       SAVE THE ACCUMULATOR
0132  A2 09               LDX *$09       FOR TESTING
0134  A5 D9     GPLP      LDA TEMP       GET IT BACK
0136  35 DB               AND PS,X       MASK THE STATUS BYTE
0138  24 D9               BIT TEMP       CHECK FOR BIT ON
013A  D0 03               BNE OUT        GOT IT - DONE
013C  CA                  DEX
013D  D0 F5               BNE GPLP       NOPE - KEEP TRYING
013F  60        OUT       RTS            SQUARE VALUE IN X
         0 = NO MATCH
        ***** SUBROUTINE "TEST AND INCREMENT" *****
0140  B5 BF               LDA SS,X
0142  D0 02               BNE OUT        COUNT OPEN SQUARES
0144  F6 DB               INC PS,X       ONLY
0146  60        OUT       RTS

<p align="center">
77</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

Iii ImnATCII
               SUBROUTINE
   0147   95   BE      UPDA      STA   SS,X   FLAG ThE SQUARE
   0149   AO   OB         LDY   $08
   0148   A9   00      UPLP      LDA   ~$00   CLEAR THE REGISTER
   014D   99   C8   00       STA   RS,Y
   0150   BE   17   Ol       LDX   SQ1,Y   ThEN LOAD
   0153   20 SA   03   JSR RSADD   CURRENT STATUS
0156  BE iF   Ol   LDX SQ2,Y   VALUES
   0159   20 BA   03   JSR RSADD
015C  BE 27   Ol   LDX 5Q3,Y
   01SF   20 SA.03   JSR RSADD
   0162   88   DEY
0163  DO ES      SNE UPLP   LOOP TILL DONE
0165  60   RTS
   0200    A9   no       NEW    LDA ttsoo
   0202    ~   1D          LDX ft$1D    CLEAR REGISThRS
   0204    95   54       INLP    STA 00B4,X
   0206    CA             DEX
   0207    DO   ES          SNE INLP
   0209    A9   Os          LDA #$05    INITALIZE ORDER OF..
   0208    85   SB          STA 00B8    N~-CALCULATED PLAYS
   020D    AO   04          LDY #S04    CENTER - FIXED ORDER
   020F    20   F2   03    ELPi    JSR RPLA
   0212    A2   04          LDX #t$04
   0214    D5   88       ELP2    OMP REVN,X
   0216    FO   F7          SEQ ELPi
   0218    CA             DEX
   0219    DO   F9          BNE ELP2
   0218    99   SB   no       STA REVN,Y    SIDES IN RANDOM ORDER
   021E    88             DEY
   021F    DO   EE          SNE ELPi
   0221    ES   BE          INC ODEV
   0223   AD   04          LDY ~$O4
   0225    20   F2   53   OLPi    JSR RPLA
   0228   A2   Os          LDX ttSos
   022A    D5   B6      OLP2    CMP RODD,X
   022C    ES   F7          SEQ OLPi
   022E    CA             DEX
   022F    DO   F9          BNE OLP2
   0231   99   56   OO      STA RODD,Y   CORNERS-IN RANDOM ORDER
   0234    88             DEY
   0235    DO   EE         BNE OLPi
   0237   A9   53      PVAL   LDA #$03
   0239   AS   OS      TEST   LDY *S08   TEST FOR 3 IN A ROW
   0238   DY   CS   OS   WNLP   CMP ROWS,Y   03=PLAYER WIN/OCZKIM WIN
   023E   FO   OS         SEQ WIN   GAME WON-BLINK ThE ROW
   0240    88            DEY
   0241   DO   F8         SNE WNLP   NOT YET-CK NEXT ROW
   0243   ES   15         BEQ DRAW   NO WINNER-CK FOR DRAW
   0245   BE   17   Ol   WIN   LDX SQ1,Y
   0248   20   OS   51      JSR BLNK   BLINK #1
   0248   BE   iF   51      LDX SQ2,Y
   024E   20   56   51      JSR BLNK   BLINK #2

<p align="center">
78</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

   0251   BE   27   Ol      LOX SQ3,Y
   0254   20   OG   (31      JSR BLNK   BLINK #3
   0257   4C   FE   O2      JMP MTST   CHECK THE WINNER
   025A   A2   09      DRAW   LOX .\'$~g
   025C   AS   Co      OPEN   LDA #$CO   OPEN SQUARE?
   025E   35   SF         AND DSPL1X
   0260    F0   OE          SEQ TURN    YES - CONTINUE GAME
   0262    CA             XX   NO - CK NEXT SQUARE
   0263    DO   F7          SNE OPEN    ALL DONE?
   0265    A2   (39          LDX #$os
   0267    20   (36   Ol    NXBL    JSR BLNK    NO OPEN SQUARES
   026A    CA             XX    1T15 A DRAW
   0268    DC   FA          BNE NXBL    SLINK 'EM ALL
   0260    4C   15   03       JMP DONE    GAME'5 OVER
   0270    E6   Es       TURN    INC PLA4    COUNT THE PLAYS
   0272   AS   OB          LDA MODE   WHO'S TURN?
   0274    DO   17         SNE WAIT   KIM'S
   0276    20   A6   03   KEY   JSR KEYS    PLAYER'S
   0279    FO   FE          BEQ KEY    GET A KEY
   0278    CS   OA          CMP #SOA   OVER 9?
   0270   80   F7         BCS KEY   GET ANOTHER
   027F   AA            TAX    USE IT AS AN INDEX
   0280   54   SF         LOY DSPL,X   SEE IF SQUARE1S OPEN
   0282   DO   F2         ENE KEY   NO, TRY AGAIN
   0284   AS   40         LDA #$40   YES, MARK IT FOR..
   0286   20   47   Ol      JSR UPDATE   PLAYER
   0289   EG   DB          INC tcDE   KIM'S NEXT
   0288    DO   M         SNE PVAL   BUT FIRST CK FOR 'dIN
   0280   20   4C   03   WAIT   JSR DISPLAY   HOLD KIM BACK
   0290   E6   Dl          INC LPCNT   A LITTLE
   0292   DO   F9         ENE WAIT   UPDATE AND..
   0294   A9   OS         LDA #SoS   THEN CHECK ThE..
   0296   20   C8   03      JSR PSLD   BOARD
   0299   AS   02         LDA #$02
   0298   20   CS   03      JSR PSLD
   029E   AS   04         LDA if$04
   02A0   20   C8   03      JSR PSLD
   02A3   A9   Ol         LDA 4$01
   02A5   20   CS   03      JSR PSLD
   02A8   AS   CO         LDA #$CO   WINNING PLAY FOR KIM
   02AA   20   30   Ol      JSR GETPLA
   O2AD   Do   43         SNE PLAY   YES - MAKE IT
   O2AF   A9   30         LDA 4$S30   2 IN A ROW FOR..
   0281   20   30   Ol      JSR GETPLA   PLAYER
   0284   DO   3C         SNE PLAY   YES - BLOCK IT
   0286   AS   OS         LDA #Soa   POSSIBLE SQUEEZE
   0258   20   30   Ol      JSR GETPLA   PLAY FOR KIM
   0288   DO   35         BNE PLAY   YES - oo IT
   0280   20   83   03   IPLA   JSR RAND   HOW MUCH SMARTS?
   02C0   29   OF         AND #$OF   NEEDED?
   02C2   CS   D2         CMP IQ   KIN'S I.Q.
   02C4   So   iF         BCS OLtIB   TOO LOW - BAD MOVES
   02C6   A4   85         LOY PLAC   SMART

<p align="center">
79</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

   02C8   Co   Ol         cry   #$01   1ST PLAY?
   O2CA   DO   01+         BNE   FOUR   NO
   O2CC   29   Ol         AND   #$oi   YES
   020E   Do   17         BNE   TPLA   1/2 TIME PLAY A CORNER
   0200   CO   01+      FOUR   OPY   #$04   4Th PLAY?
   0202   DC   OS         BNE   SPLA   NO, SKIP
   0204   21+   C4         BIT   SQST+5   YES, CK WHO HAS CENTER
   0206   30   OD         B~!   DUMB   KIM - PLAY A SIDE
   0208   70   07         BVS   PLAC   PLAYER-PLAY A CORNER
   O2DA   A9   02      SPLA   LDA   #$02   CAN PLAYER MAKE A.
   O2DC   20   30   Ol      JSR   GETPLA   SQUEEZE PLAY?
   O2DF   DO   11         BNE   PLAY   YES - BLOCK IT
   02E1   AO   OS      PLAC   LDY   C$0S
   02E3   DO   02         BNE   TPLA   START WITH ThE CENTER
   02E5   AO   OS      DUMB   LOY   ~$09   START WITH ThE SIDES
   02E7   85   85      TPLA   LOX   RPLA,Y   USE ThE RANDOM PLAY
   02E9   85   8ff         LDA   DISP,X   TABLE - OPEN SQUARE?
   O2EB   FO   05         BEQ   PLAY   FOUND ONE - PLAY IT
   0250   88            DEY      NO, TRY NEXT ONE
   O2EE   Do   ff7         BNE   RPLA   NOT YET
   02F0   FO   F3         BEQ   DUMB   START OVER
   02ff2   AS   80      PLAY   LDA   ~$80   MARK ThE..
   02F1+   20   47   Ol      JSR   UPDATE   SQUARE FOR KIM
   02F7   CS   OB         DEC   MODE   PLAYER'S TURN NEXT
   02F9   AS   OC         LDA   #$oc   FIRST, DID KIM WIN?
   O2FB   1+C   39   02      JMP   TEST
   02FE   AS   DB      MTST   LDA   MODE   WHO WON?
   0300   Do   01+         BNE   IQUP   PLAYER, UP KIM'S 1.9.
   0302   CS   D2      IQON   DEC   19   KIM'S TOO SMART
   0304   10   OF         BPL   DONE   LOWER THE 1.9.
   0306   ES   D2      IQUP   INC   19   NOT BELOW ZERO
   0308   AS   10         LDA   #tSio   NOT OVER 10 HEX
   030A   CS   D2         CMP   19
   030C   90   ff4         BCC   IQEN
   030E   80   Os      BCS DONE
   0310   AS   OC      STIQ   LDA   #$OC   START WITH 75%
   0312   85   D2      IQST   STA   19   1.9.
   0314   D8            CLO
   0315   20   AS   03   DONE   JSR   KEYS   DISPLAY RESULTS-GET KEY
   0318   AO   Ol         LOY   '$oi   START WITH KIM
   031A   C9   13         CMP   *$13   IF ~ KEY PRESSED
   031C   FO   28         859   SEMO
   031E   88            DEY      START WJTH PLAYER..
   031F   CS   12         CMP   tt$12   IF "+" KEY PRESSED
   0321   FO   23         BEQ   SEMO
   0323   CS   11+         CMP   jt$i4   "PC" PRESSED - SKIP
   0325   Do   EE         BNE   DONE   NO KEY - LOOP
   0327   A9   OD      CHIQ   LDA   #$oo
   0329   85   ff8         STA   POINTh   SHOW "ODDS"
   0328   AS   OS         LDA   ~$D5
   0320   85   ffA         STA   POINTL
   032ff   AS   D2         LDA   ś9   AND I.Q.
   0331   85   ff9         STA   INH
   0333   20   iF   1ff      JSR   SCANDS   ON DISPLAY
   0336   20   40   1ff      JSR   KEYPR
   0339   20   SA   1ff      JSR   GETKEY

<p align="center">
80</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

   033C     CS   11      ~   #$ii   'e!w' KEY PRESSED
   033E     FO   DS      SEQ   DOtE   RE~ TO 'IDONE~w LOOP
   0340     86   ES      BCS   CHJQ   KEEP TRYING IF OVER SIADIt
   0342     85   D2      STA   IQ   LIER uCHEX), CHANGE
   0344     SO   El      SCC   CHIQ   [Q TO KEY ~, NO KEY AGAIN
   0346     84   DO      SEMO      STY   K)DE   SET STARTING PLAY
   0348     4C   GO   02   JMP   NEW   ANOThER GAME
   0348     LA         NOP
                  SUBROUTINE 11DrSPLAY"
   034C     AS   7F      DISPLAY    LDA   ~$7F
   034E     80   41   17   STA   PADO   OPEN DISPLAY CHANELS
   0351     EG   DA      INC   RATE
   0353     AD   OG      LDY   #$oo
   0355     A2   GB      DIGX      LOX   tiSOB   INDEX DIGIT
   0357   B9 CO OC  SEGY   LDA SQST,Y   GET CONTROL BYTE
   035A   85 FC      STA SAVE   SAVE IT
   035C   FO 14      SEQ OFF   OPEN SQUARE
   035E   29   20   AND *$20   BLINK FLAG
   0360   FO G4      SEQ FLIC   NOT ON - SKIP BLINK
   0362   24 DA      SIT RATE
   0364   70 OC   BVS OFF   ALTERNATE ON-OFF
   0366   AS FC   FLIC   LDA SAVE
   0368   29   40   AND tt$40   STEADY FLAG
C36A   DO CA   BNE ON   ON - SKIP FLICKER
   036C   AS DA      LDA RATE
   036E   29 Os      AND ~$o8   FLICKER RATE
   0370   FO 04   SEQ ON   ON
0372 A9 GO   OFF   LDA #$oo   OFF
   0374   Fr) 03      SEQ DIOT
   0376   89 OF Cl  ON   LUA SEGS;Y
   0379   84 FC   DIOT   STY SAVE   SAVE FROM LOSS IN SUBR
   0376   20   4E iF   JSR CONV~6   DISPLAY A SEGMENT
   037E   Cs   INY
   037F   CO OS   cPY   ~$09   LAST SQUARE
   0381   FO 06   SEQ LAST   YES   DONE
   0383   ED 11      cpx #$i1   NO, LAST DIGIT?
   0385   FO CE   SNE DIGX   YES   REPEAT DIGITS
   0387   DO CE      SNE SEGY   NO - NEXT DIGIT
   0389   60   LAST   RTS
SUBROUTINE "RS ADD"
   038A   55 EF   RSA   LDA SQST,x
G38C   85 OS   STA TEMP
   038E   24 D9      BIT TEMP   WHO'S SQUARE?
   0390   30   0ś   BMr KIM   KrM'S
   0392   70 OS      BVS PLYR   PLAYER'S
   0394   AS On   OPEN   LDA #$oo   OPEN SQUARE VALUE
   0396   FO 0ś      SEQ ADD
   0398   AS 04   KIM   LDA tt$04   KIM VALUE
   039A   DO 02      SNE ADD
   035C   AS Ol   PLYR   LDA ~$O1   PLAYER VALUE
   039E   18   ADD   CLC
   03SF   79 CB OG      ADC RS,Y   ADD TO ROW STATUS
   03A2   99 CS CO   STA RS,Y   BYTE
   03A5   60      RTS

<p align="center">
81</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

'cc "'C 'C SUBROUTINE ttKEYSII
   03A6   20   4C   OS   BACK   JSR   DISPLAY   DISPLAY LOOP
   03A9   20   40   iF      JSR   ANYK   UNLESS
   OSAC   FO   ES         BEQ   BACK   A KEY IS PRESSED
   03AE   20   GA   iF      JSR   KEYS   THEN GET A NUMBER
   0381   AA            TAX      RECOVER THE FLAGS
   0382   60            RTS
                SUBROUTINE "RANDOM"
   0383   D8            CLO
   0384   38            SEC      GENERATES A..
   0385   AS   01%         LDA   R+1   RANDOM NUMBER
   0387   65   D7         AX   R+4   (THANKS TO J. BUTTERFIELD)
   0389   65   DS         AX   R+5
   0385   85   US         STA   R
   OSED   A2   01%         LUX    $04
   O3BF   BS   DS      ROLL   LDA   R,X
   o3C1   95   01%         STA   R+1,X
   03C3   CA            DEX
   OSC4   10   ES         BPL   ROLL
   03C6   60            RTS
   03C7   EA            NOP
                    SUBROUTINE "PS LOAD"
03C8   85   D9      PSL   STA TEMP
OSCA   A2   09         LUX "$09
OSCC   16   DB      XLP   ASL PS,X        SHIFT PREVIOUS DATA
OSCE   16   DB         ASL PS,X        OUT OF THE WAY
03D0   CA            DEX
OSUl   DO   ff9         BNE XLP
03D3   AO   OS         LDY  $05
   03D5  AS   DS   YLP   LDA TEMP
   03D7  US   CS   O0   CMP RS,Y   COUNT THE TIMES AN OPEN..
O3DA  DO   12      BNE NOCT   SQUARE FITS ThE..
OSOC  BE   17   Ol   LUX SQ1,Y   TEST PARAMETER
OSUE  20   40   Ol   JSR T+1
03E2  BE lF Ol   LOX 5Q2,Y
OSES  20   40 Ol   JSR T+1
OSES  BE 27 Ol   LOX 5Q3,Y
O3EB  20   40 Ol   JSR T+1
O3EE  88   NOCT   DEY
OSEF  DO E4   BNE YLP
   03F1   60   RTS
SUBROUTINE "RANDOM PLAYS"
   03F2   20   83   03  RPLA   JSR RAND   GET RANDOM NUMBER
OSES  29   OE   AND '-"$OE   0 - E (EVEN)
   03F7  Os   86   eRA ODEV   MAKE IT ODD IF Ol
   03F9  FO   F7   BEQ RPLA   NO ZEROS
OSEB  CS   OA   CMP x$OA
O3FD  80   F3   sCS RPLA   LOOP TILL DONE
   03FF   60   RTS

<p align="center">
82</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

HEX DItiP - KIM TAC TOE

0100 4C 10 03 EA EA EA AS 20 15 EF 95 EF 60 EA EA OS
0110 OS OS 40 40 40 Ol Cl Ol Ol 04 07 Cl 02 93 Ol 03
0120020508040506050503 06090708090907
013085 DY A2 Os AS D9 35DB 2409 DO 93 CA DO F5 60
0140 ES Er DO 02 ff6 DO 6095 BFAO OS A9 0099 CS GO
0150 BE 170120 SA 03 BE iF 0120 SA 03 BE 270120
0160 SA 03 88 Do ES 60
0200 A9 GO A2 iD 95 B4 CA DO FE A9 Os 85 BE AO 04 20
0210 E2 93 A2 04 Os SB FO F? CA DO ff9 59 BE GO 88 DO
0220 EE ES ES AG 0420 F2 03 A2 OS OS 85 FO F7 CA DO
0230 ff999850088 DO EE AS 03 AG Os DY CS GO FOGS
0240 88 DO ES FO 15 BE 1701 20 OS Ol BE iF Ol 20 OS
025001 BE 2701200601 4C FE G2 A2 OS A9 CO 35 BE
0260 FO GE CA DO ff7 A2 G9 20 OS Ol CA DO FA 4C 15 03
0270 ES 85 AS DE DO 1720 AS 93 FO FB CS GA 80 F7 AA
0280 84 BE DO ff2 AS 40 204701 ES OS DO AA 20 4C 03
0290 ES Dl DO E9 AS 0820 CS 93 AS 0220 CS 03 AS 04
02A0   20   CS 03A9   0120   CS 03   AS CO 203001 DO 43 AS
020030203001         DO 3CAS         08203001   DO 35208303
02C0   29   OF CS D2   SO iF   A4 ES   CO   Ol DO   04 29 Ol DO 17
02D0   CO   04 DO OS   24 C4   30 GD   70   97 AS   0220 30 Ol DO
02E0   11   AO OS DO   02 AG   09 BS   BS   B5 SF   FOGS 88 DO F?
02E0   ff0   ff3 AS 80   20 47   Ol CS   DE   AS OC   4C 39 92 AS DO
0300   DO   04 CS D2   10 OF   ES D2   AS   10 CS   D2 50 ff480 OS
0310   AS   OC 85 D2   DS 20   AS 03   AG   Ol CS   13 EG 2888 CS
0320   12   FO 23 Cs   14 DO   EE AS   GD   85 FE   AS OS 85 EA A5
0330   D2   85 ff9 20   1ff 1ff   2040   1ff 20 SAlE C9 11 ff0 OS
034000      ES 85 D2   90 El   84DB   4C   0002   EAA9 7ff SD 41
0350   17   ES DAAO   Go A2   GB ES   CO   0085   FC ff0 142920
0360   FO   0424 DA   70 OCAS EC      294000      GAAS DA29 OS
0370   ff0   04A9 Go   ff0 0389 OF      0184 FC      20 4E 1ff CS CO
0380   09   ff0 OS EG   11 FO   CE DO   CE   6085   BE 8509 24 DY
03903006 7008         A9 GO   FOGS   AS 040002 AS Ol 1879
03A0   CS   Go 99 CS   GO 60   20 4C   03   2040   iF FO ES 20 SA
0380   iF   AA SO OS   38 A9   0465   0765 OS      85 D3 A2 0405
03C0   D3   9504 CA   10 ff9   60 EA   85   D9 A2   OS 16 DE 16 DO
0300   CA   Do ES AG   OS AS   OS DY   Cs   GO DO   12 BE 17 Ol 20
03E0   40   Gi BE iF   Ol 20   40 0:   SE   27 Ol   20 40 91 88 DO
03E0   E4   6020030329      OE 9586      ff0 ff7   CS GA 80 ff360
            ZERO   PAGE USAGE
    0056      ODD/EVEN         MODIEJER
    OGCO-C8      PRESTORED RANDOM PLAYS
    GOCS-DO      ROWS STATUS
    0001      DELAY   TIMER
    0002      I.Q.
    00D3-D5      RANDOM NUMBER REGISTERS
    00D9      TEMPORARY         STORAGE
    OODA      FLICKER I BLINK         RATE
    00DB      PLAY MODE
    00DC-E4      PLAY STATUS
    OOffC      SAVE

<p align="center">
83</p>
<hr>

<img src="fbokpics/l.gif" width=37 height=56 alt="lunar lander"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><DIV ALIGN="RIGHT">JIM         
BUTTERFIELD</div>


Description -
     This program starts at 0200.  When started, you will find
yourself at 4500 feet and falling.  The thrust on your machine
is set to low; so you will pick up speed due to the force of
gravity.
    You can look at your fuel at any time by pressing the
"F" button.  Your fuel (initially 800 pounds) will be shown
in the first four digits of the KIM display.
    The first two digits of the KIM display always show
your rate of descent or ascent.  "A" restores altitude.
    Set your thrust by pressing buttons 1 through 9.
Warning: button 0 turns you motor off, and it will not
reignite!  A thrust of 1, minimum, burns very little fuel;
but gravity will be pulling your craft down faster and
faster.  A thrust of 9, maximum, overcomes gravity
and reduces your rate of descent very sharply  A thrust of 5
exactly counterbalances gravity; you will continue to descend
(or ascend) at a constant rate.  If you run out of fuel,
your thrust controls will become inoperative.
    A safe landing is considered to be one where you land
at a descent rate of 5 or less. After you land, your thrust
controls will be inoperative, since the motor is automatically
turned off; but you can still preff "F" to look at your fuel.
Pressing "GO" starts a new flight.

Suggestions for a safe flight:
  (1) Conserve fuel at the beginning by pressing 1.  You
      begin to pick up speed downwards.
  (2) When your rate of descent gets up to the 90's, you're
      falling fast enough.  Press 5 to steady the rate.
  (3) When your altitude reaches about 1500 feet, you'll
      need to slow down.  Press 9 and slow down fast.
  (4) When your rate of descent has dropped to 15 or 20,
      steady the craft by pressing 5 or 6. Now you're on
      your own.

              ;  main routine - initialization
0200 A2 0D    GO     LDX #13   fourteen bytes
0202 BD CC 02 LP1    LDA INIT,X
0205 95 D5           STA ALT,X
0207 CA              DEX
0208 10 F8           BPL LP1
              ;  Update height and velocity
020A A2 05    CALC   LDX #5
020C A0 01    RECAL  LDY #1
020E F8              SED
020F 18              CLC
<p align="center">
84</p>
<hr>

0210 B5 D5    DIGIT  LDA ALT,X
0212 75 D7           ADC ALT+2,X  add each digit
0214 95 D5           STA ALT,X
0216 CA              DEX
0217 88              DEY
0218 10 F6           BPL RECAL     next digit
021A B5 D8           LDA ALT+3,X  hi-order .. zero ..
021C 10 02           BPL INCR          .. or ..
021E A9 99           LDA #$99
0220 75 D5    INCR   ADC ALT,X
0222 95 D5           STA ALT,X
0224 CA              DEX
0225 10 E5           BPL RECAL  do next addition
0227 A5 D5           LDA ALT
0229 10 0D           BPL UP   still flying?
022B A9 00           LDA #0    nope, turn off
022D 85 E2           STA DOWN
022F A2 02           LDX #2
0231 95 D5    DD     STA ALT,X
0233 95 DB           STA TH2,X
0235 CA              DEX
0236 10 F9           BPL DD
0238 38       UP     SEC    update fuel
0239 A5 E0           LDA FUEL+2
023B E5 DD           SBC THRUST
023D 85 E0           STA FUEL+2
023F A2 01           LDX #1   two more digits to go
0241 B5 DE    LP2    LDA FUEL,X
0243 E9 00           SBC #0
0245 95 DE           STA FUEL,X
0247 CA              DEX
0248 10 F7           BPL LP2
024A B0 0C           BCS TANK  still got fuel?
024C A9 00           LDA #0     nope, kill motor
024E A2 03           LDX #3
0250 95 DD    LP3    STA THRUST,X
0252 CA              DEX
0253 10 FB           BPL LP3
              ; show alt, fuel, or messages
0255 20 BD 02        JSR THHRUST
0258 A5 DE    TANK   LDA FUEL   fuel into registers
025A A6 DF           LDX FUEL+1
025C 09 F0           ORA #$F0   plus F flag
025E A4 E1           LDY MODE
0260 F0 20           BEQ ST
0262 F0 9C    GOLINK BEQ GO
0264 F0 A4    CLINK  BEQ CALC
0266 A2 FE           LDX #$FE
0268 A0 5A           LDY #$5A
026A 18              CLC
026B A5 D9           LDA VEL+1
026D 69 05           ADC #5
026F A5 D8           LDA VEL
0271 69 00           ADC #0
<p align="center">
85</p>
<hr>

0273 B0 04           BCS GOOD
0275 A2 AD           LDX #$AD
0277 A0 DE           LDY #$DE
0279 98       GOOD   TYA
027A A4 E2           LDY DOWN
027C F0 04           BEQ ST
027E A5 D5           LDA ALT
0280 A6 D6           LDX ALT+1
0282 85 FB    ST     STA POINTH
0284 86 FA           STX PONTL
              ; show rate of ascent/descent as absolute
0286 A5 D9           LDA VEL+1
0288 A6 D8           LDX VEL     up or down?
028A 10 05           BPL FLY      .. up, we're OK
028C 38              SEC
028D A9 00           LDA #0
028F E5 D9           SBC VEL+1
0291 85 F9    FLY    STA INH
0293 A9 02           LDA #2     loop twice thru display
0295 85 E3           STA DECK
0297 D8       FLITE  CLD      display & key test
0298 20 1F 1F        JSR SCANDS  light 'em up!
029B 20 6A 1F        JSR GETKEY  check keys
029E C9 13           CMP #$13    GO key?
02A0 F0 C0           BEQ GOLINK    ...yes
02A2 B0 03           BCS NOKEY     .. if no key
02A4 20 AD 02        JSR DOKEY
02A7 C6 E3    NOKEY  DEC DECK
02A9 D0 ED           BNE FLITE
02AB F0 B7           BEQ CLINK  to CALC
              ; subroutine to test keys
02AD C9 0A    DOKEY  CMP #$0A   test numeric
02AF 90 05           BCC NUMBER
02B1 49 0F           EOR #$0F  Fuel F gives 0 flag
02B3 85 E1           STA MODE
02B5 60       RETRN  RTS
02B6 AA       NUMBER TAX
02B7 A5 DD           LDA THRUST    test; is motor off?
02B9 F0 FA           BEQ RETRN    yes, ignore key
02BB 86 DD           STA THRUST   no, store thrust
              ; calculate accel as thrust minus 5
02BD A5 DD    THRSET LDA THRUST
02BF 38              SEC
02C0 F8              SED
02C1 E9 05           SBC #5
02C3 85 DC           STA TH2+1
02C5 A9 00           LDA #0
02C7 E9 00           SBC #0
02C9 85 DB           STA TH2
02CB 60              RTS
              ; initial values
02CC 45 01 00        .BYTE $45,1,0    altitude
02CF 99 81 00        .BYTE $99,$81,0  rate of ascent
<p align="center">
86</p>
<hr>

02D2 99 97           .BYTE $99,$97    acceleration
02D4 02              .BYTE 2          thrust
02D5 08 00 00        .BYTE 8,0,0      fuel
02D8 01              .BYTE 1          display mode
02D9 01              .BYTE 1          in flight/landed
              ; end

00D5             ALT    *=*+3
00D8             VEL    *=*+3
00DB             TH2    *=*+2
00DD             THRUST *=*+1
00DE             FUEL   *=*+1
00E1             MODE   *=*+1
00E2             DOWN   *=*+1
00E3             DECK   *=*+1
                 ; linkages to KIM monitor
                 SCANDS = $1F1F
                 GETKEY = $1F6A
                 POINTH = $FB
                 POINTL = $FA
                 INH    = $F9

        ***** Hex Dump - Lunar Lander *****

0200 A2 0D BD CC 02 95 D5 CA 10 F8 A2 05 A0 01 F8 18
0210 B5 D5 75 D7 95 D5 CA 88 10 F6 B5 D8 10 02 A9 99
0220 75 D5 95 D5 CA 10 E5 A5 D5 10 0D A9 00 85 E2 A2
0230 02 95 D5 95 DB CA 10 F9 38 A5 E0 E5 DD 85 E0 A2
0240 01 B5 DE E9 00 95 DE CA 10 F7 B0 0C A9 00 A2 03
0250 95 DD CA 10 FB 20 BD 02 A5 DE A6 DF 09 F0 A4 E1
0260 F0 20 F0 9C F0 A4 A2 FE A0 5A 18 A5 D9 69 05 A5
0270 D8 69 00 B0 04 A2 AD A0 DE 98 A4 E2 F0 04 A5 D5
0280 A6 D6 85 FB 86 FA A5 D9 A6 D8 10 05 38 A9 00 E5
0290 D9 85 F9 A9 02 85 E3 D8 20 1F 1F 20 6A 1F C9 13
02A0 F0 C0 B0 03 20 AD 02 C6 E3 D0 ED F0 B7 C9 0A 90
02B0 05 49 0F 85 E1 60 AA A5 DD F0 FA 86 DD A5 DD 38
02C0 F8 E9 05 85 DC A9 00 E9 00 85 DB 60 45 01 00 99
02D0 81 00 99 97 02 08 00 00 01 01



ACKNOWLEDGEMENTS:  Ted Beach suggested the addition of 
the F flag when displaying fuel. Chuck Eaton spotted 
the cause of an erratic bug in the original keyboard 
input subroutine.  Thanks to both.
<p align="center">
87</p>
<hr><a name="music box">
<div align="right"><font color="gray">
Do you have or know where to find a recording, a
 wave or mp3 of the output of next program?

Please sent it to:

Erik Van den Broeck
Elfde Julilaan 130
B8500 Kortrijk
Belgium

+ 32 56 202142
<a target="back window" href="http://users.telenet.be/kim1-6502">users.telenet.be/kim1-6502</a>
erik.vdbroeck at telenet.be</font></div>
<hr>

<img src="fbokpics/m.gif" width=67 height=56 alt="music box"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/b.gif" width=49 height=56><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/x.gif" width=49 height=55><DIV ALIGN="RIGHT">JIM BUTTERFIELD</div>

DESCRIPTION

THIS PROGRAM PLAYS ONE OR SEVERAL TUNES VIA THE "AUDIO OUT"
INTERFACE OF KIM-1; USE THE SAME CONNECTION AS THAT FOR
RECORDING ON CASSETTE TAPE. IF YOUR TAPE RECORDER HAS
A "MONITOR" FEATURE, YOU CAN LISTEN TO THE TUNE AS WELL
AS RECORD IT. ALTERNATIVELY, AN AMPLIFIER WILL PLAY THE
SIGNAL THROUGH A SPEAKER.

HOW TO RUN

LOAD THE PROGRAM; LOAD THE TUNE(S) EITHER FROM CASSETTE
TAPE, PAPER TAPE, OR KEYBOARD ENTRY.  BE SURE TO STORE
THE VALUE FA AT THE END OF EACH TUNE, AND BEHIND THE LAST
TUNE, STORE: FF 00.
STARTING ADDRESS FOR THE PROGRAM IS 200; ENTER AD 0 2 0 0 GO.

HOW TO WRITE YOUR OWN TUNE(S)

EACH NOTE GOES INTO A BYTE OF STORAGE, STARTING AT LOCATION
0000 OF MEMORY. EACH TUNE SHOULD END WITH THE VALUE FA
WHICH STOPS THE PROGRAM UNTIL GO IS PRESSED.

SPECIAL CODES ARE INCORPORATED IN THE PROGRAM TO ALLOW
CERTAIN EFFECTS - ADJUSTMENT OF SPEED, TONE, ETC.
THE CODES ARE FOLLOWED BY A VALUE WHICH SETS THE
PARTICULAR EFFECT.  CODES ARE LISTED BELOW:

     CODE         EFFECT        INITIALLY        EXAMPLES
      FB  SETS SPEED OF TUNE       $30    18 IS QUICK; 60 IS SLOW
      FC  SETS LENGTH OF            02    2 MEANS, "LONG NOTE LASTS
           "LONG" NOTES                   TWICE AS LONG AS SHORT"
      FD  SETS OCTAVE (PITCH)       01    2 IS BASS; 4 IS DEEP BASS.
      FE  SETS INSTRUMENT         $FF    FF IS PIANO; 00 IS CLARINET
      FF  SETS ADDRESS FOR         00    00 WILL TAKE YOU BACK TO
             TUNE                           FIRST TUNE; LIKE A "JUMP"

FOR EXAMPLE, AT ANY TIME DURING A TUNE, YOU MAY INSERT 
THE SEQUENCE FB 18 AND THE TUNE WILL THEN BEGIN TO PLAY 
AT FAST SPEED. INSERTING FF 45 WILL CAUSE A SWITCH TO 
THE TUNE AT ADDRESS 45.  THE INITIAL VALUES SHOWN CAN 
BE RESET AT ANY TIME BY STARTING AT ADDRESS 200.

NO TUNE SHOULD EXTEND BEYOND ADDRESS DF, SINCE PROGRAM 
VALUES ARE STORED AT E0 AND UP.

THE PROGRAM CAN BE EASILY CONVERTED TO A SUBROUTINE 
(BY REPLACING THE BRK INSTRUCTION WITH A RTS).  THIS ALLOWS 
THE PROGRAMMER TO PLAY VARIOUS "PHRASES" OF MUSIC TO 
PRODUCE QUITE COMPLEX TUNES.
<p align="center">
88</p>
<hr>

<FONT COLOR="RED">   ***** Fixed locations for MUSIC BOX *****
      WORK     =    $E0
      LIMIT    =    $E6
      VAL2     =    $E9
      VAL1     =    $EA
      TIMER    =    $EB
      XSAV     =    $EC
      SBD      =    $1742
      PBDD     =    $1743
               *=   $0200

               ; PROGRAM - MUSIC BOX</FONT>


THE LOWEST NOTE YOU CAN PLAY IS A BELOW MIDDLE C.  FOR EACH NOTE,
YOU CAN SELECT WHETER IT IS PLAYED AS A LONG NOTE OR A SHORT NOTE
(NORMALY, A LONG NOTE WILL LAST TWICE AS LONG AS A SHORT NOTE).

SOME OF THE NOTES ARE AS FOLLOWS:

      NOTE                SHORT LONG

        A..................75   75
        A#                 6E   EE
        B..................68   E8
MIDDLE  C                  62   E2
        C#.................5C   DC
        D                  56   D6
        D#.................52   D2
        E                  4D   CD
        F..................48   C8
        F#                 44   C4
        G..................40   C0
        G#                 3C   BC
        A..................39   B9
        A#                 35   B5
        B..................32   B2
  HIGH  C                  2F   AF
        C#.................2C   AC
        D                  29   A9
        E..................24   A4
        F                  22   A2
        G..................1E   9E
     PAUSE                 00   80


     ; INITIALIZE - RESET WORK PARAMETERS

0200 A2 05    START    LDX  #5
0202 BD 86 02 LP1      LDA  INIT,X
0205 95 E0             STA  WORK,X
0207 CA                DEX
0208 10 F8             BPL  LP1
     ; MAIN ROUTINE HERE - WORK NOT RESET
020A A9 BF    GO       LDA  #$BF
020C 8D 43 17          STA  PBDD      open output channel
020F A0 00             LDY  #0
0211 B1 E4             LDA  (WORK+4),Y    get next note
0213 E6 E4             INC  WORK+4
0215 C9 FA             CMP  #$FA       test for halt
0217 D0 04             BNE  NEXT
0219 00                BRK       (or RTS if used as subroutine)
021A EA                NOP
021B F0 ED             BEQ  GO      resume when GO pressed
021D 90 0B    NEXT     BCC  NOTE    is it a note?
021F E9 FB             SBC  #$FB    if not, decode instrument
0221 AA                TAX             and put it into x
<p align="center">
89</p>
<hr>

0222 B1 E4               LDA  (WORK+4),Y GET PARAMETER
0224 E6 E4               INC  WORK+4
0226 95 E0               STA  WORK,X     STORE IN WORK TABLE
0228 B0 E0               BCS  GO         UNCONDITIONAL BRANCH

     ; SET UP FOR TIMING NOTE

022A A6 E0     NOTE      LDX  WORK       TIMING
022C 86 E7               STX  LIMIT+1
022E A6 E1               LDX  WORK+1     LONG NOTE FACTOR
0230 A8                  TAY             TEST ACCUM.
0231 30 02               BMI  OVER       LONG NOTE?
0233 A2 01               LDX  #1         NOPE, SET SHORT NOTE

 0235 86 E6        OVER    STX  LIMIT        store length factor
 0237 29 7F                AND  #$7F         remove short/long flag
 0239 85 E9                STA  VAL2
 023B F0 02                BEQ  HUSH         is it a pause
 023D 85 EA                STA  VAL1         no, set pitch
 023F A5 E9        HUSH    LDA  VAL2         get timing and
 0241 25 E3                AND  WORK+3       bypass if muted
 0243 F0 04                BEQ  ON
 0245 E6 EA                INC  VAL1         else fade the
 0247 C6 E9                DEC  VAL2            note
 0249 A6 E9        ON      LDX  VAL2
 024B A9 A7                LDA  #$A7
 024D 20 5D 02             JSR  SOUND
 0250 30 B8                BMI  GO
 0252 A6 EA                LDX  VAL1
 0254 A9 27                LDA  #$27
 0256 20 5D 02             JSR  SOUND
 0259 30 AF                BMI  GO
 025B 10 E2                BPL  HUSH

                   ; SUBROUTINE TO SEND A BIT

 025D A4 E2        SOUND    LDY  WORK+2   octave flag
 025F 84 EB                 STY  TIMER
 0261 86 EC                 STX  XSAV
 0263 E0 00        SLOOP    CPX  #0
 0265 D0 08                 BNE  CONT
 0267 A6 EC                 LDX  XSAV
 0269 C6 EB                 DEC  TIMER
 026B D0 F6                 BNE  SLOOP
 026D F0 16                 BEQ  SEX
 026F 8D 42 17     CONT     STA  SBD
 0272 CA                    DEX
 0273 C6 E8                 DEC  LIMIT+2
 0275 D0 EC                 BNE  SLOOP
 0277 C6 E7                 DEC  LIMIT+1
 0279 D0 E8                 BNE  SLOOP
 027B A4 E0                 LDY  WORK
 027D 84 E7                 STY  LIMIT+1
 027F C6 E6                 DEC  LIMIT
<p align="center">
90</p>
<hr>

 0281 D0 E0                 BNE  SLOOP
 0283 A9 FF                 LDA  #$FF
 0285 60           SEX      RTS
                   ; INITIAL CONSTANTS
 0286 30 02 01     INIT     .BYTE $30,2,1
 0209 FF 00 00              .BYTE $FF,0,0

 SAMPLE MUSIC FOR MUSIC BOX PROGRAM

 0000 FB 18 FE FF 44 51 E6 E6 66 5A 51 4C C4 C4 C4 D1
 0010 BD BD BD 00 44 BD 00 44 3D 36 33 2D A8 80 80 33
 0020 44 B3 80 80 44 51 C4 80 80 5A 51 E6 80 80 FA

 0020                                           FE
 0030 00 FB 28 5A 5A 51 48 5A 48 D1 5A 5A 51 48 DA E0
 0040 5A 5A 51 48 44 48 51 5A 60 79 6C 60 DA DA FA

 0040                                              FE
 0050 FF 5A 5A 5A 5A 5A 5A 66 72 79 E6 E6 80 00 56 56
 0060 56 56 56 56 5A 66 F2 80 80 4C 4B 4C 4C 4C 4C 56
 0070 5A 56 4C 00 Ch 44 4C 56 5A 5A 56 5A 66 56 6A 66
 0080 F2 80 FE 00 00 72 5A CC 72 5A CC 72 5A CC 80 B8
 0090 80 4C 56 5A 56 5A E6 F2 80 FA FF 00

 NOTE THAT TUNES 1 AND 2 SET BOTHTHE SPEED AND THE INSTRUMENT. 
 TUNE 3 CONTINUES AT THE SAME SPEED AS THE PREVIOUS ONE; BUT THE 
 INSTRUMENT IS CHANGED DURING THE TUNE.

 THE PROGRAM CAN BE CHANGED TO USE THE SPEAKER SHOWN IN 
 <a target="man window" href="http://www.ping.be/kim-1__6502/6502/usrman.html#F51">FIGURE</a> <a target="man window" href="usrman.html#F51">5.1</a> OF THE KIM MANUAL AS FOLLOWS:

     BYTE          INITIALLY       CHANGE TO
   020D              43                01
   024C              A7                FF
   0255              27                00
   0270              42                00


         ***** Extra Datafile for Music Box *****


0000-  FE 00 56 52 AD AF AD AF AD FC 06 AF FC 02 FE FF
0010-  2F 29 26 24 2F 29 AA 32 A9 FC 06 AF FC 02 FE 00
0020-  56 52 AD AF 5D AF AD FC 06 AF FC 02 FE FF 39 40
0030-  44 39 2F AF 29 2F 39 A9 B0 80 FE 00 56 52 AD AF
0040-  AD AF 0D FC 06 AF FC 02 FE FF 2F 29 26 24 2F 29
0050-  AA 32 A9 AF B0 80 2F 29 24 2F 29 A4 2F 29 2F 24
0060-  2F 29 AA 2F 29 2F 2A 2F 29 AQ 32 A9 AF 80 80 FA
0070-  FF 00

   Note: be sure to set the break vector 17FE,FF (00,1C)
<p align="center">
91</p>
<hr>

<img src="fbokpics/m.gif" width=67 height=56 alt="multi-maze"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/l.gif" width=36 height=45><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/min.gif" width=33 height=38><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/z.gif" width=44 height=55><img src="fbokpics/e.gif" width=47 height=57><div  ALIGN="RIGHT">BY JIM BUTTERFIELD</div>

Description:  Find your way out of the maze.  You are the
flashing light in the centre of the display.  As you move
up (key 9), down (1), left (4) or right (6), KIM will keep
you in the central display;  you'll see the walls of the maze
moving by as you travel.  Like walking through a real maze,
you'll only see a small part of the maze as you pass through.
If you can get out, you'll find yourself in a large open
area; that means you've won.  Press GO at any time for
a new maze.  Program starts at address 0200.

<FONT COLOR="RED">*** TODO listing ***</FONT>

Lis Ling:
   0200   EG   DO   START   INC   RND   random seed
   0202   20   40 iF      JSR   KEYIN
   0205   DO   F9      BNE   START
   0207   A2   07      LDX   #7   patch the rnaze
   0209   26,   DO   LP1   ROL   RND   in 8 places
   020B   90   17   1300 NXUP
020D BC OS Os   LDY PLACE,X
0210 BD 10 OS   LDA POINTl,x
   0213   59 DE 02   EOR MAZE,Y
   0216   99 DE 02   STA MAZE,Y
0219 CS   INY
021A CS   INY
021B BD 18 OS   LDA POINT2,X
   021E   59 DE 02   EOR MAZE,Y
   0221   99 DE 02   STA MAZE,Y
   0224 CA   NXUP   DEX
   0225   10 E2   BPL LP1
0227 A2 02   LDX #2
0229 DS   OLD
   022A   30 D4   SLINK  BMI START
0220 ED DE 02  SETUP  LDA INIT,X
   022F   95 D2   STA MZPT,X
   0231 CA   DEX   3 values from INIT
   0232   10 F8   BPL SETUP
pick out specific part of maze
0234 AO 013   MAP   LDY #11
0236 Bl D2   GETMOR LDA (MZPT) ,Y   6 rows x 2
   0238   99 D8 O0   STA WOPK,Y
023B SR   DEY
   0230   10 FR   BPL GETMOR
shift for vertical position
02SF A2 OA   LDX #10   for each of 6 rows
0240 A4 D4   NXDIG  LDY POSIT   shift Y positions
0242 A9 EF   LDA #$FF   filling with ~
   0244   38   REROL  SEC   on both sides
   0245   36 D9   ROL WORK+1,X
   0247   36 DR   ROL WORK,X   roll 'em
   0249   2A   ROL A
   024A   88   DEY
024B DO F7   SNE REROL

<p align="center">
92</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

calculate segments
   024D   29   07         AND #7
   024F   AS            TAY
   0250   B9   C6   02      LDA TAB1,Y      3 bits to segment
   0253   95   D8         STA WORK,x        . stored
   0255   CA            DEX
   0256   CA            DEX
   0257   10   E7         BPL NXDIG
               ; test   flasher
   0259   CE   DS      LIGHT   DEC PLUG    time out?
   025B   10   OA         BPL MUG    . no
   025D   A9   05         LDA #5      yes, reset
   02SF   85   D5         STA PLUG
   0261   AS   DE         LDA WORK+6         and..
   0263   49   40         EOR #$40        a a flip..
   0265   85   DE         STA WORX+6         . flasher
               ; light display
   0267   A9   7F      MUG   LDA #$7F    open the gate
   0269   an   41   17      STA SADD
   026C   AO   Os         LDY #$09
   026E   A2   OA         LDX #10
   0270   B5   DS      SHOW   LDA WORK,X    tiptoe thru.
   0272   SD   40   17      STA SAD     . the segments
   0275   SC   42   17      STY SBD
   0278   CS   DS      STl   DEC STALL      a pausing
   027A   DO   FC         ENE STT
   027C   CS            INY
   027D   CS            INY
   027E   CA            flEX
   027F   CA            DEX
   0280   10   EE         BPL SHOW
                 test   new key depression
   0282   20   40   lF      JSR KEYIN    set dir reg
   0285   20   GA   lF      JSR GETREY
   0288   CS   D7         CMP 50K    same as last?
   028A   FO   CD         BEQ LIGHT
   028C   85   D7         STA SOK
                 test   which key
   028E   A2   04         LDX #4   5   items in table
   0290   DD   CE   02   SCAN   CMP TAB2,X
   0293   FO   OS         BEQ FOUND
   0295   CA            flEX
   0296   10   F8         BPL SCAN
   0298   30   BC         EMI LIGHT
   029A   CA         FOUND   flEX
   029Th   30   SD         BMI SLINK   go key?
   029D   BC   D3   02      LDY TAB3,X
   02A0   B9   D8   On      LDA WORK,Y
   02A3   SD   D7   02      AND TAB4,X
   02A6   DO   El         EWE LIGHT
                 move
   02A8   CA            DEX
   02A9   10   04         BPL NOTUP
   O2AE   CS   D4         DEC POSIT   upward move
   O2AD   DO   85      MLINK   BNE MAP   1.o.n.g  branch

<p align="center">
93</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

   O2AF   no   04       NOTUP     BNE SIDEWY
   02B1   ES   D4           INC POSIT    downward move
   0283   DO   P8           BNE MLINK
   02B5   CA         SIDEWY DEX
   02136   DO   36           ENE LEFT
   02138   C6   D2       RIGHT     DEC MZ?T    right move
   02BA   CS   D2           DEC MZPT
   02DC   DO   EF           BNE MLINK
   0213E   ES   D2       LEFT     INC MZPT    left move
   02C0   ES   D2           INC MZPT
   02C2   DO   ś9           BNE MLINK
   O2C4   P0   P2           BEQ RIGHT
                 tables follow in Hex format
   02C6   TABi      90   OS 40   48 ol 09 41   49
   O2CE   TAB2      13   O9 Ol   OS 94
   02D3   TAB3      OS   OS 34   Os
   O2DY   TAB4      Ol   O8 40   40
   02DB   INIT      DA   02 Os
   02DE   MAZE      FF   FF 04   OO P5 7F 15   O0 41 FE 5F 04 51 7D 5D 04
            51   BE 54   14 F7 D5 04   54 7F 5ś Cl 90 FD FF 30 O0
            00   0O 30   30 CO DO 30   OO 30 30
   0308   PLACE      95   013 10   10 14 18 17   10
   0310   POINTl      Ol   34 80   10 80 32 40   40
   0318   POINT2      02   32 40   Cl 10 34 80   10
               ; end   of program



+**** Hex Dump - Multimaze ~




0200 EC DO 2040 iF DO F9 A2 0726 DO 90 17 BC 0803
0210 BD 100359050299 DE 92 CS CS BO 180359 DE
0220 02 99 DE 32 CA 10 52 A2 32 DS 30 04 BD OB 02 95
0230 02 CA 10 F8 AO OB Bi 02 99 DS 90 88 10 FS A2 OA
0240 A14 D4 A9 FF38 36 OS 36 DS 2A 58 DO F7 29 37 AS
0250 BS CS 02 95 OS CA CA 10 E7 CS OS 10 OA A9 Os 85
0260 OS AS Os 49 40 85 D5 A9 7F SD 141 17 AO 39 A2 OA
0270 BS OS 8040 17 SC 42 17 CS OS DO FC C8 CS CA CA
0280 10 EE 20 40 iF 20 SA iF CS DY F0 CD 85 D7 A2 94
0290 DD CE 02 FO OS CA 10 F8 30 BC CA 30 80 BC 03 92
02A0 B9 0800 3007 32 DO B1 CA 10 014 CS 0400 85 DO
02B0 94 ES 04 DO FS CA DO Os CS 02 CS 02 DO EF 56 02
02C0 ES 02 DO 59 FO F2 90 OS 40 48 91 09 41 49 13 39
0200 91 96 04 Os OS 040801 0840 40 DA 02 OS EF FF
02E0 0400 F5 7F is oo 41 FE SF 94 51 70 SD 94 Si B6
02F0 514 14 F7 Os 34 54 7F 55 91 DO FO FF00 On 00 O0

0300 30 30 90 30 nO 0O O0 00 Os OB 10 10 14 18 17 10
0310 91 64 80 10 50 02 40 140 92 02 40 61 10 04 80 10

<p align="center">
94</p>
<hr>

<img src="fbokpics/p.gif" width=49 height=57 alt="ping pong"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/g.gif" width=48 height=57><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/g.gif" width=48 height=57><div  ALIGN="RIGHT">JIM BUTTERFIELD</div>

Play against tbe computer, or            C  slam  F
change the program for a two-player
game.  On each shot, you choose          8  block B
between four plays:  Spin, Lob,
Block, or Slam.  If you're playing       4   lob  7
the left side of the court, use the
left-hand buttons (0, 4, 8 and C).       0  spin  3
See the diagram at right.

Each shot has its own strengths and weaknesses:  for
example, a Slam is a powerful shot, but it's also likely
to be "fluffed".  Strategy is not trivial - your chances
of success on any play depend not only on your choice of
shot, but on what shots have gone before.  You'll have to
learn the combinations the hard way.

You'll see the net in the middle of the court.  Don't try
to play the ball until it is on your side of the net, or
you'll lose the point.  Each type of shot has a
distinctive appearance, which you'll learn to recognize.
They are similar to the key positions:  a Spin lights the
bottom segment, a Lob lights the middle segment, a Block
lights the upper segment, and the mighty Slam shot lights
all three segments and travels faster.

The original version of the game was published for the
HP-67 calculator in "65 Notes", v4N2P5.  Authorship was
not given.

At first, the shots will come too fast for you to cope
with.  There are two ways to solve this.  The easy way is
the "freeze" the ball by holding down any unused key,
like AD or 7:  play will be suspended until you figure
out what you want to do next.  The harder way, but not
too hard, is just to slow down the ball by changing the
program:  locations 0331 to 0334 contain the speeds for
each type of shot.  Increase these values and the ball
will slow down, e.g., 40 40 40 28 will halve the speed.

For a two-player game, where KIM does not play the right
side, change location 032C to 01.  To have KIM play the
left side, change location 032B to 00.
KIM plays a strong game, but CAN BE BEATEN!

<p align="center">
95</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

   0200   20   40   iF   START   JSR   KEYIN     directional registrs
   0203   20   6A   iF      JSR   GETKEY         input key
   0206   C9   13         CMP   #$13     GO key?
   0208   DO   OA         BNE   NOGO     nope, skip
                 GO key -      set up game here
   020A   A2   08         LDX   #8     get 9
   020C   ED   24   03   SETUP   LDA   INIT,X         . . inital valus
   020F   95   80         STA   SPEED,X        to zero page
   0211   CA            DEX
   0212   10   F8         BPL   SETUP
                 test   legal keys (0,3,4,7,8,n,C,F)
   0214   C9   10      NOGO   CMP   #$l0     key 0 to F?
   0216   50   22         BCS   NOKEY     no, skip
   0218   AA            TAX        save key in X
   0219   29   03         AND   #3     test column
   0215   FO   04         BEQ   KEY     col 0 (0,4,8,C)?
   021D   C9   03         CMP   #3     col 3 (3,7,B,F)?
   021F   DO   19         BNE   NOKEY     neither - skip
   0221   45   85      KEY   EOR   PLACE     check vs ball postn
   0223   AB            TAY
   0224   29   04         AND   $4     ball oft screen?
   0226   DO   12         SNE   NOKEY
   0228   BA            TXA        restore key
   0229   45   84         EOR   DIRECT  ball going away?
   022B   29   02         AND   #2
   022D   FO   OS         SEQ   NOKEY     yes, ignore key
   022F   98            TYA        ball position
   0230   29   02         AND   #2     wrong side of net?
   0232   DO   69         BNE   POINT     yes, lose!
                 legal play found here
   0234   8A            TXA        restore key
   0235   4A   4A         LSRA LSRA        type (0=Spin, etc)
   0237   20   Bl   02      JSR   SHOT     make shot
                 key   rtns   complete - play ball
   023A   20   40   iF   NOKEY   JSR   KEYIN     if key still prest..
   023D   DO   27         ENE   FREEZE         freeze ball
   023F   CE   83         DEC   PAUSE
   0241   10   23         BPL   FREEZE  wait til timeout
   0243   AS   80         LDA   SPEED
   0245   85   83         STA   PAUSE
   0247   18            CLC
   0248   AS   85         LDA   PLACE     move..
   024A   65   84         ADC   DIRECT         . ball
   024C   85   85         STA   PLACE
   024E   29   04         AND   #4     ball still..
   0250   FO   14         SEQ   FREEZE         in court?
                 ball   outside -      KIM to play?
   0252   AS   85         LDA   PLACE
   0254   30   04         SMI   TESTL     ball on left
   0256   AS   88         LDA   PRITE     KIM plays right?
   0258   10   02         BPL   SKPT     unconditional
   025A   AS   87      TESTL   LDA   PLEFT     KIM plays left?
   025C   DO   3F      SKPT   SNE   POINT     no, lose point

<p align="center">
96</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

                 KIM   plays either      side here
   025E   A6   82      LDX   LOG   log determines..
   0260   80   39   93   LDA   PLAY,X     KIM's play
   0263   20   Dl   02   JSR   SHOT   make the shot
   0266   AY   7F      FREEZE   LDA   #$7F
   0268   SD   41   17   STA   PADO   open registers
                 light display here
   0265   AO   13      LDY   #$13
   026D   A2   91      LDX   #1
   026F   86   89      STX   DIGIT   count score digts
   0271   A5   86      LDA   SCORE
   0273   4A   4A      LSRA LSRA      shift & store..
   0275   4A   4A      LSRA LSRA      . left player score
   0277   85   SA      STA   ARC
   0279   AS   86      LDA   SCORE
   0278   29   OF      AND   *$OF   . right player score
   027D   AA         TAX
   027E   SD   E7   lF HOOP   LDA   TABLE,X
   0281   20   A4   92   JSR   SHOW
   0284   A6   SA      LDA   ARC
   0286   CE   89      DEC   DIGIT
   0288   10   F4      BPL   HOOP
   028A   A2   03      LDX   #3
   028C   SD   2D   93 VUE   LDA   PIX,X
   02SF   E4   85      CPX   PLACE
   0291   DO   02      SNE   NOPIX
   0293   95   81      ORA   SPOT   show the ball
   0295   20   A4   02 NOPIX   JSR   SHOW
   0298   CA         flEX
   0299   10   Fl      BPL   VUE
   029B   30   93      DM1   SLINK
                 lose! score & reverse board
   029D   20   E9   02 POINT   JSR   SKORE
   02A0   OS         SLINK   CLO
   02A1   4C   90   02   JMP   START   return to main loop
                 display      s\ubroutine
   02A4   SD   40   17 SHOW   STA   SAD
   02A7   SC   42   17   STY   SSD
   O2AA   CE   85      STALL   DEC   MOD
   O2AC   DO   FC      BNE   STALL
   O2AE   88   88      DEY   DEY
   02B0   60         RTS
   0251   AS         SHOT   TAY      save shot in Y
   02B2   AG   82      LDX   LOG   old log in X
   0254   96   82      ASL   LOG
   0286   96   82      ASL   LOG
   0258   95   82      ORA   LOG
   025A   29   OF      AND   *$F   update log book
   O2BC   85   82      STA   LOG   . last two shots
   02BE   38         SEC
   02SF   A5   80      LDA   SPEED
   02C1   E5   83      SBC   PAUSE   invert timing
   02C3   85   83      STA   PAUSE

<p align="center">
97</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

                 set   speed & display segment(s)
   02C5   s9   31   03      LDA   SPD,Y
   02C8   85   80         STA   SPEED
   O2CA   B9   35   03      LDA   SEG,Y
   O2CD   85   81         STA   SPOT
                 test   play success - random
   020F   nO   49   03      LDA   CHANCE,X  odds from log bk
   02D2   88         CIT   DEY
   02D3   30   04         SMI   GET
   02D5   4A   4A         LSRA LSRA
   0207   10   F9         BPL   SIT   unconditional
   0209   29   03      GET   AND   13   odds 0 to 3..
   02DB   OA            ASL   A   now 0 to 6
   O2DC   85   8C         STA   TEMP
   O2DE   AD   04   17      LDA   TIMER   random number
   02E1   29   07         AND   17   now 0 to 7
   02E3   CS   8C         CMP   TEMP
   02E5   FO   33         SEQ   REVRS   success?
   02E7   90   31         BCC   REVRS   success?
                 lose   a point & position to serve
   02E9   A2   04      SKORE   LOX   *4   position ball R
   O2EB   AS   84         LDA   DIRECT
   O2ED   OA   OA         ASLA ASLA
   O2EF   OA   OA         ASLA ASLA
   02F1   10   04         BPL   OVER
   02F3   A2   FF         LDX   *$FF   position ball L
   02F5   A9   Ol         LDA   *1
   02F7   86   85      OVER   STX   PLACE
   02F9   18            CLC
   O2FA   65   86         ADC   SCORE
   O2FC   85   86         STA   SCORE
   O2FE   AO   00         LDY   10   end game, kill ball
   0300   AA         TLP   TAX
   0301   29   OF         AND   *$F   get one score
   0303   C9   OS         CMP   j$ll   11 points?
   0305   DO   02         SNE   SKI
   0307   84   84         STY   DIRECT   kill ball
   0309   BA         SKI   TXA
   030A   4A   4A         LSRA LSRA
   030C   4A   4A         LSRA LSRA
   030E   DO   FO         SNE   TLP
                 set   serve - speed, spot, log, pause
   0310   A2   03         LDX   *3
   0312   SD   24   03   SRV   LDA   INIT,X
   0315   95   80         STA   SPEED,X
   0317   CA            DEX
   0318   10   P8         SPL   SERVE
                 reverse ball direction
   031A   AS   84      REVRS   LDA   DIRECT
   031C   18            CLC
   0310   49   FF         EOR   ~$FF
   031F   69   Ol         ADC   #1
   0321   85   84         STA   DIRECT
   0323   60            RTS

<p align="center">
98</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

tables - in Hexadeclual format
   0324   INIT   30   08   OO   80   Ol FF OO Ol OD
   032D   PIX   00   06   30   O0
   0331   SPD   20   20   20   14
   0335   SEC   08   40   Ol   49
   0339   PLAY   02   02   Ol   02   Ol 03 Ol 02 03 03 O0 02 00 OO   02 02
   0349   CHANCE   78   85   9E   76   6E Al AE 75 AA ES 8F 75 5B 56   7A 35
   0359   end
Zero   Page:   80:   SPEED -   speed ball travels
      81:   SPOT - segment(s)  ball lights
      82:   LOG - record of recent plays
      83:   PAUSE -   delay before ball moves
      84:   DIRECT - direction of ball
      85:   PLACE -   position of ball
      86:   SCORE
      87:   PLEFT -   0 for KIM to play left
      88:   PRITE -   0 for KIM to play right




~   Hex Dump - Ping *********



0200 20 40 iF 20 GA iF Cs 13 DO OA ~ Os 892403 95
   0210   50   CA   10   ES CS      10   80   22   AA   29   03   FO Ott CS         03   DO
0220 19 45 85 AS 29 Ok DO 12 SA 45 84 29 02 FO 0898
023029029069 SA 4A 4A 20 Si 022040 iF DO 27 CS
0240 83 10 23 AS 50 85 83 18 AS 85 65 84 55 85 29 Ott
0250 FO 14 AS 85 30 04 AS 88 10 02 AS 87 DO 3F AS 82
0260 SD 3903208102 AS 7F SD 41 17 AO 13 A2 0186
0270 89 AS 86 4A 4A4A4A 85 SAAS 8629 OF AA SD E7
0280 iF 20 A4 02 AS SA Ce 89 10 E4 A2 OS 892903 54
0290 85 DO 02 OS 51 20 Ak 02 CA 10 Fl 30 OS 20 ES 0?
02A0 98 4C O0 02 8940 17 SC 42 17 C6 SB DO EC 88 88
0280 50 AS AS 82 OS 82 06 82 OS 82 29 OF 55 82 38 AS
02C0 SO ES 838583893103858089 3503858189
02904903883004 4A4A 10 F9 2903 OA 85 SC AD Ott
0250 1729 07 CS SC FO 33 50 31 ~ Ott AS 84 OA OA OA
02F0 OA 10 Ok A? FE A9 ol 86 85 1865 86 85 86 AO OS

0300 AA 29 OF C9 0890 02 84 84 8A 4A 4A 4A 4A DO FO
0310 A2 03 89 24 OS 95 80 CA 10 ES AS 84 18 49 FE 69
0320 Ol 85 84 60 30 CO DO 80 Ol FE O0 51 O0 00 OS 30
0330 OO 20 20 20 14 OS 40 Ol 49 52 02 Ol 02 Ol OS Ol
0340 02 53 03 50 52 O0 50 02 52 785595 76 65 Al As
0350 75 AA ES SF 75 58 55 7A 35

<p align="center">
99</p>
<hr>

<img src="fbokpics/q.gif" width=49 height=60 alt="quick"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/k.gif" width=53 height=57><div  ALIGN="RIGHT">By Peter Jennings              
Modified by Jim Butterfield</div>

Description -
   Here's a program to test your speed of reaction. Press
"GO" and the display will blank for a random period of time.
wben it lights, hit any numbered button. The number on the
display will tell you how quick you were; the smaller the
number, the faster your reaction time. You may play repeatedly,
just press "GO" each time you want a new test.




0300  A5 F9    START      LDA INH    RANDOMIZE DELAY
0302  2A                  ROL A      ..BY MULTIPLYING
0303  65 F9               ADC INH       BY 3 AND
0305  29 7F               AND #$7F       MASKING
0307  85 FB               STA POINTH WORK IN DISPLAY AREA
0309  20 40 1F ZIP        JSR KEYIN  IF YOU CHEAT BY KEYING...
030C  D0 fb               BNE ZIP    PROGRAM WAITS YOU OUT
030E  E6 FA               INC POINTL
0310  D0 F7               BNE ZIP    COUNT DOWN FOR
0312  E6 FB               INC POINTH  RANDOM DELAY
0314  D0 F3               BNE ZIP
0316  85 F9               STA INH    SET TO ZERO
0318  A2 FD    RUN        LDX #$FD   NEGATIVE THREE
031A  F8                  SED        COUNT IN DECIMAL
031B  38                  SEC        ADD VALUE 1
031C  B5 FC    DIGIT      LDA POINTH+1,X
031E  69 00               ADC #$00   ADD IT IN
0320  95 FC               STA POINTH+1,X
0322  E8                  INX        MOVE ON TO NEXT DIGITS
0323  D0 F7               BNE DIGIT
0325  D8                  CLD
0326  20 1F 1F            JSR SCANDS LIGHT UP COUNT
0329  F0 ED               BEQ RUN    AND KEEP COUNTING
032B  20 1F 1F STAND      JSR SCANDS
032E  20 6A 1F            JSR GETKEY
0331  C9 13               CMP #$13    GO KEY DEPRESSED?
0333  D0 F6               BNE STAND   NOPE, HOLD IT
0335  F0 C9               BEQ START   YUP, START OVER


                ***** Hex Dump - Quick *****

0300-   A5 F9 2A 65 F9 29 7F 85 FB 20 40 1F D0 FB E6 FA
0310-   D0 F7 E6 FB D0 F3 85 F9 A2 FD F8 38 B5 FC 69 00
0320-   95 FC E8 D0 F7 D8 20 1F 1F F0 ED 20 1F 1F 20 6A
0330-   1F C9 13 D0 F6 F0 C9

<p align="center">
100</p>
<hr>

<img src="fbokpics/r.gif" width=50 height=57 alt="reverse"><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/v.gif" width=45 height=56><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><div  ALIGN="RIGHT">By Jim Butterfield</div>

Start at 0200 - the display will show a canbination of 6 letters
such as CDBAEF.  Hit a number from 2 to six to 'flip' letters.
For example, if you hit 2 with the previous example, the first
two letters will flip over to give DCBAEF.  Now if you hit 4,
you'll get the winning combination - ABCDEF - and the display
will signal your win with a line of dashes.

The computer won't limit your number of flips - but try to
get a win in 6 moves or less,  By the way, the computer forbids
doing the same flip twice in succession - so you can't back up a 
move.

0200 E6 16    START  INC RND+4    randomize
0202 20 40 1F        JSR KEYIN         **Game by Bob Albrecht -
0205 D0 F9           BNE START           People's Computer Co  **
0207 D8              CLD
0208 A2 05           LDX #5
020A A9 00           LDA #0
020C 86 10           STX POINTH
020E 95 18    ZLOOP  STA WINDOW,X   set window to zeros
0210 CA              DEX
0211 10 FB           BPL ZL00P
0213 38       RAND   SEC
0214 A5 13           LDA RND+1    hash in new random number
0216 65 16           ADC RND+4
0218 65 17           ADC RND+5
02lA 85 12           STA RND
021C A2 04           LDX #4
021E B5 12    RLP    LDA RND,X    move random string down one
0220 95 13           STA RND+1,X
0222 CA              DEX
0223 10 F9           BPL RLP
0225 AC C0           LDY #$C0      divide random 4 by 6
0227 84 11           STY MOD
0229 A0 06           LDY #6
022B C5 11    SET    CMP MOD
022D 90 02           BCC PASS
022F E5 11           SBC MOD
0231 46 11    PASS   LSR MOD
0233 88              DEY
0234 D0 F5           BNE SET
0236 AA              TAX
0237 A4 10           LDY POINTR
0239 39 F1 1F        LDA TABLE+10,Y  digits A to F
023C CA       TOP    DEX
023D 10 02           BPL TRY         find an empty window
023F A2 05           LDX #5
0241 B4 18    TRY    LDY WINDOW,X
0243 D0 F7           BNE TOP
0245 95 18           STA WINDOW,X      and put the digit in
0247 C6 10           DEC POINTR
0249 10 C8           BPL RAND

<p align="center">
101</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

0245 FO B,     SLI~K   FEQ START   link to start
024n A2 OS     WT~T   'nx #5   test
024$ B5 18     TEST2   IDA WItWT,X       ijin
0251 DD A6   O2   C~IP WIIiNEfl.X         condition
0254 DO Oc      BNE IIAY
0256 CA      DEl
025? 10 F6      Bit TEST2
0259 AZ OS      inx #5
025B A9 40      IDA #$~$o   set
02SD 95 18     SET   STA WINDO~4,X     to
029 CA      flEx
0260 10 FB      sFL SET
0262 A9 ?F     PLAY   IDA #$7F   directional
o264 &) 41   17   STA SALD             registers
0267 AC 09      'DY #$09
0269 AZ FA      LEX #~A   negative 5
026B B5 IF     SHOW   Li)A w'NDOW,X   light
026D SD 40   17   STA SAD       display
0270 ec 42   17   STY SEC
0273 c6 11     STi   DEC 241)
0275 DC FC      NCE STl
027? Cs      irrc
0278 CS      Ira
0279 ES      INK
02?A 30 ~      B:ś SHOW
027C 20 40      JSR KWThN
02?F 20 &L      JSR oô"'śKE~
0282 C9 15      CY&i~ 4, S. is   etc key?
0284F0 Cs      BEQ. SLfl~    yes, restart
0286 C9 0?      CM? 'Ly   Keys C to 6i
0288 50 C3      IrS WrEST    no, test win
C2SA AA      TAX   Keys 1 to 6?
028n FO Vs      REQ PLAY    no, exit
028P CA      VEX   Keys 2 to 6 (=1 to 5)?
02SF FO D2      BEQ PLAY    no, exit
0290 EU 10      CEx POINTR   Same key as before?
0292 FO CE      iśQ rIAT    yes1 ignore
0294 86 10      STX FCLNTR    no, we've got a live one
o296 B5 18     TOPi   LDA ~flNDOW.X
029$ 48      PHA    roll 1em out..1
0299 CA      VEX
029A 10 FA      BPL TOri
029C A6 10      'DX POINTR
029E 68     TO?2   ThA   roll 'em back in
029F 95 18      Sm w'NDCM,X
OZAl CA      VEX
0242 10 FA      BPL TO?2
0ZA4 50 BC      EMI PLAY
oZA6 F? FC 139 WINNER  BYTE sF7,SFC,$39,~E,$F9,~l
0ZA9 DE F9 Fl
   end

<p align="center">
102</p>
<hr>

<img src="fbokpics/t.gif" width=44 height=55 alt="teaser"><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><div  ALIGN="RIGHT">By Lew Edwards</div>


     Description -
        This program is an adaptation of the "Shooting Stars" 
     game utilizing the keyboard and display of the KIM-1.
     originally published in the Sept. '74 issue of <u>PCC</u>, a
     version also appeared in the May '76 issue of <u>Byte</u> magazine.
         The starfield is displayed on the horizontal segments
     of the second through fourth digits of the display. The
     segments represent stars when lit and are numbered as follows
     Shooting a star creates a hole where the star     7 8 9
     was. The resulting "explosion" changes the        4 5 6
     condition of certain adjacent stars or holes,     1 2 3
     (stars to holes, or holes to stars) according to the following:

     <img src="fbokpics/103.gif" alt="directions">

        The game starts with a star in position 5; the rest
     are holes. The object of the game is to reverse the initial
     condition, making 5 a hole and all the rest stars. Eleven
     moves are the minimum number.
        Should you attempt to "shoot" a hole, the first digit
     displays a "H" until a star key is pressed. This digit
     also displays a valid number selection. A count of valid
     moves is given at the right of the display. A win gives
     a "F" in the first digit. All holes is a losing situation,
     ("L" in the first digit). You may start over at any time
     by pressing the "Go" button. The program starts at 0200.

<FONT COLOR="RED">*** TODO listing ***</FONT>

   0200   A9   00      BEGN   LDA   itsoo   ZERO REGISTERS DO-DA
   0202   A2   10         LDX   *$io
   020ó   95   CF      CLOP   STA   OOCF,X
   0205   CA            DEX
   0207   DO   ES         SNE   CLOP
   0209   A9   140         LDA   #t$40      INITIALIZE DISPLAY...
   0205   85   D14         STA   OODR
   020D   A9   10         LDA   #$io   INIT. STARFIELD
   020F   85   DE         STA   OODE   REGISTERS
   0211   kA            LSR
   0212   85   DE         STA   OODF
   02114   20   DD   02   MLOP   JSR   DISP      DISPLAY..
   0217   AS   D3         LDX   00D3   rtDE?
   0219   DO   50         BNE   DELA   NODEZi, DELAY AND UPDATE
   0215   20   140   iF      JSR   1E140   MODEZO, GET KEY
   021E   FO   E4         SEQ   MLOP   NO KEY, RETURN
   0220   20   140   iF      JSR   lEkO   KEY ST[LL PRESSED?
   0223   FO   EF         SEQ   MLOP   NO, RETURN
   0225   20   BA   iF      JSR   GETKEY   YES, GET KEY
   0228   C9   13         CMP   #$43   "co' KEY?
   022A   FO   D14         SEQ   BEGN   YES, START AGAIN
   022C   C9   OA         CMP   tt$OA   OVER 9?
   022E   10   E14         BPL   NLOP   YES, TRY AGAIN
   0230   A8            TAY      USE AS INDEX

<p align="center">
103</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

   o~   FO   El      BEQ MLOP   0? -   iCT VALID
   0253   85   Dl      STA DODA   ~-9   STORE IT
   0235   20   ff4   02   JSR SEG   CONVERT TO SEGMENTS
   0238   85   DO      STA OODO   DISPLAY - LEFT DIGIT
   023A   89 CA 02   LDA O2CA,Y   GET STAR TEST BIT
0230  Co DC   CMP ~So6   TEST KEY #
   023F   50 De   OMI SKIP   1-5, SKIP
   0241   24 DF   BIT 00DF   6-9, TEST HI FIELD
0243  DO DC   ONE STAR   IT'S A STAR
0245  ff0 04   BEQ HOLE   ITtS A HOLE
   0247   24   DE      SKIP   BIT   ODDE   1 TO 5, TEST LO FIELD
   0249   DO   OS         ONE   STAR   ITtS A STAR
   024B   AS   76      HOLE   LOA   #S76   IT'S A HOLE LOAD "H'1
   0240   85   DO         STA   ODDO   DISPLAY-LEFT DIGIT
   024ff   DO   C3         BNE   MLOP   UNCOND. JUMP
   0251   ff8         STAR   SED      UPDATE COUNT
   0252   38            SEC
   0253   A9   DO         LDA   #Soo
   0255   65   D5         ADC   GODS   BY ADDING ONE
   0257   85   DS         STA   ODDS   STORE IT
   0259   D8            CLO
   025A   20   F4   02      JSR   SEG   UNPACK, CONVERT
   0250   85   DA         STA   ODDA   TO SEGMENTS AND
   02SF   AS   D5         LDA   ODDS   DISPLAY IN DIGITS
   0261   20   FO   02      JSR   LEFT   S AND 6...
   0264   85   D8         STA   DODS
   0266   EC   03         INC   0003   SET MODE TO 1
   0268   4C   14   02      JMP   MLOP   MAIN LOOP AGAIN
   0260   AD   DO      DELA   LDY   #$OO   MODE = 1
   026D   20   DD   02      JSR   01SF   DELAY ABOUT .8 SEC
   0270   88            DEY      WHILE DISPLAYING
   0271   DO   FA         ONE   DELA
   0273   AS   Dl          LDX OOD1       KEY ~ AS INDEX
   0275   BD   03   02      LDA   0203, X   GET SHOT PATTERN
   0278   AS            TAY      SAVE TN Y REGISTER
   0279   ED   06         CPX   #$06   KEY ti OVER S?
   0278   30   08         BMI   LOWF   NO, GO TO LOW FIELD
   0270   45   DF         EOR   ODOF   UPDATE HI FIELD, 6-9
   027ff   85   OF         STA   000ff
   0281   98            TYA      RECALL PATTERN, 6-9
   0282   A0   Do         LOY   ~$OD   NO SHOT 3RD TIME
   0284   DA            ASL   A   ALIGN WITH LO FIELD
   0285   45   DE      LOWE   EOR   DODE   UPDATE LO FIELD
   0287   85   DE         STA   DODE
   0289   98            TYA      RECALL PATTERN, 1-5
   028A   4A            LSR   A   ALIGN WITH HI FIELD
   0280   45   OF         EOR   DOOF   UPDATE HI FIELD, I-S
   0280   85   0ff         STA   OODF   (BLANK SHOT IF 6-9)
   02SF   OA            ASL   A   SHIFT 9 TO CARRY
   0290   A5   DE         LOA   DODE   GET REST OF FIELD
   0292   A2   OS         LOX   #SD6   .. STAR DISPLAY...

<p align="center">
104</p>
<hr>

<FONT COLOR="RED">*** TODO listing ***</FONT>

   0294   2A          DLOP   ROL       ALIGN wrm DISPLAY
   0295   48         PHA        SAVE IT FOR NEXT TIME
   0296   29   49      AND   ~$49    MASK TO HORIZ. SEGS
   0298   95   DO      STA   OODO,X     INTO DISPLAY WINDOW
   029A   68         PLA       RECALL FIELD
   0290   CA         DEX       SHIFT To NEXT
   029C   CA         DEX       DISPLAY DIGIT
   029D   DO   Es      ONE   DLOP    REPEAT TILL DONE
   029F   2A         ROL       BIT FOR 5 TO CARRY
   02A0   BO   OE      BCS   MODE    5 IS STAR, CONTINUE
   02~   FO   OS      BEQ   LOSE    5 IS HOLE, ALL HOLES
02A4  C9 FE   CMP ~$FF       ALL THE REST STARS?
02A6  DO OS   BNE MODE       NO
02A8  A9 71   LDA it$71        YES, LOAD nEll
02AA  DO OS   ONE FRST       AND SKIP
O2AC  A9 38   LOSE   LDA #S38   LOAD ~ILt~, CLOSE)
02AE  DO 04   ONE FRST       AND SKIP
0200  CC D3     MODE   DEC 00D3        SET MODE TO 0
0202  A9 OC   LDA #$oo        BLANK FIRST DIGIT
   0204   85 DO   FRST   STA ODDO   FILL FIRST DIGIT
0206  DO 03   ONE NONE        END OF GAME
0208  4C 14 02   MP MLOP         MAIN LOOP AGAIN
O2BB  20 DD 02  DONE   JSR DISP        DISPLAY UNTTL
020E  20 40 iF   JSR lEkO           tt00TI KEY IS
02C1  20 GA iF   JSR GETKEY     PUSHED
02C4  CS 13   CMP ~$13
02C6  DO F3   ONE DONE
O2CS  4C OO 02   JMP BEON        START A NEW GAME
02CR  0102 04081010 20 40 8010 07 3649 BA 92 CC
02DB  EO 98
                  DISPLAY SUBROUTINE
   0299   AS   7E      DISP    LDA   4!$7F   TURN ON DISPLAY
   O2DF   8D   4]   17       STA   1741
   02E2   A2   09          LDX   #$09
   02E4   OS   C7      MORE    LDA   00C7,X   PUT IN SEGMENTS
   02E6   84   EC         STY   OOFC   SAVE Y
   02E8   20   4E   iF      JSR   IF4E   DISPLAY THEM
   O2EB   EO   15         CPX   #Sis   DONE? 6 TIMES
   O2ED   DO   ES         ONE   MORE   NO, LOOP
   O2EF   60            RTS      YES, RETURN
   HEX CONVERSION SUBROUTINE
   02F0   4A      LEFT   LSR A
   02F1   4A         LSR A
   02F2   4A         LSR A
   02F3   4A         LSR A
   02F4   29   OF   SEC   AND #$OF   MASK TO 4 BITS
   02F6   AS         TAY   USE AS INDEX
   02F2   89   E7 iF      LDA iFE7,Y   CONVERT TO SEGMENTS
   O2FA   60         RTS   RETURN

<p align="center">
105</p>
<hr>

<img src="fbokpics/t.gif" width=44 height=55 alt="timer"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><div  ALIGN="RIGHT">By Joel Swank</div>

Description -
   TIMER turns KIM into a digital stopwatch showing up to
99 minutes and 59.99 seconds. It is designed to be accurate
to 50 microseconds per second. The interval timer is used
to count 9984 cycles and the instructions between the time
out and the reset of the timer make up the other 16 cycles
in .01 seconds. The keyboard is used to control the routine
as follows: Stop (0), Go (1), Return to KIM {4) , Reset (2).



  0200  A9 00     BEGN       LDA #$00
  0202  85 F9                STA INH     ZERO DISPLAY
  0204  85 FA                STA POINTL
  0206  85 FB                STA POINTH
  0208  20 1F 1F  HOLD       JSR SCANDS  LIGHT DISPLAY
  020B  20 6A 1F             JSR GETKEY
  020E  C9 04                CMP #$04    KEY 4?
  0210  D0 03                BNE CONT
  0212  4C 64 1C             JMP 1C64    RETURN TO KIM
  0215  C9 02     CONT       CMP #$02    KEY 2?
  0217  FF E7                BEQ BEGN    BACK TO ZERO
  0219  C9 0l                CMP #$01    KEY 1?
  021B  D0 EB                BNE HOLD
  021D  A9 9C                LDA #$9C
  021F  8D 06 17             STA 1706    SET TIMER
  0222  20 1F 1F  DISP       JSR SCANDS  DISPLAY VALUE
  0225  AD 07 17  CLCK       LDA 1707    CHECK TIMER
  0228  F0 FB                BEQ CLCK
  022A  8D 00 1C             STA ROM     DELAY 4 MrCROSEC.
  022D  A9 9C                LDA #$9C    SET TIMER
  022F  8D 06 17             STA 1706
  0232  18                   CLC
  0233  F8                   SED         SET FLAGS
  0234  A5 F9                LDA INH
  0236  69 0l                ADC #$0l    rNC. lOOThS
  0238  85 F9                STA INH
  023A  A5 FA                LDA POINTL
  023C  69 00                ADC #$00    INC. SECONDS
  023E  85 FA                STA POINTL
  0240  C9 60                CMP #$60    STOP AT 60
  0242  D0 0B                BNE CKEY
  0244  A9 00                LDA #$00
  0246  85 FA                STA POINTL  ZERO SECONDS
  0248  A5 FB                LDA POINTH
  024A  18                   CLC
  024B  69 0l                ADC #$01    INC. MINUTES
  024D  85 FB                STA POINTH
  024f  D8        CKEY       CLO
  0250  20 6A 1F             JSR GETKEY  READ KEYBOARD
  0253  C9 00                CMP #$00    KEY 0?
  0255  D0 CB                BNE DISP
  0257  F0 AF                BEQ HOLD    STOP

<p align="center">
106</p>
<hr>
<a name="wimpus">
<img src="fbokpics/w.gif" width=67 height=57 alt="wumpus"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/s.gif" width=49 height=57><div  ALIGN="RIGHT">By Stan Ockers</div>

Description -
     Wumpus lives in a cave of 16 rooms, (labeled 0-F).
Each room has four tunnels leading to other rooms, (see
the figure)   When the program is started at 0305, you and
Wumpus are placed at random in the rooms. Also placed
at random are two bottomless pits (they don't bother Wumpus,
he has sucker-type feet) and two rooms with Superbats,
(also no trouble to Wumpus, He's too heavy). If you enter
a batts room you are picked up and flown at random to
another room.  You will be warned when bats, pits or Wumpus
are nearby   If you enter the room with Wumpus, he wakes
and either moves to an adjacent room or just eats you up
(YOU lose)  In order to capture Wumpus, you have three
cans of "mood change" gas. When thrown into a room
containing Wumpus, the gas causes him to turn from a vicious
snarling beast into a meek and loveable creature. He will
even come out and give you a hug. Beware though, once you
toss a can of gas in the room, it is contaminated and you
cannot enter or the gas will turn you into a beast (you lose).
   If you lose and want everything to stay the same for
another try, start at 0316. The byte at 0229 controls the
speed of the display. Once you get use to the characters,
you can speed things up by putting in a lower number. The
message normally given tells you what room you are in and
what the choices are for the next room. In order to fire
the mood gas, press PC (pitch can?), when the rooms to be
selected are displayed. Then indicate the room into which
you want to pitch the can. It takes a fresh can to get
Wumpus (he may move into a room already gassed) and he will
hear you and change rooms whenever a can is tossed (unless
you get him). Good hunting!
   The program is adapted from a game by Gregory Yob
which appears in <u>The Best of Creative Computing</u>.

<center><img src="fbokpics/107.gif"></center>
<p align="right">
107</p>
<hr>
<FONT COLOR="RED">*** TODO listing ***</FONT>

   0305   AS   FE         LDA   #$FE     INITIALIZATION...
   0307   M   OF         LDX   #$OE   . .CLE*I OUT ROOMS..
   0309   95   Cl      INIT   STA   OOC1,X   INIT. TO FF
   0308   CA            DEX      FINISHED?
   030C   10   FE         BPL   INIT   No
   0305   AS   03         LDA   #$03   GIVE THREE CANS OF GAS
   0310   85   50         STA   OOEO
   0312   AO   Os         LDY   #$os    . RANDOMIZE...
   0314   10   02         BPL   GETh   YOU1WUMPUS,PITS AND BATS
   0316   AO   90         LDY   #$oo   (ONLY YOU ENTRY)
   0318   A2   95      GETN   LDX   ffS05
   031A   20   72   02      JSR   RAND
   031D   29   OF         AND   #$OF
   031F   DS   CA      CKNO   CMP   QOCA, X   . MAKING SURE ALL
   0321   EQ   ES         BEQ   GETN   ARE DIFFERENT..
   0323   CA            flEX
   0324   10   ES         BPL   CKNO
   0326   99   CA   90      STA   OOCA,Y   STORE IN OOCA-OOCF
   0329   88            DEY
   032A   10   SC         BPL   GETN
   032C   20   B2   02   ADJR   JSR   NXTR   SET UP ADJACENT ROOM LIST
   032F   AO   OS         LOY   #$03   RAZARDS IN ADJ. ROOMS?
   0331   81+   El         STY   0O~
   0333   BS   Ce   QO   NXTR   LDA   00C5,Y
   0336   20   8E   92      JSR   COMP   COMPARE EACH TO HAZARDS
   0339   8A            TXA      (X CONTAINS MATCH INFO.)
   033A   30   17         BMI   NOMA   NO MATCH, NO HAZARDS
   033C   EQ   03         CPX   #$os   BATS?
   0335   30   01+         BMI   SKP1   NO
   0340   A9   ~9         LDA   .41S19   (BATS NEARBY MESSAGE)
   031+2   AO   QA         BPL   MESS
   0344   50   Ol      SKPI   CPX   it$0l   PIT?
   0346   30   Ok         SMI   SKP2   NO
   0348   A9   OS         LDA   ~$0E   (PIT CLOSE MESSAGE)
   034A   10   02         BPL   MESS
   034C   A9   O0      SKP2   LDA   *$00   MUST BE WUMPUS
   031+5   AO   Ol      MESS   LDY   ~$01   (PAGE ONE)
   0350   20   00   02      j5p   SCAN   DISPLAY HAZARD MESSAGE
   0353  CS      El      NOMA   DEC   0051   TRY NEXT AW. ROOM
   0355  A4      El         LDY   0051   FINISHED?
   0357   10   DA         BPL   NXTR   NO
   0359  A4      CA         LOY   QOCA     LOAD AND DISPLAY -
   0358   89   57   iF      LDA   1FE7,Y   ?~YOU ARE IN ... TUNNELS
   OSSE   85   OC         STA   OOOC   LEAD TO ...." MESSAGE..
   0260  '\2      03         LDX   #$03   (FOUR NEXT ROOMS)
   0362   81+   CS      XRO   LDY   00C6,X
   0364  B9      57   iF      LDA   1E57,Y   CONVERSION
   0367   95   20         STA   0020,X   PUT IN MESSAGE
   0369   CA            DEX      FINISHED?
   036A   10   ES         BPL   XRO   NO
   0~6C   AO   90      ROOM   LDY   #Soo   LOCATION AND..
   0365   98            TYA      PAGE OF MESSAGE
   03SF   20   00   92      JSR   SCAN   DISPLAY MESSAGE

<p align="center">
108</p>
<hr>
<FONT COLOR="RED">*** TODO listing ***</FONT>

   0372   20   58   02      JSR   DEBO   DEBOt?lCE KEY
   0375   C9   14         CMP   *$i4   PC PUSHED?
   0377   FO   48         SEQ   ROOM   YES
   0379   20   CS   02      JSR   VALID   AN ACUACENT ROOM?
   037C   85   CA         STA   OOCA   UPDATE YOUR ROOM
   037E   BA            TXA
   037F   30   EB         SMI   ROOMS   IF X=FF, NOT VALID ROOM
   0381   AS   CA         LDA   OOCA   CHECK FOR GAS JN ROOM
   0383   A2   04         LDX   #$04   5 POSSIBLE CEXPANSION)
   0385   95   Cl      NXTG   CMP   OOCI,x
   0387   FO   33         SEQ   GASH   GASSED!!
   0389   CA            DEX      ALL CHECKED?
   038A   10   F9         SPL   NXTG   NO
   038C   20   SF   02      JSR   COMP   CHECK YOUR NEW
   03SF   BA            TXA      ROOM FOR HAZARDS.
   0390   30   9A          SMI    ADJR    NO MATCH, NO HAZARDS
   0392   EO   03         CPX   #$03
   0394   10   17         BPL   BATh   BATS
   0396   EO   Ol         CPX   #$Oi
   0398   10   iD         SPL   PITH   PIT!!!
   OSSA   AO   oc         LDY   #t$00
   039C   Ag   26         LDA   #$26   MUST HAVE BUMPED WUMPUS
   039E   20   00   02      JSR   SCAN   DISPLAY MESSAGE
   03A1   20   99   02      LJSR   MOVE   . SEE IF HE MOVES..
   03A4   CS   CA         CMP   OOCA   STILL IN YOUR ROOM?
   03A6   DO   84         SNE   ADJR   NO, YOUrRE O.K.
   03A8   AS   26         LDA   #S26   HE GOT YOU!
   03AA   4C   CF   02      JMP   LOSE
   O3AD   AO   Ol      BATH   LDY   #$oi   SAT MESSAGE
   O3AF   AS   3D         LDA   #$3D
   0381   20   00   02      JSR   SCAN
   O3S~   4C   16   93      JMP   CHNG   CHANGE YOUR ROOM
   03B7   A9   4F      PITH   LDA   ~$4F   FELL rN PIT!
   0359   4C   CF   92      JSR   LOSE
   O3BC   AS   65      GASM   LDA   it$GS   GAS IN ROOM!
   035E   L+C   CF   92      JMP   LOSE
   03C1   AO   90      ROOM   LDY   it$00   PITCH CAN AND SEE..
   03C3   AS   87         LDA   #SB7   IF YOU GET HIM
   03C5   20   00   92      JSR   SCAN   ROOM?
   03C8   20   58   92      JSR   DEBO
   03C8   20   CS   92      JSR   VALID   VALID ROOM?
   O3CE   85   Dl         STA   OOD1
   03D0   SA            TXA
   03D1   30   EE         SHI   ROOM   IF XZFF, NOT VALID
   03D3   A5   Dl         LDA   OOD1
   O3DS   AS   EO         LDX   OOEO   CANS OF GAS LEFT
   03D7   95   CO         STA   OOCO,X    . IS WUMPUS IN
   03D9   CS   CS         CMP   00C8   ROOM GASSED?
   03DS   FO   15         SEQ   WIN   YES, YOU GOT HIM
   O3DD   CS   EO         DEC   OOEO   DECREASE CAN COUNT
   O3DF   FO   IA         BEQ   OUT   GAS IS GONE
   OSEl   AG   CS         LDX   OOCS     MOVE WUMPUS TO AN
   03E3   20   Bk   92      JSR   NEXT   ADJACENT ROOM (FOR HIM)
   OSES   20   AS   02      JSR   MOVE

<p align="center">
109</p>
<hr>
<FONT COLOR="RED">*** TODO listing ***</FONT>

   03E9   C5   CA         CMP   OCCA   DID HE rcw INTO YOUR ROOM?
   0~Es   FO   SB         BEQ   03A8   YES
0350  4C CE 02   JMP O2DE        DISPLAY CANS LEFT MESSAGE
03F2  AO Ol   LDY #Soi        GREATS ETC. MESSAGE
03F4  A9 80   LDA ~$80
03F6  20 Co 32   JSR SCAN
03F9  FO F7   SEQ WIN         REPEAT
O3FB  AS 73     OUT   LDA 4$$73       OUT OF GAS!
O3FD  4C CF 02   JMP LOSE
0200   8~   DE      STY   CODE      TRANSFER POINTER HIGH
0202  85 DD   STA OODD       TRANSFER POINTER LOW
0204  AY 07   LDA it$07        INIT. SCAN FORWARD
0206  85 DF   STA OCOF
0208  AO Os   LOY #$05        IN~T Y
020A  A2 35   CONT   LOX #$os   INIT X
020C  Si OD     CHAR   LCA (OODD),Y   GET CHARACTER
020E  C9 00   CMP ~$00        LAST CHARACTER?
0210  DO Cl   SNE MORE        IF NOT, CONTINUE
02.12  60   RTS
0213  95 58   STA 00E8,X     STORE IT
   0215  88   MORE   DEY   SET UP NEXT CHARACTER
0216  CA   DEX             SET UP NEXT STORE LOC.
0217  10 F3   BPL CHAR        LOOP IF NOT 6TH CHAR.
0219  OS   CLD             BINARY MODE
021A  ~8   CLC             PREPARE TO ADD
0218  98   TYA             GET CHAR. POINTER
021C  65 CF   ACC OODF        UPDATE FOR 6 NEW CHAR.
021E  85 DC   STA OODC        SAVE NEW mINTER
0220  20 28 02   JSR 0228        DELAY-DISPLAY
0223  A4 DC   LDY OODC        RESTORE POINTER
0225  4C 0A 62   JMP CONT       CONTINUE REST OF MESSAGE
DELAY DISPLAY SUBROUTINE
0228  A2 CA   LOX #$CA   SET RATE
022A  86 OB   STX 00DB        PUT IN 05CR. LOC.
022C  A9 52   TIME   LDA #$52   LOAD TIMER
022E  80 37 17   STA 1707        START TIMER
0231  20 35 32   JSR CISP       JUMP TO DISPLAY SUBR.
0234  2C 67 17   BIT 1707        TIMER DONE?
0237  10 FS   BPL LITE        IF NOT, LOOP
0239  C6 OB   DEC 00DB        DECREMENT TIMER
0238  CO EF   SNE TIME       NOT FINISHED
0230  60   RTS             GET 6 NEW CHAR.
BASIC DISPLAY SUBROUTINE cc':
0235  A9 7F   LDA #S7F        CHANGE SEGMENTS..
0240  SD 1+1 17   STA PADO       TO OUTPUT
0243  AO Co   LDY #$oo        INIT. RECALL INDEX
0245  A2 09   LOX #$09        INIT. DIGIT NUMBER
0247  89 58 60  SIX   LDA 00E8,Y     GET CHARACTER
024A  84 FC   STY OOFC        SAVE Y
024C  20 45 iF   JSR 1F4E        DISPLAY CHARACTER

<p align="center">
110</p>
<hr>
<FONT COLOR="RED">*** TODO listing ***</FONT>

   024F   CS         INY      SET UP FOR NEXT CHAR.
   0250   Co   06      CPY   ~$06   6 CHAR. DISPLAYED?
   0252   90   F3      BCC   SIX   NO
   0254   20   SD IF      JSR   1F3D   KEY DOWN?
   0257   60         RTS      EXIT
            DEBOIX4CE SUBROUTINE
   0258   20   Sc IE  DEBO      JSR   INITI
   0256   20   3E 02      JSR   DISP   WAIT FOR PREVIOUS KEY
   025E   DO   F8      SNE   DEBO   TO BE RELEASED
   0260   20   SE 02  SHOW      JSR   DISP   WAIT FOR NEW KEY TO
   0263   FO   FB      SEQ   SHOW   BE DEPRESSED
   0265   20   SE 02      JSR   DISP   CHECK AGAIN AFTER
   0268   FO   FS      BEQ   SHOW   SLIGHT DELAY
   026A   20   SA IF      JSR   GETKEY   GET A KEY
   026D   C9   15      CMP   #$15   A VALID KEY?
   02SF   10   E7      BPL   DEBO   NO
   0271   60         RTS
                 RANDOM   NUMBER      SUBROUTINE
   0272   8A           RAND      TXA      SAVE X REGISTER
   0273   48         PHA
   0274   D8         Cm      RANDOM it ROUTINE FROM
   0275   38         SEC      J. BUTTERFIELD, KIM
   0276   AS   41      LDA   0041   USER NOTES tt1 PAGE 4
   0278   65   44      ADC   0044
   027A   65   45      ADC   0045
   027C   85   40      STA   0040
   027E   A2   04      LDX   ~$04
   0280   85   40     NXTN      LDA   0040,X
   0282   95   ~      STA   0041,X
   0284   CA         DEX
   0285   10   FY      BPL   NXTh
   0287   85   CO      STA   OOCO
   0289   68         PLA      RETURN X REGISTER
   028A   AA         TAX
   0288   AS   CO      mA   OOCO
   028D   60         RTS
                 COMPARE      SUBROUTINE
   02SF   A2   04     COMP      mx   A$04   COMPARE RO~ IN ACC.
   0291   D5   CB     HAZD      CMP   OOCB,X   WITH EACH HAZARD.
   0293   FO   OS      BEQ   OUT
   0295   CA         DEX
   0296   10   F9      BPL   HAZD   X ON EXIT SHOWS MATCH
   0298   60          OUT      RTS
             MOVE WUMPUS      SUBROUTINE
   0299   20   72 02  MOVE      JSR   RAND   GET A RANDOM it
   029C   29   OF      AND   #t$OF   STRIP TO HEX DIGIT
   029E   C9   CY      CMP   A$04   CHANGE RooMS 75%
   02A0   30   OD      BMI   NOCH   OF THE TIME
   02PQ   20   B2 02      JSR   NEXT   GET ADJ. ROOMS (TO WUMPUS)
   02A5   AD   Os 17      LDA   1706   GET RANDOM it, 0-3
   02A8   29   OS      AND   i$03
   02M   AA         TAX      USE AS INDEX
   02A8   BS   CS      LDA   00C6,X   GET AN ADd. ROOM
   02AD   85   CB      STA   OOCB   PUT WUMPUS IN IT

<p align="center">
111</p>
<hr>

02AF A5 CB     NOCK      LDA 00CB       WUMPUS ROOM N ACC.
02B1 60                  RTS
      **** LOAD NEXT ROOMS SUBROUTINE ****
02B2 A6 CA               LDX 00CA       YOUR ROOM AS INDEX
02B4 B5 50               LDA 0050,X     ... NEXT ROOMS ARE LOADED
02B6 85 C6               STA 00C6       INTO 00C6-00C9 FROM
02B8 B5 60               LDA 0060,X     TABLES ...
02BA 85 C7               STA 00C7
02BC B5 70               LDA 0070/X
02BE 85 C8               STA 00C8
02C0 B5 80               LDA 0080,X
02C2 85 C9               STA 00C9
02C4 60                  RTS
            ***** CHECK VALID SUBROUTINE *****
02C5 A2 05     VALID     LDX #$05       ... CHECK IF ACC.
02C7 D5 C6               CMP 00C6.X     MATCHS 00C6-00C9 ...
02C9 F0 03               BEQ YVAL       YES, VALID ROOM
02CB CA                  DEX
02CC 10 F9               BPL NXTV
02CE 60        YVAL      RTS
            **** LOSE SUBROUTINE ****
02CF A0 01     LOSE      LDY *01        ...DISPLAY REASON LOST,
02D1 20 00 02            JSR SCAN       THEN "YOU LOSE" ...
02D4 A0 00               LDY #$00
02D6 A9 AC               LDA #$AC
02D8 20 00 02            JSR SCAN
02DB 4C D4 02            JMP REPT
           **** GAS LEFT MESSAGE ****
02DE A4 E0               LDY 00E0       GET CANS LEFT
02E0 B9 E7 1F            LDA 1FE7,Y     GET CONVERSION
02E3 85 9F               STA 09F        STORE IN MESSAGE
02E5 A0 00               LDY #$00       (PAGE ZERO)
02E7 A9 90               LDA #$90       DISPLAY CANS OF GAS
02E9 20 00 02            JSR SCAN       LEFT MESSAGE
02EC 4C 2C 03            JMP ADJR

                    ***** Messages *****


     0000 80 EE DC BE 80 F7 D0 F9 80 84 D4 80 EF 80 C0 80
     0010 F8 BE D4 D4 F9 B8 ED 80 B8 F9 F7 DE 80 F8 DC 80
     0020 FD FF F7 B9 80 00 80 DC DC F5 ED 80 C0 80 FC BE
     0050 B7 F5 F9 DE 80 F7 80 9C BE B7 F5 BE ED 80 80 00

                ***** Next Room List *****


     0050 02 02 00 01 01 00 05 04 00 06 07 00 09 0A 01 04
     0060 05 05 01 02 05 02 05 06 05 08 09 08 0B 0C 0B 07
     0070 08 04 05 04 07 06 07 0A 09 0A 0F 0C 0D 0E 0C 0A
     0080 0B 0E 05 06 0F 08 09 0F 0B 0C 0D 0E 0E 0F 0D 0D

<p align="center">
112</p>
<hr>


                   ***** Messages *****

     0090 80 B7 84 ED ED F9 DE 80 C0 80 DC D4 B8 EE 80 DB
     00A0 80 B9 F7 D4 ED 80 B8 F9 F1 F8 80 00 80 EE DC BE
     00B0 80 B8 DC ED F9 80 00 80 D0 DC DC B7 D5 80 00 05

     0100 80 9C BE B7 F5 BE ED 80 B9 B8 DC ED F9 00 80 F5
     0110 84 F8 80 B9 B8 DC ED F9 00 80 FC F7 F8 ED 80 B9
     0120 B8 DC ED F9 80 00 80 F6 F7 80 F6 F7 80 9C BE B7
     0150 F5 BE ED 80 BD DC F8 80 EE DC BE 80 00 80 ED BE
     0140 F5 F9 D0 FC F7 F8 80 ED D4 F7 F8 B9 F6 80 00 80
     0150 EE EE 84 84 F9 F9 F9 80 F1 F9 B8 B8 80 84 D4 80
     0160 F5 84 F8 80 00 80 BD F7 ED 80 84 D4 80 D0 DC DC
     0170 B7 80 00 80 DC BE F8 80 DC F1 80 BD F7 ED 80 00
     0180 80 80 80 80 80 BD D0 F9 F7 F8 C0 80 EE DC BE 80
     0190 BD F9 F8 80 F7 80 F6 BE BD 80 F1 D0 DC B7 80 9C
     01A0 BE B7 F5 BE ED 80 00

            ***** Hex Dump - Main Program *****
                        Wumpus

     0200 84 DE 85 DD A9 07 85 DF A0 05 A2 05 B1 DD C9 00
     0210 D0 01 60 95 E8 88 CA 10 F5 D8 18 98 65 DF 85 DC
     0220 20 28 02 A4 DC 4C 0A 02 A2 05 86 DB A9 52 8D 07
     0250 17 20 5E 02 2C 07 17 10 F8 C6 DB D0 EF 60 A9 7F
     0240 8D 41 17 A0 00 A2 09 B9 E8 00 84 FC 20 4E IF C8
     0250 C0 06 90 F5 20 5D IF 60 20 8C 1E 20 5E 02 D0 F8
     0260 20 5E 02 F0 FB 20 5E 02 F0 F6 20 6A IF C9 15 10
     0270 E7 60 8A 48 D8 58 A5 41 65 44 65 45 85 40 A2 04
     0280 B5 40 95 41 CA 10 F9 85 C0 68 AA A5 C0 60 60 A2
     0290 04 D5 CB F0 05 CA 10 F9 60 20 72 02 29 0F C9 04
     02A0 50 0D 20 B2 02 AD 06 17 29 05 AA B5 C6 85 CB A5
     02B0 CB 60 A6 CA B5 50 85 C6 B5 60 85 C7 B5 70 85 C8
     02C0 B5 80 85 C9 60 A2 05 D5 C6 F0 05 CA 10 F9 60 A0
     02D0 01 20 00 02 A0 00 A9 AC 20 00 02 4C D4 02 A4 E0
     02E0 B9 E7 IF 85 9F A0 00 A9 90 20 00 02 4C 2C 05 F6
     02F0 BE BD 80 F1 D0 DC B7 80 9C BE B7 F5 BE ED 80 00

     0500 EA EA EA EA EA A9 FF A2 0E 95 C1 CA 10 FB A9 05
     0510 85 E0 A0 05 10 02 A0 00 A2 05 20 72 02 29 0F D5
     0520 CA F0 F5 CA 10 F9 99 CA 00 88 10 EC 20 B2 02 A0
     0550 05 84 E1 B9 C6 00 20 8F 02 8A 50 17 E0 05 50 04
     0540 A9 19 10 0A EO 01 50 04 A9 0E 10 02 A9 00 A0 01
     0550 20 00 02 C6 E1 A4 E1 10 DA A4 CA B9 E7 IF 85 0C
     0560 A2 05 B4 C6 B9 E7 IF 95 20 CA 10 F6 A0 00 98 20
     0570 00 02 20 58 02 C9 14 F0 48 20 C5 02 85 CA 8A 50
     0580 EB A5 CA A2 04 D5 C1 F0 55 CA 10 F9 20 8F 02 8A
     0590 50 9A E0 05 10 17 E0 01 10 ID A0 00 A9 26 20 00
     05A0 02 20 99 02 C5 CA D0 84 A9 26 4C CF 02 A0 01 A9
     05B0 5D 20 00 02 4C 16 05 A9 4F 4C CF 02 A9 65 4C CF
     05C0 02 A0 00 A9 B7 20 00 02 20 58 02 20 C5 02 85 D1
     05D0 8A 50 EE A5 D1 A6 E0 95 C0 C5 CB F0 15 C6 E0 F0
     05E0 1A A6 CB 20 B4 02 20 A5 02 C5 CA F0 BB 4C DE 02
     05F0 EA EA A0 01 A9 80 20 00 02 F0 F7 A9 75 20 CF 02

<p align="center">
113</p>
<hr>
<a name="p114">






<center><img src="fbokpics/114.gif" width="381" height="374" alt="UTILITIES"></center>







<p align="center">
114</p>
<hr>

<img src="fbokpics/b.gif" width=49 height=56 alt="branch"><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/h.gif" width=56 height=57><div  ALIGN="RIGHT">BY JIM BUTTERFIELD</div>

Load this fully relocatable program anywhere.
Once it starts, key in the last two digits of
a branch instruction address; then the last two
digits of the address to which you are branching;
and read off the relative branch address.

For example, to calculate the branch to ADDR near the
end of this program:  hit 26 (from 0026); 20 (from 0020)
and read F8 on the two right hand digits of the display.
The program must be stopped with the RS key.

0000 D8        START CLD
0001 18              CLC
0002 A5 FA           LDA POINTL
0004 E5 FB           SBC POINTH
0006 85 F9           STA INH
0008 C6 F9           DEC INH
000A 20 1F 1F        JSR SCANDS
000D 20 6A 1F        JSR GETKEY
0010 C5 F3           CMP LAST
0012 F0 EC           BEQ START
0014 85 F3           STA LAST
0016 C9 10           CMP #$10
0018 B0 E6           BOS START
00lA 0A              ASL A
001B 0A              ASL A
001C 0A              ASL A
001D 0A              ASL A
00lE A2 04           LDX #4
0020 0A        ADD   ASL A
0021 26 FA           ROL POINTL
0023 26 FB           ROL POINTH
0025 0A              DEX
0026 D0 F8           BNE ADDR
0028 F0 D6           BEQ START


Keep in mind that the maximum "reach" of a branch instruction
is 127 locations forward (7F) or 128 locations backward (80).
If you want a forward branch, check that the calculated branch
is In the range 0l to 7F. Similarly, be sure that a backward
branch produces a value from 80 to FE. In either case, a value
outside these limits means that your desired branch is out of
reach.

<p align="center">
115</p>
<hr>

<img src="fbokpics/b.gif" width=49 height=56 alt="browse"><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/w.gif" width=67 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><div  ALIGN="RIGHT">Jim Butterfield</div>

Load BROWSE anywhere in memory - it's fully relocatable -
start it up, and presto!  It dcesn't seem to do anything.

BROWSE is a mini-Monitor that perrorms most or the functions
of the regular KIM monitor; but you'll find it handy for entering
and proof-reading programs.  Most of the keys work the same as
usual; but PC.  +. and DA are slightly different.

When you hit + you go to the next address as usual .. but then
you keep on going!  Great for proofreading a rpogram you've
just entered.  It lets you browse through memory.

Hit PC and the program steps backwards, so you can look at
a value you've just passed.  All other keys instantly freeze
the browsing process; you can hit AD or DA to stop on a given
address, or just enter a new address if you wish.

Key DA operates a little differently from the regular KIM
function.  To enter data, first set up the address <u>before</u>
the one you want to change.  As you enter the data, BROWSE
will autonatically step forward to the next address - and
then the next one, and so on.  You never need to hit the +
key during entry; and the display will show the last value
you have entered.

0110 8        START  CLD         clear decimal mode
0111 A9 13           LDA #$13    GO key image
0113 85 FE           STA CHAR
00l5 A9 00           LDA #$0     value zero..
0117 85 FA           STA POINTL  .,to address pointer
0119 85 FB           STA POINTH
011B C6 F3    LOOP   DEC WAIT    main program loop
011D D0 0E           BNE LP1     pause 1 second
011F A5 FD           LDA TMPX    up or down?
0121 F0 0A           BEQ LP1     neither
0123 10 69           BPL UP
0125 A5 FA           LDA POINTL  down, decrement
0127 D0 02           BNE DOWN    next page?
0129 C6 FB           DEC POINTH
012B C6 FA    DOWN   DEC POINTL
012D 20 19 1F LPl    JSR SCAND   light display
0130 20 6A 1F        JSR GETKEY  check keys
0133 C5 FE           CMP CHAR    same key as last time?
0135 F0 E4           BEQ LOOP
0137 85 FE           STA CHAR    note new key input
0139 C9 15           CMP #$15    no key?
013B F0 DE           BEQ LOOP    yes, skip
013D A2 00           LDX #0
013F 86 FD           STX TMPX    clear up/down flag

<p align="center">
116</p>
<hr>


0141 C9 10           CMP #$10    numeric?
0143 90 1C           BCC NUM     yes, branch
0145 86 F4           STX DIGIT
0147 C9 11           CMP #$11    DA?
0149 F0 0l           BEQ OVER    yes, leave X=0
014B E8              INX         no, set X=l
014C 86 FF    OVER   STX MODE    0 or 1 into MODE
014E C9 12           CMP #$12    +?
0150 D0 02           BNE PASS    no. skip
0152 E6 FD           INC TMPX    yes, set browse
0154 C9 14    PASS   CMP #$14    PC?
0156 D0 02           BNE PASS2   no, skip
0158 C6 FD           DEC TMPX    yes, down-browse
015A C9 13    PASS2  CMP #$13    GO?
015C D0 CF           BNE LP1     no, loop
015E 4C C8 1D        JMP GOEXEC  start program
              ; numeric (hex) entry comes here
0161 0A 0A    NUM    ASLA ASLA   position digit
0163 0A 0A           ASLA ASLA   to left
0165 85 FC           STA TEMP
0167 A2 04           LDX #4      4 bits to move
0169 A4 FF           LDY MODE    AD or DA?
016B D0 17           BNE ADDR    branch if AD node
016D C6 F4           DEC DIGIT   time to step?
016F 10 07           BPL SAME    no, skip
0171 20 63 1F        JSR INCPT   yes, step
0174 E6 F4           INC DIGIT   ..and restore
0176 E6 F4           INC DIGIT         ..digit count
0178 B1 FA    SAME   LDA (POINTL),Y   get data
017A 06 FC    DADA   ASL TEMP       move a bit..
017C 2A              ROL A          ..into data
017D 91 FA           STA (POINTL),Y
017F CA              DEX
0180 D0 F8           BNE DADA       last bit?
0182 F0 A9           BEQ LPl        yes, exit
0184 0A       ADDR   ASLA         move bits
0185 26 FA           ROL POINTL   into address
0187 26 FB           ROL POINTH
0189 CA              DEX
018A D0 F8           BNE ADDR
018C F0 9F           BEQ LP1
              ; increment address for browsing
018E 20 63 1F UP     JSR INCPT
0191 AA              TAX
0192 10 99           BPL LP1
0194          end

<p align="center">
117</p>
<hr>


<img src="fbokpics/d.gif" width=50 height=56 alt="directory"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/y.gif" width=43 height=56><div  ALIGN="RIGHT">Jim Butterfield</div>

     Ever thought about the best way to organize your programs on tape?
I used to call the first program on each tape number 01, the next 02, etc.
Mostly I was afraid of forgetting the ID number and having trouble reading
it in.  Program DIRECTORY (below) fixes up that part of the problem and
liberates you to choose a better numbering scheme.

     You've got 254 program IDs to choose frorn ... enough for most program
libraries with some to spare.

     So every program and data file would carry a unique number ... and if
you've forgotten what's on a given tape, just run DIRECTORY and get all the
IDs.

     Another thing that's handy to know is the starting address (SA) of a
program, expecially if you want to copy it to another tape.  (Ending add-
resses are easy ... just load the program, then look at the contents of
l7ED and 17EE).  Well, DIRECTORY shows starting addresses, too.


     The program is fully relocatable, so put it anywhere convenient.
Start at the first instruction (0000 in the listing).  Incidentally, 0001
to 001D of this program are functionally identical to the KIM monitor 188C
to 18C1.

     After you start the program, start your audio tape input.  When DI-
RECTORY finds a program, it will display the Start Address (first four
digits) and the Program ID.  Hit any key and it will scan for the next
program.


        0000  D8            GO       CLD
        0001  A9 07                  LDA #$07      Directional reg
        0003  8D 42 17               STA SBD
        0006  20 41 1A      SYN      JSR RDBIT     Scan thru bits...
        0009  46 F9                  LSR INH       ..shifting new bit
        000B  05 F9                  ORA INH       ..into left of
        000D  85 F9                  STA INH       ..byte INH
        000F  C9 16         TST      CMP #$16      SYNC character?
        0011  D0 F3                  BNE SYN       no, back to bits
        0013  20 24 1A               JSR RDCHT     get a character
        0016  C6 F9                  DEC INH       count 22 SYNC's
        0018  10 F5                  BPL TST
        001A  C9 2A                  CMP #$2A      then test astk
        001C  D0 F1                  BNE TST       ..or SYNC
        001E  A2 FD                  LDX #$FD      if asterisk,
        0020  20 F3 19      RD       JSR RDBYT     stack 3 bytes
        0023  95 FC                  STA POINTH+1,x       into display
        0025  E8                     INX                  area
        0026  30 F8                  BMI RD
        0028  20 1F 1F      Show     JSR SCANDS    ...and shine
        002B  D0 D3                  BNE Go        until keyed
        002D  F0 F9                  BEQ SHOW      at's all folks

<p align="center">
118</p>
<hr>

<img src="fbokpics/h.gif" width=56 height=57 alt="hypertape"><img src="fbokpics/y.gif" width=43 height=56><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57>


 How long does it take you to load a full lK of KIM-1 
 memory?  Over two minutes?  And if you're going for 
 memory expansion, how long will It take you to load 
 your 8K? Twenty minutes?

 Hold onto your hats. Program HYPERTAPE! will write 
 <u>fully</u> <u>compatible</u> tapes in a fraction of the time. 
 You can load a full 1K in 21 seconds.

 Fully compatible means this: once you've written 
 a tape using HYPERTAPE! you can read it back in using 
 the normal KIM-1 program (starting at 1873 as usual). 
 And the utilities and diagnostic programs work on this
 super-compressed data (e.g., DIRECTORY and VUTAPE).

 You'll need some memory space for the program, of course. 
 If you have memory expansion, there'll be no problem 
 finding space, of course.  But if you're on the basic 
 KIM-1, as I am, you'll have to "squeeze in" HYPERTAPE! 
 along with the programs you're dumping to tape.  I try 
 to leave page 1 alone usually (the stack can overwrite 
 your program due to bugs), so I stage HYPERTAPE! in 
 that area.  For the convenience of relocation, the 
 listing underlines those addresses that will need
 changing. There are also four values needed in page zero which 
 you may change to any convenient location.

 For those Interested in the theory of the thing, I 
 should mention: HYPERTAPE! is not the limit.  If you 
 wished to abandon KIM-1 monitor compatibility, you 
 could continue to speed up tape by a factor of 4 or 5
 times more.  Can you imagine reading 1K in four seconds? 
 For the moment, however, HYPERTAPE! is plenty fast for me.

                ; this program also included in Super-dupe
0100 A9 AD      DUMP    LDA #$AD
0102 8D EC 17           STA VEB
0105 20 32 19           JSR INTVEB   set up sub
0108 A9 27              LDA #$27
010A 85 F5              STA GANG    flag for SBD
010C A9 BF              LDA #$BF
010E 8D 43 17           STA PBDD
0111 A2 64              LDX #$64
0113 A9 16              LDA #$16
0115 20 61 01           JSR HIC
0118 A9 2A              LDA #$2A
011A 20 88 01           JSR OUTCHT
011D AD F9 17           LDA ID
0120 20 70 01           JSR OUTST
0123 AD F5 17           LDA SAL
<p align="center">
119</p>
<hr>

0126 20 6D 01           JSR OUTBTC
0129 AD F6 17           LDA SAH
012C 20 6D 01           JSR OUTBTC
012F 20 EC 17   DUMPT4  JSR VEB
0132 20 6D 01           JSR OUTBTC
0135 20 EA 19           JSR INCVEB
0138 AD ED 17           LDA VEB+1
013B CD F7 17           CMP EAL
013E AD EE 17           LDA VEB+2
0141 ED F8 17           SBC EAH
0144 90 E9              BCC DUMPT4
0146 A9 2F              LDA #$2F
0148 20 88 01           JSR OUTCHT
014B AD E7 17           LDA CHKL
014E 20 70 01           JSR OUTBT
0151 AD E8 17           LDA CHKH
0154 20 70 01   EXIT    JSR OUTBT
0157 A2 02              LDX #$02
0159 A9 04              LDA #$04
015B 20 61 01           JSR HIC
015E 4C 5C 18           JMP DISPZ
                ;subroutines
0161 86 F1      HIC     STX TIC
0163 48         HIC1    PHA
0164 20 88 01           JSR OUTCHT
0167 68                 PLA
0168 C6 F1              DEC TIC
016A D0 F7              BNE HIC1
016C 60                 RTS
016D 20 4C 19   OUTBTC  JSR CHKT
0170 48         OUTBT   PHA
0171 4A                 LSR A
0172 4A                 LSR A
0173 4A                 LSR A
0174 4A                 LSR A
0175 20 7D 01           JSR HEXOUT
0178 68                 PLA
0179 20 7D 01           JSR HEXOUT
017C 60                 RTS
                ;
017D 29 0F      HEXOUT  AND #$0F
017F C9 0A              CMP #$0A
0181 18                 CLC
0182 30 02              BMI HEX1
0184 69 07              ADC #$07
0186 69 30      HEX1    ADC #$30
0188 A0 07      OUTCHT  LDY #$07
018A 84 F2              STY COUNT
018C A0 02      TRY     LDY #$02
018E 84 F3              STY TRIB
0190 BE BE 01   ZON     LDX NPUL,Y
0193 48                 PHA
<p align="center">
120</p>
<hr>

0194 2C 47 17   ZON1    BIT CLKRDI
0197 10 FB              BPL ZON1
0199 B9 BF 01           LDA TIMG,Y
019C 8D 44 17           STA CLKIT
019F A5 F5              LDA GANG
01A1 49 80              EOR #$80
01A3 8D 42 17           STA SBD
01A6 85 F5              STA GANG
01A8 CA                 DEX
01A9 D0 E9              BNE ZON1
01AB 68                 PLA
01AC C6 F3              DEC TRIB
01AE F0 05              BEQ SETZ
01B0 30 07              BMI ROUT
01B2 4A                 LSR A
01B3 90 DB              BCC ZON
01B5 A0 00      SETZ    LDY #0
01B7 F0 D7              BEQ ZON
01B9 C6 F2      ROUT    DEC COUNT
01BB 10 CF              BPL TRY
01BD 60                 RTS
                ;frequency/density controls
01BE 02         NPUL    .BYTE $02
01BF C3 03 7E   TIMG    .BYTE $C3, $03, $7E


          ***** Hex Dump - Hypertape *****


0100-  A9 AD 8D EC 17 20 32 19 A9 27 85 F5 A9 BF 8D 43
0110-  17 A2 64 A9 16 20 61 01 A9 2A 20 88 01 AD F9 17
0120-  20 70 01 AD F5 17 20 6D 01 AD F6 17 20 6D 01 20
0130-  EC 17 20 6D 01 20 EA 19 AD ED 17 CD F7 17 AD EE
0140-  17 ED F8 17 90 E9 A9 2F 20 88 01 AD E7 17 20 70
0150-  01 AD E8 17 20 70 01 A2 02 A9 04 20 61 01 4C 5C
0160-  18 86 F1 48 20 88 01 68 C6 F1 D0 F7 60 20 4C 19
0170-  48 4A 4A 4A 4A 20 7D 01 68 20 7D 01 60 29 0F C9
0180-  0A 18 30 02 69 07 69 30 A0 07 84 F2 A0 02 84 F3
0190-  BE BE 01 48 2C 47 17 10 FB B9 BF 01 8D 44 17 A5
01A0-  F5 49 80 8D 42 17 85 F5 CA D0 E9 68 C6 F3 F0 05
01B0-  30 07 4A 90 DB A0 00 F0 D7 C6 F2 10 CF 60 02 C3
01C0-  03 7E


     Thanks go to Julien Dub&eacute; for his help in staging early 
     versions oh HYPERTAPE.
<p align="center">
121</p>
<hr>

<img src="fbokpics/m.gif" width=67 height=56 alt="memory test"><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/m.gif" width=67 height=56><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/y.gif" width=43 height=56><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/t.gif" width=44 height=55><div  ALIGN="RIGHT">Jim         
Butterfield</div>
Testing RAM isn't just a question of storing a value and
then checking it.  It'S a important to test for interference
between locations.  Such tests often involve writing to one
location and then checking all other locations to see they
haven't been disturbed; this can be time consuming.

This program checks memory thoroughly and runs exceptionally
fast.  It is adapted from an algorithm by Knaizuk and Hartmann
published in 'IFEE. Transactions on Computers', April 1977.

The program first puts value FF in every location under test.
Then it puts 00 in every third location, after which it tests
all locations for correctness.  The test is repeated twice more
with the positions of the 00's changed each time.  Finally,
the whole thing is repeated with the FF and 00 values 
interchanged.

<u>To run</u>:  Set the addresses of the first and last memory pages
you wish to test into locations 0000 and 0001 respectively.
Start the program at address 0002; it will halt with a memory
address on the display.  If no faults were round, the address
will be one location past the last address tested.  If a fau1t
is found, its address will be displayed.

Example:  To test 0100 to 02FF (pages 0l and 02) in KIM:
Set 0000 to 01, 0001 to 02, start program at 0002.  If memory
is good, see 0300 (=02FF + 1).  Now if you try testing
0100 to 2000 (0000=0l,000l=20) the program will halt at
the first bad location - this will be 0400 if you haven't
added memory.

 0000 xx       BEGIN  xx       starting page for test
 0001 xx       END    xx       ending page for test
 0002 A9 00    START  LDA #0       zero pointers
 0004 A8              TAY          for low-order
 0005 85 FA           STA P0INTL   addresses;
 0007 85 70    BIGLP  STA FLAG      =00 first pass, =FF second pass
 0009 A2 02           LDX #2
 000B 86 72           STX MOD     set 3 tests each pass
 000D A5 00    PASS   LDA BEGIN   set pointer to..
 000F 85 FB           STA POINTH  ..start of test area
 0011 A6 01           LDX END
 0013 A5 70           LDA FLAG
 0015 49 FF           EOR #$FF    reverse FLAG
 0017 85 71           STA FLIP    ..FF first pass. =00 second pass
 0019 91 FA    CLEAR  STA (POINTL).Y   write above FLIP value..
 001B C8              INY              ..into all locations
 001C D0 FB           BNE CLEAR
 001E E6 FB           INC POINTH
 0020 E4 FB           CPX POINTH
 0022 B0 F5           BCS CLEAR

<p align="center">
122</p>
<hr>

              ; FLIP value in an locatiom - now change 1 in 3
 0024 A6 72           LDX MOD
 0026 A5 00           LDA BEGIN   set pointer..
 0028 85 FB           STA POINTH   ..back to start
 002A A5 70    FILL   LDA FLAG    change value
 002C CA       TOP    DEX
 002D 10 04           BPL SKIP    skip 2 out of 3
 002F A2 02           LDX #2      restore 3-counter
 0031 91 FA           STA (POINTL),Y  change 1 out of 3
 0033 C8       SKIP   INY
 0034 D0 F6           BNE TO?
 0036 E6 FB           INC POINTH  new page
 0038 A5 01           LDA END     have we passed..
 003A C5 FB           CMP POINTH  ..end of test area?
 003C B0 EC           BCS FILL    nope, keep going
               ; memory set up - now test it
 003E A5 00           LDA BEGIN   set pointer..
 0040 85 FB           STA POINTH  ..back to start
 0042 A6 72           LDX MOD     set up 3-counter
 0044 A5 71    POP    LDA FLIP    test for FLIP value..
 0046 CA              DEX         ..2 out of 3 times..
 0047 10 04           BPL SLIP         - or -
 0049 A2 02           LDX #2        1 out of 3..
 004B A5 70           LDA FLAG    test for FLAG value;
 004D D1 FA    SLIP   CMP (POINTL).Y   here's the test...
 004F D0 15           BNE OUT         branch if failed
 0051 C8              INY
 0052 D0 F0           BNE POP
 0054 E6 FB           INC POINTH
 0056 A5 01           LDA END
 0058 C5 FB           CMP POINTH
 005A B0 E8           BCS POP
               ; above test OK - change & repeat
 005C C6 72           DEC MOD     change 1/3 position
 005E 10 AD           BPL PASS      .. & do next third
 0060 A5 70           LDA FLAG    invert..
 0062 49 FF           EOR #$FF      ..flag for pass two
 0064 30 A1           BMI BIGLP
 0066 84 FA    OUT    STY P0INTL  put low order adds to display
 0068 4C 4F 1C        JMP START      ...and exit to KIM
                                                          006B

             ***** Hex Dump - Memory Test *****



0000 00 00 A9 00 A8 85 FA 85 70 A2 02 86 72 A5 00 85
0010 FB A6 01 A5 70 49 FF 85 71 91 FA C8 D0 FB E6 FB
0020 E4 FB B0 F5 A6 72 A5 00 85 FB A5 70 CA 10 04 A2
0030 02 91 FA C8 D0 F6 E6 FB A5 01 C5 FB B0 EC A5 00
0040 85 FB A6 72 A5 71 CA 10 04 A2 02 A5 70 Dl FA D0
0050 15 C8 D0 F0 E6 FB A5 01 C5 FB B0 E8 C6 72 10 AD
0060 A5 70 49 FF 30 Al 84 FA 4C 4F 1C

<p align="center">
123</p>
<hr>

<img src="fbokpics/m.gif" width=67 height=56 alt="mini dis"><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/n.gif" width=57 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/s.gif" width=49 height=57><div  ALIGN="RIGHT">By Dan Lewart</div>

One day I was single-stepping through a program and not
being too alert, I kept going after the program ended.
Then I noticed I was going through instructions not in any
OP-code table. What was being executed? With a little
luck I found that many nonexistent codes would duplicate
others with only one bit changed. I haven't looked into
it very deeply, but here are two examples: 17 is the same
as 16 (ASL-Z, PAGE) and FF is the same as FE (INC ABS,X).

By single-stepping I could determine the number of bytes
in all instructions. This worked for all instructions except
for 02,12,22,32,42,52,62,72,92,B2,D2 and F2, which
blank the display. After filling in the Bytes per Instruction
table many patterns became obvious. For example, the
op-code ending with digits 8 and A could be summarized as
having a bit pattern of xxxxl0x0, where "x" means don't
care. This covers all possibilities and when a number of
this form is ANDed with 00001101 (mask all the x bits) the
result will be 00001000. By doing this for all 0 (illegal),
1 and 3 byte instructions and having the 2 byte instructions
"whatever's left over" I had the basis of my semi-disassembler.
The only odd byte length is that of 20 (JSR) which "should"
be only 1 byte long.

Though this is not a full disassembler, it has helped me to
write several nrograms, including itself. To relocate the
program change locations 374-6, 379-B and 38E-390 to jump
to the appropriate locations. If you have a program in page
1 or don't want to write on the stack, change 397 and 39A
to EA (NOP).

To run the program, store 00 in 17FA and 03 in 17FB. Go
to the beginning of your program and press "ST". You will
then see the first instruction displayed. If it is illegal, the
location and opcode will flash on and off. In that case, press
"RS". To display the next instruction press "+". To display
the current address and opcode press "PC", at any time. To
backstep press "B". When you have backstepped to the
beginning of your program, or changed locations 397 and 39A,
pressing "B" acts like "PC".

0300  D8      START      SED
0301  A2 FF              LDX #$FF     INITIALIZE STACK
0303  9A                 TXS          POINTER
0304  A0 00   INIT       LDY #$00     (E6-EE)=0
0306  A2 09              LDX #$09
0308  94 E5   INIT1      STY 0055,X
030A  CA                 DEX
030B  D0 FB              BNE INITl
030D  E8                 INX           X=1

<p align="center">
124</p>
<hr>

030E  B1 FA    LENGTH   LDA (POINTL),Y GET OPCODE, FrND LENGTH
0310  C9 20             CMP#$20        ANALYZE BIT PATTERNS
0312  F0 3B             SEQ 3BYTE      %00100000 ; 3 BYTES
0314  29 9F             AND #$9F       "X" MEANS DON'T CARE
0316  F0 35             SEQ 1BYTE      %OXXOOOOO ; 1 BYTE (20)
0318  C9 92             CMP #$92
031A  F0 lA             SEQ FLASH      %1XX10010 ; ILLEGAL (B2,D2)
031C  A8                TAY            STORE ThMPORARJLY
031D  29 1D             AND #$1D
031F  C9 19             CMP #$19
0321  F0 2C             BEQ 3BYTE      %xxx110x1 ; 3 BYTES (59,B9)
0323  29 0D             AND 34 0D
0325  C9 08             CMP #$08
0327  F0 24             SEQ 1BYTE      %xxx~oxo ; 1 BYTE (D8,4A)
0329  29 0C             AND #$0C
032B  C9 0C             CMP #$0C
032D  F0 20             SEQ 3BYTE      %xxxx11xx  ; 3 BYTES (4C,EE)
032F  98                TYA            RESTORE
0330  29 8F             AND #$8F
0332  C9 02             CMP #$02       %OXXXOO1O ; ILLEGAL (22,52)
0334  D0 18             SNE 2BYTE      ALL LEFTOVERS ; 2 BYTES
0336  E6 EC    FLASH    INC 00EC       FLIP BIT 0
0338  A9 FF             LDA #$FF       LOOP FOR 1/4 SEC.
033A  8D 07 17          STA 1707
033D  A5 EC    FLASH1   LDA OOEC       SLINK ON OR OFF
033F  29 31             AND #$01
0341  F0 03             SEQ FLASH2     SIT 0-0 ; BLINK OFF
0343  20 19 1F          JSR SCAND      BIT On  ; BLINK ON
0346  2C 07 17 FLASH2   BIT 1707
0349  30 EB             SMI FLASH
034B  10 F0             SPL FLASH1
034D  E8         lBYTE   INX
034E  E8         2BYTE   INX
034F  8A         3BYTE   TXA      CENTER CODE
0350  49 07              EOR #$07
0352  85 ED              STA 00ED
0354  A4 EE      CONVRT  LDY 4SEE   LOOP FOR EACH BYTE
0356  Bl FA             LDA (POINTL),Y CONVERT AND STORE
0358  48                 PHA        IN ES - FE
0359  4A 4A              LSR's
035B  4A 4A              LSR's
035D  A8                 TAY
035E  B9 E7 1F           LDA TABLE,?
0361  95 E5              STA 00E5,X
0363  E8                 INX
0365  29 0F              AND #$0F
0367  A8                 TAY
0368  B9 E7 1F           LDA TABLE,Y
036B  95 E5              STA 00E5,x
036D  E8                 INX
036E  E6 EE              INC DOBE
0370  E4 ED              CPX 00EE
0372  90 E0              BCC CONVRT
0374  20 AF 03   K DOWN  JSR DISP   DISPLAY UNTIL ALL KEYS
0377  D0 FB              BNE K DOWN  ARE UP
0379  20 AF 03   K UP    JSR DISP   DISPLAY AND GETKEY

<p align="center">
125</p>
<hr>

037C  20 6A 1F            JSR GETKEY
037F  C9 0B       B?      CMP #$0B        IS "B" PRESSED?
0381  D0 0E               BNE PLUS?       NO, BRANCH
0383  BA          BCKSTP  TSX
0384  E0 FF               CPX #FF         IS STACK EMPTY?
0386  F0 20               BEQ WINDOW      YES, ACT LIKE "PC"
0388  68                  PLA PULL        FB AND FA
0389  85 FB               STA 00FB        DISPLAY WORD
038B  68                  PLA
038C  85 FA               STA 00FA
038E  4C 04 03    NEWORD  JMP INIT
0391  C9 12     PLUS?    CMP #$12        IS "+" PRESSED?
0593  D0 0F              BNE PC?         NO, BRANCH
0395  A5 FA     STEP     LDA 00FA        PUSH FA AND FB
0397  48                 PHA
0398  A5 FB              LDA 00FB
039A  48                 PHA
039B  20 63 1F  STEP 1   JSR INCPT       FIND NEW LOCATION
039E  C6 EE              DEC 00EE        DISPLAY WORD
03A0  F0 EC              BEQ NEWORD
03A2  D0 F7              BNE STEP 1
03A4  C9 14     PC?      CMP #$14        IS "PC" PRESSED?
03A6  D0 D1              BNE K UP        NO, GET KEY
05A8  20 19 1F  WINDOW   JSR SCAND       DISPLAY LOCATION
03AB  F0 CC              BEQ K UP        UNTIL KEY RELEASED
03AD  D0 F9              BNE WINDOW      THEN GET KEY
03AF  A9 7F     DISP     LDA #$7F        SEGMENTS TO OUTPUT
03B1  8D 41 17           STA PADD
03B4  A2 08              LDX #$08        INITIALIZE
03B6  A0 00              LDY #$00
03B8  84 FC     DISP 1   STY 00FC
03BA  B9 E6 00           LDA 00E6,Y      GET CHARACTER
03BD  20 4E 1F           JSR 1F4E        DISPLAY CHARACTER
03C0  C8                 INY           NEXT CHARACTER
03C1  C0 06              CPY #$06
03C3  90 F3              BCC DISP1
03C5  4C 3D 1F           JMP 1F3D        DONE, KEY DOWN?

           ***** HEX DUMP - MINI DIS *****


 0300 D8 A2 FF 9A A0 00 A2 09 94 E5 CA D0 FB E8 B1 FA
 0310 C9 20 F0 3B 29 9F F0 35 C9 92 F0 1A A8 29 1D C9
 0320 19 F0 2C 29 0D C9 08 F0 24 29 0C C9 0C F0 20 98
 0330 29 8F C9 02 D0 18 E6 EC A9 FF 8D 07 17 A5 EC 29
 0340 01 F0 03 20 19 1F 2C 07 17 30 EB 10 F0 E8 E8 8A
 0350 49 07 85 ED A4 EE B1 FA 48 4A 4A 4A 4A A8 B9 E7
 0360 1F 95 E5 E8 68 29 0F A8 B9 E7 1F 95 E5 E8 E6 EE
 0370 E4 ED 90 E0 20 AF 03 D0 FB 20 AF 03 20 6A 1F C9
 0380 0B D0 0E BA E0 FF F0 20 68 85 FB 68 85 FA 4C 04
 0390 03 C9 12 D0 0F A5 FA 48 A5 FB 48 20 63 1F C6 EE
 03A0 F0 EC D0 F7 C9 14 D0 D1 20 19 1F F0 CC D0 F9 A9
 03B0 7F 8D 41 17 A2 08 A0 00 84 FC B9 E6 00 20 4E 1F
 03C0 C8 C0 06 90 F5 4C 3D 1F

<p align="center">
126</p>
<hr>

<img src="fbokpics/m.gif" width=67 height=56 alt="move it"><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/v.gif" width=45 height=56><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/t.gif" width=44 height=55><div  ALIGN="RIGHT">By Lew Edwards</div>

 ANOTHER move program?  This one moves anything anywhere!
 No limit to number of bytes, or locations in memory, or
 overlapping of source and destination. Use it to lift sections
 of code from other programs, close in or open up gaps for
 altering programs, moving programs to another location (use
 Butterfield's RELOCATE to take care of the branch and address
 correction). Locate it wherever you have the room.

 Use is straight forward. Old start address goes in D0,1 ;
 old end address in D2,3; new start address in D4,D5 before
 running the program which starts at 1780, or wherever you
 want to have it in your system. Program uses zero page
 locations D0 thru P9 to do the job.

1780  D8        START     CLD
1781  A0 FF               LDY #$FF       STORE TEST VALUE
1783  58                  SEC
1784  A5 D2               LDA OEAL       HOW MANY BYTES?
1786  E5 D0               SBC OSAL       TO MOVE?
1788  85 D8               STA BCL
178A  A5 D5               LDA OEAH
178C  E5 D1               SBC OSAH
178E  85 D9               STA BCH
1790  18                  CLC
1791  A5 D8               LDA BCL        ADD THE COUNT TO
1793  65 D4               ADC NSAL       THE NEW START TO
1795  85 D6               STA NEAL       GET A NEW END
1797  A5 D9               LDA BCH
1799  65 D5               ADC NSAH
179B  85 D7               STA NEAH
179D  E6 D8               INC BCL        ADJUST THE BYTE COUNT
179F  E6 D9               INC BCH        TO PERMIT ZERO TESTING
17A1  38                  SEC
17A2  A5 D4               LDA NSAL       IF NEW LOCATION
17A4  E5 D0               SBC OSAL       HIGHER THAN OLD
17A6  A5 D5               LDA NSAH       CARRY FLAG IS SET
17A8  E5 D1               SBC OSAH
17AA  A2 00     LOOP      LDX #$00       HIGH POINTER INDEX
17AC  90 02               BCC MOVE
17AE  A2 02               LDX #$02       LOW POINTER INDEX
17B0  A1 D0     MOVE      LDA OSAL,X     MOVE OLD
17B2  81 D4               STA NSAL,X     TO NEW
17B4  90 14               BCC DOWN
17B6  C6 D2               DEC OEAL       ADJUST UP POINTER, (OLD)
17B8  98                  TYA            BELOW ZERO?
17B9  45 D2               FOR OEAL
17BB  D0 02               BNE NO         NO, ENOUGH

<p align="center">
127</p>
<hr>

17BD  C6 D5               DEC 0EAH       YES, ADJUST THE HIGH BYTE
17BF  C6 D6    NOT        DEC NEAL       ADJUST THE OTHER ONE (NEW)
17C1  98                  TYA
17C2  45 D6               EOR NEAL       NEED HIGH BYTE ADJUSTED?
17C4  D0 02               BNE NEIN       NO
17C6  C6 D7               DECH NEAH      YES, DO IT
17C8  B0 0C    NEIN       BCS COUNT
17CA  E6 D0    DOWN       INC OSAL       ADJUST "OLD" DOWN POINTER
17CC  D0 02               BNE NYET
17CE  E6 D1               INC OSAH       AND THE HIGH BYTE IF NEEDED
17D0  E6 D4    NYET       INC NSAL       AND THE "NEW" ONE
17D2  D0 02               BNE COUNT
17D4  E6 D5               INC NSAH
17D6  C6 D8    COUNT      DEC BCL        TICK OFF THE BYTES,
17D8  D0 02               BNE ONE        ENOUGH FINGERS?
17DA  C6 D9               DEC BCH        USE THE OTHER HAND
17DC  D0 CC    ONE        BNE LOOP       'TIL THEYT RE ALL DONE
17DE  00       DONE       BRK            & BACK TO MONITOR

    P.S. Don't forget to set the IRQ vector for the break
           (KIM - 1C 00 at 17FE,FF)

                   ***** Hex Dump " Movit *****

     1780 D8 A0 FF 58 A5 D2 E5 D0 85 D8 A5 D5 E5 D1 85 D9
     1790 18 A5 D8 65 D4 85 D6 A5 D9 65 D5 85 D7 E6 D8 E6
     17A0 D9 58 A5 D4 E5 D0 A5 D5 E5 D1 A2 00 90 02 A2 02
     17B0 A1 D0 81 D4 90 14 C6 D2 98 45 D2 D0 02 C6 D5 C6
     17C0 D6 98 45 D6 D0 02 C6 D7 B0 0C E6 D0 D0 02 E6 D1
     17D0 E6 D4 D0 02 E6 D5 C6 D8 D0 02 C6 D9 D0 CC 00
     17E0 00 FF F

     Addition: The last address filled can be displayed after the
     program is complete by adding the following code:
      (1) 85 FA between instructions now at 1795 and 1797
      (2) 85 FB between instructions now at 179B and 179D
      (3) replace the break at the end with 4C 4F 1C
     Use Movit to move itself to another location and then again
     to open up the necessary spaces!

<p align="center">
128</p>
<hr>


<img src="fbokpics/p.gif" width=49 height=57 alt="pll set"><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/s.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/t.gif" width=44 height=55><div  ALIGN="RIGHT">Lewis Edwards, Jr.</div>
     Having trouble loading from tape, especially on "SUPERTAPE"?  Suspect
the PLL adjustment might be off, but were afraid to adjust it, or didn't
have a meter or scope handy?  Use this program and KIM's built in hardware
to make the adjustment.  Hold the tip of the plug you plug into the tape
recorder's earphone jack to applications pin #14 and adjust the control
for 0's or combinations of 7'S and L's on the display.  "L" means the PLL
TEST line is low and "7" means it's high.  The program generates a signal
that alternates slightly below and slightly above theone generated by KIM
at 1A6B.  The regular tape input channel is utilized and decoded to con-
trol the display.

1780  A9  07         BEGN     LDA #07       Set the input
1782  8D  42  17              STA SBD
1785  A9  01                  LDA #01       and output ports
1787  8D  01  17              STA PA0
178A  85  E1                  STA E1        Initialize the toggle
178C  A9  7F                  LDA #7F
178E  8D  41  17              STA PADD      Open display channels
1791  A2  09         MORE     LDX #09       Start with the first
1793  A0  07                  LDY #07       digit   Light top & right
1795  2C  42  17              BIT SBD       if PLL output
1798  50  02                  BMI SEGS      is high
179A  A0  58                  LDY #58       otherwise left & bottom
179C  8C  40  17     SEGS     STY SAD       Turn on the segments
179F  8E  42  17              STX SBD       and the digit
17A2  2C  47  17     DELA     BIT CLKRDI    Half cycle done?
17A5  10  FB                  BPL DELA      No, wait for time up
17A7  E6  E2                  INC E2        Count the cycles
17A9  50  04                  BMI LOTO      128 ^ cycles, send low tone
17AB  A9  91         HITO     LDA #91       128 Vz cycles, send hi tone
17AD  D0  05                  BNE CLK1
17AF  A9  95         LOTO     LDA #95
17B1  EA                      NOP           Equalize the branches
17B2  8D  44  17     CLK1     STA CLK1T     Set the clock
17B5  A9  01                  LDA #01
17B7  45  E1                  BOR E1        Flip the toggle register
17B9  85  E1                  STA E1
17BB  8D  00  17              STA PA0       Toggle the output port
17BE  E8                      INX
17BF  E8                      INX           Next display digit
17C0  E0  15                  CPX #15       Last one?
17C2  D0  CF                  BNE NEXT      No, do next
17C4  F0  CB                  BEQ MORE      Yes, do more


      1780 A9 07 8D 42 17 A9 01 8D 01 17 85 E1 A9 7F 8D 41
      1790 17 A2 09 A0 07 2C 42 17 30 02 A0 58 8C 40 17 8E
      17A0 42 17 2C 47 17 10 FB E6 E2 50 04 A9 91 D0 05 A9
      17B0 95 EA 8D 44 17 A9 01 45 E1 85 E1 8D 00 17 E8 E8
      17C0 E0 15 D0 CF F0 CB

<p align="center">
129</p>
<hr>

<img src="fbokpics/r.gif" width=50 height=57 alt="relocate"><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/l.gif" width=37 height=56><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/c.gif" width=48 height=56><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/e.gif" width=47 height=57><div  ALIGN="RIGHT">Jim Butterfield</div>

     Ever long for an assembler?  Remember when you wrote that 300 byte
program - and discovered that you'd forgotten one vital instruction in the
middle?  And to make room, you'd have to change all those branches, all
those address...  Or the program with that neat piece of coding in it, that
you suddenly need to remove (say, to change it to a subroutine)...but if
you do, you'll have to fill all that empty space with NOPs?  It's enough
to make a grown programmer cry...

     Dry those tears.  Program RELOCATE will fix up all those addresses
and branches for you, whether you're opening out a program to fit in an
extra instruction, closing up space you don't need, or just moving the whole
thing someplace else.

     RELOCATE doesn't move the data.  It just fixes up the addresses before
you make the move.  It won't touch zero page addresses; you'll want them
to stay the same.  And be careful: it won't warn you if a branch instruc-
tion goes out of range.

     You'll have to give RELOCATE a lot of information about your program:

       (1)  Where your program starts.  This is the first instruction in
            your whole program (including the part that doesn't move).
            RELOCATE has to look through your whole program, instruction
            by instruction, correcting addresses and branches where neces-
            sary.  Be sure your program is a continuous series of instruc-
            tions (don't mix data in; RELOCATE will take a data value of
            10 as a BEL instruction and try to correct the branch address),
            and place a dud instruction (FF) behind your last program in-
            struction.  This tells RELOCATE where to stop.

            Place the program start address in locations EA and EB, low
            order first as usual.  Don't forget the FF behind the last
            instruction; it doesn't matter if you temporarily wipe out a
            byte of data - you can always put it back later.

       (2)  Where relocation starts, this is the first address in your
            program that you want to move.  If you're moving the whole
            program, it will be the same as the program start address,
            above.  This address is called the boundary.

            Place the boundary address in locations EC and ED, low order
            first.

       (3)  How far you will want to relocate information above the bound-
            ary.  This value is called the increment. For example, if you
            want to open up three more locations in your program, the in-
            crement will be 0003.  If you want to close up four addresses,
            the increment will be FFFC (effectively, a negative number).

            Place the increment value in locations E8 and E9, low order
            first.

<p align="center">
130</p>
<hr>

       (4)  A page limit, above which relocation should be disabled.  For
            example, if you're working on a program in the 0200 to 03FF
            range, your program might also address a timer or I/O regist-
            ers, and might call subroutines in the monitor.  You don't
            want these addresses relocated, even though they are above the
            boundary!  So your page limit would be 17, since these addresses
            are all over l700.

            On the other hand, if you have memory expansion and your program
            is at address 2000 and up, your page limit will need to be much
            higher.  You'd normally set the page limit to FF, the highest
            page in memory.

            Place the page limit in location E7.

           Now you're ready to go.  Set RELOCATE's start address, hit go - and
      ZAP!-your addresses are fixed up.

           After the run, it's a good idea to check the address now in 00EA and
      00EB - it should point at the FF at the end of your program, confirming
      that the run went OK.

           Now you can move the program.  If you have lots of memory to spare,
      you can write a general MOVE program and link it in to RELOCATE, so as to
      do the whole job in one shot.

           But if, like me, you're memory-deprived, you'll likely want to run
      RELOCATE first, and then load in a little dustom-written program to do
      the actual moving. The program will vary depending on which way you want
      to move, how far, and how much memory is to be moved.  In a pinch, you can
      use the FF option of the cassette input program to move your program.

           Last note: the program terminates with a BRK instruction.  Be sure
      your interrupt vector (at l7FE and 17FF) is set to KIM address 1C00 so
      that you get a valid "halt".

RELOCATE          Jim Butterfield

                  ; following addresses must be initialized
                  ; by user prior to run
00E7              PAGLIM *=*+!      limit above which kill relocn
00E0              ADJST  *=*+2      adjustment distance (signed)
00EA              POINT  *=*+2      start of program
00EC              BOUND  *=*+2      lower boundary for adjustment
                  ; main program starts here
0110 D8           START  CLD
0111 A0 00               LDY #0
0113 B1 EA               LDA (POINT),Y      get op code
0115 A8                  TAY                +cache in Y
0116 A2 07               LDX #7
0118 98           LOOP   TYA                restore op code
0119 3D 8E 01            AND TAB1-1,X       remove unwanted bits
011C 5D 95 01            EOR TAB2-1,X       & test the rest
011F F0 03               BEQ FOUND

<p align="center">
131</p>
<hr>

0121 CA                  DEX                on to the next test
0122 D0 F4               BNE LOOP           ...if any
0124 BC 9D 01     FOUND  LDY TAB3,X         length or flag
012? 30 0D               BMI TRIP           triple length?
0129 F0 22               BEQ BRAN           branch?
012B E6 EA        SKIP   INC POINT          mving right along..
012D D0 02               BNE INEX           ..to next op code
012F E6 EB               INC POINT+1
0131 88           INEX   DEY
0132 D0 F7               BNE SKIP
0134 F0 DA               BEQ START
                  ; length 3 or illegal
0136 C8 TRIP             INY
0137 30 D9               BMI START+2        illegal/end to BRK halt
0139 C8                  INY                set Y to 1
013A B1 EA               LDA (POINT),Y      lo-order operand
013C AA                  TAX                ...into X reg
013D C8                  INY                Y=2
013E B1 EA               LDA (POINT),Y      hi-order operand
0140 20 79 01            JSR ADJUST         change address, maybe
0143 91 EA               STA (POINT),Y      ...and put it back
0145 88                  DEY                Y=1
0146 8A                  TXA
0147 91 EA               STA (POINT),Y      ...also hi-order
0149 A0 03               LDY #3 Y=3
014B 10 DE               BPL SKIP
                  ; branch: check "to" and "from" address
14D C8            BRAN   INY                Y=1
014E A6 EA               LDX POINT          "from" addrs lo-order
0150 A5 EB               LDA POINT+1        ...& hi-order
0152 20 79 01            JSR ADJUST         change, maybe
0155 86 E0               STX ALOC           save lo-order only
0157 A2 FF               LDX #$FF           flag for "back" branches
0159 B1 EA               LDA (POINT),Y      get relative branch
015B 18                  CLC
015C 69 02               ADC #2             adjust the offset
015E 30 01               BMI OVER           backwards branch?
0160 E8                  INX                nope
0161 86 E3        OVER   STX LIMIT
0163 18                  CLC
0164 65 EA               ADC POINT          calculate "to" lo-order
0166 AA                  TAX                ...and put in X
0167 A5 E3               LDA LIMIT          00 or FF
0169 65 EB               ADC POINT+1        "to" hi-order
016B 20 79 01            JSR ADJUST         change, maybe
016E CA                  DEX                readjust the offset
016F CA                  DEX
0170 8A                  TXA
0171 38                  SEC
0172 E5 E0               SBC ALOC           recalculate relative branch
0174 91 EA               STA (POINT),Y      and re-insert
0176 C8                  INY                Y=2
0177 10 B2               BPL SKIP
<p align="center">
132</p>
<hr>

                  ; examine address and adjust, maybe
0179 C5 E7        ADJUST CMP PAGLIM
017B B0 11               BCS OUT            too high?
01?D C5 ED               CMP BOUND+1
01?F D0 02               BNE TES2           hi-order?
0181 E4 EC               CPX BOUND          lo-order?
0183 90 09        TES2   BCC OUT            too low?
0185 48                  PHA                stack hi-order
0186 8A                  TXA
018? 18                  CLC
0188 65 E8               ADC ADJUST         adjust lo-order
018A AA                  TAX
018B 68                  PLA                unstack hi-order
018C 65 E9               ADC ADJST+1        and adjust
018E 60           OUT    RTS
                  ; tables for op-code indentification
018F 0C IF 0D     TAB1   .BYTE              $0C,S1F,$0D,$8?,$1F,SFF,$03
0192 8? IF FF
0195 05
0196 0C 19 08     TAB2   .BYTE              $0G,$19.»08,$00,S10,$20,$03
0199 00 10 20
019C 03
019D 02 FF FF     TAB5   .BYTE         $ 02,$FF,$FF,S01,$01,$00,SFF,$FE
01A0 01 01 00
01A3 FF FE
                  ;      end


     Credit for the concept of RELOCATE goes to Stan Ockers, who insisted
that it was badly needed, and maintained despite my misgivings that it
should be quite straightforward to program. He was right on both counts.




              ***** Hex Dump - Relocate *****

0110-   D8 A0 00 B1 EA AS A2 07 98 3D 8E 01 5D 95 01 F0
0120-   03 CA D0 F4 BC 9D 01 30 0D F0 22 E6 EA D0 02 E6
0130-   EB 88 D0 F7 F0 DA C8 30 D9 C8 B1 EA AA C8 B1 EA
0140-   20 79 01 91 EA 88 8A 91 EA A0 03 10 DE C8 A6 EA
0150-   A5 EB 20 79 01 86 E0 A2 FF B1 EA 18 69 02 30 01
0160-   E8 86 E3 18 65 EA AA A5 E3 65 EB 20 79 01 CA CA
0170-   8A 38 E5 E0 91 EA C8 10 B2 C5 E7 B0 11 C5 ED D0
0180-   02 E4 EC 90 09 48 8A 18 65 E8 AA 68 65 E9 60 0C
0190-   IF 0D 87 IF FF 03 0C 19 08 00 10 20 03 02 FF FF
01A0-   01 01 00 FF FE
<p align="center">
133</p>
<hr>

USING PROGRAM <u>RELOCATE</u> - an example.        Jim Butterfield

Program RELOCATE is important, and powerful.  But it takes
a little getting used to.  Let's run through an example.
Follow along on your KIM, if you like.

Suppose we'd like to change program LUNAR LANDER.
When you run out of fuel on the lander, you get no
special indication, except that you start falling
very quickly.  Let's say we want to make this minor
change:  if you run out of fuel, the display flips
over to Fuel mode, so that the pilot will see immediately.

Digging through the program reveals two things:  (i) you
go to fuel mode by storing 00 into MODE (address E1);
and, (ii) the out-of-fuel part of the program is located
at 024C to 0257.  So if we can insert a program to store
zero in mode as part of our out-of-fuel, we should have
accomplished our goal.  Closer inspection reveals that
we can accomplish this by inserting 85 E1 (STA MODE)
right behind the LDA instruction at 024C.

Let's do it.

First, we must store value FF behind the last instruction
of our program.  So put FF into address 02CC.  That wipes
out the value 45, but we'll put it back later.

Now, we put out program start address (0200) into addresses
EA and EB.  Low order first, so 00 goes into address 00EA
and O2 goes into 00EB.

Next, the part that we want to move.  Since we want to
insert a new instruction at address 024E, we must move
the program up at this point to make space.  In goes
the address, low order first:  4E into address 00EC and
02 into address 00ED.

The page limit should be set to 17, since we don't want
the addresses of the KIM subroutines to be changed
(SCANDS, GETKEY, etc.).  So put 17 into address 00E7.

Finally, how far do we want to move the program to make
room?  Two bytes, of course.  Put 02 and 00 into
addresses 00E8 and 00E9 respectively.

We're ready to go.  Be sure your vectors have been set
properly (at addresses 17FA to 17FF).  Then set address
0110, the ~tart address of RELOCATE, and press GO.

The display will stop showing 0114 EA, confirming that
RELOCATE ran properly.  Now check to see the whole program
was properly converted by looking at the addresses 00EA-B.
We put address 0200 there, remember?  Now we'll see
address 0200 stored there - the address of the value FF
we stored to signal end of program.

Go back to 02CC, where we stored FF, and restore the
original value of 45.


<p align="center">
134</p>
<hr>

Using Program RELOCATE, p.2.

We've completed part I.  The addresses have teen corrected
for the move.  Let's go on to part II and actually move
the program to make room.

My favorite method is to use a tiny program to do the
move itself.  For moving 1 to 256 bytes to a higher address,
I use the program:  A2 nn BD xx xx 9D tt tt CA D0 F7 00.

In the above, nn is the number of bytes to be moved, and
xxxx and tttt are the from and to addresses of the data,
minus one.  Since we want to move about 160 bytes from
a block starting at 024E to a block starting at 0250,
we code like this:  <sub>A2 AC BD 4D 02 9D 4F 02 CA D0 F7 00.</sub>

This little program can be fitted in anywhere.  Let's
put it in memory starting at address 0040.  The final
byte, value 00, should end up in 004B.  Now back to
0040, hit GO ... and your data/program is moved over.
(The tiny program should stop showing address 004D).

There's nothing left to do but actually put the extra
instruction (85 El) into the program at 024E and 024F.

Now run the program.  Try deliberately running out of
fuel and see if the display flips over to fuel mode
automatically when you run out.

If you have followed the above successfully with your
KIM, it all seems very easy.  It's hard to realize that
program RELOCATE has done so much work.  But if you
check, you'll find the following addresses have been
automatically changed:

   0203   024B   0256/8   0263/5   0265/7   02A5/7

Do you think that you'd have caught every one of
those addresses if you'd tried to do the job manually?







<p align="center">
135</p>
<hr>

<img src="fbokpics/s.gif" width=49 height=57 alt="sort"><img src="fbokpics/o.gif" width=50 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/t.gif" width=44 height=55>



This program will take any given block of data and
arrange it in numerical sequence, whether the data is
hex or BCD, or both. Since the program uses relative
branch addressing, it can be located anywhere in memory
without modification.

The instruction that determines whether data is arranged
in ascending or descending order is O11F, ( B0 -
descending order, 90 - ascending order).

This is a bubble sort. The top item is compared with
succeeding items and if a larger number is found, they
are swapped. The larger item (now at the top) is then
used for comparisons as the process continues through
the list. After one complete pass, the largest number
will have "bubbled": to the top. The whole process is
repeated using the second item to start, then again
starting with the third item. Eventually the whole list
will be sorted in sequence.

        17F5       START LO
        17F6       START HIGH
        17F7       END LO
        17F8       END HI    (NOTE: ENDING ADDRESS IS ONE PAST LAST ITEM)

0200 AD F5 17   SORT     LDA,17F5       TRANSFER START POINTER
0203 85 E8               STA 00E8       TO ZERO PAGE
0205 85 EA               STA 00EA
0207 AD F6 17            LDA 17F6
020A 85 E9               STA 00E9
020C 85 EB               STA 00EB
020E AD F7 17            LAD 17F7       TRANSFER END POINTER
0211 85 EC               STA 00EC
0213 AD F8 17            LDA 17F8
0216 85 ED               STA 00ED
0218 A2 00               LDX tt$00       INDEX TO ZERO (STAYS THERE)
021A D8                  CLD
021B A1 E8      GET      LDA C00E8/X)   GET DATA INDIRECT 00E8
021D C1 EA               CMP C00EA/X)   GREATER THAN INDIR. 00EA
021F B0 0C               BCS INCN       NO, INCR. POINTER 00EA
0221 A1 E8      SWAP     LDA C00E8,X)   SWAP DATA IN POINTER
0223 85 E7               STA 00E7       LOCATIONS

<p align="center">
136</p>
<hr>

0225  A1 EA               LDA (00EA,X)
0227  81 E8               STA (00E8,X)
0229  A5 E7               LDA 00E7
022B  81 EA               STA (00EA,X)
022D  E6 EA     INCN      INC 00EA       SET UP NEXT COMPARISON
022F  D0 02               BNE LASTN      NO PAGE CHANGE
0231  E6 EB               INC 00EB       PAGE CHANGE
0233  A5 EA     LASTN     LDA 00EA       OK FOR LAST ITEM IN PASS
0235  C5 EC               CMP 00EC
0237  D0 E2               BNE GET        NOT YET
0239  A5 ED               LDA 00ED       IS THIS LAST PASS/LOOP?
023B  C5 EB               CMP 00EB
023D  D0 DC               BNE GET        NO
023F  E6 E8               INC 00E8
0241  D0 02               BNE OVER       NO PAGE CHANGE
0243  E6 E9               INC 00E9       PAGE CHANGE
0245  A5 E8     OVER      LDA 00E8       INIT. VALUE FOR NEXT PASS
0247  85 EA               STA 00EA
0249  A5 E9               LDA 00E9
024B  85 EB               STA 00EB
024D  A5 EA               LDA 00EA       LAST ITEM IN LIST?
024F  C5 EC               CMP 00EC
0251  D0 C8               BNE GET        NO, NOT YET
0253  A5 E9               LDA 00E9
0255  85 EB               STA 00EB
0257  C5 ED               CMP 00ED       LAST PAGE?
0259  D0 C0               BNE GET        NO
025B  4C 4F 1C            JMP 1C4F       BACK TO KIM/ DONE


          ***** Hex Dump - Sort *****


0200 AD F5 17 85 E8 85 EA AD F6 17 85 E9 85 EB AD F7
0210 17 85 EC AD F8 17 85 ED A2 00 D8 A1 E8 C1 EA B0
0220 0C A1 E8 85 E7 A1 EA 81 E8 A5 E7 81 EA E6 EA D0
0230 02 E6 EB A5 EA C5 EC D0 E2 A5 ED C5 EB D0 DC E6
0240 E8 D0 02 E6 E9 A5 E8 85 EA A5 E9 85 EB A5 EA C5
0250 EC D0 C8 A5 E9 85 EB C5 ED D0 C0 4C 4F 1C

<p align="center">
137</p>
<hr>

<img src="fbokpics/s.gif" width=49 height=57 alt="super-dupe"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/min.gif" width=33 height=38><img src="fbokpics/d.gif" width=50 height=56><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57>


SUPER-DUPE is handy: it lets you duplicate a complete tape
containing many programs in jig time. SUPER-DUPE is
versatile: it will write various tape densities, from
regular to Hypertape . SUPER-DUPE is multi-purpose: if you
don't want to duplicate programs, you can use it for
cataloguing tapes, or for writing Hypertape.

The maximum size program that SUPER-DUPE can copy is
dependent on the amount of memory of the KIM system. The
basic 1K system can copy programs up to 512 bytes long.

For duplicating tape, it's useful to have two tape
recorders: one for reading the old tape, one for writing
the new. They are connected in the usual way, at TAPE IN
and TAPE OUT. Pause controls are handy.

SUPER-DUPE starts at address 0000. Hit GO and start the
input tape. When a program has been read from the input
tape, the display will liight, showing the start address of
the program and its ID. If you don't want to copy this
program, hit 0. Otherwise, stop the input tape; start the
output tape (on RECORD) ; then hit 1 for Hypertape , 6 for
regular tape, or any intermediate number. The output tape
will be written; upon completion, the disp]ay will light
showing 0000 A2. Stop the output tape. Now bit GO to copy
the next program.

SUPER-DUPE contains a Hypertape writing program which can
be used independently; this starts at address 0100.

Basically, SUPER-DUPE saves you the work of setting up the
SA, EA, and ID for each program, and the trouble of
arranging the Hypertape writer into a part of memory
suitable for each program.

      0000 A2 03       START LDX #3
      0002 B5 E2       LOOP  LDA POINT2.X
      0004 95 E0             STA POINT,X
      0006 CA                DEX
      0007 10 F9             BPL LOOP
      0009 A9 00             LDA #0
      000B 85 F6             STA CHKSUM
      000D 85 F7             STA CHKHI
      000F D8                CLD
      0010 A9 07             LDA #7
      0012 8D 42 17          STA SBD
      0035 20 41 1A    SYN   JSR RDBIT
      0018 46 F9             LSR INH
      001A 05 F9             ORA INH

<p align="center">
138</p>
<hr>

      001C 85 F9             STA INH
      003E C9 16             TST CMP #$16 sync?
      0020 D0 F3             BNE SYN
      0022 20 24 1A          JSR RDCHT
      0025 C6 F9             DEC INH
      0027 10 F5             BPL TST
      0029 C9 2A             CMP #$2A
      002B D0 F1             BNE TST
      002D 20 F3 19          JSR RDBYT
      0030 85 F9             STA INH
      0032 A2 FE             LDX #$FE neg 2
      0034 20 F3 19    ADDR  JSR RDBYT
      0037 95 FC             STA POINTH+1,X
      0039 20 91 1F          JSR CHK
      003C E8                INX
      003D 30 F5             BMI ADDR
      003F A2 02       BYTE  LDX #2
      0041 20 24 1A    DUBL  JSR RDCHT
      0044 C9 2F             CMP #$2F eot?
      0046 F0 15             BEQ WIND
      0048 20 00 1A          JSR PACKT
      004B D0 1C             BNE ELNK error?
      004D CA                DEX
      004E D0 F1             BNE DUBL
      0050 81 E0             STA (POINT,X)
      0052 20 91 1F          JSR CHK
      0055 E6 E0             INC POINT
      0057 D0 02             BNE OVER
      0059 E6 E1             INC POINT+1
      005B D0 E2       OVER  BNE BYTE
      005D 20 F3 19    WIND  JSR RDBYT
      0060 C5 F7             CMP CHKHI
      0062 D0 05             BNE ELNK error?
      0064 20 F3 19          JSR RDBYT
      0067 C5 F6             CMP CHKSUM
      0069 D0 95       ELNK  BNE START    (or 65?)
      006B 20 1F 1F    FLSH  JSR SCANDS
      006E F0 FB             BEQ FLSH display SA,ID
      0070 20 6A 1F          JSR GETKEY
      0073 85 F5             STA GANG
      0075 0A                ASL A
      0076 F0 88             BEQ START
      0078 8D BE 01          STA NPUL
      007B 65 F5             ADC GANG
      007D 8D C0 01          STA TIMG+1
      0080 A9 27             LDA #$27 register mask
      0082 85 F5             STA GANG
      0084 A9 BF             LDA #$BF
      0086 8D 43 17          STA PBDD
      0089 A2 64             LDX #$64
      008B A9 16             LDA #$16 sync


<p align="center">
139</p>
<hr>

      008D 20 61 01          JSR HIC
      0090 A9 2A             LDA #$2A
      0092 20 88 01          JSR OUTCHT
      0095 A5 F9             LDA INH
      0097 20 70 01          JSR OUTBT
      009A A5 FA             LDA POINTL
      009C 20 70 01          JSR OUTBT
      009F A5 FB             LDA POINTH
      00A1 20 70 01          JSR OUTBT
      00A4 A0 00       DATA  LDY #0
      00A6 Bl E2             LDA (POINT2),Y
      00A8 20 70 01          JSR OUTBT
      00AB E6 E2             INC POINT2
      00AD D0 02             BNE SAMP
      00AF E6 E3             INC POINT2-1
      00B1 A5 E2       SAMP  LDA POINT2
      00B3 C5 E0             CMP POINT
      00B5 A5 E3             LDA POINT2+1
      00B7 E5 E1             SBC POINT+1
      00B9 90 E9             BCC DATA
      00BB A9 2F             LDA #$2F eot
      00BD 20 88 01          JSR OUTCHT
      00C0 A5 F7             LDA CHKHI
      00C2 20 70 01          JSR OUTBT
      00C5 A5 F6             LDA CHKSUM
      00C7 4C 54 01          JMP EXIT

      00D0 4C 29 19          JMP LOADT9

      00E2 00 02 00 02

        ****** Hex Dump Super - Dupe ******

0000-   A2 03 B5 E2 95 E0 CA 10 F9 A9 00 85 F6 85 F7 D8
0010-   A9 07 8D 42 17 20 41 1A 46 F9 05 F9 85 F9 C9 16
0020-   D0 F3 20 24 1A C6 F9 10 F5 C9 2A D0 F1 20 F3 19
0030-   85 F9 A2 FE 20 F3 19 95 FC 20 91 IF E8 30 F5 A2
0040-   02 20 24 1A C9 2F F0 15 20 00 1A D0 1C CA D0 F1
0050-   81 E0 20 91 IF E6 E0 D0 02 E6 El D0 E2 20 F3 19
0060-   C5 F7 D0 05 20 F3 19 C5 F6 D0 95 20 IF IF F0 FB
0070-   20 6A IF C9 07 B0 F4 85 F5 0A F0 84 8D BE 01 65
0080-   F5 8D C0 01 A9 27 85 F5 A9 BF 8D 43 17 A2 64 A9
0090-   16 20 61 01 A9 2A 20 88 01 A5 F9 20 70 01 A5 FA
00A0-   20 70 01 A5 FB 20 70 01 A0 00 Bl E2 20 70 01 E6
00B0-   E2 D0 02 E6 E3 A5 E2 C5 E0 A5 E3 E5 E1 90 E9 A9
00C0-   2F 20 88 01 A5 F7 20 70 01 A5 F6 4C 54 01 FF EA
00D0-   4C 29 19
00E0-         00 02 00 02

  REMEMBER: You must also include HYPERTAPE! (page 119).


<p align="center">
140</p>
<hr>

<img src="fbokpics/v.gif" width=45 height=56 alt="verify tape"><img src="fbokpics/e.gif" width=47 height=57><img src="fbokpics/r.gif" width=50 height=57><img src="fbokpics/i.gif" width=34 height=55><img src="fbokpics/f.gif" width=47 height=57><img src="fbokpics/y.gif" width=43 height=56><img src="fbokpics/space.gif" width=53 height=1><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><div  ALIGN="RIGHT">James Van Ornum</div>


     Do you want to verify the cassette tape you just recorded before the
information is lost?  Then follow this simple procedure:

        1.  Manually verify that the starting address ($17F3, $17F6), the
            ending address ($17F7, $17F8) and the block identification
            ($l7F9) locations are correct in memory.

        2.  Enter zeros ($00) into CHKL ($17E7) and CHKH ($l7E8).

        3.  Enter the following routine:

                 17EC  CD  00  00   VEB     cmp  START
                 17EF  D0  03               bne    failed
                 l7F1  4C  0F  19           jmp  LOAD12
                 l7F4  4C  29  19   failed  jmp  LOADT9

        4.  Rewind the tape, enter address $188C, press GO and playback
            the tape.  If the tape compares, the LEDs will come back on
            with address $0000.  If there is a discrepancy between memory
            and the tape, the LEDs will come on with address $FFFF.





<img src="fbokpics/v.gif" width=45 height=56 alt="vu tape"><img src="fbokpics/u.gif" width=48 height=57><img src="fbokpics/min.gif" width=33 height=38><img src="fbokpics/t.gif" width=44 height=55><img src="fbokpics/a.gif" width=47 height=56><img src="fbokpics/p.gif" width=49 height=57><img src="fbokpics/e.gif" width=47 height=57><div  ALIGN="RIGHT">Jim Butterfield</div>

     Program VUTAPE lets you actually see the contents of a KIM format
tape as it's going by.  It shows the data going by very quickly, because
of the tape speed..but you can at least "sense" the kind of material on
the tape.

     In case of tape troubles, this should give you a hint as to the area
of your problem: nothing? noise? dropouts? And you can prepare a test
tape (see below) to check out the tape quality and your recorder.  The
test tape will also help you establish the best settings for your volume
and tone controls.

     Perhaps VUTAPE's most useful function, though, is to give you a
"feeling" for how data is stored on tape.  You can actually watch the
processor trying to synchronize into the bit stream.  Once it's synched,
you'll see the characters rolling off the tape...until an END or illegal
character drops you back into the sync mode again.  It's educational to
watch.  And since the program is fairly short, you should be able to trace
out just how the processor tracks the input tape.

     VUTAPE starts at location 0000 and is fully relocatable (so you can
load it anyplace it fits).

<p align="center">
141</p>
<hr>

KIM UTILITY:  VUTAPE

0000  D8              START    CLD
0001  A9  7F                   LDA #$7F
0003  8D  41  17               STA PADD       set display dir reg
0006  A9  15          SYN      LDA #$15       ..window 6 and tape in
0008  85  E0                   STA POINT      and keep pointer
000A  8D  42  17               STA SBD
000D  20  4l  1A               JSR RDBIT      get a bit and
0010  46  F9                   LSR INH        ..slip it into
0012  05  F9                   ORA INH        ..the right-hand
0014  85  F9                   STA INH        ..side:
0016  8D  40  17               STA SAD        show bit flow on display
0019  C9  16          TST      CMP #$l6       ..is it a SYNC?
001B  DO  E9                   BNE SYN        nope, keep 'em rolling
001D  20  24  1A               JSR RDCHT      yup, start grabbing
0020  C9  2A                   CMP #$2A       ..8 bits at a time and..
0022  D0  F5                   BNE TST        ..if ifs not an "*"..
0024  A9  00          STREAM   LDA #$00       ..then start showing
0026  8D  E9  17               STA SAVX       ..characters 1 at a time
0029  20  24  1A               JSR RDCHT
002C  20  00  1A               JSR PACKT      ..converting to hexadec,.
002F  DO  D5                   BNE SYN        ..if legal
0051  A6  E0                   LDX POINT
0055  E8                       INX
0054  E8                       INX            Move along to next..
0055  E0  15                   CPX #$15       ..display position
0057  D0  02                   BNE OVER       (If last digit,..
0059  A2  09                   LDX #$09       ..reset to first)
005B  86  E0          OVER     STX POINT
005D  8E  42  17               STX SBD
0040  AA                       TAX            change character read
0041  BD  E7  IF               LDA TABLE,X    ..to segments and..
0044  8D  40  17               STA SAD        send to the display
0047  D0  DB                   BNE STREAM     unconditional jump

Checking Out Tapes/Recorders

     Make a test tape containing an endless stream of SYNC characters
with the following program:

0050   A0  BF       GO     LDY #$BF           directional..
0052   8C  45  17          STY PBOD           ...registers
0055   A9  16       LP     LDA #$l6           SYNC
0057   20  7A  19          JST OUTCH          ...out to tape
005A   D0  F9              BNE LP

     Now use the program VUTAPE.  The display should show a steady
synchronization pattern consisting of segments b,c, and e on the right
hand LED,  Try playing with your controls and see over what range the
pattern stays locked in.  The wider the range, the better your cassette/
recorder.

<p align="center">
142</p>
<hr>
<a name="p143">






<center><img src="fbokpics/143.gif" width="427" height="409" alt="EXPANSION"></center>







<p align="center">
143</p>
<hr>

<U>EXPANDING YOUR KIM</u>

Games and di versions using the keyboard and display are fine.
Programming in assembly language can even be a lot of fun,
once you get over the first few hurdles. But , sooner or later
you are going to get the urge to have your KIM act like the
"big machines".  What do you have to add on?  How much will
it cost?  How much trouble is it going to be?  Let's look at
a few of the options and you can decide for yourself.

<u>Memory Expansion</u>

If you only had more memory, you could do anything, right?
well, not exactly, but let's see what's involved in adding
memory.

Computer buffs abreviate a thousand memory locations, more
or less, with the letter K. Your KIM-1 has a 1K block of RAM
and 2K of ROM. Provision Is also built into the KIM-1 for
easily adding an additional 4K of memory.

4K Expansion

If you want to add <u>only</u> 4K of memory, it's not especially
difficult. An article in <u>Kilobaud</u> #4, (April '77), gives
instructions for adding one of the lower priced 4K RAM kits.
It is primarily a matter of connecting wires between the
exoansion connector on your KIM and the new board. Depending
on the size of your present power supply, an additional supply
may be required for the new board.

Further Expansion

Adding more than 4K of memory is a bit more difficult. Part
of the problem has to do with address decoding. The expansion
connector is essentially an extension of the main arteries of
the computer, the address and data busses. These carry signals
between the CPU and memory. The data bus carries information
to or from a memory location specified by the address bus.


The "Central Processing Unit"' (CPU)  on the KIM has the
potential of addressing 64K however, so you can see that we
have barely begun to scratch the surface.


<u>Decoding</u>

The complete address bus isn't available to each memory chip
because thete are just too many lines and not enough pins on
the chips. Instead , there is some extra circuitry which looks
<p align="center">
144</p>
<hr>

at the entire address bus and determines which block,
(usually 1K blocks), of memory should be allowed to function.
This is called decoding circuitry. Sub-addressing within
blocks is handled by the lower address lines which are
connected to all chips.

Decoding sufficient to select one of four 1K blocks already
exists on the KIM and is brought out to the expansion connector.
If you add more than 4K of memory, additional decoding will
be required. Usually this is built into the memory board.

<u>Buffering </u>

If you start adding too many chips to the address and data
busses, the extra circuits begin to "load down" the bus and
cause it to not function pronerly. Additional boards are
sometimes isolated from the main busses with circuits
called "buffers" which prevent this from happening. Some
memory boards have buffers built in.

<u>Speed</u>

Another croblem you should be aware of has to do with how fast
the CPU runs and how fast memory chips respond. Some CPU's
have a wait state so that if the memory is a little slow in
responding to entry or retrevial of Information, the CPU can
wait for it. The 6502 processor in KIM doesn't have this
feature. This means that the memory used has to be fast enough
to work with the processor.

<u>What Board? </u>

We see then that memory expansion can get a little complicated.
Further details are given in sections <a target="man window" href="usrman.html#32">3.2</a> and <a  target="man window" href="usrman.html#61">6.1</a> of the Kim
<a target="man window" href="http://www.ping.be/kim-1__6502/6502/usrman.html">User's</a> <a target="man window" href="usrman.html">Manual</a> . Perhaps the easiest way to get around these
problems is to buy an assembled board made especially for the
KIM. All decoding, buffering etc. should already have been
taken care of in this case.

If you build from a kit, there are <u>many</u> solder connections that
are <u>very</u> close to each other; it's easy to make mistakes. Kit
or assembled board however, you should follow the instructions
of someone who has already done it.


W<u>hat does it cost?</u>

Here's the good part! Memory prices have been dropping and
are continuing to drop. Recently boards have been coming out
using 4K memory chips which have more bits per chip than the
older 1K RAM. This reduces the cost further, especially on
boards having a lot of memory.
<p align="center">
145</p>
<hr>

Any price quoted would soon be out of date and the price per
byte depends heavily on the size of board you buy. A quick
scan through a recent hobbist publication should give you a
rough idea of what to expect.

<u>How Much Do You Need?</u>

It depends primarily on what you want to do. Quite a bit
can be done with just the 1K on the basic KIM-1. Even if you
add a terminal, this 1K should be adequate for small games etc.
written In assembly language. If you want to use a lot of
text or go to a higher level language like Basic, you will have
to expand. Exactly how much you need to expand depends on how
elaborate your software is.

<u>Motherboards</u>

If you want to add more than just one board to the expansion
connector of your KIM, you should start thinking in terms of
a motherboard. A motherboard is a group of sockets connected
in parallel. Buffering is also usually provided so the extra
boards don't load the busses.

If you buy a motherboard specifically for the KIM-1, it will
also have provision for letting KIM know when one of its boards
is being addressed. This is so the decoding present on the
KIM will be disengaged and not conflict with decoding on the
expansion boards.

<u>"Standard" Busses</u>

The largest number of boards made for hobbist use have a 100 pin
configuration that plugs into the so-called "S-100" bus. MOS
Technology also makes a motherboard for KIM with yet another
bus. It should be possible to hook the KIM to motherboards
made for other 8 bit machines too. One group Is getting together
an expansion board for KIM based on the standard 44 pin 
connector.

Once you decide on a particular motherboard, you are pretty
much locked in to buying or building boards whose pins match
those in the sockets of the motherboard.

<u>"S-100" Bus</u>

The S-100 bus derives from the Altair<sup>R</sup> motherboard. Presumably,
any board which works in an Altair then should work In any other
S-100 machine. Unfortunately, that has not always been the case.
The S-100 bus is popular though and already a couple manufacturers
have advertised S-100 motherboards meant to be attached to the
KIM. Because of the competition, S-l00 boards sometimes give
a cost advantage. This is especially true in the case of memory
boards where competition is fierce.

<div align="right">NOTE: Altair is a trademark of MITS, Inc.</div>
<p align="center">
146</p>
<hr>

<u>A Caution</u>

No matter what bus you decide on, you are going to need
programs written for KIM to drive certain boards you might
plug in. Unless there is a program for that particular board,
written for KIM, you are in for a lot of work.

<u>The Serial Port</u>

It's not necessary that all expansion take place along the
data and address busses of your KIM. There is another
entrance/exit for information - the serial ports. The serial
I/O, (Input and Output), ports also have the advantage that
most of the required software already exists in the ROM of KIM.
For example, to output a character, it is only necessary to
put that character in the accumulator and jump to the subroutine
OUTCH (1EA0). The character then comes spewing out the serial
output port, bit by bit.

<u>ASCII</u>

The code that is used in this process is the "American Standard
Code for Information Interchange", or ASCII for short. The
hardware connection is also standardized and is made of two
20 milliamp current loops. The device to be connected to KIM
should be set up for these standards. Connections are made
as shown starting on page 17 of the Kim User's Manual.

<u>The Teletype</u><sup>R</sup>

The serial ports were obviously set up with a particular
machine in mind, the Teletype. The problem is that a new
Teletype will cost over $1000 and used ones aren't much cheaper.

<u>Baudot Machines</u>

Older model Teletypes and some other makes of teleprinters go
for $25 on up. The difference? These are Baudot machines.
Wbere the modern Teltype uses a 8 bit (8 level) code to
represent ASCII characters, the older machines use a 5 bit
(5 level) code called Baudot. A good place to find out what
is available etc. is a series of three articles appearing in
the April, May and June '77 issues of Byte magazine.

Teleprinters are noisey, smelly and slow. what's more, the
interface of a Baudot machine to your KIM is far from a trivial
problem. why then even bother with the teleprinter? One reason -
it's great to have a hardcopy of your program, a piece of paper
you can sit down and take a pencil to when something goes wrong.

<u>Video Terminals</u>

Also easily connected through the serial port are stand alone
video terminals. These units contain a cathode ray T.V. tube,

<div align="right">Teletype is a trademark of Teletype Corp.</div>
<p align="center">
147</p>
<hr>

(CRT), keyboard and all necessary guts to display a large
number of lines of characters on the screen at orce. Common
are 12 or 24 lines of 80 characters each. With 80 characters,
a full 72 character Teletype line can be duplicated, making
the unit indeed a "Class Teletype".

<u>Fewer Characters - Lower Price</u>

The price of most video terminals Is still up around $1000 even
in kit form. One way to reduce the cost is to reduce the number
of characters and display the results on an ordinary T.V. set.
16 lines of 32 or 64 characters are common.

This type of unit can be purchased as a video board alone or
along with a keyboard in a nice case. If purchased seperately,
you will also need a serial interface board.

<u>Serial/Parallel Conversion</u>

Remember that we had planned to use the serial I/O ports on KIM.
The video board or the keyboard is more than likely hooked up
to input or output in bytes, (parallel input or output). A whole
byte appears on 8 separate pins along with a timing pulse, called
a strobe, on yet another pin. The strobe is used to indicate when
data is valid. We have to convert this type of input or output to
the sequential bit by bit information required by the serial 
port.

Luckily, there are chips designed especially to do this. They
are called UART's and are found on serial interface boards.
One such board was described in issue #1 of <u>Kilobaud</u>. (Jan. '77) 

<u>What to look for</u>

Video boards vary considerably in the features they offer.
The simplist boards begin writing characters In the upper left
of the screen and continue on down the page. When the end of
the last line is reached, they return to the upper left corner
and start over. The only control you might have is a "home"
signal which returns you to the starting point. Any carriage
returns, linefeed etc. have to be taken care of by a program which
is keeping track of exactly where you are.

A better scheme is to have a <u>cursor</u> which is usually a flashing
or solid white square located where the next character will
appear. In more advanced units, you can move this cursor around
under software (or hardware) control. That way, it's easy to
back up and go over any mistakes.

Another handy feature is <u>scrolling</u>. When you reach the end of
the last line on the screen, it's a little confusing to have
<p align="center">
148</p>
<hr>

the next line start at the top. Instead, some boards automatically
push every line up to make room for the incoming line, (the top
line goes off the screen).

Blank to end-of-line and blank to end-of-screen features are
necessary to keep from having a lot of unwanted characters left
on the screen. Be sure to check to find out exactly what features
are included on the board you are buying. If you can, find
someone who has a similar board up and running.

<u>Back To The Busses</u>

It's not manditory that a video board work off the serial ports.
There are boards made to plug into most "standard" motherboards.
These work off the data and address busses directly. In many
cases, they include memory to hold the characters which looks
just like any other memory to the processor. This has the
advantage that any character can be changed instantaneously.
A board like this is undoubtedly going to require software to keep
things organized and you'll have to provide programs written
especially for KIM.

<u>Hardware vs Software</u>

With the prices of memory continuing to drop, it's becoming
cheaper to replace many hardware functions with software. In
the case of video, you can use software not only to keep track
of what characters go where; you can also use it to generate
most of the display itself. This tends to reduce the cost
considerably.

Using this fact, Don Lancaster describes a T.V. Typewritter
addition to the KIM for $25-$35, (<a href="../art/tvt/p01.html"><u>Kilobaud</u> #6</a>, June '77 or
Popular Electronics, July '77 and August '77). But a word of
caution. You'll have to "chop up" your KIM a bit to implement
this- the project involves cutting a piece of KIM's printed
circuit foil, plus wiring in a whole bunch of new wires. And
while the changes don't affect KIM's operation, you have to
recognize that memory expansion becomes a different ball game.
Don uses the addresses from 2000 to EFFF, and that means
that you can't just add on extra memory in those areas.

Dedicating the processor to running the display in this manner
also means that it is going to have to "steal" time from this
job to run your programs. This can slow things up a bit.

<u>Keyboards</u>

The keyboard also doesn't have to come into the serial port.
Some video boards have a keyboard port built in. Another
possibility is the parallel I/O ports on the KIM itself. Again,
you'll have to provide the necessary software, but it would
save you from having to buy a serial interface board.
<p align="center">
149</p>
<hr>

If you are thinking of running both the keyboard and video board
off the parallel ports of KIM, you should add up the total number
of lines you need. By the time you include all necessary strobe
lines, you will probably find you don't have enough ports 
available.

<u>Hooking To Your T.V.</u>

When you hook a video board to a T.V. set, make sure that the
T.V. has a transformer which isolates the set from the A.C.
line. 110 volts can ruin a lot of chips in a hurry!

There are two ways of putting the video signal in the T.V.
If you want to go into the antenna terminals, you will need a
board which generates a regular T.V. frequency signal with
the video signal being Imposed upon it. Kits are available
for $10 -$15.

A method less susceptible to interference problems is to go
directly into the video amplifier of the set. A T.V. repair
shop should be able to handle this if you can't. About the
simplest circuit was given in July '76 <u>Byte</u>, p. 38. Another
appeared in <u>Kilobaud</u> #7, (July '77 p. 30). Kits are available
to make this type of conversion also.

<u>Video Monitors</u>

A video monitor is like a T.V. set without the ability to pick
up channels. It just takes a standard video signal (like
the one coming from a video board) and puts it on the screen.
Because they have a larger bandwidth than the normal T.V. set,
they can display more information without the characters getting
fuzzy.

<u>Costs</u>

At the present time, (Summer '77), you can expect to pay $150 -
$250 for a video board, $50 - $150 for a keyboard and over $300
for the combination in a box along with a serial interface.
Most of the serial interface is in the UART chip which sells
for about $10. Kits maybe available for about $25 -$50.
Motherboards run $100 - $150 and a video monitor will cost
around $150 - $200.

<u>Grachics</u>

If you want to use your KIM for simulating video games on a
T.V., you should be thinking in terms of a graphics board.
The graphics boards that are used with T.V. sets generate many
tiny white rectangles, squares or dot patterns on the screen.
these can be individually turned on or off at will. Some video
boards meant to display characters also have limited graphics
capability.
<p align="center">
150</p>
<hr>

<u>Printers</u>

There are a number of printers on the market which use many
small solenoids to form dot patterns through a typewritter
ribbon onto paper. These dot patterns form characters faster
than can be done with a typewritter or teleprinter. Some use
adding machine paper and others, a standard size sheet. Prices
run from $250 on up.
Also available are printers which use a specially sensitized
paper and print using a thermal process.

<u>Floppy Disks</u>

Once you start reading in programs which require 4K or more of
memory, you are going to find the cassette interface on your
KIM a little slow. Even with Hypertape, it will take about
1 1/2 minutes to read in 4K.

There are faster tape units on the market, but the ultimate as
far as the hobbist is now concerned is the "floppy". The floppy
disk is like a flexable phonograph record coated with iron oxide
as is used on tapes. A read/write head is moved radially outward
from the center to read or write on different "tracks". The main
advantage over tape is the speed at which any block of information
can be located. The information is also put on very compactly
and reading it back takes only a few seconds at mast.

The mechanism to do all this is a precision piece of equipment
and quite expensive. Prices are continuing to drop however
as the demand becomes greater. The electronics necessary is
also quite complex, but as with the UART, single chips are now
being made which do most of the job.

Floppies are often used in pairs. One reason for this is to
be able to back up what is stored on a disk. One disk is
simply copied to another. Since each disk may store over 1/4
million bytes, you can see how time consuming this would be
if you tried to read all information into memory and back out
on another disk. smaller versions of floppies using a 5"
diskette (with less storage capacity) are also available at
somewhat lower prices.

Again, you need not only the floppy drive and controller
(electronics), but also the necessary software written for KIM.
The operating system software that goes with floppies is quite
complex. But then, it's also very powerful.
<p align="center">
151</p>
<hr>

<u>SOFTWARE TO EXPAND YOUR KIM</u>

In addition to building extra devices onto your KIM system,
like teletype, display, or more memory, you can increase the
power of your system with special programs called <u>software</u>.

The name, software, is often misunderstood. Software, strictly
speaking, refers to programs that help you do the job.
They are <u>helping</u> programs, not <u>doing</u> programs. For example,
if you write a program to play a game, that's not software -
it's called an application program, for it actually does 
something.
But the programs that help your game, such as the Monitor
subroutines that you may call, are software. They don't do the
job, but they sure help.

Most of the extra software that we'll talk about here will
require extra memory to be fitted to your KIM system.

<u>Assemblers</u>

If you've tried writing a program, you may have noticed that
converting your coding into KIM's machine language is quite
a tedious job. For example, you may have written the command
LDA TOTAL to load the accumulator with a zero page quantity
that you have called TOTAL. Before you can enter the program,
you must convert this to the 6502 code: A5 (for LDA from zero 
page),
63 (the zero page location you have chosen for TOTAL).
Not too hard, perhaps; but you must look up the code and keep
track of the addresses  If your program contains dozens of
instructions, this conversion - called hand assembly - can
become quite a chore.

An assembler program will do the conversion for you, quickly,
neatly, and without error  If you have a hard copy printing
device, it will give you a complete printout (called a "listing")
of your program.

A <u>resident</u> assembler works on program data held entirely within
KIM's memory. It's very fast, but it does need lots of memory
to hold all of your program information. Other assemblers work
from data stored on magnetic tape or on floppy disk. They are
slower, since the data must be copied into memory as it's needed,
but allow your programs to be almost unlimited in size.
A <u>cross-assembler</u> will assemble your KIM program on a completely
different machine, such as a Digital Equipment Corporation PDP-ll
or a commercial time-sharing processor. Because these other
computers are not so limited in size compared to the KIM, they
can be very powerful.
<p align="center">
152</p>
<hr>

<u>Dis-Assemblers</u>

A disassembler works in reverse from an assembler. If you have
a program in KIM machine language, the disassembler will print
it out in the more easily readable assembly language . Very
handy for investigating a working program, if you don't have
the listing.

For example, if you have coding starting at address 02DB that
reads: CA 10 F8 AD 64 17 85 80 ... , the disassembler would
print something like this:

        020F CA          DEX
        0216 10 F8       BPL 020A
        0212 AD 64 17    LDA 1704
        0215 85 80       STA 0080

As you can see, this is much more readable.


<u>Interpreters</u> (BASIC ,FOCAL, etc.)

There are several "high level" languages that are much easier
for writing programs than KIM (6502) machine language.
With the proper software package, KIM can translate these
high level instructions and perform the desired actions.
The translation job takes time, so KIM will run many times slower
than its normal "machine" speed. Programming convenience is
so great, however, that most users don't mind the loss of speed.

Interpreters can take up quite a bit of memory - anywhere from
2K to 16K locations - so you'll have to be fitted with the
appropriate amount of memory expansion. If you hear of an
8K Basic interpreter, you'll know that means 8,600 locations
for the program, and of course you'll need to provide extra
memory to fit your own programs in.

A brief example will show how simple a language like BASIC
can be for programming. To input a number from your keyboard,
and type its square, you need only write:

       50 INPUT A              receive value "a" from keyboard
       60 LET B = A*A          "*" means multiplication
       70 PRINT "THE SQUARE OF ";A;" IS ";b
       80 STOP

See how easy it is? KIM must read each line, character by character,
decide what it means: inputting, calculating, printing or whatever,
and then perform that action, KIM works hard, but you don't.
<p align="center">
153</p>
<hr>

<u>Text Editors</u>

It can be very handy to compose a number of lines of material
such as a tetter, a program, or general data; put it into your
KIM system; save it permanently on tape or disk; and then later
recall it and change, insert or delete information.

If you're writing a letter, you can correct mistakes and insert
new thoughts as they occur to you, perhaps even generating
several slightly different versions to mail to various people.
If you have a program, you can correct bugs as you find them
and insert new coding as needed  Data files can be kent up
to date.

Text Editors are very important with other software such as
assemblers and interpreters; often, they are built in.

<u>Mathematical Packages</u>

Each memory location in KIM can store a number from 0 to FF
hexadecimal, or 0 to 255 decimal. Ther are no fractions,
and you have to make special arrangement for signed (positive
and negative) numbers. You can link memory locations together
to hold larger numbers; but extremely large numbers and fractions
call for special mathematical techniques to be used. In addition,
KIM gives you only addition and subtraction; you have to work
out multiplication and division for yourself, to say nothing of
more complex functions like square roots and powers.

You can program all this yourself, if you have the time and
the mathematical background. But if you really need to perform
advanced math on your KIM, you'll be better off to obtain
a pre-written mathematical package.

<u>Floating-point</u> on computers means about the same as the term
"Scientific Notation" on calculators. It lets you use fractions
and deal with very large and very small values . In addition,
you'll often get extra functions - powers, roots, logarithms,
and trigonometric functions such as sines and cosines.

Many mathematical functions are often included in large interpreters.
<p align="center">
154</p>
<hr>
<a name="p155">






<center><img src="fbokpics/155.gif" width="430" height="518" alt="INTERFACE"></center>







<p align="center">
155</p>
<hr>

<div align="center">KIM RUNS THE WORLD OR HOW TO CONNECT YOUR MICROPROCESSOR

TO EXTERNAL DEVICES</div>

<u>Introduction - Calculator versus Computer</u>

Most of you are familiar with the ubiquitous pocket
calculator.  From the simple "four-banger" to the most
sophisticated card-programmable, the sequence of ope-
rations is always the same.  You enter numbers from
either the Keyboard or a program card, depress a few
keys, the calculator "crunches" your input and out
come the processed numbers on the display or printer.

Though a calculator will do a great job of processing
numbers, just try to make it perform a simple trick
of a different kind - e.g., ring a bell after comple-
ting the 150th iteration.  No way!  A calculator is
a closed system.  In general it is not possible to
attach to it external devices not envisioned during
the original design.  A microprocessor such as KIM is
quite different in this respect.  In fact frequently
its main functions are not to "crunch" numbers but to
receive signals from various sensors such as photocells,
thermostats, switches or pressure transducers, to do
a small amount of processing of these inputs and then
to control devices such as lights, motors, relays
or even to play music.

In this chapter we will try to show you how easy it is
for KIM to perform operations of the type described.
KIM via its input/output ports can receive and transmit
control signals.  Its built-in precision quartz crystal
controlled time reference and a built-in interval timer
further simplify various controlling tasks.

<u>KIM Ports - KIM Talks and Listens</u>

KIM has four special memory locations which are used
for input, output and various applications.  Great
things happen if you store numbers in these locations!
<p align="center">
156</p>
<hr>

<u>Location</u>

1700         Contents of Application Port A
1701         Data Direction of Port A
1702         Contents of Application Port B
1703         Data Direction of Port B

The data contents locations 1700 and 1702 store the
data transmitted to or from KIM while the data direction
locations 1701 and 1703 determine which port operates
in the input and which in the output mode.  These four
special memory locations can be accessed by KIM programs
in the same way as any other location.  In addition
the application port A in location 1700 and the appli-
cation port B in location 1702 are also accessible on
connector pins.  They represent the physical interface
of KIM.  By monitoring the appropriate pins with a volt-
meter one can detect the data stored in memory locations
1700 and 1702 when KIN is in the output mode.  By setting
the appropriate pins to ground or to V<sub>cc</sub> (+5 Volts) one
can feed data into KIM in the input mode.

As KIM is an 8-bit microprocessor, each of the two
ports A and B actually consists of eight independent
inputs or outputs.  Each of the eight bit positions
from 0 through 7 appears on a different connector pin
and is a port in itself.  The following are connector
pin assignments for the A and B application ports.
For example PAO represents the 0-th or the least sig-
nificant bit of port A and PA7 the 7-th or the most
significant bit.  Pin A-14 means <u>A</u>pplication connector
(lower left), the 14-th pin counting from the top,
on the upper side of the connector (the lower side
of the connector is designated by letters instead of
numbers).

              <u>Connector Pin Assignments</u>

<u>Port</u>          <u>Pin</u>         <u>Port</u>         <u>Pin</u>

PA0           A-14        PB0          A-9
PA1           A-4         PB1          A-10


<p align="center">
157</p>
<hr>

<u>Port</u>          <u>Pin</u>         <u>Port</u>         <u>Pin</u>
PA2           A-3         PB2          A-11
PA3           A-2         PB3          A-l2
PA4           A-5         PB4          A-13
PA5           A-6         PB5          A-16
PA6           A-7         PB6          Not accessible
PA7           A-8         PB7          A-15

To assign any of the above connector pins to either
input or output mode we have to store a "magic"
number in location 1701 to control port A or in
location 1703 to control port B.  A  "1" stored in
a specific bit position makes the corresponding
port into an output, a "0" into an input.  For
example, to assign PA7 to output and PA0 through
PA6 to input requires storing 10000000 or 80hex in
location 1701.  In the following example although
we deal only with port A, all the remarks apply
equally to the port B.

<u>Example - Burglar Alarm</u>

Let's suppose that we want to design a system under
KIM control such that PA0 through PA6 are connected
to seven normally closed burglar alarm switches
while PA7 should control a warning bell.  We want
the bell to start ringing as soon as one of the
contacts opens.  The bell should keep ringing even
if the contact closes again.  We will first describe
the software, or the programming part of the problem,
and then will show you the actual circuit.  We assume
that by now you scanned through the KIM software
chapters and are familiar with its basic instruction
set.
<p align="center">
158</p>
<hr>

<u>Burglar Alarm Program</u>

<u>Loc</u> <u>Code</u>     <u>Mnemonic</u>         <u>Comments</u>

00    A9 80      LDA #80   / Set PAD through PA6 to
02    8D 01 17   STA 1701  \ input and PA7 to output
05    A9 00      LDA #00     Set output to 0
07    8D 00 17   STA 1700    Will affect PA7 only
0A    AD 00 17   LDA 1700  / Read 1700 to find if PAD
0D    29 7F      AND *7F  |  through PA6 contain all
0F    C9 7F      CMP #7F   \ "1"s (closed switches)
11    F0 F7      BZQ OA      All are closed, go to 0A
13    A9 80      LDA #80   / At least one switch open,
15    8D 00 17   STA 1700  \ sound alarm
18    4C 13 00   JMP 0013    Stay in the loop

Now let's look at the simple circuit to operate our
burglar alarm.  We connect PAD through PA6 pins directly
to the switches.  If a switch is closed then the voltage
at that port is 0 Volts (ground); as soon as the switch
opens, an internal resistor located on the KIM board
"pulls" the port to the positive voltage V<sub>cc</sub> of 5 Volts.
All ports except PB7 are equipped with built-in resis-
tors, called "pu1l-up" resistors connected to V<sub>cc</sub>, which
set voltage at a port to Vcc when the port is in the
input mode and is not connected to ground.  On the output
port PA7 is connected to the base of an amplifying tran-
sistor which drives a relay to operate an alarm bell.
The transistor is necessary because the maximum availa-
ble current of each KIM port is only on the order of
1 mA.  This current would not be sufficient to drive
a relay directly.
<p align="center">
159</p>
<hr>

<img src="fbokpics/160a.gif" width="500" height="302" alt="">

<u>Multiple Drives</u>

Now suppose you want KIM to drive several devices
rather than a single one.  For example you may want
to connect a 3 x 3 matrix of LED lights to the A and
B ports to play tic-tac-toe.  The simplest way to do
this is by using one of the inexpensive digit driving
ICs, such as 75492 used in many calculator circuits.
Each of these ICs will drive up to 6 lights, relays
or what have you with the simple circuit shown below.
The six IC outputs act as "sinks", which requires
that you connect one side of your electric load to
the positive battery voltage and the other side to
one of the IC outputs.  When the appropriate port is
"on" current will flow through your load; when the
port is "off", current will stop.  The maximum current
through each load is 200 mA.

<img src="fbokpics/160b.gif" width="500" height="181" alt="">
<p align="center">
160</p>
<hr>

<u>AC Control</u>

To go one step further we can show you how KIM can
operate AC devices without relays.  However we would
like to caution you that the power line voltage of
110 Volts AC and the low voltages in your KIM do not
mix easily.  You may even achieve a non-voluntary
beautiful pyrotechnic display.  In other words, if
you are not careful in your soldering techniques
and like to leave a few wires dangling "just in case"
we would recommend that you skip the following
paragraph.

The circuit we show here electrically separates KIM
from the power line by means of a lamp/photocell
interface.  The amplified voltage from one of the
KIN ports turns on an incandescent lamp or an LED
which lowers the resistance of a photocell which
then turns on the electronic TRIAC switch.  This
simple and inexpensive circuit can easily control
an AC lamp or appliance of up to 600 Watts.


<img src="fbokpics/161.gif" width="500" height="242" alt="">


<p align="center">
161</p>
<hr>

<u>KIM versus Hardwired Logic</u>

We have showed you how KIM can control relays, lights
and AC operated devices but these applications hardly
tap KIM's capabilities.  With the same methods you
can also switch tracks on a model train layout, control
traffic lights, and keep your fans and air conditioners
going.  The beauty of performing such tasks with a com-
puter rather than with hardwired relay logic is that
logical responses and changes in rules can easily be
implemented by changing a few statements in your prog-
ram.  A redesign of a hardwired circuit on the other
hand is always difficult, time consuming, frequently
impossible without starting your design from scratch.

<u>D/A and A/D Converters</u>

So far we have discussed on/off type controls such as
switches or relays which are either open or closed.
However, there are many areas where a proportional
control with "shades of gray" instead of black or white
would be more desirable.  For example if you are inte-
rested in electronic music you would like to shape
the electric signals driving your amplifiers and speakers
into sinusoids, triangles and seesaws to mimic various
instruments.  Though even with a simple on/off control
you can create sounds, their acoustical range is very
limited.  If you connect an audio amplifier to one of
the KIM ports and listen to the sound generated by
the 5 Volt pulses of various length and at various
repetition rates the sound will remind you only of
a variety of buzz saws and not of musical instruments.
The next step therefore is to develop a digital-to-
analog (D/A) interface for your KIM.  Such an interface
will, for example, translate an 8-bit binary number
on ports A0 through A7 into a voltage proportional
to the numerical value stored in location 1700 (Port A).
A number FF<sub>hex</sub> stored in 1700 could then generate
2.0 Volts, while 20<sub>hex</sub> stored in the same locabion
would generate (32/255) x 2.0 = 0.25 Volts.  Though
we will not describe a D/A converter in detail, it
can easily be built with either separate amplifiers
or with specially designed ICs.  An example of a rela-
tively inexpensive converter is MC1408L by Motorola.
<p align="center">
162</p>
<hr>

Similarly an analog-to-digital (A/D) converter inter-
face can be used to turn KIM into a measuring instrument
such as a digital voltmeter, thermometer or even a
speach recognizer.  Applications of a microprocessor
equipped with D/A and A/D converters are limited only
by your imagination and by your wallet.

<u>Interval Timer</u>

Many applications which interface KIM to the outside
world benefit from the addition of a timer.  For
example, you may want the train in a model train
layout to stop for exactly 45 seconds at a station
under some conditions but for only 30 seconds under
other conditions.  For this and other purposes as well,
KIM has a built-in interval timer which can be set to
various multiples of its crystal controlled cycle
time of 1 microsecond (10<sup>-6</sup> sec.).  By storing a number
K between 1 and FF<sub>hex</sub> in one of the special memory
locations listed below we direct the timer to count
a specific number of cycles.  The special memory lo-
cations used by the interval timer and the longest
count-down period are as follows:

<u>Location</u>   <u>Timer Count</u>          <u>Max. Period (sec.)</u>
           (microseconds)       For K = FFhex

1704       K x 1                0.000255
1705       K x 8                0.002
1706       K x 64               0.016
1707       K x 1024             0.26

Location 1707 is also used to sense that the timer
has finished counting.  By putting the interval timer
inside a loop the timing can be lengthened to seconds,
minutes and hours.  The timer starts cotuiting as soon
as a number between 1 and FF<sub>hex</sub> is stored in one of
the above four locations by means of the STA (STore
Accumulator in memory) instruction.  When time runs
out the BIT (test BITs in memory with accumulator)
instruction returns a non-positive value from lo-
cation 1707.
<p align="center">
163</p>
<hr>

<u>Timer Example</u>

The following short program illustrates the use of
the interval timer.  The program will leave the loop
after 5 x 64 = 320 microseconds count is detected
by the BIT instruction.  While the timer counts,
other tasks can be performed by KIM.

<u>Loc</u>   <u>Code</u>       <u>Mnemonic</u>       <u>Comments</u>

00    A9 05      LDA #05        Start timer by storing

02    8D 06 17   STA 1706       5 in 1706

05 ........                     Perform other tasks

   ........

10 2C 07 17       BIT 1707      Check if timer finished?

13 10 F0          BPL 05        If still counting, go to 05

15 ........                     Otherwise continue



<u>How KIM Communicates with its own Keyboard and Display</u>

At first glance the KIM keyboard and the LED display
seem to be a hardwired fixed part of the micropro-
cessor and as difficult to access as if they would
belong to a calculator.  Fortunately it is not so.
Both thekeyboard and the display can be used quite
differently from the way they are used by the KIM
built-in operating system program.  You can run the
display and the keyboard under the control of your
own programs to perform all kinds of tricks.  For
example, you can program the LEDs to display any
pattern in any digit position which can be made with
the seven LED segments.  Similarly the keyboard can
be used as input to various programs with individual
keys performing functions unrelated to their numerical
labels.  For example, the "B" key in your program can
<p align="center">
164</p>
<hr>

indicate a "Backward" command, while the "F" key can
mean "Forward".  Various game programs shown in other
sections of this book are examples of such applications.

We have tried in this chapter to give you a feeling for
what KIM can do in the way of control applications.
We hope that by now you have gained some appreciation
for KIMs potential.


<div align="center">******************</div>
<p align="center">
165</p>
<hr>
<a name="p166">






<center><img src="fbokpics/166.gif" width="428" height="429" alt="POTPOURRI"></center>







<p align="center">
166</p>
<hr>

<u>GUIDELINES FOR WRITING KIM PROGRAMS</u>

1.  Use of Memory.

  --Wherever possible, place your programs In pages 2 and 3--
    addresses 0200 to 03FF. It's handy to keep page zero for
    variables - values that change during program run; and
    page one is best left alone because the program Stack
    uses it. The Stack, by the way, only uses a few locations
    - usually. But a small program error can sometimes make
    the stack run wild, which would destroy your page one data.


  --Your variables (changeable data) should be kept in page zero,
    in locations 0000 to 00EE. These addresses are easy to use,
    since you can use zero-page addressing modes which save you
    time and memory.


2.  Program and constants.

  --Set up your programs in the following pattern: first,
    the main program (starting at address 0200 or higher);
    then your subroutines; and finally your data.
    Keep them all fairly close together, so that when you
    dump the whole thing to cassette tape it won't take
    extra time to write the 'blank spaces in between'.

3.  Initial values.

  --Don't assume anything about the beginning values in your
    registers or in zero page. If you want to be out of
    decimal mode (and you usually do), make your first command
    a CLD (D8). If you want the accumulator to be zero,
    load it with LDA #$00 (A9 00). Every zero page variable
    that needs to start at a certain value should be set
    to that value by the program. For example, if you
    want address 0043 to start out with a value of 7, write
    LDA #$07, STA 0043 (A9 07  85 43).

4.  General.

  --Make your subroutines simple, with clearly visible entry
    and return points. One of the stickiest problems to find
    is a subroutine that doesn't return via a RTS command,
    but instead jumps straight back to your main coding .
    or a subroutine that you somehow get into without giving
    the vital JSR command.

  --Avoid super clever programming, such as having the program
    change itself. (It can work ...  but if it misbehaves, you
    can have a bad time).

5.  Remember: Computers are dumber than humans, but smarter
    than programmers.
<p align="center">
167</p>
<hr>

<u>LIGHTING THE KIM-1 DISPLAY</u>  Jim Butterfield

A. SIX-DIGIT HEXADECIMAL.

The easiest way to display six digits of data is to use
the KIM-1 Monitor subroutine SCAND.

Calling TSR SCAND (20 19 1F) will cause the first four digits
to show the address stored in POINTL and POINTH (00FA and 00FB),
while the last two digits of the display show the contents
of that address.

If you look at the first three lines of subroutine SCAND
(lines 1057 to 1059 on page 25 of the listing), you'll
see how the program 'digs out' the contents of the
address given by POINTL/POINTH and stores it in location
INE (00F9). It's neat programming, and worth studying
if you're not completely familiar with the 6502's indirect
addressing operation.

Thus, if you skip these three lines, and call JSR SCANDS
(20 1F 1F) you will be displaying, in hexidecimal, the
contents of three locations: POINTH, POINTL , and INH
This, of course, takes six digits.

To recap: SCAND will display four digits of address and
two digits on contents. SCANDS will display six digits
of data.

Important: in both cases, the display will be illuminated
for only a few milliseconds. You must call the subroutine
repeatedly in order to obtain a steady display.

B. DRIVING THE BITS OF THE DISPLAY DIRECTLY.

   1. Store the value $7F into PADD (1741). This sets the
      directional registers.

   2. To select each digit of the display, you will want to
      store the following values in location SBD (1742).

       Digit 1: $09
       Digit 2: $0B
       Digit 3: $0D
       Digit 4: $0F
       Digit 5: $11
       Digit 6: $13

      Note that this can easily be done in a loop, adding two
      to the value as you move t0 the next digit.
<p align="center">
168</p>
<hr>

   3.  Now that you have selected a carticular digit, light
       the segments you want by storing a 'segment control'
       byte into location SAD (1740).  The segments will be
       lit by setting the appropriate bit to 1 in SAD according
       to the following table:



   Bit    7       6       5       4       3       2       1       0
          ..   center    upper   lower   bottom  lower   upper   top
                         left    left            right   right
                 "g"     "f"     "e"      "d"    "c"      "b"     "a"



   For example, to generate a small letter 't', we
   would store $78 (center, upper left, lower left, bottom)
   into SAD.


   4.  Now that you have picked a digit and lit the appropriate
       segments  wait a while. Sit in a delay loop for
       about 1/2 millisecond before moving on to the next digit.

   <u>THE KIM-1 ALPHABET</u>.

   Some letters, like M and W, just won't go onto a 7-segment
   display. Some, like B, are only possible in capitals; others,
   like T, can only be done in lower case. So here's an
   alphabet of possibles:

   A  - $F7
   B  - $FF          b - $FC
   C  - $B9          c - $DB
   D  - $BF          d - $DE
   F  - $F9
   F  - $F1          f - $F1
   G  - $BD          g - $EF
   H  - $F6          h - $F4             1 - $86
   I  - $86          i - $84             2 - $DB
   J  - $9E          j - $9E             3 - $CF
   L  - $B8          l - $86             4 - $E6
                     n - $D4             5 - $ED
   O  - $BF          o - $DC             6 - $FD
   P  - $F3          p - $F3             7 - $87
                     r - $D0             B - $FF
   S  - $ED                              9 - $EF
                     t - $F8             0 - $BF
   U  - $BE          u - $9C        minus  - $C0
   Y  - $EE          y - $EE
<p align="center">
169</p>
<hr>

The following is reprinted from the KIM-1 <a target="man window" href="http://www.ping.be/kim-1__6502/6502/usrman.html">User</a> <a target="man window" href="usrman.html">Manual</a> with permission
from MOS Technology.


<u>Interval Timer</u>

     1.  <u>Capabilities</u>

         The KIM-1 Interval Timer allows the user to specify a preset
     count of up to 256<sub>10</sub> and a clock divide rate of 1, 8, 64, or 1024
     by writing to a memory location.  As soon as the write occurs,
     counting at the specified rate begins.  The timer counts down at
     the clock frequency divided by the divide rate.  The current timer
     count may be read at any time.  At the user's option, the timer
     may be programmed to generate an interrupt when the counter counts
     down past zero.  When a count of zero is passed, the divide rate
     is automatically set to 1 and the counter continues to count down
     at the clock rate starting at a count of FF (-1 in two's comple-
     ment arithmetic).  This allows the user to determine how many clock
     cycles have passed since the timer reached a count of zero.  Since
     the counter never stops, continued counting down will reach 00
     again, then FF, and the count will continue.

     2.  <u>Operation</u>

         a.  <u>Loading the timer</u>
             The divide rate and interrupt option enable/disable are
     programmed by decoding the least significant address bits.  The
     starting count for the timer is determined by the value written to
     that address.

     <u>Writing to Address</u>  <u>Sets Divide Ratio To</u>  <u>Interrupt Capability Is</u>
            1704                   1                  Disabled
            1705                   8                  Disabled
            1706                   64                 Disabled
            1707                   1024               Disabled
            1700                   1                  Enabled
            170D                   8                  Enabled
            170E                   64                 Enabled
            170F                   1024               Enabled


         b,  <u>Determining the timer status</u>
             After timing has begun, reading address location 1707 will
     provide the timer status.  If the counter has passed the count of
     zero, bit 7 will be set to 1, otherwise, bit 7 (and all other bits
     in location 1707) will be zero.  This allows a program to "watch"
     location 1707 and determine when the timer has timed out.

         c.  <u>Reading the count in the timer</u>
             If the timer has not counted past zero, reading location
     1706 will provide the current timer count and disable the inter-
     rupt option; reading location 170E will provide the current timer
     count and enable the interrupt option.  Thus the interrupt option
     can be changed while the timer is counting down.
<p align="center">
170</p>
<hr>

             If the timer has counted past zero, reading either memory
     location 1706 or 170E will restore the divide ratio  to its pre-
     viously programmed value, disable the interrupt option and leave
     the timer with its current count (not the count originally writ-
     ten to the timer).  Because the timer never stops counting, the
     timer will continue to decrement, pass zero, set the divide rate
     to 1, and continue to count down at the clock frequency, unless
     new information is written to the timer.

         d.  <u>Using the interrupt option</u>
             In order to use the interrupt option described above, line
     PB7 (application connector, pin 15) should be connected to either
     the IRQ (Expansion Connector, pin 4) or NMI (Expansion Connector,
     pin 6) pin depending on the desired interrupt function.  PB7
     should be programmed as <u>input</u> line (it's normal state after a
     RESET).

             NOTE: If the programrner desires to use PB7 as a normal
                   I/O line, the programmer is responsible for dis-
                   abling the timer interrupt option (by writing or
                   reading address 1706) so that it does not inter-
                   fere with normal operation of PB7.  Also, PB7 was
                   designed to be wire-ORed with other possible inter-
                   rupt sources; if this is not desired, a 5.1K resis-
                   tor should be used as a pull-up from PB7 to +5v.
                   (The pull-up should NOT be used if PB7 is connected
                   to NMI or IRQ.)

<div align="center">************************************************


IMPORTANT!!

<u>The KIM Cassette Tape Interface</u></div>

         The KIM-1 USER GUIDE doesn't emphasize one vital
         instruction in telling you how to read and write tapes.

         BEFORE READING OR WRITING MAGNETIC TAPE, BE SURE
         TO SET THE CONTENTS OF ADDRESS 00F1 TO VALUE 00.


         This ensures that the computer is <u>not</u> in Decimal Mode.
         The key sequence is <u>AD</u> <u>0</u> <u>0</u> <u>F</u> <u>1</u> <u>DA</u> <u>0</u> <u>0</u> <u>AD</u>.

         If you forget to do this, you're likely to have trouble with
         audio tape.  You might write bad tape - which can never be
         read back in correctly, and you might find yourself unable
         to input properly from tape.  Many of us have run into this
         problem, and have wasted countless hours trying different
         tapes and recorders or even investigating KIM's electronics.

         You'll find KIM audio tape to be 100% reliable, even on
         inexpensive recorders, providing you follow this rule and
         always ensure that location 00Fl is set to zero.
<p align="center">
171</p>
<hr>

    <u>NOTES ON A RANDOM NUMBER GENERATER</u>             Jim Butterfield

It's not my original idea - I picked up it from a technical
journal many years ago. Wish I could remember the source,
so I could credit it.

This program produces reasonably random numbers, and it won't
"lock up" so that the same number starts coming out over and
over again.  The numbers are scattered over the entire range
of hexadecimal 00 to FF.  A Statistician would observe that
the numbers aren't completely "unbiased", since a given
series of numbers will tend to favor odd or even numbers slightly.
But it's simple, and works well in many applications.

Here ta how it works.  Suppose the last five random numbers
that we have produced were A, B, C, D and E.  We'll wake a
new random number by calculating A + B + E + 1.   (The one
at the end is there so we don't get locked up on all zeros).
When we add all these together, we may get a carry, but
we just ignore it.  That's all.  The new "last five" will
now be B, C, D, E and the new number.  To keep everything
straight, we move all these over one place, so that B goes
where A used to be, and so on.

The program:
            xxxx D8      RAND CLD clear  decimal if needed
            xxxx 38           SEC carry  adds value 1
            xxxx A5 13        LDA RND+l  last value (E)
            xxxx 65 16        ADC RND+4  add B (+ carry)
            xxxx 65 17        ADC RND+5  add C
            xxxx 85 12        STA RND    new number
            xxxx A2 04        LDX #4     move 5 numbers
            xxxx B5 12   RPL  LDA RND,X
            xxxx 95 13        STA RND+l,X  ..move over 1
            xxxx CA           DEX
            xxxx 10 F9        BPL RPL    all moved?

The new random number will be in A, and in RND, and in RND+1.
Note that you must use six values in page zero to hold the
random string ... I have used 0012 to 0017 in the above coding.

You often don't want a random number that goes all the way
up to 255 (Hexadecimal FF). Them are two ways of reducing
this range.  You can AND out the bits you don't want;
for example, AND #07 reduces the range to 0-7 only.
Alternatively, you can write a small divide routine, and
the <u>remainder</u> becomes your random number; examples of this
can be seen in programs such as <a href="#bagels">BAGELS</a>.
<p align="center">
172</p>
<hr>

<div align="RIGHT"><font color="gray">If you have one or more of the articles 
mentioned below and want to share 
it with others please contact: erik.vdbroeck at telenet.be:
 
Erik Van den Broeck
Elfde Julilaan 130 
B8500 Kortrijk 
Belgium

+ 32 56 202142
<a target="back window" href="http://users.telenet.be/kim1-6502">users.telenet.be/kim1-6502</a>
erik.vdbroeck at telenet.be</font></font>
</div>
<hr>

     The one publication that devotes all of its space to the KIM-1/6502
machines is:
               <a target="back window" href="../kun/kimusernotes.html">KIM-1/6502 USER NOTES</a>
               P.O. Box 33077
               North Royalton, Ohio 44133

     Six issues of this bimonthly newsletter costs U.S.$5.00 for North
American subscribers and U.S.$1O.00 for international subscribers.

     Here's some pointers to other KIM-1/6502 articles-

<u>BYTE</u>-
     November 1975 (p.56) - <u>Son Of Motorola</u>
          - A description of the 6302 instruction set and comparison
            with the 6800.

     May 1976 (p.8) - <u>A Date With KIM</u>
          - An in depth description of KIM

     August 1976 (p.44) - <u>True Confessions: How I Relate To KIM</u>
          - How to; use cheap memories with KIM by stretching the clock;
            expand memory; implement interrupt prioritizing logic; sim-
            ulate a HALT instruction.

     March 1977 (p.36) - <u>6502 op code table</u>

     March 1977 (p.70) - <u>Simplified Omega Receiver Details</u>
          - Using the 6502 for signal processing in a low cost navigation
            receiver (Mini-Omega).

     April 1977 (p.8) - <u>Kim Goes To The Moon</u>
         - A real-time lunar lander program for KIM

     April 1977 (p.100) - <u>Navigation With Mini-O</u>
         - Software details for a phase-tracking loop filter using Jolt
           or KIM.

     June 1977 (p.18) - <u>Designing Multichannel Analog Interfaces</u>
         - Hardware and 6502 software for an 8 channel analog I/O.

     June 1977 (p.46) - <u>Teaching KIM To Type</u>
         - Hardware and software for hooking KIM up to a Selectric.

     <a href="../art/fly/p01.html">June 1977 (p.76) - <u>Come Fly With KIM</u></a>
         - Hardware and software for interfacing a Fly Paper Tape Reader
           to KIM.

     July 1977 (p.126) - <u>Giving KIM Some Fancy Jewels</u>
         - How to outboard KIM's seven-segment displays.

<u>DR. DOBBS</u>-
     March 1976 (p.17) - <u>6502 Breakpoint Routine</u>

     August 1976 (p. 17) - <u>6502 Floating Point Routine</u>
     August 1976 (p.20) - <u>Monitor For The 6502</u>
<p align="center">
173</p>
<hr>

     August 1976 (p.21) - <u>Lunar Lander For The 6502</u>

     September. 1976 (p.22) - <u>6502 Disassembler</u>

     September 1976 (p.26) - <u>A 6502 Number Game</u>

     September 1976 (p.33) - <u>6502 String Output Routine</u>

     November 1976 (p.50) <u>6502 String Output Routine</u>

     November 1976 (p.57) - <u>6502 Floating Point Errata</u>

     February 1977 (p.8) - <u>More 6502 String Output Routine</u>

<u>INTERFACE AGE</u>-

     September 1976 (p.l4) - A 6502 Disassembler

     October 1976 (p.65) - <u>Interfacing The Apple Computer</u>
          - How to:  hook a SWTPPR-40 to the Apple 6502.

     November 1976 (p.12) - <u>Build A Simple A/D</u>
          - Hardware and 6502 software for simple joystick (or
            whatever) interface.

     November 1976 (p.103) - <u>Floating Point Routine For 6502</u>

     April 1977 (p.18) - <u>"Mike"-A Computer Controlled Robot</u>
          - Hardware and 6502 software for a KIM controlled robot like
            vehicle.

<u>KILOBAUD</u>-

     January 1977 (p.114) - <u>A Teletype Alternative</u>
          - How to: Convert a parallel input TVT to serial operation;
            interface to KIM.

     February 1977 (p.8) - <u>Found: A Use For Your Computer</u>

     April 1977 (p.74) - <u>KIM-1 Memory Dxpansion</u>
          - How to: Add an 589.95 4K Ram board to KIM.

     May 1977 (p.98) - <u>Adding "PLOP" To Your System</u>
          - A 6502 noisemaker for computer games.

     <a href="../art/tvt/p01.html">June 1977 (p.50) - <u>A TVT For Your KIM</u></a>

     <u>NOTE</u>: Kilobaud now has a monthly KIM column.

MICROTREK-

     August 1976 (p.7) - <u>KIM-1 Microcomputer Module</u>
         - A <u>very</u> in depth look inside KIM.

<u>POPULAR ELECTRONICS</u>-

     July 1977 (p.4?) - <u>Build The TVT-6</u>
         - How to: KIM-1 TVT (same as <a href="../art/tvt/p01.html">Kilobaud #6)</a>.
<p align="center">
174</p>
<hr>

73 MAGAZINE
     January 1977 (p.100) - <u>Bionic Brass pounder</u>
        - How to: Turn KIM into a smart morse code keyboard.


     *********************************************

             6502 SOFTWARE SOURCES
              (as of summer 1977)


     ARESCO                       Focal, 2 1/2K assembler
     314 Second Ave.              6K assembler/text editor
     Haddon Hts., New Jersey      (send S.A.S.E. for info)
                   08035

     The Computerist              Please Package, Help,
     P.O. Box 3                   editor and mailing list
     S. Chelmsford MA             packages
                   01824          (send S.A.S.E. for info)

     Itty Bitty Computers         <a href="mailto:tpittman@sbuniv.edu?subject=ref=FBOK @ www.ping.be/kim-1__6502">Tom Pittman's</a>
     P.O. Box 23189               <a href="../tinybasic/tbum.html" target="back window">Tiny Basic</a>
     San Jose, Calif.             (send S.A.S.E. for info)
                    95153

     MICROWARE  <a href="../microchess/microchess.html" target="back window">MICROCHESS</a>,       (Chess in
     27 rirstbrooke Rd.           1k), assembler
     Toronto, Ontario             (send S.A.S.E. for info)
     CANADA   M4E 2L2

     MICRO-SOFTWARE SPECIALISTS   2K assembler/editor
     P.O. Box 3292                (send S.A.S.E. for info)
     E. T. Station
     Commerce, Texas 75428

     6502 Program Exchange        Focal, Focal programs,
     2920 Moans Lane              Kim and <a href="../tim/timman.html" target="back window">TIM</a> programs
     Reno, Nevada  89509          (send 50c for program list)

     Pyramid Data Systems         1K monitor system.
     6 Terrace Ave.               (send S.A.S.E. for info)
     New Egypt, New Jersey
                   08533

     Julien Dubé                  Baudot Monitor
     3174 Rue Dousi               (send S.A.S.E.)
     Ste-Foy, Quebec G1W 2X2
     Canada
<p align="center">
175</p>
<hr>

<a href="mailto:fjb@torfree.net?subject=ref=FBOK @ www.ping.be/kim-1__6502">Jim Butterfield</a>                 Charles Eaton
14 Brooklyn Ave.                19606 Gary Avenue
Toronto, Ontario M4M 2X5        Sunnyvale, California
          Canada                           94086

Lew Edwards                     <a target="ext window" href="http://www.benlo.com?subject=ref=FBOK @ www.ping.be/kim-1__6502" alt="his website">Peter Jennings</a>
1451 Hamilton Ave.              27 Firstbrooke Rd.
Trenton 9, N.J.                 Toronto, Ontario M4E 2L2
                                         Canada

Ron Kushnier                    <a href="mailto:rlewart@monmouth.com?subject=ref=FBOK @ www.ping.be/kim-1__6502">Cass Lewart</a> or
3108 Addison Ct.                Dan Lewart
Cornwells Hts., Penna.          12 Georjean Drive
           19020                Holmdel, N.J.
                                          07733

Stan Ockers                     James Van Ornum
R.R. #4, Box 209                55 Cornell Drive
Lockport, Ill.                  Hazlet, N.J.
         60441                           07730

Charles Parsons                 Jim Pollock
80 Longview Rd.                 6 Terrace Ave.
Monroe, Conn.                   New Egypt, New Jersey
         06468                           08533

<a href="mailto:eric@rehnke.net?subject=ref=FBOK @ www.ping.be/kim-1__6502">Eric Rehnke</a>                     Joel Swank
P.O. Box 33077                  #186
N. Royalton, Ohio               4655 S.w. 142nd
          44133                 Beaverton, Ore.
                                       97005


*****************************************************


Here are the folks responsible. They eagerly await your
praise, comments, criticism, indignation - whatever...
Please do the courtesy of enclosing a S.A.S.E. if you
wish a reply.
<p align="center">
176</p>
<hr>
<div align="right"><font color="gray">HTML version by:      
Erik Van den Broeck
Elfde Julilaan 130
B8500 Kortrijk
Belgium

+ 32 56 202142
<a target="back window" href="http://users.telenet.be/kim1-6502">users.telenet.be/kim1-6502</a>
erik.vdbroeck at telenet.be

The WAV's, MP3's and<br>listings at pages 38 to 111 by
<a href="mailto:dick.blok@hccnet.nl?subject=ref=FBOK @ www.ping.be/kim-1__6502">Dick Blok</a>
</div>
<div align="left">Special thanks to <a href="mailto:rlewart@monmouth.com?subject=ref=FBOK">Cass Lewart</a> for lending me his original 
copy of The First Book of KIM, to the team who wrote the 
book especially because it's <a href="#p4">free</a> of copyrights, and to 
<a target="ext window" href="http://members.rogers.com/yhpun/Kim-1.html">Ian Pun</a> who already published parts of this book.
</font></div><hr>


<font color="gray">
THE FIRST BOOK OF KIM - corrections

<u>Authorships:</u>

SORT, page 136:  by Jim Pollock

FARMER BROWN, HYPERTAPE, SUPER-DUPE,, pages 64, 119, 138 ; by Mim Butterfield

<u>Titles</u>:  MUTI-MAZE, page 92, should be MULTI-MAZE

<u>Program corrections</u>:

BANDIT, page 35:  change 0252 from 08 to 0B

CODE TEST, page 58:  addresses 02CE through 02DA should be changed to:
       D1 65 D4 65 D5 85 D0 A2 04 B5 D0 95 D1

<U>Operating instructions</u>:

LUNAR LANDER. page 84:  After viewing fuel, return to altitude display
         by pressing button A.

WUMPUS, page 107:    If Wumpus moves to a room containing a pit or
         superbats, he will be hidden and you won't be told when
         you are near him.  You must either guess his location or
         make him move again by pitching a can.



<hr>



<u>THE FIRST BOOK OF KIM - corrections</u>
<u>Authorships</u>: SORT, Page 136 by Jim Pollock
FARMER BROWN, HYPERTAPE, SUPER-DUPE, Pages 64,119,138 by Jim Butterfield
<u>Propram Corrections</u>  BANDIT, page 35: change 0252 from 08 to 0B also 029C to OB
CODE TEST, Page 58: zero page locations in random number routine
duplicate others, change E's to D's. Send for re-write (other errors)
MUSIC BOX, Page 90, Missing lines  027D  84 E7       STY LIMIT 1
ADDITION Page 24 needs to be out of decimal mode to work (CLD or 00 in 00F1)
<u>Instructions</u> LUNAR LANDER, Page 84:  Aftor viewing fuel, return
to altitude display by pressing button A.
WUMPUS, Page 107: If Wumpus moves to a room containmg a pit or superbats,
he will be hidden and you won't be told when you are near him. You must
either guess his location or make him move again by pitching a can.
<u>Titles</u>: MUTI*MAZE, Page 92, should be MULTI-MAZE: so named because
it does generate a new maze each time it is restarted.
BLACK MATCH: I.Q. does n<u>ot </u>automatically vary (change 0254)


<hr>



THE FIRST BOOK OF KIM - corrections

Authorships:  SORT p. 136: by Jim Pollock
FARMER BROWN, HYPERTAPE, SUPERTAPE: by Jim Butterfield

Address: Pages 4 & 176: Eric Rehnke and KIM/6502 User
Notes is not at 100 Centre Ave., W. Norriton PA 19401.

Titles:   MUTI-MAZE, p 92, should be MULTI-MAZE

Programs: BANDIT: change 0252 and 029C from 08 to 0B
 CODE TEST, p.58: change 02CE thru 02DA to:
         D1 65 D4 C5 D5 85 D0 A2 04 B5 D0 95 D1
 MUSIC BOX, p.90: add 027D 84 E7 - STY LIMIT+1
 MINI DIS, p. 125: add 0364 68 - PLA

Operating Instructions: general - many programs were
 designed and tested for audio tape load, with the
 CPU out of decimal mode. Set 00F1 to 00 before running.
LUNAR LANDER, p.84: Press A for altitude display.
WUMPUS, p.107:. If WUMPUS moves into a room. with a pit or
 superbats, he'll' be hidden - you won't be told WUMPUS
 CLOSE. Either guess or pitch a can to make him move.
</font>


<hr>
</tt>
</UL>
</pre>
</body>
</html>
------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=fbokcover.jpg
Content-Type: image/jpeg; name=fbokcover.jpg
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/fbokcover.jpg
Content-Transfer-Encoding: Base64

/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0V
FhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoL
Cw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7
Ozs7Ozs7Ozs7Ozs7Ozv/wAARCALTAjADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6
Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ
mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx
8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE
xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1
CC2EVxPsUEO4ZsknJwMkfl+lWYrdNwJHTng0+KP5XY/8tOcDnFDSLEOBnv715rS0
Z0OTeiHswRclgoFZl1dvM2AcKOnvRcXDvu3cDPTPFUhcFiEhjaRvRF6fX0qXK+ht
Tp8urLcLBmJ3Z4/Opvl3jahLdcgVJDbeWuJWBbPO2iSZRgIACfbmkNyu9CP+A7ie
ev0/p/8AWpuI125UY7Y/SmlsdScZzgHvTCST1UfjzQykibcANwx9RTQY1JVUUcng
Um75l4PA6mkLE8c9MEikFiQlScYGD6UvBGBjOKjX5ic9+OlSFOBxQJ6EZI6nn3py
hSMhc5FPKHkdeeMUMoCjdjBPpQFwX5Tkr1GOaVndgckDnsetGTn3prHr0x655NAt
2IAAcngj8MU5XRiBzxxxTeBg7Mj6UmQAeMH0FA7XHuyj5d5wee3t0/z3qNmJPfH1
p5Qk4zz1GOTTTGMrz370ArEDFhjCAAdc05F3uCQMeuetHJJyhGOhqcLkcr0pFt2I
dvzfzyKaAMnKkc9alY7Qfm565xUPmhm27vmHJAPSlYE7kiorZUY/nTTHGr5Ccn07
mlUFW68HuO9OJz1aiwEZRFwSo9u1PAVvbjoe9BUFcMc/QU4IM4UA56UwbGvCrccC
lVOeVPJ6U5dx9eKeUyOM5HXNBPNYgeNc8gZ+lBTOMrweeBTnjPYkD6UisSxAH5UW
KuTKAcBv/rio2XHTH40gLbvmH1PengZUZH1GKCdiMqrD7oOPbtSKgAwDxUuMDGPw
xTA2G4FA02Hl5PTH40zbh+Bz3qQsSAOAP5UD1BBJosF2M8tOSaR4wwxyR3qTkEcG
kZh1AwPekO7I4huJ+Xgev9KkMe5SNo3Y+tMAVWJHQ+p4FKu4DgdaaBiphlAKgY7g
5pfJz82ePakYD1YEUoLblbdkdxQL0HFMcDv0NIUU49h0p+9M4zn696i68A4OeuKB
K4oLbcdCKa8ZZwegGeMcGhXyxUDkdTilAcOCG/8Ar0blbC7UyeBQsYVeOcnIGRTw
F64z6c0pOO557df1pk3GMFHXGfrQGTJAHSgsBJtx3/hFP2n2AzSAYFGQSBTimBwR
nJoJAU5AII79aXjqSuOuKBXIVUlj2p5GAAcdPypygDvSEfNjgnPrmgd7saqjb6H+
dAQ4HPenqrBscEGjYxbHQEZ9zQFxgyM5BJ+uKCxDeg9Kk2nnAPvSBs9QRzxkUwuK
rtgN82R+lEo8wDy+GUcE8ZoC7hkL07YpY0wm45zjv61V7Eu241GbYQ457gjmkKqW
Q+WCM9T246j1PT86mkTzvmUhXA/zkVECVdgFKnuD/jS0EnchKOdSSRd2xEIJzwCc
YHv0P0x71bZRK2fuv0BxmoFVxMzFTlgOR078dev86nGQQTgYzTF5kbAcI2Sw5GR+
tN2ZJPHvx29P5VZYK2QQozwSOtQSDy3yzDnhTRsNO+hUeITLnADDn6GqFxAs+m3F
vKwkCS7l3ruwCOn5rmtGZSqi4SU7gPmUHhgPXH161FGIprW4kV0eN2ChlPTGcj8z
XThdKl0Z4jWGpftp99snlqTlAWk2/e/EDHepJI2RdxBY55HH9eKo3CeTLKyJznIO
c4+gzTVWd3y549DXL5GqjfVEj2k93tZpDBD1OMh2/wAP88VbgggtIgkEark8sRyf
qfzpiPIw+ds+560MWIBJovbYlpvclZjgnPfoO9VpGKMQFHPXFI8hUEHnH51Fl3Yc
Ui4xsKpJPSlCc5UA8/XNAQgYyelO2Etgg57YoLuSIuQMHPoBQy4bOOnYCg5Xjnim
lyBndwOlBA4AZ6gfzp52gHHX2qMHcdxU5HQDnFKc8HvjnmgGh5baTnr06daaBwDy
SfXmlwuT8oxTgwxkjj+VBIwkF8449KceQM4APfHehsDkgAD1pAcKTtJ9h6UDHcMe
ATgdM0gxwFz+NOyu0kDgjue9N4P3uc9xTsSBzxkkml5zgk5pBtP0/lQ2NvHekMQv
gkL1+lAbdjPA9KAm4FSQSPTtSfMpwOg7GgehDc5MTLH9/acc9+3Nc9arfLqnmyRs
iLkFmOQw9sV0gQ7i5U+ntSFFbI5OT3FF7FpjInEnODk9jxUjAcYGTnjNVirwzfd+
UnnFWRhhjcMH1FIbAZXgcfyp445/nxSDg8Z5qQqR/e96ZDYoBxnPANNdyoGF59cV
IucDnjtzRt+XqT60Gd9SsWL9Mjj60Krbhxux0I7VMRtxkD9aRiRgrz60GnN2EJ4B
CnA4NC42k55HWo2MgYYXIPv0pyjAPAHqeaAtoDZyR+OaQ7s4GPxoB3Hg80pTJ5Yk
+5zSDYQD17etKvXGOnpSHtyfz5pR8w74oGDcngc9+9MxwBwRjqeaeR24/HtTeMd/
xoBESqfM4wAPQYqUNgnOevegKd2cD607GOMjOM4IoG3cYQSMggj1pxQY4I+uacIw
M4GCepxRjheRwfSmTcbhRxg/WkKAj196cTkkdMepo6nIPT9aEO5GBg9gDUgywADc
D3pAgDFsdfX0pSy4zwAPQ8UA9RdnuM+1MbO7hTilLBSSfvemaaWZiSMY69KTBXFz
jAHX0PFOZt2BtwPWo1UhizDr39acpDdRg/WgbQvzDqaQD5yBn1waTt3pQBuJ5+ua
BD1QEEAn60KJNzltgXPy4yOMDr+Of0pwYjIB60BcYyPmz0pk3FBIAHU55qJzhhwx
7cGpMfQ47ZprDLEkDp1B/SkCEBc4G0genpTwPl9RzzTNwJFOwe2SOwpgxyjGGJwD
2p+Bj1Pc9qjXAUc/MDgmkbKtggcniglq7JEIzjHf1pGi3HzFADDrj+L8O9IxPRRj
PQnvTgec7sEHsKewvMjDBwVzxngZzmnhVA6cfUU2VSpWRT8v8SgdPenZBxgg+1MY
vAOcMOKQnzVJ5XPPHr/nFObG0nPT2pCAOpHP60CRUP7vhxkDof6VSs7ZXttSUAlR
OHRV6cjn+ZNarbCCCoIPZh1pNICqLiJQNobgY7cj+hrfD6TJrawHzRu8YLLtIA3A
fSo/LK89+9TzEhiSoYccE1CQSDkY/lXP1Lg3YQ5HoRjqKbvIPGMelKxPTAI61WeR
jkMhVR0PXd+XTtSNEhZpC0mFB6ce9C54PQe9RgsWJ7jvVPXNUTRtGutSlAIgjLKp
ONzdAv4nA/Gjdl7D9Y8Q6X4fto59VuRAjttQlGYscZ6KCf8APvS6L4k0vxBE8ml3
guFjYK+EZCp/4EB+deD+J/FGo+KL1JLvaI4yfJiQDCA+/U9B1rb+GV7rkXiBbOxL
NbnMtxAcAEYxn5hwcleldHsHycxgqic+VHt7N0bPI4GTUc1xHGjSSyJGg6sxwAPr
WRr+uyaNpE+o3Nk5jgUZYSL1JAAx9SO1eH3t/rXjHXFDl7m6lJWKFcBV74UdAMD9
KzhSlIpzjHc+g7PUrLUA5tL2C429fKkD4/KrIYDvk/yr5odNT8NaxtcvaXtswPys
CVyM9RkdD+te5+HfEOoa74dtNRTTVdpVIcCYAZDFSRn6E4pzpONuwQkpuy0OkLfK
TuyAM+tIr7YxuPzHGccVV+1XgUA2HUd5VrmPHfjC58N6Sggt1W7uyyRMXB2ADl8Y
wcZHXuazs20l1Hprfobmr+LNF0NwuqX8cDuMqm1mbHrgAnHFWNJ8QaRr8DSaZeLc
Ih2vhSpH1BGfxr580vSNX8TahOtjE93cYMspeQKeTySWI6kil03UL3wx4iSbayTW
k2yaPcPmwcMmeRzyM810OhpZPUzVRN7aH0nG+Y87mPHTvWVrnibR/D0cb6rdrB52
dilCxbHXgA+v61U1TxHNpOgy6pcWYCRR7tpmByT91eAepwOleGSy6t4y8SZH7+8u
mOxN2AoAJwM8AAA1nCk5PXYcmo+p7Pp/xK8M6ncC2jvGglc4Tz4yoY/XoPxIrqWf
d34/Ovm3xD4dvfDepLZXpXc0YkUqRyDx/MGvZvAep6pqHg6yuJoPtcmGTzGlAZwr
EDPHYDHqetOdHls4u4RqJ3urWOs3gAAdT60jZ4Jzg96pGW8xlrLB9POH8wKaJ9SC
/NYIc9MT5/pWKTZrolc0A7dAvHQ1ICyt+OKpedd+WD9lTJH3TLj+mKYl1qLhj9gV
cc/LPkn9KEmyWtLl2WMvgZwRzwcVEu4KARTI5rtlJktEGfWXJ/lUKXF8rsDp6qOz
CcEt+nFFmxp+6aCLnOScDqKnC8AY5qmk1yFx9nVM/wAJl/8ArUyK7v3kZWsURQfl
YT7s/gFppb+Rm02X2AIx7+tIpGMjp/KqbXF5tO21Qf70n/1jUZuL4uALONl9TNz+
WKdrkpaF5iCMHGPpUbYGOc8enSoGlvMAxxRk98ykf0NRPc3u4D7IhGM7vN4+nSlZ
tXLSsWGXnP6UpYYHAyOvFVWkvcApbxEnrumYf+y0b73+K2T6rL/9YUkr6lvTcuK6
7cqCOc03B6kCq7TXZiysETH0MpH/ALLT91yR80cYPfEh/wAKXQLWJGGfT0+tCnOM
CoN92Af3MWT/ANNDj89tCtchQTHCG9A5I/lRsrj8iwWIOecdqb8zA4wfWq4kvmPz
QQe3748/htp6tdKnzRxg9eHJH/oNDTDbQsKSvcelBcbuTjB9Kqq9/k7kgVc9RISf
y2jFML3pbkRDnGSTx+lFmmFtS/vJwBwO2KaRn5uSD24qpvvGkKhYNn97ec/lj+tL
JNcxAZ8kgkDJJHf0xTVxJdi2QXGT9cGmlskcZ9qqsbvnHkgeuSf0/wDr0Ob0qMNC
x98gD8KBpLuWTwcZ5pevQdKrYvANiyQKfcE/pmhReqnEkDk9TsI/TJoS7idrXJmB
ZsAHH0oBz8oIDd6gcXpXIniB94z/APFUm67TaHmiYscArEwH4/MaSGWNrgjcQQvU
f1p+CTz0xxzVdVvGztuIP+/R/wDiqUQ3XGZYyB6Rnj8zQ9BPsTEHvgfSnDBPJOPa
qTxahvytxEU7AwnJ/Hd/SnCC8PK3kY9cw/8A16BteZdIAweRQx6bietVPLvVOPtc
RB7GA5/PdTJ0vSB5d7HH9YNx/nR1QlG/UvEbk46dPehhkYxxVNVunUAXkf4Q/wD1
6bJa3zr+71BUIB5+zg/1o62BLuXVUL6/UU5tp53DOPxqgYrzywgv1L45fyR+eM1G
sGpKCrampPUH7OvFNO4OOlzT7Y5AHfHFKQenQDtVBre/wf8AiYjBGM+SvX1pkNtq
EYPm6mJeeP8ARwuPwzTWzbJsXy2GyTnHJJxSqTuHP5Gs8298WyNTK9ePs65p8Vlq
C5Mmo7/YQAf1o2VweljRTcWLEg5/Hj8aYVMOQQNjHj1qlbi8hvSktz50bJuA8sKV
OR6de/6VpD5wVbABoRLVhg65zkjvSh2LAkc+x6U0HaxTqRxn1pGIK5X5ifagLCPJ
hemT7d6k0xdjTgDBJBPpySf61CQBwQenXHWpdMY+bOO/y8fnW1D40KovcY126lQQ
pORmojzwSKWd94DfdBGQMY61EXAGT+lYN6msVoOJwfl4HqecVC5DcZzj3pJJdoch
gxJ+70pDzyq57ZFBaHBST/SqHiDRxrmhXentjM0ZCEnhWHKn8Diry/d285Bz9K5v
x/4hvPDegJd2W3z5Z0iBdchRgt07/dx+NVG91YUrW1PIbi01nwZrcE08PkXMLeZE
xwyuMkcEdQeffmvX/A/jS38VW7xuiwX8PLwrzlcAbxx0ySMc449a8p1/xxq3iO0F
reR2ypldzRxnccZI5JOOvbFdN8HNJuDqd1rLAC2WI26nIyzkq3T0AH610zjzQ5pK
zOeErSstjpPi3NNH4QjRCQk12iSf7QAZsfmBXK/Ca80211O/W6njS6ljQQF+CQCx
YD/x38q9Q8R6DD4h0O402WQwmcAiRVztIIIOPTIrw3WPAniLRoJ7q7sgLaD70yzI
VxnAPXPOfSohaUHG9hybU1KxrfFa7t7rxUiRuGaC2RH9iSzY/Jgfxr0H4YRkeBLT
PIZ5Mf8AfbCvCyZrqVQxMkhCovGSQAAAPwAFfSPh/R10HQbXTIzkQR4LcjcxJLH8
SSaqquWCiKDvNtF12AI44HYDFeF/E/VotV8YSiLO2zjFvuz1IJLduMFiPwr3V2Eh
OGBwcEDk5r5w8SkDxTq3b/TZgc/75qKGsrlVX7tj2L4daWNF8IQO7jfdj7S5zwAy
jA/BQP1rxrUXOseJbp7RS/2y7cxDoW3ucfzFel+I/FVppHw6sbC3ZJLm+sEjRM8r
GY9pc/yHv9DXGfDbR/7W8WwtKSsVkPtTbf4irDaPzIP4VpTfxTZNRbQR1fxZuY7T
QtK0dO7+YM/whF24/Hd+lQ/BzTlM2oak8JJXbDHIRwM5LDr/ALtUPjFHINfspSuI
3tAo/wB4OxP8xU3gPxhpXhzwjfJdThroXDSR24BzICqgc4x1U/T8qWvstOo7Xqmb
8Vb77X41lh2gfZIEiBH8WRvz/wCPY/CvSfhlE0fgPT9wwW8w8+8jf0rxOzt9Q8Ue
IFiDCW8vZSzMcAZPJJ9hyePSvpKzt4rO0htYECQwoEjXnAAGB/KlV92CiKGsnIlI
AHHPrimBTgELgZIxnmnk84JpcjHy/hXMa3Y0AEdPzqM5AIOT+makDFhngfhTD15G
cikUhDgHgDOO1Cysg6AY74FJgBu/vTiCV65B4oQ9B3mMQB/n86MkDPftTGdYkMjs
FUdSTTI760fhbuIn2cZFC1FYsYHtnr0pAcNx19D2qEXVtLIoSaN3OeFPpVkjeMYP
Toaom/UCNvPbHrSHHbJHtxQU45HvTQe4H50gQgHznt7U489gAKFI3E9DSYwew/rS
GKVJGAOAeR2ppIHIx9cc0vtjH49/Wk+Y8cfWgEKTkdelNOT16jnFKT3C9OnFRuXL
HCZ4pDSHAE80qkcdcZ60iggdOB704epHNAMUAZ6t9RQyqQe/1FBbvxk01s7eR+tP
QSIgHz6jPX0pxB4IIX60IpTqST3FSYO7k8elItsaCGGDz7daHwAMZ6cUbQXGTjvj
nrTnXPfApkjduQMsBg9jSo2Bjk+nGKQDnAJI9MYpccY/lzijYYMwzwOaELOeTwO1
MYSAggAg/wCPWpFHHA5xQLoP24XgAD3oI9/wxQAQMjke1HqMce5oIGFcPjkYoJzw
Tn3p4XaDyfoKjLZGcc5oKWoE7eBkj1xTFySSFGPXNKTubHf37UmCBuAGPU0ikODb
I8yNk98DFAIPGOo603zG6E/pS4YDJG0ii4WDcSQDk88cU/AHJXnGPQ0iliR0Io2g
nmmIf8rcH6UvCjgYJ/GozyOevSlHDEMMHpyO9ArCSOqyICMF2wB68En+VSAAtkKD
nr3zSHOeuSOlNU7vlJ4qthDC+b5D6xnj8RVjO3GOBVVlY6lENpKiJ8n8Vx/WrRBU
MORgcUNiZKCrYzktjHApjJ8xySwJ6/0pFLfT6DinhNy9ge/vT3I2InTAbBx9Oak0
0ESXHvtP86b6rjBB57ipbEAvMf8Adz+ta0f4iFUfuMx7SR5LOJiD9wdT1NSpE0ql
RG7keg5H41LYKjabbAgf6sDJAJrWt7dLeIKvJ7sepqKdNzloaTq8qMSW0ud5LQuy
joMGmSXEEG3zZAmc7cnr610ZAIIIyD1BrmtbsVj1zTp4ztU+ZvUdPujtWs6HKr30
IhWcnYF1GzK+YJtoU9XUqPzIFUfE0FrqXhm/RoY7qQ20jQIU3nfsO0r788Y9a3IY
VLdEPzcccipe3QcelYJ2ehpOV9EeDeEvA2qal4htft+nyW1pC4ll+0xMquoI+Tkc
5z+Wa9yt4o7eJYYokijjUKiIMKAOAAPwqdlBJHOcdqaUUDBPOetXUqc5nBKKEYkj
BwQPbOK8X+JXjb+17g6Pp0h+xQP+9kVgROwxjt0BB74PXsK9pK7ScYz3yK5nW/Ae
geIJ1mmtjbyqxZ5LYKhk9d3HP16+9Kk4qV2OV7e6cT8LPBzz3EfiS9UCGMkW0fXe
3ILn2HOPf0xz6B4xOpJ4Vv20gSG92ARiJcv94bsD1256c1t28UUFukMUaxxxKFRE
UKFHYADpQxbd82Me3NEqnNK7CKsrI8l+Ffh/WbPVry6u7a6tLUwhCksbp5rE8EAg
Zxg/TI9aqfELwDqMWsSarpNnLdQXb7pI4UZ3SQ5J4HOD1z6nHpXsi4fjIFKwyAAa
pVnzcwOC5VFnzxpPgLxJqt4IBpdxarjLS3UTRoo+pHP0GTXsvhXw5b+F9K+wwbnd
pN0kxX/WsQOR1wvGAPb3yehz14xim5AHzBQOvNKdZyVghTUXc5rxx4PPivSUhjeO
G6hcvFI6k9jlD6A8c+3SvJz8MvFYvWtv7PGA2PN81dn1zn/69e/q4ZMo24EZBB4p
SV4AHOOhHJNOnWcVYU6fM7nGeB/h/D4WVrq5mFxfyJtZ0HyRr6Lnrn146du/aY56
dD2pMZySOR2xTi3zBe/Ws5ScndlJJKyGnIIyME0HOCMY57jinEjoDzTQcn5uR7VI
0Mwc9D9akEYIyVPT8aQDH060u8euef8A9VFgbY0RjkEd6RhgdcD6VJkA8evFU76S
3JjSSRA6yK+0nkAHr+lA09dSGVLiJVeN5p2DDKYQZGR3wPellFxcDdHHNHwwySmV
ORx19qu7kAEmVC9c549uaisriCeJhHKjsrsflIOPmIBptXWwN32KVnp89tbwRGdx
scnJC8DngdfUdc1pIrKTukL+uQOPyAqtcyJ9rtVVkwkpLjOcDY3X9Kcl3bG9kj89
N5VcKWGTyf8AP405Xeohz3UQQeXIkhJAUB/U4pQZmGXRM9tshI/lSyxCQbRhGBBD
bc9CD/SklFxt+SaNePvNGT/7MKSSGtxpnlhZfNRFRmwGMnTgn0Hp605Lq3nbbFNF
I46hGBx+VNEc2VMkqME5IVCM8H3PrUjEZGBz3odhrUcN2Mr+dOGdvT2pgOOh59qQ
jHOME9SakLEcl0qSeWVkJx1CNjp69P1pgkjYZ/eDB5G0jP8AjVaygSSzgmmiDSGM
Eu3LEkc8mrMdjaqCVt0XPPCgZxTdi9h0lxFHgvvKnPIRiBj1wOKlMi/MDG/Gex5A
9KYLS1dAWhRwoOAwzj1qUQRnLCFAxGOQMke9GliG0QtOFySrkBsY2n/OKlEwYhQr
cgc46Zpv2C2f5Gt42AO4BkGM+v1qreWs0dyskUVsLWOE5BX95uGcY47cfrRa6C6Z
dMaDBK8+uKcAM9B17UFl2gAH6mkVgDgEk+tAtRBHhicH8TStuOe/sKRjz/jRn2oG
IASd1LnK56d8GobuZrW2kmRN5jUkDpk+lR77770kUAPtISP5UWY/MsnHIIwMdOtA
5bPP1qoTffeCwE44G5h+uP6U6MXx+ZlhDdMBiR+eBS1BpLqW8nselKcH72OT61Wh
jvwCZDAe67AR+tK5uI9rO0WN4XaM55IHWm9CXZO1ybbzx3pCvPr+NOAAGen49KVh
8vIwB2pBcjIbGR09KQKcg5/I04A5Y4wCaM5/hoKuIUC4O4nIppHIz29TUn3cn06Z
60wuM9cEdhSBNiqFyfmA9/Slwn8OST7U3cCvTHue9BIxu6nsfamArADinqF4weB6
Cos9CMHPfvTg+DkcD37UIGh2O5P580pUA4IPTjJpgcFhyMdgPWnn5xjcQevFUSyF
pB/aEa88xMc/iv8AjVpWJHBCjsapOD/aMKg5XyXzx3ymP61cAO0biDgdzRoKSQFi
Fz97HrQGBOSM8frSEOzgYAA9O9LtOcHjv6UC0HsVkBA+/tp+ngiScNnd8vUfWoA2
fmRuM8Gp7A7pJyQATjJH41tSf7xETVoMy4IGs9PihU7nVeec85zW3Z3C3Vqkqdxg
j0I4IrMOJJCMHB7VXktr22la40+48uQjmOUbon92UYOR6gj3zSo1OV69SqsOZeZ0
NYWryfaNas4IJFZoA5mUc7cgbQfT1/KqcVz4vlk8u6l0mCIjBe3jkZ/bG44H45qS
Gw/s++sVRpZS4fzZZGLM3HBYnrW1WopR5UzGnBp3NQAAcqBnrxQ3Tj680km0dCcD
8aYW456Y6VyGyRKSMjjrzkCm7gDwPYgim8NjaDuJ5FPye+OmOmaAtYjb/WKu0knJ
JA4/zzTgBwoY4ppOZlZgpwp5xyOn6VKOMHuO1ANiHhsHk/SmEZY/L81P4Axg+xzS
lQOcdR0HehhcYTwQTx9KaOPU+nHepAjgk7j9KaVx93HJ60WGmhjb+Bj2+tJtDE4H
PseaeFAOS/Q8knikJJBwD7luAP8AGk0VcFTjdjGcnGO9KV7kdBzil5BAwSDxinFj
yP09KCb6iKq7eM9O5pWXOT6+vSguTwVz6mlK5GelOwhh+ToFwO9MYDk4zTz0AxSn
HpSHcauCuAQMdRSkHBwpx2zSqAq9xnnOOlIWJzzk9frQHUY7bRjbyKaDl27nAyad
tIOc/hVeW6+zzbWhkIYDDKuRnJ4+tBRHzBptsDlyGhU/99KM1ZkXFyjZGQjDr6kV
EyP/AGfGGjLsuwlccjBBP8qSOcXU4eMOFjUqcqQMkj+W0inZtXYdbomX5S2QQM9h
7U2cnyRnoJE4/wCBCoZrtoJPK+yzyGQ4RlUY6d+f84pstwZ0FvGkgkV42YFCMDcD
1+gNFmORdZiGwo/Gmksc9NuORSjBOSM/Sg5A9MUgGj5kGARnsKRycADj1px3rwQO
vFNALemKBiBeuSMf1p54XnPPrRtO3px7U7kA8DJpA2Z9reWoSKF7iBJVXlC4BH4V
ZF9aAEG5iXHXMgpp0+Fp/tLxrv6Z2LkDGOuM9/WnCwhO7oFJGRtXHGfbnr3p6W0B
2uhTe2YYA3cHPIzIAf50r3trEo33MSnPVnUc0yfTIJtisBhMjARe/uRx+FONrHud
yfvAg5UdD+FPTQVkC6ja7QftcJz6SA//AK6gvdQtlspm+0R58s4G8c8dPepTYxvG
F34G4MDtXrjHcUr2aM6MxPyYwAq44/D+VOyYrEzZxgdc9aZlRxyce1SYA4A46frS
GI8EHjqBiosNMY7LwMj3qJoo5ZS2+TI/uyMB+AzUrRls4wPoKiAYHgjg+lBSsRXd
sq2UzRM7Pj+KViPyJq6U+fqMY7DvVLUHZbCdgCGWMngYOaulxJjGSM9fWq1tdk7D
tqn3PegEKeufqaRVIztOB9aCGzzkADjFIQ7IGelVrw7oU7fvYz1/2xVkRjnJPOet
V7oN5CbSv+tjJOM8bhRcSsTcjqe+cZ60q89TnHqaOT6dKU89MY9aQXGrtDDBJ9hS
PhBwSfbNSjIOM/nUbklieR9KY09SMP0wB15yaTkty/1p4+Y989qCynjOcdgaRQxx
tUdgDnvTlQbRnBpMkk4JxjOKUuAp3EAL1J4x700PUXaDyCe3agrhSeR6/ShTk71J
Ix1HSnE8kZzg4OKETdkaptORgHv3zTlHzYxn37UuU4BbnP4048j0NAXKpONThTqG
icnA64K/41c3KCe/HSqcm9dThIXjypOQPdatDLEjjHXGOaegmupIvHABOehzSc7u
FJx0z0peBkEn6D1ppOWO3HuQeaCEK5+U5XHPYc0/Th++uVI2n5c9vWoCDwBu/OpN
M4nuWb/Z7/WtaP8AEQpr92ynaSF4wSpHpnmrJPTcQD3AFQxxmOBEJwyjBqTB65yP
rWOxq9dSRCD3yKrXKsdRtCGAXDgjr2GKnVm56n2FU7uSQavp4Xo3m55/2aa10RGq
eiLxznkZP60NgqCARg5yOtB3Dp6+1JhQw+UdetIAJJwQe/rRhs7j375pHbjDLx60
K+ABke5pjsKGbzApIyRn3pzMSQOPembsdwMCm+YDyFpBa47zGU4I59DSrJycj8Ka
3XJHOaVMkcKBxxmhDaVh7PgE4OOufWiNgUJySfWkJwcFcf7RHFIpJ5B79+1Mi2g7
YTz2HrULMkTbmVtpYAdwSe+KsF9643DJGKYVfD7SCMcZ+lDQ0+43emFG4qCfTj9K
kDAdCeODVcAoo59guScf/XqUKTyTj0xQNpD0UkFiBkc5J608FVP1HTNMI2hQMZPv
S7sNjr60bEPUa8gHXGPYUgfjOP8A69I+0tgnOe2KarL04OOtBSWg44wTx144pu4c
bqeOFPOaYRnJ96Q0BILcH8+aSRGmWPb/AAuGP0BpGDdhzn1xT04UZ+X0yc0Da0Hn
d0AxUNvB5aEMDnexOT6sT/Wpsj5eFHP1pqk43MMA8dc0dCVewksbeZE4wVUnP5Ec
VEsOLqWY4/eIq/kW/wDiqnZgCCMA+tMYEuCCVGeR68UDTdgUjhRyDzxQ2fvbcjPG
KauQeTjOe9KTwcMD6A9qLj6gc7j6HikZSeO3Sl5wA36inBeODn6UBcYoO7g+1KSp
Ofm/Okbg4xx3pfnySP8A9VIZGtwZArRozKw4O0D+ZzTRLcRx5+zu5GOAFB6e5/rS
ae7PYwSHjKA8+4qyMsfTA9aLWeor2IDPcGL93Ad2OAQOTz74pI5Jy0gaJjjJU8c/
+Pf4fhVvaMD5utGADwTntTsJS02KztciI7Y/mz02jgf99D+dQm7lhAaaMgBQz9Bg
dzjd29OfxrS6kHJ+mKpajY2t2jSzRbmRCAS2MflTSVtRqaejRNu3NnaOaUndweBT
ioRQenr70x8nIwBSYLUQRHnByfXpSiEKc7vw6UsYfuBkDk5pGuo0byzvJA/hiYj8
wMULUTk0QahH/oUp77ehq2FAxyABVHUb2JbCfAkJMZxiJsDj1xV5lOP8O9O2lwd+
opyScdPalCdCScmoxkngYxzg+tSgbSdy5H+etBL0GbQvB7+/Sq1+uYkKf89oyc9x
vFWmbr6/nxUN0N0QC4z5id/9oUr21GtXqPUAcHk/pRuHoPwNGSGx796GDFSTii4x
C2euPrSEbs/0pQB/DkA0BBuJJH5UDIZHdVUeUWJboOwpdv38M2DzyOn0qXau3nAO
OlN+UEbevekO40AHALHg9c1GYC0caK7lk5yD9761Ngn+AYx1FIse0Z+7/jTsFyNU
8tSxHJ5KjkD6CpI2LqrZ4bpTmwAOM07kHjAHpnpSEJkA8dfTFN3MQR1K9ulPUts6
ZoY8CmLqVWcrqMKdd0TnP0K/41cBYHk/Q9Kqgj+0YQw58p+/bK5/pV4kDp+Rp6WF
LQjJJ+XH4ikG1WAzz6f5+tO3DJOO55PFIcA56A9R6mhCBnXcf4cDqKlsQf3xHfGA
fxqI/NngYJ/CpbEgtMo7Af1raj/ERM/gZTDBlO3OPboKf0PPPWq9tlYVO7oKmJ5A
PWuc3aHqSQRjPrxVeYn+0rNNoIxIcntwKnAxnnpVWeYLqdmnPzeYOPpTV3sTtsi/
k+mB0phHGQAc+1SduaaxVcKMj3FMhCFFbGfxzTCixsTt/M08nI9vUHmkDAkg5we9
IauMU45IwT0+lNR0aMNGwZSPvA5pcBpM7dxH0zinr8qBT8uPXvSLEOdpyPzNLyU4
7DoD0pJAx46j605Pk+uOaYugjR8qBHnHfj5R/wDXoAPOO3GT3pyuPU/lSgBmyQMd
MZoJu+ozYwA3uCPUDFN+Y7wVBUjHXOfY1KzL0zyPWoWlRHGSV3Y528Engc+vagd+
4kUjJFtJDFTtz/j1qVZcjDNjJ4AqsJgVaRnJUHghMkjPt9cU6OSGWMsnmADruQqf
5Zp2Y3bdln5SO5A/WngKR8o6dqieVVXAG1jxgfTNC3EbZXBB4J4PeghpiygkYIpq
E7dpVhik+2ROzIHJKjJ+U9yR/MGmJKkgYIWwpI5UgZBx+NHmUuzJd5z6e1IW457+
1I7KE74Htk1AbuMj5GLEEAkL6jP9aT2BWvYeGVj8uDjrT1UlhxtFQC5hWRQzHLDc
oKnkZA/mR+dONyhPViOSflI6UraXLZax3z834UFTnA64qubuIMFbcpY4B2nB4z1x
joKf5wdvRh1BBqjO1iQnJ/GkPTGcE9Ki+0Kqbg2B06H1xThKhYAMMkdMVNx2Bhtb
dyTjoKYuSw759RU2CQVJBH1qMxgdO/enYpMAMKcDPGPSnZP4kdfWgAnpyPWnAD7r
Zx60CbEPI44z05pdp27S27jkDigjBLDn0IFKvTDZz9OlArmdGLq2gjt47VWVAF3N
LtGAOvT2pY7nUAm46cFb+75657/h/wDrrSwcc5BppfqN2KFoEpOSsUZr+4S3aX7G
GK5JAmHABOe3tSRX94SytaKhUnjzwd304/nVwA8EZIphHoR15oT0sVaLViub+78k
yC0iJBwFFwP54xTftVxPGY5LeNPNQcCYNgEewq4UKnJX6n0pcL6EjqKL6bCtEeCD
xjP1pMDjgU4AHkZI7ZFDKBkDigm4xX3N6dqeMEDoR9Ki+YMuG+U9TUgOMcChDaGz
Qi5tpISwXzFK5Iz1pHFxkKjpk9cxkg/rUys/GOaacEYzx2osJNoixKFwHjD+pQ4/
LNOYXBix5sQbPP7s/wCNLg7uf/rU7Jzg9KF3G2yFlufLIEsZPqY8j8s1GsE8qKJJ
o2AcE7YiM4IOOtWGYkngZ6UqBs/Me/Y0A27WGtH0zwQcjPNYyahepY3802wtC2Vw
mBjv3ra3HPAXn8axYbO9FnfQvGSZOE5HzZznvTW5Seln1/AnbU3kisrhRtWf76k4
z0x29ar6nrbW0r20C4MYG5uOpweB9MUybTLg22mrGmBbtmQEgYGR7+1GtaRNdz+Z
BGZBIPnBwNuMY69aFFNrs/wFLZ9unf1ZJpOrPdExy4zyQ2B+VVzqN+97LH58ESxu
Qo8xDxnjg5NLomiS2MoklGBg4yeSfWpJNPYTTFNMRyzN85lxu569aHZ3stH8rFvl
XW/bzJtLub2TUHWe5ilgMWQqFDhsj05x9a1zjOO45rJ0Wyls2lke1ihycLsLEke+
SRWplSSADmiTXQmSs/8AIfgAjLc0bARwTk8H3poTOOSM96kDbF4JODjmkQxGU5LK
xI9qYAxJyM+lKWzg+vtShstzg49qA1sQMo/tCIEDPlPgj6rVncAepJ9BVZyP7RhJ
JB8l/wCa1ax83OPanZCfmIRjkc56UBUBBycnp2/z1pce2R0yaa2euOKEA/OOnHvS
2QZbi6YrgfLj368/59KiYgR/L8x707Tw7S3ZLZUlQuTnHFbUf4iImvcZUGI4gi8g
Dn39acWIxnPP6VAr7ujcdc5p4buePrXNc6uUsIDxx196guABqFoNpOS+Ce3FSiQg
ZwfyqGeUi/s488uH/QCmlfYzba1LwYZ689gKTZuIBwMdyKXbjAbGaXA6n8qqxmMZ
QMcZ44xTeM4wcn8OKkK884zUW3DZLD1FBSGCLFw0nPKgAdhgn/GnqrvEoA59M9Py
qQc8ADOOQKGU4IxjPvSC4HGzklWxjjtTHC/ewD+FDkkk/wA/WnENheB+dALQaPkG
SQR6048jnApuXIPbk9KCuF3bfmHHNMA3MeC2D0qgtnb3BZpfMLF2/wCWrDox9D9K
uhkOcjHfkYqCzmDRNj/no/X/AHzR5j12I7fT7WHzIESQKR90swBB/GphpVmsbII3
CdcCR8H9aeJGEx6joM9utTZGCM846UJ6hK9rdCA2MIAYKxb13tn881BDo1lbhhFC
y7jk4kf/ABq8XBGCM0zzlHsPyovy7AnK1iEaZb7T+5Y59XJ/XNRpo1pEXKIRvOX+
diSe+cmrZlTI+dc9AN2ae0giUu7BVHUk4oTVnYV5bFEadbKpXySNw5GTz2qKLR7G
J/NjhIY4+Yux+nU+34Yq289uBkzxgdssKlUo2Du3DHc8UlK90mW292UxpNrhv3WC
Rg4Y81HHpVlDkJEw5JwZGPJ64yauyyovymQcDpuFQs4GHEq46cnjrRzaPUaTYxdN
svN87ycyc5Ysc/zpyaVYQFikGN+M4Y4/z1qRJIiAfOXrzhqk3BsYbdng4NClfS5M
k2030K0umWkxQvbIwU5UntUFrpxh1Ca4cps48rGfl65z+nr+FaYA2jJbA9DULfKA
pY5BpqTSsHxaPoTbT3GB60nygjv2GD1pquduCR+YpMhf4enp3pCsyTcFPIznpSZ5
HGKjMyld2QMcZyKBInqPzouPlJTkHoaVQcbiaj81eAXHPoakUjqrAj2NFyWmVRDL
KizRzLvYZI2ZHTHrUbWjc7WQE4JAjGKsWzA2cZB27kHGfakMgAOWGe/tS6WZSu9i
rHYsgwJmHBHzIMDJJyPTr+gqx9jQszjapkBBOwZOfw/nT1ZG5VwfUiklnjhRpJHV
EUEszEAAdyT6U731Kd2yFLJEiaMMSC24ZRcD6AAVUvRFDcI3lszImVcRKQu3nGSM
9vUUN4g0ZGfdq1km04ObhBg+/NRXGv6JNaTwjWtP3yRsqr9qTqRx3ovd3uVyzWxv
AggHPI7U2RyDj+tJHLG8aurhlIyCpyDSnklsdfTtRe6MbWeo0uOBk8dgace3UVEM
bzzgnnioLvUrCxiE93eQW8Tcb5XCg/QnikVYuKCc460uO7cfpWOPFvhzdt/t7T+D
gf6Un+NahO5Ny4OOmDVMmw8pleCfpmm5JzkZ+ppGlSNHlmYIiKSzOcAAd8+lUv7d
0jAP9q2QBH/Pwn+PtSehcYyeyLbnIzkZI7mmFHKjDgt/u9qptr+iseNVssg5/wCP
lP8AGmjxJoSLltY08ccA3Kf40rFcskti+Z4otvmShAx2guwGT6fWnyyxxRtJJKsa
r1diAKwdUubbUrKKW0vI5447gZaJw4yAcjINTQk6tqMsd0AqRqrLAT97Pc/Tj8xV
KzdhONrM1zcwLEsjyJ5TjIfdwfxpftEJkMQlBkH8Oeemen0rJ8SxsdMUQ4UpIuAO
OOeKralcmLVpJYwVMIV93977oxx9QKOVu3KQ1bVrR/1qb0lzFboGlcLngHHFKHD4
CgHPOawNfmeZGeAsUhQMfQ5I/of0Naz3ZgCqtvcSYTIMaZH0oUXa4Xtq9i0yle4/
GqqX1tJJLGs2+SIEuickY68daltpftXzNFPFjj5xjdWfZ2MP9vXsoypZdpx+HPHe
knG12Wra3NZBxx1pcnd2A7+1OMagHGTmmBSCM8D1I5oIvcUHJ5B7jJoGAvQ9+lKC
u8bsjmlIO0qOn86YiuxH2+L5eTG2D0PVf/rVOWw4GBxyaqSK39pw/Nk+S/Ge2V/+
tU6na56FcY96LDsSYyM4zS98ZwaAuecgc4waeQoHLY9TTJbI2Knd6+1O0wbTdDjO
4H9KbJgDjH1I4/CmaZJma/UkHDLyB7VrRX7xCn/DZn2iEWkW8HcVB+vpVgHB6Y9c
1CjZjUHOemD7VLn5uT1HaufqdXQnR1UZCZzVS4eJtStMqMqHIz24q2nZevoPWqdx
LHHqNkn3mfeFAHoM09ehndJ3NADcu0fp2p6ptX1HOOaagyB2oIyQen9aZmxSgYgZ
OMY60KDuwcHHGKOFUDPQdRQMdcZHWgQox5x7Hb6cDrSO4IOQeaGUb88hm4+8f5dO
9JgbepA9DigELuG0jBpjnKZAyfQGnkN6kj2FNPy4JOAO1A0Mhy4DHI59KccMOhOD
2pVK7Ao5x60rhsDaBk0rj6kUgYQuVBHynk181HxBrqO+zVtQGSScXL9+T39a+myG
fr0zis6KK3CYEAJEjgFQBjDEc+1awmo3urkyUpaJnzoPEmvEkHWdQzj/AJ+X/wAa
d/wkWvSHB1jUG/7eX/xo8ShB4o1YABQL2bAHb5zXq3weihbwlcM8SOftzjJAP8Ed
dM1BRvymKcm7XIfhDeX1/a6q97eXNxteML58hfHDE4yfp+Qp/wAYnC+GbQLnJvBk
jI/gavQgkUYJjREz1OMZNedfGVSNAsjn5Tddf+AtXPFp1E0ba8mu55l4Wkb/AISz
SDuOftsPf/bFe2fEZ8eBNSPGSqjp/trXiXhb/ka9JyQB9tiyf+BivaviSU/4QLUv
m5wnGf8AbWtatueJFN+6zwNXfI5J9+tfSWiy7tC08g4DWsRAxj+EV81KecgZyfSv
pTQ0/wCJFp4JJUW0eOOvyiliNkOi73PBfFs8jeLNWAd8fa5RjPbeRWfBa6lex/6N
b3Vwo4/dozgH8KueKSP+Es1bGP8Aj9m/9DNeo/B1lHha6GeftrYH/AErVyUIJ2I9
6Umkzyf+ydZHH9n3uM94G/wr3n4f28tv4I06K4jdJArlkkUhh+8Y9Pxro1CluFHJ
7c1IRuHUDjrXPOqpK1ioqUXq7/16iD8Bk/jUcgxgk55wcDPJqXBxnrz61FJnI4Oc
9fXj/wCvWBa3GbSByQRn8aa0W4cHGacGLHA4Gc9KV2OOMUI01PB/iVd3KeNLuAXM
gWNYwFVyFBKDtXLrdahITsnuGPTAdjgV0XxMz/wnWodOkf8A6LWuj+D6AnU2zj54
Bx9WrtXLGCk1cxbk5tXseefZ9QcZMVwfqrGvefhrE0fgTT1kDqw8zcG4P+sb/wCt
XRLIC5A28HoKm+UDABHvmsalVTVkrf16DUZRd27lP7C0a7YbqfHOxSwIA7Dpnivn
fxLJLH4p1UGRsi8mGc9fmNfRxulWUxGNtpz8wZcdM+uf0r5v8TNv8Uaq2MZvJfTj
5zVUdWwq8ysz0L4TWs76HqE6XDp+/wBqjfxuC9+PcV0/im0eLw3q8xubhx9jl+Uy
EqPlPauf+ENysHh27jaJnJuzyCox8q+pGfwrrPFb58KayvksNtlLydvPynpzWc/4
hrFtQ9UfOh5OfyxWk3h3XFsxetpV59mMfm+aIWKhMZ3Z7DHOazc4I/nX0DoOr29l
4S08ak8FvGLOEDzJ0wyeWvJyR78V1znyLY5YQ5jxbQ/FGr+H7mOSwvJFiRtxgZyY
39QVz39evoa+gfD2sR67oVpqaIU+0JlkP8LAkMPzBr5wv5LefVLqa0j8u3eZ2iQj
G1CxwPyr3H4YIyeArIkg7mkIB7DzGH9P1rGvFW5kaU227M1/EuswaHo0upThzFFj
cqHDEngAHPqR+Ga8B1HVNV8RX6/aHluJWO2GBMkJ0AVF/AdOtew/FESN4JumVhtE
sZbPcbh/jXjmga1JoGuW2qJEszW7E7Gzgggg/oTToR0uOrLVR6FjVPCPiDRLZbrU
NLlhgPWQEMq9B8xUnbyR1rr/AIVeLLuLVBoV7O8ttMp+z7yT5bjsD2UjPHrjHU12
Ufivwz4y0C5s2uY1M0bBra4KrMOpBAOQSMZyM44roNG8OaLoUSrp+nwQNtK+ZgF2
BOTljyamVRSjaS1JUXFqzDxFDNP4W1aKGJpJZLKZURFJLEocAAdSTXzy3hnXxuLa
HqQ+trIP6V9MvnbwBj64qtLGBEzFBnB61nCq4ItwUj5b5981ftdC1m9gW4tdLvbi
FjxJFbuynHoQKpsMuTxXunwzV28F2Qwdu6TB/wCBtxXVUnyRuYwjzOxleA9K1O28
GvDLZTwTfbWcJMhRj8oAODzj/Cu4vbRxIl9bRKbmHPH97Ix/KrqjC4wTz2qUDKjp
7c81wylzO50bKyKGoRTXFknlRkNkHaeD0/8Ar1ANOaXVbp5osQPGEDFs54H65H6V
sYAIy2B3xQ3AI5/AYoTsCm1sYS2F2NKdAB5ryhsE8lR2/TpWvbR+VGB145Hocdva
pCcHgj6ZoK9fmHfoc0XvqxdLA3LDnPNUILeePVZ5SD5Tpx82Mnjt+FXWXLKcEc4z
Tig25wT9KAAqDtyQO/WguMBR83oM8UrYUnLHB5JpCU2gk4C8k5pACAR4RVAx6U4M
MAng9BikyACMsSewFOCqqjIY/gMUxMpyhTqEZG7csbDp1BK5/kKshTkHjHuagZQd
Ri5A/dPjPUjKVYVQXHJ57UbFN6C8KMgcDkEU5cZDAflSFevT0yRSkbQDnnGeeDQi
BkrYyAuT1pmmfN9r4GCw4/Ch8tkFuv50/S1UzXeMHcVyM+xraj/EQT/hsz0YMvHG
PSpF+UccnHGaijLAAkY5x1qYc4BwMcVz2sdJLuJ+9hT9elU7hN2q2Tc5TzCOc9gP
61bGPXPHWq85X7da9cjfjj2p69DO/KXQOPU0E845zj1zSA5xn/69I2H98dT60Mnq
G8g9OOgPWnBsAfJjJ9M0irwNwwPSnbAACCV79KAdhoctIepGOtKrBxuBzyRyMe1C
sxl24AUAfPnr14x/nrTgm1S3ABOaYg2sVyDwaMEMQB0pFYEHdx9aOCSCxNIBqBFT
LLz7mnfMeTkemDinA7ep7/Wk3DOc59BjqKYXEHCjKkk1SNgqlmQyoHk3/wCtbA5y
cDOOf61oHBxknFRyPtPXk8fjT1WwXurHzJ4iRo/Eupq7l2W7lBY/xHeea9W+EVuH
8JXTbnBF44G1mGPkTnAPPWvLfEuD4p1bnOL6bIH++a9Y+Du4eELgjB/05+p/2Err
qv3DKHxWO3+zB23h5cH/AKaMB+WcV518YLbydCs8TOym5ACu7Nj5W5ySfavTVGVH
Jyfwrzn40bl8P2PHP2nqP901z0viRpN6M8a5VsqSCORg8inPPcOm1ppGU9QWJFaf
hQD/AIS3SP8Ar9h/9DFe0/EWNP8AhBtRydw2oQAP9ta6pzUZJWMoKTi7M8BX3596
+k9KsvL0mzP2mRz5MZGWIxhV7Z9Qfzr5uAZnHVmJ+ua+m7DEem2oXgCJRx06Cs8R
siqK1Z86+J0KeKNVQkttvZgSe/zmqdveXdupFtdTQg8kRuV/lV3xUc+LdY7f6dN/
6MNer/BhR/widydo5vXGe/3I6uUlGF2iY35tGYPwkkvdQ1i9ee9uJUihGVeZznJI
9a9YS1k6Fm5A4Ltkde+c9/0qzgHocelKMEDmuSTTeisa3dlcrNZSO0bCZx5ZGQWb
kZz0DfzzQLZkfO8YOcj8ePy5q02DhgG4qBnJIH58VHZdhptjQuASSOB2pWwQff8A
GmjnqcfWn5ByAcfjQWeAfEoE+PNQ44/d4/79rXPWeqahp+77De3FqXxuMMrJux0z
g9q6H4mAnx9qJ/659v8ApmtdL8Gra3nbVfOgjkIEWN6A4+/613qSjTTZytNzaRn/
AA51zVr7xpawXerXk8RR8xyzuwbCHsT+Ne0qnfGPw61VksrSHEsdrEjiRRvCAH7w
q4O4z9K46klJ3RvFSUdStaQQ/ZIXeJWkKDcxUZJxySa+cfEQC+I9TCgAC7kAAAGP
nPFfRMep2cUUcDzAShcEbSenXt7V8565IJdd1CReQ1zIwOfVjW1Bat9yayaSuer/
AAet4n8L3TvDG7C8YAsoz9xa6PxZZWqeFdXmW2iV/sUxLCMA/cPeuU+E2o2dl4Xn
SeXa73jbflJ42J7V1Hiq9t5fC2rRJIS/2KUlQrcfKfbiommp3LjdQR87kEng/jU8
9re28EMlzDPHHKuYjIhCuOOVJ68EfpUPXAr1HxpHHd/C7RJY8GW0it2Y4wQpjwef
qVrrlKzSOVLRs4/wN4cg8Ta8LK5uTDEkfnMAuTIAwBUc8ZB684x0r6As7C20+wgs
rOJY4IFCRovYD37n37184eHNROkeIrC/aRkSGdGkZRk7M4b/AMdyK+lFlWSJJI/m
DDII5BHaubEN3t0N6VraFXVrCDUtMlsryASwTDDgLkgf45A5HT2rxHxF8OtX0SN7
y3T7bYBA5lQYZAf7y5z+IyO/Fez65rumaJaRzapdR26sTsVsksfYAEnGRnArB8Je
PdP16+bSolMLQxr5LStzPgfMQMcYx65I5wMGopzlFN20KnHm0vqeEKNpyOCK9M+H
Pj+8XUo9I1i6luYrgiO3kk+ZkkLcAnqQc45PHHQZrpviH4Y0m88PXurSwRQX1um5
bhRgsQRweec9Oema8Y01p11S1NoT54mQxY67sjH610XjViYq9Nn0+zH645we9VI/
MNjF5hDuYxubuTirABYDLY79etRRqFtVAbIEfXPXiuI6loj5iYYY8j1r3j4ZKB4E
08lieZeOn/LRq8GYYkOTnmve/hgN3gWx5zgyDHp87V2V/hOanudUkZOcHjH61IVI
Ix+uOKOcAcYxSkHGMnpXGath15TnNMXkdPzOKdkfw5AHXPek2lhxwaAQmM9yD9KX
IOST79KR/vck5pu8nqmD65pDAuN2ckU9pMD/AA7VFtI5c0vB+Y/d+lGw7IceevPW
mAseRx2HOKcxG0Yb60wOdpPX3ouNIkAxjJP1zSklRt5pnQZ4J9MU4cjnGSKoViu7
ot/EcYby3A/NatcblOCCOgqoxzqcRJwfKfj8Vq2pG445Oe1ITHg+xAz+dNkbIx0H
fJp545JIA6iomCl9wJOetN7EoYWypKnPFJorq9xehFO5XXJz7Ujll4L5z/Dg8in6
MCJLzChRuXB3ZycGtaP8RDqfw2VCSDnqw71IkhIHr16VW81Wzs474pwJBx1H1rnN
7FsNngY+oqrMxOo2eNwA8z8eO9WEYcAE8+oqrPk6jZnP9/HHtVLyI0W5oLt4OOve
gjoc89s00KRzwfrSkngbfzpk2Ekb5SD/ADp8eemecdPeoXwSW2ggfpT0OQMA0rg1
oSYO7G3A9zSk8HGOaBkdTg9uOlISewB7daCQX5fvHjvTlkLc5GPak4bkdO9J5meB
6flTuG4/hiMKOtIBlicg568daUbWXAHNOAUD1z07UEiFB12nPpnrUTegX14qXDKD
wfpmot2SoGQCfQ+lA0fNPib/AJGrVj6Xs3/oZr1j4OMR4QuR/wBPr/8AoCVpaz4B
8LSG51CfS/MmlkMrt50vzMTknAb69BW7oei6Xomn/ZtNtxbW8p80p5jN8xAHViT0
A/Kt6lRShYlRs7l5W79h157V5z8Z0b/hH7AjG0XJ7/7J/wDr16SAvQDjp1qjqeka
dq8Kw6laR3MatvVXGQD0/qayptRkmypXadj538KceLtI54+2w/8AoYr2n4jfN4F1
LAAwqZx/vrWhB4N8N2lxHPBo9us0TB0YA5Ug5B61rXdla39s9tdwrPC4w0bjIPOf
8K1nUjKSaIgpKLTPlsHJ4yPevprTyG023wMt5KHrx90VVHgvw4gA/sOy49YVrXii
SJQiKqIowFx0AqatRTtYdJON7nzV4oBHirVvT7bN/wChmmaf4g1bSIGg0/UZ7aNn
3lEfAzgDP5CvoGbwj4eurl7iXSbWWSRyzu0YyzE5JP501vBPhkLg6FaHjtHWvtoN
WaISqxd4/n/wDwweN/FBBP8Abl56H95Xt/gG+uNQ8F6fdXtw81xIJN7uck4kYDP4
AUf8IJ4YYFf7EtQCf7tbtlY2+m2cdpZwrBbxjCxoOBzms5ypv4UWpVXpN/jcn4xj
PP1phwoyTnHalZwMA44Pp0phYYxxn3FYMpJiYBBHOPamuFUegzj6UvzbuAfWnEBj
hvUGgvY+ffiWc+PdSI/6Z/8Aota6n4Kjc+rDv+5I/wDH67nVPB2gapffbL3TY5p5
SNzlmBbC4HQ+gFXdI8OaXonmHS7FLYzY8wqSc4zjrn1NdMqkHT5ev9eZkoNT5uhc
u38uANuyDIg/NgKlRt7ZHTHFJMqiMZyRuXoe+4VI2cAj5cdMjNcxpoNZFcFSDtPa
vmDU1K6rdAk8Tv16/eNfS4ubiST5Y2aJs7W2jHQ/7WfbpWHdeDtDmkllOhW7yStu
dtgzk5JONwralNQevUicJSsl+Zh/B63jk8I3ZIzvu2U/NjjYn+JrqfFaKPCWsNkn
/QZsYz/cNO0vS00Wz+y6dpy28TkuwQjBfpk5bI4A9a0J4jJBLE8HmxujAowUhsjp
gnn6Gpk1z3Kje1j5bwQQSBj3r6AsNOOp/Du1sYyFN1pSRhvQmIAH+VaSaLp4i+XR
LVcNjAt4gQKla4e1KxpGVSNBhBtGFHXAB9M9PSrq1YyskKnCSbTPmqaGW3neCVCk
kblXVhypBwQa+hPh9drqPgvS59qiSGEwZHJAU7f1CqcVvm1tmbJt4sk5YlBye9Sr
DFGCEVUBOSFGOaKlVTSsZwjKL1Oc8b+HI/EuhfYwUW7Vt1vKwPyNjJ6diAR+uDgV
4Fc2moaJqBjmWS0u4GB+9hlJGQQR7YORX1GoQDBGR3HWs+50WyvrRbW+X7XCMbVn
RGA9MfLTp1FFWew5xbd0fO+q+K9e1q3W11HUpZ4VOfLwqgn32gZ/Gui+H3g651G4
XXLuJ49Ptd0kbHgyuvQD2BHX2x649St/AXhy2lLxafEpLAnIDYx6EjI/Ctq68uO1
lAGcoePXjpTlVhFWpr9AjBt3mx0NvEtvHHsGAgAyM54pGUqjDAAx1FLDl4YyDwVB
qQKQD8oP0rmfmbdbny2w/eMB+te9fDI48B6eATnMh/8AIjf4Vs2ej6UY5Amm2oDS
MDiFfXB7VoRW8duixQxpFGnRUGAM10VaikrIxhFp6ku7HJYnHvTSSRyAR3OaJHKg
svzHHXdio/NUNgk9cdK5/M0SJtxDcemTim7mIyQQev1pCy7gOo7npUbOuSMksecA
9KNhqI7JbIGPxoUHLfNjnOPeoVcgYORg45qZSFHBwSOhNIpqwhLbOWGOxPahVGMb
8kn1oJGCMBcc0xZCMrnuelAJOw/apGA2fx/rS+XwAFzmlyT2APtS8H76nIpiuxgw
MZ45/KgkMMqSPYCnHDrjJHegsFHf1HrQBVkQLqERLciJxj8VqwAp461Cy5v48jjy
35B91qyiqWyvQe9ANiuwAzkkntimdODgemO9SvhhyCMDNR7R2IHt7UMSIZXX2yaX
RV2PeuVwSQe+ABnA9KSVCQduDxUultGbW4AlVnDYYY+7xW1D+IhVbezZignOcH39
KtRMAuSwzUBwrbcjpjIqVWAzlvwrA3RaD5IPpVe6w2o2RzyvmY9+KmjOcBj27Gq9
wB/aFoD9758flQmJ6F3fnkHnNO3MPvfhikXtg/gaNxB5/KgQEAkHqSOSaUHkYIPt
SEjOSQAacwXAzlT2piFw3foO1NyclQM5pfQhuPejflQCOfbvQIfn0GKXgdeRjOBT
fMDHgAe9JyT1z7kUthWH+Zzxyf0zU2cL059BzVZTjLK3HvUoY8nIH06VRMkPP3cY
+X3qEkiVVDNyDgBeMD3/ABH5fWnF8Hr19ab53GFBI7kUgSCRGkQpvwD94gc49qen
7qNUUltuAGI61BcybYG+UMSAACcdeKlgfMMbkljtHLHjmmDWg/cD9BwaRuOB39qc
UwSW6fypsgB6H9fegS3EK7PzpMMcjdz3pSAAAcfgaRH7MOh6d6Q+g9VJBJA9qY0Z
AJJANLlTgg8euacxUDnjHoaBaojA2Dqx79+aUscY2k8eucUudxBBOPWk3EnGCOwF
BQ8R7epBPenE46HOBUJO08jp68VHJf2duP3t1BH67pAKTaQuVvYsMR2OR255qu8y
ghQAWPQGnRXVvNzBPHJjurhhQYyGB4JP4UaPYpK24iEb+eCOakBbJxx+FNQYXOOe
eop2eeCR/WmDI7lm82H0L456/dP+FSKAyZyMeoofblAQOTx+RpuD2IAFAugy7k2Q
g8keYgyOcZYCpCUPyknnrg1XuZMIisPkZ15x3yMVNyynccN/KgfLZXIrEFrC33EA
mME/XHNWApBHr61mpczQiO2CRPIF2/675jgemM84qSe/eFMt9mRQfm8y42gfjj2o
fdjtd2Rpfw8MPamZ2kc8555rFHirT8MBfaaGUZ2/bRk8ngcc9P1FXxdSSruhW2c9
sT8Y/BaPInla3RZYEjKgnB4qrcWUEjyXLofOCFVbJwOD2z704z3IHMcIZuMCQ4z9
cUzN7IjxvHCoc4yHYkZHXoM9f0o1C2l+xeA49PakBAzzj1Ap2OPT6U0hVfOO/wCV
BKGH7w9/QdaT94oywUDsR3onkKpuGF9S3IqvbRB7SLzGkLOi7iZGznH1oK1JBLuk
2IrDHOfypbzCWk5YKw8s8Z9qbdIRbSujENtyCGIp04Js5PM2sdjA7QR69smltsVd
CwjyoI0A+VVAGPanD5eWwcUiY8tDk4K9Cf1p5OR8gLE+lArkFqFWFwAQPMkOfcsa
nAAPUY9+9QxOFVzwfnbrz3NWEZcfdHPXjOKPUG+oyQLnPUnv/wDqqusYE4fdgAcA
EAGp/lP8XtzUYTgZfJHX0oKRKCATjnPX/OabgE9AwpNhHQ9u5NAYIDllz3J60CJD
GABhuvvTCFbIfkY5x3pfMBA59aDICVGefegWojYUjOTjtUTPheFJxyKJFJAJf5QO
nrUaywu4USIxKlgAwzgdT7jkfnSNEhyf7QIqwgDdOtQjaNuTuHvUiNk5Udu+aEKQ
5+BkHJz60qjBHDcjNDAhgO/t0NOX5gQH/DNURfQgZE+2xEkZEbqBxzkr/hVnKkD3
44qswC6hF85A8t85x6r1qcpjkn5h70WE3cQE5JznHUUySTPCAE+vag/Xr+NMYY7A
D2oKSIpHATJz7kDNO0x4ljvG3H5gpy3TvTZAcHIB96ZbRKbC9Lj5l249OSf8a1of
xETW/hszxIDkAHdU0bEEcA+oqhHnapPX0NW4mCtyayZqi9ExLY+bOO3SoLgP/aVm
wJ6yfjxSiUHopwvFRTtuv7XnGN/A+lC0Yy/5x3dB7nAFSCQMAQAMd8VAQG7bfeps
hVwcgVImh24HGOfcUrFgMZ/OoweRg/p2oLjdxkY5FMViTO1cUxznkgjB+gFMUvuI
ONvOMEnjj/69P3cZAJODigLChuM9BSs5Ug9PpTFBxnHOe/WlUtzuGf6UAShsqwHX
PTHWlLuAVAOMdQM0m4BSc4/GnbwAB369abIIwARng7u9cJ8Sdf1LStFim06aS13X
fl+YMcgK3A69xn8K70nKdOvQ15p8WM/8IxbZOf8ATz79nqoJOSTBtqLscMvxA8Vp
H5Y1iYgeoUn88U5fiL4tCbBq8wXGMBF/wrmidp5HP1p0MUkzhYY2kcjgKuSfoK7f
YU39lfcczqy3bOjX4jeLlJb+2pfxRD/StjTfjB4htiiXcVteJn52KbHP0I4H5Vws
0EsDlZonjcdVYEGogMfT1odCnty2/APay3ufQ3hzxraeJYnaw3mVAN0T7Qy8nkjP
Ixjp3rcimndWMtq6kMccqcjPGMNXzp4V1uXQNftdQQsVjbEir/Eh4YdeeORnjIFf
SQHHQH0zXLUhyOxvGSlqQ+bLvAFrJgdHDJ/jRHJdFf3lsUOBk5UjoM9D1zmrAXA5
wCBwM0rY+9gH1IFZaDerTM65u7u3KskR8vbl3LKAvIz39N36VwfiH4uRWRkt9Fi+
0TpJtaWbmLHttb5v0/Gsj4l+Opru8l0HTZWitoG2XEikq0j/ADBk4PK4OCCOSPSv
Nhn+LpXTToJq8ialW2iNvUPGHiHVJXe51e6Ik4MaSlE/75GBWMXZs/MSfc800Z9O
tWLazuryTZaWss7f3Y4yx/IV0qKWyOdzb3ZGkssLB4pXRx0ZWxj8a39I8e+I9HuB
KupS3SH70V07SIevqcjr2IrClt5rd2juInhcdVkXaR+FRcgkc+xzRKEZaSQ1NpaM
9y8J/EnT/EBS1vCtnf4GVZgEkJOMISck9OOvPeu2SQHGRjvjFfLMcjwyrJFKyMhB
VlOCpHQivavhx4ybXbRtOvnzfWqggnrJGABuJJOWz1+v1rkq0uTVbHRCfPo9zvJH
AeJSOSxx/wB8k05mAO3HJ71BIJHaNkwSj5wTjjBH9abJPcoyBYomyQMlyMfpXPdG
igLcBYocnA/eLjK5wSw/xqjrniHTfD1i15qE6oMZSJSPMk6fdUnnqPpUXibW4dE0
eS+u1HlxMhwjDcx3DgDAz/8ArrwPXNfv/EOoPeX825ifkQEhIx6KCeBWtOnzkzly
q73Oo8Q/FTWdS8y304jT7Zj8rRk+bj3bPHPp9MmuMu9Svb+QSXt5cXD/AN6WQuf1
NQZzSKpbAUEnt712xpxjsjmc5MUEgEZOPrVmy1O/05i1jfXFqTwTDKyZH4GrH/CM
6/s3DRNR246/ZX/wrNZWU7TkEdcjpVWTITaO/wDDnxa1jTTFBqgW/tgwDO3+uC8D
hs4OOTzyfWvWtD8SaZr9kl5Y3COGA3IxAeM/3WHY/p9a+Zj3Oa09B1y80HUI720l
IZWBdc8SAEHB9RXPUoJq8dzaNS794+md3zYGT24NNbGePz9KpaRqtprWlwajaSB4
pVBwCCUOMlWweo71dPyng5z61yGx538V9e1XRk02PTryS2Fx5pl2Y+bbsxz1HU1w
K/EXxcgVE1hsDj/VJ/8AE113xqDA6MDtA/f9P+2deVHvnODjrXXTpwlFNpGM5yTs
md94V8beJNU1+GxvNSaSKWOXcpRQCRGxHQZ6gV7NJsWxlLMSAjHls4618++BP+Rw
tNp2ttl5P/XJ69z1jULbT9BvLu5+SBIXLZK5PB4HbJ7VlVjGLSirGlO8ldszvGPi
q38L6CHKiW8m+SCLIJDYJ3EZztBA6d8eteQyfELxaZDjWph/uqo/pVHxLr9z4j1e
W/uCQPuRJ2jQdB/U+5NZOM9zjPWtoUY295XZnKo76G4PG3ij5gNauhkkkBgOc5P6
mvRfhpB4k1LdrOp6ndvaKGWOCVj+9bj5uRyvJxg9R7c8Z4B8HSeJtTEtxGRp9ucz
OcjzCMHYD68846D8K92hijt7eOKBEijRQioowFA4AAHAHaoq8kdEkXCVR7t2ARjd
gseTgc9KbJ5gbJxgdc0fKvJUgjGMU/ouSDj6da5WbDWzvDZzkYpAcsBkH17YpWbK
gKDjHXFRRL++LZf5uxzgUg6E2zaOCM+lAG0EnkZz096d95QxJ545OKjchV5/TmmJ
ajZX3EgHr0pkUI4yrsfpUhdOCW4BxjFI8uGCjJ4GKRSEVNu4yZyD9c+ntUgOVxGT
j37U3duwcLuA/GlBTBwcg+9CBjxjHPftT1IAIHBPFMdh1Kn0HFAyFwAMUyLDNgOo
Qy7eFjcYyPVcfyNTO+7AznB4qtJKBqEY2jmNjhjgdVpwYtJkpkjnqfzpglcc2TnA
+hC03P8At85+tPbAB6c0wkDGFP6ikUhpLMDxwOnvUEb4stRTOHGwkd8ZOP61MXxu
JH4ZptnDHLb3xZRkhQeOeCcVtQ/iIzrfw2ZRXYMnGF4zgU6PIcbh+YxikCCOJcHc
B7Yp6gY6844NZM1RZTGQSxwe1VrgEapZHcdo35H4VLFt45J96iuE/wBNtirc/OOn
sKSdivUviTOAcj2qTIJA/TPP51CkmANqgj1zUm8Z5HHQY7UCHSOAMD06k0kfzHls
HHIHNRsQCABwacGVVwwBJ4oAftZZcrjaetPBT7p5A7A1Bv3jbnAH6VMjKvCgYNIT
Q52GwkKCR3qNDIRyh5HBqQncRnA5oKnpnGaYkAdiozFgn1NPBJByORUZV/4mXI/z
1p4AAJIHNAhC/UDOc8ivNfirv/4Rq2L9r9wAG7fPjj6V6UwBU4XH+yQK81+KoP8A
wjVuSMf6ecDPHR61pfGiZ/AzyRsH0HGPpXZfCv5vGttwCFjkPT/ZI/rXGkDGOlXt
F1u+0HUFv7CULMoK7mUMCCMd67ppuLSOWLSkrnvnjXTbC/8ADGoPdWkUrQW0jxSM
vzRsFzkHqOQOnXGDmvnVhnsM8cV0GseOvEOvWrWl/fbrdyC0SRqgOORnAyee1c/1
PrUUoSitSqjTeg+JWkdURSWJAAHUn0r6mQgcMCMd+1eK/C/wlLqeqprc+0WllJ8i
k8ySY4xzkYJBz9PfHs6nbgj8M9awryV0jSlHRslZtgGFz75rmfHWvtoPhe6ulys0
o8iEg4IdgcHI9Bk/hXRtkgYPvXmPxmvGXTtPsTgrJK8mcd1GB/6GaypxvNIt6RbP
JZHaUl3cszHJJ6k+tJyeCfrSd+ta3hewTUvE+nWckYkiluUEiE43Ln5ufpmvQdkj
kSuz0bwJ8M7eO2i1PXrbzpJQHjtZBgR88FuecjHB6d/b0a3srS1iWC1toIIl+7HE
gUD6AYqYsGAHIFADDOT+PTNedOpKb1OyMFFFK/0nT9SULe2EF0FzgSxh8e/Irx/x
/wCA/wCwCdS05GOnuwDx9fs/QDkklgTn6ceor2okEgdexFUNZsLfVdJnsLhWMU6F
enfqD9QQD+FOFVxfkE4KS8z5qyO1XtE1SXRtXtdQhZgYJAzKrbd655XPoRxVJgc9
OlNHJ9vevQavocadnc+n7K9hvLGC7hcmKdFdDtPKsMjj6VJLuPl4JI3jk9/zrnfA
V6174J012AUpH5fHopKg/kK350WTyyxI8tsjjqcEf1rzGrOx3bq55T8X9bebUrfR
UcGGBBNKB18w5Az9F5/4FXmwAOTjoK2vF80lx4u1WSV8sLqRB9FYqB+AArGA5+le
hTjyxSOSbvJmn4d0G58R6xDptrgM+S7lciNR1J/z1IFe8aB4M0bw/DGLSzjadBk3
MiAyE4wTk9OOw4rjfhDoyy6Tf3zu6+fKIgUcqV2rnPB5+/8ApXoossFSkkm0HlWk
Y8c9yc+n5VhWm/hRpTirc3UtFQBk4A9q5/XPBOia7ZzpNZxpcybilyF+dWIOCTkE
gZ+6TithrIAMvnSrkcEyt8p/P/OKetkgHDSn6yuT9OTXOpSWsTVpPc+cPEWg3Xhz
WZ9OuwcocxuRjzUydrjnuB07dKy1OPX8OK9U+MGiQQ2lnqqFhJ5n2dwzs5IILLyT
wBhv++vavK8HHXivQhLmjc5ZLldj0z4Pa3Kmo3WjOw8mVDcRg8HeMAjpzkY/75r1
ssVwNxz09q+dPBl1JaeMdJkiPzNdJGT2wx2n9Ca+h2VtowoHvXJXilK50Undanl/
xpLZ0YnA/wBf/wC068tx7Yr1D40Bg2kAnI/fYJ/7Z15du44A+tdFH4EY1PiZ0Pgh
tviu1IOMJNj/AL9PWt8QvFsesXC6XZStJZWsmWlznz2wOcYGAORx161xttcz20vn
QSFZNpXI64IIP6E0wZHUfrVOCcrsSlaNl1EbgdD+dbXhbw5deJ9WSzgwqKN08p6R
pnr7nngVT0nTLrWNRh0+0XdLM2BnovqT7Dk/hXvHhXR7Dw9osVrbyAMQslwxJ+aQ
qMnvjpSqVORaDhHm32NDQ9KttE0xLG1iEcaEt8p5J9T6nGBk+laRyVJDcAetNCgH
PUY7cZpW9MYyO/euCTcndnRp0G8CTnkd+9NMiEfdNHLNlsfUUjKeMnC+hFSXYUt8
vUkAdqp2zXHmEOznLHjYAAOf89alkikZHUtsVhwQTmpLdHCYLk+5HSgrRImU/IWP
UHpmoJFfja+09ehqZVZshXBH0qCRiGOSfzoZKVyrKtwr+YLshAceX5Y55yOTnnAP
+FOZyvzM3oeac67wducZ9etCq4CliBle2cZobuWiQSq+CMt9e1SEjG1eDwM9c1AA
gyHOMdBtpxITaOSvXr/n2oCxIG5xkAntUqEIo3K3rUauH5AGevTpSljnjr06ZoJZ
XkXN/GwJwsTjbnvlf8KmEmeM8emelQKXFypZlBCOSBz3GOSPSpxnIDuc9R04p3Y9
B+7cD85H1pSNy5JLcetN+VWLbR8x79+O/wDntQGfsFJ6Z20hEMisMDnI4HpUumMR
bXpZgSMdunWkc7w2WB9cL2pdLTFreZJCk5BI64rfD/xUZ1v4bMFTvG9uMe3Q1OpA
XkHHtUNqiLbqOQccDPOO36YqcqpblSf5VkzRE8e9hknC45NV5Qxv7MLyP3hPHtVi
MqMqF69ail3C9tcHA+f+VCdh6dS4rHaCAAfWnMXwuVJH0poIUjPXrxSyYzgrz1DC
kAobJxsJI9aXZvf7gIA6fjULuFZcg54HWkWXJySATzg9aARYCAEsVK9jzyTTgoU8
DPqfSq8ZDgYBwPftUyllP3tw7dqQDzu8zK/MT0zx+tS72DZKDB/Wo/vryowe2c0h
3N0GBnH1ouKwrvj+Ejvz09adG3HJ6fjimlXcfeyPT1p4xnbn26c0xCeYTkg4+orz
D4ppONIgM0ciAXjKpY8EHccjB9Mdq9PCBM7RwTkknBrzz4wbP7CsyF+b7UBkf7rV
rS+JET+F2PICcHofxpUjdyERWYnoACSaQd+1dX8NY1k8a2aPGrhlk+VwCPuH1rvb
UVdnIld2OXlt7mEZkgkjz/eUioug9TX1HIg4LIC3qfp1rxD4o6RZaV4nRbOFIEng
WRo0UBQ2SOB2zj881lCspu1i5U3FXucrp+o3mlXkd5Z3DwTx8qyEcdvx+le5eCfG
g8UaVmSAi8t9ouAo+UZzhhk98Hj2NeCZzXonwbkc+I761wpils97rjOSHUD9GP50
q0FKN+o6c2nboetefKzMosZ8A9SyY/8AQq8x+Lpa6tdOu0hZIonaJjkdWVWHf0Um
vVjEhXyxGMDt/wDWrk/iLokOp+Ebp41RJbQfaFYDGQgOR78Fse+K56bXOjaacong
Zwff6Vs+EL7+zvFem3ORhbhVbJ7McH9CayD160gOGB/ka7mrqxyJ21PpqW8khlUN
Zy4PAfK9cZ9c9BT3vHV9v2aRpCM7QVwevv7GuM8BfEG31qGPTtUlWPUhkLIRgT9T
ngYBwOn5eg7lIo9p2RxrnGSqgc15ko8rszuTvZor/bbjAxZOeM43Lxzj19qr3+ri
1spby4jaK3hRnZsjgD29+lXJ5YYIt8pjCIMlmwAB614/498dw6tG2laQR9kODPNt
x5xyGAGRkAEfj9OrhBzaSFKXKrnBScZyc+x4po68Chjk4H51Y06zk1DUbeyiIElx
KsS7umSQB/OvTOLqe7/D21ktfBWnRyKSWjaTg8YZiw/QiujYZHzdKjsLJNP021s4
mYx28KRKT32qBz+VSKj+YW3kA/wkV5kndtnfHRHzv4viaDxbqqSKQTdysM9wWJH6
EfnWKhP516J8XtHe21yHVEhxBcxBHkB6yDPX0+Xb+VedcgkgZ+lehB3imcUlZs9g
+EGrxjR73T36wzCUEsBkMvQfTYfzFd8mqwPIVHy5IG7cpHOe+f8AZ/lXzt4c1+48
Oa1DqVsgkKZWSMtgOp6qf89QK960DxLpviO0Nzp86ysuPMiI2vGT2I/A89OuK5K0
GpX7nTScZKxf/tK3ddykHClsBhzgkcevINPjvopWkUMo8vOQWHHOOnapF8xm5KgE
dayfEXirS/DNm0l5PH55QmK3H3pWwcdASAcYyeBWOrZey1OG+L+twTWljpMTI7tI
bhyrZ2gAqo/HLflXlePrk+laXiHXbnxDrE+o3ROZG+RCciJM/Ko6dP1696zBySSa
9CnDljY45O7ub/gm0kvPGOlRx/My3SSY9kO4/opr6GZtpwD9fevI/g/o88mpXWsF
P3EUZgQ5yS5Kk4+g/wDQvrXqjyyCXy+5Bwff/Jrmrv3rHRRWh5r8ad7No+WBGJsD
H/XOvLcZBx+depfGhWX+yMkH/X98/wByvL1BxxjIrej8CMavxsYVAbnp6UoIx0rq
Ph0iv4509HXcpEoYHkY8t+1O8deFD4Z1fMQ/0G6y1uS2cYxuU9+M9e4xz1q+dc3K
Tyu1zC0nVJ9I1KC/tjiWBw4B6EdwfYjivfPDGuwa/o8F1aPkAKsqEEeXJgEr74z1
7188gAcdK6HwX4ml8Nays2WNpNiO4TJ5XP3h7jr+Y71lWp8yutzSlOzsz6BZWPO0
8+lOQZA56HvxVexvbXUYI7m2mV0ljEin1U9OD9RVjeoH3TnGQetcJ0MMonCAj1IO
c1HIMjBOMHqP60GVRgNk5980mV2/KpyPekNIaY3c7gV244GOabGRnkjI70oDF2JI
6cCmGUEcIV565HNIslLlfQZ5GBUMo3ZZuvbtSMTkDAApr7nG4LnHoefwoGlYeDlg
TtPPWnLIgIBKsBUEEuxTujOTg47ipFkMh+U9CByKYWJdq8MQp9MdaCFHKnr1z3oX
0wCSe9Dn5gpIBPv2oEJnYnPvnio/N4OVA9cinsGCiMDd79M0mQG5HIHQHoKYFRjK
9+jYO0xMM491x/WrwRQSSpJ7mqpAkvlO75Shxj6j3q0MAZ7fzovpYPQGY4JG7g8m
ml/mA6k8jB6VHM45wxyenFRhsrhmJOMA0hkhfIO059eM1d0Zt1rONgwDj9TVJwWX
byBx1J5rQ0f/AI9plcDjv68mt8O/3iMK38NnPiVGTKAjFODYIHX8M1VifcinHGOg
q0jHHQZ9TUMtEykBs4c/hiopw41K0PRMPk/8BqeFT1AHNRXAP9o2uPu/OD+QpLQo
stjGQeBzn3prAMNpcEdMDIApQPkzjd9ajckEblJI4AoFcQqpQktk4/z0pBlhwzZ/
MUuwSD5mxjnn/CpEQZIbLAZ5xnNJggj4Iyy8d6exVP4icdzTF256YpXjBGA3IoYy
xHKTyMEfWn7+M5GB39agWMqDt+bPPSiPc6EleB/Dg0kBY89QOQTgdVGQKTepyQ2a
QYAJGRxTSJBkD17CmIfIygHlQD+decfFp1k0W1AfOLodfXY1ehOp54zx1IzXAfFy
IJoVowVRm6HAH+w1a0vjRnU+Fnkh75PI6Vp+G9cbw7rFvqaQJM0IbEZJAbKkf1rO
PJxmkI6+uK7mk1ZnInZ3PR5/jPemIiHSYo5COGklLj8gB/OuF1nWrvXtTl1C+cPN
KR8q5CqBwAB2FUDjPGeemKNrE9MYqYUoQ2RUpyasw79K9M+DGm7r7UNTYOFjjWFD
j5W3Hc34jav51yeh+DNc1+eNLeyaGFwT9pnRliwPfHPpxmvdNC0O10DSIdLsyxji
JJdwNzMT1OAM+n4Cs600o8vUqlHW5odMYwp6HNIwy2CM7hjkf408DBzkgj1FO5K5
4GepriOm54Z8RPBc2g6k+oWcTNp1w5clVwIXJPycdB6e3FcOcnkivqS5ghuIHgmi
WaKRcSK65Ug9iD1rynxR8Jpkke78PMJItpdraV/nByThDjkY7E546mu2lWT0luc0
6bXvLY8xAwelaNv4g1m1hWG31a+ijT7qR3Dqo+gB4qve6de6fL5V7aTWz4yFmjZD
+tVxk5z/ACrdq+5knbYs3uq6jqO37df3N0Ezt86Zn2564yTjoKrfeGf0pCD0A/Sr
+m6DqmrviwsLi4G4KTHGSoPueg/GmlYLlELnPPU9a9g+F/g59NjGvXyEXE0Z+zxs
o+RDj5+eQx7ex9+F8I/C2309xea2Y7i5VspChzEo7E5AyevtXoyIIhgfliuWrVVu
WJvTptO7DcW4YdqibIkU4bJ4+Uf/AFqnwCep49KQLnODn6muU3vYxfE2gQ+I9En0
6dgjNho3AyUcdD/T6E+tfPeqaVd6PfSWV7C0c0ZwQw6+49R719NSqQduMLnqo6Vj
+I/Cem+J7QRahGdy8xzx4EifQ4PHtW1Kry6PYzqQ5tUfOJxzzx60+J3jYPGzKw5B
U9K6/Xvhlr+jsHgh/tCEsQGtVLOB23JjIz7ZHvXKTW01tK0c0TxyIcMrqQw9iK7U
01ocuzLw8TeIVG1Nb1H6C7kA/nWazs7l3JZmOSxOTmggn39qkgtbm7mSG1t5J5T0
jjQsT9AKEktkPmIsZxgYq/o+kXetahFZWcTM7sqliCVQEgbmPYZIrqPDvwt1rVjH
cXyfYLYOA4mBWVl77Vxx+OPxr1/QfDGl+HbIWthbBQceZLJy8hHQk+ufy7AVnOrG
JUYtvXYdoOh22haVFp9qgEUYG4gYMjYwWPqTWiAMZ5PpggYp24L0xgUzCOxIxn/P
euFtt3Z0o8t+NPyrozYHPncf9+68qyWzkivVPjWxzo/t53Pr/q68qzkdfoc120fg
Rz1PjOq+GwP/AAnmnc4z5n/otq9o13QrTX9JlsLxBhxlG6mNuzD3H69K8X+GzY8d
6dgDP73/ANFPXvg5G1SvXnjk1hXdppmtLWFj5q1jSbrQ9TlsL2Iq8ZODg4YZ4ZfU
GqQIOP6V7R4+8Jtr9r51tGpvo2Pltg5kUIW2Z/Dj39MmvGZraW3meKRTG8RKujKQ
VI6jB5zXTCanG5jOLi7HY+AvGP8AY19HY3kuLKVsA4GImYgE5JGFwOf/ANdeziZZ
YlkikDowyrA8Gvmbaezdu9enfDfxUZY10S+uMSJj7LI7gZXIHl89/QenHasK9P7S
N6VS/us9MDYALHZ9eKaznsQ2eoXnNV5gBE6NuJUZOASQO+Mck4zjFRsBJcMy3UiD
+6Au3+RNcb82dSRZFxCzrH5ihmJAAPWjzoiRmWPd/dLiq1iwWJjh3JkfLMwycMRx
zx09qss8jLkRkeh49fanaxF3oOPG1QQRnv2p2VLfKVBx61VEIwjNdsQGBADDn26Z
qwCASQyHI+7SKaHSyARbtyZI4B4z3ojCrgjBx2FVrqSRgIoNqO4Jy444wM4B9xSQ
yPsbzFDOhx+7B54HPPShgrWLbMCAFznPHoKZKr7j9wYHUikD/IWYEY5wainZpHJV
lOemOv6U0IVn2EheQRwTQOhwQAO2etQKWPUgZ55HT8akyyjAwz9sNgD8aAGkMdQR
jyvksCueOq469ehq6rZOGHTHPYVnM6m8wGx8h6duR1/WrS73iDKGPOPu/wCNG4aC
yq3LnnPfHAqDahZlyMkE8fzqSQkrguVxjBFQ/aBEyquX8zjIGcfj+VA0BUIcZbce
hA/l+daGiTMsd6SHIGCCfxHFUuRGSzKT35NaHh6Dbb3bYGHbqTntW+Ht7RGNf4GY
ixgKAFwMdwBUnJIHQHqMUrsrFShUjjqOTSgAkDuO+azZSJYyc5CnAHpUFw4Gp2i8
Dh93Bz0qxFtUcdfcVFdSbb+1UL13/wAqSGWSwJ5ZsD1qOUbv4MqD14OKkZxkE9ep
ANNYoXB+6c8DNAxoiAy5y3FSgYHzLj6daaWJACg4HXmkErHjCkfXpQIeEJfJp4Vu
ud3v6UwHjkfjTwSGBbp396TGhDG/3ARyOdv/AOqplfrtJ9hnrSLkj5RlTzx1qNC5
kZuAB0J4pASZbjPf26fWn7gAeDjr1pOCByDSAn+Ece1Ah4bj2qjf6dY6pEIb60S5
iVtwWVQQDgjOPoTVvkvzt6fjSBt2AFHqfb2qrtaoGk1ZmQnhTw+oC/2HZHB726H9
cVO3hXw8wBGg6f8Ahax8/pWoGycgggDmnqRnJJIPrRzSvuTypbIyW8LaABk6Hpow
Oc2qf4VND4d0O2mWSHSLCN1OVZLVFIP1xV9jwRu3Z9e1PEgOP8MU+Z9xOKa2FCZH
Jxk/SnAHH3jx6GmNIrHaOCO46U8lXX5FO7Hele5Oo4A45A9eByKQnHykdOxpN+0c
Gl8z1yBnr3ouKzInDA/dz+NKEPZv8KV2JIG7p+tJuXvnHrSZetiC70201CMxXltF
cp/clQOPyNUX8J+HiuToWnc+lon+Fa2fcEehpWfAyD0pqTXUm1zITwp4eB/5AGnY
I4P2WP8AwrQihit0SOGGNEXgJGAB+lPLYXcAfpikA4+/gjng9qTk9mylFbibW5bj
jt3FOyxGNuRjsKci84U54pWDKVbq3X3NANgozwfpwKXaAP0460iMcYxj1FSDqccZ
FCJbI++NuMHpjvSMiZ6AY9Kftznpz7UjcHqMEHrTHcowtdTOtxH/AKlhkIWXnjjg
DP6/4VHf6XHqSAXljbzIMYEyI5HXP3lI9KuWSBLCFVYBAgAI47fpU4wByPxPFO9t
gfn0Obk8JaftHk6JpXCnJa2jHPPX5DntxxWnBpUFgjR2Vnb2qkHAhVU57HAWru9i
c5xTgu9csOPrRzNpK49FrYrrFfJCoDK7bsnc+OMeoXH4YH1pkt00UiJLMis2MLu6
jjIAxzV0vjA3devP8qhnggfbM8CNKv3HZckfjSsuoru9yTGRgfyo6EcDJ7imqADj
o3XG4cU4A8EjLepPWluBn6poemawqLqNlFc+TkoHXJXPXH1xWTJ4J8PttK6TZDHB
2xL/AIV0zD5dwb8SargKGz5nA+983Q1XPJaJgoRerRQsPDGjWN0Li20uzhmHKukQ
DDIwcHHp/OtfbgD5uO9MAc8E5wetEisVAHB9SaTd9x2WxTlYJdfeV8yfJhidvydx
27/nVGbRNEnuZDJpFg88mXZ3tkLMe5JI68/jmprrdFeRB/uNJghRznb/APW/+vVk
xDKsmQOuOOKV3uaJIxz4d0Jb+Jf7FsGDxMf+PVMZBUenXmrVv4f0SCYXEWkaejod
ysLZAVYcgggVakJW8iIHJiOWwASMjipVlBbYhUjPb/PWjmYcsegkxxg7xnpktVSd
rcM8j2xLnkkR7geKnmZkBCqc9Pf86gka6AOwQ4OMBnIP8vrSRaRFZtLJbKFCxxb2
+WSMggbjx1q00kvC+YpycZCgY4+v4VVswfKZZ1KyBmyu1iPvHp7VYcxoNpikyeAV
Q8Um+4WuQIbXesn2U+YcHc0HP5kcVcXaUJPQdAPpUUYnk2hlhA7/ADEnH0wKsxIs
fBX5SSRiqfmTe5UmSNbuKSQ7MRsvp1K//q/GoLeRZGuVDEhZvlx1I2rVu7tluA0i
sySbCoOc4/pUltYQ24Ix5jE5LOdzE0dAfmLFArgZZunJ96le2jBLbQABztHXj/Gn
BduCwH4Zp7HOMYGO/pzSE3qV0t5F3q20rnKnPX68cfrVa+sGaCRoyVdV4ZELEDjo
Bgk/jWkRnHHPTr0pCVUc8EDnmhOzFdsy/smNSHIK+U2ASeORirsUQwVJIwOxxigq
xvi2SF8sAA+oP/16nGOAEzj2obHsRSR7eMqF/wBoH9DUf2cKCF/E4q2pB5wpI9RT
ck8dAen1osJMz5bdI0PJyeeOD+ArR0SRVs51LFih5yOlNKjbtbvzxUunoEiuwPY/
p/8AWrbD/wARGdbWmzmIWZo0bBUEdDVlHycZyPSoIpUkiWUADcAeBxU4Kk88gVDL
RZjIfhR0HqKSe2huNonUErkgZNJGe4UdOOalcfKSvpyPWkh6FR9Is5GO5MhemGNJ
JplsqqVjBA6EueP1q2hcKCD144FNlbH3uPWnd7BoZ9usVvqpjiG1fK7H3rSIxjnj
0rPSMf2ur7gwNvjGP9qtBtx4OAPYZxQ7dBbEUU832t4hAwhCgrLuHzEk/LjqMDB9
OaslsqFwMdx1qMkoQclhjjmlLqy/Moye2cYpMaHJIyqQQFXv3qQuDhR0zzyKgBAy
Rx77sigeWnclhznPXmkUWkKFflU46DtT2AYDAyffNQq4GDxjHc1Jx13cjtjNBI2U
NkqAG45xxVGCKUtI4mZA0hO3aMZBwP5DvVp2YEqE+v1plsymElcqTI3OB13GgLrY
WC1kVNgvXbgAFkHy46Y6VM1k7xlWupAD1+VR/SpIkfoeTnnjp+NShBkYXleDxnmq
bu7kNJFU2rN8rXDv7Mq4GRz2z0JqOTT5Xn3i7mLHAwAmBjPHT/aP51dUMG5Xgcf5
NPJOeByKlOzbQ722KsVkYk2/apSzdeF/wp4sZVIIupgOflwmOv0zUof5mI7H0qXc
rAgdR6infUjWOxWS2cEsbqQnk8Bef0pr2WYwEuZ41U9FCkZGMH7uewq0FyOhAxgc
UpjHHcng570Le4J20Kj2AfA+0SkKBj7vBByO3sKY1g78/apgueQAmD+lWygyBg5/
lUeGJI5ABOMnrQUr2tcilszOojeeQKM/dC45GPT0JpzWkow/2qXPfG3tn/Z9zU4O
zaBx7dqeRnJXnPU002S9VZ7FI2YZSomkQt1ZSB6n09TTIrVonB+0SuATkPt789gK
vEEHll9+PyrgviP43fw9DHp+nELfzrv83g+SoIxwQQc4Ye35URTb5UXz6XZ2lzqN
nZLvvbqG3Xs0rhRn6mnW9/bXsYmtLmCePH3opAw/Svmq0sdV8Q6i8drDNeXLAu2D
uOPUk/hyajdL/R9TIcSWt3bSdOjIwrf6u7bmHtY32Pp9AAS2Blu4z708AkcHk+9c
T8O/GDeJrBre9kQahb/fCjHmJwN/THU4IH6ZFdplkXCjIrBpx0ZpvqgGA2c9B61F
vDy4O07e3pXzn4nnm/4SnViHK/6bMeD/ALZrM8ydv+Wjk5/vVuqDetyPaJH0vG12
pEcTx7FBGDG2Tj36U1riZnKKuBkDd5b989sA9h+dfNRkm7sw9Oa+ktGQro1lHuLb
bdBn1+Ud6icORamkJqXy9AnnukXKbSQCVzAx3dRjrx0HJ9amW6uXlMWFDKM5aJiP
6D9asdTgY96erHALAAfTvWWlrFNuyKm+725ZlJBxnyGOfwzUkzTuvlMRlsDIiYDB
xnnp3NW1Df3c+nNI7ZOG+XHHrRoQ23sNZARgHOeOlByv3jkd6QNzgDH40jHKjPPp
x1oHqIZGHzYP4Cox5ZbK5U+uaTLH7oGc9DwacqgE8biBzUl2sSqykrkmmuMY5HPY
CkU8k9M9Tik2oFy1MVjOdY/7R3yYB3EJleMbR/FjrnPGasSXCqjsHjLnopb8s1YD
RmRtnPGTUczEkAnA6gYxSlqWvQ5z+1Jby6iEuwFS4ZUwcYI59v0rZSPKg4YDr+FJ
GkSs5RVDO2WOMFjxz+gqWNFBGWOacmug0rIRUXYdy59PrUfMs2cgg9cgdqtkBgRk
FTxURU5ABx6YH6VLGmNESqBxgHrnmmlCNoTlj2qycCPax56DtTJQGRgCN+CRgZAo
C5FE5LuMgFG2j8gf608OzzNkAAKCCeSetQmAxyRsrs25sMOx+U/4VBG06QxyySsX
Yxq+QMckD09zQlcb2ujSypXnHPHOMmgkEfKcHOMg4qswPmNhuDwMHtUqdFG3Ppk4
zQKw98JFnAVsZGRSeeARjnIpZMsx5LcY246VBu2Moxkr93PrTJXmTiZsfOvB981J
G5IODn+tUfNbnOBzwamEmFzkEkHKigGkKpzqK4P8Bz9cjFWCcfQ9we9Uo5/9OYdi
nc/5xUzyENuzjjFJhbUn+baSRjI4/Kk3qBt6/wAqpGcq/wAwOOp+aplmDrkHAxjB
oHykpnIPB246mp9OmLpdMTnoB696zXl2AjIx15HGKtaVIrpdKHztVeg+tb4dfvEY
1rKDMMQ+RCsW4SbVxuHf1qYFTwcE0ySZZTkL6c0pUJz1P51LKjsWo3IIGRip3nJG
0g5PTvVVC3V8BT2wKcdzHg7ccjPIqUUKWYEjPNEhZCM8HGelBHHzNk+pGKQbuuVb
n9KAK4JXVVw/Hkc/99VbyScAZ+h5xVXLHVQ5YY8jB/76qyR2BwOnNNi2GySAHGWU
Z7U4SewJPYVGhJlZMZwAcn3z2/CpUjJY4QgetJjItz7sA4B/u9+PWpgSrBAuSD09
KmjTnJXJHSpCmScDIHYUARAALliRgDpzTickGNTxyAeKeEBPIx9aDtGCwBHHbOaQ
EalycDkdMYpthGRCxGQfNckZ6fMePfvVsFAMH8u1VbW6t/NNurjeXchc8/eP/wBe
joFy6mV4z+uaYZD5gTcw96epyCSR9PWlwR3GAOlBPUjjJA7ZI7CpDnH6YpkshUZx
x/KnDONxzk9qAfcCz9MsO2RTlTrubd7dqQEYweSOx71IF9c8nORQiWxMnHBwO/Wk
GW7jk+9LxkY59hSnco44+lMkY425znGO/em7srjAA+tP++cDJxySary7kKmNhnOD
kVJa1Jd+0EMQAfxqQbifmfApu0FTuzx6CnI+f8MU7CYrqcdRXzl43vhqPjHU7jbg
CcxjBzkJ8gP47c19GkkL1x26V8tXRZ7uV3LFi5OT35rpoLVsxqP3bHr3wdt4F8OX
t0IwJpLoxsx6lVVSB+bH86wvjJZ7dZ0+9PAktzERjGCjE5/8f/Suj+Dh/wCKRuOM
f6a+TjP8CVkfGgljpBByP3uOOv3Kaf74pr92c78Lb82PjW2jyCt1G0DE/wDfQx+K
ivd3dVzjP9K+cfCef+Ev0jkj/TIvy3Cvox2AUncemOBzU1171wp7Hzb4jYnxPqpP
H+mS4z/vmvaPhtIg8BacCF6yHn/ro1eH6rJv1i8foHuJCcDj7xqey8Ta5p9sltZ6
ncQQx8qiPgDJJ/ma3nByikiYOMZPmPpIop5IAPfApQCq9eT1AGAK85+E+talqv8A
ah1G9nuRF5IQyOSFzvzj8h+VeiqSX559feuKScXZm6aautiRUzhcH8TQducHpjke
tCLnHXk/SngHbgnPpgVJLeoi4ZW4HrUQBPGDkelPGQmDwDUe4g8ZA70DQ8Bs4AAP
vTiuRg8/1pnmOBtIK570844O7nvQJjDGq4+Tjv7GglQB3yOBimPuUAc7aYXZp2X5
flVSOPXNIv5jg3cClLsflOCcdqhtmcxEuDu3MMjjjJx/KkuzLFZzSIoYojMFPOSA
aNyra2HbXb5h1B9aa6YDBhwc8E0rOOBnoOw6VTMzPbwupy7bPnHHUjPFIpD/AJQ+
due2MYxUqrhARjAPGKCo2AjAbplv50oypC8Lx2J56UasYqhyuCpOPToKftbYRtxn
pk1E2BPFtJ+ZiDx14PFKJXNzIp+6EXGce/fv0FAMeYw3AIJ+vQUpjyrYAzjHJxQH
LOpwRx261DmWQurIqR8bSDnd65GKNydSSRQWiJxw56nJPymoCFSxhB+b7gwRnPIo
t7eC1kk8uNRtbjAP90dKYscDXTbY0GAGwByOTz6dqNwvroPdjxsJHbBHSnq5GFY5
B7YppQEEjAycc1GxDNyR07GhFkrMGB6EcckdKjnCEhS5DfTIppYc9fqXp4XcuWcb
h7daZJCYyOSRwcc804fKCWY456jpSmFgT0HsO1IiFSN2SaAIlY/2htOWXy+p7VYZ
iTyu4Ec/WqzDN5wekeMj6087eQffimBNLgHG3p1JqFnOz2A4zTlmUPypHH5VHMys
TtxyPrRYLkbtgfLtUHJxmrmjyh4rnuVwpP51nFl24JPPatbSiG02baoHHUc5OTW+
H/iIxrfAzEBIyDnIOOlWUZeu1Tx3HSomkWUlgBzyKeB0xxkcDFZlIsL8wJIHtkZz
Uin5R93H0zUUag8EjJ7GnsD6cj1HBqRi7+ASBn2pUy3YCmBDzvwQOnPepVbHAj5P
rTAqMM6mDu/5Y9c9t1Tbs4HB9Apqq2Dq4GDgwdP+BVaABboKbEiFrkxSAgqdxUFe
hxuxx+dW1YsufnXHYismVJ/t3mkp5Y2rjJ6b+PxyK1kznoAD1xRIIkyvjO0E44xU
/TGB17GoFOW459CKnPyqQOPwqCmIWUjnuaf0A46e1RjG4bskZ6EdamDg8frQDIju
646njH+fpVOG1kivN6qjLuJV/LBZQTk859Se1X2bjGGHuKOMADP5daEx30K8P2uS
MeafLbjjauPfvT5DdhQVO5ueijnnjvUucc5xTlB9xQ97kspyLeSSMqmREHcBeeP8
fYU5PtgYptJQY+YgE/xe/wDu1dUDPUBfU08YA/yMUIOfS1jPVbpipJkiJGMgJzye
uc47fnUy/afNZGLKg5DALyfz/pVjDMScYwOw4pFV8k4LZ9BTfoTfQheCbb8s86nO
MKE59+R0oAvVCoxLlsbnAXA9cnj37elW9v8AEMggDGaC2CBggjgYoTJ5m1YoPFev
GAkkkbjGThOeeccemahlS8ysa73J/i2qCPT2/nWqWGeRmonQuOhyOeMihNIqM9LM
qzw3BQLBNLnnnCehwOR64pzJefLgSsnH9zcODn29KthMghgVHuKXbtOOeR1xRotB
OV1YpG1vAGLXc5DDgYT5eT14+lfPPirT303xPqNowxtnYr0+63zL/wCOkV9KqQRz
n615n8UfBVxqEg13SoPMmCBbmJAWeXkBWVQDkgE556AVvQklKxnUfNqTfB9kbwpc
x7huW9Y4z22JWJ8ZbqP7fplmCd0cTSN0xhjgc/8AATXEaJ4i1fw3cyS6bdGIuMOh
G5G9Mg9/fryahu77U9e1ES3U015dTHaAcseTwqjsMngCtVTaqcxLmuSx0Hw009r3
xnbNgFLZWnf8OBj/AIEVr3WVlAPy846YxXGfDjwbJoGnvf3qAXt2i8Y5ijIB2nIB
Bz1+g9K7OVF2HPJ57cVhVknLQ0pqy1PmG5O65lbPBc17R8PtC0W98E2Fxc6TZ3E7
+Zukkt0ZmxI3UkZPQV4rOq+dI3+0a95+Gqj/AIQPTWyf+WnXp/rHrau7R0M6esmb
1npWn6bv+w2FvaiUjeIIlTdjOM4x0z+tS7yo+U4HqalIY8KcH+dVmSQspPPXIU8V
xu7OqNi5GxYjgn3qQ8jBI/Kq6ox6MV4GcHFS5Y9SfftQjOSFcc5PPbJ7U0MMgZx7
01yjYAOCOxak5G45I+lA0tB25QwLYpzqWA+cqT71EiqFJ3bupy3FO5ONxAHpmgLA
0QHG/LezVRSFoWLmaXBAGARg9evHqatOwU8kgkdjj/PWqB843CqvHGS27gc8cf8A
1qOhcV3LJjMcUgEkhVhgc/MM/wD16SSLdIsRdzCUckFs88d+vrT3ANu2SvJHAOAT
mmyy7blCuGwj5AIyeVpDj2RXZBIzoXkULLjIkKkjbnGev/6qRbYKfIBcxxhcAsTj
HSkI33Mh44n5Gf8ApmOKmYqHzu54GKV+iLW1rlfCiVIZZXYkO2UYr3GO+c4PWlYC
K3uXBkxEpZckkgBQfWiTa19EzDIET5Ax6r/hUckmYbqPBA5AA9NvrTF5PqWWRXlZ
y0mFI5DkAfKPf3NR28QSGJpN5mCLuLuSW/M/WhD+9l+c/f5BPsKXdvjUBi2AM84p
XsrArbkBIMEkwkl3/PjEjAcE9gcCnqiW1yNnmfOpLFmLE8jHU/Wopdw0y4VCoYCU
89ckmgv/AKTH85bKsePqO34099gejuXZZVEfIXt0NIZFVBjb7/Wqsqh8FpCccknp
juKaWVhwxUHkbeaLAWPMITp27VXkkKtuBJzwR/Skkl2KSpDcEcjkU6EOzF2xnsD3
/wA5osFydVXIJXJIztFK6nb1AFICWYYJGfalXgYZ1zxmgAAIIyRx0waGYbcZxj06
1C86A7c8+3SovOUfdYc9h3piEaQrfbScDy+/1qVcZJGSOuRVV3AuSRwShHT3FSkl
VDZJJ5IFAiWTKgFSxJ/GmMgbk8H0z3pGkO7LDAPQEU/cAOducdqAI5Au35QAT6/1
rS0Zt1pcjH3QvIHGcmszCknJIxzhcVqaIF+zXQU/L6d+9b4f+IjGt8DMKIADA6+9
T7xjrx0+lQxMWgVm+8VGaXjPT8KzZSLcZAbGASPaplOVw2SPaoFSVVXdGVyM8g9K
sBsgDGfrSGI244yMAetBcKvNDknvUbsBjI5pgVmlA1Xt/qP61a83PGOByapFj/an
OMGHH/j1T5IwAD+dAhEjSS6YFjgAMAXJAOT2q4PlAw3I64qov3uAC3TNSbsDnI9K
HqCLaS5Py4GfUVI0wLD3J6VRRgB8wwfapRMuBggY7gUii2DuHBOc8HrSqGHc/gM1
XjJY/KcjNWNwwCWUA+lSO5KDg4Ynn0p4wOgz68UwN8uVJOf1pykgcDBXpQJi/wAO
TgA03ocbs/hSEngnO71xmlG7GemaAF3MCBgcn3pzN8wCtyewFMfOAF5P1p21lIBO
FzyCaBaEock4JA/nTDINwQEkHr3xTiqk84wOM46UpKYwwzntQQIHQcbS3bilVjjB
PAHSmjaCMAZzTy/BPUDoSP8APpTBigZXlVyD2/rTl4Oec+wpgyx4B4HA9KC2AO2D
/eoJsOKqcHDY+tLtVUH3icZxmmqTgHdnHp6UOpC4TjPcigPIXucA+2acQSmGwB3z
0NNjIZcEEj8aXCEAjcc8YFAmY994V0C/kaW50eylkZtzOYQGJ92AyadY6Bo+mOsl
lpVpbSgYDxwAMB/vAZrRckjoSfpR0+Y5HHTtVc8rWbGoRWthFweFYZpCAeA2c8U0
g/ewNpNKoyDjgn0NSaGV/wAIf4dcNu0Wx5OSfJXk/l9a0bPT7bT7VLa2hSCCMHZH
GoVRk5OPxJqwoOPqOaaOD0x3zTcm9LkJJPQVwQSFBJFMWLd97J9KcwwCdwwaZ5mw
ld5OOvtUlq9tB/lheSPbmlwCBswfrTQxbBKr+RqReRxjbTE7kLqVbICkY7U3ezdT
nNSsu7IHA9qgWILLv2ge2aRSJAo3YB4HGAaCSx+8MKemaAh9AcnjNDKFxkE89BSD
qNKqFwT1HFUVtonvJEKbkWMbVxnqT1H4VoSMAA2Tx0BHWq5kVEZ24QcngnH+famU
rjbW2txAyCKMKSQVIGDyeopLiCFo5CYlY4PAUVOjyOgk2bV4+UsM/p/jULStkyM4
2kbURV+bdk55z9PTofwVr6Am73YxLaJUKxxRquScKo6+v1qi0Qj06BpYwGxGHwvU
kgGtPlFZsIVAz8pyfr0qFiGwmMlxnbx/nuKL9y73uRW8MUkcbiMYKjYHXBA/p2pT
BCswPkxFh0JjBI/Snwxm0hSPbuSNAoYybmwO5yOfc0SSsMCJA2efvYAHH6/4UnuC
GywRJJG/loGLfMcZY8HqfyqARxtfO2xQoRdrbenLA4Pbip53lwiybQW7g8cdai/e
sv7pI9pyNzHt9B1FCuGhHDYwjcX+d2YnJUHgknB+macsMUbgpCAwBywWnltpIZVB
A7dP8/40oYupdFG1T95+9F29Q0S0GyjLcg/MMcdKqu6pkrx2I6fSpDMzAl0AYHBC
5IxjrTFtzO4bGR1BHH500DGQxSXEgZslV4/wFaGFUFQ3AHGaaGWNNoBOD6d6hkYN
hsEY6UxbEsj87eAB1FQvNsGOcj0NRZEr8EEgc+wokXcMYz6HvRYBzOCuVXPuOaYu
0cqSMe3WmKpVeRgccipBtY4Kng9z/wDXpiK7Nm9ChicRdB7n/wCtVgcKSufyzUKK
ov8ABA/1fduetTSMw5GCfrQxAWAOOG9WGOtMknXGWYZ7YxUT5Jx6tjj1qGSPAJIx
noaLDuWROARnaw7Z61q6M7Pb3fTJxjH41zzRNtJwCTzW14dQxx3QO45UNyfqP8a3
w/8AERjWvyMoQb5oUcdx6da3dLtIrKPznw8rfxY6VgxMiwffwMY9atWWo+fB5Skb
4zhlB6elVRinLUio2o6G3NqGP4jmsm7eM3HnxKAWHz8YzjvSiNm5NUr24WK8t7fG
5m3Mw9AB/wDXrqqxTg7nPTk1JFh2bPPemsxIwaftyMnkdOB0pjkYCjgDuK887Sox
/wCJoOeDD/Wpi43YPWq7Oy6h3wYT9RzU65PI4xQACUGQptPABzS+YCQd2T/Oq3mA
XT+oVeAPc05WYYOTx1AosK5bA3AHdwemKkTHPH1xVUMXC/L8pHc1NtLkFkIx9Kkp
FlGycDbjsc81ZRhjJUZHUY61VUlcYzjjJ6VMrbh16npSYyyjHDHb9c09nwPlHBHQ
1BGRkDB68nsalXOc7e33cUhsefn7Y75pVD7umePTrTlyFORil3Z4IyR+lAhSN2Pl
5xyO9NYFQM8DHGD0p4G4H0A9aawwOQMDJIosIHbcuWbr7U4ZK4AB/rSAE4GR15xU
wH4e4oJbsMVRg5I+WhfmAI9M9KRp4I2w8gB9CRVWbVtPhJD3sEfu8oH9aXMu41GU
tkXOcg9+47U5QCuQB+VVre9tryMyWl1HcIDgtGwIB9Mj61KH5x0yKYmnsSr8o3KF
9CB0pQVxyPc471Q1LWNP0m3WfUryK3iLbQznqfT3rLf4i+E0PGrRZ7/Ix/kKe+wu
ST1SOl37Vye1MkLFSO3TBHSuVHxN8JZ2/wBscc/8u0uP/Qa29K1iw1yy+16dO01u
zlQzIyAkdcbgPz6dfSqaa6EJK5ZZnPyg0uDjbnt09KeEwclscdKr3t1BZWclzOQk
UKF5GP8ACoGScVJotdhzLjkdPcUkeQS2QR7cVzJ+JHhIdNXXPvby/wDxNNPxL8JH
j+18/SCT/wCJp8kuxVzq1k3AgA4p3yt/F9D61R03U7PV7CK9srhZoJM7GCkZ5weC
M9c9qtq+PmGBj9akTXYcVLHAbp1JFNRBjlgSeg24oBbls/oetYWpeNvD+jXr2V/q
Sw3EYBZBE7YyMjJCkdCKaTewa2Ogx8xLEcdBTm3BcDGPY1yQ+JnhBSf+Jvk+v2aX
n/x2tbRPE+k+IY5X0y7W4ERAcbWRlJ6cEU2mldonc1iOhOQTx1xTDGzc7sYPbr+d
OU84KEjHb1pGQAAgg+gxmpGhoAzu3Ec88U04LY5BrL8R+JbLw3YLd35k8t5BGqxj
JJIJ/oa5N/jBoQ4W21Bh/wBc0Gf/AB6moyeyK0WrZ6IUU9OT6niqckbpCOTJhgSB
x3rj9M+Lel6lq1vYJYXEK3EgjWVyvDHpkD3x+ddq53LlXIB5JHNJprdBFjFljMW9
WGztnPNMOQEby8gk55yVH4de1MWNlckEnryT3p0E4mlmgCOphIBz3yM8UrF7Ic8s
SxZDqxPCLn7x7VCNsEKtI+VRArkAjp3x2HNXBHthPzEetRuCEyCuOnSi/caepVnZ
LiMxo3DrwVIOAeM0wFIpCHk2qzAgscDOMY578VeESlNrZ+oH4UxoQcjn8ODU3DS5
V3RXDAoy7FJ+bI5wOgNMWT7HAIpyqMi7SW6H0x78c/5NTxoXYAHbn+LHNVrqGVWA
MhYDPJPT8PxqhvcQr57+YSVG35WJwDn2/AfWl+1RInlyZiYcncDz/u+vrx+OKriU
7sNglvTkg1OVCKJdpPrgdBxjjvTEMDO+WdeMj5RgHHHWrEZULtwR68c/nVK6jkbY
ucfMG4Bxx6YpAXDHc4ZVHAAxmiwXLbtvJTv296gkVscuVOPTNVTIWwpzzgcHp71I
I2CrtzxyTj3osDJgoC7sAkDsetGxsHBzn/PNRKQMowKEHnPf/CnyERbd2RuOM4zz
TEADOOu3J9qeE+Tk8n2601FLRhlXOORk8e1PCt13Yz7ZzQPoVSEF8dvDLCfqeR/h
Tm+bI9sjFSSQJ9rLKdxMYzxwOv8A9f8AP2qVoAoB6jIz/n/PSi6FqRiMZwcdATmo
hDtlwqgLnt1zV4RB9wVBkdSeKkKAHaUwOzZ754pXHYzJLdmdsop/H6/41s6NC0MN
wMYHlr745b3qARttwoJP3uRV/T43WG7yQf3ajp/vVvh3+8RhX+BnK7GJwqhR6bs4
ps+nyqRc2twIpgPvbcg+xFW4VVVb5B6YJ/CpxyykenXpUczT0K5U1qZzXXiB4/JS
O1hJH+uyW/8AHf8A69SafpTwNLPJM09xJjzJW/iI46dq1kZGG1ipweCelTN86gDY
MD1605VZSVmKNJRdzOZH3EFegHQ9aGRlX51wPerhj+bk7s8cDFRzIpGc5xxwOtSm
VYzDuXURg4/df1pbkkqm7JUOvWpTFjVFzwfIyc9PvUXUeTEDtbDjt+lUTZkJjBJJ
RfpxS2ylYCowPnbp/vGptrA/wr9e1JbKwjK7s4Zj19zQ2CRIq7c52+v1qUZUgngD
vihVdvl7+mP85qVFdXwwOMd+lQWIqoXyefwxirMcagBQdqnrk4zTCsjjC5+vGKcv
mqpHGB+NIZZGD1KrjuelG/g7SMdzVd3CRvI4LBVJOO4oB2sgZGPmNgHPfBPP5UrA
9CyrbuNox0zUikqM5qONVHKjn69Kdhgxxg/0oAfuU4KqR7gU/d8vyjAz1NMXIwwA
z2pGYsuQCaCbEgPQ44+lLncvLH3wKhRHyGOeR09P88UbXwTuBB5yaYWPnPxV/wAj
Zq/X/j9m/wDQzWSOOR+lavikH/hK9WB4P22b8fnasgkcEfzr0o7I4m9T2n4OHHhe
6yCcXrcj/cSu9ldLeB57hhHCilnZjwAOSa8++DjH/hGbsbwP9NY/+OJVP4peM0Eb
+H9Om3O3/H1LG4IAyQYz7569OgHOTXHOLlUaR0p2jc47xr4ql8UayZwxFnESttGc
fKvAJPTJOM/p2rmiOpx17UYJJ4zj3q9oujXWuapBp1kitNOfl3cBQBkkn0AGa60l
FWOeT5nc0vCHhW78U6p9nizHBHzNcbQRGCDjgkZJIx+vavoLTrKz02xisrSIQwwK
FRR0A/rz371neGPDtv4Z0iPT7c7yMtJKVCtIx7n+Q9AK2cAd+cdhxXJVnzO3Q2jG
y1AY5Aw3Hp2rH8U5PhPWDk8WM/b/AGDWttVTyG981keLB/xSmrZYE/YpuSenyGsl
uWfNjDIJzjJpo69aewydvIPuaaoAr0jkPfPhouPAenZHTzDwf+mjV1TAA5B3Yrl/
hmrHwHp+Af8Alpxj/po1dMsbg425De/QV50/iZ2x2Q4E4IwAfQc14D8RJ0n8c6k6
OMBkTPuEUEfmCK99eLqc8d8DNfM+q3R1DVLq8wF+0TPJjrjcScfrW2HWrZnVehU6
4JI611vw11pdI8XQCQNsvV+zcH7pZl2n8wB+NckPTPtTonMTq4YqykFSOMH610zj
zJowi7O59SBnK5YZI9c5qK4maNM7VyWCYPHU4/rWP4U1xdc8N2l6JQ8oQJP0yJFG
G4HTJ5+hFWdZ1BNL0qa/uPmSDbIyr1IBzx7153K72R26LU8p+LOrNdeIo7BZg8dn
F8yAYCuxyfrxt/zmuEbBPHGOuasajfHUdTur11CtczPKQOQNxJ/rVXI6fhXoQjyx
SOObvK5LbzNFMkqkgoQwOehFfTCqZIQVwQw4IHOK+ZVGB3r3/wAGXsmq+FdOuGdu
Ydj89Sp25yD3wfzrDErRM2oPdG5Hb4GC+zrxjP8AWlG7JKFUyO3f/CmyptiKjc+O
RjpTw5Tb+ZBFcdlsdA47zHt3rkDptPHvUbBl4JGGPoac0hkbaVyOwGev59Kj27OQ
wJzjlyf60NXBDY2kW42EqF2s2dvIxj396bMJmfKyoo6Y2Z/rTXkAu0wdvytkk+4p
W8t927JGcfK+3t7UWZV3vYfmQIcypyMZKE8fn9KgJBmkgZxuABxyPX/CkDRKCiK5
JPTcTx602NAbuTCsp2jLE9Rz0/X8qLIBgtZCWbeioScIRnP5H6VdVJXjEatEp9Gj
PA+m4VXkjHlH7oIIK7kLDr6Z5p1sm2FJZy6yOATtZgP++c0/MV7D5YJCmGlQHGDi
M9P++qospZf9ZEsgxz5ZP/s1aLkBTsBOcdW/+vVaUMYi6sA2OvZTihMaV9WUGt5A
3meegcdSIyAPoN1RzRXSYP27GcksIexzx96rrWUcrDfg85GSeT61CY18q4SMZxkD
bk84zn/PtTTEytsjkjhuftDKxG8DH3uBx+vvViyb5CskUe8YP3+oPqO3Oe56VZEU
It1UDJ2gA46e1RS27cFeoBDcdec027i5R2wScA7Rkj61IqtGc5BA7YFNWFkcByAA
Mc/pU6xZBOQR69OaXUZULtJdEseFj7dyT7VaVSSUSM9e5JBpqq63rOWyWRRgH6/4
4qyCzJyCAe/XFINgCqf+WLAFsHB+9x1+nanADeRn5T0G2o2nVUH3gMDLAjjjrTJJ
0KD+LkUIdtCYvGq/INz4zzVzSmeSO6ZXWTcq4GCMfe/OseVgybShPc8Vp+H0R7eR
nTc0QwrMOVBzkA1vQ/iI563wO5zwJli2PySepPPFT7sYBGOOlVUYtDkEFjnkVIWY
OM5xjqOtZtGiZZ80jIBHPG0D/PNTq3K/PgH1qouVORyfT+n1qzAY+uO2SP8AGkUT
7yUyFDZ4wacIiOuM5z0pp29VQDIqVRIV+YKDjt3oEUGVTqoOF4hJ5/3qS8XBjwCB
vXoPenuCurjnkwc4/wB6lmVJDtbf7MDgiq0RJCyEZJX5QPSm267odxTb87ZGP9o0
jxNJOYjLKFABALY9anjTYnloOB0JPXvQ9gJFUA5+Y44qUBQCTn3BGM0wIxIJ6+3P
NKYpCuS3APQk/wCNSUJK5STKowVeu0Z/SiS42SFWU7AMk4GP8/40hiYx48wKc8YY
+tOijjULkEn1xkfme1IaFnYtay7Rj5CRnjtTpsh7c548zrjr8pqUxPLEy7CA4IDg
YA4/+vS+VIWUl1JjOehHOMevvTt1JvqOCr1BY4HODT9pxlR1NKS6yYLruIyDinbS
46jrzQFxu3eoyCB0GKfyB8uSfQetKsZBzuyPT0/zxStv56fgKQriFWKfOT/jTcjB
HzAmpAzAcED2xUWcYzyfYUwR85eLFI8W6vx/y+zcf8DNZGOBmtzxhF5XjDVQeSbq
Q9eOWJrEA47fnXpR2RxvdneeEPGEPhnwXqKqQ15LckQICCQSgw5Gc7Rt/PA71xE0
0t1M88rmSR2LOzHJYk5JPuajKkDn/wDXSYIxyRn3pKCTb7jc7qxJFG7OEUFmY4AH
JJr3XwJ4OTwxpwnucf2jcoPOOQ3ljJ+VTjI6jPJyR7CuH+FGm6ZeaxNdXmGu7Xa1
rExGGJ3bmwepX5fpnPpXse9sE9Tg81z1qn2Ua04/aFDgDlm3DowHWnlmwCC3HqKY
MY2nk96VX556e1cpq0OwWI+Y49O2ayPFeD4T1cljn7FN0/3DWuzAKNuevJ7VjeLG
H/CJ6vz/AMuUwAzz9w1UdxdD5wY8+lIoJG7kgEDPYUrcHk8D0pAM9fzr0jjPfvho
c+BNP2sMDzOCMfxtXWGLgBmGD19a5X4ZEHwHYDk/6zj/ALaNW9hTeCOTEm5GOGJI
4I7HjvXny1kzrjeysM1ecadpN3e78m2heXGeu0E4FfMxHOM/ka97+JMEcPgTUXWO
NGAjAKgA8yKD+leB8HOBxXRQWlzKq9bCZI4yOKUEjvWj4d0k61r1lp+XxcSANt6h
erEfgDVO6tJrK9mtLhds1vI0cgB6MpIP8q6LrYy1sej/AAf1wxXdzokjKI5VM8WT
g7hgEe+Rz/wE1tfFnVfs3h6OwWUCW8lG5ByTGoJP67f1ryfR9SbSNYs79Wf/AEaV
XYK2CwB5H4jI/Gtbx14ii8SeIWubckW0UYhjLDBYDJJ/Mn8MVzun+8ubqdoHNHg9
zg0vbJx+NBXPf2rY8Q6BJoMlmkvmKbm0jnZZFwUYj5l/A10NmFjIBA9RjtXsvwu1
NZfCv2ZjhrWdo8ICzYYlgSB7kjPtXjI4JGT+demfBueNbzVLViwkdI3UD0UsCf8A
x5axrL3DWk7SPUESIxlC7nf654/wobPyE9upHJqUqrKNq55zkjj2qP5cjK4A6Dpz
XA2zr8xv2iJDiTecjB2qWx+VMeZbgbYA6gEEboyuQPrUqbWZiFVgxxx7df5Uy4Yx
+WVXI7qT1GDx+f8AKjSw0V7iX/SEyeArEnOMdP6ZqCa5X5wA5z0AGcD8KJmee4UK
OqsCcZxyP8aktII18xwo37jnPTjjr19KPUAsleSQyFWPY7wRgYPT15x+dSK8bXjR
8F1UEAHHc+v0qQPmZE555Ge3T/GmBN127cb2VRndnpnB/WgaAlUJwGIySRknH0xS
GdGcoAcg8fIcEfU05jttpBgE4PAFSBE3fMCM9MdqlB1GM/ykgFR249qrrtCgEHB6
Z6dKnkgQ7gCwUtzg45x/9aqsiOmxVBzuU5J7Z5/GqSAV5WaTaY5EHumaaI1MbuoB
DZyc/wCfarDsoQl/qPT/AD/jVSUCSKQRkfKpbAx160JBqPtZGeOInBJUHj6fX/OK
tFivJ5OOw/xqpDMNoVVI2KAc9T/9ardtKJgSo3EEqNwxz3puwbEkMfnAENtX1A5q
TZiMKBkg8gikjXaxwu3JyQo5PbmptygDf34Pr+dIm7Mti7X7LvAIjBIHQ88fypZC
yHgFSOpxwalksxLcTtCVWR4QsbN2Izg/SrkWnIjsHnkIY5Ch+APQZFPR7A3ylABQ
OAGJHoMih4doB6FjnA4rWFlArABSe2QeRStZxE/PuBz7UC9ojFmXajEFQGzk5Nan
hpiLe5Yg8OMnHXioLqyBDbZQARyHXP41c01TZaXOfIafYrN5UYG5+vAyQOfc/jW2
HX7xGVZr2bOVgjPlbUO7HAqz5ZUDcpyPypsQAUADO0ZJGBU+SwUIqtn1rNmqJUiQ
If3b7uwIAH51LHEyKQ6AAc4xTY0lUKGLAgYJHy5P0qdFVRhV6+/SpKDaSn3QP93g
frSgDI3N9Mg0xifvEk/pTSxUg847ZNNEsrTAHVQVbLeR7/3qlcbcEsR+dVt5/tUF
l4MBHX3qxweNxGOevaqZKZHhBdlnkGNijBHJ5b1qyvzJlSj577hURUncyKWyOuKc
mQAMfL09DSHqSOSjYXA/GgbihYDAz26VGrZBUn8fWnFuDtXHHBApDJFlXPzYGe+O
tTYQLgEEZ7Y4qgTvbaTtweCDU6yNvKggHPVqBltAFYEKD7n0pWKSAjact2HT6U1N
+35ZBn19KeG+YnOcepxSJHRx4XBJycnJp/Kqev59KbvYA4XJxx3pNxJxtx7daZI5
geOPlxTURiSWbIzwOmKRsnHOePWnBXVBuYKe4pABznnJ9hzUbIQmPmJzwFzUu0Lz
uzijdx2z9D0pgmfPvxBiEfjfUkxj51PJz1VTXNAjkGuv+J0fl+N7tix/epG3TtsA
/pXI/eIxxz1r0YfCjln8TL9po97fadd31tEZYrMr5wUEsoYMd3ToNpye2aoYA9R9
a9M+D0cUv9swTIskckcaujAEEHcCDntz0rD8f+DG8PX/ANrs1J0+5fKdP3bHJ2Yz
yMDg49vrKmuZxG4vl5jmNN1K50rUIr+0laKeFsow/r7HoR719A+GPEdp4n02O6gb
y5VGJrcuN0be49Dg4PevnUAgfXpWx4a8R3nhvU47y0bcgP72EuQso5GDjuMnB7Gl
Vp8yutx058ujPozexGQSw9GNNZtp5/TrVHSdXs9c02DULJi8MoyAVIIIOCD75H+F
XTKTIqgFwR15wP6Vw2OkeNpxhgMDoT1rG8YKB4U1PjObKXP/AHwa1Vdidx24HYZ/
nWP4tWR/C2rMWwBaS8KePuH/AOvTjuDPnYrnkdMc0qAGgjGT0zx1pBxxkfhXpHCf
QHwzI/4QTTxjr5n/AKG1dHF5YkLKG3ZYZfGfve3+elcz8NSR4G0/k8CQcf8AXRq6
WME3IAVASCcDjPP/ANevOn8TOuK0OM+Ll39n8IG3Qgi5nRGznoMt/NRXh+OByBjs
K9Y+NcjhNJj5CsZiQDxxs5/U15QRjjriuygrQMamrOq+GmW8d6ceTgS5x/1zarnx
T0RdN8TfbYUKxXyeYx42+YDhgMe20/U1c+D1iZtfurzblbeDYfZmPH6K1dv8RtDG
seE7llbbJZZuVJ77VOR+IJ/EColLlqopRvTPBlwzDJ/A0n8WRnmnKvPUfUUY/i9+
ldBib3grRJNc8T2sKKjRxMJpfMXKhFIzkdwTgfjXYfGG3dF0iRiGx5qlwuP7mAf1
/Wrvwl0SGPTLnWZ0cSzyGGM8gbBgkg9fvf8AoNaPxR02CfwhLdh332kiMuWJBBYJ
jB/3q55T/epG8Y/u2eJ578Y9PWur+G91PB4ztY4WC+ekiPkZBG0t0+qiuUIII6HP
5Vf0a/bTNZtL8E5gmVyFJBIzyOPUZFbSV4tGUdGmfR8Alx++dTjoVQrj8yaZcyrE
ybpYzk4G9gCSTgYyfUgfjTGtYrmIRz7ypIJPmNg4OcfTj8ale1jZ0YDaQMDnt/kV
5zO27vdkaxyI2BIuMk4wTjv69KVBkkN82PXjpQ6w44y2eQM8f/qquqiRsL8gznAJ
A/nzSYWfRCyoEvECx4Uxuc+nK+tATAGG2gnucg59/wAanKRqmSWkYZzljUUvluCc
DHscfyqb3LQiDJD5zjjO3j8uabvC3DJnPyDp2GTUfT5VyMZGAevNKrq2ZDjOOT1P
fHNOwFlI8I4yevUGlYzH7hXI7svH86hQIHztJz2qRuBuZdxBJ5HSkDQ9txHQbec1
XZfMUMCQR755qRV5O4AoTkdiBjvzzz3+npTXWJV4AwBgd+aAGAEHc4z7HqKjkVFQ
kHgDPDY4/wD11KURidnOfanrAhJDIjfVefrQwKYkKyQsR+7Zc5A68f4/Wrm9UyeR
+lKsSHDCNcISAcdOBSzZQYBJJPIzn/P/ANem9QBJmcc9O5PcU6SQDoOncGo42GG2
JkjjpjNJI7EjdwT7/wAqQtx8U+68IZfm8vt+PvVrODw2D2y1Zcckp1FmGAPLXAPO
OTmrwkU4Vj1PNMViQu2Bht23A5bmk+1lWALA4GMdKHRTwMY/Kqkwx83TaOcDrSsF
kyy18inLnaRxux0/H/61W9GniuYpjG4cA4yDnuwrCmTdFyjEHsMAf5/xrV8PIotZ
VKIAAPlAAI5PXFdGHX7xGNa3I7HOq5YqOAMY9e1TGUIwOBux1JqCBVESsAAD0GTk
0u47gVPB9qixoi4s2CNpDevPSrAkbHQADsKqQsCoOMgjr61Mu0cADkdqmw7khkds
BiPeldmYDkcDgAdaQAswBAOD1PpQ+1SuWyQM8VSJZRJK6kPXyuST71YLMeBz6YHS
oTl9VHyE/uT35+8KtNFz6expiREAwcZ4981KvyAYHXv61E+F52/jT0JPIBANSNEh
IOR/F645pcODgjdjtmo1MoO5iR6cdakyDlg2cd6RQjIMg5Ck9BmrEbKAADn156VE
FbOS3y5xgipRtXaEYD160gJgylfnAOafujHGRnvimBcnHDfhTido2j04GKAF8xBx
kjHuacpLD75GeeST/OogrZBJPPTIp/ykjgZx1oE0PyehYlvTpTsn24/OoyMkcD3+
tPBDDGcH0A7/AFoEATJByVx3xTyjMM5wB070DIwSu3celK2TjOPWmiG2eIfF1Cni
6M4yTaISf+BMP6Vwpfknoa9E+LlncT+KrZ4raWRWtFUFUJBO9+K49PDGuyAFdFv2
z0xbPj+VehTT5Ec02uZo7H4OykazqEIJG+3DfkwH9a9Q1TT4dSsJrSeISxzJtdSP
X+WK87+F2gavpmvXE99p81tEbUoGlXHzblIH5A16nuLAcn6CuWtpM6KbvA+cPEvh
278Naq1ld8jG6KTGA6+orJI2nIOcj0r6H8XeFrbxTpX2clUuIjmCfaf3ZOM8ZHUD
H615GPhn4sYnbpYb/t5i/wDiq6IVYyWpjKDTK/g3xdc+F9SLKC9pMQJ4gBk4zggn
uMn6/qPebS8iv7aK7tZBPBIm5HzkEGvEF+GXi/P/ACC+n/TxF/8AFV3Pw90fxZoM
j2Gp2W3T3y6sbhCY25zgKTnPHGR6+ucq0Yv3os0pya0kd9naQ2cduax/Frn/AIRP
VckZ+xTDPc/Ka29oGUB4/SsvxFZTXvh7UbW3XzJZbWSNBwNzFTgc9Oa547mu6Pmx
n6rnFAHA6eldT/wrPxcWH/EpBP8A18Rf/FU5fhn4wHXSP/JiL/4qvQ54dzk5ZHqH
w1z/AMILp3TGJCTn/po1dJb7fOYqWJywyVx/F05646fhWN4I0u70fwpaWV8nlXEQ
feoYNjLEjkcHrWzCwM3lqoUANjDZ/i57VwTd5M6lpFXPJvjJdvJr9laZVlhtt4x6
sxB/RRXnJHI55PrXp/jfwL4j1rxZdX1jZ+dbSBPLfzkUnCKDwT6g1gxfCvxNLIYj
DBG4ALB5hxn6ZrtpuKgtV95zVL3vY6P4KgY1diR/yxHPfG+vUmjDbhtyDnIrl/h9
4Vu/C2kTW16YTcTzFz5ZLfLgADnHv+ddYw/+v61yVWnNtG8HaKPm7xZo76H4lvrI
w+VGJC0C56xk5Xnvxx9RWZa20t3dRW8KB5JXCKAw5YnAFe3+OvAD+Lbm2vbS5jgu
YE8t/NztZOSOnQgk9u/tWT4e+Es2k67a6hf38M6W7iRYo1YZYfdOc9jg/hXSqq5b
3MGvesdxounrpOjWdim0m3hWMsBgMwHJ/E5NVfF2m/2n4T1K1A3SPCWRR1LL8wA/
ECtnbtIDZyf0pzHI2gDBFcab5rnV0sj5ZOR3P50J9Olelv8ABm480r/bcOw9D5By
fwz/AFqdfgocZfXuOv8Ax6f/AGddzqw7nIoyfQ9C0S+TVNJtL0KAbiFZNuc4JHIz
WgFDZGRx+FZXhjRz4f0S20sXHnm33AybNu7cxbpk9M+tao4OflzjBzXA0k9Ds1K8
8anILevQY4qFY8E4BHdcDjFXG4clgMHimOoH+rJUY9O1TYpMhfOPlVSAckdeaZIA
hDFgWPOKkJwvzNg9M9j+FRtwvysPcmkURFeQCCQffANIAVfa2eOACOajLsGzk5Pt
178elSljglkIyMYz1/GgojKhBwcjqBnHFTmTKfKuDVcK33gpbGD6EUjEBRuYEdea
BXLDybjsJPbmkOSQVHT25/KmZVlBJJAP8P8An3pxYFVzkjryaewD40aONBL8zgDJ
Hr+dKsm1jHJzn2qIf6tipIqNH2j5hjnkA0AXCEVDtwR6VGXJfJbfnoCMdvemhmcL
jjsCOKarEqBjd6E9velYCTcqgZLE9uDUbZL5+bJ49u9OdmOSOODn/wDVTQVBIMfT
kgmmIq5KXfTDbBjnpV5NygLx681RibbfuoXpGmTuHOS1XlLLjJ44GPWhgiwpJG0k
5FMJUdOfm9etN87BIxk+9NLEsQ2E9zzQBBeSARlcbQeScD/PetPw4w+xMw7jvz3a
sWfZ5n8RBwFQseB2rY0NWFjcBSQRwBjGOtdND40YVn7jOdhUpCF3njOPlpyoCRxt
OM8ClgIaI5znPfr+NWhhsEdqyZaI1Hy7QCM+1K86wMoZG+Y/KACc4+lSbTnjGR1z
1pswD3tv1BCuR6dqRQz7VBuOS5P/AFzb/Cla8gGOXH/bJv8ACrZyRuGOvvmo2wcH
GD6CnoRZlKGTztQVlVgvlY+ZSP4hV75TwQQfrimomR93r7Yp4G3BPHbGKLjE8oDJ
bJ/CnBF4wBn1zTSdzYVjn3FKQ4wAy496kYbAvTOT70q7CSAPpycU0rKWABBHtxUs
Zc/LtOM+vSgY5IzxnGD6c1OOPcdzUS5YLj/CpfmUDp2IFIALHGQOtRMWbB9fenSb
geB0/nTSkjtgOig9MDOfrzQMem7djnA/DmnFM9eR6Bqo20Ucs9wt1CJXjkwr+WcY
2r06/wA6nEdqv3bds55/cn/Cm7ITuWkUdwalJRR8ozj1rPsxc+RC2+MqyA42n0+v
9KtqrkAsQ2TzjtS23J31ZNH0+6Tj9aRVU446dsdaQ7nTg7sjinKwBII+b2oJEZSV
OAOtIxESbmKhRzluKfnjnPH4VTv5CtrJgE5RgQuPz6896Y0PF7aO/NzCxXrtccU8
3Fu7BIp1LHoAwJ6U21E4Q+fIrktkYXHHpUOpSOv2fYpbdOAcHHGDnnPWjfRB1Le3
HP8AM00grmQIu898801WKADec98+tODZXaMH60kOwCQ78ZI55DVIrAOcuCR6ioW6
g7sDPPFLtVeFx17U7A0SIGHIIYH1oclFycdMdKTcf4AdvTkmmsZMBsDr60mxW1I9
+zBb5SQD1PNWAcrnr6HFMAdkwI8HuGbGfrSqJM7RGhAHqf50rjeojByCR06Diqas
FuVluFZCu5Rxn+L2HoBVxhO0ZXA49D/XFASQbiFUk9Mvx/KmmLXoQz3OYHFusgcf
dBhYg/jj0qDTpZp3leaN0JCjcUK54Oev5VebzmXHlpkH++T/AEpB5yj7iZPX5sU7
rewrbO4rsEI+Xk04fMvHU96hw7ZM0aDA/gfd/QVIoYL8uce9SU0ScdznHAxSNknc
OKjzuYc8ipDyRuI/D1p3JtYZ5W5vl49fUiqz2ayTzSOWLEhcB2H8I9DVlCzN8w6H
jFEH+vuB28wEgn/ZWhA2yGO2hA+VAp6H5jk0C0hQcKRnsXb/ABqwcBidx3dsVC/m
l854JGc/y/lR6DvfToKlrDGCCmMdycn86hezg3lwgJ/vEmreGByT04zTGy55fkev
NAJlcWdu3WKMsvILDOKDZ24cvsDNnjOcCrKAkYDbh7UbcE9OepFFxtlJrO1kYGSB
GPbKg0GytmyFhXJ4Py9KtFRnPJ985pr8gEqcjnJ4ovZWRT10ZnS6fbyMd0MTIOzI
DQllAoCmKMDPQKKskZckcZHJxz/n/wCtQ0LkAiTbkdWGT+H60tdivUota2qsS9vE
VPUbcf0pqQWrqFEcageiirT2NwsYIMcnJyImyevHGAfyqoySB9rqykHlSP6VQrp6
jVsbUOCsCBh6qKk+zwKFDJHz0wgpy5OS+4j39felYqF4wCT17Um2G5E8Fso3CKMO
DwwjGaT7DaOQ5hQv1OVyMf0qRfLQEPiTJzkNT9sZxlgoPand9x7FaYQxz2zIqBvM
IPGP4Wqz5mOB8hPGTnBqCcoGiUjPz9x/smlZ0EgCy85xt469hzRuJeSHlickNnvj
pTTKyQvyCHA681LFGNx3EEH9KmjgMWc468gfWgCgjuL8oUHMYbr05Pb8avGQnAHA
HFRLCP7Tf93kpEuO3Un/AAq0T8+0A5PUkmk2lsO1tyIM2QrLkD06/WrVvBFkyyyb
0PABHGfeqyKOSG79xzUhATIUkkdSe59qLiavoTSjYN0cK4HJIYD8asaJwt0m7JyC
RnoSDWc0kiZVo32565/zxWnosyyx3AVWVVxyw+tb0P4iMaytTZzq+WseVwS3JBpw
l2AHHbkVBHG0cZQFWHqpzTjuAAbC5FZvctbFhJWk5ODn0GKZJn7bBhsDa/Q89qcq
gKOCPcVFKHF5AQFHD9/pSQyy8mCcHAPXNJlgByPbmmNkmkzlh97joAaYidSCONx+
vajcwPFRFzwCGOewpRtD4dmJ64THH40APBYnJHHY02XeY2ETMrnuOo5/GjcxOQm0
Dpls0qK+8EZP0FIZKuGfaoI7kmpRw3Jy3XkcU0SN/dHvx/WpPLVTuI5HXn+dSO44
Bhnnr7YFPO7ABAPHrTQxxwD69OKeCOjd+lAxu3gknjFQkRM4jZiGH8KyEd/QGrGz
1yKciJnOMgcZoTE9SrF5iPMsSKVDY5Y5ztHsae5usfLGhPXlyP6U5rSEStI00sYI
zhZCo/KmB4ZTtWa4cY4O046ccgUWQk+wy3iRrSAZYDYOAxHargQYwOPrUKyQxqEU
OFHALRnj8cYqdFBG4kkE9uhp67MLq10OQ4Bx1GeOlOXPbk/gKRQNpYduRnmlRVXn
HJ9hQQB3EegJqpeMi7wUJIiYnA4wMdf8+tXGAOc96gujtgcuoK+WxJxn070WuCJA
QMDPI5qpfKgNsGLH9+vTsecfrVsjb249jVa9YI0HBbdMoHHTr/hQO9tSZTHtX5jj
HBxS/LnH8WOKVQxRd+0Aj5ht4pAhI5Yc9uaLDFCKSQST6nPNJtLNkgH1DU3yH3Kw
upti/wAPykfjxmpJLZ2GUlkQEdtv+FIL26iBXKvxjt+lSKCuBtfjkfWkhDKD85Y9
yQAaU5BwegOeTTJfYepC8ccHgUu4gDjB/nUSMDk55zyM04beOnPc0MloceSSSRz7
0mVJOOvoKTkN3cY9aUKoOefp60ANBx0bA9CeKHB2/I2M9+lOIQcc9OemKb8rEBc4
9ulIZCoVW+Z8kCphIXUAOSDVe4tjJJwzoAP4SOaiW1ZcD7VPnrzswP8Ax3NBdk1c
uoMZPf8AWgox5/Umo4lIGDK7nPVsD+VSpgKeoFBHmNZducufoSagiA8+cjnLA8eu
0CrDtkdOp7AVWgLefOApA8wfN0/hFCKTZOPm25xnvimLznAP+1ikHmrLIS6uhxsV
UIKjHIJzzz9KkY8ZzyOtAB84bBwT60rKrfdxx2NR5AfHQ+3epFXJGcEfSgHoP2jG
QB6gZ/z61EZEDkY59e1OkdcYBGOgOeKhY5B5THr/APXovYIruP3FmyAOmc5pHOee
3pmoy/JJIx6jvRu8zGc/QGkVYZI6gjIxuOP/AK9MaVWJAyT160M2TgHIz071EFAO
GbmkWP8AMxjlh16Usk7y4yAwXoX5A+lNVeODjI7daFfbgYJHv0pjsQygMp6Z6fKM
YH9KgaMNuIOSDgZ9fWrTSFlzuAz3zUcmW4Ksx78UxMjI2kY2knBOR0ozsYHKAg8f
59KbMJEOY4xxx8zU1I5GXc52gH6U0IbLMTNbeYw+eQ9T0+U8082jEBlYj5gwIxk8
5x6e1ByJYY2QMofIIXkfK2Oe/SrkRLSYMfGAQx6HNDbDRjYVBYKQWA6VaXDd2x3J
NRBlRmAUAnPSp4xlOTyaQyFVX7Yy4B/djBGPU1KyKSMgH3pu8PfMi9RFzj3PX9Ks
LGcgHjnrmi1ib23ICBgjGOOw5prJhyQASec8cVbMYJIHf8OfpUDqDuyByTnJ5696
LAmmVZFkUE4z3461c0KQLa3TD7wOSCeeM4qtMSqkDByMDrVvRbdxHcmTo68Dtjmt
6H8RGda3IzBQKY2GQMn+HihgDt/pTIG3QHjA6cc08sBgAHB+nNZvcqOxID8pGahm
c/a4BkfdfoPpTtzFMj5R271BKcXtvljyH6/hQgLJJ6FuM07IBHOc9SBUYYMVGd3u
ac/TkcCgB+9FHLoB3GcZoEiL0zz2HSoUywIOD9e9NO5CM5xnnHagCyG3PkcDOMVO
jMOAi4PGarxqchu3rVmPcx54X1zSYyZAWOWAPqM5qTYOqlufbimqcZwQM+1JvBYA
Nj1yaQyZV6kLnFHzEbhxk/lSIxOevrxUnzbuDnn1oAAOzsc+/enBBjcCQOvFOAOC
cZx1J6UZOCCePypJEtlO/XzrOZGXgowJwCRwecGo9I09bOxjw7lnVS4Y8ZxzjirN
2pNu+cAEEZPfipbdW+zREgN8g9qrmdrCuiG+2/ZvmTcN68cc/MPwp1oMR5Rnxvf7
3XO4/p6e1JfbvswABY707Zz8wz+lSQ79oLLtOSRxjPPWlfoFluTRqp4I5PY0/Yow
NqqentTA+4/ToMU4nAHHegh3EVVUE9unXP4VXu1yjLlMMjZXPJ6f5/GrHAHJAyel
VL8jYxRRny2JfPQcZH8qdr6B5k5Uk53H6ZqtfRgm334U+euCce/86tgliOe1VtQd
FWDcOTMoX2PahK5XNYsAFUGCp9eM04Meu3j2pImxGuBt4HfNOzjoO9IQ4OBxjp1p
WYgfxAio/n6cjPemxSeZCjsQN4Hvigmw5iVJ4VfrnmmMxIG7rj+HNO+RdzADpywq
EiS5GUmeNVJHAGWx9c8dRTLVh+VXAUH6kUoIXnJz34pihkl8mVm3bSwJHUZ/nyP6
VIyyg5CIR1G5zz+lKzBtDw4zn8+OlJ5ijPB68nBquHgjhVri4VHYDdmbAz3x+NRz
+Tb2kstvO+/YxQmQtk9sAnFGttx8qLe8BcsWIHUYpQyD5uT9Fz/Ko0M74V4ohk8l
ZCcfoKsYAGABnHp92h3IbS0Ij8xLLkDtximqpPXB+tTMRu4+am5AHXHSgaZFCxZC
eMhmXAHXBxUiZJwSR1OM1Xs23xMQcASyDBz13mrIHB4yetDVmHqIVLfMcDt6VXig
YS3G4nHmA8HttWrJY7MY/Cq9sh82cnqZBge21aLDTaRIIih/1nU5BPOarPujDzTX
DINx+XChVGcDqM1c+6rFiuB+GKpON9zDGwJQmR8HjLBhgfqfy9qEug4sI45ZVMqv
cqo6KVUdO+CM1JCu4eYl1K23gowA2/XjNLHIXtSxmC7sYfHC89Pr25pImbfGGKsz
RtuZV2h8EAH9T+dCt0BvqMvvMMOI5CrllGce49faqcgEbohuJWkboi7Scep46e9a
kypjBIGWHY+tUZ5GjikkJiR/O25YgHaBwATxnHPPqaSKT0IvJYoG+0zBSR8yLGeP
U5H8qsLGfMRftDuGQnLbeeR6D3piI7SpIs58to920bSD056f1pkEzGd1+8oaQBmJ
ycbf5EkfhRa+/QqzexLcRvM2Fm8nA6gLz+YqoBl9q3Ezr/z1wuDx24/pU13IyRyF
MqQnUc4qlOl3Jf7LaURQqF3AqGAz04PuP1oauhbEwjYllF5c89yEGfpgVLESq5Ls
20nl+/PtUIM32WYm43lVDRkbcbsnGMY/EH+tWlABIJ53daGUtfeGXEhRATEdxB2h
R1OCcfpUImddpMRUM2ASfU89P89addmdr2CKM/IUYu2T8vTBxkZ9PxqCeJ1WFGke
MnnBY+oyMj8qLLTUWpoi3AGQucDOeaeEDL8igkDj2rHs7mWCBjNcvhFBZyS3cj1+
n5VsBgwB3bifXilpuhtNMgm2efArA58wgf8AfLf/AF6kcBQwHyY6kii4VRLCMAYk
JGcnHytTCZWQEhFbHzDPA/HvQhJ3GjkD5uc8LmpVbDHAJ5x06VBG8UcrEyO245cl
unYcfh/OpiTwVGV9qeg9eoxCP7QYg/ejAPvyf8avKTnPT1J71mF0GolWYL+6xj3P
T+Rq55oPRCxUfpj1NFidyy77hkMM+oNRvljhDg98d6hMmTgZA5x71JED/ePJzQFr
EEg3ZGCB2z0q3owaOC63kYyDx9KjcMAXIOD+FTaVCFS7OPv4759f/r1tQ/iIzq/w
2YRgWPKgAfjUfkqCDmiN2k+Zc49c1IVwATk49Disyhqq24EN07AYqOVH+2QAY3FX
7DParEWQQGRQcdc1HMm7ULYLnOH5zjtTQD5IiuTj/gXam4Ld8fjUkkZViSuQO9Lk
kgKPxoArklW/ugDg1IUSUZcZx36ZpHhVpRHuJzzk8VKqopA3D06UhgijJwvWpYsk
n5Tx1zQCQO3+FPGVXAwM9KAQucnoAmenr/nipkcOQqKSpHrUaR87iOPrUiJ5S4U5
B6sR0pDJg+BjaAfepAqjvk9aYgK8cYPcdaeSp6+vFBLFO4jBPQUAbl5f39aRQSTt
/OpVhZhwRk0EtpFO/R5bKUIwDFTtO4jBweeKls0cWMG/AYRrn2OKW+jnNq3lgBlB
z2yuDnsf896nhjZreMtwSoOO+cVV+gnbluV9QXNuMfeLL3x3HpTbQsbdWbglmGCW
4wTxyAf0qTUFZLP5epdMYbb/ABDvg/yp8K/uVXGSC27JzzmjZWBWtcfHEdwO4YPS
pdu3GRtJ61HExYds+x4zTYAu0lf77Zz0PzGhEO5Izd88Djgdar3KJPC6zZVChU47
A9ascNwcdeOap37COBweAVYY3AduPr3pPyHHQiLI+3ZfkY7fIc/pSBbeeeJWulkd
H3pGSuSQDz0z60tr9qSWUXUqOjSfugBjaO2TS3rbfJO8jEwxg47HP6UP3TXbdlkf
NxtxTx6AE47VDHuaFDIRuKjJHr/+unS5DJhsDdyB34PFImxISMEgE4qGzZWs7dlw
AY1449Kb9nilu3EqK4Ea4D4OOW7fgPyqU2tusisIYwdx+ZVGRxVE3ViZY95PoKQq
8IZVQuvJwvbvj/PrUm7BwMbQOmKYxLcjjPak9iE2Qx5c+ZJHsOMBSc7R78df8KRk
Ytnz5VAHQKuP5ZpgkkFtG8hw52ZJ55JA/rU5ZdwUMDxyKfoabMpy+bIixeTKMEHc
CmDg5zjPt6VWS1uoxcY3s0wA3PtwuPXnP5Vq8gk8Dng45qhFve7YTpvA3YyowPmP
58banbUtPr2L8ayKv+tdsjnOKcWUjPftg00Qxc/IoHQ/JVW1QrqF3GABCShRVXjO
3n9cVWltzJLexcBJwAuSf0qJUaTGbh0HXA2/4VIV2nJ6UwM20D3+gxUp2C10Njtd
vAd1TJORjrnJpYUkXzBI5dQw2kgDAwOOB65qVHPXP/1qhhkHmz/vN37wDIP+ytMb
ciZgOnJHv2qvAcSzkjC7wR/3yKsgA5B/xqCE5luBnIDjn/gIpagmPOMDawOPWq0c
DNDgyYPmOcsobHJ7fjV3Gz3BqtNdWsb4eeKM54DMAT+dG+g43ewK8oYoYA2O4l45
+tOIwrmRhk44B4HtTWkt9mWeMDoCSMD8aY93a/JiaElzgfOPm9h+lJDs76iXUamD
5cA+YhJ/4EM0smCxYSjAX7vY0szIsR8zCr3BHB+p/OoFubdwziWHaOMh1wP1o12K
tpd7A7s6dRGMfezuPboPp/8AqNIMLNGiYOUJ9eAR+vNS+baryJIunJ3dacl1bzS7
I545GA+6hzj/ADkUkrj6aFWdxAXeRlUY9M5qi086zN9mkafAHDKcKAfmwR1OCPy4
zg1oXN3DFMqOURXBO4sTyCOAPfJ5plvc2rOy/alZs52r9PTPvTXcbvbsJHKQv7+d
I1X7yB+M+5P4dqbDKLnDKD5eWwyOCG5p7XdjaEqZdvmHJ5Zuf6VK3kXEYGfMQ9sc
ZH/1xRbTUp7XsVn2TKP3O5gARvXGM/WljtbVjv8As8RkB+8UGR+NVnvIrWULNchi
QMgJtGR1x+NWPt0K8hs8dACf6U1fdB0J/ICglVVSQPugCpFwpBIHH481SF9CShd2
UyYChlIOT9etWVlx94AEc4pO4tNhtxIFlgyoGZDjnr8rVJHIoKjPX72RVS5fzJbZ
/uFZDjkHPyn/ABqwXdi2XCH39P8AOaB6WHZUo0rJ8yjgDNNSOXI3SB/U9MU8OQNo
XIGeAetSI24dsnvSEU0iAvyz7CfLH8z/AI1ZKIo4IDnOOP8APekwBqAPy/6o5/Pj
+tTugDbsDPXjvVCuQrGNmTjJ7mpoyoPTk9zSER5IVRg8ZzTyEAJJG0DmgTFdhtzy
vGBjFP0zPlXGOAAMYx7/AOFV2lTDHceBweKs6SyvHOVOeBn9a2ofxEZVf4bObR0m
j3oSc575qRtpA3c479qqfLGxSP7oH5HHNOzgKGJye3Ws2aJluM7U2quR3qKT/j+g
2jHD5JOPSno3GNuPqKjmz9tt+OcP0+goQy4xdVII3CmgnA+Uj2pBkjOD75pSOANx
HtSATgvnnPbjpToxgkr1NMO5WwGGD271JkbvvfgDQArMF4bj9aUkgcdPXNOjX+91
xmn7QMck/QUhoWMDd8zZ/rU4AJDdQBwc9KjCBm3HI9xUipjaRkY46UtwJDkkArwe
5P8An0o8vC8jntzTRzlsDP61JtIYhQQOpHagl6DgSfu8egFSlNqlSOCKjVk28sPb
B4p249Tyx9TTM2QXcZWxlKAlxGdoUdTg4GKks2DWcDnAJiUkY5HAptyDPGY96KT/
AHk3djyOevvTYpxHGkZkgLqAuN/oKq+mw+VtX6k1yv7gbOzLz143CmpHI0QMqAHc
2MgdMnB/LFRXJeeMRLJEjFl5Zs9CDjHf06irUaiNQOPU44+v60XVibNEYa4DbRHG
VHQ7uT+G3+tJidQAyrySchiff0qQNkEg4x705mP8XX0ouuwupEgZ0VjzkZxnoara
hvltXhBwXjZeVzkdD3HtU9oGWyhDkM4RQc+uKjvI0aOTMeSI2wwHT8aW2xadnqWv
JRgGwv1rP1ZWZYFBAYTqVOM8jPbI/nV8KDggH24qC9RP3OVDESjHGfWhu2qJi0nq
KZNuzHTFRiBZJmZixOeACRjjtziljLmONnCK2BkAEbTT4po3nmRmUeWQCPwBot3L
u1sRWhlJBlPzeTHuP+1zmrj4yvPOarWwzIwLMR5KYGeP4uasBsMCR36Uash7kVwi
pDJMztlFJBVyB09jRdEMIQSQDJ83vwabcvCbeZHcfdIKlsE8UXRw9s+7aqyZfJ/2
W/riiyGk7oiaCN7loS0hVUQ/LIwGcn0PtViBWMRBJ4Yjn2JqLzUN6670AESnr15N
OtgEiOMsGdmB69WJpLYpttE0i5QhTznsKqWm0zyRblLDJLYPPJ9qtkgAnBz6Gqdk
Cl3Kc5VuQCc4+ZvancSvZl3g47AdvWqqbhqU3ClTt57rgH2q0JEI5wfoOlZtuk51
u8cykQ4TbGR1O39Kat3Eot3NJwc53tx3xUIVjx2+tWDg5ySSPSo0i3rkYxnuakSd
kHCL3/lVVSUN3JtAAfdn/gAq0Il3bjk474xVPAl1KW2kGY/mJAYjOFjHb/eNOKbK
TLbFSMnoD781HAGEtxkdHGDn/ZFSwx5MiqCdj/xMT2B/rSw/I8+CAQ4HI/2RRYnm
VtB2zaNu7r1zVOKUhcEAu0jhQT6Men4CrhkIbAwSevFU1YBo5GAADOvpgluP5Y+p
FLyQ1tdjzbzEBvtjL6qFXH6804F/mjcHK4w2Pve/55qGCCSBTtZJGPOOVGecnv6/
pSQs4KAhGeNCHCDoSQcD24/lSbuXbXRi3iKIVKAEiaPOD/tD+lEn7wtFDJ5QUgM/
DHPXAB/Dn3qWYoFAI/iXnr3FUQgeRUDIZIpjJgP1BBGcde+Pwp3sEdS1IXXaY5d7
YxhwPn/w7f4UwFZZEcgg4JxnnqMjj0qB7eVJ1nMqhUA4btyScH6E9uwqS3wHCsN2
/e4I9Mj/ABFNodrC3ENpEkzSxhUCZcgZ4GT2/E1HFKpfYcGWXBaIMpEfGcn16fy+
tS3cXmxsFzuwCAehwc4/SokgjldpvMEmW6qcKcDuPrn1xUj6FOC9lS7MYc3EDOwE
oAHlnOAvvzxn9eatxEsgDZDDJYsMc0ySOVoxBI0e5wFwqk5X+L6cfrjrU5PyFtp3
buDj37/z/OhlGV85dUjhy+6QhtwGMOQD17ccY5z9au7pCu15vnAx2x7HGKazpC4L
soVnZcuMZJbgfrjnuRTjbp9oL/NhgM/MeuT7+/TpRvqFlayQwSje0Uq5eMBj1+Yd
j6dQfyp+1iA3lhSBz3phVXk3I2QgK56nORkZ/AUsuxMRlsOOgxnGT+tGjGrkMgdp
4CUBRXOfX7re1XAg5bbgdOOtVQQWi3uhw54Q88KRjHar0bPKCSvyj1XP40O4gRtz
FMbfQgDmnRrtUKEGMdRxmnokb42gcj9KcoC5Ctn8eKExNkKKsd84CHBjXjj1Oasv
Lkk8kZ9agUj7V1wxi5BPvRIFJUtnCHdwSBnHf86ZO5LGBuHBxjp0pZDGFO4En36A
0ZjJG49x2qJ2BblSAeAc0gtdlaRUwSF3HuQetaOif6mZSOw757tVYxEkllyM4AI7
Va0oCNbn+8MADPbkj+db0H+8RFZ+4zm4Y/kO/G7Jzigxtnkg/wAqkt3YnCg855Yc
1IEJxuxkjNYs1SCNAVyxPtio5Q32uELhRhv6VbVcIVHLDioXwLyDIJJV8Dv2oTCw
4rJt5JJ/KlU5GDgn0NSHOBjB9AKbhiTlccfWmAxcBuo6cHGcU/aMDBJ55FPSNQAQ
eRTgpbGfTjApAJyHAA5xg45xTm3A4HXsRxTtiqQSMnGaRhyMHAH4UrjHAso6c571
JvJXtkH86jRy/Vz7Dd0qcYVTnaTjnFAgi3knPAH3cVOAw6gkk+vBqOJhuOVzjoB0
qwNwyQcc9+tBlJ6jCjHndjFGCSR0GPwpWAYkZORxSEkEHnk8c0xAVODjr6YqpbRK
IkL6diXADHanJ71K12kT4KyuScZWJiPzApA9zJCjiRFLAH7hI/nVJtD5X1E2D7sV
r5bZHOE6Zz2PpVj95xhiAD0wMVXmlltoxJIyuoYAhYznkgccn1qVJlYrgPz0yp4/
PpSa6it2Wg7MmTx35IHFPydox1x19aYAys2GJGRwTUhDEdeOaBMjhDCFB1IX6dqg
1BWNvKFIJaJwFPfipbbP2eMEfwDP5VBfCQurIWG2N9x3cY49jn8xQ9Co35rlwN6A
5PpVW+jLi32tgrOpGTj144q3nn7x5HAqlfBytvhTnzxnBx2Pf60XtqKKuy6se5Qe
d3sajktIQ6u0asc8kp1471LC6mJWGQu0dalyBhTgHHc0zNtlMwTLKzwleVAwR6En
+tJBHcypDJI8YTbuIEZBOR659/SrXmZmCbSSRkFVOBTbKPbYwR78lUUZHfijyHzO
1xjW8X2pXeNS20/MUyRgipNm4EfP9CDU2AMAD8aGHAxj8etMnmbMt9PSa1g8y3Xz
P3ZOVGRggkf596sGMoAqcKOMDgflVg8KPmz7juabtzyQSfU0nctTdkmR7SQc4LfX
rVW12rdyjO5jz2GOT/8AWq8VPpj1NU7Tc13LuVwFyMlMA/M3v6/TpS0sNNtMtYGM
HacdeaqRlY9SkDEZYLtBPselW5GWJWZ2ATru7VnWdx5+p3SxMWjwh3Y4Hynoc/07
U0r/ACBX7Gp17gcd6aFDKMc5HH0pyKw4zj2pVztA3HP04pEXFVcZ5/AmqUQU377h
gBmAbP8AspxV1mO3qc+oFUpohcwXkTIrsSQAy552ih26ji9depNGyCSYhiSZPXOP
lAqOKRvPuBnG2QZ9/lWpI4o4FxCgQddqKAKhiGZpzjG5gT7/ACihvUpW1HsSMEHr
2GT/ACqsoJDxS2u9Cx+Y7djgnI71c8odG59qrhpJYyURCqkqMuQeDj09qW2pa8iF
I3J4kuEQH7m9Tn8eT+tTqxLBVgZF7kkc/kaqpcyDf58dtGF/6bfz4FWQ82OI0xnk
iQnA/Km/NA007Dp1LqAgGdynLdhuGf0zUU1ut38jxOmP+WiMAcfUHNTzSGJMnkkg
AMSOSaY0txGM+XbBfUyn8P4aLi16EQtPJO13llAGCXYEfljmjy8zpJgfKpXOfUj/
AAodppG2sIAWGVxISfywKkUSCQLIi8rkYz2//XUvcpPS47yyWz2I/vVDNaROd2Wi
fk7ozt9Pz/GpnaTdiMK2BzuYj+hqKSe5U7US3aUc7BKQf5GnqCbHKgiXCrz03OST
+ZqOIkj94rLkng8jqaTzLtidqw5XsWJAP5U6HzjDiZ4xJuOfLzjrxU2ZSWhV+yBG
kBjB84sTgcNn+8cdccfp6UiwAEu8jsxHKmVtvXrip2kuWQlVjRAzD5sngZH9Kp7r
pQZJGgVRhwV3AYHq1Gv9WKSVtehKkalFCYC5zgsRx+VLIqycImcHAOM4/rTD9reM
OJINjcjaCTj1B6VOFcEkhcKPXmnZorToUnkSKaJGPCyFiScfwn+WQM1qI5aPAzj0
IzVaeASvb/eGHOcdeVb+uPyFXFXoF6k9+MUbkPQQYfB8sqehLUgyTjAGeBxUmwIo
G7cW545JoVFPzHJJ9O4oJTIo43a8kdShBiUe5IJ/xqcW7bOcE9wBTFljW7yqnlOh
OT1q2hJ+bOPpT6akSk10K7QZYZAxjBG3rQFGMDAGOwzg1NKS2Dg896bgkHK8EcEC
gSk7akbk8hcmjS9qm6bjOQTj8aG3DknPGeBTtLIZrpTkdOM9OtbUP4iFU/hsxIRH
FCMbee+MmnBxgYHbsKrIm07VcEVInIG4sPwrJmyJ0fnkDj0qGXm+g+b+F+g+napo
iAckktUVwym8twVzhX5/AUkMmLjIICj8Kd1wS3HU45pjsFTBzx0FQvMc4B6fzoGW
hjHySD39BUq8qcdcc5qkr8k5B7/KPzqwrEY+Ygnpx3pMCcBjgMKTICkbNoXtimbD
8pL8D2H5VLgbc9QaACNBn7ygnqcU6TGeSuAOQKb86jgHk9AKkWNdm3oR/nNAr6jk
BK5C85/yanB4AYtkDvTF+UFdpPbvTt2AOuPU8U0ZPUCd53c+wPeo3BZiB29aJ5Cs
UjAkEIcHj0qo5mWO3ZHK75F3k45GORTHFExNyMqUTg8fOeR9MVXtfsrwRv5/zbRx
55xnHpmrJZDnEwJB7HpWNfCRrS22SpAIk4Zn56DpTi1exTTe25pzqkgBifed6kDz
SRkMOtTL9pWTDpGEPXa+T/KqMd281ojrHvjLqDKJATw3XGBV5ZY2bG9S2OgbJpPQ
Ent2Am68w7VjC8YyxB/LH1o8y7fBWOIqCQfnI/oakXPbAHYelJb8IQx6O316mhJX
uSLDlY0Qgb8c4ouf+PaUsuWCNjHHbpnnFB83eQkKtzwS/X9KSX7T5br5UQUjJAkJ
J/SgnS5H5dy0Z/eHPqHH6fLUKw3eRuk84qchXkAA/JBWiRhiBjHp0poAB54P1pJF
c2g2PzRGvyRKemA34elOQ3bD5o4T9ZD/AIU4YU46CpRjbgjH60zOT8hg+0Hl0jHX
o5P9KFa7D7fJhCAdpCT+W2ngg9McdeM0ZHoMgdDTI9UETyMSJQikDJCtnH6CnHvz
ntVffIsjKiD7gOCxGeT7GgSXeARBFnPeY9P++aLCtpcm56jp6U38SPoaFaVlzIir
/utkfyo2Erj1PTPT6UigKjnP1B9az5neKdXtrNmUlg8h247++eua0dm8YYD0rOAd
y8CGKVVYna6FcAk4Geh5zyMdKa7jV2Rm6nuVkijjjl2gFiIwwP8A4+Kt21osGXXY
rvjJQFR044yao2umXVrcTTW5hVZQpIbccYB/LvVy0uM3EtvJbeXImMFVLKwxnOcf
hTstl0LtK2mpbAwB6jrSFZAu0OmQeDtz/WnBCwyQAfTmlJ4xnAFIzKcLXbK7SSQZ
Dso2xN0BwOd34/jUkaBA5ZtxdtxPTHGP6U2Igxtt5/ePn/vo1Mo9myKLtlve4NnA
Gc8VWhdfOuAoAKuP/QR/jVgFsnH0xmoEQtLMQuPn59/lFIat1J1YY4JPt0zVXJk2
RBGUF3ZiGwcBu2PU4/DNWACXBHAx6nmolBCiWOMl4y4x/eBbn+Qo2BCqiF2jEe3Y
o5AAH0H+e9MWOO3IijBRXUkKMALjHQAe9LJcQiQsRIXXj7jZI+gHNOCgzedIu1lB
RPXBIz+BwP8APFF7lXYl0/lorFSTvQcj1YDH60F9qSztHuKEkADJAH49eKlmQFRu
X/lovOf9oVGF2eYHX92+TwScZ6j8etSyU0OO2YAOis3BwDnHoR6fWol+eaORm6K6
YB68jr+VCPGrbI/NJxk5Bx+Z4/DNKsYWRSScANkeuSP507MrVBcTmFWZRluFHTkk
45/Gq0pWBvLjjbcxG5iG5znHzYOTx07VPLCk8TxSKCsgwc84qOWRMBZhICDlWXdz
9Nv1pNglbVDJFO1Lglo3Q5bBIBXpz64yT9amBwjAHJyfX1qFQJ1VTGwj778gkg5H
8qT5kUqMAlyc7d1BortkMckdxIsGXCq0jEA4DfMVwfUc9PpUzTO115AhDKBksdw/
pj071WgVAgeJCzK7kAcZBbn+QqQ3MSybGSQSFugU5z9aY7WHKPKuNqxbVcFgPQ5G
T6c5/nVjcW4BUY6YFUcDzjK0ZMjRjjBJVR2/Xt+tPilMhlUKy7Dj51Iz09aTWgtL
liSSQvbAk7TIc4P+y1WEXd1IwPfrVSQlZrcKwx5h7/7DVaiYoOQQfTFAmrbEuB2P
zDuaFChcnaPxpMng4wMemKd0HVSCeM9KZmV+t65AXb5a4x25NT7+Qdwxnpiohxes
vYxKePqfSpcA9cD1oGPY9uCTzRjgc5wPX2ppbn6VHJMQPWmJJj2l2DGRyaXS3zLc
PjGcDA9s1T3HnCqDn161Po337nLclskE57VrQ/iIVRWgzKaNsk4I46Yx2oAVAGJw
AOppWfeM9iPzqNVyAqADPbvWLNkSrlmJxxjrUU8Wb63IzhVc9OvSrERYApuxgdOu
ajclryEA5wr/AF7UIYSE7s7QCo7c1AA7lchQG9a0DGwUBXx65oZT5eGJ4H3qVwKi
wMGHy4GD071ZjVlxgcEdDz6URAMSFHf8M1OkePmY4GOwp3DYRRt6gj6ikA+cAZwK
V9wz82fUGnqycDcB+NIB4XPPOO1ORQ4BAIIpFI7EgfSl86IPsLMXwCcKTj06fSgh
tjLgqsAL/wDPRBj0JYAf0qYE54POearzvDKvl7Zcq6tnymxwwPXGO1SPcRLniU59
ImP9KqxIlyyi1mL8gKST7Y5qvJ/qbUDGN698ZGDVoYkjJALBh344pkVvHFyiBeAM
YHFLSw9gcpBGWIACr6eg/wD11St1aeDb5gaPbgLvVuMdCNtWb0D7LJjLDaQQrYyM
Hvg1FY2qW9ujRoUaRFL8k5OP/rmqWmoWbIxAbWJVXIgRh8gPvx2z1OetXlCuuQRg
+2KgvCRbk/7a45/2h7GpLQkxAsvIZgcnPO498D+VHmGpKMkHK9enNJbDMZ3DPzsR
/wB9GnZ5wWIplsp8s5IzvY57Y3GkJlgLjGQcA+tNnBW1kKDLBTtGepxximskzKgj
kQMSSdybs/qKhNo007G6SOWPYNpK5GcnPBJ9qdrkddyYTMI8mBskA4JH+NJ58xyP
ssox0BKnPP8AvVGtrabflto9g6ZjA/pSxwTK7iIpEm75V2Z7D34pDbRMZHwC0Ev0
+XP86jW6kx/x6zKAeNxUZ/I08grGA+Gbpkcf5/Oqk9rctDIA4LFDnahyf1pIeltS
4lzIV/49HUnPVk/xp32uUk/6HKBnruTH86gSyiT7ltHHnqRHjNKbSBXVoYFSUHhx
H0qnbWxFokiGVpXkaMoCoAG765PH1qTJVfujqaZGk+/MsisuOAEIP55p+T9ARSDR
bDInZt6lt2Hx9BgH/GpQSBnjGaqWwfzbgfwmXj/vlasbQD2GKAaJCzAgjBzVS1SM
zynBBJI6+jN/iatZOMgHA9KrWuDcS5UqfdNueT0Pf8+9GoJ2TRZAC8Lk5OT7VTgi
X+055A7DhAy54PBPpnvV7BXjtWfmM6rMAg3JtOQuf4e5xx+dMUZWuu5ed+PlbCnu
abwc9MjtUeMnsfxp2FHB7+/FIq1htsjpG3mYZi7Hj0LEgflipM/NgD6UgAHXGfTH
FIQGPUEdOO9ArDi5DAGoY9vnTk5J35/HaKlwvG489DioIYzHLc8DBkBA9tiin6sa
ROnzDg9OlRtbdfKnljBYk7QMcnPcVNEWCc4Unt6VUVIjuuHeRzvZeJGx1wMDOKSu
hbuxO6EoQJXHqxxn+VMETRjm4crnOGC8/kKjNpvO9o5UYdFW4Yfng4//AF1GEgeQ
/wCsEi4JVpGOP1ovpYpWa0LZVZUILEA47Ywe1MEOwljIzcck446+1R3kbSwFVcpl
05U4ONwzyPbj8aikWPzPKjSV5MAn94wAU5GS2fb3NCbeiHy6XLZUYGWqJk2v5yyb
mI4VsAdu4qKS2VUCskuwddlw+V/Uf57U5Y443Dx5GVIJJznp3JpN2BK+o5xlgQzb
jjOO9J5eOWJ47H/61NuBDtBml8sDAHz7QSTgd/Xp9abFCpf/AFZC/wALuxJP1Hb8
6Vi0K0PmDGWHHPqagezdS6xSkAfMpYBtpzn608Wsay7TvCscKfOZgeOcZPB60+OH
YuB82C2Mn3zR6DuRfZERf4skknac9SST+dN+zdeCT7k5pVtIzG0kivIzSONu8kH5
jxjOBTXsIHwzW0bOo6bjx6c//WosrlKXcm8tSCHRxgEdTzSSxbiMttx265HpUSRQ
OMbMMhzsZidpHTFTPCGDL5aENwy5GTRZISb6kL4WWBSC4RyFwOnynPNW412gKUA6
gVC6LG1uEXbukPT12nP9asKCpzkjGOMUxEq7toyBz7Um7PqBmkyWO3ac5znNJ0GT
n2OKCbEW4NqDLjG2Ic+uSf8ACp1C7c4warJtF87DAzGvTvyf8anZ+3A5+tPQGuwk
jcFNp56mogiBsHJ9805c57NjvT0ZVbO3b3xSK2Qzy1wfvfzqfSI2VrgnuRkD1xRk
FicED1qTTsGS52nOWH16VtR/iIyqO8GYUMe5Ack4HTH+RTzHLsygGOw9afbo3krl
Tg9Tjin4fapxgAc8Vi2boRbZe4B4z97pUctsP7QtXzgqsnXvwKtopbGMEY7Ux2jF
3bg/eAfAxSV7g3YlZCWwQOlNMaj7wOO3pT+G6A/yzQ3GOFx2xQIaifKCvt7U8Nls
4OKRSFxgcemKdzuySMHkc4waEJgcgFiOQev/ANamdWJABOc8dacPmbH1qKN0fO3A
IJHPUYOD/WgB7yrE8UfJ81io9vlJ/pT4kBupTt3Dy0BPXu1U2ntzLD++iba5ztYH
Hyn/AD+NWIHWS6mlikSRNiD5WBwQWz0+oprUUk1oXPQNt/Cmk8YAApG+tNLEdcn1
oISCEnyUx2UdRRvJ7D6mo45iYYxx8yjg/SlRjkq2OOwoK5bEV4zG1cArkqccZ7Gk
tx/okP8A1zHb2FN1BUNo4xjIIyUzjg8ipLb5bSEdcRgc/Sn0HqQ3gLw8EA70PTP8
QqxFny/mbJBPX0zx+lQX3/Hq3T7yY4z/ABDtTrM4tlJGDub5emPmPHU0a2HqWQOh
zj0qRUwc7qjD9Qc/Wq8NxdSRK/lRqGGQA5P9KNSWmy+uOORkD1pSybcEnB4qosxy
PMRkH94cj/GlR2nJWP5Yum/+IntgY6c9fbpS3I5SwiheuWP0xin/ADbcY47VEiBP
k3Nn/a5zTmj4JVyTj7rcjNMl7ibQx5JJqCa/jtyco6gZ+Zs84OO34/lVtCJAc5Uj
O5SelRrGrMUkjVshjjHBwfT8qOoc10SLvPJVVA7bs1Elyz3Ulu0W0qqsGDZGDkf0
qwSeccZ7VVUbr6QtEm5FXa4HIznvTFFX3LJIHQ8jviokYyKX4UZI69cHFSF+uMEk
VDERt6DG48Yx3NAJdRY0ZQx8xWDOWzjpn8acCx3BsDBo3DI68UiMctn1qStR+3rg
5J46VBaQRRTytGqgty3B5OT/APq/Cp1H0Pv6VDDMjXMgGOO27/aI/mDVK4ruzRZO
OD0xWbFawnV7m4Cq0pCDcVORgH+hrQLhiMfyqlDMh1OeNThlKBsdyVJou+gRdvmW
2Q43FCccA5NNCEdzn+VTHAxuf6VF50KnbvQMRkKW5/KlYSZDcBljjy2AZFyFOO9S
5btke1V7y7hjMIkljy0q/Lv6e9TGaInCSKPX5hzT5XuU3oriFwflLA+2KLdCJZsE
n94Ov+6KeSpIKlTxkY6AetR2yFZbnnhnDDA/2VFIb2LWQM5HPeqCLi4iUsNu6UjH
HO7/AAJq8zjoT04A9aoxzQxwOjzBf3jnJYZGXNMmOw6R5ftAVA20kY4PPr7dvX+l
DZFwqgrkqckcjPGP61FHerISFvbQqONysCPyzxUyvCdzRyrIzEfNuBz6UmrdClda
PcbO5AUMCELqPT+IAfriktAwhlJyGaVyT7ZO3/x3bS3itJAGZgoWRGyTjgMDQzb5
PMhuVyRhlJBB9/Y+9A21awls00m52B8vaMZBBz3OCAfTio4mcMGkUqMygccYDfL+
lOS4jlJQXEJ6hljkyw/wpSYzOiqQdqkcdhx/gaLNdCtGQ3kMdzAYpUR0LKWUjggM
D/SpJ2JCxrHIQ54KNjaB7/XFSHYhCs4UsOAe/wBB3qIJJCCIZFkwePMJP6/jSY+Z
ILgPNbjy12szIfw3DI/LNTxDCkYyd3Oe/NQrtEgMsqmRR91eB9QKfbkmIswIO5uG
9MnFGoX0shkOVnUZO0CQkjpu3fz/APr1E+TesAJQAQeVbbtx69OvbrUsQKwFCdre
a7Y7jLE/yP8A+ukLSA4eWMLnAwCCfbr1oaXqTrciODcbt3VME44HPA/nU8jbk2kk
kkDHao440RWIZzk5BLVKyLuAIOR04pGhA5EUsIII3SHv0+U+tWwdwBAYE+h5NV52
3SW2QMhyM9CflapUdiCCAc9DRYTu9WSchdrHGeeaaecbf5UE56fKe/FNGAfmY5xw
aYiEMg1BlA3FYgeO3JqZlZmxj8cVBGy/b2Kgcxrn8zVoIC2WzQGw3ymyOmM9B/On
4w2GGAe9PBCHBb8qRsMMHJ46etMm7GiUNwBuA549am0t1dpmB5yMr3X/ADj+YqDy
lQbkyO5qTTJA09wcfOduTnr1xW1F/vERU+B2M7zVCDY2RjgUittG5jn0zUcTtLHv
2FVxgfypwBC8qce3WudnSTK5HQ8VWnDNqNsSThQ4IHfpVlGZF3H09OarzuftcGD/
AAv179KPQL2Le7bwOcdgKUFu3GPXmmLyMgH2NOLbQAMe3y0hDnJAA45NOD4xk9/W
o8ZCseOKlAZlI645wKYhBsByCCapzqsemXJRdxAlIz3JJNPI33kiMCQI0OCOOrdv
w/lSzwKttJtiUfKSOO9F2mPTZllYIl52D8aaECXUjAHBRQB07n/GpMHODgeoqHcx
u5EHZE/HlqZn1JGdiDg8g9aDuAOfxpvzBs5BPYUOx255HYmgZVhuGkhchsGHAAx/
sg/1p6yuFgfcuZWG4Y9R2qrblWtpjnBc5yT/ALIppcx29oWycsnbHanYfQt3+Psz
A4xg8biM8HjrTraU/ZYAMA7F4/CoL3zTbt5YYk527Wweh96jtrqIW0QaeNTsGQzj
I46U+gutiXUGeS2IDY+ZeT2+YelTW6/uRuYHk/jz15qrdzpLb7Yp1diy/LG4JPzD
3qePeIV8zKkk8Mc8Z4pPYd+hPuOMDjHWoI7M7FUTzrjod47e2Kegzgs24fh1qVXh
BLF0GPVhxSHtqNPmIgjYeZvKqG6N6E/lk8VdSP8AdhQqqFHAxjpWfNI0rwNChdEk
Hz4yCCCOPzz6e9aSAsPx7VWxlPuNWBN+4FiduM56CplTAwT16mgAbuF2nGOlKQAA
Seg70WMm7kJQpMpGDuyH9fb/AD71DCS04YsvG8cEnjd0z+GKknuSs0MYXf5pJJH8
IAzn88CmiPDExrtBJ4PTJOf5/wA6HctbXZY4PQD3qmjj+0pU28hEPTqPmqwC2Bh1
3D1Gf61G8axyPdP9/YAccDAz/wDFGjSxK3dyNnb7cgGcGM7h+Ix/WiEAocHjc3/o
Rp2yRrkykKyGMADJz1//AFU2I7Y+v8bHp/tGhmluxLjA+vc0IQWbjODwaaW+XtTQ
Tubtz1qQsWBIOgOD2xVK0QRXU8hDL5nJL9yGPT8CKezBR94Z4BqTYkmN6K/puGad
ws4p26izyO0Dm1aNpB90FuKzrGGQ6jJPMv79gudpO1Tg+/PH1q46xPcRQGKMqyM3
zID0I/xqSCFI/MRY0jVT0QAdge1O7S9Qi+W/mWAcAE9TxUSsCxIAAzUHmSmxgmfg
yeWG4x1IHf61YRSGJz1PP6UraE2sPyAOCePSmqeePl/EUpXPbHrTRGobcFIP160C
ERVUDcSSOODxTIWxJMAcYcd+fuipUK7R647c1Darma5LDP70Y47BV/8Ar0Kw7bk0
i5T/AFjDOBx3qISx4JVWYDK7ghPQ89qsHGTjB47dKqK/k7IFVtzs5AAyAMknJ7da
AiSB1+b5GJ7DaR/Sk+1RjHyyfM20fu2/wpGgiJVXlk8wjp5rDP5Yo2lSULgcZXnn
HfNHmV7rJWcL97gcY96b5oPzbZcA9PLbn9KSTBRecnep7f3hQ2bhnCs0cS/KSvBJ
789h+ue9FidtxN48stsfGOmw/wAsUxJopn2L5isOcMjL39wKV4dsQe3lIYKdu9yy
k44znPH05pwZpArYUEA5I557jNFi1YR3WMgHcT2IQn+VQG7QyMESQ4wP9Q/88VNN
MsKPKw3bVzhRkn0AHcnpSJEfLQ3D/vG4wjELn2H4UW6sd0tyJp0UKCsvOcERN/hU
kUiSfcP/AH0MEUwwfZ2DeczxsQNrsDgnpg9evr+mKckeWyoA+Yjpz1pWHdWEa7jj
yCspAOCViZuc9OBTTcQyHBikIAyMwN+Hbg0yJ5NoiX7zSSMSQeFDn9eRU5SMr5RZ
+T2Ygn8aNEKzsu5G0ygDdDIMnAJjNPw6vnBAI69xTAWE7W8rbmVQ6tj7y/4g9ceo
9amzlSCvPYDtRZod9CCUxiaFTk7mOMjvtNTmRV3cjPoMfhVWcKLi33ZGXIAPrtP+
FWMJyA4Uk/MR3oSsDBstwSw49KiQOkKI5BZVAbB4zUknBJ3HC++c1GpUjcRnjjoM
UDRADjU3HXES8FT6n/Cru5gc5wD1rL3t/acpBI/dquR9T6fjV1TIc5Y5J4GOKbAn
YkDOQajDYHAbk9hnFDBgMscnHboKQZLfe6daljRIJACcjnp061NpK5nunIHJXH5G
qbMQpY1Z0IPm5ZjwWGBnpx/n8q3ofGjKsrQZUCYiUNgew7UYGOhpsUxmTzOTu5xj
H4Uo3KAMEVz9TdDgu5iAQf1NVLxWGpWmMbMOGP4Cr67n5UEDHSqk0OL2AmTBw/H5
U02hXXUnQYUYGBnnipCMjPp2JpPuhcjLGlGTwxOKEIcDg8HPsRnFPxgDAwCOuKaS
ykAYAHGMcmlJPYY/CgkrkRi+k5bdsXP5tilu5DHYzueyMRj6UPGhl8zb8zAA8+mc
fzoh+a3PmcjLAgEj+IiheRT7MZInlyIFeUFzj5pGOeDTIkMdzKoZmDInLHJ71LLm
Z4nBwEYscj2I/rTGbNxIP9hf5mmL1Hlju2jv605mO0nJyPXjPtTMFs4B4P0pC3By
M8euaBldYInUEqV3DkK5APHpSLBEzclztI2guSB+FOjJeNCBjKg4qRQc8jDH9ad3
sKwrFgODkgcAmq0pIK+coSMtg7GO7ofQVZZVyN3yn2qOQokkbRnc27ADOQOh+tCB
kIeyD4SSVmHozkilVzJKUtmZwB8yyuwx6dfxqjcr5F/JezSqM4xGkhzwMdcVpx75
JUMoCHadojkJz0+lNsEtSeNJ8EyBFHbaxP8ASo7S3iSNFawwwABYKnUe+atxrg53
H6VNtzg+/TpSi7Ck+hCqTuSv7tI+mBySP0AP51NFI8CpHMwwTtV+MN6Z96kTJPTI
6U7cV++fl7A8UGUm2KzFcdPeq0tykTKkjfMxAA9T6YprWtuZDJtIOOQjEA+5FTJF
GoULEqgNxt4weaGFrIbEjb2kdm3NwF6hcenHepiu7AJK56ChWAJO7B70oZOSD1/O
nuJgsaj7xNQ3i77GdFPLRsB+INTYB6ryaiuj/osgBw2w/wAqV2JPW4hJxwo9eagi
A28HOXYn8zVjPPf6ZqvGPkbqcu38zQaq4jyqp2gc/wA6g+0lWZSOjAc5PFTSICSc
gZ6CovKG85xyeM/SpNFaxAZmnuzEHZV2BhgDrn3+lXLRnaH5mZyGYZP1IHSqixP9
vbtiNf5n/CrNoAsRweN7ZP8AwI0xMWYBd115zgojYwQcDv29qPJlimXZcyESPmQE
L0C/T2FPmVWs5kJyGVgR+dSyArJbsT1kPtxtamvIhuxCYfNL27TybYljcDjrk47e
q1IskyxBlUNwOpxninjBvJAdufLTtz/FVO5kuY03RI0iY/hxkcenenFdCb6eRNLd
iNs5HXG05B/zjmp4ZxKudpXJ69qzLO8upZWMkMmwyYCuuNoA9R7+9a24DgZyfXvT
krbk3T2BBkA85HXNQwRsbic7SBvGMHr8o61MHx1xjHUVDBvE9z7yAj2G1f8A69Tc
eupOQF/gBHr3qgsgt1SaVtsYaRXcjpl+D9P8fQVe3FuMnI9eK818e+O7jQmk0XTH
RbsndJOCSYgfmAwVxkg9QTge/Rxi5OyGtFqdre6ppOm3gN5q8drJIQRFNMuOmOAe
gq40kT3A5XcqkA5HPIzj6YGfrXzNaWF5qMrraxPO0aNLIR0CqCSST9P8mtbR9Z1D
UfG+naheXLSXL3cKvIAFyMgYwMDpxWzoPuJVE2fRLFPLGfUZP41TuNVsdOjcahdQ
Wy7iQ0zhVYEk9+v/ANas3xtfvpfhG+u4ndJkRfLZQCVYsAP1NeCWWnahrmo/ZrVP
PuZCWw8iqWOeTliOeaiFPmV72BtI9/svEuhSTGOLWLCVm4SOJ1H5DPJ/+tWnAxDq
M43b2wOwyP8AGvnbWPC+t6BGjapp728cnCuGVlz1xlSeeDxXafCnxPdHUTod3OZI
TEzWwbkqwwSoPpgE47Y96cqTSve4KSk7M9XnYlSiAbhhhu6cHP8ASuf1Pxt4ZtWT
zdXiSVGJACNIAcEchRx1qP4g3l3aeE7tbRJDJcbYBsBY4ZueAD1GR2/PFeEx2c01
6LN2SCXdtJncIFPuT0op0uZXb0CU1HRbnutt468L3vk2VrqyvISo3Sq0ecc8swAy
cfmRXUQkspznJJ78da+b9b8Mat4caL+0rdY1m3CNlkVg23Gehz3HWu9+EHiC8a5n
0OZ2kgSEywdP3eG+Ye+d2evGPenOlZXiwU+bRrU9NCtGRK/ChnD8Z25bg/T/APXU
rofNMgcthMBVOPy+vFNiWSKJ1LCTLswzxwSTzx74/D8Ki+yRSSrLLCu7OQN5Iz64
6Z98Vlyl311HBQ0glDEKFKrn68/yFTcFQR39eKGX5TwuCKTHv+RqLDvcrz4M9uWB
4fj67WqVmXAyB9O9RXBXzYNwJ/eHBBP91v8ACptqjndnP6U7DGykKRweexGag8wZ
wNo4xzU7IdiKWBbA+bpn3xTUgYH5n+oI60WGnoVIgn9oMvy7vLXIAx3OP61dHyHA
bHbAzVaKDbqM7bTyiAn2yf8A69WsFQdo4HOCaYhDGx/iGCeMd6Rslhj8yOtSJ8wD
MuCAM57GlMYZ8kA5PUmhBcqMjbySckjv0FX9FDAT5CgZH3Rge9QJaRw+ZtyNzFiS
xIz3xk/yqfSlC3NzgdduTk+9a0f4iM6rvBmfCGAxng/dOKeCQPu5I7HiiEKsWA3O
OBzSqy98gfpWBuOVTu2sMe2ciq1yWXU7MqMLtkDYHsMVa3bsEMTuPT1qOVC99brj
K7X7ZGeP/r0JtbCur6on2lsbhgU45PfJ6fSnBTjGRn6YpGXByRg55oIuRlWPSl4x
g53e9OPyjqCByMimM2enPrQNaick8DNQwBo4zuUg72PPux/oacZNpyCM0xpMjlqZ
Q5pBnIB/AVV81vtUvB+4v8zU+4gcHA71BMsUn+siVv8AeGaaQh6ljzuH4U4kAHgH
BqpJbwKoIhQ/MOigd6c8cONvlLz6KKdkK7JI3UxJz82BgY6UnKtnPJ71G8cZVVaN
SB0BHSmm3tzjdEnPqo4osh3BUmlGTcNz2Crj+VP+ySMyk3D5TpwvX8qSOWKNQiq4
xxwhqUTAbWG8g+imh3FoRXOnJdKEmmc/8BX/AAqZYJElRvtJcLkYKjnPvineah+Y
K/HohpGMcuEMbFSeQ0ZwfzFGo0luXkOQOcHtxUq8nntVNLa2Y/8AHtGQO+wcfpVu
MAKFRdoHGMdKWhLHB2QMVhkJHQAgE/rTAd9yjSQOjBGADYPGV9DT1Y7uSMYOc9ai
kJa5QJIEfy2wXUkdVz0x7UJXRN7FravGcfQCnfIeOKrIJc4Lq3YELgH9acRNtIEq
A9vkJ/rRclx8ybKEd+OoPaqttKxjYLGxxI4zx2Y1JiUcmRCevCY/TNRWiFIcEhiX
cntyWJNDelgUVvckDSPJgxuAOrMVx+hzVW/kikjlCSAt5Tx4wTgnHp9K0U+6BuyD
69aqAKNPnwO8nI4/iNPVLTcalrexOAfUkfSqis8SlVt5HBdj8pX+8fU05reBr8q0
CcRZHyjHX0qdgqgADAHRRS6jTsVVunkDbLaQlDtPK9cfWlUk/M6FOeAcZx+FRQyK
zz7DnbIQecc4FSjk9KC0iKeKJyJCPmBC5yRxmprdEjj2qvAycE56nNIVyeece1II
iXypyfakPcSS2gN4rNCrF0YnA5PQUsVtAsszMgyH+UnJwNo/KrCjA6YJ9KjuHliU
lMjAOcDP+fypq+xDfcrSW9vLp0UxjXe3lkyYBPJFQC7aGXAQlBgAqeCegGKeLtWY
KSXlYjIiGNv19P8AJ96vQwo5Ygq6tjoAD25yOuetXa25Lvy6MfbmR0y67e2T1FPU
FBnPX8M1IDxnIyPWmPGsgDSL0PGCf1qXuK4q8oCWyT2pkXE82efnH/oIp6hI1AHy
+1QQuzz3KgdJAP8AxxTSFa4uoXsNhYT3077YrdDI5HoBk18y311d6tqEl1cSNPcT
vuZvUn0r3f4lIR4A1LgtxFk+n71K8Z8IyafB4q059VK/ZVl3OX4UHB2k+27Ht610
0lZOREuiPWX06y8GfDm+hhmDkW7h5/L/ANbIw2g5HuQB+FeQeF1L+KtJGCc3sOfp
vFd98VvGFvLanw7p8qyZcG6ZeQuMEJ0x1weDxjHrWP8ACbT47jxNLdyRbhZ27Mhz
ja5IA/TdThfkcu42veUUe1TMI4d55xjktjHNfNmvXyaj4hv76NyyXFxJIhPXaWOP
0xXtvxA1FbDwZfmRtrTx+Sg9Sxxx+GT+FeCRWs1xvEMLzeWhkcIpO1R1Y+gFKhHd
jqXWh3Xijxbp114I03QrG4W4lSOJZ28pgF2Ljq2O/oPWo/hNpT3fic3rK2y1hdkb
oN5wuPyY/pXM+HdPtNT1+ysL2dreG4lCM6rk5J4Htk8Z7Zr3zR9MstItorXTYfJj
jEo2rzuO4Akk9TwOtObUI8q6jjeUuZjfE2rNoOhXOpBk228f3WUnexICjg8cketf
Occc1zMyxI0jhWcgHnABYn8gTXrXxi1OW30+z05GKpdMzy88kLjA+mWz/wABrlvh
nZWj6nd6lfSxJFZQ4/eHj5wyk47jAI59c9qVNqEHJhUvJqKMvxN4su/FDW6SW8Vv
BbLthijOdpOM5P4V6R8NvBd3oKzajqW1LudfLRA2TGmeckHBzgfTH1rx28FuL2b7
GzG33nyy/JK5OM8DtjtX0N4Wurm48M6dcXfzTSW6s7E9Se/49fxp1bxjZbCh70rv
c0zNIUaRpFUKW5YHAAPU8+1Rvcu8IkSRdhBOTCxGPXg1Hbusz+W6/LG7OMj+LeQP
5H9Ke7Tfb0RdnklcF8chvTr6ZPTtXJa1r9DoSfoSxecyK3mxHpyseMj86lbIwApP
fANQsTHcmIAASKZMD1BAP8xU43FuoA+lFu5PmVLsYkt2IIIkyuef4T/TNWMg4wAM
1XuY8ywEk58w445PynpUmzA65OeKWxV7i7shc5P409BxjHykY601kVFAPy/7IpUU
7SSpz7n/AAoB2GjBvXXj7i5H4n/69SOSXAAOPeoAgjvpXZ+WiQYwfVv8ak4zwcZ6
YFN+QrEhbPGBx/KphwRjGc81DFEueXJPtx2qY4VehyOaaIl2FAUA5GSadp6gXd0d
oGdvb61Dkhs8gj19Kl09s3U43ZOF/rWtF/vERNe4zLiXA2gDjp9KVCzfKoJbOAAK
njCt0xjPGBmtGwt0jiEu3527ntWcKbqSsbTqKEblMWNyyFmQD2zzVWXfHqFrDtJ3
q+7Azt4H5V0VVbuGNmSVl5XIyOvNdE6CguaJzxr8ztIqhDnkYI9R0p5BAwdoPvSl
lXPH05qOSQMOgB965i9WQuWA5Ix61A7Z4yOP5Us0zFiAM9zjpVbzn3E7ST7UjZaC
s4Y4H50nI/D9KjdstnDZNIv3SQoH1p2C48k9iDUe5iPvUHJQkgY784qMHBzyfw4p
iHM25AT1yP508sdvy9Peo8bwcZ60YAGMtQA4jJ4I6+tOAYAioxwOpxSieIAjzEyD
0JoGOYY5JGBySe1SI4MeQy47VXmmj8iQB0J2HjPXirIxgEYBxwKTAkDAAAGnhlLZ
L5HpjFIFJGBwPYU8Kw7kE8fWkMkBTjqc/WpA6Ke+ajBHfOfSnjg9ffJoJaGhI3cn
L+p+dh/nvTRbKt8k6mTAjZcsSw6qf6U1ruOK7KSypGSikbiBnlvzqx9ohBBaZDnI
A3df1oaa1Fqug8Y3bmQnI/u0FtpGQxPT7p5pyvvPGPrUBjh3uRIwLE5/fNx+vFHQ
gnModQQoK9c1VEMe0mQzAb2JKu6AZJ7U+z8w2UG7OfLXJPrii/Mn2OUbVxsJPzc/
ypX7A462J44lUgKzE+hc1C8Lpby28S/PIJCrE8AkkjP5/wA6IDbhl8q4Z2HA/elh
+WasPkuCSCoB+uaa02E77MryZF0G2/Lsxu3fpQ0gPPQfSpX9sYqlPNJ9oSJI92VL
Ek4Axj296LFwVxsI2GVuQWkz+mP6VMe2CR+FRfvwc+XGO5JkP+FIZJ2PEcZ45+c/
4UGlibdg9M09WBHPOetVd0x+7HGSPVyMfpTwbjOCkf4Of8KAaJZiu35iVVh1U9Ky
zJFExcSSMyDhkbOR647j6mrN4krxgNGp9w5/wrJtlnS5CtBAN2QuGLEHHv8ATtit
YJWM5XWxt2UzXEhM0aMvWNiPm/EEDH/18dubkaLHkxkAE9MVFEEZFwm32I5qdSOO
hPvUN3JtYSaSWMIdgbLgdSMU9XkK424HfIpk+WMPQYkz+hqYMPTPf6VPoJ2tsIo4
Ab9eKgUEXEo/2x26/KKnbluo96qxSE3FyMfdkAH/AHwp/rTtcFcNRsINR0+axuwG
inQow7kH+Rr591nwRr+kXckRsJ7mJScXFvGXQjPsOPoa+hwQW+Ykd+O9BtopOHMi
/wC67L/KtKdRx9CZRT3PnvRvAXiLWLlY10+e2j6tNcxlFA9sjmvbNC8O23h/S4LO
3+ZYUxk8FmJyxP1OPpitbyI1HyFx9ZWz+pppgi4G6UlTn/WN+vPNOpUctBwjyu5w
nxXs9SvtFtLWysJrofaPMkMI3lCFIA2jnByefb3rH+GPhq9trjULzVbGaKF7c24i
mhKmUMQW4OCQAP1r1WWOOZNrKeMHAyPfqKqfZUTcu6U7jnPmPkfrUqo1HlK5bu54
H4u0F/D3iKe1Vdtu58yDrxGScDnnIwR+Fet/D7XZNc0KCW4j2z25eF3J/wBYQEJb
6ncM++fWtbUPDOj6yIRqVn9o8lsoWdifpnOceo9qt2ulWOnoqWtuIUUFVRSQoB5O
B2yQKudSMo+Yoxs2nscx8QPBcvim3juLNo0vrZcIHAAlUn7pPbGMj6n1zXl5+HPi
zeU/sl+DjIkTH55xXvzRKW3Y7euKb9liMhk3SknsJnwPwziiFZxVglTT1PLPDnwi
nFylxr00QhU5+zQsWL9eC3G3nHTOfavVoQmOB0yMA0JCqcZc44++T/WnKqJwoIHP
fms5zctxxiorQrwAsgdUyRI4IYdRuP8AgD+FK0iq5kFtKZAu3hRkj65/rUvlJksF
Yc5+8f5UPFGTuzIT/vkA/rUWRbbvoNwFmaVgA7KFOOflGcfzP507DeaTt+TGQwbv
6YpfKRsEls7s/fI6fjUm4r1OMetAXKk8Yaa3fkFXJ+vysP60pWQng7h9MVLOf30A
YAgtwf8AgJpx2nB74pMakyMAjGQc+uKlClupwPao8Pkc5+lSctgDAJ60CZXZS16w
Xn90Mj8T/wDXp539/l98VF93U5WJPMSAY7YLE/zqZpAMFjuGOe1N+RSTJBgjJUkj
2pSCWAAOcdAOtLHESu5wFHUnoSKlJRD8ueBj3z71S2MnLsQCGVzgqFz/AHuKdbxS
QSzyENI3l5VEABPHQZIH6ih3OcdPoKbaOfOnxkYQYyK0o/xETO/IzKivm2Dy4JWb
oNq8Y9cnArY0rUPNzazDy5VGVDcbh7euO+OmRVfTICbGMlueeTzk59fzp17pkN5G
uWaKUAhZom2Ome6sOR/hU058krjqWkrGxux1BzXPa1rKSajb6TAytI5LSgN9wAZG
fTNQTaRrUsPkN4huxFj7yoiyf99Bf6VTt9IsdJvrYF2MsgffNM+53wB95j169/Wu
mVZOLSM6dJ81zcEg8vJzg98VE8o3AAtzzzSySwfdMyfTeKrtdW/EZuof++wDmuI6
UhZWyuAxGfXvUKo54cflTvPid/LikVyB/CwyPemnKDkkk00NjWUA9yCaYSBzuGPT
PWhiTyxxioGbB45qiSYlyD0IppJAIYn8aZu3LwDx1zSkqO549aQxQTnBIxT85GMj
I96YCD0xipO3PA+lADGwO4yfekSJGbLovPqM04g5609YiBkDqO3rQBFcxRpaybQo
GwnoPSrEW0qPnT8DSFF2kNjkc5pUtoFAAhj5/wBkU27haxOpQsQJAcehpxkUdXUe
+aZ9lgK/NDGw9CgOKcLW3HCwqP8AgAqCiRJoX+VZkZv9kinJJGpO6ZDj1I4pv2aA
8GNMDsQKetvABhYUx7IKYmxkE8Et1J5TRSFUXcVOe7ccVYCjfkqAfXA5qNFSNdka
YyegGKkB7c4xzQ32Jkk2PCkDuD7VGsKMxkKIW6Z2jNTKVxgY4NLhQQw6+9IzfmQi
FhEFE8iKOOCD/MU2W188GMzTANkEKF5+vFSrjADKc9zUmRnGcD8qEkthtsQJGOdm
CO5H8qOMc4wO1EkayDY6qynqG5BqN7W3I5hjbI6bc5p6koRiM/exj35qo4/4mCkN
n90wx+IqVrS2wB9kiz/uCq+1Ev40VETMTZ2gDoV/xpamyHXFwApyhPOPrQkQ3bmL
ZI6elSOuV5wfx6UKO/Hp1oKGjC/xc08df8KbyeoFJtfuBgdPegB7FdoOeAeearvH
F5sLEj73XPTg1KVLLhQPx6Ux0R3SN4gQW6EfL0poTRZUxqPvqoxgdKljlR8EEEYz
xUCQ24O4QpkdTtHFSLFCkm9EjDYxkAA0Mh+Yl2zh7bYTgzAEe201aXnrzUTq7+Vt
xtWTLfTH/wBennDHp+FO5D2HEEe59c1VieMT3HQPvGQCP7o5qfKqdvfvk1BPBbzk
NLDG7DoWQH+dL1GiVJlbkOvb5R1FHnxM3yyr6cMM1GttHjaYUbAwMoOKVLS2CY+z
xBQegQUl5g7Cm4h3AGRNw6/NQs8TD5XTd3BIJFOEMIygRMd/lqMWttHjEEa5z/AB
zTXmx6WIZLlBcNGbmFe4UNhqcs0JG3z1PXJBHWpmhjxsMYK4+7ihLaGMkIiL2O0d
aQ+ZW2IhdWiMIvPiDHsXAJ/DNStNDjiVRn3FSLEg6KOnccGmfu1YkKoI/uin0E2n
siBr60hI3XEK7um5wKPtVuFDNKijud4qZ+cHaCB6U1YlDFgEznOaRWhAuoWhAxdR
9+rjmpPtVuE3tIm3+8WGKcV2gFgMdiO9CR9woz39aB6DBd2b/MtzGwz1DgilF1b/
AMU8JXvmQYH6/wCcVMykDP6UwlcgFT9MUMlajEvLVx8tzE46YVgaRr603bftcO7+
7vFShR/dwB2pQg+9uP409B6FaSaGae28uZGKyEkK2f4GqydoGeTjkc0m9FGA2c9B
3oj8ycgqhQZxucYB/wAaNxdNRBjr0HuM0b+wDE+irmrBto8/OzEeg4NOLJGPkQJn
rtGKEu5Ln2M9bWWW/fzWEa+Wh4+8fmPHtV1Viil2ovzZ7nJqrHcK2pSKCWIiQ/q1
StIFYhQQPwo1G+Z7kxYOc4+90Oabt5BAPHpTUJwAvygDlac2exHHWmibWG4zjg/U
U2EMJLkg87B1HvTyDnuSe+abFlTcnr8g9q0o/wARCn8DFgYpAqkKBjgL0x6VKj5I
zwTUChjHlFC8nrUhYhcH8axG0StINuGOM+tVJ4YJSDLGJMfd3rnFSFiWz6e9MLgd
se1McY2IXt4CMmGPnp8gqtJZWxyTDGDjP+rB/pVxmZicHnFQybmI4yB19qDRKxlC
JIdVAiAGYfT3q44BGN5zjB9qrM4/tbaDk+SePT5qlZgMnnPTmmIjZRn73585pmAO
hGKUkZ3cc+pzUbFdpJOMetMA3ZGMH3peM8ofz61GMjDqSR6+tO3EgfNn8KQyTPuf
pUg3ADnn6f0qJOOd5zU6ZHGSxoAFyTkgHHB5qTa23k4/HgUi9SAtOAwTgnPseKQx
qIQcsfpjFTryeD064poJwADmngccrz3waBkihVGSnHbJ6U4KDyOM+tROyom4gYA5
9qeOcENnv0pAPYjBOf0p28MOCOuM1EgIwSz/AEFPJXPHBx7UCsSAcAD86eqL78eh
qNSMAgZ781KqMBnI+uRQQxMBTtzgc809V4Oece/tSbV3c1KoAU5GPxoRDYwqeRnH
sOlOCru4/A0xuTkdvb+dLgMOBz+lAhxA6KQaa3XnP1oJVTyfp15pAx4A9PWmBG/I
qs0P+kLINuVUryOe3+FWmGOfTtimb/bBpWNYsiIkGSqqPrUZ8zd1WpJc45H5Uxep
55pFoAsmeoNKCx7ikxnjdg05BjjrQA0synBKrmnfe2kspA5IA9j7+9I21jgrk1IB
jGMn2osA4AbRyfapFK9cDgZphxxnrTgOf8RTIZJuXOevrTd5GAAfpRx0I/GmgDIG
7qeaCbIeFHJbAz2psillO04J7kZxT9xA46H2pnIOMcGgSFyM7Tz069KdtIGRwKTC
kggdRS7gMD0oAbgnBJOAacI8DI5NN3EtkY4x0oRhg8DA9qEDuLv7ZB9cUKwzjGSe
ppeRwOMfpSZ2g4zx3oAGfbwee/FICPXPt0pC5I5AJPSk5XJ7dvWhjSHnPXoKaFxk
47+mKAPmAPp3qQ4bA4z6DrSFew0jaOFOPXvQOBnAyakVVABBxSLGDznG73qhXIyp
28c49epo6cEY/CnMGf5Y/nb64ApxtlyDJJn/AGF4Bos7D5l1K5cKMICSeMYzmnpF
Iy/3R0Bx/Q1OgjiUiMbc9W6k/jSliVwcnPaiyE5voRrFFACVG5uu5hn8qRp2OW+Y
nsB1pJM5wABTcgAc0XGlfVjzKcY6fQVHlznnOevFJ1wBkUoAHJ4oGkkVVOzUpWwC
PKXAHU8tT2lZpCVGT61A5B1R8MQwjXtx1arGNuWH6UmaK25PCwMY+XoMnipeAwGw
/l0qON1ZRzjHf1pzN2B4x3p3MnuI52kbsDPv1qEuFMxPdOnpUhbJyeahVC5n/wBz
vW1F3qIU17jHQuWAO3GB6evapHJUDkg9s0lof9FAYfNkg5yD1psgG7nn0GKwSLTu
xOfUnFNL54Azj0pRwxwMZpjDncR+FBaAnPy9MjtTHBXDdaco4+UfSkeNuuSMUwM0
j/ia8KB+5JPPP3hTpEYHcB07elSXFnHPIHdSWUYyGI4/CqradbnJIb8XP+NMQsm7
IIBGevFMJ4+YfUGozYRBiVDn1/eMP61E9jDkHD5H+2aYi0GTGCvTpTCRkgDOOlQf
YoMkhGz/AL7f405dPhJ+6+e2JGx/OkUTxjnnA/CrK4A4OM+lU10y3Odyk/8AbRv8
alGm25xhW9jvb/GgC0D8pOeR/eFPAyue/wBaqHTbYn5ozn/fb/Gnpp9ttwqvt/32
/wAaQFscnOMEcZzUgVSvJB/pVM6ZaOArRsf+Bt/jTjplqo2eWwX08w/40aDLq4Xg
ct3OBzQfmGduSe1VV02z2FdhA6HDkf1p4061+YbTg99zf41IaFldvBT8KkU5JyDm
qK6XYxjKrgnHRzn+dKbSzjAXDbWIH32OT+dN+Qt35GiPmDDP1GacBzjPv0qhBpNm
knmJC+5upDt/jUo0603bvLPUfxk/1olt7pEkr2Wxcx/eIPv/AJ+lLuiGAWGKorpF
gs3mLC249/Mb/GlfTbE4BjYkerH/ABpvbQlqN9GXQQQQDkU4ydOtZw0qxjk8xIPm
9RI3+NDaZZzgB4t2P7zt/jQ7dA5YmhuViQR7Unl4OQRj0BxmqS6RZ5Q+Tyo4O9h/
WpX0qzljMckW5Sem5h/WjyJVk9WOJwSQcEdjUTj5wd/GOgxT/wCxdPKBTBhV6Ycj
H61Wl0GyC7RBlcf3iP602iozV3+H9f8ADiSsoUkNjPY1FuXIJfn0FI+k2W0/uV2+
7H/GoDo9icYg5H+0aWhsWt4xgnNOVlbgYNVDplopOLcDHck0i6RZP0g/8eNGgK5b
LgEjPFSiQADJ5+tU10izzkRfhuJ/rSHS7IscwA/RjSSQbmgz5OQaTdzwf0qmNMsm
/wCXdR/wI/40v9k2Z2kwAY7hj/jTVhdC8DnHNPBGcDuKpNpdi64eAEY9TStpVgwV
TAOMBcMR0HsaFbqS9tNy/lVIGBnoOaRj8mD07cVW/sqxK7PJBXuCxqIaPY7dotwF
H+0f8aFYnpdbl5GHI/OkyMZI6D1quNMtHTyzGm1jyBmlTRtPiTasIUY/vnP86El1
E2ktN/6/rYsqNo+6P0FAxzjkkVCbG0KYNuh9+c1HDpVlBnyodu7k5Zj/ADNCsFy2
CPu4OB3zQzKFJwemetQ/2ZaElvs6ZPGdoyaF0y0iJ2QYz1GTih2sTdXJODxzg++a
ZtB7D6VCdPsd+54F3YxzUUtrYp/yzTI6EnijQ016FxFxkgDA96k3KF+/jJ/Os5dM
trkeYYIyOxK8Y9qs/YdPj+5bJnuSM0JImW+hZwdxXgkDPXp/hQCGzk7c9upP1xVZ
7W1kGGhQj024/lT1tLZQQIY+RjkUdNBdSVpGUbVYcDHp+VA4HKgk+tQ/2dZ5wtvC
M9QqAZpBZWoyfs8Xpkpmh+QadCfeg6HFI0ir36CoTaW65P2aIfRBzULWdpjLW0RP
+4DQUlcnMnAFIZM9s1X+xWu3i2j47bRxSGztic/Zosn/AGBzSLSLCuGHy4pWkUYB
5NVza2+MfZouPVBTPsluBgwxhR22CnoFhsWPt8qg9IkAz9Wqyeh4Gc8VHEka/wCr
jVc/3alU7m5PT3oZQ6NwHODx64qUjnjpUBdV4Iz704S4JU4BqUyWuo9iAe1Qo8a3
EzOcDZzSySGMZI4+tc9JqjtqDqowshIyD2UVvQ/iIzqaQZ1Fkw+yhVcHDNn5sjqa
inDnowHpml05lFmCpwpduMYzyegFI7Ddx+lZDirNkYJU4ZgfbFOaRepJNRSlVPmO
VQKOXPGKbjOMbh9aEaEjTrvxzn3pjygj73tgUwqW759zTXjIx93mmIQyqBxn8Kha
YDgZH1pXXnjbwPSq7/727PpTsIHk3Hp+dQs5PH6U58Zxk8celIEH3s7j6UCHBxtx
g4p6hc/1qPtkKf6U8JnqcYpFImDLj/61TLsxgNj61XTGex+nNOBbHUKOtAycBc9c
49KkCg855+tU0uNpxyT+VT/aCRjqe5FJoEywB1Ab6804ccg8niq4kJ49PWpBuPP8
P5UmMkDHPNCgkc5GOlMaQoQcHPXgZpY51ZhwQT68UWGThMeg59cUvlgsCpwaNwK9
j71Ih9sfgM0ENsVUHG4/iOtPRcfLt6H8KauDj5uhp7fKMBsZPPemZtin5uBzg4wO
lBwCF4JI60zOAMkH6Y60qMMcDI7jvQKwAnd9zPPfgj9Keme4HpjvTQ64xjinqwK4
+97Ac0CYowBwOe/alLKTwD+FKMHrxn3pjbmPGQAO9BG4bl6ID9aazeufzp2NuAAf
5VE4I5JPNBasMk+fceh9cdagIZc+571ITg8Zx7U2Q4Q5BK+npUmy00K7emTSquPp
SyKQuRnae/HFKMgZoLuKMenX3pybcYx9aYOuCPzp3Xoe/agBzRKxyTTlBBAB/OkX
hsjj2peGPBGD6UXJJFXK8d6dgjkZx3zQrArnH4etPHTGffimZNjM8fMeM9qVX5Ax
+NKy5xj8+1OCDCtkjnHJoFdDowM8A5IpxA57cc5NNCgY5xj0pVODighhsx0HWl27
RkAE0oxxyOffrTC24KETJ9z/ADpi1FLBQcbc/Wqj3eCELRlyTjYMfzNTsq87hn2J
4NQny45h5QVCQBgcE/jmg0ikMbzpTgqEUnncp3fTH9ad5UCcqhbBzlv8OlSNkDpU
TOW+7gexpXLWo5pSQMkk0BskjuahbIOSKcpyckHPfNK5VlYn4C9c+9N5wcYAPvTA
cZyBUiE9SD7HNMm1iRQB0IzihtuOpBpOQBz3phIJxn/CgiwHG7n+VRyEepP4U5j6
sM+9RO20/M2e1BokBYAdelKG444qIvnBxgUu7PcgUi7BI+0cn/vmq5fdkjknqSM0
6RyWx/OmqT2wM1QiSNRn39BU65UjKjpUUKjG7IA9c1MJI1zz2znsfxpAyQp3Bxjk
1WuZxAT3IGce1TGf5QF7+oqheS4yWIAUfNjH5Y707CV+pFdTtICiAFz0B4UD3rPh
0+WKaV5iMpGSSoOMsSOp69KcJgZsknPYd604maaxkXdkAD73pW9H40ZVdYMu6aA1
sRsVdjsD/wB9Hp+tJK4jLHBO3qFG7H1AojuWtIhbpaSSNICxdCDwSTkEcHr7Vn3U
s5c4jlKgnnado/Lj0rC1i07sts5k+XaSrDqcf48U2Uov/LRRj361lNqtmhUG6QcY
+8OvemNqMDsQG8s+5/lTLtqaBlyAMAgnuen6VI0qDBDxknjA7VmB95Cod5PAUDNS
fZbyQ4Fu6KOpI4HtQIsuwb7oXHtULK4YbePcU7+y71cjzCpHOFBOaDZXMciDE7An
5iEPH86pK+wr2IHjYnB7nrSpHnpkYq6LdSfmLbuu0g5/LFO8lTgRwyN+B5qR2Kyq
cc4P8qM5JG7k89KnMLKxUhgR1yvIqMo73Ijj+YxnEq7SSoIyM+n4+tJDGDcF4Pyj
oaGiYoT+tWWjkDsot3AXqNh4oMT7N+08j0wKLhYrRRFmHI/OpNoXpz+OKmjt5Xja
QIzZO0YGc1C0cqAlo2UercUXAa8rZ7n6809J9/UjHqOKikSVRu8skY/hH+fSmhHj
YblKsTxnjmgEXBKpXIOD256U4MCc8k1QEjHDKjY6DPf/ADmpXlePH7plx14/Ggdz
QVwp6gVOr9RzispZSBu2jv8AMwqwlzhd3LKDjI9aQNXNBD7n3AoZjjPLAHmqguuM
lSo9xxQt0nJxg+o7UMnlLI/vM3PvUihcAEkn61UN3GeN/Tk81P5u1VIyS44B7ikh
NMnyAAeg+vNODgHLHaB6HGaqPdBW+cgE9C39KBcbh97cB1x7UXJcGXC4I2hs55xS
eaRgdsd6qF5AoIRgD6g017mSM7SrA4zgqc8U7h7MtGQN3yfQcVE0uemSQelQIkkn
QPx2UdKgmulicpGjvIeCAmce3FBSikTtIA2W45/GonuVHc88YPPNZlzfXpJ22ku0
dzEQP84qms0shwwlUHODg4I//XQkVc3Gv0Q/fGSOuc/oKhlvSoMkMIZR1QD5j9O3
4VQjjyWCozlfvcfdq1CHMmxgVwOTgg4/zmnsBagu4rpd8ROAOhXkeoIqcMu7gdfa
qc0UNxMWhTyLoDcJB8oc4x8/qOnXpT45JnTJglGBnIRsH6cUSi7XGvMtM+4ADv3p
QwC5ycnsKrPIwUhlnVcc4Ugc0hlYZBWXK8kFTxUbjL6sCACMYxyTUgY8Ddms9ZmO
AY2O7HVDVhZXIOFbggH5enGf5VfLLsS4lvIPGSeM9acBlcg9argyj7sbM2OgHIqB
7y5XpZ3GemPLbH6fhRyy7GfKX5CI4/m444yf8imPJwDuVARyCc1R829ZhizlBHAK
x4x9DxQ1vdvI2LeVMnkjpTs+wKK6sLq/lcmOBsE/dO3J/LilgSWO2WKV5A8eVMvQ
E+3Y9/yoGnXKsGKMVwSeMnpUgNxsSNraZgvALxknPrQ07D06EnnDaTyWxgMTn8cU
xpHeImOASSryrZH3sccdaaS4DgWUmW5bEJ5/HFRQxSSXC7obpB3/AHbL3qUnsOys
N/tdI5/Iu43tpMcGVSqv/uk8GnNqVsehVvpWjeaRaaha+VMnXkMeWU9iM55rHu/D
0lmm+3d5wCflxzj6CtJU2lciNSLdh4vUdjgkH+dC3Wcnn8azHiu1OTY3IUesZP8A
KnoLwn5bG5A7fuj/AIVmbXRrCcdDmpfNAxheT+lZJ+3KwX7FdYIzkRnH0qRTehcm
1uRnt5TUWsHus094GNzfgO1KWPbJH1qrHHdkfNBIB/tD/Go5pZozxBKO2QP8KLCs
u5cLDHQD3zULSLnIwcd81SkmuCpxFLwcHC9KYZZycGOU49qBlwyjbtGPwphmRVxn
BHr3/CoFhuSQfKce2R/jUTQ3bNnyjgfn/OnYVyczEkgAnPc06IO7HI6D04FRQK5I
DoQMZJYgfgKla4YD7iIijn94v0z1oAmZWPy7gfr0FKlhcSMGOCvqxpkN1DuG6SEA
9D5qf41cOoQFkjF7bRJkF2eYdPQc012FJ22GyoIkJJC7RyQOB71h310XIJdQpb5S
fX0FaepXVoWSODULNlbrvuAMfl/Ks1I4GlLSanpgx/fuc5/DoKpRfUnm0GWNrNfO
pXAQN8zgcZGM/wAxWtLDHbafdTK2cAIOMdM8+/WnpqOmqmJ9bsAf9mVSPT1rnvGH
jvw1ZaTPYQaxFNdcfJFlx/30Bj9a3oL3rsxqSfLZHicXjbxTCu1PEOpAYxg3Lnj8
TSN408TMctrt6SfWY0UV08sexzqclsxh8X+Ij11q8P8A21NJ/wAJb4hzn+2bzJ7i
U0UU+Vdhcz7kh8ZeJuB/bt9gHIHnHinp428UIMLr18BnPExooqeSPYrnl3JB478W
KoC+IdQA9p2pf+E58VlCD4h1AjI489veiinyrsLml3G/8Jr4nOM67fHn/nsalXxx
4qB/5GC/4/6bmiilyrsPml3F/wCE38UjB/t6+z6+caB428Uc/wDE+vv+/wAaKKXJ
HsPml3AeNfE/H/E9veP+mppV8aeJwTjXb4Z6/vjzRRRyx7BzS7j18beKByNdvsng
nzjk0reM/EzDDa5eEehlNFFHKuwc0u4Dxj4kwB/bV5j/AK6mj/hLvERJzrF3x0/e
HiiijlXYfNLuKPFviHaB/bF3j08w04eLvEWCP7Zu8H/poaKKVkHPLuDeL/EbAZ1q
9P8A22NKvi3xDg/8Tm85GD+9NFFOyQc8u4p8W+ImPOs3hz/01NP/AOEw8Sf9Bu9/
7/GiimLnl3ETxZ4gwB/bF3jPTzTT/wDhMPEmMf23e4HQeaeKKKA55dw/4SzxC2Ad
Yuzk95TTW8W+IssP7avQPQTGiigOeXci/wCEt8RBQRrd8Dnr57Uf8Jj4mVsjXtQH
0uWH9aKKGDk3uxD4z8UbR/xUGo9f+fl/8aT/AITHxNhj/b+o5yP+Xl/8aKKLEsaP
Gfifj/iodS/8Cn/xqT/hMvE+f+Rg1Hp/z8v/AI0UUrILjT4x8THGdf1H/wACX/xo
HjHxMCca/qP/AIEv/jRRS5V2Hdh/wmPibGf+Eg1HP/Xy/wDjTT4x8THrr+onj/n5
f/GiijlXYV2N/wCEx8TADGv6iP8At5f/ABo/4TLxPz/xUOpf+BT/AONFFHKuwXYn
/CZeJ8D/AIqDUuv/AD9P/jR/wmXif/oYdS/8Cn/xoop8q7AH/CY+Jhn/AIn+onPX
Ny5/rTv+Ew8TZP8AxUGpf+BT/wCNFFPlXYLgPGHib/oP6l/4FP8A407/AIS/xKDj
+39S/wDAp/8AGiilyrsK7G/8Jd4l2j/if6j/AOBT/wCNB8V+IiDnXdQOf+nl/wDG
iinyrsO7G/8ACU+IMA/23f5/6+H/AMaP+Ep8Qbj/AMTu/wCf+nh/8aKKOWPYOaXc
P+Em17j/AInN91/5+G/xpD4m17P/ACGb7/wIb/Giijlj2Dml3G/8JLruB/xOL7/w
Ib/Gj/hJte3f8hm+6f8APw3+NFFLlj2Dml3EPibXtv8AyGb7/wACG/xpD4k1wn/k
MXv/AIEN/jRRT5Y9g55dyN/EGssRu1W8P1nb/Gm/2/rHP/E0u+n/AD2b/Giimox7
Bzy7if27q54Op3R5/wCezf41G2s6mSc6hc/9/TRRRyrsLml3GnWNSwP9PuP+/hpp
1fUs/wDH/cf9/DRRVcq7C5pdxv8AauoEDN7P/wB/DSf2nfk/8fk//fZoooshXYn9
pX2B/pc3/fZppv7w/wDLzL/30aKKLILsab67/wCfmX/vo0G+uz/y8y9P7xoop2Qr
sje8uSOZ5P8Avo1AzFjliST3NFFIaP/Z

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=t.gif
Content-Type: image/gif; name=t.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/t.gif
Content-Transfer-Encoding: Base64

R0lGODlhLAA3ALMAAAwMDBgYGCEhISkpKTExMT09PV5eXpSUlL29vc7OztbW1t7e
3ufn5+/v7/f39////ywAAAAALAA3AAAE/vDJ+QgZ92IhRu9DCFqYRRSFwVDsU2wf
53FCIM+0Z3veabSTC+02tNECtiQuF/oBKwOk8ciZ1mTHEBI0cLYOhCHOKLUmk9fA
jHAAKgph7DZ9rSGj9GGngAAihCB6U2dlUnVcBgpAYDONS4KGZVkYbUAGMFohjXZ3
VXY5NwRPDwZxmjx6nHoiZCCViwVcIiKgU6g4p6KjDwdwJCa0ORqnPLleuxIMDQ0L
DgsKCI8FB80MDAoJ2QgHBw7I31COA6/g5RQOYcUhBMfm4A6XMRkC7O7mvTwXAS8Y
A/blpeKkCvHvmwNa6YgUKIhMAQ4hqAS0Y8ii1CkOpggoovgk4UUN3AI4jkpH7ANB
kS2iRSypC+WEBhbFDWnp8sECOJroMZFYc8KfYoCKkXNpcaeMCz0lLCARbNaAhUkP
0Gq0JcRQlAf0xLmDoU9Si6aCWUgqwVcwMTRdMsCZ6gbUnmDmiQkxjWy8iybZLfiK
EyGtAg3IvhhxdATZCiQJqOlH9zBTLJAnohy2YVaHjUlPHL2FITBZiANPHG7A1FSN
JocVUG5aLykCX1j6WTDgGW6s2CbHOSbpCKPXzMMg7zmMGDaxLsQNwDYJ4vdhnKsN
7CXOSzl0C86pT3DggIE37eAlRAAAOw==

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=h.gif
Content-Type: image/gif; name=h.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/h.gif
Content-Transfer-Encoding: Base64

R0lGODlhOAA5ALMAABAQEBgYGCUlJTExMTk5OUZGRmZmZpycnL29vcbGxs7Oztra
2ufn5+/v7/f39////ywAAAAAOAA5AAAE/vDJSSsleGhSjK2OUXCboXxoKg2Epgns
oh7FAG+crO6S8QrAICeVscGEhQNPRQg6gazEp/EyBgMwwjJltEJZiA8i6CUPTtsK
wlY+DhwfH+tJ1qYrNTq5gGrRrQMedxc/TliBKIVlGoKDK1B/SX1kegRKjg8Hek5S
HwttV4EMmAhNVlhOKQl/T52OBi2gNik+VwGoUJgSBZupKAZPt052jqXBdCgMTb2I
mJq9QMQVB6BOYZjAkJEoz5Rmug/L2k4F1xa1R08sutTQA5cWn9AEjYPtzOZq1dHw
d3lHuMiMssAgWy8ddxwo+CdAWENOHw6ICxhkYBpYbSimc1Hoyh97/hwfNgQABFVA
je4GoQNYkpLDlt563cG46eUtLC+9VfMX62bDmw6FnWyJ8sYdDHRw4oTGdFgaeTUN
ebQ1FSaMejv8GDH5U2rOklzpEICzhQ1RnybTomJRdM+djkFtioSygBfRPwiX+Olq
S2lfAVqaLHXSZZDgnwC4qsXF58E+KI3TUANF0csACQqqQmKBdQksq0KjIUCQYPS1
bpWhdF5y75gAA3kpGMQF6DK2HwNwYYlNaN5qzy/E+UrEjBEp4VJ/N1i5qd8diR2d
OJ+wYG+v6Vtq7OMtwVhKTJ8ep2C4KfIgBXtBEXncrFiVP7Y/mNWjAc2rmE5RpMMv
AJzdar85bLbPOpgkgBxh73AxTh0B7tAafa5MsyAZBjSASUEh/UEWCHIgCEU+dyjQ
4SbKGURYFha9Eh0kIFLw4BPmkVJDLG7EaMEIHHFkHzgTHCACBymmwAACBxRpJHY8
NrCAAhvy6OSTUEYp5ZRUShABAAA7

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=e.gif
Content-Type: image/gif; name=e.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/e.gif
Content-Transfer-Encoding: Base64

R0lGODlhLwA5ALMAAAwMDBgYGCEhISkpKTExMT09PVZWVouLi7W1tcXFxdbW1t7e
3ufn5+/v7/f39////ywAAAAALwA5AAAE/vDJSStTKhlTdvlgyG2ksVQoZRADQQgw
KwTCEAztUO8vW7SfFEoBw8GOs5lxRtvpkiygsHKo2Z44wEwbaCJf3oKsMKW8ajLA
rcsOcHNHHe416JQnxSTM6+4KuHo4fnEIdxJGNkh+NG1/RwQ3R2tkhg9LTU9tao1F
WJEDBpULSDqMe5umTqROB5UGck9Ksk1+pWpIRZSGZ5KKkF6xckU+BKGVe1ZFkY56
zXQ5H4WVP1hMBFoCUS0yiAQ/PrqGDK87gQoLDg0ND+oNGQcHG/EG0pUUB3S46/YO
DvYpUVYNaPWv4IQG24zIyFbMYEEEedA4chHO4Z0fs1K5sGivQLZS/piy2eF4x4ET
Pi2yGSM55RUOkNZqFPDHEoUDA3rYJDH10gVFMd68/WNARycNHW84xcmhg8C/FSmt
LELGpEYXYR8FVCzjkdTRWoMSfXrkYgA/Qb2uMhqEDNETFk4rKViYymhVRbGQbBWy
IlC2PresRnyEBgfBki6uMmPCCGS1GC5i7LuzgFemtal6QYmBxh6+PWuaoGr2tZnW
IK7OBADzN2dEYDd8Eqh3hxxVtIHcZrMie2/LfLhWHy1WwgC8Egcm/4OYTOoR3zUl
EPn4DBP06AjKctZDQEH0KRix2vD5HbxHrGdalBeSPv1LretREMX1/obZO8oLHlCY
B5Zs2dSBjXDYP9Q8Eww1TVkhB1yoFSSGbuWk9F4sD+JwXQoKfCPhDNpps1tK2jRk
kEtwuLEDMD4JY+FIBj0Y2ULdqPiiDzQZNBcLsTU1xxLCPNOgQyDA5d5CkS0IxIV3
ZDeHDAt51MMSPxTgHUsuKTihQjrWwUB0+HiY5YtAeYOkZyGUOUIH8hxQY3xstunm
mxVEAAA7

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=space.gif
Content-Type: image/gif; name=space.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/space.gif
Content-Transfer-Encoding: Base64

R0lGODlhNQABALMAAAwMDBgYGCEhISkpKTExMT09PVZWVouLi729vc7OztbW1t7e
3ufn5+/v7/f39////ywAAAAANQABAAAECPDJSau9OOMIADs=

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=f.gif
Content-Type: image/gif; name=f.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/f.gif
Content-Transfer-Encoding: Base64

R0lGODlhLwA5ALMAAAQEBBAQEBgYGCEhISkpKTU1NVJSUouLi729vc7OztbW1t7e
3ufn5+/v7/f39////ywAAAAALwA5AAAE/vDJOd2zyJS9jf/gcXgisiiLRa2sdBAw
MQyyPN8znMd5gaityqWAuwlmx2NxufMFJUAFkYkcKK04wfVGQDwpGRu1WtVqczjn
11UQm63KsxGexBEKjLXEwKOPzW9FRwZAX21ucYBIb3JVMF56DzU2dVmLjTpcXZEP
bWR0jXNmNVyEkQ6HVFtxi0tqeg59YlhuTDExBgmcDx+erh4FvTyHMHiFnA58RXcI
DA4qzw8N0w0M1g27K8l2NwYHCscX2V8JyjQ7NAY/47svmWg0d3nssHyz8fF49HoL
nvdN8/Y9QXBOjo4YkAS2cNDAwJJMMRJEC8fOwYENlJCQ6iGiYwkE/gkCclpgT4fB
LZMGHGrTYRyfK3W2YEEDQ4CNDdkYTDECKEkomQSOEMhGEIvPRnJCccmRzVfGQIsC
yDhj4yayBp60BA0AUwtXpTOLcWpQdKaAAAO+XuFKxuCMA5zKWRJUiSejcyK/XGRC
FQ6ov3Z2eTjHc6bfS3UFBGu3s7BhxKFkGMhLziHfMqJmFTtA8YuCf4LuiADBwUPC
bKjGnAvZWaHOZVdkLMCmMEgCk4JmFGit0GItR5tqB8FKd+Zu4UE+Lzt8HDmL24/D
GnDOgsEB1TDgUgejDPQM2tvZ5N7CWyCqoIcrDQ0v4TNoqtPZ85pq6638TrgfFtAl
P9U7LvrIKXdbSjQRYMp9Dixw0S24nCafAwwgcNFKPlB23wMLJCBhMxd26OGHHUYA
ADs=

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=i.gif
Content-Type: image/gif; name=i.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/i.gif
Content-Transfer-Encoding: Base64

R0lGODlhIgA3ALMAAAAAAAgICBAQEBgYGCEhIS0tLTk5OW9vb62trcHBwc7Oztra
2ufn5+/v7/f39////ywAAAAAIgA3AAAE/vDJSetjpRBSxt4aYVikZRTGxw3CoKFl
LKVdqH6HHJ+bxxG+DEJHOoAyx+OIaEL+bpolk3KqPYEe2HTC4DmBoUxuO1uFPB6a
lFw9q17raSIc/BnuCrLkcPKBeiIGC3oPVSk3IAYOhA9IL36JjA4ZXzYccUwNh3+H
lAV5enwvb5QnjKJAPwOQBYwclm+vhApfgDeYRG2qf5F6Nh2pVwRjbEidUMN6k7Ww
GQ16d2BQNrg6Xig2LlXEWzTAQAJvgoRhSeKMni4bLWHVMgudBn6radxTRj+jHxkG
oMX7sTgMISQvhTYsjhg1QhTsByMEABv2ItOlVqosyULRsOVEC7RyW6z4octAT5oS
QqgIhHv1p4A9JjwCvkCx6COsKx63OIgJcGaBgWT4qIKURRFKfeVeuZOBoEqPIHAY
dcn3dN/LKXc2TlMoYQGfNnfEcJ3QNKvZsWjTql3Lti2RCAAAOw==

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=r.gif
Content-Type: image/gif; name=r.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/r.gif
Content-Transfer-Encoding: Base64

R0lGODlhMgA5ALMAAAwMDBgYGCEhISkpKTExMT09PV5eXpSUlL29vc7OztbW1t7e
3ufn5+/v7/f39////ywAAAAAMgA5AAAE/vDJSetjppDBhR/CsIkEURxWqlIOkpVg
GAuBZ39hYaw8dZQjgm12u3FEp97KMCLaakUaLrQhGBjKiqID6jylAainVjs2sz7v
RzymkcXhm3CART+aXrJ0HI9Hh0loMWw3b4ZhYkJtIghZCGpffn6FfyEyBQ5KB05Q
k25Pem1GIig9BpZGbqFDoq2TBgqmXawfQDoHBkwloKiopD0FXUcyBAeZKQwIilFq
AwXATVOMxxYOmzNcMRwEPbgHCC2nwwImsCkHBXvkZtt2DwoG2iBz3OdFTiHuTJA0
IDsp9wLEEFIPjQZsMkL8q+BgBhR5BbNE+1OqAoMBoTZYEmHnkbYx/toWpDAQB0Qc
GFbsBBPh8EaKR8yIXbGj0deeASMX1WLZiOasQTYiSoiXyojQHgmwYSy08AEuIg+F
Ne2h4CAlMMVydVglimNHIXCiEFL3xYOBBO5+4FM39s+silkaaCjSiY8UqLM+4HSn
bBmlToja1irm7oGyLsvKsCU7yhncLPHWAg6MSBWqZ4UfrHQoMESfwEOE6cgsgQuq
up94me1J+kEDSJPBXOXQmgKCSqBR39xb+0HksmF16+0twa/lymVHEb9TdAqYyopo
94Z5tV86jPxsPC4cjC4g3wQI5SXcuuZizBLSJWzM2l1SqDiaUres92iWa60+wFUA
to8o+z0godBddQTUMYE4soUWCBr7iAUCehNs0UsvIkwFzVr+pEDEhhwU0ABNFII0
wHaarXePQmgklZATI6aQAAwTegCESEo0eM8RH54zIEumDWAAjTwwAAOH0qnwQ2hK
kWfKRDJ4pcJheoVGjoUroEMCEEqq8NsIRZRQWAMMJIAAAmgpcdha5AC4HAubDWOG
mmseWMUwMLQX5wp9EZPSnQwGU8VZPUQAADs=

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=s.gif
Content-Type: image/gif; name=s.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/s.gif
Content-Transfer-Encoding: Base64

R0lGODlhMQA5ALMAAAwMDBgYGCEhISkpKTExMT09PV5eXpSUlL29vc7OztbW1t7e
3ufn5+/v7/f39////ywAAAAAMQA5AAAE/vDJSau1yBTCxyCC9xUGcp2opSAb14Uf
4XFFal/IIQ6h4PucH49wuBkfhw5vtvwFep5CoXhEHQo7n6cHE86mVZxrOXhyP7yf
VgAOU5LptHAuMO8GJffkYNiq/4BqIgYLeg8JLjBbcn+MPwQMhkgyTYt+TWtaHw2G
V4uAn2p2IjWGUnFdjYKNBAadG2RrH48yMiEgM0SGfX6ppAYNCQZePRySfV1ZQJwT
LzsGCZKwl5alzS7Y0ZLOApRy1pI3Ld2WtwThRy13lgMm6DYG3t7Vhe9W6mQit672
KPjJHYz1O7GhWAw0McANnMAi35IgtRaeuGPLDIxWEivMw5VpREYK/vFCrQvxcYIw
NPMARSr5AEHAVVDcsQw55qKIA8xKMpiHSoQulg+mMWKCEeikXri+ODDq0lajGSuB
IksVIsAHmaZicDDAb0JIO1y6UemETWuFPiC6pOUw1k08TWvPZuGopW0YW5U8aByg
bg4HbW52DinThYJgvIsoRQ2DhUeBHhYZPZFzkIDCKonWWAx7plFXN96obg5k9VYb
Nwo+pRlN7ZKPenqSJAvkC0icAUv1OHh7i+qcoZoESFrQmLbxzR4NJWjsSAtYQTtO
uxGWVlPzTOYKwDakIORt69Z3WLarXMl3m+Klv2Nh/lKtL1gH8kmEUOt48hIXL0jg
ILfR/wAGBAhUBAAAOw==

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=b.gif
Content-Type: image/gif; name=b.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/b.gif
Content-Transfer-Encoding: Base64

R0lGODlhMQA4ALMAAAwMDBgYGCEhISkpKTExMT09PVZWVouLi7W1tcXFxdbW1t7e
3ufn5+/v7/f39////ywAAAAAMQA4AAAE/vDJSasshIy9RfceURxWaVLMgXUD2AoB
LMx0VjRnPhmrFrQxAUFGA4EIBt1JpdEUAkFhbBoAbJ6yZkFZUc04QKJnCoOSawQE
dzfUDKLTN8gMLRdbhcX6UWgNhi9UNFF2X0EbIntuX4MxgWSEUX9tW1wsY1AAdmeM
QQB1MwEZBgpKRkONP4U0mjCfQXVNSTkJGz+2oVYsqGECry2au5UmDAYeYX9lAwYH
CgoLCzyokGSoQjkqH70BwyUKtoRHIdgYGR+xeicFobA1fwM55Rk0YF/LJBZYc4x/
3RYIPEggWNfhFhhv7Ioc+7NnxQsXIBzkEyKGzDJFGuaAaWFBwTpQ/qH8GGCA0ZEM
R0MsGPCh8BA+Lgf8HPowowsvk3U27HmwSA6HkBMGhioSZdROP36OSfEgwUCyh3fw
7HQwCNMLnwQknVQm5CXMrEpDAoFaJhwNNXs8NhnDLtAMXe6Ujtj5YCWgVHGA0BE1
7w9JunzmwegA1t4ATYJwEQB8wQcHUaC2JMh59aq/hsk6gcJHxKyHWXSb7BoqAK2c
sIwSAXbz+GFKCW/MGJmiwYDEnbzGVF4MO+PJIOYKgOaCQG/LrhScKnTr4fIJBU4v
Bcow8anJEM5NeGn7AwrDCn1kgpyEGeJpIcObLlfKoeFdjbdKOI0TUojONSuWv/le
AdX7Q0wRyffOQm3xltxVgyU1Dhf51SOHahP40A4gKBmoAyBQtVOAcNEZ4ZoofhSQ
ABcNbKSKI3XIZlxsorhzmxIIWOPTXqBUcSIcOWVXwgJXrFNWWSCZ9MpgjhRQyh5O
PWHcjd3BUsVsMxDgFUwOsmOGjJ0J4KMTf+2UH5SyhURjLDoqwQAL4IAyVlkPzcXY
BH3YQ89sBSFy0ZvgsVbVekIYiWcJB/T1EFKDoTflnxMEak4TGThBwJGI6qDAAQZU
WukBB4wY6aacdurpp1xEAAA7

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=o.gif
Content-Type: image/gif; name=o.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/o.gif
Content-Transfer-Encoding: Base64

R0lGODlhMgA5ALMAAAwMDBgYGCEhISkpKTExMT09PV5eXpSUlL29vc7OztbW1t7e
3ufn5+/v7/f39////ywAAAAAMgA5AAAE/vDJSaulqGiizblgKFbJQQyooHIVcnhj
TDlmOgQCrhYTUw+EjyyWOQ1UOJ2A96ARVALgcPSD6gLYgKFpeEKjiOnldbJic2eB
IVE4Rr+GsJhSMKrc6TPH/YYWhHMPDXhfWVlfUHxRBFtzCl2IaGhJhkhIaQRzDgYp
lpOGeaCHQAtTj16RiGl8oIkCcjIHdYqpbwMGBrVRRwOwIw52qkp3AwcODJ1vw71D
nLRmX38TN0rDYDINqLU6QAcME0/ViAMJRJx9kToFBgsOFOGpKAMKMW1WffIrINrx
9CNPN+4ITBEERAFhXwa4E8GgDIpDKwgQ8FUBlZc0AjJR6RRQyQkC/t/25eijRwpD
L4TGAbKwIOU9FiK6HLnoaQCTCzSAQBwZZeUFSIoUMRJx4CFGHQVDOLCXw43TpCDY
lBEosADFCgc8kURxE4RMXUNDNGAaZRlUg+F4YSwmIsFUXk6jLAQBjFciLChAikCQ
zNWiEQj44bM5d8xUNHzChmgjGI6IBTKfqYjzj2rCjD5btDmyDIUBfyAWoLLG6yoF
WX2b9hTxSNEwHF1/HsYYpVwISFrxmaYQWbIA24ZTK0ER8jbNSMwMygv4xYjGmMEu
4SAAnMTHJOgAxpbdGEdyzZKHsx3hLCicqxLNYDcCpLBXgA9VKZ6gHhSvdbHs7Uz0
3YD+ssuApOHeYqx0xBM6V2jFzW5e3eAgRAlSdZQtS8zRUEIThnLGGUDwYsCAMYxG
jSQ85XGJXRMF8kAX2kQoCW1YoNJIIHWRNElTlLyoxIwq1kHhJzvhVRODMjxyIImV
jJMLYSpWlJoqhexiQHFNTuAfPzkm4lxmVVopUV9BcYBAAyB2+QADVybDBxD4mfkL
Av7VIREHuIDmpgwOIKCnnnf26eefgAYqQwQAADs=

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=k.gif
Content-Type: image/gif; name=k.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/k.gif
Content-Transfer-Encoding: Base64

R0lGODlhNQA5ALMAABERESEhISsrKzU1NT8/P09PT3JycrW1tePj4+7u7vj4+P//
/////////////////ywAAAAANQA5AAAE/nDJ9aq97xTCiy+GcWAksnEEeFDP5JKY
MRDDINBFTTBwhRi0mS51QLgmPUsuKKjNaImkhiC4BVOpoySZodGaziciaTh5hSgt
qzcV2gJNaG9xCt9mHjUXWIvbmGsYbX5PKQV6bDlDAR1VBGQbYTZCIIgwfFVNVgNL
SUwcOpwEBw6WJJEBATN3dwWeVaJBnAVRphcLNZFOsBwjMEtDhQQGFbYWBzqaNalL
gRZ0YSgeM2MtWj0GYLuZcT05VXBDHc/Xv25UN5o3JAvImZO7BdXWR95fTap2xIIb
3PhOBRqQqwcjSDgbygZEuYCAypU/KARgMPbAxDZwcDw4uKBA1wA4/qqspJhYLgao
d+qGXUiACd87aSQJXjggQ4AqOOhgrTng0GaqPiJBxHxhksobRjcDuKogYwZIbh1S
LLxV0gINRjbVgSHwAxQHMP0oyYNhq8EyfDczXUWX7yChUXOqZti1CmFWu3DUrcqX
ggdZuR+oMBKX9w0ooAif+P0rs4KVrQhDIg1n1AvYAgq42LL88aQ2AgEAfMnYB4+v
JJv7oPjj72OfVI5sLOVCj6jVK+kijw6nTCTtgbYrXBUy+KdPbgVUeRH6uzaSYxGr
FEApWGsHBhubF6vq4d1eTalO1jCQWTvVxjmmq1b7UjZc8+eD5+CtdZLlOPvgb5fZ
QNFVm5FN/uLPDbPBZ0lDhQ0H3neqHaKfc1sw9dFTdrhk032cPGjJfBdO+EZWeb1E
hEDmbejaEyDBltgq6dwggoHlMOCRDQAUAgYYygk4UonXsHQULAJGwVMoegHEYz1T
gMYiLBJV8E1d6HzUxGm06RGJI/d0UwFLSzChmkrNWXnST7I8Ah1dQOKhnZWRZULf
BQwYhVg0i2mmBQN4vQagmRaYYNSNhxWImhYJKJKblPlg0BGGd3iRnZ1HYGJXYk2Q
MKSITgwzT1xHfJOXilbk90w2dEmpg6iMuSCeHX9QecEVX6CJ6lATPAkZLAW4eiYn
k0qzKa0SuJMLWDQYMBUGZuEGpBe6VwKHRBvR9MWFB15IgwIRnAbXQBnUBkSbBuKE
Mt6vzka4EgIIHHBsDxY9Ec14JLIj14MPAOHQEBvMGt9z9FpQ6LWnljdoY/3WexgV
BsQ7cHAFd/VBs4xFAAA7

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=m.gif
Content-Type: image/gif; name=m.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/m.gif
Content-Transfer-Encoding: Base64

R0lGODlhQwA4ALMAAAgICBgYGCEhISkpKTExMT09PVZWVouLi7W1tb29vcbGxtbW
1ufn5+/v7/f39////ywAAAAAQwA4AAAE/vDJSStFZBSyeTmIJVpHUWgaQRxj2xrq
IA9qxi2upWTCIPQyFSuXg81mtuSQeDD6TjJBLER80aS/bCBpqD5gBCktMwj4BoaG
V1T4abI9m8DkTQoC+GyM0F1foj2BbkAbdVBhUVFmfH4UBj53WgFuHgRVC0BkP2GT
PR+NEguaeYBSYSdEBidAPhyCUgVUjWBXYiqbQZYuDRszP2ZSizQFDKAPbZCmyVkd
OVClmWFufbPIWUedNEEuj2baeayeBAnGHR1xk8JJLbxIgr5YMuSgJq1Aga1kGS29
bp2D8VQUa5RADBxKPSa1KjAiATw3kJAsNHZAWzxtQc6kGHGAg71X/qxOqABV4gyi
SGXOsNJlIcxJhb9yJaLX5lYnaZG8IRLhpI0YmFBWguJQ419KTfkYVkBwCJC3REfm
NFplTaU0QCYrGNBzCxIPbScZ+VnVaoyJOSkV2nBAoV9URMlO0qDmRaKMmq6e6OtR
gQAwSn5THrS4pEpFexYT1sD7Q6kEByfvJDLzlBUNWVVg2EokBorPXI5slFE4+pdk
jAMUrGk3RowPYFvi+I1DgQflU//eoZXi51EMRWXwhYskYIIqTrGj/vobb6zIiBrf
/T0zoZcMAIFhLQ/krdCaQ1evncvFg6UMtfnGBI5OdOyRfHcKNHg0B84MCVvfB/+B
IaLoYX7I/oYIMJ8cphIWDPXj0TV8rIIFRHMFqFJwrUjQATBHWKJCGzq5gYNHfukT
BF05MBBDIHDpsgFx56lAnxaSCdBHDSce8YkXDpExoQYWJnSPKUG9IsOMV/iSyzxE
MLXif09YCF2M18SGzwATWKbcAGpUseI9vwmg2gM1GPkjD3FIsUR6iEnlxSE/wTEB
mQG4dcci/shY21MhdrbGLWVu9qZH/g0XiHcTSBRHEI7lUJFt9mTg2AYrwmOkSiS+
B+gWJPKDFYJzUNPVlAChyNJjGyIaBQE4aGnRGcgQMNAxb6UVhBs3TtCRCTWgiOUl
e+zGQ6IL7oeSjgMUht8wGXiziRdg/mwyWKKQSmMbTI5aIAqN0VZLBANgkKkRGm0d
OKZLBGAmQUkGPUhDFf2dmuwYdDlKHKjAiNCRHMOARoR1LqlnAmZbHuosEmyQaxCi
VSyGRak81pZsPABA2HBfz4BlVsJLJtNiBWyeR+E0BcOxl1gudNArRuNwbEeoEVrA
lEmeZIQkPxsS1QauxPSF1E+CmXvubxkd4rMFGf9mQ6IWynXSISM4Ma4MbDkTZllj
GAsmIr89U8DMoenY2DpM4JqCa7tqdZfGNbyqQ65X7IF0Cw4YoAqkHWQqAQIliGZC
rSMwkHcSGdjNbhOpZib3l6sZcMABhRvj+OOQRy755JRXPkEEAQAAOw==

------------As25EEThP5cotakxnjg9wx
Content-Disposition: inline; filename=5.gif
Content-Type: image/gif; name=5.gif
Content-Location: http://users.telenet.be/kim1-6502/6502/fbokpics/5.gif
Content-Transfer-Encoding: Base64

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