[HAUKI-X86] EIP BYTES MNEMONIC
[HAUKI-X86] --------------------------------------------------------
[HAUKI-X86] 0x03100000 FC CLD
[HAUKI-X86] 0x03100001 BE ... MOV ESI, 0x03150000
[HAUKI-X86] 0x03100006 BF ... MOV EDI, 0x000B8000
[HAUKI-X86] 0x0310000B B9 ... MOV ECX, 1000
[HAUKI-X86] 0x03100010 F3 A5 REP MOVSD (DMA Copy)
[HAUKI-X86] 0x03100012 C3 RET
[HAUKI-X86]
[HAUKI-X86] [VMM] Matrix pyorii! (Paina VNC-ikkunassa mita tahansa nappainta
poistuaksesi)
Upeaa! Nyt toimii hienosti!
[HAUKI-X86] [VMM] Matrix suljettu. DMA-Blitter siirsi 24452000 tavua
grafiikkaa rautanopeudella!
[HAUKI-X86] >
[HAUKI-X86] > /cat MATRIX.JS
[HAUKI-X86]
[HAUKI-X86] --- MATRIX.JS ---
[HAUKI-X86] sys.serial("
[GFX] Kaynnistetaan The Matrix Rain (VCPU DMA Blitter)...
");
[HAUKI-X86]
[HAUKI-X86] var v = VMM.create();
[HAUKI-X86]
[HAUKI-X86] // ASM DMA BLITTER:
[HAUKI-X86] // CLD (Kopioi eteenpCB$in)
[HAUKI-X86] // MOV_ESI 51707904 (0x03150000 - JS Backbuffer turvamuistissa)
[HAUKI-X86] // MOV_EDI 753664 (0x000B8000 - VGA Text Mode Buffer)
[HAUKI-X86] // MOV_ECX 1000 (Kopioidaan 1000 DWORDia = 4000 tavua kerralla)
[HAUKI-X86] // REP_MOVSD (Suorita DMA siirto laitteistotasolla uskomattoman
nopeasti!)
[HAUKI-X86] // RET
[HAUKI-X86] var asm = "CLD ; MOV_ESI 51707904 ; MOV_EDI 753664 ; MOV_ECX 1000
; REP_MOVSD ; RET";
[HAUKI-X86] HASM.compile(v, asm);
[HAUKI-X86]
[HAUKI-X86] // NYT TULOSTETAAN DISASSEMBLY ENNEN AJOA JOTTA NCo?=EMME ETTCo?=
KCo?=Co?=NNCo?=S ONNISTUI!
[HAUKI-X86] sys.serial("[DIAG] VCPU Compiled ASM:
");
[HAUKI-X86] sys.serial(HASM_TOOLS.disasm(v, 19) + "
");
[HAUKI-X86]
[HAUKI-X86] var cols = 80; var rows = 25;
[HAUKI-X86] var drops = [];
[HAUKI-X86] for(var i=0; i<cols; i++) drops[i] = -Math.floor(Math.random() *
25);
[HAUKI-X86]
[HAUKI-X86] var buf = 0x03150000;
[HAUKI-X86] // WOW-EFEKTI: Alustetaan Backbuffer kokonaan harmaaksi
invert-tekstillCB$!
[HAUKI-X86] // Jos VCPU blittaa tCB$mCB$n ruudulle ensimmCB$isellCB$
frame:lla, nCB$et sen heti!
[HAUKI-X86] for(var i=0; i<4000; i+=2) { sys.poke(buf+i, 32);
sys.poke(buf+i+1, 0x70); }
[HAUKI-X86]
[HAUKI-X86] var runMatrix = true;
[HAUKI-X86] var oldKbd = OS.kbdApp; var oldVga = OS.vgaApp; OS.vgaApp = null;
[HAUKI-X86] OS.kbdApp = { onKey: function(sc) { if (sc < 128) runMatrix =
false; } };
[HAUKI-X86]
[HAUKI-X86] var frames = 0;
[HAUKI-X86] function draw() {
[HAUKI-X86] if (!runMatrix) {
[HAUKI-X86] sys.vga_clear(); OS.kbdApp = oldKbd; OS.vgaApp = oldVga;
[HAUKI-X86] HSH.x = 0; HSH.y = 0;
[HAUKI-X86] HSH.tty("=== HAUKI OS BARE-METAL ===
[VM] Matrix suljettu. DMA-Blitter siirsi " + (frames * 4000) + " tavua
grafiikkaa rautanopeudella!
> " + HSH.buf);
[HAUKI-X86] return;
[HAUKI-X86] }
[HAUKI-X86]
[HAUKI-X86] // PyyhitCB$CB$n harmaa Wow-efekti pois ensimmCB$isen framen
jCB$lkeen, jotta Matrix nCB$kyy
[HAUKI-X86] if (frames === 1) {
[HAUKI-X86] for(var i=0; i<4000; i+=2) { sys.poke(buf+i, 32);
sys.poke(buf+i+1, 0); }
[HAUKI-X86] }
[HAUKI-X86]
[HAUKI-X86] // JS laskee sateen turvalliseen RAM-Backbufferiin
[HAUKI-X86] for(var x=0; x<cols; x++) {
[HAUKI-X86] var y = drops[x];
[HAUKI-X86] if (y >= 0 && y < rows) {
[HAUKI-X86] var addr = buf + (y * 80 + x) * 2;
[HAUKI-X86] sys.poke(addr, 33 + Math.floor(Math.random() * 94)); //
Random ASCII
[HAUKI-X86] sys.poke(addr+1, 10); // Vaaleanvihrea
[HAUKI-X86] }
[HAUKI-X86] var tail = y - 5;
[HAUKI-X86] if (tail >= 0 && tail < rows) { sys.poke(buf + (tail * 80 + x)
* 2 + 1, 2); } // Tummanvihrea
[HAUKI-X86] var clear = y - 12;
[HAUKI-X86] if (clear >= 0&& clear < rows) { sys.poke(buf + (clear * 80 +
x) * 2, 32); sys.poke(buf + (clear * 80 + x) * 2 + 1, 0); }
[HAUKI-X86]
[HAUKI-X86] drops[x]++;
[HAUKI-X86] if (drops[x] > rows + 12 && Math.random() > 0.95) drops[x] =
0;
[HAUKI-X86] }
[HAUKI-X86]
[HAUKIX86] // THE MAGIC: Laukaistaan VCPU kopioimaan Backbuffer suoraan
nCB$ytCB6lle (VGA) sekunnin murto-osassa!
[HAUKI-X86] v.eip = v.code;
[HAUKI-X86] VMM.run(v.id);
[HAUKI-X86]
[HAUKI-X86] frames++;
[HAUKI-X86] OS.setTimeout(draw, 1);
[HAUKI-X86]
[HAUKI-X86]
[HAUKI-X86]
[HAUKI-X86] }
[HAUKI-X86]
[HAUKI-X86] sys.serial("[VMM] Matrix pyorii! (Paina VNC-ikkunassa mita tahansa
nappainta poistuaksesi)
");
[HAUKI-X86] draw();
[HAUKI-X86]