Appendix F

SUPERMON For PET


The following monitor extensions are the work of several programmers and were previously published in COMPUTE! Magazine. (See the copyright page for references.)

Here is the legendary Supermon - a version for Upgrade (3.0 or "New ROM") and 4.0 PETS, all keyboards, all memory sizes, 40 or 80 column screens. You need not yet know how to program in machine language (ML) to enter this program - or to use it. In fact, exploring with Supermon, you will find that the mysterious world of your computer's own language becomes gradually understandable. You will find yourself learning ML.

     Many ML programmers with PET/CBM machines feel that Supermon is the essential tool for developing programs of short to medium length. All Upgrade and 4.0 machines have a "resident" monitor, a program within the computer's ROM which allows you to type SYS 1024 and see the registers, load and save and run MI. programs, or see a memory dump (a list of numbers from the computer's memory cells). But to program or analyze ML easily, disassembler, assembler, hunt, and single-step functions are all practical necessities. Supermon provides these and more.

     Even if you've never assembled a single instruction and don't know NOP from ROL, this appendix will lead you step-by-step through the entry and SAVE of Supermon.

How To Enter Supermon

      1. Type in the BASIC program (Program 1). It is the same for all versions. Then save it normally by typing SAVE "CONTROL". This program will be used later to automatically find your memory size,

transfer Supermon to the top, and report to you the SYS address you use to activate it.

      2. Now the hard part: type SYS 1024 which enters you into the machine language monitor. You will see something like the following:

Figure 1.

      B*
          PC  IRQ  SR AC XR YR SP
      .; 0401 E455 32 04 5E 00 EE

