小编Jak*_*ger的帖子

6502 CPU仿真

这是周末,所以我通过写一个爱好项目来度过整周的编程.

我昨天编写了一个MOS 6502 CPU仿真器的框架,实现了寄存器,堆栈,内存和所有操作码.(链接到下面的来源)

我可以在我编写的调试器中手动运行一系列操作,但是我想加载一个NES rom并按指令指向程序计数器,我认为这是找到有缺陷的操作码的最快方法.

我写了一个快速的NES rom加载程序并将ROM库加载到CPU内存中.

问题是我不知道操作码是如何编码的.我知道操作码本身遵循每个操作码一个字节的模式,该模式唯一地标识操作码,

0 - BRK
1 - ORA (D,X)
2 - COP b
Run Code Online (Sandbox Code Playgroud)

等等

但是我不确定我应该在哪里找到操作码参数.是直接跟随的字节吗?在绝对记忆中,我想它可能不是一个字节而是一个短.

有人熟悉这个CPU的内存模型吗?

编辑:我意识到这可能是在黑暗中拍摄,但我希望有一些老学校的苹果和Commodore黑客潜伏在这里.

编辑:感谢大家的帮助.在我实施适当的更改以对齐每个操作后,CPU可以加载并运行Mario Brothers.除了循环等待Start之外它什么也没做,但它是一个好兆头:)

我上传了这个来源:

http://www.codeplex.com/Cpu6502/SourceControl/DirectoryView.aspx?SourcePath=&changeSetId=1810

如果有人想知道模拟器是如何工作的,那么它很容易理解.至少没有优化,但是再次,我在2.4ghz机器上模拟一个以2mhz运行的CPU :)

6502 machine-language emulation

18
推荐指数
1
解决办法
5785
查看次数

java.util.Scanner挂在hasNext()上

我在Scanner班上遇到一个非常奇怪的问题.我正在使用特殊的EOF令牌Scanner来读取消息Socket.如果客户端一次写入所有请求,或者请求有数据,那么一切正常,但阻塞hasNext()操作在服务器上挂起,反过来客户端,当消息以块的形式写入时,下一个令牌应该是空字符串.

什么会导致这个?我该如何避免这种情况?

这是我正在尝试做的简化版本,\n用于测试目的,假设分隔符可以是任何字符串.

服务器代码:

ServerSocketChannel serverChannel = null;
try {
    serverChannel = ServerSocketChannel.open();

    ServerSocket serverSocket = serverChannel.socket();
    serverSocket.bind(new InetSocketAddress(9081));

    SocketChannel channel = serverChannel.accept();
    Socket socket = channel.socket();

    InputStream is = socket.getInputStream();
    Reader reader = new InputStreamReader(is);
    Scanner scanner = new Scanner(reader);
    scanner.useDelimiter("\n");

    OutputStream os = socket.getOutputStream();
    Writer writer = new OutputStreamWriter(os);

    while (scanner.hasNext()) {
        String msg = scanner.next();
        writer.write(msg);
        writer.write('\n');
        writer.flush();
    }
} catch (IOException e) {
    e.printStackTrace();
} finally …
Run Code Online (Sandbox Code Playgroud)

java sockets serversocket hang java.util.scanner

6
推荐指数
1
解决办法
1004
查看次数