| "use strict"; |
| |
| // jor1k compatibility |
| |
| var VIRTIO_MAGIC_REG = 0x0; |
| var VIRTIO_VERSION_REG = 0x4; |
| var VIRTIO_DEVICE_REG = 0x8; |
| var VIRTIO_VENDOR_REG = 0xc; |
| var VIRTIO_HOSTFEATURES_REG = 0x10; |
| var VIRTIO_HOSTFEATURESSEL_REG = 0x14; |
| var VIRTIO_GUESTFEATURES_REG = 0x20; |
| var VIRTIO_GUESTFEATURESSEL_REG = 0x24; |
| var VIRTIO_GUEST_PAGE_SIZE_REG = 0x28; |
| var VIRTIO_QUEUESEL_REG = 0x30; |
| var VIRTIO_QUEUENUMMAX_REG = 0x34; |
| var VIRTIO_QUEUENUM_REG = 0x38; |
| var VIRTIO_QUEUEALIGN_REG = 0x3C; |
| var VIRTIO_QUEUEPFN_REG = 0x40; |
| var VIRTIO_QUEUENOTIFY_REG = 0x50; |
| var VIRTIO_INTERRUPTSTATUS_REG = 0x60; |
| var VIRTIO_INTERRUPTACK_REG = 0x64; |
| var VIRTIO_STATUS_REG = 0x70; |
| |
| /** @const */ |
| var VRING_DESC_F_NEXT = 1; /* This marks a buffer as continuing via the next field. */ |
| /** @const */ |
| var VRING_DESC_F_WRITE = 2; /* This marks a buffer as write-only (otherwise read-only). */ |
| /** @const */ |
| var VRING_DESC_F_INDIRECT = 4; /* This means the buffer contains a list of buffer descriptors. */ |
| |
| |
| function hex8(n) |
| { |
| return h(n); |
| } |
| |
| var message = {}; |
| |
| /** @param {...string} log */ |
| message.Debug = function(log) |
| { |
| dbg_log([].slice.apply(arguments).join(" "), LOG_9P); |
| } |
| |
| message.Abort = function() |
| { |
| if(DEBUG) |
| { |
| throw "abort"; |
| } |
| } |
| |
| |
| // XXX: Should go through emulator interface |
| var LoadBinaryResource; |
| |
| if(typeof XMLHttpRequest !== "undefined") |
| { |
| LoadBinaryResource = function(url, OnSuccess, OnError) { |
| var req = new XMLHttpRequest(); |
| req.open('GET', url, true); |
| req.responseType = "arraybuffer"; |
| req.onreadystatechange = function () { |
| if (req.readyState != 4) { |
| return; |
| } |
| if ((req.status != 200) && (req.status != 0)) { |
| OnError("Error: Could not load file " + url); |
| return; |
| } |
| var arrayBuffer = req.response; |
| if (arrayBuffer) { |
| OnSuccess(arrayBuffer); |
| } else { |
| OnError("Error: No data received from: " + url); |
| } |
| }; |
| /* |
| req.onload = function(e) |
| { |
| var arrayBuffer = req.response; |
| if (arrayBuffer) { |
| OnLoadFunction(arrayBuffer); |
| } |
| }; |
| */ |
| req.send(null); |
| } |
| } |
| else |
| { |
| LoadBinaryResource = function(url, OnSuccess, OnError) |
| { |
| //console.log(url); |
| require("fs")["readFile"](url, function(err, data) |
| { |
| if(err) |
| { |
| OnError(err); |
| } |
| else |
| { |
| OnSuccess(new Uint8Array(data).buffer); |
| } |
| }); |
| } |
| } |