From 42b66fc3fb0b44a0df9db6e0688bf23793b23dcb Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 22 Dec 2022 01:34:10 +0900 Subject: [PATCH] tvdos bootable disk image builder --- assets/DOSBOOT.tevd | Bin 124575 -> 125642 bytes assets/DOSBOOT.tevd.original | Bin 124575 -> 125642 bytes assets/disk0/{tvdos/bin => home}/commandko.js | 0 assets/disk0/{tvdos/bin => home}/fsh.js | 2 +- assets/disk0/{tvdos/bin => home}/gfont.gz | 0 .../disk0/{tvdos/bin => home}/graphicstest.js | 0 assets/disk0/{tvdos/bin => home}/gterm.js | 0 assets/disk0/{tvdos => home}/wall.bytes | 0 assets/disk0/{tvdos => home}/wall.png | Bin assets/disk0/root.bootable/!BOOTSEC | 1 + assets/disk0/root.bootable/AUTOEXEC.BAT | 8 ++++ .../net/torvald/tsvm/BuildTvdosBootable.kt | 44 ++++++++++++++++++ 12 files changed, 54 insertions(+), 1 deletion(-) rename assets/disk0/{tvdos/bin => home}/commandko.js (100%) rename assets/disk0/{tvdos/bin => home}/fsh.js (99%) rename assets/disk0/{tvdos/bin => home}/gfont.gz (100%) rename assets/disk0/{tvdos/bin => home}/graphicstest.js (100%) rename assets/disk0/{tvdos/bin => home}/gterm.js (100%) rename assets/disk0/{tvdos => home}/wall.bytes (100%) rename assets/disk0/{tvdos => home}/wall.png (100%) create mode 100644 assets/disk0/root.bootable/!BOOTSEC create mode 100644 assets/disk0/root.bootable/AUTOEXEC.BAT create mode 100644 tsvm_executable/src/net/torvald/tsvm/BuildTvdosBootable.kt diff --git a/assets/DOSBOOT.tevd b/assets/DOSBOOT.tevd index 93eb572c626e55bcdbb7a66b8392d80c9cdbafe7..ee152ab5fe6048a510b5431f7ea30c13c2622151 100644 GIT binary patch delta 1838 zcmZWqZ){Ul6n}TCtZUb`3hKar*E+h^b=?NTXy(wej*YPYEhsv+b?t5USl3tHd)-{N z1*d#41PG(S7vl$J@WYHm#23?GY$PI@3?&;81DniEjUq}gkr*@B@SVG^eS`O*>AmNi z-}&9&x#!%Y-(`(m%rbhaw)+`|(Z9%ew!0eK!_G%EYkbw?CmjYT>6iW%PW^26?9Oz5^P}m=apN`Ei`ONP2DPTVyFQpY%9yhdvxXyrV4pL|Y`W+4peOY>n-Xzoo8v z6xNUd1&J8tLsF9+-PQq_MM^T4@w+A$K&g|D3voR7EM%u#;({5S%g|mgU-+2PT)Rr4 zX-JtLzx4j+a@WKFihuGDIKFbs$x zU!2jZBYvBG8)-lx`R24bqW-`BOhs#knT#1{o-5!9=f8et+4<+bdRec93Q^;`SJcMX=yXjkhzq$h#2!BnI& zupv?z7I6hG(c$C=`+k;BZpS7oPdo?~Hh`_H=wJmG%PZ<}eC%ZXN`2C?umYFHhTF`0 zmH=TRg*a%_=~9d0VjSUFB`3HREAiOJMZ;psPK}|kwY?>r-=BmV#G4go!H)C$7ZVQR zB^E3Z+7*H+kCzR3J3?g1l^)0!<#`eo6)=aNXL|_0#f2*> zu-RSJyv12-j-kV=q{~~;T70)-EfGb++frasZY^q#{dDe8>GXcI!nDoptgbSv%+7YS z&X6QYGnYt1`%s>gm_Rwwsh!BMCqP7BXEPBZTv#C12*-=Bmh7}Sgh+@Ltp&veHaOZg zca^Jj-TJa(PlLxfjB_g4MABo{*(b6;4r_P^@lnbwj&ru|CAF6g9cL@w&T92v01 zg2P-r>4gg>T`5FQN}fV=Ll2XbqL8rc%|fav6hAhN{>{=u(?NrxARVFe1_d_Vobfeh zk(j52xlB9py+735Eq`?FeBJ}lvJ`OAL?*;Xt4W={}%&s~0O{H7%T3UaFZ=d5N%L8CnfP$f6}ZNO;*%mvggSv}n^5k_wa7 ziI$j`2a6tjSw~z-p)1VLlDvd6E$qb`gtG_tplSR5)#hH>!(oT-e81cGeM4XPZJ+od ziZi)Nf*^S9#Oa)inK?NMONfM&6dy9$4vSG-OY;yx6nUN}4ZS>qtm4MrzIG)r<&MMr zdAvsAGQK0YE!x2-_6>(bf|lkv{P7$+#GNOp$bRQ7Ty#qOit`b@0aR^R{Uuzq9V1bw zxAXbRFzHc4=o8rwvi2j)lk#UAb3D64w~$Wtn`>myVqdbLt$=p-LzI~=25r#FDb<$K zj4ftum*>SJ{o9}C7-#uDL1eFwbz$09@mnF-frQIKYNFk772MgIr~L_D%%Fp!Ad^{_ z3caYXK(8t)VEW>J`7ARjsaYgM!j|o)z>pi$x*xH&T2Mv2W$LA}oqF03eLh2xbt2DD zsnqK83`Uibu4LwymIyZ)9xs=JtcVJHs z4v=V{H_8h)PDwGdKt~&lI!$y^+TGc(b^K++q@VkysgZDT)pt%cwx_1`dh4j>bP7#i)nf&KbrS~VGiY#C0U?o zpIPuTV_jTC(L6c?!VGywc3zT`B}fCXw- z{Ct^y4m64Y2a23Rl?JxY5>4iNw(svn43;h2B!Xf4U|KLxH~rn%hzUuHk1~|_(MsTb(FbftT0*@++b4LZ_ACgSMRPM zfx4;0n7J)Lmo*0CX0|1ZF*9(QMl+&O_s@un7-tYOglKeV%n~)afZe=zlJv+LMJk6eL273ndR)(0_VxUk(yk&97Q51c*03 zr%{n&_(pU0G(`=Cb!8AOj^5Uy^@=fZWp*zO=a4ORU;=4Tn_@gyRNGD!%sl(x&dV0> z;&9zt>GbTJ6WdFwfB&%cJ8SI1<+ImZmoRUz-xfiTO&FPE>xF>h=2o3 zh}1;{Y{!*)oO$5f&v2RJ#7x}>Pk@C9U=t%)8Q#fo#3!&^V$8K6C*xRd$5n~p7mUYO z0O3GEjGOg(<;7;hQI3&vf~!r6$38X|5fr;@3`I;GZIP}08Mrv!BRTUHytRKhVH~fp zUI z8Ip45%H%62QE_r&3gsq0ZbydW0V4Rinh76eBRnxhSxz`o*>1M-(GVk;%4}t3D6Pd^ z@2uKhy~E~d^f(%%Kk$-m^hyF4VT>pK-F*V#rQw=5Z?9Y6BtR=4>*NKg|3T9Zvw0vp z^<(N-ffc-=hl8us!8NOb)v*DNkd;ssPDPeb;y}ElvBSAMAL5sWs&I|tPM{2fR&X+B z7!EKSkW5+FjIG0*n7{FqIOP0kXFjNcydLsE<-J#{RnlFGekcH$ke#~7Oa53m3QN7D z(zMh^pQ0u$4N4+!(ox;2z3rwySx18u$;NjVRvEAUcC$DS^hZu0urXhkEGyYfTrypu zVG}jqrUuL?g$%f~6h~MW>4nccdAl4vo%EEWyIN3R@$Xq$wZ*P`{c9kWnn~o(JyXV! zFecWZ74y=_n;f3K_O>oIOxnVI6+V^?RYW=Vn6#~lqjOvVwgtQqU!VT3&Ex;ds=IBY zq`C%0Aht|jx+Zo{4WQI`A$ni01^pLq&Cx1_5r3IKhaTTjICu#FkbIR`-Oo$c$)ZX% zPgv3QGkM?vL^VQ>pOxk?fzr0@t>JVSim0{Fq8x5|5DTnR83GE{&{W<4c7y>rS@B-QjJQfkH~6O?S1KaQ1U-qVORkG delta 1070 zcmZ8gZ%7ki7{7PBxtrT8)5L-13eq(5Z((LFv=T#TMk^#FvhB3x>DhLhtXyh;q@ske zY9DO1FZET%g-0Uf3K6uV%)S_?L8(aL`l5)-y62tc*?o99c;4st?|I(gPs*q7l<}rx zXDkFkC<4S$RH?it)N!?Utka!bmq0Ov?wl>#^x0Yi?%(ZJm zK#uxisE)+W({PWUzfPirf7RzdM@Uf~VbA5!%|M~|gYZn|&g4(@&l$7>?zUnKOB|gQF@IJ`p>6)|NnDs5lP%mQh|0*=3*5}njG1lxPkPe%YBe<;2weiV zyt9Es5??o%Yz@`wwiRK$E=pSTcB(2!h(_4E3sGQX39~Le;Da4tgm~>UW}@OGJI(2< zN=+4qYB;BbwbyVCtA%#@dNPqs5exYWO+_MrNE^lgVWDk5dW5L?%J5_06?(oRDY4N1 z4Nc3ntrN;n)RxUbLngV=G@|E8*O7EALS=)2HRaw>uO}3V$X_nI;^nUy_J#AaR3dXWjH8L>9R*p7OVrLFWn^x#rET=FF^;)Ox3)v9Kb>u zq#6@*tiyZ}h__0J(>&wl7U#^b{1)TlNm_sE6qR)am*8W5F^ypGIkuN zRJt!Xj}jPhf(E-Z&<5#|P?g=YYP!B}9w zd%Fe~AskQwLx8n|R~M{rF~QRUkMIvPe9kXvcznrf6{&_WfFISv^NfhuNvB)*7IDcG VkYIo**9L&^R~D5qtK#=t_Xo19vt0lH diff --git a/assets/disk0/tvdos/bin/commandko.js b/assets/disk0/home/commandko.js similarity index 100% rename from assets/disk0/tvdos/bin/commandko.js rename to assets/disk0/home/commandko.js diff --git a/assets/disk0/tvdos/bin/fsh.js b/assets/disk0/home/fsh.js similarity index 99% rename from assets/disk0/tvdos/bin/fsh.js rename to assets/disk0/home/fsh.js index 45d4e07..5acc322 100644 --- a/assets/disk0/tvdos/bin/fsh.js +++ b/assets/disk0/home/fsh.js @@ -262,7 +262,7 @@ _fsh.drawTitlebar() // TEST con.move(2,1); -print("Hit backspace to exit") +print("fSh is very much in-dev! Hit backspace to exit") // TODO update for events: key down (updates some widgets), timer (updates clock and calendar widgets) while (true) { diff --git a/assets/disk0/tvdos/bin/gfont.gz b/assets/disk0/home/gfont.gz similarity index 100% rename from assets/disk0/tvdos/bin/gfont.gz rename to assets/disk0/home/gfont.gz diff --git a/assets/disk0/tvdos/bin/graphicstest.js b/assets/disk0/home/graphicstest.js similarity index 100% rename from assets/disk0/tvdos/bin/graphicstest.js rename to assets/disk0/home/graphicstest.js diff --git a/assets/disk0/tvdos/bin/gterm.js b/assets/disk0/home/gterm.js similarity index 100% rename from assets/disk0/tvdos/bin/gterm.js rename to assets/disk0/home/gterm.js diff --git a/assets/disk0/tvdos/wall.bytes b/assets/disk0/home/wall.bytes similarity index 100% rename from assets/disk0/tvdos/wall.bytes rename to assets/disk0/home/wall.bytes diff --git a/assets/disk0/tvdos/wall.png b/assets/disk0/home/wall.png similarity index 100% rename from assets/disk0/tvdos/wall.png rename to assets/disk0/home/wall.png diff --git a/assets/disk0/root.bootable/!BOOTSEC b/assets/disk0/root.bootable/!BOOTSEC new file mode 100644 index 0000000..faca567 --- /dev/null +++ b/assets/disk0/root.bootable/!BOOTSEC @@ -0,0 +1 @@ +let p=_BIOS.FIRST_BOOTABLE_PORT;com.sendMessage(p[0],"DEVRST\x17");com.sendMessage(p[0],'OPENR"tvdos/TVDOS.SYS",'+p[1]);let r=com.getStatusCode(p[0]);if(0==r)if(com.sendMessage(p[0],"READ"),r=com.getStatusCode(p[0]),0==r){let g=com.pullMessage(p[0]);eval(g)}else println("I/O Error");else println("TVDOS.SYS not found");println("Shutting down...");println("It is now safe to turn off the power"); \ No newline at end of file diff --git a/assets/disk0/root.bootable/AUTOEXEC.BAT b/assets/disk0/root.bootable/AUTOEXEC.BAT new file mode 100644 index 0000000..7f37bc8 --- /dev/null +++ b/assets/disk0/root.bootable/AUTOEXEC.BAT @@ -0,0 +1,8 @@ +echo "Starting TVDOS..." + +rem put set-xxx commands here: +rem e.g. set PATH=\home\my-cool-project;$PATH +set KEYBOARD=us_qwerty + +rem this line specifies which shell to be presented after the boot precess: +command /fancy diff --git a/tsvm_executable/src/net/torvald/tsvm/BuildTvdosBootable.kt b/tsvm_executable/src/net/torvald/tsvm/BuildTvdosBootable.kt new file mode 100644 index 0000000..d19ae71 --- /dev/null +++ b/tsvm_executable/src/net/torvald/tsvm/BuildTvdosBootable.kt @@ -0,0 +1,44 @@ +package net.torvald.tsvm + +import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VDUtil +import net.torvald.tsvm.VM +import java.io.File + +/** + * Created by minjaesong on 2022-12-21. + */ +fun main(args: Array) { + if (args.size != 1) + println("Usage: java -jar BuildTvdosBootable.jar outfile") + + val disk = VDUtil.createNewDisk(720L shl 10, "TVDOS", VM.CHARSET) + + val tvdosDir = VDUtil.addDir(disk, 0, "tvdos".toByteArray(VM.CHARSET)) + val homeDir = VDUtil.addDir(disk, 0, "home".toByteArray(VM.CHARSET)) + + //tvdos/bin/* + VDUtil.importDirRecurse(disk, File("assets/disk0/tvdos/bin"), tvdosDir, VM.CHARSET) + + //tvdos/* + listOf( + VDUtil.importFile(File("assets/disk0/tvdos/gl.js"), disk.generateUniqueID(), VM.CHARSET), + VDUtil.importFile(File("assets/disk0/tvdos/TVDOS.SYS"), disk.generateUniqueID(), VM.CHARSET), + VDUtil.importFile(File("assets/disk0/tvdos/us_colemak.key"), disk.generateUniqueID(), VM.CHARSET), + VDUtil.importFile(File("assets/disk0/tvdos/us_qwerty.key"), disk.generateUniqueID(), VM.CHARSET), +// VDUtil.importFile(File("assets/disk0/tvdos/wall.bytes"), disk.generateUniqueID(), VM.CHARSET), +// VDUtil.importFile(File("assets/disk0/tvdos/wall.png"), disk.generateUniqueID(), VM.CHARSET), + ).forEach { + VDUtil.addFile(disk, tvdosDir, it) + } + + // bare file in root dir + listOf( + VDUtil.importFile(File("assets/disk0/root.bootable/!BOOTSEC"), disk.generateUniqueID(), VM.CHARSET), + VDUtil.importFile(File("assets/disk0/root.bootable/AUTOEXEC.BAT"), disk.generateUniqueID(), VM.CHARSET), + ).forEach { + VDUtil.addFile(disk, 0, it) + } + + + VDUtil.dumpToRealMachine(disk, File(args[0])) +}