{"id":12664,"date":"2026-10-22T08:11:45","date_gmt":"2026-10-21T23:11:45","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=12664"},"modified":"2026-10-22T15:52:36","modified_gmt":"2026-10-22T06:52:36","slug":"os-minios-text-3","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/10\/22\/os-minios-text-3\/","title":{"rendered":"[OS]miniOS-Text-3"},"content":{"rendered":"\n<p>\ud83d\udc49\ud83c\udffb miniOS-Text-3\uc5d0\uc11c\ub294 \ud654\uba74 \uc2a4\ud06c\ub864\uacfc \ud558\ub4dc\uc6e8\uc5b4 \ucee4\uc11c\uc81c\uc5b4 \uad6c\ud604\uc785\ub2c8\ub2e4.<br>miniOS-Text-3 implements screen scrolling and hardware cursor control.<\/p>\n\n\n\n<p>\ud83d\udcc1 \ucf54\ub4dc \/ Code<\/p>\n\n\n\n<p>\u2714\ufe0f I\/O \ud3ec\ud2b8 \uc81c\uc5b4 \ud568\uc218  \/ I\/O port control functions<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>static inline void outb(word port, byte value) {\n    __asm__ __volatile__(\"outb %0, %1\" : : \"a\"(value), \"Nd\"(port));\n}<\/code><\/pre>\n\n\n\n<p>1)VGA\uadf8\ub798\ud53d,\ud0a4\ubcf4\ub4dc,\ub9c8\uc6b0\uc2a4,PC\uc2a4\ud53c\ucee4 \uc77c\ubd80\uae30\ub2a5 \uc81c\uc5b4\ub97c \uc704\ud574\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br>It is used to control certain functions of the VGA graphics, keyboard, mouse, and PC speakers.<\/p>\n\n\n\n<p>\u2714\ufe0f \uc2a4\ud06c\ub864 \ud568\uc218 \/ Scroll function<\/p>\n\n\n\n<p>1) 0\ubc88\uc9f8 \uc904\uc744 1\ubc88 \uc904\ub85c \uc62c\ub9ac\uace0 \ud654\uba74\uc758 \uac00\uc7a5 \uc704\ucabd 25\ubc88\uc904\uc740 24\ubc88\uc904\ub85c \ub36e\uc5b4\uc4f0\uae30<br>Shift line 0 up to line 1, and overwrite line 25\u2014at the very top of the screen\u2014with the contents of line 24.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>    for (int i = 0; i &lt; 24 * 80; i++) {\n        vram&#91;i] = vram&#91;i + 80];\n    }<\/code><\/pre>\n\n\n\n<p>A.\uc9c0\uae08 \ud654\uba74\ud574\uc0c1\ub3c4\ub294 \uac00\ub85c 80\uae00\uc790 \uc138\ub85c 25\uc904\uc785\ub2c8\ub2e4.(0~24 = 25\uc904)<br>The current screen resolution is 80 characters wide by 25 lines high (0~24 = 25 lines).<\/p>\n\n\n\n<p>B. vram[i + 80]\ub294 \ubcf5\uc0ac\ud560 \uac12\uc758 \uc704\uce58\uac00 \ub2e4\uc74c \uc904\uc758 \ub3d9\uc77c\ud55c \uc704\uce58\uc784\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<br>vram[i + 80] means that the location of the value to be copied is at the same position on the next line.<\/p>\n\n\n\n<p>C.\uc989 i = 80\uc774\uba74 1\ubc88 \uc904\uc758 \ub9e8 \uccab \uae00\uc790\uc704\uce58(vram[80])\uc5d0 2\ubc88 \uc904\uc758 \ub9e8 \uccab \uae00\uc790( <code>vram[160]<\/code>)\uac12\uc744 \ubcf5\uc0ac\ud574\uc11c \ub123\uc2b5\ub2c8\ub2e4.<br>In other words, if i = 80, the value of the first character of the second row (vram[160]) is copied into the position of the first character of the first row (vram[80]).<\/p>\n\n\n\n<p>D.\uc774\ub807\uac8c\ud558\uba74 \ud654\uba74\uc758 \uac00\uc7a5 \uc704\ucabd \uc904\uc778 0\ubc88\uc904\uc740 1\ubc88\uc904\ub85c \ub36e\uc5b4\uc4f0\uae30 \ub418\uace0 \uac00\uc7a5 \uc544\ub7ab\uc904 24\ubc88\uc904\uc740 23\ubc88\uc904\ub85c \ud55c \uce78 \uc62c\ub77c\uc624\uac8c\ub429\ub2c8\ub2e4.<br>By doing this, row 0\u2014the topmost row on the screen\u2014is overwritten by row 1, while row 24\u2014the bottommost row\u2014shifts up by one position, taking the place of row 23.<\/p>\n\n\n\n<p>2)24\ubc88\uc904\uc758 \uae30\uc874 \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud558\uae30<br>Delete the existing data in row 24<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>    for (int i = 24 * 80; i &lt; 25 * 80; i++) {\n        vram&#91;i] = (0x0F &lt;&lt; 8) | ' '; \n    }<\/code><\/pre>\n\n\n\n<p>A.i\uc758 \uc2dc\uc791\uac12\uc774 23\ubc88\uc9f8 \uc904 \ub05d \ubd80\ud130 \uc2dc\uc791\ud574\uc11c 24\ubc88\uc9f8 \uc904 \ub05d\uae4c\uc9c0 \ud55c\uae00\uc790\uc529 \uae00\uc790\uc9c0\uc6b0\uae30 \ubc18\ubcf5<br>The initial value of <code>i<\/code> begins from the end of the 23rd line and proceeds through the end of the 24th line, with characters being deleted one by one in a repeating process.<\/p>\n\n\n\n<p>B.\ube44\ud2b8\uc5f0\uc0b0(OR \uc5f0\uc0b0) \/ Bitwise operation (OR operation)<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>  0000 1111 0000 0000  (0x0F\uac00 \uc67c\ucabd\uc73c\ub85c 8\uce78 \uc774\ub3d9\ud55c \uac12 \/ The value of 0x0F moved 8 spaces to the left)\n| 0000 0000 0010 0000  (\uacf5\ubc31 \ubb38\uc790\/Whitespace character ' ' = 0x20)\n----------------------\n  0000 1111 0010 0000  (\ucd5c\uc885 16\ube44\ud2b8 \uc644\uc131 \/ Final 16-bit version complete)<\/code><\/pre>\n\n\n\n<p>a)0x0F = 15 = 0000 1111 \uc774\uba70 \uc67c\ucabd\uc73c\ub85c 8\ube44\ud2b8 \ubc00\uba74 1111 0000 0000\uc774 \ub429\ub2c8\ub2e4.<br>0x0F = 15 = 0000 1111; shifting it 8 bits to the left results in 1111 0000 0000.<\/p>\n\n\n\n<p>b)0x20 = 32 = 0010 0000<\/p>\n\n\n\n<p>c)\ucd5c\uc885\uc801\uc73c\ub85c 16\ube44\ud2b8 \uac12\uc740 0000 1111 0010 0000 \uc774 \ub429\ub2c8\ub2e4.<br>Ultimately, the 16-bit value becomes 0000 1111 0010 0000.<\/p>\n\n\n\n<p>d)0000 1111 0010 0000 = 0x0F20 \uc774\uace0 0x0F\uc740 \uc0c1\uc704\ubc14\uc774\ud2b8 0x20\uc740 \ud558\uc704\ubc14\uc774\ud2b8\uc785\ub2c8\ub2e4.<br>0000 1111 0010 0000 = 0x0F20, where 0x0F is the high byte and 0x20 is the low byte.<\/p>\n\n\n\n<p>e)\uc0c1\uc704 \ubc14\uc774\ud2b8\uc5d0\ub294 \uae00\uc790\ub294 \ud770\uc0c9 \ubc30\uacbd\uc740 \uac80\uc740\uc0c9\uc784\uc744 \uc758\ubbf8\ud558\uace0 \ud558\uc704\ubc14\uc774\ud2b8\ub294 \uacf5\ubc31\uc784\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<br>The upper byte indicates that the characters are white on a black background, while the lower byte represents a space.<\/p>\n\n\n\n<p>f)varm[i]\uc989 \ub9c8\uc9c0\ub9c9 \uc904\uc5d0\ub294 2\uc9c4\uc218 \uac12\uc774 \ub4e4\uc5b4\uac00\uace0 \uc0c1\uc704\ubc14\uc774\ud2b8\uc640 \ud558\uc704\ubc14\uc774\ud2b8\ub97c \uc18d\uc131\uc73c\ub85c \ube44\ub514\uc624 \uba54\ubaa8\ub9ac\uac00 \uc778\uc2dd\ud569\ub2c8\ub2e4.<br>In the final line\u2014<code>varm[i]<\/code>\u2014a binary value is stored, and the video memory interprets this by treating the data as consisting of an upper byte and a lower byte.<\/p>\n\n\n\n<p>g)\ud575\uc2ec\uc740 VGA \ud558\ub4dc\uc6e8\uc5b4\uac00 \ube44\ub514\uc624 \uba54\ubaa8\ub9ac(0xB8000)\uc758 16\ube44\ud2b8(2\ubc14\uc774\ud2b8) \uacf5\uac04\uc744  \ubc18\uc73c\ub85c \ub098\ub204\uc5b4\uc11c \uc0c1\uc704\ubc14\uc774\ud2b8\ub294 \uc18d\uc131\uc73c\ub85c \uc778\uc2dd\ud558\uace0 \ud558\uc704\ubc14\uc774\ud2b8\ub294 \ubb38\uc790\ub85c \uc778\uc2dd\ud55c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<br>The key point is that the VGA hardware divides each 16-bit (2-byte) unit of video memory (starting at 0xB8000) into two halves: the upper byte is interpreted as an attribute, while the lower byte is interpreted as a character.<\/p>\n\n\n\n<p>\u2714\ufe0f \ucee4\uc11c \uc704\uce58 \uc14b\ud305\ud558\ub294 \ud568\uc218<br>A function that sets the cursor position<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>void update_cursor(int x, int y) {\n    \/\/ \ud654\uba74\uc740 \uac00\ub85c 80\uae00\uc790, \uc138\ub85c 25\uc904\uc774\ubbc0\ub85c \uc804\uccb4 \uc704\uce58(\uc624\ud504\uc14b) \uacc4\uc0b0\n    \/\/ Since the screen is 80 characters wide and 25 lines high, calculate the total position (offset)\n    unsigned short cursorLocation = y * 80 + x;\n\n    \/\/ 1. \ucee4\uc11c \uc704\uce58\uc758 '\ud558\uc704 8\ube44\ud2b8'\ub97c \uc124\uc815\ud558\uae30 \uc704\ud574 \uc778\ub371\uc2a4 0x0F \uc120\ud0dd\n    \/\/ Select index 0x0F to set the 'lower 8 bits' of the cursor position.\n    outb(0x3D4, 0x0F);\n    outb(0x3D5, (unsigned char)(cursorLocation &amp; 0xFF));\n\n    \/\/ 2. \ucee4\uc11c \uc704\uce58\uc758 '\uc0c1\uc704 8\ube44\ud2b8'\ub97c \uc124\uc815\ud558\uae30 \uc704\ud574 \uc778\ub371\uc2a4 0x0E \uc120\ud0dd\n    \/\/ Select index 0x0E to set the 'upper 8 bits' of the cursor position\n    outb(0x3D4, 0x0E);\n    outb(0x3D5, (unsigned char)((cursorLocation &gt;&gt; 8) &amp; 0xFF));\n}<\/code><\/pre>\n\n\n\n<p>1)\ud604\uc7ac \ucee4\uc11c\uac00 \uba87\ubc88\uc9f8 \uce78\uc5d0 \uc788\ub294\uc9c0 \uacc4\uc0b0 \ud558\uae30<br>Calculate the current cursor position<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>unsigned short cursorLocation = y * 80 + x;<\/code><\/pre>\n\n\n\n<p>2)VGA \uc778\ub371\uc2a4(\uc8fc\uc18c) \ud3ec\ud2b8(0x3D4)\uc5d0 0x0F(=15)\uac12 \uc14b\ud305( 0x0F\ub294 \ud558\uc704\ube44\ud2b8 \uc14b\ud305\uc744 \uc758\ubbf8\ud568)<br>Set the value 0x0F (=15) in the VGA index (address) port (0x3D4) (0x0F signifies the setting of the lower bits).<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>outb(0x3D4, 0x0F);<\/code><\/pre>\n\n\n\n<p>3)\uc704\uc5d0\uc11c \uc124\uc815\ub41c \uc8fc\uc18c\uc5d0 \uc2e4\uc81c\ub85c \uac12\uc744 \ud560\ub2f9<br>Actually assign a value to the address set above<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>outb(0x3D5, (unsigned char)(cursorLocation &amp; 0xFF));<\/code><\/pre>\n\n\n\n<p>A.0xFF\uc758 \uc6d0\ub798\ub294 0x00FF \ud615\ud0dc\uc774\uc9c0\ub9cc \ubcf4\ud1b5 \uc55e\uc758 00\uc744 \uc0dd\ub7b5\ud569\ub2c8\ub2e4.<br>While 0xFF is technically in the form 0x00FF, the leading 00 is typically omitted.<\/p>\n\n\n\n<p>B. \uc774\uc9c4\uc218\ub85c \ud45c\ud604\ud558\uba74 0000 0000 1111 1111\uc774 \ub429\ub2c8\ub2e4.<br>When expressed in binary, it becomes 0000 0000 1111 1111.<\/p>\n\n\n\n<p>C.\ud558\uc704\ube44\ud2b8\ub9cc \ucc44\uc6cc\uc9c4 \uac12\uc774\uace0 \ub098\uc911\uc5d0 \uc774 \ud558\uc704\ube44\ud2b8\ub9cc \ub530\ub85c \ubf51\uc544\uc11c \uc0ac\uc6a9 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>This value contains data only in the lower bits, and these lower bits can be extracted and used separately later.<\/p>\n\n\n\n<p>D. cursorLocation\uacfc 0xFF\ub97c \ube44\ud2b8\uc5f0\uc0b0(AND \uc5f0\uc0b0)<br>Perform a bitwise AND operation on cursorLocation with 0xFF.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>0000 0001 0101 1010  (cursorLocation = 0x015A)\n&amp; 0000 0000 1111 1111  (0xFF)\n---------------------\n  0000 0000 0101 1010  \n\n\uacb0\uacfc: \uc55e\uc758 \uc0c1\uc704 8\ube44\ud2b8\ub294 0\uc73c\ub85c \ub0a0\uc544\uac00\uace0, \ub4a4\uc758 \ud558\uc704 8\ube44\ud2b8\uc778 0x5A\ub9cc \ub0a8\uc74c\nResult: The first upper 8 bits are discarded as 0, and only the latter lower 8 bits, 0x5A, remain.\n\n<strong>AND\uc5f0\uc0b0\uc73c\ub85c \uc0c1\uc704\ube44\ud2b8\ub294 0\uc73c\ub85c \ub9cc\ub4e4\uace0 \ud558\uc704\ube44\ud2b8\ub294 \uadf8\ub300\ub85c \uc720\uc9c0\ud569\ub2c8\ub2e4.\nUsing an AND operation, the upper bits are set to 0, while the lower bits are kept as they are.<\/strong><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>\n\ud83d\udca1 AND\uc5f0\uc0b0\uc758 \ubaa9\uc801 \/ Purpose of the AND operation\n\n1.\ud544\uc694\ud55c \ubd80\ubd84\ub9cc \ub0a8\uae30\uace0 \ub098\uba38\uc9c0\ub97c \uc9c0\uc6b0\ub294 '\ub9c8\uc2a4\ud06c \uc791\uc5c5'\n'Masking'\u2014a process of keeping only the necessary parts and erasing the rest\n\n2.\ud2b9\uc815 \ube44\ud2b8\uc758 \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\ub294 '\ucd94\ucd9c \uc791\uc5c5\nAn 'extraction operation' that checks the state of a specific bit<\/code><\/pre>\n\n\n\n<p>4)VGA \uc778\ub371\uc2a4(\uc8fc\uc18c) \ud3ec\ud2b8(0x3D4)\uc5d0 0x0E(=14)\uac12 \uc14b\ud305( 0x0E\ub294 \uc0c1\uc704\ube44\ud2b8 \uc14b\ud305\uc744 \uc758\ubbf8\ud568)<br>Set the value 0x0E (14) in the VGA index (address) port (0x3D4) \u2014 0x0E signifies the setting of the high-order bits.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> outb(0x3D4, 0x0E);<\/code><\/pre>\n\n\n\n<p>5)\uc704\uc5d0\uc11c \uc124\uc815\ub41c \uc8fc\uc18c\uc5d0 \uc2e4\uc81c\ub85c \uac12\uc744 \ud560\ub2f9<br>Actually assign a value to the address set above<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  outb(0x3D5, (unsigned char)((cursorLocation &gt;&gt; 8) &amp; 0xFF));<\/code><\/pre>\n\n\n\n<p>A.(cursorLocation &gt;&gt; 8) &amp; 0xFF)<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>1. \uc6b0\uce21\uc73c\ub85c 8\ube44\ud2b8 \uc774\ub3d9 \/ Shift 8 bits to the right\n\nAND operation with 0xFF\n0000 0001 0101 1010  (cursorLocation = 0x015A)\n--------------------- (>> 8\ube44\ud2b8 \uc6b0\uce21\uc73c\ub85c \uc774\ub3d9 \/ Shift 8 bits to the right)\n0000 0000 0000 0001  \n\uacb0\uacfc: \uc0c1\uc704 \ubc14\uc774\ud2b8\uc600\ub358 0x01\uc774 \uc544\ub798\ub85c \ub0b4\ub824\uc634\nResult: 0x01, which was the upper byte, has moved down.\n\n2.0xFF\uc640 AND\uc5f0\uc0b0 \/ AND operation with 0xFF\n\n  0000 0000 0000 0001  (8\ube44\ud2b8 \uc6b0\uce21\uc774\ub3d9\ud55c \uac12 \/ Value shifted 8 bits to the right)\n&amp; 0000 0000 1111 1111  (0xFF \ub9c8\uc2a4\ud06c \/ 0xFF mask)\n---------------------\n  0000 0000 0000 0001  \uacb0\uacfc\/result: 0x01\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>\ud83d\udca1 8\ube44\ud2b8 \uc6b0\uce21 \uc774\ub3d9\ub9cc\ud574\ub3c4 \uc0c1\uc704\ube44\ud2b8\ub294 0\ub9cc \uc874\uc7ac\ud558\uc9c0\ub9cc AND\uc5f0\uc0b0\uc744 \ud1b5\ud574\uc11c \n   \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \uc608\uc678\uc0ac\ud56d\uc758 \ubc1c\uc0dd\uc744 \ub9c9\uc544 \uc90d\ub2c8\ub2e4.\n\nEven though an 8-bit right shift results in zeros in the upper bits, an AND operation is used to prevent any potential exceptions that might otherwise occur.<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f kernel_main \ud568\uc218\/function<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>                 \/\/ \u2705 miniOS-Text-3\n                 \/\/ \ud654\uba74\uc744 \uaf49 \ucc44\uc6e0\ub294\uc9c0 \uac80\uc0ac (25\uc904 * 80\uae00\uc790 = 2000)\n                 \/\/ Check if the screen is completely filled (25 lines * 80 characters = 2000)\n                    if (cursor >= 2000) {\n                        \/\/ \uc2a4\ud06c\ub864 \ud6c4 \uac31\uc2e0\ub41c \ucee4\uc11c \uc704\uce58\ub97c \ub2e4\uc2dc \ubc1b\uc544\uc634\n                        \/\/ Retrieve the updated cursor position after scrolling\n                        cursor = scroll_screen(); \n                    }\n                    \n                    \/\/ \u2705 miniOS-Text-3\n                    \/\/ \ucee4\uc11c \uc88c\ud45c \uacc4\uc0b0\ud574\uc11c \ud558\ub4dc\uc6e8\uc5b4 \ucee4\uc11c \uc5c5\ub370\uc774\ud2b8 \n                    \/\/ Calculate cursor coordinates and update the hardware cursor\n                    \/\/ (x = cursor % 80, y = cursor \/ 80)\n                    update_cursor(cursor % 80, cursor \/ 80);<\/code><\/pre>\n\n\n\n<p>A.25 * 80 = 2000 , \uae00\uc790\uc785\ub825\uc774 \uc804\uccb4\ud654\uba74\uc744 \ucd08\uacfc\ud558\uba74 \uc804\uccb4 \ud55c\uc904 \ubc00\uc5b4\uc62c\ub9ac\uae30(scroll_screen())<br>25 * 80 = 2000; if text input exceeds the full screen, shift everything up by one line (scroll_screen()).<\/p>\n\n\n\n<p>B.\ucee4\uc11c\uc704\uce58\ub97c \uc5c5\ub370\uc774\ud2b8 \/ Update the cursor position<\/p>\n\n\n\n<p>a)cursor % 80\uc740 x\uc88c\ud45c\ub85c cursor\ub97c 80\uc73c\ub85c \ub098\ub208 \ub098\uba38\uc9c0 \uac12\uc73c\ub85c \uc67c\ucabd\uc73c\ub85c\ubd80\ud130 \uba87\ubc88\uc9f8 \uce78\uc778\uc9c0\ub97c \uacc4\uc0b0\ud569\ub2c8\ub2e4.<br><code>cursor % 80<\/code> calculates the x-coordinate\u2014specifically, the position from the left\u2014by taking the remainder of the <code>cursor<\/code> value when divided by 80.<\/p>\n\n\n\n<p>b)\ub098\uba38\uc9c0\uac00 5\ub77c\uba74 \uc67c\ucabd\uc73c\ub85c \ubd80\ud130 5\ubc88\uc9f8 \uce78\uc774 \ub429\ub2c8\ub2e4.<br>If the remainder is 5, it corresponds to the 5th space from the left.<\/p>\n\n\n\n<p>c)cursor \/ 80\uc740 y\uc88c\ud45c\ub85c cursor\uac00 160\uc778 \uacbd\uc6b0 80\uc73c\ub85c \ub098\ub204\uba74 2\uac00 \ub429\ub2c8\ub2e4.<br>Dividing the y-coordinate\u2014in this case, 160\u2014by 80 results in 2.<\/p>\n\n\n\n<p>d)\ubc30\uc5f4\uc740 0\ubc88 \ubd80\ud130 \uc2dc\uc791\ud558\ubbc0\ub85c 3\ubc88\uc9f8 \uc904\uc774\ub429\ub2c8\ub2e4.<br>Since arrays start from index 0, this corresponds to the third row.<\/p>\n\n\n\n<p>\ud83d\udcc1 \ud14c\uc2a4\ud2b8 \/ Test<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/miniOS-text-3-jpg.jpg\" alt=\"\" class=\"wp-image-12727\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/miniOS-text-3-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/miniOS-text-3-jpg-300x300.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/miniOS-text-3-jpg-150x150.jpg 150w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/miniOS-text-3-jpg-768x768.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/miniOS-text-3-jpg-400x400.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p>\uc2a4\ud06c\ub9b0\uc0f7 \/ ScreenShot<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\ub9c8\ud0dc\ubcf5\uc74c 21\uc7a5 22\uc808 \/ Matthew 21: 22<\/p>\n\n\n\n<p>&#8220;\ub108\ud76c\uac00 \uae30\ub3c4\ud560 \ub54c\uc5d0 \ubb34\uc5c7\uc774\ub4e0\uc9c0 \ubbff\uace0 \uad6c\ud558\ub294 \uac83\uc740 \ub2e4 \ubc1b\uc73c\ub9ac\ub77c \ud558\uc2dc\ub2c8\ub77c&#8221;<\/p>\n\n\n\n<p>&#8220;And everything you ask in prayer, believing, you will receive.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb miniOS-Text-3\uc5d0\uc11c\ub294 \ud654\uba74 \uc2a4\ud06c\ub864\uacfc \ud558\ub4dc\uc6e8\uc5b4 \ucee4\uc11c\uc81c\uc5b4 \uad6c\ud604\uc785\ub2c8\ub2e4.miniOS-Text-3 implements screen scrolling and hardware cursor control. \ud83d\udcc1 \ucf54\ub4dc \/ Code \u2714\ufe0f I\/O \ud3ec\ud2b8 \uc81c\uc5b4 \ud568\uc218 \/ I\/O port control functions 1)VGA\uadf8\ub798\ud53d,\ud0a4\ubcf4\ub4dc,\ub9c8\uc6b0\uc2a4,PC\uc2a4\ud53c\ucee4 \uc77c\ubd80\uae30\ub2a5 \uc81c\uc5b4\ub97c \uc704\ud574\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.It is used to control certain functions of the VGA graphics, keyboard, mouse, and PC speakers. \u2714\ufe0f \uc2a4\ud06c\ub864 \ud568\uc218 \/ Scroll function 1) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,26,1],"tags":[],"class_list":["post-12664","post","type-post","status-publish","format-standard","hentry","category-news","category-os","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/12664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=12664"}],"version-history":[{"count":60,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/12664\/revisions"}],"predecessor-version":[{"id":12729,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/12664\/revisions\/12729"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=12664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=12664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=12664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}