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 |