代码之家  ›  专栏  ›  技术社区  ›  SunnyShah

如何制作ARM9自定义设备仿真器?

  •  1
  • SunnyShah  · 技术社区  · 15 年前

    多谢各位;当做

    晴朗的

    2 回复  |  直到 15 年前
        1
  •  2
  •   shodanex    15 年前

    QEMU . 我不明白,但是,为什么你需要一个完整的模拟器?

        2
  •  4
  •   Peter    15 年前

    您想只模拟处理器还是整个机器?

    模拟CPU非常简单,只需定义一个包含所有CPU寄存器的结构,创建一个阵列来模拟RAM,然后像这样进行模拟:

        cpu_ticks = 0;  // counter for cpu cycles 
    
        while (true) {
    
          opcode = RAM[CPU.PC++]; // Fetch opcode and increment program counter
    
          switch (opcode) {
    
            case 0x12: // invented opcode for "MOV A,B"
              CPU.A = CPU.B;
              cpu_ticks += 4; // imagine you need 4 ticks for this operation
              set_cpu_flags_mov();
              break;
    
            case 0x23: // invented opcode for "ADD A, #"
              CPU.A += RAM[CPU. PC++]; // get operand from memory
              cpu_ticks += 8;
              set_cpu_flags_add();
              break;
    
            case 0x45: // invented opcode for "JP Z, #"
              if (CPU.FLAGS.Z) CPU.PC=RAM[CPU.PC++]; // jump
              else CPU.PC++; // continue
              cpu_ticks += 12;
              set_cpu_flags_jump();
              break;
            ...
          }
    
          handle_interrupts();
    
        }
    

    模拟整个机器要困难得多。。。您需要模拟LCD控制器、内存映射寄存器、内存库控制器、DMA、输入设备、声音、I/O等等。。。另外,您可能需要从bios和操作系统中转储。。。我不知道ARM处理器,但如果它有管道、缓存之类的东西,时间安排就会变得更复杂。

    如果所有硬件部件都有完整的文档记录,则没有问题,但如果需要反向工程或猜测模拟机器的工作方式。。。你会很难熬的。

    从这里开始: http://infocenter.arm.com/help/index.jsp 并下载处理器的“技术参考手册”。

    http://www.google.es/search?q=how+to+write+an+emulator