For example, an LDA #$xxxx would look like $00A9, $xxxx in Hex Editor.
With a B Accumulator, a Macro/.BYTE on As65 using an LDB #$xxxx presently looks like $A9A9, $xxxx.
Code: Select all
always @(posedge clk)
if( state == DECODE && RDY )
casex( IR[15:0] ) // decode all 16 bits
16'b0000_0000_1110_1000, // INX
16'b0000_0000_1100_1010, // DEX
16'b0000_0000_101x_xx10, // LDX, TAX, TSX
16'b0000_0001_101x_xx10: //TBX
dst_reg <= SEL_X;
16'b0000_0000_0x00_1000, // PHP, PHA
16'b0000_0000_1001_1010, // TXS
16'b0000_0001_0x00_1000: //PHB
dst_reg <= SEL_S;
16'b0000_0000_1x00_1000, // DEY, DEX
16'b0000_0000_101x_x100, // LDY
16'b0000_0000_1010_x000, // LDY #imm, TAY
16'b0000_0001_1010_x000: //TBY
dst_reg <= SEL_Y;
16'bxxxx_xxx1_xxxx_xxxx:
dst_reg <= SEL_B;
16'bxxxx_xxx0_xxxx_xxxx:
dst_reg <= SEL_A;
endcaseCode: Select all
always @(posedge clk)
if( state == DECODE && RDY )
casex( IR[15:0] ) // decode all 16 bits
16'b0000_0000_1110_1000, // INX
16'b0000_0000_1100_1010, // DEX
16'b0000_0000_101x_xx10, // LDX, TAX, TSX
16'b0000_0001_101x_xx10: //TBX
dst_reg <= SEL_X;
16'b0000_0000_0x00_1000, // PHP, PHA
16'b0000_0000_1001_1010, // TXS
16'b0000_0001_0x00_1000: //PHB
dst_reg <= SEL_S;
16'b0000_0000_1x00_1000, // DEY, DEX
16'b0000_0000_101x_x100, // LDY
16'b0000_0000_1010_x000, // LDY #imm, TAY
16'b0000_0001_1010_x000: //TBY
dst_reg <= SEL_Y;
16'bxxxx_xxx1_xxxx_xxxx:
dst_reg <= SEL_B;
16'bxxxx_xxx0_xxxx_xxxx:
dst_reg <= SEL_A;
endcaseCode: Select all
always @(posedge clk)
if( state == DECODE && RDY )
casex( IR[15:0] ) // decode all 16 bits
16'b0000_000x_1110_1000, // INX
16'b0000_000x_1100_1010, // DEX
16'b0000_000x_101x_xx10, // LDX, TAX, TBX, TSX
dst_reg <= SEL_X;
Code: Select all
default: dst_reg <= IR[8] ? SEL_B : SEL_A;
Code: Select all
.CODE
.ORG $FFFFE000
LDBi .MACRO ;LDB #$xxxx
.BYTE $01A9
.ENDM
LDBa .MACRO ;LDB $xxxxxxxx
.BYTE $01AD
.ENDM
STBa .MACRO ;STB $xxxxxxxx
.BYTE $018D
.ENDM
DECBa .MACRO ;DECB $xxxxxxxx
.BYTE $01CE
.ENDM
CMPBi .MACRO ;CMPB #$xxxx
.BYTE $01C9
.ENDM
START LDBi
.BYTE $00A5 ;load $00A5 in B Accumulator
STBa
.WORD $00000400 ;store B Accumulator @$00000400
AA DECBa
.WORD $00000400 ;***I was confused here***, no need for a DECB, still DEC $00000040
LDBa
.WORD $00000400 ;load B Accumulator with value @$00000040
CMPBi
.BYTE $00A0 ;CMPBi #$00A0
BNE AA
RTS ;leads to BRK since no JSRCode: Select all
default: dst_reg <= IR[8] ? SEL_B : SEL_A; Code: Select all
assign y = s ? b : a;Code: Select all
...
always @(*)
if (s == 0)
y = a;
else
y = b;
endmoduleCode: Select all
default: dst_reg <= IR[9:8] ? SEL_D : SEL_C : SEL_B : SEL_A;Code: Select all
default: dst_reg <= IR[9:8] ?? SEL_D : SEL_C : SEL_B : SEL_A;Code: Select all
(cond_expr) ? (true_expr) : (false_expr)
Code: Select all
(cond_expr1) ? ((cond_expr2) ? (t1_t2) : (t1_f2)) : ((cond_expr2) ? ((f1_t2) : (f1_f2))
Code: Select all
...
always @(*)
if (s == 0)
y = a;
else
y = b;
endmoduleCode: Select all
default: dst_reg <= IR[9:8] == 2'b11 ? SEL_D :
IR[9:8] == 2'b10 ? SEL_C :
IR[9:8] == 2'b01 ? SEL_B :
SEL_A;
Code: Select all
default: case( IR[9:8] )
2'b00: dst_reg <= SEL_A;
2'b01: dst_reg <= SEL_B;
2'b10: dst_reg <= SEL_C;
2'b11: dst_reg <= SEL_D;
endcase
Code: Select all
default: dst_reg <= { 2'b10, IR[9:8] };
Code: Select all
START LDA #$A5
TAY
TYB
TYC
TYD
CLC
ADC #$0001 ;Add #$01 to A accumulator
ADCBi
.BYTE $0002 ;Add #$02 to B accumulator
ADCCi
.BYTE $0003 ;Add #$03 to C accumulator
ADCDi
.BYTE $0004 ;Add #$04 to D accumulator