123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- "use strict";
- /**
- * @constructor
- *
- * @param {BusConnector} bus
- */
- function DummyScreenAdapter(bus)
- {
- var
- graphic_image_data,
- /** @type {number} */
- cursor_row,
- /** @type {number} */
- cursor_col,
- graphical_mode_width,
- graphical_mode_height,
- // are we in graphical mode now?
- is_graphical = false,
- // Index 0: ASCII code
- // Index 1: Background color
- // Index 2: Foreground color
- text_mode_data,
- // number of columns
- text_mode_width,
- // number of rows
- text_mode_height;
- this.bus = bus;
- bus.register("screen-set-mode", function(data)
- {
- this.set_mode(data);
- }, this);
- bus.register("screen-fill-buffer-end", function(data)
- {
- var min = data[0];
- var max = data[1];
- this.update_buffer(min, max);
- }, this);
- bus.register("screen-put-char", function(data)
- {
- //console.log(data);
- this.put_char(data[0], data[1], data[2], data[3], data[4]);
- }, this);
- bus.register("screen-text-scroll", function(rows)
- {
- console.log("scroll", rows);
- }, this);
- bus.register("screen-update-cursor", function(data)
- {
- this.update_cursor(data[0], data[1]);
- }, this);
- bus.register("screen-update-cursor-scanline", function(data)
- {
- this.update_cursor_scanline(data[0], data[1]);
- }, this);
- bus.register("screen-set-size-text", function(data)
- {
- this.set_size_text(data[0], data[1]);
- }, this);
- bus.register("screen-set-size-graphical", function(data)
- {
- this.set_size_graphical(data[0], data[1]);
- }, this);
- this.put_char = function(row, col, chr, bg_color, fg_color)
- {
- if(row < text_mode_height && col < text_mode_width)
- {
- var p = 3 * (row * text_mode_width + col);
- text_mode_data[p] = chr;
- text_mode_data[p + 1] = bg_color;
- text_mode_data[p + 2] = fg_color;
- }
- };
- this.destroy = function()
- {
- };
- this.set_mode = function(graphical)
- {
- is_graphical = graphical;
- };
- this.clear_screen = function()
- {
- };
- /**
- * @param {number} cols
- * @param {number} rows
- */
- this.set_size_text = function(cols, rows)
- {
- if(cols === text_mode_width && rows === text_mode_height)
- {
- return;
- }
- text_mode_data = new Int32Array(cols * rows * 3);
- text_mode_width = cols;
- text_mode_height = rows;
- };
- this.set_size_graphical = function(width, height)
- {
- graphical_mode_width = width;
- graphical_mode_height = height;
- };
- this.set_scale = function(s_x, s_y)
- {
- };
- this.update_cursor_scanline = function(start, end)
- {
- };
- this.update_cursor = function(row, col)
- {
- if(row !== cursor_row || col !== cursor_col)
- {
- cursor_row = row;
- cursor_col = col;
- }
- };
- this.update_buffer = function(min, max)
- {
- if(max < min)
- {
- return;
- }
- var min_y = min / graphical_mode_width | 0;
- var max_y = max / graphical_mode_width | 0;
- };
- this.get_text_screen = function()
- {
- var screen = [];
- for(var i = 0; i < text_mode_height; i++)
- {
- screen.push(this.get_text_row(i));
- }
- return screen;
- };
- this.get_text_row = function(i)
- {
- var row = "";
- var offset = 3 * i * text_mode_width;
- for(var j = 0; j < text_mode_width; j++)
- {
- row += String.fromCharCode(text_mode_data[offset + 3 * j]);
- }
- return row;
- };
- }
|