/** * 读取指定内存地址一字节数据,并以byte返回 * @param addr 地址 * @return byte数据 */ public sbyte getByte(int addr) { //Notice: 该实现与resetRamAddress的实现方式有关 if (addr >= runRam.getStartAddr()) { return(runRam.getByte(addr)); } if (addr >= strRam.getStartAddr()) { return(strRam.getByte(addr)); } for (int index = ramCount - 1; index >= 0; index--) { Ram.Ram ram = rams[index]; if (addr >= ram.getStartAddr()) { return(ram.getByte(addr)); } } return(-1); //throw new IndexOutOfBoundsException("内存读越界:" + addr); }
/** * 将地址为addr的数据设为b * 注意:这些内存地址中可能涉及到显存或屏幕缓冲区,该方法不负责通知相应组件<p> * 应该自己调用intersectWithGraph()方法判断并做出相应反应 * @param addr 地址 * @param b 数据 * @throws IndexOutOfBoundsException 内存写越界 */ public void setByte(int addr, sbyte b) { //Notice: 该实现与resetRamAddress的实现方式有关 if (addr >= runRam.getStartAddr()) { runRam.setByte(addr, b); return; } if (addr >= strRam.getStartAddr()) { strRam.setByte(addr, b); return; } for (int index = ramCount - 1; index >= 0; index--) { Ram.Ram ram = rams[index]; if (addr >= ram.getStartAddr()) { ram.setByte(addr, b); return; } } //throw new IndexOutOfBoundsException("内存写越界:" + addr); }