d6502仿真器

原文
链接

module example;

import std.stdio;
import emu6502;

void main() {
  ubyte[0x10000] memory;
  ubyte[] code = [
    0xA2, 0x00,       //   lda #0
                      // 循环:
    0xBD, 0x0E, 0x80, //   lda data,x
    0x8D, 0x00, 0xE0, //   sta $E000
    0xC9, 0x00,       //   cmp #0
    0xE8,             //   inx
    0xD0, 0xF5,       //   bne loop
    0x00,             //   brk
                      // data: .asciiz 'Hello, World!\n'
    0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x0A, 0x00
  ];
  // 把代码放进内存
  foreach(i, b; code)
    memory[0x8000+i] = b;
  // 置重置向量
  memory[0xFFFC] = 0x00;
  memory[0xFFFD] = 0x80;
  // 创建模拟器
  auto emu = new Emu6502(
    (ushort address) {
      return memory[address];
    },
    (ushort address, ubyte value) {
      if(address == 0xE000)
        write(cast(char)value);
      else
        memory[address] = value;
    },
    (ubyte n) {}
  );
  emu.reset();
  emu.throwExceptionOnBreak = true;
  // 运行.
  try {
    while(true)
      emu.step();
  } catch(BreakException) {}
}
posted @   zjh6  阅读(17)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示