gpt4 book ai didi

java - 用Java模拟ADC指令

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:55 24 4
gpt4 key购买 nike

我正在尝试用 Java 创建 MOS6502 的 ADC 指令。更具体地说,ADC 十进制指令,它使用 BCD 整数表示而不是 2 的补码表示。该指令被修改为仅涉及添加 8 位数字,而不是像普通指令那样添加 16 位数字。

下面的代码可以成功添加 1+1,但在尝试将 49 (73) 美元和 1 加在一起时输出 0,我不确定为什么会发生这种情况。

在这些测试中,进位位始终设置为 0。

private int adcDecimal(int a, int op)
{
System.out.println("[CPU] ADC-Decimal: " + a + " + " + op + " + " + getCarryBit());

int tmp;
int result;

tmp = (a & 0x0f) + (op & 0x0f) + getCarryBit();
if((tmp & 0xff) > 9)
tmp += 6;

result = (tmp & 0x0f);
result &= 0xff;

setCarryFlag(tmp > 7);
setZeroFlag(result == 0);
setOverflowFlag(false);

negativeFlag = (result & 0x80) != 0;

System.out.println("[CPU] ADC-Decimal result: " + result);

return result;
}

最佳答案

代码:

public class MOS6502 {

boolean negativeFlag;

private int getCarryBit() { return 0; }
private void setCarryFlag( boolean flag ) {}
private void setZeroFlag( boolean flag ) {}
private void setOverflowFlag( boolean flag ) {}

private int adcDecimal( int a, int b ) {
System.out.printf("[CPU] ADC-Decimal: %04X + %04X + %d",
a, b, getCarryBit());
int tmp =
10*(( a & 0xf0 ) >> 4 ) +
( a & 0x0f ) +
10*(( b & 0xf0 ) >> 4 ) +
( b & 0x0f ) +
getCarryBit();
setCarryFlag( tmp > 0x99 );
int result = 0;
int digit = 0;
while( tmp > 0 ) {
result |= (tmp % 10) << (4*digit++);
tmp /= 10;
}
setZeroFlag( result == 0 );
setOverflowFlag( false );
negativeFlag = (result & 0x80) != 0;
System.out.printf(", result: %04X\n", result);
return result;
}

public static void main(String[] args) throws Exception {
MOS6502 mos6502 = new MOS6502();
mos6502.adcDecimal( 1, 1 );
mos6502.adcDecimal( 1, 4 );
mos6502.adcDecimal( 8, 5 );
mos6502.adcDecimal( 0x48, 0x49 );
}
}

输出:

$ javac MOS6502.java ; java MOS6502
[CPU] ADC-Decimal: 0001 + 0001 + 0, result: 0002
[CPU] ADC-Decimal: 0001 + 0004 + 0, result: 0005
[CPU] ADC-Decimal: 0008 + 0005 + 0, result: 0013
[CPU] ADC-Decimal: 0048 + 0049 + 0, result: 0097

关于java - 用Java模拟ADC指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com