JOB BINOXXO V 1.1 ROLFFSON 04714 PASS 3 COMPLETED UNREFERENCED LABELS PRTMSP 3074 PRTMSR 3091 PRTDFR 3231 PRTDFF 3225 SYMBOL TABLE ARR 0400 ANTI 0732 CCRWXS 2774 CCLOOP 2592 CCRWXF 2742 CRRWXS 2477 CRLOOP 2309 COMP 0733 CCRWXL 2762 CRRWXF 2445 CRRWXL 2465 CRNXTR 2378 CRROWX 2397 CCNXTC 2661 CCROWX 2694 CRROWO 2423 CO 0731 CCROWO 2720 CX 0730 CCNCNT 2626 CCENDR 2831 COUNTO 0726 COUNTX 0723 CRNCNT 2343 CRENDR 2534 CREND 2510 CRORWN 2491 CCEND 2807 CCORWN 2788 CRCROW 2362 CCCROW 2645 CRLOPZ 2295 CCLOPZ 2578 CCCHK 2538 CRINCX 2336 CRCHK 2255 CCINCX 2619 DRTYT 0737 DIRTY 0727 DY 0711 DX1 0702 DX2 0705 DX3 0708 DEFARR 0599 ERR 2927 ENDEND 3235 ERRFRM 2999 FALSE 0729 GCLT 2131 GRLT 1918 GRENDR 2038 GRNXTR 1995 GCENDR 2251 GCNXTR 2208 GCCHK 2042 GRCHK 1829 GRLOOP 1862 GCLOOP 2075 GCEND 2227 GCNXT 2189 GREND 2014 GRNXT 1976 LOPCKR 1291 LOPCK1 1243 LOPCK2 1276 LOPCK3 1287 LOOPTR 1044 LOPCHK 1223 PRTFLR 2923 PRTCLR 3041 PRTOFF 3005 PRTFLL 2885 PRTBLL 3057 PRTMSP 3074 PRTLP 3158 PRTMBR 3070 PRTMSR 3091 PRTLP1 3162 PBUF 0201 PRTDFR 3231 PRTFLC 2846 PRTFLD 2847 PRTFLE 2919 PRTCRR 3053 PRTWM 3207 PRTWM1 3214 PRWHAT 0736 PRTMGR 3037 PRTMSA 3095 PRTMSS 3113 PRTMSC 3139 PRTMSG 3006 PRTDFF 3225 PRTRET 3221 RBUF 0001 STARDK 0937 STARDL 0929 STAROK 0965 START 0738 START1 1040 STARDC 0899 STARD4 0984 STARDE 1010 TCLOOP 1595 TRLOOP 1328 TCNXTR 1782 TCNXT 1763 TRNXTR 1515 TRNXT 1496 TCRT 1697 TRRT 1430 TCENDR 1825 TRENDR 1558 TREND 1534 TCEND 1801 TCLT 1651 TRLT 1384 TRUE 0728 TCCHK 1562 TRCHK 1295 XDEC 0717 XINC 0720 X000 0714 X1 0089 X2 0094 X3 0099 ZERO 0000 SYMBOL TABLE BYE 3819 CRCHKT 4471 CCCHKT 4505 ERRTXT 3904 GCCHKT 4435 GRCHKT 4402 HELLO 3477 HELLO1 3520 TRCHKT 4329 TXTHL2 3557 TXTHL3 3598 TXTHL4 3642 TXTHL5 3675 TXTHL6 3721 TXTHL7 3766 TXTHL8 3789 TXTRST 3851 TXTINF 4040 TXTTWC 4102 TXTCWC 4222 TXTGWC 4160 TXTNCH 4248 TXTNMC 4292 TXTRDC 3953 TXTRDE 4000 TXTTWR 4072 TXTCWR 4192 TXTGWR 4132 TCCHKT 4364 CLEAR STORAGE 1 ,008015,022026,030037,044,049,053053N000000N00001026 1 CLEAR STORAGE 2 L068116,105106,110117B101/I9I#071029C029056B026/B001/0991,001/001117I0? 2 BOOTSTRAP ,008015,022029,036040,047054,061068,072/061039 ,0010011040 3 BINOXXO V 1.1 ROLFFSON 04714 PAGE 1 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION A-ADDR B-ADDR TYPE CARD 101 000 JOB BINOXXO V 1.1 ROLFFSON 102 CTL 6611 103 * 104 ******************************************************** 105 * 106 * BINOXXO SOLVER FOR IBM 1401 107 * PUT THE FIELD DEF IN MAKRED AREA BELOW AS DC STRINGS 108 * 109 ******************************************************** 110 ORG 400 * MUST BE MULT 100 0400 111 ARR DA 1X100 * FIELD WORK AREA 0400 0499 4 112 * 113 * FIELD DEFAULT 10X10, ONLY X/O/SPACE 114 ORG 500 0500 115 DCW @ OX @ * ONLY FIRST WITH WM 10 0509 4 116 DC @ OO O XX@ * REST W/O WM 10 0519 4 117 DC @O O OX @ 10 0529 4 118 DC @ XO X O@ 10 0539 5 119 DC @ X X @ 10 0549 5 120 DC @ X O OO@ 10 0559 5 121 DC @OX O @ 10 0569 6 122 DC @O O X @ 10 0579 6 123 DC @ XX X X@ 10 0589 6 124 DEFARR DC @X O O @ 10 0599 7 125 * 126 ******************************************************** 127 * ROLFFSON.DE 2023-10 128 ******************************************************** 129 * 130 * ITS A 10X10 FIELD, SO FOR AN ADRESS OFFSET THE UNIT POS 131 * REPRESENT THE COLUMN AND THE 10 POS REP THE ROW. 132 * EG OFFSET X1 # 36 IS 4TH COLUMN 7TH ROW 133 * THE PROGRAM RELIES ON USING ONLY SPACE/O/X 134 * LABEL PREFIXES: 135 * TR - TWIN ROW CHECK -XX- 136 * TC - TWIN COLUMN CHECK -XX- 137 * GR - GAP ROW CHECK X-X 138 * GC - GAP COLUMN CHECK X-X 139 * CR - COUNT ROW CHECK XXXXXOOOOO 140 * CC - COUNT COLUMN CHECK XXXXXOOOOO 141 * PRT - PRINT 142 * 143 ******************************************************** 144 * 145 ORG 87 0087 146 X1 DSA 0 * INDEX REGISTER 1 3 0089 000 8 147 ORG 92 0092 148 X2 DSA 0 * INDEX REGISTER 2 3 0094 000 9 149 ORG 97 0097 150 X3 DSA 0 * INDEX REGISTER 3 3 0099 000 10 151 * 152 ZERO EQU 0 0000 153 RBUF EQU 001 * CARD READ BUFFER START 0001 154 PBUF EQU 201 * PRINT BUFFER START 0201 155 * 156 * SOME TEXTS 157 ORG ENDEND&200 * MOVE TEXT BEHIND PROG & ADR CONST 3435 158 HELLO DCW @- IBM 1401 - BINOXXO - ROLFFSON 2023 V1.1 -@ 43 3477 12 159 HELLO1 DCW @-------------------------------------------@ 43 3520 14 160 TXTHL2 DCW @SWITCH F OFF: USE INTERNAL DEMO FIELD@ 37 3557 15 161 TXTHL3 DCW @ F ON : READ FIELD FROM CARD READER@ 41 3598 17 162 TXTHL4 DCW @SWITCH D OFF: DETAILED LIST WITH EACH CHANGE@ 44 3642 19 163 TXTHL5 DCW @ D ON : NO LIST, ONLY FIELD@ 33 3675 19 164 TXTHL6 DCW @SWITCH C OFF: PRINT FIELD AFTER EACH MAIN STEP@ 46 3721 21 165 TXTHL7 DCW @ C ON : ONLY PRINT START & RESULT FIELD@ 45 3766 23 166 TXTHL8 DCW @PRESS START TO CONTINUE@ 23 3789 23 167 BYE DCW @***** END OF PROGRAM RUN *****@ 30 3819 24 168 TXTRST DCW @PRESS START TO RUN PROGRAM AGAIN@ 32 3851 25 169 DCW @***** ERROR, FIELD COULD NOT BE@ 31 3882 26 170 ERRTXT DC @ SOLVED, NEAR COL/ROW:@ *55 22 3904 27 171 TXTRDC DCW @READING 10 CARDS FROM 1402 CARD READER 10 COL X/O@ 49 3953 29 172 TXTRDE DCW @***** FORMAT ERROR IN CARD - ONLY USE X/O/SPACE@ 47 4000 31 173 TXTINF DCW @INFO: PRINTED COORDINATES ARE 0..9 BASED@ 40 4040 33 174 TXTTWR DCW @DO TWIN SEARCH _XX_ HORIZONTALLY@ 32 4072 33 175 TXTTWC DCW @DO TWIN SEARCH _XX_ VERTICALLY@ 30 4102 34 176 TXTGWR DCW @DO GAP SEARCH X_X HORIZONTALLY@ 30 4132 35 177 TXTGWC DCW @DO GAP SEARCH X_X VERTICALLY@ 28 4160 36 178 TXTCWR DCW @DO COUNT 5&5 SEARCH HORIZONTALLY@ 32 4192 37 179 TXTCWC DCW @DO COUNT 5&5 SEARCH VERTICALLY@ 30 4222 38 180 TXTNCH DCW @- NOTHING FOUND, NO CHANGE@ 26 4248 39 181 TXTNMC DCW @NO MORE CHANGES, LAST STATE WAS FINAL STATE:@ 44 4292 41 182 TRCHKT DCW @- SURROUND HORIZONTAL TWIN AT ??? - ?@ * 32/36 37 4329 42 183 TCCHKT DCW @- SURROUND VERTICAL TWIN AT ??? - ?@ * 30/34 35 4364 43 184 GRCHKT DCW @- FILL HORIZONTAL GAP RIGHT OF ??? - ?@ * 33/37 38 4402 44 185 GCCHKT DCW @- FILL VERTICAL GAP BELOW ??? - ?@ * 28/32 33 4435 45 186 CRCHKT DCW @- FILL HORIZONTAL 5&5 IN ROW ??? - ?@ * 31/35 36 4471 46 187 CCCHKT DCW @- FILL VERTICAL 5&5 IN COL ??? - ?@ * 29/33 34 4505 47 188 * 189 ******************************************************** 190 * START OF MAIN PROG 191 ORG DEFARR&101 * STARTS AFTER WORK AREA 0700 192 * 193 * CONSTANTS FOR FIELD HANDLING %YES, BELOW 1000 W/O INDEX DSA#DCW) 194 DX1 DSA 001 * INCEREMENT ONE FIELD 3 0702 001 48 195 DX2 DSA 002 * INCREMENT AT LOOP END 3 0705 002 48 196 DX3 DSA 003 * INCREMENT AT LOOP END 3 0708 003 48 197 DY DSA 010 * INCREMENT PER ROW 3 0711 010 48 198 * STD INDEX CONSTANTS 199 X000 DSA 000 * 000 CONSTANT 3 0714 000 48 200 XDEC DSA 15999 * DECREMENT ONE 3 0717 I9I 48 201 XINC DSA 001 * INCREMENT ONE 3 0720 001 48 202 * COUNTER FOR 5&5, LATER USE MA COMMAND TO AVOID SIGN SHENANIGANS 203 COUNTX DSA 000 * ABUSE AS COUNTER 3 0723 000 49 204 COUNTO DSA 000 * ABUSE AS COUNTER 3 0726 000 49 205 * DIRTY FLAG 206 DIRTY DCW @?@ 1 0727 49 207 TRUE DCW @T@ 1 0728 49 208 FALSE DCW @F@ 1 0729 49 209 * X AND O SYMBOLS 210 CX DCW @X@ * THE X 1 0730 49 211 CO DCW @O@ * THE O 1 0731 49 212 * COMP / ANTI USED IN SEARCH LOOPS: 213 ANTI DCW @?@ * BUFFER FOR MCW MODIFICATION 1 0732 50 214 COMP DCW @?@ * BUFFER FOR COMPARE 1 0733 50 215 * 216 PRWHAT DSA 000 3 0736 000 50 217 * 218 ******************************************************** 219 * 220 * MAIN START 221 * 222 ******************************************************** 223 DRTYT DCW @?@ * DIRTY FLAG OVERALL 1 0737 50 224 START NOP 1 0738 N 50 225 CS ARR&99 * CLEAR FIELD WORK AREA 4 0739 / 499 499 50 226 MCW DEFARR,ARR&99 * INSERT DEFAULT FIELD 7 0743 M 599 499 599 499 50 227 MCW &HELLO1,X1 * PRINT HELLO 7 0750 M B38 089 3238 089 51 228 B PRTMSG 4 0757 B ?06 3006 51 229 MCW &HELLO,X1 * PRINT HELLO 7 0761 M B41 089 3241 089 51 230 B PRTMSG 4 0768 B ?06 3006 51 231 MCW &HELLO1,X1 * PRINT HELLO 7 0772 M B44 089 3244 089 51 232 B PRTMSG 4 0779 B ?06 3006 51 233 B PRTBLL * BLANK LINE 4 0783 B ?57 3057 51 234 MCW &TXTINF,X1 * PRINT COORDINATE INFO 7 0787 M B47 089 3247 089 52 235 B PRTMSG 4 0794 B ?06 3006 52 236 * PRINT INFO ABOUT SWITCHES 237 B PRTBLL * BLANK LINE 4 0798 B ?57 3057 52 238 MCW &TXTHL2,X1 * PRINT INFO TEXTS 7 0802 M B50 089 3250 089 52 239 B PRTMSG * TELL USER TO SET SWITCHES 4 0809 B ?06 3006 52 240 MCW &TXTHL3,X1 * AND PRESS START 7 0813 M B53 089 3253 089 52 241 B PRTMSG 4 0820 B ?06 3006 52 242 MCW &TXTHL4,X1 7 0824 M B56 089 3256 089 53 243 B PRTMSG 4 0831 B ?06 3006 53 244 MCW &TXTHL5,X1 7 0835 M B59 089 3259 089 53 245 B PRTMSG 4 0842 B ?06 3006 53 246 MCW &TXTHL6,X1 7 0846 M B62 089 3262 089 53 247 B PRTMSG 4 0853 B ?06 3006 53 248 MCW &TXTHL7,X1 7 0857 M B65 089 3265 089 54 249 B PRTMSG 4 0864 B ?06 3006 54 250 B PRTBLL * BLANK LINE 4 0868 B ?57 3057 54 251 MCW &TXTHL8,X1 7 0872 M B68 089 3268 089 54 252 B PRTMSG 4 0879 B ?06 3006 54 253 H 000,111 * WAIT FOR USER TO PRESS START 7 0883 . 000 111 000 111 54 254 * 255 ******************************************************** 256 * READ FIELD FROM CARDS 257 * 258 BSS STARDC,F * READ FIELD FROM CARDS ? 5 0890 B 899 F 899 54 259 B START1 * NO, USE INTERNAL DEMO FIELD 4 0895 B |40 1040 55 260 STARDC MCW &TXTRDC,X1 * MESSAGE NOW READING CARDS 7 0899 M B71 089 3271 089 55 261 B PRTMSG 4 0906 B ?06 3006 55 262 CS ARR&99 * CLEAR FIELD WORK AREA 4 0910 / 499 499 55 263 CS RBUF&79 * CLEAR CARD BUFFER 4 0914 / 080 080 55 264 SW RBUF * SET WM FOR MOVE CMD 4 0918 , 001 001 55 265 MCW X000,X2 * INIT 7 0922 M 714 094 714 094 55 266 STARDL R * READ CARD 1 0929 1 56 267 * 268 * CHECK CARD DATA FORMAT IN CURRENT LINE 269 MCW X000,X3 7 0930 M 714 099 714 099 56 270 STARDK BCE STAROK,RBUF&X3,X * IS X ? 8 0937 B 965 0?1 X 965 001*X3 56 271 BCE STAROK,RBUF&X3,O * IS O ? 8 0945 B 965 0?1 O 965 001*X3 56 272 BCE STAROK,RBUF&X3, * IS SPACE ? 8 0953 B 965 0?1 965 001*X3 56 273 B STARDE * NO X/O/SPACE, ERR 4 0961 B |10 1010 56 274 STAROK BCE STARD4,X3,9 * WAS LAST ? DONE WITH LINE 8 0965 B 984 099 9 984 099 57 275 MA DX1,X3 * INC PTR 7 0973 # 702 099 702 099 57 276 B STARDK * CHECK NEXT CHAR 4 0980 B 937 937 57 277 * 278 * OK, GO ON WITH CARD 279 STARD4 MCW RBUF&9,ARR&9&X2 * COPY TO FIELD WORK AREA 7 0984 M 010 4!9 010 409*X2 57 280 BCE START1,X2-1,9 * LAST ROW ? DONE 8 0991 B |40 093 9 1040 093 57 281 MA DY,X2 * INC POINTER BY 10 7 0999 # 711 094 711 094 58 282 B STARDL * NEXT CARD / ROW 4 1006 B 929 929 58 283 * 284 * PRINT CARD ERROR MSG 285 STARDE MCW &TXTRDE,X1 * FORMAT ERROR MSG 7 1010 M B74 089 3274 089 58 286 B PRTMSG 4 1017 B ?06 3006 58 287 MCW &RBUF&9,X1 * PRINT WRONG CARD DATA 7 1021 M B77 089 3277 089 58 288 B PRTMSG 4 1028 B ?06 3006 58 289 B PRTBLL * BLANK LINE 4 1032 B ?57 3057 58 290 B START * RESTART OVER 4 1036 B 738 738 59 291 * 292 ******************************************************** 293 * HERE COMES THE MAIN LOOP 294 * 295 START1 B PRTFLD * PRINT START FIELD 4 1040 B Q47 2847 59 296 * 297 LOOPTR MCW FALSE,DRTYT * MAIN LOOP START 7 1044 M 729 737 729 737 59 298 * 299 * DO CHECKS FOR TWIN/GAP/COUNT ROW/COL 300 MCW &TXTTWR,PRWHAT * PRINT INFO - TWIN ROW 7 1051 M B80 736 3280 736 59 301 MCW &TRCHK,LOPCK1&3 * SET CHECK ROUTINE 7 1058 M B83 S46 3283 1246 59 302 B LOPCHK 4 1065 B S23 1223 59 303 MCW &TXTTWC,PRWHAT * PRINT INFO - TWIN COL 7 1069 M B86 736 3286 736 60 304 MCW &TCCHK,LOPCK1&3 * SET CHECK ROUTINE 7 1076 M B89 S46 3289 1246 60 305 B LOPCHK 4 1083 B S23 1223 60 306 MCW &TXTGWR,PRWHAT * PRINT INFO - GAP ROW 7 1087 M B92 736 3292 736 60 307 MCW &GRCHK,LOPCK1&3 * SET CHECK ROUTINE 7 1094 M B95 S46 3295 1246 60 308 B LOPCHK 4 1101 B S23 1223 60 309 MCW &TXTGWC,PRWHAT * PRINT INFO - GAP COL 7 1105 M B98 736 3298 736 61 310 MCW &GCCHK,LOPCK1&3 * SET CHECK ROUTINE 7 1112 M C01 S46 3301 1246 61 311 B LOPCHK 4 1119 B S23 1223 61 312 MCW &TXTCWR,PRWHAT * PRINT INFO - COUNT ROW 7 1123 M C04 736 3304 736 61 313 MCW &CRCHK,LOPCK1&3 * SET CHECK ROUTINE 7 1130 M C07 S46 3307 1246 61 314 B LOPCHK 4 1137 B S23 1223 61 315 MCW &TXTCWC,PRWHAT * PRINT INFO - COUNT COL 7 1141 M C10 736 3310 736 62 316 MCW &CCCHK,LOPCK1&3 * SET CHECK ROUTINE 7 1148 M C13 S46 3313 1246 62 317 B LOPCHK 4 1155 B S23 1223 62 318 * 319 * ANYTHING FOUND? 320 BCE LOOPTR,DRTYT,T * ANYTHING FOUND? TRY AGAIN 8 1159 B |44 737 T 1044 737 62 321 * 322 ******************************************************** 323 * ALL DONE, PRINT LAST STATE AND END 324 B PRTBLL 4 1167 B ?57 3057 62 325 MCW &TXTNMC,X1 * PRINT FINISHED INFO 7 1171 M C16 089 3316 089 62 326 B PRTMSG 4 1178 B ?06 3006 63 327 B PRTFLD 4 1182 B Q47 2847 63 328 MCW &BYE,X1 * PRINT GOOD BYE 7 1186 M C19 089 3319 089 63 329 B PRTMSG 4 1193 B ?06 3006 63 330 MCW &TXTRST,X1 * PRINT RESTART MSG 7 1197 M C22 089 3322 089 63 331 B PRTMSG 4 1204 B ?06 3006 63 332 B PRTBLL 4 1208 B ?57 3057 63 333 H 000,888 * PROGRAM HALT 7 1212 . 000 888 000 888 64 334 B START * RESTART PRG FROM BEGINNING 4 1219 B 738 738 64 335 * 336 ******************************************************** 337 * SUB DO ONE CHECK 338 LOPCHK SBR LOPCKR&3 4 1223 H S94 1294 64 339 BSS LOPCK1,D * SENSE SWITCH, NO INFO PRINT 5 1227 B S43 D 1243 64 340 MCW PRWHAT,X1 * PRINT INFO 7 1232 M 736 089 736 089 64 341 B PRTMSG 4 1239 B ?06 3006 64 342 LOPCK1 B 000 * DO THE CHECK 4 1243 B 000 000 64 343 B LOPCKR,DIRTY,F * NO CHANGE, NO PRINT 8 1247 B S91 727 F 1291 727 65 344 MCW TRUE,DRTYT * SET TOTAL-DIRTY 7 1255 M 728 737 728 737 65 345 BSS LOPCKR,C * SENSE SWITCH, NO FIELD PRINT 5 1262 B S91 C 1291 65 346 BSS LOPCK2,D * IF NO INFO, AT LEAST LAST ONE 5 1267 B S76 D 1276 65 347 B LOPCK3 4 1272 B S87 1287 65 348 LOPCK2 MCW PRWHAT,X1 * PRINT INFO 7 1276 M 736 089 736 089 65 349 B PRTMSG 4 1283 B ?06 3006 66 350 LOPCK3 B PRTFLD * PRINT FIELD 4 1287 B Q47 2847 66 351 LOPCKR B 000 4 1291 B 000 000 66 352 * 353 ******************************************************** 354 ******************************************************** 355 * 356 * TWIN ROW CHECK - CHECK FOR _XX_ OR _OO_ 357 * CHECKING TWO BOXES, SO COLUMN LOOP INDEX 0..8 358 * GOES COLUMN PAIR BY COLUMN PAIR 0..8, THEN NEXT ROW 0..9 359 * 360 ******************************************************** 361 TRCHK SBR TRENDR&3 4 1295 H V61 1561 66 362 MCW FALSE,DIRTY * CLEAR DIRTY FLAG 7 1299 M 729 727 729 727 66 363 B PRTCLR * PREPARE ACTION MESSAGE 4 1306 B ?41 3041 66 364 MCW &TRCHKT,X1 7 1310 M C25 089 3325 089 66 365 B PRTMSA 4 1317 B ?95 3095 67 366 MCW X000,X1 * INIT INDEX 7 1321 M 714 089 714 089 67 367 * 368 * LOOP THROUGH LINE 369 TRLOOP BCE TRNXT,ARR&X1, * EMPTY? NEXT 8 1328 B U96 4|0 1496 400*X1 67 370 MCW ARR&X1,COMP * COPY TO GET 1 CHAR WITH WM 7 1336 M 4|0 733 400*X1 733 67 371 C ARR&1&X1,COMP * COMPARE TWO ADJACENT BOXES 7 1343 C 4|1 733 401*X1 733 67 372 BU TRNXT * NOT EQUAL, NEXT 5 1350 B U96 / 1496 67 373 * TWO ARE EQUAL, NOW SET BOXES LEFT AND RIGHT. 374 * FIRST FIGURE OUT ANTI CHAR 375 MCW ARR&X1,COMP * GET FOR CHECKS BELOW 7 1355 M 4|0 733 400*X1 733 68 376 MCW CO,ANTI * IS ANTI CHAR AN O? 7 1362 M 731 732 731 732 68 377 BCE TRLT,COMP,X * SEARCH CHAR IS X, SO YES 8 1369 B T84 733 X 1384 733 68 378 MCW CX,ANTI * NO, SO ANTI CHAR IS X 7 1377 M 730 732 730 732 68 379 * 380 * HANDLE BOX LEFT OF XX IF NOT OUTSIDE OF FIELD 381 TRLT BCE TRRT,X1,0 * INDEX FIRST LEFT? SKIP BOX 8 1384 B U30 089 0 1430 089 68 382 C ARR-1&X1,COMP * ALREADY X/O? 7 1392 C 3Z9 733 399*X1 733 69 383 BE ERR * YES, NOT ALLOWED 5 1399 B R27 S 2927 69 384 C ARR-1&X1,ANTI * ALREADY ANTI? 7 1404 C 3Z9 732 399*X1 732 69 385 BE TRRT * YES, DONT SET DIRTY 5 1411 B U30 S 1430 69 386 MCW ANTI,ARR-1&X1 * SET TO ANTI 7 1416 M 732 3Z9 732 399*X1 69 387 MCW TRUE,DIRTY * SET DIRTY FLAG 7 1423 M 728 727 728 727 69 388 * 389 * HANDLE BOX RIGHT OF XX IF NOT OUTSIDE OF FIELD 390 TRRT BCE TRNXT,X1,8 * INDEX LAST RIGHT? SKIP BOX 8 1430 B U96 089 8 1496 089 70 391 C ARR&2&X1,COMP * ALREADY X/O? 7 1438 C 4|2 733 402*X1 733 70 392 BE ERR * YES, NOT ALLOWED 5 1445 B R27 S 2927 70 393 C ARR&2&X1,ANTI * ALREADY ANTI? 7 1450 C 4|2 732 402*X1 732 70 394 BE TRNXT * YES, DONT SET DIRTY 5 1457 B U96 S 1496 70 395 MCW ANTI,ARR&2&X1 * SET TO ANTI 7 1462 M 732 4|2 732 402*X1 70 396 MCW TRUE,DIRTY * SET DIRTY FLAG 7 1469 M 728 727 728 727 71 397 BSS TRNXT,D * SWITCH D ? SKIP PRINT 5 1476 B U96 D 1496 71 398 MCW X1,PBUF&32 * PRINT INFO 7 1481 M 089 233 089 233 71 399 MCW ANTI,PBUF&36 7 1488 M 732 237 732 237 71 400 W 1 1495 2 71 401 * 402 * CHECK DONE FOR ONE PAIR, NOW ADVANCE ONE POS 403 * MUST TEST COL AGAIN BC MAY COME HERE FROM FIRST XX/OO TEST 404 TRNXT BCE TRNXTR,X1,8 * ALREADY LAST RIGHT? NXT ROW 8 1496 B V15 089 8 1515 089 71 405 MA DX1,X1 * INC INDEX, NEXT BOX PAIR 7 1504 # 702 089 702 089 72 406 B TRLOOP * IN NEXT COLUMN 4 1511 B T28 1328 72 407 * 408 * WE WERE AT RIGHT END, NOW GO TO NEXT ROW 409 TRNXTR BCE TREND,X1-1,9 * WAS THIS THE LAST ROW? 8 1515 B V34 088 9 1534 088 72 410 MA DX2,X1 * NO, INDEX &# 2 FOR NEXT ROW 7 1523 # 705 089 705 089 72 411 B TRLOOP * DO NEXT ROW 4 1530 B T28 1328 72 412 * 413 * DONE, RETURN TO CALLER 414 TREND BSS TRENDR,D * SWITCH D ? SKIP PRINT 5 1534 B V58 D 1558 72 415 BCE TRENDR,DIRTY,T * SOMETHING CHANGED? 8 1539 B V58 727 T 1558 727 73 416 MCW &TXTNCH,X1 * INFO, NOTHING FOUND 7 1547 M C28 089 3328 089 73 417 B PRTMSG 4 1554 B ?06 3006 73 418 TRENDR B 000 * RETURN 4 1558 B 000 000 73 419 * 420 ******************************************************** 421 * 422 * TWIN COLUMN CHECK - CHECK FOR _XX_ OR _OO_ 423 * CHECKING TWO BOXES, SO ROW LOOP INDEX 0..9 424 * GOES COLUMN PAIR BY COLUMN PAIR 0..9, THEN NEXT ROW 0..8 425 * 426 ******************************************************** 427 TCCHK SBR TCENDR&3 4 1562 H Y28 1828 73 428 MCW FALSE,DIRTY * CLEAR DIRTY FLAG 7 1566 M 729 727 729 727 73 429 B PRTCLR * PREPARE ACTION MESSAGE 4 1573 B ?41 3041 73 430 MCW &TCCHKT,X1 7 1577 M C31 089 3331 089 74 431 B PRTMSA 4 1584 B ?95 3095 74 432 MCW X000,X1 * INIT INDEX 7 1588 M 714 089 714 089 74 433 * 434 * LOOP THROUGH LINE 435 TCLOOP BCE TCNXT,ARR&X1, * EMPTY? NEXT 8 1595 B X63 4|0 1763 400*X1 74 436 MCW ARR&X1,COMP * COPY TO GET 1 CHAR WITH WM 7 1603 M 4|0 733 400*X1 733 74 437 C ARR&10&X1,COMP * COMPARE TWO ADJACENT BOXES 7 1610 C 4/0 733 410*X1 733 75 438 BU TCNXT * NOT EQUAL, NEXT 5 1617 B X63 / 1763 75 439 * TWO ARE EQUAL, NOW SET BOXES LEFT AND RIGHT: 440 MCW ARR&X1,COMP * GET FOR CHECKS BELOW 7 1622 M 4|0 733 400*X1 733 75 441 MCW CO,ANTI * IS ANTI CHAR AN O? 7 1629 M 731 732 731 732 75 442 BCE TCLT,COMP,X * SEARCH CHAR IS X, SO YES 8 1636 B W51 733 X 1651 733 75 443 MCW CX,ANTI * NO, SO ANTI CHAR IS X 7 1644 M 730 732 730 732 76 444 * 445 * HANDLE BOX ABOVE XX IF NOT OUTSIDE OF FIELD 446 TCLT BCE TCRT,X1-1,0 * INDEX FIRST TOP? SKIP BOX 8 1651 B W97 088 0 1697 088 76 447 C ARR-10&X1,COMP * ALREADY X/O? 7 1659 C 3Z0 733 390*X1 733 76 448 BE ERR * YES, NOT ALLOWED 5 1666 B R27 S 2927 76 449 C ARR-10&X1,ANTI * ALREADY ANTI? 7 1671 C 3Z0 732 390*X1 732 76 450 BE TCRT * YES, DONT SET DIRTY 5 1678 B W97 S 1697 76 451 MCW ANTI,ARR-10&X1 * SET TO ANTI 7 1683 M 732 3Z0 732 390*X1 77 452 MCW TRUE,DIRTY * SET DIRTY FLAG 7 1690 M 728 727 728 727 77 453 * 454 * HANDLE BOX BELOW XX IF NOT OUTSIDE OF FIELD 455 TCRT BCE TCNXT,X1-1,8 * INDEX LAST BOTTOM? SKIP BOX 8 1697 B X63 088 8 1763 088 77 456 C ARR&20&X1,COMP * ALREADY X/O? 7 1705 C 4S0 733 420*X1 733 77 457 BE ERR * YES, NOT ALLOWED 5 1712 B R27 S 2927 77 458 C ARR&20&X1,ANTI * ALREADY ANTI? 7 1717 C 4S0 732 420*X1 732 78 459 BE TCNXT * YES, DONT SET DIRTY 5 1724 B X63 S 1763 78 460 MCW ANTI,ARR&20&X1 * SET TO ANTI 7 1729 M 732 4S0 732 420*X1 78 461 MCW TRUE,DIRTY * SET DIRTY FLAG 7 1736 M 728 727 728 727 78 462 BSS TCNXT,D * SWITCH D ? SKIP PRINT 5 1743 B X63 D 1763 78 463 MCW X1,PBUF&30 * PRINT INFO 7 1748 M 089 231 089 231 78 464 MCW ANTI,PBUF&34 7 1755 M 732 235 732 235 79 465 W 1 1762 2 79 466 * 467 * CHECK DONE FOR ONE PAIR, NOW ADVANCE ONE POS 468 * MUST TEST COL AGAIN BC MAY COME HERE FROM FIRST XX/OO TEST 469 TCNXT BCE TCNXTR,X1,9 * ALREADY LAST RIGHT? NXT ROW 8 1763 B X82 089 9 1782 089 79 470 MA DX1,X1 * INC INDEX, NEXT BOX PAIR 7 1771 # 702 089 702 089 79 471 B TCLOOP * IN NEXT COLUMN 4 1778 B V95 1595 79 472 * 473 * WE WERE AT RIGHT END, NOW GO TO NEXT ROW 474 TCNXTR BCE TCEND,X1-1,8 * WAS THIS THE LAST ROW? 8 1782 B Y01 088 8 1801 088 79 475 MA DX1,X1 * NO, INDEX &# 1 FOR NEXT ROW 7 1790 # 702 089 702 089 80 476 B TCLOOP * DO NEXT ROW 4 1797 B V95 1595 80 477 * 478 * DONE, RETURN TO CALLER 479 TCEND BSS TCENDR,D * SWITCH D ? SKIP PRINT 5 1801 B Y25 D 1825 80 480 BCE TCENDR,DIRTY,T * SOMETHING CHANGED? 8 1806 B Y25 727 T 1825 727 80 481 MCW &TXTNCH,X1 * INFO, NOTHING FOUND 7 1814 M C34 089 3334 089 80 482 B PRTMSG 4 1821 B ?06 3006 80 483 TCENDR B 000 * RETURN 4 1825 B 000 000 80 484 * 485 ******************************************************** 486 * 487 * GAP ROWS - CHECK FOR X_X OR O_O HORIZONTALLY 488 * CHECKING THREE BOXES, SO COLUMN LOOP INDEX 0..7 489 * DO COLUMNS 0..7, THEN NEXT ROW 0..9 490 * 491 ******************************************************** 492 GRCHK SBR GRENDR&3 4 1829 H !41 2041 81 493 MCW FALSE,DIRTY * CLEAR DIRTY FLAG 7 1833 M 729 727 729 727 81 494 B PRTCLR * PREPARE ACTION MESSAGE 4 1840 B ?41 3041 81 495 MCW &GRCHKT,X1 7 1844 M C37 089 3337 089 81 496 B PRTMSA 4 1851 B ?95 3095 81 497 MCW X000,X1 * INIT INDEX 7 1855 M 714 089 714 089 81 498 * 499 * LOOP THROUGH LINE 500 GRLOOP BCE GRNXT,ARR&X1, * EMPTY? NEXT 8 1862 B Z76 4|0 1976 400*X1 82 501 MCW ARR&X1,COMP * COPY TO GET 1 CHAR WITH WM 7 1870 M 4|0 733 400*X1 733 82 502 C ARR&2&X1,COMP * COMPARE TWO BOXES TO RIGHT 7 1877 C 4|2 733 402*X1 733 82 503 BU GRNXT * NOT EQUAL, NEXT 5 1884 B Z76 / 1976 82 504 * 505 * THE TWO ARE EQUAL, NOW SET BOX IN THE MIDDLE: 506 * FIRST FIGURE OUT ANTI CHAR 507 MCW ARR&X1,COMP * GET FOR CHECKS BELOW 7 1889 M 4|0 733 400*X1 733 82 508 MCW CO,ANTI * IS ANTI CHAR AN O? 7 1896 M 731 732 731 732 83 509 BCE GRLT,COMP,X * SEARCH CHAR IS X, SO YES 8 1903 B Z18 733 X 1918 733 83 510 MCW CX,ANTI * NO, SO ANTI CHAR IS X 7 1911 M 730 732 730 732 83 511 * 512 * HANDLE BOX IN MIDDLE OF X_X 513 GRLT C ARR&1&X1,COMP * ALREADY X/O? 7 1918 C 4|1 733 401*X1 733 83 514 BE ERR * YES, NOT ALLOWED 5 1925 B R27 S 2927 83 515 C ARR&1&X1,ANTI * ALREADY ANTI? 7 1930 C 4|1 732 401*X1 732 84 516 BE GRNXT * YES, DONT SET DIRTY 5 1937 B Z76 S 1976 84 517 MCW ANTI,ARR&1&X1 * SET TO ANTI 7 1942 M 732 4|1 732 401*X1 84 518 MCW TRUE,DIRTY * SET DIRTY FLAG 7 1949 M 728 727 728 727 84 519 BSS GRNXT,D * SWITCH D ? SKIP PRINT 5 1956 B Z76 D 1976 84 520 MCW X1,PBUF&33 * PRINT INFO 7 1961 M 089 234 089 234 84 521 MCW ANTI,PBUF&37 7 1968 M 732 238 732 238 85 522 W 1 1975 2 85 523 * 524 * CHECK DONE, NOW ADVANCE ONE POS 525 GRNXT BCE GRNXTR,X1,7 * ALREADY LAST RIGHT? NXT ROW 8 1976 B Z95 089 7 1995 089 85 526 MA DX1,X1 * INC INDEX, NEXT BOX PAIR 7 1984 # 702 089 702 089 85 527 B GRLOOP 4 1991 B Y62 1862 85 528 * 529 * WE WERE AT RIGHT END, NOW GO TO NEXT ROW 530 GRNXTR BCE GREND,X1-1,9 * WAS THIS THE LAST ROW? 8 1995 B !14 088 9 2014 088 85 531 MA DX3,X1 * NO, INDEX &# 3 FOR NEXT ROW 7 2003 # 708 089 708 089 86 532 B GRLOOP * DO NEXT ROW 4 2010 B Y62 1862 86 533 * 534 * DONE, RETURN TO CALLER 535 GREND BSS GRENDR,D * SWITCH D ? SKIP PRINT 5 2014 B !38 D 2038 86 536 BCE GRENDR,DIRTY,T * SOMETHING CHANGED? 8 2019 B !38 727 T 2038 727 86 537 MCW &TXTNCH,X1 * INFO, NOTHING FOUND 7 2027 M C40 089 3340 089 86 538 B PRTMSG 4 2034 B ?06 3006 86 539 GRENDR B 000 * RETURN 4 2038 B 000 000 86 540 * 541 ******************************************************** 542 * 543 * GAP COLS - CHECK FOR X_X OR O_O VERTICALLY 544 * CHECKING THREE BOXES, SO ROW LOOP INDEX 0..7 545 * DO COLUMNS 0..9, THEN NEXT ROW 0..7 546 * 547 ******************************************************** 548 GCCHK SBR GCENDR&3 4 2042 H K54 2254 87 549 MCW FALSE,DIRTY * CLEAR DIRTY FLAG 7 2046 M 729 727 729 727 87 550 B PRTCLR * PREPARE ACTION MESSAGE 4 2053 B ?41 3041 87 551 MCW &GCCHKT,X1 7 2057 M C43 089 3343 089 87 552 B PRTMSA 4 2064 B ?95 3095 87 553 MCW X000,X1 * INIT INDEX 7 2068 M 714 089 714 089 87 554 * 555 * LOOP THROUGH LINE 556 GCLOOP BCE GCNXT,ARR&X1, * EMPTY? NEXT 8 2075 B J89 4|0 2189 400*X1 88 557 MCW ARR&X1,COMP * COPY TO GET 1 CHAR WITH WM 7 2083 M 4|0 733 400*X1 733 88 558 C ARR&20&X1,COMP * COMPARE TWO BOXES BELOW 7 2090 C 4S0 733 420*X1 733 88 559 BU GCNXT * NOT EQUAL, NEXT 5 2097 B J89 / 2189 88 560 * 561 * THE TWO ARE EQUAL, NOW SET BOX IN THE MIDDLE: 562 * FIRST FIGURE OUT ANTI CHAR 563 MCW ARR&X1,COMP * GET FOR CHECKS BELOW 7 2102 M 4|0 733 400*X1 733 88 564 MCW CO,ANTI * IS ANTI CHAR AN O? 7 2109 M 731 732 731 732 89 565 BCE GCLT,COMP,X * SEARCH CHAR IS X, SO YES 8 2116 B J31 733 X 2131 733 89 566 MCW CX,ANTI * NO, SO ANTI CHAR IS X 7 2124 M 730 732 730 732 89 567 * 568 * HANDLE BOX IN MIDDLE OF X_X 569 GCLT C ARR&10&X1,COMP * ALREADY X/O? 7 2131 C 4/0 733 410*X1 733 89 570 BE ERR * YES, NOT ALLOWED 5 2138 B R27 S 2927 89 571 C ARR&10&X1,ANTI * ALREADY ANTI? 7 2143 C 4/0 732 410*X1 732 90 572 BE GCNXT * YES, DONT SET DIRTY 5 2150 B J89 S 2189 90 573 MCW ANTI,ARR&10&X1 * SET TO ANTI 7 2155 M 732 4/0 732 410*X1 90 574 MCW TRUE,DIRTY * SET DIRTY FLAG 7 2162 M 728 727 728 727 90 575 BSS TRNXT,D * SWITCH D ? SKIP PRINT 5 2169 B U96 D 1496 90 576 MCW X1,PBUF&28 * PRINT INFO 7 2174 M 089 229 089 229 90 577 MCW ANTI,PBUF&32 7 2181 M 732 233 732 233 91 578 W 1 2188 2 91 579 * 580 * CHECK DONE, NOW ADVANCE ONE POS 581 GCNXT BCE GCNXTR,X1,9 * ALREADY LAST RIGHT? NXT ROW 8 2189 B K08 089 9 2208 089 91 582 MA DX1,X1 * INC INDEX, NEXT BOX PAIR 7 2197 # 702 089 702 089 91 583 B GCLOOP 4 2204 B !75 2075 91 584 * 585 * WE WERE AT RIGHT END, NOW GO TO NEXT ROW 586 GCNXTR BCE GCEND,X1-1,7 * WAS THIS THE LAST ROW? 8 2208 B K27 088 7 2227 088 91 587 MA DX1,X1 * NO, INDEX &# 1 FOR NEXT ROW 7 2216 # 702 089 702 089 92 588 B GCLOOP * DO NEXT ROW 4 2223 B !75 2075 92 589 * 590 * DONE, RETURN TO CALLER 591 GCEND BSS GCENDR,D * SWITCH D ? SKIP PRINT 5 2227 B K51 D 2251 92 592 BCE GCENDR,DIRTY,T * SOMETHING CHANGED? 8 2232 B K51 727 T 2251 727 92 593 MCW &TXTNCH,X1 * INFO, NOTHING FOUND 7 2240 M C46 089 3346 089 92 594 B PRTMSG 4 2247 B ?06 3006 92 595 GCENDR B 000 * RETURN 4 2251 B 000 000 92 596 * 597 ******************************************************** 598 * 599 * COUNT ROW - CHECK FOR 5&5 HORIZONTALLY 600 * CHECKING ALL BOXES, SO COL LOOP INDEX 0..9 601 * DO COLUMNS 0..9, THEN NEXT ROW 0..9 602 * 603 ******************************************************** 604 CRCHK SBR CRENDR&3 4 2255 H N37 2537 93 605 MCW FALSE,DIRTY * CLEAR DIRTY FLAG 7 2259 M 729 727 729 727 93 606 B PRTCLR * PREPARE ACTION MESSAGE 4 2266 B ?41 3041 93 607 MCW &CRCHKT,X1 7 2270 M C49 089 3349 089 93 608 B PRTMSA 4 2277 B ?95 3095 93 609 MCW X000,X1 * INIT INDEX, FIRST BOX 7 2281 M 714 089 714 089 93 610 MCW X1,X2 * MEMORIZE ROW START IN X2 7 2288 M 089 094 089 094 94 611 * 612 * RESET COUNTER 613 CRLOPZ MCW X000,COUNTX * EACH ROW STARTS WITH ZEROS 7 2295 M 714 723 714 723 94 614 MCW X000,COUNTO 7 2302 M 714 726 714 726 94 615 * 616 * LOOP THROUGH LINE AND COUNT X&O 617 CRLOOP BCE CRNCNT,ARR&X1, * EMPTY? NO COUNT 8 2309 B L43 4|0 2343 400*X1 94 618 BCE CRINCX,ARR&X1,X * IS X? 8 2317 B L36 4|0 X 2336 400*X1 94 619 MA DX1,COUNTO * NO, MUST BE O, COUNT O 7 2325 # 702 726 702 726 95 620 B CRNCNT 4 2332 B L43 2343 95 621 CRINCX MA DX1,COUNTX * YES IS X, COUNT X 7 2336 # 702 723 702 723 95 622 CRNCNT MA DX1,X1 * NEXT BOX IN ROW 7 2343 # 702 089 702 089 95 623 BCE CRCROW,X1,0 * X1 UNIT ZERO? ROW CNT FINISHED 8 2350 B L62 089 0 2362 089 95 624 B CRLOOP * HANDLE NEXT BOX TO RIGHT 4 2358 B L09 2309 95 625 * 626 * CHECK IF 5 OF ANY SYMBOL, THEN JUMP TO FILL ROUTINE 627 CRCROW BCE CRROWX,COUNTX,5 * FOUND 5 X ? 8 2362 B L97 723 5 2397 723 96 628 BCE CRROWO,COUNTO,5 * FOUND 5 O ? 8 2370 B M23 726 5 2423 726 96 629 * 630 * LAST BOX INCREMENT ALREADY PUSHED X1 TO NEXT ROW 631 CRNXTR BCE CREND,X1-1,0 * ROW OVERFLOW TO 100 ? END 8 2378 B N10 088 0 2510 088 96 632 MCW X1,X2 * MEMORIZE ROW START IN X2 7 2386 M 089 094 089 094 96 633 B CRLOPZ * PROCESS NEXT ROW 4 2393 B K95 2295 96 634 * 635 * FOUND 5 X, NOW FILL SPACES WITH O 636 CRROWX BCE CRNXTR,COUNTO,5 * ALSO 5 O ? ROW ALREADY FULL 8 2397 B L78 726 5 2378 726 97 637 MCW CX,COMP 7 2405 M 730 733 730 733 97 638 MCW CO,ANTI 7 2412 M 731 732 731 732 97 639 B CRRWXF 4 2419 B M45 2445 97 640 * 641 * FOUND 5 O, NOW FILL SPACES WITH X 642 CRROWO BCE CRNXTR,COUNTX,5 * ALSO 5 X ? ROW ALREADY FULL 8 2423 B L78 723 5 2378 723 97 643 MCW CO,COMP 7 2431 M 731 733 731 733 98 644 MCW CX,ANTI 7 2438 M 730 732 730 732 98 645 * 646 * FILL SPACES, X2 IS AT ROW LEFT 647 CRRWXF BSS CRRWXL,D * SWITCH D ? SKIP PRINT 5 2445 B M65 D 2465 98 648 MCW X2,PBUF&31 * PRINT INFO 7 2450 M 094 232 094 232 98 649 MCW ANTI,PBUF&35 7 2457 M 732 236 732 236 98 650 W 1 2464 2 98 651 CRRWXL BCE CRRWXS,ARR&X2, * SPACE FOUND? 8 2465 B M77 4!0 2477 400*X2 99 652 B CRORWN * NO, NEXT BOX 4 2473 B M91 2491 99 653 CRRWXS MCW ANTI,ARR&X2 * SET SPACE TO ANTI 7 2477 M 732 4!0 732 400*X2 99 654 MCW TRUE,DIRTY * THERE WAS A CHANGE 7 2484 M 728 727 728 727 99 655 CRORWN MA DX1,X2 * INCREMENT TO NEXT BOX 7 2491 # 702 094 702 094 99 656 BCE CRNXTR,X2,0 * FINISHED ROW? NEXT ROW 8 2498 B L78 094 0 2378 094 100 657 B CRRWXL * CHECK/FILL NEXT BOX 4 2506 B M65 2465 100 658 * 659 * DONE, RETURN TO CALLER 660 CREND BSS CRENDR,D * SWITCH D ? SKIP PRINT 5 2510 B N34 D 2534 100 661 BCE CRENDR,DIRTY,T * SOMETHING CHANGED? 8 2515 B N34 727 T 2534 727 100 662 MCW &TXTNCH,X1 * INFO, NOTHING FOUND 7 2523 M C52 089 3352 089 100 663 B PRTMSG 4 2530 B ?06 3006 100 664 CRENDR B 000 * RETURN 4 2534 B 000 000 101 665 * 666 ******************************************************** 667 * 668 * COUNT COLUMN - CHECK FOR 5&5 VERTICALLY 669 * CHECKING ALL BOXES, SO ROW LOOP INDEX 0..9 670 * DO ROWS 0..9, THEN NEXT COLUMN 0..9 671 * 672 ******************************************************** 673 CCCHK SBR CCENDR&3 4 2538 H Q34 2834 101 674 MCW FALSE,DIRTY * CLEAR DIRTY FLAG 7 2542 M 729 727 729 727 101 675 B PRTCLR * PREPARE ACTION MESSAGE 4 2549 B ?41 3041 101 676 MCW &CCCHKT,X1 7 2553 M C55 089 3355 089 101 677 B PRTMSA 4 2560 B ?95 3095 101 678 MCW X000,X1 * INIT INDEX, FIRST BOX 7 2564 M 714 089 714 089 101 679 MCW X1,X2 * MEMORIZE ROW START IN X2 7 2571 M 089 094 089 094 102 680 * 681 * RESET COUNTER 682 CCLOPZ MCW X000,COUNTX * EACH COL STARTS WITH ZEROS 7 2578 M 714 723 714 723 102 683 MCW X000,COUNTO 7 2585 M 714 726 714 726 102 684 * 685 * LOOP THROUGH COL AND COUNT X&O 686 CCLOOP BCE CCNCNT,ARR&X1, * EMPTY? NO COUNT 8 2592 B O26 4|0 2626 400*X1 102 687 BCE CCINCX,ARR&X1,X * IS X? 8 2600 B O19 4|0 X 2619 400*X1 102 688 MA DX1,COUNTO * NO, MUST BE O, COUNT O 7 2608 # 702 726 702 726 103 689 B CCNCNT 4 2615 B O26 2626 103 690 CCINCX MA DX1,COUNTX * YES IS X, COUNT X 7 2619 # 702 723 702 723 103 691 CCNCNT MA DY,X1 * &10, NEXT BOX IN COL 7 2626 # 711 089 711 089 103 692 BCE CCCROW,X1-1,0 * X1 10TH ZERO? COL CNT FINISHED 8 2633 B O45 088 0 2645 088 103 693 B CCLOOP * HANDLE NEXT BOX BELOW 4 2641 B N92 2592 103 694 * 695 * CHECK IF 5 OF ANY SYMBOL, THEN JUMP TO FILL ROUTINE 696 CCCROW BCE CCROWX,COUNTX,5 * FOUND 5 X ? 8 2645 B O94 723 5 2694 723 104 697 BCE CCROWO,COUNTO,5 * FOUND 5 O ? 8 2653 B P20 726 5 2720 726 104 698 * 699 * LAST BOX INCREMENT PUSHED X1 TO 100&COL 700 CCNXTC MCW X000,X1-1 * CLEAR UPPER 2 DIGITS OF X1 7 2661 M 714 088 714 088 104 701 MA DX1,X1 * INCREMENT COL 7 2668 # 702 089 702 089 104 702 BCE CCEND,X1,0 * COL OVERFLOW? END 8 2675 B Q07 089 0 2807 089 104 703 MCW X1,X2 * MEMORIZE ROW START IN X2 7 2683 M 089 094 089 094 105 704 B CCLOPZ * PROCESS NEXT COL 4 2690 B N78 2578 105 705 * 706 * FOUND 5 X, NOW FILL SPACES WITH O 707 CCROWX BCE CCNXTC,COUNTO,5 * ALSO 5 O ? ROW ALREADY FULL 8 2694 B O61 726 5 2661 726 105 708 MCW CX,COMP 7 2702 M 730 733 730 733 105 709 MCW CO,ANTI 7 2709 M 731 732 731 732 105 710 B CCRWXF 4 2716 B P42 2742 105 711 * 712 * FOUND 5 O, NOW FILL SPACES WITH X 713 CCROWO BCE CCNXTC,COUNTX,5 * ALSO 5 X ? ROW ALREADY FULL 8 2720 B O61 723 5 2661 723 106 714 MCW CO,COMP 7 2728 M 731 733 731 733 106 715 MCW CX,ANTI 7 2735 M 730 732 730 732 106 716 * 717 * FILL SPACES, X2 IS AT COL TOP 718 CCRWXF BSS CCRWXL,D * SWITCH D ? SKIP PRINT 5 2742 B P62 D 2762 106 719 MCW X2,PBUF&29 * PRINT INFO 7 2747 M 094 230 094 230 106 720 MCW ANTI,PBUF&33 7 2754 M 732 234 732 234 107 721 W 1 2761 2 107 722 CCRWXL BCE CCRWXS,ARR&X2, * SPACE FOUND? 8 2762 B P74 4!0 2774 400*X2 107 723 B CCORWN * NO, NEXT BOX 4 2770 B P88 2788 107 724 CCRWXS MCW ANTI,ARR&X2 * SET SPACE TO ANTI 7 2774 M 732 4!0 732 400*X2 107 725 MCW TRUE,DIRTY * THERE WAS A CHANGE 7 2781 M 728 727 728 727 107 726 CCORWN MA DY,X2 * INCREMENT TO NEXT BOX BELOW 7 2788 # 711 094 711 094 108 727 BCE CCNXTC,X2-1,0 * FINISHED ROW? NEXT COL 8 2795 B O61 093 0 2661 093 108 728 B CCRWXL * CHECK/FILL NEXT BOX 4 2803 B P62 2762 108 729 * 730 * DONE, RETURN TO CALLER 731 CCEND BSS CCENDR,D * SWITCH D ? SKIP PRINT 5 2807 B Q31 D 2831 108 732 BCE CCENDR,DIRTY,T * SOMETHING CHANGED? 8 2812 B Q31 727 T 2831 727 108 733 MCW &TXTNCH,X1 * INFO, NOTHING FOUND 7 2820 M C58 089 3358 089 108 734 B PRTMSG 4 2827 B ?06 3006 109 735 CCENDR B 000 * RETURN 4 2831 B 000 000 109 736 * 737 ******************************************************** 738 ******************************************************** 739 * 740 * PRINT FIELD 741 * CHANGES X3 742 * 743 ******************************************************** 744 PRTFLC DCW @ 0123456789@ 12 2846 109 745 PRTFLD SBR PRTFLR&3 4 2847 H R26 2926 109 746 B PRTBLL * BLANK LINE 4 2851 B ?57 3057 109 747 MCW &PRTFLC,X1 * 0123456789 7 2855 M C61 089 3361 089 109 748 B PRTMSG 4 2862 B ?06 3006 109 749 B PRTCLR * CLEAR BUFFER 4 2866 B ?41 3041 110 750 SW PBUF * SET WM FOR COPY 4 2870 , 201 201 110 751 SW PBUF&2 * SET WM FOR COPY 4 2874 , 203 203 110 752 MCW X000,X3 * INIT INDEX 7 2878 M 714 099 714 099 110 753 PRTFLL MCW ARR&9&X3,PBUF&11 * COPY ONE LINE 7 2885 M 4?9 212 409*X3 212 110 754 MCW X3-1,PBUF * COPY ONE INDEX DIGIT 7 2892 M 098 201 098 201 110 755 W * PRINT IT 1 2899 2 110 756 BCE PRTFLE,X3-1,9 * WAS THIS THE LAST ROW? 8 2900 B R19 098 9 2919 098 111 757 MA DY,X3 * NO, NEXT ROW 7 2908 # 711 099 711 099 111 758 B PRTFLL * LOOP 4 2915 B Q85 2885 111 759 PRTFLE B PRTBLL * BLANK LINE 4 2919 B ?57 3057 111 760 PRTFLR B 000 * RETURN 4 2923 B 000 000 111 761 * 762 ******************************************************** 763 * 764 * PRINT ERROR MESSAGE - FIELD CANNOT BE SOLVED 765 * INCLUDING TWO DIGITS OF X1 AS COORDINATES 766 * PARAMETER: COORDINATES STILL IN X1 767 * 768 ERR SBR ERRFRM&3 * JUST AS DEBUG INFO 4 2927 H ?02 3002 111 769 B PRTFLD * PRINT CURRENT STATUS 4 2931 B Q47 2847 111 770 CS PBUF&98 * CLEAR BUFFER 4 2935 / 299 299 112 771 B PRTBLL * BLANK LINE 4 2939 B ?57 3057 112 772 MCW ERRTXT,PBUF&52 * ERROR TEXT 7 2943 M I04 253 3904 253 112 773 SW PBUF&54 * WM FOR X1 4 2950 , 255 255 112 774 MCW X1,PBUF&55 * COPY 2 DIGITS 7 2954 M 089 256 089 256 112 775 W * PRINT 1 2961 2 112 776 MCW &BYE,X1 7 2962 M C64 089 3364 089 112 777 B PRTMSG 4 2969 B ?06 3006 113 778 MCW &TXTRST,X1 * PRINT RESTART MSG 7 2973 M C67 089 3367 089 113 779 B PRTMSG 4 2980 B ?06 3006 113 780 B PRTBLL 4 2984 B ?57 3057 113 781 H 000,888 7 2988 . 000 888 000 888 113 782 B START * RESTART PRG FROM BEGINNING 4 2995 B 738 738 113 783 ERRFRM B 000 * CAME FROM THERE 4 2999 B 000 000 113 784 * 785 ******************************************************** 786 * 787 * ROLFFSONS MESSAGE PRINTING LIBRARY 788 * PRTMSG - PRINT MESSAGE LEFT ADJUSTED TO 201 789 * PRTBLL - PRINT BLANK LINE 790 * PRTCLR - CLEAR PRINT BUF 791 * PRTMSA - APPEND MESSAGE BEHIND LAST CHAR OR 201 792 * PRTMSP - APPEND & PRINT & CLEAR 793 * PRTDFF - DO FORM FEED %ADJUST CHANNEL!) 794 * PARAMETER: MESSAGE RIGHTMOST ADDRESS IN X1 795 * USES, BUT SAVES X2 796 * 797 PRTOFF DCW @000@ * OFFSET 3 3005 114 798 * SIMPLY PRINT LEFT ADJUSTED 799 PRTMSG SBR PRTMGR&3 * ENTRY: PRINT MSG LEFT 4 3006 H ?40 3040 114 800 CS PBUF&98 * CLEAR BUFFER 4 3010 / 299 299 114 801 CS PBUF&131 * CLEAR BUFFER 4 3014 / 332 332 114 802 MCW X1,PRTWM1&3 * SET SRC ADR OF PRINT MCW 7 3018 M 089 B17 089 3217 114 803 MCW &PBUF,PRTOFF * OFFSET IS ZERO 7 3025 M C70 ?05 3370 3005 114 804 B PRTLP * DO ADJUSTMENT 4 3032 B A58 3158 114 805 W * PRINT 1 3036 2 115 806 PRTMGR B 000 4 3037 B 000 000 115 807 * 808 * CLEAR PRINT BUF 809 PRTCLR SBR PRTCRR&3 * ENTRY 4 3041 H ?56 3056 115 810 CS PBUF&98 * CLEAR BUFFER 4 3045 / 299 299 115 811 CS PBUF&131 * CLEAR BUFFER 4 3049 / 332 332 115 812 PRTCRR B 000 4 3053 B 000 000 115 813 * 814 * PRINT BLANK LINE 815 * EITHER ACTIVATE CC OR CS&W! 816 PRTBLL SBR PRTMBR&3 * ENTRY 4 3057 H ?73 3073 115 817 * CC J * FORMS CONTROL 1 SPACE 818 CS PBUF&98 * CLEAR BUFFER 4 3061 / 299 299 116 819 CS PBUF&131 * CLEAR BUFFER 4 3065 / 332 332 116 820 W * PRINT 1 3069 2 116 821 PRTMBR B 000 4 3070 B 000 000 116 822 * 823 * APPEND & PRINT & CLEAR 824 PRTMSP SBR PRTRET&3 * ENTRY 4 3074 H B24 3224 116 825 B PRTMSA * APPEND 4 3078 B ?95 3095 116 826 W * PRINT 1 3082 2 116 827 CS PBUF&98 * CLEAR BUFFER 4 3083 / 299 299 117 828 CS PBUF&131 * CLEAR BUFFER 4 3087 / 332 332 117 829 PRTMSR B 000 4 3091 B 000 000 117 830 * 831 * APPEND 832 PRTMSA SBR PRTRET&3 * ENTRY: APPEND MSG 4 3095 H B24 3224 117 833 MCW X1,PRTWM1&3 * SET SRC ADR OF PRINT MCW 7 3099 M 089 B17 089 3217 117 834 MCW &PBUF&132,PRTOFF * START AT RIGHT OF PBUF 7 3106 M C73 ?05 3373 3005 117 835 PRTMSS MA XDEC,PRTOFF * DEC DEST PTR 7 3113 # 717 ?05 717 3005 117 836 C PRTOFF,&PBUF * LEFT MIN? 7 3120 C ?05 C76 3005 3376 118 837 BE PRTLP1 * YES, STOP SEARCH 5 3127 B A62 S 3162 118 838 MCW PRTOFF,PRTMSC&6 * SET ADDRESS FOR BCE CMD 7 3132 M ?05 A45 3005 3145 118 839 PRTMSC BCE PRTMSS,000, * STILL SPACE? NEXT DEC 8 3139 B A13 000 3113 000 118 840 MA XINC,PRTOFF * NO SPACE, RE-ADD ONE 7 3147 # 720 ?05 720 3005 118 841 B PRTLP1 * SKIP NEXT SBR 4 3154 B A62 3162 118 842 * 843 * DO LEFT ADJUST AT PRTOFF OFFSET 844 PRTLP SBR PRTRET&3 * ENTRY: APPEND MSG 4 3158 H B24 3224 119 845 PRTLP1 BW PRTWM,ZERO&X1 * WM IN SRC FOUND? 8 3162 V B07 0|0 1 3207 000*X1 119 846 MA XDEC,X1 * NO, DEC SRC PTR 7 3170 # 717 089 717 089 119 847 MA XINC,PRTOFF * INC DEST PTR 7 3177 # 720 ?05 720 3005 119 848 C PRTOFF,@332@ * OVERFLOW? 7 3184 C ?05 C79 3005 3379 119 849 BU PRTLP1 * NO, CHECK NEXT 5 3191 B A62 / 3162 119 850 H 000,999 * PANIC HALT 7 3196 . 000 999 000 999 120 851 B *-10 4 3203 B A96 3196 120 852 PRTWM MCW PRTOFF,PRTWM1&6 * SET ADDRESS FOR MCW CMD 7 3207 M ?05 B20 3005 3220 120 853 PRTWM1 MCW 000,000 * COPY TEXT TO PRINTBUF 7 3214 M 000 000 000 000 120 854 PRTRET B 000 4 3221 B 000 000 120 855 * 856 * FORM FEED 857 * ADJUST CHANNEL # OR DEACTIVATE! 858 PRTDFF SBR PRTRET&3 * ENTRY: FORM FEED 4 3225 H B24 3224 120 859 CC 9 * FEED TO CHANNEL # 2 3229 F 9 120 860 PRTDFR B 000 4 3231 B 000 000 121 861 * 862 ******************************************************** 863 ENDEND NOP * TEXTS GOES HERE & 200 1 3235 N 121 227 DCW &HELLO1 3 3238 E20 ADCON 121 229 &HELLO 3 3241 D77 ADCON 121 231 &HELLO1 3 3244 E20 ADCON 121 234 &TXTINF 3 3247 04| ADCON 121 238 &TXTHL2 3 3250 E57 ADCON 121 240 &TXTHL3 3 3253 E98 ADCON 122 242 &TXTHL4 3 3256 F42 ADCON 122 244 &TXTHL5 3 3259 F75 ADCON 122 246 &TXTHL6 3 3262 G21 ADCON 122 248 &TXTHL7 3 3265 G66 ADCON 122 251 &TXTHL8 3 3268 G89 ADCON 122 260 &TXTRDC 3 3271 I53 ADCON 122 285 &TXTRDE 3 3274 00| ADCON 123 287 &RBUF&9 3 3277 010 ADCON 123 300 &TXTTWR 3 3280 07S ADCON 123 301 &TRCHK 3 3283 S95 ADCON 123 303 &TXTTWC 3 3286 10S ADCON 123 304 &TCCHK 3 3289 V62 ADCON 123 306 &TXTGWR 3 3292 13S ADCON 123 307 &GRCHK 3 3295 Y29 ADCON 124 309 &TXTGWC 3 3298 16| ADCON 124 310 &GCCHK 3 3301 !42 ADCON 124 312 &TXTCWR 3 3304 19S ADCON 124 313 &CRCHK 3 3307 K55 ADCON 124 315 &TXTCWC 3 3310 22S ADCON 124 316 &CCCHK 3 3313 N38 ADCON 124 325 &TXTNMC 3 3316 29S ADCON 125 328 &BYE 3 3319 H19 ADCON 125 330 &TXTRST 3 3322 H51 ADCON 125 364 &TRCHKT 3 3325 32Z ADCON 125 416 &TXTNCH 3 3328 24Y ADCON 125 430 &TCCHKT 3 3331 36U ADCON 125 481 &TXTNCH 3 3334 24Y ADCON 125 495 &GRCHKT 3 3337 40S ADCON 126 537 &TXTNCH 3 3340 24Y ADCON 126 551 &GCCHKT 3 3343 43V ADCON 126 593 &TXTNCH 3 3346 24Y ADCON 126 607 &CRCHKT 3 3349 47/ ADCON 126 662 &TXTNCH 3 3352 24Y ADCON 126 676 &CCCHKT 3 3355 50V ADCON 126 733 &TXTNCH 3 3358 24Y ADCON 127 747 &PRTFLC 3 3361 Q46 ADCON 127 776 &BYE 3 3364 H19 ADCON 127 778 &TXTRST 3 3367 H51 ADCON 127 803 &PBUF 3 3370 201 ADCON 127 834 &PBUF&132 3 3373 333 ADCON 127 836 &PBUF 3 3376 201 ADCON 127 @332@ 3 3379 LIT 128 864 END START / 738 080 129 END OF ASSEMBLY IF EXTRA OUTPUT DESIRED, SET SENSE SWITCH F ON, AND B ON FOR CONDENSED CARDS C ON FOR LOADABLE TAPE 6 D ON FOR LISTING TAPE 3 E ON TO SUPPRESS LISTING G ON FOR NEW SOURCE DECK AND PRESS START IF NO EXTRA OUTPUT DESIRED, PRESS START