⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jack1800.abl

📁 自己编写的GAL可编程逻辑电路的编译软件abel4的windows界面
💻 ABL
字号:
module JACK1800;
title 'BlackJack machine 
Adam Zilinskas Data I/O Corporation   3 Oct 1989'

        jack1800 device 'E1800';

"Inputs
        Ck1,Ck2,Ck3,Ck4         pin 17,19,51,53;
        V4,V3,V2,V1,V0          pin 14,15,16,20,21;
        Clr                     pin 22;
        CardIn,CardOut          pin 48,49;      

"Combintoral Outputs
        D5,D4,D3,D2,D1,D0       pin 68,67,66,65,64,63;
        Hit,Bust                pin 30,29;
        C4,C3,C2,C1             pin 10,11,12,13;

        D5,D4,D3,D2,D1,D0       istype 'pos,com';
        Hit,Bust                istype 'pos,com';
        C4,C3,C2,C1             istype 'pos,com';

"Registered Outputs
        Q2,Q1,Q0,Ace            pin 34,33,32,31;
        Add10,Sub10             pin 23,24;
        S4,S3,S2,S1,S0          pin 44,45,46,47,57;

        Add10,Sub10,Q2,Q1,Q0    istype 'pos,reg_d';
        Ace                     istype 'pos,reg_d';
        S4,S3,S2,S1,S0          istype 'pos,reg_t';

@ifdef _AHDL_
{
        Add10,Sub10,Q2,Q1,Q0	istype 'buffer'; 
        S4,S3,S2,S1,S0          istype 'buffer';
}

        X,C,L,H   = .X., .C., 0, 1;

        Clk       = [Ck1,Ck2,Ck3,Ck4];
        BCD2      = [D5,D4];
        BCD1      = [D3,D2,D1,D0];
        Card      = [V4,V3,V2,V1,V0];
        Score     = [S4,S3,S2,S1,S0];
        CarryIn   = [C4,C3,C2,C1, 0];
        CarryOut  = [ X,C4,C3,C2,C1];
        ten       = [ 0, 1, 0, 1, 0];
        minus_ten = [ 1, 0, 1, 1, 0];
        zero      = [ 0, 0, 0, 0, 0];

	" Input Multiplexer
        Data      =  Add10 &  Sub10 & Card 
                  #  Add10 & !Sub10 & ten
                  # !Add10 & !Sub10 & zero
                  # !Add10 &  Sub10 & minus_ten;

equations

        [Add10,Sub10,Q2,Q1,Q0].CLK = Ck1;
        Ace.CLK = Ck2;
        [S4,S3,S2,S1,S0].CLK = Ck3;

equations
        CarryOut  = Data & Score # (Data # Score) & CarryIn;  

@ifdef _ABELHDL_
{
        Score.t   = Data $ CarryIn;
}
@ifndef _ABELHDL_
{
        Score    := Data $ CarryIn;
}

	Score.ar  = !Clr;

equations
        Bust      = (Score > 21);

        Hit       = (Score < 17);

@page 
declarations
        Sensor    = [CardIn,CardOut];
        _In       = [  0   ,   1   ];
        InOut     = [  1   ,   1   ];
        Out       = [  1   ,   0   ];

        Qstate    =  [Add10,Sub10,Q2,Q1,Q0]; 
        Clear     =  [  0  ,  0  , 0, 0, 0]; 
        ShowHit   =  [  0  ,  0  , 0, 0, 1]; 
        AddCard   =  [  1  ,  1  , 0, 1, 1]; 
        Add_10    =  [  1  ,  0  , 0, 1, 0]; 
        Wait      =  [  0  ,  0  , 0, 1, 0]; 
        Test_17   =  [  0  ,  0  , 1, 1, 0]; 
        Test_22   =  [  0  ,  0  , 1, 1, 1]; 
        ShowStand =  [  0  ,  0  , 1, 0, 1]; 
        ShowBust  =  [  0  ,  0  , 1, 0, 0]; 
        Sub_10    =  [  0  ,  1  , 1, 1, 1]; 

        is_Ace    = (Card == 1);
        
        High,Low  = 1,0;

equations
	Qstate.ar = !Clr;
	Ace.ar    = !Clr;

