modeling of a program ROM

This commit is contained in:
minjaesong
2020-11-13 17:32:18 +09:00
parent 3a26e3dde7
commit 09baf05368
11 changed files with 66 additions and 58 deletions

1
assets/bios/bios1.js Normal file
View File

@@ -0,0 +1 @@
var I=["No bootable medium found.","apply","Memory Error","info","console","getStatusCode","bind","toString","exception","FIRST_BOOTABLE_PORT","areYouThere","TERRAN Megatrends inc."," KB OK!","poke","fetchResponse","sendMessage","peek","move","prototype","log","LOADBOOT","error",'{}.constructor("return this")()',"__proto__","length","warn","freeze","trace","return (function() "];!function(t,n){!function(n){for(;--n;)t.push(t.shift())}(++n)}(I,149);var G=function(t,n){return I[t-=0]},v=G,l=function(){var t=!0;return function(n,r){var o=t?function(){if(r){var t=r[G(26)](n,arguments);return r=null,t}}:function(){};return t=!1,o}}(),R=l(this,function(){for(var t=G,n=function(){var t,n=G;try{t=Function(n(24)+n(18)+");")()}catch(n){t=window}return t}(),r=n[t(0)]=n[t(0)]||{},o=[t(15),t(21),t(28),t(17),t(4),"table",t(23)],e=0;e<o[t(20)];e++){var i=l.constructor[t(14)][t(2)](l),x=o[e],p=r[x]||i;i[t(19)]=l.bind(l),i.toString=p[t(3)][t(2)](p),r[x]=i}});R(),println(v(7));let p=0;const t=[[0,255,170,85,105,15,165,30,199,113,142,227,202,254,186,190],[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]];con.move(2,1),print("000 KB OK");try{for(;p<8<<20;){con[v(13)](2,1);var ptext=""+(p+1>>10);print(ptext<10?"00"+ptext:ptext<100?"0"+ptext:ptext);for(var ptn=0;ptn<t.length;ptn++){for(var bi=0;bi<t[ptn].length;bi++)if(sys[v(9)](p+bi,t[ptn][bi]),t[ptn][bi]!=sys[v(12)](p+bi))throw v(27);for(var bi=0;bi<t[ptn][v(20)];bi++)if(sys.poke(p+bi,255-t[ptn][bi]),255-t[ptn][bi]!=sys[v(12)](p+bi))throw v(27)}p+=t[0][v(20)]}}catch(t){t==v(27)?println(" "+t):println(v(8))}var _BIOS={};_BIOS[v(5)]=[0,1],Object[v(22)](_BIOS);let n=0,s=0;for(;n<4&&(!com[v(6)](n)||(com[v(11)](n,v(16)),s=com[v(1)](n),0!=s));)n+=1;n<4?eval(com[v(10)](n).trimNull()):printerrln(v(25));

View File

@@ -0,0 +1,80 @@
println("TERRAN Megatrends inc.");
//println("Main RAM:"+(system.maxmem() >> 10)+" KBytes");
///////////////////////////////////////////////////////////////////////////////
// Perform memtest
let memptr = 0;
const memtestptn = [
[0x00,0xFF,0xAA,0x55 , 0x69,0x0F,0xA5,0x1E , 0xC7,0x71,0x8E,0xE3 , 0xCA,0xFE,0xBA,0xBE],
[0xFF,0xFF,0xFF,0xFF , 0xFF,0xFF,0xFF,0xFF , 0xFF,0xFF,0xFF,0xFF , 0xFF,0xFF,0xFF,0xFF]
];
con.move(2,1);
print("000 KB OK")
try {
while (memptr < (8 << 20)) {
// just print a number
con.move(2,1);
var memptrtext = ""+((memptr + 1) >> 10);
print((memptrtext < 10) ? "00"+memptrtext : (memptrtext < 100) ? "0"+memptrtext : memptrtext);
// perform memory test
for (var ptn = 0; ptn < memtestptn.length; ptn++) {
for (var bi = 0; bi < memtestptn[ptn].length; bi++) {
sys.poke(memptr + bi, memtestptn[ptn][bi]);
if (memtestptn[ptn][bi] != sys.peek(memptr + bi)) throw "Memory Error";
}
for (var bi = 0; bi < memtestptn[ptn].length; bi++) {
sys.poke(memptr + bi, 255 - memtestptn[ptn][bi]);
if (255 - memtestptn[ptn][bi] != sys.peek(memptr + bi)) throw "Memory Error";
}
}
memptr += memtestptn[0].length;
}
}
catch (e) {
if (e == "Memory Error") {
println(" "+e);
}
else {
println(" KB OK!");
}
}
///////////////////////////////////////////////////////////////////////////////
// probe bootable device
var _BIOS = {};
// Syntax: [Port, Drive-number]
// Port #0-3: Serial port 1-4
// #4+ : Left for future extension
// Drive-number always starts at 1
_BIOS.FIRST_BOOTABLE_PORT = [0,1]; // ah screw it
Object.freeze(_BIOS);
///////////////////////////////////////////////////////////////////////////////
// load a bootsector using 'LOADBOOT'
let portNumber = 0;
let driveStatus = 0;
while (portNumber < 4) {
if (com.areYouThere(portNumber)) {
com.sendMessage(portNumber, "LOADBOOT");
driveStatus = com.getStatusCode(portNumber);
if (driveStatus == 0) break;
}
portNumber += 1;
}
if (portNumber < 4) {
eval(com.fetchResponse(portNumber).trimNull());
}
else {
printerrln("No bootable medium found.");
}