_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

HRSUPP.SRC.C

FILE INFORMATION

FILENAME(S): HRSUPP.SRC.C

FILE TYPE(S): SEQ

FILE SIZE: 8.9K

FIRST SEEN: 2025-11-30 01:08:24

APPEARS ON: 2 disk(s)

FILE HASH

1e6bbe4665d42cca6ca81bd8e27676b0b1795b5ed9ce97a09f8a09147d32c390

FOUND ON DISKS (2 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
FREESOFT DISK NR HRSUPP.SRC.C SEQ Treasure Chest - Wolfgang Rauprich 23 0 DOWNLOAD FILE
D IVERSE HRSUPP.SRC.C SEQ Treasure Chest - Wolfgang Rauprich 23 0 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 2E 4F 50 54 20 4E 4F 4C  0D 3B 0D 3B 2A 2A 20 48  |.OPT NOL.;.;** H|
00000010: 52 53 55 50 50 2F 36 34  20 2A 2A 0D 3B 0D 4F 52  |RSUPP/64 **.;.OR|
00000020: 49 47 49 4E 20 3D 20 24  36 30 30 30 0D 3B 0D 3B  |IGIN = $6000.;.;|
00000030: 2A 2A 20 45 51 55 41 54  45 53 20 2A 2A 0D 3B 0D  |** EQUATES **.;.|
00000040: 3B 53 59 53 54 45 4D 20  52 4F 55 54 49 4E 45 53  |;SYSTEM ROUTINES|
00000050: 0D 3B 0D 45 52 52 4F 52  20 3D 20 24 41 34 33 37  |.;.ERROR = $A437|
00000060: 20 3B 50 52 49 4E 54 20  45 52 52 4F 52 20 4D 45  | ;PRINT ERROR ME|
00000070: 53 53 41 47 45 0D 45 56  41 45 58 50 20 3D 20 24  |SSAGE.EVAEXP = $|
00000080: 41 44 39 45 20 3B 45 56  41 4C 55 41 54 45 20 45  |AD9E ;EVALUATE E|
00000090: 58 50 52 45 53 53 49 4F  4E 0D 43 48 4B 43 4F 4D  |XPRESSION.CHKCOM|
000000A0: 20 3D 20 24 41 45 46 44  20 3B 43 48 45 43 4B 20  | = $AEFD ;CHECK |
000000B0: 46 4F 52 20 43 4F 4D 4D  41 0D 46 4C 54 46 49 58  |FOR COMMA.FLTFIX|
000000C0: 20 3D 20 24 42 31 41 41  20 3B 43 4F 4E 56 45 52  | = $B1AA ;CONVER|
000000D0: 54 20 54 4F 20 46 49 58  45 44 20 49 4E 20 59 20  |T TO FIXED IN Y |
000000E0: 28 4C 4F 57 29 20 41 4E  44 20 41 20 28 48 49 47  |(LOW) AND A (HIG|
000000F0: 48 29 0D 3B 0D 3B 56 45  43 54 4F 52 53 0D 3B 0D  |H).;.;VECTORS.;.|
00000100: 45 52 52 56 45 43 20 3D  20 24 30 33 30 30 20 3B  |ERRVEC = $0300 ;|
00000110: 45 52 52 4F 52 20 52 4F  55 54 49 4E 45 0D 57 41  |ERROR ROUTINE.WA|
00000120: 52 4D 56 20 3D 20 24 30  33 30 32 20 3B 42 41 53  |RMV = $0302 ;BAS|
00000130: 49 43 20 57 41 52 4D 20  53 54 41 52 54 0D 3B 0D  |IC WARM START.;.|
00000140: 3B 48 49 2D 52 45 53 20  53 54 55 46 46 0D 3B 0D  |;HI-RES STUFF.;.|
00000150: 56 49 43 20 3D 20 24 44  30 30 30 20 3B 41 44 44  |VIC = $D000 ;ADD|
00000160: 52 45 53 53 20 4F 46 20  56 49 43 20 43 48 49 50  |RESS OF VIC CHIP|
00000170: 0D 48 52 43 54 52 4C 20  3D 20 56 49 43 2B 31 37  |.HRCTRL = VIC+17|
00000180: 20 3B 4D 4F 44 45 20 43  4F 4E 54 52 4F 4C 0D 48  | ;MODE CONTROL.H|
00000190: 52 4D 52 45 47 20 3D 20  56 49 43 2B 32 34 20 3B  |RMREG = VIC+24 ;|
000001A0: 4D 45 4D 4F 52 59 20 43  4F 4E 54 52 4F 4C 0D 3B  |MEMORY CONTROL.;|
000001B0: 0D 53 43 52 45 45 4E 20  3D 20 24 30 34 30 30 20  |.SCREEN = $0400 |
000001C0: 3B 31 4B 20 53 43 52 45  45 4E 0D 53 43 52 45 4E  |;1K SCREEN.SCREN|
000001D0: 44 20 3D 20 53 43 52 45  45 4E 2B 39 39 39 20 3B  |D = SCREEN+999 ;|
000001E0: 4C 41 53 54 20 53 43 52  45 45 4E 20 4C 4F 43 27  |LAST SCREEN LOC'|
000001F0: 4E 0D 42 41 53 45 20 3D  20 24 32 30 30 30 20 3B  |N.BASE = $2000 ;|
00000200: 53 54 41 52 54 20 4F 46  20 38 4B 20 42 59 54 0D  |START OF 8K BYT.|
00000210: 48 52 4C 41 53 54 20 3D  20 42 41 53 45 2B 37 39  |HRLAST = BASE+79|
00000220: 39 39 20 3B 4C 41 53 54  20 4C 4F 43 27 4E 0D 52  |99 ;LAST LOC'N.R|
00000230: 41 4D 20 3D 20 24 30 33  33 43 20 3B 55 53 45 20  |AM = $033C ;USE |
00000240: 43 41 53 53 45 54 54 45  20 42 55 46 46 45 52 0D  |CASSETTE BUFFER.|
00000250: 3B 0D 3B 2A 2A 5A 45 52  4F 20 50 41 47 45 2A 2A  |;.;**ZERO PAGE**|
00000260: 0D 3B 0D 42 59 54 20 3D  20 24 46 44 20 3B 42 59  |.;.BYT = $FD ;BY|
00000270: 54 20 50 4F 49 4E 54 45  52 0D 3B 0D 2A 3D 52 41  |T POINTER.;.*=RA|
00000280: 4D 0D 3B 0D 58 31 20 2A  3D 2A 2B 32 20 3B 58 20  |M.;.X1 *=*+2 ;X |
00000290: 43 4F 4F 52 44 49 4E 41  54 45 20 28 30 20 2D 20  |COORDINATE (0 - |
000002A0: 33 31 39 29 0D 58 32 20  2A 3D 2A 2B 32 0D 59 31  |319).X2 *=*+2.Y1|
000002B0: 20 2A 3D 2A 2B 32 20 3B  59 20 43 4F 4F 52 44 49  | *=*+2 ;Y COORDI|
000002C0: 4E 41 54 45 20 28 30 20  2D 20 31 39 39 29 0D 59  |NATE (0 - 199).Y|
000002D0: 32 20 2A 3D 2A 2B 32 0D  42 49 54 4E 4F 20 2A 3D  |2 *=*+2.BITNO *=|
000002E0: 2A 2B 31 20 3B 4F 4E 20  42 49 54 20 49 53 20 50  |*+1 ;ON BIT IS P|
000002F0: 49 58 45 4C 0D 44 45 4C  54 58 20 2A 3D 2A 2B 32  |IXEL.DELTX *=*+2|
00000300: 20 3B 58 32 2D 58 31 0D  44 45 4C 54 59 20 2A 3D  | ;X2-X1.DELTY *=|
00000310: 2A 2B 32 20 3B 59 32 2D  59 31 0D 45 20 2A 3D 2A  |*+2 ;Y2-Y1.E *=*|
00000320: 2B 32 0D 54 20 2A 3D 2A  2B 32 0D 43 20 2A 3D 2A  |+2.T *=*+2.C *=*|
00000330: 2B 32 0D 49 20 2A 3D 2A  2B 31 20 3B 44 49 52 45  |+2.I *=*+1 ;DIRE|
00000340: 43 54 49 4F 4E 20 50 4F  49 4E 54 45 52 0D 54 45  |CTION POINTER.TE|
00000350: 4D 50 20 2A 3D 2A 2B 32  0D 45 52 56 45 43 20 2A  |MP *=*+2.ERVEC *|
00000360: 3D 2A 2B 32 20 3B 48 4F  4C 44 53 20 53 59 53 54  |=*+2 ;HOLDS SYST|
00000370: 45 4D 20 45 52 52 4F 52  20 56 45 43 54 4F 52 0D  |EM ERROR VECTOR.|
00000380: 3B 0D 3B 43 4F 4E 53 54  41 4E 54 53 0D 3B 0D 58  |;.;CONSTANTS.;.X|
00000390: 4D 41 58 3D 33 32 30 0D  59 4D 41 58 3D 32 30 30  |MAX=320.YMAX=200|
000003A0: 0D 43 4F 4C 53 3D 34 30  20 3B 4E 55 4D 42 45 52  |.COLS=40 ;NUMBER|
000003B0: 20 4F 46 20 43 4F 4C 55  4D 4E 53 2F 52 4F 57 0D  | OF COLUMNS/ROW.|
000003C0: 43 4F 4C 4F 52 3D 24 35  30 20 3B 46 4F 52 45 47  |COLOR=$50 ;FOREG|
000003D0: 52 4F 55 4E 44 2F 42 41  43 4B 47 52 4F 55 4E 44  |ROUND/BACKGROUND|
000003E0: 20 3D 20 42 4C 41 43 4B  2F 47 52 45 45 4E 0D 3B  | = BLACK/GREEN.;|
000003F0: 0D 2A 3D 4F 52 49 47 49  4E 0D 3B 0D 3B 4A 55 4D  |.*=ORIGIN.;.;JUM|
00000400: 50 20 54 41 42 4C 45 20  46 4F 52 20 43 4F 56 45  |P TABLE FOR COVE|
00000410: 4E 49 45 4E 54 20 45 4E  54 52 59 20 50 4F 49 4E  |NIENT ENTRY POIN|
00000420: 54 53 0D 3B 0D 4A 49 4E  49 54 20 4A 4D 50 20 48  |TS.;.JINIT JMP H|
00000430: 52 49 4E 49 54 20 3B 49  4E 49 54 49 41 4C 49 5A  |RINIT ;INITIALIZ|
00000440: 45 0D 4A 52 45 53 54 20  4A 4D 50 20 48 52 52 45  |E.JREST JMP HRRE|
00000450: 53 54 20 3B 52 45 53 54  4F 52 45 0D 4A 43 4C 52  |ST ;RESTORE.JCLR|
00000460: 20 4A 4D 50 20 43 4C 52  48 52 20 3B 43 4C 45 41  | JMP CLRHR ;CLEA|
00000470: 52 20 53 43 52 45 45 4E  0D 4A 44 52 41 57 20 4A  |R SCREEN.JDRAW J|
00000480: 4D 50 20 56 45 43 50 4C  54 20 3B 44 52 41 57 20  |MP VECPLT ;DRAW |
00000490: 53 54 52 41 49 47 48 54  20 4C 49 4E 45 0D 4A 53  |STRAIGHT LINE.JS|
000004A0: 45 54 50 58 20 4A 4D 50  20 53 45 54 50 49 58 20  |ETPX JMP SETPIX |
000004B0: 3B 54 55 52 4E 20 4F 4E  20 50 49 58 45 4C 0D 3B  |;TURN ON PIXEL.;|
000004C0: 0D 3B 46 41 4C 4C 20 54  48 52 4F 55 47 48 20 54  |.;FALL THROUGH T|
000004D0: 4F 20 4D 4F 56 45 20 52  4F 55 54 49 4E 45 0D 3B  |O MOVE ROUTINE.;|
000004E0: 0D 3B 48 52 41 44 44 52  20 2D 20 47 49 56 45 4E  |.;HRADDR - GIVEN|
000004F0: 20 58 2D 43 4F 4F 52 44  20 28 32 20 42 59 54 45  | X-COORD (2 BYTE|
00000500: 53 29 0D 3B 41 4E 44 20  59 2D 43 4F 4F 52 44 20  |S).;AND Y-COORD |
00000510: 28 31 20 42 59 54 45 29  0D 3B 43 41 4C 43 55 4C  |(1 BYTE).;CALCUL|
00000520: 41 54 45 20 42 59 54 20  41 44 44 52 45 53 53 20  |ATE BYT ADDRESS |
00000530: 41 4E 44 20 42 49 54 4E  4F 0D 3B 0D 3B 43 4C 4F  |AND BITNO.;.;CLO|
00000540: 42 42 45 52 53 20 58 2C  20 4C 45 41 56 45 53 20  |BBERS X, LEAVES |
00000550: 59 3D 30 0D 3B 0D 3B 45  4E 54 45 52 20 48 45 52  |Y=0.;.;ENTER HER|
00000560: 45 20 49 46 20 46 52 4F  4D 20 42 41 53 49 43 0D  |E IF FROM BASIC.|
00000570: 3B 0D 48 52 4D 4F 56 45  20 4A 53 52 20 47 45 54  |;.HRMOVE JSR GET|
00000580: 56 41 4C 20 3B 47 45 54  20 58 31 0D 20 53 54 59  |VAL ;GET X1. STY|
00000590: 20 58 31 0D 20 53 54 59  20 58 32 20 3B 46 4F 52  | X1. STY X2 ;FOR|
000005A0: 20 52 4E 47 43 48 4B 0D  20 53 54 41 20 58 31 2B  | RNGCHK. STA X1+|
000005B0: 31 0D 20 53 54 41 20 58  32 2B 31 0D 20 4A 53 52  |1. STA X2+1. JSR|
000005C0: 20 47 45 54 56 41 4C 20  3B 47 45 54 20 59 31 0D  | GETVAL ;GET Y1.|
000005D0: 20 53 54 59 20 59 31 0D  20 53 54 59 20 59 32 0D  | STY Y1. STY Y2.|
000005E0: 20 53 54 41 20 59 32 2B  31 0D 20 4A 53 52 20 52  | STA Y2+1. JSR R|
000005F0: 4E 47 43 48 4B 0D 3B 0D  3B 45 4E 54 45 52 20 48  |NGCHK.;.;ENTER H|
00000600: 45 52 45 20 49 46 20 58  31 2C 20 59 31 20 41 52  |ERE IF X1, Y1 AR|
00000610: 45 20 53 45 54 0D 3B 0D  48 52 41 44 44 52 20 4C  |E SET.;.HRADDR L|
00000620: 44 41 20 23 30 20 3B 53  45 54 20 48 49 47 48 20  |DA #0 ;SET HIGH |
00000630: 42 59 54 45 20 54 4F 20  5A 45 52 4F 0D 20 53 54  |BYTE TO ZERO. ST|
00000640: 41 20 42 59 54 2B 31 0D  20 53 45 43 20 3B 46 4F  |A BYT+1. SEC ;FO|
00000650: 52 4D 20 31 39 39 2D 59  31 0D 20 4C 44 41 20 23  |RM 199-Y1. LDA #|
00000660: 59 4D 41 58 2D 31 0D 20  53 42 43 20 59 31 0D 20  |YMAX-1. SBC Y1. |
00000670: 50 48 41 20 3B 53 41 56  45 20 52 45 53 55 4C 54  |PHA ;SAVE RESULT|
00000680: 20 4F 4E 20 53 54 41 43  4B 0D 20 41 4E 44 20 23  | ON STACK. AND #|
00000690: 24 46 38 20 3B 46 4F 52  4D 20 52 4F 57 20 23 0D  |$F8 ;FORM ROW #.|
000006A0: 20 41 53 4C 20 41 20 3B  4D 55 4C 54 20 42 59 20  | ASL A ;MULT BY |
000006B0: 32 0D 20 52 4F 4C 20 42  59 54 2B 31 0D 20 41 53  |2. ROL BYT+1. AS|
000006C0: 4C 20 41 20 3B 4D 55 4C  54 20 42 59 20 34 0D 20  |L A ;MULT BY 4. |
000006D0: 52 4F 4C 20 42 59 54 2B  31 0D 20 41 53 4C 20 41  |ROL BYT+1. ASL A|
000006E0: 20 3B 4D 55 4C 54 20 42  59 20 38 0D 20 52 4F 4C  | ;MULT BY 8. ROL|
000006F0: 20 42 59 54 2B 31 0D 20  50 48 41 20 3B 53 41 56  | BYT+1. PHA ;SAV|
00000700: 45 20 4F 4E 20 53 54 41  43 4B 0D 20 53 54 41 20  |E ON STACK. STA |
00000710: 54 45 4D 50 20 3B 41 4E  44 20 49 4E 20 54 45 4D  |TEMP ;AND IN TEM|
00000720: 50 0D 20 4C 44 41 20 42  59 54 2B 31 0D 20 53 54  |P. LDA BYT+1. ST|
00000730: 41 20 54 45 4D 50 2B 31  20 3B 54 45 4D 50 20 48  |A TEMP+1 ;TEMP H|
00000740: 41 53 20 38 2A 59 0D 20  50 4C 41 20 3B 52 45 53  |AS 8*Y. PLA ;RES|
00000750: 54 4F 52 45 20 41 0D 20  41 53 4C 20 41 20 3B 4D  |TORE A. ASL A ;M|
00000760: 55 4C 54 20 42 59 20 31  36 0D 20 52 4F 4C 20 42  |ULT BY 16. ROL B|
00000770: 59 54 2B 31 0D 20 41 53  4C 20 41 20 3B 4D 55 4C  |YT+1. ASL A ;MUL|
00000780: 54 20 42 59 20 33 32 0D  20 52 4F 4C 20 42 59 54  |T BY 32. ROL BYT|
00000790: 2B 31 20 3B 28 43 41 52  52 59 20 53 54 49 4C 4C  |+1 ;(CARRY STILL|
000007A0: 20 43 4C 45 41 52 29 0D  20 41 44 43 20 54 45 4D  | CLEAR). ADC TEM|
000007B0: 50 20 3B 46 4F 52 4D 20  33 32 2B 38 20 3D 20 34  |P ;FORM 32+8 = 4|
000007C0: 30 2A 0D 20 53 54 41 20  42 59 54 20 3B 49 4E 54  |0*. STA BYT ;INT|
000007D0: 4F 20 42 59 54 0D 20 4C  44 41 20 42 59 54 2B 31  |O BYT. LDA BYT+1|
000007E0: 0D 20 41 44 43 20 54 45  4D 50 2B 31 0D 20 53 54  |. ADC TEMP+1. ST|
000007F0: 41 20 42 59 54 2B 31 0D  20 4C 44 41 20 58 31 20  |A BYT+1. LDA X1 |
00000800: 3B 4E 4F 57 20 41 44 44  20 43 48 41 52 0D 20 41  |;NOW ADD CHAR. A|
00000810: 4E 44 20 23 24 46 38 0D  20 41 44 43 20 42 59 54  |ND #$F8. ADC BYT|
00000820: 0D 20 53 54 41 20 42 59  54 0D 20 4C 44 41 20 58  |. STA BYT. LDA X|
00000830: 31 2B 31 0D 20 41 44 43  20 42 59 54 2B 31 0D 20  |1+1. ADC BYT+1. |
00000840: 53 54 41 20 42 59 54 2B  31 20 3B 28 43 41 52 52  |STA BYT+1 ;(CARR|
00000850: 59 20 53 54 49 4C 4C 20  43 4C 45 41 52 29 0D 20  |Y STILL CLEAR). |
00000860: 50 4C 41 20 3B 4E 4F 57  20 41 44 44 20 4C 49 4E  |PLA ;NOW ADD LIN|
00000870: 45 0D 20 41 4E 44 20 23  37 20 3B 42 59 20 4D 41  |E. AND #7 ;BY MA|
00000880: 53 4B 49 4E 47 20 48 49  47 48 20 42 49 54 53 0D  |SKING HIGH BITS.|
00000890: 20 41 44 43 20 42 59 54  0D 20 53 54 41 20 42 59  | ADC BYT. STA BY|
000008A0: 54 0D 20 4C 44 41 20 42  59 54 2B 31 20 3B 46 49  |T. LDA BYT+1 ;FI|
000008B0: 4E 49 53 48 20 42 59 20  41 44 44 49 4E 47 20 42  |NISH BY ADDING B|
000008C0: 41 53 45 0D 20 41 44 43  20 23 3E 42 41 53 45 0D  |ASE. ADC #>BASE.|
000008D0: 20 53 54 41 20 42 59 54  2B 31 0D 20 4C 44 41 20  | STA BYT+1. LDA |
000008E0: 58 31 20 3B 53 45 54 20  42 49 54 4E 4F 0D 20 41  |X1 ;SET BITNO. A|
000008F0: 4E 44 20 23 37 20 3B 49  53 20 4C 4F 57 20 33 20  |ND #7 ;IS LOW 3 |
00000900: 42 49 54 53 0D 20 54 41  58 20 3B 41 4E 44 20 49  |BITS. TAX ;AND I|
00000910: 4E 44 45 58 20 54 4F 20  54 41 42 4C 45 0D 20 4C  |NDEX TO TABLE. L|
00000920: 44 41 20 4D 53 4B 54 42  2C 58 0D 20 53 54 41 20  |DA MSKTB,X. STA |
00000930: 42 49 54 4E 4F 0D 20 52  54 53 20 3B 42 59 54 20  |BITNO. RTS ;BYT |
00000940: 41 4E 44 20 42 49 54 4E  4F 20 4E 4F 57 20 53 45  |AND BITNO NOW SE|
00000950: 54 0D 3B 0D 3B 2A 2A 2A  20 46 41 53 54 50 4C 4F  |T.;.;*** FASTPLO|
00000960: 54 20 2A 2A 2A 0D 3B 0D  3B 47 52 41 50 48 49 43  |T ***.;.;GRAPHIC|
00000970: 20 53 55 42 52 4F 55 54  49 4E 45 20 46 4F 52 20  | SUBROUTINE FOR |
00000980: 4C 49 4E 45 20 44 52 41  57 49 4E 47 0D 3B 4F 4E  |LINE DRAWING.;ON|
00000990: 20 33 32 30 2A 32 30 30  20 48 49 2D 52 45 53 20  | 320*200 HI-RES |
000009A0: 4D 45 4D 4F 52 59 0D 3B  0D 3B 4F 52 49 47 49 4E  |MEMORY.;.;ORIGIN|
000009B0: 41 4C 4C 59 20 57 52 49  54 54 45 4E 20 41 53 20  |ALLY WRITTEN AS |
000009C0: 56 45 43 54 4F 52 20 47  45 4E 45 52 41 54 4F 52  |VECTOR GENERATOR|
000009D0: 0D 3B 46 4F 52 20 48 4F  55 53 54 4F 4E 20 49 4E  |.;FOR HOUSTON IN|
000009E0: 53 54 52 55 4D 45 4E 54  20 48 49 50 4C 4F 54 0D  |STRUMENT HIPLOT.|
000009F0: 3B 44 49 47 49 54 41 4C  20 49 4E 43 52 45 4D 45  |;DIGITAL INCREME|
00000A00: 4E 54 41 4C 20 50 4C 4F  54 54 45 52 0D 3B 0D 3B  |NTAL PLOTTER.;.;|
00000A10: 4D 4F 52 45 20 45 46 46  49 43 49 45 4E 54 20 41  |MORE EFFICIENT A|
00000A20: 4C 47 4F 52 49 54 48 4D  20 42 59 20 57 2E 20 4D  |LGORITHM BY W. M|
00000A30: 43 57 4F 52 54 45 52 0D  3B 49 4E 20 42 59 54 45  |CWORTER.;IN BYTE|
00000A40: 20 4D 41 59 20 31 39 38  31 2C 20 50 32 30 32 0D  | MAY 1981, P202.|
00000A50: 3B 0D 3B 52 45 2D 57 52  49 54 54 45 4E 20 46 4F  |;.;RE-WRITTEN FO|
00000A60: 52 20 4D 54 55 20 56 49  53 49 42 4C 45 20 4D 45  |R MTU VISIBLE ME|
00000A70: 4D 4F 52 59 20 28 54 4D  29 0D 3B 42 59 20 46 2E  |MORY (TM).;BY F.|
00000A80: 20 43 4F 56 49 54 5A 2C  20 41 55 47 2E 20 31 39  | COVITZ, AUG. 19|
00000A90: 38 31 0D 3B 52 45 56 49  53 45 44 20 4E 4F 56 2E  |81.;REVISED NOV.|
00000AA0: 20 31 39 38 32 20 46 4F  52 20 43 42 4D 2D 36 34  | 1982 FOR CBM-64|
00000AB0: 0D 3B 0D 3B 0D 3B 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.;.;.;**********|
00000AC0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00000AD0: 2A 2A 2A 0D 3B 2A 20 54  59 50 4F 20 49 4E 20 4F  |***.;* TYPO IN O|
00000AE0: 52 49 47 49 4E 41 4C 20  4C 45 54 54 45 52 20 20  |RIGINAL LETTER  |
00000AF0: 20 2A 0D 3B 2A 20 20 20  20 20 20 20 20 20 20 20  | *.;*           |
00000B00: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000B10: 2A 0D 3B 2A 20 49 54 20  52 45 41 44 53 3B 20 41  |*.;* IT READS; A|
00000B20: 24 3D 22 52 51 56 57 50  53 2E 2E 2E 2E 22 20 2A  |$="RQVWPS...." *|
00000B30: 0D 3B 2A 20 20 20 20 20  20 20 20 20 20 20 20 20  |.;*             |
00000B40: 20 20 20 20 20 20 2A 20  20 20 20 20 20 20 2A 0D  |      *       *.|
00000B50: 3B 2A 53 48 4F 55 4C 44  20 42 45 3B 20 41 24 3D  |;*SHOULD BE; A$=|
00000B60: 22 52 51 56 57 52 53 2E  2E 2E 2E 22 20 2A 0D 3B  |"RQVWRS...." *.;|
00000B70: 2A 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |*               |
00000B80: 20 20 20 20 20 20 20 20  20 20 20 20 2A 0D 3B 2A  |            *.;*|
00000B90: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00000BA0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 0D 3B 0D 3B  |************.;.;|
00000BB0: 43 4F 4D 45 20 49 4E 20  57 49 54 48 20 58 31 2C  |COME IN WITH X1,|
00000BC0: 59 31 20 41 4E 44 20 58  32 2C 59 32 0D 3B 41 4E  |Y1 AND X2,Y2.;AN|
00000BD0: 44 20 46 49 52 53 54 20  50 49 58 45 4C 20 53 45  |D FIRST PIXEL SE|
00000BE0: 54 0D 3B 49 2E 45 2E 20  42 59 54 2C 42 59 54 2B  |T.;I.E. BYT,BYT+|
00000BF0: 31 2C 20 41 4E 44 20 42  49 54 4E 4F 20 41 52 45  |1, AND BITNO ARE|
00000C00: 20 53 45 54 0D 3B 56 49  41 20 43 41 4C 4C 20 54  | SET.;VIA CALL T|
00000C10: 4F 20 50 49 58 41 44 52  0D 3B 52 4F 55 54 49 4E  |O PIXADR.;ROUTIN|
00000C20: 45 20 44 52 41 57 53 20  42 45 53 54 20 53 54 52  |E DRAWS BEST STR|
00000C30: 41 49 47 48 54 20 4C 49  4E 45 0D 3B 4C 45 41 56  |AIGHT LINE.;LEAV|
00000C40: 45 53 20 57 49 54 48 20  58 31 5F 58 32 2C 59 31  |ES WITH X1_X2,Y1|
00000C50: 5F 59 32 0D 3B 0D 3B 4C  45 41 56 45 53 20 57 49  |_Y2.;.;LEAVES WI|
00000C60: 54 48 20 59 3D 30 2C 20  58 20 43 4C 4F 42 42 45  |TH Y=0, X CLOBBE|
00000C70: 52 45 44 0D 3B 52 4F 55  54 49 4E 45 20 43 48 45  |RED.;ROUTINE CHE|
00000C80: 43 4B 53 20 46 4F 52 20  4F 56 45 52 46 4C 4F 57  |CKS FOR OVERFLOW|
00000C90: 0D 3B 0D 3B 2A 2A 56 45  43 50 4C 54 2A 2A 0D 3B  |.;.;**VECPLT**.;|
00000CA0: 0D 3B 45 4E 54 45 52 20  48 45 52 45 20 46 52 4F  |.;ENTER HERE FRO|
00000CB0: 4D 20 42 41 53 49 43 0D  3B 0D 56 45 43 50 4C 54  |M BASIC.;.VECPLT|
00000CC0: 20 4A 53 52 20 47 45 54  56 41 4C 20 3B 47 45 54  | JSR GETVAL ;GET|
00000CD0: 20 58 2D 43 4F 4F 52 44  0D 20 53 54 59 20 58 32  | X-COORD. STY X2|
00000CE0: 0D 20 53 54 41 20 58 32  2B 31 0D 20 4A 53 52 20  |. STA X2+1. JSR |
00000CF0: 47 45 54 56 41 4C 20 3B  47 45 54 20 59 2D 43 4F  |GETVAL ;GET Y-CO|
00000D00: 4F 52 44 0D 20 53 54 59  20 59 32 0D 20 53 54 41  |ORD. STY Y2. STA|
00000D10: 20 59 32 2B 31 0D 3B 0D  3B 45 4E 54 45 52 20 48  | Y2+1.;.;ENTER H|
00000D20: 45 52 45 20 49 46 20 58  32 2C 20 59 32 20 41 4C  |ERE IF X2, Y2 AL|
00000D30: 52 45 41 44 59 20 53 45  54 0D 3B 0D 56 45 43 50  |READY SET.;.VECP|
00000D40: 4C 31 20 4A 53 52 20 52  4E 47 43 48 4B 20 3B 43  |L1 JSR RNGCHK ;C|
00000D50: 48 45 43 4B 20 58 32 2C  59 32 20 4F 56 45 52 46  |HECK X2,Y2 OVERF|
00000D60: 4C 4F 57 0D 20 53 45 43  20 3B 46 4F 52 4D 20 44  |LOW. SEC ;FORM D|
00000D70: 45 4C 54 58 20 28 53 49  47 4E 45 44 29 0D 20 4C  |ELTX (SIGNED). L|
00000D80: 44 41 20 58 32 0D 20 53  42 43 20 58 31 0D 20 53  |DA X2. SBC X1. S|
00000D90: 54 41 20 44 45 4C 54 58  0D 20 4C 44 41 20 58 32  |TA DELTX. LDA X2|
00000DA0: 2B 31 0D 20 53 42 43 20  58 31 2B 31 0D 20 53 54  |+1. SBC X1+1. ST|
00000DB0: 41 20 44 45 4C 54 58 2B  31 0D 20 53 45 43 20 3B  |A DELTX+1. SEC ;|
00000DC0: 46 4F 52 4D 20 44 45 4C  54 59 20 28 53 49 47 4E  |FORM DELTY (SIGN|
00000DD0: 45 44 29 0D 20 4C 44 41  20 59 32 0D 20 53 42 43  |ED). LDA Y2. SBC|
00000DE0: 20 59 31 0D 20 53 54 41  20 44 45 4C 54 59 0D 20  | Y1. STA DELTY. |
00000DF0: 4C 44 41 20 59 32 2B 31  0D 20 53 42 43 20 59 31  |LDA Y2+1. SBC Y1|
00000E00: 2B 31 0D 3B 0D 20 53 54  41 20 44 45 4C 54 59 2B  |+1.;. STA DELTY+|
00000E10: 31 0D 20 4C 44 41 20 58  32 20 3B 58 31 2C 59 31  |1. LDA X2 ;X1,Y1|
00000E20: 5F 58 32 2C 59 32 0D 20  53 54 41 20 58 31 0D 20  |_X2,Y2. STA X1. |
00000E30: 4C 44 41 20 58 32 2B 31  0D 20 53 54 41 20 58 31  |LDA X2+1. STA X1|
00000E40: 2B 31 0D 20 4C 44 41 20  59 32 0D 20 53 54 41 20  |+1. LDA Y2. STA |
00000E50: 59 31 0D 20 4C 44 41 20  59 32 2B 31 0D 20 53 54  |Y1. LDA Y2+1. ST|
00000E60: 41 20 59 31 2B 31 0D 3B  0D 3B 4E 4F 57 20 48 41  |A Y1+1.;.;NOW HA|
00000E70: 56 45 20 44 45 4C 54 58  2C 44 45 4C 54 59 20 28  |VE DELTX,DELTY (|
00000E80: 53 49 47 4E 45 44 29 0D  3B 0D 3B 2A 2A 20 4D 4F  |SIGNED).;.;** MO|
00000E90: 56 45 20 2A 2A 0D 3B 0D  3B 47 49 56 45 4E 20 44  |VE **.;.;GIVEN D|
00000EA0: 45 4C 54 58 2C 20 44 45  4C 54 59 0D 3B 44 52 41  |ELTX, DELTY.;DRA|
00000EB0: 57 2F 4D 4F 56 45 20 54  48 45 20 42 45 53 54 20  |W/MOVE THE BEST |
00000EC0: 53 54 52 41 49 47 48 54  20 4C 49 4E 45 0D 3B 0D  |STRAIGHT LINE.;.|
00000ED0: 4D 4F 56 45 20 4C 44 41  20 23 30 20 3B 44 45 54  |MOVE LDA #0 ;DET|
00000EE0: 45 52 4D 49 4E 45 20 4F  43 54 41 4E 54 0D 20 53  |ERMINE OCTANT. S|
00000EF0: 54 41 20 49 0D 20 42 49  54 20 44 45 4C 54 58 2B  |TA I. BIT DELTX+|
00000F00: 31 20 3B 43 48 45 43 4B  20 44 45 4C 54 58 20 3C  |1 ;CHECK DELTX <|
00000F10: 20 30 0D 20 42 50 4C 20  4D 56 31 0D 20 4C 44 41  | 0. BPL MV1. LDA|
00000F20: 20 44 45 4C 54 58 20 3B  43 48 41 4E 47 45 20 53  | DELTX ;CHANGE S|
00000F30: 49 47 4E 0D 20 4A 53 52  20 43 4F 4D 50 4C 0D 20  |IGN. JSR COMPL. |
00000F40: 53 54 41 20 44 45 4C 54  58 0D 20 4C 44 41 20 44  |STA DELTX. LDA D|
00000F50: 45 4C 54 58 2B 31 0D 20  4A 53 52 20 43 4F 4D 50  |ELTX+1. JSR COMP|
00000F60: 48 0D 20 53 54 41 20 44  45 4C 54 58 2B 31 0D 20  |H. STA DELTX+1. |
00000F70: 4C 44 41 20 23 32 0D 20  53 54 41 20 49 0D 4D 56  |LDA #2. STA I.MV|
00000F80: 31 20 42 49 54 20 44 45  4C 54 59 2B 31 20 3B 43  |1 BIT DELTY+1 ;C|
00000F90: 48 45 43 4B 20 44 45 4C  54 59 20 3C 20 30 0D 20  |HECK DELTY < 0. |
00000FA0: 42 50 4C 20 4D 56 32 0D  20 4C 44 41 20 44 45 4C  |BPL MV2. LDA DEL|
00000FB0: 54 59 0D 20 4A 53 52 20  43 4F 4D 50 4C 0D 20 53  |TY. JSR COMPL. S|
00000FC0: 54 41 20 44 45 4C 54 59  0D 20 4C 44 41 20 44 45  |TA DELTY. LDA DE|
00000FD0: 4C 54 59 2B 31 0D 20 4A  53 52 20 43 4F 4D 50 48  |LTY+1. JSR COMPH|
00000FE0: 0D 20 53 54 41 20 44 45  4C 54 59 2B 31 0D 20 43  |. STA DELTY+1. C|
00000FF0: 4C 43 0D 20 4C 44 41 20  49 0D 20 41 44 43 20 23  |LC. LDA I. ADC #|
00001000: 34 0D 20 53 54 41 20 49  0D 4D 56 32 20 4C 44 58  |4. STA I.MV2 LDX|
00001010: 20 44 45 4C 54 58 20 3B  43 48 45 43 4B 20 44 45  | DELTX ;CHECK DE|
00001020: 4C 54 58 2D 44 45 4C 54  59 0D 20 43 50 58 20 44  |LTX-DELTY. CPX D|
00001030: 45 4C 54 59 20 3B 53 45  54 20 43 41 52 52 59 20  |ELTY ;SET CARRY |
00001040: 46 4F 52 20 4C 4F 57 20  42 59 54 45 0D 20 4C 44  |FOR LOW BYTE. LD|
00001050: 41 20 44 45 4C 54 58 2B  31 20 3B 4E 4F 57 20 48  |A DELTX+1 ;NOW H|
00001060: 49 47 48 20 42 59 54 45  0D 20 54 41 59 20 3B 53  |IGH BYTE. TAY ;S|
00001070: 45 54 20 59 20 3D 20 44  45 4C 54 58 0D 20 53 42  |ET Y = DELTX. SB|
00001080: 43 20 44 45 4C 54 59 2B  31 0D 20 42 50 4C 20 4D  |C DELTY+1. BPL M|
00001090: 56 33 0D 20 4C 44 41 20  44 45 4C 54 59 20 3B 49  |V3. LDA DELTY ;I|
000010A0: 4E 54 45 52 43 48 41 4E  47 45 20 44 45 4C 54 58  |NTERCHANGE DELTX|
000010B0: 2C 59 0D 20 53 54 41 20  44 45 4C 54 58 0D 20 4C  |,Y. STA DELTX. L|
000010C0: 44 41 20 44 45 4C 54 59  2B 31 0D 20 53 54 41 20  |DA DELTY+1. STA |
000010D0: 44 45 4C 54 58 2B 31 0D  20 53 54 58 20 44 45 4C  |DELTX+1. STX DEL|
000010E0: 54 59 0D 20 53 54 59 20  44 45 4C 54 59 2B 31 0D  |TY. STY DELTY+1.|
000010F0: 20 43 4C 43 0D 20 4C 44  41 20 49 0D 20 41 44 43  | CLC. LDA I. ADC|
00001100: 20 23 38 0D 20 53 54 41  20 49 0D 4D 56 33 20 4C  | #8. STA I.MV3 L|
00001110: 44 41 20 44 45 4C 54 58  20 3B 46 4F 52 4D 20 45  |DA DELTX ;FORM E|
00001120: 3D 2D 44 45 4C 54 58 2F  32 0D 20 4A 53 52 20 43  |=-DELTX/2. JSR C|
00001130: 4F 4D 50 4C 0D 20 53 54  41 20 45 0D 20 4C 44 41  |OMPL. STA E. LDA|
00001140: 20 44 45 4C 54 58 2B 31  0D 20 4A 53 52 20 43 4F  | DELTX+1. JSR CO|
00001150: 4D 50 48 0D 20 53 54 41  20 45 2B 31 0D 20 53 45  |MPH. STA E+1. SE|
00001160: 43 20 3B 43 48 45 43 4B  20 46 4F 52 20 4E 45 47  |C ;CHECK FOR NEG|
00001170: 41 54 49 56 45 0D 20 42  4D 49 20 4D 56 34 0D 20  |ATIVE. BMI MV4. |
00001180: 43 4C 43 0D 4D 56 34 20  52 4F 52 20 45 2B 31 20  |CLC.MV4 ROR E+1 |
00001190: 3B 44 49 56 49 44 45 20  42 59 20 32 0D 20 52 4F  |;DIVIDE BY 2. RO|
000011A0: 52 20 45 0D 20 4C 44 59  20 23 30 20 3B 53 45 54  |R E. LDY #0 ;SET|
000011B0: 20 59 3D 30 0D 20 53 54  59 20 43 20 3B 53 45 54  | Y=0. STY C ;SET|
000011C0: 20 43 4F 55 4E 54 45 52  20 54 4F 20 5A 45 52 4F  | COUNTER TO ZERO|
000011D0: 0D 20 53 54 59 20 43 2B  31 0D 20 42 45 51 20 4D  |. STY C+1. BEQ M|
000011E0: 56 37 20 3B 41 42 53 4F  4C 55 54 45 20 42 52 41  |V7 ;ABSOLUTE BRA|
000011F0: 4E 43 48 0D 3B 0D 3B 2A  2A 20 4D 41 49 4E 20 44  |NCH.;.;** MAIN D|
00001200: 52 41 57 49 4E 47 20 4C  4F 4F 50 20 2A 2A 0D 3B  |RAWING LOOP **.;|
00001210: 0D 4D 56 35 20 4C 44 58  20 49 20 3B 47 45 54 20  |.MV5 LDX I ;GET |
00001220: 44 49 52 45 43 54 49 4F  4E 20 49 4E 20 58 0D 20  |DIRECTION IN X. |
00001230: 43 4C 43 20 3B 46 4F 52  4D 20 45 3D 45 2B 44 45  |CLC ;FORM E=E+DE|
00001240: 4C 54 59 0D 20 4C 44 41  20 45 0D 20 41 44 43 20  |LTY. LDA E. ADC |
00001250: 44 45 4C 54 59 0D 20 53  54 41 20 45 20 3B 46 49  |DELTY. STA E ;FI|
00001260: 52 53 54 20 4C 4F 57 20  42 59 54 45 0D 20 4C 44  |RST LOW BYTE. LD|
00001270: 41 20 45 2B 31 0D 20 41  44 43 20 44 45 4C 54 59  |A E+1. ADC DELTY|
00001280: 2B 31 0D 20 53 54 41 20  45 2B 31 0D 20 42 4D 49  |+1. STA E+1. BMI|
00001290: 20 4D 56 36 0D 20 53 45  43 20 3B 46 4F 52 4D 20  | MV6. SEC ;FORM |
000012A0: 45 3D 45 2D 44 45 4C 54  58 0D 20 4C 44 41 20 45  |E=E-DELTX. LDA E|
000012B0: 0D 20 53 42 43 20 44 45  4C 54 58 0D 20 53 54 41  |. SBC DELTX. STA|
000012C0: 20 45 0D 20 4C 44 41 20  45 2B 31 0D 20 53 42 43  | E. LDA E+1. SBC|
000012D0: 20 44 45 4C 54 58 2B 31  0D 20 53 54 41 20 45 2B  | DELTX+1. STA E+|
000012E0: 31 0D 20 49 4E 58 20 3B  58 20 42 55 4D 50 45 44  |1. INX ;X BUMPED|
000012F0: 20 55 50 20 4F 4E 45 0D  4D 56 36 20 4A 53 52 20  | UP ONE.MV6 JSR |
00001300: 4F 55 54 50 4C 54 20 3B  4F 55 54 50 55 54 20 4F  |OUTPLT ;OUTPUT O|
00001310: 4E 45 20 4D 4F 56 45 0D  20 49 4E 43 20 43 20 3B  |NE MOVE. INC C ;|
00001320: 42 55 4D 50 20 43 4F 55  4E 54 45 52 20 55 50 20  |BUMP COUNTER UP |
00001330: 31 0D 20 42 4E 45 20 4D  56 37 0D 20 49 4E 43 20  |1. BNE MV7. INC |
00001340: 43 2B 31 0D 3B 0D 3B 45  4E 54 45 52 20 48 45 52  |C+1.;.;ENTER HER|
00001350: 45 20 4F 4E 20 31 53 54  20 50 41 53 53 0D 3B 0D  |E ON 1ST PASS.;.|
00001360: 4D 56 37 20 4C 44 41 20  28 42 59 54 29 2C 59 20  |MV7 LDA (BYT),Y |
00001370: 3B 54 55 52 4E 20 4F 4E  20 41 20 50 4F 49 4E 54  |;TURN ON A POINT|
00001380: 0D 20 4F 52 41 20 42 49  54 4E 4F 0D 20 53 54 41  |. ORA BITNO. STA|
00001390: 20 28 42 59 54 29 2C 59  0D 20 4C 44 41 20 43 20  | (BYT),Y. LDA C |
000013A0: 3B 44 4F 4E 45 20 57 48  45 4E 20 43 20 3E 20 3D  |;DONE WHEN C > =|
000013B0: 20 44 45 4C 54 58 0D 20  43 4D 50 20 44 45 4C 54  | DELTX. CMP DELT|
000013C0: 58 0D 20 4C 44 41 20 43  2B 31 0D 20 53 42 43 20  |X. LDA C+1. SBC |
000013D0: 44 45 4C 54 58 2B 31 0D  20 42 43 43 20 4D 56 35  |DELTX+1. BCC MV5|
000013E0: 0D 20 52 54 53 20 3B 44  4F 4E 45 0D 3B 0D 3B 2A  |. RTS ;DONE.;.;*|
000013F0: 2A 20 4F 55 54 50 4C 54  20 2A 2A 0D 3B 0D 3B 4F  |* OUTPLT **.;.;O|
00001400: 55 54 50 55 54 20 41 4E  20 45 4C 45 4D 45 4E 54  |UTPUT AN ELEMENT|
00001410: 41 52 59 20 4D 4F 56 45  0D 3B 0D 4F 55 54 50 4C  |ARY MOVE.;.OUTPL|
00001420: 54 20 54 58 41 0D 20 41  53 4C 20 41 20 3B 4D 55  |T TXA. ASL A ;MU|
00001430: 4C 54 20 42 59 20 54 57  4F 20 54 4F 20 47 45 54  |LT BY TWO TO GET|
00001440: 20 49 4E 44 45 58 0D 20  54 41 58 0D 20 4C 44 41  | INDEX. TAX. LDA|
00001450: 20 4D 4F 56 54 41 42 2B  31 2C 58 20 3B 47 45 54  | MOVTAB+1,X ;GET|
00001460: 20 54 48 45 20 56 45 43  54 4F 52 0D 20 50 48 41  | THE VECTOR. PHA|
00001470: 20 3B 48 49 47 48 20 42  59 54 45 20 4F 4E 20 53  | ;HIGH BYTE ON S|
00001480: 54 41 43 4B 0D 20 4C 44  41 20 4D 4F 56 54 41 42  |TACK. LDA MOVTAB|
00001490: 2C 58 0D 20 50 48 41 20  3B 4C 4F 57 20 42 59 54  |,X. PHA ;LOW BYT|
000014A0: 45 20 4F 4E 20 53 54 41  43 4B 0D 20 52 54 53 20  |E ON STACK. RTS |
000014B0: 3B 44 4F 20 43 4F 4D 50  55 54 45 44 20 4A 55 4D  |;DO COMPUTED JUM|
000014C0: 50 0D 3B 0D 3B 52 45 54  55 52 4E 20 56 49 41 20  |P.;.;RETURN VIA |
000014D0: 52 54 53 20 54 4F 20 4A  53 52 20 4F 55 54 50 4C  |RTS TO JSR OUTPL|
000014E0: 54 28 31 29 0D 3B 0D 3B  2A 2A 52 4E 47 43 48 4B  |T(1).;.;**RNGCHK|
000014F0: 2A 2A 0D 3B 0D 3B 43 48  45 43 4B 20 58 32 2C 20  |**.;.;CHECK X2, |
00001500: 59 32 20 46 4F 52 20 4F  56 45 52 46 4C 4F 57 0D  |Y2 FOR OVERFLOW.|
00001510: 3B 52 45 54 55 52 4E 20  54 4F 20 43 41 4C 4C 49  |;RETURN TO CALLI|
00001520: 4E 47 20 50 52 4F 47 52  41 4D 20 4F 4E 20 4F 56  |NG PROGRAM ON OV|
00001530: 45 52 46 4C 4F 57 0D 3B  0D 52 4E 47 43 48 4B 20  |ERFLOW.;.RNGCHK |
00001540: 4C 44 41 20 58 32 20 3B  43 48 45 43 4B 20 58 32  |LDA X2 ;CHECK X2|
00001550: 2C 20 4C 4F 57 0D 20 43  4D 50 20 23 3C 58 4D 41  |, LOW. CMP #<XMA|
00001560: 58 0D 20 4C 44 41 20 58  32 2B 31 20 3B 43 48 45  |X. LDA X2+1 ;CHE|
00001570: 43 4B 20 48 49 47 48 20  42 59 54 45 0D 20 53 42  |CK HIGH BYTE. SB|
00001580: 43 20 23 3E 58 4D 41 58  0D 20 42 43 53 20 52 4E  |C #>XMAX. BCS RN|
00001590: 47 32 20 3B 58 32 20 3E  20 58 4D 41 58 2C 20 53  |G2 ;X2 > XMAX, S|
000015A0: 4F 20 41 42 4F 52 54 0D  52 4E 47 31 20 4C 44 41  |O ABORT.RNG1 LDA|
000015B0: 20 59 32 20 3B 43 48 45  43 4B 20 59 32 2C 20 4C  | Y2 ;CHECK Y2, L|
000015C0: 4F 57 0D 20 43 4D 50 20  23 3C 59 4D 41 58 0D 20  |OW. CMP #<YMAX. |
000015D0: 4C 44 41 20 59 32 2B 31  20 3B 43 48 45 43 4B 20  |LDA Y2+1 ;CHECK |
000015E0: 48 49 47 48 20 42 59 54  45 0D 20 53 42 43 20 23  |HIGH BYTE. SBC #|
000015F0: 3E 59 4D 41 58 0D 20 42  43 43 20 52 4E 47 33 20  |>YMAX. BCC RNG3 |
00001600: 3B 59 32 20 3C 20 59 4D  41 58 2C 20 53 4F 20 4F  |;Y2 < YMAX, SO O|
00001610: 4B 0D 52 4E 47 32 20 4A  53 52 20 48 52 52 45 53  |K.RNG2 JSR HRRES|
00001620: 54 20 3B 52 45 53 54 4F  52 45 20 4E 4F 52 4D 41  |T ;RESTORE NORMA|
00001630: 4C 0D 20 4C 44 58 20 23  31 34 20 3B 49 4C 4C 45  |L. LDX #14 ;ILLE|
00001640: 47 41 4C 20 51 55 41 4E  54 49 54 59 20 45 52 52  |GAL QUANTITY ERR|
00001650: 4F 52 0D 20 4A 4D 50 20  28 45 52 52 56 45 43 29  |OR. JMP (ERRVEC)|
00001660: 20 3B 46 55 4E 4E 45 4C  20 54 48 52 4F 55 47 48  | ;FUNNEL THROUGH|
00001670: 20 45 52 52 4F 52 20 52  4F 55 54 49 4E 45 0D 52  | ERROR ROUTINE.R|
00001680: 4E 47 33 20 52 54 53 0D  3B 0D 3B 43 4F 4D 50 4C  |NG3 RTS.;.;COMPL|
00001690: 2C 48 0D 3B 0D 3B 46 4F  52 4D 20 43 4F 4D 50 4C  |,H.;.;FORM COMPL|
000016A0: 45 4D 45 4E 54 20 4F 46  20 53 49 47 4E 45 44 20  |EMENT OF SIGNED |
000016B0: 4E 55 4D 42 45 52 0D 3B  31 53 54 20 45 4E 54 45  |NUMBER.;1ST ENTE|
000016C0: 52 20 41 54 20 43 4F 4D  50 4C 20 46 4F 52 20 4C  |R AT COMPL FOR L|
000016D0: 4F 57 20 42 59 54 45 0D  3B 54 48 45 4E 20 45 4E  |OW BYTE.;THEN EN|
000016E0: 54 45 52 20 41 54 20 43  4F 4D 50 48 20 46 4F 52  |TER AT COMPH FOR|
000016F0: 20 48 49 47 48 20 42 59  54 45 0D 3B 0D 3B 41 4E  | HIGH BYTE.;.;AN|
00001700: 53 57 45 52 20 49 4E 20  41 0D 3B 0D 43 4F 4D 50  |SWER IN A.;.COMP|
00001710: 4C 20 53 45 43 20 3B 46  4F 52 20 4C 4F 57 20 42  |L SEC ;FOR LOW B|
00001720: 59 54 45 0D 43 4F 4D 50  48 20 45 4F 52 20 23 24  |YTE.COMPH EOR #$|
00001730: 46 46 20 3B 43 4F 4D 50  4C 45 4D 45 4E 54 0D 20  |FF ;COMPLEMENT. |
00001740: 41 44 43 20 23 30 20 3B  41 44 44 20 43 41 52 52  |ADC #0 ;ADD CARR|
00001750: 59 20 53 54 41 54 45 0D  20 52 54 53 0D 3B 0D 4C  |Y STATE. RTS.;.L|
00001760: 4C 20 4A 53 52 20 4C 45  46 54 20 3B 47 4F 20 4C  |L JSR LEFT ;GO L|
00001770: 45 46 54 20 41 4E 44 20  46 41 4C 4C 20 54 48 52  |EFT AND FALL THR|
00001780: 4F 55 47 48 20 54 4F 20  44 4F 57 4E 0D 44 4F 57  |OUGH TO DOWN.DOW|
00001790: 4E 20 4C 44 41 20 42 59  54 0D 20 41 4E 44 20 23  |N LDA BYT. AND #|
000017A0: 37 20 3B 45 58 41 4D 20  4C 4F 57 45 53 54 20 33  |7 ;EXAM LOWEST 3|
000017B0: 20 42 49 54 53 0D 20 45  4F 52 20 23 37 20 3B 46  | BITS. EOR #7 ;F|
000017C0: 4C 49 50 20 54 48 45 4D  0D 20 42 45 51 20 44 4E  |LIP THEM. BEQ DN|
000017D0: 32 20 3B 4F 52 49 47 49  4E 41 4C 20 42 59 54 45  |2 ;ORIGINAL BYTE|
000017E0: 20 57 41 53 20 58 58 58  58 31 31 31 0D 20 49 4E  | WAS XXXX111. IN|
000017F0: 43 20 42 59 54 20 3B 45  4C 53 45 20 4A 55 53 54  |C BYT ;ELSE JUST|
00001800: 20 42 55 4D 50 20 42 59  20 31 0D 20 42 4E 45 20  | BUMP BY 1. BNE |
00001810: 44 4E 33 0D 20 49 4E 43  20 42 59 54 2B 31 0D 20  |DN3. INC BYT+1. |
00001820: 42 4E 45 20 44 4E 33 20  3B 42 52 41 4E 43 48 20  |BNE DN3 ;BRANCH |
00001830: 41 4C 57 41 59 53 0D 44  4E 32 20 43 4C 43 20 3B  |ALWAYS.DN2 CLC ;|
00001840: 41 44 44 20 33 32 30 2D  37 0D 20 4C 44 41 20 42  |ADD 320-7. LDA B|
00001850: 59 54 0D 20 41 44 43 20  23 3C 33 31 33 0D 20 53  |YT. ADC #<313. S|
00001860: 54 41 20 42 59 54 0D 20  4C 44 41 20 42 59 54 2B  |TA BYT. LDA BYT+|
00001870: 31 0D 20 41 44 43 20 23  3E 33 31 33 0D 20 53 54  |1. ADC #>313. ST|
00001880: 41 20 42 59 54 2B 31 0D  44 4E 33 20 52 54 53 0D  |A BYT+1.DN3 RTS.|
00001890: 3B 0D 55 52 20 4A 53 52  20 52 49 47 48 54 20 3B  |;.UR JSR RIGHT ;|
000018A0: 46 49 52 53 54 20 52 49  47 48 54 20 54 48 45 4E  |FIRST RIGHT THEN|
000018B0: 20 46 41 4C 4C 20 54 48  52 4F 55 47 48 20 54 4F  | FALL THROUGH TO|
000018C0: 20 55 50 0D 55 50 20 4C  44 41 20 42 59 54 0D 20  | UP.UP LDA BYT. |
000018D0: 41 4E 44 20 23 37 20 3B  43 48 45 43 4B 20 4C 4F  |AND #7 ;CHECK LO|
000018E0: 57 20 42 49 54 53 0D 20  42 4E 45 20 55 50 31 20  |W BITS. BNE UP1 |
000018F0: 3B 49 46 20 42 59 54 45  20 57 41 53 20 4E 4F 54  |;IF BYTE WAS NOT|
00001900: 20 58 58 58 58 58 30 30  30 0D 20 53 45 43 20 3B  | XXXXX000. SEC ;|
00001910: 45 4C 53 45 20 53 55 42  54 52 41 43 54 20 33 32  |ELSE SUBTRACT 32|
00001920: 30 2D 37 0D 20 4C 44 41  20 42 59 54 0D 20 53 42  |0-7. LDA BYT. SB|
00001930: 43 20 23 3C 33 31 33 0D  20 53 54 41 20 42 59 54  |C #<313. STA BYT|
00001940: 0D 20 4C 44 41 20 42 59  54 2B 31 0D 20 53 42 43  |. LDA BYT+1. SBC|
00001950: 20 23 3E 33 31 33 0D 20  53 54 41 20 42 59 54 2B  | #>313. STA BYT+|
00001960: 31 0D 20 42 4E 45 20 55  50 33 20 3B 42 52 41 4E  |1. BNE UP3 ;BRAN|
00001970: 43 48 20 41 4C 57 41 59  53 0D 55 50 31 20 4C 44  |CH ALWAYS.UP1 LD|
00001980: 41 20 42 59 54 20 3B 44  45 43 52 45 4D 45 4E 54  |A BYT ;DECREMENT|
00001990: 20 42 59 20 31 0D 20 42  4E 45 20 55 50 32 0D 20  | BY 1. BNE UP2. |
000019A0: 44 45 43 20 42 59 54 2B  31 0D 55 50 32 20 44 45  |DEC BYT+1.UP2 DE|
000019B0: 43 20 42 59 54 0D 55 50  33 20 52 54 53 0D 3B 0D  |C BYT.UP3 RTS.;.|
000019C0: 55 4C 20 4A 53 52 20 55  50 20 3B 31 53 54 20 55  |UL JSR UP ;1ST U|
000019D0: 50 20 54 48 45 4E 20 46  41 4C 4C 20 54 48 52 4F  |P THEN FALL THRO|
000019E0: 55 47 48 20 54 4F 20 4C  45 46 54 0D 4C 45 46 54  |UGH TO LEFT.LEFT|
000019F0: 20 41 53 4C 20 42 49 54  4E 4F 20 3B 47 4F 20 31  | ASL BITNO ;GO 1|
00001A00: 20 50 49 58 45 4C 20 4C  45 46 54 0D 20 42 43 43  | PIXEL LEFT. BCC|
00001A10: 20 4C 46 32 20 3B 4E 4F  20 43 4F 52 52 45 43 54  | LF2 ;NO CORRECT|
00001A20: 49 4F 4E 20 4F 4E 20 43  41 52 52 59 20 43 4C 45  |ION ON CARRY CLE|
00001A30: 41 52 0D 20 52 4F 4C 20  42 49 54 4E 4F 20 3B 53  |AR. ROL BITNO ;S|
00001A40: 45 54 20 42 49 54 4E 4F  3D 31 20 41 4E 44 20 43  |ET BITNO=1 AND C|
00001A50: 4C 45 41 52 20 43 41 52  52 59 0D 20 4C 44 41 20  |LEAR CARRY. LDA |
00001A60: 42 59 54 0D 20 53 42 43  20 23 37 20 3B 28 2D 38  |BYT. SBC #7 ;(-8|
00001A70: 20 53 49 4E 43 45 20 43  41 52 52 59 20 49 53 20  | SINCE CARRY IS |
00001A80: 43 4C 45 41 52 29 0D 20  53 54 41 20 42 59 54 0D  |CLEAR). STA BYT.|
00001A90: 20 42 43 53 20 4C 46 32  0D 20 44 45 43 20 42 59  | BCS LF2. DEC BY|
00001AA0: 54 2B 31 0D 4C 46 32 20  52 54 53 0D 3B 0D 4C 52  |T+1.LF2 RTS.;.LR|
00001AB0: 20 4A 53 52 20 44 4F 57  4E 20 3B 31 53 54 20 44  | JSR DOWN ;1ST D|
00001AC0: 4F 57 4E 20 54 48 45 4E  20 46 41 4C 4C 20 54 48  |OWN THEN FALL TH|
00001AD0: 52 4F 55 47 48 20 54 4F  20 52 49 47 48 54 0D 52  |ROUGH TO RIGHT.R|
00001AE0: 49 47 48 54 20 4C 53 52  20 42 49 54 4E 4F 20 3B  |IGHT LSR BITNO ;|
00001AF0: 47 4F 20 31 20 50 49 58  45 4C 20 52 49 47 48 54  |GO 1 PIXEL RIGHT|
00001B00: 0D 20 42 43 43 20 52 47  54 31 0D 20 52 4F 52 20  |. BCC RGT1. ROR |
00001B10: 42 49 54 4E 4F 20 3B 53  45 54 20 42 49 54 4E 4F  |BITNO ;SET BITNO|
00001B20: 3D 24 38 30 20 41 4E 44  20 43 4C 45 41 52 20 43  |=$80 AND CLEAR C|
00001B30: 41 52 52 59 0D 20 4C 44  41 20 42 59 54 0D 20 41  |ARRY. LDA BYT. A|
00001B40: 44 43 20 23 38 20 3B 4F  4E 45 20 43 45 4C 4C 20  |DC #8 ;ONE CELL |
00001B50: 52 49 47 48 54 0D 20 53  54 41 20 42 59 54 0D 20  |RIGHT. STA BYT. |
00001B60: 42 43 43 20 52 47 54 31  0D 20 49 4E 43 20 42 59  |BCC RGT1. INC BY|
00001B70: 54 2B 31 0D 52 47 54 31  20 52 54 53 0D 3B 0D 3B  |T+1.RGT1 RTS.;.;|
00001B80: 43 4C 52 48 52 0D 3B 0D  3B 43 4C 45 41 52 53 20  |CLRHR.;.;CLEARS |
00001B90: 45 58 41 43 54 4C 59 20  38 30 30 30 20 42 59 54  |EXACTLY 8000 BYT|
00001BA0: 45 53 0D 3B 4C 45 41 56  45 53 20 59 3D 58 3D 30  |ES.;LEAVES Y=X=0|
00001BB0: 0D 3B 0D 43 4C 52 48 52  20 4C 44 41 20 23 3E 48  |.;.CLRHR LDA #>H|
00001BC0: 52 4C 41 53 54 0D 20 53  54 41 20 42 59 54 2B 31  |RLAST. STA BYT+1|
00001BD0: 20 3B 49 4E 49 54 2E 20  50 4F 49 4E 54 45 52 20  | ;INIT. POINTER |
00001BE0: 54 4F 20 4C 41 53 54 20  50 41 47 45 0D 20 4C 44  |TO LAST PAGE. LD|
00001BF0: 41 20 23 30 0D 20 53 54  41 20 42 59 54 0D 20 54  |A #0. STA BYT. T|
00001C00: 41 59 0D 20 53 54 41 20  42 59 54 0D 20 53 54 41  |AY. STA BYT. STA|
00001C10: 20 28 42 59 54 29 2C 59  20 3B 54 48 49 53 20 4F  | (BYT),Y ;THIS O|
00001C20: 4E 45 20 44 4F 4E 45 20  53 45 50 41 52 41 54 45  |NE DONE SEPARATE|
00001C30: 4C 59 0D 20 4C 44 59 20  23 3C 48 52 4C 41 53 54  |LY. LDY #<HRLAST|
00001C40: 20 3B 53 54 41 52 54 20  41 54 20 42 41 53 45 2B  | ;START AT BASE+|
00001C50: 24 31 46 33 46 0D 20 4C  44 58 20 23 24 32 30 20  |$1F3F. LDX #$20 |
00001C60: 3B 58 20 4B 45 45 50 53  20 54 52 41 43 4B 20 4F  |;X KEEPS TRACK O|
00001C70: 46 20 50 41 47 45 53 0D  43 4C 52 48 52 31 20 53  |F PAGES.CLRHR1 S|
00001C80: 54 41 20 28 42 59 54 29  2C 59 20 3B 50 55 54 20  |TA (BYT),Y ;PUT |
00001C90: 49 4E 20 30 27 53 0D 20  44 45 59 0D 20 42 4E 45  |IN 0'S. DEY. BNE|
00001CA0: 20 43 4C 52 48 52 31 0D  20 44 45 43 20 42 59 54  | CLRHR1. DEC BYT|
00001CB0: 2B 31 0D 20 44 45 58 0D  20 42 4E 45 20 43 4C 52  |+1. DEX. BNE CLR|
00001CC0: 48 52 31 20 3B 44 4F 20  33 32 20 50 41 47 45 53  |HR1 ;DO 32 PAGES|
00001CD0: 0D 20 52 54 53 0D 3B 0D  3B 53 45 54 43 4F 4C 0D  |. RTS.;.;SETCOL.|
00001CE0: 3B 0D 3B 53 45 54 20 46  4F 52 45 47 52 4F 55 4E  |;.;SET FOREGROUN|
00001CF0: 44 2F 42 41 43 4B 47 52  4F 55 4E 44 20 43 4F 4C  |D/BACKGROUND COL|
00001D00: 4F 52 0D 3B 0D 53 45 54  43 4F 4C 20 4C 44 41 20  |OR.;.SETCOL LDA |
00001D10: 23 43 4F 4C 4F 52 20 3B  49 4E 20 32 20 4E 59 42  |#COLOR ;IN 2 NYB|
00001D20: 42 4C 45 53 0D 53 45 54  43 4C 30 20 4C 44 58 20  |BLES.SETCL0 LDX |
00001D30: 23 30 0D 53 45 54 43 4C  31 20 53 54 41 20 53 43  |#0.SETCL1 STA SC|
00001D40: 52 45 45 4E 2C 58 20 3B  44 4F 20 34 20 50 41 47  |REEN,X ;DO 4 PAG|
00001D50: 45 53 0D 20 53 54 41 20  53 43 52 45 45 4E 2B 24  |ES. STA SCREEN+$|
00001D60: 30 31 30 30 2C 58 0D 20  53 54 41 20 53 43 52 45  |0100,X. STA SCRE|
00001D70: 45 4E 2B 24 30 32 30 30  2C 58 0D 20 49 4E 58 0D  |EN+$0200,X. INX.|
00001D80: 20 42 4E 45 20 53 45 54  43 4C 31 0D 20 4C 44 58  | BNE SETCL1. LDX|
00001D90: 20 23 3C 53 43 52 45 4E  44 2B 31 20 3B 44 4F 20  | #<SCREND+1 ;DO |
00001DA0: 4C 41 53 54 20 50 41 47  45 0D 53 45 54 43 4C 32  |LAST PAGE.SETCL2|
00001DB0: 20 53 54 41 20 53 43 52  45 45 4E 2B 24 30 32 46  | STA SCREEN+$02F|
00001DC0: 46 2C 58 0D 20 44 45 58  0D 20 42 4E 45 20 53 45  |F,X. DEX. BNE SE|
00001DD0: 54 43 4C 32 0D 20 52 54  53 0D 3B 0D 3B 48 52 49  |TCL2. RTS.;.;HRI|
00001DE0: 4E 49 54 20 2D 20 53 45  54 53 20 55 50 20 48 49  |NIT - SETS UP HI|
00001DF0: 2D 52 45 53 0D 3B 0D 48  52 49 4E 49 54 20 4C 44  |-RES.;.HRINIT LD|
00001E00: 41 20 48 52 43 54 52 4C  20 3B 48 49 2D 52 45 53  |A HRCTRL ;HI-RES|
00001E10: 20 4D 4F 44 45 0D 20 4F  52 41 20 23 24 32 30 20  | MODE. ORA #$20 |
00001E20: 3B 54 55 52 4E 20 4F 4E  20 42 49 54 20 35 0D 20  |;TURN ON BIT 5. |
00001E30: 53 54 41 20 48 52 43 54  52 4C 0D 20 4C 44 41 20  |STA HRCTRL. LDA |
00001E40: 48 52 4D 52 45 47 20 3B  42 59 54 20 41 54 20 24  |HRMREG ;BYT AT $|
00001E50: 32 30 30 30 0D 20 4F 52  41 20 23 24 30 38 20 3B  |2000. ORA #$08 ;|
00001E60: 54 55 52 4E 20 4F 4E 20  42 49 54 20 33 0D 20 53  |TURN ON BIT 3. S|
00001E70: 54 41 20 48 52 4D 52 45  47 0D 20 4A 53 52 20 53  |TA HRMREG. JSR S|
00001E80: 45 54 43 4F 4C 20 3B 46  4F 52 43 45 20 42 4C 41  |ETCOL ;FORCE BLA|
00001E90: 43 4B 20 41 4E 44 20 47  52 45 45 4E 0D 20 4A 53  |CK AND GREEN. JS|
00001EA0: 52 20 43 4C 52 48 52 20  3B 46 4F 52 43 45 20 54  |R CLRHR ;FORCE T|
00001EB0: 4F 20 41 4C 4C 20 5A 45  52 4F 45 53 0D 20 4C 44  |O ALL ZEROES. LD|
00001EC0: 41 20 45 52 52 56 45 43  20 3B 52 45 4D 45 4D 42  |A ERRVEC ;REMEMB|
00001ED0: 45 52 20 53 59 53 54 45  4D 20 45 52 52 4F 52 20  |ER SYSTEM ERROR |
00001EE0: 56 45 43 54 4F 52 0D 20  53 54 41 20 45 52 56 45  |VECTOR. STA ERVE|
00001EF0: 43 0D 20 4C 44 41 20 45  52 52 56 45 43 2B 31 0D  |C. LDA ERRVEC+1.|
00001F00: 20 53 54 41 20 45 52 56  45 43 2B 31 0D 20 4C 44  | STA ERVEC+1. LD|
00001F10: 41 20 23 3C 41 42 52 54  20 3B 53 45 54 20 55 50  |A #<ABRT ;SET UP|
00001F20: 20 4E 45 57 20 45 52 52  4F 52 20 52 45 43 4F 56  | NEW ERROR RECOV|
00001F30: 45 52 59 0D 20 53 54 41  20 45 52 52 56 45 43 0D  |ERY. STA ERRVEC.|
00001F40: 20 4C 44 41 20 23 3E 41  42 52 54 0D 20 53 54 41  | LDA #>ABRT. STA|
00001F50: 20 45 52 52 56 45 43 2B  31 0D 20 52 54 53 0D 3B  | ERRVEC+1. RTS.;|
00001F60: 0D 3B 48 52 52 45 53 54  20 2D 20 52 45 53 54 4F  |.;HRREST - RESTO|
00001F70: 52 45 20 4E 4F 52 4D 41  4C 20 4D 4F 44 45 0D 3B  |RE NORMAL MODE.;|
00001F80: 0D 48 52 52 45 53 54 20  4A 53 52 20 43 4C 52 48  |.HRREST JSR CLRH|
00001F90: 52 20 3B 43 4C 45 41 52  20 48 49 2D 52 45 53 0D  |R ;CLEAR HI-RES.|
00001FA0: 20 4C 44 41 20 48 52 43  54 52 4C 20 3B 4D 4F 44  | LDA HRCTRL ;MOD|
00001FB0: 45 20 52 45 47 49 53 54  45 52 0D 20 41 4E 44 20  |E REGISTER. AND |
00001FC0: 23 25 31 31 30 31 31 31  31 31 20 3B 54 55 52 4E  |#%11011111 ;TURN|
00001FD0: 20 4F 46 46 20 42 49 54  20 35 0D 20 53 54 41 20  | OFF BIT 5. STA |
00001FE0: 48 52 43 54 52 4C 0D 20  4C 44 41 20 48 52 4D 52  |HRCTRL. LDA HRMR|
00001FF0: 45 47 20 3B 4D 45 4D 4F  52 59 20 52 45 47 49 53  |EG ;MEMORY REGIS|
00002000: 54 45 52 0D 20 41 4E 44  20 23 25 31 31 31 31 30  |TER. AND #%11110|
00002010: 31 31 31 20 3B 54 55 52  4E 20 4F 46 46 20 42 49  |111 ;TURN OFF BI|
00002020: 54 20 33 0D 20 53 54 41  20 48 52 4D 52 45 47 0D  |T 3. STA HRMREG.|
00002030: 20 4C 44 41 20 23 27 20  27 20 3B 46 49 4C 4C 20  | LDA #' ' ;FILL |
00002040: 53 43 52 45 45 4E 20 57  49 54 48 20 53 50 41 43  |SCREEN WITH SPAC|
00002050: 45 53 0D 20 4A 53 52 20  53 45 54 43 4C 30 0D 20  |ES. JSR SETCL0. |
00002060: 4C 44 41 20 45 52 56 45  43 20 3B 52 45 53 54 4F  |LDA ERVEC ;RESTO|
00002070: 52 45 20 53 59 53 54 45  4D 20 45 52 52 4F 52 20  |RE SYSTEM ERROR |
00002080: 56 45 43 54 4F 52 0D 20  53 54 41 20 45 52 52 56  |VECTOR. STA ERRV|
00002090: 45 43 0D 20 4C 44 41 20  45 52 56 45 43 2B 31 0D  |EC. LDA ERVEC+1.|
000020A0: 20 53 54 41 20 45 52 52  56 45 43 2B 31 0D 20 52  | STA ERRVEC+1. R|
000020B0: 54 53 0D 3B 0D 3B 47 45  54 56 41 4C 20 2D 20 47  |TS.;.;GETVAL - G|
000020C0: 45 54 20 50 41 52 41 4D  45 54 45 52 0D 3B 0D 47  |ET PARAMETER.;.G|
000020D0: 45 54 56 41 4C 20 4A 53  52 20 43 48 4B 43 4F 4D  |ETVAL JSR CHKCOM|
000020E0: 20 3B 43 48 45 43 4B 20  46 4F 52 20 43 4F 4D 4D  | ;CHECK FOR COMM|
000020F0: 41 0D 20 4A 53 52 20 45  56 41 45 58 50 20 3B 45  |A. JSR EVAEXP ;E|
00002100: 56 41 4C 55 41 54 45 20  45 58 50 52 45 53 53 49  |VALUATE EXPRESSI|
00002110: 4F 4E 0D 20 4A 53 52 20  46 4C 54 46 49 58 20 3B  |ON. JSR FLTFIX ;|
00002120: 43 4F 4E 56 45 52 54 20  54 4F 20 49 4E 54 45 47  |CONVERT TO INTEG|
00002130: 45 52 20 49 4E 20 59 20  41 4E 44 20 41 0D 20 52  |ER IN Y AND A. R|
00002140: 54 53 0D 3B 0D 3B 45 4E  54 45 52 20 48 45 52 45  |TS.;.;ENTER HERE|
00002150: 20 49 46 20 46 52 4F 4D  20 42 41 53 49 43 0D 3B  | IF FROM BASIC.;|
00002160: 0D 53 45 54 50 49 58 20  4A 53 52 20 48 52 4D 4F  |.SETPIX JSR HRMO|
00002170: 56 45 0D 3B 0D 3B 45 4E  54 45 52 20 48 45 52 45  |VE.;.;ENTER HERE|
00002180: 20 49 46 20 58 31 2C 59  31 20 41 4C 52 45 41 44  | IF X1,Y1 ALREAD|
00002190: 59 20 53 45 54 0D 3B 0D  53 54 50 49 58 30 20 4C  |Y SET.;.STPIX0 L|
000021A0: 44 59 20 23 30 0D 20 4C  44 41 20 28 42 59 54 29  |DY #0. LDA (BYT)|
000021B0: 2C 59 0D 20 4F 52 41 20  42 49 54 4E 4F 0D 20 53  |,Y. ORA BITNO. S|
000021C0: 54 41 20 28 42 59 54 29  2C 59 0D 20 52 54 53 0D  |TA (BYT),Y. RTS.|
000021D0: 3B 0D 3B 45 52 52 4F 52  20 52 45 43 4F 56 45 52  |;.;ERROR RECOVER|
000021E0: 59 0D 3B 0D 41 42 52 54  20 50 48 41 20 3B 53 41  |Y.;.ABRT PHA ;SA|
000021F0: 56 45 20 52 45 47 53 0D  20 54 58 41 0D 20 50 48  |VE REGS. TXA. PH|
00002200: 41 0D 20 54 59 41 0D 20  50 48 41 0D 20 4A 53 52  |A. TYA. PHA. JSR|
00002210: 20 48 52 52 45 53 54 20  3B 52 45 53 54 4F 52 45  | HRREST ;RESTORE|
00002220: 20 54 4F 20 4E 4F 52 4D  41 4C 0D 20 50 4C 41 20  | TO NORMAL. PLA |
00002230: 3B 52 45 53 54 4F 52 45  20 52 45 47 53 0D 20 54  |;RESTORE REGS. T|
00002240: 41 59 0D 20 50 4C 41 0D  20 54 41 58 0D 20 50 4C  |AY. PLA. TAX. PL|
00002250: 41 0D 20 4A 4D 50 20 28  45 52 52 56 45 43 29 20  |A. JMP (ERRVEC) |
00002260: 3B 45 52 52 4F 52 20 4D  45 53 53 41 47 45 0D 3B  |;ERROR MESSAGE.;|
00002270: 0D 4D 4F 56 54 41 42 20  2E 57 4F 52 44 20 52 49  |.MOVTAB .WORD RI|
00002280: 47 48 54 2D 31 0D 20 2E  57 4F 52 44 20 55 52 2D  |GHT-1. .WORD UR-|
00002290: 31 0D 20 2E 57 4F 52 44  20 4C 45 46 54 2D 31 0D  |1. .WORD LEFT-1.|
000022A0: 20 2E 57 4F 52 44 20 55  4C 2D 31 0D 20 2E 57 4F  | .WORD UL-1. .WO|
000022B0: 52 44 20 52 49 47 48 54  2D 31 0D 20 2E 57 4F 52  |RD RIGHT-1. .WOR|
000022C0: 44 20 4C 52 2D 31 0D 20  2E 57 4F 52 44 20 4C 45  |D LR-1. .WORD LE|
000022D0: 46 54 2D 31 0D 20 2E 57  4F 52 44 20 4C 4C 2D 31  |FT-1. .WORD LL-1|
000022E0: 0D 20 2E 57 4F 52 44 20  55 50 2D 31 0D 20 2E 57  |. .WORD UP-1. .W|
000022F0: 4F 52 44 20 55 52 2D 31  0D 20 2E 57 4F 52 44 20  |ORD UR-1. .WORD |
00002300: 55 50 2D 31 0D 20 2E 57  4F 52 44 20 55 4C 2D 31  |UP-1. .WORD UL-1|
00002310: 0D 20 2E 57 4F 52 44 20  44 4F 57 4E 2D 31 0D 20  |. .WORD DOWN-1. |
00002320: 2E 57 4F 52 44 20 4C 52  2D 31 0D 20 2E 57 4F 52  |.WORD LR-1. .WOR|
00002330: 44 20 44 4F 57 4E 2D 31  0D 20 2E 57 4F 52 44 20  |D DOWN-1. .WORD |
00002340: 4C 4C 2D 31 0D 3B 0D 4D  53 4B 54 42 20 2E 42 59  |LL-1.;.MSKTB .BY|
00002350: 54 45 20 24 38 30 2C 24  34 30 2C 24 32 30 2C 24  |TE $80,$40,$20,$|
00002360: 31 30 0D 20 2E 42 59 54  45 20 24 30 38 2C 24 30  |10. .BYTE $08,$0|
00002370: 34 2C 24 30 32 2C 24 30  31 0D 3B 0D 2E 45 4E 44  |4,$02,$01.;..END|
00002380: 0D                                                |.               |
.OPT NOL.;.;** HRSUPP/64 **.;.ORIGIN = $
6000.;.;** EQUATES **.;.;SYSTEM ROUTINES
.;.ERROR = $A437 ;PRINT ERROR MESSAGE.EV
AEXP = $AD9E ;EVALUATE EXPRESSION.CHKCOM
 = $AEFD ;CHECK FOR COMMA.FLTFIX = $B1AA
 ;CONVERT TO FIXED IN Y (LOW) AND A (HIG
H).;.;VECTORS.;.ERRVEC = $0300 ;ERROR RO
UTINE.WARMV = $0302 ;BASIC WARM START.;.
;HI-RES STUFF.;.VIC = $D000 ;ADDRESS OF 
VIC CHIP.HRCTRL = VIC+17 ;MODE CONTROL.H
RMREG = VIC+24 ;MEMORY CONTROL.;.SCREEN 
= $0400 ;1K SCREEN.SCREND = SCREEN+999 ;
LAST SCREEN LOC'N.BASE = $2000 ;START OF
 8K BYT.HRLAST = BASE+7999 ;LAST LOC'N.R
