home *** CD-ROM | disk | FTP | other *** search
- module Control flag '-r3'
- title 'BlackJack state machine controller
- Michael Holley Data I/O Corp. 29 Sep 1984'
-
- BJ3A device 'P16R6';
-
- "Inputs
- LT17,LT22 pin 2,3; "Score less than 17 and 22
- is_Ace pin 4; "Card is ace
- CardIn,CardOut pin 5,6; "Card present switches
- Restart pin 7; "Restart game
- ClkIN pin 8; "System clock
- Clk,Ena pin 1,11;
-
- "Outputs
- AddClk pin 12; "Adder clock
- Ace pin 13;
- Q3,Q2,Q1,Q0 pin 14,15,16,17;
- Qstate = [Q3,Q2,Q1,Q0]; "state machine registers
-
- True,False = 1,0;
- High,Low = 1,0;
- H,L,C,X = 1,0,.C.,.X.; "test vector charactors
-
- @include 'bjstate.tab'
-
- @page
- state_diagram Qstate
-
- State ShowHit: !AddClk = !Low;
- Ace := Ace;
- if (CardIn==Low) then AddCard else ShowHit;
-
- State AddCard: !AddClk = ClkIN;
- Ace := Ace;
- if (is_Ace & !Ace) then Add10 else Wait;
-
- State Add10: !AddClk = ClkIN;
- Ace := True;
- goto Wait;
-
- State Wait: !AddClk = !Low;
- Ace := Ace;
- if (CardOut==Low) then Test17 else Wait;
-
- State Test17: !AddClk = !Low;
- Ace := Ace;
- if LT17 then ShowHit else Test22;
-
- State Test22: !AddClk = !Low;
- Ace := Ace;
- case LT22 : ShowStand;
- !LT22 & !Ace : ShowBust;
- !LT22 & Ace : Sub10;
- endcase;
-
- State Sub10: !AddClk = ClkIN;
- Ace := False;
- goto Test17;
-
- State ShowBust: !AddClk = !Low;
- Ace := Ace;
- if (Restart==Low) then Clear else ShowBust;
-
- State ShowStand: !AddClk = !Low;
- Ace := Ace;
- if (Restart==Low) then Clear else ShowStand;
-
- State Clear: !AddClk = ClkIN;
- Ace := False;
- if Restart then ShowHit else Clear;
-
- @page
- test_vectors 'Assume two cards that total between 16 and 21'
- ([Ena,Clk,ClkIN,LT17,LT22,is_Ace,Restart,CardIn,CardOut]->[Ace,Qstate,AddClk])
- [L, C, L, H, H, L, L, H, L ]->[X, Clear ,H];
- [L, C, L, H, H, L, L, H, L ]->[L, Clear ,H];
- [L, C, L, H, H, L, H, H, L ]->[L, ShowHit ,L];
- [L, C, L, H, H, L, H, H, H ]->[L, ShowHit ,L];
- [L, C, L, H, H, L, H, L, H ]->[L, AddCard ,H];
- [L, C, L, H, H, L, H, L, H ]->[L, Wait ,L];
- [L, C, L, H, H, L, H, H, H ]->[L, Wait ,L];
- [L, C, L, H, H, L, H, H, L ]->[L, Test17 ,L];
- [L, C, L, H, H, L, H, H, L ]->[L, ShowHit ,L];
- [L, C, L, H, H, L, H, H, L ]->[L, ShowHit ,L];
- [L, C, L, H, H, L, H, L, H ]->[L, AddCard ,H];
- [L, C, L, L, H, L, H, L, H ]->[L, Wait ,L];
- [L, C, L, L, H, L, H, H, H ]->[L, Wait ,L];
- [L, C, L, L, H, L, H, H, L ]->[L, Test17 ,L];
- [L, C, L, L, H, L, H, H, L ]->[L, Test22 ,L];
- [L, C, L, L, H, L, H, H, L ]->[L, ShowStand,L];
- [L, C, L, L, H, L, H, H, L ]->[L, ShowStand,L];
- [L, C, L, L, H, L, L, H, L ]->[L, Clear ,H];
-
- test_vectors 'Assume 2 Aces and another card that total between 16 and 21'
- ([Ena,Clk,ClkIN,LT17,LT22,is_Ace,Restart,CardIn,CardOut]->[Ace,Qstate,AddClk])
- [L, C, L, H, H, L, L, H, L ]->[L, Clear ,H];
- [L, C, L, H, H, L, H, H, L ]->[L, ShowHit ,L];
- [L, C, L, H, H, H, H, H, H ]->[L, ShowHit ,L];
- [L, C, L, H, H, H, H, L, H ]->[L, AddCard ,H];
- [L, C, L, H, H, H, H, L, H ]->[L, Add10 ,H];
- [L, C, L, H, H, H, H, L, H ]->[H, Wait ,L];
- [L, C, L, H, H, L, H, H, H ]->[H, Wait ,L];
- [L, C, L, H, H, L, H, H, L ]->[H, Test17 ,L];
- [L, C, L, H, H, L, H, H, L ]->[H, ShowHit ,L];
- [L, C, L, H, H, L, H, H, H ]->[H, ShowHit ,L];
- [L, C, L, H, H, H, H, L, H ]->[H, AddCard ,H];
- [L, C, L, H, H, H, H, L, H ]->[H, Wait ,L];
- [L, C, L, H, H, L, H, H, H ]->[H, Wait ,L];
- [L, C, L, H, H, L, H, H, L ]->[H, Test17 ,L];
- [L, C, L, H, H, L, H, H, L ]->[H, ShowHit ,L];
- [L, C, L, H, H, L, H, H, H ]->[H, ShowHit ,L];
- [L, C, L, H, H, L, H, L, H ]->[H, AddCard ,H];
- [L, C, L, L, H, L, H, L, H ]->[H, Wait ,L];
- [L, C, L, L, H, L, H, H, H ]->[H, Wait ,L];
- [L, C, L, L, H, L, H, H, L ]->[H, Test17 ,L];
- [L, C, L, L, H, L, H, H, L ]->[H, Test22 ,L];
- [L, C, L, L, H, L, H, H, L ]->[H, ShowStand,L];
- [L, C, L, L, H, L, H, H, L ]->[H, ShowStand,L];
- [L, C, L, L, H, L, L, H, L ]->[H, Clear ,H];
- end Control
-
-