home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s199 / 1.img / CONTROL.ABL < prev    next >
Encoding:
Text File  |  1986-02-04  |  5.1 KB  |  123 lines

  1. module Control     flag '-r3'
  2. title 'BlackJack state machine controller
  3. Michael Holley  Data I/O Corp.  29 Sep 1984'
  4.  
  5.     BJ3A    device    'P16R6';
  6.  
  7. "Inputs
  8.     LT17,LT22    pin 2,3;    "Score less than 17 and 22
  9.     is_Ace        pin 4;        "Card is ace
  10.     CardIn,CardOut  pin 5,6;    "Card present switches
  11.     Restart        pin 7;        "Restart game
  12.     ClkIN        pin 8;        "System clock
  13.     Clk,Ena        pin 1,11;
  14.  
  15. "Outputs
  16.     AddClk        pin 12;        "Adder clock
  17.     Ace        pin 13;
  18.     Q3,Q2,Q1,Q0    pin 14,15,16,17;
  19.     Qstate        =  [Q3,Q2,Q1,Q0]; "state machine registers
  20.  
  21.     True,False    = 1,0;
  22.     High,Low    = 1,0;
  23.     H,L,C,X        = 1,0,.C.,.X.;    "test vector charactors
  24.  
  25. @include 'bjstate.tab'
  26.  
  27. @page 
  28. state_diagram Qstate
  29.  
  30.     State ShowHit:    !AddClk      = !Low;
  31.             Ace     := Ace;
  32.             if (CardIn==Low) then AddCard else ShowHit;
  33.  
  34.     State AddCard:    !AddClk      = ClkIN;
  35.             Ace     := Ace;
  36.             if (is_Ace & !Ace) then Add10  else Wait;
  37.  
  38.     State Add10:    !AddClk      = ClkIN;
  39.             Ace     := True;
  40.             goto      Wait;
  41.  
  42.     State Wait:    !AddClk      = !Low;
  43.             Ace     := Ace;
  44.             if (CardOut==Low) then Test17 else Wait;
  45.  
  46.     State Test17:    !AddClk      = !Low;
  47.             Ace     := Ace;
  48.             if LT17 then ShowHit else Test22;
  49.  
  50.     State Test22:    !AddClk      = !Low;
  51.             Ace     := Ace;
  52.             case     LT22        : ShowStand;
  53.                 !LT22 & !Ace    : ShowBust;
  54.                 !LT22 &  Ace    : Sub10;
  55.             endcase;
  56.  
  57.     State Sub10:    !AddClk      = ClkIN;
  58.             Ace     := False;
  59.             goto      Test17;
  60.  
  61.     State ShowBust:    !AddClk      = !Low;
  62.             Ace     := Ace;
  63.             if (Restart==Low) then Clear else ShowBust;
  64.  
  65.        State ShowStand:    !AddClk      = !Low;
  66.             Ace     := Ace;
  67.             if (Restart==Low) then Clear else ShowStand;
  68.  
  69.     State Clear:    !AddClk      = ClkIN;
  70.             Ace     := False;
  71.             if Restart then ShowHit else Clear;
  72.  
  73. @page 
  74. test_vectors 'Assume two cards that total between 16 and 21'
  75. ([Ena,Clk,ClkIN,LT17,LT22,is_Ace,Restart,CardIn,CardOut]->[Ace,Qstate,AddClk])
  76.    [L, C,   L,    H,   H,    L,     L,     H,       L  ]->[X,  Clear    ,H];
  77.    [L, C,   L,    H,   H,    L,     L,     H,       L  ]->[L,  Clear    ,H];
  78.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[L,  ShowHit  ,L];
  79.    [L, C,   L,    H,   H,    L,     H,     H,       H  ]->[L,  ShowHit  ,L];
  80.    [L, C,   L,    H,   H,    L,     H,     L,       H  ]->[L,  AddCard  ,H];
  81.    [L, C,   L,    H,   H,    L,     H,     L,       H  ]->[L,  Wait     ,L];
  82.    [L, C,   L,    H,   H,    L,     H,     H,       H  ]->[L,  Wait     ,L];
  83.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[L,  Test17   ,L];
  84.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[L,  ShowHit  ,L];
  85.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[L,  ShowHit  ,L];
  86.    [L, C,   L,    H,   H,    L,     H,     L,       H  ]->[L,  AddCard  ,H];
  87.    [L, C,   L,    L,   H,    L,     H,     L,       H  ]->[L,  Wait     ,L];
  88.    [L, C,   L,    L,   H,    L,     H,     H,       H  ]->[L,  Wait     ,L];
  89.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[L,  Test17   ,L];
  90.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[L,  Test22   ,L];
  91.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[L,  ShowStand,L];
  92.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[L,  ShowStand,L];
  93.    [L, C,   L,    L,   H,    L,     L,     H,       L  ]->[L,  Clear    ,H];
  94.  
  95. test_vectors 'Assume 2 Aces and another card that total between 16 and 21'
  96. ([Ena,Clk,ClkIN,LT17,LT22,is_Ace,Restart,CardIn,CardOut]->[Ace,Qstate,AddClk])
  97.    [L, C,   L,    H,   H,    L,     L,     H,       L  ]->[L,  Clear    ,H];
  98.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[L,  ShowHit  ,L];
  99.    [L, C,   L,    H,   H,    H,     H,     H,       H  ]->[L,  ShowHit  ,L];
  100.    [L, C,   L,    H,   H,    H,     H,     L,       H  ]->[L,  AddCard  ,H];
  101.    [L, C,   L,    H,   H,    H,     H,     L,       H  ]->[L,  Add10    ,H];
  102.    [L, C,   L,    H,   H,    H,     H,     L,       H  ]->[H,  Wait     ,L];
  103.    [L, C,   L,    H,   H,    L,     H,     H,       H  ]->[H,  Wait     ,L];
  104.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[H,  Test17   ,L];
  105.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[H,  ShowHit  ,L];
  106.    [L, C,   L,    H,   H,    L,     H,     H,       H  ]->[H,  ShowHit  ,L];
  107.    [L, C,   L,    H,   H,    H,     H,     L,       H  ]->[H,  AddCard  ,H];
  108.    [L, C,   L,    H,   H,    H,     H,     L,       H  ]->[H,  Wait     ,L];
  109.    [L, C,   L,    H,   H,    L,     H,     H,       H  ]->[H,  Wait     ,L];
  110.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[H,  Test17   ,L];
  111.    [L, C,   L,    H,   H,    L,     H,     H,       L  ]->[H,  ShowHit  ,L];
  112.    [L, C,   L,    H,   H,    L,     H,     H,       H  ]->[H,  ShowHit  ,L];
  113.    [L, C,   L,    H,   H,    L,     H,     L,       H  ]->[H,  AddCard  ,H];
  114.    [L, C,   L,    L,   H,    L,     H,     L,       H  ]->[H,  Wait     ,L];
  115.    [L, C,   L,    L,   H,    L,     H,     H,       H  ]->[H,  Wait     ,L];
  116.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[H,  Test17   ,L];
  117.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[H,  Test22   ,L];
  118.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[H,  ShowStand,L];
  119.    [L, C,   L,    L,   H,    L,     H,     H,       L  ]->[H,  ShowStand,L];
  120.    [L, C,   L,    L,   H,    L,     L,     H,       L  ]->[H,  Clear    ,H];
  121. end Control
  122.  
  123.