module.exports = function(p3sim) {

	var $io_board_lcd = $("#io-board-lcd");
	var $io_board_leds = $("#io-board-leds");
	var $io_board_7seg = $("#io-board-7seg");
	var $io_board_buttons = $("#io-board-buttons");
	var $io_board_switches = $("#io-board-switches");
	var $leds = [];

	// populate board elements

	for (var i = 0; i < 16; i++) {
		$leds.push($("<span>").appendTo($io_board_leds));
	}

	$io_board_7seg.text("0000");

	function create_button_row(arr) {
		var $div = $("<div>");
		arr.forEach(function(i) {
			$("<button>").addClass("btn btn-xs").text("I" + i.toString(16).toUpperCase()).appendTo($div);
		});
		$div.appendTo($io_board_buttons);
	}
	create_button_row([7,  8,  9, 12]);
	create_button_row([4,  5,  6, 13]);
	create_button_row([1,  2,  3, 14]);
	create_button_row([0, 10, 11]);

	for (var i = 0; i < 8; i++) {
		$("<button>").addClass("btn").click(function() {
			var $this = $(this);
			if ($this.hasClass("on")) {
				$this.removeClass("on");
			} else {
				$this.addClass("on");
			}
		}).appendTo($io_board_switches);
	}

};

@@ -29,16 +29,55 @@
 sim) %7B%0A%0A
+%09var $io_terminal = $(%22#io-terminal%22);%0A
 %09var $io
@@ -105,24 +105,24 @@
 oard-lcd%22);%0A
-
 %09var $io_boa
@@ -313,16 +313,165 @@
  = %5B%5D;%0A%0A
+%09var seg7_value = 0;%0A%0A%09function update_7seg(value) %7B%0A%09%09seg7_value = value;%0A%09%09$io_board_7seg.text((%220000%22 + seg7_value.toString(16)).substr(-4));%0A%09%7D%0A%0A
 %09// popu
@@ -1229,15 +1229,502 @@
 tches);%0A
-
 %09%7D%0A%0A
+%09// register p3 simulator handlers%0A%0A%09p3sim.registerEventHandler(%22reset%22, function() %7B%0A%09%09update_7seg(0);%0A%09%7D);%0A%0A%09p3sim.setIOHandler(%7B%0A%09%09set7Seg0: function(v) %7B%0A%09%09%09update_7seg((seg7_value & 0xfff0) %7C (v & 0xf));%0A%09%09%7D,%0A%09%09set7Seg1: function(v) %7B%0A%09%09%09update_7seg((seg7_value & 0xff0f) %7C ((v & 0xf) %3C%3C 4));%0A%09%09%7D,%0A%09%09set7Seg2: function(v) %7B%0A%09%09%09update_7seg((seg7_value & 0xf0ff) %7C ((v & 0xf) %3C%3C 8));%0A%09%09%7D,%0A%09%09set7Seg3: function(v) %7B%0A%09%09%09update_7seg((seg7_value & 0x0fff) %7C ((v & 0xf) %3C%3C 12));%0A%09%09%7D%0A%09%7D);%0A%0A
 %7D;%0A

Connect the 7 segment display