state_diagram Qstate
        State Clear:    Ace      := Low;
                        goto ShowHit;

        State ShowHit:  Ace      := Ace;
                        if (CardIn==Low) then AddCard else ShowHit;

        State AddCard:  Ace      := Ace;
                        if (is_Ace & !Ace) then Add_10 else Wait;

        State Add_10:   Ace      := High;
                        goto      Wait;

        State Wait:     Ace      := Ace;
                        if (CardOut==Low) then Test_17 else Wait;

        State Test_17:  Ace      := Ace;
                        if Hit then ShowHit else Test_22;

        State Test_22:  Ace      := Ace;
                        case    !Bust   : ShowStand;
                                 Bust & !Ace    : ShowBust;
                                 Bust &  Ace    : Sub_10;
                        endcase;

        State Sub_10:   Ace      := Low;
                        goto      Test_17;

        State ShowBust: Ace      := Ace;
                        goto ShowBust;   "Loop until reset

       State ShowStand: Ace      := Ace;
                        goto ShowStand;  "Loop until reset

@page 
declarations
	" Digit separation macros
        binary          = 0;            "scratch variable
        clear   macro (a) {@const ?a=0};
        inc     macro (a) {@const ?a=?a+1;};

truth_table ( Score -> [BCD2,BCD1])
        clear(binary);
        @repeat 32 {
                binary -> [binary/10,binary%10]; inc(binary);}

test_vectors 'Assume two cards that total between 16 and 21'
([Clr,Clk,Sensor,Card] -> [Qstate   ,Score,Hit,Bust,BCD2,BCD1])
 [ L , C ,  Out ,  0 ] -> [Clear    ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ L , C ,  Out ,  0 ] -> [Clear    ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,  Out ,  9 ] -> [ShowHit  ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,InOut ,  9 ] -> [ShowHit  ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,  _In ,  9 ] -> [AddCard  ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,  _In ,  9 ] -> [Wait     ,  9  , 1 ,  0 ,  0 ,  9 ];
 [ H , C ,InOut ,  9 ] -> [Wait     ,  9  , 1 ,  0 ,  0 ,  9 ];
 [ H , C ,  Out ,  9 ] -> [Test_17  ,  9  , 1 ,  0 ,  0 ,  9 ];
 [ H , C ,  Out ,  0 ] -> [ShowHit  ,  9  , 1 ,  0 ,  0 ,  9 ];
 [ H , C ,  Out ,  8 ] -> [ShowHit  ,  9  , 1 ,  0 ,  0 ,  9 ];
 [ H , C ,  _In ,  8 ] -> [AddCard  ,  9  , 1 ,  0 ,  0 ,  9 ];
 [ H , C ,  _In ,  8 ] -> [Wait     , 17  , 0 ,  0 ,  1 ,  7 ];
 [ H , C ,InOut ,  8 ] -> [Wait     , 17  , 0 ,  0 ,  1 ,  7 ];
 [ H , C ,  Out ,  8 ] -> [Test_17  , 17  , 0 ,  0 ,  1 ,  7 ];
 [ H , C ,  Out ,  0 ] -> [Test_22  , 17  , 0 ,  0 ,  1 ,  7 ];
 [ H , C ,  Out ,  0 ] -> [ShowStand, 17  , 0 ,  0 ,  1 ,  7 ];
 [ H , C ,  Out ,  0 ] -> [ShowStand, 17  , 0 ,  0 ,  1 ,  7 ];
 [ L , C ,  Out ,  0 ] -> [Clear    ,  0  , 1 ,  0 ,  0 ,  0 ];

@page 

