OpenCores
URL https://opencores.org/ocsvn/ag_6502/ag_6502/trunk

Subversion Repositories ag_6502

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/ag_6502/trunk/ag_6502/states.v
0,0 → 1,337
// This file has been generated automatically
// by the GenStates tool
// Copyright (c) Oleg Odintsov
// This tool is a part of Agat hardware project
 
// Level of optimization: infinite
// Total number of actions: 82
wire E_AB__PC;
wire E_AB__EA;
wire E_AB__S;
wire E_PC__PC_1;
wire E_T__0;
wire E_N_Z__SB;
wire E_N_Z__RES;
wire E_N_Z__SB_RES;
wire E_C__RES;
wire E_V__RES;
wire E_V__SB_6_;
wire A_ALU_CF_0;
wire A_ALU_DF_0;
wire A_ALU_OP_ADC;
wire A_SB_0;
wire A_ALU_B_SB;
wire A_ALU_CF_1;
wire A_ALU_CF_ALUC;
wire A_ALU_B_NOTSB;
wire A_ALU_OP_ORA;
wire A_ALU_A_DB;
wire A_SB_X;
wire A_ALU_A_EAL;
wire A_SB_PCL;
wire A_SB_Y;
wire A_ALU_A_ALU;
wire A_ALU_A_S;
wire E_CF__IR_5_;
wire E_IF__IR_5_;
wire E_DF__IR_5_;
wire E_VF__0;
wire E_T__0IFNF__IR_5_;
wire E_T__0IFVF__IR_5_;
wire E_T__0IFCF__IR_5_;
wire E_T__0IFZF__IR_5_;
wire E_EA__DB;
wire E_EAL__DB;
wire E_PCL__RES;
wire E_T__0IF_C7F;
wire A_ALU_A_SIGN;
wire A_SB_PCH;
wire E_PCH__RES;
wire E_EAH__DB;
wire E_EAL__ALU;
wire E_T__T_1IF_ALUCZ;
wire E_EAH__ALU;
wire E_PCL__ALU;
wire A_SB_DB;
wire E_AC__SB;
wire A_ALU_A_AC;
wire E_AC__RES;
wire A_ALU_OP_AND;
wire A_ALU_OP_EOR;
wire A_ALU_A_X;
wire A_ALU_A_Y;
wire A_ALU_DF_D;
wire A_ALU_CF_C;
wire A_ALU_OP_ASL;
wire A_RW_W;
wire A_SB_ALU;
wire E_DB__SB;
wire A_ALU_OP_LSR;
wire A_ALU_OP_ROL;
wire A_ALU_OP_ROR;
wire A_SB_AC;
wire E_X__SB;
wire E_Y__SB;
wire A_SB_S;
wire E_S__SB;
wire E_PC__EA;
wire E_S__ALU;
wire A_SB_P;
wire E_P__SB;
wire E_X__RES;
wire E_Y__RES;
wire E_DB__ALU;
wire E_DB__PCH;
wire E_PCL__EAL;
wire E_DB__PCL;
wire E_DB__P;
wire E_P__DB;
wire E_PCL__DB;
 
// Actions assignments
 
// action: AB <= PC:
assign E_AB__PC = (!L[10] && ((!L[0] && ((!L[1] && ((!L[2] && ((!L[9] && (!L[3] || (L[3] && ((!L[4] && (!L[7] || ({L[7],L[8]} == 2'b10))) || (L[4] && ((!L[5] && ((!L[6] && (!L[8] || ({L[7],L[8]} == 2'b01))) || L[6])) || L[5])))))) || ({L[3],L[4],L[9]} == 3'b011))) || (L[2] && (!L[9] || ({L[3],L[8],L[9]} == 3'b101))))) || (L[1] && ((!L[9] && ((!L[2] && ((!L[8] && (({L[3],L[4],L[7]} == 3'b001) || L[3])) || ({L[3],L[4],L[7],L[8]} == 4'b0011))) || L[2])) || ({L[2],L[3],L[8],L[9]} == 4'b1101))))) || (L[0] && ((!L[9] && (!L[1] || (L[1] && ((!L[2] && (!L[3] || (L[3] && ((!L[4] && ((!L[5] && ((!L[6] && (!L[8] || ({L[7],L[8]} == 2'b01))) || L[6])) || L[5])) || L[4])))) || L[2])))) || (({L[3],L[8],L[9]} == 3'b101) && (({L[2],L[4]} == 2'b01) || L[2])))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[7],L[8],L[9],L[10]} == 10'b0000010101);
 
// action: AB <= EA:
assign E_AB__EA = (({L[9],L[10]} == 2'b01) && ((!L[2] && (({L[0],L[1],L[3],L[4],L[5],L[6],L[7],L[8]} == 8'b00000001) || (L[0] && (!L[3] || ({L[3],L[4],L[8]} == 3'b110))))) || (({L[2],L[3],L[8]} == 3'b110) && (({L[0],L[1],L[4],L[5],L[6],L[7]} == 6'b000110) || L[4])))) || (L[9] && ((!L[10] && ((({L[0],L[2]} == 2'b01) && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || ({L[3],L[8]} == 2'b11))) || (L[0] && ((!L[3] && ((!L[1] && (!L[2] || (L[2] && (({L[4],L[8]} == 2'b00) || L[4])))) || (L[1] && (!L[2] || (L[2] && (({L[4],L[8]} == 2'b00) || L[4])))))) || (({L[3],L[8]} == 2'b11) && (({L[2],L[4]} == 2'b01) || L[2])))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[10]} == 10'b0000000001)));
 
// action: AB <= S:
assign E_AB__S = (({L[0],L[1],L[2],L[3],L[4],L[7],L[9],L[10]} == 8'b00000001) && (!L[8] || ({L[5],L[6],L[8]} == 3'b011))) || (({L[0],L[1],L[2],L[4],L[7],L[9],L[10]} == 7'b0000010) && (!L[3] || (L[3] && (({L[5],L[8]} == 2'b00) || L[5]))));
 
// action: PC <= PC + 1:
assign E_PC__PC_1 = (!L[10] && ((!L[9] && ((!L[0] && ((!L[1] && ((!L[2] && (!L[8] || (({L[3],L[8]} == 2'b01) && ((!L[4] && (({L[5],L[6],L[7]} == 3'b100) || L[7])) || L[4])))) || L[2])) || (L[1] && ((!L[2] && ((!L[8] && (({L[3],L[4],L[7]} == 3'b001) || L[3])) || ({L[3],L[4],L[7],L[8]} == 4'b0011))) || L[2])))) || (L[0] && (!L[1] || (L[1] && ((!L[2] && (!L[3] || (L[3] && ((!L[4] && ((!L[5] && ((!L[6] && (!L[8] || ({L[7],L[8]} == 2'b01))) || L[6])) || L[5])) || L[4])))) || L[2])))))) || (({L[3],L[8],L[9]} == 3'b101) && (({L[0],L[2],L[4]} == 3'b101) || (L[2] && ((!L[0] && ((!L[1] && ((!L[4] && (!L[5] || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))) || L[4])) || L[1])) || L[0])))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000110101);
 
// action: T <= 0:
assign E_T__0 = (!L[0] && ((!L[1] && ((!L[2] && ((!L[10] && ((({L[3],L[8],L[9]} == 3'b101) && (({L[4],L[5],L[7]} == 3'b000) || (L[4] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))) || (L[8] && ((({L[7],L[9]} == 2'b01) && (({L[3],L[4],L[5]} == 3'b101) || ({L[3],L[4]} == 2'b01))) || (L[7] && ((!L[9] && (!L[4] || ({L[3],L[4],L[5],L[6]} == 4'b1100))) || ({L[3],L[4],L[9]} == 3'b011))))))) || (({L[3],L[4],L[7],L[10]} == 4'b0001) && (({L[5],L[6],L[8],L[9]} == 4'b0001) || (({L[8],L[9]} == 2'b10) && (({L[5],L[6]} == 2'b01) || L[5])))))) || (L[2] && ((({L[3],L[8],L[9],L[10]} == 4'b1001) && (({L[4],L[5],L[6],L[7]} == 4'b0110) || L[4])) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || (({L[3],L[8]} == 2'b11) && (!L[5] || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))))) || ({L[3],L[4],L[8]} == 3'b011))))))) || (L[1] && ((({L[2],L[8],L[9],L[10]} == 4'b0100) && (({L[3],L[4],L[7]} == 3'b001) || L[3])) || (L[2] && ((({L[6],L[7],L[9],L[10]} == 4'b0110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))) || (L[10] && ((!L[9] && ((!L[3] && ((({L[4],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[4],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[3] && (({L[4],L[6],L[7],L[8]} == 4'b1010) || (({L[4],L[8]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[3],L[4],L[8],L[9]} == 4'b1101) && (({L[6],L[7]} == 2'b00) || L[6])))))))))) || (L[0] && ((!L[9] && ((!L[2] && (({L[3],L[4],L[8],L[10]} == 4'b1101) || (L[8] && ((!L[4] && (({L[3],L[10]} == 2'b01) || ({L[3],L[10]} == 2'b10))) || ({L[3],L[4],L[10]} == 3'b011))))) || ({L[2],L[3],L[4],L[8],L[10]} == 5'b11101))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101)))));
 
// action: N,Z <= SB:
assign E_N_Z__SB = (({L[6],L[7]} == 2'b01) && ((({L[0],L[2],L[3],L[5],L[8],L[9],L[10]} == 7'b0010100) && (({L[1],L[4]} == 2'b01) || ({L[1],L[4]} == 2'b10))) || (L[5] && ((!L[9] && ((!L[2] && (({L[0],L[1],L[3],L[4],L[8],L[10]} == 6'b101101) || (L[8] && ((!L[10] && ((!L[4] && (({L[0],L[3]} == 2'b00) || L[3])) || ({L[0],L[1],L[3],L[4]} == 4'b0111))) || ({L[0],L[3],L[10]} == 3'b101))))) || ({L[2],L[3],L[4],L[8],L[10]} == 5'b11101))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101))))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010110110);
 
// action: N,Z <= RES:
assign E_N_Z__RES = (!L[9] && ((({L[2],L[4],L[8],L[10]} == 4'b0010) && (({L[0],L[1],L[3],L[6],L[7]} == 5'b00011) || (L[3] && ((!L[0] && ((({L[1],L[7]} == 2'b01) && (({L[5],L[6]} == 2'b00) || L[6])) || (L[1] && (!L[7] || ({L[5],L[6],L[7]} == 3'b011))))) || (L[0] && (({L[1],L[6],L[7]} == 3'b000) || (L[6] && (({L[1],L[5]} == 2'b00) || (L[5] && (({L[1],L[7]} == 2'b00) || L[7])))))))))) || (L[10] && ((({L[0],L[1],L[2]} == 3'b011) && ((({L[3],L[4],L[8]} == 3'b010) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[3] && ((({L[4],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[4],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[0],L[1]} == 2'b10) && ((({L[2],L[3],L[4],L[8]} == 4'b0001) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[4] && ((({L[2],L[3],L[8]} == 3'b001) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b10) && (({L[6],L[7]} == 2'b00) || L[6])))))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[1] && ((({L[0],L[4],L[6],L[7]} == 4'b0011) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (L[0] && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[3],L[4],L[8]} == 3'b011) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[0],L[1],L[3],L[4],L[8]} == 5'b01001) && (({L[6],L[7]} == 2'b00) || L[6]))));
 
// action: N,Z <= SB,RES:
assign E_N_Z__SB_RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00100100010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110100110);
 
// action: C <= RES:
assign E_C__RES = (({L[0],L[1],L[6],L[7]} == 4'b0100) && (({L[2],L[3],L[4],L[8],L[9],L[10]} == 6'b010100) || (L[2] && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110))))) || (L[6] && ((!L[9] && ((({L[2],L[4],L[8],L[10]} == 4'b0010) && (({L[0],L[1],L[3],L[7]} == 4'b0001) || (L[3] && (({L[0],L[1],L[7]} == 3'b010) || (L[0] && (({L[1],L[5],L[7]} == 3'b001) || (L[5] && (({L[1],L[7]} == 2'b00) || L[7])))))))) || (L[10] && ((({L[0],L[1],L[2],L[7]} == 4'b0110) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || (({L[0],L[1]} == 2'b10) && ((({L[2],L[3],L[4],L[8]} == 4'b0001) && (({L[5],L[7]} == 2'b01) || L[5])) || (L[4] && ((({L[2],L[3],L[8]} == 3'b001) && (({L[5],L[7]} == 2'b01) || L[5])) || (({L[3],L[8]} == 2'b10) && (({L[5],L[7]} == 2'b01) || L[5])))))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[1] && ((!L[4] && ((({L[0],L[5],L[7]} == 3'b110) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (L[7] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))))) || (({L[0],L[3],L[4],L[8]} == 4'b1011) && (({L[5],L[7]} == 2'b01) || L[5])))) || ({L[0],L[1],L[3],L[4],L[7],L[8]} == 6'b010001)))));
 
// action: V <= RES:
assign E_V__RES = (({L[0],L[5],L[6],L[9]} == 4'b1110) && ((!L[2] && (({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) || (L[8] && ((!L[4] && (({L[1],L[3],L[10]} == 3'b001) || (({L[3],L[10]} == 2'b10) && (({L[1],L[7]} == 2'b00) || L[7])))) || ({L[1],L[3],L[4],L[10]} == 4'b0011))))) || ({L[1],L[2],L[3],L[4],L[8],L[10]} == 6'b011101))) || (({L[0],L[1],L[2],L[5],L[6],L[9],L[10]} == 7'b1011110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)));
 
// action: V <= SB[6]:
assign E_V__SB_6_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00100100010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110100110);
 
// action: ALU_CF = 0:
assign A_ALU_CF_0 = (!L[10] && ((({L[2],L[3],L[8],L[9]} == 4'b0001) && (({L[0],L[1],L[4],L[6],L[7]} == 5'b00000) || (L[4] && (({L[0],L[1]} == 2'b00) || L[0])))) || (L[8] && ((!L[9] && ((!L[2] && ((({L[0],L[4],L[5]} == 3'b000) && (({L[1],L[3],L[6],L[7]} == 4'b0000) || (L[3] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || ({L[1],L[7]} == 2'b11))))))) || (L[0] && (({L[3],L[4]} == 2'b00) || ({L[3],L[4]} == 2'b11))))) || ({L[2],L[4]} == 2'b11))) || (({L[0],L[3],L[9]} == 3'b001) && ((({L[1],L[2]} == 2'b00) && (({L[4],L[6],L[7]} == 3'b000) || L[4])) || ({L[1],L[2],L[4],L[5],L[6],L[7]} == 6'b110011))))))) || (({L[0],L[1],L[2],L[5],L[6],L[7],L[9],L[10]} == 8'b01101101) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11)))));
 
// action: ALU_DF = 0:
assign A_ALU_DF_0 = (!L[9] && ((({L[8],L[10]} == 2'b01) && (({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7]} == 8'b00000000) || (L[6] && (({L[0],L[1],L[2],L[3],L[4],L[5],L[7]} == 7'b0000000) || (L[7] && (({L[0],L[1],L[2],L[3],L[4],L[5]} == 6'b100110) || (L[2] && (({L[0],L[1],L[3],L[4],L[5]} == 5'b10110) || (({L[0],L[1]} == 2'b01) && (({L[3],L[4]} == 2'b01) || ({L[3],L[4]} == 2'b10))))))))))) || (L[8] && ((!L[10] && ((!L[2] && ((({L[0],L[4]} == 2'b00) && ((({L[1],L[3]} == 2'b00) && (({L[5],L[6],L[7]} == 3'b000) || L[6])) || (L[3] && ((!L[5] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))) || (({L[1],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (L[0] && ((!L[1] && (!L[3] || (L[3] && (({L[4],L[5],L[6],L[7]} == 4'b0011) || L[4])))) || (L[1] && (({L[3],L[4]} == 2'b00) || L[4])))))) || ({L[2],L[4]} == 2'b11))) || (({L[6],L[7],L[10]} == 3'b111) && (({L[0],L[1],L[2],L[3],L[4],L[5]} == 6'b100000) || (L[4] && (({L[0],L[1],L[2],L[3],L[5]} == 5'b10000) || ({L[0],L[1],L[2],L[3]} == 4'b0111))))))))) || (({L[9],L[10]} == 2'b10) && ((!L[0] && ((({L[1],L[2],L[3]} == 3'b000) && ((({L[4],L[7]} == 2'b00) && (!L[5] || (L[5] && (!L[8] || ({L[6],L[8]} == 2'b01))))) || L[4])) || (L[2] && ((({L[3],L[4],L[6],L[7]} == 4'b0011) && (({L[1],L[8]} == 2'b00) || ({L[1],L[8]} == 2'b11))) || (L[3] && ((!L[8] && (({L[1],L[4],L[5],L[6],L[7]} == 5'b00110) || L[4])) || ({L[1],L[4],L[6],L[7],L[8]} == 5'b00111))))))) || (L[0] && ((!L[1] && ((!L[2] && (({L[3],L[4],L[8]} == 3'b000) || (L[4] && (!L[8] || ({L[3],L[8]} == 2'b01))))) || (L[2] && ((({L[3],L[5],L[6],L[7]} == 4'b0011) && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || (L[3] && (({L[4],L[5],L[6],L[7],L[8]} == 5'b00111) || ({L[4],L[8]} == 2'b10))))))) || (L[1] && (({L[2],L[3],L[4],L[8]} == 4'b0000) || (L[4] && ((!L[8] && (({L[2],L[3]} == 2'b00) || L[3])) || ({L[2],L[3],L[8]} == 3'b001)))))))));
 
// action: ALU_OP = ADC:
assign A_ALU_OP_ADC = (!L[9] && ((({L[8],L[10]} == 2'b01) && (({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7]} == 8'b00000000) || (L[6] && ((!L[1] && (({L[0],L[2],L[3],L[4],L[5],L[7]} == 6'b000000) || (({L[0],L[3],L[4]} == 3'b111) && (({L[5],L[7]} == 2'b01) || L[5])))) || (({L[0],L[1],L[2],L[7]} == 4'b0111) && (({L[3],L[4]} == 2'b01) || ({L[3],L[4]} == 2'b10))))))) || (L[8] && ((!L[2] && ((!L[10] && ((({L[0],L[4]} == 2'b00) && ((({L[1],L[3]} == 2'b00) && (({L[5],L[6],L[7]} == 3'b000) || L[6])) || (L[3] && ((!L[5] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))) || (({L[1],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (L[0] && ((!L[1] && (!L[3] || (L[3] && ((({L[4],L[6]} == 2'b01) && (({L[5],L[7]} == 2'b01) || L[5])) || L[4])))) || (L[1] && (!L[3] || (L[3] && (({L[4],L[5],L[6],L[7]} == 4'b0111) || L[4])))))))) || (({L[0],L[1],L[3],L[6],L[10]} == 5'b10011) && (({L[5],L[7]} == 2'b01) || L[5])))) || (({L[2],L[4]} == 2'b11) && (!L[10] || ({L[0],L[1],L[3],L[6],L[7],L[10]} == 6'b011111))))))) || (({L[9],L[10]} == 2'b10) && ((!L[0] && ((({L[1],L[2],L[3]} == 3'b000) && ((({L[4],L[7]} == 2'b00) && (!L[5] || (L[5] && (!L[8] || ({L[6],L[8]} == 2'b01))))) || L[4])) || (L[2] && ((({L[3],L[4],L[6],L[7]} == 4'b0011) && (({L[1],L[8]} == 2'b00) || ({L[1],L[8]} == 2'b11))) || (L[3] && ((!L[8] && (({L[1],L[4],L[5],L[6],L[7]} == 5'b00110) || L[4])) || ({L[1],L[4],L[6],L[7],L[8]} == 5'b00111))))))) || (L[0] && ((!L[1] && ((!L[2] && (({L[3],L[4],L[8]} == 3'b000) || (L[4] && (!L[8] || ({L[3],L[8]} == 2'b01))))) || (L[2] && (({L[3],L[4],L[6],L[8]} == 4'b1100) || (L[6] && ((!L[3] && ((({L[4],L[8]} == 2'b00) && (({L[5],L[7]} == 2'b01) || L[5])) || (({L[4],L[8]} == 2'b11) && (({L[5],L[7]} == 2'b01) || L[5])))) || (L[3] && ((({L[4],L[8]} == 2'b01) && (({L[5],L[7]} == 2'b01) || L[5])) || ({L[4],L[8]} == 2'b10))))))))) || (L[1] && (({L[2],L[3],L[4],L[8]} == 4'b0000) || (L[4] && ((!L[8] && (({L[2],L[3]} == 2'b00) || L[3])) || ({L[2],L[3],L[8]} == 3'b001)))))))));
 
// action: SB = 0:
assign A_SB_0 = (!L[10] && ((({L[2],L[8],L[9]} == 3'b010) && ((!L[3] && ((({L[0],L[1],L[4],L[7]} == 4'b0000) && (({L[5],L[6]} == 2'b00) || L[6])) || ({L[0],L[4]} == 2'b11))) || (({L[0],L[3],L[4]} == 3'b010) && ((!L[5] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))) || (({L[1],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (L[9] && ((!L[0] && (({L[1],L[2],L[3],L[4],L[7]} == 5'b00000) || (L[2] && ((({L[1],L[3]} == 2'b01) && ((!L[8] && (({L[4],L[5],L[6],L[7]} == 4'b0110) || L[4])) || ({L[4],L[5],L[6],L[7],L[8]} == 5'b01101))) || (L[1] && ((!L[3] && ((({L[6],L[7]} == 2'b00) && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || (L[6] && (({L[4],L[8]} == 2'b00) || (L[8] && (({L[4],L[7]} == 2'b01) || L[4])))))) || (L[3] && ((({L[4],L[8]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])) || ({L[4],L[8]} == 2'b10))))))))) || (L[0] && ((!L[2] && ((!L[3] && (!L[4] || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b110))) || ({L[2],L[3],L[4],L[8]} == 4'b1110))))))) || (({L[0],L[10]} == 2'b01) && ((!L[9] && ((({L[1],L[2],L[3],L[4],L[7]} == 5'b00000) && (!L[5] || (L[5] && (({L[6],L[8]} == 2'b01) || ({L[6],L[8]} == 2'b10))))) || (L[2] && (({L[1],L[3],L[4],L[5],L[6],L[7],L[8]} == 7'b0101100) || (L[1] && (({L[3],L[4],L[6],L[7],L[8]} == 5'b01110) || (L[3] && (({L[4],L[6],L[7],L[8]} == 4'b0110) || (L[4] && (({L[6],L[7],L[8]} == 3'b000) || (L[6] && (({L[7],L[8]} == 2'b00) || L[7])))))))))))) || ({L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9]} == 9'b000000001)));
 
// action: ALU_B = SB:
assign A_ALU_B_SB = (!L[0] && ((({L[1],L[2]} == 2'b00) && ((!L[4] && ((!L[7] && ((({L[3],L[5]} == 2'b00) && ((({L[6],L[10]} == 2'b01) && (!L[9] || ({L[8],L[9]} == 2'b01))) || (L[6] && ((!L[9] && (({L[8],L[10]} == 2'b01) || L[8])) || ({L[9],L[10]} == 2'b10))))) || (L[5] && ((!L[9] && (({L[3],L[6],L[8],L[10]} == 4'b0101) || (L[8] && ((!L[10] && (({L[3],L[6]} == 2'b01) || L[3])) || ({L[3],L[6],L[10]} == 3'b001))))) || ({L[3],L[6],L[9],L[10]} == 4'b0110))))) || ({L[3],L[6],L[7],L[8],L[9],L[10]} == 6'b111100))) || ({L[3],L[4],L[9],L[10]} == 4'b0110))) || (L[2] && ((!L[9] && ((({L[3],L[4],L[5],L[6],L[8],L[10]} == 6'b101101) && (({L[1],L[7]} == 2'b00) || ({L[1],L[7]} == 2'b11))) || (L[4] && (({L[1],L[8],L[10]} == 3'b010) || (L[1] && ((({L[8],L[10]} == 2'b01) && (({L[3],L[5],L[6],L[7]} == 4'b0111) || (L[3] && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[8] && (!L[10] || ({L[3],L[5],L[6],L[7],L[10]} == 5'b11111))))))))) || (({L[9],L[10]} == 2'b10) && ((!L[1] && (({L[3],L[4],L[5],L[6],L[7],L[8]} == 6'b001000) || (L[3] && ((!L[8] && (({L[4],L[5],L[6],L[7]} == 4'b0110) || L[4])) || ({L[4],L[5],L[7],L[8]} == 4'b0101))))) || (L[1] && ((!L[3] && ((({L[6],L[7]} == 2'b00) && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || (L[6] && (({L[4],L[8]} == 2'b00) || (L[8] && (({L[4],L[5],L[7]} == 3'b011) || L[4])))))) || (L[3] && ((({L[4],L[8]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])) || ({L[4],L[8]} == 2'b10))))))))))) || (L[0] && ((!L[10] && ((({L[8],L[9]} == 2'b01) && ((!L[3] && (!L[2] || ({L[1],L[2],L[4],L[7]} == 4'b0100))) || ({L[3],L[4]} == 2'b11))) || (L[8] && ((!L[1] && ((!L[2] && ((!L[9] && (!L[3] || (L[3] && (({L[4],L[7]} == 2'b00) || L[4])))) || ({L[3],L[9]} == 2'b01))) || (L[2] && (({L[3],L[4],L[7],L[9]} == 4'b1001) || (L[4] && (!L[9] || ({L[3],L[7],L[9]} == 3'b001))))))) || (L[1] && ((!L[3] && (({L[2],L[4]} == 2'b00) || (L[4] && (!L[9] || ({L[2],L[9]} == 2'b01))))) || ({L[3],L[4],L[9]} == 3'b110))))))) || (({L[1],L[7],L[9],L[10]} == 4'b0001) && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10)))))));
 
// action: ALU_CF = 1:
assign A_ALU_CF_1 = (!L[2] && ((!L[1] && ((!L[9] && ((!L[5] && ((!L[3] && (({L[0],L[4],L[7],L[8],L[10]} == 5'b00001) || (L[8] && (({L[0],L[4],L[6],L[10]} == 4'b0010) || (L[0] && (({L[4],L[6],L[7],L[10]} == 4'b0111) || (L[4] && (!L[10] || ({L[6],L[7],L[10]} == 3'b111))))))))) || (({L[3],L[6],L[7]} == 3'b111) && (({L[0],L[4],L[8],L[10]} == 4'b0010) || (L[0] && (({L[4],L[8],L[10]} == 3'b010) || ({L[4],L[8],L[10]} == 3'b101))))))) || (({L[5],L[8],L[10]} == 3'b110) && ((!L[3] && (({L[0],L[4],L[6]} == 3'b001) || ({L[0],L[4]} == 2'b11))) || (({L[0],L[3],L[4]} == 3'b010) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[3],L[4],L[9],L[10]} == 4'b0010) && ((!L[8] && (({L[0],L[6],L[7]} == 3'b010) || L[0])) || ({L[0],L[5],L[6],L[7],L[8]} == 5'b00101))))) || (({L[0],L[1],L[3],L[10]} == 4'b1100) && (({L[4],L[8],L[9]} == 3'b001) || ({L[4],L[8],L[9]} == 3'b110))))) || (({L[2],L[6]} == 2'b11) && (({L[0],L[1],L[3],L[4],L[5],L[7],L[8],L[9],L[10]} == 9'b001010010) || (L[7] && ((!L[1] && (({L[0],L[3],L[4],L[5],L[8],L[9],L[10]} == 7'b1110001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (!L[5] || ({L[0],L[5]} == 2'b01))) || (({L[3],L[8]} == 2'b11) && (!L[5] || ({L[0],L[5]} == 2'b01))))) || ({L[0],L[3],L[4],L[5],L[8]} == 5'b10101))))) || (({L[0],L[1],L[5]} == 3'b011) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)))))));
 
// action: ALU_CF = ALUC:
assign A_ALU_CF_ALUC = ({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b0111010) || (({L[0],L[4],L[9],L[10]} == 4'b1110) && ((!L[2] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))) || ({L[2],L[3],L[8]} == 3'b110)));
 
// action: ALU_B = NOT SB:
assign A_ALU_B_NOTSB = (({L[0],L[1],L[2],L[4],L[6],L[10]} == 6'b000000) && ((!L[7] && ((!L[5] && (({L[3],L[8],L[9]} == 3'b001) || (L[8] && (!L[9] || ({L[3],L[9]} == 2'b01))))) || ({L[3],L[5],L[9]} == 3'b011))) || ({L[3],L[5],L[7],L[8],L[9]} == 5'b10110))) || (L[6] && (({L[0],L[1],L[2],L[3],L[4],L[5],L[7],L[8],L[9],L[10]} == 10'b0001000100) || (L[7] && ((!L[9] && ((({L[2],L[4],L[8],L[10]} == 4'b0010) && (({L[0],L[1],L[3]} == 3'b000) || (L[3] && (({L[0],L[1],L[5]} == 3'b010) || (L[0] && (({L[1],L[5]} == 2'b00) || L[5])))))) || (L[10] && ((({L[0],L[1],L[2],L[5]} == 4'b0110) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || (({L[0],L[1]} == 2'b10) && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[1] && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[0],L[3],L[4],L[8]} == 4'b1011))) || ({L[0],L[1],L[3],L[4],L[5],L[8]} == 6'b010001)))))));
 
// action: ALU_OP = ORA:
assign A_ALU_OP_ORA = (!L[0] && ((({L[1],L[2],L[3],L[4],L[7]} == 5'b00000) && (({L[5],L[6],L[8],L[9],L[10]} == 5'b11110) || (L[10] && ((!L[9] && (({L[5],L[6],L[8]} == 3'b110) || (L[8] && (!L[6] || ({L[5],L[6]} == 2'b01))))) || ({L[5],L[6],L[8],L[9]} == 4'b0001))))) || (L[2] && ((({L[1],L[3],L[4],L[5],L[6],L[7]} == 6'b010110) && (({L[8],L[9],L[10]} == 3'b001) || ({L[8],L[9],L[10]} == 3'b110))) || (L[1] && ((({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[9],L[10]} == 2'b10) && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[3],L[4],L[8]} == 3'b011) && (({L[6],L[7]} == 2'b00) || L[6])))))))))) || (L[0] && ((!L[5] && ((!L[6] && ((!L[7] && ((!L[10] && ((!L[4] && (({L[1],L[2],L[3],L[8],L[9]} == 5'b01001) || (L[8] && ((!L[2] && (({L[1],L[3],L[9]} == 3'b010) || ({L[3],L[9]} == 2'b01))) || ({L[1],L[2],L[3],L[9]} == 4'b0111))))) || ({L[1],L[2],L[3],L[4],L[8],L[9]} == 6'b010111))) || (({L[1],L[9],L[10]} == 3'b001) && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || ({L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 7'b0001110))) || ({L[2],L[3],L[4],L[6],L[8],L[9],L[10]} == 7'b0001110))) || ({L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 7'b0001110)));
 
// action: ALU_A = DB:
assign A_ALU_A_DB = (!L[10] && ((({L[8],L[9]} == 2'b01) && ((({L[0],L[1],L[2],L[3],L[4]} == 5'b01100) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[4] && (({L[0],L[2],L[3]} == 3'b011) || (L[0] && (!L[2] || ({L[2],L[3]} == 2'b11))))))) || (L[8] && ((!L[0] && (({L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[9]} == 8'b00001101) || (L[2] && ((({L[3],L[4],L[9]} == 3'b101) && (({L[1],L[5],L[6],L[7]} == 4'b0110) || (L[1] && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[4] && (!L[9] || (({L[1],L[3],L[9]} == 3'b101) && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (L[0] && ((!L[2] && (!L[3] || ({L[3],L[4],L[9]} == 3'b110))) || ({L[2],L[4],L[9]} == 3'b110))))))) || (({L[0],L[10]} == 2'b01) && ((!L[9] && ((!L[7] && ((({L[1],L[4]} == 2'b00) && ((({L[2],L[3]} == 2'b00) && (({L[5],L[6],L[8]} == 3'b110) || (L[8] && (!L[6] || ({L[5],L[6]} == 2'b01))))) || ({L[2],L[3],L[5],L[6],L[8]} == 5'b11110))) || ({L[1],L[2],L[3],L[4],L[8]} == 5'b11110))) || ({L[1],L[2],L[3],L[4],L[6],L[7],L[8]} == 7'b1111110))) || ({L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9]} == 9'b000000001)));
 
// action: SB = X:
assign A_SB_X = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01100001010) || (({L[8],L[10]} == 2'b10) && ((!L[9] && ((!L[2] && ((!L[4] && (({L[0],L[1],L[3],L[5],L[6],L[7]} == 6'b011001) || ({L[0],L[3]} == 2'b10))) || ({L[0],L[1],L[3],L[4],L[5],L[6],L[7]} == 7'b0111001))) || (({L[2],L[4]} == 2'b11) && ((!L[0] && (!L[1] || (L[1] && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[0] && (!L[1] || (L[1] && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (({L[0],L[1],L[2],L[5],L[6],L[7],L[9]} == 7'b0110011) && (({L[3],L[4]} == 2'b01) || ({L[3],L[4]} == 2'b10)))));
 
// action: ALU_A = EAL:
assign A_ALU_A_EAL = (({L[0],L[1],L[2],L[3],L[8]} == 5'b00000) && (({L[4],L[5],L[6],L[7],L[9],L[10]} == 6'b000001) || ({L[4],L[9],L[10]} == 3'b110))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110110010);
 
// action: SB = PCL:
assign A_SB_PCL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100001) || ({L[0],L[1],L[2],L[3],L[4],L[8],L[9],L[10]} == 8'b00001010);
 
// action: SB = Y:
assign A_SB_Y = (({L[0],L[1],L[2],L[4],L[5],L[6],L[7],L[9],L[10]} == 9'b001000110) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (({L[4],L[10]} == 2'b10) && (({L[0],L[2],L[3],L[8],L[9]} == 5'b10001) || (L[8] && ((!L[9] && (({L[1],L[2],L[3],L[6],L[7]} == 5'b11001) || (L[3] && ((!L[2] && (({L[0],L[1],L[5],L[6],L[7]} == 5'b00001) || L[0])) || ({L[1],L[2],L[6],L[7]} == 4'b1101))))) || ({L[0],L[1],L[2],L[3],L[5],L[6],L[7],L[9]} == 8'b00100011)))));
 
// action: ALU_A = ALU:
assign A_ALU_A_ALU = (!L[3] && ((!L[4] && (({L[0],L[1],L[2],L[5],L[6],L[7],L[8],L[9],L[10]} == 9'b000010001) || (({L[9],L[10]} == 2'b10) && ((!L[2] && ((!L[8] && ((({L[0],L[1],L[7]} == 3'b000) && (({L[5],L[6]} == 2'b00) || L[6])) || L[0])) || (({L[0],L[1],L[7],L[8]} == 4'b0001) && (!L[6] || ({L[5],L[6]} == 2'b01))))) || (({L[0],L[1],L[2],L[8]} == 4'b0111) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[0],L[1],L[2],L[4],L[8],L[9],L[10]} == 7'b0111001) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[0],L[1],L[2],L[3],L[9],L[10]} == 6'b011101) && ((({L[4],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[4],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6]))));
 
// action: ALU_A = S:
assign A_ALU_A_S = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100010) || (({L[0],L[1],L[2],L[4],L[7],L[8],L[9],L[10]} == 8'b00000100) && ((!L[3] && (({L[5],L[6]} == 2'b00) || L[6])) || L[3]));
 
// action: CF <= IR[5]:
assign E_CF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011000010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011100010);
 
// action: IF <= IR[5]:
assign E_IF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011010010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011110010);
 
// action: DF <= IR[5]:
assign E_DF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011011010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011111010);
 
// action: VF <= 0:
assign E_VF__0 = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011101010);
 
// action: T <= 0 IF NF != IR[5]:
assign E_T__0IFNF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001000100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001100100);
 
// action: T <= 0 IF VF != IR[5]:
assign E_T__0IFVF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001010100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001110100);
 
// action: T <= 0 IF CF != IR[5]:
assign E_T__0IFCF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001001100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001101100);
 
// action: T <= 0 IF ZF == IR[5]:
assign E_T__0IFZF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001011100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001111100);
 
// action: EA <= DB:
assign E_EA__DB = ({L[0],L[2],L[3],L[8],L[9],L[10]} == 6'b010100) || ({L[0],L[3],L[8],L[9],L[10]} == 5'b10100);
 
// action: EAL <= DB:
assign E_EAL__DB = (({L[0],L[1],L[2],L[3],L[8],L[9],L[10]} == 7'b0000100) && (({L[4],L[5],L[6],L[7]} == 4'b0100) || L[4])) || (({L[3],L[8],L[9],L[10]} == 4'b1100) && (({L[0],L[2],L[4]} == 3'b101) || L[2]));
 
// action: PCL <= RES:
assign E_PCL__RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000110110) || ({L[0],L[1],L[2],L[3],L[4],L[8],L[9],L[10]} == 8'b00001010);
 
// action: T <= 0 IF_C7F:
assign E_T__0IF_C7F = ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000010010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000011010);
 
// action: ALU_A = SIGN:
assign A_ALU_A_SIGN = ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000010110) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000011110);
 
// action: SB = PCH:
assign A_SB_PCH = ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000010110) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000011110);
 
// action: PCH <= RES:
assign E_PCH__RES = (({L[0],L[1],L[2],L[3]} == 4'b0000) && ((!L[7] && (({L[4],L[8],L[9],L[10]} == 4'b1110) || (({L[4],L[10]} == 2'b01) && ((!L[9] && (({L[5],L[6],L[8]} == 3'b011) || (L[5] && (({L[6],L[8]} == 2'b01) || ({L[6],L[8]} == 2'b10))))) || ({L[5],L[6],L[8],L[9]} == 4'b0001))))) || ({L[4],L[7],L[8],L[9],L[10]} == 5'b11110))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110110001);
 
// action: EAH <= DB:
assign E_EAH__DB = (!L[8] && (({L[0],L[2],L[3],L[4],L[9],L[10]} == 6'b100001) || (({L[3],L[9],L[10]} == 3'b110) && (({L[0],L[2],L[4]} == 3'b101) || L[2])))) || ({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b1001110);
 
// action: EAL <= ALU:
assign E_EAL__ALU = (({L[2],L[3],L[4],L[9],L[10]} == 5'b00001) && (({L[0],L[1],L[5],L[6],L[7],L[8]} == 6'b000001) || ({L[0],L[8]} == 2'b10))) || (({L[9],L[10]} == 2'b10) && ((({L[0],L[2]} == 2'b01) && (({L[1],L[3],L[4],L[5],L[6],L[7],L[8]} == 7'b0101101) || ({L[4],L[8]} == 2'b10))) || (L[0] && ((!L[2] && (!L[3] || ({L[3],L[4],L[8]} == 3'b110))) || ({L[2],L[4],L[8]} == 3'b110)))));
 
// action: T <= T + 1 IF_ALUCZ:
assign E_T__T_1IF_ALUCZ = (({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b0111010) && ((({L[1],L[5]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[5] && ((!L[6] && (({L[1],L[7]} == 2'b00) || L[7])) || ({L[1],L[6]} == 2'b01))))) || (({L[0],L[4],L[9],L[10]} == 4'b1110) && ((!L[2] && ((({L[3],L[8]} == 2'b01) && (({L[1],L[7]} == 2'b00) || (L[7] && (({L[5],L[6]} == 2'b01) || L[5])))) || (({L[3],L[8]} == 2'b10) && (({L[1],L[7]} == 2'b00) || (L[7] && (({L[5],L[6]} == 2'b01) || L[5])))))) || (({L[2],L[3],L[8]} == 3'b110) && ((({L[1],L[5]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[5] && (({L[1],L[7]} == 2'b00) || L[7]))))));
 
// action: EAH <= ALU:
assign E_EAH__ALU = ({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b0111110) || (({L[0],L[4]} == 2'b11) && ((!L[2] && (({L[3],L[8],L[9],L[10]} == 4'b0001) || ({L[3],L[8],L[9],L[10]} == 4'b1110))) || ({L[2],L[3],L[8],L[9],L[10]} == 5'b11110)));
 
// action: PCL <= ALU:
assign E_PCL__ALU = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000011) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110110001);
 
// action: SB = DB:
assign A_SB_DB = (!L[1] && ((!L[9] && ((!L[2] && ((({L[0],L[3],L[4],L[7],L[8],L[10]} == 6'b000110) && (({L[5],L[6]} == 2'b01) || L[5])) || (L[0] && ((({L[3],L[4],L[8],L[10]} == 4'b1101) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])) || (L[8] && ((!L[4] && ((({L[3],L[10]} == 2'b01) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])) || (({L[3],L[10]} == 2'b10) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))) || (({L[3],L[4],L[10]} == 3'b011) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))))) || (({L[2],L[3],L[4],L[8],L[10]} == 5'b11101) && (({L[0],L[5],L[6],L[7]} == 4'b0101) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))) || (({L[9],L[10]} == 2'b10) && (({L[0],L[2],L[3],L[4],L[5],L[7],L[8]} == 7'b0010101) || (L[2] && ((!L[3] && ((({L[4],L[8]} == 2'b00) && ((!L[0] && (({L[5],L[6],L[7]} == 3'b011) || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))) || (({L[4],L[8]} == 2'b11) && (({L[0],L[5],L[6],L[7]} == 4'b0101) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))) || (({L[3],L[4],L[8]} == 3'b101) && ((!L[0] && (({L[5],L[6],L[7]} == 3'b011) || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))))))) || (({L[1],L[5],L[7]} == 3'b111) && ((!L[6] && ((({L[2],L[8],L[9]} == 3'b010) && (({L[0],L[3],L[4],L[10]} == 4'b0000) || (L[0] && ((!L[4] && (({L[3],L[10]} == 2'b01) || ({L[3],L[10]} == 2'b10))) || ({L[3],L[4],L[10]} == 3'b011))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101))))))) || ({L[0],L[2],L[3],L[4],L[6],L[8],L[9],L[10]} == 8'b10101100)));
 
// action: AC <= SB:
assign E_AC__SB = (({L[6],L[7]} == 2'b01) && ((({L[0],L[2],L[3],L[5],L[8],L[9],L[10]} == 7'b0010100) && (({L[1],L[4]} == 2'b01) || ({L[1],L[4]} == 2'b10))) || (({L[0],L[5]} == 2'b11) && ((!L[9] && ((!L[2] && (({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) || (L[8] && ((!L[4] && (({L[3],L[10]} == 2'b01) || ({L[3],L[10]} == 2'b10))) || ({L[3],L[4],L[10]} == 3'b011))))) || ({L[2],L[3],L[4],L[8],L[10]} == 5'b11101))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101))))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010110110);
 
// action: ALU_A = AC:
assign A_ALU_A_AC = (!L[1] && ((({L[0],L[2],L[4],L[5],L[6],L[7],L[9],L[10]} == 8'b01010010) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (L[0] && ((!L[9] && ((({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[10] && ((({L[2],L[3],L[4],L[8]} == 4'b0001) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[4] && ((({L[2],L[3],L[8]} == 3'b001) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b10) && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[3],L[4],L[8]} == 3'b011) && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (({L[1],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b1010100) && (({L[0],L[7]} == 2'b00) || ({L[0],L[5],L[6],L[7]} == 4'b1111)));
 
// action: AC <= RES:
assign E_AC__RES = ({L[0],L[1],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 9'b010100100) || (L[0] && ((!L[9] && ((!L[2] && ((({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))) || (L[8] && ((!L[4] && ((({L[1],L[3],L[10]} == 3'b001) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))) || (({L[3],L[10]} == 2'b10) && (({L[1],L[5],L[7]} == 3'b000) || (L[5] && (({L[1],L[6],L[7]} == 3'b000) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))))))) || (({L[1],L[3],L[4],L[10]} == 4'b0011) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))))))) || (({L[1],L[2],L[3],L[4],L[8],L[10]} == 6'b011101) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))))) || (({L[1],L[2],L[9],L[10]} == 4'b0110) && ((!L[4] && ((!L[7] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (({L[5],L[6],L[7]} == 3'b111) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))))) || (({L[3],L[4],L[8]} == 3'b011) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111)))))));
 
// action: ALU_OP = AND:
assign A_ALU_OP_AND = (({L[0],L[1],L[2],L[4],L[5],L[6],L[7],L[9],L[10]} == 9'b001010010) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (({L[0],L[1],L[5],L[6],L[7]} == 5'b10100) && ((!L[9] && (({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) || (L[10] && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)))));
 
// action: ALU_OP = EOR:
assign A_ALU_OP_EOR = (({L[0],L[1],L[5],L[6],L[7],L[9]} == 6'b100100) && (({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) || (L[10] && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || (({L[0],L[1],L[2],L[5],L[6],L[7],L[9],L[10]} == 8'b10101010) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)));
 
// action: ALU_A = X:
assign A_ALU_A_X = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010011100) || (({L[0],L[1],L[4],L[5],L[6],L[7],L[10]} == 7'b0001110) && (({L[2],L[3],L[8],L[9]} == 4'b1001) || (L[8] && (({L[2],L[3],L[9]} == 3'b000) || (L[3] && (({L[2],L[9]} == 2'b00) || ({L[2],L[9]} == 2'b11)))))));
 
// action: ALU_A = Y:
assign A_ALU_A_Y = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010001100) || (({L[0],L[1],L[4],L[5],L[6],L[7],L[10]} == 7'b0000110) && (({L[2],L[3],L[8],L[9]} == 4'b1001) || (L[8] && (({L[2],L[3],L[9]} == 3'b000) || (L[3] && (({L[2],L[9]} == 2'b00) || ({L[2],L[9]} == 2'b11)))))));
 
// action: ALU_DF = D:
assign A_ALU_DF_D = (({L[0],L[5],L[6],L[9]} == 4'b1110) && ((!L[2] && (({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) || (L[8] && ((!L[4] && (({L[1],L[3],L[10]} == 3'b001) || (({L[3],L[10]} == 2'b10) && (({L[1],L[7]} == 2'b00) || L[7])))) || ({L[1],L[3],L[4],L[10]} == 4'b0011))))) || ({L[1],L[2],L[3],L[4],L[8],L[10]} == 6'b011101))) || (({L[0],L[1],L[2],L[5],L[6],L[9],L[10]} == 7'b1011110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)));
 
// action: ALU_CF = C:
assign A_ALU_CF_C = (({L[0],L[1],L[5],L[6]} == 4'b1011) && ((!L[9] && (({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) || (L[10] && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))) || (L[1] && ((({L[0],L[7]} == 2'b00) && (({L[2],L[3],L[4],L[8],L[9],L[10]} == 6'b010100) || (L[2] && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110))))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b1010111100)));
 
// action: ALU_OP = ASL:
assign A_ALU_OP_ASL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010000100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011000) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: RW = W:
assign A_RW_W = (!L[1] && ((!L[6] && ((!L[5] && ((({L[0],L[2],L[4],L[7]} == 4'b0000) && ((!L[8] && (({L[3],L[9],L[10]} == 3'b001) || ({L[9],L[10]} == 2'b10))) || ({L[3],L[8],L[9],L[10]} == 4'b0110))) || (L[7] && ((({L[0],L[2],L[9],L[10]} == 4'b0110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))) || (L[0] && ((({L[2],L[9],L[10]} == 3'b001) && (({L[3],L[4],L[8]} == 3'b001) || (L[4] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))))))))) || (({L[0],L[2],L[3],L[4],L[5],L[7]} == 6'b000010) && (({L[8],L[9],L[10]} == 3'b001) || ({L[8],L[9],L[10]} == 3'b110))))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b0010010010))) || (({L[0],L[1],L[2]} == 3'b011) && ((({L[9],L[10]} == 2'b01) && ((({L[6],L[7]} == 2'b00) && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || (L[6] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))))) || (L[9] && ((!L[10] && ((!L[4] && (({L[3],L[5],L[6],L[7],L[8]} == 5'b00010) || (L[8] && ((!L[5] && ((!L[6] && (({L[3],L[7]} == 2'b00) || ({L[3],L[7]} == 2'b11))) || ({L[3],L[6]} == 2'b01))) || (({L[3],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || ({L[3],L[4],L[5],L[6],L[7],L[8]} == 6'b010011))) || (({L[3],L[4],L[8],L[10]} == 4'b1101) && (({L[6],L[7]} == 2'b00) || L[6]))))));
 
// action: SB = ALU:
assign A_SB_ALU = ({L[0],L[1],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 9'b011000110) || (({L[0],L[1],L[2],L[7],L[10]} == 5'b01101) && ((!L[9] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || ({L[3],L[4],L[8],L[9]} == 4'b1101)));
 
// action: DB <= SB:
assign E_DB__SB = (!L[1] && ((!L[5] && ((!L[6] && (({L[0],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 8'b00100010) || (L[7] && ((({L[0],L[2],L[9],L[10]} == 4'b0110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))) || (L[0] && ((({L[2],L[9],L[10]} == 3'b001) && (({L[3],L[4],L[8]} == 3'b001) || (L[4] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))))))))) || ({L[0],L[2],L[3],L[4],L[6],L[7],L[8],L[9],L[10]} == 9'b001010010))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b0000100001))) || (({L[0],L[1],L[2]} == 3'b011) && ((!L[7] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b00110) || (L[10] && ((!L[9] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || ({L[3],L[4],L[8],L[9]} == 4'b1101))))) || (({L[5],L[6],L[7],L[9],L[10]} == 5'b00110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)))));
 
// action: ALU_OP = LSR:
assign A_ALU_OP_LSR = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010010100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011010) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: ALU_OP = ROL:
assign A_ALU_OP_ROL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010100100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011100) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: ALU_OP = ROR:
assign A_ALU_OP_ROR = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010110100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011110) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: SB = AC:
assign A_SB_AC = (!L[1] && ((!L[5] && (({L[0],L[2],L[3],L[4],L[6],L[7],L[8],L[9],L[10]} == 9'b001010010) || (({L[0],L[6],L[7]} == 3'b101) && ((({L[2],L[9],L[10]} == 3'b001) && (({L[3],L[4],L[8]} == 3'b001) || (L[4] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))))))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b0010101100))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010101100);
 
// action: X <= SB:
assign E_X__SB = (({L[1],L[2],L[5],L[6],L[7],L[8],L[9]} == 7'b1010110) && ((!L[10] && (({L[0],L[3],L[4]} == 3'b000) || (L[3] && (!L[4] || ({L[0],L[4]} == 2'b01))))) || ({L[0],L[3],L[10]} == 3'b101))) || (({L[1],L[2],L[5],L[6],L[7]} == 5'b11101) && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101)))));
 
// action: Y <= SB:
assign E_Y__SB = (({L[0],L[1],L[5],L[6],L[7],L[10]} == 6'b001010) && ((!L[4] && (({L[2],L[3],L[8],L[9]} == 4'b1001) || (L[8] && (({L[2],L[3],L[9]} == 3'b000) || (L[3] && (({L[2],L[9]} == 2'b00) || ({L[2],L[9]} == 2'b11))))))) || ({L[2],L[3],L[4],L[8],L[9]} == 5'b10111))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00111101001);
 
// action: SB = S:
assign A_SB_S = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01011101100);
 
// action: S <= SB:
assign E_S__SB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01011001100);
 
// action: PC <= EA:
assign E_PC__EA = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110010110);
 
// action: S <= ALU:
assign E_S__ALU = (({L[0],L[1],L[2],L[4],L[7],L[8]} == 6'b000000) && ((({L[3],L[9],L[10]} == 3'b001) && (!L[6] || ({L[5],L[6]} == 2'b01))) || (({L[9],L[10]} == 2'b10) && ((!L[3] && (({L[5],L[6]} == 2'b00) || L[6])) || L[3])))) || ({L[0],L[1],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 9'b000000110);
 
// action: SB = P:
assign A_SB_P = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010000010);
 
// action: P <= SB:
assign E_P__SB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010100110);
 
// action: X <= RES:
assign E_X__RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010111100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010011100);
 
// action: Y <= RES:
assign E_Y__RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010001100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010011100);
 
// action: DB <= ALU:
assign E_DB__ALU = ({L[0],L[1],L[2],L[3],L[4],L[6],L[7],L[8],L[9],L[10]} == 10'b0110011110) || (({L[0],L[1],L[2],L[6],L[7],L[10]} == 6'b011111) && ((!L[9] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || ({L[3],L[4],L[8],L[9]} == 4'b1101)));
 
// action: DB <= PCH:
assign E_DB__PCH = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100110);
 
// action: PCL <= EAL:
assign E_PCL__EAL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100101);
 
// action: DB <= PCL:
assign E_DB__PCL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000110);
 
// action: DB <= P:
assign E_DB__P = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000001);
 
// action: P <= DB:
assign E_P__DB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000010110);
 
// action: PCL <= DB:
assign E_PCL__DB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000010001);
/ag_6502/trunk/ag_6502/ag_6502.v
0,0 → 1,344
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Oleg Odintsov
//
// Create Date: 10:50:36 02/15/2012
// Design Name:
// Module Name: ag_6502
// Project Name: Agat Hardware Project
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
 
// Specify following define to allow external
// clocking for phi1 and phi2
// In such case you may use ag6502_ext_clock module
// with baseclk frequency ~ 10 x phi_0
`define AG6502_EXTERNAL_CLOCK
 
 
`ifndef AG6502_EXTERNAL_CLOCK
module ag6502_clock(input phi_0, output phi_1, output phi_2);
wire phi_01;
not#3(phi_1,phi_0);
or(phi_01,~phi_0, phi_1);
not#1(phi_2, phi_01);
endmodule
 
 
`else
 
module ag6502_phase_shift(input baseclk, input phi_0, output reg phi_1);
parameter DELAY = 1; // delay in semi-waves of baseclk
initial phi_1 = 0;
integer cnt = 0;
always @(posedge baseclk) begin
if (phi_0 != phi_1) begin
if (!cnt) begin phi_1 <= ~phi_1; cnt <= DELAY; end
else cnt <= cnt - 1;
end
end
endmodule
 
// baseclk is used to simulate delays on a real hardware
module ag6502_ext_clock(input baseclk, input phi_0, output phi_1, output phi_2);
parameter DELAY1 = 3, DELAY2 = 1; // delays in semi-waves of baseclk
wire phi_1_neg, phi_01;
ag6502_phase_shift#DELAY1 d1(baseclk, phi_0, phi_1_neg);
assign phi_1 = ~phi_1_neg;
and(phi_01, phi_0, phi_1_neg);
ag6502_phase_shift#DELAY2 d2(baseclk, phi_01, phi_2);
endmodule
 
`endif
 
 
`define ALU_ORA 3'd0
`define ALU_AND 3'd1
`define ALU_EOR 3'd2
`define ALU_ADC 3'd3
`define ALU_ASL 3'd4
`define ALU_LSR 3'd5
`define ALU_ROL 3'd6
`define ALU_ROR 3'd7
 
 
module ag6502_decimal(ADD, D_IN, NEG, CORR);
input wire[4:0] ADD;
input wire D_IN, NEG;
output wire[4:0] CORR;
wire C9 = {ADD[4]^NEG, ADD[3:0]} > 5'd9;
assign CORR = D_IN?{C9^NEG, C9?ADD[3:0] + (NEG?4'd10:4'd6): ADD[3:0]}: ADD;
endmodule
 
 
module ag6502_alu(A, B, OP, NEG, C_IN, D_IN, R, C_OUT, V_OUT);
input wire[7:0] A, B;
input wire[2:0] OP;
input wire C_IN, D_IN, NEG;
output wire[7:0] R;
output wire C_OUT, V_OUT;
wire[4:0] ADD_L;
ag6502_decimal DL({1'b0, A[3:0]} + {1'b0, B[3:0]} + C_IN, D_IN, NEG, ADD_L);
wire CF_H = ADD_L[4];
 
wire[4:0] ADD_H;
ag6502_decimal DH({1'b0, A[7:4]} + {1'b0, B[7:4]} + CF_H, D_IN, NEG, ADD_H);
 
assign
{C_OUT,R} = (OP==`ALU_ORA)? A | B:
(OP==`ALU_AND)? A & B:
(OP==`ALU_EOR)? A ^ B:
(OP==`ALU_ADC)? {ADD_H, ADD_L[3:0]}:
(OP==`ALU_ASL)? {A[7], A[6:0], 1'b0}:
(OP==`ALU_LSR)? {A[0], 1'b0, A[7:1]}:
(OP==`ALU_ROL)? {A[7], A[6:0], C_IN}:
(OP==`ALU_ROR)? {A[0], C_IN, A[7:1]}:
8'bX;
assign V_OUT = (A[7] == B[7]) && (A[7] != R[7]);
endmodule
 
/*
System AB/DB discipline:
1. For CPU
Phi1 up => CPU set ab/db_out buses
Phi2 down => CPU reads data from db_in
2. For Memory / other devices
Phi2 up => perform read/write operation
*/
 
 
module ag6502(input phi_0,
`ifdef AG6502_EXTERNAL_CLOCK
input phi_1, input phi_2,
`else
output phi_1, output phi_2,
`endif
output reg[15:0] ab,
output wire read,
input[7:0] db_in, output reg[7:0] db_out,
input rdy,
input rst, input irq, input nmi,
input so,
output sync);
`ifndef AG6502_EXTERNAL_CLOCK
ag6502_clock cgen(phi_0, phi_1, phi_2);
`endif
 
reg rdyg = 1;
reg[2:0] T = 7;
reg[7:0] IR ='h18;
reg[15:0] PC = 0;
wire[7:0] PCH = PC[15:8], PCL = PC[7:0];
reg[7:0] EAL, EAH;
wire[15:0] EA = {EAH, EAL};
reg FLAG_C, FLAG_Z, FLAG_I, FLAG_D, FLAG_B, FLAG_V, FLAG_N;
reg[7:0] AC, X, Y, S = 0;
wire[7:0] P = {FLAG_N, FLAG_V, 1'b1, FLAG_B, FLAG_D, FLAG_I, FLAG_Z, FLAG_C};
wire[7:0] SB;
wire[7:0] ALU_A, ALU_B;
wire[7:0] RES;
wire[2:0] ALU_OP;
reg[8:0] eALU; // with carry
wire[7:0] ALU = eALU;
wire ALU_CF = eALU[8];
wire CF_IN, DF_IN;
wire CF_OUT, VF_OUT;
reg so_prev = 0;
reg nmi_prev = 0;
wire irq_active = ~irq & ~FLAG_I;
wire nmi_active = ~nmi & nmi_prev;
wire int_active = irq_active | nmi_active;
wire rst_active = ~rst;
wire so_active = so & ~so_prev;
wire[1:0] vec_bits=
nmi_active?2'b01:
rst_active?2'b10:
2'b11;
wire[15:0] vec_addr = {{13{1'b1}}, vec_bits, 1'b0};
wire[7:0] IR_eff = int_active?8'b0:IR;
wire[10:0] L = {T, IR_eff};
`include "states.v"
assign read = ~A_RW_W;
assign sync = !T;
assign SB = A_SB_DB? db_in:
A_SB_AC? AC:
A_SB_X? X:
A_SB_Y? Y:
A_SB_S? S:
A_SB_P? P:
A_SB_ALU? ALU:
A_SB_0? 8'b0:
A_SB_PCH? PCH:
A_SB_PCL? PCL:
8'bX;
assign CF_IN = A_ALU_CF_0? 1'b0:
A_ALU_CF_1? 1'b1:
A_ALU_CF_ALUC? ALU_CF:
FLAG_C;
assign DF_IN = A_ALU_DF_D? FLAG_D: 1'b0;
assign ALU_A =
A_ALU_A_AC? AC:
A_ALU_A_X? X:
A_ALU_A_Y? Y:
A_ALU_A_DB? db_in:
A_ALU_A_EAL? EAL:
A_ALU_A_ALU? ALU:
A_ALU_A_S? S:
A_ALU_A_SIGN? (EAL[7]?8'b11111111:8'b00000001):
8'bX;
assign ALU_B = A_ALU_B_SB? SB:
A_ALU_B_NOTSB? ~SB:
8'bX;
 
assign ALU_OP = A_ALU_OP_ADC? `ALU_ADC:
A_ALU_OP_ORA? `ALU_ORA:
A_ALU_OP_EOR? `ALU_EOR:
A_ALU_OP_AND? `ALU_AND:
A_ALU_OP_ASL? `ALU_ASL:
A_ALU_OP_LSR? `ALU_LSR:
A_ALU_OP_ROL? `ALU_ROL:
A_ALU_OP_ROR? `ALU_ROR:
8'bX;
 
ag6502_alu alu(ALU_A, ALU_B, ALU_OP, A_ALU_B_NOTSB, CF_IN, DF_IN, RES, CF_OUT, VF_OUT);
always @(posedge phi_1) begin
if (E_AB__PC) ab <= PC;
else if (E_AB__EA) ab <= EA;
else if (E_AB__S) ab <= {8'b1, S};
 
if (E_DB__SB) db_out <= SB;
else if (E_DB__PCH) db_out <= PCH;
else if (E_DB__PCL) db_out <= PCL;
else if (E_DB__P) db_out <= P;
else if (E_DB__ALU) db_out <= ALU;
if (read) rdyg <= rdy;
end
 
 
wire cond;
assign cond =
E_T__0IFNF__IR_5_?(FLAG_N != IR[5]):
E_T__0IFVF__IR_5_?(FLAG_V != IR[5]):
E_T__0IFCF__IR_5_?(FLAG_C != IR[5]):
E_T__0IFZF__IR_5_?(FLAG_Z != IR[5]):
E_T__0IFZF__IR_5_?(FLAG_Z != IR[5]):
E_T__0IF_C7F? CF_OUT == EAL[7]:
E_T__0;
always @(negedge phi_2) if (rdyg) begin
if (E_PC__PC_1) PC <= PC + 1;
else if (E_PC__EA) PC <= EA;
else begin
if (E_PCH__RES) PC[15:8] <= RES;
if (E_PCL__ALU) PC[7:0] <= ALU;
else if (E_PCL__RES) PC[7:0] <= RES;
else if (E_PCL__EAL) PC[7:0] <= EAL;
else if (E_PCL__DB) PC[7:0] <= db_in;
end
if (!T) begin
IR <= db_in;
if (!db_in) begin // BRK instruction
{EAH, EAL} <= vec_addr;
end
nmi_prev <= nmi;
end
if (E_N_Z__SB) begin FLAG_Z <= !SB; FLAG_N <= SB[7]; end
else if (E_N_Z__RES) begin FLAG_Z <= !RES; FLAG_N <= RES[7]; end
else if (E_N_Z__SB_RES) begin FLAG_Z <= !RES; FLAG_N <= SB[7]; end
if (E_C__RES) FLAG_C <= CF_OUT;
if (E_V__RES) FLAG_V <= VF_OUT;
else if (E_V__SB_6_) FLAG_V <= SB[6];
if (E_EAL__DB) EAL <= db_in;
else if (E_EAL__ALU) EAL <= ALU;
 
if (E_EA__DB) {EAH, EAL} <= { 8'b0, db_in };
else if (E_EAH__DB) EAH <= db_in;
else if (E_EAH__ALU) EAH <= ALU;
if (E_AC__SB) AC <= SB;
else if (E_AC__RES) AC <= RES;
if (E_S__ALU) S <= ALU;
if (E_X__SB) X <= SB;
else if (E_X__RES) X <= RES;
if (E_Y__SB) Y <= SB;
else if (E_Y__RES) Y <= RES;
if (E_S__SB) S <= SB;
if (E_P__SB) {FLAG_N, FLAG_V, FLAG_B, FLAG_D, FLAG_I, FLAG_Z, FLAG_C} <= {SB[7], SB[6], SB[4], SB[3], SB[2], SB[1], SB[0]};
else if (E_P__DB) {FLAG_N, FLAG_V, FLAG_B, FLAG_D, FLAG_I, FLAG_Z, FLAG_C} <= {db_in[7], db_in[6], db_in[4], db_in[3], db_in[2], db_in[1], db_in[0]};
if (E_CF__IR_5_) FLAG_C <= IR[5];
if (E_IF__IR_5_) FLAG_I <= IR[5];
if (E_DF__IR_5_) FLAG_D <= IR[5];
if (E_VF__0) FLAG_V <= 0;
else if (so_active) FLAG_V <= 1;
so_prev <= so;
eALU <= {CF_OUT, RES};
if (cond) begin
T <= 0;
if (!IR_eff) begin
FLAG_B <= !IR;
FLAG_I <= 1;
end
end else T <= T + ((E_T__T_1IF_ALUCZ && !ALU_CF)?2: 1);
 
if (rst_active) begin
T <= 1;
IR <= 0;
{EAH, EAL} <= vec_addr;
end
end
 
 
endmodule
 
/ag_6502/trunk/agat7/ag_main.v
0,0 → 1,135
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Oleg Odintsov
//
// Create Date: 15:09:47 01/19/2012
// Design Name:
// Module Name: ag_main
// Project Name: Agat Hardware Project
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
module ROM2kx8(input[10:0] adr, input cs, output[7:0] DO);
reg[7:0] mem[0:2047];
assign DO = cs?mem[adr]:8'bZ;
initial begin
`include "monitor7.v"
end
endmodule
 
module ag_main(
input clk50,
input[3:0] btns,
output[7:0] leds,
output[3:0] controls,
output[4:0] vga_bus,
input[1:0] ps2_bus_in
);
 
// assign leds = 0;
// assign controls = 0;
// assign vga_bus = 0;
wire clk1, clk10;
clk_div#5 cd5(clk50, clk10);
clk_div#10 cd10(clk10, clk1);
 
wire clk_vram;
wire[13:0] AB2;
wire[15:0] DI2;
wire [15:0] AB; // address bus
wire [7:0] DI; // data in, read bus
wire [7:0] DO; // data out, write bus
wire read;
wire rom_cs, ram_cs;
wire phi_1, phi_2;
RAM32Kx8x16 base_ram(phi_2, AB[14:0], ram_cs, read, DI, DO,
clk_vram, AB2, 1, DI2);
ROM2kx8 rom1(AB[10:0], rom_cs, DI);
wire [3:0] AB_HH = AB[15:12];
wire [3:0] AB_HL = AB[11:8];
wire [3:0] AB_LH = AB[7:4];
wire [3:0] AB_LL = AB[3:0];
wire [7:0] AB_H = AB[15:8];
wire [7:0] AB_L = AB[7:0];
wire AB_CXXX = (AB_HH == 4'hC);
wire AB_FXXX = (AB_HH == 4'hF);
wire AB_C0XX = AB_CXXX && !AB_HL;
wire AB_C00X = AB_C0XX && (AB_LH == 4'h0);
wire AB_C01X = AB_C0XX && (AB_LH == 4'h1);
wire AB_C02X = AB_C0XX && (AB_LH == 4'h2);
wire AB_C03X = AB_C0XX && (AB_LH == 4'h3);
wire AB_C7XX = AB_CXXX && (AB_HL == 4'h7);
assign rom_cs = AB_FXXX && AB[11]; // F800-FFFF
assign ram_cs = !AB[15];
 
reg reset_auto = 1;
wire reset;
wire WE = ~read; // write enable
supply0 IRQ; // interrupt request
supply0 NMI; // non-maskable interrupt request
supply1 RDY; // Ready signal. Pauses CPU when RDY=0
supply1 SO; // Set Overflow, not used.
wire SYNC;
reg[7:0] vmode = 0;
wire[7:0] key_reg;
wire key_rus;
reg key_clear = 0;
wire key_rst, key_pause;
reg beep_reg = 0, tape_out_reg = 0;
 
assign reset = btns[0];
assign leds = AB[11:4];
assign controls = {1'b0, beep_reg ^ tape_out_reg, tape_out_reg, beep_reg};
 
ag_video video(clk50, vmode, clk_vram, AB2, DI2, vga_bus);
wire[1:0] ps2_bus;
signal_filter sf1(clk1, ps2_bus_in[0], ps2_bus[0]);
signal_filter sf2(clk1, ps2_bus_in[1], ps2_bus[1]);
 
 
ag_keyb keyb(phi_2, ps2_bus, key_reg, key_clear, key_rus, key_rst, key_pause);
assign DI = (AB_C00X && !WE)?key_reg:8'bZ;
always @(posedge phi_2) begin
key_clear <= AB_C01X;
if (AB_C02X) tape_out_reg <= ~tape_out_reg;
if (AB_C03X) beep_reg <= ~beep_reg;
if (AB_C7XX) vmode <= AB_L;
end
always @(posedge vga_bus[0]) begin
reset_auto <= 0;
end
ag6502_ext_clock clk(clk50, clk1, phi_1, phi_2);
ag6502 cpu(clk1, phi_1, phi_2, AB, read, DI, DO,
RDY & ~key_pause, ~(reset | reset_auto | key_rst), ~IRQ, ~NMI, SO, SYNC);
 
endmodule
/ag_6502/trunk/agat7/clkdiv.v
0,0 → 1,37
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 23:20:37 02/23/2012
// Design Name:
// Module Name: clkdiv
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
module clk_div(input clk, output clk1);
parameter divide = 16;
wire clk0;
 
DCM_SP #(
.CLKDV_DIVIDE(divide) // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
) DCM_SP_inst (
.CLKDV(clk1), // Divided DCM CLK out (CLKDV_DIVIDE)
.CLKIN(clk), // Clock input (from IBUFG, BUFG or DCM)
.CLK0(clk0),
.CLKFB(clk0),
.RST(0)
);
 
endmodule
/ag_6502/trunk/agat7/chip1.ucf
0,0 → 1,62
 
 
NET "b1" LOC = D18;
NET "b2" LOC = K17;
 
NET "b1" PULLDOWN;
NET "b2" PULLDOWN;
 
NET "b1" CLOCK_DEDICATED_ROUTE = FALSE;
NET "b2" CLOCK_DEDICATED_ROUTE = FALSE;
NET "rot_a" CLOCK_DEDICATED_ROUTE = FALSE;
NET "rot_b" CLOCK_DEDICATED_ROUTE = FALSE;
NET "rot_center" CLOCK_DEDICATED_ROUTE = FALSE;
 
NET "clk" LOC = C9 | IOSTANDARD = "LVCMOS33";
NET "clk" CLOCK_DEDICATED_ROUTE = FALSE;
//PIN "cpu1/cd5/DCM_SP_inst.CLKIN" CLOCK_DEDICATED_ROUTE = FALSE;
NET "ROT_A" LOC = K18 | IOSTANDARD = "LVTTL" | PULLUP;
NET "ROT_B" LOC = G18 | IOSTANDARD = "LVTTL" | PULLUP;
NET "ROT_CENTER" LOC = V16 | IOSTANDARD = "LVTTL" | PULLDOWN;
 
NET "LED<7>" LOC = F9 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
NET "LED<6>" LOC = E9 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
NET "LED<5>" LOC = D11 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
NET "LED<4>" LOC = C11 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
NET "LED<3>" LOC = F11 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
NET "LED<2>" LOC = E11 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
NET "LED<1>" LOC = E12 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
NET "LED<0>" LOC = F12 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 8;
 
NET "VGA_RED" LOC = H14 | IOSTANDARD = "LVTTL" | DRIVE = 8 | SLEW = FAST;
NET "VGA_GREEN" LOC = H15 | IOSTANDARD = "LVTTL" | DRIVE = 8 | SLEW = FAST;
NET "VGA_BLUE" LOC = G15 | IOSTANDARD = "LVTTL" | DRIVE = 8 | SLEW = FAST;
NET "VGA_HSYNC" LOC = F15 | IOSTANDARD = "LVTTL" | DRIVE = 8 | SLEW = FAST;
NET "VGA_VSYNC" LOC = F14 | IOSTANDARD = "LVTTL" | DRIVE = 8 | SLEW = FAST;
 
NET "J4<0>" LOC = D7 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 6;
NET "J4<1>" LOC = C7 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 6;
NET "J4<2>" LOC = F8 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 6;
NET "J4<3>" LOC = E8 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 6;
#Created by Constraints Editor (xc3s500e-fg320-4) - 2012/01/19
NET "clk" TNM_NET = clk;
TIMESPEC TS_clk = PERIOD "clk" 50 MHz HIGH 50%;
 
#NET "SPI_MISO" LOC = "N10" | IOSTANDARD = LVCMOS33 ;
NET "SPI_MOSI" LOC = T4 | IOSTANDARD = "LVCMOS33" | SLEW = SLOW | DRIVE = 8;
NET "SPI_MISO" LOC = N10 | IOSTANDARD = "LVCMOS33";
NET "SPI_SCK" LOC = U16 | IOSTANDARD = "LVCMOS33" | SLEW = SLOW | DRIVE = 8;
NET "DAC_CS" LOC = N8 | IOSTANDARD = "LVCMOS33" | SLEW = SLOW | DRIVE = 8;
NET "DAC_CLR" LOC = P8 | IOSTANDARD = "LVCMOS33" | SLEW = SLOW | DRIVE = 8;
 
NET "spi_amp_cs" LOC = N7 | IOSTANDARD = "LVCMOS33" | SLEW = SLOW | DRIVE = 8;
NET "spi_rom_cs" LOC = U3 | IOSTANDARD = "LVCMOS33" | SLEW = SLOW | DRIVE = 8;
NET "platformflash_oe" LOC = T3 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 2;
NET "strataflash_oe" LOC = C18 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 2;
NET "strataflash_ce" LOC = D16 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 2;
NET "strataflash_we" LOC = D17 | IOSTANDARD = "LVTTL" | SLEW = SLOW | DRIVE = 2;
NET "spi_adc_conv" LOC = P11 | IOSTANDARD = "LVCMOS33" | SLEW = SLOW | DRIVE = 8;
 
NET "PS2_CLK" LOC = G14 | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW | PULLUP;
NET "PS2_DATA" LOC = G13 | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW | PULLUP;
NET "PS2_CLK" CLOCK_DEDICATED_ROUTE = FALSE;
/ag_6502/trunk/agat7/ag_video.v
0,0 → 1,173
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Oleg Odintsov
//
// Create Date: 11:44:32 02/24/2012
// Design Name:
// Module Name: ag_video
// Project Name: Agat Hardware Project
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
 
module FONT_ROM(input[10:0] adr, input cs, output[7:0] DO);
reg[7:0] mem[0:2047];
assign DO = cs?mem[adr]:8'bZ;
initial begin
`include "agathe7.v"
end
endmodule
 
 
module ag_video(input clk50,
input[7:0] vmode,
output clk_vram,
output[13:0] AB2, input[15:0] DI2,
output[4:0] vga_bus);
parameter
HGR_WHITE = 4'b1111, // RGBX
HGR_BLACK = 4'b0000,
TEXT_COLOR= 4'b1111,
TEXT_BACK = 4'b0000;
wire clk25;
assign clk_vram = ~clk25;
wire[0:15] rDI2 = DI2;
// assign AB2 = 14'b0;
clk_div#2 cd2(clk50, clk25);
wire [9:0] hpos;
wire [8:0] vpos;
wire video_on;
reg[8:0] hpos1;
reg[7:0] vpos1;
wire[1:0] VTYPE = vmode[1:0];
// for 64K+ - variant
// wire[2:0] PAGE_ADDR = {vmode[6], vmode[6]? 1'b0: vmode[5], vmode[4]};
// for 32K-variant
wire[2:0] PAGE_ADDR = {0, vmode[5], vmode[4]};
wire[1:0] SUBPAGE_ADDR = vmode[3:2];
wire VTYPE_HGR = (VTYPE == 2'b11);
wire VTYPE_MGR = (VTYPE == 2'b01);
wire VTYPE_LGR = (VTYPE == 2'b00);
wire VTYPE_TXT = (VTYPE == 2'b10);
wire VTYPE_T32 = VTYPE_TXT && !vmode[7];
wire VTYPE_T64 = VTYPE_TXT && vmode[7];
wire VTYPE_T64_INV = VTYPE_T64 && !SUBPAGE_ADDR[0];
wire[13:0] HGR_ADDR = {PAGE_ADDR[1:0], vpos1, hpos1[8:5]};
wire[3:0] HGR_BITNO = hpos1[4:1];
wire HGR_BIT = rDI2[HGR_BITNO];
wire[3:0] HGR_COLOR = HGR_BIT? HGR_WHITE: HGR_BLACK;
 
wire[13:0] MGR_ADDR = {PAGE_ADDR[1:0], vpos1[7:1], hpos1[8:4]};
wire[1:0] MGR_BLOCKNO = hpos1[3:2];
 
wire[13:0] LGR_ADDR = {PAGE_ADDR[1:0], SUBPAGE_ADDR, vpos1[7:2], hpos1[8:5]};
wire[1:0] LGR_BLOCKNO = hpos1[4:3];
wire[1:0] GR_BLOCKNO = VTYPE_MGR?MGR_BLOCKNO:
LGR_BLOCKNO;
wire[3:0] GR_COLOR = (GR_BLOCKNO == 2'b00)? {DI2[12], DI2[13], DI2[14], DI2[15]}:
(GR_BLOCKNO == 2'b01)? {DI2[8], DI2[9], DI2[10], DI2[11]}:
(GR_BLOCKNO == 2'b10)? {DI2[4], DI2[5], DI2[6], DI2[7]}:
{DI2[0], DI2[1], DI2[2], DI2[3]};
 
wire[13:0] TEXT_ADDR = {PAGE_ADDR[1:0], SUBPAGE_ADDR, vpos1[7:3], hpos1[8:4]};
wire h_phase = hpos1[1:0]?0:1;
reg[0:0] h_cnt = 0;
wire[0:0] h_delay = h_phase?1'd1:1'd0;
wire v_phase = vpos1[2:0]?1:0;
reg[0:0] v_cnt = 0;
wire[0:0] v_delay = v_phase?1'd1:1'd0;
wire[7:0] font_char;
wire[2:0] font_y, font_x;
wire[10:0] font_ab = {font_char, font_y};
wire[0:7] font_db;
wire font_pix = font_db[font_x];
 
FONT_ROM font(font_ab, 1, font_db);
integer flash_cnt = 0;
reg flash_reg = 0;
wire inverse = VTYPE_T64?VTYPE_T64_INV:!{DI2[5],DI2[3]},
flash = VTYPE_T64?font_db[7]:!{DI2[5],~DI2[3]};
wire inv_mode = inverse || (flash && flash_reg);
 
assign font_x = VTYPE_T64?hpos1[2:0]:hpos1[3:1];
assign font_y = vpos1[2:0];
assign font_char = (VTYPE_T64 && hpos1[3])? DI2[7:0]: DI2[15:8];
wire[3:0] T_COLOR = VTYPE_T64? TEXT_COLOR: {DI2[0], DI2[1], DI2[2], DI2[4]};
 
assign AB2 = VTYPE_HGR? HGR_ADDR:
VTYPE_MGR? MGR_ADDR:
VTYPE_LGR? LGR_ADDR:
TEXT_ADDR;
wire[2:0] color = VTYPE_HGR? HGR_COLOR[3:1]:
(VTYPE_MGR | VTYPE_LGR)? GR_COLOR[3:1]:
((font_pix^inv_mode)?T_COLOR[3:1]: TEXT_BACK);
reg[2:0] color_reg;
always @(posedge clk25) begin
if (!vga_bus[1]) begin
hpos1 <= 0;
h_cnt <= 1;
end else if (video_on) begin
if (!h_cnt) begin
h_cnt <= h_delay;
hpos1 <= hpos1 + 1;
end else h_cnt <= h_cnt - 1;
end
end
always @(posedge clk25) color_reg <= color;
always @(posedge video_on) begin
if (!vpos) begin
vpos1 <= 0;
v_cnt <= 1;
end else begin
if (!v_cnt) begin
v_cnt <= v_delay;
vpos1 <= vpos1 + 1;
end else v_cnt <= v_cnt - 1;
end
end
always @(posedge vga_bus[0]) begin
if (flash_cnt) flash_cnt <= flash_cnt - 1;
else begin
flash_cnt <= 11;
flash_reg <= ~flash_reg;
end
end
assign {vga_bus[4], vga_bus[3], vga_bus[2]} = video_on?color_reg:3'b000;
video_counters cnt(clk25, vga_bus[0], vga_bus[1], video_on, hpos, vpos);
endmodule
/ag_6502/trunk/agat7/monitor7.v
0,0 → 1,2048
mem['h000] = 'h48;
mem['h001] = 'h4A;
mem['h002] = 'h4A;
mem['h003] = 'h4A;
mem['h004] = 'h4A;
mem['h005] = 'hA8;
mem['h006] = 'h68;
mem['h007] = 'h59;
mem['h008] = 'h19;
mem['h009] = 'hF8;
mem['h00A] = 'hC9;
mem['h00B] = 'hA0;
mem['h00C] = 'hB0;
mem['h00D] = 'h08;
mem['h00E] = 'hC9;
mem['h00F] = 'h90;
mem['h010] = 'h90;
mem['h011] = 'h04;
mem['h012] = 'hA8;
mem['h013] = 'hB9;
mem['h014] = 'h91;
mem['h015] = 'hF7;
mem['h016] = 'hA4;
mem['h017] = 'h24;
mem['h018] = 'h60;
mem['h019] = 'h80;
mem['h01A] = 'hB0;
mem['h01B] = 'hD0;
mem['h01C] = 'hD0;
mem['h01D] = 'hD0;
mem['h01E] = 'hE0;
mem['h01F] = 'hB0;
mem['h020] = 'hB0;
mem['h021] = 'h88;
mem['h022] = 'hA0;
mem['h023] = 'h8D;
mem['h024] = 'h93;
mem['h025] = 'h94;
mem['h026] = 'h98;
mem['h027] = 'h96;
mem['h028] = 'h97;
mem['h029] = 'h95;
mem['h02A] = 'h99;
mem['h02B] = 'h9A;
mem['h02C] = 'h9B;
mem['h02D] = 'h9C;
mem['h02E] = 'h9D;
mem['h02F] = 'h9E;
mem['h030] = 'h9B;
mem['h031] = 'h86;
mem['h032] = 'h2C;
mem['h033] = 'hBC;
mem['h034] = 'h5A;
mem['h035] = 'hF8;
mem['h036] = 'h0A;
mem['h037] = 'h0A;
mem['h038] = 'h48;
mem['h039] = 'h0A;
mem['h03A] = 'hC9;
mem['h03B] = 'hC0;
mem['h03C] = 'h90;
mem['h03D] = 'h02;
mem['h03E] = 'hE9;
mem['h03F] = 'h3F;
mem['h040] = 'h99;
mem['h041] = 'h00;
mem['h042] = 'h00;
mem['h043] = 'h7D;
mem['h044] = 'h56;
mem['h045] = 'hF8;
mem['h046] = 'h45;
mem['h047] = 'h1E;
mem['h048] = 'h29;
mem['h049] = 'hF8;
mem['h04A] = 'h45;
mem['h04B] = 'h1E;
mem['h04C] = 'h85;
mem['h04D] = 'h1E;
mem['h04E] = 'h68;
mem['h04F] = 'h65;
mem['h050] = 'h2C;
mem['h051] = 'hAA;
mem['h052] = 'h9D;
mem['h053] = 'h00;
mem['h054] = 'hC7;
mem['h055] = 'h60;
mem['h056] = 'h08;
mem['h057] = 'h20;
mem['h058] = 'h08;
mem['h059] = 'h20;
mem['h05A] = 'hD0;
mem['h05B] = 'hD0;
mem['h05C] = 'h19;
mem['h05D] = 'hD0;
mem['h05E] = 'h29;
mem['h05F] = 'h07;
mem['h060] = 'hA8;
mem['h061] = 'hB9;
mem['h062] = 'h69;
mem['h063] = 'hF8;
mem['h064] = 'hA8;
mem['h065] = 'h99;
mem['h066] = 'hF0;
mem['h067] = 'hC0;
mem['h068] = 'h60;
mem['h069] = 'h00;
mem['h06A] = 'h01;
mem['h06B] = 'h0A;
mem['h06C] = 'h0B;
mem['h06D] = 'h06;
mem['h06E] = 'h07;
mem['h06F] = 'h02;
mem['h070] = 'h03;
mem['h071] = 'hA6;
mem['h072] = 'h3A;
mem['h073] = 'hA4;
mem['h074] = 'h3B;
mem['h075] = 'h20;
mem['h076] = 'h7D;
mem['h077] = 'hFD;
mem['h078] = 'h20;
mem['h079] = 'h5A;
mem['h07A] = 'hFF;
mem['h07B] = 'hA1;
mem['h07C] = 'h3A;
mem['h07D] = 'hA8;
mem['h07E] = 'h4A;
mem['h07F] = 'h90;
mem['h080] = 'h09;
mem['h081] = 'h6A;
mem['h082] = 'hB0;
mem['h083] = 'h15;
mem['h084] = 'hC9;
mem['h085] = 'hA2;
mem['h086] = 'hF0;
mem['h087] = 'h11;
mem['h088] = 'h29;
mem['h089] = 'h87;
mem['h08A] = 'h4A;
mem['h08B] = 'hAA;
mem['h08C] = 'hBD;
mem['h08D] = 'h48;
mem['h08E] = 'hF9;
mem['h08F] = 'hB0;
mem['h090] = 'h04;
mem['h091] = 'h4A;
mem['h092] = 'h4A;
mem['h093] = 'h4A;
mem['h094] = 'h4A;
mem['h095] = 'h29;
mem['h096] = 'h0F;
mem['h097] = 'hD0;
mem['h098] = 'h04;
mem['h099] = 'hA0;
mem['h09A] = 'h80;
mem['h09B] = 'hA9;
mem['h09C] = 'h00;
mem['h09D] = 'hAA;
mem['h09E] = 'hBD;
mem['h09F] = 'h8C;
mem['h0A0] = 'hF9;
mem['h0A1] = 'h85;
mem['h0A2] = 'h2E;
mem['h0A3] = 'h29;
mem['h0A4] = 'h03;
mem['h0A5] = 'h85;
mem['h0A6] = 'h2F;
mem['h0A7] = 'h98;
mem['h0A8] = 'h29;
mem['h0A9] = 'h8F;
mem['h0AA] = 'hAA;
mem['h0AB] = 'h98;
mem['h0AC] = 'hA0;
mem['h0AD] = 'h03;
mem['h0AE] = 'hE0;
mem['h0AF] = 'h8A;
mem['h0B0] = 'hF0;
mem['h0B1] = 'h0B;
mem['h0B2] = 'h4A;
mem['h0B3] = 'h90;
mem['h0B4] = 'h08;
mem['h0B5] = 'h4A;
mem['h0B6] = 'h4A;
mem['h0B7] = 'h09;
mem['h0B8] = 'h20;
mem['h0B9] = 'h88;
mem['h0BA] = 'hD0;
mem['h0BB] = 'hFA;
mem['h0BC] = 'hC8;
mem['h0BD] = 'h88;
mem['h0BE] = 'hD0;
mem['h0BF] = 'hF2;
mem['h0C0] = 'h60;
mem['h0C1] = 'h20;
mem['h0C2] = 'h71;
mem['h0C3] = 'hF8;
mem['h0C4] = 'h48;
mem['h0C5] = 'hB1;
mem['h0C6] = 'h3A;
mem['h0C7] = 'h20;
mem['h0C8] = 'hC1;
mem['h0C9] = 'hFD;
mem['h0CA] = 'hA2;
mem['h0CB] = 'h01;
mem['h0CC] = 'h20;
mem['h0CD] = 'h5C;
mem['h0CE] = 'hFF;
mem['h0CF] = 'hC4;
mem['h0D0] = 'h2F;
mem['h0D1] = 'hC8;
mem['h0D2] = 'h90;
mem['h0D3] = 'hF1;
mem['h0D4] = 'hA2;
mem['h0D5] = 'h03;
mem['h0D6] = 'hC0;
mem['h0D7] = 'h04;
mem['h0D8] = 'h90;
mem['h0D9] = 'hF2;
mem['h0DA] = 'h68;
mem['h0DB] = 'hA8;
mem['h0DC] = 'hB9;
mem['h0DD] = 'hA6;
mem['h0DE] = 'hF9;
mem['h0DF] = 'h85;
mem['h0E0] = 'h2C;
mem['h0E1] = 'hB9;
mem['h0E2] = 'hE6;
mem['h0E3] = 'hF9;
mem['h0E4] = 'h85;
mem['h0E5] = 'h2D;
mem['h0E6] = 'hA9;
mem['h0E7] = 'h00;
mem['h0E8] = 'hA0;
mem['h0E9] = 'h05;
mem['h0EA] = 'h06;
mem['h0EB] = 'h2D;
mem['h0EC] = 'h26;
mem['h0ED] = 'h2C;
mem['h0EE] = 'h2A;
mem['h0EF] = 'h88;
mem['h0F0] = 'hD0;
mem['h0F1] = 'hF8;
mem['h0F2] = 'h69;
mem['h0F3] = 'hBF;
mem['h0F4] = 'h20;
mem['h0F5] = 'hD4;
mem['h0F6] = 'hFD;
mem['h0F7] = 'hCA;
mem['h0F8] = 'hD0;
mem['h0F9] = 'hEC;
mem['h0FA] = 'h20;
mem['h0FB] = 'h5A;
mem['h0FC] = 'hFF;
mem['h0FD] = 'hA4;
mem['h0FE] = 'h2F;
mem['h0FF] = 'hA2;
mem['h100] = 'h06;
mem['h101] = 'hE0;
mem['h102] = 'h03;
mem['h103] = 'hF0;
mem['h104] = 'h1C;
mem['h105] = 'h06;
mem['h106] = 'h2E;
mem['h107] = 'h90;
mem['h108] = 'h0E;
mem['h109] = 'hBD;
mem['h10A] = 'h99;
mem['h10B] = 'hF9;
mem['h10C] = 'h20;
mem['h10D] = 'hD4;
mem['h10E] = 'hFD;
mem['h10F] = 'hBD;
mem['h110] = 'h9F;
mem['h111] = 'hF9;
mem['h112] = 'hF0;
mem['h113] = 'h03;
mem['h114] = 'h20;
mem['h115] = 'hD4;
mem['h116] = 'hFD;
mem['h117] = 'hCA;
mem['h118] = 'hD0;
mem['h119] = 'hE7;
mem['h11A] = 'h60;
mem['h11B] = 'h88;
mem['h11C] = 'h30;
mem['h11D] = 'hE7;
mem['h11E] = 'h20;
mem['h11F] = 'hC1;
mem['h120] = 'hFD;
mem['h121] = 'hA5;
mem['h122] = 'h2E;
mem['h123] = 'hC9;
mem['h124] = 'hE8;
mem['h125] = 'hB1;
mem['h126] = 'h3A;
mem['h127] = 'h90;
mem['h128] = 'hF2;
mem['h129] = 'h20;
mem['h12A] = 'h3C;
mem['h12B] = 'hF9;
mem['h12C] = 'hAA;
mem['h12D] = 'hE8;
mem['h12E] = 'hD0;
mem['h12F] = 'h01;
mem['h130] = 'hC8;
mem['h131] = 'h98;
mem['h132] = 'h20;
mem['h133] = 'hC1;
mem['h134] = 'hFD;
mem['h135] = 'h8A;
mem['h136] = 'h4C;
mem['h137] = 'hC1;
mem['h138] = 'hFD;
mem['h139] = 'h38;
mem['h13A] = 'hA5;
mem['h13B] = 'h2F;
mem['h13C] = 'hA4;
mem['h13D] = 'h3B;
mem['h13E] = 'hAA;
mem['h13F] = 'h10;
mem['h140] = 'h01;
mem['h141] = 'h88;
mem['h142] = 'h65;
mem['h143] = 'h3A;
mem['h144] = 'h90;
mem['h145] = 'h01;
mem['h146] = 'hC8;
mem['h147] = 'h60;
mem['h148] = 'h40;
mem['h149] = 'h02;
mem['h14A] = 'h45;
mem['h14B] = 'h03;
mem['h14C] = 'hD0;
mem['h14D] = 'h08;
mem['h14E] = 'h40;
mem['h14F] = 'h09;
mem['h150] = 'h30;
mem['h151] = 'h22;
mem['h152] = 'h45;
mem['h153] = 'h33;
mem['h154] = 'hD0;
mem['h155] = 'h08;
mem['h156] = 'h40;
mem['h157] = 'h09;
mem['h158] = 'h40;
mem['h159] = 'h02;
mem['h15A] = 'h45;
mem['h15B] = 'h33;
mem['h15C] = 'hD0;
mem['h15D] = 'h08;
mem['h15E] = 'h40;
mem['h15F] = 'h09;
mem['h160] = 'h40;
mem['h161] = 'h02;
mem['h162] = 'h45;
mem['h163] = 'hB3;
mem['h164] = 'hD0;
mem['h165] = 'h08;
mem['h166] = 'h40;
mem['h167] = 'h09;
mem['h168] = 'h00;
mem['h169] = 'h22;
mem['h16A] = 'h44;
mem['h16B] = 'h33;
mem['h16C] = 'hD0;
mem['h16D] = 'h8C;
mem['h16E] = 'h44;
mem['h16F] = 'h00;
mem['h170] = 'h11;
mem['h171] = 'h22;
mem['h172] = 'h44;
mem['h173] = 'h33;
mem['h174] = 'hD0;
mem['h175] = 'h8C;
mem['h176] = 'h44;
mem['h177] = 'h9A;
mem['h178] = 'h10;
mem['h179] = 'h22;
mem['h17A] = 'h44;
mem['h17B] = 'h33;
mem['h17C] = 'hD0;
mem['h17D] = 'h08;
mem['h17E] = 'h40;
mem['h17F] = 'h09;
mem['h180] = 'h10;
mem['h181] = 'h22;
mem['h182] = 'h44;
mem['h183] = 'h33;
mem['h184] = 'hD0;
mem['h185] = 'h08;
mem['h186] = 'h40;
mem['h187] = 'h09;
mem['h188] = 'h62;
mem['h189] = 'h13;
mem['h18A] = 'h78;
mem['h18B] = 'hA9;
mem['h18C] = 'h00;
mem['h18D] = 'h21;
mem['h18E] = 'h81;
mem['h18F] = 'h82;
mem['h190] = 'h00;
mem['h191] = 'h00;
mem['h192] = 'h59;
mem['h193] = 'h4D;
mem['h194] = 'h91;
mem['h195] = 'h92;
mem['h196] = 'h86;
mem['h197] = 'h4A;
mem['h198] = 'h85;
mem['h199] = 'h9D;
mem['h19A] = 'hAC;
mem['h19B] = 'hA9;
mem['h19C] = 'hAC;
mem['h19D] = 'hA3;
mem['h19E] = 'hA8;
mem['h19F] = 'hA4;
mem['h1A0] = 'hD9;
mem['h1A1] = 'h00;
mem['h1A2] = 'hD8;
mem['h1A3] = 'hA4;
mem['h1A4] = 'hA4;
mem['h1A5] = 'h00;
mem['h1A6] = 'h1C;
mem['h1A7] = 'h8A;
mem['h1A8] = 'h1C;
mem['h1A9] = 'h23;
mem['h1AA] = 'h5D;
mem['h1AB] = 'h8B;
mem['h1AC] = 'h1B;
mem['h1AD] = 'hA1;
mem['h1AE] = 'h9D;
mem['h1AF] = 'h8A;
mem['h1B0] = 'h1D;
mem['h1B1] = 'h23;
mem['h1B2] = 'h9D;
mem['h1B3] = 'h8B;
mem['h1B4] = 'h1D;
mem['h1B5] = 'hA1;
mem['h1B6] = 'h00;
mem['h1B7] = 'h29;
mem['h1B8] = 'h19;
mem['h1B9] = 'hAE;
mem['h1BA] = 'h69;
mem['h1BB] = 'hA8;
mem['h1BC] = 'h19;
mem['h1BD] = 'h23;
mem['h1BE] = 'h24;
mem['h1BF] = 'h53;
mem['h1C0] = 'h1B;
mem['h1C1] = 'h23;
mem['h1C2] = 'h24;
mem['h1C3] = 'h53;
mem['h1C4] = 'h19;
mem['h1C5] = 'hA1;
mem['h1C6] = 'h00;
mem['h1C7] = 'h1A;
mem['h1C8] = 'h5B;
mem['h1C9] = 'h5B;
mem['h1CA] = 'hA5;
mem['h1CB] = 'h69;
mem['h1CC] = 'h24;
mem['h1CD] = 'h24;
mem['h1CE] = 'hAE;
mem['h1CF] = 'hAE;
mem['h1D0] = 'hA8;
mem['h1D1] = 'hAD;
mem['h1D2] = 'h29;
mem['h1D3] = 'h00;
mem['h1D4] = 'h7C;
mem['h1D5] = 'h00;
mem['h1D6] = 'h15;
mem['h1D7] = 'h9C;
mem['h1D8] = 'h6D;
mem['h1D9] = 'h9C;
mem['h1DA] = 'hA5;
mem['h1DB] = 'h69;
mem['h1DC] = 'h29;
mem['h1DD] = 'h53;
mem['h1DE] = 'h84;
mem['h1DF] = 'h13;
mem['h1E0] = 'h34;
mem['h1E1] = 'h11;
mem['h1E2] = 'hA5;
mem['h1E3] = 'h69;
mem['h1E4] = 'h23;
mem['h1E5] = 'hA0;
mem['h1E6] = 'hD8;
mem['h1E7] = 'h62;
mem['h1E8] = 'h5A;
mem['h1E9] = 'h48;
mem['h1EA] = 'h26;
mem['h1EB] = 'h62;
mem['h1EC] = 'h94;
mem['h1ED] = 'h88;
mem['h1EE] = 'h54;
mem['h1EF] = 'h44;
mem['h1F0] = 'hC8;
mem['h1F1] = 'h54;
mem['h1F2] = 'h68;
mem['h1F3] = 'h44;
mem['h1F4] = 'hE8;
mem['h1F5] = 'h94;
mem['h1F6] = 'h00;
mem['h1F7] = 'hB4;
mem['h1F8] = 'h08;
mem['h1F9] = 'h84;
mem['h1FA] = 'h74;
mem['h1FB] = 'hB4;
mem['h1FC] = 'h28;
mem['h1FD] = 'h6E;
mem['h1FE] = 'h74;
mem['h1FF] = 'hF4;
mem['h200] = 'hCC;
mem['h201] = 'h4A;
mem['h202] = 'h72;
mem['h203] = 'hF2;
mem['h204] = 'hA4;
mem['h205] = 'h8A;
mem['h206] = 'h00;
mem['h207] = 'hAA;
mem['h208] = 'hA2;
mem['h209] = 'hA2;
mem['h20A] = 'h74;
mem['h20B] = 'h74;
mem['h20C] = 'h74;
mem['h20D] = 'h72;
mem['h20E] = 'h44;
mem['h20F] = 'h68;
mem['h210] = 'hB2;
mem['h211] = 'h32;
mem['h212] = 'hB2;
mem['h213] = 'h00;
mem['h214] = 'h22;
mem['h215] = 'h00;
mem['h216] = 'h1A;
mem['h217] = 'h1A;
mem['h218] = 'h26;
mem['h219] = 'h26;
mem['h21A] = 'h72;
mem['h21B] = 'h72;
mem['h21C] = 'h88;
mem['h21D] = 'hC8;
mem['h21E] = 'hC4;
mem['h21F] = 'hCA;
mem['h220] = 'h26;
mem['h221] = 'h48;
mem['h222] = 'h44;
mem['h223] = 'h44;
mem['h224] = 'hA2;
mem['h225] = 'hC8;
mem['h226] = 'h85;
mem['h227] = 'h45;
mem['h228] = 'h68;
mem['h229] = 'h48;
mem['h22A] = 'h0A;
mem['h22B] = 'h0A;
mem['h22C] = 'h0A;
mem['h22D] = 'h30;
mem['h22E] = 'h03;
mem['h22F] = 'h6C;
mem['h230] = 'hFE;
mem['h231] = 'h03;
mem['h232] = 'h28;
mem['h233] = 'h20;
mem['h234] = 'h4D;
mem['h235] = 'hFF;
mem['h236] = 'h68;
mem['h237] = 'h85;
mem['h238] = 'h3A;
mem['h239] = 'h68;
mem['h23A] = 'h85;
mem['h23B] = 'h3B;
mem['h23C] = 'h6C;
mem['h23D] = 'hF0;
mem['h23E] = 'h03;
mem['h23F] = 'h20;
mem['h240] = 'h71;
mem['h241] = 'hF8;
mem['h242] = 'h20;
mem['h243] = 'hD0;
mem['h244] = 'hFA;
mem['h245] = 'h4C;
mem['h246] = 'h65;
mem['h247] = 'hFF;
mem['h248] = 'hD8;
mem['h249] = 'h20;
mem['h24A] = 'h7B;
mem['h24B] = 'hFE;
mem['h24C] = 'h20;
mem['h24D] = 'h3C;
mem['h24E] = 'hFB;
mem['h24F] = 'h20;
mem['h250] = 'h8A;
mem['h251] = 'hFE;
mem['h252] = 'h20;
mem['h253] = 'h80;
mem['h254] = 'hFE;
mem['h255] = 'h2C;
mem['h256] = 'h10;
mem['h257] = 'hC0;
mem['h258] = 'hD8;
mem['h259] = 'h20;
mem['h25A] = 'h3B;
mem['h25B] = 'hFF;
mem['h25C] = 'hAD;
mem['h25D] = 'hF3;
mem['h25E] = 'h03;
mem['h25F] = 'h49;
mem['h260] = 'hA5;
mem['h261] = 'hCD;
mem['h262] = 'hF4;
mem['h263] = 'h03;
mem['h264] = 'hD0;
mem['h265] = 'h1C;
mem['h266] = 'h20;
mem['h267] = 'h2E;
mem['h268] = 'hFB;
mem['h269] = 'hAD;
mem['h26A] = 'hF2;
mem['h26B] = 'h03;
mem['h26C] = 'hC9;
mem['h26D] = 'h69;
mem['h26E] = 'hD0;
mem['h26F] = 'h0F;
mem['h270] = 'hA9;
mem['h271] = 'hFF;
mem['h272] = 'hCD;
mem['h273] = 'hF3;
mem['h274] = 'h03;
mem['h275] = 'hD0;
mem['h276] = 'h08;
mem['h277] = 'hA0;
mem['h278] = 'h69;
mem['h279] = 'h8C;
mem['h27A] = 'hF2;
mem['h27B] = 'h03;
mem['h27C] = 'h4C;
mem['h27D] = 'h69;
mem['h27E] = 'hFF;
mem['h27F] = 'h6C;
mem['h280] = 'hF2;
mem['h281] = 'h03;
mem['h282] = 'h2C;
mem['h283] = 'hF1;
mem['h284] = 'hC0;
mem['h285] = 'hA0;
mem['h286] = 'h00;
mem['h287] = 'h84;
mem['h288] = 'h1E;
mem['h289] = 'hA9;
mem['h28A] = 'h0F;
mem['h28B] = 'hA2;
mem['h28C] = 'h02;
mem['h28D] = 'h20;
mem['h28E] = 'h31;
mem['h28F] = 'hF8;
mem['h290] = 'h20;
mem['h291] = 'h3B;
mem['h292] = 'hFC;
mem['h293] = 'hA0;
mem['h294] = 'h14;
mem['h295] = 'hB9;
mem['h296] = 'hFE;
mem['h297] = 'hFA;
mem['h298] = 'h99;
mem['h299] = 'h0F;
mem['h29A] = 'h78;
mem['h29B] = 'h88;
mem['h29C] = 'hD0;
mem['h29D] = 'hF7;
mem['h29E] = 'h2C;
mem['h29F] = 'hF0;
mem['h2A0] = 'hC0;
mem['h2A1] = 'hA2;
mem['h2A2] = 'h05;
mem['h2A3] = 'hBD;
mem['h2A4] = 'hF2;
mem['h2A5] = 'hFA;
mem['h2A6] = 'h9D;
mem['h2A7] = 'hEF;
mem['h2A8] = 'h03;
mem['h2A9] = 'hCA;
mem['h2AA] = 'hD0;
mem['h2AB] = 'hF7;
mem['h2AC] = 'hA9;
mem['h2AD] = 'hC7;
mem['h2AE] = 'h86;
mem['h2AF] = 'h00;
mem['h2B0] = 'h85;
mem['h2B1] = 'h01;
mem['h2B2] = 'hA0;
mem['h2B3] = 'h07;
mem['h2B4] = 'hC6;
mem['h2B5] = 'h01;
mem['h2B6] = 'hA5;
mem['h2B7] = 'h01;
mem['h2B8] = 'hC9;
mem['h2B9] = 'hC0;
mem['h2BA] = 'hF0;
mem['h2BB] = 'hBB;
mem['h2BC] = 'h8D;
mem['h2BD] = 'hF8;
mem['h2BE] = 'h07;
mem['h2BF] = 'hB1;
mem['h2C0] = 'h00;
mem['h2C1] = 'hD9;
mem['h2C2] = 'hF7;
mem['h2C3] = 'hFA;
mem['h2C4] = 'hD0;
mem['h2C5] = 'hEC;
mem['h2C6] = 'h88;
mem['h2C7] = 'h88;
mem['h2C8] = 'h10;
mem['h2C9] = 'hF5;
mem['h2CA] = 'h6C;
mem['h2CB] = 'h00;
mem['h2CC] = 'h00;
mem['h2CD] = 'h20;
mem['h2CE] = 'h75;
mem['h2CF] = 'hFD;
mem['h2D0] = 'hA9;
mem['h2D1] = 'h45;
mem['h2D2] = 'h85;
mem['h2D3] = 'h40;
mem['h2D4] = 'hA9;
mem['h2D5] = 'h00;
mem['h2D6] = 'h85;
mem['h2D7] = 'h41;
mem['h2D8] = 'hA2;
mem['h2D9] = 'hFB;
mem['h2DA] = 'hA9;
mem['h2DB] = 'hA0;
mem['h2DC] = 'h20;
mem['h2DD] = 'hD4;
mem['h2DE] = 'hFD;
mem['h2DF] = 'hBD;
mem['h2E0] = 'h18;
mem['h2E1] = 'hFA;
mem['h2E2] = 'h20;
mem['h2E3] = 'hD4;
mem['h2E4] = 'hFD;
mem['h2E5] = 'hA9;
mem['h2E6] = 'hBD;
mem['h2E7] = 'h20;
mem['h2E8] = 'hD4;
mem['h2E9] = 'hFD;
mem['h2EA] = 'hB5;
mem['h2EB] = 'h4A;
mem['h2EC] = 'h20;
mem['h2ED] = 'hC1;
mem['h2EE] = 'hFD;
mem['h2EF] = 'hE8;
mem['h2F0] = 'h30;
mem['h2F1] = 'hE8;
mem['h2F2] = 'h60;
mem['h2F3] = 'h3F;
mem['h2F4] = 'hFA;
mem['h2F5] = 'h69;
mem['h2F6] = 'hFF;
mem['h2F7] = 'h5A;
mem['h2F8] = 'h20;
mem['h2F9] = 'hFF;
mem['h2FA] = 'h00;
mem['h2FB] = 'hFF;
mem['h2FC] = 'h03;
mem['h2FD] = 'hFF;
mem['h2FE] = 'h3C;
mem['h2FF] = 'hAA;
mem['h300] = 'h2A;
mem['h301] = 'hAA;
mem['h302] = 'h2A;
mem['h303] = 'hA0;
mem['h304] = 'h2F;
mem['h305] = 'hE1;
mem['h306] = 'h29;
mem['h307] = 'hE7;
mem['h308] = 'h29;
mem['h309] = 'hE1;
mem['h30A] = 'h29;
mem['h30B] = 'hF4;
mem['h30C] = 'h29;
mem['h30D] = 'hA0;
mem['h30E] = 'h2F;
mem['h30F] = 'hAA;
mem['h310] = 'h2A;
mem['h311] = 'hAA;
mem['h312] = 'h2A;
mem['h313] = 'hC1;
mem['h314] = 'hD8;
mem['h315] = 'hD9;
mem['h316] = 'hD0;
mem['h317] = 'hD3;
mem['h318] = 'hAD;
mem['h319] = 'h70;
mem['h31A] = 'hC0;
mem['h31B] = 'hA0;
mem['h31C] = 'h00;
mem['h31D] = 'hEA;
mem['h31E] = 'hEA;
mem['h31F] = 'hBD;
mem['h320] = 'h64;
mem['h321] = 'hC0;
mem['h322] = 'h10;
mem['h323] = 'h07;
mem['h324] = 'hEA;
mem['h325] = 'hEA;
mem['h326] = 'hEA;
mem['h327] = 'hC8;
mem['h328] = 'hD0;
mem['h329] = 'hF5;
mem['h32A] = 'h88;
mem['h32B] = 'h60;
mem['h32C] = 'h10;
mem['h32D] = 'h08;
mem['h32E] = 'hA5;
mem['h32F] = 'h19;
mem['h330] = 'h4A;
mem['h331] = 'h90;
mem['h332] = 'h02;
mem['h333] = 'h69;
mem['h334] = 'h1F;
mem['h335] = 'h69;
mem['h336] = 'h02;
mem['h337] = 'hA8;
mem['h338] = 'h99;
mem['h339] = 'h00;
mem['h33A] = 'hC7;
mem['h33B] = 'h60;
mem['h33C] = 'hA9;
mem['h33D] = 'h00;
mem['h33E] = 'h85;
mem['h33F] = 'h48;
mem['h340] = 'h85;
mem['h341] = 'h22;
mem['h342] = 'hA9;
mem['h343] = 'h00;
mem['h344] = 'h85;
mem['h345] = 'h20;
mem['h346] = 'hA9;
mem['h347] = 'h40;
mem['h348] = 'h85;
mem['h349] = 'h21;
mem['h34A] = 'hA9;
mem['h34B] = 'h20;
mem['h34C] = 'h85;
mem['h34D] = 'h23;
mem['h34E] = 'hA9;
mem['h34F] = 'h1F;
mem['h350] = 'h85;
mem['h351] = 'h25;
mem['h352] = 'h4C;
mem['h353] = 'h2F;
mem['h354] = 'hFC;
mem['h355] = 'h20;
mem['h356] = 'h76;
mem['h357] = 'hFB;
mem['h358] = 'h20;
mem['h359] = 'h04;
mem['h35A] = 'hFD;
mem['h35B] = 'hC9;
mem['h35C] = 'h95;
mem['h35D] = 'hF0;
mem['h35E] = 'hF6;
mem['h35F] = 'hC9;
mem['h360] = 'h88;
mem['h361] = 'hF0;
mem['h362] = 'hF2;
mem['h363] = 'h20;
mem['h364] = 'h76;
mem['h365] = 'hFB;
mem['h366] = 'h20;
mem['h367] = 'h04;
mem['h368] = 'hFD;
mem['h369] = 'hC9;
mem['h36A] = 'h9B;
mem['h36B] = 'hF0;
mem['h36C] = 'hEB;
mem['h36D] = 'hC9;
mem['h36E] = 'h99;
mem['h36F] = 'hF0;
mem['h370] = 'hF2;
mem['h371] = 'hC9;
mem['h372] = 'h9A;
mem['h373] = 'hF0;
mem['h374] = 'hEE;
mem['h375] = 'h60;
mem['h376] = 'hC9;
mem['h377] = 'hA0;
mem['h378] = 'hB0;
mem['h379] = 'hFB;
mem['h37A] = 'h4C;
mem['h37B] = 'hD4;
mem['h37C] = 'hFD;
mem['h37D] = 'h85;
mem['h37E] = 'h29;
mem['h37F] = 'hA9;
mem['h380] = 'h00;
mem['h381] = 'h85;
mem['h382] = 'h28;
mem['h383] = 'h46;
mem['h384] = 'h29;
mem['h385] = 'h66;
mem['h386] = 'h28;
mem['h387] = 'h46;
mem['h388] = 'h29;
mem['h389] = 'h66;
mem['h38A] = 'h28;
mem['h38B] = 'hA5;
mem['h38C] = 'h19;
mem['h38D] = 'h29;
mem['h38E] = 'hF8;
mem['h38F] = 'h65;
mem['h390] = 'h29;
mem['h391] = 'h85;
mem['h392] = 'h29;
mem['h393] = 'h60;
mem['h394] = 'h38;
mem['h395] = 'h48;
mem['h396] = 'hE9;
mem['h397] = 'h01;
mem['h398] = 'hD0;
mem['h399] = 'hFC;
mem['h39A] = 'h68;
mem['h39B] = 'hE9;
mem['h39C] = 'h01;
mem['h39D] = 'hD0;
mem['h39E] = 'hF6;
mem['h39F] = 'h60;
mem['h3A0] = 'hE6;
mem['h3A1] = 'h42;
mem['h3A2] = 'hD0;
mem['h3A3] = 'h02;
mem['h3A4] = 'hE6;
mem['h3A5] = 'h43;
mem['h3A6] = 'hA5;
mem['h3A7] = 'h3C;
mem['h3A8] = 'hC5;
mem['h3A9] = 'h3E;
mem['h3AA] = 'hA5;
mem['h3AB] = 'h3D;
mem['h3AC] = 'hE5;
mem['h3AD] = 'h3F;
mem['h3AE] = 'hE6;
mem['h3AF] = 'h3C;
mem['h3B0] = 'hD0;
mem['h3B1] = 'h02;
mem['h3B2] = 'hE6;
mem['h3B3] = 'h3D;
mem['h3B4] = 'h60;
mem['h3B5] = 'h8D;
mem['h3B6] = 'h8A;
mem['h3B7] = 'h88;
mem['h3B8] = 'h95;
mem['h3B9] = 'h99;
mem['h3BA] = 'h9A;
mem['h3BB] = 'h8C;
mem['h3BC] = 'h9D;
mem['h3BD] = 'h9E;
mem['h3BE] = 'h87;
mem['h3BF] = 'h9C;
mem['h3C0] = 'h5B;
mem['h3C1] = 'h5B;
mem['h3C2] = 'h19;
mem['h3C3] = 'h0E;
mem['h3C4] = 'h27;
mem['h3C5] = 'h5F;
mem['h3C6] = 'h3B;
mem['h3C7] = 'h96;
mem['h3C8] = 'h45;
mem['h3C9] = 'hAE;
mem['h3CA] = 'hA7;
mem['h3CB] = 'hC9;
mem['h3CC] = 'h8D;
mem['h3CD] = 'hD0;
mem['h3CE] = 'h18;
mem['h3CF] = 'hAC;
mem['h3D0] = 'h00;
mem['h3D1] = 'hC0;
mem['h3D2] = 'h10;
mem['h3D3] = 'h13;
mem['h3D4] = 'h2C;
mem['h3D5] = 'h10;
mem['h3D6] = 'hC0;
mem['h3D7] = 'hC0;
mem['h3D8] = 'hA0;
mem['h3D9] = 'hD0;
mem['h3DA] = 'h0C;
mem['h3DB] = 'hAC;
mem['h3DC] = 'h00;
mem['h3DD] = 'hC0;
mem['h3DE] = 'h10;
mem['h3DF] = 'hFB;
mem['h3E0] = 'hC0;
mem['h3E1] = 'h83;
mem['h3E2] = 'hF0;
mem['h3E3] = 'h03;
mem['h3E4] = 'h2C;
mem['h3E5] = 'h10;
mem['h3E6] = 'hC0;
mem['h3E7] = 'hC9;
mem['h3E8] = 'hA0;
mem['h3E9] = 'hB0;
mem['h3EA] = 'h1A;
mem['h3EB] = 'hA8;
mem['h3EC] = 'h10;
mem['h3ED] = 'h17;
mem['h3EE] = 'hA0;
mem['h3EF] = 'h0A;
mem['h3F0] = 'hD9;
mem['h3F1] = 'hB5;
mem['h3F2] = 'hFB;
mem['h3F3] = 'hF0;
mem['h3F4] = 'h04;
mem['h3F5] = 'h88;
mem['h3F6] = 'h10;
mem['h3F7] = 'hF8;
mem['h3F8] = 'h60;
mem['h3F9] = 'hB9;
mem['h3FA] = 'hC0;
mem['h3FB] = 'hFB;
mem['h3FC] = 'h85;
mem['h3FD] = 'h2A;
mem['h3FE] = 'hA9;
mem['h3FF] = 'hFC;
mem['h400] = 'h85;
mem['h401] = 'h2B;
mem['h402] = 'h6C;
mem['h403] = 'h2A;
mem['h404] = 'h00;
mem['h405] = 'hA4;
mem['h406] = 'h24;
mem['h407] = 'h91;
mem['h408] = 'h28;
mem['h409] = 'hC8;
mem['h40A] = 'hA5;
mem['h40B] = 'h32;
mem['h40C] = 'h91;
mem['h40D] = 'h28;
mem['h40E] = 'hE6;
mem['h40F] = 'h24;
mem['h410] = 'hE6;
mem['h411] = 'h24;
mem['h412] = 'hA5;
mem['h413] = 'h24;
mem['h414] = 'hC5;
mem['h415] = 'h21;
mem['h416] = 'hB0;
mem['h417] = 'h43;
mem['h418] = 'h60;
mem['h419] = 'hC6;
mem['h41A] = 'h24;
mem['h41B] = 'hC6;
mem['h41C] = 'h24;
mem['h41D] = 'h10;
mem['h41E] = 'hF9;
mem['h41F] = 'hA5;
mem['h420] = 'h21;
mem['h421] = 'h85;
mem['h422] = 'h24;
mem['h423] = 'hC6;
mem['h424] = 'h24;
mem['h425] = 'hC6;
mem['h426] = 'h24;
mem['h427] = 'hA5;
mem['h428] = 'h22;
mem['h429] = 'hC5;
mem['h42A] = 'h25;
mem['h42B] = 'hB0;
mem['h42C] = 'h0D;
mem['h42D] = 'hC6;
mem['h42E] = 'h25;
mem['h42F] = 'hA5;
mem['h430] = 'h25;
mem['h431] = 'h20;
mem['h432] = 'h7D;
mem['h433] = 'hFB;
mem['h434] = 'hA5;
mem['h435] = 'h28;
mem['h436] = 'h65;
mem['h437] = 'h20;
mem['h438] = 'h85;
mem['h439] = 'h28;
mem['h43A] = 'h60;
mem['h43B] = 'hA5;
mem['h43C] = 'h22;
mem['h43D] = 'h85;
mem['h43E] = 'h25;
mem['h43F] = 'hA0;
mem['h440] = 'h00;
mem['h441] = 'h84;
mem['h442] = 'h24;
mem['h443] = 'hF0;
mem['h444] = 'h04;
mem['h445] = 'hA4;
mem['h446] = 'h24;
mem['h447] = 'hA5;
mem['h448] = 'h25;
mem['h449] = 'h48;
mem['h44A] = 'h20;
mem['h44B] = 'h31;
mem['h44C] = 'hFC;
mem['h44D] = 'h20;
mem['h44E] = 'h98;
mem['h44F] = 'hFC;
mem['h450] = 'hA0;
mem['h451] = 'h00;
mem['h452] = 'h68;
mem['h453] = 'h69;
mem['h454] = 'h00;
mem['h455] = 'hC5;
mem['h456] = 'h23;
mem['h457] = 'h90;
mem['h458] = 'hF0;
mem['h459] = 'hB0;
mem['h45A] = 'hD4;
mem['h45B] = 'hA9;
mem['h45C] = 'h00;
mem['h45D] = 'h85;
mem['h45E] = 'h24;
mem['h45F] = 'hE6;
mem['h460] = 'h25;
mem['h461] = 'hA5;
mem['h462] = 'h25;
mem['h463] = 'hC5;
mem['h464] = 'h23;
mem['h465] = 'h90;
mem['h466] = 'hCA;
mem['h467] = 'hC6;
mem['h468] = 'h25;
mem['h469] = 'hA5;
mem['h46A] = 'h22;
mem['h46B] = 'h48;
mem['h46C] = 'h20;
mem['h46D] = 'h31;
mem['h46E] = 'hFC;
mem['h46F] = 'hA5;
mem['h470] = 'h28;
mem['h471] = 'h85;
mem['h472] = 'h2A;
mem['h473] = 'hA5;
mem['h474] = 'h29;
mem['h475] = 'h85;
mem['h476] = 'h2B;
mem['h477] = 'hA4;
mem['h478] = 'h21;
mem['h479] = 'h88;
mem['h47A] = 'h68;
mem['h47B] = 'h69;
mem['h47C] = 'h01;
mem['h47D] = 'hC5;
mem['h47E] = 'h23;
mem['h47F] = 'hB0;
mem['h480] = 'h0D;
mem['h481] = 'h48;
mem['h482] = 'h20;
mem['h483] = 'h31;
mem['h484] = 'hFC;
mem['h485] = 'hB1;
mem['h486] = 'h28;
mem['h487] = 'h91;
mem['h488] = 'h2A;
mem['h489] = 'h88;
mem['h48A] = 'h10;
mem['h48B] = 'hF9;
mem['h48C] = 'h30;
mem['h48D] = 'hE1;
mem['h48E] = 'hA0;
mem['h48F] = 'h00;
mem['h490] = 'h20;
mem['h491] = 'h98;
mem['h492] = 'hFC;
mem['h493] = 'h4C;
mem['h494] = 'h2F;
mem['h495] = 'hFC;
mem['h496] = 'hA4;
mem['h497] = 'h24;
mem['h498] = 'hA9;
mem['h499] = 'hA0;
mem['h49A] = 'h91;
mem['h49B] = 'h28;
mem['h49C] = 'hC8;
mem['h49D] = 'hA5;
mem['h49E] = 'h32;
mem['h49F] = 'h91;
mem['h4A0] = 'h28;
mem['h4A1] = 'hC8;
mem['h4A2] = 'hC4;
mem['h4A3] = 'h21;
mem['h4A4] = 'h90;
mem['h4A5] = 'hF2;
mem['h4A6] = 'h60;
mem['h4A7] = 'hA5;
mem['h4A8] = 'h32;
mem['h4A9] = 'h49;
mem['h4AA] = 'h80;
mem['h4AB] = 'h85;
mem['h4AC] = 'h32;
mem['h4AD] = 'h60;
mem['h4AE] = 'hA9;
mem['h4AF] = 'h40;
mem['h4B0] = 'h20;
mem['h4B1] = 'h94;
mem['h4B2] = 'hFB;
mem['h4B3] = 'hA0;
mem['h4B4] = 'hC0;
mem['h4B5] = 'hA9;
mem['h4B6] = 'h0C;
mem['h4B7] = 'h20;
mem['h4B8] = 'h94;
mem['h4B9] = 'hFB;
mem['h4BA] = 'hAD;
mem['h4BB] = 'h30;
mem['h4BC] = 'hC0;
mem['h4BD] = 'h88;
mem['h4BE] = 'hD0;
mem['h4BF] = 'hF5;
mem['h4C0] = 'h60;
mem['h4C1] = 'hA0;
mem['h4C2] = 'h4B;
mem['h4C3] = 'h20;
mem['h4C4] = 'hD3;
mem['h4C5] = 'hFC;
mem['h4C6] = 'hD0;
mem['h4C7] = 'hF9;
mem['h4C8] = 'h69;
mem['h4C9] = 'hFE;
mem['h4CA] = 'hB0;
mem['h4CB] = 'hF5;
mem['h4CC] = 'hA0;
mem['h4CD] = 'h21;
mem['h4CE] = 'h20;
mem['h4CF] = 'hD3;
mem['h4D0] = 'hFC;
mem['h4D1] = 'hC8;
mem['h4D2] = 'hC8;
mem['h4D3] = 'h88;
mem['h4D4] = 'hD0;
mem['h4D5] = 'hFD;
mem['h4D6] = 'h90;
mem['h4D7] = 'h05;
mem['h4D8] = 'hA0;
mem['h4D9] = 'h32;
mem['h4DA] = 'h88;
mem['h4DB] = 'hD0;
mem['h4DC] = 'hFD;
mem['h4DD] = 'hAC;
mem['h4DE] = 'h20;
mem['h4DF] = 'hC0;
mem['h4E0] = 'hA0;
mem['h4E1] = 'h2C;
mem['h4E2] = 'hCA;
mem['h4E3] = 'h60;
mem['h4E4] = 'hA2;
mem['h4E5] = 'h08;
mem['h4E6] = 'h48;
mem['h4E7] = 'h20;
mem['h4E8] = 'hF2;
mem['h4E9] = 'hFC;
mem['h4EA] = 'h68;
mem['h4EB] = 'h2A;
mem['h4EC] = 'hA0;
mem['h4ED] = 'h3A;
mem['h4EE] = 'hCA;
mem['h4EF] = 'hD0;
mem['h4F0] = 'hF5;
mem['h4F1] = 'h60;
mem['h4F2] = 'h20;
mem['h4F3] = 'hF5;
mem['h4F4] = 'hFC;
mem['h4F5] = 'h88;
mem['h4F6] = 'hAD;
mem['h4F7] = 'h60;
mem['h4F8] = 'hC0;
mem['h4F9] = 'h45;
mem['h4FA] = 'h2F;
mem['h4FB] = 'h10;
mem['h4FC] = 'hF8;
mem['h4FD] = 'h45;
mem['h4FE] = 'h2F;
mem['h4FF] = 'h85;
mem['h500] = 'h2F;
mem['h501] = 'hC0;
mem['h502] = 'h80;
mem['h503] = 'h60;
mem['h504] = 'h6C;
mem['h505] = 'h38;
mem['h506] = 'h00;
mem['h507] = 'hA5;
mem['h508] = 'h19;
mem['h509] = 'h20;
mem['h50A] = 'h5E;
mem['h50B] = 'hF8;
mem['h50C] = 'hA4;
mem['h50D] = 'h24;
mem['h50E] = 'hB1;
mem['h50F] = 'h28;
mem['h510] = 'h85;
mem['h511] = 'h35;
mem['h512] = 'hC8;
mem['h513] = 'hB1;
mem['h514] = 'h28;
mem['h515] = 'h48;
mem['h516] = 'hA9;
mem['h517] = 'h0F;
mem['h518] = 'h91;
mem['h519] = 'h28;
mem['h51A] = 'h68;
mem['h51B] = 'hE6;
mem['h51C] = 'h4E;
mem['h51D] = 'hD0;
mem['h51E] = 'h02;
mem['h51F] = 'hE6;
mem['h520] = 'h4F;
mem['h521] = 'h2C;
mem['h522] = 'h00;
mem['h523] = 'hC0;
mem['h524] = 'h10;
mem['h525] = 'hF5;
mem['h526] = 'h91;
mem['h527] = 'h28;
mem['h528] = 'hA5;
mem['h529] = 'h1E;
mem['h52A] = 'h20;
mem['h52B] = 'h5E;
mem['h52C] = 'hF8;
mem['h52D] = 'hAD;
mem['h52E] = 'h00;
mem['h52F] = 'hC0;
mem['h530] = 'h09;
mem['h531] = 'h80;
mem['h532] = 'h2C;
mem['h533] = 'h10;
mem['h534] = 'hC0;
mem['h535] = 'hA4;
mem['h536] = 'h24;
mem['h537] = 'h60;
mem['h538] = 'h20;
mem['h539] = 'hD4;
mem['h53A] = 'hFD;
mem['h53B] = 'hC9;
mem['h53C] = 'h88;
mem['h53D] = 'hF0;
mem['h53E] = 'h1D;
mem['h53F] = 'hC9;
mem['h540] = 'h98;
mem['h541] = 'hF0;
mem['h542] = 'h0A;
mem['h543] = 'hE0;
mem['h544] = 'hF8;
mem['h545] = 'h90;
mem['h546] = 'h03;
mem['h547] = 'h20;
mem['h548] = 'h3B;
mem['h549] = 'hFF;
mem['h54A] = 'hE8;
mem['h54B] = 'hD0;
mem['h54C] = 'h13;
mem['h54D] = 'hA9;
mem['h54E] = 'hDC;
mem['h54F] = 'h20;
mem['h550] = 'hD4;
mem['h551] = 'hFD;
mem['h552] = 'h20;
mem['h553] = 'h75;
mem['h554] = 'hFD;
mem['h555] = 'hA5;
mem['h556] = 'h33;
mem['h557] = 'h20;
mem['h558] = 'hD4;
mem['h559] = 'hFD;
mem['h55A] = 'hA2;
mem['h55B] = 'h01;
mem['h55C] = 'h8A;
mem['h55D] = 'hF0;
mem['h55E] = 'hF3;
mem['h55F] = 'hCA;
mem['h560] = 'h20;
mem['h561] = 'h66;
mem['h562] = 'hFB;
mem['h563] = 'hC9;
mem['h564] = 'h95;
mem['h565] = 'hD0;
mem['h566] = 'h02;
mem['h567] = 'hA5;
mem['h568] = 'h35;
mem['h569] = 'h9D;
mem['h56A] = 'h00;
mem['h56B] = 'h02;
mem['h56C] = 'hC9;
mem['h56D] = 'h8D;
mem['h56E] = 'hD0;
mem['h56F] = 'hC8;
mem['h570] = 'hA9;
mem['h571] = 'h9D;
mem['h572] = 'h20;
mem['h573] = 'hD4;
mem['h574] = 'hFD;
mem['h575] = 'hA9;
mem['h576] = 'h8D;
mem['h577] = 'hD0;
mem['h578] = 'h5B;
mem['h579] = 'hA4;
mem['h57A] = 'h3D;
mem['h57B] = 'hA6;
mem['h57C] = 'h3C;
mem['h57D] = 'h20;
mem['h57E] = 'h75;
mem['h57F] = 'hFD;
mem['h580] = 'h20;
mem['h581] = 'h31;
mem['h582] = 'hF9;
mem['h583] = 'hA0;
mem['h584] = 'h00;
mem['h585] = 'hA9;
mem['h586] = 'hAD;
mem['h587] = 'h4C;
mem['h588] = 'hD4;
mem['h589] = 'hFD;
mem['h58A] = 'hA5;
mem['h58B] = 'h3C;
mem['h58C] = 'h09;
mem['h58D] = 'h07;
mem['h58E] = 'h85;
mem['h58F] = 'h3E;
mem['h590] = 'hA5;
mem['h591] = 'h3D;
mem['h592] = 'h85;
mem['h593] = 'h3F;
mem['h594] = 'hA5;
mem['h595] = 'h3C;
mem['h596] = 'h29;
mem['h597] = 'h07;
mem['h598] = 'hD0;
mem['h599] = 'h03;
mem['h59A] = 'h20;
mem['h59B] = 'h79;
mem['h59C] = 'hFD;
mem['h59D] = 'hA9;
mem['h59E] = 'hA0;
mem['h59F] = 'h20;
mem['h5A0] = 'hD4;
mem['h5A1] = 'hFD;
mem['h5A2] = 'hB1;
mem['h5A3] = 'h3C;
mem['h5A4] = 'h20;
mem['h5A5] = 'hC1;
mem['h5A6] = 'hFD;
mem['h5A7] = 'h20;
mem['h5A8] = 'hA6;
mem['h5A9] = 'hFB;
mem['h5AA] = 'h90;
mem['h5AB] = 'hE8;
mem['h5AC] = 'h60;
mem['h5AD] = 'h4A;
mem['h5AE] = 'h90;
mem['h5AF] = 'hEA;
mem['h5B0] = 'h4A;
mem['h5B1] = 'h4A;
mem['h5B2] = 'hA5;
mem['h5B3] = 'h3E;
mem['h5B4] = 'h90;
mem['h5B5] = 'h02;
mem['h5B6] = 'h49;
mem['h5B7] = 'hFF;
mem['h5B8] = 'h65;
mem['h5B9] = 'h3C;
mem['h5BA] = 'h48;
mem['h5BB] = 'hA9;
mem['h5BC] = 'hBD;
mem['h5BD] = 'h20;
mem['h5BE] = 'hD4;
mem['h5BF] = 'hFD;
mem['h5C0] = 'h68;
mem['h5C1] = 'h48;
mem['h5C2] = 'h4A;
mem['h5C3] = 'h4A;
mem['h5C4] = 'h4A;
mem['h5C5] = 'h4A;
mem['h5C6] = 'h20;
mem['h5C7] = 'hCC;
mem['h5C8] = 'hFD;
mem['h5C9] = 'h68;
mem['h5CA] = 'h29;
mem['h5CB] = 'h0F;
mem['h5CC] = 'h09;
mem['h5CD] = 'hB0;
mem['h5CE] = 'hC9;
mem['h5CF] = 'hBA;
mem['h5D0] = 'h90;
mem['h5D1] = 'h02;
mem['h5D2] = 'h69;
mem['h5D3] = 'h06;
mem['h5D4] = 'h6C;
mem['h5D5] = 'h36;
mem['h5D6] = 'h00;
mem['h5D7] = 'h84;
mem['h5D8] = 'h35;
mem['h5D9] = 'h48;
mem['h5DA] = 'hA5;
mem['h5DB] = 'h19;
mem['h5DC] = 'h20;
mem['h5DD] = 'h5E;
mem['h5DE] = 'hF8;
mem['h5DF] = 'h68;
mem['h5E0] = 'h48;
mem['h5E1] = 'hC9;
mem['h5E2] = 'hA0;
mem['h5E3] = 'h90;
mem['h5E4] = 'h06;
mem['h5E5] = 'h24;
mem['h5E6] = 'h32;
mem['h5E7] = 'h30;
mem['h5E8] = 'h02;
mem['h5E9] = 'h29;
mem['h5EA] = 'h7F;
mem['h5EB] = 'h20;
mem['h5EC] = 'hCB;
mem['h5ED] = 'hFB;
mem['h5EE] = 'hA5;
mem['h5EF] = 'h1E;
mem['h5F0] = 'h20;
mem['h5F1] = 'h5E;
mem['h5F2] = 'hF8;
mem['h5F3] = 'h68;
mem['h5F4] = 'hA4;
mem['h5F5] = 'h35;
mem['h5F6] = 'h60;
mem['h5F7] = 'h8A;
mem['h5F8] = 'hF0;
mem['h5F9] = 'h07;
mem['h5FA] = 'hB5;
mem['h5FB] = 'h3C;
mem['h5FC] = 'h95;
mem['h5FD] = 'h3A;
mem['h5FE] = 'hCA;
mem['h5FF] = 'h10;
mem['h600] = 'hF9;
mem['h601] = 'h60;
mem['h602] = 'hC6;
mem['h603] = 'h34;
mem['h604] = 'hF0;
mem['h605] = 'h84;
mem['h606] = 'hCA;
mem['h607] = 'hD0;
mem['h608] = 'h16;
mem['h609] = 'hC9;
mem['h60A] = 'hBA;
mem['h60B] = 'hD0;
mem['h60C] = 'hA0;
mem['h60D] = 'h85;
mem['h60E] = 'h31;
mem['h60F] = 'hA5;
mem['h610] = 'h3E;
mem['h611] = 'h91;
mem['h612] = 'h40;
mem['h613] = 'hE6;
mem['h614] = 'h40;
mem['h615] = 'hD0;
mem['h616] = 'h02;
mem['h617] = 'hE6;
mem['h618] = 'h41;
mem['h619] = 'h60;
mem['h61A] = 'hA4;
mem['h61B] = 'h34;
mem['h61C] = 'hB9;
mem['h61D] = 'hFF;
mem['h61E] = 'h01;
mem['h61F] = 'h85;
mem['h620] = 'h31;
mem['h621] = 'h60;
mem['h622] = 'hA2;
mem['h623] = 'h01;
mem['h624] = 'hB5;
mem['h625] = 'h3E;
mem['h626] = 'h95;
mem['h627] = 'h42;
mem['h628] = 'h95;
mem['h629] = 'h44;
mem['h62A] = 'hCA;
mem['h62B] = 'h10;
mem['h62C] = 'hF7;
mem['h62D] = 'h60;
mem['h62E] = 'hB1;
mem['h62F] = 'h3C;
mem['h630] = 'h91;
mem['h631] = 'h42;
mem['h632] = 'h20;
mem['h633] = 'hA0;
mem['h634] = 'hFB;
mem['h635] = 'h90;
mem['h636] = 'hF7;
mem['h637] = 'h60;
mem['h638] = 'hB1;
mem['h639] = 'h3C;
mem['h63A] = 'hD1;
mem['h63B] = 'h42;
mem['h63C] = 'hF0;
mem['h63D] = 'h1C;
mem['h63E] = 'h20;
mem['h63F] = 'h79;
mem['h640] = 'hFD;
mem['h641] = 'hB1;
mem['h642] = 'h3C;
mem['h643] = 'h20;
mem['h644] = 'hC1;
mem['h645] = 'hFD;
mem['h646] = 'hA9;
mem['h647] = 'hA0;
mem['h648] = 'h20;
mem['h649] = 'hD4;
mem['h64A] = 'hFD;
mem['h64B] = 'hA9;
mem['h64C] = 'hA8;
mem['h64D] = 'h20;
mem['h64E] = 'hD4;
mem['h64F] = 'hFD;
mem['h650] = 'hB1;
mem['h651] = 'h42;
mem['h652] = 'h20;
mem['h653] = 'hC1;
mem['h654] = 'hFD;
mem['h655] = 'hA9;
mem['h656] = 'hA9;
mem['h657] = 'h20;
mem['h658] = 'hD4;
mem['h659] = 'hFD;
mem['h65A] = 'h20;
mem['h65B] = 'hA0;
mem['h65C] = 'hFB;
mem['h65D] = 'h90;
mem['h65E] = 'hD9;
mem['h65F] = 'h60;
mem['h660] = 'h20;
mem['h661] = 'hF7;
mem['h662] = 'hFD;
mem['h663] = 'hA9;
mem['h664] = 'h1C;
mem['h665] = 'h48;
mem['h666] = 'h20;
mem['h667] = 'hC1;
mem['h668] = 'hF8;
mem['h669] = 'h20;
mem['h66A] = 'h39;
mem['h66B] = 'hF9;
mem['h66C] = 'h85;
mem['h66D] = 'h3A;
mem['h66E] = 'h84;
mem['h66F] = 'h3B;
mem['h670] = 'h68;
mem['h671] = 'h38;
mem['h672] = 'hE9;
mem['h673] = 'h01;
mem['h674] = 'hD0;
mem['h675] = 'hEF;
mem['h676] = 'h60;
mem['h677] = 'hA0;
mem['h678] = 'h87;
mem['h679] = 'hD0;
mem['h67A] = 'h02;
mem['h67B] = 'hA0;
mem['h67C] = 'hAF;
mem['h67D] = 'h84;
mem['h67E] = 'h32;
mem['h67F] = 'h60;
mem['h680] = 'hA9;
mem['h681] = 'h00;
mem['h682] = 'h85;
mem['h683] = 'h3E;
mem['h684] = 'hA2;
mem['h685] = 'h38;
mem['h686] = 'hA0;
mem['h687] = 'h07;
mem['h688] = 'hD0;
mem['h689] = 'h08;
mem['h68A] = 'hA9;
mem['h68B] = 'h00;
mem['h68C] = 'h85;
mem['h68D] = 'h3E;
mem['h68E] = 'hA2;
mem['h68F] = 'h36;
mem['h690] = 'hA0;
mem['h691] = 'hD7;
mem['h692] = 'hA5;
mem['h693] = 'h3E;
mem['h694] = 'h29;
mem['h695] = 'h0F;
mem['h696] = 'hF0;
mem['h697] = 'h06;
mem['h698] = 'h09;
mem['h699] = 'hC0;
mem['h69A] = 'hA0;
mem['h69B] = 'h00;
mem['h69C] = 'hF0;
mem['h69D] = 'h02;
mem['h69E] = 'hA9;
mem['h69F] = 'hFD;
mem['h6A0] = 'h94;
mem['h6A1] = 'h00;
mem['h6A2] = 'h95;
mem['h6A3] = 'h01;
mem['h6A4] = 'h60;
mem['h6A5] = 'h4C;
mem['h6A6] = 'h00;
mem['h6A7] = 'hE0;
mem['h6A8] = 'h4C;
mem['h6A9] = 'h03;
mem['h6AA] = 'hE0;
mem['h6AB] = 'h20;
mem['h6AC] = 'hF7;
mem['h6AD] = 'hFD;
mem['h6AE] = 'h20;
mem['h6AF] = 'h40;
mem['h6B0] = 'hFF;
mem['h6B1] = 'h6C;
mem['h6B2] = 'h3A;
mem['h6B3] = 'h00;
mem['h6B4] = 'h4C;
mem['h6B5] = 'hCD;
mem['h6B6] = 'hFA;
mem['h6B7] = 'h4C;
mem['h6B8] = 'hF8;
mem['h6B9] = 'h03;
mem['h6BA] = 'hA5;
mem['h6BB] = 'h3E;
mem['h6BC] = 'h29;
mem['h6BD] = 'h1F;
mem['h6BE] = 'hA2;
mem['h6BF] = 'h02;
mem['h6C0] = 'h4C;
mem['h6C1] = 'h31;
mem['h6C2] = 'hF8;
mem['h6C3] = 'hA5;
mem['h6C4] = 'h3E;
mem['h6C5] = 'h45;
mem['h6C6] = 'h32;
mem['h6C7] = 'h29;
mem['h6C8] = 'h07;
mem['h6C9] = 'h45;
mem['h6CA] = 'h32;
mem['h6CB] = 'h85;
mem['h6CC] = 'h32;
mem['h6CD] = 'h60;
mem['h6CE] = 'hA9;
mem['h6CF] = 'h40;
mem['h6D0] = 'h20;
mem['h6D1] = 'hC1;
mem['h6D2] = 'hFC;
mem['h6D3] = 'hA0;
mem['h6D4] = 'h27;
mem['h6D5] = 'hA2;
mem['h6D6] = 'h00;
mem['h6D7] = 'h41;
mem['h6D8] = 'h3C;
mem['h6D9] = 'h48;
mem['h6DA] = 'hA1;
mem['h6DB] = 'h3C;
mem['h6DC] = 'h20;
mem['h6DD] = 'hEE;
mem['h6DE] = 'hFE;
mem['h6DF] = 'h20;
mem['h6E0] = 'hA6;
mem['h6E1] = 'hFB;
mem['h6E2] = 'hA0;
mem['h6E3] = 'h1D;
mem['h6E4] = 'h68;
mem['h6E5] = 'h90;
mem['h6E6] = 'hEE;
mem['h6E7] = 'hA0;
mem['h6E8] = 'h22;
mem['h6E9] = 'h20;
mem['h6EA] = 'hEE;
mem['h6EB] = 'hFE;
mem['h6EC] = 'hF0;
mem['h6ED] = 'h4D;
mem['h6EE] = 'hA2;
mem['h6EF] = 'h10;
mem['h6F0] = 'h0A;
mem['h6F1] = 'h20;
mem['h6F2] = 'hCE;
mem['h6F3] = 'hFC;
mem['h6F4] = 'hD0;
mem['h6F5] = 'hFA;
mem['h6F6] = 'h60;
mem['h6F7] = 'h20;
mem['h6F8] = 'h02;
mem['h6F9] = 'hFE;
mem['h6FA] = 'h68;
mem['h6FB] = 'h68;
mem['h6FC] = 'hD0;
mem['h6FD] = 'h6B;
mem['h6FE] = 'h20;
mem['h6FF] = 'hF2;
mem['h700] = 'hFC;
mem['h701] = 'hA9;
mem['h702] = 'h16;
mem['h703] = 'h20;
mem['h704] = 'hC1;
mem['h705] = 'hFC;
mem['h706] = 'h85;
mem['h707] = 'h2E;
mem['h708] = 'h20;
mem['h709] = 'hF2;
mem['h70A] = 'hFC;
mem['h70B] = 'hA0;
mem['h70C] = 'h24;
mem['h70D] = 'h20;
mem['h70E] = 'hF5;
mem['h70F] = 'hFC;
mem['h710] = 'hB0;
mem['h711] = 'hF9;
mem['h712] = 'h20;
mem['h713] = 'hF5;
mem['h714] = 'hFC;
mem['h715] = 'hA0;
mem['h716] = 'h3B;
mem['h717] = 'h20;
mem['h718] = 'hE4;
mem['h719] = 'hFC;
mem['h71A] = 'h81;
mem['h71B] = 'h3C;
mem['h71C] = 'h45;
mem['h71D] = 'h2E;
mem['h71E] = 'h85;
mem['h71F] = 'h2E;
mem['h720] = 'h20;
mem['h721] = 'hA6;
mem['h722] = 'hFB;
mem['h723] = 'hA0;
mem['h724] = 'h35;
mem['h725] = 'h90;
mem['h726] = 'hF0;
mem['h727] = 'h20;
mem['h728] = 'hE4;
mem['h729] = 'hFC;
mem['h72A] = 'hC5;
mem['h72B] = 'h2E;
mem['h72C] = 'hF0;
mem['h72D] = 'h0D;
mem['h72E] = 'hA9;
mem['h72F] = 'hC5;
mem['h730] = 'h20;
mem['h731] = 'hD4;
mem['h732] = 'hFD;
mem['h733] = 'hA9;
mem['h734] = 'hD2;
mem['h735] = 'h20;
mem['h736] = 'hD4;
mem['h737] = 'hFD;
mem['h738] = 'h20;
mem['h739] = 'hD4;
mem['h73A] = 'hFD;
mem['h73B] = 'hA9;
mem['h73C] = 'h87;
mem['h73D] = 'h4C;
mem['h73E] = 'hD4;
mem['h73F] = 'hFD;
mem['h740] = 'hA5;
mem['h741] = 'h48;
mem['h742] = 'h48;
mem['h743] = 'hA5;
mem['h744] = 'h45;
mem['h745] = 'hA6;
mem['h746] = 'h46;
mem['h747] = 'hA4;
mem['h748] = 'h47;
mem['h749] = 'h28;
mem['h74A] = 'h60;
mem['h74B] = 'h85;
mem['h74C] = 'h45;
mem['h74D] = 'h86;
mem['h74E] = 'h46;
mem['h74F] = 'h84;
mem['h750] = 'h47;
mem['h751] = 'h08;
mem['h752] = 'h68;
mem['h753] = 'h85;
mem['h754] = 'h48;
mem['h755] = 'hBA;
mem['h756] = 'h86;
mem['h757] = 'h49;
mem['h758] = 'hD8;
mem['h759] = 'h60;
mem['h75A] = 'hA2;
mem['h75B] = 'h02;
mem['h75C] = 'hA9;
mem['h75D] = 'hA0;
mem['h75E] = 'h20;
mem['h75F] = 'hD4;
mem['h760] = 'hFD;
mem['h761] = 'hCA;
mem['h762] = 'hD0;
mem['h763] = 'hFA;
mem['h764] = 'h60;
mem['h765] = 'hD8;
mem['h766] = 'h20;
mem['h767] = 'h3B;
mem['h768] = 'hFF;
mem['h769] = 'hA9;
mem['h76A] = 'hAA;
mem['h76B] = 'h85;
mem['h76C] = 'h33;
mem['h76D] = 'h20;
mem['h76E] = 'h52;
mem['h76F] = 'hFD;
mem['h770] = 'h20;
mem['h771] = 'hC7;
mem['h772] = 'hFF;
mem['h773] = 'h20;
mem['h774] = 'hA7;
mem['h775] = 'hFF;
mem['h776] = 'h84;
mem['h777] = 'h34;
mem['h778] = 'hA0;
mem['h779] = 'h17;
mem['h77A] = 'h88;
mem['h77B] = 'h30;
mem['h77C] = 'hE8;
mem['h77D] = 'hD9;
mem['h77E] = 'hCC;
mem['h77F] = 'hFF;
mem['h780] = 'hD0;
mem['h781] = 'hF8;
mem['h782] = 'h20;
mem['h783] = 'hBE;
mem['h784] = 'hFF;
mem['h785] = 'hA4;
mem['h786] = 'h34;
mem['h787] = 'h4C;
mem['h788] = 'h73;
mem['h789] = 'hFF;
mem['h78A] = 'hA2;
mem['h78B] = 'h03;
mem['h78C] = 'h0A;
mem['h78D] = 'h0A;
mem['h78E] = 'h0A;
mem['h78F] = 'h0A;
mem['h790] = 'h0A;
mem['h791] = 'h26;
mem['h792] = 'h3E;
mem['h793] = 'h26;
mem['h794] = 'h3F;
mem['h795] = 'hCA;
mem['h796] = 'h10;
mem['h797] = 'hF8;
mem['h798] = 'hA5;
mem['h799] = 'h31;
mem['h79A] = 'hD0;
mem['h79B] = 'h06;
mem['h79C] = 'hB5;
mem['h79D] = 'h3F;
mem['h79E] = 'h95;
mem['h79F] = 'h3D;
mem['h7A0] = 'h95;
mem['h7A1] = 'h41;
mem['h7A2] = 'hE8;
mem['h7A3] = 'hF0;
mem['h7A4] = 'hF3;
mem['h7A5] = 'hD0;
mem['h7A6] = 'h06;
mem['h7A7] = 'hA2;
mem['h7A8] = 'h00;
mem['h7A9] = 'h86;
mem['h7AA] = 'h3E;
mem['h7AB] = 'h86;
mem['h7AC] = 'h3F;
mem['h7AD] = 'hB9;
mem['h7AE] = 'h00;
mem['h7AF] = 'h02;
mem['h7B0] = 'hC8;
mem['h7B1] = 'h49;
mem['h7B2] = 'hB0;
mem['h7B3] = 'hC9;
mem['h7B4] = 'h0A;
mem['h7B5] = 'h90;
mem['h7B6] = 'hD3;
mem['h7B7] = 'h69;
mem['h7B8] = 'h88;
mem['h7B9] = 'hC9;
mem['h7BA] = 'hFA;
mem['h7BB] = 'hB0;
mem['h7BC] = 'hCD;
mem['h7BD] = 'h60;
mem['h7BE] = 'hA9;
mem['h7BF] = 'hFE;
mem['h7C0] = 'h48;
mem['h7C1] = 'hB9;
mem['h7C2] = 'hE3;
mem['h7C3] = 'hFF;
mem['h7C4] = 'h48;
mem['h7C5] = 'hA5;
mem['h7C6] = 'h31;
mem['h7C7] = 'hA0;
mem['h7C8] = 'h00;
mem['h7C9] = 'h84;
mem['h7CA] = 'h31;
mem['h7CB] = 'h60;
mem['h7CC] = 'hBC;
mem['h7CD] = 'hB2;
mem['h7CE] = 'hBE;
mem['h7CF] = 'hEF;
mem['h7D0] = 'hE9;
mem['h7D1] = 'h08;
mem['h7D2] = 'hC2;
mem['h7D3] = 'hC8;
mem['h7D4] = 'hBB;
mem['h7D5] = 'hA6;
mem['h7D6] = 'hA4;
mem['h7D7] = 'h06;
mem['h7D8] = 'h95;
mem['h7D9] = 'h07;
mem['h7DA] = 'h02;
mem['h7DB] = 'h05;
mem['h7DC] = 'hF0;
mem['h7DD] = 'h00;
mem['h7DE] = 'hEB;
mem['h7DF] = 'h93;
mem['h7E0] = 'hA7;
mem['h7E1] = 'hC6;
mem['h7E2] = 'h99;
mem['h7E3] = 'hA7;
mem['h7E4] = 'hB6;
mem['h7E5] = 'hB3;
mem['h7E6] = 'h37;
mem['h7E7] = 'hB9;
mem['h7E8] = 'hC2;
mem['h7E9] = 'h83;
mem['h7EA] = 'h8D;
mem['h7EB] = 'hA4;
mem['h7EC] = 'h19;
mem['h7ED] = 'h19;
mem['h7EE] = 'h2D;
mem['h7EF] = 'h21;
mem['h7F0] = 'h7A;
mem['h7F1] = 'h76;
mem['h7F2] = 'h5F;
mem['h7F3] = 'hCD;
mem['h7F4] = 'hAA;
mem['h7F5] = 'hFD;
mem['h7F6] = 'h19;
mem['h7F7] = 'h19;
mem['h7F8] = 'hF6;
mem['h7F9] = 'h05;
mem['h7FA] = 'hFB;
mem['h7FB] = 'h03;
mem['h7FC] = 'h48;
mem['h7FD] = 'hFA;
mem['h7FE] = 'h26;
mem['h7FF] = 'hFA;
/ag_6502/trunk/agat7/agathe7.v
0,0 → 1,2048
mem['h000] = 'h00;
mem['h001] = 'h00;
mem['h002] = 'h00;
mem['h003] = 'h00;
mem['h004] = 'h00;
mem['h005] = 'h00;
mem['h006] = 'h00;
mem['h007] = 'h00;
mem['h008] = 'h00;
mem['h009] = 'h00;
mem['h00A] = 'h00;
mem['h00B] = 'h00;
mem['h00C] = 'h00;
mem['h00D] = 'h00;
mem['h00E] = 'h00;
mem['h00F] = 'h00;
mem['h010] = 'h00;
mem['h011] = 'h00;
mem['h012] = 'h00;
mem['h013] = 'h00;
mem['h014] = 'h00;
mem['h015] = 'h00;
mem['h016] = 'h00;
mem['h017] = 'h00;
mem['h018] = 'h00;
mem['h019] = 'h00;
mem['h01A] = 'h00;
mem['h01B] = 'h00;
mem['h01C] = 'h00;
mem['h01D] = 'h00;
mem['h01E] = 'h00;
mem['h01F] = 'h00;
mem['h020] = 'h00;
mem['h021] = 'h00;
mem['h022] = 'h00;
mem['h023] = 'h00;
mem['h024] = 'h00;
mem['h025] = 'h00;
mem['h026] = 'h00;
mem['h027] = 'h00;
mem['h028] = 'h00;
mem['h029] = 'h00;
mem['h02A] = 'h00;
mem['h02B] = 'h00;
mem['h02C] = 'h00;
mem['h02D] = 'h00;
mem['h02E] = 'h00;
mem['h02F] = 'h00;
mem['h030] = 'h00;
mem['h031] = 'h00;
mem['h032] = 'h00;
mem['h033] = 'h00;
mem['h034] = 'h00;
mem['h035] = 'h00;
mem['h036] = 'h00;
mem['h037] = 'h00;
mem['h038] = 'h00;
mem['h039] = 'h00;
mem['h03A] = 'h00;
mem['h03B] = 'h00;
mem['h03C] = 'h00;
mem['h03D] = 'h00;
mem['h03E] = 'h00;
mem['h03F] = 'h00;
mem['h040] = 'h00;
mem['h041] = 'h00;
mem['h042] = 'h00;
mem['h043] = 'h00;
mem['h044] = 'h00;
mem['h045] = 'h00;
mem['h046] = 'h00;
mem['h047] = 'h00;
mem['h048] = 'h00;
mem['h049] = 'h00;
mem['h04A] = 'h00;
mem['h04B] = 'h00;
mem['h04C] = 'h00;
mem['h04D] = 'h00;
mem['h04E] = 'h00;
mem['h04F] = 'h00;
mem['h050] = 'h00;
mem['h051] = 'h00;
mem['h052] = 'h00;
mem['h053] = 'h00;
mem['h054] = 'h00;
mem['h055] = 'h00;
mem['h056] = 'h00;
mem['h057] = 'h00;
mem['h058] = 'h00;
mem['h059] = 'h00;
mem['h05A] = 'h00;
mem['h05B] = 'h00;
mem['h05C] = 'h00;
mem['h05D] = 'h00;
mem['h05E] = 'h00;
mem['h05F] = 'h00;
mem['h060] = 'h00;
mem['h061] = 'h00;
mem['h062] = 'h00;
mem['h063] = 'h00;
mem['h064] = 'h00;
mem['h065] = 'h00;
mem['h066] = 'h00;
mem['h067] = 'h00;
mem['h068] = 'h00;
mem['h069] = 'h00;
mem['h06A] = 'h00;
mem['h06B] = 'h00;
mem['h06C] = 'h00;
mem['h06D] = 'h00;
mem['h06E] = 'h00;
mem['h06F] = 'h00;
mem['h070] = 'h00;
mem['h071] = 'h00;
mem['h072] = 'h00;
mem['h073] = 'h00;
mem['h074] = 'h00;
mem['h075] = 'h00;
mem['h076] = 'h00;
mem['h077] = 'h00;
mem['h078] = 'h00;
mem['h079] = 'h00;
mem['h07A] = 'h00;
mem['h07B] = 'h00;
mem['h07C] = 'h00;
mem['h07D] = 'h00;
mem['h07E] = 'h00;
mem['h07F] = 'h00;
mem['h080] = 'h00;
mem['h081] = 'h00;
mem['h082] = 'h00;
mem['h083] = 'h7C;
mem['h084] = 'h00;
mem['h085] = 'h00;
mem['h086] = 'h00;
mem['h087] = 'h00;
mem['h088] = 'h00;
mem['h089] = 'h00;
mem['h08A] = 'h00;
mem['h08B] = 'h7C;
mem['h08C] = 'h00;
mem['h08D] = 'h00;
mem['h08E] = 'h00;
mem['h08F] = 'h00;
mem['h090] = 'h00;
mem['h091] = 'h00;
mem['h092] = 'h00;
mem['h093] = 'hF0;
mem['h094] = 'h10;
mem['h095] = 'h10;
mem['h096] = 'h10;
mem['h097] = 'h10;
mem['h098] = 'h10;
mem['h099] = 'h10;
mem['h09A] = 'h10;
mem['h09B] = 'h10;
mem['h09C] = 'h10;
mem['h09D] = 'h10;
mem['h09E] = 'h10;
mem['h09F] = 'h10;
mem['h0A0] = 'h3C;
mem['h0A1] = 'h54;
mem['h0A2] = 'h54;
mem['h0A3] = 'h34;
mem['h0A4] = 'h14;
mem['h0A5] = 'h14;
mem['h0A6] = 'h14;
mem['h0A7] = 'h00;
mem['h0A8] = 'h00;
mem['h0A9] = 'h00;
mem['h0AA] = 'h08;
mem['h0AB] = 'hFC;
mem['h0AC] = 'h08;
mem['h0AD] = 'h00;
mem['h0AE] = 'h00;
mem['h0AF] = 'h00;
mem['h0B0] = 'h00;
mem['h0B1] = 'h00;
mem['h0B2] = 'h00;
mem['h0B3] = 'h00;
mem['h0B4] = 'h7C;
mem['h0B5] = 'h7C;
mem['h0B6] = 'h7C;
mem['h0B7] = 'h00;
mem['h0B8] = 'h10;
mem['h0B9] = 'h38;
mem['h0BA] = 'h10;
mem['h0BB] = 'h10;
mem['h0BC] = 'h38;
mem['h0BD] = 'h10;
mem['h0BE] = 'h7C;
mem['h0BF] = 'h00;
mem['h0C0] = 'h00;
mem['h0C1] = 'h10;
mem['h0C2] = 'h38;
mem['h0C3] = 'h10;
mem['h0C4] = 'h10;
mem['h0C5] = 'h10;
mem['h0C6] = 'h10;
mem['h0C7] = 'h10;
mem['h0C8] = 'h10;
mem['h0C9] = 'h10;
mem['h0CA] = 'h10;
mem['h0CB] = 'h10;
mem['h0CC] = 'h10;
mem['h0CD] = 'h38;
mem['h0CE] = 'h10;
mem['h0CF] = 'h00;
mem['h0D0] = 'h00;
mem['h0D1] = 'h00;
mem['h0D2] = 'h08;
mem['h0D3] = 'hFC;
mem['h0D4] = 'h08;
mem['h0D5] = 'h00;
mem['h0D6] = 'h00;
mem['h0D7] = 'h00;
mem['h0D8] = 'h00;
mem['h0D9] = 'h00;
mem['h0DA] = 'h00;
mem['h0DB] = 'h7C;
mem['h0DC] = 'h00;
mem['h0DD] = 'h00;
mem['h0DE] = 'h00;
mem['h0DF] = 'h00;
mem['h0E0] = 'h10;
mem['h0E1] = 'h10;
mem['h0E2] = 'h10;
mem['h0E3] = 'h10;
mem['h0E4] = 'h10;
mem['h0E5] = 'h10;
mem['h0E6] = 'h10;
mem['h0E7] = 'h10;
mem['h0E8] = 'h40;
mem['h0E9] = 'h40;
mem['h0EA] = 'h40;
mem['h0EB] = 'h40;
mem['h0EC] = 'h40;
mem['h0ED] = 'h40;
mem['h0EE] = 'h7C;
mem['h0EF] = 'h00;
mem['h0F0] = 'h00;
mem['h0F1] = 'h00;
mem['h0F2] = 'h00;
mem['h0F3] = 'h7C;
mem['h0F4] = 'h00;
mem['h0F5] = 'h00;
mem['h0F6] = 'h00;
mem['h0F7] = 'h00;
mem['h0F8] = 'h00;
mem['h0F9] = 'h00;
mem['h0FA] = 'h00;
mem['h0FB] = 'h7C;
mem['h0FC] = 'h00;
mem['h0FD] = 'h00;
mem['h0FE] = 'h00;
mem['h0FF] = 'h00;
mem['h100] = 'h00;
mem['h101] = 'h00;
mem['h102] = 'h00;
mem['h103] = 'h00;
mem['h104] = 'h00;
mem['h105] = 'h00;
mem['h106] = 'h00;
mem['h107] = 'h00;
mem['h108] = 'h10;
mem['h109] = 'h10;
mem['h10A] = 'h10;
mem['h10B] = 'h10;
mem['h10C] = 'h10;
mem['h10D] = 'h00;
mem['h10E] = 'h10;
mem['h10F] = 'h00;
mem['h110] = 'h28;
mem['h111] = 'h28;
mem['h112] = 'h28;
mem['h113] = 'h00;
mem['h114] = 'h00;
mem['h115] = 'h00;
mem['h116] = 'h00;
mem['h117] = 'h00;
mem['h118] = 'h28;
mem['h119] = 'h28;
mem['h11A] = 'h7C;
mem['h11B] = 'h28;
mem['h11C] = 'h7C;
mem['h11D] = 'h28;
mem['h11E] = 'h28;
mem['h11F] = 'h00;
mem['h120] = 'h44;
mem['h121] = 'h38;
mem['h122] = 'h44;
mem['h123] = 'h44;
mem['h124] = 'h44;
mem['h125] = 'h38;
mem['h126] = 'h44;
mem['h127] = 'h00;
mem['h128] = 'h60;
mem['h129] = 'h64;
mem['h12A] = 'h08;
mem['h12B] = 'h10;
mem['h12C] = 'h20;
mem['h12D] = 'h4C;
mem['h12E] = 'h0C;
mem['h12F] = 'h00;
mem['h130] = 'h20;
mem['h131] = 'h50;
mem['h132] = 'h50;
mem['h133] = 'h20;
mem['h134] = 'h54;
mem['h135] = 'h48;
mem['h136] = 'h34;
mem['h137] = 'h00;
mem['h138] = 'h10;
mem['h139] = 'h10;
mem['h13A] = 'h10;
mem['h13B] = 'h00;
mem['h13C] = 'h00;
mem['h13D] = 'h00;
mem['h13E] = 'h00;
mem['h13F] = 'h00;
mem['h140] = 'h08;
mem['h141] = 'h10;
mem['h142] = 'h20;
mem['h143] = 'h20;
mem['h144] = 'h20;
mem['h145] = 'h10;
mem['h146] = 'h08;
mem['h147] = 'h00;
mem['h148] = 'h20;
mem['h149] = 'h10;
mem['h14A] = 'h08;
mem['h14B] = 'h08;
mem['h14C] = 'h08;
mem['h14D] = 'h10;
mem['h14E] = 'h20;
mem['h14F] = 'h00;
mem['h150] = 'h10;
mem['h151] = 'h54;
mem['h152] = 'h38;
mem['h153] = 'h10;
mem['h154] = 'h38;
mem['h155] = 'h54;
mem['h156] = 'h10;
mem['h157] = 'h00;
mem['h158] = 'h00;
mem['h159] = 'h10;
mem['h15A] = 'h10;
mem['h15B] = 'h7C;
mem['h15C] = 'h10;
mem['h15D] = 'h10;
mem['h15E] = 'h00;
mem['h15F] = 'h00;
mem['h160] = 'h00;
mem['h161] = 'h00;
mem['h162] = 'h00;
mem['h163] = 'h30;
mem['h164] = 'h30;
mem['h165] = 'h10;
mem['h166] = 'h20;
mem['h167] = 'h00;
mem['h168] = 'h00;
mem['h169] = 'h00;
mem['h16A] = 'h00;
mem['h16B] = 'h7C;
mem['h16C] = 'h00;
mem['h16D] = 'h00;
mem['h16E] = 'h00;
mem['h16F] = 'h00;
mem['h170] = 'h00;
mem['h171] = 'h00;
mem['h172] = 'h00;
mem['h173] = 'h00;
mem['h174] = 'h00;
mem['h175] = 'h30;
mem['h176] = 'h30;
mem['h177] = 'h00;
mem['h178] = 'h00;
mem['h179] = 'h04;
mem['h17A] = 'h08;
mem['h17B] = 'h10;
mem['h17C] = 'h20;
mem['h17D] = 'h40;
mem['h17E] = 'h00;
mem['h17F] = 'h00;
mem['h180] = 'h38;
mem['h181] = 'h44;
mem['h182] = 'h4C;
mem['h183] = 'h54;
mem['h184] = 'h64;
mem['h185] = 'h44;
mem['h186] = 'h38;
mem['h187] = 'h00;
mem['h188] = 'h10;
mem['h189] = 'h30;
mem['h18A] = 'h10;
mem['h18B] = 'h10;
mem['h18C] = 'h10;
mem['h18D] = 'h10;
mem['h18E] = 'h38;
mem['h18F] = 'h00;
mem['h190] = 'h38;
mem['h191] = 'h44;
mem['h192] = 'h04;
mem['h193] = 'h08;
mem['h194] = 'h10;
mem['h195] = 'h20;
mem['h196] = 'h7C;
mem['h197] = 'h00;
mem['h198] = 'h7C;
mem['h199] = 'h04;
mem['h19A] = 'h08;
mem['h19B] = 'h18;
mem['h19C] = 'h04;
mem['h19D] = 'h44;
mem['h19E] = 'h38;
mem['h19F] = 'h00;
mem['h1A0] = 'h08;
mem['h1A1] = 'h18;
mem['h1A2] = 'h28;
mem['h1A3] = 'h48;
mem['h1A4] = 'h7C;
mem['h1A5] = 'h08;
mem['h1A6] = 'h08;
mem['h1A7] = 'h00;
mem['h1A8] = 'h7C;
mem['h1A9] = 'h40;
mem['h1AA] = 'h78;
mem['h1AB] = 'h04;
mem['h1AC] = 'h04;
mem['h1AD] = 'h44;
mem['h1AE] = 'h38;
mem['h1AF] = 'h00;
mem['h1B0] = 'h1C;
mem['h1B1] = 'h20;
mem['h1B2] = 'h40;
mem['h1B3] = 'h78;
mem['h1B4] = 'h44;
mem['h1B5] = 'h44;
mem['h1B6] = 'h38;
mem['h1B7] = 'h00;
mem['h1B8] = 'h7C;
mem['h1B9] = 'h04;
mem['h1BA] = 'h08;
mem['h1BB] = 'h10;
mem['h1BC] = 'h20;
mem['h1BD] = 'h20;
mem['h1BE] = 'h20;
mem['h1BF] = 'h00;
mem['h1C0] = 'h38;
mem['h1C1] = 'h44;
mem['h1C2] = 'h44;
mem['h1C3] = 'h38;
mem['h1C4] = 'h44;
mem['h1C5] = 'h44;
mem['h1C6] = 'h38;
mem['h1C7] = 'h00;
mem['h1C8] = 'h38;
mem['h1C9] = 'h44;
mem['h1CA] = 'h44;
mem['h1CB] = 'h3C;
mem['h1CC] = 'h04;
mem['h1CD] = 'h08;
mem['h1CE] = 'h70;
mem['h1CF] = 'h00;
mem['h1D0] = 'h00;
mem['h1D1] = 'h00;
mem['h1D2] = 'h18;
mem['h1D3] = 'h18;
mem['h1D4] = 'h00;
mem['h1D5] = 'h18;
mem['h1D6] = 'h18;
mem['h1D7] = 'h00;
mem['h1D8] = 'h18;
mem['h1D9] = 'h18;
mem['h1DA] = 'h00;
mem['h1DB] = 'h18;
mem['h1DC] = 'h18;
mem['h1DD] = 'h08;
mem['h1DE] = 'h10;
mem['h1DF] = 'h00;
mem['h1E0] = 'h04;
mem['h1E1] = 'h08;
mem['h1E2] = 'h10;
mem['h1E3] = 'h20;
mem['h1E4] = 'h10;
mem['h1E5] = 'h08;
mem['h1E6] = 'h04;
mem['h1E7] = 'h00;
mem['h1E8] = 'h00;
mem['h1E9] = 'h00;
mem['h1EA] = 'h7C;
mem['h1EB] = 'h00;
mem['h1EC] = 'h7C;
mem['h1ED] = 'h00;
mem['h1EE] = 'h00;
mem['h1EF] = 'h00;
mem['h1F0] = 'h20;
mem['h1F1] = 'h10;
mem['h1F2] = 'h08;
mem['h1F3] = 'h04;
mem['h1F4] = 'h08;
mem['h1F5] = 'h10;
mem['h1F6] = 'h20;
mem['h1F7] = 'h00;
mem['h1F8] = 'h38;
mem['h1F9] = 'h44;
mem['h1FA] = 'h08;
mem['h1FB] = 'h10;
mem['h1FC] = 'h10;
mem['h1FD] = 'h00;
mem['h1FE] = 'h10;
mem['h1FF] = 'h00;
mem['h200] = 'h38;
mem['h201] = 'h44;
mem['h202] = 'h5C;
mem['h203] = 'h54;
mem['h204] = 'h5C;
mem['h205] = 'h40;
mem['h206] = 'h3C;
mem['h207] = 'h00;
mem['h208] = 'h10;
mem['h209] = 'h28;
mem['h20A] = 'h44;
mem['h20B] = 'h44;
mem['h20C] = 'h7C;
mem['h20D] = 'h44;
mem['h20E] = 'h44;
mem['h20F] = 'h00;
mem['h210] = 'h78;
mem['h211] = 'h44;
mem['h212] = 'h44;
mem['h213] = 'h78;
mem['h214] = 'h44;
mem['h215] = 'h44;
mem['h216] = 'h78;
mem['h217] = 'h00;
mem['h218] = 'h38;
mem['h219] = 'h44;
mem['h21A] = 'h40;
mem['h21B] = 'h40;
mem['h21C] = 'h40;
mem['h21D] = 'h44;
mem['h21E] = 'h38;
mem['h21F] = 'h00;
mem['h220] = 'h78;
mem['h221] = 'h44;
mem['h222] = 'h44;
mem['h223] = 'h44;
mem['h224] = 'h44;
mem['h225] = 'h44;
mem['h226] = 'h78;
mem['h227] = 'h00;
mem['h228] = 'h7C;
mem['h229] = 'h40;
mem['h22A] = 'h40;
mem['h22B] = 'h78;
mem['h22C] = 'h40;
mem['h22D] = 'h40;
mem['h22E] = 'h7C;
mem['h22F] = 'h00;
mem['h230] = 'h7C;
mem['h231] = 'h40;
mem['h232] = 'h40;
mem['h233] = 'h78;
mem['h234] = 'h40;
mem['h235] = 'h40;
mem['h236] = 'h40;
mem['h237] = 'h00;
mem['h238] = 'h3C;
mem['h239] = 'h40;
mem['h23A] = 'h40;
mem['h23B] = 'h40;
mem['h23C] = 'h4C;
mem['h23D] = 'h44;
mem['h23E] = 'h3C;
mem['h23F] = 'h00;
mem['h240] = 'h44;
mem['h241] = 'h44;
mem['h242] = 'h44;
mem['h243] = 'h7C;
mem['h244] = 'h44;
mem['h245] = 'h44;
mem['h246] = 'h44;
mem['h247] = 'h00;
mem['h248] = 'h38;
mem['h249] = 'h10;
mem['h24A] = 'h10;
mem['h24B] = 'h10;
mem['h24C] = 'h10;
mem['h24D] = 'h10;
mem['h24E] = 'h38;
mem['h24F] = 'h00;
mem['h250] = 'h04;
mem['h251] = 'h04;
mem['h252] = 'h04;
mem['h253] = 'h04;
mem['h254] = 'h04;
mem['h255] = 'h44;
mem['h256] = 'h38;
mem['h257] = 'h00;
mem['h258] = 'h44;
mem['h259] = 'h48;
mem['h25A] = 'h50;
mem['h25B] = 'h60;
mem['h25C] = 'h50;
mem['h25D] = 'h48;
mem['h25E] = 'h44;
mem['h25F] = 'h00;
mem['h260] = 'h40;
mem['h261] = 'h40;
mem['h262] = 'h40;
mem['h263] = 'h40;
mem['h264] = 'h40;
mem['h265] = 'h40;
mem['h266] = 'h7C;
mem['h267] = 'h00;
mem['h268] = 'h44;
mem['h269] = 'h6C;
mem['h26A] = 'h54;
mem['h26B] = 'h54;
mem['h26C] = 'h44;
mem['h26D] = 'h44;
mem['h26E] = 'h44;
mem['h26F] = 'h00;
mem['h270] = 'h44;
mem['h271] = 'h44;
mem['h272] = 'h64;
mem['h273] = 'h54;
mem['h274] = 'h4C;
mem['h275] = 'h44;
mem['h276] = 'h44;
mem['h277] = 'h00;
mem['h278] = 'h38;
mem['h279] = 'h44;
mem['h27A] = 'h44;
mem['h27B] = 'h44;
mem['h27C] = 'h44;
mem['h27D] = 'h44;
mem['h27E] = 'h38;
mem['h27F] = 'h00;
mem['h280] = 'h78;
mem['h281] = 'h44;
mem['h282] = 'h44;
mem['h283] = 'h78;
mem['h284] = 'h40;
mem['h285] = 'h40;
mem['h286] = 'h40;
mem['h287] = 'h00;
mem['h288] = 'h38;
mem['h289] = 'h44;
mem['h28A] = 'h44;
mem['h28B] = 'h44;
mem['h28C] = 'h54;
mem['h28D] = 'h48;
mem['h28E] = 'h34;
mem['h28F] = 'h00;
mem['h290] = 'h78;
mem['h291] = 'h44;
mem['h292] = 'h44;
mem['h293] = 'h78;
mem['h294] = 'h50;
mem['h295] = 'h48;
mem['h296] = 'h44;
mem['h297] = 'h00;
mem['h298] = 'h38;
mem['h299] = 'h44;
mem['h29A] = 'h40;
mem['h29B] = 'h38;
mem['h29C] = 'h04;
mem['h29D] = 'h44;
mem['h29E] = 'h38;
mem['h29F] = 'h00;
mem['h2A0] = 'h7C;
mem['h2A1] = 'h10;
mem['h2A2] = 'h10;
mem['h2A3] = 'h10;
mem['h2A4] = 'h10;
mem['h2A5] = 'h10;
mem['h2A6] = 'h10;
mem['h2A7] = 'h00;
mem['h2A8] = 'h44;
mem['h2A9] = 'h44;
mem['h2AA] = 'h44;
mem['h2AB] = 'h44;
mem['h2AC] = 'h44;
mem['h2AD] = 'h44;
mem['h2AE] = 'h38;
mem['h2AF] = 'h00;
mem['h2B0] = 'h44;
mem['h2B1] = 'h44;
mem['h2B2] = 'h44;
mem['h2B3] = 'h44;
mem['h2B4] = 'h44;
mem['h2B5] = 'h28;
mem['h2B6] = 'h10;
mem['h2B7] = 'h00;
mem['h2B8] = 'h44;
mem['h2B9] = 'h44;
mem['h2BA] = 'h44;
mem['h2BB] = 'h54;
mem['h2BC] = 'h54;
mem['h2BD] = 'h6C;
mem['h2BE] = 'h44;
mem['h2BF] = 'h00;
mem['h2C0] = 'h44;
mem['h2C1] = 'h44;
mem['h2C2] = 'h28;
mem['h2C3] = 'h10;
mem['h2C4] = 'h28;
mem['h2C5] = 'h44;
mem['h2C6] = 'h44;
mem['h2C7] = 'h00;
mem['h2C8] = 'h44;
mem['h2C9] = 'h44;
mem['h2CA] = 'h28;
mem['h2CB] = 'h10;
mem['h2CC] = 'h10;
mem['h2CD] = 'h10;
mem['h2CE] = 'h10;
mem['h2CF] = 'h00;
mem['h2D0] = 'h7C;
mem['h2D1] = 'h04;
mem['h2D2] = 'h08;
mem['h2D3] = 'h10;
mem['h2D4] = 'h20;
mem['h2D5] = 'h40;
mem['h2D6] = 'h7C;
mem['h2D7] = 'h00;
mem['h2D8] = 'h7C;
mem['h2D9] = 'h60;
mem['h2DA] = 'h60;
mem['h2DB] = 'h60;
mem['h2DC] = 'h60;
mem['h2DD] = 'h60;
mem['h2DE] = 'h7C;
mem['h2DF] = 'h00;
mem['h2E0] = 'h00;
mem['h2E1] = 'h40;
mem['h2E2] = 'h20;
mem['h2E3] = 'h10;
mem['h2E4] = 'h08;
mem['h2E5] = 'h04;
mem['h2E6] = 'h00;
mem['h2E7] = 'h00;
mem['h2E8] = 'h7C;
mem['h2E9] = 'h0C;
mem['h2EA] = 'h0C;
mem['h2EB] = 'h0C;
mem['h2EC] = 'h0C;
mem['h2ED] = 'h0C;
mem['h2EE] = 'h7C;
mem['h2EF] = 'h00;
mem['h2F0] = 'h00;
mem['h2F1] = 'h10;
mem['h2F2] = 'h28;
mem['h2F3] = 'h44;
mem['h2F4] = 'h00;
mem['h2F5] = 'h00;
mem['h2F6] = 'h00;
mem['h2F7] = 'h00;
mem['h2F8] = 'h00;
mem['h2F9] = 'h00;
mem['h2FA] = 'h00;
mem['h2FB] = 'h00;
mem['h2FC] = 'h00;
mem['h2FD] = 'h00;
mem['h2FE] = 'h00;
mem['h2FF] = 'hFF;
mem['h300] = 'h5C;
mem['h301] = 'h54;
mem['h302] = 'h54;
mem['h303] = 'h74;
mem['h304] = 'h54;
mem['h305] = 'h54;
mem['h306] = 'h5C;
mem['h307] = 'h00;
mem['h308] = 'h38;
mem['h309] = 'h44;
mem['h30A] = 'h44;
mem['h30B] = 'h44;
mem['h30C] = 'h7C;
mem['h30D] = 'h44;
mem['h30E] = 'h44;
mem['h30F] = 'h00;
mem['h310] = 'h7C;
mem['h311] = 'h40;
mem['h312] = 'h40;
mem['h313] = 'h78;
mem['h314] = 'h44;
mem['h315] = 'h44;
mem['h316] = 'h78;
mem['h317] = 'h00;
mem['h318] = 'h48;
mem['h319] = 'h48;
mem['h31A] = 'h48;
mem['h31B] = 'h48;
mem['h31C] = 'h48;
mem['h31D] = 'h48;
mem['h31E] = 'h7C;
mem['h31F] = 'h04;
mem['h320] = 'h1C;
mem['h321] = 'h24;
mem['h322] = 'h24;
mem['h323] = 'h24;
mem['h324] = 'h24;
mem['h325] = 'h24;
mem['h326] = 'h7E;
mem['h327] = 'h42;
mem['h328] = 'h7C;
mem['h329] = 'h40;
mem['h32A] = 'h40;
mem['h32B] = 'h78;
mem['h32C] = 'h40;
mem['h32D] = 'h40;
mem['h32E] = 'h7C;
mem['h32F] = 'h00;
mem['h330] = 'h38;
mem['h331] = 'h54;
mem['h332] = 'h54;
mem['h333] = 'h54;
mem['h334] = 'h38;
mem['h335] = 'h10;
mem['h336] = 'h10;
mem['h337] = 'h00;
mem['h338] = 'h7C;
mem['h339] = 'h40;
mem['h33A] = 'h40;
mem['h33B] = 'h40;
mem['h33C] = 'h40;
mem['h33D] = 'h40;
mem['h33E] = 'h40;
mem['h33F] = 'h00;
mem['h340] = 'h44;
mem['h341] = 'h44;
mem['h342] = 'h28;
mem['h343] = 'h10;
mem['h344] = 'h28;
mem['h345] = 'h44;
mem['h346] = 'h44;
mem['h347] = 'h00;
mem['h348] = 'h44;
mem['h349] = 'h44;
mem['h34A] = 'h44;
mem['h34B] = 'h4C;
mem['h34C] = 'h54;
mem['h34D] = 'h64;
mem['h34E] = 'h44;
mem['h34F] = 'h00;
mem['h350] = 'h54;
mem['h351] = 'h54;
mem['h352] = 'h44;
mem['h353] = 'h4C;
mem['h354] = 'h54;
mem['h355] = 'h64;
mem['h356] = 'h44;
mem['h357] = 'h00;
mem['h358] = 'h44;
mem['h359] = 'h48;
mem['h35A] = 'h50;
mem['h35B] = 'h60;
mem['h35C] = 'h50;
mem['h35D] = 'h48;
mem['h35E] = 'h44;
mem['h35F] = 'h00;
mem['h360] = 'h0C;
mem['h361] = 'h14;
mem['h362] = 'h24;
mem['h363] = 'h24;
mem['h364] = 'h24;
mem['h365] = 'h24;
mem['h366] = 'h44;
mem['h367] = 'h00;
mem['h368] = 'h44;
mem['h369] = 'h6C;
mem['h36A] = 'h54;
mem['h36B] = 'h54;
mem['h36C] = 'h44;
mem['h36D] = 'h44;
mem['h36E] = 'h44;
mem['h36F] = 'h00;
mem['h370] = 'h44;
mem['h371] = 'h44;
mem['h372] = 'h44;
mem['h373] = 'h7C;
mem['h374] = 'h44;
mem['h375] = 'h44;
mem['h376] = 'h44;
mem['h377] = 'h00;
mem['h378] = 'h38;
mem['h379] = 'h44;
mem['h37A] = 'h44;
mem['h37B] = 'h44;
mem['h37C] = 'h44;
mem['h37D] = 'h44;
mem['h37E] = 'h38;
mem['h37F] = 'h00;
mem['h380] = 'h7C;
mem['h381] = 'h44;
mem['h382] = 'h44;
mem['h383] = 'h44;
mem['h384] = 'h44;
mem['h385] = 'h44;
mem['h386] = 'h44;
mem['h387] = 'h00;
mem['h388] = 'h3C;
mem['h389] = 'h44;
mem['h38A] = 'h44;
mem['h38B] = 'h3C;
mem['h38C] = 'h14;
mem['h38D] = 'h24;
mem['h38E] = 'h44;
mem['h38F] = 'h00;
mem['h390] = 'h78;
mem['h391] = 'h44;
mem['h392] = 'h44;
mem['h393] = 'h78;
mem['h394] = 'h40;
mem['h395] = 'h40;
mem['h396] = 'h40;
mem['h397] = 'h00;
mem['h398] = 'h38;
mem['h399] = 'h44;
mem['h39A] = 'h40;
mem['h39B] = 'h40;
mem['h39C] = 'h40;
mem['h39D] = 'h44;
mem['h39E] = 'h38;
mem['h39F] = 'h00;
mem['h3A0] = 'h7C;
mem['h3A1] = 'h10;
mem['h3A2] = 'h10;
mem['h3A3] = 'h10;
mem['h3A4] = 'h10;
mem['h3A5] = 'h10;
mem['h3A6] = 'h10;
mem['h3A7] = 'h00;
mem['h3A8] = 'h44;
mem['h3A9] = 'h44;
mem['h3AA] = 'h44;
mem['h3AB] = 'h3C;
mem['h3AC] = 'h04;
mem['h3AD] = 'h44;
mem['h3AE] = 'h38;
mem['h3AF] = 'h00;
mem['h3B0] = 'h54;
mem['h3B1] = 'h54;
mem['h3B2] = 'h54;
mem['h3B3] = 'h38;
mem['h3B4] = 'h54;
mem['h3B5] = 'h54;
mem['h3B6] = 'h54;
mem['h3B7] = 'h00;
mem['h3B8] = 'h78;
mem['h3B9] = 'h44;
mem['h3BA] = 'h44;
mem['h3BB] = 'h78;
mem['h3BC] = 'h44;
mem['h3BD] = 'h44;
mem['h3BE] = 'h78;
mem['h3BF] = 'h00;
mem['h3C0] = 'h40;
mem['h3C1] = 'h40;
mem['h3C2] = 'h40;
mem['h3C3] = 'h78;
mem['h3C4] = 'h44;
mem['h3C5] = 'h44;
mem['h3C6] = 'h78;
mem['h3C7] = 'h00;
mem['h3C8] = 'h44;
mem['h3C9] = 'h44;
mem['h3CA] = 'h44;
mem['h3CB] = 'h74;
mem['h3CC] = 'h54;
mem['h3CD] = 'h54;
mem['h3CE] = 'h74;
mem['h3CF] = 'h00;
mem['h3D0] = 'h38;
mem['h3D1] = 'h44;
mem['h3D2] = 'h04;
mem['h3D3] = 'h18;
mem['h3D4] = 'h04;
mem['h3D5] = 'h44;
mem['h3D6] = 'h38;
mem['h3D7] = 'h00;
mem['h3D8] = 'h54;
mem['h3D9] = 'h54;
mem['h3DA] = 'h54;
mem['h3DB] = 'h54;
mem['h3DC] = 'h54;
mem['h3DD] = 'h54;
mem['h3DE] = 'h7C;
mem['h3DF] = 'h00;
mem['h3E0] = 'h78;
mem['h3E1] = 'h04;
mem['h3E2] = 'h04;
mem['h3E3] = 'h3C;
mem['h3E4] = 'h04;
mem['h3E5] = 'h04;
mem['h3E6] = 'h78;
mem['h3E7] = 'h00;
mem['h3E8] = 'h54;
mem['h3E9] = 'h54;
mem['h3EA] = 'h54;
mem['h3EB] = 'h54;
mem['h3EC] = 'h54;
mem['h3ED] = 'h54;
mem['h3EE] = 'h7C;
mem['h3EF] = 'h04;
mem['h3F0] = 'h44;
mem['h3F1] = 'h44;
mem['h3F2] = 'h44;
mem['h3F3] = 'h3C;
mem['h3F4] = 'h04;
mem['h3F5] = 'h04;
mem['h3F6] = 'h04;
mem['h3F7] = 'h00;
mem['h3F8] = 'h60;
mem['h3F9] = 'h20;
mem['h3FA] = 'h20;
mem['h3FB] = 'h38;
mem['h3FC] = 'h24;
mem['h3FD] = 'h24;
mem['h3FE] = 'h38;
mem['h3FF] = 'h00;
mem['h400] = 'h00;
mem['h401] = 'h00;
mem['h402] = 'h00;
mem['h403] = 'h00;
mem['h404] = 'h00;
mem['h405] = 'h00;
mem['h406] = 'h00;
mem['h407] = 'h00;
mem['h408] = 'h00;
mem['h409] = 'h00;
mem['h40A] = 'h00;
mem['h40B] = 'h00;
mem['h40C] = 'h00;
mem['h40D] = 'h00;
mem['h40E] = 'h00;
mem['h40F] = 'h00;
mem['h410] = 'h00;
mem['h411] = 'h00;
mem['h412] = 'h00;
mem['h413] = 'h00;
mem['h414] = 'h00;
mem['h415] = 'h00;
mem['h416] = 'h00;
mem['h417] = 'h00;
mem['h418] = 'h00;
mem['h419] = 'h00;
mem['h41A] = 'h00;
mem['h41B] = 'h00;
mem['h41C] = 'h00;
mem['h41D] = 'h00;
mem['h41E] = 'h00;
mem['h41F] = 'h00;
mem['h420] = 'h00;
mem['h421] = 'h00;
mem['h422] = 'h00;
mem['h423] = 'h00;
mem['h424] = 'h00;
mem['h425] = 'h00;
mem['h426] = 'h00;
mem['h427] = 'h00;
mem['h428] = 'h00;
mem['h429] = 'h00;
mem['h42A] = 'h00;
mem['h42B] = 'h00;
mem['h42C] = 'h00;
mem['h42D] = 'h00;
mem['h42E] = 'h00;
mem['h42F] = 'h00;
mem['h430] = 'h00;
mem['h431] = 'h00;
mem['h432] = 'h00;
mem['h433] = 'h00;
mem['h434] = 'h00;
mem['h435] = 'h00;
mem['h436] = 'h00;
mem['h437] = 'h00;
mem['h438] = 'h00;
mem['h439] = 'h00;
mem['h43A] = 'h00;
mem['h43B] = 'h00;
mem['h43C] = 'h00;
mem['h43D] = 'h00;
mem['h43E] = 'h00;
mem['h43F] = 'h00;
mem['h440] = 'h00;
mem['h441] = 'h00;
mem['h442] = 'h00;
mem['h443] = 'h00;
mem['h444] = 'h00;
mem['h445] = 'h00;
mem['h446] = 'h00;
mem['h447] = 'h00;
mem['h448] = 'h00;
mem['h449] = 'h00;
mem['h44A] = 'h00;
mem['h44B] = 'h00;
mem['h44C] = 'h00;
mem['h44D] = 'h00;
mem['h44E] = 'h00;
mem['h44F] = 'h00;
mem['h450] = 'h00;
mem['h451] = 'h00;
mem['h452] = 'h00;
mem['h453] = 'h00;
mem['h454] = 'h00;
mem['h455] = 'h00;
mem['h456] = 'h00;
mem['h457] = 'h00;
mem['h458] = 'h00;
mem['h459] = 'h00;
mem['h45A] = 'h00;
mem['h45B] = 'h00;
mem['h45C] = 'h00;
mem['h45D] = 'h00;
mem['h45E] = 'h00;
mem['h45F] = 'h00;
mem['h460] = 'h00;
mem['h461] = 'h00;
mem['h462] = 'h00;
mem['h463] = 'h00;
mem['h464] = 'h00;
mem['h465] = 'h00;
mem['h466] = 'h00;
mem['h467] = 'h00;
mem['h468] = 'h00;
mem['h469] = 'h00;
mem['h46A] = 'h00;
mem['h46B] = 'h00;
mem['h46C] = 'h00;
mem['h46D] = 'h00;
mem['h46E] = 'h00;
mem['h46F] = 'h00;
mem['h470] = 'h00;
mem['h471] = 'h00;
mem['h472] = 'h00;
mem['h473] = 'h00;
mem['h474] = 'h00;
mem['h475] = 'h00;
mem['h476] = 'h00;
mem['h477] = 'h00;
mem['h478] = 'h00;
mem['h479] = 'h00;
mem['h47A] = 'h00;
mem['h47B] = 'h00;
mem['h47C] = 'h00;
mem['h47D] = 'h00;
mem['h47E] = 'h00;
mem['h47F] = 'h00;
mem['h480] = 'h00;
mem['h481] = 'h00;
mem['h482] = 'h00;
mem['h483] = 'h7C;
mem['h484] = 'h00;
mem['h485] = 'h00;
mem['h486] = 'h00;
mem['h487] = 'h00;
mem['h488] = 'h00;
mem['h489] = 'h00;
mem['h48A] = 'h00;
mem['h48B] = 'h7C;
mem['h48C] = 'h00;
mem['h48D] = 'h00;
mem['h48E] = 'h00;
mem['h48F] = 'h00;
mem['h490] = 'h00;
mem['h491] = 'h00;
mem['h492] = 'h00;
mem['h493] = 'hF0;
mem['h494] = 'h10;
mem['h495] = 'h10;
mem['h496] = 'h10;
mem['h497] = 'h10;
mem['h498] = 'h10;
mem['h499] = 'h10;
mem['h49A] = 'h10;
mem['h49B] = 'h10;
mem['h49C] = 'h10;
mem['h49D] = 'h10;
mem['h49E] = 'h10;
mem['h49F] = 'h10;
mem['h4A0] = 'h3C;
mem['h4A1] = 'h54;
mem['h4A2] = 'h54;
mem['h4A3] = 'h34;
mem['h4A4] = 'h14;
mem['h4A5] = 'h14;
mem['h4A6] = 'h14;
mem['h4A7] = 'h00;
mem['h4A8] = 'h00;
mem['h4A9] = 'h00;
mem['h4AA] = 'h08;
mem['h4AB] = 'hFC;
mem['h4AC] = 'h08;
mem['h4AD] = 'h00;
mem['h4AE] = 'h00;
mem['h4AF] = 'h00;
mem['h4B0] = 'h00;
mem['h4B1] = 'h00;
mem['h4B2] = 'h00;
mem['h4B3] = 'h00;
mem['h4B4] = 'h7C;
mem['h4B5] = 'h7C;
mem['h4B6] = 'h7C;
mem['h4B7] = 'h00;
mem['h4B8] = 'h10;
mem['h4B9] = 'h38;
mem['h4BA] = 'h10;
mem['h4BB] = 'h10;
mem['h4BC] = 'h38;
mem['h4BD] = 'h10;
mem['h4BE] = 'h7C;
mem['h4BF] = 'h00;
mem['h4C0] = 'h00;
mem['h4C1] = 'h10;
mem['h4C2] = 'h38;
mem['h4C3] = 'h10;
mem['h4C4] = 'h10;
mem['h4C5] = 'h10;
mem['h4C6] = 'h10;
mem['h4C7] = 'h10;
mem['h4C8] = 'h10;
mem['h4C9] = 'h10;
mem['h4CA] = 'h10;
mem['h4CB] = 'h10;
mem['h4CC] = 'h10;
mem['h4CD] = 'h38;
mem['h4CE] = 'h10;
mem['h4CF] = 'h00;
mem['h4D0] = 'h00;
mem['h4D1] = 'h00;
mem['h4D2] = 'h08;
mem['h4D3] = 'hFC;
mem['h4D4] = 'h08;
mem['h4D5] = 'h00;
mem['h4D6] = 'h00;
mem['h4D7] = 'h00;
mem['h4D8] = 'h00;
mem['h4D9] = 'h00;
mem['h4DA] = 'h00;
mem['h4DB] = 'h7C;
mem['h4DC] = 'h00;
mem['h4DD] = 'h00;
mem['h4DE] = 'h00;
mem['h4DF] = 'h00;
mem['h4E0] = 'h10;
mem['h4E1] = 'h10;
mem['h4E2] = 'h10;
mem['h4E3] = 'h10;
mem['h4E4] = 'h10;
mem['h4E5] = 'h10;
mem['h4E6] = 'h10;
mem['h4E7] = 'h10;
mem['h4E8] = 'h40;
mem['h4E9] = 'h40;
mem['h4EA] = 'h40;
mem['h4EB] = 'h40;
mem['h4EC] = 'h40;
mem['h4ED] = 'h40;
mem['h4EE] = 'h7C;
mem['h4EF] = 'h00;
mem['h4F0] = 'h00;
mem['h4F1] = 'h00;
mem['h4F2] = 'h00;
mem['h4F3] = 'h7C;
mem['h4F4] = 'h00;
mem['h4F5] = 'h00;
mem['h4F6] = 'h00;
mem['h4F7] = 'h00;
mem['h4F8] = 'h00;
mem['h4F9] = 'h00;
mem['h4FA] = 'h00;
mem['h4FB] = 'h7C;
mem['h4FC] = 'h00;
mem['h4FD] = 'h00;
mem['h4FE] = 'h00;
mem['h4FF] = 'h00;
mem['h500] = 'h00;
mem['h501] = 'h00;
mem['h502] = 'h00;
mem['h503] = 'h00;
mem['h504] = 'h00;
mem['h505] = 'h00;
mem['h506] = 'h00;
mem['h507] = 'h00;
mem['h508] = 'h10;
mem['h509] = 'h10;
mem['h50A] = 'h10;
mem['h50B] = 'h10;
mem['h50C] = 'h10;
mem['h50D] = 'h00;
mem['h50E] = 'h10;
mem['h50F] = 'h00;
mem['h510] = 'h28;
mem['h511] = 'h28;
mem['h512] = 'h28;
mem['h513] = 'h00;
mem['h514] = 'h00;
mem['h515] = 'h00;
mem['h516] = 'h00;
mem['h517] = 'h00;
mem['h518] = 'h28;
mem['h519] = 'h28;
mem['h51A] = 'h7C;
mem['h51B] = 'h28;
mem['h51C] = 'h7C;
mem['h51D] = 'h28;
mem['h51E] = 'h28;
mem['h51F] = 'h00;
mem['h520] = 'h44;
mem['h521] = 'h38;
mem['h522] = 'h44;
mem['h523] = 'h44;
mem['h524] = 'h44;
mem['h525] = 'h38;
mem['h526] = 'h44;
mem['h527] = 'h00;
mem['h528] = 'h60;
mem['h529] = 'h64;
mem['h52A] = 'h08;
mem['h52B] = 'h10;
mem['h52C] = 'h20;
mem['h52D] = 'h4C;
mem['h52E] = 'h0C;
mem['h52F] = 'h00;
mem['h530] = 'h20;
mem['h531] = 'h50;
mem['h532] = 'h50;
mem['h533] = 'h20;
mem['h534] = 'h54;
mem['h535] = 'h48;
mem['h536] = 'h34;
mem['h537] = 'h00;
mem['h538] = 'h10;
mem['h539] = 'h10;
mem['h53A] = 'h10;
mem['h53B] = 'h00;
mem['h53C] = 'h00;
mem['h53D] = 'h00;
mem['h53E] = 'h00;
mem['h53F] = 'h00;
mem['h540] = 'h08;
mem['h541] = 'h10;
mem['h542] = 'h20;
mem['h543] = 'h20;
mem['h544] = 'h20;
mem['h545] = 'h10;
mem['h546] = 'h08;
mem['h547] = 'h00;
mem['h548] = 'h20;
mem['h549] = 'h10;
mem['h54A] = 'h08;
mem['h54B] = 'h08;
mem['h54C] = 'h08;
mem['h54D] = 'h10;
mem['h54E] = 'h20;
mem['h54F] = 'h00;
mem['h550] = 'h10;
mem['h551] = 'h54;
mem['h552] = 'h38;
mem['h553] = 'h10;
mem['h554] = 'h38;
mem['h555] = 'h54;
mem['h556] = 'h10;
mem['h557] = 'h00;
mem['h558] = 'h00;
mem['h559] = 'h10;
mem['h55A] = 'h10;
mem['h55B] = 'h7C;
mem['h55C] = 'h10;
mem['h55D] = 'h10;
mem['h55E] = 'h00;
mem['h55F] = 'h00;
mem['h560] = 'h00;
mem['h561] = 'h00;
mem['h562] = 'h00;
mem['h563] = 'h30;
mem['h564] = 'h30;
mem['h565] = 'h10;
mem['h566] = 'h20;
mem['h567] = 'h00;
mem['h568] = 'h00;
mem['h569] = 'h00;
mem['h56A] = 'h00;
mem['h56B] = 'h7C;
mem['h56C] = 'h00;
mem['h56D] = 'h00;
mem['h56E] = 'h00;
mem['h56F] = 'h00;
mem['h570] = 'h00;
mem['h571] = 'h00;
mem['h572] = 'h00;
mem['h573] = 'h00;
mem['h574] = 'h00;
mem['h575] = 'h30;
mem['h576] = 'h30;
mem['h577] = 'h00;
mem['h578] = 'h00;
mem['h579] = 'h04;
mem['h57A] = 'h08;
mem['h57B] = 'h10;
mem['h57C] = 'h20;
mem['h57D] = 'h40;
mem['h57E] = 'h00;
mem['h57F] = 'h00;
mem['h580] = 'h38;
mem['h581] = 'h44;
mem['h582] = 'h4C;
mem['h583] = 'h54;
mem['h584] = 'h64;
mem['h585] = 'h44;
mem['h586] = 'h38;
mem['h587] = 'h00;
mem['h588] = 'h10;
mem['h589] = 'h30;
mem['h58A] = 'h10;
mem['h58B] = 'h10;
mem['h58C] = 'h10;
mem['h58D] = 'h10;
mem['h58E] = 'h38;
mem['h58F] = 'h00;
mem['h590] = 'h38;
mem['h591] = 'h44;
mem['h592] = 'h04;
mem['h593] = 'h08;
mem['h594] = 'h10;
mem['h595] = 'h20;
mem['h596] = 'h7C;
mem['h597] = 'h00;
mem['h598] = 'h7C;
mem['h599] = 'h04;
mem['h59A] = 'h08;
mem['h59B] = 'h18;
mem['h59C] = 'h04;
mem['h59D] = 'h44;
mem['h59E] = 'h38;
mem['h59F] = 'h00;
mem['h5A0] = 'h08;
mem['h5A1] = 'h18;
mem['h5A2] = 'h28;
mem['h5A3] = 'h48;
mem['h5A4] = 'h7C;
mem['h5A5] = 'h08;
mem['h5A6] = 'h08;
mem['h5A7] = 'h00;
mem['h5A8] = 'h7C;
mem['h5A9] = 'h40;
mem['h5AA] = 'h78;
mem['h5AB] = 'h04;
mem['h5AC] = 'h04;
mem['h5AD] = 'h44;
mem['h5AE] = 'h38;
mem['h5AF] = 'h00;
mem['h5B0] = 'h1C;
mem['h5B1] = 'h20;
mem['h5B2] = 'h40;
mem['h5B3] = 'h78;
mem['h5B4] = 'h44;
mem['h5B5] = 'h44;
mem['h5B6] = 'h38;
mem['h5B7] = 'h00;
mem['h5B8] = 'h7C;
mem['h5B9] = 'h04;
mem['h5BA] = 'h08;
mem['h5BB] = 'h10;
mem['h5BC] = 'h20;
mem['h5BD] = 'h20;
mem['h5BE] = 'h20;
mem['h5BF] = 'h00;
mem['h5C0] = 'h38;
mem['h5C1] = 'h44;
mem['h5C2] = 'h44;
mem['h5C3] = 'h38;
mem['h5C4] = 'h44;
mem['h5C5] = 'h44;
mem['h5C6] = 'h38;
mem['h5C7] = 'h00;
mem['h5C8] = 'h38;
mem['h5C9] = 'h44;
mem['h5CA] = 'h44;
mem['h5CB] = 'h3C;
mem['h5CC] = 'h04;
mem['h5CD] = 'h08;
mem['h5CE] = 'h70;
mem['h5CF] = 'h00;
mem['h5D0] = 'h00;
mem['h5D1] = 'h00;
mem['h5D2] = 'h18;
mem['h5D3] = 'h18;
mem['h5D4] = 'h00;
mem['h5D5] = 'h18;
mem['h5D6] = 'h18;
mem['h5D7] = 'h00;
mem['h5D8] = 'h18;
mem['h5D9] = 'h18;
mem['h5DA] = 'h00;
mem['h5DB] = 'h18;
mem['h5DC] = 'h18;
mem['h5DD] = 'h08;
mem['h5DE] = 'h10;
mem['h5DF] = 'h00;
mem['h5E0] = 'h04;
mem['h5E1] = 'h08;
mem['h5E2] = 'h10;
mem['h5E3] = 'h20;
mem['h5E4] = 'h10;
mem['h5E5] = 'h08;
mem['h5E6] = 'h04;
mem['h5E7] = 'h00;
mem['h5E8] = 'h00;
mem['h5E9] = 'h00;
mem['h5EA] = 'h7C;
mem['h5EB] = 'h00;
mem['h5EC] = 'h7C;
mem['h5ED] = 'h00;
mem['h5EE] = 'h00;
mem['h5EF] = 'h00;
mem['h5F0] = 'h20;
mem['h5F1] = 'h10;
mem['h5F2] = 'h08;
mem['h5F3] = 'h04;
mem['h5F4] = 'h08;
mem['h5F5] = 'h10;
mem['h5F6] = 'h20;
mem['h5F7] = 'h00;
mem['h5F8] = 'h38;
mem['h5F9] = 'h44;
mem['h5FA] = 'h08;
mem['h5FB] = 'h10;
mem['h5FC] = 'h10;
mem['h5FD] = 'h00;
mem['h5FE] = 'h10;
mem['h5FF] = 'h00;
mem['h600] = 'h38;
mem['h601] = 'h44;
mem['h602] = 'h5C;
mem['h603] = 'h54;
mem['h604] = 'h5C;
mem['h605] = 'h40;
mem['h606] = 'h3C;
mem['h607] = 'h00;
mem['h608] = 'h10;
mem['h609] = 'h28;
mem['h60A] = 'h44;
mem['h60B] = 'h44;
mem['h60C] = 'h7C;
mem['h60D] = 'h44;
mem['h60E] = 'h44;
mem['h60F] = 'h00;
mem['h610] = 'h78;
mem['h611] = 'h44;
mem['h612] = 'h44;
mem['h613] = 'h78;
mem['h614] = 'h44;
mem['h615] = 'h44;
mem['h616] = 'h78;
mem['h617] = 'h00;
mem['h618] = 'h38;
mem['h619] = 'h44;
mem['h61A] = 'h40;
mem['h61B] = 'h40;
mem['h61C] = 'h40;
mem['h61D] = 'h44;
mem['h61E] = 'h38;
mem['h61F] = 'h00;
mem['h620] = 'h78;
mem['h621] = 'h44;
mem['h622] = 'h44;
mem['h623] = 'h44;
mem['h624] = 'h44;
mem['h625] = 'h44;
mem['h626] = 'h78;
mem['h627] = 'h00;
mem['h628] = 'h7C;
mem['h629] = 'h40;
mem['h62A] = 'h40;
mem['h62B] = 'h78;
mem['h62C] = 'h40;
mem['h62D] = 'h40;
mem['h62E] = 'h7C;
mem['h62F] = 'h00;
mem['h630] = 'h7C;
mem['h631] = 'h40;
mem['h632] = 'h40;
mem['h633] = 'h78;
mem['h634] = 'h40;
mem['h635] = 'h40;
mem['h636] = 'h40;
mem['h637] = 'h00;
mem['h638] = 'h3C;
mem['h639] = 'h40;
mem['h63A] = 'h40;
mem['h63B] = 'h40;
mem['h63C] = 'h4C;
mem['h63D] = 'h44;
mem['h63E] = 'h3C;
mem['h63F] = 'h00;
mem['h640] = 'h44;
mem['h641] = 'h44;
mem['h642] = 'h44;
mem['h643] = 'h7C;
mem['h644] = 'h44;
mem['h645] = 'h44;
mem['h646] = 'h44;
mem['h647] = 'h00;
mem['h648] = 'h38;
mem['h649] = 'h10;
mem['h64A] = 'h10;
mem['h64B] = 'h10;
mem['h64C] = 'h10;
mem['h64D] = 'h10;
mem['h64E] = 'h38;
mem['h64F] = 'h00;
mem['h650] = 'h04;
mem['h651] = 'h04;
mem['h652] = 'h04;
mem['h653] = 'h04;
mem['h654] = 'h04;
mem['h655] = 'h44;
mem['h656] = 'h38;
mem['h657] = 'h00;
mem['h658] = 'h44;
mem['h659] = 'h48;
mem['h65A] = 'h50;
mem['h65B] = 'h60;
mem['h65C] = 'h50;
mem['h65D] = 'h48;
mem['h65E] = 'h44;
mem['h65F] = 'h00;
mem['h660] = 'h40;
mem['h661] = 'h40;
mem['h662] = 'h40;
mem['h663] = 'h40;
mem['h664] = 'h40;
mem['h665] = 'h40;
mem['h666] = 'h7C;
mem['h667] = 'h00;
mem['h668] = 'h44;
mem['h669] = 'h6C;
mem['h66A] = 'h54;
mem['h66B] = 'h54;
mem['h66C] = 'h44;
mem['h66D] = 'h44;
mem['h66E] = 'h44;
mem['h66F] = 'h00;
mem['h670] = 'h44;
mem['h671] = 'h44;
mem['h672] = 'h64;
mem['h673] = 'h54;
mem['h674] = 'h4C;
mem['h675] = 'h44;
mem['h676] = 'h44;
mem['h677] = 'h00;
mem['h678] = 'h38;
mem['h679] = 'h44;
mem['h67A] = 'h44;
mem['h67B] = 'h44;
mem['h67C] = 'h44;
mem['h67D] = 'h44;
mem['h67E] = 'h38;
mem['h67F] = 'h00;
mem['h680] = 'h78;
mem['h681] = 'h44;
mem['h682] = 'h44;
mem['h683] = 'h78;
mem['h684] = 'h40;
mem['h685] = 'h40;
mem['h686] = 'h40;
mem['h687] = 'h00;
mem['h688] = 'h38;
mem['h689] = 'h44;
mem['h68A] = 'h44;
mem['h68B] = 'h44;
mem['h68C] = 'h54;
mem['h68D] = 'h48;
mem['h68E] = 'h34;
mem['h68F] = 'h00;
mem['h690] = 'h78;
mem['h691] = 'h44;
mem['h692] = 'h44;
mem['h693] = 'h78;
mem['h694] = 'h50;
mem['h695] = 'h48;
mem['h696] = 'h44;
mem['h697] = 'h00;
mem['h698] = 'h38;
mem['h699] = 'h44;
mem['h69A] = 'h40;
mem['h69B] = 'h38;
mem['h69C] = 'h04;
mem['h69D] = 'h44;
mem['h69E] = 'h38;
mem['h69F] = 'h00;
mem['h6A0] = 'h7C;
mem['h6A1] = 'h10;
mem['h6A2] = 'h10;
mem['h6A3] = 'h10;
mem['h6A4] = 'h10;
mem['h6A5] = 'h10;
mem['h6A6] = 'h10;
mem['h6A7] = 'h00;
mem['h6A8] = 'h44;
mem['h6A9] = 'h44;
mem['h6AA] = 'h44;
mem['h6AB] = 'h44;
mem['h6AC] = 'h44;
mem['h6AD] = 'h44;
mem['h6AE] = 'h38;
mem['h6AF] = 'h00;
mem['h6B0] = 'h44;
mem['h6B1] = 'h44;
mem['h6B2] = 'h44;
mem['h6B3] = 'h44;
mem['h6B4] = 'h44;
mem['h6B5] = 'h28;
mem['h6B6] = 'h10;
mem['h6B7] = 'h00;
mem['h6B8] = 'h44;
mem['h6B9] = 'h44;
mem['h6BA] = 'h44;
mem['h6BB] = 'h54;
mem['h6BC] = 'h54;
mem['h6BD] = 'h6C;
mem['h6BE] = 'h44;
mem['h6BF] = 'h00;
mem['h6C0] = 'h44;
mem['h6C1] = 'h44;
mem['h6C2] = 'h28;
mem['h6C3] = 'h10;
mem['h6C4] = 'h28;
mem['h6C5] = 'h44;
mem['h6C6] = 'h44;
mem['h6C7] = 'h00;
mem['h6C8] = 'h44;
mem['h6C9] = 'h44;
mem['h6CA] = 'h28;
mem['h6CB] = 'h10;
mem['h6CC] = 'h10;
mem['h6CD] = 'h10;
mem['h6CE] = 'h10;
mem['h6CF] = 'h00;
mem['h6D0] = 'h7C;
mem['h6D1] = 'h04;
mem['h6D2] = 'h08;
mem['h6D3] = 'h10;
mem['h6D4] = 'h20;
mem['h6D5] = 'h40;
mem['h6D6] = 'h7C;
mem['h6D7] = 'h00;
mem['h6D8] = 'h7C;
mem['h6D9] = 'h60;
mem['h6DA] = 'h60;
mem['h6DB] = 'h60;
mem['h6DC] = 'h60;
mem['h6DD] = 'h60;
mem['h6DE] = 'h7C;
mem['h6DF] = 'h00;
mem['h6E0] = 'h00;
mem['h6E1] = 'h40;
mem['h6E2] = 'h20;
mem['h6E3] = 'h10;
mem['h6E4] = 'h08;
mem['h6E5] = 'h04;
mem['h6E6] = 'h00;
mem['h6E7] = 'h00;
mem['h6E8] = 'h7C;
mem['h6E9] = 'h0C;
mem['h6EA] = 'h0C;
mem['h6EB] = 'h0C;
mem['h6EC] = 'h0C;
mem['h6ED] = 'h0C;
mem['h6EE] = 'h7C;
mem['h6EF] = 'h00;
mem['h6F0] = 'h00;
mem['h6F1] = 'h10;
mem['h6F2] = 'h28;
mem['h6F3] = 'h44;
mem['h6F4] = 'h00;
mem['h6F5] = 'h00;
mem['h6F6] = 'h00;
mem['h6F7] = 'h00;
mem['h6F8] = 'h00;
mem['h6F9] = 'h00;
mem['h6FA] = 'h00;
mem['h6FB] = 'h00;
mem['h6FC] = 'h00;
mem['h6FD] = 'h00;
mem['h6FE] = 'h00;
mem['h6FF] = 'hFF;
mem['h700] = 'h5C;
mem['h701] = 'h54;
mem['h702] = 'h54;
mem['h703] = 'h74;
mem['h704] = 'h54;
mem['h705] = 'h54;
mem['h706] = 'h5C;
mem['h707] = 'h00;
mem['h708] = 'h38;
mem['h709] = 'h44;
mem['h70A] = 'h44;
mem['h70B] = 'h44;
mem['h70C] = 'h7C;
mem['h70D] = 'h44;
mem['h70E] = 'h44;
mem['h70F] = 'h00;
mem['h710] = 'h7C;
mem['h711] = 'h40;
mem['h712] = 'h40;
mem['h713] = 'h78;
mem['h714] = 'h44;
mem['h715] = 'h44;
mem['h716] = 'h78;
mem['h717] = 'h00;
mem['h718] = 'h48;
mem['h719] = 'h48;
mem['h71A] = 'h48;
mem['h71B] = 'h48;
mem['h71C] = 'h48;
mem['h71D] = 'h48;
mem['h71E] = 'h7C;
mem['h71F] = 'h04;
mem['h720] = 'h1C;
mem['h721] = 'h24;
mem['h722] = 'h24;
mem['h723] = 'h24;
mem['h724] = 'h24;
mem['h725] = 'h24;
mem['h726] = 'h7E;
mem['h727] = 'h42;
mem['h728] = 'h7C;
mem['h729] = 'h40;
mem['h72A] = 'h40;
mem['h72B] = 'h78;
mem['h72C] = 'h40;
mem['h72D] = 'h40;
mem['h72E] = 'h7C;
mem['h72F] = 'h00;
mem['h730] = 'h38;
mem['h731] = 'h54;
mem['h732] = 'h54;
mem['h733] = 'h54;
mem['h734] = 'h38;
mem['h735] = 'h10;
mem['h736] = 'h10;
mem['h737] = 'h00;
mem['h738] = 'h7C;
mem['h739] = 'h40;
mem['h73A] = 'h40;
mem['h73B] = 'h40;
mem['h73C] = 'h40;
mem['h73D] = 'h40;
mem['h73E] = 'h40;
mem['h73F] = 'h00;
mem['h740] = 'h44;
mem['h741] = 'h44;
mem['h742] = 'h28;
mem['h743] = 'h10;
mem['h744] = 'h28;
mem['h745] = 'h44;
mem['h746] = 'h44;
mem['h747] = 'h00;
mem['h748] = 'h44;
mem['h749] = 'h44;
mem['h74A] = 'h44;
mem['h74B] = 'h4C;
mem['h74C] = 'h54;
mem['h74D] = 'h64;
mem['h74E] = 'h44;
mem['h74F] = 'h00;
mem['h750] = 'h54;
mem['h751] = 'h54;
mem['h752] = 'h44;
mem['h753] = 'h4C;
mem['h754] = 'h54;
mem['h755] = 'h64;
mem['h756] = 'h44;
mem['h757] = 'h00;
mem['h758] = 'h44;
mem['h759] = 'h48;
mem['h75A] = 'h50;
mem['h75B] = 'h60;
mem['h75C] = 'h50;
mem['h75D] = 'h48;
mem['h75E] = 'h44;
mem['h75F] = 'h00;
mem['h760] = 'h0C;
mem['h761] = 'h14;
mem['h762] = 'h24;
mem['h763] = 'h24;
mem['h764] = 'h24;
mem['h765] = 'h24;
mem['h766] = 'h44;
mem['h767] = 'h00;
mem['h768] = 'h44;
mem['h769] = 'h6C;
mem['h76A] = 'h54;
mem['h76B] = 'h54;
mem['h76C] = 'h44;
mem['h76D] = 'h44;
mem['h76E] = 'h44;
mem['h76F] = 'h00;
mem['h770] = 'h44;
mem['h771] = 'h44;
mem['h772] = 'h44;
mem['h773] = 'h7C;
mem['h774] = 'h44;
mem['h775] = 'h44;
mem['h776] = 'h44;
mem['h777] = 'h00;
mem['h778] = 'h38;
mem['h779] = 'h44;
mem['h77A] = 'h44;
mem['h77B] = 'h44;
mem['h77C] = 'h44;
mem['h77D] = 'h44;
mem['h77E] = 'h38;
mem['h77F] = 'h00;
mem['h780] = 'h7C;
mem['h781] = 'h44;
mem['h782] = 'h44;
mem['h783] = 'h44;
mem['h784] = 'h44;
mem['h785] = 'h44;
mem['h786] = 'h44;
mem['h787] = 'h00;
mem['h788] = 'h3C;
mem['h789] = 'h44;
mem['h78A] = 'h44;
mem['h78B] = 'h3C;
mem['h78C] = 'h14;
mem['h78D] = 'h24;
mem['h78E] = 'h44;
mem['h78F] = 'h00;
mem['h790] = 'h78;
mem['h791] = 'h44;
mem['h792] = 'h44;
mem['h793] = 'h78;
mem['h794] = 'h40;
mem['h795] = 'h40;
mem['h796] = 'h40;
mem['h797] = 'h00;
mem['h798] = 'h38;
mem['h799] = 'h44;
mem['h79A] = 'h40;
mem['h79B] = 'h40;
mem['h79C] = 'h40;
mem['h79D] = 'h44;
mem['h79E] = 'h38;
mem['h79F] = 'h00;
mem['h7A0] = 'h7C;
mem['h7A1] = 'h10;
mem['h7A2] = 'h10;
mem['h7A3] = 'h10;
mem['h7A4] = 'h10;
mem['h7A5] = 'h10;
mem['h7A6] = 'h10;
mem['h7A7] = 'h00;
mem['h7A8] = 'h44;
mem['h7A9] = 'h44;
mem['h7AA] = 'h44;
mem['h7AB] = 'h3C;
mem['h7AC] = 'h04;
mem['h7AD] = 'h44;
mem['h7AE] = 'h38;
mem['h7AF] = 'h00;
mem['h7B0] = 'h54;
mem['h7B1] = 'h54;
mem['h7B2] = 'h54;
mem['h7B3] = 'h38;
mem['h7B4] = 'h54;
mem['h7B5] = 'h54;
mem['h7B6] = 'h54;
mem['h7B7] = 'h00;
mem['h7B8] = 'h78;
mem['h7B9] = 'h44;
mem['h7BA] = 'h44;
mem['h7BB] = 'h78;
mem['h7BC] = 'h44;
mem['h7BD] = 'h44;
mem['h7BE] = 'h78;
mem['h7BF] = 'h00;
mem['h7C0] = 'h40;
mem['h7C1] = 'h40;
mem['h7C2] = 'h40;
mem['h7C3] = 'h78;
mem['h7C4] = 'h44;
mem['h7C5] = 'h44;
mem['h7C6] = 'h78;
mem['h7C7] = 'h00;
mem['h7C8] = 'h44;
mem['h7C9] = 'h44;
mem['h7CA] = 'h44;
mem['h7CB] = 'h74;
mem['h7CC] = 'h54;
mem['h7CD] = 'h54;
mem['h7CE] = 'h74;
mem['h7CF] = 'h00;
mem['h7D0] = 'h38;
mem['h7D1] = 'h44;
mem['h7D2] = 'h04;
mem['h7D3] = 'h18;
mem['h7D4] = 'h04;
mem['h7D5] = 'h44;
mem['h7D6] = 'h38;
mem['h7D7] = 'h00;
mem['h7D8] = 'h54;
mem['h7D9] = 'h54;
mem['h7DA] = 'h54;
mem['h7DB] = 'h54;
mem['h7DC] = 'h54;
mem['h7DD] = 'h54;
mem['h7DE] = 'h7C;
mem['h7DF] = 'h00;
mem['h7E0] = 'h78;
mem['h7E1] = 'h04;
mem['h7E2] = 'h04;
mem['h7E3] = 'h3C;
mem['h7E4] = 'h04;
mem['h7E5] = 'h04;
mem['h7E6] = 'h78;
mem['h7E7] = 'h00;
mem['h7E8] = 'h54;
mem['h7E9] = 'h54;
mem['h7EA] = 'h54;
mem['h7EB] = 'h54;
mem['h7EC] = 'h54;
mem['h7ED] = 'h54;
mem['h7EE] = 'h7C;
mem['h7EF] = 'h04;
mem['h7F0] = 'h44;
mem['h7F1] = 'h44;
mem['h7F2] = 'h44;
mem['h7F3] = 'h3C;
mem['h7F4] = 'h04;
mem['h7F5] = 'h04;
mem['h7F6] = 'h04;
mem['h7F7] = 'h00;
mem['h7F8] = 'h60;
mem['h7F9] = 'h20;
mem['h7FA] = 'h20;
mem['h7FB] = 'h38;
mem['h7FC] = 'h24;
mem['h7FD] = 'h24;
mem['h7FE] = 'h38;
mem['h7FF] = 'h00;
/ag_6502/trunk/agat7/ag_keyb.v
0,0 → 1,279
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Oleg Odintsov
//
// Create Date: 00:26:47 02/26/2012
// Design Name:
// Module Name: ag_keyb
// Project Name: Agat Hardware Project
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
 
module signal_filter(input clk, input in, output reg out);
always @(posedge clk) begin
out <= in;
end
endmodule
 
 
module ps2_keyb_driver(ps2_clk, ps2_data, ps2_code, ps2_up, ps2_ext, ps2_event);
input wire ps2_clk, ps2_data;
output reg[7:0] ps2_code = 0;
output reg ps2_up = 0, ps2_ext = 0, ps2_event = 0;
reg[10:0] shreg = 11'b11111111111;
wire[10:0] shnew = {ps2_data, shreg[10:1]};
wire start = shnew[0], stop = shnew[10], parity = shnew[9];
wire[7:0] data = shnew[8:1];
always @(negedge ps2_clk) begin
if (!start && stop && (parity == ~^data)) begin
if (data == 8'hE0) begin
ps2_ext <= 1;
end else if (data == 8'hF0) begin
ps2_up <= 1;
end else begin
ps2_code <= data;
ps2_event <= 1;
end
shreg <= 11'b11111111111;
end else begin
if (ps2_event) begin
ps2_up <= 0;
ps2_ext <= 0;
ps2_event <= 0;
end
shreg <= shnew;
end
end
endmodule
 
module ag_reg_decoder(keyb_in, shift, ctrl, keyb_out);
input wire[6:0] keyb_in;
input wire shift, ctrl;
output wire[6:0] keyb_out;
wire is_alpha = keyb_in[6] && !keyb_in[5];
wire is_digit = !keyb_in[6] && keyb_in[5] && keyb_in[3:0];
assign keyb_out =
is_alpha?
(shift?{1'b1,1'b1,keyb_in[4:0]}:
ctrl?{1'b0,1'b0,keyb_in[4:0]}:
keyb_in):
is_digit?
(shift?{1'b0,1'b1,~keyb_in[4],keyb_in[3:0]}:
keyb_in):
keyb_in;
endmodule
 
module ag_keyb_decoder(ps2_code, ps2_ext, shift, ctrl, alt, rus, keyb_code);
input wire[7:0] ps2_code;
input wire ps2_ext, shift, ctrl, alt, rus;
output wire[6:0] keyb_code;
reg[6:0] keyb_table[0:511]; // eng + rus
integer i;
wire[6:0] keyb_in;
assign keyb_in = keyb_table[{rus,ps2_code}];
ag_reg_decoder rd(keyb_in, shift, ctrl, keyb_code);
 
initial begin
for (i = 0; i < 512; i = i + 1) keyb_table[i] = 0;
// eng table
keyb_table['h15] = 'h51; // Q
keyb_table['h1D] = 'h57; // W
keyb_table['h24] = 'h45; // E
keyb_table['h2D] = 'h52; // R
keyb_table['h2C] = 'h54; // T
keyb_table['h35] = 'h59; // Y
keyb_table['h3C] = 'h55; // U
keyb_table['h43] = 'h49; // I
keyb_table['h44] = 'h4F; // O
keyb_table['h4D] = 'h50; // P
keyb_table['h54] = 'h5B; // {
keyb_table['h5B] = 'h5D; // }
keyb_table['h1C] = 'h41; // A
keyb_table['h1B] = 'h53; // S
keyb_table['h23] = 'h44; // D
keyb_table['h2B] = 'h46; // F
keyb_table['h34] = 'h47; // G
keyb_table['h33] = 'h48; // H
keyb_table['h3B] = 'h4A; // J
keyb_table['h42] = 'h4B; // K
keyb_table['h4B] = 'h4C; // L
keyb_table['h4C] = 'h2A; // :
keyb_table['h52] = 'h22; // "
keyb_table['h5D] = 'h5C; // \
keyb_table['h5A] = 'h0D; // enter
keyb_table['h1A] = 'h5A; // Z
keyb_table['h22] = 'h58; // X
keyb_table['h21] = 'h43; // C
keyb_table['h2A] = 'h56; // V
keyb_table['h32] = 'h42; // B
keyb_table['h31] = 'h4E; // N
keyb_table['h3A] = 'h4D; // M
keyb_table['h41] = 'h2C; // <
keyb_table['h49] = 'h2E; // >
keyb_table['h4A] = 'h2F; // ?
 
keyb_table['h05] = 'h04; // F1
keyb_table['h06] = 'h05; // F2
keyb_table['h04] = 'h06; // F3
 
keyb_table['h75] = 'h99; // UP
keyb_table['h74] = 'h95; // RIGHT
keyb_table['h6B] = 'h88; // LEFT
keyb_table['h66] = 'h88; // BS
keyb_table['h72] = 'h9A; // DOWN
keyb_table['h76] = 'h9B; // ESC
keyb_table['h29] = 'h20; // SPACE
keyb_table['h0E] = 'h00; // `
keyb_table['h16] = 'h31; // 1
keyb_table['h1E] = 'h32; // 2
keyb_table['h26] = 'h33; // 3
keyb_table['h25] = 'h34; // 4
keyb_table['h2E] = 'h35; // 5
keyb_table['h36] = 'h36; // 6
keyb_table['h3D] = 'h37; // 7
keyb_table['h3E] = 'h38; // 8
keyb_table['h46] = 'h39; // 9
keyb_table['h45] = 'h30; // 0
keyb_table['h4E] = 'h2D; // -
keyb_table['h55] = 'h3B; // =
 
// rus table + 100h
keyb_table['h115] = 'h4A; // Q
keyb_table['h11D] = 'h43; // W
keyb_table['h124] = 'h55; // E
keyb_table['h12D] = 'h4B; // R
keyb_table['h12C] = 'h45; // T
keyb_table['h135] = 'h4E; // Y
keyb_table['h13C] = 'h47; // U
keyb_table['h143] = 'h5B; // I
keyb_table['h144] = 'h5D; // O
keyb_table['h14D] = 'h5A; // P
keyb_table['h154] = 'h48; // {
keyb_table['h15B] = 'h3A; // }, check
keyb_table['h11C] = 'h46; // A
keyb_table['h11B] = 'h59; // S
keyb_table['h123] = 'h57; // D
keyb_table['h12B] = 'h41; // F
keyb_table['h134] = 'h50; // G
keyb_table['h133] = 'h52; // H
keyb_table['h13B] = 'h4F; // J
keyb_table['h142] = 'h4C; // K
keyb_table['h14B] = 'h44; // L
keyb_table['h14C] = 'h56; // :
keyb_table['h152] = 'h5C; // "
keyb_table['h15D] = 'h2B; // | -> .
keyb_table['h15A] = 'h0D; // enter
keyb_table['h11A] = 'h51; // Z
keyb_table['h122] = 'h5E; // X
keyb_table['h121] = 'h53; // C
keyb_table['h12A] = 'h4D; // V
keyb_table['h132] = 'h49; // B
keyb_table['h131] = 'h54; // N
keyb_table['h13A] = 'h58; // M
keyb_table['h141] = 'h42; // <
keyb_table['h149] = 'h2C; // >
keyb_table['h14A] = 'h2F; // ?
 
keyb_table['h105] = 'h04; // F1
keyb_table['h106] = 'h05; // F2
keyb_table['h104] = 'h06; // F3
 
keyb_table['h175] = 'h99; // UP
keyb_table['h174] = 'h95; // RIGHT
keyb_table['h16B] = 'h88; // LEFT
keyb_table['h166] = 'h88; // BS
keyb_table['h172] = 'h9A; // DOWN
keyb_table['h176] = 'h9B; // ESC
keyb_table['h129] = 'h20; // SPACE
keyb_table['h10E] = 'h00; // `
keyb_table['h116] = 'h31; // 1
keyb_table['h11E] = 'h32; // 2
keyb_table['h126] = 'h33; // 3
keyb_table['h125] = 'h34; // 4
keyb_table['h12E] = 'h35; // 5
keyb_table['h136] = 'h36; // 6
keyb_table['h13D] = 'h37; // 7
keyb_table['h13E] = 'h38; // 8
keyb_table['h146] = 'h39; // 9
keyb_table['h145] = 'h30; // 0
keyb_table['h14E] = 'h2D; // -
keyb_table['h155] = 'h3B; // =
end
endmodule
 
module ag_keyb(clk, ps2_bus, keyb_reg, keyb_clear, keyb_rus, keyb_rst, keyb_pause);
input clk;
input wire[1:0] ps2_bus;
output wire[7:0] keyb_reg;
input wire keyb_clear;
output wire keyb_rus;
output wire keyb_rst;
output wire keyb_pause;
wire ps2_clk, ps2_data;
assign {ps2_clk, ps2_data} = ps2_bus;
reg[7:0] keyb_code;
reg clr = 0, got = 0;
reg lshift = 0, rshift = 0, ctrl = 0, alt = 0, rus = 0, rst = 0, pause = 0;
wire[7:0] ps2_code;
wire ps2_up, ps2_ext, ps2_event;
assign keyb_reg = clr?0:keyb_code;
assign keyb_rus = rus;
assign keyb_rst = rst;
assign keyb_pause = pause;
wire[6:0] dec_code;
ps2_keyb_driver kd(ps2_clk, ps2_data, ps2_code, ps2_up, ps2_ext, ps2_event);
ag_keyb_decoder dec(ps2_code, ps2_ext, lshift | rshift, ctrl, alt, rus, dec_code);
always @(posedge clk) begin
if (keyb_clear) clr <= 1;
if (ps2_event && !got) begin
if (!ps2_up) begin
if (ps2_code == 8'h12 && ctrl) rus <= 0;
else if (ps2_code == 8'h14 && lshift) rus <= 0;
else if (ps2_code == 8'h59 && ctrl) rus <= 1;
else if (ps2_code == 8'h14 && rshift) rus <= 1;
clr <= 0;
keyb_code <= {|dec_code, dec_code};
end
if (ps2_code == 8'h12) lshift <= ~ps2_up;
else if (ps2_code == 8'h59) rshift <= ~ps2_up;
else if (ps2_code == 8'h14 || ps2_code == 8'h0D) ctrl <= ~ps2_up; // ctrl or tab
else if (ps2_code == 8'h11) alt <= ~ps2_up;
else if (ps2_code == 8'h7E) pause <= ~ps2_up;
if (ps2_code == 8'h76 && ctrl) rst <= ~ps2_up;
got <= 1;
end
if (!ps2_event) got <= 0;
end
endmodule
/ag_6502/trunk/agat7/states.v
0,0 → 1,337
// This file has been generated automatically
// by the GenStates tool
// Copyright (c) Oleg Odintsov
// This tool is a part of Agat hardware project
 
// Level of optimization: infinite
// Total number of actions: 82
wire E_AB__PC;
wire E_AB__EA;
wire E_AB__S;
wire E_PC__PC_1;
wire E_T__0;
wire E_N_Z__SB;
wire E_N_Z__RES;
wire E_N_Z__SB_RES;
wire E_C__RES;
wire E_V__RES;
wire E_V__SB_6_;
wire A_ALU_CF_0;
wire A_ALU_DF_0;
wire A_ALU_OP_ADC;
wire A_SB_0;
wire A_ALU_B_SB;
wire A_ALU_CF_1;
wire A_ALU_CF_ALUC;
wire A_ALU_B_NOTSB;
wire A_ALU_OP_ORA;
wire A_ALU_A_DB;
wire A_SB_X;
wire A_ALU_A_EAL;
wire A_SB_PCL;
wire A_SB_Y;
wire A_ALU_A_ALU;
wire A_ALU_A_S;
wire E_CF__IR_5_;
wire E_IF__IR_5_;
wire E_DF__IR_5_;
wire E_VF__0;
wire E_T__0IFNF__IR_5_;
wire E_T__0IFVF__IR_5_;
wire E_T__0IFCF__IR_5_;
wire E_T__0IFZF__IR_5_;
wire E_EA__DB;
wire E_EAL__DB;
wire E_PCL__RES;
wire E_T__0IF_C7F;
wire A_ALU_A_SIGN;
wire A_SB_PCH;
wire E_PCH__RES;
wire E_EAH__DB;
wire E_EAL__ALU;
wire E_T__T_1IF_ALUCZ;
wire E_EAH__ALU;
wire E_PCL__ALU;
wire A_SB_DB;
wire E_AC__SB;
wire A_ALU_A_AC;
wire E_AC__RES;
wire A_ALU_OP_AND;
wire A_ALU_OP_EOR;
wire A_ALU_A_X;
wire A_ALU_A_Y;
wire A_ALU_DF_D;
wire A_ALU_CF_C;
wire A_ALU_OP_ASL;
wire A_RW_W;
wire A_SB_ALU;
wire E_DB__SB;
wire A_ALU_OP_LSR;
wire A_ALU_OP_ROL;
wire A_ALU_OP_ROR;
wire A_SB_AC;
wire E_X__SB;
wire E_Y__SB;
wire A_SB_S;
wire E_S__SB;
wire E_PC__EA;
wire E_S__ALU;
wire A_SB_P;
wire E_P__SB;
wire E_X__RES;
wire E_Y__RES;
wire E_DB__ALU;
wire E_DB__PCH;
wire E_PCL__EAL;
wire E_DB__PCL;
wire E_DB__P;
wire E_P__DB;
wire E_PCL__DB;
 
// Actions assignments
 
// action: AB <= PC:
assign E_AB__PC = (!L[10] && ((!L[0] && ((!L[1] && ((!L[2] && ((!L[9] && (!L[3] || (L[3] && ((!L[4] && (!L[7] || ({L[7],L[8]} == 2'b10))) || (L[4] && ((!L[5] && ((!L[6] && (!L[8] || ({L[7],L[8]} == 2'b01))) || L[6])) || L[5])))))) || ({L[3],L[4],L[9]} == 3'b011))) || (L[2] && (!L[9] || ({L[3],L[8],L[9]} == 3'b101))))) || (L[1] && ((!L[9] && ((!L[2] && ((!L[8] && (({L[3],L[4],L[7]} == 3'b001) || L[3])) || ({L[3],L[4],L[7],L[8]} == 4'b0011))) || L[2])) || ({L[2],L[3],L[8],L[9]} == 4'b1101))))) || (L[0] && ((!L[9] && (!L[1] || (L[1] && ((!L[2] && (!L[3] || (L[3] && ((!L[4] && ((!L[5] && ((!L[6] && (!L[8] || ({L[7],L[8]} == 2'b01))) || L[6])) || L[5])) || L[4])))) || L[2])))) || (({L[3],L[8],L[9]} == 3'b101) && (({L[2],L[4]} == 2'b01) || L[2])))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[7],L[8],L[9],L[10]} == 10'b0000010101);
 
// action: AB <= EA:
assign E_AB__EA = (({L[9],L[10]} == 2'b01) && ((!L[2] && (({L[0],L[1],L[3],L[4],L[5],L[6],L[7],L[8]} == 8'b00000001) || (L[0] && (!L[3] || ({L[3],L[4],L[8]} == 3'b110))))) || (({L[2],L[3],L[8]} == 3'b110) && (({L[0],L[1],L[4],L[5],L[6],L[7]} == 6'b000110) || L[4])))) || (L[9] && ((!L[10] && ((({L[0],L[2]} == 2'b01) && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || ({L[3],L[8]} == 2'b11))) || (L[0] && ((!L[3] && ((!L[1] && (!L[2] || (L[2] && (({L[4],L[8]} == 2'b00) || L[4])))) || (L[1] && (!L[2] || (L[2] && (({L[4],L[8]} == 2'b00) || L[4])))))) || (({L[3],L[8]} == 2'b11) && (({L[2],L[4]} == 2'b01) || L[2])))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[10]} == 10'b0000000001)));
 
// action: AB <= S:
assign E_AB__S = (({L[0],L[1],L[2],L[3],L[4],L[7],L[9],L[10]} == 8'b00000001) && (!L[8] || ({L[5],L[6],L[8]} == 3'b011))) || (({L[0],L[1],L[2],L[4],L[7],L[9],L[10]} == 7'b0000010) && (!L[3] || (L[3] && (({L[5],L[8]} == 2'b00) || L[5]))));
 
// action: PC <= PC + 1:
assign E_PC__PC_1 = (!L[10] && ((!L[9] && ((!L[0] && ((!L[1] && ((!L[2] && (!L[8] || (({L[3],L[8]} == 2'b01) && ((!L[4] && (({L[5],L[6],L[7]} == 3'b100) || L[7])) || L[4])))) || L[2])) || (L[1] && ((!L[2] && ((!L[8] && (({L[3],L[4],L[7]} == 3'b001) || L[3])) || ({L[3],L[4],L[7],L[8]} == 4'b0011))) || L[2])))) || (L[0] && (!L[1] || (L[1] && ((!L[2] && (!L[3] || (L[3] && ((!L[4] && ((!L[5] && ((!L[6] && (!L[8] || ({L[7],L[8]} == 2'b01))) || L[6])) || L[5])) || L[4])))) || L[2])))))) || (({L[3],L[8],L[9]} == 3'b101) && (({L[0],L[2],L[4]} == 3'b101) || (L[2] && ((!L[0] && ((!L[1] && ((!L[4] && (!L[5] || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))) || L[4])) || L[1])) || L[0])))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000110101);
 
// action: T <= 0:
assign E_T__0 = (!L[0] && ((!L[1] && ((!L[2] && ((!L[10] && ((({L[3],L[8],L[9]} == 3'b101) && (({L[4],L[5],L[7]} == 3'b000) || (L[4] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))) || (L[8] && ((({L[7],L[9]} == 2'b01) && (({L[3],L[4],L[5]} == 3'b101) || ({L[3],L[4]} == 2'b01))) || (L[7] && ((!L[9] && (!L[4] || ({L[3],L[4],L[5],L[6]} == 4'b1100))) || ({L[3],L[4],L[9]} == 3'b011))))))) || (({L[3],L[4],L[7],L[10]} == 4'b0001) && (({L[5],L[6],L[8],L[9]} == 4'b0001) || (({L[8],L[9]} == 2'b10) && (({L[5],L[6]} == 2'b01) || L[5])))))) || (L[2] && ((({L[3],L[8],L[9],L[10]} == 4'b1001) && (({L[4],L[5],L[6],L[7]} == 4'b0110) || L[4])) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || (({L[3],L[8]} == 2'b11) && (!L[5] || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))))) || ({L[3],L[4],L[8]} == 3'b011))))))) || (L[1] && ((({L[2],L[8],L[9],L[10]} == 4'b0100) && (({L[3],L[4],L[7]} == 3'b001) || L[3])) || (L[2] && ((({L[6],L[7],L[9],L[10]} == 4'b0110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))) || (L[10] && ((!L[9] && ((!L[3] && ((({L[4],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[4],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[3] && (({L[4],L[6],L[7],L[8]} == 4'b1010) || (({L[4],L[8]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[3],L[4],L[8],L[9]} == 4'b1101) && (({L[6],L[7]} == 2'b00) || L[6])))))))))) || (L[0] && ((!L[9] && ((!L[2] && (({L[3],L[4],L[8],L[10]} == 4'b1101) || (L[8] && ((!L[4] && (({L[3],L[10]} == 2'b01) || ({L[3],L[10]} == 2'b10))) || ({L[3],L[4],L[10]} == 3'b011))))) || ({L[2],L[3],L[4],L[8],L[10]} == 5'b11101))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101)))));
 
// action: N,Z <= SB:
assign E_N_Z__SB = (({L[6],L[7]} == 2'b01) && ((({L[0],L[2],L[3],L[5],L[8],L[9],L[10]} == 7'b0010100) && (({L[1],L[4]} == 2'b01) || ({L[1],L[4]} == 2'b10))) || (L[5] && ((!L[9] && ((!L[2] && (({L[0],L[1],L[3],L[4],L[8],L[10]} == 6'b101101) || (L[8] && ((!L[10] && ((!L[4] && (({L[0],L[3]} == 2'b00) || L[3])) || ({L[0],L[1],L[3],L[4]} == 4'b0111))) || ({L[0],L[3],L[10]} == 3'b101))))) || ({L[2],L[3],L[4],L[8],L[10]} == 5'b11101))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101))))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010110110);
 
// action: N,Z <= RES:
assign E_N_Z__RES = (!L[9] && ((({L[2],L[4],L[8],L[10]} == 4'b0010) && (({L[0],L[1],L[3],L[6],L[7]} == 5'b00011) || (L[3] && ((!L[0] && ((({L[1],L[7]} == 2'b01) && (({L[5],L[6]} == 2'b00) || L[6])) || (L[1] && (!L[7] || ({L[5],L[6],L[7]} == 3'b011))))) || (L[0] && (({L[1],L[6],L[7]} == 3'b000) || (L[6] && (({L[1],L[5]} == 2'b00) || (L[5] && (({L[1],L[7]} == 2'b00) || L[7])))))))))) || (L[10] && ((({L[0],L[1],L[2]} == 3'b011) && ((({L[3],L[4],L[8]} == 3'b010) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[3] && ((({L[4],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[4],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[0],L[1]} == 2'b10) && ((({L[2],L[3],L[4],L[8]} == 4'b0001) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[4] && ((({L[2],L[3],L[8]} == 3'b001) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b10) && (({L[6],L[7]} == 2'b00) || L[6])))))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[1] && ((({L[0],L[4],L[6],L[7]} == 4'b0011) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (L[0] && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[3],L[4],L[8]} == 3'b011) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[0],L[1],L[3],L[4],L[8]} == 5'b01001) && (({L[6],L[7]} == 2'b00) || L[6]))));
 
// action: N,Z <= SB,RES:
assign E_N_Z__SB_RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00100100010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110100110);
 
// action: C <= RES:
assign E_C__RES = (({L[0],L[1],L[6],L[7]} == 4'b0100) && (({L[2],L[3],L[4],L[8],L[9],L[10]} == 6'b010100) || (L[2] && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110))))) || (L[6] && ((!L[9] && ((({L[2],L[4],L[8],L[10]} == 4'b0010) && (({L[0],L[1],L[3],L[7]} == 4'b0001) || (L[3] && (({L[0],L[1],L[7]} == 3'b010) || (L[0] && (({L[1],L[5],L[7]} == 3'b001) || (L[5] && (({L[1],L[7]} == 2'b00) || L[7])))))))) || (L[10] && ((({L[0],L[1],L[2],L[7]} == 4'b0110) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || (({L[0],L[1]} == 2'b10) && ((({L[2],L[3],L[4],L[8]} == 4'b0001) && (({L[5],L[7]} == 2'b01) || L[5])) || (L[4] && ((({L[2],L[3],L[8]} == 3'b001) && (({L[5],L[7]} == 2'b01) || L[5])) || (({L[3],L[8]} == 2'b10) && (({L[5],L[7]} == 2'b01) || L[5])))))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[1] && ((!L[4] && ((({L[0],L[5],L[7]} == 3'b110) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (L[7] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))))) || (({L[0],L[3],L[4],L[8]} == 4'b1011) && (({L[5],L[7]} == 2'b01) || L[5])))) || ({L[0],L[1],L[3],L[4],L[7],L[8]} == 6'b010001)))));
 
// action: V <= RES:
assign E_V__RES = (({L[0],L[5],L[6],L[9]} == 4'b1110) && ((!L[2] && (({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) || (L[8] && ((!L[4] && (({L[1],L[3],L[10]} == 3'b001) || (({L[3],L[10]} == 2'b10) && (({L[1],L[7]} == 2'b00) || L[7])))) || ({L[1],L[3],L[4],L[10]} == 4'b0011))))) || ({L[1],L[2],L[3],L[4],L[8],L[10]} == 6'b011101))) || (({L[0],L[1],L[2],L[5],L[6],L[9],L[10]} == 7'b1011110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)));
 
// action: V <= SB[6]:
assign E_V__SB_6_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00100100010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110100110);
 
// action: ALU_CF = 0:
assign A_ALU_CF_0 = (!L[10] && ((({L[2],L[3],L[8],L[9]} == 4'b0001) && (({L[0],L[1],L[4],L[6],L[7]} == 5'b00000) || (L[4] && (({L[0],L[1]} == 2'b00) || L[0])))) || (L[8] && ((!L[9] && ((!L[2] && ((({L[0],L[4],L[5]} == 3'b000) && (({L[1],L[3],L[6],L[7]} == 4'b0000) || (L[3] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || ({L[1],L[7]} == 2'b11))))))) || (L[0] && (({L[3],L[4]} == 2'b00) || ({L[3],L[4]} == 2'b11))))) || ({L[2],L[4]} == 2'b11))) || (({L[0],L[3],L[9]} == 3'b001) && ((({L[1],L[2]} == 2'b00) && (({L[4],L[6],L[7]} == 3'b000) || L[4])) || ({L[1],L[2],L[4],L[5],L[6],L[7]} == 6'b110011))))))) || (({L[0],L[1],L[2],L[5],L[6],L[7],L[9],L[10]} == 8'b01101101) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11)))));
 
// action: ALU_DF = 0:
assign A_ALU_DF_0 = (!L[9] && ((({L[8],L[10]} == 2'b01) && (({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7]} == 8'b00000000) || (L[6] && (({L[0],L[1],L[2],L[3],L[4],L[5],L[7]} == 7'b0000000) || (L[7] && (({L[0],L[1],L[2],L[3],L[4],L[5]} == 6'b100110) || (L[2] && (({L[0],L[1],L[3],L[4],L[5]} == 5'b10110) || (({L[0],L[1]} == 2'b01) && (({L[3],L[4]} == 2'b01) || ({L[3],L[4]} == 2'b10))))))))))) || (L[8] && ((!L[10] && ((!L[2] && ((({L[0],L[4]} == 2'b00) && ((({L[1],L[3]} == 2'b00) && (({L[5],L[6],L[7]} == 3'b000) || L[6])) || (L[3] && ((!L[5] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))) || (({L[1],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (L[0] && ((!L[1] && (!L[3] || (L[3] && (({L[4],L[5],L[6],L[7]} == 4'b0011) || L[4])))) || (L[1] && (({L[3],L[4]} == 2'b00) || L[4])))))) || ({L[2],L[4]} == 2'b11))) || (({L[6],L[7],L[10]} == 3'b111) && (({L[0],L[1],L[2],L[3],L[4],L[5]} == 6'b100000) || (L[4] && (({L[0],L[1],L[2],L[3],L[5]} == 5'b10000) || ({L[0],L[1],L[2],L[3]} == 4'b0111))))))))) || (({L[9],L[10]} == 2'b10) && ((!L[0] && ((({L[1],L[2],L[3]} == 3'b000) && ((({L[4],L[7]} == 2'b00) && (!L[5] || (L[5] && (!L[8] || ({L[6],L[8]} == 2'b01))))) || L[4])) || (L[2] && ((({L[3],L[4],L[6],L[7]} == 4'b0011) && (({L[1],L[8]} == 2'b00) || ({L[1],L[8]} == 2'b11))) || (L[3] && ((!L[8] && (({L[1],L[4],L[5],L[6],L[7]} == 5'b00110) || L[4])) || ({L[1],L[4],L[6],L[7],L[8]} == 5'b00111))))))) || (L[0] && ((!L[1] && ((!L[2] && (({L[3],L[4],L[8]} == 3'b000) || (L[4] && (!L[8] || ({L[3],L[8]} == 2'b01))))) || (L[2] && ((({L[3],L[5],L[6],L[7]} == 4'b0011) && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || (L[3] && (({L[4],L[5],L[6],L[7],L[8]} == 5'b00111) || ({L[4],L[8]} == 2'b10))))))) || (L[1] && (({L[2],L[3],L[4],L[8]} == 4'b0000) || (L[4] && ((!L[8] && (({L[2],L[3]} == 2'b00) || L[3])) || ({L[2],L[3],L[8]} == 3'b001)))))))));
 
// action: ALU_OP = ADC:
assign A_ALU_OP_ADC = (!L[9] && ((({L[8],L[10]} == 2'b01) && (({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7]} == 8'b00000000) || (L[6] && ((!L[1] && (({L[0],L[2],L[3],L[4],L[5],L[7]} == 6'b000000) || (({L[0],L[3],L[4]} == 3'b111) && (({L[5],L[7]} == 2'b01) || L[5])))) || (({L[0],L[1],L[2],L[7]} == 4'b0111) && (({L[3],L[4]} == 2'b01) || ({L[3],L[4]} == 2'b10))))))) || (L[8] && ((!L[2] && ((!L[10] && ((({L[0],L[4]} == 2'b00) && ((({L[1],L[3]} == 2'b00) && (({L[5],L[6],L[7]} == 3'b000) || L[6])) || (L[3] && ((!L[5] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))) || (({L[1],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (L[0] && ((!L[1] && (!L[3] || (L[3] && ((({L[4],L[6]} == 2'b01) && (({L[5],L[7]} == 2'b01) || L[5])) || L[4])))) || (L[1] && (!L[3] || (L[3] && (({L[4],L[5],L[6],L[7]} == 4'b0111) || L[4])))))))) || (({L[0],L[1],L[3],L[6],L[10]} == 5'b10011) && (({L[5],L[7]} == 2'b01) || L[5])))) || (({L[2],L[4]} == 2'b11) && (!L[10] || ({L[0],L[1],L[3],L[6],L[7],L[10]} == 6'b011111))))))) || (({L[9],L[10]} == 2'b10) && ((!L[0] && ((({L[1],L[2],L[3]} == 3'b000) && ((({L[4],L[7]} == 2'b00) && (!L[5] || (L[5] && (!L[8] || ({L[6],L[8]} == 2'b01))))) || L[4])) || (L[2] && ((({L[3],L[4],L[6],L[7]} == 4'b0011) && (({L[1],L[8]} == 2'b00) || ({L[1],L[8]} == 2'b11))) || (L[3] && ((!L[8] && (({L[1],L[4],L[5],L[6],L[7]} == 5'b00110) || L[4])) || ({L[1],L[4],L[6],L[7],L[8]} == 5'b00111))))))) || (L[0] && ((!L[1] && ((!L[2] && (({L[3],L[4],L[8]} == 3'b000) || (L[4] && (!L[8] || ({L[3],L[8]} == 2'b01))))) || (L[2] && (({L[3],L[4],L[6],L[8]} == 4'b1100) || (L[6] && ((!L[3] && ((({L[4],L[8]} == 2'b00) && (({L[5],L[7]} == 2'b01) || L[5])) || (({L[4],L[8]} == 2'b11) && (({L[5],L[7]} == 2'b01) || L[5])))) || (L[3] && ((({L[4],L[8]} == 2'b01) && (({L[5],L[7]} == 2'b01) || L[5])) || ({L[4],L[8]} == 2'b10))))))))) || (L[1] && (({L[2],L[3],L[4],L[8]} == 4'b0000) || (L[4] && ((!L[8] && (({L[2],L[3]} == 2'b00) || L[3])) || ({L[2],L[3],L[8]} == 3'b001)))))))));
 
// action: SB = 0:
assign A_SB_0 = (!L[10] && ((({L[2],L[8],L[9]} == 3'b010) && ((!L[3] && ((({L[0],L[1],L[4],L[7]} == 4'b0000) && (({L[5],L[6]} == 2'b00) || L[6])) || ({L[0],L[4]} == 2'b11))) || (({L[0],L[3],L[4]} == 3'b010) && ((!L[5] && (({L[1],L[6]} == 2'b00) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))) || (({L[1],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (L[9] && ((!L[0] && (({L[1],L[2],L[3],L[4],L[7]} == 5'b00000) || (L[2] && ((({L[1],L[3]} == 2'b01) && ((!L[8] && (({L[4],L[5],L[6],L[7]} == 4'b0110) || L[4])) || ({L[4],L[5],L[6],L[7],L[8]} == 5'b01101))) || (L[1] && ((!L[3] && ((({L[6],L[7]} == 2'b00) && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || (L[6] && (({L[4],L[8]} == 2'b00) || (L[8] && (({L[4],L[7]} == 2'b01) || L[4])))))) || (L[3] && ((({L[4],L[8]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])) || ({L[4],L[8]} == 2'b10))))))))) || (L[0] && ((!L[2] && ((!L[3] && (!L[4] || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b110))) || ({L[2],L[3],L[4],L[8]} == 4'b1110))))))) || (({L[0],L[10]} == 2'b01) && ((!L[9] && ((({L[1],L[2],L[3],L[4],L[7]} == 5'b00000) && (!L[5] || (L[5] && (({L[6],L[8]} == 2'b01) || ({L[6],L[8]} == 2'b10))))) || (L[2] && (({L[1],L[3],L[4],L[5],L[6],L[7],L[8]} == 7'b0101100) || (L[1] && (({L[3],L[4],L[6],L[7],L[8]} == 5'b01110) || (L[3] && (({L[4],L[6],L[7],L[8]} == 4'b0110) || (L[4] && (({L[6],L[7],L[8]} == 3'b000) || (L[6] && (({L[7],L[8]} == 2'b00) || L[7])))))))))))) || ({L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9]} == 9'b000000001)));
 
// action: ALU_B = SB:
assign A_ALU_B_SB = (!L[0] && ((({L[1],L[2]} == 2'b00) && ((!L[4] && ((!L[7] && ((({L[3],L[5]} == 2'b00) && ((({L[6],L[10]} == 2'b01) && (!L[9] || ({L[8],L[9]} == 2'b01))) || (L[6] && ((!L[9] && (({L[8],L[10]} == 2'b01) || L[8])) || ({L[9],L[10]} == 2'b10))))) || (L[5] && ((!L[9] && (({L[3],L[6],L[8],L[10]} == 4'b0101) || (L[8] && ((!L[10] && (({L[3],L[6]} == 2'b01) || L[3])) || ({L[3],L[6],L[10]} == 3'b001))))) || ({L[3],L[6],L[9],L[10]} == 4'b0110))))) || ({L[3],L[6],L[7],L[8],L[9],L[10]} == 6'b111100))) || ({L[3],L[4],L[9],L[10]} == 4'b0110))) || (L[2] && ((!L[9] && ((({L[3],L[4],L[5],L[6],L[8],L[10]} == 6'b101101) && (({L[1],L[7]} == 2'b00) || ({L[1],L[7]} == 2'b11))) || (L[4] && (({L[1],L[8],L[10]} == 3'b010) || (L[1] && ((({L[8],L[10]} == 2'b01) && (({L[3],L[5],L[6],L[7]} == 4'b0111) || (L[3] && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[8] && (!L[10] || ({L[3],L[5],L[6],L[7],L[10]} == 5'b11111))))))))) || (({L[9],L[10]} == 2'b10) && ((!L[1] && (({L[3],L[4],L[5],L[6],L[7],L[8]} == 6'b001000) || (L[3] && ((!L[8] && (({L[4],L[5],L[6],L[7]} == 4'b0110) || L[4])) || ({L[4],L[5],L[7],L[8]} == 4'b0101))))) || (L[1] && ((!L[3] && ((({L[6],L[7]} == 2'b00) && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || (L[6] && (({L[4],L[8]} == 2'b00) || (L[8] && (({L[4],L[5],L[7]} == 3'b011) || L[4])))))) || (L[3] && ((({L[4],L[8]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])) || ({L[4],L[8]} == 2'b10))))))))))) || (L[0] && ((!L[10] && ((({L[8],L[9]} == 2'b01) && ((!L[3] && (!L[2] || ({L[1],L[2],L[4],L[7]} == 4'b0100))) || ({L[3],L[4]} == 2'b11))) || (L[8] && ((!L[1] && ((!L[2] && ((!L[9] && (!L[3] || (L[3] && (({L[4],L[7]} == 2'b00) || L[4])))) || ({L[3],L[9]} == 2'b01))) || (L[2] && (({L[3],L[4],L[7],L[9]} == 4'b1001) || (L[4] && (!L[9] || ({L[3],L[7],L[9]} == 3'b001))))))) || (L[1] && ((!L[3] && (({L[2],L[4]} == 2'b00) || (L[4] && (!L[9] || ({L[2],L[9]} == 2'b01))))) || ({L[3],L[4],L[9]} == 3'b110))))))) || (({L[1],L[7],L[9],L[10]} == 4'b0001) && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10)))))));
 
// action: ALU_CF = 1:
assign A_ALU_CF_1 = (!L[2] && ((!L[1] && ((!L[9] && ((!L[5] && ((!L[3] && (({L[0],L[4],L[7],L[8],L[10]} == 5'b00001) || (L[8] && (({L[0],L[4],L[6],L[10]} == 4'b0010) || (L[0] && (({L[4],L[6],L[7],L[10]} == 4'b0111) || (L[4] && (!L[10] || ({L[6],L[7],L[10]} == 3'b111))))))))) || (({L[3],L[6],L[7]} == 3'b111) && (({L[0],L[4],L[8],L[10]} == 4'b0010) || (L[0] && (({L[4],L[8],L[10]} == 3'b010) || ({L[4],L[8],L[10]} == 3'b101))))))) || (({L[5],L[8],L[10]} == 3'b110) && ((!L[3] && (({L[0],L[4],L[6]} == 3'b001) || ({L[0],L[4]} == 2'b11))) || (({L[0],L[3],L[4]} == 3'b010) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[3],L[4],L[9],L[10]} == 4'b0010) && ((!L[8] && (({L[0],L[6],L[7]} == 3'b010) || L[0])) || ({L[0],L[5],L[6],L[7],L[8]} == 5'b00101))))) || (({L[0],L[1],L[3],L[10]} == 4'b1100) && (({L[4],L[8],L[9]} == 3'b001) || ({L[4],L[8],L[9]} == 3'b110))))) || (({L[2],L[6]} == 2'b11) && (({L[0],L[1],L[3],L[4],L[5],L[7],L[8],L[9],L[10]} == 9'b001010010) || (L[7] && ((!L[1] && (({L[0],L[3],L[4],L[5],L[8],L[9],L[10]} == 7'b1110001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (!L[5] || ({L[0],L[5]} == 2'b01))) || (({L[3],L[8]} == 2'b11) && (!L[5] || ({L[0],L[5]} == 2'b01))))) || ({L[0],L[3],L[4],L[5],L[8]} == 5'b10101))))) || (({L[0],L[1],L[5]} == 3'b011) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)))))));
 
// action: ALU_CF = ALUC:
assign A_ALU_CF_ALUC = ({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b0111010) || (({L[0],L[4],L[9],L[10]} == 4'b1110) && ((!L[2] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))) || ({L[2],L[3],L[8]} == 3'b110)));
 
// action: ALU_B = NOT SB:
assign A_ALU_B_NOTSB = (({L[0],L[1],L[2],L[4],L[6],L[10]} == 6'b000000) && ((!L[7] && ((!L[5] && (({L[3],L[8],L[9]} == 3'b001) || (L[8] && (!L[9] || ({L[3],L[9]} == 2'b01))))) || ({L[3],L[5],L[9]} == 3'b011))) || ({L[3],L[5],L[7],L[8],L[9]} == 5'b10110))) || (L[6] && (({L[0],L[1],L[2],L[3],L[4],L[5],L[7],L[8],L[9],L[10]} == 10'b0001000100) || (L[7] && ((!L[9] && ((({L[2],L[4],L[8],L[10]} == 4'b0010) && (({L[0],L[1],L[3]} == 3'b000) || (L[3] && (({L[0],L[1],L[5]} == 3'b010) || (L[0] && (({L[1],L[5]} == 2'b00) || L[5])))))) || (L[10] && ((({L[0],L[1],L[2],L[5]} == 4'b0110) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || (({L[0],L[1]} == 2'b10) && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[1] && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[0],L[3],L[4],L[8]} == 4'b1011))) || ({L[0],L[1],L[3],L[4],L[5],L[8]} == 6'b010001)))))));
 
// action: ALU_OP = ORA:
assign A_ALU_OP_ORA = (!L[0] && ((({L[1],L[2],L[3],L[4],L[7]} == 5'b00000) && (({L[5],L[6],L[8],L[9],L[10]} == 5'b11110) || (L[10] && ((!L[9] && (({L[5],L[6],L[8]} == 3'b110) || (L[8] && (!L[6] || ({L[5],L[6]} == 2'b01))))) || ({L[5],L[6],L[8],L[9]} == 4'b0001))))) || (L[2] && ((({L[1],L[3],L[4],L[5],L[6],L[7]} == 6'b010110) && (({L[8],L[9],L[10]} == 3'b001) || ({L[8],L[9],L[10]} == 3'b110))) || (L[1] && ((({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[9],L[10]} == 2'b10) && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[3],L[4],L[8]} == 3'b011) && (({L[6],L[7]} == 2'b00) || L[6])))))))))) || (L[0] && ((!L[5] && ((!L[6] && ((!L[7] && ((!L[10] && ((!L[4] && (({L[1],L[2],L[3],L[8],L[9]} == 5'b01001) || (L[8] && ((!L[2] && (({L[1],L[3],L[9]} == 3'b010) || ({L[3],L[9]} == 2'b01))) || ({L[1],L[2],L[3],L[9]} == 4'b0111))))) || ({L[1],L[2],L[3],L[4],L[8],L[9]} == 6'b010111))) || (({L[1],L[9],L[10]} == 3'b001) && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || ({L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 7'b0001110))) || ({L[2],L[3],L[4],L[6],L[8],L[9],L[10]} == 7'b0001110))) || ({L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 7'b0001110)));
 
// action: ALU_A = DB:
assign A_ALU_A_DB = (!L[10] && ((({L[8],L[9]} == 2'b01) && ((({L[0],L[1],L[2],L[3],L[4]} == 5'b01100) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[4] && (({L[0],L[2],L[3]} == 3'b011) || (L[0] && (!L[2] || ({L[2],L[3]} == 2'b11))))))) || (L[8] && ((!L[0] && (({L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[9]} == 8'b00001101) || (L[2] && ((({L[3],L[4],L[9]} == 3'b101) && (({L[1],L[5],L[6],L[7]} == 4'b0110) || (L[1] && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[4] && (!L[9] || (({L[1],L[3],L[9]} == 3'b101) && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (L[0] && ((!L[2] && (!L[3] || ({L[3],L[4],L[9]} == 3'b110))) || ({L[2],L[4],L[9]} == 3'b110))))))) || (({L[0],L[10]} == 2'b01) && ((!L[9] && ((!L[7] && ((({L[1],L[4]} == 2'b00) && ((({L[2],L[3]} == 2'b00) && (({L[5],L[6],L[8]} == 3'b110) || (L[8] && (!L[6] || ({L[5],L[6]} == 2'b01))))) || ({L[2],L[3],L[5],L[6],L[8]} == 5'b11110))) || ({L[1],L[2],L[3],L[4],L[8]} == 5'b11110))) || ({L[1],L[2],L[3],L[4],L[6],L[7],L[8]} == 7'b1111110))) || ({L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9]} == 9'b000000001)));
 
// action: SB = X:
assign A_SB_X = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01100001010) || (({L[8],L[10]} == 2'b10) && ((!L[9] && ((!L[2] && ((!L[4] && (({L[0],L[1],L[3],L[5],L[6],L[7]} == 6'b011001) || ({L[0],L[3]} == 2'b10))) || ({L[0],L[1],L[3],L[4],L[5],L[6],L[7]} == 7'b0111001))) || (({L[2],L[4]} == 2'b11) && ((!L[0] && (!L[1] || (L[1] && (({L[6],L[7]} == 2'b00) || L[6])))) || (L[0] && (!L[1] || (L[1] && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (({L[0],L[1],L[2],L[5],L[6],L[7],L[9]} == 7'b0110011) && (({L[3],L[4]} == 2'b01) || ({L[3],L[4]} == 2'b10)))));
 
// action: ALU_A = EAL:
assign A_ALU_A_EAL = (({L[0],L[1],L[2],L[3],L[8]} == 5'b00000) && (({L[4],L[5],L[6],L[7],L[9],L[10]} == 6'b000001) || ({L[4],L[9],L[10]} == 3'b110))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110110010);
 
// action: SB = PCL:
assign A_SB_PCL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100001) || ({L[0],L[1],L[2],L[3],L[4],L[8],L[9],L[10]} == 8'b00001010);
 
// action: SB = Y:
assign A_SB_Y = (({L[0],L[1],L[2],L[4],L[5],L[6],L[7],L[9],L[10]} == 9'b001000110) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (({L[4],L[10]} == 2'b10) && (({L[0],L[2],L[3],L[8],L[9]} == 5'b10001) || (L[8] && ((!L[9] && (({L[1],L[2],L[3],L[6],L[7]} == 5'b11001) || (L[3] && ((!L[2] && (({L[0],L[1],L[5],L[6],L[7]} == 5'b00001) || L[0])) || ({L[1],L[2],L[6],L[7]} == 4'b1101))))) || ({L[0],L[1],L[2],L[3],L[5],L[6],L[7],L[9]} == 8'b00100011)))));
 
// action: ALU_A = ALU:
assign A_ALU_A_ALU = (!L[3] && ((!L[4] && (({L[0],L[1],L[2],L[5],L[6],L[7],L[8],L[9],L[10]} == 9'b000010001) || (({L[9],L[10]} == 2'b10) && ((!L[2] && ((!L[8] && ((({L[0],L[1],L[7]} == 3'b000) && (({L[5],L[6]} == 2'b00) || L[6])) || L[0])) || (({L[0],L[1],L[7],L[8]} == 4'b0001) && (!L[6] || ({L[5],L[6]} == 2'b01))))) || (({L[0],L[1],L[2],L[8]} == 4'b0111) && (({L[6],L[7]} == 2'b00) || L[6])))))) || (({L[0],L[1],L[2],L[4],L[8],L[9],L[10]} == 7'b0111001) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[0],L[1],L[2],L[3],L[9],L[10]} == 6'b011101) && ((({L[4],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[4],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6]))));
 
// action: ALU_A = S:
assign A_ALU_A_S = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100010) || (({L[0],L[1],L[2],L[4],L[7],L[8],L[9],L[10]} == 8'b00000100) && ((!L[3] && (({L[5],L[6]} == 2'b00) || L[6])) || L[3]));
 
// action: CF <= IR[5]:
assign E_CF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011000010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011100010);
 
// action: IF <= IR[5]:
assign E_IF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011010010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011110010);
 
// action: DF <= IR[5]:
assign E_DF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011011010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011111010);
 
// action: VF <= 0:
assign E_VF__0 = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00011101010);
 
// action: T <= 0 IF NF != IR[5]:
assign E_T__0IFNF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001000100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001100100);
 
// action: T <= 0 IF VF != IR[5]:
assign E_T__0IFVF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001010100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001110100);
 
// action: T <= 0 IF CF != IR[5]:
assign E_T__0IFCF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001001100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001101100);
 
// action: T <= 0 IF ZF == IR[5]:
assign E_T__0IFZF__IR_5_ = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001011100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00001111100);
 
// action: EA <= DB:
assign E_EA__DB = ({L[0],L[2],L[3],L[8],L[9],L[10]} == 6'b010100) || ({L[0],L[3],L[8],L[9],L[10]} == 5'b10100);
 
// action: EAL <= DB:
assign E_EAL__DB = (({L[0],L[1],L[2],L[3],L[8],L[9],L[10]} == 7'b0000100) && (({L[4],L[5],L[6],L[7]} == 4'b0100) || L[4])) || (({L[3],L[8],L[9],L[10]} == 4'b1100) && (({L[0],L[2],L[4]} == 3'b101) || L[2]));
 
// action: PCL <= RES:
assign E_PCL__RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000110110) || ({L[0],L[1],L[2],L[3],L[4],L[8],L[9],L[10]} == 8'b00001010);
 
// action: T <= 0 IF_C7F:
assign E_T__0IF_C7F = ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000010010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000011010);
 
// action: ALU_A = SIGN:
assign A_ALU_A_SIGN = ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000010110) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000011110);
 
// action: SB = PCH:
assign A_SB_PCH = ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000010110) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[8],L[9],L[10]} == 9'b000011110);
 
// action: PCH <= RES:
assign E_PCH__RES = (({L[0],L[1],L[2],L[3]} == 4'b0000) && ((!L[7] && (({L[4],L[8],L[9],L[10]} == 4'b1110) || (({L[4],L[10]} == 2'b01) && ((!L[9] && (({L[5],L[6],L[8]} == 3'b011) || (L[5] && (({L[6],L[8]} == 2'b01) || ({L[6],L[8]} == 2'b10))))) || ({L[5],L[6],L[8],L[9]} == 4'b0001))))) || ({L[4],L[7],L[8],L[9],L[10]} == 5'b11110))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110110001);
 
// action: EAH <= DB:
assign E_EAH__DB = (!L[8] && (({L[0],L[2],L[3],L[4],L[9],L[10]} == 6'b100001) || (({L[3],L[9],L[10]} == 3'b110) && (({L[0],L[2],L[4]} == 3'b101) || L[2])))) || ({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b1001110);
 
// action: EAL <= ALU:
assign E_EAL__ALU = (({L[2],L[3],L[4],L[9],L[10]} == 5'b00001) && (({L[0],L[1],L[5],L[6],L[7],L[8]} == 6'b000001) || ({L[0],L[8]} == 2'b10))) || (({L[9],L[10]} == 2'b10) && ((({L[0],L[2]} == 2'b01) && (({L[1],L[3],L[4],L[5],L[6],L[7],L[8]} == 7'b0101101) || ({L[4],L[8]} == 2'b10))) || (L[0] && ((!L[2] && (!L[3] || ({L[3],L[4],L[8]} == 3'b110))) || ({L[2],L[4],L[8]} == 3'b110)))));
 
// action: T <= T + 1 IF_ALUCZ:
assign E_T__T_1IF_ALUCZ = (({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b0111010) && ((({L[1],L[5]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[5] && ((!L[6] && (({L[1],L[7]} == 2'b00) || L[7])) || ({L[1],L[6]} == 2'b01))))) || (({L[0],L[4],L[9],L[10]} == 4'b1110) && ((!L[2] && ((({L[3],L[8]} == 2'b01) && (({L[1],L[7]} == 2'b00) || (L[7] && (({L[5],L[6]} == 2'b01) || L[5])))) || (({L[3],L[8]} == 2'b10) && (({L[1],L[7]} == 2'b00) || (L[7] && (({L[5],L[6]} == 2'b01) || L[5])))))) || (({L[2],L[3],L[8]} == 3'b110) && ((({L[1],L[5]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[5] && (({L[1],L[7]} == 2'b00) || L[7]))))));
 
// action: EAH <= ALU:
assign E_EAH__ALU = ({L[0],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b0111110) || (({L[0],L[4]} == 2'b11) && ((!L[2] && (({L[3],L[8],L[9],L[10]} == 4'b0001) || ({L[3],L[8],L[9],L[10]} == 4'b1110))) || ({L[2],L[3],L[8],L[9],L[10]} == 5'b11110)));
 
// action: PCL <= ALU:
assign E_PCL__ALU = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000011) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110110001);
 
// action: SB = DB:
assign A_SB_DB = (!L[1] && ((!L[9] && ((!L[2] && ((({L[0],L[3],L[4],L[7],L[8],L[10]} == 6'b000110) && (({L[5],L[6]} == 2'b01) || L[5])) || (L[0] && ((({L[3],L[4],L[8],L[10]} == 4'b1101) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])) || (L[8] && ((!L[4] && ((({L[3],L[10]} == 2'b01) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])) || (({L[3],L[10]} == 2'b10) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))) || (({L[3],L[4],L[10]} == 3'b011) && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))))) || (({L[2],L[3],L[4],L[8],L[10]} == 5'b11101) && (({L[0],L[5],L[6],L[7]} == 4'b0101) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))) || (({L[9],L[10]} == 2'b10) && (({L[0],L[2],L[3],L[4],L[5],L[7],L[8]} == 7'b0010101) || (L[2] && ((!L[3] && ((({L[4],L[8]} == 2'b00) && ((!L[0] && (({L[5],L[6],L[7]} == 3'b011) || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))) || (({L[4],L[8]} == 2'b11) && (({L[0],L[5],L[6],L[7]} == 4'b0101) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))) || (({L[3],L[4],L[8]} == 3'b101) && ((!L[0] && (({L[5],L[6],L[7]} == 3'b011) || (L[5] && (({L[6],L[7]} == 2'b00) || L[7])))) || (L[0] && ((!L[5] && (({L[6],L[7]} == 2'b00) || L[6])) || L[5])))))))))) || (({L[1],L[5],L[7]} == 3'b111) && ((!L[6] && ((({L[2],L[8],L[9]} == 3'b010) && (({L[0],L[3],L[4],L[10]} == 4'b0000) || (L[0] && ((!L[4] && (({L[3],L[10]} == 2'b01) || ({L[3],L[10]} == 2'b10))) || ({L[3],L[4],L[10]} == 3'b011))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101))))))) || ({L[0],L[2],L[3],L[4],L[6],L[8],L[9],L[10]} == 8'b10101100)));
 
// action: AC <= SB:
assign E_AC__SB = (({L[6],L[7]} == 2'b01) && ((({L[0],L[2],L[3],L[5],L[8],L[9],L[10]} == 7'b0010100) && (({L[1],L[4]} == 2'b01) || ({L[1],L[4]} == 2'b10))) || (({L[0],L[5]} == 2'b11) && ((!L[9] && ((!L[2] && (({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) || (L[8] && ((!L[4] && (({L[3],L[10]} == 2'b01) || ({L[3],L[10]} == 2'b10))) || ({L[3],L[4],L[10]} == 3'b011))))) || ({L[2],L[3],L[4],L[8],L[10]} == 5'b11101))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101))))))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010110110);
 
// action: ALU_A = AC:
assign A_ALU_A_AC = (!L[1] && ((({L[0],L[2],L[4],L[5],L[6],L[7],L[9],L[10]} == 8'b01010010) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (L[0] && ((!L[9] && ((({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[10] && ((({L[2],L[3],L[4],L[8]} == 4'b0001) && (({L[6],L[7]} == 2'b00) || L[6])) || (L[4] && ((({L[2],L[3],L[8]} == 3'b001) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b10) && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[4] && ((({L[3],L[8]} == 2'b00) && (({L[6],L[7]} == 2'b00) || L[6])) || (({L[3],L[8]} == 2'b11) && (({L[6],L[7]} == 2'b00) || L[6])))) || (({L[3],L[4],L[8]} == 3'b011) && (({L[6],L[7]} == 2'b00) || L[6])))))))) || (({L[1],L[2],L[3],L[4],L[8],L[9],L[10]} == 7'b1010100) && (({L[0],L[7]} == 2'b00) || ({L[0],L[5],L[6],L[7]} == 4'b1111)));
 
// action: AC <= RES:
assign E_AC__RES = ({L[0],L[1],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 9'b010100100) || (L[0] && ((!L[9] && ((!L[2] && ((({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))) || (L[8] && ((!L[4] && ((({L[1],L[3],L[10]} == 3'b001) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))) || (({L[3],L[10]} == 2'b10) && (({L[1],L[5],L[7]} == 3'b000) || (L[5] && (({L[1],L[6],L[7]} == 3'b000) || (L[6] && (({L[1],L[7]} == 2'b00) || L[7])))))))) || (({L[1],L[3],L[4],L[10]} == 4'b0011) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))))))) || (({L[1],L[2],L[3],L[4],L[8],L[10]} == 6'b011101) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111))))) || (({L[1],L[2],L[9],L[10]} == 4'b0110) && ((!L[4] && ((!L[7] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (({L[5],L[6],L[7]} == 3'b111) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))))) || (({L[3],L[4],L[8]} == 3'b011) && (!L[7] || ({L[5],L[6],L[7]} == 3'b111)))))));
 
// action: ALU_OP = AND:
assign A_ALU_OP_AND = (({L[0],L[1],L[2],L[4],L[5],L[6],L[7],L[9],L[10]} == 9'b001010010) && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || (({L[0],L[1],L[5],L[6],L[7]} == 5'b10100) && ((!L[9] && (({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) || (L[10] && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)))));
 
// action: ALU_OP = EOR:
assign A_ALU_OP_EOR = (({L[0],L[1],L[5],L[6],L[7],L[9]} == 6'b100100) && (({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) || (L[10] && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || (({L[0],L[1],L[2],L[5],L[6],L[7],L[9],L[10]} == 8'b10101010) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)));
 
// action: ALU_A = X:
assign A_ALU_A_X = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010011100) || (({L[0],L[1],L[4],L[5],L[6],L[7],L[10]} == 7'b0001110) && (({L[2],L[3],L[8],L[9]} == 4'b1001) || (L[8] && (({L[2],L[3],L[9]} == 3'b000) || (L[3] && (({L[2],L[9]} == 2'b00) || ({L[2],L[9]} == 2'b11)))))));
 
// action: ALU_A = Y:
assign A_ALU_A_Y = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010001100) || (({L[0],L[1],L[4],L[5],L[6],L[7],L[10]} == 7'b0000110) && (({L[2],L[3],L[8],L[9]} == 4'b1001) || (L[8] && (({L[2],L[3],L[9]} == 3'b000) || (L[3] && (({L[2],L[9]} == 2'b00) || ({L[2],L[9]} == 2'b11)))))));
 
// action: ALU_DF = D:
assign A_ALU_DF_D = (({L[0],L[5],L[6],L[9]} == 4'b1110) && ((!L[2] && (({L[1],L[3],L[4],L[8],L[10]} == 5'b01101) || (L[8] && ((!L[4] && (({L[1],L[3],L[10]} == 3'b001) || (({L[3],L[10]} == 2'b10) && (({L[1],L[7]} == 2'b00) || L[7])))) || ({L[1],L[3],L[4],L[10]} == 4'b0011))))) || ({L[1],L[2],L[3],L[4],L[8],L[10]} == 6'b011101))) || (({L[0],L[1],L[2],L[5],L[6],L[9],L[10]} == 7'b1011110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)));
 
// action: ALU_CF = C:
assign A_ALU_CF_C = (({L[0],L[1],L[5],L[6]} == 4'b1011) && ((!L[9] && (({L[2],L[3],L[4],L[8],L[10]} == 5'b01010) || (L[10] && (({L[2],L[3],L[4],L[8]} == 4'b0001) || (L[4] && (({L[2],L[3],L[8]} == 3'b001) || ({L[3],L[8]} == 2'b10))))))) || (({L[2],L[9],L[10]} == 3'b110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))) || (L[1] && ((({L[0],L[7]} == 2'b00) && (({L[2],L[3],L[4],L[8],L[9],L[10]} == 6'b010100) || (L[2] && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110))))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b1010111100)));
 
// action: ALU_OP = ASL:
assign A_ALU_OP_ASL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010000100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011000) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: RW = W:
assign A_RW_W = (!L[1] && ((!L[6] && ((!L[5] && ((({L[0],L[2],L[4],L[7]} == 4'b0000) && ((!L[8] && (({L[3],L[9],L[10]} == 3'b001) || ({L[9],L[10]} == 2'b10))) || ({L[3],L[8],L[9],L[10]} == 4'b0110))) || (L[7] && ((({L[0],L[2],L[9],L[10]} == 4'b0110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))) || (L[0] && ((({L[2],L[9],L[10]} == 3'b001) && (({L[3],L[4],L[8]} == 3'b001) || (L[4] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))))))))) || (({L[0],L[2],L[3],L[4],L[5],L[7]} == 6'b000010) && (({L[8],L[9],L[10]} == 3'b001) || ({L[8],L[9],L[10]} == 3'b110))))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b0010010010))) || (({L[0],L[1],L[2]} == 3'b011) && ((({L[9],L[10]} == 2'b01) && ((({L[6],L[7]} == 2'b00) && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || (L[6] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))))) || (L[9] && ((!L[10] && ((!L[4] && (({L[3],L[5],L[6],L[7],L[8]} == 5'b00010) || (L[8] && ((!L[5] && ((!L[6] && (({L[3],L[7]} == 2'b00) || ({L[3],L[7]} == 2'b11))) || ({L[3],L[6]} == 2'b01))) || (({L[3],L[5]} == 2'b01) && (({L[6],L[7]} == 2'b00) || L[6])))))) || ({L[3],L[4],L[5],L[6],L[7],L[8]} == 6'b010011))) || (({L[3],L[4],L[8],L[10]} == 4'b1101) && (({L[6],L[7]} == 2'b00) || L[6]))))));
 
// action: SB = ALU:
assign A_SB_ALU = ({L[0],L[1],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 9'b011000110) || (({L[0],L[1],L[2],L[7],L[10]} == 5'b01101) && ((!L[9] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || ({L[3],L[4],L[8],L[9]} == 4'b1101)));
 
// action: DB <= SB:
assign E_DB__SB = (!L[1] && ((!L[5] && ((!L[6] && (({L[0],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 8'b00100010) || (L[7] && ((({L[0],L[2],L[9],L[10]} == 4'b0110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))) || (L[0] && ((({L[2],L[9],L[10]} == 3'b001) && (({L[3],L[4],L[8]} == 3'b001) || (L[4] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))))))))) || ({L[0],L[2],L[3],L[4],L[6],L[7],L[8],L[9],L[10]} == 9'b001010010))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b0000100001))) || (({L[0],L[1],L[2]} == 3'b011) && ((!L[7] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b00110) || (L[10] && ((!L[9] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || ({L[3],L[4],L[8],L[9]} == 4'b1101))))) || (({L[5],L[6],L[7],L[9],L[10]} == 5'b00110) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011)))));
 
// action: ALU_OP = LSR:
assign A_ALU_OP_LSR = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010010100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011010) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: ALU_OP = ROL:
assign A_ALU_OP_ROL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010100100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011100) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: ALU_OP = ROR:
assign A_ALU_OP_ROR = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010110100) || (({L[0],L[1],L[2],L[5],L[6],L[7]} == 6'b011110) && ((({L[9],L[10]} == 2'b01) && (({L[3],L[4],L[8]} == 3'b010) || (L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))))) || ({L[3],L[4],L[8],L[9],L[10]} == 5'b00110)));
 
// action: SB = AC:
assign A_SB_AC = (!L[1] && ((!L[5] && (({L[0],L[2],L[3],L[4],L[6],L[7],L[8],L[9],L[10]} == 9'b001010010) || (({L[0],L[6],L[7]} == 3'b101) && ((({L[2],L[9],L[10]} == 3'b001) && (({L[3],L[4],L[8]} == 3'b001) || (L[4] && (({L[3],L[8]} == 2'b01) || ({L[3],L[8]} == 2'b10))))) || (L[2] && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[4] && (({L[3],L[8]} == 2'b00) || ({L[3],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b011))))))))) || ({L[0],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 10'b0010101100))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010101100);
 
// action: X <= SB:
assign E_X__SB = (({L[1],L[2],L[5],L[6],L[7],L[8],L[9]} == 7'b1010110) && ((!L[10] && (({L[0],L[3],L[4]} == 3'b000) || (L[3] && (!L[4] || ({L[0],L[4]} == 2'b01))))) || ({L[0],L[3],L[10]} == 3'b101))) || (({L[1],L[2],L[5],L[6],L[7]} == 5'b11101) && (({L[3],L[4],L[8],L[9],L[10]} == 5'b11001) || (({L[9],L[10]} == 2'b10) && ((!L[3] && (({L[4],L[8]} == 2'b00) || ({L[4],L[8]} == 2'b11))) || ({L[3],L[4],L[8]} == 3'b101)))));
 
// action: Y <= SB:
assign E_Y__SB = (({L[0],L[1],L[5],L[6],L[7],L[10]} == 6'b001010) && ((!L[4] && (({L[2],L[3],L[8],L[9]} == 4'b1001) || (L[8] && (({L[2],L[3],L[9]} == 3'b000) || (L[3] && (({L[2],L[9]} == 2'b00) || ({L[2],L[9]} == 2'b11))))))) || ({L[2],L[3],L[4],L[8],L[9]} == 5'b10111))) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00111101001);
 
// action: SB = S:
assign A_SB_S = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01011101100);
 
// action: S <= SB:
assign E_S__SB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01011001100);
 
// action: PC <= EA:
assign E_PC__EA = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00110010110);
 
// action: S <= ALU:
assign E_S__ALU = (({L[0],L[1],L[2],L[4],L[7],L[8]} == 6'b000000) && ((({L[3],L[9],L[10]} == 3'b001) && (!L[6] || ({L[5],L[6]} == 2'b01))) || (({L[9],L[10]} == 2'b10) && ((!L[3] && (({L[5],L[6]} == 2'b00) || L[6])) || L[3])))) || ({L[0],L[1],L[2],L[3],L[4],L[7],L[8],L[9],L[10]} == 9'b000000110);
 
// action: SB = P:
assign A_SB_P = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010000010);
 
// action: P <= SB:
assign E_P__SB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010100110);
 
// action: X <= RES:
assign E_X__RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010111100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b01010011100);
 
// action: Y <= RES:
assign E_Y__RES = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010001100) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00010011100);
 
// action: DB <= ALU:
assign E_DB__ALU = ({L[0],L[1],L[2],L[3],L[4],L[6],L[7],L[8],L[9],L[10]} == 10'b0110011110) || (({L[0],L[1],L[2],L[6],L[7],L[10]} == 6'b011111) && ((!L[9] && ((!L[3] && (({L[4],L[8]} == 2'b00) || L[4])) || (L[3] && (({L[4],L[8]} == 2'b00) || L[8])))) || ({L[3],L[4],L[8],L[9]} == 4'b1101)));
 
// action: DB <= PCH:
assign E_DB__PCH = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000010) || ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100110);
 
// action: PCL <= EAL:
assign E_PCL__EAL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000100101);
 
// action: DB <= PCL:
assign E_DB__PCL = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000110);
 
// action: DB <= P:
assign E_DB__P = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000000001);
 
// action: P <= DB:
assign E_P__DB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000010110);
 
// action: PCL <= DB:
assign E_PCL__DB = ({L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],L[8],L[9],L[10]} == 11'b00000010001);
/ag_6502/trunk/agat7/ag_6502.v
0,0 → 1,344
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Oleg Odintsov
//
// Create Date: 10:50:36 02/15/2012
// Design Name:
// Module Name: ag_6502
// Project Name: Agat Hardware Project
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
 
// Specify following define to allow external
// clocking for phi1 and phi2
// In such case you may use ag6502_ext_clock module
// with baseclk frequency ~ 10 x phi_0
`define AG6502_EXTERNAL_CLOCK
 
 
`ifndef AG6502_EXTERNAL_CLOCK
module ag6502_clock(input phi_0, output phi_1, output phi_2);
wire phi_01;
not#3(phi_1,phi_0);
or(phi_01,~phi_0, phi_1);
not#1(phi_2, phi_01);
endmodule
 
 
`else
 
module ag6502_phase_shift(input baseclk, input phi_0, output reg phi_1);
parameter DELAY = 1; // delay in semi-waves of baseclk
initial phi_1 = 0;
integer cnt = 0;
always @(posedge baseclk) begin
if (phi_0 != phi_1) begin
if (!cnt) begin phi_1 <= ~phi_1; cnt <= DELAY; end
else cnt <= cnt - 1;
end
end
endmodule
 
// baseclk is used to simulate delays on a real hardware
module ag6502_ext_clock(input baseclk, input phi_0, output phi_1, output phi_2);
parameter DELAY1 = 3, DELAY2 = 1; // delays in semi-waves of baseclk
wire phi_1_neg, phi_01;
ag6502_phase_shift#DELAY1 d1(baseclk, phi_0, phi_1_neg);
assign phi_1 = ~phi_1_neg;
and(phi_01, phi_0, phi_1_neg);
ag6502_phase_shift#DELAY2 d2(baseclk, phi_01, phi_2);
endmodule
 
`endif
 
 
`define ALU_ORA 3'd0
`define ALU_AND 3'd1
`define ALU_EOR 3'd2
`define ALU_ADC 3'd3
`define ALU_ASL 3'd4
`define ALU_LSR 3'd5
`define ALU_ROL 3'd6
`define ALU_ROR 3'd7
 
 
module ag6502_decimal(ADD, D_IN, NEG, CORR);
input wire[4:0] ADD;
input wire D_IN, NEG;
output wire[4:0] CORR;
wire C9 = {ADD[4]^NEG, ADD[3:0]} > 5'd9;
assign CORR = D_IN?{C9^NEG, C9?ADD[3:0] + (NEG?4'd10:4'd6): ADD[3:0]}: ADD;
endmodule
 
 
module ag6502_alu(A, B, OP, NEG, C_IN, D_IN, R, C_OUT, V_OUT);
input wire[7:0] A, B;
input wire[2:0] OP;
input wire C_IN, D_IN, NEG;
output wire[7:0] R;
output wire C_OUT, V_OUT;
wire[4:0] ADD_L;
ag6502_decimal DL({1'b0, A[3:0]} + {1'b0, B[3:0]} + C_IN, D_IN, NEG, ADD_L);
wire CF_H = ADD_L[4];
 
wire[4:0] ADD_H;
ag6502_decimal DH({1'b0, A[7:4]} + {1'b0, B[7:4]} + CF_H, D_IN, NEG, ADD_H);
 
assign
{C_OUT,R} = (OP==`ALU_ORA)? A | B:
(OP==`ALU_AND)? A & B:
(OP==`ALU_EOR)? A ^ B:
(OP==`ALU_ADC)? {ADD_H, ADD_L[3:0]}:
(OP==`ALU_ASL)? {A[7], A[6:0], 1'b0}:
(OP==`ALU_LSR)? {A[0], 1'b0, A[7:1]}:
(OP==`ALU_ROL)? {A[7], A[6:0], C_IN}:
(OP==`ALU_ROR)? {A[0], C_IN, A[7:1]}:
8'bX;
assign V_OUT = (A[7] == B[7]) && (A[7] != R[7]);
endmodule
 
/*
System AB/DB discipline:
1. For CPU
Phi1 up => CPU set ab/db_out buses
Phi2 down => CPU reads data from db_in
2. For Memory / other devices
Phi2 up => perform read/write operation
*/
 
 
module ag6502(input phi_0,
`ifdef AG6502_EXTERNAL_CLOCK
input phi_1, input phi_2,
`else
output phi_1, output phi_2,
`endif
output reg[15:0] ab,
output wire read,
input[7:0] db_in, output reg[7:0] db_out,
input rdy,
input rst, input irq, input nmi,
input so,
output sync);
`ifndef AG6502_EXTERNAL_CLOCK
ag6502_clock cgen(phi_0, phi_1, phi_2);
`endif
 
reg rdyg = 1;
reg[2:0] T = 7;
reg[7:0] IR ='h18;
reg[15:0] PC = 0;
wire[7:0] PCH = PC[15:8], PCL = PC[7:0];
reg[7:0] EAL, EAH;
wire[15:0] EA = {EAH, EAL};
reg FLAG_C, FLAG_Z, FLAG_I, FLAG_D, FLAG_B, FLAG_V, FLAG_N;
reg[7:0] AC, X, Y, S = 0;
wire[7:0] P = {FLAG_N, FLAG_V, 1'b1, FLAG_B, FLAG_D, FLAG_I, FLAG_Z, FLAG_C};
wire[7:0] SB;
wire[7:0] ALU_A, ALU_B;
wire[7:0] RES;
wire[2:0] ALU_OP;
reg[8:0] eALU; // with carry
wire[7:0] ALU = eALU;
wire ALU_CF = eALU[8];
wire CF_IN, DF_IN;
wire CF_OUT, VF_OUT;
reg so_prev = 0;
reg nmi_prev = 0;
wire irq_active = ~irq & ~FLAG_I;
wire nmi_active = ~nmi & nmi_prev;
wire int_active = irq_active | nmi_active;
wire rst_active = ~rst;
wire so_active = so & ~so_prev;
wire[1:0] vec_bits=
nmi_active?2'b01:
rst_active?2'b10:
2'b11;
wire[15:0] vec_addr = {{13{1'b1}}, vec_bits, 1'b0};
wire[7:0] IR_eff = int_active?8'b0:IR;
wire[10:0] L = {T, IR_eff};
`include "states.v"
assign read = ~A_RW_W;
assign sync = !T;
assign SB = A_SB_DB? db_in:
A_SB_AC? AC:
A_SB_X? X:
A_SB_Y? Y:
A_SB_S? S:
A_SB_P? P:
A_SB_ALU? ALU:
A_SB_0? 8'b0:
A_SB_PCH? PCH:
A_SB_PCL? PCL:
8'bX;
assign CF_IN = A_ALU_CF_0? 1'b0:
A_ALU_CF_1? 1'b1:
A_ALU_CF_ALUC? ALU_CF:
FLAG_C;
assign DF_IN = A_ALU_DF_D? FLAG_D: 1'b0;
assign ALU_A =
A_ALU_A_AC? AC:
A_ALU_A_X? X:
A_ALU_A_Y? Y:
A_ALU_A_DB? db_in:
A_ALU_A_EAL? EAL:
A_ALU_A_ALU? ALU:
A_ALU_A_S? S:
A_ALU_A_SIGN? (EAL[7]?8'b11111111:8'b00000001):
8'bX;
assign ALU_B = A_ALU_B_SB? SB:
A_ALU_B_NOTSB? ~SB:
8'bX;
 
assign ALU_OP = A_ALU_OP_ADC? `ALU_ADC:
A_ALU_OP_ORA? `ALU_ORA:
A_ALU_OP_EOR? `ALU_EOR:
A_ALU_OP_AND? `ALU_AND:
A_ALU_OP_ASL? `ALU_ASL:
A_ALU_OP_LSR? `ALU_LSR:
A_ALU_OP_ROL? `ALU_ROL:
A_ALU_OP_ROR? `ALU_ROR:
8'bX;
 
ag6502_alu alu(ALU_A, ALU_B, ALU_OP, A_ALU_B_NOTSB, CF_IN, DF_IN, RES, CF_OUT, VF_OUT);
always @(posedge phi_1) begin
if (E_AB__PC) ab <= PC;
else if (E_AB__EA) ab <= EA;
else if (E_AB__S) ab <= {8'b1, S};
 
if (E_DB__SB) db_out <= SB;
else if (E_DB__PCH) db_out <= PCH;
else if (E_DB__PCL) db_out <= PCL;
else if (E_DB__P) db_out <= P;
else if (E_DB__ALU) db_out <= ALU;
if (read) rdyg <= rdy;
end
 
 
wire cond;
assign cond =
E_T__0IFNF__IR_5_?(FLAG_N != IR[5]):
E_T__0IFVF__IR_5_?(FLAG_V != IR[5]):
E_T__0IFCF__IR_5_?(FLAG_C != IR[5]):
E_T__0IFZF__IR_5_?(FLAG_Z != IR[5]):
E_T__0IFZF__IR_5_?(FLAG_Z != IR[5]):
E_T__0IF_C7F? CF_OUT == EAL[7]:
E_T__0;
always @(negedge phi_2) if (rdyg) begin
if (E_PC__PC_1) PC <= PC + 1;
else if (E_PC__EA) PC <= EA;
else begin
if (E_PCH__RES) PC[15:8] <= RES;
if (E_PCL__ALU) PC[7:0] <= ALU;
else if (E_PCL__RES) PC[7:0] <= RES;
else if (E_PCL__EAL) PC[7:0] <= EAL;
else if (E_PCL__DB) PC[7:0] <= db_in;
end
if (!T) begin
IR <= db_in;
if (!db_in) begin // BRK instruction
{EAH, EAL} <= vec_addr;
end
nmi_prev <= nmi;
end
if (E_N_Z__SB) begin FLAG_Z <= !SB; FLAG_N <= SB[7]; end
else if (E_N_Z__RES) begin FLAG_Z <= !RES; FLAG_N <= RES[7]; end
else if (E_N_Z__SB_RES) begin FLAG_Z <= !RES; FLAG_N <= SB[7]; end
if (E_C__RES) FLAG_C <= CF_OUT;
if (E_V__RES) FLAG_V <= VF_OUT;
else if (E_V__SB_6_) FLAG_V <= SB[6];
if (E_EAL__DB) EAL <= db_in;
else if (E_EAL__ALU) EAL <= ALU;
 
if (E_EA__DB) {EAH, EAL} <= { 8'b0, db_in };
else if (E_EAH__DB) EAH <= db_in;
else if (E_EAH__ALU) EAH <= ALU;
if (E_AC__SB) AC <= SB;
else if (E_AC__RES) AC <= RES;
if (E_S__ALU) S <= ALU;
if (E_X__SB) X <= SB;
else if (E_X__RES) X <= RES;
if (E_Y__SB) Y <= SB;
else if (E_Y__RES) Y <= RES;
if (E_S__SB) S <= SB;
if (E_P__SB) {FLAG_N, FLAG_V, FLAG_B, FLAG_D, FLAG_I, FLAG_Z, FLAG_C} <= {SB[7], SB[6], SB[4], SB[3], SB[2], SB[1], SB[0]};
else if (E_P__DB) {FLAG_N, FLAG_V, FLAG_B, FLAG_D, FLAG_I, FLAG_Z, FLAG_C} <= {db_in[7], db_in[6], db_in[4], db_in[3], db_in[2], db_in[1], db_in[0]};
if (E_CF__IR_5_) FLAG_C <= IR[5];
if (E_IF__IR_5_) FLAG_I <= IR[5];
if (E_DF__IR_5_) FLAG_D <= IR[5];
if (E_VF__0) FLAG_V <= 0;
else if (so_active) FLAG_V <= 1;
so_prev <= so;
eALU <= {CF_OUT, RES};
if (cond) begin
T <= 0;
if (!IR_eff) begin
FLAG_B <= !IR;
FLAG_I <= 1;
end
end else T <= T + ((E_T__T_1IF_ALUCZ && !ALU_CF)?2: 1);
 
if (rst_active) begin
T <= 1;
IR <= 0;
{EAH, EAL} <= vec_addr;
end
end
 
 
endmodule
 
/ag_6502/trunk/agat7/chip1.v
0,0 → 1,67
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Oleg Odintsov
//
// Create Date: 18:21:00 01/17/2012
// Design Name:
// Project Name: Agat Hardware Project
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
 
 
module chip1(
input clk,
input b1,
input b2,
input rot_a, rot_b, rot_center,
output[7:0] led,
output vga_red,
output vga_green,
output vga_blue,
output vga_hsync,
output vga_vsync,
output [3:0]j4,
input spi_miso, output spi_mosi, output spi_sck, output dac_cs, output dac_clr,
output spi_rom_cs,
output spi_amp_cs,
output spi_adc_conv,
output strataflash_oe,
output strataflash_ce,
output strataflash_we,
output platformflash_oe,
input ps2_clk,
input ps2_data
);
// access to DAC
assign spi_mosi = 0, spi_sck = 0, dac_cs = 0, dac_clr = 0;
// block other devices to access to DAC
assign spi_rom_cs = 1, spi_amp_cs = 1, spi_adc_conv = 0;
assign strataflash_oe = 1, strataflash_ce = 1, strataflash_we = 1;
assign platformflash_oe = 0;
 
wire[4:0] vga_bus;
assign {vga_red, vga_green, vga_blue, vga_hsync, vga_vsync} = vga_bus;
wire[1:0] ps2_bus = {ps2_clk, ps2_data};
// assign j4 = 0, vga_bus = 0;
wire[3:0] btns = {0, 0, b2, b1};
ag_main agate(clk, btns, led, j4, vga_bus, ps2_bus);
endmodule
/ag_6502/trunk/agat7/ag_ram.v
0,0 → 1,231
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Odintsov Oleg
//
// Create Date: 11:15:41 02/24/2012
// Design Name:
// Module Name: ag_ram
// Project Name: Agat Hardware Project
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
// Enable the following define to use synchronous memory instead of
// asynchronous (which has been used in real Agats).
// The use of the synchronous memory will improve hardware design on FPGA
`define AG_RAM_SYNCHRONOUS
 
 
`ifdef AG_RAM_SYNCHRONOUS
 
module RAM16Kx1(input CLK1, input[13:0] AB1, input CS1, input READ,
output DO1, input DI1,
input CLK2, input[13:0] AB2, input CS2, output DO2);
 
wire DO1x, DO2x;
assign DO1 = CS1? DO1x: 1'bZ;
assign DO2 = CS2? DO2x: 1'bZ;
// RAMB16_S1_S1: 16k x 1 Dual-Port RAM
// Spartan-3E
// Xilinx HDL Language Template, version 13.3
 
RAMB16_S1_S1 #(
.INIT_A(1'b0), // Value of output RAM registers on Port A at startup
.INIT_B(1'b0), // Value of output RAM registers on Port B at startup
.SRVAL_A(1'b0), // Port A output value upon SSR assertion
.SRVAL_B(1'b0), // Port B output value upon SSR assertion
.WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE
.WRITE_MODE_B("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE
.SIM_COLLISION_CHECK("ALL"), // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL"
 
// The following INIT_xx declarations specify the initial contents of the RAM
// Address 0 to 4095
.INIT_00(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_01(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_02(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_03(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_04(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_05(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_06(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_07(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_08(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_09(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_0A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_0B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_0C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_0D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_0E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_0F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
// Address 4096 to 8191
.INIT_10(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_11(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_12(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_13(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_14(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_15(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_16(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_17(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_18(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_19(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_1A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_1B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_1C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_1D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_1E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_1F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
// Address 8192 to 12287
.INIT_20(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_21(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_22(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_23(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_24(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_25(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_26(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_27(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_28(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_29(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_2A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_2B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_2C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_2D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_2E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_2F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
// Address 12288 to 16383
.INIT_30(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_31(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_32(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_33(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_34(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_35(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_36(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_37(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_38(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_39(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_3A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_3B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_3C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_3D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_3E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
.INIT_3F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)
) RAMB16_S1_S1_inst (
.DOA(DO1x), // Port A 1-bit Data Output
.DOB(DO2x), // Port B 1-bit Data Output
.ADDRA(AB1), // Port A 14-bit Address Input
.ADDRB(AB2), // Port B 14-bit Address Input
.CLKA(CLK1), // Port A Clock
.CLKB(CLK2), // Port B Clock
.DIA(DI1), // Port A 1-bit Data Input
.DIB(1'bZ), // Port B 1-bit Data Input
.ENA(CS1), // Port A RAM Enable Input
.ENB(CS2), // Port B RAM Enable Input
.SSRA(1'b0), // Port A Synchronous Set/Reset Input
.SSRB(1'b0), // Port B Synchronous Set/Reset Input
.WEA(~READ), // Port A Write Enable Input
.WEB(1'b0) // Port B Write Enable Input
);
endmodule
 
 
`else
 
module RAM1Kx1(input CLK1, input[9:0] AB1, input CS1, input READ,
output DO1, input DI1,
input CLK2, input[9:0] AB2, input CS2, output DO2);
parameter FILL = 256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;
reg mem[0:'h3FF];
integer i;
 
initial
for (i = 0; i < 'h400; i = i + 1)
mem[i] = (FILL&(256'b01<<(i&'hFF)))?1'b1:1'b0;
 
assign DO1 = (CS1 && READ)? mem[AB1]: 1'bZ;
assign DO2 = CS2? mem[AB2]: 1'bZ;
always @(posedge CLK1) if (CS1 && !READ) mem[AB1] <= DI1;
endmodule
 
 
 
module RAM16Kx1(input CLK1, input[13:0] AB1, input CS1, input READ,
output DO1, input DI1,
input CLK2, input[13:0] AB2, input CS2, output DO2);
wire[3:0] SEL1 = AB1[13:10];
wire[3:0] SEL2 = AB2[13:10];
 
RAM1Kx1 ram0(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h0), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h0), DO2);
RAM1Kx1 ram1(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h1), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h1), DO2);
RAM1Kx1 ram2(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h2), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h2), DO2);
RAM1Kx1 ram3(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h3), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h3), DO2);
RAM1Kx1 ram4(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h4), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h4), DO2);
RAM1Kx1 ram5(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h5), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h5), DO2);
RAM1Kx1 ram6(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h6), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h6), DO2);
RAM1Kx1 ram7(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h7), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h7), DO2);
RAM1Kx1 ram8(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h8), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h8), DO2);
RAM1Kx1 ram9(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h9), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'h9), DO2);
RAM1Kx1 ramA(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hA), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'hA), DO2);
RAM1Kx1 ramB(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hB), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'hB), DO2);
RAM1Kx1 ramC(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hC), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'hC), DO2);
RAM1Kx1 ramD(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hD), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'hD), DO2);
RAM1Kx1 ramE(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hE), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'hE), DO2);
RAM1Kx1 ramF(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hF), READ, DO1, DI1,
CLK2, AB2[9:0], CS2 && (SEL2 == 4'hF), DO2);
endmodule
 
`endif // synchronous
 
 
/*
Data bus for video controller:
A0=0, DO2: A0=1, DO2:
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Data bus for processor:
A0=0, DO1/DI1: A0=1, DO1/DI1:
07 06 05 04 03 02 01 00 07 06 05 04 03 02 01 00
*/
module RAM32Kx8x16(input CLK1, input[14:0] AB1, input CS1,
input READ, output[7:0] DO1, input[7:0] DI1,
input CLK2, input[13:0] AB2, input CS2, output[15:0] DO2);
wire[1:0] CSM = {(~AB1[0]) & CS1, AB1[0] & CS1}; // CS for modules
wire[13:0] AB1x = AB1[14:1];
RAM16Kx1 ram0(CLK1, AB1x, CSM[0], READ, DO1[0], DI1[0], CLK2, AB2, CS2, DO2[0]);
RAM16Kx1 ram1(CLK1, AB1x, CSM[0], READ, DO1[1], DI1[1], CLK2, AB2, CS2, DO2[1]);
RAM16Kx1 ram2(CLK1, AB1x, CSM[0], READ, DO1[2], DI1[2], CLK2, AB2, CS2, DO2[2]);
RAM16Kx1 ram3(CLK1, AB1x, CSM[0], READ, DO1[3], DI1[3], CLK2, AB2, CS2, DO2[3]);
RAM16Kx1 ram4(CLK1, AB1x, CSM[0], READ, DO1[4], DI1[4], CLK2, AB2, CS2, DO2[4]);
RAM16Kx1 ram5(CLK1, AB1x, CSM[0], READ, DO1[5], DI1[5], CLK2, AB2, CS2, DO2[5]);
RAM16Kx1 ram6(CLK1, AB1x, CSM[0], READ, DO1[6], DI1[6], CLK2, AB2, CS2, DO2[6]);
RAM16Kx1 ram7(CLK1, AB1x, CSM[0], READ, DO1[7], DI1[7], CLK2, AB2, CS2, DO2[7]);
RAM16Kx1 ram8(CLK1, AB1x, CSM[1], READ, DO1[0], DI1[0], CLK2, AB2, CS2, DO2[8]);
RAM16Kx1 ram9(CLK1, AB1x, CSM[1], READ, DO1[1], DI1[1], CLK2, AB2, CS2, DO2[9]);
RAM16Kx1 ramA(CLK1, AB1x, CSM[1], READ, DO1[2], DI1[2], CLK2, AB2, CS2, DO2[10]);
RAM16Kx1 ramB(CLK1, AB1x, CSM[1], READ, DO1[3], DI1[3], CLK2, AB2, CS2, DO2[11]);
RAM16Kx1 ramC(CLK1, AB1x, CSM[1], READ, DO1[4], DI1[4], CLK2, AB2, CS2, DO2[12]);
RAM16Kx1 ramD(CLK1, AB1x, CSM[1], READ, DO1[5], DI1[5], CLK2, AB2, CS2, DO2[13]);
RAM16Kx1 ramE(CLK1, AB1x, CSM[1], READ, DO1[6], DI1[6], CLK2, AB2, CS2, DO2[14]);
RAM16Kx1 ramF(CLK1, AB1x, CSM[1], READ, DO1[7], DI1[7], CLK2, AB2, CS2, DO2[15]);
endmodule
/ag_6502/trunk/agat7/agat7.xise
0,0 → 1,374
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project xmlns="http://www.xilinx.com/XMLSchema" xmlns:xil_pn="http://www.xilinx.com/XMLSchema">
 
<header>
<!-- ISE source project file created by Project Navigator. -->
<!-- -->
<!-- This file contains project source information including a list of -->
<!-- project source files, project and process properties. This file, -->
<!-- along with the project source files, is sufficient to open and -->
<!-- implement in ISE Project Navigator. -->
<!-- -->
<!-- Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. -->
</header>
 
<version xil_pn:ise_version="13.3" xil_pn:schema_version="2"/>
 
<files>
<file xil_pn:name="chip1.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="8"/>
</file>
<file xil_pn:name="chip1.ucf" xil_pn:type="FILE_UCF">
<association xil_pn:name="Implementation" xil_pn:seqID="0"/>
</file>
<file xil_pn:name="videoctl.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="1"/>
</file>
<file xil_pn:name="ag_main.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="7"/>
</file>
<file xil_pn:name="ag_6502.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="1"/>
<association xil_pn:name="Implementation" xil_pn:seqID="6"/>
</file>
<file xil_pn:name="clkdiv.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="2"/>
</file>
<file xil_pn:name="ag_ram.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="4"/>
</file>
<file xil_pn:name="ag_video.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="3"/>
</file>
<file xil_pn:name="ag_keyb.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="5"/>
</file>
</files>
 
<autoManagedFiles>
<!-- The following files are identified by `include statements in verilog -->
<!-- source files and are automatically managed by Project Navigator. -->
<!-- -->
<!-- Do not hand-edit this section, as it will be overwritten when the -->
<!-- project is analyzed based on files automatically identified as -->
<!-- include files. -->
<file xil_pn:name="states.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="monitor7.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="agathe7.v" xil_pn:type="FILE_VERILOG"/>
</autoManagedFiles>
 
<properties>
<property xil_pn:name="Add I/O Buffers" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Allow Logic Optimization Across Hierarchy" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Allow SelectMAP Pins to Persist" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Allow Unexpanded Blocks" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Allow Unmatched LOC Constraints" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Allow Unmatched Timing Group Constraints" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Asynchronous To Synchronous" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Auto Implementation Compile Order" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Auto Implementation Top" xil_pn:value="false" xil_pn:valueState="non-default"/>
<property xil_pn:name="Automatic BRAM Packing" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Automatically Insert glbl Module in the Netlist" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Automatically Run Generate Target PROM/ACE File" xil_pn:value="true" xil_pn:valueState="non-default"/>
<property xil_pn:name="BRAM Utilization Ratio" xil_pn:value="100" xil_pn:valueState="default"/>
<property xil_pn:name="Bring Out Global Set/Reset Net as a Port" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Bring Out Global Tristate Net as a Port" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Bus Delimiter" xil_pn:value="&lt;>" xil_pn:valueState="default"/>
<property xil_pn:name="CLB Pack Factor Percentage" xil_pn:value="100" xil_pn:valueState="default"/>
<property xil_pn:name="Case" xil_pn:value="Maintain" xil_pn:valueState="default"/>
<property xil_pn:name="Case Implementation Style" xil_pn:value="None" xil_pn:valueState="default"/>
<property xil_pn:name="Change Device Speed To" xil_pn:value="-4" xil_pn:valueState="default"/>
<property xil_pn:name="Change Device Speed To Post Trace" xil_pn:value="-4" xil_pn:valueState="default"/>
<property xil_pn:name="Clock Port" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Combinatorial Logic Optimization" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Compile EDK Simulation Library" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Compile SIMPRIM (Timing) Simulation Library" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Compile UNISIM (Functional) Simulation Library" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Compile XilinxCoreLib (CORE Generator) Simulation Library" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Compile for HDL Debugging" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Configuration Pin Done" xil_pn:value="Pull Up" xil_pn:valueState="default"/>
<property xil_pn:name="Configuration Pin Program" xil_pn:value="Pull Up" xil_pn:valueState="default"/>
<property xil_pn:name="Configuration Rate" xil_pn:value="Default (1)" xil_pn:valueState="default"/>
<property xil_pn:name="Correlate Output to Input Design" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Create ASCII Configuration File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Create Binary Configuration File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Create Bit File" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Create I/O Pads from Ports" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Create IEEE 1532 Configuration File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Create Logic Allocation File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Create Mask File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Create ReadBack Data Files" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Cross Clock Analysis" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Custom Waveform Configuration File Behav" xil_pn:value="test1.wcfg" xil_pn:valueState="non-default"/>
<property xil_pn:name="Decoder Extraction" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Delay Values To Be Read from SDF" xil_pn:value="Setup Time" xil_pn:valueState="default"/>
<property xil_pn:name="Device" xil_pn:value="xc3s500e" xil_pn:valueState="non-default"/>
<property xil_pn:name="Device Family" xil_pn:value="Spartan3E" xil_pn:valueState="non-default"/>
<property xil_pn:name="Device Speed Grade/Select ABS Minimum" xil_pn:value="-4" xil_pn:valueState="default"/>
<property xil_pn:name="Do Not Escape Signal and Instance Names in Netlist" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Done (Output Events)" xil_pn:value="Default (4)" xil_pn:valueState="default"/>
<property xil_pn:name="Drive Done Pin High" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Enable BitStream Compression" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Enable Cyclic Redundancy Checking (CRC)" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Enable Debugging of Serial Mode BitStream" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Enable Hardware Co-Simulation" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Enable Internal Done Pipe" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Enable Message Filtering" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Enable Outputs (Output Events)" xil_pn:value="Default (5)" xil_pn:valueState="default"/>
<property xil_pn:name="Equivalent Register Removal XST" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Evaluation Development Board" xil_pn:value="Spartan-3E Starter Board" xil_pn:valueState="non-default"/>
<property xil_pn:name="Exclude Compilation of Deprecated EDK Cores" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Exclude Compilation of EDK Sub-Libraries" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Extra Effort" xil_pn:value="None" xil_pn:valueState="default"/>
<property xil_pn:name="Extra Effort (Highest PAR level only)" xil_pn:value="None" xil_pn:valueState="default"/>
<property xil_pn:name="FPGA Start-Up Clock" xil_pn:value="CCLK" xil_pn:valueState="default"/>
<property xil_pn:name="FSM Encoding Algorithm" xil_pn:value="Auto" xil_pn:valueState="default"/>
<property xil_pn:name="FSM Style" xil_pn:value="LUT" xil_pn:valueState="default"/>
<property xil_pn:name="Filter Files From Compile Order" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Flatten Output Netlist" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Functional Model Target Language ArchWiz" xil_pn:value="Verilog" xil_pn:valueState="default"/>
<property xil_pn:name="Functional Model Target Language Coregen" xil_pn:value="Verilog" xil_pn:valueState="default"/>
<property xil_pn:name="Functional Model Target Language Schematic" xil_pn:value="Verilog" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Architecture Only (No Entity Declaration)" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Asynchronous Delay Report" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Clock Region Report" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Constraints Interaction Report" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Constraints Interaction Report Post Trace" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Datasheet Section" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Datasheet Section Post Trace" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Detailed MAP Report" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Multiple Hierarchical Netlist Files" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Post-Place &amp; Route Power Report" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Post-Place &amp; Route Simulation Model" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate RTL Schematic" xil_pn:value="Yes" xil_pn:valueState="default"/>
<property xil_pn:name="Generate SAIF File for Power Optimization/Estimation Par" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Testbench File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Timegroups Section" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generate Timegroups Section Post Trace" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Generics, Parameters" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Global Optimization Goal" xil_pn:value="AllClockNets" xil_pn:valueState="default"/>
<property xil_pn:name="Global Set/Reset Port Name" xil_pn:value="GSR_PORT" xil_pn:valueState="default"/>
<property xil_pn:name="Global Tristate Port Name" xil_pn:value="GTS_PORT" xil_pn:valueState="default"/>
<property xil_pn:name="Hierarchy Separator" xil_pn:value="/" xil_pn:valueState="default"/>
<property xil_pn:name="ISim UUT Instance Name" xil_pn:value="UUT" xil_pn:valueState="default"/>
<property xil_pn:name="Ignore User Timing Constraints Map" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Ignore User Timing Constraints Par" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Implementation Top" xil_pn:value="Module|chip1" xil_pn:valueState="non-default"/>
<property xil_pn:name="Implementation Top File" xil_pn:value="chip1.v" xil_pn:valueState="non-default"/>
<property xil_pn:name="Implementation Top Instance Path" xil_pn:value="/chip1" xil_pn:valueState="non-default"/>
<property xil_pn:name="Include 'uselib Directive in Verilog File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Include SIMPRIM Models in Verilog File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Include UNISIM Models in Verilog File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Include sdf_annotate task in Verilog File" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Incremental Compilation" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Insert Buffers to Prevent Pulse Swallowing" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Instance Name for Simulation in Hardware" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Instantiation Template Target Language Xps" xil_pn:value="Verilog" xil_pn:valueState="default"/>
<property xil_pn:name="JTAG Pin TCK" xil_pn:value="Pull Up" xil_pn:valueState="default"/>
<property xil_pn:name="JTAG Pin TDI" xil_pn:value="Pull Up" xil_pn:valueState="default"/>
<property xil_pn:name="JTAG Pin TDO" xil_pn:value="Pull Up" xil_pn:valueState="default"/>
<property xil_pn:name="JTAG Pin TMS" xil_pn:value="Pull Up" xil_pn:valueState="default"/>
<property xil_pn:name="Keep Hierarchy" xil_pn:value="No" xil_pn:valueState="default"/>
<property xil_pn:name="Language" xil_pn:value="VHDL" xil_pn:valueState="default"/>
<property xil_pn:name="Last Applied Goal" xil_pn:value="Balanced" xil_pn:valueState="default"/>
<property xil_pn:name="Last Applied Strategy" xil_pn:value="Xilinx Default (unlocked)" xil_pn:valueState="default"/>
<property xil_pn:name="Last Unlock Status" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Launch SDK after Export" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Library for Verilog Sources" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Load glbl" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Logical Shifter Extraction" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Manual Implementation Compile Order" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Map Effort Level" xil_pn:value="High" xil_pn:valueState="default"/>
<property xil_pn:name="Map Slice Logic into Unused Block RAMs" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Max Fanout" xil_pn:value="500" xil_pn:valueState="default"/>
<property xil_pn:name="Maximum Number of Lines in Report" xil_pn:value="1000" xil_pn:valueState="default"/>
<property xil_pn:name="Maximum Signal Name Length" xil_pn:value="20" xil_pn:valueState="default"/>
<property xil_pn:name="Move First Flip-Flop Stage" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Move Last Flip-Flop Stage" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Multiplier Style" xil_pn:value="Auto" xil_pn:valueState="default"/>
<property xil_pn:name="Mux Extraction" xil_pn:value="Yes" xil_pn:valueState="default"/>
<property xil_pn:name="Mux Style" xil_pn:value="Auto" xil_pn:valueState="default"/>
<property xil_pn:name="Netlist Hierarchy" xil_pn:value="As Optimized" xil_pn:valueState="default"/>
<property xil_pn:name="Netlist Translation Type" xil_pn:value="Timestamp" xil_pn:valueState="default"/>
<property xil_pn:name="Number of Clock Buffers" xil_pn:value="24" xil_pn:valueState="default"/>
<property xil_pn:name="Number of Paths in Error/Verbose Report" xil_pn:value="3" xil_pn:valueState="default"/>
<property xil_pn:name="Number of Paths in Error/Verbose Report Post Trace" xil_pn:value="3" xil_pn:valueState="default"/>
<property xil_pn:name="Optimization Effort" xil_pn:value="Normal" xil_pn:valueState="default"/>
<property xil_pn:name="Optimization Goal" xil_pn:value="Area" xil_pn:valueState="non-default"/>
<property xil_pn:name="Optimization Strategy (Cover Mode)" xil_pn:value="Area" xil_pn:valueState="default"/>
<property xil_pn:name="Optimize Instantiated Primitives" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Other Bitgen Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Compiler Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Compiler Options Fit" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Compiler Options Map" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Compiler Options Par" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Compiler Options Translate" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Compxlib Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Map Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other NETGEN Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Ngdbuild Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Place &amp; Route Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Simulator Commands Behavioral" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Simulator Commands Post-Map" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Simulator Commands Post-Route" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other Simulator Commands Post-Translate" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other XPWR Command Line Options" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Other XST Command Line Options" xil_pn:value="-loop_iteration_limit 16384" xil_pn:valueState="non-default"/>
<property xil_pn:name="Output Extended Identifiers" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Output File Name" xil_pn:value="chip1" xil_pn:valueState="default"/>
<property xil_pn:name="Overwrite Compiled Libraries" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Pack I/O Registers into IOBs" xil_pn:value="Auto" xil_pn:valueState="default"/>
<property xil_pn:name="Pack I/O Registers/Latches into IOBs" xil_pn:value="Off" xil_pn:valueState="default"/>
<property xil_pn:name="Package" xil_pn:value="fg320" xil_pn:valueState="non-default"/>
<property xil_pn:name="Perform Advanced Analysis" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Perform Advanced Analysis Post Trace" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Perform Timing-Driven Packing and Placement" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Place &amp; Route Effort Level (Overall)" xil_pn:value="High" xil_pn:valueState="default"/>
<property xil_pn:name="Place And Route Mode" xil_pn:value="Normal Place and Route" xil_pn:valueState="default"/>
<property xil_pn:name="Placer Effort Level (Overrides Overall Level)" xil_pn:value="None" xil_pn:valueState="default"/>
<property xil_pn:name="Port to be used" xil_pn:value="Auto - default" xil_pn:valueState="default"/>
<property xil_pn:name="Post Map Simulation Model Name" xil_pn:value="chip1_map.v" xil_pn:valueState="default"/>
<property xil_pn:name="Post Place &amp; Route Simulation Model Name" xil_pn:value="chip1_timesim.v" xil_pn:valueState="default"/>
<property xil_pn:name="Post Synthesis Simulation Model Name" xil_pn:value="chip1_synthesis.v" xil_pn:valueState="default"/>
<property xil_pn:name="Post Translate Simulation Model Name" xil_pn:value="chip1_translate.v" xil_pn:valueState="default"/>
<property xil_pn:name="Power Reduction Map" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Power Reduction Par" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Preferred Language" xil_pn:value="Verilog" xil_pn:valueState="default"/>
<property xil_pn:name="Priority Encoder Extraction" xil_pn:value="Yes" xil_pn:valueState="default"/>
<property xil_pn:name="Produce Verbose Report" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Project Description" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Property Specification in Project File" xil_pn:value="Store all values" xil_pn:valueState="default"/>
<property xil_pn:name="RAM Extraction" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="RAM Style" xil_pn:value="Auto" xil_pn:valueState="default"/>
<property xil_pn:name="ROM Extraction" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="ROM Style" xil_pn:value="Auto" xil_pn:valueState="default"/>
<property xil_pn:name="Re-Use Last Bitstream File" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Read Cores" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Regenerate Core" xil_pn:value="Under Current Project Setting" xil_pn:valueState="default"/>
<property xil_pn:name="Register Balancing" xil_pn:value="No" xil_pn:valueState="default"/>
<property xil_pn:name="Register Duplication" xil_pn:value="Off" xil_pn:valueState="default"/>
<property xil_pn:name="Register Duplication Xst" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Release Write Enable (Output Events)" xil_pn:value="Default (6)" xil_pn:valueState="default"/>
<property xil_pn:name="Rename Design Instance in Testbench File to" xil_pn:value="UUT" xil_pn:valueState="default"/>
<property xil_pn:name="Rename Top Level Architecture To" xil_pn:value="Structure" xil_pn:valueState="default"/>
<property xil_pn:name="Rename Top Level Entity to" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Rename Top Level Module To" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Report Fastest Path(s) in Each Constraint" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Report Fastest Path(s) in Each Constraint Post Trace" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Report Paths by Endpoint" xil_pn:value="3" xil_pn:valueState="default"/>
<property xil_pn:name="Report Paths by Endpoint Post Trace" xil_pn:value="3" xil_pn:valueState="default"/>
<property xil_pn:name="Report Type" xil_pn:value="Verbose Report" xil_pn:valueState="default"/>
<property xil_pn:name="Report Type Post Trace" xil_pn:value="Verbose Report" xil_pn:valueState="default"/>
<property xil_pn:name="Report Unconstrained Paths" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Report Unconstrained Paths Post Trace" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Reset DCM if SHUTDOWN &amp; AGHIGH performed" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Reset On Configuration Pulse Width" xil_pn:value="100" xil_pn:valueState="default"/>
<property xil_pn:name="Resource Sharing" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Retain Hierarchy" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Router Effort Level (Overrides Overall Level)" xil_pn:value="None" xil_pn:valueState="default"/>
<property xil_pn:name="Run Design Rules Checker (DRC)" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Run for Specified Time" xil_pn:value="false" xil_pn:valueState="non-default"/>
<property xil_pn:name="Run for Specified Time Map" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Run for Specified Time Par" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Run for Specified Time Translate" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Safe Implementation" xil_pn:value="No" xil_pn:valueState="default"/>
<property xil_pn:name="Security" xil_pn:value="Enable Readback and Reconfiguration" xil_pn:valueState="default"/>
<property xil_pn:name="Selected Module Instance Name" xil_pn:value="/chip1/agate/cpu/alu" xil_pn:valueState="non-default"/>
<property xil_pn:name="Selected Simulation Root Source Node Behavioral" xil_pn:value="work.ag6502_alu" xil_pn:valueState="non-default"/>
<property xil_pn:name="Selected Simulation Root Source Node Post-Map" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Selected Simulation Root Source Node Post-Route" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Selected Simulation Root Source Node Post-Translate" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Selected Simulation Source Node" xil_pn:value="UUT" xil_pn:valueState="default"/>
<property xil_pn:name="Shift Register Extraction" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Show All Models" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Simulation Model Target" xil_pn:value="Verilog" xil_pn:valueState="default"/>
<property xil_pn:name="Simulation Run Time ISim" xil_pn:value="1000 ns" xil_pn:valueState="default"/>
<property xil_pn:name="Simulation Run Time Map" xil_pn:value="1000 ns" xil_pn:valueState="default"/>
<property xil_pn:name="Simulation Run Time Par" xil_pn:value="1000 ns" xil_pn:valueState="default"/>
<property xil_pn:name="Simulation Run Time Translate" xil_pn:value="1000 ns" xil_pn:valueState="default"/>
<property xil_pn:name="Simulator" xil_pn:value="ISim (VHDL/Verilog)" xil_pn:valueState="default"/>
<property xil_pn:name="Slice Packing" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Slice Utilization Ratio" xil_pn:value="100" xil_pn:valueState="default"/>
<property xil_pn:name="Specify 'define Macro Name and Value" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Specify Top Level Instance Names Behavioral" xil_pn:value="work.ag6502_alu" xil_pn:valueState="default"/>
<property xil_pn:name="Specify Top Level Instance Names Post-Map" xil_pn:value="Default" xil_pn:valueState="default"/>
<property xil_pn:name="Specify Top Level Instance Names Post-Route" xil_pn:value="Default" xil_pn:valueState="default"/>
<property xil_pn:name="Specify Top Level Instance Names Post-Translate" xil_pn:value="Default" xil_pn:valueState="default"/>
<property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/>
<property xil_pn:name="Starting Placer Cost Table (1-100) Map" xil_pn:value="1" xil_pn:valueState="default"/>
<property xil_pn:name="Starting Placer Cost Table (1-100) Par" xil_pn:value="1" xil_pn:valueState="default"/>
<property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/>
<property xil_pn:name="Target Board for Hardware Co-Simulation" xil_pn:value="Spartan-3E MicroBlaze Development Kit (JTAG)" xil_pn:valueState="default"/>
<property xil_pn:name="Target Simulator" xil_pn:value="Please Specify" xil_pn:valueState="default"/>
<property xil_pn:name="Target UCF File Name" xil_pn:value="chip1.ucf" xil_pn:valueState="non-default"/>
<property xil_pn:name="Timing Mode Map" xil_pn:value="Non Timing Driven" xil_pn:valueState="default"/>
<property xil_pn:name="Timing Mode Par" xil_pn:value="Performance Evaluation" xil_pn:valueState="default"/>
<property xil_pn:name="Top-Level Module Name in Output Netlist" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/>
<property xil_pn:name="Trim Unconnected Signals" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Tristate On Configuration Pulse Width" xil_pn:value="0" xil_pn:valueState="default"/>
<property xil_pn:name="Unused IOB Pins" xil_pn:value="Pull Down" xil_pn:valueState="default"/>
<property xil_pn:name="Use 64-bit PlanAhead on 64-bit Systems" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Use Clock Enable" xil_pn:value="Yes" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Project File Behavioral" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Project File Post-Map" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Project File Post-Route" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Project File Post-Translate" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Simulation Command File Behavioral" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Simulation Command File Map" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Simulation Command File Par" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Simulation Command File Translate" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Waveform Configuration File Behav" xil_pn:value="true" xil_pn:valueState="non-default"/>
<property xil_pn:name="Use Custom Waveform Configuration File Map" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Waveform Configuration File Par" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Custom Waveform Configuration File Translate" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use LOC Constraints" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Use RLOC Constraints" xil_pn:value="Yes" xil_pn:valueState="default"/>
<property xil_pn:name="Use Smart Guide" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Use Synchronous Reset" xil_pn:value="Yes" xil_pn:valueState="default"/>
<property xil_pn:name="Use Synchronous Set" xil_pn:value="Yes" xil_pn:valueState="default"/>
<property xil_pn:name="Use Synthesis Constraints File" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="User Browsed Strategy Files" xil_pn:value="D:/Xilinx/13.3/ISE_DS/ISE/data/default.xds" xil_pn:valueState="non-default"/>
<property xil_pn:name="UserID Code (8 Digit Hexadecimal)" xil_pn:value="0xFFFFFFFF" xil_pn:valueState="default"/>
<property xil_pn:name="VHDL Source Analysis Standard" xil_pn:value="VHDL-93" xil_pn:valueState="default"/>
<property xil_pn:name="Value Range Check" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="Verilog 2001 Xst" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="Verilog Macros" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="Wait for DLL Lock (Output Events)" xil_pn:value="Default (NoWait)" xil_pn:valueState="default"/>
<property xil_pn:name="Working Directory" xil_pn:value="." xil_pn:valueState="non-default"/>
<property xil_pn:name="Write Timing Constraints" xil_pn:value="false" xil_pn:valueState="default"/>
<property xil_pn:name="XOR Collapsing" xil_pn:value="true" xil_pn:valueState="default"/>
<property xil_pn:name="iMPACT Project File" xil_pn:value="auto_project.ipf" xil_pn:valueState="non-default"/>
<!-- -->
<!-- The following properties are for internal use only. These should not be modified.-->
<!-- -->
<property xil_pn:name="PROP_BehavioralSimTop" xil_pn:value="Module|ag6502_alu" xil_pn:valueState="non-default"/>
<property xil_pn:name="PROP_DesignName" xil_pn:value="test2" xil_pn:valueState="non-default"/>
<property xil_pn:name="PROP_DevFamilyPMName" xil_pn:value="spartan3e" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_FPGAConfiguration" xil_pn:value="FPGAConfiguration" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_PostFitSimTop" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_PostMapSimTop" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_PostParSimTop" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_PostSynthSimTop" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_PostXlateSimTop" xil_pn:value="" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_PreSynthesis" xil_pn:value="PreSynthesis" xil_pn:valueState="default"/>
<property xil_pn:name="PROP_intProjectCreationTimestamp" xil_pn:value="2012-01-17T18:20:35" xil_pn:valueState="non-default"/>
<property xil_pn:name="PROP_intWbtProjectID" xil_pn:value="9CB31622BFF04E63BD87FD9353EBD727" xil_pn:valueState="non-default"/>
<property xil_pn:name="PROP_intWorkingDirLocWRTProjDir" xil_pn:value="Same" xil_pn:valueState="non-default"/>
<property xil_pn:name="PROP_intWorkingDirUsed" xil_pn:value="No" xil_pn:valueState="non-default"/>
</properties>
 
<bindings>
<binding xil_pn:location="/chip1" xil_pn:name="chip1.ucf"/>
</bindings>
 
<libraries/>
 
</project>
/ag_6502/trunk/agat7/videoctl.v
0,0 → 1,68
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: BMSTU
// Engineer: Oleg Odintsov
//
// Create Date: 20:41:53 01/18/2012
// Design Name:
// Module Name: videoctl
// Project Name: Agat Hardware Project
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
module video_counters(
input clk,
output reg video_vsync = 1,
output reg video_hsync = 1,
output video_on,
output reg [10:1] hpos = 0,
output reg [9:1] vpos = 0);
integer hcnt = 0, vcnt = 0;
 
reg video_von = 0, video_hon = 0;
assign video_on = video_von & video_hon;
always @(posedge video_hsync) begin
vcnt <= vcnt + 1;
vpos <= video_von?vpos + 1: 0;
case (vcnt)
2: video_vsync = 1;
31: video_von = 1;
511: video_von = 0;
521: begin vcnt <=0; video_vsync = 0; end
endcase
end
 
always @(posedge clk) begin
if (!video_hon) hcnt <= hcnt - 1;
else hpos <= hpos + 1;
if (hpos == 639) video_hon <= 0;
if (hpos == 640) begin
if (!hcnt) begin
hcnt <= 96;
video_hsync <= 0;
hpos <= 0;
end
end else if (!hcnt) begin
if (!video_hsync) begin
video_hsync <= 1;
hcnt <= 48;
end else if (!video_hon) begin
video_hon <= 1;
hcnt <= 16;
end
end
end
endmodule
/ag_6502/trunk/genstates/states.txt
0,0 → 1,2032
% Common blocks
 
@READ_AT_PC:
(:1 AB <= PC
 
 
@SELECT_EA:
(:1 AB <= EA
@SELECT_S:
(:1 AB <= S
 
@READ_AT_EA:
(:1 @SELECT_EA
 
@INC_PC:
(:2 PC <= PC + 1
 
@FETCH:
(0:1 @READ_AT_PC
(0:2 @INC_PC
 
@ENDC:
(:2 T <= 0
 
@UNDOC:
@ENDC
 
@LOADNZ_SB:
(:2 N,Z <= SB
 
@LOADNZ_RES:
(:2 N,Z <= RES
 
@LOADNZ_SB_RES:
(:2 N,Z <= SB,RES
 
@LOADC_RES:
(:2 C <= RES
 
@LOADV_RES:
(:2 V <= RES
 
@LOADV_SB6:
(:2 V <= SB[6]
 
@ADD:
ALU_CF = 0
ALU_DF = 0
ALU_OP = ADC
 
@INC:
SB = 0
ALU_B = SB
ALU_CF = 1
ALU_DF = 0
ALU_OP = ADC
 
@INC_C:
SB = 0
ALU_B = SB
ALU_CF = ALUC
ALU_DF = 0
ALU_OP = ADC
 
@DEC:
SB = 0
ALU_B = NOT SB
ALU_CF = 0
ALU_DF = 0
ALU_OP = ADC
 
@COPY_ALU:
SB = 0
ALU_B = SB
ALU_OP = ORA
 
@ADD_DB_X:
ALU_A = DB
SB = X
ALU_B = SB
@ADD
 
@ADD_EAL_PCL:
ALU_A = EAL
SB = PCL
ALU_B = SB
@ADD
 
@COPY_DB:
ALU_A = DB
@COPY_ALU
 
@ADD_DB_Y:
ALU_A = DB
SB = Y
ALU_B = SB
@ADD
 
@INC_DB_C:
ALU_A = DB
@INC_C
 
@INC_DB:
ALU_A = DB
@INC
 
@INC_EAL:
ALU_A = EAL
@INC
 
@INC_ALU:
ALU_A = ALU
@INC
 
@DEC_ALU:
ALU_A = ALU
@DEC
 
@INC_S:
ALU_A = S
@INC
 
@DEC_S:
ALU_A = S
@DEC
 
@CF_OPERATE:
(1:1 @READ_AT_PC
(2:2 CF <= IR[5]
@ENDC
 
@IF_OPERATE:
(1:1 @READ_AT_PC
(2:2 IF <= IR[5]
@ENDC
 
@DF_OPERATE:
(1:1 @READ_AT_PC
(2:2 DF <= IR[5]
@ENDC
 
@VF_CLEAR:
(1:1 @READ_AT_PC
(2:2 VF <= 0
@ENDC
 
@NF_TEST:
T <= 0 IF NF != IR[5]
 
@VF_TEST:
T <= 0 IF VF != IR[5]
 
@CF_TEST:
T <= 0 IF CF != IR[5]
 
@ZF_TEST:
T <= 0 IF ZF == IR[5]
 
% Addressing modes
 
@IMM:
(1:1 @READ_AT_PC
(1:2 @INC_PC
 
@ZP:
(1:1 @READ_AT_PC
(1:2 EA <= DB
@INC_PC
(2:1 @SELECT_EA
 
@REL_READ:
(1:1 @READ_AT_PC
(1:2 @INC_PC
EAL <= DB
 
@REL_JUMP:
(2:1 @READ_AT_PC
@ADD_EAL_PCL
(2:2 PCL <= RES
T <= 0 IF_C7F
(3:1 @READ_AT_PC
ALU_A = SIGN
SB = PCH
ALU_B = SB
@ADD
(3:2 PCH <= RES
@ENDC
 
 
@ABS:
(1:1 @READ_AT_PC
(1:2 EAL <= DB
@INC_PC
(2:1 @READ_AT_PC
(2:2 EAH <= DB
@INC_PC
(3:1 @SELECT_EA
 
 
 
@INDX:
(1:1 @READ_AT_PC
@ADD_DB_X
(1:2 EA <= DB
@INC_PC
(2:1 @READ_AT_EA
@INC_ALU
(2:2 EAL <= ALU
(3:1 @READ_AT_EA
@COPY_DB
(3:2 EAL <= ALU
(4:1 @READ_AT_EA
(4:2 EAH <= DB
EAL <= ALU
(5:1 @SELECT_EA
 
@ABSX_READ:
(1:1 @READ_AT_PC
@ADD_DB_X
(1:2 EAL <= DB
@INC_PC
(2:1 @READ_AT_PC
@INC_DB_C
(2:2 EAH <= DB
EAL <= ALU
@INC_PC
T <= T + 1 IF_ALUCZ
(3:1 @READ_AT_EA
(3:2 EAH <= ALU
(4:1 @SELECT_EA
 
 
@ABSY_READ:
(1:1 @READ_AT_PC
@ADD_DB_Y
(1:2 EAL <= DB
@INC_PC
(2:1 @READ_AT_PC
@INC_DB_C
(2:2 EAH <= DB
EAL <= ALU
@INC_PC
T <= T + 1 IF_ALUCZ
(3:1 @READ_AT_EA
(3:2 EAH <= ALU
(4:1 @SELECT_EA
 
 
@ABSX_WRITE:
(1:1 @READ_AT_PC
@ADD_DB_X
(1:2 EAL <= DB
@INC_PC
(2:1 @READ_AT_PC
@INC_DB_C
(2:2 EAH <= DB
EAL <= ALU
@INC_PC
(3:1 @READ_AT_EA
(3:2 EAH <= ALU
(4:1 @SELECT_EA
 
 
@ABSY_WRITE:
(1:1 @READ_AT_PC
@ADD_DB_Y
(1:2 EAL <= DB
@INC_PC
(2:1 @READ_AT_PC
@INC_DB_C
(2:2 EAH <= DB
EAL <= ALU
@INC_PC
(3:1 @READ_AT_EA
(3:2 EAH <= ALU
(4:1 @SELECT_EA
 
 
@ZPX:
(1:1 @READ_AT_PC
@ADD_DB_X
(1:2 EA <= DB
@INC_PC
(2:1 @READ_AT_EA
(2:2 EAL <= ALU
(3:1 @SELECT_EA
 
@ZPY:
(1:1 @READ_AT_PC
@ADD_DB_Y
(1:2 EA <= DB
@INC_PC
(2:1 @READ_AT_EA
(2:2 EAL <= ALU
(3:1 @SELECT_EA
 
 
 
@INDY_READ:
(1:1 @READ_AT_PC
@INC_DB
(1:2 EA <= DB
@INC_PC
(2:1 @READ_AT_EA
@ADD_DB_Y
(2:2 EAL <= ALU
(3:1 @READ_AT_EA
@INC_DB_C
(3:2 EAH <= DB
EAL <= ALU
T <= T + 1 IF_ALUCZ
(4:1 @READ_AT_EA
(4:2 EAH <= ALU
(5:1 @SELECT_EA
 
 
 
@INDY_WRITE:
(1:1 @READ_AT_PC
@INC_DB
(1:2 EA <= DB
@INC_PC
(2:1 @READ_AT_EA
@ADD_DB_Y
(2:2 EAL <= ALU
(3:1 @READ_AT_EA
@INC_DB_C
(3:2 EAH <= DB
EAL <= ALU
(4:1 @READ_AT_EA
(4:2 EAH <= ALU
(5:1 @SELECT_EA
 
@IND_JMP:
(1:1 @READ_AT_PC
(1:2 EAL <= DB
@INC_PC
(2:1 @READ_AT_PC
@INC_EAL
(2:2 EAH <= DB
(3:1 @READ_AT_EA
@COPY_DB
(3:2 EAL <= ALU
(4:1 @READ_AT_EA
@COPY_DB
(4:2 PCH <= RES
PCL <= ALU
@ENDC
 
% Operations
 
@LDA:
(:1 SB = DB
(:2 AC <= SB
@LOADNZ_SB
@ENDC
 
@ORA:
(:1 SB = DB
ALU_A = AC
ALU_B = SB
ALU_OP = ORA
(:2 AC <= RES
@LOADNZ_RES
@ENDC
 
@AND:
(:1 SB = DB
ALU_A = AC
ALU_B = SB
ALU_OP = AND
(:2 AC <= RES
@LOADNZ_RES
@ENDC
 
@EOR:
(:1 SB = DB
ALU_A = AC
ALU_B = SB
ALU_OP = EOR
(:2 AC <= RES
@LOADNZ_RES
@ENDC
 
@CMP:
(:1 SB = DB
ALU_A = AC
ALU_B = NOT SB
ALU_DF = 0
ALU_CF = 1
ALU_OP = ADC
(:2 @LOADNZ_RES
@LOADC_RES
@ENDC
 
@BIT:
(:1 SB = DB
ALU_A = AC
ALU_B = SB
ALU_OP = AND
(:2 @LOADNZ_SB_RES
@LOADV_SB6
@ENDC
 
@CPX:
(:1 SB = DB
ALU_A = X
ALU_B = NOT SB
ALU_DF = 0
ALU_CF = 1
ALU_OP = ADC
(:2 @LOADNZ_RES
@LOADC_RES
@ENDC
 
@CPY:
(:1 SB = DB
ALU_A = Y
ALU_B = NOT SB
ALU_DF = 0
ALU_CF = 1
ALU_OP = ADC
(:2 @LOADNZ_RES
@LOADC_RES
@ENDC
 
@ADC:
(:1 SB = DB
ALU_A = AC
ALU_B = SB
ALU_DF = D
ALU_CF = C
ALU_OP = ADC
(:2 AC <= RES
@LOADNZ_RES
@LOADC_RES
@LOADV_RES
@ENDC
 
@SBC:
(:1 SB = DB
ALU_A = AC
ALU_B = NOT SB
ALU_DF = D
ALU_CF = C
ALU_OP = ADC
(:2 AC <= RES
@LOADNZ_RES
@LOADC_RES
@LOADV_RES
@ENDC
 
@ASL_A:
(1:1 ALU_A = AC
ALU_CF = C
ALU_OP = ASL
(:2 AC <= RES
@LOADNZ_RES
@LOADC_RES
@ENDC
 
@ASL_M:
(:1 @COPY_DB
(+:1 RW = W
SB = ALU
DB <= SB
ALU_A = ALU
ALU_CF = C
ALU_OP = ASL
(:2 @LOADNZ_RES
@LOADC_RES
(+:1 RW = W
SB = ALU
DB <= SB
(:2 @ENDC
 
@LSR_A:
(1:1 ALU_A = AC
ALU_CF = C
ALU_OP = LSR
(:2 AC <= RES
@LOADNZ_RES
@LOADC_RES
@ENDC
 
@LSR_M:
(:1 @COPY_DB
(+:1 RW = W
SB = ALU
DB <= SB
ALU_A = ALU
ALU_CF = C
ALU_OP = LSR
(:2 @LOADNZ_RES
@LOADC_RES
(+:1 RW = W
SB = ALU
DB <= SB
(:2 @ENDC
 
@ROL_A:
(1:1 ALU_A = AC
ALU_CF = C
ALU_OP = ROL
(:2 AC <= RES
@LOADNZ_RES
@LOADC_RES
@ENDC
 
@ROL_M:
(:1 @COPY_DB
(+:1 RW = W
SB = ALU
DB <= SB
ALU_A = ALU
ALU_CF = C
ALU_OP = ROL
(:2 @LOADNZ_RES
@LOADC_RES
(+:1 RW = W
SB = ALU
DB <= SB
(:2 @ENDC
 
@ROR_A:
(1:1 ALU_A = AC
ALU_CF = C
ALU_OP = ROR
(:2 AC <= RES
@LOADNZ_RES
@LOADC_RES
@ENDC
 
@ROR_M:
(:1 @COPY_DB
(+:1 RW = W
SB = ALU
DB <= SB
ALU_A = ALU
ALU_CF = C
ALU_OP = ROR
(:2 @LOADNZ_RES
@LOADC_RES
(+:1 RW = W
SB = ALU
DB <= SB
(:2 @ENDC
 
@STA:
(:1 RW = W
SB = AC
DB <= SB
(:2 @ENDC
 
@LDX:
(:1 SB = DB
(:2 X <= SB
@LOADNZ_SB
@ENDC
@STX:
(:1 RW = W
SB = X
DB <= SB
(:2 @ENDC
 
@LDY:
(:1 SB = DB
(:2 Y <= SB
@LOADNZ_SB
@ENDC
@STY:
(:1 RW = W
SB = Y
DB <= SB
(:2 @ENDC
 
 
@TAY:
(:1 SB = AC
(:2 Y <= SB
@LOADNZ_SB
@ENDC
 
@TYA:
(:1 SB = Y
(:2 AC <= SB
@LOADNZ_SB
@ENDC
 
@TAX:
(:1 SB = AC
(:2 X <= SB
@LOADNZ_SB
@ENDC
 
@TXA:
(:1 SB = X
(:2 AC <= SB
@LOADNZ_SB
@ENDC
 
@NOP:
(:2 @ENDC
 
@TSX:
(:1 SB = S
(:2 X <= SB
@LOADNZ_SB
@ENDC
 
@TXS:
(:1 SB = X
(:2 S <= SB
@ENDC
 
@JMP:
(:2 PC <= EA
@ENDC
 
@PUSH:
(1:1 @READ_AT_PC
@DEC_S
(2:1 @SELECT_S
DB <= SB
RW = W
(2:2 S <= ALU
 
@PULL:
(1:1 @READ_AT_PC
@INC_S
(2:1 @SELECT_S
(2:2 S <= ALU
(3:1 @SELECT_S
SB = DB
 
@PHA:
(1:1 @PUSH
(:1 SB = AC
@ENDC
 
@PHP:
(1:1 @PUSH
(:1 SB = P
@ENDC
 
@PLA:
(:1 @PULL
(:2 AC <= SB
@LOADNZ_SB
@ENDC
 
@PLP:
(:1 @PULL
(:2 P <= SB
@ENDC
 
@INX:
(:1 ALU_A = X
@INC
(:2 X <= RES
@LOADNZ_RES
@ENDC
 
@INY:
(:1 ALU_A = Y
@INC
(:2 Y <= RES
@LOADNZ_RES
@ENDC
 
@DEX:
(:1 ALU_A = X
@DEC
(:2 X <= RES
@LOADNZ_RES
@ENDC
 
@DEY:
(:1 ALU_A = Y
@DEC
(:2 Y <= RES
@LOADNZ_RES
@ENDC
 
 
@INC_M:
(:1 @COPY_DB
(+:1 RW = W
DB <= ALU
@INC_ALU
(:2 @LOADNZ_RES
(+:1 RW = W
DB <= ALU
(:2 @ENDC
 
@DEC_M:
(:1 @COPY_DB
(+:1 RW = W
DB <= ALU
@DEC_ALU
(:2 @LOADNZ_RES
(+:1 RW = W
DB <= ALU
(:2 @ENDC
 
@JSR_ABS:
(1:1 @READ_AT_PC
(1:2 EAL <= DB
@INC_PC
(2:1 @SELECT_S
@DEC_S
(3:1 @SELECT_S
RW = W
DB <= PCH
ALU_A = ALU
@DEC
(3:2 S <= ALU
(4:1 @SELECT_S
RW = W
SB = PCL
DB <= SB
(4:2 S <= ALU
(5:1 @READ_AT_PC
@COPY_DB
(5:2 PCH <= RES
PCL <= EAL
@ENDC
 
@BRK:
(1:1 @READ_AT_PC
@DEC_S
(2:1 @SELECT_S
ALU_A = ALU
@DEC
RW = W
DB <= PCH
(2:2 S <= ALU
(3:1 @SELECT_S
ALU_A = ALU
@DEC
RW = W
DB <= PCL
(3:2 S <= ALU
(4:1 @SELECT_S
RW = W
DB <= P
@INC_EAL
(4:2 S <= ALU
(5:1 @READ_AT_EA
@COPY_DB
(5:2 EAL <= ALU
(6:1 @READ_AT_EA
@COPY_DB
(6:2 PCH <= RES
PCL <= ALU
@ENDC
 
 
@RTS:
(1:1 @READ_AT_PC
@INC_S
(2:1 @SELECT_S
ALU_A = ALU
@INC
(2:2 S <= ALU
(3:1 @SELECT_S
@COPY_DB
(3:2 S <= ALU
PCL <= RES
(4:1 @SELECT_S
@COPY_DB
(4:2 PCH <= RES
(5:1 @READ_AT_PC
(5:2 @INC_PC
@ENDC
 
@RTI:
(1:1 @READ_AT_PC
@INC_S
(2:1 @SELECT_S
ALU_A = ALU
@INC
(2:2 S <= ALU
(3:1 @SELECT_S
ALU_A = ALU
@INC
(3:2 S <= ALU
P <= DB
(4:1 @SELECT_S
ALU_A = ALU
@INC
(4:2 PCL <= DB
S <= ALU
(5:1 @SELECT_S
@COPY_DB
(5:2 PCH <= RES
@ENDC
 
% Extra operations (incomplete)
 
@LAX:
(:1 SB = DB
(:2 AC <= SB
X <= SB
@LOADNZ_SB
@ENDC
 
 
% Real commands
 
#00: % BRK
(0: @FETCH
(1: @BRK
 
#01: % ORA (IND,X)
(0: @FETCH
(1: @INDX
@ORA
 
#03: % *SLO (IND,X) - incomplete
(0: @FETCH
(1: @INDX
@UNDOC
 
#04: % *NOP ZP
(0: @FETCH
(1: @ZP
@NOP
 
#05: % ORA ZP
(0: @FETCH
(1: @ZP
@ORA
 
#06: % ASL ZP
(0: @FETCH
(1: @ZP
@ASL_M
 
#07: % *SLO ZP - incomplete
(0: @FETCH
(1: @ZP
@UNDOC
 
 
#08: % PHP
(0: @FETCH
@PHP
 
#09: % ORA #IMM
(0: @FETCH
(1: @IMM
@ORA
 
#0A: % ASL A
(0: @FETCH
@ASL_A
 
#0B: % *ANC #IMM - incomplete
(0: @FETCH
(1: @IMM
@UNDOC
 
#0C: % *NOP ABS
(0: @FETCH
(1: @ABS
@NOP
 
#0D: % ORA ABS
(0: @FETCH
(1: @ABS
@ORA
 
#0E: % ASL ABS
(0: @FETCH
(1: @ABS
@ASL_M
 
#0F: % *SLO ABS - incomplete
(0: @FETCH
(1: @ABS
@UNDOC
 
#10: % BPL REL
(0: @FETCH
(1: @REL_READ
@NF_TEST
@REL_JUMP
 
#11: % ORA (IND),Y
(0: @FETCH
(1: @INDY_READ
@ORA
 
#13: % *SLO (IND),Y - incomplete
(0: @FETCH
(1: @INDY_WRITE
@UNDOC
 
#14: % *NOP ZP,X
(0: @FETCH
(1: @ZPX
@NOP
 
#15: % ORA ZP,X
(0: @FETCH
(1: @ZPX
@ORA
 
#16: % ASL ZP,X
(0: @FETCH
(1: @ZPX
@ASL_M
 
#17: % *SLO ZP,X - incomplete
(0: @FETCH
(1: @ZPX
@UNDOC
 
#18: % CLC
(0: @FETCH
@CF_OPERATE
 
 
#19: % ORA ABS,Y
(0: @FETCH
(1: @ABSY_READ
@ORA
 
#1A: % *NOP
(0: @FETCH
(1: @NOP
 
#1B: % *SLO ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_WRITE
@UNDOC
 
 
#1C: % *NOP ABS,X
(0: @FETCH
(1: @ABSX_READ
@NOP
 
#1D: % ORA ABS,X
(0: @FETCH
(1: @ABSX_READ
@ORA
 
 
#1E: % ASL ABS,X
(0: @FETCH
(1: @ABSX_WRITE
@ASL_M
 
#1F: % *SLO ABS,X - incomplete
(0: @FETCH
(1: @ABSX_WRITE
@UNDOC
 
#20: % JSR ABS
(0: @FETCH
(1: @JSR_ABS
 
#21: % AND (IND,X)
(0: @FETCH
(1: @INDX
@AND
 
#23: % *RLA (IND,X) - incomplete
(0: @FETCH
(1: @INDX
@UNDOC
 
#24: % BIT ZP
(0: @FETCH
(1: @ZP
@BIT
 
#25: % AND ZP
(0: @FETCH
(1: @ZP
@AND
 
#26: % ROL ZP
(0: @FETCH
(1: @ZP
@ROL_M
 
#27: % *RLA ZP - incomplete
(0: @FETCH
(1: @ZP
@UNDOC
 
 
#28: % PLP
(0: @FETCH
(1: @PLP
 
 
#29: % AND #IMM
(0: @FETCH
(1: @IMM
@AND
 
#2A: % ROL A
(0: @FETCH
@ROL_A
 
#2B: % *ANC #IMM - incomplete
(0: @FETCH
(1: @IMM
@UNDOC
 
#2C: % BIT ABS
(0: @FETCH
(1: @ABS
@BIT
 
#2D: % AND ABS
(0: @FETCH
(1: @ABS
@AND
 
#2E: % ROL ABS
(0: @FETCH
(1: @ABS
@ROL_M
 
#2F: % *RLA ABS - incomplete
(0: @FETCH
(1: @ABS
@UNDOC
 
#30: % BMI REL
(0: @FETCH
(1: @REL_READ
@NF_TEST
@REL_JUMP
 
#31: % AND (IND),Y
(0: @FETCH
(1: @INDY_READ
@AND
 
#33: % *RLA (IND),Y - incomplete
(0: @FETCH
(1: @INDY_WRITE
@UNDOC
 
 
#34: % *NOP ZP,X
(0: @FETCH
(1: @ZPX
@NOP
 
#35: % AND ZP,X
(0: @FETCH
(1: @ZPX
@AND
 
#36: % ROL ZP,X
(0: @FETCH
(1: @ZPX
@ROL_M
 
#37: % *RLA ZP,X - incomplete
(0: @FETCH
(1: @ZPX
@UNDOC
 
#38: % SEC
(0: @FETCH
@CF_OPERATE
 
#39: % AND ABS,Y
(0: @FETCH
(1: @ABSY_READ
@AND
 
#3A: % *NOP
(0: @FETCH
(1: @NOP
 
#3B: % *RLA ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_WRITE
@UNDOC
 
#3C: % *NOP ABS,X
(0: @FETCH
(1: @ABSX_READ
@NOP
 
#3D: % AND ABS,X
(0: @FETCH
(1: @ABSX_READ
@AND
 
#3E: % ROL ABS,X
(0: @FETCH
(1: @ABSX_WRITE
@ROL_M
 
#3F: % *RLA ABS,X - incomplete
(0: @FETCH
(1: @ABSX_WRITE
@UNDOC
 
 
#40: % RTI
(0: @FETCH
(1: @RTI
 
#41: % EOR (IND,X)
(0: @FETCH
(1: @INDX
@EOR
 
#43: % *SRE (IND,X) - incomplete
(0: @FETCH
(1: @INDX
@UNDOC
 
#44: % *NOP ZP
(0: @FETCH
(1: @ZP
@NOP
 
#45: % EOR ZP
(0: @FETCH
(1: @ZP
@EOR
 
#46: % LSR ZP
(0: @FETCH
(1: @ZP
@LSR_M
 
#47: % *SRE ZP - incomplete
(0: @FETCH
(1: @ZP
@UNDOC
 
#48: % PHA
(0: @FETCH
(1: @PHA
 
 
#49: % EOR #IMM
(0: @FETCH
(1: @IMM
@EOR
 
#4A: % LSR A
(0: @FETCH
@LSR_A
 
#4B: % *ALR #IMM - incomplete
(0: @FETCH
(1: @IMM
@UNDOC
 
#4C: % JMP ABS
(0: @FETCH
(1: @ABS
@JMP
 
#4D: % EOR ABS
(0: @FETCH
(1: @ABS
@EOR
 
#4E: % LSR ABS
(0: @FETCH
(1: @ABS
@LSR_M
 
#4F: % *SRE ABS - incomplete
(0: @FETCH
(1: @ABS
@UNDOC
 
#50: % BVC REL
(0: @FETCH
(1: @REL_READ
@VF_TEST
@REL_JUMP
 
#51: % EOR (IND),Y
(0: @FETCH
(1: @INDY_READ
@EOR
 
#53: % *SRE (IND),Y - incomplete
(0: @FETCH
(1: @INDY_WRITE
@UNDOC
 
#54: % *NOP ZP,X
(0: @FETCH
(1: @ZPX
@NOP
 
#55: % EOR ZP,X
(0: @FETCH
(1: @ZPX
@EOR
 
#56: % LSR ZP,X
(0: @FETCH
(1: @ZPX
@LSR_M
 
#57: % *SRE ZP,X - incomplete
(0: @FETCH
(1: @ZPX
@UNDOC
 
#58: % CLI
(0: @FETCH
@IF_OPERATE
 
#59: % EOR ABS,Y
(0: @FETCH
(1: @ABSY_READ
@EOR
 
#5A: % *NOP
(0: @FETCH
(1: @NOP
 
#5B: % *SRE ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_WRITE
@UNDOC
 
#5C: % *NOP ABS,X
(0: @FETCH
(1: @ABSX_READ
@NOP
 
#5D: % EOR ABS,X
(0: @FETCH
(1: @ABSX_READ
@EOR
 
#5E: % LSR ABS,X
(0: @FETCH
(1: @ABSX_WRITE
@LSR_M
 
#5F: % *SRE ABS,X - incomplete
(0: @FETCH
(1: @ABSX_WRITE
@UNDOC
 
 
 
#60: % RTS
(0: @FETCH
(1: @RTS
 
#61: % ADC (IND,X)
(0: @FETCH
(1: @INDX
@ADC
 
#63: % *RRA (IND,X) - incomplete
(0: @FETCH
(1: @INDX
@UNDOC
 
#64: % *NOP ZP
(0: @FETCH
(1: @ZP
@NOP
 
#65: % ADC ZP
(0: @FETCH
(1: @ZP
@ADC
 
#66: % ROR ZP
(0: @FETCH
(1: @ZP
@ROR_M
 
#67: % *RRA ZP - incomplete
(0: @FETCH
(1: @ZP
@UNDOC
 
#68: % PLA
(0: @FETCH
(1: @PLA
 
 
#69: % ADC #IMM
(0: @FETCH
(1: @IMM
@ADC
 
#6A: % ROR A
(0: @FETCH
@ROR_A
 
#6B: % *ARR #IMM - incomplete
(0: @FETCH
(1: @IMM
@UNDOC
 
#6C: % JMP (IND)
(0: @FETCH
(1: @IND_JMP
 
#6D: % ADC ABS
(0: @FETCH
(1: @ABS
@ADC
 
#6E: % ROR ABS
(0: @FETCH
(1: @ABS
@ROR_M
 
#6F: % *RRA ABS - uncomplete
(0: @FETCH
(1: @ABS
@UNDOC
 
#70: % BVS REL
(0: @FETCH
(1: @REL_READ
@VF_TEST
@REL_JUMP
 
#71: % ADC (IND),Y
(0: @FETCH
(1: @INDY_READ
@ADC
 
#73: % *RRA (IND),Y - incomplete
(0: @FETCH
(1: @INDY_WRITE
@UNDOC
 
#74: % *NOP ZP,X
(0: @FETCH
(1: @ZPX
@NOP
 
#75: % ADC ZP,X
(0: @FETCH
(1: @ZPX
@ADC
 
#76: % ROR ZP,X
(0: @FETCH
(1: @ZPX
@ROR_M
 
#77: % *RRA ZP,X - incomplete
(0: @FETCH
(1: @ZPX
@UNDOC
 
#78: % SEI
(0: @FETCH
@IF_OPERATE
 
 
#79: % ADC ABS,Y
(0: @FETCH
(1: @ABSY_READ
@ADC
 
#7A: % *NOP
(0: @FETCH
(1: @NOP
 
#7B: % *RRA ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_WRITE
@UNDOC
 
#7C: % *NOP ABS,X
(0: @FETCH
(1: @ABSX_READ
@NOP
 
#7D: % ADC ABS,X
(0: @FETCH
(1: @ABSX_READ
@ADC
 
#7E: % ROR ABS,X
(0: @FETCH
(1: @ABSX_WRITE
@ROR_M
 
#7F: % *RRA ABS,X - incomplete
(0: @FETCH
(1: @ABSX_WRITE
@UNDOC
 
 
#80: % *NOP #IMM
(0: @FETCH
(1: @IMM
@NOP
 
#81: % STA (IND,X)
(0: @FETCH
(1: @INDX
@STA
 
#82: % *NOP #IMM
(0: @FETCH
(1: @IMM
@NOP
 
#83: % *SAX (IND,X) - incomplete
(0: @FETCH
(1: @INDX
@UNDOC
 
#84: % STY ZP
(0: @FETCH
(1: @ZP
@STY
 
#85: % STA ZP
(0: @FETCH
(1: @ZP
@STA
 
#86: % STX ZP
(0: @FETCH
(1: @ZP
@STX
 
#87: % *SAX ZP - incomplete
(0: @FETCH
(1: @ZP
@UNDOC
 
#88: % DEY
(0: @FETCH
(1: @DEY
 
 
#89: % *NOP #IMM
(0: @FETCH
(1: @IMM
@NOP
 
#8A: % TXA
(0: @FETCH
(1: @TXA
 
#8B: % *XAA - incomplete
(0: @FETCH
(1: @UNDOC
 
#8C: % STY ABS
(0: @FETCH
(1: @ABS
@STY
 
#8D: % STA ABS
(0: @FETCH
(1: @ABS
@STA
 
#8E: % STX ABS
(0: @FETCH
(1: @ABS
@STX
 
#8F: % *SAX ABS - incomplete
(0: @FETCH
(1: @ABS
@UNDOC
 
#90: % BCC REL
(0: @FETCH
(1: @REL_READ
@CF_TEST
@REL_JUMP
 
#91: % STA (IND),Y
(0: @FETCH
(1: @INDY_WRITE
@STA
 
#93: % *SAX (IND),Y - incomplete
(0: @FETCH
(1: @INDY_WRITE
@UNDOC
 
#94: % STY ZP,X
(0: @FETCH
(1: @ZPX
@STY
 
#95: % STA ZP,X
(0: @FETCH
(1: @ZPX
@STA
 
#96: % STX ZP,Y
(0: @FETCH
(1: @ZPY
@STX
 
#97: % *SAX ZP,Y - incomplete
(0: @FETCH
(1: @ZPY
@UNDOC
 
#98: % TYA
(0: @FETCH
(1: @TYA
 
 
#99: % STA ABS,Y
(0: @FETCH
(1: @ABSY_WRITE
@STA
 
#9A: % TXS
(0: @FETCH
(1: @TXS
 
#9B: % *TAS ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_WRITE
@UNDOC
 
#9C: % *SHY ABS,X - incomplete
(0: @FETCH
(1: @ABSX_WRITE
@UNDOC
 
#9D: % STA ABS,X
(0: @FETCH
(1: @ABSX_WRITE
@STA
 
#9E: % *SHX ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_WRITE
@UNDOC
 
#9F: % *AHX ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_WRITE
@UNDOC
 
 
#A0: % LDY #IMM
(0: @FETCH
(1: @IMM
@LDY
 
#A1: % LDA (IND,X)
(0: @FETCH
(1: @INDX
@LDA
 
#A2: % LDX #IMM
(0: @FETCH
(1: @IMM
@LDX
 
#A3: % *LAX (IND,X)
(0: @FETCH
(1: @INDX
@LAX
 
#A4: % LDY ZP
(0: @FETCH
(1: @ZP
@LDY
 
#A5: % LDA ZP
(0: @FETCH
(1: @ZP
@LDA
 
#A6: % LDX ZP
(0: @FETCH
(1: @ZP
@LDX
 
#A7: % *LAX ZP
(0: @FETCH
(1: @ZP
@LAX
 
#A8: % TAY
(0: @FETCH
(1: @TAY
 
#A9: % LDA #IMM
(0: @FETCH
(1: @IMM
@LDA
 
#AA: % TAX
(0: @FETCH
(1: @TAX
 
#AB: % *LAX #IMM
(0: @FETCH
(1: @IMM
@LAX
 
 
 
#AC: % LDY ABS
(0: @FETCH
(1: @ABS
@LDY
 
#AD: % LDA ABS
(0: @FETCH
(1: @ABS
@LDA
 
#AE: % LDX ABS
(0: @FETCH
(1: @ABS
@LDX
 
#AF: % *LAX ABS
(0: @FETCH
(1: @ABS
@LAX
 
#B0: % BCS REL
(0: @FETCH
(1: @REL_READ
@CF_TEST
@REL_JUMP
 
 
#B1: % LDA (IND),Y
(0: @FETCH
(1: @INDY_READ
@LDA
 
#B3: % *LAX (IND),Y
(0: @FETCH
(1: @INDY_READ
@LAX
 
#B4: % LDY ZP,X
(0: @FETCH
(1: @ZPX
@LDY
 
#B5: % LDA ZP,X
(0: @FETCH
(1: @ZPX
@LDA
 
#B6: % LDX ZP,Y
(0: @FETCH
(1: @ZPY
@LDX
 
#B7: % *LAX ZP,Y
(0: @FETCH
(1: @ZPY
@LAX
 
#B8: % CLV
(0: @FETCH
@VF_CLEAR
 
#B9: % LDA ABS,Y
(0: @FETCH
(1: @ABSY_READ
@LDA
 
#BA: % TSX
(0: @FETCH
(1: @TSX
 
 
#BB: % *LAS ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_READ
@UNDOC
 
#BC: % LDY ABS,X
(0: @FETCH
(1: @ABSX_READ
@LDY
 
#BD: % LDA ABS,X
(0: @FETCH
(1: @ABSX_READ
@LDA
 
#BE: % LDX ABS,Y
(0: @FETCH
(1: @ABSY_READ
@LDX
 
#BF: % *LAX ABS,Y
(0: @FETCH
(1: @ABSY_READ
@LAX
 
 
 
 
#C0: % CPY #IMM
(0: @FETCH
(1: @IMM
@CPY
 
#C1: % CMP (IND,X)
(0: @FETCH
(1: @INDX
@CMP
 
#C2: % *NOP #IMM
(0: @FETCH
(1: @IMM
@NOP
 
#C3: % *DCP (IND,X) - incomplete
(0: @FETCH
(1: @INDX
@UNDOC
 
#C4: % CPY ZP
(0: @FETCH
(1: @ZP
@CPY
 
#C5: % CMP ZP
(0: @FETCH
(1: @ZP
@CMP
 
#C6: % DEC ZP
(0: @FETCH
(1: @ZP
@DEC_M
 
#C7: % *DCP ZP - incomplete
(0: @FETCH
(1: @ZP
@UNDOC
 
#C8: % INY
(0: @FETCH
(1: @INY
 
#C9: % CMP #IMM
(0: @FETCH
(1: @IMM
@CMP
 
#CA: % DEX
(0: @FETCH
(1: @DEX
 
#CB: % *AXS #IMM - incomplete
(0: @FETCH
(1: @IMM
@UNDOC
 
 
#CC: % CPY ABS
(0: @FETCH
(1: @ABS
@CPY
 
#CD: % CMP ABS
(0: @FETCH
(1: @ABS
@CMP
 
#CE: % DEC ABS
(0: @FETCH
(1: @ABS
@DEC_M
 
#CF: % *DCP ABS - incomplete
(0: @FETCH
(1: @ABS
@UNDOC
 
#D0: % BNE REL
(0: @FETCH
(1: @REL_READ
@ZF_TEST
@REL_JUMP
 
#D1: % CMP (IND),Y
(0: @FETCH
(1: @INDY_READ
@CMP
 
#D3: % *DCP (IND),Y - incomplete
(0: @FETCH
(1: @INDY_READ
@UNDOC
 
#D4: % *NOP ZP,X
(0: @FETCH
(1: @ZPX
@NOP
 
#D5: % CMP ZP,X
(0: @FETCH
(1: @ZPX
@CMP
 
#D6: % DEC ZP,X
(0: @FETCH
(1: @ZPX
@DEC_M
 
#D7: % *DCP ZP,X - incomplete
(0: @FETCH
(1: @ZPX
@UNDOC
 
#D8: % CLD
(0: @FETCH
@DF_OPERATE
 
#D9: % CMP ABS,Y
(0: @FETCH
(1: @ABSY_READ
@CMP
 
#DA: % *NOP
(0: @FETCH
(1: @NOP
 
#DB: % *DCP ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_READ
@UNDOC
 
#DC: % *NOP ABS,X
(0: @FETCH
(1: @ABSX_READ
@NOP
 
#DD: % CMP ABS,X
(0: @FETCH
(1: @ABSX_READ
@CMP
 
#DE: % DEC ABS,X
(0: @FETCH
(1: @ABSX_WRITE
@DEC_M
 
#DF: % *DCP ABS,X - incomplete
(0: @FETCH
(1: @ABSX_WRITE
@UNDOC
 
 
#E0: % CPX #IMM
(0: @FETCH
(1: @IMM
@CPX
 
#E1: % SBC (IND,X)
(0: @FETCH
(1: @INDX
@SBC
 
#E2: % *NOP #IMM
(0: @FETCH
(1: @IMM
@NOP
 
#E3: % *ISC (IND,X) - incomplete
(0: @FETCH
(1: @INDX
@UNDOC
 
 
#E4: % CPX ZP
(0: @FETCH
(1: @ZP
@CPX
 
#E5: % SBC ZP
(0: @FETCH
(1: @ZP
@SBC
 
#E6: % INC ZP
(0: @FETCH
(1: @ZP
@INC_M
 
#E7: % *ISC ZP - incomplete
(0: @FETCH
(1: @ZP
@UNDOC
 
#E8: % INX
(0: @FETCH
(1: @INX
 
#E9: % SBC #IMM
(0: @FETCH
(1: @IMM
@SBC
 
#EA: % NOP
(0: @FETCH
(1: @NOP
 
#EB: % *SBC #IMM
(0: @FETCH
(1: @IMM
@SBC
 
#EC: % CPX ABS
(0: @FETCH
(1: @ABS
@CPX
 
#ED: % SBC ABS
(0: @FETCH
(1: @ABS
@SBC
 
#EE: % INC ABS
(0: @FETCH
(1: @ABS
@INC_M
 
#EF: % *ISC ABS - incomplete
(0: @FETCH
(1: @ABS
@UNDOC
 
#F0: % BEQ REL
(0: @FETCH
(1: @REL_READ
@ZF_TEST
@REL_JUMP
 
#F1: % SBC (IND),Y
(0: @FETCH
(1: @INDY_READ
@SBC
 
#F3: % *ISC (IND),Y - incomplete
(0: @FETCH
(1: @INDY_READ
@UNDOC
 
#F4: % *NOP ZP,X
(0: @FETCH
(1: @ZPX
@NOP
 
 
#F5: % SBC ZP,X
(0: @FETCH
(1: @ZPX
@SBC
 
#F6: % INC ZP,X
(0: @FETCH
(1: @ZPX
@INC_M
 
#F7: % *ISC ZP,X - incomplete
(0: @FETCH
(1: @ZPX
@UNDOC
 
 
#F8: % SED
(0: @FETCH
@DF_OPERATE
 
 
#F9: % SBC ABS,Y
(0: @FETCH
(1: @ABSY_READ
@SBC
 
#FA: % *NOP
(0: @FETCH
(1: @NOP
 
#FB: % *ISC ABS,Y - incomplete
(0: @FETCH
(1: @ABSY_READ
@UNDOC
 
 
#FC: % *NOP ABS,X
(0: @FETCH
(1: @ABSX_READ
@NOP
 
#FD: % SBC ABS,X
(0: @FETCH
(1: @ABSX_READ
@SBC
 
#FE: % INC ABS,X
(0: @FETCH
(1: @ABSX_WRITE
@INC_M
 
#FF: % *ISC ABS,X - incomplete
(0: @FETCH
(1: @ABSX_READ
@UNDOC
/ag_6502/trunk/genstates/make.bat
0,0 → 1,2032
cl -D_CRT_SECURE_NO_DEPRECATE genstates.c
/ag_6502/trunk/genstates/genstates.c
0,0 → 1,1189
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
 
 
#define ACTION_INVALID 0
#define ACTION_ASSIGN 1
#define ACTION_EXEC 2
 
 
int opt_level = 1; // 0 to allow verilog optimizer to produce better design,
// (-1) to do not even find common bits
 
struct STATE_ACTION
{
int atype;
const char*astr;
const char*astr_parsed; // w/o spaces, used to compare
};
 
#define TIME_ANY (-1)
#define TIME_INC (-2)
#define PHASE_ANY (-1)
 
#define NO_CODE (-1)
#define NO_MACROS (-1)
 
#define MIN_TIME 0
#define MAX_TIME 7
#define MIN_PHASE 1
#define MAX_PHASE 2
 
#define TIME_COUNT (MAX_TIME - MIN_TIME + 1)
 
struct STATE_ENTRY
{
int time, phase;
int action_id;
};
 
#define MAX_MACROS_SIZE 256
 
struct STATE_MACROS
{
const char*name;
int n_entries;
int entries[MAX_MACROS_SIZE];
};
 
#define MAX_CODE_SIZE 64
struct STATE_CODE
{
const char*comment;
int n_entries;
int entries[MAX_CODE_SIZE];
};
 
 
#define MAX_ACTIONS 8192
#define MAX_ENTRIES 8192
#define MAX_MACROSES 8192
#define MAX_CODES 512
 
#define MAX_STRING 1024
 
struct STATE_DATA
{
int n_actions, n_entries, n_macroses;
struct STATE_ACTION actions[MAX_ACTIONS];
struct STATE_ENTRY entries[MAX_ENTRIES];
struct STATE_MACROS macroses[MAX_MACROSES];
struct STATE_CODE codes[MAX_CODES];
 
int cur_time, cur_phase, cur_code, cur_macros;
};
 
static const char SPACES[] = " \t";
 
int get_action_code(const char*str)
{
return strstr(str, "<=")?ACTION_EXEC: ACTION_ASSIGN;
}
 
void clean_action(const char*str, char*buf)
{
for (; *str; ++str) if (!strchr(SPACES, *str)) *buf++ = *str;
*buf = 0;
}
 
void action_to_name(const char*str, char*buf)
{
for (; *str; ++str, ++buf) {
if (!isalnum(*str)) *buf = '_';
else *buf = *str;
}
*buf = 0;
}
 
int find_action(struct STATE_DATA*sd, const char*buf)
{
int i;
for (i = 0; i < sd->n_actions; ++i) {
if (!strcmp(sd->actions[i].astr_parsed, buf)) return i;
}
return -1;
}
 
int append_action(struct STATE_DATA*sd, const char*str)
{
char buf[MAX_STRING];
struct STATE_ACTION*a = sd->actions + sd->n_actions;
int r;
assert(sd->n_actions < MAX_ACTIONS);
clean_action(str, buf);
// puts(buf);
r = find_action(sd, buf);
if (r >= 0) return r;
a->atype = get_action_code(buf);
if (a->atype == ACTION_INVALID) {
fprintf(stderr, "invalid action: %s\n", str);
abort();
}
a->astr = _strdup(str);
a->astr_parsed = _strdup(buf);
return sd->n_actions++;
}
 
int find_entry(struct STATE_DATA*sd, int time, int phase, int action_id)
{
int i;
struct STATE_ENTRY*e = sd->entries;
for (i = 0; i < sd->n_entries; ++i, ++e) {
if (e->time == time && e->phase == phase && e->action_id == action_id) return i;
}
return -1;
}
 
int append_entry_copy(struct STATE_DATA*sd, int time, int phase, int action_id)
{
struct STATE_ENTRY*e = sd->entries + sd->n_entries;
int r;
r = find_entry(sd, time, phase, action_id);
if (r >= 0) return r;
assert(sd->n_entries < MAX_ENTRIES);
e->time = time;
e->phase = phase;
e->action_id = action_id;
return sd->n_entries++;
}
 
 
int append_entry(struct STATE_DATA*sd, int time, int phase, const char*str)
{
return append_entry_copy(sd, time, phase, append_action(sd, str));
}
 
int find_macros(struct STATE_DATA*sd, const char*name)
{
int i;
for (i = 0; i < sd->n_macroses; ++i) {
if (!strcmp(sd->macroses[i].name, name)) return i;
}
return -1;
}
 
int append_macros(struct STATE_DATA*sd, const char*name)
{
struct STATE_MACROS*m = sd->macroses + sd->n_macroses;
int r;
assert(sd->n_macroses < MAX_MACROSES);
r = find_macros(sd, name);
if (r >= 0) return r;
m->name = _strdup(name);
m->n_entries = 0;
return sd->n_macroses++;
}
 
int find_macros_entry(struct STATE_DATA*sd, int macro_id, int entry_id)
{
struct STATE_MACROS*m = sd->macroses + macro_id;
int i;
assert(macro_id >= 0 && macro_id < sd->n_macroses);
for (i = 0; i < m->n_entries; ++i) {
if (m->entries[i] == entry_id) return i;
}
return -1;
}
 
int append_macros_entry(struct STATE_DATA*sd, int macro_id, int entry_id)
{
struct STATE_MACROS*m = sd->macroses + macro_id;
int r;
// r = find_macros_entry(sd, macro_id, entry_id);
// if (r >= 0) return r;
assert(macro_id >= 0 && macro_id < sd->n_macroses);
assert(m->n_entries < MAX_MACROS_SIZE);
m->entries[m->n_entries++] = entry_id;
return m->n_entries - 1;
}
 
 
int append_code(struct STATE_DATA*sd, int value, const char*comment)
{
struct STATE_CODE*c = sd->codes + value;
assert(value >= 0 && value < MAX_CODES);
if (!c->comment) c->comment = comment?_strdup(comment):NULL;
else return -5;
return value;
}
 
 
int find_code_entry(struct STATE_DATA*sd, int code_id, int entry_id)
{
struct STATE_CODE*c = sd->codes + code_id;
int i;
assert(code_id >= 0 && code_id < MAX_CODES);
for (i = 0; i < c->n_entries; ++i) {
if (c->entries[i] == entry_id) return i;
}
return -1;
}
 
int append_code_entry(struct STATE_DATA*sd, int code_id, int entry_id)
{
struct STATE_CODE*c = sd->codes + code_id;
int r;
r = find_code_entry(sd, code_id, entry_id);
if (r >= 0) return r;
assert(code_id >= 0 && code_id < MAX_CODES);
assert(c->n_entries < MAX_CODE_SIZE);
c->entries[c->n_entries++] = entry_id;
return c->n_entries - 1;
}
 
int clear_data(struct STATE_DATA*sd)
{
memset(sd, 0, sizeof(*sd));
sd->cur_time = TIME_ANY;
sd->cur_phase = PHASE_ANY;
sd->cur_code = NO_CODE;
sd->cur_macros = NO_MACROS;
return 0;
}
 
int append_code_macros(struct STATE_DATA*sd, int code_id, int m_id)
{
struct STATE_MACROS*s = sd->macroses + m_id;
int i, r;
// printf("append_code_macros (%02X, %i): n_entries = %i\n", code_id, m_id, s->n_entries);
for (i = 0; i < s->n_entries; ++i) {
int e = s->entries[i];
int t = sd->entries[e].time;
int ph = sd->entries[e].phase;
if (t == TIME_INC) {
if (sd->cur_time == TIME_ANY) {
return -4;
}
t = sd->cur_time + 1;
}
if (t == TIME_ANY) t = sd->cur_time;
if (ph == PHASE_ANY) ph = sd->cur_phase;
if (t == TIME_ANY) return -1;
if (ph == PHASE_ANY) return -2;
sd->cur_time = t;
sd->cur_phase = ph;
r = append_code_entry(sd, code_id, append_entry_copy(sd, t, ph, sd->entries[e].action_id));
// printf("append_code_entry: %i: action_id = %i\n", r, sd->entries[e].action_id);
if (r < 0) return -3;
}
return 0;
}
 
int append_macros_macros(struct STATE_DATA*sd, int macro_id, int m_id)
{
struct STATE_MACROS*s = sd->macroses + m_id;
int i, r;
for (i = 0; i < s->n_entries; ++i) {
int e = s->entries[i];
int t = sd->entries[e].time;
int ph = sd->entries[e].phase;
if (t == TIME_ANY) t = sd->cur_time;
if (ph == PHASE_ANY) ph = sd->cur_phase;
sd->cur_time = t;
sd->cur_phase = ph;
r = append_macros_entry(sd, macro_id, append_entry_copy(sd, t, ph, sd->entries[e].action_id));
if (r < 0) return -3;
}
return 0;
}
 
 
int insert_macros(struct STATE_DATA*sd, const char*str)
{
int m_id, r;
m_id = find_macros(sd, str);
// printf("insert_macros: %s (%i)\n", str, m_id);
if (m_id < 0) {
fprintf(stderr, "error: unable to find macros: %s\n", str);
return 50;
}
if (sd->cur_code != NO_CODE) {
r = append_code_macros(sd, sd->cur_code, m_id);
} else {
r = append_macros_macros(sd, sd->cur_macros, m_id);
}
if (r < 0) {
fprintf(stderr, "error: unable to insert macros: %s: %i\n", str, r);
return 51;
}
return 0;
}
 
int parse_action(struct STATE_DATA*sd, char*str)
{
int e, r;
char*p;
p = strchr(str, '%');
if (p) *p = 0; // remove comment
// printf("action: %s\n", str);
if (sd->cur_code == NO_CODE && sd->cur_macros == NO_MACROS) {
fprintf(stderr, "error: no current macros or code in action: %s\n", str);
return 41;
}
if (str[0] == '@') return insert_macros(sd, str + 1);
if (sd->cur_code != NO_CODE && (sd->cur_time == TIME_ANY || sd->cur_phase == PHASE_ANY)) {
fprintf(stderr, "error: no current phase or time in action: %s\n", str);
return 42;
}
e = append_entry(sd, sd->cur_time, sd->cur_phase, str);
if (sd->cur_code != NO_CODE) {
r = append_code_entry(sd, sd->cur_code, e);
} else {
r = append_macros_entry(sd, sd->cur_macros, e);
}
if (r < 0) {
fprintf(stderr, "error: unable to append action: %s\n", str);
return 43;
}
return 0;
}
 
int parse_code(struct STATE_DATA*sd, char*str)
{
char*p, *c = NULL;
int v;
v = strtoul(str, &p, 16);
if (p[0] != ':') {
fprintf(stderr, "error: invalid code format: %s\n", str);
return 20;
}
++ p; p += strspn(p, SPACES);
if (p[0]) {
if (p[0] == '%') {
c = p + 1;
} else {
fprintf(stderr, "error: invalid code comment %s: %i\n", str, sd->cur_code);
return 22;
}
}
sd->cur_code = append_code(sd, v, c);
if (sd->cur_code < 0) {
fprintf(stderr, "error: unable to append code %s: %i\n", str, sd->cur_code);
return 21;
}
sd->cur_macros = NO_MACROS;
sd->cur_time = TIME_ANY;
sd->cur_phase = PHASE_ANY;
return 0;
}
 
int parse_macros(struct STATE_DATA*sd, char*str)
{
char*p = strchr(str, ':');
if (!p || p[1]) {
fprintf(stderr, "error: invalid macros format: %s\n", str);
return 30;
}
*p = 0;
sd->cur_macros = append_macros(sd, str);
if (sd->cur_macros < 0) {
fprintf(stderr, "error: unable to append macros %s: %i\n", str, sd->cur_macros);
return 31;
}
sd->cur_code = NO_CODE;
sd->cur_time = TIME_ANY;
sd->cur_phase = PHASE_ANY;
return 0;
}
 
int parse_place(struct STATE_DATA*sd, char*str)
{
int t, ph;
char*p, *s0 = str;
if (str[0] == '+' && str[1] == ':') {
if (sd->cur_time == TIME_ANY) {
if (sd->cur_code != NO_CODE) {
fprintf(stderr, "error: no current time for increment: %s\n", str);
return 14;
} else {
sd->cur_time = TIME_INC;
}
} else ++sd->cur_time;
++str;
}
if (str[0] != ':') {
t = strtoul(str, &p, 10);
if (*p != ':') {
fprintf(stderr, "error: invalid place format: %s\n", str);
return 10;
}
if (t < MIN_TIME || t > MAX_TIME) {
fprintf(stderr, "error: invalid time value: %i\n", t);
return 11;
}
sd->cur_time = t;
str = p;
}
++str;
if (!strchr(SPACES, str[0])) {
ph = strtoul(str, &p, 10);
if (!strchr(SPACES, *p)) {
fprintf(stderr, "error: invalid place format: %s\n", str);
return 12;
}
if (ph < MIN_PHASE || ph > MAX_PHASE) {
fprintf(stderr, "error: invalid phase value: %i\n", ph);
return 13;
}
sd->cur_phase = ph;
str = p;
}
++str;
return str - s0 + strspn(str, SPACES) + 1;
}
 
int parse_line(struct STATE_DATA*sd, char*str)
{
int n = strspn(str, SPACES), r;
if (!str[n]) return 0;
switch (str[0]) {
case '#':
return parse_code(sd, str + 1);
case '@':
return parse_macros(sd, str + 1);
case '(':
n = parse_place(sd, str + 1);
if (n < 0) return n;
case ' ': case '\t':
r = parse_action(sd, str + n);
if (sd->cur_time == TIME_INC) sd->cur_time = TIME_ANY;
return r;
case '%':
return 0; // comment
}
fprintf(stderr, "error: invalid string format: %s\n", str);
return 9;
}
 
int load_data(struct STATE_DATA*sd, const char*fname)
{
FILE*in;
int lno = 0;
int r = 0;
char buf[MAX_STRING];
 
in = fopen(fname, "rt");
if (!in) {
perror(fname);
return -1;
}
 
while (fgets(buf, sizeof(buf), in)) {
int l;
++ lno;
l = strlen(buf);
if (l && buf[l - 1] == '\n') buf[--l] = 0;
r = parse_line(sd, buf);
if (r) {
fprintf(stderr, "%s: error parsing line %i: %i\n", fname, lno, r);
break;
}
}
fclose(in);
return r;
}
 
int write_data(struct STATE_DATA*sd, const char*fname)
{
FILE*out;
int i, j, k, l, ct, cp;
out = fopen(fname, "wt");
if (!out) {
perror(fname);
return -1;
}
 
for (i = 0; i < MAX_CODES; ++i) {
struct STATE_CODE*c = sd->codes + i;
if (!c->n_entries) continue;
ct = TIME_ANY;
cp = PHASE_ANY;
if (c->comment) fprintf(out, "#%02X: %%%s\n", i, c->comment);
else fprintf(out, "#%02X:\n", i);
for (j = MIN_TIME; j <= MAX_TIME; ++j) {
for (k = MIN_PHASE; k <= MAX_PHASE; ++k) {
for (l = 0; l < c->n_entries; ++l) {
struct STATE_ENTRY*e = sd->entries + c->entries[l];
if (e->time != j || e->phase != k) continue;
if (ct != j || cp != k) {
fprintf(out, "(%i:%i", j, k);
ct = j;
cp = k;
}
fprintf(out, "\t%s\n", sd->actions[e->action_id].astr);
}
}
}
fprintf(out, "\n");
}
 
fclose(out);
return 0;
}
 
int validate_data(struct STATE_DATA*sd)
{
int i, j;
 
for (i = 0; i < MAX_CODES; ++i) {
struct STATE_CODE*c = sd->codes + i;
if (!c->n_entries) continue;
for (j = 0; j < c->n_entries; ++j) {
struct STATE_ENTRY*e = sd->entries + c->entries[j];
struct STATE_ACTION*a = sd->actions + e->action_id;
if (e->phase == 2 && a->atype == ACTION_ASSIGN) {
fprintf(stderr, "error: no assignments are valid in phase 2 for code %02X: %s\n",
i, a->astr);
return -10;
}
}
}
return 0;
}
 
 
int code_has_action(struct STATE_DATA*sd, int code_id, int time, int action_id)
{
struct STATE_CODE*c = sd->codes + code_id;
int i;
 
for (i = 0; i < c->n_entries; ++i) {
if (sd->entries[c->entries[i]].time == time && sd->entries[c->entries[i]].action_id == action_id) return 1;
}
return 0;
}
 
 
#define CODE_NONE 0
#define CODE_ACTION 1
 
#define BIT_COMMON 0
#define BIT_OTHER 1
 
#define N_BITS (8+3)
 
#define VBIT_0 0
#define VBIT_1 1
#define VBIT_UNKNOWN 2
#define VBIT_VAR 3
 
unsigned prepare_selector(int code, int time)
{
return code | (time << 8);
}
 
void print_selector(FILE*out, unsigned sel)
{
int k;
for (k = N_BITS - 1; k >= 0; --k, sel <<= 1) {
int c;
fputc((sel & (1<<(N_BITS - 1)))?'1': '0', out);
if (!(k & 7)) fputc(' ', out);
}
}
 
#define DEBUG 1
 
 
 
unsigned expand_common_bits(FILE*out, unsigned other_mask,
const unsigned other_codes[], int n_other,
int common_bit, int bit_val,
unsigned *mask, unsigned*val,
unsigned sel_mask, unsigned sel_val)
{
int i, j, c;
unsigned m, mc, vc, r;
char out_bits[N_BITS];
mc = 1 << common_bit;
vc = bit_val ? mc: 0;
other_mask &= ~mc;
memset(out_bits, VBIT_UNKNOWN, sizeof(out_bits));
for (j = 0; j < n_other; ++j) {
if ((other_codes[j] & sel_mask) != sel_val) continue;
if ((other_codes[j] & mc) != vc) continue;
for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (!(other_mask & m)) continue;
if (out_bits[i] == VBIT_VAR) continue;
// fprintf(out, "bits[%03X:%i] = %i (%i)\n", other_codes[j], i, out_bits[i], (other_codes[j] & m)?1:0);
if (other_codes[j] & m) {
if (out_bits[i] == VBIT_UNKNOWN)
out_bits[i] = VBIT_1;
else if (out_bits[i] != VBIT_1)
out_bits[i] = VBIT_VAR;
} else {
if (out_bits[i] == VBIT_UNKNOWN)
out_bits[i] = VBIT_0;
else if (out_bits[i] != VBIT_0)
out_bits[i] = VBIT_VAR;
}
}
}
*val = 0;
for (i = 0, r = 0, m = 1, c = 0; i < N_BITS; ++i, m <<= 1) {
if ((out_bits[i] == VBIT_1) || (out_bits[i] == VBIT_0)) {
r |= m;
if (out_bits[i] == VBIT_1) *val |= m;
++ c;
}
}
*mask = r;
return c;
}
 
int check_full_bits(FILE*out, unsigned other_mask,
const unsigned other_codes[], int n_other,
unsigned sel_mask, unsigned sel_val)
{
int i, j;
unsigned m;
int nv;
unsigned test_codes[MAX_CODES * TIME_COUNT];
int n_codes, f_codes;
 
 
/* fprintf(out, "****check_full_bits: other_mask = ");
print_selector(out, other_mask);
fprintf(out, ", sel_mask = ");
print_selector(out, sel_mask);
fprintf(out, ", sel_val = ");
print_selector(out, sel_val);
fprintf(out, "\n");*/
 
if (!other_mask) return 1;
 
 
for (i = 0, nv = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (other_mask & m) ++ nv;
}
assert(nv);
f_codes = 1 << nv;
 
for (j = 0, n_codes = 0; j < n_other; ++j) {
int f = 0;
unsigned oc;
if ((other_codes[j] & sel_mask) != sel_val) continue;
oc = other_codes[j] & other_mask;
for (i = 0; i < n_codes; ++i) {
if (test_codes[i] == oc) {
f = 1;
break;
}
}
if (f) continue;
/* fprintf(out,"uniq code: ");
print_selector(out, oc);
fprintf(out, "\n"); */
test_codes[n_codes++] = oc;
if (n_codes == f_codes) return 1;
}
return 0;
}
 
 
 
int find_common_bit(FILE*out, unsigned other_mask,
const unsigned other_codes[], int n_other,
unsigned sel_mask, unsigned sel_val,
int nn[2], unsigned mm[2], unsigned vv[2])
{
int counts[N_BITS][2];
unsigned masks[N_BITS][2];
unsigned vals[N_BITS][2];
// int fulls[N_BITS][2];
unsigned m, mv;
int i, j;
int max_count = -1;
int max_bit = -1;
 
memset(counts, 0, sizeof(counts));
 
// print available codes
/*
for (j = 0; j < n_other; ++j) {
if ((other_codes[j] & sel_mask) != sel_val) continue;
fprintf(out, "***code[%i]: ", j);
print_selector(out, other_codes[j]);
fprintf(out, "\n");
}
*/
// compute counts
/* for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (!(other_mask & m)) continue;
for (j = 0; j < n_other; ++j) {
if ((other_codes[j] & sel_mask) != sel_val) continue;
++ counts[i][(other_codes[j] & m)?1:0];
}
}
*/
 
for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (!(other_mask & m)) continue;
counts[i][0] = expand_common_bits(out, other_mask,
other_codes, n_other, i, 0,
masks[i] + 0, vals[i] + 0,
sel_mask, sel_val);
counts[i][1] = expand_common_bits(out, other_mask,
other_codes, n_other, i, 1,
masks[i] + 1, vals[i] + 1,
sel_mask, sel_val);
/* fulls[i][0] = check_full_bits(out,
other_mask & ~(masks[i][0] | m),
other_codes, n_other,
sel_mask | (masks[i][0] | m),
sel_val | (vals[i][0]));
fulls[i][1] = check_full_bits(out,
other_mask & ~(masks[i][1] | m),
other_codes, n_other,
sel_mask | (masks[i][1] | m),
sel_val | (vals[i][1] | m));*/
// fprintf(out, "counts[%i] = %i, %i (%i,%i)\n", i,
// counts[i][0], counts[i][1],
// fulls[i][0], fulls[i][1]);
}
 
for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (!(other_mask & m)) continue;
if (max_count < counts[i][0]) {
max_count = counts[i][0];
max_bit = i;
} else if (max_count < counts[i][1]) {
max_count = counts[i][1];
max_bit = i;
}
}
if (max_bit == -1) return -1;
 
// compute result counts
nn[0] = nn[1] = 0;
mv = 1 << max_bit;
for (j = 0; j < n_other; ++j) {
if ((other_codes[j] & sel_mask) != sel_val) continue;
if (other_codes[j] & mv) ++nn[1]; else ++nn[0];
}
 
// nn[0] = counts[max_bit][0];
// nn[1] = counts[max_bit][1];
 
mm[0] = masks[max_bit][0];
mm[1] = masks[max_bit][1];
 
vv[0] = vals[max_bit][0];
vv[1] = vals[max_bit][1];
 
 
 
 
// print counts
/* fprintf(out, "****Counts for mask (max_bit = %i): ", max_bit);
print_selector(out, other_mask);
fprintf(out, "\n");
for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (!(other_mask & m)) continue;
fprintf(out, "//\t\tbit %i: (%i, %i)\n", i, counts[i][0], counts[i][1]);
}*/
 
return max_bit;
}
 
 
int print_sel_bits(FILE*out, unsigned mask, unsigned val)
{
int nv, rv;
int i, iv, vv;
unsigned m;
for (i = 0, nv = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (mask & m) {
++ nv;
iv = i;
vv = (val & m)?1:0;
}
}
if (nv == 1) {
fprintf(out, "%sL[%i]", vv?"":"!", iv);
return 1;
}
fprintf(out, "({");
for (i = 0, rv = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (mask & m) {
if (rv) fprintf(out, ",");
fprintf(out, "L[%i]", i);
++ rv;
}
}
fprintf(out, "} == %i'b", nv);
for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (mask & m) {
fprintf(out, "%c", (val & m)?'1':'0');
}
}
fprintf(out, ")");
return nv;
 
}
 
void print_other(FILE*out, unsigned other_mask, const unsigned other_codes[], int n_other, unsigned sel_mask, unsigned sel_val)
{
int j, nn = 0;
for (j = 0; j < n_other; ++j) {
if ((other_codes[j] & sel_mask) != sel_val) continue;
// if (!nn) fprintf(out, "(");
if (nn) fprintf(out, " || ");
print_sel_bits(out, other_mask, other_codes[j]);
++nn;
}
// if (nn) fprintf(out, ")");
}
 
 
void recurse_other(FILE*out, unsigned other_mask, const unsigned other_codes[], int n_other, unsigned sel_mask, unsigned sel_val, int level)
{
int nn[2];
unsigned mm[2], vv[2];
unsigned cbm;
int cb;
unsigned sm0, sm1, sv0, sv1;
int cf0, cf1;
 
/* fprintf(out, "\n**recurse_other[%i]: n_other = %i, other_mask = ", level, n_other);
print_selector(out, other_mask);
fprintf(out, ", sel_mask = ");
print_selector(out, sel_mask);
fprintf(out, ", sel_val = ");
print_selector(out, sel_val);
fprintf(out, "\n");
*/
if (opt_level != -1 && level >= opt_level) {
print_other(out, other_mask, other_codes, n_other, sel_mask, sel_val);
return;
}
 
if (!other_mask) return;
 
 
cb = find_common_bit(out, other_mask, other_codes, n_other,
sel_mask, sel_val, nn, mm, vv);
if (cb == -1) exit(100);
cbm = 1<<cb;
// expand_common_bits(out, other_mask, other_codes, n_other, cb, 0, &m0, &v0, sel_mask, sel_val);
// expand_common_bits(out, other_mask, other_codes, n_other, cb, 1, &m1, &v1, sel_mask, sel_val);
/* fprintf(out, "** find_common_bit: %i: ", cb);
print_selector(out, mm[0]);
fprintf(out, ", ");
print_selector(out, mm[1]);
fprintf(out, "\n");
*/
if (cbm == other_mask && !mm[0] && !mm[1]) {
fprintf(out, "1'b1");
return;
}
mm[0] |= cbm;
mm[1] |= cbm;
vv[1] |= cbm;
 
sm0 = sel_mask | mm[0];
sm1 = sel_mask | mm[1];
 
sv0 = sel_val | vv[0];
sv1 = sel_val | vv[1];
 
cf0 = check_full_bits(out, other_mask & ~mm[0], other_codes, n_other, sm0, sv0);
cf1 = check_full_bits(out, other_mask & ~mm[1], other_codes, n_other, sm1, sv1);
 
// fprintf(out, "\nnn[0] = %i, nn[1] = %i, cf0 = %i, cf1 = %i\n", nn[0], nn[1], cf0, cf1);
 
if (nn[0]) {
if (!cf0 && nn[1]) {
fprintf(out, "(");
}
print_sel_bits(out, mm[0], vv[0]);
if (!cf0) {
fprintf(out, " && (");
recurse_other(out, other_mask & ~mm[0], other_codes, n_other, sm0, sv0, level + 1);
fprintf(out, ")");
if (nn[1]) fprintf(out, ")");
}
if (nn[1]) fprintf(out, " || ");
}
if (nn[1]) {
if (!cf1 && nn[0]) {
fprintf(out, "(");
}
print_sel_bits(out, mm[1], vv[1]);
if (!cf1) {
fprintf(out, " && (");
recurse_other(out, other_mask & ~mm[1], other_codes, n_other, sm1, sv1, level + 1);
fprintf(out, ")");
if (nn[0]) fprintf(out, ")");
}
}
}
 
int print_verilog_line(FILE*out, const char bits[N_BITS], const char vbits[N_BITS], const int codes[MAX_CODES][MAX_TIME-MIN_TIME + 1])
{
int i;
int n_bits[4] = {0, 0, 0, 0};
int common_vals[N_BITS], common_inds[N_BITS];
int other_inds[N_BITS];
unsigned other_mask = 0, m;
unsigned other_codes[MAX_CODES * TIME_COUNT];
int n_other;
for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
int n = n_bits[bits[i]] ++;
switch (bits[i]) {
case BIT_COMMON:
common_vals[n] = (vbits[i] == VBIT_0)?0:1;
common_inds[n] = i;
break;
case BIT_OTHER:
other_inds[n] = i;
other_mask |= m;
break;
}
}
 
// check for full other list
if (n_bits[BIT_OTHER]) {
int j, t;
n_other = 0;
for (j = 0; j < MAX_CODES; ++j) {
for (t = MIN_TIME; t <= MAX_TIME; ++t) {
unsigned int val = prepare_selector(j, t) & other_mask;
int r = -1;
if (codes[j][t] != CODE_ACTION) continue;
for (i = 0; i < n_other; ++i) {
if (other_codes[i] == val) { r = i; break; }
}
if (r == -1) other_codes[n_other++] = val;
}
}
// fprintf(out, "//\tn_other = %i (%i)\n", n_other, 1 << n_bits[BIT_OTHER]);
if (n_other == (1 << n_bits[BIT_OTHER])) n_bits[BIT_OTHER] = 0;
}
 
if (!n_bits[BIT_COMMON] && !n_bits[BIT_OTHER]) {
fprintf(out, "1'b1");
return 0;
}
if (n_bits[BIT_COMMON]) {
fprintf(out, "({");
for (i = 0; i < n_bits[BIT_COMMON]; ++i) {
fprintf(out, "L[%i]", common_inds[i]);
if (i < n_bits[BIT_COMMON] - 1) fprintf(out, ",");
}
fprintf(out, "} == %i'b", n_bits[BIT_COMMON]);
for (i = 0; i < n_bits[BIT_COMMON]; ++i) {
fprintf(out, "%i", common_vals[i]);
}
fprintf(out, ")");
if (n_bits[BIT_OTHER]) fprintf(out, " && (");
}
if (n_bits[BIT_OTHER]) {
// fprintf(out, "(");
recurse_other(out, other_mask, other_codes, n_other, 0, 0, 1);
// fprintf(out, ")");
}
if (n_bits[BIT_COMMON]) {
if (n_bits[BIT_OTHER]) fprintf(out, ")");
}
/* if (n_bits[BIT_OTHER]) {
int j, t;
fprintf(out, "(");
n_other = 0;
for (j = 0; j < MAX_CODES; ++j) {
for (t = MIN_TIME; t <= MAX_TIME; ++t) {
unsigned int val = prepare_selector(j, t) & other_mask;
int r = -1;
 
if (codes[j][t] != CODE_ACTION) continue;
 
for (i = 0; i < n_other; ++i) {
if (other_codes[i] == val) { r = i; break; }
}
if (r != -1) continue;
if (n_other) fprintf(out, " || ");
fprintf(out, "({");
for (i = 0; i < n_bits[BIT_OTHER]; ++i) {
fprintf(out, "L[%i]", other_inds[i]);
if (i < n_bits[BIT_OTHER] - 1) fprintf(out, ",");
}
fprintf(out, "} == %i'b", n_bits[BIT_OTHER]);
for (i = 0, m = 1; i < N_BITS; ++i, m <<= 1) {
if (other_mask & m) {
fprintf(out, "%i", (val&m)?1:0);
}
}
fprintf(out, ")");
other_codes[n_other++] = val;
}
}
fprintf(out, ")");
}*/
return 0;
}
 
 
int process_data(struct STATE_DATA*sd, const char*fname)
{
int i, j, k, l, t;
int r;
unsigned m;
FILE*out;
int codes[MAX_CODES][TIME_COUNT];
char bits[N_BITS];
char vbits[N_BITS];
out = fopen(fname, "wt");
if (!out) {
perror(fname);
return -1;
}
fprintf(out, "// This file has been generated automatically\n"
"//\tby the GenStates tool\n"
"// Copyright (c) Oleg Odintsov\n"
"// This tool is a part of Agat hardware project\n\n");
 
if (opt_level == -1) {
fprintf(out, "//\tLevel of optimization: infinite\n");
} else {
fprintf(out, "//\tLevel of optimization: %i\n", opt_level);
}
 
fprintf(out, "//\tTotal number of actions: %i\n", sd->n_actions);
for (i = 0; i < sd->n_actions; ++i) {
char name[MAX_STRING];
action_to_name(sd->actions[i].astr_parsed, name);
fprintf(out, "\twire %s%s;\n", (sd->actions[i].atype == ACTION_EXEC)?"E_": "A_", name);
}
fprintf(out, "\n//\tActions assignments\n");
// for all actions
for (i = 0; i < sd->n_actions; ++i) {
const char*p;
int n;
char name[MAX_STRING];
int n_active = 0;
#if DEBUG
fprintf(out, "\n//\taction: %s:\n", sd->actions[i].astr);
#endif
memset(codes, CODE_NONE, sizeof(codes));
// find codes with this action
for (j = 0; j < MAX_CODES; ++j) {
for (t = MIN_TIME; t <= MAX_TIME; ++t)
if (code_has_action(sd, j, t, i)) {
codes[j][t] = CODE_ACTION;
++ n_active;
/*#if DEBUG
fprintf(out, "//\t\t(%i, %02X: ", t, j);
print_selector(out, prepare_selector(j, t));
fprintf(out, ")\n");
#endif*/
}
}
if (!n_active) {
action_to_name(sd->actions[i].astr_parsed, name);
fprintf(out, "\tassign %s%s = 1'b0;\n", (sd->actions[i].atype == ACTION_EXEC)?"E_": "A_", name);
continue;
}
 
 
// Selecting common bits@action (BIT_COMMON)
if (opt_level == 1) {
memset(bits, BIT_COMMON, sizeof(bits));
memset(vbits, VBIT_UNKNOWN, sizeof(vbits));
for (j = 0; j < MAX_CODES; ++j) {
for (t = MIN_TIME; t <= MAX_TIME; ++t) {
unsigned int val = prepare_selector(j, t);
if (codes[j][t] != CODE_ACTION) continue;
for (k = 0, m = 1; k < N_BITS; ++k, m<<=1) {
if (bits[k] != BIT_COMMON) continue;
if (val & m) {
if (vbits[k] == VBIT_UNKNOWN)
vbits[k] = VBIT_1;
else if (vbits[k] != VBIT_1)
bits[k] = BIT_OTHER;
} else {
if (vbits[k] == VBIT_UNKNOWN)
vbits[k] = VBIT_0;
else if (vbits[k] != VBIT_0)
bits[k] = BIT_OTHER;
}
}
}
}
} else {
memset(bits, BIT_OTHER, sizeof(bits));
memset(vbits, VBIT_UNKNOWN, sizeof(vbits));
}
// debug print
/*
#if DEBUG
fprintf(out, "// %14s: ", sd->actions[i].astr);
for (k = N_BITS - 1; k >= 0; --k) {
int c;
if (bits[k] == BIT_COMMON) c = (vbits[k] == VBIT_0)?'0':(vbits[k] == VBIT_1)?'1':'2';
else c = '?';
fprintf(out, "%c", c);
if (!(k & 7)) fprintf(out, " ");
}
fprintf(out, "\n");
#endif
*/
// verilog output
action_to_name(sd->actions[i].astr_parsed, name);
fprintf(out, "\tassign %s%s = ", (sd->actions[i].atype == ACTION_EXEC)?"E_": "A_", name);
print_verilog_line(out, bits, vbits, codes);
fprintf(out, ";\n");
}
fclose(out);
return 0;
}
 
 
void print_help(const char*cmd)
{
printf("Use %s [-Olevel | -h] [states.txt] [states_out.txt] [states.v]\n"
"\t-h\tPrint this help;\n"
"\t-Olevel\tSpecify level of optimization (default is 1):\n"
"\t\t0 - no optimization\n"
"\t\t1 - just group common bits (default, best for hardware)\n"
"\t\t>1 - higher levels\n"
"\t\t-1 - infinite optimization (best for simulation).\n\n"
"Copyright (c) Odintsov Oleg, nnop@newmail.ru\n"
"This tool is a part of Agat hardware project.\n", cmd);
exit(100);
}
 
struct STATE_DATA sd;
 
int main(int argc, const char*argv[])
{
int r;
int s = 0;
if (argc > 1 && argv[1][0] == '-') {
switch (argv[1][1]) {
case '?': case 'h': case 'H': print_help(argv[0]);
case 'O':
opt_level = atoi(argv[1] + 2);
if (opt_level == -1) {
printf("level of optimization: infinite\n");
} else {
printf("level of optimization: %i\n", opt_level);
}
}
s = 1;
}
clear_data(&sd);
r = load_data(&sd, (argc > (s + 1))? argv[s + 1]: "states.txt");
if (r) return r;
r = validate_data(&sd);
if (r) return r;
r = write_data(&sd, (argc > (s + 2))? argv[s + 2]: "states_out.txt");
if (r) return r;
r = process_data(&sd, (argc > (s + 3))? argv[s + 3]: "states.v");
if (r) return r;
return 0;
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.