AM = $033C ;USE CASSETTE BUFFER.;.;**ZER
O PAGE**.;.BYT = $FD ;BYT POINTER.;.*=RA
M.;.X1 *=*+2 ;X COORDINATE (0 - 319).X2 
*=*+2.Y1 *=*+2 ;Y COORDINATE (0 - 199).Y
2 *=*+2.BITNO *=*+1 ;ON BIT IS PIXEL.DEL
TX *=*+2 ;X2-X1.DELTY *=*+2 ;Y2-Y1.E *=*
+2.T *=*+2.C *=*+2.I *=*+1 ;DIRECTION PO
INTER.TEMP *=*+2.ERVEC *=*+2 ;HOLDS SYST
EM ERROR VECTOR.;.;CONSTANTS.;.XMAX=320.
YMAX=200.COLS=40 ;NUMBER OF COLUMNS/ROW.
COLOR=$50 ;FOREGROUND/BACKGROUND = BLACK
/GREEN.;.*=ORIGIN.;.;JUMP TABLE FOR COVE
NIENT ENTRY POINTS.;.JINIT JMP HRINIT ;I
NITIALIZE.JREST JMP HRREST ;RESTORE.JCLR
 JMP CLRHR ;CLEAR SCREEN.JDRAW JMP VECPL
