mirror of
https://github.com/litruv/picoGraph.git
synced 2026-07-24 02:36:04 +10:00
- Created test_cart.p8 with basic drawing functionality and a print statement. - Created test_unix.p8 with a simple initialization function.
95 lines
5.4 KiB
HTML
95 lines
5.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
body { background: #1a1a2e; display: flex; align-items: center; justify-content: center; width: 100vw; height: 100vh; overflow: hidden; }
|
|
#canvas { image-rendering: pixelated; image-rendering: crisp-edges; width: 512px !important; height: 512px !important; border: 8px solid #000; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<canvas id="canvas" width="128" height="128"></canvas>
|
|
<script>
|
|
var pico8_state = [];
|
|
var pico8_buttons = [0,0,0,0,0,0,0,0];
|
|
var codo_command = 0;
|
|
var _cartname = ['untitled.p8'];
|
|
var codo_key_buffer = [];
|
|
var p8_keyboard_state = 0;
|
|
var pico8_mouse = [];
|
|
var pico8_gamepads = { count: 0 };
|
|
var pico8_gpio = new Array(128).fill(0);
|
|
var p8_dropped_cart = null;
|
|
var p8_dropped_cart_name = '';
|
|
|
|
var CART_B64 = 'cGljby04IGNhcnRyaWRnZSAvLyBodHRwOi8vd3d3LnBpY28tOC5jb20KdmVyc2lvbiA0MQpfX2x1YV9fCi0tIEdlbmVyYXRlZCB3aXRoIHBpY29HcmFwaAoKZnVuY3Rpb24gX2RyYXcoKQogIGNscygwKQogIGNpcmNmaWxsKDMyLCAzMiwgMjQsIDgpCmVuZApmdW5jdGlvbiBfdXBkYXRlKCkKZW5kCgpfX2dmeF9fCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCg==';
|
|
|
|
// Silence all XHR — PICO-8 makes BBS metadata calls that crash from file:// origin.
|
|
(function() {
|
|
function MockXHR() {
|
|
this.onload = null; this.onerror = null; this.onreadystatechange = null;
|
|
this.readyState = 0; this.status = 0; this.statusText = '';
|
|
this.response = null; this.responseText = ''; this.responseType = '';
|
|
}
|
|
MockXHR.UNSENT=0; MockXHR.OPENED=1; MockXHR.HEADERS_RECEIVED=2; MockXHR.LOADING=3; MockXHR.DONE=4;
|
|
MockXHR.prototype.open = function() { this.readyState = 1; };
|
|
MockXHR.prototype.send = function() {
|
|
var self = this;
|
|
setTimeout(function() {
|
|
self.readyState = 4; self.status = 200; self.statusText = 'OK';
|
|
self.response = self.responseType === 'arraybuffer' ? new ArrayBuffer(0) : '';
|
|
self.responseText = '';
|
|
if (typeof self.onload === 'function') self.onload({ target: self });
|
|
if (typeof self.onreadystatechange === 'function') self.onreadystatechange();
|
|
}, 0);
|
|
};
|
|
MockXHR.prototype.setRequestHeader = function() {};
|
|
MockXHR.prototype.getResponseHeader = function() { return null; };
|
|
MockXHR.prototype.getAllResponseHeaders = function() { return ''; };
|
|
MockXHR.prototype.abort = function() {};
|
|
MockXHR.prototype.addEventListener = function(e, fn) {
|
|
if (e==='load') this.onload=fn;
|
|
if (e==='error') this.onerror=fn;
|
|
if (e==='readystatechange') this.onreadystatechange=fn;
|
|
};
|
|
MockXHR.prototype.removeEventListener = function() {};
|
|
window.XMLHttpRequest = MockXHR;
|
|
})();
|
|
|
|
var Module = {
|
|
arguments: [],
|
|
canvas: document.getElementById('canvas'),
|
|
preRun: [function() {
|
|
if (typeof IDBFS !== 'undefined' && typeof MEMFS !== 'undefined') {
|
|
var orig = FS.mount.bind(FS);
|
|
FS.mount = function(type, opts, mp) { return orig(type===IDBFS?MEMFS:type, opts, mp); };
|
|
}
|
|
FS.syncfs = function(populate, callback) {
|
|
var cb = typeof callback==='function' ? callback : typeof populate==='function' ? populate : null;
|
|
if (cb) setTimeout(function(){ cb(null); }, 0);
|
|
};
|
|
}],
|
|
postRun: [function() {
|
|
setTimeout(function() {
|
|
p8_dropped_cart = 'data:application/octet-stream;base64,' + CART_B64;
|
|
p8_dropped_cart_name = 'picograph.p8';
|
|
codo_command = 9;
|
|
|
|
// After cart loads, inject "run" + Enter to execute it
|
|
setTimeout(function() {
|
|
// Push keystrokes: r u n Enter (lowercase ASCII)
|
|
codo_key_buffer.push(114, 117, 110, 13);
|
|
}, 300);
|
|
}, 200);
|
|
}],
|
|
print: function(t) { console.log('P8:', t); },
|
|
printErr: function(t) { console.error('P8:', t); },
|
|
setStatus: function() {}
|
|
};
|
|
|
|
function pico8_audio_context_suspended() { return false; }
|
|
</script>
|
|
<script src="./pico8_edu.js"></script>
|
|
</body>
|
|
</html> |