From 2ec0f6aa51f0c11eef827093fe35babd4556e11f Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 28 Dec 2021 11:28:45 +0900 Subject: [PATCH] i18n driver for tvdos --- .idea/runConfigurations.xml | 10 ---- assets/FontROM7x14.png | Bin 3212 -> 3701 bytes assets/FontROM7x14_437.png | Bin 3701 -> 0 bytes assets/FontROM7x14_HANGUL.png | Bin 3701 -> 3212 bytes assets/FontROM7x14_HANGUL_DISASM.png | Bin 0 -> 3701 bytes assets/disk0/tvdos/bin/commandko.js | 18 +++---- .../tvdos/i18n/hang_hi.chr} | Bin .../tvdos/i18n/hang_lo.chr} | Bin .../{home/hangasm.js => tvdos/i18n/korean.js} | 48 +++++++++++------- .../torvald/tsvm/GraphicsJSR223Delegate.kt | 12 ++--- .../tsvm/peripheral/GraphicsAdapter.kt | 2 +- 11 files changed, 47 insertions(+), 43 deletions(-) delete mode 100644 .idea/runConfigurations.xml delete mode 100644 assets/FontROM7x14_437.png create mode 100644 assets/FontROM7x14_HANGUL_DISASM.png rename assets/{hangul_high.chr => disk0/tvdos/i18n/hang_hi.chr} (100%) rename assets/{hangul_low.chr => disk0/tvdos/i18n/hang_lo.chr} (100%) rename assets/disk0/{home/hangasm.js => tvdos/i18n/korean.js} (82%) diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 797acea..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/assets/FontROM7x14.png b/assets/FontROM7x14.png index 2a16cd9b8595c3650acdf405ab52a5c037989d60..ac140a00c07fb78cf41ce25048c8891afe731d3f 100644 GIT binary patch delta 3686 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 Ef;wO;2><{9 delta 3193 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 diff --git a/assets/FontROM7x14_437.png b/assets/FontROM7x14_437.png deleted file mode 100644 index ac140a00c07fb78cf41ce25048c8891afe731d3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3701 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 TuMD-y00000NkvXXu0mjfwVow$ diff --git a/assets/FontROM7x14_HANGUL.png b/assets/FontROM7x14_HANGUL.png index 39409f5e884f1e7ede114872297fa368b9067f75..2a16cd9b8595c3650acdf405ab52a5c037989d60 100644 GIT binary patch delta 3193 zcmV-<42JXd9E=%|GJm~GLQxpTe`->sQBXldgM&qbffPhz+2A4}W{}mQH$MVDF83-S ztwBqJ&=9rsHS{0U8nhM!K@mi>^bhp4gxubff)aWz=e|FlbDo!To&)w!R?C?ke#qsE zMkE;UEXP(noo~1q#7Q5nxMu2e;c$qythMR0Yu-go73kH_1fNlDEhu^DlgE{R6P>> zl|Zg7V&?Ro#kH-T;XnPNe$$L;Z`O0)S~P>$(&sO6A9TH@cfIBrmbMktW6pQ1xV~Pm zp?=p0X@8k5mD1l9Mzq)Nz{D%VJoom5w4DIdq);=E8|-h#Eg!%!q8$*4(e1sxLE)r& z<|u=EeY`RhDAXaK zlAXIgXExX>7G14XF}+T6hIynd%8o^th<2Pf&3|H@dDnirRH#M0acWCyyXtwWjbf@s zO>*j$Q7=Z zT7TxYC{}tO_njv*y+nnpBveK*f^%{$5qZh!=lXe@87Ltv?T7ay-ZBHcDpZr3J3;NX zCW=MG8edN13+}FdMpUR|CcGGe!V+ARNbN@4S>=pGc(}AzYZ^Re$m)0g{9a!mlOsQp zROXV~l)BfT{UUMvDR7(vQCx7kcb#QiHGgB=3)W8qF(=qSt*c|PftnB;WdpVMu?&<3 zzr9w={GCC}F5jSyz5b(CtqI4-gk|;sd6sh=YpkR10f9iE2m3@;wJ8MyR@fctou}Hr zZ@-I|5t^m*v%tp4+R~msb*f!2tE8tV2(61kwLKk3UB{x%d;u3O8eNbS;RCilEq{>( zcZj)XR}SsPWH1E#^M?L@88lQ+x8j@6Qz5&vaDIcwqvAeSvG=ETVmWX zvT($rzO4XBd;iG#qL7u@78}ShkpeN?s_x!%XQ}$pgzk)f*6f#R)MjttQr4hwvwn53 zJMH}=j=WTz>H!d^2eW&9EF&MDfqzt65JWL@*TMEguX<>=H~Y3-QXwr%oDG^l52vGZ zjG#nKg&{a+MpNeG%{6MBYfXfuXJ;(+4L!fivtnENh8>wlMTRQXs2No5K5e0kH8LTk zgg6(5>Zj$~y_Le&D2-Ksie=iigEk_qPcZNnrbzMOUV9x;iJFdD*G@`ma(|X2TcbRl zen=Weiuh3DQZpow3r|U^kgL?uN_GqBXWKcgs`vP-?Q;qRCZg1YW+x-htmtV5X|ETq z^eroSY>h-oGk@8Vie18C-a=B(;Li|(Ix;If(l#rMHTtY*+bO9*>zMTVHFZslr|@xC zUo3)&GXU7z>yVE)&laR+ZGV%{nhpTC0H!UAZ z8#o$<^0Z~B>#Pu5hzf+JB9>yDq8?YP=4l{CTFT(f z9!Rz$;yAnBIf)}Dv_+K#w9lJ<5+?`*0^Jx1V+cfB)|wX9#%VL_QKqU|58==*dGqW% zZ;A3}wMjznITnFKt$$WzUMOFW+8v2YYe@G=TaxSum@HcgFD zaKh{hQK4B3(x|)L5N*cTl#|p&Cb~OiC3KY-?uh(&(xzCy> zJ@USWlpY*nQ#005m8_i*p)ef;0)ZYH_39G;&QE1`H=t*S z7u(~{-+v_P%yd0!7TnF6O(TA+w|yHw(6d5JT6Jc1_%#V+?S^;OP4X-mM2#5(eU8v`)23Y{7S7>IIg4dWNv z$7+$VtbsjgQSoZf2NfD1Xe%{_IUB*LJ8Iuc%0P2VAA0wV_EV#(y?}&rzar0gTCrv3 z7S8_e&kPHt-3bv!Nhk__Kq;C95*0Y}rTWJa8-~s9l7DS&)@f;Fw+{!w4}28W(K4|% zAS*@JxvWA|nbYez)K(BszXaXf%Po;)ln8skY@oR>Hy4XDwI2@apgJd zTwg{J;An(}dXD#a*^(i_s{zYM0n3cSonAhY`u|c8lU<=iNi!wgJNjPUs^w!)s8@YG zrZ&QoRe!MBAxgri=(_Yi4FIy#MOd>fTQbzbpu0QZS!dHnj^kBYMd7+*JZ^M`S>l_I z$>)JU)79s!_i28={#`j#ra1?}3M58$Ym!uX#35eVa9UK`s9CBJVIwXYqd}$-lCL>c zyXTZkZCZ5Q6U6oix=3VOXR3&m_h)^FxBNV6vw!$H8)-)GGB2GZqZw%KWKC*y88i9X?(b7a>z|U1SlQ-bAhHpgWFtId{&Nqq5rh4R%0@_9t|v^$M!b-X08J)# zM}I5Jbk*7~WFzd^h@LjF^ar$|t!=l~Z2vA=-vn)WZ5EAIA^T^{!d_AB8@1|t0u>Ml z1OkCF0R(Cz5}b95V~yH~0R)9?#8_>FR!EVJ80^Qa+6Zk4IkFKiWFtVyAm@Jqm4jGl}d$izkI|gz`)vVq?J^TJgsnDL!6fIOEz8%Hb zUS>qge04f0N}2#XWTv<4K)K*|)k<5G3Y&c#K`*mzJyBF@^SVh~d6{R->K!H6s(%JO zZBftbof*IU;15u;BM;hNi;y738|s>o74|sXPX|VIWcfp;-pREQo=gmCjXCTq2Oa_i?Q-6$gv;%5s^FGrHVos=y;8bm|&s#d{Pxk}0ZUp>5 zIP##Cbc`F}&59obM(*y&do$o5fSCKc5qA+n&xQ#WZJ<4R)gru=^Jh38Xv7!VX``Q8 zfEa2ZG!n@%R|7J*0k*18Z!jAuRG}_B1D3f@%(V@$ffhSBQV%h+pNNGXPGBGy2m%8^U?3O>0)aqFo%&;IBXDlSzt6zA5jZ#E z?Ai#N8{ro;>bbps;M|DU+2=-}I%zW?Wz_;WHv+X0pbR$ywGjxVfo9RK{{}!JRzUAT z+&K}P4XoNdn$ecm1~=k{GjfuP5P?AVgY7HdXX%SNTK|-6#L700eMB~5(^IUMgBWBZ z?1C1;Kx89uiZv+H-O$WFWFvC35y& fAseyzY?SCXTN&g$Yk)5m00000NkvXXu0mjfW>x^` delta 3686 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 Ef+a#kBme*a diff --git a/assets/FontROM7x14_HANGUL_DISASM.png b/assets/FontROM7x14_HANGUL_DISASM.png new file mode 100644 index 0000000000000000000000000000000000000000..39409f5e884f1e7ede114872297fa368b9067f75 GIT binary patch literal 3701 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 T+`~G-00000NkvXXu0mjfjsHH3 literal 0 HcmV?d00001 diff --git a/assets/disk0/tvdos/bin/commandko.js b/assets/disk0/tvdos/bin/commandko.js index dbfeab9..af608f4 100644 --- a/assets/disk0/tvdos/bin/commandko.js +++ b/assets/disk0/tvdos/bin/commandko.js @@ -11,8 +11,8 @@ let errorlevel = 0; const termWidth = con.getmaxyx()[1]; const termHeight = con.getmaxyx()[0]; -const welcome_text = (termWidth > 40) ? "TSVM Disk Operating System, version " + _TVDOS.VERSION - : "TSVM Disk Operating System " + _TVDOS.VERSION; +const welcome_text = (termWidth > 40) ? "TSVM 한글 DOS, 버전 " + _TVDOS.VERSION + : "TSVM 한글 DOS " + _TVDOS.VERSION; const greetLeftPad = (termWidth - welcome_text.length - 6) >> 1; const greetRightPad = termWidth - greetLeftPad - welcome_text.length - 6; @@ -255,7 +255,7 @@ shell.coreutils = { // check if path is valid var dirOpenedStatus = filesystem.open(CURRENT_DRIVE, path.string, 'R'); var isDir = filesystem.isDirectory(CURRENT_DRIVE); // open a dir; if path is nonexistent, file won't actually be opened - if (!isDir) { printerrln("CHDIR failed for '"+path.string+"'"); return dirOpenedStatus; } // if file is not opened, IO error code will be returned + if (!isDir) { printerrln("디렉토리 '"+path.string+"'가 없습니다."); return dirOpenedStatus; } // if file is not opened, IO error code will be returned shell_pwd = path.pwd; }, @@ -270,7 +270,7 @@ shell.coreutils = { // check if path is valid var dirOpenedStatus = filesystem.open(CURRENT_DRIVE, path.string, 'W'); var mkdird = filesystem.mkDir(CURRENT_DRIVE); - if (!mkdird) { printerrln("MKDIR failed for '"+path.string+"'"); return dirOpenedStatus; } + if (!mkdird) { printerrln("디렉토리 생성 실패: '"+path.string+"'"); return dirOpenedStatus; } }, cls: function(args) { con.clear(); @@ -313,7 +313,7 @@ shell.coreutils = { // if value is undefined, show what envvar[key] has if (value === undefined) { if (_TVDOS.variables[key] === undefined) - println("Environment variable '"+key+"' not found"); + println("환경변수 '"+key+"'이(가) 없습니다."); else println(_TVDOS.variables[key]) } @@ -331,7 +331,7 @@ shell.coreutils = { // check if path is valid var pathOpenedStatus = filesystem.open(CURRENT_DRIVE, pathstr, 'R'); - if (pathOpenedStatus != 0) { printerrln("File not found"); return pathOpenedStatus; } + if (pathOpenedStatus != 0) { printerrln("파일이 없습니다"); return pathOpenedStatus; } var port = filesystem._toPorts(CURRENT_DRIVE)[0] com.sendMessage(port, "LIST"); @@ -341,7 +341,7 @@ shell.coreutils = { var pathstr = (args[1] !== undefined) ? args[1] : shell.getPwdString(); var pathOpenedStatus = filesystem.open(CURRENT_DRIVE, pathstr, 'R'); - if (pathOpenedStatus != 0) { printerrln("File not found"); return pathOpenedStatus; } + if (pathOpenedStatus != 0) { printerrln("파일이 없습니다"); return pathOpenedStatus; } let contents = filesystem.readAll(CURRENT_DRIVE); // TODO just print out what's there print(contents); @@ -393,7 +393,7 @@ shell.execute = function(line) { } if (!fileExists) { - printerrln('Bad command or filename: "'+cmd+'"'); + printerrln('명령어 또는 파일 이름이 틀립니다: "'+cmd+'"'); return 127; } else { @@ -480,7 +480,7 @@ if (exec_args[1] !== undefined) { goInteractive = true; } else { - printerrln("Invalid switch: "+exec_args[1]); + printerrln("잘못된 스위치: "+exec_args[1]); return 1; } } diff --git a/assets/hangul_high.chr b/assets/disk0/tvdos/i18n/hang_hi.chr similarity index 100% rename from assets/hangul_high.chr rename to assets/disk0/tvdos/i18n/hang_hi.chr diff --git a/assets/hangul_low.chr b/assets/disk0/tvdos/i18n/hang_lo.chr similarity index 100% rename from assets/hangul_low.chr rename to assets/disk0/tvdos/i18n/hang_lo.chr diff --git a/assets/disk0/home/hangasm.js b/assets/disk0/tvdos/i18n/korean.js similarity index 82% rename from assets/disk0/home/hangasm.js rename to assets/disk0/tvdos/i18n/korean.js index 38f6039..487f7a3 100644 --- a/assets/disk0/home/hangasm.js +++ b/assets/disk0/tvdos/i18n/korean.js @@ -1,4 +1,35 @@ +let status = 0 +let workarea = sys.malloc(1920) +// install LOCHRROM +status = filesystem.open("A", "/tvdos/i18n/hang_lo.chr", "R") +if (status != 0) { + printerrln("hang_lo.chr not found") + sys.free(workarea) + return status +} +dma.comToRam(filesystem._toPorts("A")[0], 0, workarea, 1920) +for (let i = 0; i < 1920; i++) sys.poke(-1300607 - i, sys.peek(workarea + i)) +sys.poke(-1299460, 18) + + +// install HICHRROM +status = filesystem.open("A", "/tvdos/i18n/hang_hi.chr", "R") +if (status != 0) { + printerrln("hang_hi.chr not found") + sys.free(workarea) + sys.poke(-1299460, 20) // clean up the crap + return status +} +dma.comToRam(filesystem._toPorts("A")[0], 0, workarea, 1920) +for (let i = 0; i < 1920; i++) sys.poke(-1300607 - i, sys.peek(workarea + i)) +sys.poke(-1299460, 19) + + + +sys.free(workarea) + +graphics.setHalfrowMode(true) /* * A character is defined as one of: * 1. [I,x] (Initial only) @@ -167,23 +198,6 @@ let printComma = (char) => { cursReturn() } -/*let text = "동해물과 백두산이 마르고 닳도록 7비트 한글조합" - -//con.clear() -//con.move(1,1) -unicode.utf8toCodepoints(text).forEach(cp=>{ - if (0xAC00 <= cp && cp <= 0xD7A3) { - let i = ((cp - 0xAC00) / 588)|0 - let p = ((cp - 0xAC00) / 28 % 21)|0 - let f = (cp - 0xAC00) % 28 - printHangul(toLineChar(i,p,f)) - } - else { - print(String.fromCharCode(cp)) - } -})*/ - - // load unicode module to the TVDOS if (unicode.uniprint) { unicode.uniprint.unshift([ diff --git a/tsvm_core/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt b/tsvm_core/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt index 32d6eb4..201187a 100644 --- a/tsvm_core/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt +++ b/tsvm_core/src/net/torvald/tsvm/GraphicsJSR223Delegate.kt @@ -96,9 +96,7 @@ class GraphicsJSR223Delegate(val vm: VM) { } fun setCursorYX(cy: Int, cx: Int) { - getFirstGPU()?.let { - it.setCursorPos(cx - 1, cy - 1) - } + getFirstGPU()?.setCursorPos(cx - 1, cy - 1) } @@ -132,9 +130,7 @@ class GraphicsJSR223Delegate(val vm: VM) { } fun putSymbolAt(cy: Int, cx: Int, c: Int) { - getFirstGPU()?.let { - it.putChar(cx - 1, cy - 1, c.toByte()) - } + getFirstGPU()?.putChar(cx - 1, cy - 1, c.toByte()) } /*private fun GraphicsAdapter._loadbulk(fromAddr: Int, toAddr: Int, length: Int) { @@ -153,6 +149,10 @@ class GraphicsJSR223Delegate(val vm: VM) { ) }*/ + fun setHalfrowMode(set: Boolean) { + getFirstGPU()?.halfrowMode = set + } + private fun GraphicsAdapter._loadSprite(spriteNum: Int, ptr: Int) { UnsafeHelper.memcpy( vm.usermem.ptr + ptr, diff --git a/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt b/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt index 272bada..5584590 100644 --- a/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt +++ b/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt @@ -115,7 +115,7 @@ open class GraphicsAdapter(private val assetsRoot: String, val vm: VM, val confi private val memTextOffset = 2L + 2560 + 2560 private val TEXT_AREA_SIZE = TEXT_COLS * TEXT_ROWS - override var halfrowMode = true//false + override var halfrowMode = false override var rawCursorPos: Int get() = textArea.getShort(memTextCursorPosOffset).toInt()