T ;DRAW STRAIGHT LINE.JSETPX JMP SETPIX 
;TURN ON PIXEL.;.;FALL THROUGH TO MOVE R
OUTINE.;.;HRADDR - GIVEN X-COORD (2 BYTE
S).;AND Y-COORD (1 BYTE).;CALCULATE BYT 
ADDRESS AND BITNO.;.;CLOBBERS X, LEAVES 
Y=0.;.;ENTER HERE IF FROM BASIC.;.HRMOVE
 JSR GETVAL ;GET X1. STY X1. STY X2 ;FOR
 RNGCHK. STA X1+1. STA X2+1. JSR GETVAL 
;GET Y1. STY Y1. STY Y2. STA Y2+1. JSR R
NGCHK.;.;ENTER HERE IF X1, Y1 ARE SET.;.
HRADDR LDA #0 ;SET HIGH BYTE TO ZERO. ST
A BYT+1. SEC ;FORM 199-Y1. LDA #YMAX-1. 
SBC Y1. PHA ;SAVE RESULT ON STACK. AND #
$F8 ;FORM ROW #. ASL A ;MULT BY 2. ROL B
YT+1. ASL A ;MULT BY 4. ROL BYT+1. ASL A
 ;MULT BY 8. ROL BYT+1. PHA ;SAVE ON STA
CK. STA TEMP ;AND IN TEMP. LDA BYT+1. ST
A TEMP+1 ;TEMP HAS 8*Y. PLA ;RESTORE A. 
ASL A ;MULT BY 16. ROL BYT+1. ASL A ;MUL
T BY 32. ROL BYT+1 ;(CARRY STILL CLEAR).
 ADC TEMP ;FORM 32+8 = 40*. STA BYT ;INT
O BYT. LDA BYT+1. ADC TEMP+1. STA BYT+1.
 LDA X1 ;NOW ADD CHAR. AND #$F8. ADC BYT
. STA BYT. LDA X1+1. ADC BYT+1. STA BYT+
1 ;(CARRY STILL CLEAR). PLA ;NOW ADD LIN
E. AND #7 ;BY MASKING HIGH BITS. ADC BYT
. STA BYT. LDA BYT+1 ;FINISH BY ADDING B
ASE. ADC #>BASE. STA BYT+1. LDA X1 ;SET 
BITNO. AND #7 ;IS LOW 3 BITS. TAX ;AND I
NDEX TO TABLE. LDA MSKTB,X. STA BITNO. R
TS ;BYT AND BITNO NOW SET.;.;*** FASTPLO
T ***.;.;GRAPHIC SUBROUTINE FOR LINE DRA
WING.;ON 320*200 HI-RES MEMORY.;.;ORIGIN
ALLY WRITTEN AS VECTOR GENERATOR.;FOR HO
USTON INSTRUMENT HIPLOT.;DIGITAL INCREME
NTAL PLOTTER.;.;MORE EFFICIENT ALGORITHM
 BY W. MCWORTER.;IN BYTE MAY 1981, P202.