test_vectors 'Assume 2 Aces and 3 cards that total over 21'
([Clr,Clk,Sensor,Card] -> [Qstate   ,Score,Hit,Bust,BCD2,BCD1])
 [ L , C ,  Out ,  0 ] -> [Clear    ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ L , C ,  Out ,  0 ] -> [Clear    ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,  Out ,  4 ] -> [ShowHit  ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,InOut ,  4 ] -> [ShowHit  ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,  _In ,  4 ] -> [AddCard  ,  0  , 1 ,  0 ,  0 ,  0 ];
 [ H , C ,  _In ,  4 ] -> [Wait     ,  4  , 1 ,  0 ,  0 ,  4 ];
 [ H , C ,InOut ,  4 ] -> [Wait     ,  4  , 1 ,  0 ,  0 ,  4 ];
 [ H , C ,  Out ,  4 ] -> [Test_17  ,  4  , 1 ,  0 ,  0 ,  4 ];
 [ H , C ,  Out ,  0 ] -> [ShowHit  ,  4  , 1 ,  0 ,  0 ,  4 ];
 [ H , C ,  Out ,  1 ] -> [ShowHit  ,  4  , 1 ,  0 ,  0 ,  4 ];
 [ H , C ,  _In ,  1 ] -> [AddCard  ,  4  , 1 ,  0 ,  0 ,  4 ];
 [ H , C ,  _In ,  1 ] -> [Add_10   ,  5  , 1 ,  0 ,  0 ,  5 ];
 [ H , C ,  _In ,  1 ] -> [Wait     , 15  , 1 ,  0 ,  1 ,  5 ];
 [ H , C ,InOut ,  1 ] -> [Wait     , 15  , 1 ,  0 ,  1 ,  5 ];
 [ H , C ,  Out ,  1 ] -> [Test_17  , 15  , 1 ,  0 ,  1 ,  5 ];
 [ H , C ,  Out ,  0 ] -> [ShowHit  , 15  , 1 ,  0 ,  1 ,  5 ];
 [ H , C ,InOut ,  1 ] -> [ShowHit  , 15  , 1 ,  0 ,  1 ,  5 ];
 [ H , C ,  _In ,  1 ] -> [AddCard  , 15  , 1 ,  0 ,  1 ,  5 ];
 [ H , C ,  _In ,  1 ] -> [Wait     , 16  , 1 ,  0 ,  1 ,  6 ];
 [ H , C ,InOut ,  1 ] -> [Wait     , 16  , 1 ,  0 ,  1 ,  6 ];
 [ H , C ,  Out ,  0 ] -> [Test_17  , 16  , 1 ,  0 ,  1 ,  6 ];
 [ H , C ,  Out ,  0 ] -> [ShowHit  , 16  , 1 ,  0 ,  1 ,  6 ];
 [ H , C ,InOut ,  9 ] -> [ShowHit  , 16  , 1 ,  0 ,  1 ,  6 ];
 [ H , C ,  _In ,  9 ] -> [AddCard  , 16  , 1 ,  0 ,  1 ,  6 ];
 [ H , C ,  _In ,  9 ] -> [Wait     , 25  , 0 ,  1 ,  2 ,  5 ];
 [ H , C ,InOut ,  9 ] -> [Wait     , 25  , 0 ,  1 ,  2 ,  5 ];
 [ H , C ,  Out ,  9 ] -> [Test_17  , 25  , 0 ,  1 ,  2 ,  5 ];
 [ H , C ,  Out ,  0 ] -> [Test_22  , 25  , 0 ,  1 ,  2 ,  5 ]; 
 [ H , C ,  Out ,  0 ] -> [Sub_10   , 25  , 0 ,  1 ,  2 ,  5 ]; 
 [ H , C ,  Out ,  0 ] -> [Test_17  , 15  , 1 ,  0 ,  1 ,  5 ];
 [ H , C ,  Out ,  0 ] -> [ShowHit  , 15  , 1 ,  0 ,  1 ,  5 ]; 
 [ H , C ,InOut ,  8 ] -> [ShowHit  , 15  , 1 ,  0 ,  1 ,  5 ]; 
 [ H , C ,  _In ,  8 ] -> [AddCard  , 15  , 1 ,  0 ,  1 ,  5 ]; 
 [ H , C ,  _In ,  8 ] -> [Wait     , 23  , 0 ,  1 ,  2 ,  3 ]; 
 [ H , C ,InOut ,  8 ] -> [Wait     , 23  , 0 ,  1 ,  2 ,  3 ]; 
 [ H , C ,  Out ,  8 ] -> [Test_17  , 23  , 0 ,  1 ,  2 ,  3 ]; 
 [ H , C ,  Out ,  0 ] -> [Test_22  , 23  , 0 ,  1 ,  2 ,  3 ]; 
 [ H , C ,  Out ,  0 ] -> [ShowBust , 23  , 0 ,  1 ,  2 ,  3 ]; 
 [ H , C ,  Out ,  0 ] -> [ShowBust , 23  , 0 ,  1 ,  2 ,  3 ]; 
 [ L , C ,  Out ,  0 ] -> [Clear    ,  0  , 1 ,  0 ,  0 ,  0 ]; 

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -