From d107164001c6450eadcce9fcc159b95f78b92b7e Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 23 Sep 2021 14:39:10 +0900 Subject: [PATCH] splash screen with new official-ish logo --- assets/bios/tsvmbios.js | 65 ++++++++++++++++++ assets/tsvm-default.gpl | 2 +- assets/tsvmlogo.gz.txt | 45 ++++++++++++ assets/tsvmlogo.raw | Bin 0 -> 91840 bytes assets/tsvmsplash.kra | 3 + assets/tsvmsplash.png | Bin 0 -> 6671 bytes src/net/torvald/tsvm/AppLoader.java | 3 +- .../torvald/tsvm/peripheral/VMProgramRom.kt | 1 + 8 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 assets/bios/tsvmbios.js create mode 100644 assets/tsvmlogo.gz.txt create mode 100644 assets/tsvmlogo.raw create mode 100644 assets/tsvmsplash.kra create mode 100644 assets/tsvmsplash.png diff --git a/assets/bios/tsvmbios.js b/assets/bios/tsvmbios.js new file mode 100644 index 0000000..c37d444 --- /dev/null +++ b/assets/bios/tsvmbios.js @@ -0,0 +1,65 @@ +con.reset_graphics();con.curs_set(0);con.clear(); +graphics.resetPalette();graphics.setBackground(0,0,13); + +let logo = gzip.decomp(base64.atob("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")); + +// display logo in kickin' ass-style of panasonic +let o=[];for(let y=0;y<164;y++)o[y]=(Math.round(Math.random()*56)-28)|0; +for(let p=0;p<=28;p++){for(let y=0;y<164;y++){for(let x=0;x<560;x++) +{let f=y*560+x;let d=x+10*o[y];if(d>=0&&d<560)graphics.plotPixel(d,95+y,logo[f]);} +if(o[y]!=0)o[y]-=Math.sign(o[y]);}} + +// display logo in mundane way +//for(let p=164;p>=0;p-=2){for(let y=0;y<164;y++){for(let x=0;x<560;x++) +//{let f=(y-p)*560+x;graphics.plotPixel(x,95+y,(f>0)?logo[f]:255);}}} + +// show how much ram is there +let vramstr="VIDEO RAM : 256 Kbytes" +let uramstr=` USER RAM : ${system.maxmem()>>>10} Kbytes` +con.move(20,(80-vramstr.length)/2);println(vramstr); +con.move(21,(80-uramstr.length)/2);println(uramstr); + +/////////////////////////////////////////////////////////////////////////////// + + +// 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); + +/////////////////////////////////////////////////////////////////////////////// + +// make user wait around because why not + +let time = sys.nanoTime(); +while (sys.nanoTime() - time < 3221225472) sys.spin(); +// clear screen +graphics.clearPixels(255); +con.clear();con.move(1,1); + +/////////////////////////////////////////////////////////////////////////////// + +// 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."); +} diff --git a/assets/tsvm-default.gpl b/assets/tsvm-default.gpl index 7268123..9fba844 100644 --- a/assets/tsvm-default.gpl +++ b/assets/tsvm-default.gpl @@ -1,6 +1,6 @@ GIMP Palette Name: tsvm-default -Columns: 0 +Columns: 20 # 0 0 0 Untitled 0 0 68 Untitled diff --git a/assets/tsvmlogo.gz.txt b/assets/tsvmlogo.gz.txt new file mode 100644 index 0000000..c57c2d0 --- /dev/null +++ b/assets/tsvmlogo.gz.txt @@ -0,0 +1,45 @@ +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 diff --git a/assets/tsvmlogo.raw b/assets/tsvmlogo.raw new file mode 100644 index 0000000000000000000000000000000000000000..d46d732ff1b4b484d7555da087104f82b5f804ec GIT binary patch literal 91840 zcmeHQ;dz?uF1oBHoI|GQWO zD7tCoiv??%d!s3*044!fivUG8t$ej;O?zp|DS#ROt3`mKn^wMBw5Gi@B~En3rFnsN$Y#{X&&py;NRuNJLoFHJcGFynu<2vBs>%2$ilw3nuw0+{i?S_CM% zY2~X$YuZawP65pLUo8R@-L&%6qBZTMDW?Et{I3=Pif&pt9<6^KtpDQrv*kGvped&S z;yzfT<>4W&KU)952xTp4N`0oC1it(O8b=c!>t^w00ET zv~tjmm&S55$4fAP=QX1#rvQR}*oSrZK@`-V%}$E|MK`S+bEB2*&hZk9-yDKUc$t~D}(>6Dkyz;ID-A=`gH_#HISy90|MggR@bvl( zgXPZ6*Hhh3p!SHCyevvedIC)Xe_TLRFrFa}QnNL$r0aPJO73maPmaFump6XfnqHpF&hI2)Pk454S zrArUv*dN8PW@#KX*-p_-E0_4~rKX4DU&xre;QT)h*VB03?T-~OBTefAN>h)c*!?TF z?8PYR<`+#l1z-d>`*XtQUj_dAmZD_md+91vLVJ=vN{?X&&aLjiqZV&&QFPPFMr=`zWGlocMO&r(no*y=cP&~w z-8;*jc0ci^Bdwe$&EAY*NAt8X)a(vLH?5ql5T7|n{Ab?edY9aMPj`g0zY%_Pi#Xq< zl@q1eurciD!!d@M-JvO`0J0V0GY5(OOb1}MTX246`&-XXgde>kW~6E5L}{^T1l!t@ z7bIC4LEXKf=%$r-GfF{vM3uL2{KR6k*qMiC@uXeCj5M7Sp|p5Ef^BWd3z962pzglV zlv4n^8KodSV#=S}*=}o+XRu9OdDv6ju}W&jOIJsoQ`tDSy(KpdK6LFx(M>BG(X?F~ zmu?4`_7-&<&ey09lMT;y5uU%M2OXud$2j(gzj4&v^gr+4Z88ujWi&t8Ur8 zm+0Ch%t+J9iBf4$7`w40msq77Mip+*Qv?Md49Ugf4pmCWQO5lph1yjX$Aj4!^ApE# z`|7B47sYOE$qSM!MNx$t6y3D4FeDeHKSVjL_|dZnqNAcJuOG5E)+c79=^zB91$QY$ zvB$EtD5~&+rkny0hU8)$r=ztL3H|obQM`~|>`F!*2dyiol0uI$?Dm!%;I?WEHB+;E zQgqYG(vq!gJ2om!Gwn$7H`;^IK6WL8b6(OyDZ`F#uq`j-7!gA=kM{U%LzFi8TRwPk$)5?`8sbV`eC`~&>@0lG0^_xdtLc)yn zV?8HAsqQO+-P@9D#6=Q8tw^FNrvNHbP8=^O+wJX8?eLM($dwFcq-o_usWv2nJ??M> zwIYe4n^vw&Id8nA1F+HLPjfUZ@vmg?{57qdD78BFv2mkrp`gr1tvRA8rvPeO)*3o= zq@IHC!`bd)sDCAcMx~V#rIyn^c7IE5VMZ*jIil#Mm1|qh8ZX<`(fI6ahjc`m-=Q!Z zTSY1(b+3*}?=E&}I#BXZ!4sNt3IL2*sspaJnx-V~r*}uIHQq}|n31M)B9z*WdDzF& zdk+;TqUffT!I+cAOL}CEtmZaR1JZmeZaB7zaL!BFE=uhV9qfa59}X%yLQ_rwpf&fp z9jg)Pb_jLsaU1E#YTLh(!4y1^g;EQ5k@d0tExC=`M@5Dxx@l#!=9KZW9deJJb=uJ! zmG-Y>(5AE)ptRLzAKTxO+qivHWQeAm0zhld7%$oXqw%w&8kY86ZBp6px^gOMv#%a@ zWJ_)X_fQo<6y3D4GDit)7qe6~7Xl|K_#6JVT4;8Q-Z1Q4$>0*1+M+Z&r$2kx(Mf6y zRfU44oB~khD1mlQN>p2JkVjJ68eHD@vv{7X|Q<6)BMOYB~foTH?eHJgoKLmtE1w03p=_cFG#Y~LaiNNYc%B)fMF1bq+7ZS zjjO8j#2w9dZ#VCnrghPS6I04wQL3Gkk`}gSlf=;F7HSpGRH5jml?{VHq@9xzXk1lC z=6Q*k%3q%!@2@ZB<%*kdm|8dWqSU&NRZ?wAC9$#DyAK<+3g=d#DW?D|i)vXFELEx7 z*0tjsOwrBfo1UxPgLnH%1~*peoCu|&Z?kA)$G7Ar=!1<~$1~L^x@l$0qFQGAm!);v zy2i#Z_wo6PPoIZuU&-Knm(Jl)>MblLwmX8cm+V{qG*RntZZ(>63cxg}5@wI=&#Ea@ z+-1Xtw4`tKh;e6s>m?-2NK>|}q?i;db1ZDvRqQ5&3h_);if&rjG^r9Q&niLH6e=#O z6_QhVt@hvEQfK9lsAFFpz22}L8fIa8lhXSkRETG)(v(vGrb(3$!&TR-rdV+{NHvmI z`;^bM`?%^W8Fl`;HZi0Ju-!T7`E~#m!Dzz>vV4@ z%C^Za%z4r@VM)iaJx7=GxN%e!&s9KEP6609Nok)(*;19=XR42_zWpd!jCcB;k`rkW z@|C75OFE40ZpoLk$zfD!yeLz2)5^k-Mp3a=2^vb97}=;)4^%$)0i)ItM8o4_%t-C4 zqg6VL?GA;->|xYKXlcqRfQC^*j6~FR(a-Lx_oV^sSj8VXW${sgoC5Q}?`zvnu4gH%Sk&Jecr-h2q#^)bKCJ%lQw zSe0qYDS*lpvqFuR8$Q>4w9vQPR#}ma$};0cs_d(yJQ3*O)x&nP-F(tGWU5{1EJw`)7B`2>e|&!NH@^L`VSc+kvA7w= zw&kJ+Gt#uA+0w*R96R3f_={e0^w3KR1t2Z4%g91qw{{Is*d6=p(&>Tb~BmN|1!Qj;+nQ_fw@cWTcid7`4uzYTEE%wwv;0Te{mH#Kw&}TCkr-C*UCJZiP{x zDW?DogFu84sO!+UQ9XT0+GcsoSZmwzk1S(Gng*LKEe^!6z2q#P7-!rVYHn?PQgqYG zmPNG;IjHM(+h*~m+^%|gVTI~fwp2Fqc;hKq|LUlC5WyawE+VMK2BSpLO)DD)fvC?NH11T- z{r7~o1<6ex9`(OipRSHD2iDJZ1iSwyoYoHv1yDOdynjVgP6707TfRMOyxh+H_sY`_ zDX=|3g3?H{rByTn*ax;d0o2M0RiWsnm6bV4aN2meXA&naO51_Fhxqx33qZPtw57H4 zJ~mEL7^{2$ByoLI*;H=Cf=~$>N*(d@+bKgPZ&YzxTv>OoU}x!( z$A{dS2>k0FFMFv^jB`vpi*2o}{r{7{>>l5qUS8inKD}ro^L0JHtKweC)N1LU*i=b` zH4)tCyLEe}a4k-$SqWENqNfN7pti-TLA;@AX`CW^#DxSp-tT2_0)ci=O~VYa^Wa0v z$FQNR=D(osp>9hp8ne|Yx@qNxQ9_JSsOzHP*+nF^?)WQr=Oz)Ap7)|uMoph%*i}dO zN{e?7RlJNN+$&v-()~gtgq2dnF?k-4~@YYWf_)mi;VcGlyPq zUDWcPUv17>qv)oU4TC_0VW{inl{8S}tHJT&{w2FKI6d-sD%+X}ZbR6zpQW5Lavcfm zA2qufFHJcGpq)WUKP{CnRih?Z53Wc4m5iVxy(lFFYthbj7xUfwA%qfjePWyg;-a<< z`t#3so$T!Ruh8Y_*`MKj_jbdxH^CVc(}RooL+^2pV?$T_-@RDwd8qdGJ|R)l1FdX% zQ_DQxFit;I7h9VCL?rE5H@NDBetX-Sq7cWH{Ve6)%?#ooZoh?6XJt*xxsSSrpy0G8ki2arVZ*{7ZG2qvC08 z%cS(kfvqMKGOfoYZ0i)bn||B9eGG>_$2X$iy0NGxn-2x8b6gU$r8_Tr(ot)eNX z0L&28LT7`7k@}f>opj*aEVd2lMJYTVXg|p*3^8o%v3ulp2lh~#hkbwieWUx!JQ%7U zsn_X2C@W2mJQC$i1b%L6`PKM&Hk~MgBR2T|iE03$}sz8a7iz*X( zq4(#nNA8bXsAzq^Ks~>>N!BK$6%0?4>UB->Qp!Fy_SQQw&bS_G3xi%#D1dBz@6&x0 zFkIhXSI@7%>mR*3DiQIq(c#wIP%!PMT~ho}$)7rXMme|1!#T~s(^N}3eiv~sb&U&33LDnLJ5Y2<Z~^pZt*_9w_g>2d}JjuVgS^XpTGu?O*p44;tGVjTyK^vNl>Y}?cXT6X=TfchV1-bp({a-mRg6NtI2Nu zSobn85d>av+OebA?qafQv60%-lv4nWv0;k;{Uxcr7_A25c6sN}ER0M9dMj>1-i4tP z<2}5d#ReKhH?6!|9x0suD|D@(H{{~q<1@`2+x3r31p272Vd8@^Bbc@(p=YtN{L++D z03Bbfue=4f6~$BJ?u0OOtT>SEE|Cag+h>VZC|8+_s!tRtx@qO6Cyg)8{S~^AVO0Hl z!VT-ZD;e3}*hCP$M6z}?4P#faXR%JQXv!&oo-gKi=l%+vB(Ptu|Gje4w7?}&=|dCI zz|3Ozx@X0XT^(i2fW>MPN6}3y7t6z?Gk=Ay@YgTB1$n?DmNu%M=)C|$u;VAjxi=40 zEt@pu6hJn6=<~c^p=TaS*+>FgB`g2z+cc8Mv7K)f8s=H02aPz@b)?Gk%4xF-R8i*XPIk>q~fM z*{t-gWO9e2+3o`GW2qMKG0hRot6 zB0y740bC+P(?}5kif&q27&42OhyYDF1#pQFO(R7FD7tB7VaP0AA_6q!6u>1yG>sGy zpy;NRg(0(ei3re?QvjC;(KJ#-fTEjL7KY5?B_cpmP61pZMAJwS0g7%~Sr{^lmxusO zIR$Wu5KSXR1Sq;`WnsuHULpcCzmlv4ng2+=fBM1Z23 vRu+cL;w2(LQ%(U~B1F?j5dn&BT3Hw}iuptJ;z^r|9Fx)do1 zpi&g+gd&h2MIeC?5RxFFyy4z^)_U)s_tv@R{_`?xk}os!?fu)o-Dd4rQ)9@<;{wM) zAkfL%`nu*I5VJf8#MI8l3S7a&o38+W{5*AZOg&v(Kp?5);A9PhBU;?iZ5{gIy5>?+ z&dC>U96xHtVUQSY#1YGxFu7X!P4~0QH@wIP%jy~q8C^k#=!2WKA1t*vxV1XEG{2W| z+EDmJF9f80V+6SMyDpyCo>vp2u&|0c_>(*C%Un&*LbK$1yvYS&ao#a5i6$o9zhIb| z?-o?}P3lghL*Ec4CFI1qG8>vNjeHz^tlP@YU?avqJ9#wiDLtCuqxNz=dYF1#^HTra z?cZy14Gp6ls0sHYYWCw3%X4|x&Y%_pCFYl|lO$gSIfdwX75B;taT#)nJvNSYeb{(H z|BAj_J@Uy+t90C)!h)Y!*I7tRc_`!7mD}TWcP+N+!qs{%(c8k*7uQV-5mKzw(|Ppa zlOL{ZPj6w+M+O+zpEe^@FW=p}^~H0`Xshq-S^SfAft(yGWu&0-_^bK;;Rj^fw=ak) zMxi%i(zxrOS|i#LW%ycxyx zr-Z+{JX8)SKHT;{m)@qZ;RYiD-i{6QBd=w`R@DaMz?b|A}6fTBQ0 zKq7y6S&E;TaRA@AVR^t51+@pfC$xPhWTdlY`qBeC2L}c(Xt4g-r-+AQ@?WrFn|grC zDB{ag2e(Qi8#3pb5Ykl^~1;CaO^fFRm zhZ$6C6P=>3M80wT`sx_Qn}_QrrCj^Mqk())+c1{Hjn1RVNc15py)8_~GCQC(Xtpm~ z#mb>I+>8xy{LV2sI-R})J$yvRQ1I9xt{^dikZ4{|-n}+79+x7z11fXI;cA7gWOz_V-|qTDn$H)|3(mPU4fA|C?snT3)Vb=Pap+8{yj` zm>f}A*7T?8s%m;-L5A$NDx%ZLvO5J^-l?eG&Q3qyy6VN}Gx}82K=KbERdahz$7|r* z4_jv<50KPYshxWl8t?Px3FD}wGlr3Pn(I`Jy(JTwlCjq#Y3fUqr7*Xrvsm5S6HV$ubwG`z5iRjsQ{m2C3j$K{K4 zJxc49QsG)J$Jt3|yGdibAE7I`dr0p^9>?#_274?oJQq5zZrK$T3)0`zWd@ao!O)VU z!YlYsn;G!(LlbfYketwmD?Z!Utvy+Au}77S5L_zf&_D~fNg$}Q|Enw;^I$O>(HkCWjokQ>^Dw9R-oAYI|p^pYjGI|2A^ zhU%S>yF0$)^o(xu?f1=r(t3NZYsd=q@Lp?1?Ej`;ct3mtWfICT&1$!_&X^i z#~hhVUJY_j`%T8Jj4pK$Q#(ri=r>=zBq}EVz?taeIHYY{i^!SUeJa#{q_epLeBPMbsUW zPrB5u8`{*;lASBd*I8QH0$#~EIN=TzE+p12(*CBkks?~Oc8|3VY*ms{ z$rqcP-c;J3XZd>TE``u;zI=-)e=r;v2hYASQAU7x`;PWrZf}R( zOXLvx@e~JtfTTbiamXF9zD`pA9 z^36)4W8R;;#*J$t5ZwOI|L9g?LSgV_zgsTv{B0k<;;>9BPoICs}lDuc-yubf7 zUC!s=cb~c{LzcmbXT`Kuh%yw`0Y^7e%vPGm+~ve4?Ao#mQyoI*ojGQ&FzZd@Z+(6q zud^GzzuPpK6r3PmSGj3fzz>62}wg?_pQs;9Z}`%!E%y zfpi{P9J#y{&zb2F0oBOKpZ$WV7ijRFJ~m*_=H0pml;m+w@K5>Cz&Fho+6SA)_L#wO z>^@3+U3J4*>geHK+h$EOoU`v%)#3`uk}{^EJ`(1%;6;U zT)Q5t@~Gf?EdAHf?awCL%Z zNFD}*#hHGn(qV|rK;P5h-T4D!7>&c~#b-MG;kZI@$NEmG#8^eP zNb!qcy+Sw`%ZLF=jJ9~ogN*w6Z%M0z+$#)?Mmt=D7=HJZhtOb)vY2^&z zT#If3Dc32r&%8F6(yhRJ;z>_6x>w)WM`IAq)16gJa3j!{r`2hI7c9iY#(<>%(0S~( zjvw}g_XDu}Qcfuvyax5&Z?fpdoi!*PH*^vzB^0LRrA#9Le5z4XQ?`O&OD-liqHpsv zq^sBTY(KIeuwpUa&x~To5Kg=cgw&~pJqCTp=~7HaA?MRoMo-GMZ?gD4KWcOFmMP@~ zL%1UMEa??c0EP5(lIFC`Dy;YuM2stKAWl$rF0cv(z?J|=G6f_(<-69X(_3BDJAA7a z=ue(A1r<>G^w8sSsxQ#uM!4}7hp0;UiXzDy+c~gj)(mG%aO1tKolDpfA8NDhv;2yc z+*e`r;mD=TL)IP{i75ym#6GuyZL4Pz7{Y}Lr0AC9PrYkVvaLn3Tf63zMkBR zf5hM_C{S;ifV`IM8B*{#N-4pTVy>K~<9-;ByZP46KGDOj#`tq?)^X}o2i)>S>q$CL zx5xo?-(9f?TXnn+fX$I6tE%U+npv7?XANqg^2L_)Y=RUl2ac)5wNU5R z4S)hX&cnod)&yQdZtv?$^ep5_+Y$1D>dGqH>qBhS!Emf%G|KQ0q!lI3<(~B8ggz0u z)AIFlgXzzQl2w2C)o7Yw7NJ0oVbe_?W8hw7(al><@sr+WT17qjUCT`%IhMyDfa{Fg zqDiHJ-h`E8;O5$Ms%-tO`HE)Yaq8&kr}+TQeWN(o#`eVG<;K=l;h&Gec%%tfL;<6* zC)BrPmn$)J@#l}P>Aso{;SK4$9ou>5g@xlKj^Ge8P0gyiTLWK3DnpQ1h{$<_6f)HfhFaOUi0~ORzl|jr%S+&1Q(ubL`^1 z*x)zQTDY4xUrAjVud>e#7vt-~?|vPX88QTlrNdsZH>rl8+*(!fp6!e2xV2+-q(u!U z-zm6R^a(~!IS+4aQ<9kracgXVhgd@>yaV*+(#mV0+>WP;N1tQ_^`jkD0?`$Oyb47X zdk)z5Lf#~7ktm8LQ-HnU7jtp5f#7l{YLn6NEYDcx;`?okJ))6|qV zkIS!qJ~Hvy{{eaEz-)fA*Z!sRa%<2`0ah*?jBC-0B53e6RF)mSE%EYC{F>+i5=4!+ zSS^zV76268d(e>asuJjl8J|>p>{NfDD|-71i)r9X-{OmY9QE6BBUt8F1=|~-Z?o_* zv38I3xLn>3ADa*Gl=e+r#9J1;%v`~5x_>pb8qsI&747&kqQqr`Dl0EwE>NP-%qav- zs~Cw<$n;h1D7BXb;E6a)_ucr`=)kp-r5h&1IP?h(e)n=%=?SD%#mZsysU;Mwp|x9G z-gfpR8&HZ64+!K}hYlHgC8J}nyy^QDsvj#9oPLjV8UITK^+{E@cDj!aG)pwK@}b+_ z`%3Lkkr#ARyjJtGn16i5-)F=3lpG z_8BSTswTWdfFvT(@Jz`-;T6VS#~)q{;QpuhmZPFE0vA^WVD0>CZ{{iawx?_bpjX#! zrFbs9USRZG`vcefPxcyHS}a)1g>?9{MCKO`9;TWlvTJt635^$QxEXz%JiIcVLF&pNGNDMNC4_@LOjOf9&V$gmdyXdHJco1# z`?+36aXQ9u>*Sr+jJV5Y8SCN}Kg$>sdptl-Ev=!L(LA%D5Xag!iXkAScW};EOGj=g z&c(G%qt}qpb13RY^SAkZeK5xT(5%&E8f{DuofGVga&cXW!kJGub)8%FFepYu=98ND zRcY1cOpEe!(x@FLYp!lRAu-#pK-4@teLl{3pC1VNLW1}G33^HKytQH#D6oVb*8-!& zOsyuW^P*I*(byXKWz8Y{NY3M3m1UmdOnT3?Lcd94w)jBsQ!Logsi1Ln<-7}tppjI* z{RjrFf+(JcdZc=mwuUBo9xqxldz?qg-H7c1<3^eTe~bcUsXet7yuu5Uf~W^5j9g&3A15{Ol#AaEA{h^JkOW><#u^Z2|z z5ysxB`IdN!eCyZV8K=`uP2I#wD5;_{SXa?+*FSTmtn69$e8g_{D^2_B4eBvc;8t~* zN31le@yx2v+j*ckm727g4OrJG$H`Fhgo!UJsoHmKBB!2!#M%?CF!!d=<_}Q$8BcN} zCPKs=cVgSQG)HX zl&uGl=u3|$n#BByBVcQa`HJSOZ1PEy5@LMc9^3Re1{>So@oLyw8b^hIPb*XzjesMK z#BPeTw{tW!CgmbFG=n*36fwD3>gvi^+(TV&GJXB(Hrv(elVwScgZ|tHwlVQ;W$fE| zmr+Ic+RDS?JvBHSzqf0>T<8xQV5jAYNn04ndhXhjZha#mDd3Mm#*LiLFDq9f4{n1m z9l=D*_BAH#+#MlK9)zsTG)d;9hSMrY?-mj2OM5w4H`J+c!2Ig4sG|=RqFF#e-Iv6p z%DxtrM}-)QGJ)`i*VyDi{NEA%pRB3g8!EDkSCEAN7t& z$@mhdNK4TVFE03Zl$IKg8Zu@q9k%EbCK@7%{>iAOIN%@?kGiU*z!FG_Ok zjP@v%bLo4xSa`6%OC7hv$?ajmnBCr`)t_Mdb?>cq%vgK)+oi=EN(7OsD$zKK?Hlp54~~ literal 0 HcmV?d00001 diff --git a/src/net/torvald/tsvm/AppLoader.java b/src/net/torvald/tsvm/AppLoader.java index 9e635d5..b328b5f 100644 --- a/src/net/torvald/tsvm/AppLoader.java +++ b/src/net/torvald/tsvm/AppLoader.java @@ -30,8 +30,9 @@ public class AppLoader { // 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[]{TandemBios.INSTANCE, BasicRom.INSTANCE}); +// VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{TandemBios.INSTANCE, BasicRom.INSTANCE}); // VM vm = new VM(128 << 10, new TheRealWorld(), new VMProgramRom[]{BasicBios.INSTANCE, WPBios.INSTANCE}); + VM vm = new VM(128 << 10, new TheRealWorld(), new VMProgramRom[]{TsvmBios.INSTANCE}); // uncomment to target the TerranBASIC runner // VM vm = new VM(64 << 10, new TheRealWorld(), new VMProgramRom[]{TBASRelBios.INSTANCE}); diff --git a/src/net/torvald/tsvm/peripheral/VMProgramRom.kt b/src/net/torvald/tsvm/peripheral/VMProgramRom.kt index b4399f4..0ebee81 100644 --- a/src/net/torvald/tsvm/peripheral/VMProgramRom.kt +++ b/src/net/torvald/tsvm/peripheral/VMProgramRom.kt @@ -30,6 +30,7 @@ object OEMBios : VMProgramRom("./assets/bios/TBMBIOS.js") object QuickBios : VMProgramRom("./assets/bios/quick.js") object BasicBios : VMProgramRom("./assets/bios/basicbios.js") object TandemBios : VMProgramRom("./assets/bios/tandemport.js") +object TsvmBios : VMProgramRom("./assets/bios/tsvmbios.js") object BasicRom : VMProgramRom("./assets/bios/basic.bin") object TBASRelBios : VMProgramRom("./assets/bios/tbasdist.js") object WPBios : VMProgramRom("./assets/bios/wp.js") \ No newline at end of file