;.;RE-WRITTEN FOR MTU VISIBLE MEMORY (TM
).;BY F. COVITZ, AUG. 1981.;REVISED NOV.
 1982 FOR CBM-64.;.;.;******************
***********.;* TYPO IN ORIGINAL LETTER  
 *.;*                           *.;* IT 
READS; A$="RQVWPS...." *.;*             
      *       *.;*SHOULD BE; A$="RQVWRS.
..." *.;*                           *.;*
****************************.;.;COME IN 
WITH X1,Y1 AND X2,Y2.;AND FIRST PIXEL SE
T.;I.E. BYT,BYT+1, AND BITNO ARE SET.;VI
A CALL TO PIXADR.;ROUTINE DRAWS BEST STR
AIGHT LINE.;LEAVES WITH X1_X2,Y1_Y2.;.;L
EAVES WITH Y=0, X CLOBBERED.;ROUTINE CHE
CKS FOR OVERFLOW.;.;**VECPLT**.;.;ENTER 
HERE FROM BASIC.;.VECPLT JSR GETVAL ;GET
 X-COORD. STY X2. STA X2+1. JSR GETVAL ;
GET Y-COORD. STY Y2. STA Y2+1.;.;ENTER H
ERE IF X2, Y2 ALREADY SET.;.VECPL1 JSR R
NGCHK ;CHECK X2,Y2 OVERFLOW. SEC ;FORM D
ELTX (SIGNED). LDA X2. SBC X1. STA DELTX
. LDA X2+1. SBC X1+1. STA DELTX+1. SEC ;
FORM DELTY (SIGNED). LDA Y2. SBC Y1. STA
 DELTY. LDA Y2+1. SBC Y1+1.;. STA DELTY+
