;; Emacs Mode Selection Info: -*-mode: ASM; coding: iso-latin-1-dos;-*- * ;; ******************************************************************************************** ;; File Name: LookForCorner ;; Auther: John L. Weinrich ;; Date: 01/31/03 ;; Useage 4004 TIC-TAC-TOE Game ;; Description: ;; ;; This routine is used for the 4004 TIC-TAC-TOE Game. ;; ;; Assumptions: ;; This assembly code and all the included files assume the following: ;; ;; RAM Memory: 2048 X 4 (8 RAM banks, 4 RAMs/bank, 4 registers/RAM, 16 Char/Reg) ;; 256 status characters. ;; 2 I/O Port ;; RAM1: SPEAKER PITCH/write ;; RAM2: SPEAKER LEVEL/write ;; ;; ROM Memory: 4096 X 8 (16 ROMs @ 256 locations ;; 11 I/O Ports (3 - R/W, 4- Read, 4 - Write) ;; ROM0: MISC/read ;; ROM0: MISC/write ;; ROM3: DISPLAY HIGH IN/read ;; ROM3: DISPLAY HIGH OUT/write ;; ROM4: DISPLAY LOW IN/read ;; ROM4: DISPLAY LOW OUT/write ;; ROM5: KEYBOARD HIGH INPUT/read ;; ROM6: KEYBOARD LOW INPUT/read ;; ROM7: MISC2/write ;; ROM8: PAGE/write ;; ROM9: RANDOM NUMBER GENERATOR/read ;; ROM10: FPGA VERSION/read ;; ;; See "4004 FPGA Design" and "4004 Software Design " documents for more detail information. ;; ;; Registers used: ;; Memory used: ;; Entrance parameters: ;; Exit parameters: ;; Labels used: ;; ******************************************************************************************** ;; Determine if 4004 is X or O ;; LookForCornerO ldm RAM_BANK_0 ; Select RAM bank 0 dcl ; Send out RAM bank selection fim SRC_P,PLAYER_MARK_RAM ; Select player mark charactor src SRC_P ; Tell RAM of selection clb ; Make sure it is all clear rdm ; Get player mark charactor from RAM dac ; Decrement to see if X jcn Z,CheckCornX ; Check for X jun CheckCornO ; Not X but O LookForCornerS ldm RAM_BANK_0 ; Select RAM bank 0 dcl ; Send out RAM bank selection fim SRC_P,PLAYER_MARK_RAM ; Select player mark charactor src SRC_P ; Tell RAM of selection clb ; Make sure it is all clear rdm ; Get player mark charactor from RAM dac ; Decrement to see if X jcn NZ,CheckCornX ; Check for X jun CheckCornO ; Not X but O LookForCornerA jms Check1O jcn NZ,CheckNextA1 jms Check1X jcn NZ,CheckNextA1 fim UTILITY_1_P,POS1_RAM ; bbl REPORT_SUCCESS ; CheckNextA1 jms Check3O jcn NZ,CheckNextA2 jms Check3X jcn NZ,CheckNextA2 fim UTILITY_1_P,POS3_RAM ; bbl REPORT_SUCCESS ; CheckNextA2 jms Check7O jcn NZ,CheckNextA3 jms Check7X jcn NZ,CheckNextA3 fim UTILITY_1_P,POS7_RAM ; bbl REPORT_SUCCESS ; CheckNextA3 jms Check9O jcn NZ,NoCorner jms Check9X jcn NZ,NoCorner fim UTILITY_1_P,POS9_RAM ; bbl REPORT_SUCCESS ; NoCorner bbl REPORT_FAILURE ;; Check for opponent in corners ;; If opponent, select opposite corner CheckCornX nop CheckCornX19 jms Check1O ; Check opponent for position 1 jcn NZ,CheckCornX9 jun CheckCornX91 CheckCornX9 jms Check9O jcn NZ,CheckCornX37 jms Check9X jcn NZ,CheckCornX37 fim UTILITY_1_P,POS9_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; CheckCornX91 jms Check9O ; Check opponent for position 9 jcn NZ,CheckCornX1 jun CheckCornX37 CheckCornX1 jms Check1O jcn NZ,CheckCornX37 jms Check1X jcn NZ,CheckCornX37 fim UTILITY_1_P,POS1_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; CheckCornX37 jms Check3O ; Check opponent for position 3 jcn NZ,CheckCornX7 jun CheckCornX73 CheckCornX7 jms Check7O jcn NZ,CheckCornX73 jms Check7X jcn NZ,CheckCornX73 fim UTILITY_1_P,POS7_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; CheckCornX73 jms Check7O ; Check opponent for position 7 jcn NZ,CheckCornX3 jun NoCornX CheckCornX3 jms Check3O jcn NZ,NoCornX jms Check3X jcn NZ,NoCornX fim UTILITY_1_P,POS3_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; CheckCornO nop CheckCornO19 jms Check1X ; Check opponent for position 1 jcn NZ,CheckCornO9 jun CheckCornO91 CheckCornO9 jms Check9X jcn NZ,CheckCornO37 jms Check9O jcn NZ,CheckCornO37 fim UTILITY_1_P,POS9_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; CheckCornO91 jms Check9X ; Check opponent for position 9 jcn NZ,CheckCornO1 jun CheckCornO37 CheckCornO1 jms Check1X jcn NZ,CheckCornO37 jms Check1O jcn NZ,CheckCornO37 fim UTILITY_1_P,POS1_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; CheckCornO37 jms Check3X ; Check opponent for position 3 jcn NZ,CheckCornO7 jun CheckCornO73 CheckCornO7 jms Check7X jcn NZ,CheckCornO73 jms Check7O jcn NZ,CheckCornO73 fim UTILITY_1_P,POS7_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; CheckCornO73 jms Check7X ; Check opponent for position 7 jcn NZ,CheckCornO3 jun NoCornO CheckCornO3 jms Check3X jcn NZ,NoCornO jms Check3O jcn NZ,NoCornO fim UTILITY_1_P,POS3_RAM ; Select RAM game board position bbl REPORT_SUCCESS ; NoCornO bbl REPORT_FAILURE NoCornX bbl REPORT_FAILURE