From 7b6f3cbc4378feb9f09f03d0df444fd38a48d831 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 24 Nov 2020 17:01:49 +0900 Subject: [PATCH] basic:array indexing and assigning at the index --- assets/{tbas => }/basic.js | 75 +++++++++++------- assets/bios/TBMBIOS.js | 2 +- assets/bios/basicbios.js | 2 +- hp2640.kra | 4 +- hp2640.png | Bin 6229 -> 6260 bytes src/net/torvald/tsvm/AppLoader.java | 4 +- .../torvald/tsvm/peripheral/VMProgramRom.kt | 2 +- 7 files changed, 53 insertions(+), 36 deletions(-) rename assets/{tbas => }/basic.js (96%) diff --git a/assets/tbas/basic.js b/assets/basic.js similarity index 96% rename from assets/tbas/basic.js rename to assets/basic.js index fe6bcb6..998b262 100644 --- a/assets/tbas/basic.js +++ b/assets/basic.js @@ -238,7 +238,9 @@ let literalTypes = ["string", "number", "bool", "array"]; BASIC variable table and return the literal value of the BasicVar; undefined will be returned if no such var exists. */ let resolve = function(variable) { - if (literalTypes.includes(variable.troType) || variable.troType.startsWith("internal_")) + if (variable.troType === "internal_arrindexing_lazy") + return variable.troValue.arrValue; + else if (literalTypes.includes(variable.troType) || variable.troType.startsWith("internal_")) return variable.troValue; else if (variable.troType == "literal") { var basicVar = bStatus.vars[parseSigil(variable.troValue).sgName]; @@ -252,55 +254,55 @@ let resolve = function(variable) { let oneArg = function(lnum, args, action) { if (args.length != 1) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); var rsvArg0 = resolve(args[0]); - if (rsvArg0 === undefined) throw lang.refError(lnum, rsvArg0); + if (rsvArg0 === undefined) throw lang.refError(lnum, args[0]); return action(rsvArg0); } let oneArgNum = function(lnum, args, action) { if (args.length != 1) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); var rsvArg0 = resolve(args[0]); - if (rsvArg0 === undefined) throw lang.refError(lnum, rsvArg0); - if (isNaN(rsvArg0)) throw lang.illegalType(lnum, rsvArg0); + if (rsvArg0 === undefined) throw lang.refError(lnum, args[0]); + if (isNaN(rsvArg0)) throw lang.illegalType(lnum, args[0]); return action(rsvArg0); } let twoArg = function(lnum, args, action) { if (args.length != 2) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); var rsvArg0 = resolve(args[0]); - if (rsvArg0 === undefined) throw lang.refError(lnum, rsvArg0); + if (rsvArg0 === undefined) throw lang.refError(lnum, args[0]); var rsvArg1 = resolve(args[1]); - if (rsvArg1 === undefined) throw lang.refError(lnum, rsvArg1); + if (rsvArg1 === undefined) throw lang.refError(lnum, args[1]); return action(rsvArg0, rsvArg1); } let twoArgNum = function(lnum, args, action) { if (args.length != 2) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); var rsvArg0 = resolve(args[0]); - if (rsvArg0 === undefined) throw lang.refError(lnum, rsvArg0); - if (isNaN(rsvArg0)) throw lang.illegalType(lnum, rsvArg0); + if (rsvArg0 === undefined) throw lang.refError(lnum, args[0]); + if (isNaN(rsvArg0)) throw lang.illegalType(lnum, args[0]); var rsvArg1 = resolve(args[1]); - if (rsvArg1 === undefined) throw lang.refError(lnum, rsvArg1); - if (isNaN(rsvArg1)) throw lang.illegalType(lnum, rsvArg1); + if (rsvArg1 === undefined) throw lang.refError(lnum, args[1]); + if (isNaN(rsvArg1)) throw lang.illegalType(lnum, args[1]); return action(rsvArg0, rsvArg1); } let threeArg = function(lnum, args, action) { if (args.length != 3) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); var rsvArg0 = resolve(args[0]); - if (rsvArg0 === undefined) throw lang.refError(lnum, rsvArg0); + if (rsvArg0 === undefined) throw lang.refError(lnum, args[0]); var rsvArg1 = resolve(args[1]); - if (rsvArg1 === undefined) throw lang.refError(lnum, rsvArg1); + if (rsvArg1 === undefined) throw lang.refError(lnum, args[1]); var rsvArg2 = resolve(args[2]); - if (rsvArg2 === undefined) throw lang.refError(lnum, rsvArg2); + if (rsvArg2 === undefined) throw lang.refError(lnum, args[2]); return action(rsvArg0, rsvArg1, rsvArg2); } let threeArgNum = function(lnum, args, action) { if (args.length != 3) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); var rsvArg0 = resolve(args[0]); - if (rsvArg0 === undefined) throw lang.refError(lnum, rsvArg0); - if (isNaN(rsvArg0)) throw lang.illegalType(lnum, rsvArg0); + if (rsvArg0 === undefined) throw lang.refError(lnum, args[0]); + if (isNaN(rsvArg0)) throw lang.illegalType(lnum, args[0]); var rsvArg1 = resolve(args[1]); - if (rsvArg1 === undefined) throw lang.refError(lnum, rsvArg1); - if (isNaN(rsvArg1)) throw lang.illegalType(lnum, rsvArg1); + if (rsvArg1 === undefined) throw lang.refError(lnum, args[1]); + if (isNaN(rsvArg1)) throw lang.illegalType(lnum, args[1]); var rsvArg2 = resolve(args[2]); - if (rsvArg2 === undefined) throw lang.refError(lnum, rsvArg2); - if (isNaN(rsvArg2)) throw lang.illegalType(lnum, rsvArg2); + if (rsvArg2 === undefined) throw lang.refError(lnum, args[2]); + if (isNaN(rsvArg2)) throw lang.illegalType(lnum, args[2]); return action(rsvArg0, rsvArg1, rsvArg2); } let initBvars = function() { @@ -319,7 +321,7 @@ bStatus.vars = initBvars(); // contains instances of BasicVars bStatus.consts = {"NIL":1}; Object.freeze(bStatus.consts); bStatus.defuns = {}; bStatus.rnd = 0; // stores mantissa (23 bits long) of single precision floating point number -bStatus.getArrayIndexFun = function(lnum, array) { +bStatus.getArrayIndexFun = function(lnum, arrayName, array) { return function(lnum, args) { // TODO test 1-d array // NOTE: BASIC arrays are index in column-major order, which is OPPOSITE of C/JS/etc. @@ -327,7 +329,7 @@ bStatus.getArrayIndexFun = function(lnum, array) { if (rsvArg0 === undefined) throw lang.refError(lnum, rsvArg0); if (isNaN(rsvArg0)) throw lang.illegalType(lnum, rsvArg0); - return array[rsvArg0]; + return {arrValue: array[rsvArg0], arrObj: array, arrIndex: rsvArg0, arrName: arrayName}; //array[rsvArg0]; }; }; bStatus.builtin = { @@ -341,13 +343,27 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length "REM" : function(lnum, args) {}, "=" : function(lnum, args) { if (args.length != 2) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); - var sigil = parseSigil(args[0].troValue); + var troValue = args[0].troValue; + var rh = resolve(args[1]); - if (rh === undefined) throw lang.refError(lnum, args[1].troValue); - var type = sigil.sgType || JStoBASICtype(rh); - if (bStatus.consts[sigil.sgName]) throw lang.asgnOnConst(lnum, sigil.sgName); - bStatus.vars[sigil.sgName] = new BasicVar(rh, type); - return {asgnVarName: sigil.sgName, asgnValue: rh}; + if (rh === undefined) throw lang.refError(lnum, "RH:"+args[1].troValue); + + if (troValue.arrObj !== undefined) { + if (isNaN(rh)) throw lang.illegalType(lnum, rh); + + troValue.arrObj[troValue.arrIndex] = rh; + return {asgnVarName: troValue.arrName, asgnValue: rh}; + } + else { + var sigil = parseSigil(troValue); + var type = sigil.sgType || JStoBASICtype(rh); + + if (bStatus.consts[sigil.sgName]) throw lang.asgnOnConst(lnum, sigil.sgName); + + bStatus.vars[sigil.sgName] = new BasicVar(rh, type); + return {asgnVarName: sigil.sgName, asgnValue: rh}; + } + }, "==" : function(lnum, args) { return twoArg(lnum, args, function(lh, rh) { return lh == rh; }); @@ -601,7 +617,7 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length if (asgnObj === undefined) throw lang.syntaxfehler(lnum); if (!Array.isArray(asgnObj.asgnValue)) throw lang.illegalType(lnum, asgnObj); - let varname = asgnObj.asgnVarName + let varname = asgnObj.asgnVarName; // assign new variable // the var itself will have head of the array, and the head itself will be removed from the array @@ -1499,6 +1515,7 @@ let JStoBASICtype = function(object) { else if (typeof object === "string" || object instanceof String) return "string"; else if (object === undefined) return "null"; else if (object.asgnVarName !== undefined) return "internal_assignment_object"; + else if (object.arrValue !== undefined) return "internal_arrindexing_lazy"; else throw "BasicIntpError: un-translatable object with typeof "+(typeof object)+",\ntoString = "+object+",\nentries = "+Object.entries(object); } let SyntaxTreeReturnObj = function(type, value, nextLine) { @@ -1571,7 +1588,7 @@ bF._executeSyntaxTree = function(lnum, syntaxTree, recDepth) { // TODO calling from bStatus.defuns - func = bStatus.getArrayIndexFun(lnum, someVar.bvLiteral); + func = bStatus.getArrayIndexFun(lnum, funcName, someVar.bvLiteral); } // call whatever the 'func' has whether it's builtin or we just made shit up right above try { diff --git a/assets/bios/TBMBIOS.js b/assets/bios/TBMBIOS.js index 3362740..f402b78 100644 --- a/assets/bios/TBMBIOS.js +++ b/assets/bios/TBMBIOS.js @@ -76,7 +76,7 @@ if (portNumber < 4) { } else { sys.mapRom(1); - let response = eval("let _appStub=function(exec_args){"+sys.romReadAll()+"};_appStub;")(); + let response = eval("let basica=function(exec_args){"+sys.romReadAll()+"};basica;")(); if (response !== 0) println("No ROM BASIC system halted"); } \ No newline at end of file diff --git a/assets/bios/basicbios.js b/assets/bios/basicbios.js index 9e41382..f5fbae3 100644 --- a/assets/bios/basicbios.js +++ b/assets/bios/basicbios.js @@ -18,4 +18,4 @@ Object.freeze(_BIOS); // load a BASIC rom sys.mapRom(1); -eval("let _appStub=function(exec_args){"+sys.romReadAll()+"};_appStub;")(); \ No newline at end of file +eval("let basicrom=function(exec_args){"+sys.romReadAll()+"};basicrom;")(); \ No newline at end of file diff --git a/hp2640.kra b/hp2640.kra index 5681544..7ac5d0d 100644 --- a/hp2640.kra +++ b/hp2640.kra @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4cf87ec24d7ff20221145c216694a2d12d8b8989e4b6269b2b04679af27dd89 -size 240385 +oid sha256:51e05d19dfb769edd6a8fc3876e8004f9ff810471742ef652f9a6111eceaeb9f +size 240505 diff --git a/hp2640.png b/hp2640.png index abbc6966c86e5e951a115572b1ba3817c4b4a902..6e9ac7ccd88ee3e3689ffcb85146621dd367e0b8 100644 GIT binary patch literal 6260 zcmYkAXE+<|+s0#W(JD%b)ZR)$QBpNyMy(p9RWoR*Ehwtgs1dCwwYN%)5IeN0wfAb& zENbudpm;s+_#f|w^S-}aAI{@GkL$R9*A-)AsLe#rMGpV~m~`M8##eXJm3C;Uug-1! z=5GLi>;+O?-3V!K4*-auebIg58V_&&2=#s&jc!xJ*T>zClZi`(y zy#KPvU#QERWFf*(wM*FHtu(9sU|b-;5E@<)??db;LH9Ofo?W2&184dJnO&-y%{*^K zv8Qw5l~> z2XQ1wrau3EtIfu|A5OQ;@RnOKXD4#FPwc)}zxjz-73BR#N`u4E>eiosznk}q(gJB| z7*1jjy+OY3RT~xVNfNZ3q^0QcGzMi#D>brYBaGvcNtZ3T9rXBO90ke+bOim8{Gl6V0;}y6xy?IY?$9cO8%E11dpA1AjsFJICIe`Ll`;*b zi}Qqt&F$0st0TpZCmZqoROq}uvV(8H`xzG}%h^2=!@v;4HX15hF&lb$zIVwR`geDW zD1g##U9Ms8)2+VyTWOzv{ly_+>@7}azPVXO{fwS`(4+O-@8s`p2d}g{hW9jkW#UOF zv7k!z3tJ&HgX0{L{iG$hAy|4gsP)0#rcU)Ez{AUnv+dUTfXY;?>XPnC-qG3@5#x@-j%t~^a!2M`zk6#rV`NOlUAzAG~^LI zcrCl5Lz`7YL`N#ZQ#37VO?5$g;d}&f-v*$S4Fm!`w*4At@YIdpRZ6@|ADRn0?~za> zG*W;gl~unecXn96PUsne*etsg)D>QTSpxdY6LN7l@nrjSR}f{(5D=*Or)M2F6N0!L zIj)E&7VJh3d)m&NxpRqK`bIs51?{0X=l(j}OItjaJ?{zaDDw}oJ51}1Sl2{4+L~wj z+TiwZC~IHWCH~oUnfN`GiY&Y9eaUewpCL#VwfzSeMK^YG>qahV?7t^jze6F>i=!mO| z_&#Yts4D2Ll>Zt3y%QB>^k{9?j|dPa|AQyyegbAJ=$vcl+;`kM1X@1+)7BucR>Yey zZ3=kH#9TC>{Y$<-0)g;ATAh{+g}ZiDD2I?lI*&R-N-M6#)PW|v^;kDH17)`fq#rZU zhq_q3WRyq+)5H53i-&rn&RN&8Qh;gp0Vg`YBup&9v@S#_SIJFq9V8@PPuTG z$JKK=9iPMHgZNc`_iME5A*B_dMt*3e)MHGPar&M1t%;RsQKU!*%{B4+(Cqic!J1!K z*;aVI1=09YhZ*${Ewz1aLda7C zk)X^NLA0$%3`{m`EsZkgnvDh7N(=1!AZJacC^MPNlrB2Iib`t5t77o-e` zp@1uWOrEqGaEoeTkm}PaFdjB8zz?T%BSozPE3E@HwsEqe&-G+D$DAw1DRHomwQu@H zy>nl8m%utD`#|HoIctV*x4Qxyj~uGY zK^}zT`Qr5(<8JXC8;Hq5i*g;K_Xf6n1-mIz5cpkzVKbeY#I7wj*)u^OM6Gb_QRt%v zr3h43=go$oa=6x*RM5T1c%^vNeX_~wS3sz>!`!AfHl$CXgir-9}z#_c_zh+H`^|H2Nf)cX^HfT?UM zUDvdyZ%Wk+1_r?*t&6GKdA;V!Zo+cG9kyxIUCsqq$uUOAt6TA_mT`Xze^|tlNbP*F zdh_4SDr?qodln{$ZPchxqXC|0M$T?J!5oI~ho|G9i`X%bc)fx=yA<6D^|#(p@qs+E z$Uk8suL#9ewYt{8w6Z3K*|USmT%; zns8zz`p=?om79N(80%tOUa?;Jg~C+d)j7}y9IixQ&nZ#PO(_Vyz_qd2rYE!2tt4Y( zZl-`AAX+j+nWRbLZZo1=%F!!r@P$D^_2&(x?2~xH+kMPu-0|J~GY%fPQZ^N&53g^n z62H|fgyJb~6UEbyndqkBoHMty%;`Kx^Xr?W==(|O{AFSDr3nZDIinOXHTFYxSFVu4 zNwPsXL)Lu7BQ44y3cjMaqf&jj?u-S~A}+`Nho)BnkQ+UGNLJz^7-nQbiGU3a6D>|T z29yCq^I)f&C8b)X*_d}7jZH;88e4>(;3PZ?r$x`A)~m!?ajr!F$$vW6oBTx+G9#>+ z@rCx3qPQ2tiIWv*R?S#r!AfDw+6X_-ABOjk8(-0E8VA;-3iD6O*_28N#1BsU+x^C` z^`BgC{0WI#qRt*xxqm-2U{)MAF2pO{{LQ1(SqBC>3xSd^)}HXyM#Vj-bM-@c$Osc$1(Hsc%pb$p5q@Or5*YoBoS z-Cx5V1B^THu$|cXm&dj&nUD>})pi#kv?)LTsQ{cSb6nSXlcJWA<$9G1yAF%vqYsek zJ60_La}9gxM31qUlDi3{QMczmn`UDT5!PX}a>!Mg)CNGORcv#bLadL6_f}fCyWQ_e z>ufVen+VoJ{q(^bWL4e!Z4Vq@FCC>LS5VF$&?V{vCbCLK@~ZlOsG}#2Rxk`p|NV+r z9T2aV7x!-u{P$mQl}3pOSq_F2A^20h7nB#QrR?OOf6b~*=fqkdzJCIhE%WWBoHTly zKUW}6QMH04k{hmhJO?KYECjLZkv zM3eKuq9y0?)QF0C&hAL%WYCJGeKwWjh&m~n?Xfs7@@6eTxPpX|DiwA;2gSET=(8*z z!{6do=-4n{_h^)s-#vgWP*Oc zqO&+?#Kf3QO#xzJ0JdqlFeBD*mv4lz_&#)#y^1ZwoKRM$eDJZAQ8kDq&O>wZtaH3h z7cD-Tk58M43;RUo0(`b>4Q_wfPRP)4*Uaq+5|F1#{sW!!R$TYs!XbQKGWTg0YX%!$ zC8YeQb!O?yO7b#xSIMn5+I7&{u!OJYM`v1!BcUWU)0_(@kJiJC$+w4JpOo^k?2=H) zzX&hL=Kq7jqK5k`Q61}$Zj7`0sPbDwVh@!{-{6l!x3d#R9%Y#6QB=OTNkOwr8mTwZDIFY&y{0 zddXNgvio#I?l=3H=Ck)YL7Y8)Kdff33XdS%`j&bzwp_9apOXSy#f8^gc)&C!(J_%2 zUn8p?x)gcfPhB#l9%39cF3EpGuyP2Gt>>A%ryRj7v!L3Hg!{$|ZvXZ(YCm zd9ixUPtGy2Uq@O;9WF#-@Jb-hKS23;43l@6?L$jAIL)N3C4E0`#sg{T$t5HCb8=(e z$H*kfddNGoJHwuM@R69cCBy8dljq;8ozKb`f}a=(s_Kyf7{E5CS&!{L6MHg$sS%i2 z=H_#h@Su&#cCZP}8wJcVEuJXekT0yT*v|h;4kerZvMqhgPaqp>A;?uBL^DifsU1WL zwAId=n-5kF)G;-OmcT9FJKb*P)(CkssyI>(*JmY&>%WiD4R&bgRq1jv%$$g8hL83^ zqrp|*(fBNGr@)h+5p_xIG+dGlDQW}oh;n7ybY#ar*p7D?Szkx4o@UBJcC|!C1r7p_ zPQJk%En;v0GKs|&p1$e@mevLRE(~$x8nBKYhw~3zIu%+{n zrXaN@9m6H|*ztE0`7j;@`sw@b-^%zO1~R0H#3U@LLgdSF#}m2`{K;4d)Z4zIgItEG ztLTB@>>S;BOW(E6o8J(m6VqS90GA@Mh0eAgzg3qW=dM^CsRomme#!}XZMt=@#e&qB zv0A9OA?l97)Mwc%<5)#;v{~@4 z;^M=D`FFJpAv`cI+b6BBLIP1J`c2cLr(9?mhM4jT{iMb;e|E%I=bG|F~eu{kscQ*d*ax=A-Z6Mdpl9&*g?z2Uyvq#Vw=_DMk&qec-qxR0U_ z5MEBIQ|9I6odtkB0@r#xweL&~4?C9eqM??SiOVl%_a-YkBsRsU>?-n)?xOZxyONbz zqd1RSDn!M0Gg?`)hPK|^quNu!=G8-sq^z90XJ_B$|m=9{-RjRq?jk~ z{GvzpXp|0;cu+FnI*pJ-5`;;ANV2)H@**@2QI!Mj-nqbeu%o5FsC->sxWNiF8yTx-Loh8!P-WE@@%gn zi!?juy%aVfcJ?`_5iTa2v4lhXnc0Tymh_t5X_N2k0;mJ$?#|Ag;MdPHod}2FwHgX_ z3C-HF9jd`g+>sK_OPDH9TS(rBR9mF-7Gx}AVKVBG^_jEn82fV*N76zkv^Q64YCPcU zdESnVv-GP}EqejTU|^La9}vs(Qb>et zEypDq_K4$Y53O|HUK3GDRJ^p=`v%icli^;fcli@Lpc@<_;VfbYk1@c$LTG^rigllTVV zl^UvIfN7DiScvW5MjC{ZvX`+s_w6GS~oUb-~4 zXGw>*yuL_WvL{Mkjd_98j++00uoc6V^72EMZ!a4+75Syp5aS9epIXe8Ejg(1)Th}& z;v*(@WxLjLQ(_EM`V8C}S9=`)k3g$_+Azo=CzZ1+UG-GvfwH+RPPal#uc>NR37?X< zgn++q=^s6_IKfIV1a7&~-O4N_&3aU6Y~^AnH8{pZu_b{2g%Y;-SR=!G#4!JKm%S=H zjOeRXBAlJJuy%zD0-xPi`s2Cv)P)cI% zevM6;A=fs2^}(s#fwB|<3=3Kxg|MqQNvv%5M>kOBjZX-%wEo@eu@;mVp&fvJbG2}Y zx>i`V7BNcdo^WfLU}j(>&4TT#ngp?L#r5sc4Dr=R<40F+ucG=7vkoyCYp#o4c^gHT zk8YX&+-EQRCM?@^CzhLfn2%FR);g-lEi&z3a>ljw#ogo|VjgAk{JHnSmCo+}?)9}( zN^mJtGgoq`Olq#6;wxi@KQ@CNeg4~0d}&k(4y5pXmFR~$S?WnG|1m&5*tuPsQHrzt zN&ecMBH5{@>sboxp^Wh|q=SEXXZS|mC$-0{tE$JcPK}J_ytpdvxQspY{P(4N_2`l9 zdMTXe+|X&?QrEUmy;pxk>wDkD*_YO$4k!Ej`%CYm7wYRyUw_N-R{Bs#XX;D{VbT zdVLc*#XD}S5upjOmEM&ExP`%`G)`(TDQ2Vhc4402F0(~!mBkFQ@&}~Clei|=KUHbmC4vi8hJ5G^zUwqOUSJy#A0oy< zVWuk3l-VIhO94^At8JJUXNdQvGz{@v=ia4OJw>%-3^_*7I;SXo#adF}AD7R;j8i)^nu;Y? z1$(_%22JkZp*Zqu!{si(b}lz^N)-r(!Y5k+|MwkNY$2u+L%u(WPvO-2=rEGCDsp~) zaNu*&jDfiydMWzS_4JO8dxaGs(+Ez^o$unyp(8o1t)Z6}er?TBnF)@Zfs}H+FA6gx z4eyLB+9f`RCF?FFCA&PA3os~ak*qiBk;N+v!kF^bL~SgFbY-Ha>e$0#qgF!u?Q{oe UDSh~^me~LuO+$@xwWqKD3zfVK(f|Me literal 6229 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 diff --git a/src/net/torvald/tsvm/AppLoader.java b/src/net/torvald/tsvm/AppLoader.java index 3703ea3..8a8d888 100644 --- a/src/net/torvald/tsvm/AppLoader.java +++ b/src/net/torvald/tsvm/AppLoader.java @@ -27,9 +27,9 @@ public class AppLoader { // val vm = VM(64.kB(), TheRealWorld(), arrayOf(GenericBios)) - //VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{GenericBios.INSTANCE}); + VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{GenericBios.INSTANCE}); //VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{BasicBios.INSTANCE, BasicRom.INSTANCE}); - VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{OEMBios.INSTANCE, BasicRom.INSTANCE}); + //VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{OEMBios.INSTANCE, BasicRom.INSTANCE}); new LwjglApplication(new VMGUI(vm, appConfig), appConfig); } diff --git a/src/net/torvald/tsvm/peripheral/VMProgramRom.kt b/src/net/torvald/tsvm/peripheral/VMProgramRom.kt index d8f1e3e..c4f9f1b 100644 --- a/src/net/torvald/tsvm/peripheral/VMProgramRom.kt +++ b/src/net/torvald/tsvm/peripheral/VMProgramRom.kt @@ -53,7 +53,7 @@ object BasicRom : VMProgramRom { private val contents: ByteArray init { - val bytes = File("./assets/tbas/basic.js").readBytes() + val bytes = File("./assets/basic.js").readBytes() contents = bytes.sliceArray(0 until minOf(65536, bytes.size)) }