1. LDA X2 ;X1,Y1_X2,Y2. STA X1. LDA X2+1
. STA X1+1. LDA Y2. STA Y1. LDA Y2+1. ST
A Y1+1.;.;NOW HAVE DELTX,DELTY (SIGNED).
;.;** MOVE **.;.;GIVEN DELTX, DELTY.;DRA
W/MOVE THE BEST STRAIGHT LINE.;.MOVE LDA
 #0 ;DETERMINE OCTANT. STA I. BIT DELTX+
1 ;CHECK DELTX < 0. BPL MV1. LDA DELTX ;
CHANGE SIGN. JSR COMPL. STA DELTX. LDA D
ELTX+1. JSR COMPH. STA DELTX+1. LDA #2. 
STA I.MV1 BIT DELTY+1 ;CHECK DELTY < 0. 
BPL MV2. LDA DELTY. JSR COMPL. STA DELTY
. LDA DELTY+1. JSR COMPH. STA DELTY+1. C
LC. LDA I. ADC #4. STA I.MV2 LDX DELTX ;
CHECK DELTX-DELTY. CPX DELTY ;SET CARRY 
FOR LOW BYTE. LDA DELTX+1 ;NOW HIGH BYTE
. TAY ;SET Y = DELTX. SBC DELTY+1. BPL M
V3. LDA DELTY ;INTERCHANGE DELTX,Y. STA 
DELTX. LDA DELTY+1. STA DELTX+1. STX DEL
TY. STY DELTY+1. CLC. LDA I. ADC #8. STA
 I.MV3 LDA DELTX ;FORM E=-DELTX/2. JSR C
