Beispiel #1
0
        /**
         * 得到以start开始end结束的内存地址在屏幕上的显示区域<p>
         * @param start 开始地址,包括
         * @param end 结束地址,不包括
         * @return 该内存区域在屏幕显示区域的最小覆盖矩形;如果不存在现存或该内存块不与显存相交,则返回一个空的Area
         */
        public Area intersectWithGraph(int start, int end)
        {
            if (graphRam == null)
            {
                return(Area.EMPTY_AREA);
            }
            if (start >= graphRam.getStartAddr() + graphRam.size() || end <= graphRam.getStartAddr())
            {
                return(Area.EMPTY_AREA);
            }
            if (start < graphRam.getStartAddr())
            {
                start = graphRam.getStartAddr();
            }
            if (end > graphRam.getStartAddr() + graphRam.size())
            {
                end = graphRam.getStartAddr() + graphRam.size();
            }
            start <<= 3;
            end     = (end << 3) - 1;
            int y1 = start / screen.getWidth();
            int x1 = start % screen.getWidth();
            int y2 = end / screen.getWidth();
            int x2 = end % screen.getWidth();

            if (y1 == y2)
            {
                return(new Area(x1, y1, x2 - x1 + 1, 1));
            }
            else
            {
                return(new Area(0, y1, screen.getWidth(), y2 - y1 + 1));
            }
        }
Beispiel #2
0
 /// <summary>
 /// 设置用于显示的ScreenModel,并作适当的初始化
 /// </summary>
 /// <param name="screen"></param>
 public void setScreenModel(ScreenModel screen)
 {
     if (screen == null)
     {
         //throw new IllegalArgumentException("Screen must't be null!");
     }
     if (this.screen != screen)
     {
         this.screen = screen;
         this.buffer = new sbyte[(screen.getWidth() / 6) * (screen.getHeight() / 13)];
         this.getter = new ByteArrayGetter(buffer);
         this.ram    = new ByteArrayRam(buffer, screen);
         this.render = screen.getRender();
     }
     else
     {
         ram.Clear();
     }
     this.curCol    = this.curRow = 0;
     this.isBigMode = true;
     this.maxCol    = screen.getWidth() / 8;
     this.maxRow    = screen.getHeight() / 16;
 }