URL
https://opencores.org/ocsvn/hd63701/hd63701/trunk
Subversion Repositories hd63701
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 1 to Rev 2
- ↔ Reverse comparison
Rev 1 → Rev 2
/hd63701/trunk/HD63701.v
0,0 → 1,239
/****************************************************** |
HD63701V0(Mode6) Compatible Processor Core |
Written by Tsuyoshi HASEGAWA 2013-14 |
*******************************************************/ |
module HD63701V0_M6 |
( |
input CLKx2, // XTAL/EXTAL (200K~2.0MHz) |
|
input RST, // RES |
input NMI, // NMI |
input IRQ, // IRQ1 |
|
output RW, // CS2 |
output [15:0] AD, // AS ? {PO4,PO3} |
output [7:0] DO, // ~AS ? {PO3} |
input [7:0] DI, // {PI3} |
|
input [7:0] PI1, // Port1 IN |
output [7:0] PO1, // OUT |
|
input [4:0] PI2, // Port2 IN |
output [4:0] PO2, // OUT |
|
// for DEBUG |
output [6:0] phase |
); |
|
// Built-In Instruction ROM |
wire en_birom = (AD[15:12]==4'b1111); // $F000-$FFFF |
wire [7:0] biromd; |
MCU_BIROM irom( CLKx2, AD[11:0], biromd ); |
|
|
// Built-In WorkRAM |
wire en_biram; |
wire [7:0] biramd; |
HD63701_BIRAM biram( CLKx2, AD, RW, DO, en_biram, biramd ); |
|
|
// Built-In I/O Ports |
wire en_biio; |
wire [7:0] biiod; |
HD63701_IOPort iopt( RST, CLKx2, AD, RW, DO, en_biio, biiod, PI1, PI2, PO1, PO2 ); |
|
|
// Built-In Timer |
wire irq2; |
wire [3:0] irq2v; |
wire en_bitim; |
wire [7:0] bitimd; |
HD63701_Timer timer( RST, CLKx2, AD, RW, DO, irq2, irq2v, en_bitim, bitimd ); |
|
|
// Built-In Devices Data Selector |
wire [7:0] biddi; |
HD63701_BIDSEL bidsel |
( |
biddi, |
en_birom, biromd, |
en_biram, biramd, |
en_biio , biiod, |
en_bitim, bitimd, |
DI |
); |
|
// Processor Core |
HD63701_Core core |
( |
.CLKx2(CLKx2),.RST(RST), |
.NMI(NMI),.IRQ(IRQ),.IRQ2(irq2),.IRQ2V(irq2v), |
.RW(RW),.AD(AD),.DO(DO),.DI(biddi), |
.PH(phase[5:0]) |
); |
assign phase[6] = irq2; |
|
endmodule |
|
|
module HD63701_BIDSEL |
( |
output [7:0] o, |
|
input e0, input [7:0] d0, |
input e1, input [7:0] d1, |
input e2, input [7:0] d2, |
input e3, input [7:0] d3, |
|
input [7:0] dx |
); |
|
assign o = e0 ? d0 : |
e1 ? d1 : |
e2 ? d2 : |
e3 ? d3 : |
dx; |
|
endmodule |
|
|
module HD63701_BIRAM |
( |
input mcu_clx2, |
input [15:0] mcu_ad, |
input mcu_wr, |
input [7:0] mcu_do, |
output en_biram, |
output reg [7:0] biramd |
); |
|
assign en_biram = (mcu_ad[15: 7]==9'b000000001); // $0080-$00FF |
wire [6:0] biad = mcu_ad[6:0]; |
|
reg [7:0] bimem[0:127]; |
always @( posedge mcu_clx2 ) begin |
if (en_biram & mcu_wr) bimem[biad] <= mcu_do; |
else biramd <= bimem[biad]; |
end |
|
endmodule |
|
|
module HD63701_IOPort |
( |
input mcu_rst, |
input mcu_clx2, |
input [15:0] mcu_ad, |
input mcu_wr, |
input [7:0] mcu_do, |
|
output en_io, |
output [7:0] iod, |
|
input [7:0] PI1, |
input [3:0] PI2, |
|
output reg [7:0] PO1, |
output reg [3:0] PO2 |
); |
|
always @( posedge mcu_clx2 or posedge mcu_rst ) begin |
if (mcu_rst) begin |
PO1 <= 8'hFF; |
PO2 <= 4'hF; |
end |
else begin |
if (mcu_wr) begin |
if (mcu_ad==16'h2) PO1 <= mcu_do; |
if (mcu_ad==16'h3) PO2 <= mcu_do[3:0]; |
end |
end |
end |
|
assign en_io = (mcu_ad==16'h2)|(mcu_ad==16'h3); |
assign iod = (mcu_ad==16'h2) ? PI1 : {4'hF,PI2}; |
|
endmodule |
|
|
module HD63701_Timer |
( |
input mcu_rst, |
input mcu_clx2, |
input [15:0] mcu_ad, |
input mcu_wr, |
input [7:0] mcu_do, |
|
output mcu_irq2, |
output [3:0] mcu_irq2v, |
|
output en_timer, |
output [7:0] timerd |
); |
|
reg oci, oce; |
reg [15:0] ocr, icr; |
reg [16:0] frc; |
reg [7:0] frt; |
reg [7:0] rmc, rg5; |
|
always @( posedge mcu_clx2 or posedge mcu_rst ) begin |
if (mcu_rst) begin |
oce <= 0; |
ocr <= 16'hFFFF; |
icr <= 16'hFFFF; |
frc <= 0; |
frt <= 0; |
rmc <= 8'h40; |
rg5 <= 0; |
end |
else begin |
frc <= frc+1; |
if (mcu_wr) begin |
case (mcu_ad) |
16'h05: rg5 <= mcu_do; |
16'h08: oce <= mcu_do[3]; |
16'h09: frt <= mcu_do; |
16'h0A: frc <= {frt,mcu_do,1'h0}; |
16'h0B: ocr[15:8] <= mcu_do; |
16'h0C: ocr[ 7:0] <= mcu_do; |
16'h0D: icr[15:8] <= mcu_do; |
16'h0E: icr[ 7:0] <= mcu_do; |
16'h14: rmc <= {mcu_do[7:6],6'h0}; |
default:; |
endcase |
end |
end |
end |
|
always @( negedge mcu_clx2 or posedge mcu_rst ) begin |
if (mcu_rst) begin |
oci <= 0; |
end |
else begin |
case (mcu_ad) |
16'h0B: oci <= 0; |
16'h0C: oci <= 0; |
default: if (frc[16:1]==ocr) oci <= 1'b1; |
endcase |
end |
end |
|
assign mcu_irq2 = oci & oce; |
assign mcu_irq2v = 4'h4; |
|
assign en_timer = (mcu_ad==16'h05)|((mcu_ad>=16'h8)&(mcu_ad<=16'hE))|(mcu_ad==16'h14); |
|
assign timerd = (mcu_ad==16'h05) ? rg5 : |
(mcu_ad==16'h08) ? {1'b0,oci,2'b10,oce,3'b000}: |
(mcu_ad==16'h09) ? frc[16:9] : |
(mcu_ad==16'h0A) ? frc[ 8:1] : |
(mcu_ad==16'h0B) ? ocr[15:8] : |
(mcu_ad==16'h0C) ? ocr[ 7:0] : |
(mcu_ad==16'h0D) ? icr[15:8] : |
(mcu_ad==16'h0E) ? icr[ 7:0] : |
(mcu_ad==16'h14) ? rmc : |
8'h0; |
|
endmodule |
|
hd63701/trunk/HD63701.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: hd63701/trunk/HD63701_ALU.v
===================================================================
--- hd63701/trunk/HD63701_ALU.v (nonexistent)
+++ hd63701/trunk/HD63701_ALU.v (revision 2)
@@ -0,0 +1,73 @@
+/***************************************************************************
+ This file is part of "HD63701V0 Compatible Processor Core".
+****************************************************************************/
+`timescale 1ps / 1ps
+`include "HD63701_defs.i"
+
+module HD63701_ALU
+(
+ input [4:0] op,
+ input [7:0] cf,
+ input bw,
+
+ input [15:0] R0,
+ input [15:0] R1,
+ input C,
+
+ output [15:0] RR,
+ output [5:0] RC
+);
+
+wire [16:0] r =
+ (op==`mcTST) ? (R0):
+ (op==`mcLDR) ? (R0):
+ (op==`mcLDN) ? (R0):
+ (op==`mcPSH) ? (R0):
+ (op==`mcPUL) ? (R0):
+ (op==`mcINT) ? (R0):
+ (op==`mcDAA) ? (R0): // todo: DAA
+ (op==`mcINC) ? (R0+16'h1):
+ (op==`mcADD) ? (R0+R1):
+ (op==`mcADC) ? (R0+R1+C):
+ (op==`mcDEC) ? (R0-16'h1):
+ (op==`mcSUB) ? (R0-R1):
+ (op==`mcSBC) ? (R0-R1-C):
+ (op==`mcMUL) ? (R0*R1):
+ (op==`mcNEG) ? ((~R0)+16'h1):
+ (op==`mcNOT) ? (~R0):
+ (op==`mcAND) ? (R0&R1):
+ (op==`mcLOR) ? (R0|R1):
+ (op==`mcEOR) ? (R0^R1):
+ (op==`mcASL) ? {R0[15:0],1'b0}:
+ (op==`mcASR) ? (bw ? {R0[15],R0[15:1]}:{R0[7],R0[7:1]}):
+ (op==`mcLSR) ? {1'b0,R0[15:1]}:
+ (op==`mcROL) ? {R0[15:0],C}:
+ (op==`mcROR) ? (bw ? {C,R0[15:1]} : {C,R0[7:1]}):
+ (op==`mcCCB) ? {10'h3,(R0[5:0]&cf[5:0])}:
+ (op==`mcSCB) ? {10'h3,(R0[5:0]|cf[5:0])}:
+ (16'h0);
+
+assign RR = r[15:0];
+
+wire chCarryL = (op==`mcASL)|(op==`mcROL)|
+ (op==`mcADD)|(op==`mcADC)|
+ (op==`mcSUB)|(op==`mcSBC)|
+ (op==`mcMUL);
+
+wire chCarryR = (op==`mcASR)|(op==`mcLSR)|(op==`mcROR);
+
+assign fC = (op==`mcNOT) ? 1'b1 :
+ chCarryL ? ( bw ? r[16] : r[8] ) :
+ chCarryR ? R0[0] :
+ C ;
+
+assign fZ = bw ?(RR[15:0]==0) : (RR[7:0]==0);
+assign fN = bw ? RR[15] : RR[7];
+
+assign fV = (op==`mcLDR) ? 1'b0 : (bw ?(R0[15]^R1[15]^RR[15]^RR[14]) : (R0[7]^R1[7]^RR[7]^RR[6]));
+assign fH = (op==`mcLDR) ? 1'b0 : R0[4]^R1[4]^RR[4];
+
+assign RC = {fH,1'b0,fN,fZ,fV,fC};
+
+endmodule
+
hd63701/trunk/HD63701_ALU.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: hd63701/trunk/HD63701_EXEC.v
===================================================================
--- hd63701/trunk/HD63701_EXEC.v (nonexistent)
+++ hd63701/trunk/HD63701_EXEC.v (revision 2)
@@ -0,0 +1,255 @@
+/***************************************************************************
+ This file is part of "HD63701V0 Compatible Processor Core".
+****************************************************************************/
+`timescale 1ps / 1ps
+`include "HD63701_defs.i"
+
+module HD63701_EXEC
+(
+ input CLK,
+ input RST,
+
+ input [7:0] DI,
+
+ output [15:0] AD,
+ output reg RW,
+ output reg [7:0] DO,
+
+ input `mcwidth mcode,
+ output reg [7:0] vect,
+ output inte,
+ input fncu,
+
+ output [15:0] REG_D,
+ output [15:0] REG_X,
+ output [15:0] REG_S,
+ output [5:0] REG_C
+);
+
+// MicroCode Format
+wire mcpi = mcode[0];
+wire [2:0] mcam = mcode[3:1];
+wire [2:0] mcph = mcode[6:4];
+wire [3:0] mcr2 = mcode[10:7];
+wire [3:0] mcr1 = mcode[14:11];
+wire [3:0] mcr0 = mcode[18:15];
+wire [4:0] mcop = mcode[23:19];
+
+wire mcnw = (mcop==`mcCCB)|(mcop==`mcSCB)|(mcop==`mcAPC)|
+ (mcop==`mcLDV)|(mcop==`mcINT);
+
+wire [7:0] mccf = {mcr0,mcr1}; // case of mcCCB & mcSCB & mcAPC
+wire [7:0] mcva = {mcr0,mcr1}; // case of mcLDV & mcINT
+
+
+// Registers
+reg [15:0] rT, rE, rD, rX, rS, rSp, rP;
+reg [5:0] rC;
+
+`define rA rD[15:8]
+`define rB rD[7:0]
+`define rU rT[15:8]
+`define rV rT[7:0]
+
+
+// ALU
+wire IsCCR = (mcop==`mcCCB)|(mcop==`mcSCB);
+wire IsCChit = (({(rC[1]^rC[3]),rC} & mccf[6:0]) == 7'h0) ^ mccf[7];
+
+wire [15:0] R0, R1, RR;
+wire [5:0] CC;
+
+HD63701_DSEL13 sR0(
+ .o(R0),
+ .f0((mcr0 == `mcrC)|IsCCR),.d0({10'b00000000_11,rC}),
+ .f1(mcr0 == `mcrA), .d1({8'h0,`rA}),
+ .f2(mcr0 == `mcrB), .d2({8'h0,`rB}),
+ .f3(mcr0 == `mcrD), .d3(rD),
+ .f4(mcr0 == `mcrX), .d4(rX),
+ .f5(mcr0 == `mcrS), .d5(rS),
+ .f6(mcr0 == `mcrP), .d6(rP),
+ .f7(mcr0 == `mcrU), .d7({8'h0,`rU}),
+ .f8(mcr0 == `mcrV), .d8({8'h0,`rV}),
+ .f9(mcr0 == `mcrN), .d9({DI,8'h0}),
+ .fA(mcr0 == `mcrM), .dA({8'h0,DI}),
+ .fB(mcr0 == `mcrT), .dB(rT),
+ .fC(mcr0 == `mcrE), .dC(rE)
+);
+
+HD63701_DSEL13 sR1(
+ .o(R1),
+ .f0((mcr1 == `mcrC)|IsCCR),.d0({10'b00000000_11,rC}),
+ .f1(mcr1 == `mcrA), .d1({8'h0,`rA}),
+ .f2(mcr1 == `mcrB), .d2({8'h0,`rB}),
+ .f3(mcr1 == `mcrD), .d3(rD),
+ .f4(mcr1 == `mcrX), .d4(rX),
+ .f5(mcr1 == `mcrS), .d5(rS),
+ .f6(mcr1 == `mcrP), .d6(rP),
+ .f7(mcr1 == `mcrU), .d7({8'h0,`rU}),
+ .f8(mcr1 == `mcrV), .d8({8'h0,`rV}),
+ .f9(mcr1 == `mcrN), .d9({DI,8'h0}),
+ .fA(mcr1 == `mcrM), .dA({8'h0,DI}),
+ .fB(mcr1 == `mcrT), .dB(rT),
+ .fC(mcr1 == `mcrE), .dC(rE)
+);
+
+HD63701_ALU ALU(
+ .op(mcop),.cf(mccf),.bw((mcr2==`mcrn) ? mcr0[2] : mcr2[2]),
+ .R0(R0),.R1(R1),.C(rC[0]),
+ .RR(RR),.RC(CC)
+);
+
+
+// Bus Control
+HD63701_DSEL8 sAB(
+ .o(AD),
+ .f0(mcam==`amPC), .d0(rP),
+ .f1(mcam==`amP1), .d1(rP+16'h1),
+ .f2(mcam==`amSP), .d2(rS),
+ .f3(mcam==`amS1), .d3(rS+16'h1),
+ .f4(mcam==`amX0), .d4(rX),
+ .f5(mcam==`amXT), .d5(rX+rT),
+ .f6(mcam==`amE0), .d6(rE),
+ .f7(mcam==`amE1), .d7(rE+16'h1)
+);
+
+
+// Update Registers
+reg [4:0] pmcop;
+always @( posedge CLK ) begin
+ if (pmcop==`mcPSH) rS <= rSp-16'h1;
+ else if (pmcop==`mcPUL) rS <= rSp+16'h1;
+ else rS <= rSp;
+end
+
+wire noCCop = (mcop!=`mcLDV)&(mcop!=`mcLDN)&(mcop!=`mcPSH)&(mcop!=`mcPUL)&(mcop!=`mcAPC)&(mcop!=`mcTST)&(~fncu);
+wire noCCrg = (mcr2!=`mcrC )&(mcr2!=`mcrS )&(mcr2!=`mcrP )&(mcr0!=`mcrC );
+
+always @( negedge CLK or posedge RST ) begin
+ if (RST) begin
+ pmcop <= 0;
+ vect <= 0;
+ rT <= 0;
+ rE <= 0;
+ rP <= 0;
+ rC <= 6'b010000;
+ DO <= 0;
+ end
+ else begin
+ if ((mcr2!=`mcrP)&(mcpi==`pcI)) rP <= rP+16'h1;
+ if (noCCrg & noCCop) rC <= {CC[5],rC[4],CC[3:0]};
+ if (mcr2!=`mcrS) rSp <= rS;
+ case (mcop)
+ `mcXTD: begin rT <= rX; rX <= rD; end
+ `mcAPC: if (IsCChit) rP <= rP+{{8{rT[7]}},rT[7:0]};
+ `mcINT: vect <= mcva;
+ `mcLDV: rE <= {8'hFF,mcva};
+ `mcTST: rC <= {rC[5:3],CC[2],rC[1:0]};
+ default: case (mcr2)
+ `mcrA: `rA <= RR[7:0];
+ `mcrB: `rB <= RR[7:0];
+ `mcrC: rC <= RR[5:0];
+ `mcrD: rD <= RR;
+ `mcrX: rX <= RR;
+ `mcrS: rSp <= RR;
+ `mcrP: rP <= RR;
+ `mcrU: `rU <= RR[7:0];
+ `mcrV: `rV <= RR[7:0];
+ `mcrT: rT <= RR;
+ `mcrE: rE <= RR;
+ default:;
+ endcase
+ endcase
+ DO <= mcnw ? 8'h0 :
+ (mcr2==`mcrN) ? RR[15:8] :
+ (mcr2==`mcrM) ? RR[ 7:0] :
+ 8'h0;
+
+ pmcop <= mcop;
+ end
+end
+
+wire RWRES = CLK;
+always @( negedge CLK or posedge RWRES ) begin
+ if (RWRES) RW <= 0;
+ else begin
+ RW <= ((mcr2==`mcrN)|(mcr2==`mcrM)) & (~mcnw);
+ end
+end
+
+assign inte = ~rC[4];
+
+
+assign REG_D = rD;
+assign REG_X = rX;
+assign REG_S = rS;
+assign REG_C = rC;
+
+endmodule
+
+
+module HD63701_DSEL13
+(
+ output [15:0] o,
+
+ input f0, input [15:0] d0,
+ input f1, input [15:0] d1,
+ input f2, input [15:0] d2,
+ input f3, input [15:0] d3,
+ input f4, input [15:0] d4,
+ input f5, input [15:0] d5,
+ input f6, input [15:0] d6,
+ input f7, input [15:0] d7,
+ input f8, input [15:0] d8,
+ input f9, input [15:0] d9,
+ input fA, input [15:0] dA,
+ input fB, input [15:0] dB,
+ input fC, input [15:0] dC
+);
+
+assign o =
+ f0 ? d0 :
+ f1 ? d1 :
+ f2 ? d2 :
+ f3 ? d3 :
+ f4 ? d4 :
+ f5 ? d5 :
+ f6 ? d6 :
+ f7 ? d7 :
+ f8 ? d8 :
+ f9 ? d9 :
+ fA ? dA :
+ fB ? dB :
+ fC ? dC :
+ 16'h0 ;
+
+endmodule
+
+
+module HD63701_DSEL8
+(
+ output [15:0] o,
+
+ input f0, input [15:0] d0,
+ input f1, input [15:0] d1,
+ input f2, input [15:0] d2,
+ input f3, input [15:0] d3,
+ input f4, input [15:0] d4,
+ input f5, input [15:0] d5,
+ input f6, input [15:0] d6,
+ input f7, input [15:0] d7
+);
+
+assign o =
+ f0 ? d0 :
+ f1 ? d1 :
+ f2 ? d2 :
+ f3 ? d3 :
+ f4 ? d4 :
+ f5 ? d5 :
+ f6 ? d6 :
+ f7 ? d7 :
+ 16'h0 ;
+
+endmodule
+
hd63701/trunk/HD63701_EXEC.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: hd63701/trunk/HD63701_defs.i
===================================================================
--- hd63701/trunk/HD63701_defs.i (nonexistent)
+++ hd63701/trunk/HD63701_defs.i (revision 2)
@@ -0,0 +1,155 @@
+/***************************************************************************
+ This file is part of "HD63701V0 Compatible Processor Core".
+ ( DON'T ADD TO PROJECT, Because this file is include file. )
+****************************************************************************/
+`define vaRST 8'hFE // RESET Vector $FFFE
+`define vaTRP 8'hEE // TRAP Vector $FFEE
+`define vaNMI 8'hFC // NMI Vector $FFFC (NMI signal)
+`define vaSWI 8'hFA // SWI Vector $FFFA (Software Interrupt)
+`define vaIRQ 8'hF8 // IRQ Vector $FFF8 (IRQ signal)
+`define vaICF 8'hF6 // ICF Vector $FFF6 (Timer Input Capture)
+`define vaOCF 8'hF4 // OCF Vector $FFF4 (Timer Output Compare)
+`define vaTOF 8'hF2 // TOF Vector $FFF2 (Timer OverFlow)
+`define vaSCI 8'hF0 // SCI Vector $FFF0 (Serial)
+`define vaWAI 8'h00 // WAI Vector (Special)
+
+
+`define phRST 0
+//------------------
+`define phVECT 1
+`define phVEC1 2
+`define phVEC2 3
+//------------------
+`define phEXEC 16
+`define phEXEC1 17
+`define phEXEC2 18
+`define phEXEC3 19
+`define phEXEC4 20
+`define phEXEC5 21
+`define phEXEC6 22
+`define phEXEC7 23
+`define phEXEC8 24
+`define phEXEC9 25
+//------------------
+`define phINTR 32
+`define phINTR1 33
+`define phINTR2 34
+`define phINTR3 35
+`define phINTR4 36
+`define phINTR5 37
+`define phINTR6 38
+`define phINTR7 39
+`define phINTR8 40
+`define phINTR9 41
+//------------------
+`define phSLEP 62
+`define phHALT 63
+
+
+`define mcNOP `mcLDN
+`define mcLDN 5'd0
+`define mcINC 5'd1
+`define mcADD 5'd2
+`define mcADC 5'd3
+`define mcDEC 5'd4
+`define mcSUB 5'd5
+`define mcSBC 5'd6
+`define mcMUL 5'd7
+`define mcNEG 5'd8
+`define mcNOT 5'd9
+`define mcAND 5'd10
+`define mcLOR 5'd11
+`define mcEOR 5'd12
+`define mcASL 5'd13
+`define mcASR 5'd14
+`define mcLSR 5'd15
+`define mcROL 5'd16
+`define mcROR 5'd17
+`define mcCCB 5'd18
+`define mcSCB 5'd19
+`define mcLDR 5'd20
+`define mcTST 5'd21
+//---------------------
+`define mcINT 5'd25
+`define mcPSH 5'd26
+`define mcPUL 5'd27
+`define mcXTD 5'd28
+`define mcDAA 5'd29
+`define mcAPC 5'd30
+`define mcLDV 5'd31
+
+
+ // [2] : 0=byte,1=word
+`define mcrn 4'd0 // none
+`define mcrA 4'd1
+`define mcrB 4'd2
+`define mcrC 4'd3
+
+`define mcrD 4'd4 // {A,B}
+`define mcrX 4'd5
+`define mcrS 4'd6
+`define mcrP 4'd7
+
+`define mcrU 4'd8
+`define mcrV 4'd9
+`define mcrN 4'd10 // x.H <-> (rE)
+`define mcrM 4'd11 // x.L <-> (rE)
+
+`define mcrT 4'd12 // {U,V} Temporary
+`define mcrE 4'd13 // Effective Address
+`define mcrI 4'd14 // Immidiate
+//---------------------
+
+
+`define mcpK 3'd0 // Keep
+`define mcpN 3'd1 // Next
+`define mcp0 3'd2 // To Stage0
+`define mcpI 3'd3 // To Interrupt
+`define mcpV 3'd4 // To Vector
+//------------------------------------------
+`define mcpH 3'd6 // To HALT
+`define mcpS 3'd7 // To SLEEP
+
+
+`define amPC 3'd0
+`define amP1 3'd1
+`define amSP 3'd2
+`define amS1 3'd3
+`define amX0 3'd4
+`define amXT 3'd5
+`define amE0 3'd6
+`define amE1 3'd7
+
+
+`define pcN 1'b0 // PC=PC
+`define pcI 1'b1 // PC=PC+1
+
+
+// +- N^V
+// |
+`define bfRA 8'b00000000
+`define bfRN 8'b10000000
+`define bfHI 8'b00000101
+`define bfLS 8'b10000101
+`define bfCC 8'b00000001
+`define bfCS 8'b10000001
+`define bfNE 8'b00000100
+`define bfEQ 8'b10000100
+`define bfVC 8'b00000010
+`define bfVS 8'b10000010
+`define bfPL 8'b00001000
+`define bfMI 8'b10001000
+`define bfGE 8'b01000000
+`define bfLT 8'b11000000
+`define bfGT 8'b01000100
+`define bfLE 8'b11000100
+
+`define bfC 8'b00000001
+`define bfV 8'b00000010
+`define bfZ 8'b00000100
+`define bfN 8'b00001000
+`define bfI 8'b00010000
+`define bfH 8'b00100000
+
+
+`define mcwidth [23:0]
hd63701/trunk/HD63701_defs.i
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: hd63701/trunk/HD63701_CORE.v
===================================================================
--- hd63701/trunk/HD63701_CORE.v (nonexistent)
+++ hd63701/trunk/HD63701_CORE.v (revision 2)
@@ -0,0 +1,54 @@
+/***************************************************************************
+ This file is part of "HD63701V0 Compatible Processor Core".
+****************************************************************************/
+`timescale 1ps / 1ps
+`include "HD63701_defs.i"
+
+module HD63701_Core
+(
+ input CLKx2,
+
+ input RST,
+ input NMI,
+ input IRQ,
+ input IRQ2,
+ input [3:0] IRQ2V,
+
+ output RW,
+ output [15:0] AD,
+ output [7:0] DO,
+ input [7:0] DI,
+
+ // for DEBUG
+ output CLKo,
+ output [5:0] PH,
+ output `mcwidth MC,
+ output [15:0] REG_D,
+ output [15:0] REG_X,
+ output [15:0] REG_S,
+ output [5:0] REG_C
+);
+
+reg CLK = 0;
+always @( negedge CLKx2 ) CLK <= ~CLK;
+assign CLKo = CLK;
+
+wire `mcwidth mcode;
+wire [7:0] vect;
+wire inte, fncu;
+
+assign MC = mcode;
+
+HD63701_SEQ SEQ(.CLK(CLK),.RST(RST),
+ .NMI(NMI),.IRQ(IRQ),.IRQ2(IRQ2),.IRQ2V(IRQ2V),
+ .DI(DI),
+ .mcout(mcode),.vect(vect),.inte(inte),.fncu(fncu),
+ .PH(PH) );
+
+HD63701_EXEC EXEC(.CLK(CLK),.RST(RST),.DI(DI),.AD(AD),.RW(RW),.DO(DO),
+ .mcode(mcode),.vect(vect),.inte(inte),.fncu(fncu),
+ .REG_D(REG_D),.REG_X(REG_X),.REG_S(REG_S),.REG_C(REG_C) );
+
+endmodule
+
+
hd63701/trunk/HD63701_CORE.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: hd63701/trunk/HD63701_SEQ.v
===================================================================
--- hd63701/trunk/HD63701_SEQ.v (nonexistent)
+++ hd63701/trunk/HD63701_SEQ.v (revision 2)
@@ -0,0 +1,167 @@
+/***************************************************************************
+ This file is part of "HD63701V0 Compatible Processor Core".
+****************************************************************************/
+`timescale 1ps / 1ps
+
+`include "HD63701_defs.i"
+
+module HD63701_SEQ
+(
+ input CLK,
+ input RST,
+
+ input NMI,
+ input IRQ,
+
+ input IRQ2,
+ input [3:0] IRQ2V,
+
+ input [7:0] DI,
+
+ output `mcwidth mcout,
+ input [7:0] vect,
+ input inte,
+ output fncu,
+
+ output [5:0] PH
+);
+
+`define MC_SEI {`mcSCB, `bfI ,`mcrC,`mcpN,`amPC,`pcN}
+`define MC_YLD {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpK,`amPC,`pcN}
+
+reg [7:0] opcode;
+reg `mcwidth mcode;
+reg mcside;
+
+
+reg pNMI, pIRQ, pIR2;
+
+reg [2:0] fINT;
+wire bIRQ = fINT[1] & inte;
+wire bIRQ2 = fINT[0] & inte;
+
+wire bINT = fINT[2]|bIRQ|bIRQ2;
+wire [7:0] vINT = fINT[2] ? `vaNMI :
+ bIRQ ? `vaIRQ :
+ bIRQ2 ? {4'hF,IRQ2V} :
+ 0;
+
+function [2:0] INTUpd;
+input [2:0] n;
+ case(n)
+ 3'b000: INTUpd = 3'b000;
+ 3'b001: INTUpd = 3'b000;
+ 3'b010: INTUpd = 3'b000;
+ 3'b011: INTUpd = 3'b001;
+ 3'b100: INTUpd = 3'b000;
+ 3'b101: INTUpd = 3'b001;
+ 3'b110: INTUpd = 3'b010;
+ 3'b111: INTUpd = 3'b011;
+ endcase
+endfunction
+
+
+reg [5:0] PHASE;
+always @( posedge CLK or posedge RST ) begin
+ if (RST) begin
+ fINT <= 0;
+ pIRQ <= 0;
+ pNMI <= 0;
+ pIR2 <= 0;
+
+ opcode <= 0;
+ mcode <= 0;
+ mcside <= 0;
+ end
+ else begin
+
+ // Capture Interrupt signal edge
+ if ((pNMI^NMI)&NMI) fINT[2] <= 1'b1; pNMI <= NMI;
+ if ((pIRQ^IRQ)&IRQ) fINT[1] <= 1'b1; pIRQ <= IRQ;
+ if ((pIR2^IRQ2)&IRQ2) fINT[0] <= 1'b1; pIR2 <= IRQ2;
+
+
+ case (PHASE)
+
+ // Reset
+ `phRST : mcside <= 1;
+
+ // Load Vector
+ `phVECT: mcside <= 1;
+
+ // Execute
+ `phEXEC: begin
+ opcode <= DI;
+ if ( bINT & (opcode[7:1]!=7'b0000111) ) begin
+ mcside <= 0;
+ mcode <= {`mcINT,vINT,`mcrn,`mcpI,`amPC,`pcN};
+ fINT <= INTUpd(fINT);
+ end
+ else mcside <= 1;
+ end
+
+ // Interrupt (TRAP/IRQ/NMI/SWI/WAI)
+ `phINTR: mcside <= 1;
+ `phINTR8: begin
+ mcside <= 0;
+ if (vect==`vaWAI) begin
+ if (bINT) begin
+ mcode <= `MC_SEI;
+ opcode <= vINT;
+ fINT <= INTUpd(fINT);
+ end
+ else mcode <= `MC_YLD;
+ end
+ else begin
+ opcode <= vect;
+ mcode <= `MC_SEI;
+ end
+ end
+ `phINTR9: mcode <= {`mcLDV, opcode,`mcrn,`mcpV,`amE0,`pcN}; //(Load Vector)
+
+ // Sleep
+ `phSLEP: begin
+ mcside <= 0;
+ if (bINT) begin
+ mcode <= {`mcINT,vINT,`mcrn,`mcpI,`amPC,`pcN};
+ fINT <= INTUpd(fINT);
+ end
+ else mcode <= `MC_YLD;
+ end
+
+ // HALT (Bug in MicroCode)
+ `phHALT: $stop;
+
+ default:;
+ endcase
+ end
+end
+
+// Update Phase
+wire [2:0] mcph = mcout[6:4];
+always @( negedge CLK or posedge RST ) begin
+ if (RST) PHASE <= 0;
+ else begin
+ case (mcph)
+ `mcpN: PHASE <= PHASE+6'h1;
+ `mcp0: PHASE <=`phEXEC;
+ `mcpI: PHASE <=`phINTR;
+ `mcpV: PHASE <=`phVECT;
+ `mcpH: PHASE <=`phHALT;
+ `mcpS: PHASE <=`phSLEP;
+ default: PHASE <= PHASE;
+ endcase
+ end
+end
+assign PH = PHASE;
+
+// Output MicroCode
+wire `mcwidth mcoder;
+HD63701_MCROM mcr( CLK, PHASE, (PHASE==`phEXEC) ? DI : opcode, mcoder );
+assign mcout = mcside ? mcoder : mcode;
+
+assign fncu = ( opcode[7:4]==4'h2)|
+ ((opcode[7:4]==4'h3)&(opcode[3:0]!=4'hD));
+
+endmodule
+
hd63701/trunk/HD63701_SEQ.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: hd63701/trunk/HD63701_MCODE.i
===================================================================
--- hd63701/trunk/HD63701_MCODE.i (nonexistent)
+++ hd63701/trunk/HD63701_MCODE.i (revision 2)
@@ -0,0 +1,971 @@
+/***************************************************************************
+ This file is part of "HD63701V0 Compatible Processor Core".
+ ( DON'T ADD TO PROJECT, Because this file is include file. )
+****************************************************************************/
+`define MC_TRAP {`mcINT, `vaTRP ,`mcrn,`mcpI,`amPC,`pcI}
+`define MC_HALT {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpH,`amPC,`pcN}
+
+`define MC_NEXTI {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}
+`define MC_NEXTP {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}
+
+`define MC_LDBRO {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amPC,`pcI} // Bxx NN
+`define MC_LDIXO {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amPC,`pcI} // ($NN+X)
+`define MC_LDIXM {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcN} // ($nn+X) => rE
+
+`define MC_LDEXH {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amPC,`pcI} // ($NNnn)
+`define MC_LDEXL {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amPC,`pcI} // ($nnNN)
+`define MC_LDEXM {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amE0,`pcN} // ($nnnn) => rT
+
+function `mcwidth MCODE_S0;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h01: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpK,`amPC,`pcI}; // NOP
+ 8'h04: MCODE_S0 = {`mcLSR,`mcrD,`mcrn,`mcrD,`mcpK,`amPC,`pcI}; // LSRD
+ 8'h05: MCODE_S0 = {`mcASL,`mcrD,`mcrn,`mcrD,`mcpK,`amPC,`pcI}; // ASLD
+ 8'h06: MCODE_S0 = {`mcLDN,`mcrA,`mcrn,`mcrC,`mcpK,`amPC,`pcI}; // TAP
+ 8'h07: MCODE_S0 = {`mcLDN,`mcrC,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // TPA
+ 8'h08: MCODE_S0 = {`mcINC,`mcrX,`mcrn,`mcrX,`mcpK,`amPC,`pcI}; // INX
+ 8'h09: MCODE_S0 = {`mcDEC,`mcrX,`mcrn,`mcrX,`mcpK,`amPC,`pcI}; // DEX
+ 8'h0A: MCODE_S0 = {`mcCCB, ~`bfV ,`mcrC,`mcpK,`amPC,`pcI}; // CLV
+ 8'h0B: MCODE_S0 = {`mcSCB, `bfV ,`mcrC,`mcpK,`amPC,`pcI}; // SEV
+ 8'h0C: MCODE_S0 = {`mcCCB, ~`bfC ,`mcrC,`mcpK,`amPC,`pcI}; // CLC
+ 8'h0D: MCODE_S0 = {`mcSCB, `bfC ,`mcrC,`mcpK,`amPC,`pcI}; // SEC
+ 8'h0E: MCODE_S0 = {`mcCCB, ~`bfI ,`mcrC,`mcpK,`amPC,`pcI}; // CLI
+ 8'h0F: MCODE_S0 = {`mcSCB, `bfI ,`mcrC,`mcpK,`amPC,`pcI}; // SEI
+//-----------------------------------------------------------------------------------------
+ 8'h10: MCODE_S0 = {`mcSUB,`mcrA,`mcrB,`mcrA,`mcpK,`amPC,`pcI}; // SBA
+ 8'h11: MCODE_S0 = {`mcSUB,`mcrA,`mcrB,`mcrn,`mcpK,`amPC,`pcI}; // CBA
+ 8'h12: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amS1,`pcI}; // (undoc1)
+ 8'h13: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amS1,`pcI}; // (undoc2)
+ 8'h16: MCODE_S0 = {`mcLDR,`mcrA,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // TAB
+ 8'h17: MCODE_S0 = {`mcLDR,`mcrB,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // TBA
+ 8'h18: MCODE_S0 = {`mcXTD,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // XGDX
+ 8'h19: MCODE_S0 = {`mcDAA,`mcrA,`mcrn,`mcrA,`mcp0,`amPC,`pcI}; // DAA
+ 8'h1A: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpS,`amPC,`pcI}; // SLP
+ 8'h1B: MCODE_S0 = {`mcADD,`mcrA,`mcrB,`mcrA,`mcpK,`amPC,`pcI}; // ABA
+ 8'h1F: MCODE_S0 = `MC_HALT; // (DBGHLT)
+//-----------------------------------------------------------------------------------------
+ 8'h20: MCODE_S0 = `MC_NEXTP; // BRA
+ 8'h21: MCODE_S0 = `MC_NEXTP; // BRN
+ 8'h22: MCODE_S0 = `MC_NEXTP; // BHI
+ 8'h23: MCODE_S0 = `MC_NEXTP; // BLS
+ 8'h24: MCODE_S0 = `MC_NEXTP; // BCC
+ 8'h25: MCODE_S0 = `MC_NEXTP; // BCS
+ 8'h26: MCODE_S0 = `MC_NEXTP; // BNE
+ 8'h27: MCODE_S0 = `MC_NEXTP; // BEQ
+ 8'h28: MCODE_S0 = `MC_NEXTP; // BVC
+ 8'h29: MCODE_S0 = `MC_NEXTP; // BVS
+ 8'h2A: MCODE_S0 = `MC_NEXTP; // BPL
+ 8'h2B: MCODE_S0 = `MC_NEXTP; // BMI
+ 8'h2C: MCODE_S0 = `MC_NEXTP; // BGE
+ 8'h2D: MCODE_S0 = `MC_NEXTP; // BLT
+ 8'h2E: MCODE_S0 = `MC_NEXTP; // BGT
+ 8'h2F: MCODE_S0 = `MC_NEXTP; // BLE
+//-----------------------------------------------------------------------------------------
+ 8'h30: MCODE_S0 = {`mcINC,`mcrS,`mcrn,`mcrX,`mcpK,`amPC,`pcI}; // TSX
+ 8'h31: MCODE_S0 = {`mcINC,`mcrS,`mcrn,`mcrS,`mcpK,`amPC,`pcI}; // INS
+ 8'h32: MCODE_S0 = {`mcPUL,`mcrM,`mcrn,`mcrA,`mcpN,`amS1,`pcI}; // PULA
+ 8'h33: MCODE_S0 = {`mcPUL,`mcrM,`mcrn,`mcrB,`mcpN,`amS1,`pcI}; // PULB
+ 8'h34: MCODE_S0 = {`mcDEC,`mcrS,`mcrn,`mcrS,`mcpK,`amPC,`pcI}; // DES
+ 8'h35: MCODE_S0 = {`mcDEC,`mcrX,`mcrn,`mcrS,`mcpK,`amPC,`pcI}; // TXS
+ 8'h36: MCODE_S0 = {`mcPSH,`mcrA,`mcrn,`mcrM,`mcpN,`amSP,`pcI}; // PSHA
+ 8'h37: MCODE_S0 = {`mcPSH,`mcrB,`mcrn,`mcrM,`mcpN,`amSP,`pcI}; // PSHB
+ 8'h38: MCODE_S0 = {`mcINC,`mcrS,`mcrn,`mcrS,`mcpN,`amPC,`pcI}; // PULX
+ 8'h39: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // RTS
+ 8'h3A: MCODE_S0 = {`mcADD,`mcrX,`mcrB,`mcrX,`mcpK,`amPC,`pcI}; // ABX
+ 8'h3B: MCODE_S0 = {`mcPUL,`mcrM,`mcrn,`mcrT,`mcpN,`amS1,`pcN}; // RTI
+ 8'h3C: MCODE_S0 = {`mcDEC,`mcrS,`mcrn,`mcrS,`mcpN,`amPC,`pcI}; // PSHX
+ 8'h3D: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // MUL
+ 8'h3E: MCODE_S0 = {`mcINT, `vaWAI ,`mcrn,`mcpI,`amPC,`pcI}; // WAI
+ 8'h3F: MCODE_S0 = {`mcINT, `vaSWI ,`mcrn,`mcpI,`amPC,`pcI}; // SWI
+//-----------------------------------------------------------------------------------------
+ 8'h40: MCODE_S0 = {`mcNEG,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // NEGA
+ 8'h43: MCODE_S0 = {`mcNOT,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // COMA
+ 8'h44: MCODE_S0 = {`mcLSR,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // LSRA
+ 8'h46: MCODE_S0 = {`mcROR,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // RORA
+ 8'h47: MCODE_S0 = {`mcASR,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // ASRA
+ 8'h48: MCODE_S0 = {`mcASL,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // ASLA
+ 8'h49: MCODE_S0 = {`mcROL,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // ROLA
+ 8'h4A: MCODE_S0 = {`mcDEC,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // DECA
+ 8'h4C: MCODE_S0 = {`mcINC,`mcrA,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // INCA
+ 8'h4D: MCODE_S0 = {`mcTST,`mcrA,`mcrn,`mcrn,`mcpK,`amPC,`pcI}; // TSTA
+ 8'h4F: MCODE_S0 = {`mcLDR,`mcrn,`mcrn,`mcrA,`mcpK,`amPC,`pcI}; // CLRA
+//-----------------------------------------------------------------------------------------
+ 8'h50: MCODE_S0 = {`mcNEG,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // NEGB
+ 8'h53: MCODE_S0 = {`mcNOT,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // COMB
+ 8'h54: MCODE_S0 = {`mcLSR,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // LSRB
+ 8'h56: MCODE_S0 = {`mcROR,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // RORB
+ 8'h57: MCODE_S0 = {`mcASR,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // ASRB
+ 8'h58: MCODE_S0 = {`mcASL,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // ASLB
+ 8'h59: MCODE_S0 = {`mcROL,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // ROLB
+ 8'h5A: MCODE_S0 = {`mcDEC,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // DECB
+ 8'h5C: MCODE_S0 = {`mcINC,`mcrB,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // INCB
+ 8'h5D: MCODE_S0 = {`mcTST,`mcrB,`mcrn,`mcrn,`mcpK,`amPC,`pcI}; // TSTB
+ 8'h5F: MCODE_S0 = {`mcLDR,`mcrn,`mcrn,`mcrB,`mcpK,`amPC,`pcI}; // CLRB
+//-----------------------------------------------------------------------------------------
+ 8'h60: MCODE_S0 = `MC_NEXTP; // NEG($nn+X)
+ 8'h61: MCODE_S0 = `MC_NEXTP; // AIM#,($nn+X)
+ 8'h62: MCODE_S0 = `MC_NEXTP; // OIM#,($nn+X)
+ 8'h63: MCODE_S0 = `MC_NEXTP; // COM($nn+X)
+ 8'h64: MCODE_S0 = `MC_NEXTP; // LSR($nn+X)
+ 8'h65: MCODE_S0 = `MC_NEXTP; // EIM#,($nn+X)
+ 8'h66: MCODE_S0 = `MC_NEXTP; // ROR($nn+X)
+ 8'h67: MCODE_S0 = `MC_NEXTP; // ASR($nn+X)
+ 8'h68: MCODE_S0 = `MC_NEXTP; // ASL($nn+X)
+ 8'h69: MCODE_S0 = `MC_NEXTP; // ROL($nn+X)
+ 8'h6A: MCODE_S0 = `MC_NEXTP; // DEC($nn+X)
+ 8'h6B: MCODE_S0 = `MC_NEXTP; // TIM#,($nn+X)
+ 8'h6C: MCODE_S0 = `MC_NEXTP; // INC($nn+X)
+ 8'h6D: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // TST($nn+X)
+ 8'h6E: MCODE_S0 = `MC_NEXTP; // JMP.$nn+X
+ 8'h6F: MCODE_S0 = `MC_NEXTP; // CLR($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'h70: MCODE_S0 = `MC_NEXTP; // NEG($nnnn)
+ 8'h71: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // AIM#,($nn)
+ 8'h72: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // OIM#,($nn)
+ 8'h73: MCODE_S0 = `MC_NEXTP; // COM($nnnn)
+ 8'h74: MCODE_S0 = `MC_NEXTP; // LSR($nnnn)
+ 8'h75: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // EIM#,($nnnn)
+ 8'h76: MCODE_S0 = `MC_NEXTP; // ROR($nnnn)
+ 8'h77: MCODE_S0 = `MC_NEXTP; // ASR($nnnn)
+ 8'h78: MCODE_S0 = `MC_NEXTP; // ASL($nnnn)
+ 8'h79: MCODE_S0 = `MC_NEXTP; // ROL($nnnn)
+ 8'h7A: MCODE_S0 = `MC_NEXTP; // DEC($nnnn)
+ 8'h7B: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // TIM#,($nn)
+ 8'h7C: MCODE_S0 = `MC_NEXTP; // INC($nnnn)
+ 8'h7D: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // TST($nnnn)
+ 8'h7E: MCODE_S0 = `MC_NEXTP; // JMP.$nnnn
+ 8'h7F: MCODE_S0 = `MC_NEXTP; // CLR($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'h80: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // SUBA#
+ 8'h81: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // CMPA#
+ 8'h82: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // SBCA#
+ 8'h83: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amP1,`pcI}; // SUBD#
+ 8'h84: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ANDA#
+ 8'h85: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // BITA#
+ 8'h86: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // LDA#
+ 8'h88: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // EORA#
+ 8'h89: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ADCA#
+ 8'h8A: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ORA#
+ 8'h8B: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ADDA#
+ 8'h8C: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amP1,`pcI}; // CMPX#
+ 8'h8D: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // BSR
+ 8'h8E: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amP1,`pcI}; // LDS#
+//-----------------------------------------------------------------------------------------
+ 8'h90: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SUBA($nn)
+ 8'h91: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // CMPA($nn)
+ 8'h92: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SBCA($nn)
+ 8'h93: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SUBD($nn)
+ 8'h94: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ANDA($nn)
+ 8'h95: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // BITA($nn)
+ 8'h96: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDA($nn)
+ 8'h97: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STA($nn)
+ 8'h98: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // EORA($nn)
+ 8'h99: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADCA($nn)
+ 8'h9A: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ORA($nn)
+ 8'h9B: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADDA($nn)
+ 8'h9C: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // CMPX($nn)
+ 8'h9D: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // JSR($nn)
+ 8'h9E: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDS($nn)
+ 8'h9F: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STS($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hA0: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // SUBA($nn+X)
+ 8'hA1: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // CMPA($nn+X)
+ 8'hA2: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // SBCA($nn+X)
+ 8'hA3: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // SUBD($nn+X)
+ 8'hA4: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ANDA($nn+X)
+ 8'hA5: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // BITA($nn+X)
+ 8'hA6: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // LDA($nn+X)
+ 8'hA7: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // STA($nn+X)
+ 8'hA8: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // EORA($nn+X)
+ 8'hA9: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ADCA($nn+X)
+ 8'hAA: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ORA($nn+X)
+ 8'hAB: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ADDA($nn+X)
+ 8'hAC: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // CMPX($nn+X)
+ 8'hAD: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // JSR.$nn+X
+ 8'hAE: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // LDS($nn+X)
+ 8'hAF: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // STS($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hB0: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SUBA($nnnn)
+ 8'hB1: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // CMPA($nnnn)
+ 8'hB2: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SBCA($nnnn)
+ 8'hB3: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SUBD($nnnn)
+ 8'hB4: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ANDA($nnnn)
+ 8'hB5: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // BITA($nnnn)
+ 8'hB6: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDA($nnnn)
+ 8'hB7: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STA($nnnn)
+ 8'hB8: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // EORA($nnnn)
+ 8'hB9: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADCA($nnnn)
+ 8'hBA: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ORA($nnnn)
+ 8'hBB: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADDA($nnnn)
+ 8'hBC: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // CMPX($nnnn)
+ 8'hBD: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // JSR.$nnnn
+ 8'hBE: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDS($nnnn)
+ 8'hBF: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STS($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'hC0: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // SUBB#
+ 8'hC1: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // CMPB#
+ 8'hC2: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // SBCB#
+ 8'hC3: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amP1,`pcI}; // ADDD#
+ 8'hC4: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ANDB#
+ 8'hC5: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // BITB#
+ 8'hC6: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // LDB#
+ 8'hC8: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // EORB#
+ 8'hC9: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ADCB#
+ 8'hCA: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ORB#
+ 8'hCB: MCODE_S0 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // ADDB#
+ 8'hCC: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amP1,`pcI}; // LDD#
+ 8'hCE: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amP1,`pcI}; // LDX#
+//-----------------------------------------------------------------------------------------
+ 8'hD0: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SUBB($nn)
+ 8'hD1: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // CMPB($nn)
+ 8'hD2: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SBCB($nn)
+ 8'hD3: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADDD($nn)
+ 8'hD4: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ANDB($nn)
+ 8'hD5: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // BITB($nn)
+ 8'hD6: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDB($nn)
+ 8'hD7: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STB($nn)
+ 8'hD8: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // EORB($nn)
+ 8'hD9: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADCB($nn)
+ 8'hDA: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ORB($nn)
+ 8'hDB: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADDB($nn)
+ 8'hDC: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDD($nn)
+ 8'hDD: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STD($nn)
+ 8'hDE: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDX($nn)
+ 8'hDF: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STX($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hE0: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // SUBB($nn+X)
+ 8'hE1: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // CMPB($nn+X)
+ 8'hE2: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // SBCB($nn+X)
+ 8'hE3: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ADDD($nn+X)
+ 8'hE4: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ANDB($nn+X)
+ 8'hE5: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // BITB($nn+X)
+ 8'hE6: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // LDB($nn+X)
+ 8'hE7: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // STB($nn+X)
+ 8'hE8: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // EORB($nn+X)
+ 8'hE9: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ADCB($nn+X)
+ 8'hEA: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ORB($nn+X)
+ 8'hEB: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // ADDB($nn+X)
+ 8'hEC: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // LDD($nn+X)
+ 8'hED: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // STD($nn+X)
+ 8'hEE: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // LDX($nn+X)
+ 8'hEF: MCODE_S0 = {`mcLDN,`mcrM,`mcrn,`mcrT,`mcpN,`amP1,`pcI}; // STX($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hF0: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SUBB($nnnn)
+ 8'hF1: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // CMPB($nnnn)
+ 8'hF2: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // SBCB($nnnn)
+ 8'hF3: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADDD($nnnn)
+ 8'hF4: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ANDB($nnnn)
+ 8'hF5: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // BITB($nnnn)
+ 8'hF6: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDB($nnnn)
+ 8'hF7: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STB($nnnn)
+ 8'hF8: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // EORB($nnnn)
+ 8'hF9: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADCB($nnnn)
+ 8'hFA: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ORB($nnnn)
+ 8'hFB: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // ADDB($nnnn)
+ 8'hFC: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDD($nnnn)
+ 8'hFD: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STD($nnnn)
+ 8'hFE: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // LDX($nnnn)
+ 8'hFF: MCODE_S0 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // STX($nnnn)
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S0 = `MC_TRAP;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S1;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h12: MCODE_S1 = {`mcADD,`mcrX,`mcrT,`mcrX,`mcp0,`amPC,`pcN}; // (undoc1)
+ 8'h13: MCODE_S1 = {`mcADD,`mcrX,`mcrT,`mcrX,`mcp0,`amPC,`pcN}; // (undoc2)
+ 8'h18: MCODE_S1 = {`mcLDN,`mcrT,`mcrn,`mcrD,`mcp0,`amPC,`pcN}; // XGDX
+//-----------------------------------------------------------------------------------------
+ 8'h20: MCODE_S1 = `MC_LDBRO; // BRA
+ 8'h21: MCODE_S1 = `MC_LDBRO; // BRN
+ 8'h22: MCODE_S1 = `MC_LDBRO; // BHI
+ 8'h23: MCODE_S1 = `MC_LDBRO; // BLS
+ 8'h24: MCODE_S1 = `MC_LDBRO; // BCC
+ 8'h25: MCODE_S1 = `MC_LDBRO; // BCS
+ 8'h26: MCODE_S1 = `MC_LDBRO; // BNE
+ 8'h27: MCODE_S1 = `MC_LDBRO; // BEQ
+ 8'h28: MCODE_S1 = `MC_LDBRO; // BVC
+ 8'h29: MCODE_S1 = `MC_LDBRO; // BVS
+ 8'h2A: MCODE_S1 = `MC_LDBRO; // BPL
+ 8'h2B: MCODE_S1 = `MC_LDBRO; // BMI
+ 8'h2C: MCODE_S1 = `MC_LDBRO; // BGE
+ 8'h2D: MCODE_S1 = `MC_LDBRO; // BLT
+ 8'h2E: MCODE_S1 = `MC_LDBRO; // BGT
+ 8'h2F: MCODE_S1 = `MC_LDBRO; // BLE
+//-----------------------------------------------------------------------------------------
+ 8'h32: MCODE_S1 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // PULA
+ 8'h33: MCODE_S1 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // PULB
+ 8'h36: MCODE_S1 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // PSHA
+ 8'h37: MCODE_S1 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // PSHB
+ 8'h38: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrX,`mcpN,`amSP,`pcN}; // PULX
+ 8'h39: MCODE_S1 = {`mcINC,`mcrS,`mcrn,`mcrS,`mcpN,`amPC,`pcN}; // RTS
+ 8'h3B: MCODE_S1 = {`mcPUL,`mcrM,`mcrn,`mcrB,`mcpN,`amS1,`pcN}; // RTI
+ 8'h3C: MCODE_S1 = {`mcLDN,`mcrX,`mcrn,`mcrM,`mcpN,`amS1,`pcN}; // PSHX
+ 8'h3D: MCODE_S1 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // MUL
+//-----------------------------------------------------------------------------------------
+ 8'h60: MCODE_S1 = `MC_LDIXO; // NEG($nn+X)
+ 8'h61: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amPC,`pcI}; // AIM#,($nn+X)
+ 8'h62: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amPC,`pcI}; // OIM#,($nn+X)
+ 8'h63: MCODE_S1 = `MC_LDIXO; // COM($nn+X)
+ 8'h64: MCODE_S1 = `MC_LDIXO; // LSR($nn+X)
+ 8'h65: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amPC,`pcI}; // EIM#,($nn+X)
+ 8'h66: MCODE_S1 = `MC_LDIXO; // ROR($nn+X)
+ 8'h67: MCODE_S1 = `MC_LDIXO; // ASR($nn+X)
+ 8'h68: MCODE_S1 = `MC_LDIXO; // ASL($nn+X)
+ 8'h69: MCODE_S1 = `MC_LDIXO; // ROL($nn+X)
+ 8'h6A: MCODE_S1 = `MC_LDIXO; // DEC($nn+X)
+ 8'h6B: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amPC,`pcI}; // TIM#,($nn+X)
+ 8'h6C: MCODE_S1 = `MC_LDIXO; // INC($nn+X)
+ 8'h6D: MCODE_S1 = {`mcTST,`mcrM,`mcrn,`mcrn,`mcpN,`amXT,`pcI}; // TST($nn+X)
+ 8'h6E: MCODE_S1 = `MC_LDIXO; // JMP.$nn+X
+ 8'h6F: MCODE_S1 = `MC_LDIXO; // CLR($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'h70: MCODE_S1 = `MC_LDEXH; // NEG($nnnn)
+ 8'h71: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // AIM#,($nn)
+ 8'h72: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // OIM#,($nn)
+ 8'h73: MCODE_S1 = `MC_LDEXH; // COM($nnnn)
+ 8'h74: MCODE_S1 = `MC_LDEXH; // LSR($nnnn)
+ 8'h75: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // EIM#,($nnnn)
+ 8'h76: MCODE_S1 = `MC_LDEXH; // ROR($nnnn)
+ 8'h77: MCODE_S1 = `MC_LDEXH; // ASR($nnnn)
+ 8'h78: MCODE_S1 = `MC_LDEXH; // ASL($nnnn)
+ 8'h79: MCODE_S1 = `MC_LDEXH; // ROL($nnnn)
+ 8'h7A: MCODE_S1 = `MC_LDEXH; // DEC($nnnn)
+ 8'h7B: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amP1,`pcI}; // TIM#,($nn)
+ 8'h7C: MCODE_S1 = `MC_LDEXH; // INC($nnnn)
+ 8'h7D: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // TST($nnnn)
+ 8'h7E: MCODE_S1 = `MC_LDEXH; // JMP.$nnnn
+ 8'h7F: MCODE_S1 = `MC_LDEXH; // CLR($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'h80: MCODE_S1 = {`mcSUB,`mcrA,`mcrM,`mcrA,`mcp0,`amPC,`pcI}; // SUBA#
+ 8'h81: MCODE_S1 = {`mcSUB,`mcrA,`mcrM,`mcrn,`mcp0,`amPC,`pcI}; // CMPA#
+ 8'h82: MCODE_S1 = {`mcSBC,`mcrA,`mcrM,`mcrA,`mcp0,`amPC,`pcI}; // SBCA#
+ 8'h83: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amP1,`pcI}; // SUBD#
+ 8'h84: MCODE_S1 = {`mcAND,`mcrA,`mcrM,`mcrA,`mcp0,`amPC,`pcI}; // ANDA#
+ 8'h85: MCODE_S1 = {`mcAND,`mcrA,`mcrM,`mcrn,`mcp0,`amPC,`pcI}; // BITA#
+ 8'h86: MCODE_S1 = {`mcLDR,`mcrM,`mcrn,`mcrA,`mcp0,`amPC,`pcI}; // LDA#
+ 8'h88: MCODE_S1 = {`mcEOR,`mcrA,`mcrM,`mcrA,`mcp0,`amPC,`pcI}; // EORA#
+ 8'h89: MCODE_S1 = {`mcADC,`mcrA,`mcrM,`mcrA,`mcp0,`amPC,`pcI}; // ADCA#
+ 8'h8A: MCODE_S1 = {`mcLOR,`mcrA,`mcrM,`mcrA,`mcp0,`amPC,`pcI}; // ORA#
+ 8'h8B: MCODE_S1 = {`mcADD,`mcrA,`mcrM,`mcrA,`mcp0,`amPC,`pcI}; // ADDA#
+ 8'h8C: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amP1,`pcI}; // CMPX#
+ 8'h8D: MCODE_S1 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // BSR
+ 8'h8E: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amP1,`pcI}; // LDS#
+//-----------------------------------------------------------------------------------------
+ 8'h90: MCODE_S1 = {`mcSUB,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // SUBA($nn)
+ 8'h91: MCODE_S1 = {`mcSUB,`mcrA,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // CMPA($nn)
+ 8'h92: MCODE_S1 = {`mcSBC,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // SBCA($nn)
+ 8'h93: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcI}; // SUBD($nn)
+ 8'h94: MCODE_S1 = {`mcAND,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ANDA($nn)
+ 8'h95: MCODE_S1 = {`mcAND,`mcrA,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // BITA($nn)
+ 8'h96: MCODE_S1 = {`mcLDR,`mcrM,`mcrn,`mcrA,`mcpN,`amE0,`pcI}; // LDA($nn)
+ 8'h97: MCODE_S1 = {`mcLDR,`mcrA,`mcrn,`mcrM,`mcpN,`amE0,`pcI}; // STA($nn)
+ 8'h98: MCODE_S1 = {`mcEOR,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // EORA($nn)
+ 8'h99: MCODE_S1 = {`mcADC,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ADCA($nn)
+ 8'h9A: MCODE_S1 = {`mcLOR,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ORA($nn)
+ 8'h9B: MCODE_S1 = {`mcADD,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ADDA($nn)
+ 8'h9C: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrT,`mcpN,`amE0,`pcI}; // CMPX($nn)
+ 8'h9D: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amPC,`pcI}; // JSR($nn)
+ 8'h9E: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcI}; // LDS($nn)
+ 8'h9F: MCODE_S1 = {`mcLDN,`mcrS,`mcrn,`mcrN,`mcpN,`amE0,`pcI}; // STS($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hA0: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // SUBA($nn+X)
+ 8'hA1: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // CMPA($nn+X)
+ 8'hA2: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // SBCA($nn+X)
+ 8'hA3: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // SUBD($nn+X)
+ 8'hA4: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ANDA($nn+X)
+ 8'hA5: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // BITA($nn+X)
+ 8'hA6: MCODE_S1 = {`mcLDR,`mcrM,`mcrn,`mcrA,`mcpN,`amXT,`pcI}; // LDA($nn+X)
+ 8'hA7: MCODE_S1 = {`mcLDR,`mcrA,`mcrn,`mcrM,`mcpN,`amXT,`pcI}; // STA($nn+X)
+ 8'hA8: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // EORA($nn+X)
+ 8'hA9: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ADCA($nn+X)
+ 8'hAA: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ORA($nn+X)
+ 8'hAB: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ADDA($nn+X)
+ 8'hAC: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // CMPX($nn+X)
+ 8'hAD: MCODE_S1 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcI}; // JSR.$nn+X
+ 8'hAE: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // LDS($nn+X)
+ 8'hAF: MCODE_S1 = {`mcLDN,`mcrS,`mcrn,`mcrN,`mcpN,`amXT,`pcI}; // STS($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hB0: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // SUBA($nnnn)
+ 8'hB1: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // CMPA($nnnn)
+ 8'hB2: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // SBCA($nnnn)
+ 8'hB3: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // SUBD($nnnn)
+ 8'hB4: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ANDA($nnnn)
+ 8'hB5: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // BITA($nnnn)
+ 8'hB6: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // LDA($nnnn)
+ 8'hB7: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // STA($nnnn)
+ 8'hB8: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // EORA($nnnn)
+ 8'hB9: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ADCA($nnnn)
+ 8'hBA: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ORA($nnnn)
+ 8'hBB: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ADDA($nnnn)
+ 8'hBC: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // CMPX($nnnn)
+ 8'hBD: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amPC,`pcI}; // JSR.$nnnn
+ 8'hBE: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // LDS($nnnn)
+ 8'hBF: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // STS($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'hC0: MCODE_S1 = {`mcSUB,`mcrB,`mcrM,`mcrB,`mcp0,`amPC,`pcI}; // SUBB#
+ 8'hC1: MCODE_S1 = {`mcSUB,`mcrB,`mcrM,`mcrn,`mcp0,`amPC,`pcI}; // CMPB#
+ 8'hC2: MCODE_S1 = {`mcSBC,`mcrB,`mcrM,`mcrB,`mcp0,`amPC,`pcI}; // SBCB#
+ 8'hC3: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amP1,`pcI}; // ADDD#
+ 8'hC4: MCODE_S1 = {`mcAND,`mcrB,`mcrM,`mcrB,`mcp0,`amPC,`pcI}; // ANDB#
+ 8'hC5: MCODE_S1 = {`mcAND,`mcrB,`mcrM,`mcrn,`mcp0,`amPC,`pcI}; // BITB#
+ 8'hC6: MCODE_S1 = {`mcLDR,`mcrM,`mcrn,`mcrB,`mcp0,`amPC,`pcI}; // LDB#
+ 8'hC8: MCODE_S1 = {`mcEOR,`mcrB,`mcrM,`mcrB,`mcp0,`amPC,`pcI}; // EORB#
+ 8'hC9: MCODE_S1 = {`mcADC,`mcrB,`mcrM,`mcrB,`mcp0,`amPC,`pcI}; // ADCB#
+ 8'hCA: MCODE_S1 = {`mcLOR,`mcrB,`mcrM,`mcrB,`mcp0,`amPC,`pcI}; // ORB#
+ 8'hCB: MCODE_S1 = {`mcADD,`mcrB,`mcrM,`mcrB,`mcp0,`amPC,`pcI}; // ADDB#
+ 8'hCC: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amP1,`pcI}; // LDD#
+ 8'hCE: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amP1,`pcI}; // LDX#
+//-----------------------------------------------------------------------------------------
+ 8'hD0: MCODE_S1 = {`mcSUB,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // SUBB($nn)
+ 8'hD1: MCODE_S1 = {`mcSUB,`mcrB,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // CMPB($nn)
+ 8'hD2: MCODE_S1 = {`mcSBC,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // SBCB($nn)
+ 8'hD3: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcI}; // ADDD($nn)
+ 8'hD4: MCODE_S1 = {`mcAND,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ANDB($nn)
+ 8'hD5: MCODE_S1 = {`mcAND,`mcrB,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // BITB($nn)
+ 8'hD6: MCODE_S1 = {`mcLDR,`mcrM,`mcrn,`mcrB,`mcpN,`amE0,`pcI}; // LDB($nn)
+ 8'hD7: MCODE_S1 = {`mcLDR,`mcrB,`mcrn,`mcrM,`mcpN,`amE0,`pcI}; // STB($nn)
+ 8'hD8: MCODE_S1 = {`mcEOR,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // EORB($nn)
+ 8'hD9: MCODE_S1 = {`mcADC,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ADCB($nn)
+ 8'hDA: MCODE_S1 = {`mcLOR,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ORB($nn)
+ 8'hDB: MCODE_S1 = {`mcADD,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ADDB($nn)
+ 8'hDC: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrD,`mcpN,`amE0,`pcI}; // LDD($nn)
+ 8'hDD: MCODE_S1 = {`mcLDN,`mcrD,`mcrn,`mcrN,`mcpN,`amE0,`pcI}; // STD($nn)
+ 8'hDE: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrX,`mcpN,`amE0,`pcI}; // LDX($nn)
+ 8'hDF: MCODE_S1 = {`mcLDN,`mcrX,`mcrn,`mcrN,`mcpN,`amE0,`pcI}; // STX($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hE0: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // SUBB($nn+X)
+ 8'hE1: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // CMPB($nn+X)
+ 8'hE2: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // SBCB($nn+X)
+ 8'hE3: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ADDD($nn+X)
+ 8'hE4: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ANDB($nn+X)
+ 8'hE5: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // BITB($nn+X)
+ 8'hE6: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // LDB($nn+X)
+ 8'hE7: MCODE_S1 = {`mcLDN,`mcrB,`mcrn,`mcrM,`mcpN,`amXT,`pcI}; // STB($nn+X)
+ 8'hE8: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // EORB($nn+X)
+ 8'hE9: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ADCB($nn+X)
+ 8'hEA: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ORB($nn+X)
+ 8'hEB: MCODE_S1 = {`mcLDN,`mcrM,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // ADDB($nn+X)
+ 8'hEC: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // LDD($nn+X)
+ 8'hED: MCODE_S1 = {`mcLDN,`mcrD,`mcrn,`mcrN,`mcpN,`amXT,`pcI}; // STD($nn+X)
+ 8'hEE: MCODE_S1 = {`mcLDN,`mcrN,`mcrn,`mcrE,`mcpN,`amXT,`pcI}; // LDX($nn+X)
+ 8'hEF: MCODE_S1 = {`mcLDN,`mcrX,`mcrn,`mcrN,`mcpN,`amXT,`pcI}; // STX($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hF0: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // SUBB($nnnn)
+ 8'hF1: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // CMPB($nnnn)
+ 8'hF2: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // SBCB($nnnn)
+ 8'hF3: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ADDD($nnnn)
+ 8'hF4: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ANDB($nnnn)
+ 8'hF5: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // BITB($nnnn)
+ 8'hF6: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // LDB($nnnn)
+ 8'hF7: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // STB($nnnn)
+ 8'hF8: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // EORB($nnnn)
+ 8'hF9: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ADCB($nnnn)
+ 8'hFA: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ORB($nnnn)
+ 8'hFB: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // ADDB($nnnn)
+ 8'hFC: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // LDD($nnnn)
+ 8'hFD: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // STD($nnnn)
+ 8'hFE: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // LDX($nnnn)
+ 8'hFF: MCODE_S1 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // STX($nnnn)
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S1 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S2;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h20: MCODE_S2 = {`mcAPC, `bfRA ,`mcrn,`mcp0,`amPC,`pcN}; // BRA
+ 8'h21: MCODE_S2 = {`mcAPC, `bfRN ,`mcrn,`mcp0,`amPC,`pcN}; // BRN
+ 8'h22: MCODE_S2 = {`mcAPC, `bfHI ,`mcrn,`mcp0,`amPC,`pcN}; // BHI
+ 8'h23: MCODE_S2 = {`mcAPC, `bfLS ,`mcrn,`mcp0,`amPC,`pcN}; // BLS
+ 8'h24: MCODE_S2 = {`mcAPC, `bfCC ,`mcrn,`mcp0,`amPC,`pcN}; // BCC
+ 8'h25: MCODE_S2 = {`mcAPC, `bfCS ,`mcrn,`mcp0,`amPC,`pcN}; // BCS
+ 8'h26: MCODE_S2 = {`mcAPC, `bfNE ,`mcrn,`mcp0,`amPC,`pcN}; // BNE
+ 8'h27: MCODE_S2 = {`mcAPC, `bfEQ ,`mcrn,`mcp0,`amPC,`pcN}; // BEQ
+ 8'h28: MCODE_S2 = {`mcAPC, `bfVC ,`mcrn,`mcp0,`amPC,`pcN}; // BVC
+ 8'h29: MCODE_S2 = {`mcAPC, `bfVS ,`mcrn,`mcp0,`amPC,`pcN}; // BVS
+ 8'h2A: MCODE_S2 = {`mcAPC, `bfPL ,`mcrn,`mcp0,`amPC,`pcN}; // BPL
+ 8'h2B: MCODE_S2 = {`mcAPC, `bfMI ,`mcrn,`mcp0,`amPC,`pcN}; // BMI
+ 8'h2C: MCODE_S2 = {`mcAPC, `bfGE ,`mcrn,`mcp0,`amPC,`pcN}; // BGE
+ 8'h2D: MCODE_S2 = {`mcAPC, `bfLT ,`mcrn,`mcp0,`amPC,`pcN}; // BLT
+ 8'h2E: MCODE_S2 = {`mcAPC, `bfGT ,`mcrn,`mcp0,`amPC,`pcN}; // BGT
+ 8'h2F: MCODE_S2 = {`mcAPC, `bfLE ,`mcrn,`mcp0,`amPC,`pcN}; // BLE
+//-----------------------------------------------------------------------------------------
+ 8'h32: MCODE_S2 = `MC_NEXTI; // PULA
+ 8'h33: MCODE_S2 = `MC_NEXTI; // PULB
+ 8'h36: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // PSHA
+ 8'h37: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // PSHB
+ 8'h38: MCODE_S2 = {`mcLOR,`mcrX,`mcrM,`mcrX,`mcpN,`amS1,`pcN}; // PULX
+ 8'h39: MCODE_S2 = {`mcLDN,`mcrN,`mcrn,`mcrP,`mcpN,`amSP,`pcN}; // RTS
+ 8'h3B: MCODE_S2 = {`mcPUL,`mcrM,`mcrn,`mcrA,`mcpN,`amS1,`pcN}; // RTI
+ 8'h3C: MCODE_S2 = {`mcLDN,`mcrX,`mcrn,`mcrN,`mcpN,`amSP,`pcN}; // PSHX
+ 8'h3D: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // MUL
+//-----------------------------------------------------------------------------------------
+ 8'h60: MCODE_S2 = `MC_LDIXM; // NEG($nn+X)
+ 8'h61: MCODE_S2 = `MC_LDIXO; // AIM#,($nn+X)
+ 8'h62: MCODE_S2 = `MC_LDIXO; // OIM#,($nn+X)
+ 8'h63: MCODE_S2 = `MC_LDIXM; // COM($nn+X)
+ 8'h64: MCODE_S2 = `MC_LDIXM; // LSR($nn+X)
+ 8'h65: MCODE_S2 = `MC_LDIXO; // EIM#,($nn+X)
+ 8'h66: MCODE_S2 = `MC_LDIXM; // ROR($nn+X)
+ 8'h67: MCODE_S2 = `MC_LDIXM; // ASR($nn+X)
+ 8'h68: MCODE_S2 = `MC_LDIXM; // ASL($nn+X)
+ 8'h69: MCODE_S2 = `MC_LDIXM; // ROL($nn+X)
+ 8'h6A: MCODE_S2 = `MC_LDIXM; // DEC($nn+X)
+ 8'h6B: MCODE_S2 = `MC_LDIXO; // TIM#,($nn+X)
+ 8'h6C: MCODE_S2 = `MC_LDIXM; // INC($nn+X)
+ 8'h6D: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // TST($nn+X)
+ 8'h6E: MCODE_S2 = {`mcADD,`mcrX,`mcrT,`mcrP,`mcp0,`amPC,`pcN}; // JMP.$nn+X
+ 8'h6F: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amXT,`pcN}; // CLR($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'h70: MCODE_S2 = `MC_LDEXL; // NEG($nnnn)
+ 8'h71: MCODE_S2 = {`mcAND,`mcrT,`mcrM,`mcrT,`mcpN,`amE0,`pcI}; // AIM#,($nn)
+ 8'h72: MCODE_S2 = {`mcLOR,`mcrT,`mcrM,`mcrT,`mcpN,`amE0,`pcI}; // OIM#,($nn)
+ 8'h73: MCODE_S2 = `MC_LDEXL; // COM($nnnn)
+ 8'h74: MCODE_S2 = `MC_LDEXL; // LSR($nnnn)
+ 8'h75: MCODE_S2 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amP1,`pcI}; // EIM#,($nnnn)
+ 8'h76: MCODE_S2 = `MC_LDEXL; // ROR($nnnn)
+ 8'h77: MCODE_S2 = `MC_LDEXL; // ASR($nnnn)
+ 8'h78: MCODE_S2 = `MC_LDEXL; // ASL($nnnn)
+ 8'h79: MCODE_S2 = `MC_LDEXL; // ROL($nnnn)
+ 8'h7A: MCODE_S2 = `MC_LDEXL; // DEC($nnnn)
+ 8'h7B: MCODE_S2 = {`mcAND,`mcrT,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // TIM#,($nn)
+ 8'h7C: MCODE_S2 = `MC_LDEXL; // INC($nnnn)
+ 8'h7D: MCODE_S2 = {`mcTST,`mcrM,`mcrn,`mcrn,`mcpN,`amE0,`pcI}; // TST($nnnn)
+ 8'h7E: MCODE_S2 = {`mcLOR,`mcrM,`mcrE,`mcrP,`mcp0,`amPC,`pcN}; // JMP.$nnnn
+ 8'h7F: MCODE_S2 = `MC_LDEXL; // CLR($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'h83: MCODE_S2 = {`mcSUB,`mcrD,`mcrT,`mcrD,`mcp0,`amPC,`pcI}; // SUBD#
+ 8'h8C: MCODE_S2 = {`mcSUB,`mcrX,`mcrT,`mcrn,`mcp0,`amPC,`pcI}; // CMPX#
+ 8'h8D: MCODE_S2 = {`mcPSH,`mcrP,`mcrn,`mcrM,`mcpN,`amSP,`pcN}; // BSR
+ 8'h8E: MCODE_S2 = {`mcLDR,`mcrT,`mcrn,`mcrS,`mcp0,`amPC,`pcI}; // LDS#
+//-----------------------------------------------------------------------------------------
+ 8'h90: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SUBA($nn)
+ 8'h91: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // CMPA($nn)
+ 8'h92: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SBCA($nn)
+ 8'h93: MCODE_S2 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}; // SUBD($nn)
+ 8'h94: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ANDA($nn)
+ 8'h95: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // BITA($nn)
+ 8'h96: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // LDA($nn)
+ 8'h97: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // STA($nn)
+ 8'h98: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // EORA($nn)
+ 8'h99: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADCA($nn)
+ 8'h9A: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ORA($nn)
+ 8'h9B: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADDA($nn)
+ 8'h9C: MCODE_S2 = {`mcLOR,`mcrM,`mcrT,`mcrT,`mcpN,`amE1,`pcN}; // CMPX($nn)
+ 8'h9D: MCODE_S2 = {`mcPSH,`mcrP,`mcrn,`mcrM,`mcpN,`amSP,`pcN}; // JSR($nn)
+ 8'h9E: MCODE_S2 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}; // LDS($nn)
+ 8'h9F: MCODE_S2 = {`mcLDN,`mcrS,`mcrn,`mcrM,`mcpN,`amE1,`pcN}; // STS($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hA0: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // SUBA($nn+X)
+ 8'hA1: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // CMPA($nn+X)
+ 8'hA2: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // SBCA($nn+X)
+ 8'hA3: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // SUBD($nn+X)
+ 8'hA4: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ANDA($nn+X)
+ 8'hA5: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // BITA($nn+X)
+ 8'hA6: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // LDA($nn+X)
+ 8'hA7: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // STA($nn+X)
+ 8'hA8: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // EORA($nn+X)
+ 8'hA9: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ADCA($nn+X)
+ 8'hAA: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ORA($nn+X)
+ 8'hAB: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ADDA($nn+X)
+ 8'hAC: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // CMPX($nn+X)
+ 8'hAD: MCODE_S2 = {`mcPSH,`mcrP,`mcrn,`mcrM,`mcpN,`amSP,`pcN}; // JSR.$nn+X
+ 8'hAE: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // LDS($nn+X)
+ 8'hAF: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // STS($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hB0: MCODE_S2 = {`mcSUB,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // SUBA($nnnn)
+ 8'hB1: MCODE_S2 = {`mcSUB,`mcrA,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // CMPA($nnnn)
+ 8'hB2: MCODE_S2 = {`mcSBC,`mcrA,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // SBCA($nnnn)
+ 8'hB3: MCODE_S2 = {`mcLDN,`mcrN,`mcrn,`mcrT,`mcpN,`amE0,`pcI}; // SUBD($nnnn)
+ 8'hB4: MCODE_S2 = {`mcAND,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ANDA($nnnn)
+ 8'hB5: MCODE_S2 = {`mcAND,`mcrA,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // BITA($nnnn)
+ 8'hB6: MCODE_S2 = {`mcLDR,`mcrM,`mcrn,`mcrA,`mcpN,`amE0,`pcI}; // LDA($nnnn)
+ 8'hB7: MCODE_S2 = {`mcLDR,`mcrA,`mcrn,`mcrM,`mcpN,`amE0,`pcI}; // STA($nnnn)
+ 8'hB8: MCODE_S2 = {`mcEOR,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // EORA($nnnn)
+ 8'hB9: MCODE_S2 = {`mcADC,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ADCA($nnnn)
+ 8'hBA: MCODE_S2 = {`mcLOR,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ORA($nnnn)
+ 8'hBB: MCODE_S2 = {`mcADD,`mcrA,`mcrM,`mcrA,`mcpN,`amE0,`pcI}; // ADDA($nnnn)
+ 8'hBC: MCODE_S2 = {`mcLDN,`mcrN,`mcrn,`mcrT,`mcpN,`amE0,`pcI}; // CMPX($nnnn)
+ 8'hBD: MCODE_S2 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amPC,`pcI}; // JSR.$nnnn
+ 8'hBE: MCODE_S2 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcI}; // LDS($nnnn)
+ 8'hBF: MCODE_S2 = {`mcLDN,`mcrS,`mcrn,`mcrN,`mcpN,`amE0,`pcI}; // STS($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'hC3: MCODE_S2 = {`mcADD,`mcrD,`mcrT,`mcrD,`mcp0,`amPC,`pcI}; // ADDD#
+ 8'hCC: MCODE_S2 = {`mcLDR,`mcrT,`mcrn,`mcrD,`mcp0,`amPC,`pcI}; // LDD#
+ 8'hCE: MCODE_S2 = {`mcLDR,`mcrT,`mcrn,`mcrX,`mcp0,`amPC,`pcI}; // LDX#
+//-----------------------------------------------------------------------------------------
+ 8'hD0: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SUBB($nn)
+ 8'hD1: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // CMPB($nn)
+ 8'hD2: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SBCB($nn)
+ 8'hD3: MCODE_S2 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}; // ADDD($nn)
+ 8'hD4: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ANDB($nn)
+ 8'hD5: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // BITB($nn)
+ 8'hD6: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // LDB($nn)
+ 8'hD7: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // STB($nn)
+ 8'hD8: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // EORB($nn)
+ 8'hD9: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADCB($nn)
+ 8'hDA: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ORB($nn)
+ 8'hDB: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADDB($nn)
+ 8'hDC: MCODE_S2 = {`mcLOR,`mcrM,`mcrD,`mcrD,`mcpN,`amE1,`pcN}; // LDD($nn)
+ 8'hDD: MCODE_S2 = {`mcLDN,`mcrD,`mcrn,`mcrM,`mcpN,`amE1,`pcN}; // STD($nn)
+ 8'hDE: MCODE_S2 = {`mcLOR,`mcrM,`mcrX,`mcrX,`mcpN,`amE1,`pcN}; // LDX($nn)
+ 8'hDF: MCODE_S2 = {`mcLDN,`mcrX,`mcrn,`mcrM,`mcpN,`amE1,`pcN}; // STX($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hE0: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // SUBB($nn+X)
+ 8'hE1: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // CMPB($nn+X)
+ 8'hE2: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // SBCB($nn+X)
+ 8'hE3: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // ADDD($nn+X)
+ 8'hE4: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ANDB($nn+X)
+ 8'hE5: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // BITB($nn+X)
+ 8'hE6: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // LDB($nn+X)
+ 8'hE7: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // STB($nn+X)
+ 8'hE8: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // EORB($nn+X)
+ 8'hE9: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ADCB($nn+X)
+ 8'hEA: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ORB($nn+X)
+ 8'hEB: MCODE_S2 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ADDB($nn+X)
+ 8'hEC: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // LDD($nn+X)
+ 8'hED: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // STD($nn+X)
+ 8'hEE: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // LDX($nn+X)
+ 8'hEF: MCODE_S2 = {`mcINC,`mcrT,`mcrn,`mcrT,`mcpN,`amXT,`pcN}; // STX($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hF0: MCODE_S2 = {`mcSUB,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // SUBB($nnnn)
+ 8'hF1: MCODE_S2 = {`mcSUB,`mcrB,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // CMPB($nnnn)
+ 8'hF2: MCODE_S2 = {`mcSBC,`mcrB,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // SBCB($nnnn)
+ 8'hF3: MCODE_S2 = {`mcLDN,`mcrN,`mcrn,`mcrT,`mcpN,`amE0,`pcI}; // ADDD($nnnn)
+ 8'hF4: MCODE_S2 = {`mcAND,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ANDB($nnnn)
+ 8'hF5: MCODE_S2 = {`mcAND,`mcrB,`mcrM,`mcrn,`mcpN,`amE0,`pcI}; // BITB($nnnn)
+ 8'hF6: MCODE_S2 = {`mcLDR,`mcrM,`mcrn,`mcrB,`mcpN,`amE0,`pcI}; // LDB($nnnn)
+ 8'hF7: MCODE_S2 = {`mcLDR,`mcrB,`mcrn,`mcrM,`mcpN,`amE0,`pcI}; // STB($nnnn)
+ 8'hF8: MCODE_S2 = {`mcEOR,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // EORB($nnnn)
+ 8'hF9: MCODE_S2 = {`mcADC,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ADCB($nnnn)
+ 8'hFA: MCODE_S2 = {`mcLOR,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ORB($nnnn)
+ 8'hFB: MCODE_S2 = {`mcADD,`mcrB,`mcrM,`mcrB,`mcpN,`amE0,`pcI}; // ADDB($nnnn)
+ 8'hFC: MCODE_S2 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcI}; // LDD($nnnn)
+ 8'hFD: MCODE_S2 = {`mcLDN,`mcrD,`mcrn,`mcrN,`mcpN,`amE0,`pcI}; // STD($nnnn)
+ 8'hFE: MCODE_S2 = {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcI}; // LDX($nnnn)
+ 8'hFF: MCODE_S2 = {`mcLDN,`mcrX,`mcrn,`mcrN,`mcpN,`amE0,`pcI}; // STX($nnnn)
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S2 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S3;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h36: MCODE_S3 = `MC_NEXTI; // PSHA
+ 8'h37: MCODE_S3 = `MC_NEXTI; // PSHB
+ 8'h38: MCODE_S3 = {`mcINC,`mcrS,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // PULX
+ 8'h39: MCODE_S3 = {`mcLOR,`mcrP,`mcrM,`mcrP,`mcpN,`amS1,`pcN}; // RTS
+ 8'h3B: MCODE_S3 = {`mcPUL,`mcrN,`mcrn,`mcrX,`mcpN,`amS1,`pcN}; // RTI
+ 8'h3C: MCODE_S3 = {`mcDEC,`mcrS,`mcrn,`mcrS,`mcpN,`amPC,`pcN}; // PSHX
+ 8'h3D: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // MUL
+//-----------------------------------------------------------------------------------------
+ 8'h60: MCODE_S3 = {`mcNEG,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // NEG($nn+X)
+ 8'h61: MCODE_S3 = {`mcAND,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // AIM#,($nn+X)
+ 8'h62: MCODE_S3 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // OIM#,($nn+X)
+ 8'h63: MCODE_S3 = {`mcNOT,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // COM($nn+X)
+ 8'h64: MCODE_S3 = {`mcLSR,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // LSR($nn+X)
+ 8'h65: MCODE_S3 = {`mcEOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // EIM#,($nn+X)
+ 8'h66: MCODE_S3 = {`mcROR,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // ROR($nn+X)
+ 8'h67: MCODE_S3 = {`mcASR,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // ASR($nn+X)
+ 8'h68: MCODE_S3 = {`mcASL,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // ASL($nn+X)
+ 8'h69: MCODE_S3 = {`mcROL,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // ROL($nn+X)
+ 8'h6A: MCODE_S3 = {`mcDEC,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // DEC($nn+X)
+ 8'h6B: MCODE_S3 = {`mcAND,`mcrM,`mcrE,`mcrn,`mcpN,`amXT,`pcN}; // TIM#,($nn+X)
+ 8'h6C: MCODE_S3 = {`mcINC,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // INC($nn+X)
+ 8'h6D: MCODE_S3 = `MC_NEXTI; // TST($nn+X)
+ 8'h6F: MCODE_S3 = {`mcLDN,`mcrn,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // CLR($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'h70: MCODE_S3 = `MC_LDEXM; // NEG($nnnn)
+ 8'h71: MCODE_S3 = {`mcLDN,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // AIM#,($nn)
+ 8'h72: MCODE_S3 = {`mcLDN,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // OIM#,($nn)
+ 8'h73: MCODE_S3 = `MC_LDEXM; // COM($nnnn)
+ 8'h74: MCODE_S3 = `MC_LDEXM; // LSR($nnnn)
+ 8'h75: MCODE_S3 = {`mcEOR,`mcrT,`mcrM,`mcrT,`mcpN,`amE0,`pcI}; // EIM#,($nnnn)
+ 8'h76: MCODE_S3 = `MC_LDEXM; // ROR($nnnn)
+ 8'h77: MCODE_S3 = `MC_LDEXM; // ASR($nnnn)
+ 8'h78: MCODE_S3 = `MC_LDEXM; // ASL($nnnn)
+ 8'h79: MCODE_S3 = `MC_LDEXM; // ROL($nnnn)
+ 8'h7A: MCODE_S3 = `MC_LDEXM; // DEC($nnnn)
+ 8'h7B: MCODE_S3 = `MC_NEXTI; // TIM#,($nn)
+ 8'h7C: MCODE_S3 = `MC_LDEXM; // INC($nnnn)
+ 8'h7D: MCODE_S3 = `MC_NEXTI; // TST($nnnn)
+ 8'h7F: MCODE_S3 = {`mcLDR,`mcrn,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // CLR($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'h8D: MCODE_S3 = {`mcPSH,`mcrP,`mcrn,`mcrN,`mcpN,`amSP,`pcN}; // BSR
+//-----------------------------------------------------------------------------------------
+ 8'h93: MCODE_S3 = {`mcSUB,`mcrD,`mcrT,`mcrD,`mcp0,`amPC,`pcN}; // SUBD($nn)
+ 8'h9C: MCODE_S3 = {`mcSUB,`mcrX,`mcrT,`mcrn,`mcp0,`amPC,`pcN}; // CMPX($nn)
+ 8'h9D: MCODE_S3 = {`mcPSH,`mcrP,`mcrn,`mcrN,`mcpN,`amSP,`pcN}; // JSR($nn)
+ 8'h9E: MCODE_S3 = {`mcLDR,`mcrT,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // LDS($nn)
+ 8'h9F: MCODE_S3 = {`mcLDR,`mcrS,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // STS($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hA0: MCODE_S3 = {`mcSUB,`mcrA,`mcrE,`mcrA,`mcp0,`amPC,`pcN}; // SUBA($nn+X)
+ 8'hA1: MCODE_S3 = {`mcSUB,`mcrA,`mcrE,`mcrn,`mcp0,`amPC,`pcN}; // CMPA($nn+X)
+ 8'hA2: MCODE_S3 = {`mcSBC,`mcrA,`mcrE,`mcrn,`mcp0,`amPC,`pcN}; // SBCA($nn+X)
+ 8'hA3: MCODE_S3 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // SUBD($nn+X)
+ 8'hA4: MCODE_S3 = {`mcAND,`mcrA,`mcrE,`mcrA,`mcp0,`amPC,`pcN}; // ANDA($nn+X)
+ 8'hA5: MCODE_S3 = {`mcAND,`mcrA,`mcrE,`mcrn,`mcp0,`amPC,`pcN}; // BITA($nn+X)
+ 8'hA6: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // LDA($nn+X)
+ 8'hA7: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // STA($nn+X)
+ 8'hA8: MCODE_S3 = {`mcEOR,`mcrA,`mcrE,`mcrA,`mcp0,`amPC,`pcN}; // EORA($nn+X)
+ 8'hA9: MCODE_S3 = {`mcADC,`mcrA,`mcrE,`mcrA,`mcp0,`amPC,`pcN}; // ADCA($nn+X)
+ 8'hAA: MCODE_S3 = {`mcLOR,`mcrA,`mcrE,`mcrA,`mcp0,`amPC,`pcN}; // ORA($nn+X)
+ 8'hAB: MCODE_S3 = {`mcADD,`mcrA,`mcrE,`mcrA,`mcp0,`amPC,`pcN}; // ADDA($nn+X)
+ 8'hAC: MCODE_S3 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // CMPX($nn+X)
+ 8'hAD: MCODE_S3 = {`mcPSH,`mcrP,`mcrn,`mcrN,`mcpN,`amSP,`pcN}; // JSR.$nn+X
+ 8'hAE: MCODE_S3 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // LDS($nn+X)
+ 8'hAF: MCODE_S3 = {`mcLDN,`mcrS,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // STS($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hB0: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SUBA($nnnn)
+ 8'hB1: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // CMPA($nnnn)
+ 8'hB2: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SBCA($nnnn)
+ 8'hB3: MCODE_S3 = {`mcLOR,`mcrM,`mcrT,`mcrT,`mcpN,`amE1,`pcN}; // SUBD($nnnn)
+ 8'hB4: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ANDA($nnnn)
+ 8'hB5: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // BITA($nnnn)
+ 8'hB6: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // LDA($nnnn)
+ 8'hB7: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // STA($nnnn)
+ 8'hB8: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // EORA($nnnn)
+ 8'hB9: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADCA($nnnn)
+ 8'hBA: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ORA($nnnn)
+ 8'hBB: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADDA($nnnn)
+ 8'hBC: MCODE_S3 = {`mcLOR,`mcrM,`mcrT,`mcrT,`mcpN,`amE1,`pcN}; // CMPX($nnnn)
+ 8'hBD: MCODE_S3 = {`mcPSH,`mcrP,`mcrn,`mcrM,`mcpN,`amSP,`pcN}; // JSR.$nnnn
+ 8'hBE: MCODE_S3 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}; // LDS($nnnn)
+ 8'hBF: MCODE_S3 = {`mcLDN,`mcrS,`mcrn,`mcrM,`mcpN,`amE1,`pcN}; // STS($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'hD3: MCODE_S3 = {`mcADD,`mcrD,`mcrT,`mcrD,`mcp0,`amPC,`pcN}; // ADDD($nn)
+ 8'hDC: MCODE_S3 = {`mcLDR,`mcrD,`mcrn,`mcrD,`mcp0,`amPC,`pcN}; // LDD($nn)
+ 8'hDD: MCODE_S3 = {`mcLDR,`mcrD,`mcrn,`mcrD,`mcp0,`amPC,`pcN}; // STD($nn)
+ 8'hDE: MCODE_S3 = {`mcLDR,`mcrX,`mcrn,`mcrX,`mcp0,`amPC,`pcN}; // LDX($nn)
+ 8'hDF: MCODE_S3 = {`mcLDR,`mcrX,`mcrn,`mcrX,`mcp0,`amPC,`pcN}; // STX($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hE0: MCODE_S3 = {`mcSUB,`mcrB,`mcrE,`mcrB,`mcp0,`amPC,`pcN}; // SUBB($nn+X)
+ 8'hE1: MCODE_S3 = {`mcSUB,`mcrB,`mcrE,`mcrn,`mcp0,`amPC,`pcN}; // CMPB($nn+X)
+ 8'hE2: MCODE_S3 = {`mcSBC,`mcrB,`mcrE,`mcrB,`mcp0,`amPC,`pcN}; // SBCB($nn+X)
+ 8'hE3: MCODE_S3 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // ADDD($nn+X)
+ 8'hE4: MCODE_S3 = {`mcAND,`mcrB,`mcrE,`mcrB,`mcp0,`amPC,`pcN}; // ANDB($nn+X)
+ 8'hE5: MCODE_S3 = {`mcAND,`mcrB,`mcrE,`mcrn,`mcp0,`amPC,`pcN}; // BITB($nn+X)
+ 8'hE6: MCODE_S3 = {`mcLDR,`mcrE,`mcrn,`mcrB,`mcp0,`amPC,`pcN}; // LDB($nn+X)
+ 8'hE7: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // STB($nn+X)
+ 8'hE8: MCODE_S3 = {`mcEOR,`mcrB,`mcrE,`mcrB,`mcp0,`amPC,`pcN}; // EORB($nn+X)
+ 8'hE9: MCODE_S3 = {`mcADC,`mcrB,`mcrE,`mcrB,`mcp0,`amPC,`pcN}; // ADCB($nn+X)
+ 8'hEA: MCODE_S3 = {`mcLOR,`mcrB,`mcrE,`mcrB,`mcp0,`amPC,`pcN}; // ORB($nn+X)
+ 8'hEB: MCODE_S3 = {`mcADD,`mcrB,`mcrE,`mcrB,`mcp0,`amPC,`pcN}; // ADDB($nn+X)
+ 8'hEC: MCODE_S3 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // LDD($nn+X)
+ 8'hED: MCODE_S3 = {`mcLDN,`mcrD,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // STD($nn+X)
+ 8'hEE: MCODE_S3 = {`mcLOR,`mcrM,`mcrE,`mcrE,`mcpN,`amXT,`pcN}; // LDX($nn+X)
+ 8'hEF: MCODE_S3 = {`mcLDN,`mcrX,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // STX($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hF0: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SUBB($nnnn)
+ 8'hF1: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // CMPB($nnnn)
+ 8'hF2: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // SBCB($nnnn)
+ 8'hF3: MCODE_S3 = {`mcLOR,`mcrM,`mcrT,`mcrT,`mcpN,`amE1,`pcN}; // ADDD($nnnn)
+ 8'hF4: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ANDB($nnnn)
+ 8'hF5: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // BITB($nnnn)
+ 8'hF6: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // LDB($nnnn)
+ 8'hF7: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // STB($nnnn)
+ 8'hF8: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // EORB($nnnn)
+ 8'hF9: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADCB($nnnn)
+ 8'hFA: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ORB($nnnn)
+ 8'hFB: MCODE_S3 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // ADDB($nnnn)
+ 8'hFC: MCODE_S3 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}; // LDD($nnnn)
+ 8'hFD: MCODE_S3 = {`mcLDN,`mcrD,`mcrn,`mcrM,`mcpN,`amE1,`pcN}; // STD($nnnn)
+ 8'hFE: MCODE_S3 = {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}; // LDX($nnnn)
+ 8'hFF: MCODE_S3 = {`mcLDN,`mcrX,`mcrn,`mcrM,`mcpN,`amE1,`pcN}; // STX($nnnn)
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S3 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S4;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h39: MCODE_S4 = {`mcINC,`mcrS,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // RTS
+ 8'h3B: MCODE_S4 = {`mcLOR,`mcrM,`mcrX,`mcrX,`mcpN,`amS1,`pcN}; // RTI
+ 8'h3C: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcp0,`amPC,`pcN}; // PSHX
+ 8'h3D: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // MUL
+//-----------------------------------------------------------------------------------------
+ 8'h60: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // NEG($nn+X)
+ 8'h61: MCODE_S4 = {`mcLDN,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // AIM#,($nn+X)
+ 8'h62: MCODE_S4 = {`mcLDN,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // OIM#,($nn+X)
+ 8'h63: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // COM($nn+X)
+ 8'h64: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // LSR($nn+X)
+ 8'h65: MCODE_S4 = {`mcLDN,`mcrE,`mcrn,`mcrM,`mcpN,`amXT,`pcN}; // EIM#,($nn+X)
+ 8'h66: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ROR($nn+X)
+ 8'h67: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ASR($nn+X)
+ 8'h68: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ASL($nn+X)
+ 8'h69: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // ROL($nn+X)
+ 8'h6A: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // DEC($nn+X)
+ 8'h6B: MCODE_S4 = `MC_NEXTI; // TIM#,($nn+X)
+ 8'h6C: MCODE_S4 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // INC($nn+X)
+ 8'h6F: MCODE_S4 = `MC_NEXTI; // CLR($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'h70: MCODE_S4 = {`mcNEG,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // NEG($nnnn)
+ 8'h71: MCODE_S4 = `MC_NEXTI; // AIM#,($nn)
+ 8'h72: MCODE_S4 = `MC_NEXTI; // OIM#,($nn)
+ 8'h73: MCODE_S4 = {`mcNOT,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // COM($nnnn)
+ 8'h74: MCODE_S4 = {`mcLSR,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // LSR($nnnn)
+ 8'h75: MCODE_S4 = {`mcLDN,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // EIM#,($nnnn)
+ 8'h76: MCODE_S4 = {`mcROR,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // ROR($nnnn)
+ 8'h77: MCODE_S4 = {`mcASR,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // ASR($nnnn)
+ 8'h78: MCODE_S4 = {`mcASL,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // ASL($nnnn)
+ 8'h79: MCODE_S4 = {`mcROL,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // ROL($nnnn)
+ 8'h7A: MCODE_S4 = {`mcDEC,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // DEC($nnnn)
+ 8'h7C: MCODE_S4 = {`mcINC,`mcrT,`mcrn,`mcrM,`mcpN,`amE0,`pcN}; // INC($nnnn)
+ 8'h7F: MCODE_S4 = `MC_NEXTI; // CLR($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'h8D: MCODE_S4 = {`mcAPC, `bfRA ,`mcrn,`mcp0,`amPC,`pcN}; // BSR
+//-----------------------------------------------------------------------------------------
+ 8'h9D: MCODE_S4 = {`mcLDN,`mcrE,`mcrn,`mcrP,`mcp0,`amPC,`pcN}; // JSR($nn)
+//-----------------------------------------------------------------------------------------
+ 8'hA3: MCODE_S4 = {`mcSUB,`mcrD,`mcrE,`mcrD,`mcp0,`amPC,`pcN}; // SUBD($nn+X)
+ 8'hAC: MCODE_S4 = {`mcSUB,`mcrX,`mcrE,`mcrn,`mcp0,`amPC,`pcN}; // CMPX($nn+X)
+ 8'hAD: MCODE_S4 = {`mcADD,`mcrX,`mcrT,`mcrP,`mcp0,`amPC,`pcN}; // JSR.$nn+X
+ 8'hAE: MCODE_S4 = {`mcLDR,`mcrE,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // LDS($nn+X)
+ 8'hAF: MCODE_S4 = {`mcLDR,`mcrS,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // STS($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hB3: MCODE_S4 = {`mcSUB,`mcrD,`mcrT,`mcrD,`mcp0,`amPC,`pcN}; // SUBD($nnnn)
+ 8'hBC: MCODE_S4 = {`mcSUB,`mcrX,`mcrT,`mcrn,`mcp0,`amPC,`pcN}; // CMPX($nnnn)
+ 8'hBD: MCODE_S4 = {`mcPSH,`mcrP,`mcrn,`mcrN,`mcpN,`amSP,`pcN}; // JSR.$nnnn
+ 8'hBE: MCODE_S4 = {`mcLDR,`mcrT,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // LDS($nnnn)
+ 8'hBF: MCODE_S4 = {`mcLDR,`mcrS,`mcrn,`mcrS,`mcp0,`amPC,`pcN}; // STS($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'hE3: MCODE_S4 = {`mcADD,`mcrD,`mcrE,`mcrD,`mcp0,`amPC,`pcN}; // ADDD($nn+X)
+ 8'hEC: MCODE_S4 = {`mcLDR,`mcrE,`mcrn,`mcrD,`mcp0,`amPC,`pcN}; // LDD($nn+X)
+ 8'hED: MCODE_S4 = {`mcLDR,`mcrD,`mcrn,`mcrD,`mcp0,`amPC,`pcN}; // STD($nn+X)
+ 8'hEE: MCODE_S4 = {`mcLDN,`mcrE,`mcrn,`mcrX,`mcp0,`amPC,`pcN}; // LDX($nn+X)
+ 8'hEF: MCODE_S4 = {`mcLDR,`mcrX,`mcrn,`mcrX,`mcp0,`amPC,`pcN}; // STX($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'hF3: MCODE_S4 = {`mcADD,`mcrD,`mcrT,`mcrD,`mcp0,`amPC,`pcN}; // ADDD($nnnn)
+ 8'hFC: MCODE_S4 = {`mcLDR,`mcrT,`mcrn,`mcrD,`mcp0,`amPC,`pcN}; // LDD($nnnn)
+ 8'hFD: MCODE_S4 = {`mcLDR,`mcrD,`mcrn,`mcrD,`mcp0,`amPC,`pcN}; // STD($nnnn)
+ 8'hFE: MCODE_S4 = {`mcLDR,`mcrT,`mcrn,`mcrX,`mcp0,`amPC,`pcN}; // LDX($nnnn)
+ 8'hFF: MCODE_S4 = {`mcLDR,`mcrX,`mcrn,`mcrX,`mcp0,`amPC,`pcN}; // STX($nnnn)
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S4 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S5;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h3B: MCODE_S5 = {`mcINC,`mcrS,`mcrn,`mcrS,`mcpN,`amS1,`pcN}; // RTI
+ 8'h3D: MCODE_S5 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // MUL
+//-----------------------------------------------------------------------------------------
+ 8'h60: MCODE_S5 = `MC_NEXTI; // NEG($nn+X)
+ 8'h61: MCODE_S5 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // AIM#,($nn+X)
+ 8'h62: MCODE_S5 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // OIM#,($nn+X)
+ 8'h63: MCODE_S5 = `MC_NEXTI; // COM($nn+X)
+ 8'h64: MCODE_S5 = `MC_NEXTI; // LSR($nn+X)
+ 8'h65: MCODE_S5 = {`mcNOP,`mcrn,`mcrn,`mcrn,`mcpN,`amPC,`pcN}; // EIM#,($nn+X)
+ 8'h66: MCODE_S5 = `MC_NEXTI; // ROR($nn+X)
+ 8'h67: MCODE_S5 = `MC_NEXTI; // ASR($nn+X)
+ 8'h68: MCODE_S5 = `MC_NEXTI; // ASL($nn+X)
+ 8'h69: MCODE_S5 = `MC_NEXTI; // ROL($nn+X)
+ 8'h6A: MCODE_S5 = `MC_NEXTI; // DEC($nn+X)
+ 8'h6C: MCODE_S5 = `MC_NEXTI; // INC($nn+X)
+//-----------------------------------------------------------------------------------------
+ 8'h70: MCODE_S5 = `MC_NEXTI; // NEG($nnnn)
+ 8'h73: MCODE_S5 = `MC_NEXTI; // COM($nnnn)
+ 8'h74: MCODE_S5 = `MC_NEXTI; // LSR($nnnn)
+ 8'h75: MCODE_S5 = `MC_NEXTI; // EIM#,($nnnn)
+ 8'h76: MCODE_S5 = `MC_NEXTI; // ROR($nnnn)
+ 8'h77: MCODE_S5 = `MC_NEXTI; // ASR($nnnn)
+ 8'h78: MCODE_S5 = `MC_NEXTI; // ASL($nnnn)
+ 8'h79: MCODE_S5 = `MC_NEXTI; // ROL($nnnn)
+ 8'h7A: MCODE_S5 = `MC_NEXTI; // DEC($nnnn)
+ 8'h7C: MCODE_S5 = `MC_NEXTI; // INC($nnnn)
+//-----------------------------------------------------------------------------------------
+ 8'hBD: MCODE_S5 = {`mcLDN,`mcrE,`mcrn,`mcrP,`mcp0,`amPC,`pcN}; // JSR.$nnnn
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S5 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S6;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h3B: MCODE_S6 = {`mcPUL,`mcrN,`mcrn,`mcrP,`mcpN,`amS1,`pcN}; // RTI
+ 8'h3D: MCODE_S6 = {`mcMUL,`mcrA,`mcrB,`mcrD,`mcp0,`amPC,`pcI}; // MUL
+//-----------------------------------------------------------------------------------------
+ 8'h61: MCODE_S6 = `MC_NEXTI; // AIM#,($nn+X)
+ 8'h62: MCODE_S6 = `MC_NEXTI; // OIM#,($nn+X)
+ 8'h65: MCODE_S6 = `MC_NEXTI; // EIM#,($nn+X)
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S6 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S7;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h3B: MCODE_S7 = {`mcLOR,`mcrM,`mcrP,`mcrP,`mcpN,`amS1,`pcN}; // RTI
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S7 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S8;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h3B: MCODE_S8 = {`mcINC,`mcrS,`mcrn,`mcrS,`mcpN,`amPC,`pcN}; // RTI
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S8 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
+function `mcwidth MCODE_S9;
+input [7:0] opc;
+begin
+ case (opc)
+//-----------------------------------------------------------------------------------------
+ 8'h3B: MCODE_S9 = {`mcLDN,`mcrT,`mcrn,`mcrC,`mcp0,`amPC,`pcN}; // RTI
+//-----------------------------------------------------------------------------------------
+ default: MCODE_S9 = `MC_HALT;
+ endcase
+end
+endfunction
+
+
hd63701/trunk/HD63701_MCODE.i
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: hd63701/trunk/HD63701_MCROM.v
===================================================================
--- hd63701/trunk/HD63701_MCROM.v (nonexistent)
+++ hd63701/trunk/HD63701_MCROM.v (revision 2)
@@ -0,0 +1,113 @@
+/***************************************************************************
+ This file is part of "HD63701V0 Compatible Processor Core".
+****************************************************************************/
+`include "HD63701_defs.i"
+
+module HD63701_MCROM
+(
+ input CLK,
+ input [5:0] PHASE,
+ input [7:0] OPCODE,
+
+ output `mcwidth mcode
+);
+
+`include "HD63701_MCODE.i"
+
+reg [5:0] p;
+always @( posedge CLK ) p <= PHASE;
+
+wire `mcwidth mc0,mc1,mc2,mc3,mc4,mc5,mc6,mc7,mc8,mc9;
+HD63701_MCROM_S0 r0(CLK,OPCODE,mc0);
+HD63701_MCROM_S1 r1(CLK,OPCODE,mc1);
+HD63701_MCROM_S2 r2(CLK,OPCODE,mc2);
+HD63701_MCROM_S3 r3(CLK,OPCODE,mc3);
+HD63701_MCROM_S4 r4(CLK,OPCODE,mc4);
+HD63701_MCROM_S5 r5(CLK,OPCODE,mc5);
+HD63701_MCROM_S6 r6(CLK,OPCODE,mc6);
+HD63701_MCROM_S7 r7(CLK,OPCODE,mc7);
+HD63701_MCROM_S8 r8(CLK,OPCODE,mc8);
+HD63701_MCROM_S9 r9(CLK,OPCODE,mc9);
+
+assign mcode =
+ (p==`phRST ) ? {`mcLDV, `vaRST, `mcrn,`mcpN,`amE0,`pcN}: //(Load Reset Vector)
+
+ (p==`phVECT ) ? {`mcLDN,`mcrM,`mcrn,`mcrU,`mcpN,`amE0,`pcN}: //(Load VectorH)
+ (p==`phVEC1 ) ? {`mcLDN,`mcrM,`mcrn,`mcrV,`mcpN,`amE1,`pcN}: //(Load VectorL)
+ (p==`phVEC2 ) ? {`mcLDN,`mcrT,`mcrn,`mcrP,`mcp0,`amPC,`pcN}: //(Load to PC)
+
+ (p==`phEXEC ) ? mc0 :
+ (p==`phEXEC1) ? mc1 :
+ (p==`phEXEC2) ? mc2 :
+ (p==`phEXEC3) ? mc3 :
+ (p==`phEXEC4) ? mc4 :
+ (p==`phEXEC5) ? mc5 :
+ (p==`phEXEC6) ? mc6 :
+ (p==`phEXEC7) ? mc7 :
+ (p==`phEXEC8) ? mc8 :
+ (p==`phEXEC9) ? mc9 :
+
+ (p==`phINTR ) ? {`mcLDN,`mcrC,`mcrn,`mcrT,`mcpN,`amPC,`pcN}: //(T=C)
+ (p==`phINTR1) ? {`mcPSH,`mcrP,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH PL]
+ (p==`phINTR2) ? {`mcPSH,`mcrP,`mcrn,`mcrN,`mcpN,`amSP,`pcN}: //[PUSH PH]
+ (p==`phINTR3) ? {`mcPSH,`mcrX,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH XL]
+ (p==`phINTR4) ? {`mcPSH,`mcrX,`mcrn,`mcrN,`mcpN,`amSP,`pcN}: //[PUSH XH]
+ (p==`phINTR5) ? {`mcPSH,`mcrA,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH A]
+ (p==`phINTR6) ? {`mcPSH,`mcrB,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH B]
+ (p==`phINTR7) ? {`mcPSH,`mcrT,`mcrn,`mcrM,`mcpN,`amSP,`pcN}: //[PUSH T]
+ (p==`phINTR8) ? 0:
+ (p==`phINTR9) ? 0:
+ `MC_HALT;
+
+endmodule
+
+module HD63701_MCROM_S0( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S0(OPCODE);
+endmodule
+
+module HD63701_MCROM_S1( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S1(OPCODE);
+endmodule
+
+module HD63701_MCROM_S2( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S2(OPCODE);
+endmodule
+
+module HD63701_MCROM_S3( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S3(OPCODE);
+endmodule
+
+module HD63701_MCROM_S4( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S4(OPCODE);
+endmodule
+
+module HD63701_MCROM_S5( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S5(OPCODE);
+endmodule
+
+module HD63701_MCROM_S6( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S6(OPCODE);
+endmodule
+
+module HD63701_MCROM_S7( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S7(OPCODE);
+endmodule
+
+module HD63701_MCROM_S8( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S8(OPCODE);
+endmodule
+
+module HD63701_MCROM_S9( input CLK, input [7:0] OPCODE, output reg `mcwidth mcode );
+`include "HD63701_MCODE.i"
+always @( posedge CLK ) mcode <= MCODE_S9(OPCODE);
+endmodule
+
hd63701/trunk/HD63701_MCROM.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property