OMPL. STA E. LDA DELTX+1. JSR COMPH. STA
 E+1. SEC ;CHECK FOR NEGATIVE. BMI MV4. 
CLC.MV4 ROR E+1 ;DIVIDE BY 2. ROR E. LDY
 #0 ;SET Y=0. STY C ;SET COUNTER TO ZERO
. STY C+1. BEQ MV7 ;ABSOLUTE BRANCH.;.;*
* MAIN DRAWING LOOP **.;.MV5 LDX I ;GET 
DIRECTION IN X. CLC ;FORM E=E+DELTY. LDA
 E. ADC DELTY. STA E ;FIRST LOW BYTE. LD
A E+1. ADC DELTY+1. STA E+1. BMI MV6. SE
C ;FORM E=E-DELTX. LDA E. SBC DELTX. STA
 E. LDA E+1. SBC DELTX+1. STA E+1. INX ;
X BUMPED UP ONE.MV6 JSR OUTPLT ;OUTPUT O
NE MOVE. INC C ;BUMP COUNTER UP 1. BNE M
V7. INC C+1.;.;ENTER HERE ON 1ST PASS.;.
MV7 LDA (BYT),Y ;TURN ON A POINT. ORA BI
TNO. STA (BYT),Y. LDA C ;DONE WHEN C > =
 DELTX. CMP DELTX. LDA C+1. SBC DELTX+1.
 BCC MV5. RTS ;DONE.;.;** OUTPLT **.;.;O
