MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;TTT-1.asm 00002 ;Project: TIC TAC TOE 00003 ; use internal 4MHz oscillator 00004 LIST P=16F628 ;f=inhx8m 00005 #INCLUDE "P16F628.inc" 00001 LIST 00002 ; P16F628.INC Standard Header File, Version 1.01 Microchip Technology, Inc. 00259 LIST 2007 3F18 00006 __CONFIG _CP_OFF &_BODEN_OFF &_PWRTE_OFF &_WDT_OFF &_LVP_OFF &_MCLRE_OFF &_INTRC_OSC_NOCLKOUT 00007 00008 00009 00010 0000 00011 ORG 0 ;This is the start of memory for the program. 0000 3007 00012 SETUP MOVLW 07 ;Disable the comparators 0001 009F 00013 MOVWF 1FH ;File 1F is the CMCON file 0002 1683 00014 BSF 03,5 ;Go to Bank 1 0003 0186 00015 CLRF 06 ;Make all port B output 0004 3018 00016 MOVLW 18H ;Load W with 0001 1000 0005 0085 00017 MOVWF 05 ;Make RA0,1,2,6,7 output and RA3, RA4 input 0006 1283 00018 BCF 03,5 ;Go to Bank 0 - the program memory area. 0007 01AF 00019 CLRF 2F ;Clear the button-press file 0008 0185 00020 CLRF 05 ;Clear the output lines of PortA 0009 0186 00021 CLRF 06 ;Blank the output 000A 288A 00022 GOTO ATT 00023 000B 0782 00024 TABLE1 ADDWF 02,1 ; 000C 3431 00025 RETLW 31H 000D 3432 00026 RETLW 32H 000E 3433 00027 RETLW 33H 000F 3434 00028 RETLW 34H 0010 3435 00029 RETLW 35H 0011 3436 00030 RETLW 36H 0012 3437 00031 RETLW 37H 0013 3438 00032 RETLW 38H 0014 3439 00033 RETLW 39H 0015 3431 00034 RETLW 31H 0016 3434 00035 RETLW 34H 0017 3437 00036 RETLW 37H 0018 3432 00037 RETLW 32H 0019 3435 00038 RETLW 35H 001A 3438 00039 RETLW 38H 001B 3433 00040 RETLW 33H 001C 3436 00041 RETLW 36H 001D 3439 00042 RETLW 39H 001E 3431 00043 RETLW 31H 001F 3435 00044 RETLW 35H 0020 3439 00045 RETLW 39H 0021 3437 00046 RETLW 37H 0022 3435 00047 RETLW 35H 0023 3433 00048 RETLW 33H 0024 3431 00049 RETLW 31H 0025 3432 00050 RETLW 32H MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0026 3433 00051 RETLW 33H 0027 34FF 00052 RETLW 0FFH 00053 0028 0782 00054 TABLE2 ADDWF 02,1 0029 3431 00055 RETLW 31H 002A 3431 00056 RETLW 31H 002B 3433 00057 RETLW 33H 002C 3437 00058 RETLW 37H 002D 3439 00059 RETLW 39H 002E 3431 00060 RETLW 31H 002F 3433 00061 RETLW 33H 0030 3437 00062 RETLW 37H 0031 3439 00063 RETLW 39H 00064 0032 0782 00065 TABLE3 ADDWF 02,1 0033 3432 00066 RETLW 32H 0034 3432 00067 RETLW 32H 0035 3434 00068 RETLW 34H 0036 3436 00069 RETLW 36H 0037 3438 00070 RETLW 38H 0038 3432 00071 RETLW 32H 0039 3434 00072 RETLW 34H 003A 3436 00073 RETLW 36H 003B 3438 00074 RETLW 38H 003C 3432 00075 RETLW 32H 003D 3432 00076 RETLW 32H 003E 3434 00077 RETLW 34H 003F 3436 00078 RETLW 36H 0040 3438 00079 RETLW 38H 0041 3432 00080 RETLW 32H 0042 3434 00081 RETLW 34H 0043 3436 00082 RETLW 36H 0044 3438 00083 RETLW 38H 00084 00085 0045 0782 00086 TABLE4 ADDWF 02,1 0046 3420 00087 RETLW 20H 0047 3400 00088 RETLW 00H 0048 3400 00089 RETLW 00H 0049 3408 00090 RETLW 08H 004A 3400 00091 RETLW 00H 004B 3400 00092 RETLW 00H 004C 3402 00093 RETLW 02H 004D 3400 00094 RETLW 00H 004E 3400 00095 RETLW 00H 004F 3400 00096 RETLW 00H 0050 3402 00097 RETLW 02H 0051 3400 00098 RETLW 00H 0052 3400 00099 RETLW 00H 0053 3400 00100 RETLW 00H 0054 3402 00101 RETLW 02H 0055 3400 00102 RETLW 00H 0056 3400 00103 RETLW 00H MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0057 3408 00104 RETLW 08H 0058 3400 00105 RETLW 00H 0059 3400 00106 RETLW 00H 005A 3420 00107 RETLW 20H 005B 3400 00108 RETLW 00H 005C 3420 00109 RETLW 20H 005D 3400 00110 RETLW 00H 005E 3425 00111 RETLW 25H 005F 3415 00112 RETLW 15H 0060 3415 00113 RETLW 15H 0061 3419 00114 RETLW 19H 0062 3415 00115 RETLW 15H 0063 3415 00116 RETLW 15H 0064 3416 00117 RETLW 16H 0065 3415 00118 RETLW 15H 0066 3415 00119 RETLW 15H 0067 3415 00120 RETLW 15H 0068 3416 00121 RETLW 16H 0069 3415 00122 RETLW 15H 006A 3415 00123 RETLW 15H 006B 3415 00124 RETLW 15H 006C 3416 00125 RETLW 16H 006D 3415 00126 RETLW 15H 006E 3415 00127 RETLW 15H 006F 3419 00128 RETLW 19H 0070 3415 00129 RETLW 15H 0071 3415 00130 RETLW 15H 0072 3425 00131 RETLW 25H 0073 3415 00132 RETLW 15H 0074 3425 00133 RETLW 25H 0075 3415 00134 RETLW 15H 0076 34FF 00135 RETLW 0FFH 0077 34FF 00136 RETLW 0FFH 00137 00138 0078 0782 00139 TABLE5 ADDWF 02,1 ; 0079 3431 00140 RETLW 31H 007A 3433 00141 RETLW 33H 007B 3437 00142 RETLW 37H 007C 3439 00143 RETLW 39H 007D 3431 00144 RETLW 31H 007E 3433 00145 RETLW 33H 007F 3437 00146 RETLW 37H 0080 3439 00147 RETLW 39H 0081 3431 00148 RETLW 31H 0082 3432 00149 RETLW 32H 0083 3433 00150 RETLW 33H 0084 3434 00151 RETLW 34H 0085 3436 00152 RETLW 36H 0086 3437 00153 RETLW 37H 0087 3438 00154 RETLW 38H 0088 3439 00155 RETLW 39H 0089 34FF 00156 RETLW 0FFH MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00157 00158 00159 00160 ;ATTRACT mode comes ON when the project is switched on. 00161 ;Push either button to get to TIC TAC TOE mode. 00162 00163 00164 008A 3010 00165 ATT MOVLW 10H 008B 00A2 00166 MOVWF 22H ;File to be decremented 008C 3015 00167 ATT1 MOVLW 15 008D 0086 00168 MOVWF 06 008E 3020 00169 MOVLW 20H 008F 00A3 00170 MOVWF 23H 0090 1405 00171 ATT2 BSF 05,0 0091 216A 00172 CALL DEL2 0092 1005 00173 BCF 05,0 0093 1505 00174 BSF 05,2 0094 216A 00175 CALL DEL2 0095 1105 00176 BCF 05,2 0096 1485 00177 BSF 05,1 0097 216A 00178 CALL DEL2 0098 1085 00179 BCF 05,1 0099 0BA3 00180 DECFSZ 23H,1 009A 2890 00181 GOTO ATT2 00182 009B 30FF 00183 MOVLW 0FFH 009C 0086 00184 MOVWF 06 009D 3020 00185 MOVLW 20H 009E 00A3 00186 MOVWF 23H 009F 1405 00187 ATT3 BSF 05,0 00A0 216A 00188 CALL DEL2 00A1 1005 00189 BCF 05,0 00A2 1505 00190 BSF 05,2 00A3 216A 00191 CALL DEL2 00A4 1105 00192 BCF 05,2 00A5 1485 00193 BSF 05,1 00A6 216A 00194 CALL DEL2 00A7 1085 00195 BCF 05,1 00A8 0BA3 00196 DECFSZ 23H,1 00A9 289F 00197 GOTO ATT3 00198 00AA 302A 00199 MOVLW 2A 00AB 0086 00200 MOVWF 06 00AC 3020 00201 MOVLW 20H 00AD 00A3 00202 MOVWF 23H 00AE 1405 00203 ATT4 BSF 05,0 00AF 216A 00204 CALL DEL2 00B0 1005 00205 BCF 05,0 00B1 1505 00206 BSF 05,2 00B2 216A 00207 CALL DEL2 00B3 1105 00208 BCF 05,2 00B4 1485 00209 BSF 05,1 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00B5 216A 00210 CALL DEL2 00B6 1085 00211 BCF 05,1 00B7 0BA3 00212 DECFSZ 23H,1 00B8 28AE 00213 GOTO ATT4 00B9 0BA2 00214 DECFSZ 22H,1 00BA 288C 00215 GOTO ATT1 00216 00BB 3004 00217 MOVLW 04 ;Create 4 cycles of green-to-red-to-green 00BC 00A2 00218 MOVWF 22H 00BD 01A0 00219 CLRF 20H 00BE 01A1 00220 CLRF 21H 00BF 0AA1 00221 ATT5 INCF 21H,1 00C0 3008 00222 MOVLW 08H 00C1 00A7 00223 MOVWF 27H 00C2 3004 00224 ATT6 MOVLW 04 00C3 0086 00225 MOVWF 06 00C4 1505 00226 BSF 05,2 00C5 0820 00227 MOVF 20H,0 00C6 00A5 00228 MOVWF 25H 00C7 0BA5 00229 ATT7 DECFSZ 25H,1 00C8 28C7 00230 GOTO ATT7 00C9 3008 00231 MOVLW 08 00CA 0086 00232 MOVWF 06 00CB 1505 00233 BSF 05,2 00CC 0821 00234 MOVF 21H,0 00CD 00A6 00235 MOVWF 26H 00CE 0BA6 00236 ATT8 DECFSZ 26H,1 00CF 28CE 00237 GOTO ATT8 00D0 0BA7 00238 DECFSZ 27H 00D1 28C2 00239 GOTO ATT6 00D2 1D85 00240 BTFSS 05,3 ;Test for ButtonA 00D3 2A95 00241 GOTO PRELOAD 00D4 1E05 00242 BTFSS 05,4 ;Test for ButtonB 00D5 2A95 00243 GOTO PRELOAD 00D6 0BA0 00244 DECFSZ 20H,1 00D7 28BF 00245 GOTO ATT5 00246 00D8 01A0 00247 CLRF 20H 00D9 01A1 00248 CLRF 21H 00DA 0AA0 00249 ATT9 INCF 20H,1 00DB 3008 00250 MOVLW 08H 00DC 00A7 00251 MOVWF 27H 00DD 3004 00252 ATT10 MOVLW 04 00DE 0086 00253 MOVWF 06 00DF 1505 00254 BSF 05,2 00E0 0820 00255 MOVF 20H,0 00E1 00A5 00256 MOVWF 25H 00E2 0BA5 00257 ATT11 DECFSZ 25H,1 00E3 28E2 00258 GOTO ATT11 00E4 3008 00259 MOVLW 08 00E5 0086 00260 MOVWF 06 00E6 1505 00261 BSF 05,2 00E7 0821 00262 MOVF 21H,0 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00E8 00A6 00263 MOVWF 26H 00E9 0BA6 00264 ATT12 DECFSZ 26H,1 00EA 28E9 00265 GOTO ATT12 00EB 0BA7 00266 DECFSZ 27H 00EC 28DD 00267 GOTO ATT10 00ED 1D85 00268 BTFSS 05,3 ;Test for ButtonA 00EE 2A95 00269 GOTO PRELOAD 00EF 1E05 00270 BTFSS 05,4 ;Test for ButtonB 00F0 2A95 00271 GOTO PRELOAD 00F1 0BA1 00272 DECFSZ 21H,1 00F2 28DA 00273 GOTO ATT9 00F3 0BA2 00274 DECFSZ 22H 00F4 28BF 00275 GOTO ATT5 00F5 28F6 00276 GOTO RASTER ;Not needed but tells you where micro is going 00277 00278 00279 00280 ;Raster is a scanning program for the display 00281 ;Raster displays each row in turn and scans down the rows 00282 ;It has a display time of 250mS 00283 ;Values on the display are taken from Table4 - 3 bytes are needed. 00284 00285 00286 00287 ;Raster puts anything you want, on the display 00288 00F6 01A2 00289 RASTER CLRF 22H ;Jump value for table4 00F7 0185 00290 CLRF 05 ; 00F8 300C 00291 RAST1 MOVLW 0CH ;Number of scans for each increment of the diaply 00F9 00A6 00292 MOVWF 26H 00FA 0822 00293 RAST2 MOVF 22H,0 ;Copy jump value into W 00FB 2045 00294 CALL TABLE4 00FC 3AFF 00295 XORLW 0FFH ;See if end of table reached 00FD 1903 00296 BTFSC 03,2 ;Test zero flag 00FE 28F6 00297 GOTO RASTER ;Start again 00FF 0822 00298 MOVF 22H,0 ;Copy jump value into W 0100 2045 00299 CALL TABLE4 ;Call Table4 again as value was lost via XORLW 0101 0086 00300 MOVWF 06 ;Move table value to display 0102 1405 00301 BSF 05,0 ;Turn on top row 0103 216A 00302 CALL DEL2 ;Show top row 0104 1005 00303 BCF 05,0 ;Turn off top row 0105 0AA2 00304 INCF 22H,1 ;Increment the table pointer 0106 0822 00305 MOVF 22H,0 ;Copy jump value into W 0107 2045 00306 CALL TABLE4 ;Call Table4 0108 0086 00307 MOVWF 06 ;Move table value to display 0109 1505 00308 BSF 05,2 ;Turn on middle row 010A 216A 00309 CALL DEL2 ;Show middle row 010B 1105 00310 BCF 05,2 ;Turn off top row 010C 0AA2 00311 INCF 22H,1 ;Increment the table pointer 010D 0822 00312 MOVF 22H,0 ;Copy jump value into W 010E 2045 00313 CALL TABLE4 ;Call Table4 010F 0086 00314 MOVWF 06 ;Move table value to display 0110 1485 00315 BSF 05,1 ;Turn on bottom row MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0111 216A 00316 CALL DEL2 ;Show bottom row 0112 1085 00317 BCF 05,1 ;Turn off bottom row 0113 03A2 00318 DECF 22H,1 ;Decrement the table pointer 0114 03A2 00319 DECF 22H,1 0115 0BA6 00320 DECFSZ 26H,1 0116 28FA 00321 GOTO RAST2 0117 0AA2 00322 INCF 22H,1 0118 0AA2 00323 INCF 22H,1 0119 0AA2 00324 INCF 22H,1 011A 28F8 00325 GOTO RAST1 00326 00327 011B 142F 00328 BUTTONA BSF 2F,0 ;Set button-press flag 011C 1DAF 00329 BTFSS 2F,3 ;Is Win-LED/stalemate bit=1? 011D 292E 00330 GOTO BUTAA 011E 11AF 00331 BCF 2F,3 011F 1305 00332 BCF 05,6 0120 1385 00333 BCF 05,7 0121 3005 00334 MOVLW 05 ;Put cursor into "ready" file 0122 00B0 00335 MOVWF 30H 0123 01B1 00336 CLRF 31H 0124 01B2 00337 CLRF 32H 0125 01B3 00338 CLRF 33H 0126 01B4 00339 CLRF 34H 0127 01B5 00340 CLRF 35H 0128 01B6 00341 CLRF 36H 0129 01B7 00342 CLRF 37H 012A 01B8 00343 CLRF 38H 012B 01B9 00344 CLRF 39H 012C 01BA 00345 CLRF 3AH 012D 0008 00346 RETURN 012E 3030 00347 BUTAA MOVLW 30H ;Start of "board" 012F 0084 00348 MOVWF 04 ;Start FSR at file 30h 0130 1980 00349 BUTA1 BTFSC 00,3 ;Look for "8" 0131 2939 00350 GOTO BUTA3 ;Found cursor 0132 1C00 00351 BTFSS 00,0 0133 2937 00352 GOTO BUTA2 ;Cursor not found 0134 1D00 00353 BTFSS 00,2 0135 2937 00354 GOTO BUTA2 0136 2939 00355 GOTO BUTA3 ;Found cursor 0137 0A84 00356 BUTA2 INCF 04 0138 2930 00357 GOTO BUTA1 0139 303A 00358 BUTA3 MOVLW 3AH ;Has cursor reached end of "board?" 013A 0604 00359 XORWF 04,0 013B 1D03 00360 BTFSS 03,2 ;Test the zero flag 013C 2941 00361 GOTO BUTA4 ;not at end of board 013D 01BA 00362 CLRF 3AH ;reached end of board 013E 3005 00363 MOVLW 05 013F 00B0 00364 MOVWF 30H ;Return cursor to start 0140 0008 00365 RETURN 0141 0180 00366 BUTA4 CLRF 00 ;Clear the cursor 0142 0A84 00367 BUTA5 INCF 04,1 0143 303A 00368 MOVLW 3A MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0144 0604 00369 XORWF 04,0 ;If cursor has reached end of board, 0145 1D03 00370 BTFSS 03,2 ; return it to file 30h 0146 2949 00371 GOTO BUTA6 0147 3030 00372 MOVLW 30H 0148 0084 00373 MOVWF 04 ;Return cursor to start 0149 3000 00374 BUTA6 MOVLW 00 014A 0600 00375 XORWF 00,0 ;Is board location empty? 014B 1D03 00376 BTFSS 03,2 ;Test zero flag 014C 2942 00377 GOTO BUTA5 ;Not empty 014D 3005 00378 MOVLW 05 ;Empty location 014E 0080 00379 MOVWF 00 ;Show cursor in new location 014F 0008 00380 RETURN 00381 00382 00383 ;ButtonB converts a flashing cursor into a red LED =01 00384 0150 14AF 00385 BUTTONB BSF 2F,1 ;Set button-press flag 0151 3009 00386 MOVLW 09 0152 00A3 00387 MOVWF 23H ;Decrementing file 0153 3031 00388 MOVLW 31H ;Start of "board" 0154 0084 00389 MOVWF 04 ;FSR starts at file 31h 0155 3005 00390 BUTB1 MOVLW 05 0156 0600 00391 XORWF 00,0 ;Is the file looked at by FSR=5? 0157 1903 00392 BTFSC 03,2 ;Test zero flag 0158 295D 00393 GOTO BUTB2 ;Found 0159 3008 00394 MOVLW 08 ;Not found try "08" = flashing cursor 015A 0600 00395 XORWF 00,0 ;Is the file looked at by FSR=8? 015B 1D03 00396 BTFSS 03,2 015C 2962 00397 GOTO BUTB3 ;Not found 015D 3001 00398 BUTB2 MOVLW 01 ;Cursor found 015E 0080 00399 MOVWF 00 ;Make file = 1 = red 015F 3005 00400 MOVLW 05 0160 00B0 00401 MOVWF 30H ;Put cursor into "hide" file 0161 2979 00402 GOTO PWIN 0162 0A84 00403 BUTB3 INCF 04,1 ;Increment the pointer 0163 0BA3 00404 DECFSZ 23H 0164 2955 00405 GOTO BUTB1 0165 2979 00406 GOTO PWIN ;ButtonB pushed for computer goes first 00407 00408 0166 0000 00409 DEL1 NOP ;Create delay 0167 0BA0 00410 DECFSZ 20H,1 0168 2966 00411 GOTO DEL1 0169 0008 00412 RETURN 00413 00414 016A 0000 00415 DEL2 NOP ;Create delay 016B 0000 00416 NOP 016C 0000 00417 NOP 016D 0000 00418 NOP 016E 0000 00419 NOP 016F 0000 00420 NOP 0170 0000 00421 NOP MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0171 0000 00422 NOP 0172 0BA0 00423 DECFSZ 20H,1 0173 296A 00424 GOTO DEL2 0174 1D85 00425 BTFSS 05,3 ;Test for ButtonA 0175 2A95 00426 GOTO PRELOAD 0176 1E05 00427 BTFSS 05,4 ;Test for ButtonB 0177 2A95 00428 GOTO PRELOAD 0178 0008 00429 RETURN 00430 00431 00432 00433 ;Player WINS 00434 ;Check all possibilities for PLAYER WIN 00435 ;Looking for a HIGH in bit0 = 01 in three files 00436 ;This routine is in "Linear Programming Mode" 0179 1C31 00437 PWIN BTFSS 31H,0 017A 297F 00438 GOTO PWIN1 017B 1C32 00439 BTFSS 32H,0 017C 297F 00440 GOTO PWIN1 017D 1833 00441 BTFSC 33H,0 017E 29AD 00442 GOTO PWIN21 017F 1C34 00443 PWIN1 BTFSS 34H,0 0180 2985 00444 GOTO PWIN2 0181 1C35 00445 BTFSS 35H,0 0182 2985 00446 GOTO PWIN2 0183 1836 00447 BTFSC 36H,0 0184 29AD 00448 GOTO PWIN21 0185 1C37 00449 PWIN2 BTFSS 37H,0 0186 298B 00450 GOTO PWIN3 0187 1C38 00451 BTFSS 38H,0 0188 298B 00452 GOTO PWIN3 0189 1839 00453 BTFSC 39H,0 018A 29AD 00454 GOTO PWIN21 018B 1C31 00455 PWIN3 BTFSS 31H,0 018C 2991 00456 GOTO PWIN4 018D 1C34 00457 BTFSS 34H,0 018E 2991 00458 GOTO PWIN4 018F 1837 00459 BTFSC 37H,0 0190 29AD 00460 GOTO PWIN21 0191 1C32 00461 PWIN4 BTFSS 32H,0 0192 2997 00462 GOTO PWIN5 0193 1C35 00463 BTFSS 35H,0 0194 2997 00464 GOTO PWIN5 0195 1838 00465 BTFSC 38H,0 0196 29AD 00466 GOTO PWIN21 0197 1C33 00467 PWIN5 BTFSS 33H,0 0198 299D 00468 GOTO PWIN6 0199 1C36 00469 BTFSS 36H,0 019A 299D 00470 GOTO PWIN6 019B 1839 00471 BTFSC 39H,0 019C 29AD 00472 GOTO PWIN21 019D 1C31 00473 PWIN6 BTFSS 31H,0 019E 29A3 00474 GOTO PWIN7 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 019F 1C35 00475 BTFSS 35H,0 01A0 29A3 00476 GOTO PWIN7 01A1 1839 00477 BTFSC 39H,0 01A2 29AD 00478 GOTO PWIN21 01A3 1C33 00479 PWIN7 BTFSS 33H,0 01A4 29A9 00480 GOTO PWIN8 01A5 1C35 00481 BTFSS 35H,0 01A6 29A9 00482 GOTO PWIN8 01A7 1837 00483 BTFSC 37H,0 01A8 29AD 00484 GOTO PWIN21 01A9 227E 00485 PWIN8 CALL STALE 01AA 1DAF 00486 BTFSS 2F,3 01AB 29B0 00487 GOTO CWIN 01AC 0008 00488 RETURN 01AD 1705 00489 PWIN21 BSF 05,6 ;Player WINS! 01AE 15AF 00490 BSF 2F,3 ;Set the Win-LED/stalemate bit 01AF 0008 00491 RETURN 00492 00493 00494 00495 ;Computer WINS 00496 ;Check all possibilities for "COMPUTER WINS" 00497 ;Looking for a HIGH in bit2 = 04 in 2 files 00498 ;This routine is in "Algorithm Mode" 00499 00500 01B0 30FF 00501 CWIN MOVLW 0FFH ;The value will be incremented to 00! 01B1 00A5 00502 MOVWF 25H ;Table jump file 01B2 01A7 00503 CWIN1 CLRF 27H ;Clear the Computer counter 01B3 3003 00504 MOVLW 03 01B4 00A6 00505 MOVWF 26H ;Fetch 3 table values in a loop. 01B5 0AA5 00506 CWIN2 INCF 25H,1 ;Increment the table-jump file 01B6 0825 00507 MOVF 25H,0 ;Copy jump file into W 01B7 200B 00508 CALL TABLE1 ;Get first table value 01B8 3AFF 00509 XORLW 0FFH ;Look for end-of-table 01B9 1903 00510 BTFSC 03,2 ;Test zero flag 01BA 29D5 00511 GOTO STOP ;End of table found - no result obtained 01BB 0825 00512 MOVF 25H,0 ;Copy jump file into W again 01BC 200B 00513 CALL TABLE1 ;Call table again as previous value was lost via XORLW 01BD 0084 00514 MOVWF 04 ;Move table value into FSR 01BE 1800 00515 BTFSC 00,0 ;Look for unwanted player piece 01BF 03A7 00516 DECF 27H,1 ;Decrement the computer counter so count cannot be recognised 01C0 1900 00517 BTFSC 00,2 ;Look at bit2 of file 31h (first table value) 01C1 0AA7 00518 INCF 27H,1 ;Increment the Computer counter 01C2 0BA6 00519 CWIN3 DECFSZ 26H,1 ;Decrement the 3 table-values counter 01C3 29B5 00520 GOTO CWIN2 ;Loop for next piece 01C4 3002 00521 MOVLW 02 ;See if 2 computer pieces are found 01C5 0627 00522 XORWF 27H,0 01C6 1D03 00523 BTFSS 03,2 01C7 29B2 00524 GOTO CWIN1 ;2 computer pieces not found 01C8 0825 00525 CWIN4 MOVF 25H,0 ;2 Computer pieces found. Put 25h into W 01C9 200B 00526 CALL TABLE1 ;Locate table value 01CA 0084 00527 MOVWF 04 ;Put W into FSR MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01CB 0880 00528 MOVF 00,1 ;Move value in file in and out to see if it is zero 01CC 1D03 00529 BTFSS 03,2 ;Test zero flag 01CD 29D3 00530 GOTO CWIN5 ;Not zero 01CE 3004 00531 MOVLW 04 ;Square is zero. Load computer piece 01CF 0080 00532 MOVWF 00 ; 01D0 1785 00533 BSF 05,7 ;Computer WINS! 01D1 15AF 00534 BSF 2F,3 ;Set the Win-LED/stalemate bit 01D2 0008 00535 RETURN 01D3 03A5 00536 CWIN5 DECF 25H,1 01D4 29C8 00537 GOTO CWIN4 00538 00539 00540 00541 ;Look for a "stopper" 00542 ;Any row or diagonal containing a "2" must be stopped 00543 ; i.e: two files in a row or diag with 01. 00544 00545 01D5 30FF 00546 STOP MOVLW 0FFH ;The value will be incremented to 00! 01D6 00A5 00547 MOVWF 25H ;Table jump file 01D7 01A7 00548 STOP1 CLRF 27H ;Clear the "player" counter 01D8 3004 00549 MOVLW 04 ;This will be decremented to 3! 01D9 00A6 00550 MOVWF 26H ;Fetch 3 table-values in a loop. 01DA 0BA6 00551 STOP2 DECFSZ 26H,1 ; 01DB 29DD 00552 GOTO STOP2A 01DC 29EA 00553 GOTO STOP4 ;3 values have been processed 01DD 0AA5 00554 STOP2A INCF 25H,1 ;Increment the table-jump file 01DE 0825 00555 MOVF 25H,0 ;Copy jump file into W 01DF 200B 00556 CALL TABLE1 ;Get first table value 01E0 0084 00557 MOVWF 04 ;Move table value into FSR 01E1 1B80 00558 BTFSC 00,7 ;Look for end-of-table 01E2 29FA 00559 GOTO CORNER ;End of table found - no result obtained 01E3 1900 00560 BTFSC 00,2 ;Look at bit2 of file 31h to see if computer piece is present 01E4 29E8 00561 GOTO STOP3 ;Computer piece found 01E5 1800 00562 BTFSC 00,0 ;Look at bit0 of file 31h (first table value) 01E6 0AA7 00563 INCF 27H,1 ;Increment the "player" counter 01E7 29DA 00564 GOTO STOP2 01E8 17A7 00565 STOP3 BSF 27H,7 ;Set bit 7 of "player" counter 01E9 29DA 00566 GOTO STOP2 01EA 1BA7 00567 STOP4 BTFSC 27H,7 ;Is computer in the row? 01EB 29D7 00568 GOTO STOP1 01EC 1CA7 00569 BTFSS 27H,1 ;Is counter=2? 01ED 29D7 00570 GOTO STOP1 01EE 03A5 00571 DECF 25H,1 ;Two player files found! Go back to start of the 3 files. 01EF 03A5 00572 DECF 25H,1 ;Take table-jump value up-table 01F0 0825 00573 STOP5 MOVF 25H,0 ;Start of the three files. Move Jump value into W 01F1 200B 00574 CALL TABLE1 ;Look at value of first of three files. 01F2 0084 00575 MOVWF 04 ;Put jump value into FSR 01F3 1800 00576 BTFSC 00,0 ;Test for player 01F4 29F8 00577 GOTO STOP6 ;Not empty 01F5 3004 00578 MOVLW 04 ;Empty so put 04 into file looked at by FSR 01F6 0080 00579 MOVWF 00 ; 01F7 0008 00580 RETURN MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01F8 0AA5 00581 STOP6 INCF 25H,1 ;Increment the pointer 01F9 29F0 00582 GOTO STOP5 00583 00584 00585 ;Random Corner if first move. 00586 ;Look to see if all locations are empty. 00587 ;Place Computer value in a corner. 00588 01FA 3009 00589 CORNER MOVLW 09 01FB 00A5 00590 MOVWF 25H ;The loop file 01FC 3030 00591 MOVLW 30H ;This will be incremented before starting routine 01FD 0084 00592 MOVWF 04 ;The pointer file 01FE 0A84 00593 CORNER1 INCF 04,1 ;Look at first board location 01FF 3000 00594 MOVLW 00 ;Put 00 into W 0200 0600 00595 XORWF 00,0 ;Is location empty? 0201 1D03 00596 BTFSS 03,2 ;Test the zero flag 0202 2A0E 00597 GOTO CENTER ;Location is not empty 0203 0BA5 00598 DECFSZ 25H,1 ;File is zero. Decrement the loop file 0204 29FE 00599 GOTO CORNER1 ;Loop again 0205 3007 00600 MOVLW 07 ;Board is empty. Put masking value (7) into W 0206 05A8 00601 ANDWF 28H,1 ;AND 07 with random number file. Result in 28h 0207 0AA8 00602 INCF 28H,1 ;File will be 1 to 8 0208 0828 00603 MOVF 28H,0 ;Put value in file 28 into W 0209 2028 00604 CALL TABLE2 ;Fetch random corner from table 020A 0084 00605 MOVWF 04 ;Put random corner into FSR 020B 3004 00606 MOVLW 04 020C 0080 00607 MOVWF 00 ;Put computer piece onto board 020D 0008 00608 RETURN 00609 00610 00611 ;If board is not empty, place computer in center square 00612 020E 08B5 00613 CENTER MOVF 35H,1 ;Move 35h in and out of file to see if it is zero 020F 1D03 00614 BTFSS 03,2 ;Test zero flag 0210 2A14 00615 GOTO FORK 0211 3004 00616 MOVLW 04 0212 00B5 00617 MOVWF 35H ;Put computer into center square 0213 0008 00618 RETURN 00619 00620 00621 ;This is a "trick" situation where the player is 00622 ; forming a "fork." If two player and one 00623 ; computer piece is found, and computer is in 00624 ; middle, computer plays a side square 00625 00626 00627 0214 1D35 00628 FORK BTFSS 35H,2 ;Is computer in centre square? 0215 2A4B 00629 GOTO LOOK4 ;Not computer piece 0216 1C31 00630 BTFSS 31H,0 ;Computer in centre. Is player in first square? 0217 2A1A 00631 GOTO FORKA ;Player not in first square 0218 1839 00632 BTFSC 39H,0 ;Player in first square. Is player in last square? 0219 2A1E 00633 GOTO FORKB ;Player in last square MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 021A 1C33 00634 FORKA BTFSS 33H,0 ; 021B 2A2A 00635 GOTO DIVIDE ; 021C 1C37 00636 BTFSS 37H,0 021D 2A2A 00637 GOTO DIVIDE 021E 3007 00638 FORKB MOVLW 07 ;Get a random value. Put masking value (7) into W 021F 05A8 00639 ANDWF 28H,1 ;AND 07 with random number file. Result in file 0220 0AA8 00640 INCF 28H,1 ;File will be 1 to 8 0221 0828 00641 MOVF 28H,0 ;Put value in file 28 into W 0222 2032 00642 CALL TABLE3 ;Fetch random side from table 0223 0084 00643 MOVWF 04 ;Put random side into FSR 0224 0880 00644 MOVF 00,1 ;Move side value in and out of file to see if it is zero 0225 1D03 00645 BTFSS 03,2 0226 2A1E 00646 GOTO FORKB ;Side not empty 0227 3004 00647 MOVLW 04 0228 0080 00648 MOVWF 00 ;Put computer piece onto board 0229 0008 00649 RETURN 00650 00651 00652 ;Divide is another "trick situation. 00653 ;If computer in centre and player on two ajoining sides 00654 ; computer must go between player pieces. 00655 022A 1831 00656 DIVIDE BTFSC 31H,0 ;Test for player in first location 022B 2A4B 00657 GOTO LOOK4 022C 1931 00658 BTFSC 31H,2 ;Test for computer in first locations 022D 2A4B 00659 GOTO LOOK4 022E 1832 00660 BTFSC 32H,0 022F 2A4B 00661 GOTO LOOK4 0230 1932 00662 BTFSC 32H,2 0231 2A4B 00663 GOTO LOOK4 0232 1833 00664 BTFSC 33H,0 0233 2A4B 00665 GOTO LOOK4 0234 1933 00666 BTFSC 33H,2 0235 2A4B 00667 GOTO LOOK4 0236 1834 00668 BTFSC 34H,0 0237 2A4B 00669 GOTO LOOK4 0238 1934 00670 BTFSC 34H,2 0239 2A4B 00671 GOTO LOOK4 023A 1D35 00672 BTFSS 35H,2 ;Look for computer in centre square 023B 2A4B 00673 GOTO LOOK4 023C 1C36 00674 BTFSS 36H,0 ;Look for player 023D 2A4B 00675 GOTO LOOK4 023E 1837 00676 BTFSC 37H,0 023F 2A4B 00677 GOTO LOOK4 0240 1937 00678 BTFSC 37H,2 0241 2A4B 00679 GOTO LOOK4 0242 1C38 00680 BTFSS 38H,0 ;Look for player 0243 2A4B 00681 GOTO LOOK4 0244 1839 00682 BTFSC 39H,0 0245 2A4B 00683 GOTO LOOK4 0246 1939 00684 BTFSC 39H,2 0247 2A4B 00685 GOTO LOOK4 0248 3004 00686 MOVLW 04 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0249 00B9 00687 MOVWF 39H ;Put computer piece into last location 024A 0008 00688 RETURN 00689 00690 00691 00692 ;Look for a row containing just a computer piece (04) and 00693 ; add another computer piece. If not, add a random 00694 ; computer piece. 00695 00696 024B 30FF 00697 LOOK4 MOVLW 0FFH ;The value will be incremented to 00! 024C 00A5 00698 MOVWF 25H ;Table jump file 024D 01A7 00699 LOOK4A CLRF 27H ;Clear the Look counter 024E 3003 00700 MOVLW 03 024F 00A6 00701 MOVWF 26H ;Fetch 3 table values in a loop. 0250 0AA5 00702 LOOK4B INCF 25H,1 ;Increment the table-jump file 0251 0825 00703 MOVF 25H,0 ;Copy jump file into W 0252 200B 00704 CALL TABLE1 ;Get first table value 0253 0084 00705 MOVWF 04 ;Move table value into FSR 0254 1B80 00706 BTFSC 00,7 ;Look for end-of-table 0255 2A70 00707 GOTO RANDOM ;End of table found - no result obtained 0256 1900 00708 BTFSC 00,2 ;Look for computer 0257 2A5B 00709 GOTO LOOK4L 0258 1C00 00710 BTFSS 00,0 ;Look for player 0259 2A5C 00711 GOTO LOOK4C 025A 0AA7 00712 INCF 27H,1 ;Prevent row being accessed 025B 0AA7 00713 LOOK4L INCF 27H,1 ;Increment the Look counter (If=1, Computer only once) 025C 0BA6 00714 LOOK4C DECFSZ 26H,1 ;Decrement the 3 table-values counter 025D 2A50 00715 GOTO LOOK4B 025E 3001 00716 MOVLW 01 025F 06A7 00717 XORWF 27H,1 0260 1D03 00718 BTFSS 03,2 0261 2A4D 00719 GOTO LOOK4A ;Computer nil or more than once 0262 03A5 00720 DECF 25H,1 ;Computer only once. Find start of row 0263 03A5 00721 DECF 25H,1 0264 0825 00722 LOOK4G MOVF 25H,0 ;Move 25h into W 0265 200B 00723 CALL TABLE1 0266 0084 00724 MOVWF 04 ;Move table value into pointer 0267 0880 00725 MOVF 00,1 ;Move file in and out to see it is zero 0268 1D03 00726 BTFSS 03,2 ;Test zero flag 0269 2A6D 00727 GOTO LOOK4H 026A 3004 00728 MOVLW 04 ;Square is empty 026B 0080 00729 MOVWF 00 ;Put computer piece into empty square 026C 0008 00730 RETURN 026D 0AA5 00731 LOOK4H INCF 25H,1 026E 0AA5 00732 INCF 25H,1 ;Place coputer piece only in corner! 026F 2A64 00733 GOTO LOOK4G 00734 00735 00736 00737 ;Insert a random computer piece 00738 ;corners are first selected 00739 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0270 3003 00740 RANDOM MOVLW 03 ;Put masking value (3) into W 0271 05A8 00741 ANDWF 28H,1 ;AND 03 with random number file. Result in file 0272 0AA8 00742 RANDOM1 INCF 28H,1 ;File will be 1 to 4 on first pass. 0273 0828 00743 MOVF 28H,0 ;Put value into W 0274 2078 00744 CALL TABLE5 ;Fetch random location from table 0275 0084 00745 MOVWF 04 ;Put random location into FSR 0276 1B80 00746 BTFSC 00,7 ;Test for end-of-table 0277 0008 00747 RETURN 0278 0880 00748 MOVF 00,1 ;Move value in and out of file to see if it is zero 0279 1D03 00749 BTFSS 03,2 ;Test the zero-bit 027A 2A72 00750 GOTO RANDOM1 ;location not empty 027B 3004 00751 MOVLW 04 027C 0080 00752 MOVWF 00 ;Put computer piece onto board 027D 0008 00753 RETURN 00754 00755 00756 ;STALEMATE 00757 ;Board is checked to see if any square is empty 00758 ;If all full, both LEDs are illuminated 00759 00760 027E 1B05 00761 STALE BTFSC 05,6 ;Check Player-WINS! bit 027F 0008 00762 RETURN 0280 3009 00763 MOVLW 09 0281 00A5 00764 MOVWF 25H ;Decrementing file 0282 3031 00765 MOVLW 31H 0283 0084 00766 MOVWF 04 ;Start of files into FSR 0284 3005 00767 STALE1 MOVLW 05 0285 0600 00768 XORWF 00,0 0286 1903 00769 BTFSC 03,2 0287 0008 00770 RETURN ;Square has cursor 0288 1980 00771 BTFSC 00,3 ;Test for "hidden" cursor 0289 0008 00772 RETURN 028A 3000 00773 MOVLW 00 028B 0600 00774 XORWF 00,0 028C 1903 00775 BTFSC 03,2 ;Test zero flag 028D 0008 00776 RETURN ;Square is empty 028E 0A84 00777 INCF 04,1 ;Square is full. Increment the pointer 028F 0BA5 00778 DECFSZ 25H,1 0290 2A84 00779 GOTO STALE1 0291 1705 00780 BSF 05,6 0292 1785 00781 BSF 05,7 0293 15AF 00782 BSF 2F,3 ;Set the Win-LED/stalemate bit 0294 0008 00783 RETURN 00784 00785 0295 3005 00786 PRELOAD MOVLW 05 ;Put cursor into "ready" file 0296 00B0 00787 MOVWF 30H 0297 01B1 00788 CLRF 31H 0298 01B2 00789 CLRF 32H 0299 01B3 00790 CLRF 33H 029A 01B4 00791 CLRF 34H 029B 01B5 00792 CLRF 35H MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 029C 01B6 00793 CLRF 36H 029D 01B7 00794 CLRF 37H 029E 01B8 00795 CLRF 38H 029F 01B9 00796 CLRF 39H 02A0 01BA 00797 CLRF 3AH 02A1 1D85 00798 BTFSS 05,3 ;Make sure button "A" is released 02A2 2A95 00799 GOTO PRELOAD 02A3 1E05 00800 BTFSS 05,4 ;Make sure button "B" is released 02A4 2A95 00801 GOTO PRELOAD 02A5 2AA6 00802 GOTO MAIN ;Go to Main 00803 00804 00805 ;Player Value = 01 = red 00806 ;Computer Value = 04 = green 00807 ;Cursor = 05 00808 02A6 3020 00809 MAIN MOVLW 20H ;Loops of Main for flashing cursor 02A7 00A2 00810 MOVWF 22H ;File to decrement 02A8 182F 00811 MAINA BTFSC 2F,0 ;ButtonA pressed first time? 02A9 2AAC 00812 GOTO MAINB 02AA 1D85 00813 BTFSS 05,3 ;Test for ButtonA 02AB 211B 00814 CALL BUTTONA 02AC 18AF 00815 MAINB BTFSC 2F,1 ;ButtonB pressed first time? 02AD 2AB0 00816 GOTO MAINC 02AE 1E05 00817 BTFSS 05,4 ;Test for ButtonB 02AF 2150 00818 CALL BUTTONB 02B0 1C31 00819 MAINC BTFSS 31H,0 02B1 2AB3 00820 GOTO MAIN1 02B2 1686 00821 BSF 06,5 02B3 1D31 00822 MAIN1 BTFSS 31H,2 02B4 2AB6 00823 GOTO MAIN2 02B5 1606 00824 BSF 06,4 02B6 1C32 00825 MAIN2 BTFSS 32H,0 02B7 2AB9 00826 GOTO MAIN3 02B8 1586 00827 BSF 06,3 02B9 1D32 00828 MAIN3 BTFSS 32H,2 02BA 2ABC 00829 GOTO MAIN4 02BB 1506 00830 BSF 06,2 02BC 1C33 00831 MAIN4 BTFSS 33H,0 02BD 2ABF 00832 GOTO MAIN5 02BE 1486 00833 BSF 06,1 02BF 1D33 00834 MAIN5 BTFSS 33H,2 02C0 2AC2 00835 GOTO MAIN6 02C1 1406 00836 BSF 06,0 02C2 1405 00837 MAIN6 BSF 05,0 02C3 2166 00838 CALL DEL1 02C4 1005 00839 BCF 05,0 02C5 0186 00840 CLRF 06 02C6 2166 00841 CALL DEL1 02C7 1C34 00842 BTFSS 34H,0 02C8 2ACA 00843 GOTO MAIN7 02C9 1686 00844 BSF 06,5 02CA 1D34 00845 MAIN7 BTFSS 34H,2 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02CB 2ACD 00846 GOTO MAIN8 02CC 1606 00847 BSF 06,4 02CD 1C35 00848 MAIN8 BTFSS 35H,0 02CE 2AD0 00849 GOTO MAIN9 02CF 1586 00850 BSF 06,3 02D0 1D35 00851 MAIN9 BTFSS 35H,2 02D1 2AD3 00852 GOTO MAIN10 02D2 1506 00853 BSF 06,2 02D3 1C36 00854 MAIN10 BTFSS 36H,0 02D4 2AD6 00855 GOTO MAIN11 02D5 1486 00856 BSF 06,1 02D6 1D36 00857 MAIN11 BTFSS 36H,2 02D7 2AD9 00858 GOTO MAIN12 02D8 1406 00859 BSF 06,0 02D9 1505 00860 MAIN12 BSF 05,2 02DA 2166 00861 CALL DEL1 02DB 1105 00862 BCF 05,2 02DC 0186 00863 CLRF 06 02DD 2166 00864 CALL DEL1 02DE 1C37 00865 BTFSS 37H,0 02DF 2AE1 00866 GOTO MAIN13 02E0 1686 00867 BSF 06,5 02E1 1D37 00868 MAIN13 BTFSS 37H,2 02E2 2AE4 00869 GOTO MAIN14 02E3 1606 00870 BSF 06,4 02E4 1C38 00871 MAIN14 BTFSS 38H,0 02E5 2AE7 00872 GOTO MAIN15 02E6 1586 00873 BSF 06,3 02E7 1D38 00874 MAIN15 BTFSS 38H,2 02E8 2AEA 00875 GOTO MAIN16 02E9 1506 00876 BSF 06,2 02EA 1C39 00877 MAIN16 BTFSS 39H,0 02EB 2AED 00878 GOTO MAIN17 02EC 1486 00879 BSF 06,1 02ED 1D39 00880 MAIN17 BTFSS 39H,2 02EE 2AF0 00881 GOTO MAIN18 02EF 1406 00882 BSF 06,0 02F0 1485 00883 MAIN18 BSF 05,1 02F1 2166 00884 CALL DEL1 02F2 1085 00885 BCF 05,1 02F3 0186 00886 CLRF 06 02F4 1985 00887 BTFSC 05,3 ;Skip if ButtonA is still pressed 02F5 102F 00888 BCF 2F,0 ;Clear button-press flag 02F6 1A05 00889 BTFSC 05,4 ;Skip if ButtonB is still pressed 02F7 10AF 00890 BCF 2F,1 ;Clear button-press flag 02F8 0BA2 00891 DECFSZ 22H,1 02F9 2AA8 00892 GOTO MAINA 00893 00894 ;The following section hides and shows cursor 00895 ;If cursor is showing, it hides cursor 00896 ;If cursor is hidden, it shows cursor 00897 ;Cursor changes from 05 to 08 to 05 etc 00898 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02FA 300A 00899 MOVLW 0A ;Ten loops of routine 02FB 00A3 00900 MOVWF 23H ;Loop file 02FC 3030 00901 MOVLW 30H ;Start of files for board 02FD 0084 00902 MOVWF 04 ;Load start into FSR 02FE 1C00 00903 MAIN19 BTFSS 00,0 ;Test bit0 of INDF 02FF 2B05 00904 GOTO MAIN20 0300 1D00 00905 BTFSS 00,2 ;Is bit2 = HIGH? 0301 2B05 00906 GOTO MAIN20 0302 3008 00907 MOVLW 08 ;File contains cursor. Put 08 into file to "hide" 0303 0080 00908 MOVWF 00 ;08 will be put into a file 30h to 39h 0304 2AA6 00909 GOTO MAIN ;Cursor has been hiden 0305 0A84 00910 MAIN20 INCF 04,1 ;Increment pointer 0306 0BA3 00911 DECFSZ 23H,1 ;Decrement loop file 0307 2AFE 00912 GOTO MAIN19 0308 3030 00913 MOVLW 30H ;Start of files for board 0309 0084 00914 MOVWF 04 ;Load start into FSR 030A 1980 00915 MAIN21 BTFSC 00,3 ;Look for "8" in a file 030B 2B0E 00916 GOTO MAIN22 030C 0A84 00917 INCF 04,1 ;Increment the pointer 030D 2B0A 00918 GOTO MAIN21 030E 3005 00919 MAIN22 MOVLW 05 ;Put 5 in file looked at by FSR 030F 0080 00920 MOVWF 00H 0310 0AA8 00921 INCF 28H ;Increment the RANDOM NUMBER file 0311 0AA8 00922 INCF 28H 0312 227E 00923 CALL STALE 0313 2AA6 00924 GOTO MAIN 00925 00926 00927 END ;Tells assembler end of program MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 19 SYMBOL TABLE LABEL VALUE ADEN 00000003 ATT 0000008A ATT1 0000008C ATT10 000000DD ATT11 000000E2 ATT12 000000E9 ATT2 00000090 ATT3 0000009F ATT4 000000AE ATT5 000000BF ATT6 000000C2 ATT7 000000C7 ATT8 000000CE ATT9 000000DA BRGH 00000002 BUTA1 00000130 BUTA2 00000137 BUTA3 00000139 BUTA4 00000141 BUTA5 00000142 BUTA6 00000149 BUTAA 0000012E BUTB1 00000155 BUTB2 0000015D BUTB3 00000162 BUTTONA 0000011B BUTTONB 00000150 C 00000000 C1INV 00000004 C1OUT 00000006 C2INV 00000005 C2OUT 00000007 CCP1CON 00000017 CCP1IE 00000002 CCP1IF 00000002 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCP1X 00000005 CCP1Y 00000004 CCPR1H 00000016 CCPR1L 00000015 CENTER 0000020E CIS 00000003 CM0 00000000 CM1 00000001 CM2 00000002 CMCON 0000001F CMIE 00000006 CMIF 00000006 CORNER 000001FA CORNER1 000001FE MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 20 SYMBOL TABLE LABEL VALUE CREN 00000004 CSRC 00000007 CWIN 000001B0 CWIN1 000001B2 CWIN2 000001B5 CWIN3 000001C2 CWIN4 000001C8 CWIN5 000001D3 DC 00000001 DEL1 00000166 DEL2 0000016A DIVIDE 0000022A EEADR 0000009B EECON1 0000009C EECON2 0000009D EEDATA 0000009A EEIE 00000007 EEIF 00000007 F 00000001 FERR 00000002 FORK 00000214 FORKA 0000021A FORKB 0000021E FSR 00000004 GIE 00000007 INDF 00000000 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IRP 00000007 LOOK4 0000024B LOOK4A 0000024D LOOK4B 00000250 LOOK4C 0000025C LOOK4G 00000264 LOOK4H 0000026D LOOK4L 0000025B MAIN 000002A6 MAIN1 000002B3 MAIN10 000002D3 MAIN11 000002D6 MAIN12 000002D9 MAIN13 000002E1 MAIN14 000002E4 MAIN15 000002E7 MAIN16 000002EA MAIN17 000002ED MAIN18 000002F0 MAIN19 000002FE MAIN2 000002B6 MAIN20 00000305 MAIN21 0000030A MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 21 SYMBOL TABLE LABEL VALUE MAIN22 0000030E MAIN3 000002B9 MAIN4 000002BC MAIN5 000002BF MAIN6 000002C2 MAIN7 000002CA MAIN8 000002CD MAIN9 000002D0 MAINA 000002A8 MAINB 000002AC MAINC 000002B0 NOT_BO 00000000 NOT_BOD 00000000 NOT_BOR 00000000 NOT_PD 00000003 NOT_POR 00000001 NOT_RBPU 00000007 NOT_T1SYNC 00000002 NOT_TO 00000004 OERR 00000001 OPTION_REG 00000081 OSCF 00000003 PCL 00000002 PCLATH 0000000A PCON 0000008E PEIE 00000006 PIE1 0000008C PIR1 0000000C PORTA 00000005 PORTB 00000006 PR2 00000092 PRELOAD 00000295 PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 PWIN 00000179 PWIN1 0000017F PWIN2 00000185 PWIN21 000001AD PWIN3 0000018B PWIN4 00000191 PWIN5 00000197 PWIN6 0000019D PWIN7 000001A3 PWIN8 000001A9 RANDOM 00000270 RANDOM1 00000272 RAST1 000000F8 RAST2 000000FA RASTER 000000F6 RBIE 00000003 RBIF 00000000 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 22 SYMBOL TABLE LABEL VALUE RCIE 00000005 RCIF 00000005 RCREG 0000001A RCSTA 00000018 RD 00000000 RP0 00000005 RP1 00000006 RX9 00000006 RX9D 00000000 SETUP 00000000 SPBRG 00000099 SPEN 00000007 SREN 00000005 STALE 0000027E STALE1 00000284 STATUS 00000003 STOP 000001D5 STOP1 000001D7 STOP2 000001DA STOP2A 000001DD STOP3 000001E8 STOP4 000001EA STOP5 000001F0 STOP6 000001F8 SYNC 00000004 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000010 T1OSCEN 00000003 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 00000012 TABLE1 0000000B TABLE2 00000028 TABLE3 00000032 TABLE4 00000045 TABLE5 00000078 TMR0 00000001 TMR1CS 00000001 TMR1H 0000000F TMR1IE 00000000 TMR1IF 00000000 TMR1L 0000000E TMR1ON 00000000 TMR2 00000011 TMR2IE 00000001 TMR2IF 00000001 TMR2ON 00000002 TOUTPS0 00000003 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 23 SYMBOL TABLE LABEL VALUE TOUTPS1 00000004 TOUTPS2 00000005 TOUTPS3 00000006 TRISA 00000085 TRISB 00000086 TRMT 00000001 TX9 00000006 TX9D 00000000 TXEN 00000005 TXIE 00000004 TXIF 00000004 TXREG 00000019 TXSTA 00000098 VR0 00000000 VR1 00000001 VR2 00000002 VR3 00000003 VRCON 0000009F VREN 00000007 VROE 00000006 VRR 00000005 W 00000000 WR 00000001 WREN 00000002 WRERR 00000003 Z 00000002 _BODEN_OFF 00003FBF _BODEN_ON 00003FFF _CP_50 00002BFF _CP_75 000017FF _CP_ALL 000003FF _CP_OFF 00003FFF _ER_OSC_CLKOUT 00003FFF _ER_OSC_NOCLKOUT 00003FFE _EXTCLK_OSC 00003FEF _HS_OSC 00003FEE _INTRC_OSC_CLKOUT 00003FFD _INTRC_OSC_NOCLKOUT 00003FFC _LP_OSC 00003FEC _LVP_OFF 00003F7F _LVP_ON 00003FFF _MCLRE_OFF 00003FDF _MCLRE_ON 00003FFF _PWRTE_OFF 00003FFF _PWRTE_ON 00003FF7 _WDT_OFF 00003FFB _WDT_ON 00003FFF _XT_OSC 00003FED __16F628 00000001 MPASM 02.70 Released TTT-1.ASM 12-11-2002 21:08:06 PAGE 24 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0300 : XXXXXXXXXXXXXXXX XXXX------------ ---------------- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 788 Program Memory Words Free: 1260 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 7 suppressed