Exemplo n.º 1
0
        /**
         * 卸载ram,如果并没有安装过ram,则什么也不会发生
         * @param type 需要卸载的内存类型
         */
        public void uninstall(int type)
        {
            Ram.Ram ram = null;
            switch (type)
            {
            case RamConst.RAM_RUNTIME_TYPE:
                ram    = runRam;
                runRam = null;
                break;

            case RamConst.RAM_GRAPH_TYPE:
                ram      = graphRam;
                graphRam = null;
                break;

            case RamConst.RAM_BUFFER_TYPE:
                ram       = bufferRam;
                bufferRam = null;
                break;

            case RamConst.RAM_STRING_TYPE:
                ram    = strRam;
                strRam = null;
                break;

            case RamConst.RAM_TEXT_TYPE:
                ram     = textRam;
                textRam = null;
                break;
            }
            if (ram != null)
            {
                resetRamAddress();
            }
        }
Exemplo n.º 2
0
        /**
         * 往里面添加内存模块,每种类型的内存最多只能安装一个.<p>
         * ram为null不会抛出异常,且不会改变RamManager的任何状态
         * @param ram 需要安装的内存
         * @throws IllegalStateException 已经安装了这种类型的内存
         * @see #uninstall
         */
        public void install(Ram.Ram ram)
        {
            if (ram == null)
            {
                return;
            }
            switch (ram.getRamType())
            {
            case RamConst.RAM_RUNTIME_TYPE:
                if (runRam != null)
                {
                    //throw new IllegalStateException("Runtime Ram was installed!");
                }
                runRam = (RuntimeRam)ram;
                break;

            case RamConst.RAM_GRAPH_TYPE:
                if (graphRam != null)
                {
                    //throw new IllegalStateException("Graph Ram was installed!");
                }
                graphRam = (RelativeRam)ram;
                screen   = graphRam.getScreenModel();
                break;

            case RamConst.RAM_BUFFER_TYPE:
                if (bufferRam != null)
                {
                    //throw new IllegalStateException("Buffer Ram was installed!");
                }
                bufferRam = (RelativeRam)ram;
                break;

            case RamConst.RAM_STRING_TYPE:
                if (strRam != null)
                {
                    //throw new IllegalStateException("String Ram was installed!");
                }
                strRam = (StringRam)ram;
                break;

            case RamConst.RAM_TEXT_TYPE:
                if (textRam != null)
                {
                    //throw new IllegalStateException("Text Ram was installed!");
                }
                textRam = (RelativeRam)ram;
                break;
            }
            resetRamAddress();
        }
Exemplo n.º 3
0
 /**
  * 读取指定内存地址一字节数据,并以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);
 }
Exemplo n.º 4
0
 /**
  * 将地址为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);
 }