UTPUT AN ELEMENTARY MOVE.;.OUTPLT TXA. A
SL A ;MULT BY TWO TO GET INDEX. TAX. LDA
 MOVTAB+1,X ;GET THE VECTOR. PHA ;HIGH B
YTE ON STACK. LDA MOVTAB,X. PHA ;LOW BYT
E ON STACK. RTS ;DO COMPUTED JUMP.;.;RET
URN VIA RTS TO JSR OUTPLT(1).;.;**RNGCHK
**.;.;CHECK X2, Y2 FOR OVERFLOW.;RETURN 
TO CALLING PROGRAM ON OVERFLOW.;.RNGCHK 
LDA X2 ;CHECK X2, LOW. CMP #<XMAX. LDA X
2+1 ;CHECK HIGH BYTE. SBC #>XMAX. BCS RN
G2 ;X2 > XMAX, SO ABORT.RNG1 LDA Y2 ;CHE
CK Y2, LOW. CMP #<YMAX. LDA Y2+1 ;CHECK 
HIGH BYTE. SBC #>YMAX. BCC RNG3 ;Y2 < YM
AX, SO OK.RNG2 JSR HRREST ;RESTORE NORMA
L. LDX #14 ;ILLEGAL QUANTITY ERROR. JMP 
(ERRVEC) ;FUNNEL THROUGH ERROR ROUTINE.R
NG3 RTS.;.;COMPL,H.;.;FORM COMPLEMENT OF
 SIGNED NUMBER.;1ST ENTER AT COMPL FOR L
OW BYTE.;THEN ENTER AT COMPH FOR HIGH BY
TE.;.;ANSWER IN A.;.COMPL SEC ;FOR LOW B
YTE.COMPH EOR #$FF ;COMPLEMENT. ADC #0 ;
ADD CARRY STATE. RTS.;.LL JSR LEFT ;GO L
EFT AND FALL THROUGH TO DOWN.DOWN LDA BY
T. AND #7 ;EXAM LOWEST 3 BITS. EOR #7 ;F
LIP THEM. BEQ DN2 ;ORIGINAL BYTE WAS XXX
X111. INC BYT ;ELSE JUST BUMP BY 1. BNE 
DN3. INC BYT+1. BNE DN3 ;BRANCH ALWAYS.D
N2 CLC ;ADD 320-7. LDA BYT. ADC #<313. S
TA BYT. LDA BYT+1. ADC #>313. STA BYT+1.
DN3 RTS.;.UR JSR RIGHT ;FIRST RIGHT THEN
 FALL THROUGH TO UP.UP LDA BYT. AND #7 ;
CHECK LOW BITS. BNE UP1 ;IF BYTE WAS NOT
 XXXXX000. SEC ;ELSE SUBTRACT 320-7. LDA
 BYT. SBC #<313. STA BYT. LDA BYT+1. SBC
 #>313. STA BYT+1. BNE UP3 ;BRANCH ALWAY
S.UP1 LDA BYT ;DECREMENT BY 1. BNE UP2. 
DEC BYT+1.UP2 DEC BYT.UP3 RTS.;.UL JSR U
P ;1ST UP THEN FALL THROUGH TO LEFT.LEFT
 ASL BITNO ;GO 1 PIXEL LEFT. BCC LF2 ;NO
 CORRECTION ON CARRY CLEAR. ROL BITNO ;S
ET BITNO=1 AND CLEAR CARRY. LDA BYT. SBC
 #7 ;(-8 SINCE CARRY IS CLEAR). STA BYT.
 BCS LF2. DEC BYT+1.LF2 RTS.;.LR JSR DOW
N ;1ST DOWN THEN FALL THROUGH TO RIGHT.R
IGHT LSR BITNO ;GO 1 PIXEL RIGHT. BCC RG
T1. ROR BITNO ;SET BITNO=$80 AND CLEAR C
ARRY. LDA BYT. ADC #8 ;ONE CELL RIGHT. S
TA BYT. BCC RGT1. INC BYT+1.RGT1 RTS.;.;
CLRHR.;.;CLEARS EXACTLY 8000 BYTES.;LEAV
ES Y=X=0.;.CLRHR LDA #>HRLAST. STA BYT+1
 ;INIT. POINTER TO LAST PAGE. LDA #0. ST
A BYT. TAY. STA BYT. STA (BYT),Y ;THIS O
NE DONE SEPARATELY. LDY #<HRLAST ;START 
AT BASE+$1F3F. LDX #$20 ;X KEEPS TRACK O
F PAGES.CLRHR1 STA (BYT),Y ;PUT IN 0'S. 
DEY. BNE CLRHR1. DEC BYT+1. DEX. BNE CLR
HR1 ;DO 32 PAGES. RTS.;.;SETCOL.;.;SET F
OREGROUND/BACKGROUND COLOR.;.SETCOL LDA 
#COLOR ;IN 2 NYBBLES.SETCL0 LDX #0.SETCL
1 STA SCREEN,X ;DO 4 PAGES. STA SCREEN+$
0100,X. STA SCREEN+$0200,X. INX. BNE SET
CL1. LDX #<SCREND+1 ;DO LAST PAGE.SETCL2
 STA SCREEN+$02FF,X. DEX. BNE SETCL2. RT
S.;.;HRINIT - SETS UP HI-RES.;.HRINIT LD
A HRCTRL ;HI-RES MODE. ORA #$20 ;TURN ON
 BIT 5. STA HRCTRL. LDA HRMREG ;BYT AT $
2000. ORA #$08 ;TURN ON BIT 3. STA HRMRE
G. JSR SETCOL ;FORCE BLACK AND GREEN. JS
R CLRHR ;FORCE TO ALL ZEROES. LDA ERRVEC
 ;REMEMBER SYSTEM ERROR VECTOR. STA ERVE
C. LDA ERRVEC+1. STA ERVEC+1. LDA #<ABRT
 ;SET UP NEW ERROR RECOVERY. STA ERRVEC.
 LDA #>ABRT. STA ERRVEC+1. RTS.;.;HRREST
 - RESTORE NORMAL MODE.;.HRREST JSR CLRH
R ;CLEAR HI-RES. LDA HRCTRL ;MODE REGIST
ER. AND #%11011111 ;TURN OFF BIT 5. STA 
HRCTRL. LDA HRMREG ;MEMORY REGISTER. AND
 #%11110111 ;TURN OFF BIT 3. STA HRMREG.
 LDA #' ' ;FILL SCREEN WITH SPACES. JSR 
SETCL0. LDA ERVEC ;RESTORE SYSTEM ERROR 
VECTOR. STA ERRVEC. LDA ERVEC+1. STA ERR
VEC+1. RTS.;.;GETVAL - GET PARAMETER.;.G
ETVAL JSR CHKCOM ;CHECK FOR COMMA. JSR E
VAEXP ;EVALUATE EXPRESSION. JSR FLTFIX ;
CONVERT TO INTEGER IN Y AND A. RTS.;.;EN
TER HERE IF FROM BASIC.;.SETPIX JSR HRMO
VE.;.;ENTER HERE IF X1,Y1 ALREADY SET.;.
STPIX0 LDY #0. LDA (BYT),Y. ORA BITNO. S
TA (BYT),Y. RTS.;.;ERROR RECOVERY.;.ABRT
 PHA ;SAVE REGS. TXA. PHA. TYA. PHA. JSR
 HRREST ;RESTORE TO NORMAL. PLA ;RESTORE
 REGS. TAY. PLA. TAX. PLA. JMP (ERRVEC) 
;ERROR MESSAGE.;.MOVTAB .WORD RIGHT-1. .
WORD UR-1. .WORD LEFT-1. .WORD UL-1. .WO
RD RIGHT-1. .WORD LR-1. .WORD LEFT-1. .W
ORD LL-1. .WORD UP-1. .WORD UR-1. .WORD 
UP-1. .WORD UL-1. .WORD DOWN-1. .WORD LR
-1. .WORD DOWN-1. .WORD LL-1.;.MSKTB .BY
TE $80,$40,$20,$10. .BYTE $08,$04,$02,$0
1.;..END.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL