module pick2 Title 'Pick a move using heuristics' "PICK2 device 'P22V10'; " Inputs from PICK1 PLD PICK3..PICK0 pin 1..4; " Move, if any, from PICK1 PLD " Inputs from Tic-Tac-Toe grid corners X11, Y11, X13, Y13, X31, Y31, X33, Y33 pin 5..11, 13; " Combined inputs from external NOR gates; 1 ==> corresponding cell is empty E12, E21, E23, E32 pin 14..15, 22..23; " Move output MOVE3..MOVE0 pin 17..20 istype 'com'; PICK = [PICK3..PICK0]; " Set definition " Non-rotated move input and output encoding MOVE = [MOVE3..MOVE0]; MOVE11 = [1,0,0,0]; MOVE12 = [0,1,0,0]; MOVE13 = [0,0,1,0]; MOVE21 = [0,0,0,1]; MOVE22 = [1,1,0,0]; MOVE23 = [0,1,1,1]; MOVE31 = [1,0,1,1]; MOVE32 = [1,1,0,1]; MOVE33 = [1,1,1,0]; NONE = [0,0,0,0]; " Equations for empty corner cells E11 = !X11 & !Y11; E13 = !X13 & !Y13; E31 = !X31 & !Y31; E33 = !X33 & !Y33; equations "Simplest approach -- pick corner if available, else side WHEN PICK != NONE THEN MOVE = PICK; ELSE WHEN E11 THEN MOVE = MOVE11; ELSE WHEN E13 THEN MOVE = MOVE13; ELSE WHEN E31 THEN MOVE = MOVE31; ELSE WHEN E33 THEN MOVE = MOVE33; ELSE WHEN E12 THEN MOVE = MOVE12; ELSE WHEN E21 THEN MOVE = MOVE21; ELSE WHEN E23 THEN MOVE = MOVE23; ELSE WHEN E32 THEN MOVE = MOVE32; ELSE MOVE = NONE; end pick2