Then type: M 0600 0648 and you will see something similar to this (the numbers will be different, but we are going to type over them which, after hitting RETURN on each line, will enter the new numbers into the computer's memory):

Figure 2.

.M 0600 0648
.. 0600 28 58 FF FF 00 0B 06 AD
.. 0608 FF FC 00 21 06 03 AD A9
.. 0610 CB 85 1F A9 0C 85 20 A5
.. 0618 34 85 21 A5 35 85 22 A0
.. 0620 00 93 06 06 DO 16 20 38
.. 0628 06 F0 11 85 23 20 38 06
.. 0630 18 65 34 AA A5 23 65 35
.. 0638 20 43 06 8A 20 43 06 20
.. 0640 50 06 90 DB 60 EA EA A5
.. 0648 1F D0 02 C6 20 C6 1F B1

 

We have divided Supermon into 21 blocks with 80 hexadecimal numbers per block to make typing easier. There is a final, shorter block with 64 numbers. Type right over the numbers on the screen so that line 0600 looks like it does in Program 2. Then hit RETURN and cursor over to the A5 on line 0608. (Set a TAB to this position if your keyboard has a TAB key.) Then type over the numbers in this line and so on. When you have finshed typing your RETURN on line 0648, type in: M 0650 0698 and the next block will appear for you to type over. Continue this way until you finish entering the new version of line OCC8 at the end. (Hope that no lightning or fuses blow.)

     3. If you have Upgrade ROMs, you will need to correct the lines listed in Program 3 at this point. To change line 06DO, simply type M 06D0 06D0 and it will appear so that you can type over it and RETURN as in step 2.

     4. Now Supermon is in your memory and you must SAVE it. Hit RETURN so that you are on a new line and type: S"SUPERMON", 01,0600,000C (to SAVE to tape) or type: S"O:SUPERMON",08,0600,000C (to SAVE to disk drive 0).

     5. Finally, you will want to use the Checksum program to see if you made any errors during the marathon. You probably did, but to make it as painless as possible, the Checksum program will flash through your Supermon and let you know which blocks need to be corrected. So, type in Program 4 (or if you have Upgrade ROMs, use the first three lines from Program 5). SAVE Checksum just in case. Then LOAD "SUPERMON" (an ordinary LOAD as with a BASIC program will slide it in starting at address 1536, above the end of Checksum). Then RUN. Incorrect blocks will be announced. When you know where the errors are, type SYS 1024 and then M XXXX XXXX for the starting and ending addresses of the bad block. Check the numbers against Program 2 (or Program 3) and in all corrections. If, despite everything, you cannot find an error within a block, make sure that the corresponding number within the DATA statement of the Checksum program is correct. Then SAVE the good version "SUPERMON1" as in step 4.

     6. Your reward is near. LOAD "CONTROL" and then LOAD SUPERMON1. Then type RUN and hold your breath. If all goes well, you should see:


Figure 3.

     SUPERMON4!

         DISSASSEMBLER BY WOZNIAK/BAUM
           SINGLE STEP
 BY JIM RUSSO
 MOST OTHER STUFF ,BY BILL SEILER

 TIDIED & WRAPPED BY JIM BUTTERFIELD

 LINK TO MONITOR -- SYS 31283

 SAVE WITH MLM:
.S "SUPERMON",01,7A33,8000
 READY.

And you should be able to use all the commands listed in the Supermon Summary. If some, or all, of the commands fail to function, check the last, short block of code to see if there are any errors.

     After Supermon is relocated to the top of your memory, use a ML SAVE to save it in its final form. Instructions are on screen after RUN.


SUPERMON SUMMARY

COMMODORE MONITOR INSTRUCTIONS:
G GO RUN
L LOAD FROM TAPE OR DISK
M MEMORY DISPLAY
R REGISTER DISPLAY
S SAVE TO TAPE OR DISK
X EXIT TO BASIC

SUPERMON ADDITIONAL INSTRUCTIONS:
A SIMPLE ASSEMBLER
D DISASSEMBLER
F FILL MEMORY
H HUNT MEMORY
I SINGLE INSTRUCTION
P PRINTING DISASSEMBLER
T TRANSFER MEMORY
SUPERMON WILL LOAD ITSELF INTO THE
TOP OF MEMORY .. WHEREVER THAT HAPPENS
TO BE ON YOUR MACHINE.
   YOU MAY THEN SAVE THE MACHINE CODE
FOR FASTER LOADING IN THE FUTURE.
BE SURE TO NOTE THE SYS COMMAND WHICH
LINKS SUPERMON TO THE COMMODORE
MONITOR.

 SIMPLE ASSEMBLER
.A 2000 LDA #$12
.A 2002 STA $8000,X
.A 2005 (RETURN)

.

IN THE ABOVE EXAMPLE THE USER STARTED ASSEMBLY AT 2000 HEX. THE FIRST INSTRUCTION WAS LOAD A REGISTER WITH IMMEDIATE 12 HEX THE SECOND LINE THE USER DID NOT NEED TO TYPE THE A AND ADDRESS. THE SIMPLE ASSEMBLER PROMPTS WITH THE NEXT ADDRESS. TO EXIT THE ASSEMBLER TYPE A RETURN AFTER THE THE ADDRESS PROMPT. SYNTAX IS THE SAME AS THE DISASSEMBLER OUTPUT.

  DISASSEMBLER
.D 2000
(SCREEN CLEARS)
., 2000 A9 12          LDA #$12
., 2002 9D 00 80       STA $8000,X
., 2005 AA             TAX
., 2006 AA             TAX
(FULL PAGE OF INSTRUCTIONS)
     DISASSEMBLES 2.2 INSTRUCTIONS STARTING AT 2000 HEX. THE THREE BYTES FOLLOWING THE ADDRESS MAY BE MODIFIED.
USE THE CRSR KEYS TO MOVE TO AND MODIFY THE BYTES. HIT RETURN AND THE BYTES IN MEMORY WILL BE CHANGED. SUPERMON WILL THEN DISASSEMBLE THAT PAGE AGAIN.

 PRINTING DISASSEMBLER
.P 2000,2040
2000 A9 12        LDA #$12
2002 9D 00 80     STA $8000,XY.
2005 AA           TAX

   ....
203F A2 00        LDX #$00
TO ENGAGE PRINTER, SET UP BEFOREHAND:
     OPEN 4,4:CMD4
ON 4.0, ACCESS THE MONITOR VIA A CALL
SYS 54386 (*NOT* A BREAK) COMMAND

SINGLE STEP
.I
     ALLOWS A MACHINE LANGUAGE PROGRAM
TO BE RUN STEP BY STEP.
CALL REGISTER DISPLAY WITH R AND SET
THE PC ADDRESS TO THE DESIRED FIRST
INSTRUCTION FOR SINGLE STEPPING.
THE I WILL CAUSE A SINGLE STEP TO
EXECUTE AND WILL DISASSEMBLE THE NEXT.
CONTROLS:
  < FOR SINGLE STEP;
  RVS FOR SLOW STEP;
  SPACE FOR FAST STEPPING;
  STOP TO RETURN TO MONITOR.
[ON BUSINESS KEYBOARDS—
      USE 8,-,6 AND STOP].

 FILL MEMORY
.F 1000 1100 FF
     FILLS THE MEMORY FROM 1000 HEX TO
1100 HEX WITH THE BYTE FF HEX.

 GO RUN
.G
     GO TO THE ADDRESS IN THE PC
REGISTER DISPLAY AND BEGIN RUN CODE.
ALL THE REGISTERS WILL BE REPLACED
WITH THE DISPLAYED VALUES.
.G 1000
     GO TO ADDRESS 1000 HEX AND BEGIN
RUNNING CODE.

HUNT MEMORY
.H C000 D000 'READ
     HUNT THRU MEMORY FROM COOO HEX TO
D000 HEX FOR THE ASCII STRING READ AND
PRINT THE ADDRESS WHERE IT IS FOUND. A
MAXIMUM OF 32 CHARACTERS MAY BE USED.
.H C000 D000 20 D2 FF
     HUNT MEMORY FROM C000 HEX TO D000
HEX FOR THE SEQUENCE OF BYTES 20 D2 FF
AND PRINT THE ADDRESS. A MAXIMUM OF 32
BYTES MAY BE USED.

 LOAD
.L
   LOAD ANY PROGRAM FROM CASSETTE #1.
.L "RAM TEST"
   LOAD FROM CASSETTE #1 THE PROGRAM
NAMED RAM TEST.
.L "RAM TEST",08
 LOAD FROM DISK (DEVICE 8) THE PROGRAM
NAMED RAM TEST.
THIS COMMAND LEAVES BASIC POINTERS UNCHANGED.

 MEMORY DISPLAY
.M 0000 0080
.:  0000 00 01 02 03 04 05 06 07
.:  0008 08 09 0A 0B 0C 0D 0E 0F

     DISPLAY MEMORY FROM 0000 HEX TO
0080 HEX. THE BYTES FOLLOWING THE .:
CAN BE ALTERED BY TYPING OVER THEM
THEN TYPING A RETURN.

 REGISTER DISPLAY
.R
     PC  IRQ  SR AC XR YR SP
.;  0000 E62E 01 02 03 04 05
     DISPLAYS THE REGISTER VALUES SAVED
WHEN SUPERMON WAS ENTERED.  THE VALUES
MAY BE CHANGED WITH THE EDIT FOLLOWED
BY A RETURN.
  USE THIS INSTRUCTION TO SET UP THE
PC VALUE BEFORE SINGLE STEPPING WITH
.I

 SAVE
.S "PROGRAM NAME",01,0800,0C80
     SAVE TO CASSETTE #1 MEMORY FROM
0800 HEX UP TO BUT NOT INCLUDING 0C80
HEX AND NAME IT PROGRAM NAME.
.S "O:PROGRAM NAME",08,1200,1F50
    SAVE TO DISK DRIVE #0 MEMORY FROM
1200 HEX UP TO BUT NOT INCLUDING 1F50
HEX AND NAME IT PROGRAM NAME.

 TRANSFER MEMORY
.T 1000 1100 5000
     TRANSFER MEMORY IN THE RANGE 1000
HEX TO 1100 HEX AND START STORING IT AT
ADDRESS 5000 HEX.

 EXIT TO BASIC
.X
     RETURN TO BASIC READY MODE.
THE STACK VALUE SAVED WHEN ENTERED WILL
BE RESTORED.  CARE SHOULD BE TAKEN THAT
THIS VALUE IS THE SAME AS WHEN THE
MONITOR WAS ENTERED. A CLR IN
BASIC WILL FIX ANY STACK PROBLEMS.

Program 1. CONTROL.

100 PRINT"{CLEAR}{02 DOWN}{REV} SUP
    ERMON!!"
110 PRINT"{DOWN}     DISSASSEMBLER ~
    {REV}D{OFF} BY WOZNIAK/BAU
    M
120 PRINT"       SINGLE STEP {REV}I
    {OFF} BY JIM RUSSO
130 PRINT"MOST OTHER STUFF {REV},HA
    LT{OFF} BY BILL SEILER
150 PRINT"{DOWN}TIDIED & WRAPPED BY
     JIM BUTTERFIELD"
170 L=PEEK(52)+PEEK(53)*256:SYS1536
    :M=PEEK (33) :N=PEEK (34)
180 POKE52,M:POKE53,N:POKE48,M:POKE
    49,N:N=M+N*256
210 PRINT"{02 DOWN}LINK TO MONITOR ~
    -- SYS";N
220 PRINT:PRINT"SAVE WITH MLM:"
230 PRINT".S ";CHR$(34);"SUPERMON";
    CHR$(34);",01";:X=N/4096:G
    OSUB250
240 X=L/4096:GOSUB250:END
250 PRINT",";:FORJ=1TO4:X%=X:X=(X-X
    %)*16:IFX%>9THENX%=X%+7
260 PRINTCHR$(X%+48);:NEXTJ:RETURN

Program 2. SUPERMON 4.0

.
.: 0600 A9 CB 85 1F A9 0C 85 20
.: 0608 A5 34 85 21 A5 35 85 22
.: 0610 A0 00 20 38 06 D0 16 20
.: 0618 38 06 F0 11 85 23 20 38
.: 0620 06 18 65 34 AA A5 23 65
.: 0628 35 20 43 06 8A 20 43 06
.: 0630 20 50 06 90 DB 60 EA EA
.: 0638 A5 1F D0 02 C6 20 C6 1F
.: 0640 Bl 1F 60 48 A5 21 D0 02
.: 0648 C6 22 C6 21 68 91 21 60
.: 0650 A9 80 C5 1F A9 06 E5 20
.: 0658 60 AA AA AA AA AA AA AA
.: 0660 AA AA AA AA AA AA AA AA
.: 0668 AA AA AA AA AA AA AA AA
.: 0670 AA AA AA AA AA AA AA AA
.: 0678 AA AA AA AA AA AA AA AA
.: 0680 AD FE FF 00 85 34 AD FF
.: 0688 FF 00 85 35 AD FC FF 00
.: 0690 8D FA 03 AD FD FF 00 8D
.: 0698 FB 03 00 00 A2 08 DD DE
.: 06A0 FF 00 D0 0E 86 B4 8A 0A
.: 06A8 AA BD E9 FF 00 48 BD E8
.: 06B0 FF 00 48 60 CA 10 EA 40
.: 06B8 9A FA 00 A2 02 20 A2 00
.: 06C0 00 B4 FB D0 08 B4 FC D0
.: 0608 02 E6 DE D6 FC D6 FB 60
.: 06D0 20 98 D7 C9 20 F0 F9 60
.: 06D8 A9 00 00 8D 00 00 01 20
.: 06E0 79 FA 00 20 6B D7 20 57
.: 06E8 D7 90 09 60 20 98 D7 20
.: 06F0 54 D7 B0 DE AE 06 02 9A
.: 06F8 40 A4 D7 20 31 D5 CA D0
.: 0700 FA 60 E6 FD D0 02 E6 FE
.: 0708 60 A2 02 B5 FA 48 BD 0A
.: 0710 02 95 FA 68 9D 0A 02 CA
.: 0718 D0 Fl 60 AD 0B 02 AC 0C
.: 0720 02 40 CE FA 00 A5 FD A4
.: 0728 FE 38 E5 FB 8D 1B 02 98
.: 0730 E5 FC A8 0D 1B 02 60 20
.: 0738 81 FA 00 20 44 D7 20 92
.: 0740 FA 00 20 AF FA 00 20 92
.: 0748 FA 00 20 CA FA 00 20 44
.: 0750 D7 90 15 A6 DE D0 65 20
.: 0758 01 FA 00 90 60 Al FB 81
.: 0760 FD 20 A8 FA 00 20 39 D5
.: 0768 D0 EB 20 01 FA 00 18 AD
.: 0770 1B 02 65 FD 85 FD 98 65
.: 0778 FE 85 FE 20 AF FA 00 A6
.: 0780 DE D0 3D Al FB 81 FD 20
.: 0788 01 FA 00 B0 34 20 65 FA
.: 0790 00 20 68 FA 00 40 1B FB
.: 0798 00 20 31 FA 00 20 44 D7
.: 07A0 20 92 FA 00 20 44 D7 20
.: 07A8 98 D7 20 63 D7 90 14 85
.: 07B0 B5 A6 DE D0 11 20 CA FA
.: 07B8 00 90 0C A5 B5 81 FB 20
.: 07C0 39 D5 D0 EE 4C 9A FA 00
.: 0708 40 BA D4 20 81 FA 00 20
.: 07D0 44 D7 20 92 FA 00 20 44
.: 07D8 D7 20 98 D7 A2 00 00 20
.: 07E0 98 D7 C9 27 D0 14 20 98
.: 07E8 D7 9D 10 02 E8 20 CF FF
.: 07F0 C9 0D F0 22 E0 20 D0 Fl
.: 07F8 F0 1C 8E 00 00 01 20 6B
.: 0800 D7 90 C6 9D 10 02 E8 20
.: 0808 CF FF C9 0D F0 09 20 63
.: 0810 D7 90 B6 E0 20 D0 EC 86
.: 0818 B4 20 34 D5 A2 00 00 A0
.: 0820 00 00 Bl FB DD 10 02 D0
.: 0828 0C C8 E8 E4 B4 D0 F3 20
.: 0830 17 D7 20 31 D5 20 39 D5
.: 0833 A6 DE D0 92 20 CA FA 00
.: 0840 B0 DD 4C BA D4 20 81 FA
.: 0848 00 8D 0D 02 A5 FC 8D 0E
.: 0850 02 A9 04 A2 00 00 8D 09
.: 0858 02 8E 0A 02 A9 93 20 D2
.: 0860 FF A9 16 85 B5 20 06 FC
.: 0868 00 20 64 FC 00 85 FB 84
.: 0870 FC C6 B5 D0 F2 A9 91 20
.: 0878 D2 FF 4C BA D4 A0 2C 20
.: 0880 79 D5 20 17 D7 20 31 D5
.: 0888 A2 00 00 Al FB 20 74 FC
.: 0890 00 48 20 BB FC 00 68 20
.: 0898 D3 FC 00 A2 06 E0 03 D0
.: 08A0 13 AC 1C 02 F0 0E A5 FF
.: 08A8 C9 E8 Bl FB B0 1C 20 5C
.: 08B0 FC 00 88 D0 F2 06 FF 90
.: 08B8 0E BD 51 FF 00 20 45 FD
.: 08C0 00 BD 57 FF 00 F0 03 20
.: 08C8 45 FD 00 CA D0 D4 60 20
.: 08D0 68 FC 00 AA E8 D0 01 C8
.: 08D8 98 20 5C FC 00 8A 86 B4
.: 08E0 20 22 D7 A6 B4 60 AD 1C
.: 08E8 02 38 A4 FC AA 10 01 88
.: 08F0 65 FB 90 01 C8 60 A8 4A
.: 08F8 90 0B 4A B0 17 C9 22 F0
.: 0900 13 29 07 09 80 4A AA BD
.: 0908 00 FF 00 B0 04 4A 4A 4A
.: 0910 4A 29 0F D0 04 A0 80 A9
.: 0918 00 00 AA BD 44 FF 00 85
.: 0920 FF 29 03 8D 1C 02 98 29
.: 0928 8F AA 98 A0 03 E0 8A F0
.: 0930 0B 4A 90 08 4A 4A 09 20
.: 0938 88 D0 FA C8 88 D0 F2 60
.: 0940 Bl FB 20 5C FC 00 A2 01
.: 0948 20 Al FA 00 CC 1C 02 C8
.: 0950 90 F0 A2 03 CC 09 02 90
.: 0958 F0 60 A8 B9 5E FF 00 8D
.: 0960 0B 02 B9 9E FF 00 8D 0C
.: 0968 02 A9 00 00 A0 05 0E 0C
.: 0970 02 2E 0B 02 2A 88 D0 F6
.: 0978 69 3F 20 D2 FF CA D0 EA
.: 0980 4C 31 D5 20 81 FA 00 20
.: 0988 44 D7 20 92 FA 00 20 44
.: 0990 D7 A9 04 A2 00 00 8D 09
.: 0998 02 8E 0A 02 20 34 D5 20
.: 09A0 0B FC 00 20 64 FC 00 85
.: 09A8 FB 84 FC 20 35 F3 F0 05
.: 09B0 20 CA FA 00 B0 E9 4C BA
.: 09B8 D4 20 81 FA 00 A9 03 85
.: 09C0 B5 20 98 D7 20 0B D5 D0
.: 09C8 F8 AD 0D 02 85 FB AD 0E
.: 09D0 02 85 FC 4C E7 FB 00 CD
.: 09D8 0A 02 F0 03 20 D2 FF 60
.: 09E0 A9 03 A2 24 8D 09 02 8E
.: 09E8 0A 02 20 34 D5 78 AD FA
.: 09F0 FF 00 85 90 AD FB FF 00
.: 09F8 85 91 A9 A0 8D 4E E8 CE
.: 0A00 13 E8 A9 2E 8D 48 E8 A9
.: 0A08 00 00 8D 49 E8 AE 06 02
.: 0A10 9A 4C 55 D6 20 C0 FC 68
.: 0A18 8D 05 02 68 8D 04 02 68
.: 0A20 8D 03 02 68 8D 02 02 68
.: 0A28 8D 01 02 68 8D 00 00 02
.: 0A30 BA 8E 06 02 58 20 34 D5
.: 0A38 20 23 D5 85 B5 A0 00 00
.: 0A40 20 FE D4 20 31 D5 AD 00
.: 0A48 00 02 85 FC AD 01 02 85
.: 0A50 FB 20 17 D7 20 0E FC 00
.: 0A58 20 35 F3 C9 F7 F0 F9 20
.: 0A60 35 F3 D0 03 4C BA D4 C9
.: 0A68 FF F0 F4 4C 5B FD 00 20
.: 0A70 81 FA 00 20 44 D7 8E 11
.: 0A78 02 A2 03 20 79 FA 00 48
.: 0A80 CA D0 F9 A2 03 68 38 E9
.: 0A88 3F A0 05 4A 6E 11 02 6E
.: 0A90 10 02 88 D0 F6 CA D0 ED
.: 0A98 A2 02 20 CF FF C9 0D F0
.: 0AA0 lE C9 20 F0 F5 20 F7 FE
.: 0AA8 00 B0 0F 20 78 D7 A4 FB
.: 0AB0 84 FC 85 FB A9 30 9D 10
.: 0AB8 02 E8 9D 10 02 E8 D0 DB
.: 0AC0 8E 0B 02 A2 00 00 86 DE
.: 0AC8 F0 04 E6 DE F0 7B A2 00
.: 0AD0 00 86 B5 A5 DE 20 74 FC
.: 0AD8 00 A6 FF 8E 0C 02 AA BC
.: 0AE0 5E FF 00 BD 9E FF 00 20
.: 0AE8 E0 FE 00 D0 E2 A2 06 E0
.: 0AF0 03 D0 lA AC 1C 02 F0 15
.: 0AF8 A5 FF C9 E8 A9 30 B0 21
.: 0B00 20 E6 FE 00 D0 CA 20 E8
.: 0B08 FE 00 D0 C5 88 D0 EB 06
.: 0B10 FF 90 0B BC 57 FF 00 BD
.: 0B18 51 FF 00 20 E0 FE 00 D0
.: 0B20 B3 CA D0 D0 F0 0A 20 DF
.: 0B28 FE 00 D0 A9 20 DF FE 00
.: 0B30 D0 A4 AD 0B 02 C5 B5 D0
.: 0B38 9D 20 44 D7 AC 1C 02 F0
.: 0B40 2F AD 0C 02 C9 9D D0 20
.: 0B48 20 CA FA 00 90 0B 98 D0
.: 0B50 05 AE 1B 02 10 0B 4C 9A
.: 0B58 FA 00 C8 D0 FA AE 1B 02
.: 0B60 10 F5 CA CA 8A AC 1C 02
.: 0B68 D0 03 B9 FC 00 00 91 FB
.: 0B70 88 D0 F8 A5 DE 91 FB 20
.: 0B78 64 FC 00 85 FB 84 FC A0
.: 0B80 41 20 79 D5 20 17 D7 20
.: 0B88 31 D5 4C D8 FD 00 A8 20
.: 0B90 E6 FE 00 D0 11 98 F0 0E
.: 0B98 86 B4 A6 B5 DD 10 02 08
.: 0BA0 E8 86 B5 A6 B4 28 60 C9
.: 0BA8 30 90 03 C9 47 60 38 60
.: 0BB0 40 02 45 03 D0 08 40 09
.: 0BB8 30 22 45 33 D0 08 40 09
.: 0BC0 40 02 45 33 D0 08 40 09
.: 0BC8 40 02 45 B3 D0 08 40 09
.: 0BD0 00 00 22 44 33 D0 8C 44
.: 0BD8 00 00 11 22 44 33 D0 8C
.: 0BE0 44 9A 10 22 44 33 D0 08
.: 0BE8 40 09 10 22 44 33 D0 08
.: 0BF0 40 09 62 13 78 A9 00 00
.: 0BF8 21 81 82 00 00 00 00 59
.: 0C00 4D 91 92 86 4A 85 9D 2C
.: 0C08 29 2C 23 28 24 59 00 00
.: 0C10 58 24 24 00 00 1C 8A 1C
.: 0C18 23 5D 8B 1B Al 9D 8A 1D
.: 0C20 23 9D 8B 1D Al 00 00 29
.: 0C28 19 AE 69 A8 19 23 24 53
.: 0C30 1B 23 24 53 19 Al 00 00
.: 0C38 1A 5B 5B A5 69 24 24 AE
.: 0C40 AE A8 AD 29 00 00 7C 00
.: 0C48 00 15 9C 6D 9C A5 69 29
.: 0C50 53 84 13 34 11 A5 69 23
.: 0C58 A0 D8 62 5A 48 26 62 94
.: 0C60 88 54 44 C8 54 68 44 E8
.: 0C68 94 00 00 B4 08 84 74 B4
.: 0C70 28 6E 74 F4 CC 4A 72 F2
.: 0C78 A4 8A 00 00 AA A2 A2 74
.: 0C80 74 74 72 44 68 B2 32 B2
.: 0C88 00 00 22 00 00 1A 1A 26
.: 0C90 26 72 72 88 C8 C4 CA 26
.: 0C98 48 44 44 A2 C8 54 46 48
.: 0CA0 44 50 2C 41 49 4E 00 00
.: 0CA8 DB FA 00 30 FB 00 5E FB
.: 0CB0 00 Dl FB 00 F8 FC 00 28
.: 0CB8 FD 00 D4 FD 00 4D FD 00
.: 0CC0 B9 D4 7F FD 00 4A FA 00
.: 0CC8 33 FA 00 AA AA AA AA AA

Program 3. Changes For SUPERMON 3.0.

.: 06D0 20 EB E7 C9 20 F0 F9 60
.
.: 06E0 79 FA 00 20 BE E7 20 AA
.: 06E8 E7 90 09 60 20 EB E7 20
.: 06F0 A7 E7 B0 DE AE 06 02 9A
.: 06F8 4C F7 E7 20 CD FD CA D0
.
.: 0738 81 FA 00 20 97 E7 20 92
.
:. 0748 FA 00 20 CA FA 00 20 97
.: 0750 E7 90 15 A6 DE D0 65 20
.
.: 0760 FD 20 A8 FA 00 20 D5 FD
.
.: 0798 00 20 81 FA 00 20 97 E7
.: 07A0 20 92 FA 00 20 97 E7 20
.: 07A8 EB E7 20 B6 E7 90 14 85
.
.: 07C0 D5 FD D0 EE 4C 9A FA 00
.: 07C8 4C 56 FD 20 81 FA 00 20
.: 07D0 97 E7 20 92 FA 00 20 97
.: 07D8 E7 20 EB E7 A2 00 00 20
.: 07E0 EB E7 C9 27 D0 14 20 EB
.: 07E8 E7 9D 10 02 E8 20 CF FF
.
.: 07F8 F0 1C 8E 00 00 01 20 BE
.: 0800 E7 90 C6 9D 10 02 E8 20
.: 0808 CF FF C9 0D F0 09 20 B6
.: 0810 E7 90 B6 E0 20 D0 EC 86
.: 0818 B4 20 D0 FD A2 00 00 A0
.
.: 0830 6A E7 20 CD FD 20 D5 FD
.
.: 0840 B0 DD 4C 56 FD 20 81 FA
.
.: 0878 D2 FF 4C 56 FD A0 2C 20
.: 0880 15 FE 20 6A E7 20 CD FD
.: 08E0 20 75 E7 A6 B4 60 AD 1C
.
.: 0980 4C CD FD 20 81 FA 00 20
.: 0988 97 E7 20 92 FA 00 20 97
.: 0990 E7 A9 04 A2 00 00 8D 09
.: 0998 02 8E 0A 02 20 D0 FD 20
.
.: 09A8 FB 84 FC 20 01 F3 F0 05
.: 09B0 20 CA FA 00 B0 E9 4C 56
.: 09B8 FD 20 81 FA 00 A9 03 85
.: 09C0 B5 20 EB E7 20 A7 FD D0
.
.: 09E8 0A 02 20 D0 FD 78 AD FA
.
.: 0A10 9A 4C Fl FE 20 7B FC 68
.
.: 0A30 BA 8E 06 02 58 20 D0 FD
.: 0A38 20 BF FD 85 B5 A0 00 00
.: 0A40 20 9A FD 20 CD FD AD 00
.
.: 0A50 FB 20 6A E7 20 0E FC 00
.: 0A58 20 01 F3 C9 F7 F0 F9 20
.: 0A60 01 F3 D0 03 4C 56 FD C9
.
.: 0A70 81 FA 00 20 97 E7 8E 11
.
.: 0AA8 00 B0 0F 20 CB E7 A4 FB
.
.: 0B38 9D 20 97 E7 AC 1C 02 F0
.
.: 0B80 41 20 15 FE 20 6A E7 20
.: 0B88 CD FD 4C D8 FD 00 A8 20
.
:. 0CC0 55 FD 7F FD 00 4A FA 00

Program 4. SUPERM0N 4.0 Checksum.

100 REM SUPERMON 4 CHECKSUM
110 DATA7331,12186,10071,10387,1082
    9,9175,10314,9823,9715,871
    4,8852
120 DATA8850,9748,7754,10247,10423,
    10948,10075,6093,5492,7805
    :S=1536
130 FORB=1TO21:READX:FORI=STOS+79:14
    =PEEK (I) : Y=Y+N
140 NEXTI:IFY<>XTHENPRINT"ERROR IN "'
    BLOCK #"B:GOTO160
150 PRINT"BLOCK. #"B" IS CORRECT"
160 S=I:Y=0:NEXTB:PRINT"CHECK THE F
    INAL, SHORT BLOCK BY HAND"


Program 5. Changes For SUPERMON 3.0 Checksum.

100 REM SUPERMON 3 CHECKSUM
110 DATA7331,12186,10467,10880,1112
    4,10005,10906,10196,9951,8
    813
120 DATA8852,9329,10239,8457,10334,
    10423,11047,10311,6093,549
    2,7805:S=1536


PET MICROMON
An Enhanced Machine
Language Monitor


Micromon is for Upgrade and 4.0 BASICs, all memory sizes, all keyboards and is in the public domain. If you have enough memory, you can add the additional commands of "Micromon Plus" as well. "Plus" is from $51300 to $5F48 and you will want to move Micromon from $1000 up to $6000.

There is quite a bit of typing here so there are two checksum programs which will find and flag any errors. See the instructions for typing in Supermon.


Micromon Instructions

SIMPLE ASSEMBLER

     .A 2000 LDA #$12
     .A 2002 STA $8000,X
     .A 2005 DEX:GARBAGE

In the above example, the user started assembly at 2000 hex. The first instruction was load a register with immediate 12 hex. In the second line the user did not need to type the A and address. The simple assembler retypes the last entered line and prompts with the next address. To exit the assembler, type a return after the address prompt. Syntax is the same as the Disassembler output. A colon (:) can be used to terminate a line.

BREAK SET

     .B 1000 00FF

The example sets a break at 1000 hex on the FF hex occurrence of the instruction at 1000. Break set is used with the QUICK TRACE command. A BREAK SET with count blank stops at the first occurrence of the break address.

COMPARE MEMORY

     .C 1000 2000 C000

Compares memory from hex 1000 to hex 2000 to memory beginning at hex 0000. Compare will print the locations of the unequal bytes.

DISASSEMBLER

     . D 2000 3000
     ., 2000 A9 12  LDA #$12
     ., 2002 9D 00 80 STA $8000,X
     ., 2005 AA TAX

Disassembles from 2000 to 3000. The three bytes following the address may be modified. Use the CRSR KEYS to move to and modify the bytes. Hit return and the bytes in memory will be changed. Micromon will then disassemble that line again.

     Disassembly can be done under the control of the cursor. To disassemble one at a time from $1000.

     . D 1000

If the cursor is on the last line, one instruction can be disassembled for each pressing of the cursor down key. If it is held down, the key will repeat and continuous disassembly will occur. Disassembly can even be in reverse! If the screen is full of a disassembly listing, place the cursor at the top line of the screen and press the cursor up key.

EXIT MICROMON

     .E

Combine the killing of Micromon and exit to BASIC.

FILL MEMORY

     .F 1000 1100 FF

Fills the memory from 1000 hex to 1100 hex with the byte FF hex.

GO RUN

     .G

Go to the address in the PC Register display and begin run code. All the registers will be replaced with the displayed values.

     .G 1000

Go to address 1000 hex and begin running code.

HUNT MEMORY

     .H 0000 D000 'READ

Hunt through memory from 0000 hex to D000 hex for the ASCII string "read" and print the address where it is found. Maximum of 32 characters may be used.

     .H 0000 D000 20 D2 FF

Hunt memory from 0000 hex to D000 hex for the sequence of bytes 20 D2 FF and print the address. A maximum of 32 bytes may be used. Hunt can be stopped with the STOP key.

KILL MICROMON

     .K

Restore the Break vector and IRQ that was saved before Micromon was called and break into the TIM monitor. A return to Micromon can be done with a Go to the value in the PC register.

LOAD

     .L "RAM TEST",08

Load the program named RAM TEST from the disk. Note for cassette users: To load or save to cassette. Kill Micromon with the K command to return to the TIM monitor. Then use the TIM monitor L and S commands to load and save to the cassettes. This has to be done because of the repeat keys of Micromon. BASIC 4.0 users then can return to Micromon with a Go command to the PC value, but BASIC 2.0 users should return to BASIC, then SYS to Micromon because the TIM overwrites the IRQ value for loads and saves with a filename.

MEMORY DISPLAY

     .M 0000 0008
     .: 0000 30 31 32 33 34 35 36 37 1234567
     .: 0008 38 41 42 43 44 45 46 47 89ABCDE

Display memory from 0000 hex to 0008 in hex and ASCII. The bytes following the address may be modified by editing and then typing a RETURN.

     Memory display can also be done with the cursor control keys.

NEW LOCATER

     .N 1000 17FF 6000 1000 1FFF
     .N 1FB0 1FFF 6000 1000 1FFF W

The first line fixes all three byte instructions in the range 1000 hex to 1FFF hex by adding 6000 hex offset to the bytes following the instruction. New Locater will not adjust any instruction outside of the 1000 hex to 1FFF hex range. The second line adjusts Word values in the same range as the first line. New Locater stops and disassembles on any bad op code.

CALCULATE BRANCH OFFSET

     .O 033A 033A FE

Calculate the offset for branch instructions. The first address is the starting address and the second address is the target address. The offset is then displayed.

QUICK TRACE

     .Q
     .Q 1000

The first example begins trace at the address in the PC of the register display. The second begins at 1000 hex. Each instruction is executed as in the WALK command, but no disassembly is shown. The Break Address is checked for the break on Nth occurrence. The execution may be stopped by pressing the STOP and = (left arrow on business) keys at the same time.

REGISTER DISPLAY

     .R
     PC IRQ SR AC XR YR SP
     .: 0000 E455 01 02 03 04 05

Displays the register values saved when Micromon was entered. The values may be changed with the edit followed by a RETURN.

SAVE

     .S "1:PROGRAM NAME",08,0800,0C80

Save to disk drive #1 memory from 0800 hex up to, but not including, 0C80 hex and name it PROGRAM NAME. See note in LOAD command for cassette users.

TRANSFER MEMORY

     .T 1000 1100 5000

Transfer memory in the range 1000 hex to 1100 hex and start storing it at address 5000 hex.

WALK CODE

      .W

Single step starting at address in register PC.

     .W 1000

Single step starting at address 1000 hex. Walk will cause a single step to execute and will disassemble the next instruction. Stop key stops walking. The J key finishes a subroutine that is walking, then continues with the walk.

EXIT TO BASIC

     .X

Return to BASIC READY mode. The stack value saved when entered will be restored. Care should be taken that this value is the same as when the monitor was entered. A CLR in BASIC will fix any stack problems. Do not X to BASIC then return to Micromon via a SYS to the cold start address. Return via a SYS to BRK (SYS 1024) or SYS to the Warm start of Micromon (Warm start =Cold start +3). An X and cold start will write over the TIM break vector that was saved.

CHANGE CHARACTER SETS

     .Z

Change from uppercase /graphics to lower/uppercase mode or vice versa.

HEX CONVERSION

     .$4142 16706 A B 0100 0001 0100 0010

A hex number is input and the decimal value, the ASCII for the two bytes, and the binary values are returned. The ASCII control values are returned in reverse.

     Hex conversion can also be scrolled with the cursor control keys.

DECIMAL CONVERSION

     .#16706 4142 A B 0100 0001 0100 0010

A decimal number is input and the hex value, the ASCII for the two bytes, and the binary values are returned.

BINARY CONVERSION

     .%0100000101000010 4142 16706 A B

A binary number is input and the hex value, the decimal number, and the ASCII values are returned.

ASCII CONVERSION

     ."A 41 65 0100 0001

An ASCII character is input and the hex value, decimal value, and binary values are returned. Because of the quote, the control characters can be determined also.

ADDITION

     .+ 1111 2222 3333

The two hex numbers input are added, and the sum displayed.

SUBTRACTION

.-3333 1111 2222

The second number is subtracted from the first number and the difference displayed.

CHECKSUM

     .& A000 AFFF 67E2

The checksum between the two addresses is calculated and displayed.

MICROMON INSTRUCTIONS:

A    SIMPLE ASSEMBLE
B    BREAK SET
C    COMPARE MEMORY D DISASSEMBLER
E    EXIT MICROMON
F    FILL MEMORY
G    GO RUN
H    HUNT MEMORY
K    KILL MICROMON L LOAD
M    MEMORY DISPLAY
N    NEW LOCATER
O    CALCULATE BRANCH
Q    QUICK TRACE
R    REGISTER DISPLAY
S     SAVE
T    TRANSFER MEMORY
W   WALK CODE
X    EXIT TO BASIC
Z    CHANGE CHARACTER SETS
$     HEX CONVERSION
#     DECIMAL CONVERSION
%   BINARY CONVERSION
"    ASCII CONVERSION
+    ADDITION
-     SUBTRACTION
&   CHECKSUM

Micromon also has repeat for all keys.

     Micromon is executed by the following: SYS 4096 as listed in Program 2, where it resides in $1000 to $1FFF.

     For 8032, make the following changes for Micromon operation. In location the X stands for the start of Micromon. Values in hex.


Location
Old Value
New Value
X3E7
X3EC
X3F6
X427
XD18
XDA3
XCFC
XD7B
XE16
XE20
XE24
XE26
XE37
XE46
X681

08
08
08
08
08
08
28
28
83
28
C0
04
27
28
24

10 To display 16 instead
10 of 8 bytes.
10
10
10
10
50 To fix scroll.
50
87
50
80
08
4F
50
00 To print all characters
in Walk command.

Micromon Plus Instructions

PRINTING DISASSEMBLER

     .(Shift) D 1000 1FFF

The same as the Disassembler but no ., printed before each line. Also the ASCII values for the bytes are output at the end of the line.

FORM FEED SET

     .I

Sets a form feed for printout. Gives 57 printed lines per page. Works with the Shift D and Shift M commands.

     .I "Heading"

Sets form feed with a message to be printed at the top of each page.

     .I X

Cancels form feed.

PRINT LOAD ADDRESS

     .J "File name"

Read the load address of the file and print it in hex. Device number 8 is used.

KILL MICROMON ADDITIONS

     .(Shift) K

Kill Micromon and its additions and BRK to the TIM monitor. This is the same as the unshifted K command except now a G command will reinitialize Micromon and the additions.

LOAD FROM DISK

     .(Shift) L "filename"

This is the same as the normal load command except that the disk (device #8) is used as the default, riot the cassette.

PRINTING MEMORY DUMP

     .(Shift) M F000 F100

The same as the normal Memory dump, but does not print the.: and prints out 16 hex bytes and the ASCII for them.

PRINT SWITCHER

     .P

If the output is to the CRT then switch the output to the printer (device #4). If the output is not to the CRT then clear the output device and restore the output to the CRT.

     .P06

Make device #6 the output device if the current output is to the CRT.

SEND TO PROM PROGRAMMER

     .U 06 7000 7FFF

This command will send out bytes to a PROM programmer on the IEEE bus. The first byte is the device number and the two addresses are the range of memory to output. A CHR$(2) is sent first to start the programmer. This is followed by the memory bytes as ASCII characters separated by spaces. After all bytes have been sent, a CHR$(3) is sent to stop the programmer. Micromon then does a checksum on the range to compare against the programmer checksum. Although this is for a particular programmer, it could be modified for others.

SPECIFY LOAD ADDRESS

     .Y 7000 "Filename"

This command allows a file to be loaded starting at the address you specify and not the load address it would normally load into. The disk (device #8) is used for loading.


TEXT FLIP FOR 8032 & FAT 40's

     .(Shift) Z

This is for 8032 and Fat 40's to go from Text to Graphics mode or vice versa.

DOS SUPPORT

     .@ or. >

This reads the error channel from disk device number 8.

     .@ disk command or. > disk command

This sends the disk command to disk device number 8.

     .@$0 or.>$0

This reads the directory from disk device number 8. The SPACE BAR will hold the display, any other key will start it again, and the STOP key will return to command mode.

CONTROL CHARACTERS

     .(Up arrow)g

This command will print the control character of the ASCII character input.

Examples of controls:

g    Ring bell
i     Tab set and clear
M   Insert line
n    Text mode
N   Graphics mode
q    Cursor down
Q   Cursor up
s    Home cursor
S   Clear screen
u    Delete line
v    Erase end
V   Erase begin


MICROMON PLUS INSTRUCTIONS
     (Shift)


    (Shift)
    (Shift)
    (Shift)



    (Shift)


    (Up arrow)
D
I
J
K
L
M
P
U
Y
Z
>
@

PRINTING DISASSEMBLER
HEADING AND FORM FEED CONTROL
PRINT LOAD ADDRESS
KILL MICROMON ADDITIONS
LOAD FROM DISK
PRINT MEMORY DISPLAY
PRINTER SWITCHING
SEND TO PROM PROGRAMMER
SPECIFY LOAD ADDRESS
TEXT/GRAPHICS FLIP
DOS SUPPORT COMMANDS
DOS SUPPORT COMMANDS
CONTROL CHARACTERS


Program 1 . Checksum For Micromon.

10 DATA 15463,14894,142_90,11897,12
   453,13919,14116,11715,1257
   5,14571
20 DATA 13693,11853,12_903,14513,12
   137,15006,12654,13291,1243
   6,13899
30 DATA 15366,9999,11834,13512,128
   92,14475,15149,14896,15782
   ,9511
40 DATA 12171,8985
100 Q=4096
110 FOR BLOCK=1TO32
120 FOR BYTE=0TO127
130 X=PEEK(Q+BYTE):CK=CK+X
140 NEXT BYTE
150 READ SUM
160 IF SUM <> CK THEN PRINT" ERROR ~
    IN BLOCK #"BLOCK:GOTO170
165 PRINT"                   BLOCK"
    BLOCK" IS CORRECT
170 CK=0:Q=Q+128
180 NEXT BLOCK



Program 2. Micromon.

1000 4C 0C 10 4C 6F 10 4C CF
1008 FF 4C D2 FF 78 A5 92 A6
1010 93 8D E5 02 8E E6 02 AD
1018 F6 1F AE F7 1F 8D E3 02
1020 8E E4 02 AD F0 1F AE Fl
1028 1F 85 92 86 93 A5 90 A6
1030 91 CD EE 1F D0 05 EC EF
1038 1F F0 10 8D 9E 02 8E 9F
1040 02 AD EE 1F AE EF 1F 85
1048 90 86 91 AD EC 1F AE ED
1050 1F E0 80 B0 08 85 34 86
1058 35 85 30 86 31 A9 10 8D
1060 84 02 8D 85 02 A9 00 8D
1068 86 02 8D A2 02 58 00 38
1070 AD 7B 02 E9 01 8D 7B 02
1078 AD 7A 02 E9 00 8D 7A 02

1080 20 55 19 A2 42 A9 2A 20
1088 29 18 A9 52 D0 23 A9 3F
1090 20 09 10 20 55 19 A9 2E
1098 20 09 10 A9 00 8D 94 02
10A0 8D A2 02 A2 FF 9A 20 A4
10A8 18 C9 2E F0 F9 C9 20 F0
10B0 F5 A2 1D DD 92 1F D0 13
10B8 8D 87 02 8A 0A AA BD B0
10C0 1F 85 FB BD Bl 1F 85 FC
10C8 6C FB 00 CA 10 E5 6C E3
10D0 02 A2 02 D0 02 A2 00 B4
10D8 FB D0 09 B4 FC D0 03 EE
10E0 94 02 D6 FC D6 FB 60 A9
10E8 00 8D 8C 02 20 4F 12 A2
10F0 09 20 52 19 CA D0 FA 60
10F8 A2 02 B5 FA 48 BD 91 02

1100 95 FA 68 9D 91 02 CA D0
1108 Fl 60 AD 92 02 AC 93 02
1110 4C 17 11 A5 FD A4 FE 38
1118 E5 FB 8D 91 02 98 E5 FC
1120 A8 0D 91 02 60 A9 00 F0
1128 02 A9 01 8D 95 02 20 E6
1130 17 20 55 19 20 13 11 20
1138 3C 18 90 1B 20 0A 11 B0
1140 03 4C C5 11 20 7F 11 E6
1148 FD D0 02 E6 FE 20 3B 19
1150 AC 94 02 D0 45 F0 E5 20
1158 0A 11 18 AD 91 02 65 FD
1160 85 FD 98 65 FE 85 FE 20
1168 F8 10 20 7F 11 20 0A 11
1170 B0 53 20 Dl 10 20 D5 10
1178 AC 94 02 D0 1D F0 EB A2

1180 00 Al FB AC 95 02 F0 02.
1188 81 FD Cl FD F0 0B 20 13
1190 18 20 52 19 20 AE 18 F0
1198 01 60 4C 93 10 20 01 18
11A0 20 0B 18 20 A4 18 20 6F
11A8 18 90 17 8D 89 02 AE 94
11B0 02 D0 12 20 13 11 90 0D
11B8 AD 89 02 81 FB 20 3B 19
11C0 D0 EC 4C 8E 10 4C 93 10
11C8 20 01 18 20 0B 18 20 A4
11D0 18 A2 00 20 A4 18 C9 27
11D8 D0 14 20 A4 18 9D A3 02
11E0 E8 20 06 10 C9 0D F0 22
11E8 E0 20 D0 F1 F0 1C 8E 97
11F0 02 20 77 18 90 CC 9D A3
11F8 02 E8 20 06 10 C9 0D F0

1200 09 20 6F 18 90 BC E0 20
1208 D0 EC 8E 88 02 20 55 19
1210 A2 00 A0 00 B1 FB DD A3
1218 02 D0 0A C8 E8 EC 88 02
1220 D0 F2 20 8E 11 20 3B 19
1228 AC 94 02 D0 05 20 13 11
1230 B0 DE 4C 93 10 20 39 14
1238 20 13 11 90 0D A0 2C 20
1240 E7 10 20 AB 12 20 AE 18
1248 D0 EE 20 B3 15 D0 E3 20
1250 47 19 20 13 18 20 52 19
1258 20 0E lE 48 20 0B 13 68
1260 20 22 13 A2 06 E0 03 D0
1268 14 AC 8B 02 F0 0F AD 96
1270 02 C9 E8 Bl FB B0 1D 20
1278 Al 12 88 D0 Fl 0E 96 02

1280 90 0E BD E9 1E 20 AD 15
1288 BD EF lE F0 03 20 AD 15
1290 CA D0 D2 60 20 B7 12 AA
1298 E8 D0 01 C8 98 20 Al 12
12A0 8A 8E 88 02 20 1A 18 AE
12A8 88 02 60 AD 8B 02 20 B6
12B0 12 85 FB 84 FC 60 38 A4
12B8 FC AA 10 01 88 65 FB 90
12C0 01 C8 60 A8 4A 90 0B 4A
12C8 B0 17 C9 22 F0 13 29 07
12D0 09 80 4A AA BD 98 1E B0
12D8 04 4A 4A 4A 4A 29 0F D0
12E0 04 A0 80 A9 00 AA BD DC
12E8 1E 8D 96 02 29 03 8D 8B
12F0 02 98 29 8F AA 98 A0 03
12F8 E0 8A F0 0B 4A 90 08 4A

1300 4A 09 20 88 D0 FA C8 88
1308 D0 F2 60 Bl FB 20 Al 12
1310 A2 01 20 Fl 10 CC 8B 02
1318 C8 90 F0 A2 03 C0 03 90
1320 Fl 60 A8 B9 F6 1E 8D 92
1328 02 B9 36 1F 8D 93 02 A9
1330 00 A0 05 0E 93 02 2E 92
1338 02 2A 88 D0 F6 69 3F 20
1340 09 10 CA D0 EA 4C 52 19
1348 20 01 18 A9 03 20 AC 13
1350 A0 2C 4C 50 15 BD 05 01
1358 CD F8 1F D0 0B BD 06 01
1360 CD F9 1F D0 03 20 D7 18
1368 A5 97 CD 83 02 F0 0A 8D
1370 83 02 A9 10 8D 84 02 D0
1378 24 C9 FF F0 20 AD 84 02

1380 F0 05 CE 84 02 D0 16 CE
1388 85 02 D0 11 A9 02 8D 85
1390 02 A5 9E D0 08 A9 00 85
1398 97 A9 02 85 A8 AD F3 1F
13A0 48 AD F2 1F 48 08 48 48
13A8 48 6C 9E 02 8D 89 02 48
13B0 20 A4 18 20 19 19 D0 F8
13B8 68 49 FF 4C AE 12 20 39
13C0 14 AE 94 02 D0 0D 20 13
13C8 11 90 08 20 D6 13 20 AE
13D0 18 D0 EE 4C 4A 12 20 55
13D8 19 A2 2E A9 3A 20 29 18
13E0 20 52 19 20 13 18 A9 08
13E8 20 03 19 A9 08 20 B9 13
13F0 A9 12 20 09 10 A0 08 A2
13F8 00 Al FB 29 7F C9 20 B0

1400 02 A9 2E 20 09 10 C9 22
1408 F0 04 C9 62 D0 0A A9 14
1410 20 09 10 A9 22 20 09 10
1418 20 3B 19 88 D0 DB A9 92
1420 4C 09 10 20 01 18 A9 08
1428 20 AC 13 20 B3 15 20 D6
1430 13 A9 3A 8D 6F 02 4C 5C
1438 15 20 01 18 85 FD 86 FE
1440 20 06 10 C9 0D F0 03 20
1448 06 18 4C 55 19 20 4C 18
1450 85 FD 86 FE A2 00 8E A4
1458 02 20 A4 18 C9 20 F0 F4
1460 9D 8D 02 E8 E0 03 D0 Fl
1468 CA 30 14 BD 8D 02 38 E9
1470 3F A0 05 4A 6E A4 02 6E
1478 A3 02 88 D0 F6 F0 E9 A2

1480 02 20 06 10 C9 0D F0 22
1488 C9 3A F0 lE C9 20 F0 F1
1490 20 A4 15 B0 0F 20 84 18
1498 A4 FB 84 FC 85 FB A9 30
14A0 9D A3 02 E8 9D A3 02 E8
14A8 D0 D7 8E 92 02 A2 00 8E
14B0 94 02 A2 00 8E 89 02 AD
14B8 94 02 20 C3 12 AE 96 02
14C0 8E 93 02 AA BD 36 1F 20
14C8 84 15 BD F6 lE 20 84 15
14D0 A2 06 E0 03 D0 14 AC 8B
14D8 02 F0 0F AD 96 02 C9 E8
14E0 A9 30 B0 lE 20 81 15 88
14E8 D0 Fl 0E 96 02 90 0E BD
14F0 E9 lE 20 84 15 BD EF lE
14F8 F0 03 20 84 15 CA D0 D2

1500 F0 06 20 81 15 20 81 15
1508 AD 92 02 CD 89 02 F0 03
1510 4C 91 15 20 3C 18 AC 8B
1518 02 F0 2E AD 93 02 C9 9D
1520 D0 1F 20 13 11 90 0A 98
1528 D0 6F AE 91 02 30 6A 10
1530 08 C8 D0 65 AE 91 02 10
1538 60 CA CA 8A AC 80 02 D0
1540 03 B9 FC 00 91 FB 88 D0
1548 F8 AD 94 02 91 FB A0 41
1550 8C 6F 02 20 B3 15 20 E7
1558 10 20 AB 12 A9 20 8D 70
1560 02 8D 75 02 A5 FC 20 B8
1568 15 8E 71 02 8D 72 02 A5
1570 FB 20 B8 15 8E 73 02 8D
1578 74 02 A9 07 85 9E 4C 93

1580 10 20 84 15 8E 88 02 AE
1588 89 02 DD A3 02 F0 0D 68
1590 68 EE 94 02 F0 03 4C B2
1598 14 4C 8E 10 E8 8E 89 02
15A0 AE 88 02 60 C9 30 90 03
15A8 C9 47 60 38 60 CD 8C 02
15B0 D0 03 60 A9 91 4C 09 10
15B8 48 4A 4A 4A 4A 20 32 18
15C0 AA 68 29 0F 4C 32 18 8D
15C8 7D 02 08 68 29 EF 8D 7C
15D0 02 8E 7E 02 8C 7F 02 68
15D8 18 69 01 8D 7B 02 68 69
15E0 00 8D 7A 02 A9 80 8D 86
15E8 02 D0 21 AD 13 E8 10 03
15F0 4C 55 13 D8 68 8D 7F 02
15F8 68 8D 7E 02 68 8D 7D 02

1600 68 8D 7C 02 68 8D 7B 02
1608 68 8D 7A 02 A5 90 8D 82
1610 02 A5 91 8D 81 02 BA 8E
1618 80 02 20 D7 18 AD 12 E8
1620 58 AD 7C 02 29 10 F0 03
1628 4C 6F 10 2C 86 02 50 1F
1630 AD 7A 02 CD 99 02 D0 6D
1638 AD 7B 02 CD 98 02 D0 65
1640 AD 9C 02 D0 5D AD 9D 02
1648 D0 55 A9 80 8D 86 02 30
1650 14 4E 86 02 90 D2 AE 80
1658 02 9A AD F5 1F 48 AD F4
1660 1F 48 4C 1F 17 20 55 19
1668 20 30 19 8D 89 02 A0 00
1670 20 0B 19 AD 7B 02 AE 7A
1678 02 85 FB 86 FC 20 52 19

1680 A9 24 8D 8C 02 20 52 12
1688 20 E4 FF F0 FB C9 03 D0
1690 03 4C 93 10 C9 4A D0 56
1698 A9 01 8D 86 02 D0 4F CE
16A0 9D 02 CE 9C 02 AD 12 E8
16A8 C9 EE F0 04 C9 6F D0 3E
1680 A2 53 4C 85 10 A9 00 F0
16B8 12 AD 9A 02 AE 9B 02 8D
16C0 9C 02 8E 9D 02 A9 40 D0
16C8 02 A9 80 8D 86 02 20 06
16D0 10 C9 0D F0 11 C9 20 D0
16D8 5C 20 60 18 20 FC 18 20
16E0 06 10 C9 0D D0 4F 20 55
16E8 19 AD 86 02 F0 22 78 A9
16F0 A0 8D 4E E8 CE 13 E8 2C
16F8 12 E8 AD F0 1F AE Fl 1F

1700 8D 82 02 8E 81 02 A9 3B
1708 A2 00 8D 48 E8 8E 49 E8
1710 AE 80 02 9A 78 AD 81 02
1718 85 91 AD 82 02 85 90 AD
1720 7A 02 48 AD 7B 02 48 AD
1728 7C 02 48 AD 7D 02 AE 7E
1730 02 AC 7F 02 40 4C 8E 10
1738 20 4C 18 8D 98 02 8E 99
1740 02 A9 00 8D 9A 02 8D 9B
1748 02 20 5D 18 8D 9A 02 8E
1750 9B 02 4C 93 10 20 E6 17
1758 8D A0 02 8E Al 02 20 5D
1760 18 8D 8D 02 8E 8E 02 20
1768 5D 18 8D 8F 02 8E 90 02
1770 20 06 10 C9 0D F0 0A 20
1778 06 10 C9 57 D0 03 EE 8C

1780 02 20 3C 18 AE 94 02 D0
1788 18 20 0A 11 90 13 AC 8C
1790 02 D0 1A Bl FB 20 C3 12
1798 AA BD F6 1E D0 06 20 E7
17A0 10 4C 93 10 AC 8B 02 C0
17A8 02 D0 33 F0 03 8C 8B 02
17B0 88 38 B1 FB AA ED 8D 02
17B8 C8 Bl FB ED 8E 02 90 1E
17C0 88 AD 8F 02 Fl FB C8 AD
17C8 90 02 Fl FB 90 10 88 18
17D0 8A 6D A0 02 91 FB C8 Bl
17D8 FB 6D Al 02 91 FB 20 3B
17E0 19 88 10 FA 30 9E 20 4C
17E8 18 85 FD 86 FE 20 5D 18
17F0 8D 92 02 8E 93 02 20 A4
17F8 18 20 60 18 85 FB 86 FC

1800 60 20 4C 18 B0 F6 20 60
1808 18 B0 03 20 5D 18 85 FD
1810 86 FE 60 A5 FC 20 1A 18
1818 A5 FB 48 4A 4A 4A 4A 20
1820 32 18 AA 68 29 0F 20 32
1828 18 48 8A 20 09 10 68 4C
1830 09 10 18 69 F6 90 02 69
1838 06 69 3A 60 A2 02 B5 FA
1840 48 B5 FC 95 FA 68 95 FC
1848 CA D0 F3 60 A9 00 8D 97
1850 02 20 A4 18 C9 20 F0 F9
1858 20 84 18 B0 08 20 A4 18
1860 20 6F 18 90 07 AA 20 6F
1868 18 90 01 60 4C 8E 10 A9
1870 00 8D 97 02 20 A4 18 C9
1878 20 D0 09 20 A4 18 C9 20

1880 D0 0F 18 60 20 99 18 0A
1888 0A 0A 0A 8D 97 02 20 A4
1890 18 20 99 18 0D 97 02 38
1898 60 C9 3A 08 29 0F 28 90
18A0 02 69 08 60 20 06 10 C9
18A8 0D D0 F8 4C 93 10 A5 9B
18B0 C9 EF D0 07 08 20 CC FF
18B8 85 9E 28 60 20 C6 18 AD
18C0 13 E8 6A 90 F7 60 20 AE
18C8 18 D0 0B 20 D7 18 A9 03
18D0 85 B0 A9 00 85 AF 60 08
18D8 78 AD 40 E8 09 10 8D 40
18E0 E8 A9 7F 8D 4E E8 A9 3C
18E8 8D 11 E8 A9 3D 8D 13 E8
18F0 AD EE 1F 85 90 AD EF 1F
18F8 85 91 28 60 8D 7B 02 8E

1900 7A 02 60 8D 89 02 A0 00
1908 20 52 19 Bl FB 20 lA 18
1910 20 3B 19 CE 89 02 D0 F0
1918 60 20 6F 18 90 0B A2 00
1920 81 FB Cl FB F0 03 4C 8E
1928 10 20 3B 19 CE 89 02 60
1930 A9 7C 85 FB A9 02 85 FC
1938 A9 05 60 E6 FB D0 07 E6
1940 FC D0 03 EE 94 02 60 98
1948 48 20 55 19 68 A2 2E 20
1950 29 18 A9 20 2C A9 0D 4C
1958 09 10 A2 00 BD 76 1F 20
1960 09 10 E8 E0 1C D0 F5 A0
1968 3B 20 47 19 AD 7A 02 20
1970 lA 18 AD 7B 02 20 lA 18
1978 20 52 19 AD 81 02 20 lA

1980 18 AD 82 02 20 lA 18 20
1988 30 19 20 03 19 4C 93 10
1990 4C 8E 10 20 4C 18 20 FC
1998 18 20 5D 18 8D 82 02 8E
19A0 81 02 20 30 19 8D 89 02
19A8 20 A4 18 20 19 19 D0 F8
19B0 F0 DB 20 60 1C AE 80 02
19B8 9A 6C 94 00 4C 8E 10 A0
19C0 01 84 D4 88 84 Dl 84 96
19C8 84 9D A9 02 85 DB A9 A3
19D0 85 DA 20 06 10 C9 20 F0
19D8 F9 C9 0D F0 lA C9 22 D0
19E0 DB 20 06 10 C9 22 F0 36
19E8 C9 0D F0 0B 91 DA E6 Dl
19F0 C8 C0 10 F0 C7 D0 EA AD
19F8 87 02 C9 4C D0 El AD 00

lA00 C0 C9 40 D0 06 20 22 F3
lA08 4C 12 lA C9 4C D0 AD 20
lAl0 56 F3 20 BC 18 A5 96 29
1A18 10 D0 El 4C 93 10 20 06
1A20 10 C9 0D F0 D2 C9 2C D0
1A28 F0 20 6F 18 29 0F F0 C3
1A30 C9 03 F0 FA 85 D4 20 06
1A38 10 C9 0D F0 BA C9 2C D0
1A40 E6 20 F9 17 20 06 10 C9
1A48 2C D0 F4 20 60 18 85 C9
1A50 86 CA 20 06 10 C9 20 F0
1A58 F9 C9 0D D0 EC AD 87 02
1A60 C9 53 D0 F7 AD 00 C0 C9
1A68 40 D0 06 20 A4 F6 4C 93
1A70 10 C9 4C D0 D4 20 E3 F6
1A78 4C 93 10 20 01 18 20 3B

1A80 19 20 3B 19 20 0B 18 20
1A88 52 19 20 13 11 90 0A 98
1A90 D0 15 AD 91 02 30 10 10
1A98 08 C8 D0 0B AD 91 02 10
1AA0 06 20 lA 18 4C 93 10 4C
1AA8 8E 10 20 01 18 20 C0 lA
1AB0 4C 93 10 20 55 19 A2 2E
1AB8 A9 24 20 29 18 20 13 18
1AC0 20 2F 1B 20 E6 lA 20 52
1AC8 19 20 CC 1A 20 CF lA 20
1AD0 52 19 A2 04 A9 30 18 0E
1AD8 92 02 2E 93 02 69 00 20
1AE0 09 10 CA D0 EF 60 A5 FC
1AE8 A6 FB 8D 93 02 8E 92 02
1AF0 20 52 19 A5 FC 20 FA 1A
1AF8 A5 FB AA 20 52 19 8A 29

1B00 7F C9 20 08 B0 0A A9 12
1B08 20 09 10 8A 18 69 40 AA
1B10 8A 20 09 10 C9 22 F0 04
1B18 C9 62 D0 0A A9 14 20 09
1B20 10 A9 22 20 09 10 28 B0
1B28 05 A9 92 20 09 10 60 20
1B30 52 19 A6 FB A5 FC AC 00
1B38 C0 C0 40 D0 03 4C D9 DC
1B40 C0 4C D0 03 4C 83 CF 4C
1B48 8E 10 20 5B 1B B0 F8 20
1850 52 19 20 13 18 20 C3 lA
1B58 4C 93 10 A2 04 A9 00 85
1B60 FC 20 17 1C 20 83 1B 85
1B68 FB 20 78 1B 20 92 1B CA
1B70 D0 F7 08 20 52 19 28 60
1B78 20 06 10 C9 0D F0 0F C9

1B80 20 F0 0B C9 30 90 C0 C9
1B88 3A B0 BC 29 0F 60 68 68
1B90 18 60 85 FE A5 FC 48 A5
1B98 FB 48 06 FB 26 FC 06 FB
1BA0 26 FC 68 65 FB 85 FB 68
1BA8 65 FC 85 FC 06 FB 26 FC
1BB0 A5 FE 65 FB 85 FB A9 00
1BB8 65 FC 85 FC 60 20 17 1C
1BC0 8D 93 02 48 48 20 52 19
1BC8 20 52 19 68 20 lA 18 20
1BD0 52 19 68 AA A9 00 20 36
1BD8 1B 20 52 19 20 CC lA 4C
1BE0 93 10 20 F4 1B 20 52 19
1BE8 20 13 18 20 2F 1B 20 E6
1BF0 lA 4C 93 10 A2 0F A9 00
1BF8 85 FB 85 FC 20 17 1C 20

1C00 83 1B 20 11 1C 20 78 1B
1C08 20 11 1C CA D0 F7 4C 52
1C10 19 4A 26 FB 26 FC 60 20
1C18 A4 18 C9 20 F0 F9 60 A9
1C20 02 4D 4C E8 8D 4C E8 4C
1C28 93 10 20 0B 18 4C F6 17
1C30 20 2A 1C 18 A5 FB 65 FD
1C38 85 FB A5 FC 65 FE 85 FC
1C40 4C 50 1C 20 2A 1C 20 13
1C48 11 84 FC AD 91 02 85 FB
1C50 20 52 19 20 13 18 4C 93
1C58 10 20 60 1C 00 6C EC 1F
1C60 78 AD E5 02 AE E6 02 85
1C68 92 86 93 AD 9E 02 AE 9F
1C70 02 85 90 86 91 58 60 20
1C78 2A 1C 20 3C 18 20 52 19

1C80 A0 00 8C 92 02 8C 93 02
1C88 20 13 11 90 11 AD 94 02
1C90 D0 18 A0 00 18 Bl FB 6D
1C98 92 02 8D 92 02 98 6D 93
1CA0 02 8D 93 02 20 3B 19 4C
1CA8 88 1C AD 93 02 20 lA 18
1CB0 AD 92 02 20 lA 18 4C 93
1CB8 10 AD A2 02 D0 04 A5 9E
1CC0 D0 06 68 A8 68 AA 68 40
1CC8 AD 6F 02 C9 11 D0 7D A5
1CD0 D8 C9 18 D0 ED A5 C4 85
1CD8 FD A5 C5 85 FE A9 19 8D
1CE0 9C 02 A0 01 20 8C lE C9
1CE8 3A F0 lA C9 2C F0 16 C9
1CF0 24 F0 12 CE 9C 02 F0 CA
1CF8 38 A5 FD E9 28 85 FD B0

1D00 El C6 FE D0 DD 8D 87 02
1D08 20 45 lE B0 B5 AD 87 02
1D10 C9 3A D0 11 18 A5 FB 69
1D18 08 85 FB 90 02 E6 FC 20
1D20 D6 13 4C 39 1D C9 24 F0
1D28 lA 20 0E lE 20 AB 12 A9
1D30 00 8D 8C 02 A0 2C 20 4F
1D38 12 A9 00 85 9E 4C 4A 12
1D40 4C C2 1C 20 3B 19 20 B3
1D48 lA 4C 39 1D C9 91 D0 F0
1D50 A5 D8 D0 EC A5 C4 85 FD
1D58 A5 C5 85 FE A9 19 8D 9C
1D60 02 A0 01 20 8C lE C9 3A
1D68 F0 lA C9 2C F0 16 C9 24
1D70 F0 12 CE 9C 02 F0 15 18
1D78 A5 FD 69 28 85 FD 90 El

1D80 E6 FE D0 DD 8D 87 02 20
1D88 45 lE 90 03 4C C2 1C AD
1D90 87 02 C9 3A F0 06 C9 24
1D98 F0 1D D0 27 20 15 lE 38
1DA0 A5 FB E9 08 85 FB B0 02
1DA8 C6 FC 20 D9 13 A9 00 85
1DB0 9E 20 40 lE 4C 96 10 20
1DB8 15 lE 20 D5 10 20 B6 lA
1DC0 4C AD 1D 20 15 lE A5 FB
1DC8 A6 FC 85 FD 86 FE A9 10
1DD0 8D 9C 02 38 A5 FD ED 9C
1DD8 02 85 FB A5 FE E9 00 85
1DE0 FC 20 0E lE 20 AB 12 20
1DE8 13 11 F0 07 B0 F3 CE 9C
1DF0 02 D0 E0 EE 8B 02 AD 8B
1DF8 02 20 B9 13 A2 00 Al FB

1E00 8E 8C 02 A9 2C 20 4D 19
1E08 20 52 12 4C AD 1D A2 00
lE10 Al FB 4C C3 12 A9 83 85
1E18 C8 85 FE A9 00 85 C7 A9
1E20 28 85 FD A0 C0 A2 04 88
1E28 Bl C7 91 FD 98 D0 F8 C6
lE30 C8 C6 FE CA D0 Fl A2 27
1E38 A9 20 9D 00 80 CA 10 FA
1E40 A9 13 4C 09 10 C0 28 D0
1E48 02 38 60 20 8C lE C9 20
1E50 F0 F3 88 20 75 lE AA 20
lE58 75 lE 85 FB 86 FC A9 FF
lE60 8D A2 02 85 A7 A5 AA F0
1E68 0A A5 A9 A4 C6 91 C4 A9
1E70 00 85 AA 18 60 20 8C lE
1E78 20 99 18 0A 0A 0A 0A 8D

1E80 97 02 20 8C lE 20 99 18
lE88 0D 97 02 60 Bl FD C8 29
1E90 7F C9 20 B0 02 09 40 60
1E98 40 02 45 03 D0 08 40 09
1EA0 30 22 45 33 D0 08 40 09
1EA8 40 02 45 33 D0 08 40 09
1EB0 40 02 45 B3 D0 08 40 09
1EB8 00 22 44 33 D0 8C 44 00
1EC0 11 22 44 33 D0 8C 44 9A
1EC8 10 22 44 33 D0 08 40 09
1ED0 10 22 44 33 D0 08 40 09
1ED8 62 13 78 A9 00 21 81 82
1EE0 00 00 59 4D 91 92 86 4A
1EE8 85 9D 2C 29 2C 23 28 24
1EF0 59 00 58 24 24 00 1C 8A
1EF8 1C 23 5D 8B 1B Al 9D 8A

1F00 1D 23 9D 8B 1D Al 00 29
1F08 19 AE 69 A8 19 23 24 53
1Fl0 1B 23 24 53 19 Al 00 1A
1F18 5B 5B A5 69 24 24 AE AE
1F20 A8 AD 29 00 7C 00 15 9C
1F28 6D 9C A5 69 29 53 84 13
1F30 34 11 A5 69 23 A0 D8 62
1F38 5A 48 26 62 94 88 54 44
1F40 C8 54 68 44 E8 94 00 B4
1F48 08 84 74 B4 28 6E 74 F4
1F50 CC 4A 72 F2 A4 8A 00 AA
1F58 A2 A2 74 74 74 72 44 68
1F60 B2 32 B2 00 22 00 lA lA
1F68 26 26 72 72 88 C8 C4 CA
1F70 26 48 44 44 A2 C8 0D 20
1F78 20 20 20 50 43 20 20 49

1F80 52 51 20 20 53 52 20 41
1F88 43 20 58 52 20 59 52 20
1F90 53 50 41 42 43 44 46 47
1F98 48 4C 4D 4E 51 52 53 54
1FA0 57 58 2C 3A 3B 24 23 22
1FA8 2B 2D 4F 5A 4B 25 26 45
1FB0 4D 14 38 17 25 11 35 12
1FB8 9D 11 B5 16 C8 11 BF 19
1FC0 BE 13 55 17 B9 16 5A 19
1FC8 BF 19 29 11 C9 16 B5 19
1FD0 48 13 23 14 93 19 AA 1A
1FD8 4A 1B BD 1B 30 1C 43 1C
1FE0 7B 1A 1F 1C 59 1C E2 1B
1FE8 77 1C B2 19 00 10 55 13
1FF0 EB 15 B9 1C C6 15 8E 10
1FF8 BC 18 30 35 32 37 38 31


Program 3. Checksum For Micromon Plus.

10 DATA 15965,14778,13059,14282,14
    416,17693,12979,12903,1767
    6,21760
20 DATA 14416,17693,12979,12903
100 Q=23296
110 FOR BLOCK=1TO8
120 FOR BYTE=0TO127
130 X=PEEK(Q+BYTE):CK=CK+X
140 NEXT BYTE
150 READ SUM
160 IF SUM <> CK THEN PRINT" ERR0R ~
    IN BLOCK #"BLOCK:GOTO170
165 PRINT"                   BLOCK"
    BLOCK" IS CORRECT
170 CK=0:Q=Q+128
180 NEXT BLOCK
190 PRINT"ANY REMAINING PROBLEMS AR
    E EITHER WITHIN THE FINAL"

200 PRINT"SH0RT BLOCK OR WITHIN DAT
    A STATEMENTS IN THIS PROGR
    AM."



Program 4. Micromon Plus.

5B00 78 A5 90 A6 91 CD EE 6F
5B08 D0 05 EC EF 6F F0 30 8D
5810 9E 02 8E 9F 02 AD EE 6F
5B18 AE EF 6F 85 90 86 91 A5
5B20 92 A6 93 8D E5 02 8E E6
5B28 02 AD 3C 5F AE 3D 5F 8D
5B30 E3 02 8E E4 02 AD F0 6F
5B38 AE F1 6F 85 92 86 93 AD
5B40 3E 5F AE 3F 5F E0 80 B0
5B48 08 85 34 86 35 85 30 86
5B50 31 A9 10 8D 84 02 8D 85
5B58 02 A9 00 8D 86 02 8D A2
5B60 02 8D E7 02 8D E8 02 58
5868 00 A2 0C DD 15 5F D0 13
5B70 8D 87 02 8A 0A AA BD 22
5B78 5F 85 FB BD 23 5F 85 FC

5B80 6C FB 00 CA 10 E5 4C 8E
5B88 60 20 39 64 20 13 61 90
5B90 17 20 EF 60 8E 8C 02 20
5B98 52 62 20 AB 5B 20 AB 62
5BA0 20 93 5C 20 AE 68 D0 E4
5BA8 4C 9B 60 A2 1E 20 F1 60
5BB0 A0 00 B1 FB 20 60 5C CC
5BB8 8B 02 C8 90 F5 60 A5 B0
5BC0 C9 03 D0 19 20 06 60 AA
5BC8 A9 04 E0 0D F0 09 20 6F
5BD0 68 29 1F C9 04 90 AF 20
5BD8 E3 5B 4C 9B 60 20 CC FF
5BE0 4C 93 60 85 B0 85 D4 20
5BE8 09 5C AE 00 C0 E0 40 D0
5BF0 0B 20 BA F0 20 2D F1 A5
5BF8 96 D0 E2 60 E0 4C D0 5D

5C00 20 D5 F0 20 48 F1 4C F7
5C08 5B A9 00 85 96 8D FC 03
5C10 85 0D 8D E8 02 60 20 39
5C18 64 AE 94 02 D0 10 20 13
5C20 61 90 0B 20 31 5C 20 93
5C28 5C 20 AE 68 D0 EB 4C A8
5C30 5B A2 05 20 Fl 60 20 13
5C38 68 A2 02 20 Fl 60 A9 10
5C40 20 03 69 A9 10 20 B9 63
5C48 A2 04 20 Fl 60 A0 10 A2
5C50 00 Al FB 20 60 5C 20 3B
5C58 69 88 D0 F5 60 4C 8E 60
5C60 29 7F C9 20 B0 02 A9 20
5C68 4C 09 60 20 06 60 C9 0D
5C70 F0 19 C9 20 D0 03 20 17
5C78 6C C9 58 F0 50 20 71 5D

5C80 8E E8 02 A2 02 20 A7 5C
5C88 4C 9B 60 A2 04 20 Cl 5C
5C90 4C 9B 60 20 55 69 AE E7
5C98 02 F0 31 CE E7 02 D0 2C
5CA0 AE E8 02 F0 1A A2 06 20
5CA8 Cl 5C A2 14 20 Fl 60 BD
5CB0 A3 02 20 09 60 E8 EC E8
5CB8 02 D0 F4 A2 03 D0 02 A2
5CC0 09 20 55 69 CA D0 FA A9
5CC8 39 8D E7 02 60 A9 00 8D
5CD0 E7 02 8D E8 02 4C 9B 60
5CD8 20 09 5C 20 CC FF 20 06
5CE0 60 C9 0D F0 16 C9 24 F0
5CE8 24 48 20 9E 5D 68 20 09
5CF0 60 20 06 60 C9 0D D0 F6
5CF8 4C DD 5B 20 52 69 20 C5

5D00 5D 20 06 60 C9 0D F0 F0
5D08 20 09 60 D0 F4 A2 00 20
5Dl0 82 5D 20 8B 5D 20 55 69
5D18 20 55 69 A0 03 D0 02 A0
5D20 02 84 Dl A9 08 85 AF 20
5D28 06 60 AA A4 96 D0 36 20
5D30 06 60 A4 96 D0 2F C6 Dl
5D38 D0 ED 20 36 6B 20 52 69
5D40 20 06 60 F0 05 20 09 60
5D48 D0 F6 20 55 69 A9 00 85
5D50 AF 20 E4 FF F0 C9 D0 05
5D58 20 E4 FF F0 FB C9 20 F0
5D60 F7 C9 03 D0 BA 20 12 5E
5D68 20 55 69 4C 93 60 20 17
5D70 6C C9 22 D0 7B A2 00 20
5D78 06 60 C9 0D F0 0C C9 22

5D80 F0 08 9D A3 02 E8 E0 40
5D88 90 ED 60 86 Dl A9 A3 85
5D90 DA A9 02 85 DB 20 CC FF
5D98 20 F3 5D 4C C9 5D A9 08
5DA0 85 D4 85 B0 AC 00 C0 C0
5DA8 40 D0 0B 20 BA F0 A9 6F
5DB0 20 28 Fl 4C F7 5B C0 4C
5DB8 D0 36 20 D5 F0 A9 6F 20
5DC0 43 Fl 4C F7 5B A9 6F 85
5DC8 D3 A9 08 85 D4 85 AF AC
5DD0 00 C0 C0 40 D0 0B 20 B6
5DD8 F0 A5 D3 20 64 Fl 4C F7
5DE0 5B C0 4C D0 0B 20 D2 F0
5DE8 A5 D3 20 93 Fl 4C F7 5B
5DF0 4C 8E 60 A9 08 85 D4 A9
5DF8 60 85 D3 AD 00 C0 C9 40

5E00 D0 06 20 66 F4 4C F7 5B
5E08 C9 4C D0 E4 20 A5 F4 4C
5E10 F7 5B A9 00 85 AF AD 00
5E18 C0 C9 40 D0 03 4C 8F F3
5E20 C9 4C D0 CC 4C CE F3 A9
5E28 02 2C 4C E8 08 A9 0E 28
5E30 F0 02 09 80 20 09 60 4C
5E38 93 60 20 09 5C 20 6E 5D
5E40 20 8B 5D 20 06 60 8D FB
5E48 00 20 06 60 8D FC 00 20
5E50 12 5E 20 52 69 A9 24 A2
5E58 20 20 29 68 20 13 68 4C
5E60 93 60 20 60 6C 00 6C 3E
5E68 5F A0 08 84 D4 A0 4C 8C
5870 87 02 A0 00 4C C4 69 20
5878 17 6C 29 9F 4C 34 5E 4C

5880 8E 60 20 A4 68 20 6F 68
5888 29 1F C9 04 90 Fl 85 D4
5890 20 2A 6C A5 FD A6 FE 8D
5898 92 02 8E 93 02 20 3C 68
5EA0 A5 D4 20 E3 5B A9 02 20
5EA8 09 60 20 52 69 20 13 61
5EB0 90 0F AE 94 02 D0 0A Al
5EB8 FB 20 1A 68 20 3B 69 D0
5EC0 E9 A9 03 20 09 60 20 EF
5EC8 60 20 CC FF 20 F8 60 4C
5ED0 7D 6C 20 09 5C 20 01 68
5ED8 20 6E 5D 86 D1 20 04 5F
5EE0 20 8D 5D 20 06 60 20 06
5EE8 60 A9 00 85 AF AD 00 C0
5EF0 C9 40 D0 06 20 52 F3 4C
5EF8 01 5F C9 4C D0 81 20 8C

5F00 F3 4C 12 6A AD 00 C0 C9
5F08 40 D0 03 4C 0A F4 C9 4C
5F10 D0 EA 4C 49 F4 50 C4 49
5F18 CD 40 3E DA 4A CB CC 5E
5F20 55 59 BE 5B 89 5B 6B 5C
5F28 16 5C D8 5C D8 5C 27 5E
5F30 3A 5E 62 5E 69 5E 77 5E
5F38 82 5E D2 5E 69 5B 00 5B
5F40 31 30 32 31 38 31 AA AA

VIC Micromon

VIC machine language programmers: here's one of the most valuable tools there is for working in machine language. Thirty-four commands are at your disposal including single-step, hex conversion, search, EPROM routines, and a relocator. If you aren't yet working with machine language, the instructions for entering and using this program are easy to follow. As presented, this program takes up 4K of memory from $4000 (16384 decimal) to $4FFF (20479), but there are instructions for locating it elsewhere in RAM memory. To enter Micromon directly, see the Tiny PEEKer/POKEr program with Supermon 64 (in this Appendix). The commands for VIC Micromon are the same as the PET/CBM version except as noted below.

VIC Micromon Instructions

Initialize Memory And Screen Pointers

     .I 1000 1E00 1E

Define low memory as $1000 and high memory as $1E00 regardless of the memory present. The screen is defined to start at the $1E page of memory. The screen memory should always be on an even page within the range of $1000 to $1E00. Odd page values result in incorrect setup and operation of the VIC display. Although 3K of RAM can be added at $400 to $FFF, this memory is not accessible for use as screen memory.

     Memory pages at $000 and $200 are accessible, but are not usable since they are used for BASIC and kernal storage, working buffers, and stack area. If the screen page is within the low to high memory range specified, there can be usage conflict of the screen memory pages. If the "I" command is used and exit is made to BASIC, the NEW command must be invoked in the BASIC environment to clean up the memory pointers used by BASIC.

Jump To Micromon Subroutine

     .J 2000

The subroutine at $2000 is called while remaining in the VIC Micromon environment. The assembly language subroutine should exit by using a RTS instruction, which causes a return to the command input section of VIC Micromon. The machine image as shown by the Register display command is not used, nor is it disturbed when the subroutine returns to the VIC Micromon.

Load

     .L 2000 "TEST FILE" 01

Search for and, if found, load into memory the data file on device #1 named TEST FILE. If the name is not specified, the first file found is loaded. The data is loaded into memory starting at location $2000. The last address loaded is determined by the length of the binary data file. If the device number is not specified, it defaults to device #1, which is the VIC cassette tape. The original memory addresses and name of the last file read can be inspected by doing a Memory display of the tape buffer which is at $375 for VIC Micromon.

Print Switcher

     .P

If the output is to the screen, then switch the ouput to the RS-232 channel (device #2). If the output is not to the screen, restore the output to the screen with the RS-232 channel left active until the RS-232 output buffer is drained. Note that opening the RS-232 channel grabs 512 bytes for I/O buffering from the top of memory.

.P 0000

Regardless of the output, clear the RS-232 channel and set output to the screen.

.P CCBB

If the output is to the screen, set CC into the RS-232 command register at location $294 and BB into the RS-232 control register at location $293. Output is then switched to the RS-232 channel. This command is invalid if output is not currently to the screen.

Command Register Format

Field
Use
Value
Description
7, 6, 5




  4

3,2,1
  0

Parity Options




 Duplex

 Unused
 Handshake

 --0
 001
 011
 101
 111
   0
   1

   0
   1
Parity disabled
 Odd parity
 Even parity
 Mark transmitted
 Space transmitted
 Full duplex
Half duplex

 3 line
x line

Control Register Format

Field
Use
Value
Description
   7

  6,5




   4
3,2,1,0









Stop Bits
Word Length





Unused
Baud Rate









  0
  1
 00
 01
 10
 11

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1 stop bit
2 stop bits
 8 bits
7 bits
6 bits
5 bits

User rate
50 Baud
75
110
134.5
150
300
600
1200
1800
2400

Save

     .S 2000 3000 "TEST FILE" 01

Save memory from $2000 up to, but not including, $3000 onto device #1, which is the VIC cassette tape. If the device number is not specified, it defaults to device #1. The name TEST FILE is placed in the file header for the file saved.

Verify

     .V 2000 "TEST FILE" 01

Search for and verify, if found, the data file on device #1 named "TEST FILE." If the name is not specified, the first file found is verified. The data is verified by reading the file and comparing it to the data in memory starting at location $2000. If not specified, the device defaults to device #1. If there is a mismatch, the message ERROR is output to the screen at the end of the file verification.

Command End Tone

     .(

Enable the command end tone. A continuous tone will be generated at the end of execution of the next command. The tone can be turned off but still be enabled by just hitting the carriage return. No tone is generated if there is a syntax error while inputting the next command.

     .)

Disable the command end tone.

Program EPROM

     .π 2800 2FFF 00

Program the 2716 type EPROM via the EPROM programmer on the VIC User I/O port with data read from memory starting at location $2800 and ending at location $2FFF. The last input parameter specifies in hex the starting 256 byte page offset on the EPROM. If the low order byte of the starting memory address is zero and the offset is zero, then the programming starts with the first byte of the EPROM. For example, to program only the last byte of the 2K EPROM with a data byte from location $2FFF in memory, the command would be:

     .π 2FFF 2FFF 07

     During programming, a compare of EPROM to memory is done for each data byte just after it is written to the EPROM. Any mismatch due to failure to program the EPROM results in output to the screen of the mismatched memory location. If programming must be terminated early, just hit the STOP key. No other means should be used to abort EPROM programming. A warm restart or power down while programming can damage the EPROM.

Read EPROM

     .£ 2000 27FF 00

Load memory starting at location $2000 and ending at location $27FF with data read from the EPROM via the EPROM programmer on the VIC User I/O port. The last input parameter specifies in hex the starting 256 byte page offset on the EPROM. If the low order byte of the starting memory address is zero and the offset is zero, then reading starts with the first byte of the EPROM. For example, to read only the last byte of the 2K EPROM and load that byte into memory at location $10FF, the command would be:

     .£ 10FF 10FF 07

     During memory load, a compare of EPROM to memory is done for each data byte just after it is written to memory. Any mismatch because of failure to write the memory with data from the EPROM results in output to the screen of the mismatched memory location. The STOP key can be used to terminate the command early.

Compare EPROM

     . = 3000 37FF 00

Compare memory starting at location $3000 and ending at location $37FF with data read from the EPROM via the EPROM programmer on the VIC User I/O port. The last input parameter specifies in hex the starting 256 byte page offset on the EPROM. If the low order byte of the starting memory address is zero and the offset is zero, then the reading starts with the first byte of the EPROM. For example, to read only the last byte of the 2K EPROM and compare that with the data byte in memory at location $37FF, the command would be:

     .=37FF 37FF 07

 

     Any mismatch between the EPROM and corresponding memory data results in output to the screen of the mismatched memory location. The STOP key can be used to terminate the command early.


Commands for VIC Micromon


VIC Micromon Instruction
Command
SIMPLE ASSEMBLER
BREAK SET
COMPARE MEMORY
DISASSEMBLER
EXIT VIC MICROMON
FILL MEMORY
GO RUN
HUNT MEMORY
INITIAL MEMORY & SCREEN PTRS
JUMP TO SUBROUTINE
LOAD MEMORY FROM DEVICE
MEMORY DISPLAY
NEW LOCATER
OFFSET OR BRANCH CALCULATE
PRINT SWITCHER
QUICK TRACE
REGISTER DISPLAY
SAVE MEMORY TO DEVICE
TRANSFER MEMORY
VERIFY MEMORY FROM DEVICE
WALK CODE
EXIT TO BASIC
ASCII CONVERSION
DECIMAL CONVERSION
HEXADECIMAL CONVERSION
BINARY CONVERSION
CHECKSUM MEMORY
COMMAND END TONE ENABLE
COMMAND END TONE DISABLE
ADDITION
SUBTRACTION
LOAD MEMORY FROM EPROM
PROGRAM EPROM FROM MEMORY
COMPARE EPROM TO MEMORY

A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
Q
R
S
T
V
W
X
"
#
$
%
&
(
)
+
-
£
π
=

     Of the set of commands available on the PET version of Micromon, only two were removed in the conversion to the VIC. These were the K (Kill Micromon) and Z (change character sets) commands. The K command is not necessary since the VIC doesn't have the TIM monitor. The function of the Z command, which is to change character sets, is already provided for on the VIC by pressing the VIC shift and Commodore keys at the same time. The rest of the commands described for the PET Micromon (see elsewhere in this appendix) all apply identically to the commands for VIC Micromon, with the exception of the LOAD and SAVE commands, which have different formats.

     VIC Micromon is always entered from VIC BASIC by a SYS 16384 when it resides at $4000 to $4FFF. Either the E (Exit VIC Micromon) or the X (Exit to BASIC) command would be used to exit VIC Micromon and return to the BASIC environment. The difference between these two commands is that the X command leaves the VIC Micromon vectors in the IRQ and BRK interrupt vector locations while in the BASIC environment. Also, the tape buffer is left defined as beginning at $375. Thus, certain IRQ interrupt conditions such as the moving of the cursor to the top or bottom of the screen with output from a D, M, or $ command displayed will cause scrolling and reentry into VIC Micromon. Also, if a BRK instruction is executed, VIC Micromon will be reentered via its BRK interrupt handler.

     The E command restores the IRQ and BRK interrupt vectors and resets the tape buffer pointer to a value of $33C prior to exit to the VIC BASIC environment. Thus all active linkages and vectors to VIC Micromon are removed, and the VIC behaves as if VIC Micromon never existed. In particular, the E command should be used to exit VIC Micromon when the normal VIC cassette tape LOAD, SAVE, and VERIFY commands are to be used in the BASIC environment. Otherwise, invalid results are likely to occur with some tape operations.

     Both the E and X commands expect the stack pointer value (as shown for SP by the Register display command) to be the same as when VIC Micromon was first entered via the BASIC SYS command. If the value of SP or the part of the stack pointed to by SP is overwritten, such as by the execution of faulty code, a clean exit to BASIC by the E and X commands is unlikely. However, both the E and X commands do check if BASIC has been initialized, and if not, exit to BASIC is via an indirect jump to the address given at location $0000. The address given in location $0000 is $E378, which is the entry to initialize BASIC. In this case, the value of SP and the contents of the stack aren't important. Once in BASIC and regardless of how the exit from VIC Micromon was made, any subsequent access to VIC Micromon at $4000 is always by a SYS16384.

     VIC Micromon as given here is located from $4000 to $4FFF. It can be relocated to any 256 byte page boundary by making the changes, as shown in the following example, which relocate VIC Micromon from $4000 to $6000.

     The example begins with VIC Micromon at $4000 and ends with a relocated VIC Micromon in RAM at $6000 as well as the original at $4000.

     .T 4000 4FFF 6000
     .N 6000 6003 2000 4000 4FFF
     .N 6012 6E6D 2000 4000 4FFF
     .N 6FB5 6FFE 2000 4000 4FFF W


Location
Old Value
New Value
6018
602A
6392
6650
66E7
6897
45
43
4C
45
45
43
65
63
6C
65
65
63

     In order to access the relocated VIC Micromon at $6000, exit using the E command and then from BASIC use SYS24576.

Cartridge And Checksum

The VIC-20 treats cartridge programs located at $A000 in a special way. On power-up, a test is made for the existence of the $A000 cartridge program, and if one exists, an indirect jump is made to the address specified at location $A000. This jump is made after the stack pointer is initialized, but before anything else is done. Because kernal initialization has not occurred, any cartridge program using kernal i/O routines must do kernal initialization before using those routines.

     VIC Micromon as presented here has the kernal initialization calls built in so that it can easily be relocated and used as a cartridge program at $A000. Besides making the changes to relocate it to $A000, the only additional changes are to the first four bytes of VIC Micromon.


Location
Contents
A000
A001
A002
A003
09
A0
C7
FE

Power-up with VIC Micromon installed as a cartridge at $A000 will result in immediate entry into VIC Micromon. Because BASIC is not initialized when the E or X command is used after power-up, the exit to BASIC will be via an indirect jump to the address given in location $0000, which is the entry to initialization of BASIC. Once in BASIC, subsequent access of VIC Micromon at $A000 must be made to location $A012, which is done via a SYS40978.

     There is one last point, or rather one last byte, in VIC Micromon which is not used for anything other than to make the 4K byte checksum of VIC Micromon come out to a rounded up page value. For example, the VIC Micromon from $4000 to $4FFF has a data byte value of $E6 at location $4FFF that results in a checksum of $BF00. This provides an easy way to verify the integrity of VIC Micromon without having to memorize or look up a checksum.


Three Notes On VIC Micromon

Using the VIC Micromon tape commands L, S, and V on a VIC-20 with 3K of RAM installed at $400 to $FFF will result in overwrite of $400 to $438 with file header characters (blanks). This is due to the tape buffer being relocated to $375 while in VIC Micromon from the normal $33C. The normal VIC cassette commands will work properly and not overwrite this area when you EXIT from VIC Micromon. This is because VIC Micromon restores the tape buffer pointer value to $33C when an EXIT is done. This problem does not occur if the 3K RAM at $400 to $FFF is not installed.

     If the I (Initialize memory and screen pointers) command was used in VIC Micromon and you EXIT, then the RUN/STOP plus RESTORE should be used in addition to the NEW command to clean up the BASIC environment.

     Any binary image saved on cassette tape with the VIC Micromon "S" command can be loaded in the normal VIC-20 BASIC environment by using the command: LOAD "",1,1 which looks for the next program on tape and LOADs it into the same part of memory that it came from (see page 9 of VIC-20 Programmer's Reference Guide).

Checksum

There's a good amount of typing to do to enter the VIC Micromon program. Use the following BASIC program (after you've SAVEd a copy of your efforts) to locate any errors you might have made.


Program 1. Micromon Checksum.

1 IFPEEK(20478)=67ANDPEEK(20479)=73THENRUN10
2 PRINT"VIC20 MICROMON LOAD &":PRINT"VERIFIC
   ATION PROGRAM.":PRINT
3 PRINT:PRINT:PRINT"AT LEAST 4K BYTES OF":PR
   INT"RAM MUST BE INSTALLED"
4 PRINTOUT 16384 ($4000) ELSE":PRINT"LOAD WI
   LL FAIL.": PRINT
5 PRINT"IF LOADED & VERIFIED":PRINT"OK, MICR
   OMON WILL BE":PRINT"ENTERED AUTOMATIC
   ALLY."
6 LOAD"",1,1
10 DATA 13328,16867,15061,13732,14507,13829,1
   3267,12747,16288,13920
20 DATA 14355,11977,11877,13583,11338,15173,1
   2337,14852,14051,15713
30 DATA 13442,15242,14746,15059,13134,15848,1
   5858,17856,13327,8601
40 DATA 12171,10074
100 Q=16384
110 FOR BLOCK=1TO32
120 FOR BYTE=0TO127
130 X=PEEK(Q+BYTE):CK=CK+X
140 NEXT BYTE
150 READ SUM
160 IF SUM <> CK THEN PRINT"ERROR IN BLOCK #"B
    LOCK:ERR=1:GOTO170
165 PRINT"BLOCK #"BLOCK" OK"
170 CK=0:Q=Q+128
180 NEXT BLOCK
190 IFERR=ITHENPRINT"LOAD FAILED":END
200 SYS16384



Program 2. VIC Micromon.

4000 78 4C 15 40 41 30 C3 C2
4008 CD 20 8D FD 20 52 FD 20
4010 18 E5 20 F9 FD A9 DF A2
4018 45 8D 16 03 8E 17 03 AD
4020 14 03 AE 15 03 C9 91 D0
4028 04 E0 43 F0 09 8D 60 03
4030 8E 61 03 20 94 48 A9 75
4038 85 B2 A9 80 8D 8A 02 85
4040 9D A2 D6 20 5D 4E 8E 48
4048 03 8E 64 03 58 00 CE 3D
4050 03 D0 03 CE 3C 03 20 AE
4058 45 A2 42 A9 2A 4C 3D 49
4060 A9 3F 20 D2 FF A9 00 2C
4068 A9 0F 8D 0E 90 20 AE 45
4070 A9 2E 20 D2 FF A9 00 8D
4078 4E 03 8D 56 03 8D 64 03

4080 A2 7F 9A 20 8C 48 C9 2E
4088 F0 F9 C9 20 F0 F5 A2 24
4090 DD 90 4F D0 13 8D 49 03
4098 8A 0A AA BD B5 4F 85 FB
40A0 BD B6 4F 85 FC 6C FB 00
40A8 CA 10 E5 4C 60 40 A2 02
40B0 D0 02 A2 00 B4 FB D0 09
40B8 B4 FC D0 03 EE 56 03 D6
40C0 FC D6 FB 60 A9 00 8D 4E
40C8 03 20 13 42 A2 09 20 38
40D0 49 CA D0 FA 60 A2 02 B5
40D8 FA 48 BD 53 03 95 FA 68
40E0 9D 53 03 CA D0 Fl 60 AD
40E8 54 03 AC 55 03 4C F4 40
40F0 A5 FD A4 FE 38 E5 FB 8D
40F8 53 03 98 E5 FC A8 0D 53

4100 03 60 A9 00 F0 02 A9 01
4108 3D 57 03 20 CB 47 20 AE
4110 45 20 F0 40 20 21 48 90
4118 18 20 E7 40 90 7F 20 59
4120 41 E6 FD D0 02 E6 FE 20
4128 1F 49 AC 56 03 D0 6E F0
4130 E8 20 E7 40 18 AD 53 03
4138 65 FD 85 FD 98 65 FE 85
4140 FE 20 D5 40 20 59 41 20
4148 E7 40 B0 51 20 AE 40 20
4150 B2 40 AC 56 03 D0 46 F0
4158 EB A2 00 Al FB AC 57 03
4160 F0 02 81 FD Cl FD F0 0B
4168 20 F8 47 20 38 49 20 El
4170 FF F0 2A 60 20 E6 47 20
4178 Al 49 F0 1E AE 56 03 D0

4180 1C 20 F0 40 90 17 60 20
4188 54 48 8D 4B 03 20 7C 41
4190 AD 4B 03 81 FB 20 1F 49
4198 D0 F3 4C 60 40 4C 68 40
41A0 20 74 41 20 8C 48 C9 27
41A8 D0 12 20 8C 48 9D 65 03
41B0 E8 20 A4 49 F0 20 E0 20
41BB D0 F3 F0 1A 8E 59 03 20
41C0 5F 48 90 D6 9D 65 03 E8
41C8 20 A4 49 F0 09 20 57 48
41D0 90 C8 E0 20 D0 EE 8E 4A
41D8 03 20 AE 45 A2 00 A0 00
41E0 Bl FB DD 65 03 D0 0A C8
41E8 E8 EC 4A 03 D0 F2 20 68
41F0 41 20 1F 49 20 7C 41 B0
41F8 E3 20 2B 44 20 F0 40 90

4200 0D A0 2C 20 C4 40 20 6F
4208 42 20 El FF D0 EE 20 B6
4210 45 D0 8A 20 2D 49 20 F8
4218 47 20 38 49 20 C9 4D 48
4220 20 CF 42 68 20 E6 42 A2
4228 06 E0 03 D0 14 AC 4D 03
4230 F0 0F AD 58 03 C9 E8 Bl
4238 FB B0 1D 20 65 42 88 D0
4240 Fl 0E 58 03 90 0E BD E9
4248 4E 20 99 45 BD EF 4E F0
4250 03 20 99 45 CA D0 D2 60
4258 20 7B 42 AA E8 D0 01 C8
4260 98 20 65 42 8A 8E 4A 03
4268 20 FF 47 AE 4A 03 60 AD
4270 4D 03 20 7A 42 85 FB 84
4278 FC 60 38 A4 FC AA 10 01

4280 88 65 FB 90 01 C8 60 A8
4288 4A 90 0B 4A B0 17 C9 22
4290 F0 13 29 07 09 80 4A AA
4298 BD 98 4E B0 04 4A 4A 4A
42A0 4A 29 0F D0 04 A0 80 A9
42A8 00 AA BD DC 4E 8D 58 03
42B0 29 03 8D 4D 03 98 29 8F
42B8 AA 98 A0 03 E0 8A F0 0B
42C0 4A 90 08 4A 4A 09 20 88
42C8 D0 FA C8 88 D0 F2 60 B1
42D0 FB 20 65 42 A2 01 20 CE
42D8 40 CC 4D 03 C8 90 F0 A2
42E0 03 C0 03 90 Fl 60 A8 B9
42E8 F6 4E 8D 54 03 B9 36 4F
42F0 8D 55 03 A9 00 A0 05 0E
42F8 55 03 2E 54 03 2A 88 D0

4300 F6 69 3F 20 D2 FF CA D0
4308 EA 4C 38 49 20 E6 47 A9
4310 03 20 9E 43 A0 2C 4C 3C
4318 45 00 00 00 A9 3C 8D 13
4320 91 20 3A 43 A9 FF 8D 12
4328 91 A5 FB A0 18 20 34 43
4330 A5 FF A0 14 8D 10 91 8C
4338 11 91 A0 1C 8C 11 91 60
4340 20 54 48 85 FF 20 AE 45
4348 20 6E 41 20 7C 41 20 1C
4350 43 AD 49 03 0A 08 90 17
4358 Al FB 8D 10 91 78 A9 C4
4360 8D 19 91 A9 3C 8D 11-91
4368 A9 20 2C 1D 91 F0 FB 20
4370 3A 43 58 8E 12 91 A9 0C
4378 8D 11 91 AD 10 91 28 B0

4380 04 10 02 81 FB C1 FB F0
4388 03 20 68 41 20 1F 49 D0
4390 B7 A9 4C 48 A9 77 48 08
4398 48 48 48 6C 60 03 8D 4B
43A0 03 48 20 8C 48 20 00 49
43A8 D0 F8 68 49 FF 4C 72 42
43B0 20 2B 44 AE 56 03 D0 0D
43B8 20 F0 40 90 08 20 C8 43
43C0 20 El FF D0 EE 4C 0E 42
43C8 20 AE 45 A2 2E A9 3A 20
43D0 0E 48 20 38 49 20 F8 47
43D8 A9 08 20 EA 48 A9 08 20
43E0 AB 43 20 38 49 20 38 49
43E8 A9 12 20 D2 FF A0 08 A2
43F0 00 A1 FB 29 7F C9 20 B0
43FB 02 A9 2E 20 D2 FF A9 00

4400 85 D4 EA EA EA EA EA EA
4408 EA EA EA EA 20 1F 49 88
4410 D0 DF 4C DF 4A 20 E6 47
4418 A9 08 20 9E 43 20 B6 45
4420 20 C8 43 A9 3A 8D 77 02
4428 4C 48 45 20 E6 47 85 FD
4430 86 FE 20 A4 49 F0 03 20
4438 EB 47 4C AE 45 20 31 48
4440 85 FD 86 FE A2 00 8E 66
4448 03 20 8C 48 C9 20 F0 F4
4450 9D 4F 03 E8 E0 03 D0 F1
4458 CA 30 14 BD 4F 03 38 E9
4460 3F A0 05 4A 6E 66 03 6E
4468 65 03 88 D0 F6 F0 E9 A2
4470 02 20 A4 49 F0 22 C9 3A
4478 F0 1E C9 20 F0 F3 20 90
4480 45 B0 0F 20 6C 48 A4 FB
4488 84 FC 85 FB A9 30 9D 65
4490 03 E8 9D 65 03 E8 D0 D9
4498 8E 54 03 A2 00 8E 56 03
44A0 A2 00 8E 4B 03 AD 56 03
44A8 20 87 42 AE 58 03 8E 55
44B0 03 AA BD 36 4F 20 70 45
44B8 BD F6 4E 20 70 45 A2 06
44C0 E0 03 D0 14 AC 4D 03 F0
44C8 0F AD 58 03 C9 E8 A9 30
44D0 B0 1E 20 6D 45 88 D0 F1
44D8 0E 58 03 90 0E BD E9 4E
44E0 20 70 45 BD EF 4E F0 03
44E8 20 70 45 CA D0 D2 F0 06
44F0 20 6D 45 20 6D 45 AD 54
44F8 03 CD 4B 03 D0 7F 20 21

4500 48 AC 4D 03 F0 2F AD 55
4508 03 C9 9D D0 20 20 F0 40
4510 90 01 88 C8 D0 6F 98 2A
4518 AE 53 03 E0 82 A8 D0 03
4520 B0 03 38 B0 60 CA CA 8A
4528 AC 4D 03 D0 03 B9 FC 00
4530 91 FB 88 D0 F8 AD 56 03
4538 91 FB A0 41 8C 77 02 20
4540 B6 45 20 C4 40 20 6F 42
4548 A9 20 8D 78 02 8D 7D 02
4550 A5 FC 20 9F 45 8E 79 02
4558 8D 7A 02 A5 FB 20 9F 45
4560 8E 7B 02 8D 7C 02 A9 07
4568 85 C6 4C 68 40 20 70 45
4570 8E 4A 03 AE 4B 03 DD 65
4578 03 F0 0D 68 68 EE 56 03

4580 F0 03 4C A0 44 4C 60 40
4588 E8 8E 4B 03 AE 4A 03 60
4590 C9 30 90 03 C9 47 60 38
4598 60 CD 4E 03 D0 1A 60 48
45A0 4A 4A 4A 4A 20 17 48 AA
45A8 68 29 0F 4C 17 48 A9 0D
45B0 20 D2 FF A9 0A 2C A9 91
45B8 4C D2 FF 8D 3F 03 08 68
45C0 29 EF 8D 3E 03 8E 40 03
45C8 8C 41 03 68 18 69 01 8D
45D0 3D 03 68 69 00 8D 3C 03
45D8 A9 80 8D 48 03 D0 26 A9
45E0 C0 8D 2E 91 A9 3F 8D 2E
45E8 91 20 94 48 D8 68 8D 41
45F0 03 68 8D 40 03 68 8D 3F
45F8 03 68 8D 3E 03 68 8D 3D

4600 03 68 8D 3C 03 AD 14 03
4608 8D 44 03 AD 15 03 8D 43
4610 03 BA 8E 42 03 58 AD 3E
4618 03 29 10 F0 03 4C 4E 40
4620 2C 48 03 50 1F AD 3C 03
4628 CD 5B 03 D0 6B AD 3D 03
4630 CD 5A 03 D0 63 AD 5E 03
4638 D0 5B AD 5F 03 D0 53 A9
4640 80 8D 48 03 30 12 4E 48
4648 03 90 D2 AE 42 03 9A A9
4650 45 48 A9 BA 48 4C 06 47
4658 20 AE 45 20 14 49 8D 4B
4660 03 A0 00 20 F2 48 AD 3D
4668 03 AE 3C 03 85 FB 86 FC
4670 20 38 49 A9 24 8D 4E 03
4678 20 16 42 20 E4 FF F0 FB

4680 C9 03 D0 03 4C 68 40 C9
4688 4A D0 4E A9 01 8D 48 03
4690 D0 47 CE 5F 03 CF 5E 03
4698 AD 21 91 C9 FE D0 3A A2
46A0 53 4C 5B 40 A9 00 F0 12
46A8 AD 5C 03 AE 58 03 8D 5E
46B0 03 8E 5F 03 A9 40 D0 02
46B8 A9 80 8D 48 03 20 A4 49
46C0 F0 0F C9 20 D0 56 20 45
46C8 48 20 E3 48 20 A4 49 D0
46D0 4B 20 AE 45 AD 48 03 F0
46D8 1F 78 A9 A0 8D 2E 91 A9
46E0 5F 8D 2E 91 A9 DF A2 45
46E8 8D 44 03 8E 43 03 A9 49
46F0 A2 00 8D 28 91 8E 29 91
46F8 AE 42 03 9A 78 AD 44 03

4700 AE 43 03 20 98 48 AD 3C
4708 03 48 AD 3D 03 48 AD 3E
4710 03 48 AD 3F 03 AE 40 03
4718 AC 41 03 40 4C 60 40 20
4720 31 48 8D 5A 03 8E 5B 03
4728 A9 00 8D 5C 03 8D 5D 03
4730 20 42 48 8D 5C 03 8E 5D
4738 03 4C 68 40 20 CB 47 8D
4740 62 03 8E 63 03 20 42 48
4748 8D 4F 03 8E 50 03 20 42
4750 48 8D 51 03 8E 52 03 20
4758 A4 49 F0 0A 20 CF FF C9
4760 57 D0 03 EE 4E 03 20 21
4768 48 AE 56 03 D0 18 20 E7
4770 40 90 13 AC 4E 03 D0 1A
4778 B1 FB 20 87 42 AA BD F6

4780 4E D0 06 20 C4 40 4C 68
4788 40 AC 4D 03 C0 02 D0 33
4790 F0 03 8C 4D 03 88 38 B1
4798 FB AA ED 4F 03 C8 B1 FB
47A0 ED 50 03 90 1E 88 AD 51
47A8 03 F1 FB C8 AD 52 03 F1
4780 FB 90 10 88 18 8A 6D 62
47B8 03 91 FB C8 B1 FB 6D 63
47C0 03 91 FB 29 1F 49 88 10
47C8 FA 30 9E 20 31 48 85 FD
47D0 86 FE 20 42 48 8D 54 03
47D8 8E 55 03 20 8C 48 20 45
47E0 48 85 FB 86 FC 60 20 31
47E8 48 B0 F6 20 45 48 B0 03
47F0 20 42 48 85 FD 86 FE 60
47F8 A5 FC 20 FF 47 A5 FB 48

4800 4A 4A 4A 4A 20 17 48 AA
4808 68 29 0F 20 17 48 48 8A
4810 20 D2 FF 68 4C D2 FF 18
4818 69 F6 90 02 69 06 69 3A
4820 60 A2 02 B5 FA 48 B5 FC
4823 95 FA 68 95 FC CA D0 F3
4830 60 A9 00 8D 59 03 20 8C
4838 48 C9 20 F0 F9 20 6C 48
4840 B0 08 20 8C 48 20 57 48
4848 90 07 AA 20 57 48 90 01
4850 60 4C 60 40 20 74 41 A9
4858 00 8D 59 03 20 8C 48 C9
4860 20 D0 09 20 8C 48 C9 20
4868 D0 0F 18 60 20 81 48 0A
4870 0A 0A 0A 8D 59 03 20 8C
4878 48 20 81 48 0D 59 03 38

4880 60 C9 3A 08 29 0F 28 90
4888 02 69 08 60 20 A4 49 D0
4890 FA 4C 65 40 A9 91 A2 43
4898 8D 14 03 8E 15 03 60 20
48A0 A4 49 F0 37 20 E6 47 A5
48A8 FB 05 FC F0 22 A5 9A C9
48B0 03 D0 9E A5 FB 8D 93 02
48B8 A5 FC 8D 94 02 A9 02 AA
48C0 A8 20 BA FF 20 C0 FF A2
48C8 02 20 C9 FF 4C 75 40 A9
48D0 02 20 C3 FF A9 03 85 9A
48D8 4C 68 40 A5 9A C9 03 F0
48E0 DC D0 Fl 8D 3D 03 8E 3C
48E8 03 60 8D 4B 03 A0 00 20
48F0 38 49 Bl FB 20 FF 47 20
48F8 1F 49 CE 4B 03 D0 F0 60

4900 20 57 48 90 08 A2 00 81
4908 FB Cl FB D0 69 20 1F 49
4910 CE 4B 03 60 A9 3E 85 FB
4918 A9 03 85 FC A9 05 60 E6
4920 FB D0 09 E6 FF E6 FC D0
4928 03 EE 56 03 60 98 48 20
4930 AE 45 68 A2 2E 20 0E 48
4938 A9 20 4C D2 FF 20 0E 48
4940 A2 00 BD 76 4F 20 D2 FF
4948 E8 E0 1C D0 F5 A0 3B 20
4950 2D 49 AD 3C 03 20 FF 47
4958 AD 3D 03 20 FF 47 20 38
4960 49 AD 43 03 20 FF 47 AD
4968 44 03 20 FF 47 20 14 49
4970 20 EA 48 4C 68 40 4C 60
4978 40 20 31 48 20 E3 48 20

4980 42 48 8D 44 03 8E 43 03
4988 20 14 49 8D 4B 03 20 8C
4990 48 20 00 49 D0 F8 F0 DB
4998 20 CF FF C9 20 F0 F9 D0
49A0 06 20 F0 47 20 CF FF C9
49A8 0D 60 A0 01 84 BA A9 00
49B0 A2 65 A0 03 20 BD FF A8
49B8 20 E6 47 AD 49 03 C9 53
49C0 D0 08 20 A4 49 F0 AF 20
49CB EB 47 20 98 49 F0 29 C9
49D0 22 D0 A3 20 CF FF C9 22
49D8 F0 0B 91 BB E6 B7 C8 C0
49E0 51 90 F0 B0 91 20 A4 49
49E8 F0 0E 20 57 48 29 1F F0
49F0 85 85 BA 20 98 49 D0 D9
49F8 A9 00 85 B9 AD 49 03 C9

4A00 53 D0 0C A9 FB A6 FD A4
4A08 FE 20 D8 FF 4C 68 40 49
4A10 4C F0 02 A9 01 A6 FB A4
4A18 FC 20 D5 FF A5 90 29 10
4A20 F0 EA A9 69 A0 C3 20 1E
4A28 CB 4C 60 40 20 E6 47 20
4A30 A5 40 4C 68 40 20 E6 47
4A38 20 1F 49 20 1F 49 20 F0
4A40 47 20 38 49 20 F0 40 90
4A48 0A 98 D0 15 AD 53 03 30
4A50 10 10 08 C8 D0 0B AD 53
4A58 03 10 06 20 FF 47 4C 68
4A60 40 4C 60 40 20 E6 47 20
4A68 7A 4A 4C 68 40 20 AE 45
4A70 A2 2E A9 24 20 0E 48 20
4A78 F8 47 20 EA 4A 20 A0 4A

4A80 20 38 49 20 86 4A 20 89
4A88 4A 20 38 49 A2 04 A9 30
4A90 18 0E 54 03 2E 55 03 69
4A98 00 20 D2 FF CA D0 EF 60
4AA0 A5 FC A6 FB 8D 55 03 8E
4AA8 54 03 20 38 49 A5 FC 20
4AB0 B4 4A A5 FB AA 20 38 49
4AB8 8A 29 7F C9 20 08 B0 0A
4AC0 A9 12 20 D2 FF 8A 18 69
4AC8 40 AA 8A 20 D2 FF A9 00
4AD0 85 D4 EA EA EA EA EA EA
4AD8 EA EA EA EA 28 B0 C0 A9
4AE0 92 2C A9 14 2C A9 22 4C
4AE8 D2 FF 20 38 49 A6 FB A5
4AF0 FC 4C CD DD 20 05 4B B0
4AF8 41 20 38 49 20 F8 47 20

4B00 7D 4A 4C 68 40 A2 04 A9
4B08 00 85 FC 20 C2 4B 20 2B
4B10 4B 85 FB 20 22 4B 20 3D
4B18 4B CA D0 F7 08 20 38 49
4B20 28 60 20 A4 49 F0 0F C9
4B28 20 F0 0B C9 30 90 0B C9
4830 3A B0 07 29 0F 60 68 68
4B38 18 60 4C 60 40 85 FE A5
4B40 FC 48 A5 FB 48 06 FB 26
4B48 FC 06 FB 26 FC 68 65 FB
4B50 85 FB 68 65 FC 85 FC 06
4858 FB 26 FC A5 FE 65 FB 85
4B60 FB A9 00 65 FC 85 FC 60
4868 20 C2 4B 8D 55 03 48 48
4B70 20 38 49 20 38 49 68 20
4B78 FF 47 20 38 49 68 AA A9

4B80 00 20 F1 4A 20 38 49 20
4B88 86 4A 4C 68 40 20 9F 4B
4B90 20 38 49 20 F8 47 20 EA
4B98 4A 20 A0 4A 4C 68 40 A2
4BA0 0F A9 00 85 FB 85 FC 20
4BA8 C2 4B 20 2B 4B 20 BC 4B
4BB0 20 22 4B 20 BC 4B CA D0
4BB8 F7 4C 38 49 4A 26 FB 26
4BC0 FC 60 20 8C 48 C9 20 F0
4BC8 F9 60 20 54 48 8D 88 02
4BD0 A6 FB A4 FC 20 8A FE A6
4BD8 FD A4 FE 20 7B FE 20 18
4BE0 E5 20 A4 E3 4C 68 40 20
4BE8 F0 47 4C DB 47 20 E7 4B
4BF0 18 A5 FB 65 FD 85 FB A5
4BF8 FC 65 FE 85 FC 4C 0D 4C

4C00 20 E7 4B 20 F0 40 84 FC
4C08 AD 53 03 85 FB 20 38 49
4C10 20 F8 47 4C 68 40 A9 F0
4C18 2C A9 00 8D 0B 90 4C 65
4020 40 78 20 52 FD 58 A9 3C
4C28 85 B2 AE 42 03 9A A5 73
4C30 C9 E6 F0 95 6C 00 C0 20
4C38 E7 4B 20 21 48 20 38 49
4C40 A0 00 8C 54 03 SC 55 03
4C48 20 F0 40 90 1B AC 56 03
4C50 D0 16 18 B1 FB 6D 54 03
4C58 8D 54 03 98 6D 55 03 8D
4C60 55 03 20 1F 49 4C 48 4C
4C68 AD 55 03 20 FF 47 AD 54
4C70 03 20 FF 47 4C 68 40 AD
4C78 64 03 D0 04 A5 C6 D0 03

4C80 4C 56 FF AD 77 02 C9 11
4C88 D0 7D A5 D6 C9 16 D0 F0
4C90 A5 D1 85 FD A5 D2 85 FE
4C98 A9 17 8D 5E 03 A0 01 20
4CA0 51 4E C9 3A F0 1A C9 2C
4CA8 F0 16 C9 24 F0 12 CE 5E
4CB0 03 F0 CD 38 A5 FD E9 16
4CB8 85 FD B0 E1 C6 FE D0 DD
4CC0 8D 49 03 20 0A 4E B0 B8
4CC8 AD 49 03 C9 3A D0 11 18
4CD0 A5 FB 69 08 85 FB 90 02
4CD8 E6 FC 20 C8 43 4C F4 4C
4CE0 C9 24 F0 1A 20 C9 4D 20
4CE8 6F 42 A9 00 8D 4E 03 A0
4CF0 2C 20 13 42 A9 00 85 C6
4CF8 4C 0E 42 4C 56 FF 20 1F

4D00 49 20 6D 4A 4C F4 4C C9
4D08 91 D0 F0 A5 D6 D0 EC A5
4D10 D1 85 FD A5 D2 85 FE A9
4D18 17 8D 5E 03 A0 01 20 51
4D20 4E C9 3A F0 1A C9 2C F0
4D28 16 C9 24 F0 12 CE 5E 03
4D30 F0 15 18 A5 FD 69 16 85
4D38 FD 90 E1 E6 FE D0 DD 8D
4D40 49 03 20 0A 4E 90 03 4C
4D48 56 FF AD 49 03 C9 3A F0
4D50 06 C9 24 F0 1D D0 27 20
4D58 D0 4D 38 A5 FB E9 08 85
4D60 FB B0 02 C6 FC 20 CB 43
4D68 A9 00 85 C6 20 05 4E 4C
4D70 70 40 20 D0 4D 20 B2 40
4D78 20 70 4A 4C 68 4D 20 D0

4D80 4D A5 FB A6 FC 85 FD 86
4D88 FE A9 10 8D 5E 03 38 A5
4D90 FD ED 5E 03 85 FB A5 FE
4D98 E9 00 85 FC 20 C9 4D 20
4DA0 6F 42 20 F0 40 F0 07 B0
4DA8 F3 CE 5E 03 D0 E0 EE 4D
4DB0 03 AD 4D 03 20 AB 43 A2
4DB8 00 A1 FB 8E 4E 03 A9 2C
4DC0 20 33 49 20 16 42 4C 68
4DC8 4D A2 00 A1 FB 4C 87 42
4DD0 A6 D2 20 D7 4D A6 F4 E8
4DD8 86 AD 86 FE A2 00 86 AC
4DE0 A9 2C 85 FD A0 CE E8 88
4DE8 B1 AC 91 FD 98 D0 F8 C6
4DF0 AD C6 FE CA 10 F1 A9 20
4DF8 A6 D2 86 FE 84 FD A0 2B

4E00 91 FD 88 10 FB A9 13 4C
4E08 D2 FF C0 16 D0 02 38 60
4E10 20 51 4E C9 20 F0 F3 88
4E18 20 3A 4E AA 20 3A 4E 85
4E20 FB 86 FC A9 FF 8D 64 03
4E28 85 CC A5 CF F0 0A A5 CE
4E30 A4 D3 91 D1 A9 00 85 CF
4E38 18 60 20 51 4E 20 81 48
4E40 0A 0A 0A 0A 8D 59 03 20
4E48 51 4E 20 81 48 0D 59 03
4E50 60 B1 FD C8 29 7F C9 20
4E58 B0 02 09 40 60 BD 98 4D
4E60 20 D2 FF E8 D0 F7 60 00
4E68 00 00 00 00 00 00 0D 56
4E70 49 43 32 30 20 4D 49 43
4E78 52 4F 4D 4F 4E 20 56 31

4E80 2E 32 20 20 20 42 49 4C
4E88 4C 20 59 45 45 20 32 32
4E90 20 4A 41 4E 20 20 38 33
4E98 40 02 45 03 D0 08 40 09
4EA0 30 22 45 33 D0 08 40 09
4EA8 40 02 45 33 D0 08 40 09
4EB0 40 02 45 B3 D0 08 40 09
4EB8 00 22 44 33 D0 8C 44 00
4EC0 11 22 44 33 D0 8C 44 9A
4EC8 10 22 44 33 D0 08 40 09
4ED0 10 22 44 33 D0 08 40 09
4ED8 62 13 78 A9 00 21 81 82
4EE0 00 00 59 4D 91 92 86 4A
4EE8 85 9D 2C 29 2C 23 28 24
4EF0 59 00 58 24 24 00 1C 8A
4EF8 1C 23 5D 8B 1B Al 9D 8A

4F00 1D 23 9D 8B 1D Al 00 29
4F08 19 AE 69 A8 19 23 24 53
4F10 1B 23 24 53 19 Al 00 1A
4F18 5B 5B A5 69 24 24 AE AE
4F20 A8 AD 29 00 7C 00 15 9C
4F28 6D 9C A5 69 29 53 84 13
4F30 34 11 A5 69 23 A0 D8 62
4F38 5A 48 26 62 94 88 54 44
4F40 C8 54 68 44 E8 94 00 B4
4F48 08 84 74 B4 28 6E 74 F4
4F50 CC 4A 72 F2 A4 8A 00 AA
4F58 A2 A2 74 74 74 72 44 68
4F60 B2 32 B2 00 22 00 1A 1A
4F68 26 26 72 72 88 C8 C4 CA
4F70 26 48 44 44 A2 C8 0D 20
4F78 20 20 20 50 43 20 20 49

4F80 52 51 20 20 53 52 20 41
4F88 43 20 58 52 20 59 52 20
4F90 53 50 41 42 43 44 46 47
4F98 48 4C 4D 4E 51 52 28 54
4FA0 57 58 2C 3A 3R 24 23 22
4FA8 2B 2D 4F 49 4A 25 26 45
4FB0 56 29 3D 5C FF AA 49 9F
4FB8 48 3D 44 1F 47 02 41 F9
4FC0 41 87 41 A4 46 A0 41 AA
4FC8 49 B0 43 3C 47 A8 46 40
4FD0 49 16 4C 06 41 B8 46 2A
4FD8 4C 0C 43 15 44 79 49 64
4FE0 4A F4 4A 68 4B ED 4B 00
4FE8 4C 35 4A CA 4B 2C 4A 8D
4FF0 4B 37 4C 21 4C AA 49 19
4FF8 4C 40 43 40 43 40 43 49

Supermon64

Supermon64 is your gateway to machine language programming on the Commodore 64. Supermon, in several versions, has been popular over the years as a major programming tool for Commodore users. Supermon64 itself is in machine language, but you can type it in without knowing what it means. Using the Tiny PEEKer/POKEr (Program 1), or via the built-in monitor of a PET, type it in and SAVE it. The fastest way to check for errors is to type in Program 3 on a regular PET. Then load Supermon64 into the PET. It will come in above your BASIC. Then RUN the checksum and it will report the location of any errors. Type POKE 8192,0 and hit RETURN. Then type POKE 44,32 followed by NEW.

     Enter the following:


Program 1. Tiny PEEKer/POKEr.

100 PRINT "TINY PEEKER/POKER"
110 X$="*":INPUT X$:IF X$="*" THEN END
120 GOSUB 500
130 IF E GOTO 280
140 A=V
150 IF J>LEN(X$) GOTO 300
160 FOR I=0 TO 7
170 P=J:GOSUB 550
180 C(I)=V
190 IF E GOTO 280
200 NEXT I
210 T=0
220 FOR I=0 TO 7
230 POKE A+I,C(I)
240 T=T+C(I)
250 NEXT I
260 PRINT "CHECKSUM=";T
270 GOTO 110
280 PRINT MID$(X$,1,J);"??":GOTO 110
300 T=0
310 FOR I=0 TO 7
320 V=PEEK(A+I)
330 T=T+V
340 V=V/16
350 PRINT " ";
360 FOR J=1 TO 2
370 V%=V
380 V=(V-V%)*16
390 IF V%>9 THEN V%=V%+7
400 PRINT CHR$(V%+48);
410 NEXT J
420 NEXT I
430 PRINT "/";T
440 GOTO 110
500 P=1
510 L=4
520 GOTO 600
550 P=J
560 L=2
600 E=0
610 V=0
620 FOR J=P TO LEN(X$)
630 X=ASC(MID$(X$,J))
640 IF X=32 THEN NEXT J
650 IF J>LEN(X$) GOTO 790
660 P=J
670 FOR J=P TO LEN(X$)
680 X=ASC(MID$(X$,J))
690 IF X<>32 THEN NEXT J
700 IF J-P<>L GOTO 790
710 FOR K=P TO J-1
720 X=ASC(MID$(X$,K))
730 IF X<58 THEN X=X-48
740 IF X>64 THEN X=X-55
750 IF X<0 OR X>15 GOTO 790
760 V=V*16+X
770 NEXT K
780 RETURN
790 E=-1
800 RETURN

This program is a very tiny monitor. It will allow you to enter information into memory, eight bytes at a time. To do this: wait for the question mark, and then type in monitor-format the address and contents:

     ? 0800 00 1A 08 64 00 99 22 93

     The program will return a checksum value to you, which you can use to insure that you have entered the information correctly. To view memory, type in only the address: the contents will be displayed.

Completing The Job

When you have finished entering all that data, you can make Supermon64happen quite easily. Three last POKE commands and a CLR:


POKE 44,8
POKE 45, 235
POKE 46,17
CLR

You have Supermon64. Save it with a conventional BASIC SAVE before you do anything else.

     Now you may RUN it - and learn how to use it.



NOTE: Before entering the hex numbers with Tiny PEEKer1POKEr, type in the memory partitioning POKES: POKE 8192,0 and POKE 44,32, and then type NEW When you've finished entering all the hex numbers, type: POKE 44,8: POKE 46,17. CLR. You can then SAVE Supermon64 in the ordinary, BASIC way, to tape or disk. It's ready now to LOAD or RUN. Note also that the checksum program on page 333 checks 129 bytes at a time. This can have the effect of attributing a typing error to the wrong block i f the error occurs near the beginning or the end of a block.



• Simple assembler

.A 2000 LDA #$12
.A 2002 STA $8000,X
.A 2005 (RETURN)

In the above example the user started assembly at 2000 hex. The first instruction was load a register with immediate 12 hex. In the second line the user did not need to type the A and address. The simple assembler prompts with the next address. To exit the assembler type a return after the address prompt. Syntax is the same as the disassembler output.

• Disassembler

.D 2000
(SCREEN CLEARS)
2000 A9 12       LDA #$12
2002 9D 00 80    STA $8000,X
2005 AA          TAX
2006 AA          TAX


(Full page of instructions)

Disassembles 22 instructions starting at 2000 hex. The three bytes following the address may be modified. Use the CRSR keys to move to and modify the bytes. Hit return and the bytes in memory will be changed. Supermon64 will then disassemble that page again.

• Printing disassembler

.P 2000,2040
2000 A9 12       LDA #$12
2002 9D 00 80    STA $8000,X
2005 AA          TAX

   .... 

203F A2 00       LDX #$00


To engage printer, set up beforehand:
OPEN 4,4:CMD4

• Fill memory

.F 1000 1100 FF

Fills the memory from 1000 hex to 1100 hex with the byte FF hex.

• Go run

.G

Go to the address in the PC register display and begin RUN code. All the registers will be replaced with the displayed values.

.G 1000

Go to address 1000 hex and begin running code.

• Hunt memory

.H C000 D000 'READ

Hunt through memory from 0000 hex to D000 hex for the ASCII string read and print the address where it is found. A maximum of 32 characters may be used.

.H C000 D000 20 D2 FF

Hunt through memory from 0000 hex to D000 hex for the sequence of bytes 20 D2 FF and print the address. A maximum of 32 bytes may be used.

• Load

.L

Load any program from cassette #1.

.L "RAM TEST"

Load from cassette #1 the program named RAM TEST.

.L "RAM TEST",08

Load from disk (device 8) the program named RAM TEST. This command leaves BASIC pointers unchanged.

• Memory display

.M 0000 0080
.: 0000 00 01 02 03 04 05 06 07
.: 0008 08 09 0A 0B 0C 0D 0E 0F

Display memory from 0000 hex to 0080 hex. The bytes following the .: can be altered by typing over them, then typing a return.

• Register display

.R

    PC  IRQ  SR AC XR YR SP
   0000 E62E 01 02 03 04 05

     Displays the register values saved when Supermon64 was entered. The values may be changed with the edit followed by a return.

• Save

.S "PROGRAM NAME",01,0800,0C80

SAVE to cassette #1 memory from 0800 hex up to but not including OC80 hex and name it PROGRAM NAME.

.S "0:PROGRAM NAME",08,1200,1F50

     SAVE to disk drive #0 memory from 1200 hex up to but not including 1F50 hex and name it PROGRAM NAME.

• Transfer memory

.T 1000 1100 5000

     Transfer memory in the range 1000 hex to 1100 hex and start storing it at address 5000 hex.

• Exit to BASIC

.X

     Return to BASIC ready mode. The stack value SAVEd when entered will be restored. Care should be taken that this value is the same as when the monitor was entered. A CLR in BASIC will fix any stack problems.

Program 2. Supermon64.

0800 00 1A 04 64 00 99 22 93
0808 12 1D 1D 1D 1D 53 55 50
0810 45 52 20 36 34 2D 4D 4F
0818 4E 00 31 04 6E 00 99 22
0820 11 20 20 20 20 20 20 20
0828 20 20 20 20 20 20 20 20
0830 00 4B 04 78 00 99 22 11
0838 20 2E 2E 4A 49 4D 20 42
0840 55 54 54 45 52 46 49 45
0848 4C 44 00 66 04 82 00 9E
0850 28 C2 28 34 33 29 AA 32
0858 35 36 AC C2 28 34 34 29
0860 AA 31 32 37 29 00 00 00
0868 AA AA AA AA AA AA AA AA
0870 AA AA AA AA AA AA AA AA
0878 AA AA AA AA AA AA AA AA

0880 A5 2D 85 22 A5 2E 85 23
0888 A5 37 85 24 A5 38 85 25
0890 A0 00 A5 22 D0 02 C6 23
0898 C6 22 Bl 22 D0 3C A5 22
08A0 D0 02 C6 23 C6 22 Bl 22
08A8 F0 21 85 26 A5 22 D0 02
08B0 C6 23 C6 22 B1 22 18 65
08B8 24 AA A5 26 65 25 48 A5
08C0 37 D0 02 C6 38 C6 37 68
08C8 91 37 8A 48 A5 37 D0 02
08D0 C6 38 C6 37 68 91 37 18
08D8 90 B6 C9 4F D0 ED A5 37
08E0 85 33 A5 38 85 34 6C 37
08E8 00 4F 4F 4F 4F AD E6 FF
08F0 00 8D 16 03 AD E7 FF 00
08F8 8D 17 03 A9 80 20 90 FF

0900 00 00 D8 68 8D 3E 02 68
0908 8D 3D 02 68 8D 3C 02 68
0910 8D 3B 02 68 AA 68 A8 38
0918 8A E9 02 8D 3A 02 98 E9
0920 00 00 8D 39 02 BA 8E 3F
0928 02 20 57 FD 00 A2 42 A9
0930 2A 20 57 FA 00 A9 52 D0
0938 34 E6 Cl D0 06 E6 C2 D0
0940 02 E6 26 60 20 CF FF C9
0948 0D D0 F8 68 68 A9 90 20
0950 D2 FF A9 00 00 85 26 A2
0958 0D A9 2E 20 57 FA 00 A9
0960 05 20 D2 FF 20 3E F8 00
0968 C9 2E F0 F9 C9 20 F0 F5
0970 A2 0E DD B7 FF 00 D0 0C
0978 8A 0A AA BD C7 FF 00 48

0980 BD C6 FF 00 48 60 CA 10
0988 EC 4C ED FA 00 A5 Cl 8D
0990 3A 02 A5 C2 8D 39 02 60
0998 A9 08 85 1D A0 00 00 20
09A0 54 FD 00 Bl Cl 20 48 FA
09A8 00 20 33 F8 00 C6 1D D0
09B0 Fl 60 20 88 FA 00 90 0B
09B8 A2 00 00 81 Cl Cl Cl F0
09C0 03 4C ED FA 00 20 33 F8
09C8 00 C6 1D 60 A9 3B 85 Cl
09D0 A9 02 85 C2 A9 05 60 98
09D8 48 20 57 FD 00 68 A2 2E
09E0 4C 57 FA 00 A9 90 20 D2
09E8 FF A2 00 00 BD EA FF 00
09F0 20 D2 FF E8 E0 16 D0 F5
09F8 A0 3B 20 C2 F8 00 AD 39

0A00 02 20 48 FA 00 AD 3A 02
0A08 20 48 FA 00 20 B7 F8 00
0A70 20 8D F8 00 F0 5C 20 3E
0A18 F8 00 20 79 FA 00 90 33
0A20 20 69 FA 00 20 3E F8 00
0A28 20 79 FA 00 90 28 20 69
0A30 FA 00 A9 90 20 D2 FF 20
0A38 El FF F0 3C A6 26 D0 38
0A40 A5 C3 C5 Cl A5 C4 E5 C2
0A48 90 2E A0 3A 20 C2 F8 00
0A50 20 41 FA 00 20 8B F8 00
0A58 F0 E0 4C ED FA 00 20 79
0A60 FA 00 90 03 20 80 F8 00
0A68 20 B7 F8 00 D0 07 20 79
0A70 FA 00 90 EB A9 08 85 1D
0A78 20 3E F8 00 20 Al F8 00

0A80 D0 F8 4C 47 F8 00 20 CF
0A88 FF C9 0D F0 0C C9 20 D0
0A90 Dl 20 79 FA 00 90 03 20
0A98 80 F8 00 A9 90 20 D2 FF
0AA0 AE 3F 02 9A 78 AD 39 02
0AA8 48 AD 3A 02 48 AD 3B 02
0AB0 48 AD 3C 02 AE 3D 02 AC
0AB8 3E 02 40 A9 90 20 D2 FF
0AC0 AE 3F 02 9A 6C 02 A0 A0
0AC8 01 84 BA 84 B9 88 84 B7
0AD0 84 90 84 93 A9 40 85 BB
0AD8 A9 02 85 BC 20 CF FF C9
0AE0 20 F0 F9 C9 0D F0 38 C9
0AE8 22 D0 14 20 CF FF C9 22
0AF0 F0 10 C9 0D F0 29 91 BB
0AF8 E6 B7 C8 C0 10 D0 EC 4C

0B00 ED FA 00 20 CF FF C9 0D
0B08 F0 16 C9 2C D0 DC 20 88
0B10 FA 00 29 0F F0 E9 C9 03
0B18 F0 E5 85 BA 20 CF FF C9
0B20 0D 60 6C 30 03 6C 32 03
0B28 20 96 F9 00 D0 D4 A9 90
0B30 20 D2 FF A9 00 00 20 EF
0B38 F9 00 A5 90 29 10 D0 C4
0B40 4C 47 F8 00 20 96 F9 00
0B48 C9 2C D0 BA 20 79 FA 00
0B50 20 69 FA 00 20 CF FF C9
0B58 2C D0 AD 20 79 FA 00 A5
0B60 C1 85 AE A5 C2 85 AF 20
0B68 69 FA 00 20 CF FF C9 0D
0B70 D0 98 A9 90 20 D2 FF 20
0B78 F2 F9 00 4C 47 F8 00 A5

0B80 C2 20 48 FA 00 A5 C1 48
0B88 4A 4A 4A 4A 20 60 FA 00
0B90 AA 68 29 0F 20 60 FA 00
0B98 48 8A 20 D2 FF 68 4C D2
0BA0 FF 09 30 C9 3A 90 02 69
0BA8 06 60 A2 02 B5 C0 48 B5
0BB0 C2 95 C0 68 95 C2 CA D0
0BB8 F3 60 20 88 FA 00 90 02
0BC0 85 C2 20 88 FA 00 90 02
0BC8 85 C1 60 A9 00 00 85 2A
0BD0 20 3E F8 00 C9 20 D0 09
0BD8 20 3E F8 00 C9 20 D0 0E
0BE0 18 60 20 AF FA 00 0A 0A
0BE8 0A 0A 85 2A 20 3E F8 00
0BF0 20 AF FA 00 05 2A 38 60
0BF8 C9 3A 90 02 69 08 29 0F

0C00 60 A2 02 2C A2 00 00 B4
0C08 C1 D0 08 B4 C2 D0 02 E6
0C10 26 D6 C2 D6 C1 60 20 3E
0C18 F8 00 C9 20 F0 F9 60 A9
0C20 00 00 8D 00 00 01 20 CC
0C28 FA 00 20 8F FA 00 20 7C
0C30 FA 00 90 09 60 20 3E F8
0C38 00 20 79 FA 00 B0 DE AE
0C40 3F 02 9A A9 90 20 D2 FF
0C48 A9 3F 20 D2 FF 4C 47 F8
0C50 00 20 54 FD 00 CA D0 FA
0C58 60 E6 C3 D0 02 E6 C4 60
0C60 A2 02 B5 C0 48 B5 27 95
0C68 C0 68 95 27 CA D0 F3 60
0C70 A5 C3 A4 C4 38 E9 02 B0
0C78 0E 88 90 0B A5 28 A4 29
0C80 4C 33 FB 00 A5 C3 A4 C4
0088 38 E5 C1 85 1E 98 E5 C2
0C90 A8 05 1E 60 20 D4 FA 00
0C98 20 69 FA 00 20 E5 FA 00
0CA0 20 0C FB 00 20 E5 FA 00
0CA8 20 2F FB 00 20 69 FA 00
0CB0 90 15 A6 26 D0 64 20 28
0CB8 FB 00 90 5F A1 C1 81 C3
0CC0 20 05 FB 00 20 33 F8 00
0CC8 D0 EB 20 28 FB 00 18 A5
0CD0 1E 65 C3 85 C3 98 65 C4
0CD8 85 C4 20 0C FB 00 A6 26
0CE0 D0 3D A1 C1 81 C3 20 28
0CE8 FB 00 B0 34 20 B8 FA 00
0CF0 20 BB FA 00 4C 7D FB 00
0CF8 20 D4 FA 00 20 69 FA 00

0D00 20 E5 FA 00 20 69 FA 00
0D08 20 3E F8 00 20 88 FA 00
0D10 90 14 85 1D A6 26 D0 11
0D18 20 2F FB 00 90 0C A5 1D
0D20 81 C1 20 33 F8 00 D0 EE
0D28 4C ED FA 00 4C 47 F8 00
0D30 20 D4 FA 00 20 69 FA 00
0D38 20 E5 FA 00 20 69 FA 00
0D40 20 3E F8 00 A2 00 00 20
0D48 3E F8 00 C9 27 D0 14 20
0D50 3E F8 00 9D 10 02 E8 20
0D58 CF FF C9 0D F0 22 E0 20
0D60 D0 F1 F0 1C 8E 00 00 01
0D68 20 8F FA 00 90 C6 9D 10
0D70 02 E8 20 CF FF C9 0D F0
0D78 09 20 88 FA 00 90 B6 E0

0D80 20 D0 EC 86 1C A9 90 20
0D88 D2 FF 20 57 FD 00 A2 00
0D90 00 A0 00 00 B1 C1 DD 10
0D98 02 D0 0C C8 E8 E4 1C D0
0DA0 F3 20 41 FA 00 20 54 FD
0DA8 00 20 33 F8 00 A6 26 D0
0DB0 8D 20 2F FB 00 B0 DD 4C
0DB8 47 F8 00 20 D4 FA 00 85
0DC0 20 A5 C2 85 21 A2 00 00
0DC8 86 28 A9 93 20 D2 FF A9
0DD0 90 20 D2 FF A9 16 85 1D
0DD8 20 6A FC 00 20 CA FC 00
0DE0 85 C1 84 C2 C6 1D D0 F2
0DE8 A9 91 20 D2 FF 4C 47 F8
0DF0 00 A0 2C 20 C2 F8 00 20
0DF8 54 FD 00 20 41 FA 00 20

0E00 54 FD 00 A2 00 00 A1 C1
0E08 20 D9 FC 00 48 20 1F FD
0E10 00 68 20 35 FD 00 A2 06
0E18 E0 03 D0 12 A4 1F F0 0E
0E20 A5 2A C9 E8 Bl Cl B0 1C
0E28 20 C2 FC 00 88 D0 F2 06
0E30 2A 90 0E BD 2A FF 00 20
0E38 A5 FD 00 BD 30 FF 00 F0
0E40 03 20 A5 FD 00 CA D0 D5
0E48 60 20 CD FC 00 AA E8 D0
0E50 01 C8 98 20 C2 FC 00 8A
0E58 86 1C 20 48 FA 00 A6 1C
0E60 60 A5 1F 38 A4 C2 AA 10
0E68 01 88 65 Cl 90 01 C8 60
0E70 A8 4A 90 0B 4A B0 17 C9
0E78 22 F0 13 29 07 09 80 4A

0E80 AA BD D9 FE 00 B0 04 4A
0E88 4A 4A 4A 29 0F D0 04 A0
0E90 80 A9 00 00 AA BD 1D FF
0E98 00 85 2A 29 03 85 1F 98
0EA0 29 8F AA 98 A0 03 E0 8A
0EA8 F0 0B 4A 90 08 4A 4A 09
0EB0 20 88 D0 FA C8 88 D0 F2
0EB8 60 Bl Cl 20 C2 FC 00 A2
DEC0 01 20 FE FA 00 C4 1F C8
0EC8 90 Fl A2 03 C0 04 90 F2
0ED0 60 A8 B9 37 FF 00 85 28
0ED8 B9 77 FF 00 85 29 A9 00
0EE0 00 A0 05 06 29 26 28 2A
0EE8 88 D0 F8 69 3F 20 D2 FF
0EF0 CA D0 EC A9 20 2C A9 0D
0EF8 4C D2 FF 20 D4 FA 00 20

0F00 69 FA 00 20 E5 FA 00 20
0F08 69 FA 00 A2 00 00 86 28
0F10 A9 90 20 D2 FF 20 57 FD
0F18 00 20 72 FC 00 20 CA FC
0F20 00 85 Cl 84 C2 20 El FF
0F28 F0 05 20 2F FB 00 B0 E9
0F30 4C 47 F8 00 20 D4 FA 00
0F38 A9 03 85 1D 20 3E F8 00
0F40 20 Al F8 00 D0 F8 A5 20
0F48 85 Cl A5 21 85 C2 4C 46
0F50 FC 00 C5 28 F0 03 20 D2
0F58 FF 60 20 D4 FA 00 20 69
0F60 FA 00 8E 11 02 A2 03 20
0F68 CC FA 00 48 CA D0 F9 A2
0F70 03 68 38 E9 3F A0 05 4A
0F78 6E 11 02 6E 10 02 88 D0

0F80 F6 CA D0 ED A2 02 20 CF
0F88 FF C9 0D F0 lE C9 20 F0
0F90 F5 20 D0 FE 00 B0 0F 20
0F98 9C FA 00 A4 Cl 84 C2 85
0FA0 Cl A9 30 9D 10 02 E8 9D
0FA8 10 02 E8 D0 DB 86 28 A2
0FB0 00 00 86 26 F0 04 E6 26
0FB8 F7 75 A2 00 00 86 1D A5
0FC0 26 20 D9 FC 00 A6 2A 86
0FC8 29 AA BC 37 FF 00 BD 77
0FD0 FF 00 20 B9 FE 00 D0 E3
0FD8 A2 06 E0 03 D0 19 A4 1F
0FE0 F0 15 A5 2A C9 E8 A9 30
0FE8 B0 21 20 BF FE 00 D0 CC
0FF0 20 Cl FE 00 D0 C7 88 D0
0FF8 EB 06 2A 90 0B BC 30 FF

1000 00 BD 2A FF 00 20 B9 FE
1008 00 D0 B5 CA D0 Dl F6 0A
1010 20 B8 FE 00 D0 AB 20 B8
1018 FE 00 D0 A6 A5 28 C5 1D
1020 D0 A0 20 69 FA 00 A4 1F
1028 F0 28 A5 29 C9 9D D0 1A
1030 20 1C FB 00 90 0A 98 D0
1038 04 A5 1E 10 0A 4C ED FA
1040 00 C8 D0 FA A5 1E 10 F6
1048 A4 1F D0 03 B9 C2 00 00
1050 91 Cl 88 D0 F8 A5 26 91
1058 Cl 20 CA FC 00 85 Cl 84
1060 C2 A9 90 20 D2 FF A0 41
1068 20 C2 F8 00 20 54 FD 00
1070 20 41 FA 00 20 54 FD 00
1078 A9 05 20 D2 FF 4C B0 FD

1080 00 A8 20 BF FE 00 D0 11
1088 98 F0 0E 86 1C A6 1D DD
1090 10 02 08 E8 86 1D A6 1C
1098 28 60 C9 30 90 03 C9 47
10A0 60 38 60 40 02 45 03 D0
10A8 08 40 09 30 22 45 33 D0
10B0 08 40 09 40 02 45 33 D0
10B8 08 40 09 40 02 45 B3 D0
10C0 08 40 09 00 00 22 44 33
10C8 D0 8C 44 00 00 11 22 44
10D0 33 D0 8C 44 9A 10 22 44
10D8 33 D0 08 40 09 10 22 44
10E0 33 D0 08 40 09 62 13 78
10E8 A9 00 00 21 81 82 00 00
10F0 00 00 59 4D 91 92 86 4A
10F8 85 9D 2C 29 2C 23 28 24

1100 59 00 00 58 24 24 00 00
1108 1C 8A 1C 23 5D 8B 1B Al
1110 9D 8A 1D 23 9D 8B 1D Al
1118 00 00 29 19 AE 69 A8 19
1120 23 24 53 1B 23 24 53 19
1128 Al 00 00 1A 5B 5B A5 69
1130 24 24 AE AE A8 AD 29 00
1138 00 7C 00 00 15 9C 6D 9C
1140 A5 69 29 53 84 13 34 11
1148 A5 69 23 A0 D8 62 5A 48
1150 26 62 94 88 54 44 C8 54
1158 68 44 E8 94 00 00 B4 08
1160 84 74 B4 28 6E 74 F4 CC
1168 4A 72 F2 A4 8A 00 00 AA
1170 A2 A2 74 74 74 72 44 68
1178 B2 32 B2 00 00 22 00 00

1180 1A 1A 26 26 72 72 88 C8
1188 C4 CA 26 48 44 44 A2 C8
1190 3A 3B 52 4D 47 58 4C 53
1198 54 46 48 44 50 2C 41 42
11A0 F9 00 35 F9 00 CC F8 00
11A8 F7 F8 00 56 F9 00 89 F9
11B0 00 F4 F9 00 0C FA 00 3E
11B8 FB/00 92 FB 00 C0 FB 00
11C0 38 FC 00 5B FD 00 8A FD
11C8 00 AC FD 00 46 F8 00 FF
11D0 F7 00 ED F7 00 0D 20 20
11D8 20 50 43 20 20 53 52 20
11E0 41 43 20 58 52 20 59 52
11E8 20 53 50 AA AA AA AA AA


Program 3. Supermon64 Checksum.

100 REM SUPERMON64 CHECKSUM PROGRAM
110 DATA 10170,13676,15404,14997,15136,
    16221,16696,12816,16228,14554
120 DATA14677,15039,14551,15104,15522,
    16414,15914,8958,11945 :S=2048
130 FORB=1TO19:READX:FORI=STOS+128:N=P
    EEK(I):Y =Y+N
140 NEXTI:IFY<>XTHENPRINT"ERROR IN
    BLOCK #"B:GOTO160
150 PRINT"BLOCK #"B" IS CORRECT"
160 S=I:Y=0:NEXTB:REM CHECK LAST SHORT
    BLOCK BY HAND


Return to Table of Contents | Previous Chapter | Next Chapter