{"id":6143,"date":"2026-07-04T11:28:18","date_gmt":"2026-07-04T02:28:18","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=6143"},"modified":"2026-07-04T15:02:04","modified_gmt":"2026-07-04T06:02:04","slug":"os-minios-11","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/07\/04\/os-minios-11\/","title":{"rendered":"[OS]miniOS-11"},"content":{"rendered":"\n<p>\ud83d\udc49\ufe0f \uc18c\ubb38\uc790 \ucd94\uac00,\uc22b\uc790 \ubc0f \ud2b9\uc218\ubb38\uc790\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<br>Lowercase letters, numbers, and special characters have been added.<\/p>\n\n\n\n<p>\ud83d\udc49\ufe0f \ucf54\ub4dc \ub0b4\uc6a9\uc774 \ub9ce\uc544\uc11c \uc804\uccb4\ucf54\ub4dc\ub294 github\uc5d0 \uc788\ub294 \uc790\ub8cc\ub97c \ucc38\uc870\ud558\uc138\uc694<br>As the code is extensive, please refer to the materials on GitHub for the full code.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/gideonslife01\/minios\">https:\/\/github.com\/gideonslife01\/minios<\/a><\/p>\n\n\n\n<p>\ud83d\udc49\ufe0f \ud30c\uc77c \/ files<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>boot.asm   sector2.asm   kernel.c<\/code><\/pre>\n\n\n\n<p>\ud83d\udc49\ufe0f \ucf54\ub4dc\uc124\uba85 \/ Code Explanation<\/p>\n\n\n\n<p>\u2714\ufe0fboot.asm<\/p>\n\n\n\n<p>&#8212; boot.asm\uc5d0\uc11c \uac12\uc774 12\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<br>The value has been changed to 12 in boot.asm.<\/p>\n\n\n\n<p>\ud83d\udc49\ufe0f \ucf54\ub4dc\uc124\uba85 \/ Code Explanation<\/p>\n\n\n\n<p>\u2714\ufe0fboot.asm<\/p>\n\n\n\n<p>&#8212; boot.asm\uc5d0\uc11c \uac12\uc774 12\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<br>The value has been changed to 12 in boot.asm.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    mov al, 12          ; \u2705 1\uc5d0\uc11c 12\uc73c\ub85c \uc218\uc815 (\ub109\ub109\ud558\uac8c \uc77d\uc5b4\uc634)\n                        ; Adjusted from 1 to 12 (read with a generous margin<\/code><\/pre>\n\n\n\n<p>1)ls -ls\uba85\ub839\uc5b4\ub85c sector2.bin\ud30c\uc77c \uc6a9\ub7c9\uc744 \ud655\uc778\ud558\uba74 \ud604\uc7ac 5.4Kbyte\uc785\ub2c8\ub2e4. <br>Checking the size of the <code>sector2.bin<\/code> file with the <code>ls -ls<\/code> command shows that it is currently 5.4 KB.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls -lh sector2.bin\n-rwxrwxr-x 1 daekyeongkim daekyeongkim <strong>5.4K<\/strong> Sep  11 11:11 sector2.bin\n<\/code><\/pre>\n\n\n\n<p>2) 1\uc139\ud130\ub294 512\ubc14\uc774\ud2b8\uc774\uace0 \uc0dd\uc131\ub41c sector2.bin \ud30c\uc77c\uc758 \uc6a9\ub7c9\uc740 5.4Kbyte\uc785\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc544\ub798\ucc98\ub7fc5.4Kbyte\ub97c 512byte\ub85c \ub098\ub204\uba74 \uc77d\uc5b4\uc57c \ud560 \uac12\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>A single sector is 512 bytes, and the generated <code>sector2.bin<\/code> file is 5.4 KB in size. Therefore, by dividing 5.4 KB by 512 bytes as shown below, you can determine the value that needs to be read.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> 5400 % 512 = 10.546875<\/code><\/pre>\n\n\n\n<p>3)\uacb0\uad6d 11\uc139\ud130\ub294 \uc77d\uc5b4\uc57c \ub370\uc774\ud130\uac00 \uc798\ub9ac\uc9c0 \uc54a\uc9c0\ub9cc \ub109\ub109\ud558\uac8c 12\uc139\ud130\ub85c \uc124\uc815\ud569\ub2c8\ub2e4.<br>Ultimately, reading 11 sectors prevents data truncation, but I am setting it to 12 sectors to be safe.<\/p>\n\n\n\n<p>4)\uc139\ud130\ub97c \ucda9\ubd84\ud788 \uc77d\uc9c0 \uc54a\uc73c\uba74 \ud504\ub85c\uadf8\ub7a8 \uc2e4\ud589\uc2dc \ud654\uba74\uc5d0 \uc544\ubb34\uac83\ub3c4 \ub098\ud0c0\ub098\uc9c0 \uc54a\uac70\ub098 \uc624\ub958\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<br>If the sectors are not read sufficiently, nothing will appear on the screen or an error will occur when the program runs.<\/p>\n\n\n\n<p>\u2714\ufe0f kernel.c<\/p>\n\n\n\n<p>&#8212; \uae00\uc790 \ucd9c\ub825\ud568\uc218 \/ Character output function<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ------------------------------------------------------------------------\n\/\/ 2. \uae00\uc790 \ucd9c\ub825 \ud568\uc218 (\ud3f0\ud2b8 \ub370\uc774\ud130\ub97c \ud568\uc218 \ub0b4\ubd80\ub85c \uc774\ub3d9\ud558\uc5ec \ub9c1\ud0b9 \uc624\ub958 \ud574\uacb0)\n\/\/ Character output function (resolved linking errors by moving font data inside the function)\n\/\/ ------------------------------------------------------------------------\nvoid draw_char(int start_x, int start_y, char c, byte color) {\n\n    \/\/ \ubd80\ud638 \uc5c6\ub294 1\ubc14\uc774\ud2b8 \uc815\uc218\ub85c \ud615\ubcc0\ud658\ud558\uc5ec \uc548\uc804\ud558\uac8c \ubc94\uc704\ub97c \uac80\uc0ac\ud569\ub2c8\ub2e4.\n    \/\/ Safely check the range by casting to an unsigned 1-byte integer.\n    unsigned char ascii_code = (unsigned char)c;\n    if (ascii_code &gt;= 128) return;\n\n    \/\/ 128(0~127)\uac1c \ubb38\uc790 \/ 128 (0\u2013127) characters\n    static const byte font_8x8&#91;128]&#91;8] = {\n        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, \/\/ 0: NULL\n        {0x7E,0x81,0xA5,0x81,0xBD,0x99,0x81,0x7E}, \/\/ 1: \u263a\n        {0x7E,0xFF,0xDB,0xFF,0xC3,0xE7,0xFF,0x7E}, \/\/ 2: \u263b\n        {0x6C,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00}, \/\/ 3: \u2665\n\n                       ... \uc911\ub7b5\/&#91;Omitted] ...\n\n        {0x08,0x08,0x08,0x00,0x08,0x08,0x08,0x00}, \/\/ 124: |\n        {0x30,0x08,0x08,0x04,0x08,0x08,0x30,0x00}, \/\/ 125: }\n        {0x00,0x00,0x32,0x4C,0x00,0x00,0x00,0x00}, \/\/ 126: ~\n        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}  \/\/ 127: DEL\n    };\n\n    \/\/ \uc815\ubc29\ud5a5 \ub2e4\uc774\ub809\ud2b8 \ub9e4\ud551: \ud615\ubcc0\ud658\ub41c \uac12\uc774 \uace7 \uc778\ub371\uc2a4 \ubc88\ud638\uac00 \ub429\ub2c8\ub2e4.\n    \/\/ Forward direct mapping: The converted value becomes the index number.\n    int font_index = (int)ascii_code;\n\n    for (int y = 0; y &lt; 8; y++) {\n        byte row_data = font_8x8&#91;font_index]&#91;y];\n\n        for (int x = 0; x &lt; 8; x++) {\n            if ((row_data &amp; (0x80 &gt;&gt; x)) != 0) {\n                draw_pixel(start_x + x, start_y + y, color);\n            }\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>1) \uc774 \ud568\uc218\uc758 \ubc30\uc5f4 \ubc88\ud638\uc640 \uc544\uc2a4\ud0a4 \ucf54\ub4dc \uac12\uc740 \uc77c\uce58\ud569\ub2c8\ub2e4.<br>The array index and the ASCII code value in this function correspond to each other.<\/p>\n\n\n\n<p>2) \uc18c\ubb38\uc790 &#8216;u&#8217;\uc758 \uc544\uc2a4\ud0a4 \ucf54\ub4dc \uac12\uc740 117\ubc88\uc774\uace0 \ubc30\uc5f4 \ubc88\ud638\ub3c4 117\ubc88 \uc785\ub2c8\ub2e4. <br>The ASCII code value for the lowercase letter &#8216;u&#8217; is 117, and its array index is also 117.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> {0x00,0x00,0x42,0x42,0x42,0x46,0x3A,0x00}, \/\/ 117: u<\/code><\/pre>\n\n\n\n<p>4)\ud654\uba74\uc5d0 \uc18c\ubb38\uc790&#8217;u&#8217;\ub97c \ucd9c\ub825\ud560 \uacbd\uc6b0 font_indexr\uac00 117\ubc88\uc774 \ub418\uace0 117\ubc88 \ubc30\uc5f4\uc5d0 \ud574\ub2f9\ud558\ub294 16\uc9c4\uc218 \uac12\uc744 row_data\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.<br>When the lowercase letter &#8216;u&#8217; is displayed on the screen, <code>font_indexr<\/code> becomes 117, and the hexadecimal value corresponding to index 117 of the array is stored in <code>row_data<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>byte row_data = font_8x8&#91;font_index]&#91;y];<\/code><\/pre>\n\n\n\n<p>5)\ubc18\ubcf5\ubb38\uc744 \uc2e4\ud589\ud574\uc11c start_x,start_y\uac12 \uc88c\ud45c\ub97c \uae30\uc900\uc73c\ub85c 1\ud53d\uc140\uc529 \uc810\uc744\ucc0d\uc2b5\ub2c8\ub2e4. <br>Execute a loop to plot points one pixel at a time, based on the <code>start_x<\/code> and <code>start_y<\/code> coordinates.<\/p>\n\n\n\n<p>6)0x80 &gt;&gt; x \uc774 \uac12\uacfc \uc704\uc5d0\uc11c \uc544\ub798\ub85c 1\ud53d\uc140\uc529 \ud655\uc778\ud558\uace0 \uc88c\uc5d0\uc11c \uc6b0\ub85c 1\ud53d\uc140\uc529 \ubc30\uc5f4\uc758 \uac12\uacfc \ud655\uc778\ud574\uc11c \uc774\uc9c4\uc218\ub85c \ubcc0\ud658\uc2dc \ub458\ub2e4 1\uc778 \uc704\uce58\uc5d0 \uc810\ub4e4 \ucc0d\uc2b5\ub2c8\ub2e4. <br>Using the value <code>0x80 &gt;&gt; x<\/code>, we check the array values \u200b\u200bpixel by pixel moving from top to bottom and left to right and plot a point wherever both values \u200b\u200bare 1 when converted to binary.<\/p>\n\n\n\n<p>3) u\uc758 \uc544\uc2a4\ud0a4 \ucf54\ub4dc \uac12\uc740 117\uc785\ub2c8\ub2e4. kernal_main\ud568\uc218 \ub0b4\uc5d0\uc11c draw_char\ud568\uc218\uc5d0 \uc544\uc2a4\ud0a4 \ucf54\ub4dc \uac12\uc744 \uc785\ub825\ud558\uba74 \ud654\uba74\uc5d0 u\uac00 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4<br>The ASCII code value for &#8216;u&#8217; is 117. You can verify that &#8216;u&#8217; is displayed on the screen by passing this ASCII code value to the <code>draw_char<\/code> function within the <code>kernel_main<\/code> function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>draw_char(20,20,117,15);<\/code><\/pre>\n\n\n\n<p>&#8212; \ubb38\uc790\uc5f4 \ucd9c\ub825\ud568\uc218 \/ String output function<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ------------------------------------------------------------------------\n\/\/ 3. \ubb38\uc790\uc5f4 \ucd9c\ub825 \ud568\uc218 (\uc904\ubc14\uafc8 \ubc0f \uc790\ub3d9 \uac1c\ud589 \ud0d1\uc7ac)\n\/\/    String output function (includes line breaks and automatic newline insertion)\n\/\/ ------------------------------------------------------------------------\nvoid draw_string(int start_x, int start_y, const char *str, byte color) {\n\n    \/\/draw_char(0,0,'X',15);\n    int current_x = start_x;\n    int current_y = start_y;\n    \n    for (int i = 0; str&#91;i] != '\\0'; i++) {\n        \n        \/\/ 1. \\n \uc904\ubc14\uafc8 \ucc98\ub9ac\n        \/\/ Line break handling\n        if (str&#91;i] == '\\n') {\n            current_x = start_x;\n            current_y += 10;\n            continue;\n        }\n\n        \/\/ 2. \ud654\uba74 \ub05d \uc790\ub3d9 \uac1c\ud589\n        \/\/ Automatic line break at screen edge\n        if (current_x + 8 &gt; 320) {\n            current_x = start_x;\n            current_y += 10;\n        }\n\n        \/\/ 3. \uc9c4\uc9dc \uc2a4\ud398\uc774\uc2a4\ubc14 \uacf5\ubc31(' ')\ub9cc \uac78\ub7ec\ub0c5\ub2c8\ub2e4.\n        \/\/ It filters out only the actual space character (' ').\n        if (str&#91;i] == ' ') { \n            current_x += 8;\n            continue;\n        }\n\n        \/\/ 4. \uae00\uc790 \uadf8\ub9ac\uae30 \n        \/\/ Drawing Characters\n        draw_char(current_x, current_y, str&#91;i], color);\n        current_x += 8;\n    }\n}<\/code><\/pre>\n\n\n\n<p>1)\ud604\uc7ac \ubc30\uc5f4\uc758 \ubb38\uc790\uac00 0\uc544\ub2c8\uba74 \ubc18\ubcf5\uc2e4\ud589\ud569\ub2c8\ub2e4.<br>The loop continues to execute as long as the character in the current array is not 0.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    for (int i = 0; str&#91;i] != '\\0'; i++) { ... }<\/code><\/pre>\n\n\n\n<p>2) \ubb38\uc790\uc5d0\uc11c \\n\uc774 \uc788\uc73c\uba74 \ud604\uc7ac \uc704\uce58\uc5d0\uc11c \uc544\ub798\ub85c \uc904\ubc14\uafc8\ud569\ub2c8\ub2e4.(10\ud53d\uc140 \uc774\ub3d9\ud569\ub2c8\ub2e4). <br>If \\n appears in the text, a line break occurs downward from the current position (moving 10 pixels).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        \/\/ 1. \\n \uc904\ubc14\uafc8 \ucc98\ub9ac\n        \/\/ Line break handling\n        if (str&#91;i] == '\\n') {\n            current_x = start_x;\n            current_y += 10;\n            continue;\n        }<\/code><\/pre>\n\n\n\n<p>3)\uc9c0\uae08\ud604\uc7ac \ud654\uba74\uc758 \uac00\ub85c \ud06c\uae30\uac00 320\ud53d\uc140\uc785\ub2c8\ub2e4.\uae00\uc790\uc218\uac00 320\ud53d\uc140 \ucd08\uacfc\ud558\uba74 \uc904\ubc14\uafc8 \ucc98\ub9ac(current_y += 10;)\ud569\ub2c8\ub2e4.<br>The current screen width is 320 pixels. If the text exceeds 320 pixels, a line break is applied (current_y += 10;).<\/p>\n\n\n\n<p>4) \ubb38\uc790\ud558\ub098\uc758 \ud06c\uae30\uac00 \uac00\ub85c 8\ud53d\uc140 \uc138\ub85c8\ud53d\uc140\uc774\uae30 \ub54c\ubb38\uc5d0 current_x + 8 &gt; 320 \uc774\ub807\uac8c \ud655\uc778\ud569\ub2c8\ub2e4.<br>Since the size of a single character is 8 pixels wide by 8 pixels high, we check using the condition <code>current_x + 8 &gt; 320<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        \/\/ 2. \ud654\uba74 \ub05d \uc790\ub3d9 \uac1c\ud589\n        \/\/ Automatic line break at screen edge\n        if (current_x + 8 &gt; 320) {\n            current_x = start_x;\n            current_y += 10;\n        }<\/code><\/pre>\n\n\n\n<p>5) \ud30c\ub77c\uba54\ud130\ub85c \uc785\ub825\ub41c \ubb38\uc790\uc5d0 \uacf5\ubc31\uc774 \uc788\ub294 \uacbd\uc6b0 \uc624\ub978\ucabd\uc73c\ub85c \ubb38\uc790 \ud558\ub098\ub9cc\ud07c(8\ud53d\uc140) \uc774\ub3d9\ud569\ub2c8\ub2e4.<br>If the input character contains a space, it shifts to the right by the width of one character (8 pixels).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        \/\/ 3. \uc9c4\uc9dc \uc2a4\ud398\uc774\uc2a4\ubc14 \uacf5\ubc31(' ')\ub9cc \uac78\ub7ec\ub0c5\ub2c8\ub2e4.\n        \/\/ It filters out only the actual space character (' ').\n        if (str&#91;i] == ' ') { \n            current_x += 8;\n            continue;\n        }<\/code><\/pre>\n\n\n\n<p>6)\uae00\uc790\ub97c \uadf8\ub9ac\uace0 \uc624\ub978\ucabd\uc73c\ub85c 8\ud53d\uc140 \uc774\ub3d9\ud569\ub2c8\ub2e4.<br>Draw the text and move it 8 pixels to the right.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        \/\/ 4. \uae00\uc790 \uadf8\ub9ac\uae30 \n        \/\/ Drawing Characters\n        draw_char(current_x, current_y, str&#91;i], color);\n        current_x += 8;<\/code><\/pre>\n\n\n\n<p>\ud83d\udc49\ufe0f \ucef4\ud30c\uc77c \/ Compiling<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. \ubd80\ud2b8\uc139\ud130 \ubc0f \ubcf4\ud638\ubaa8\ub4dc \uc9c4\uc785\ubd80 \ucef4\ud30c\uc77c\n# Compiling the Boot Sector and Protected Mode Entry Code\nnasm -f bin boot.asm -o boot.bin\nnasm -f elf32 sector2.asm -o sector2.o\n\n# 2. \uc0c8\ub85c \uc218\uc815\ud55c kernel.c \ucef4\ud30c\uc77c\n# Compiling the newly modified kernel.c\ngcc -m32 -c kernel.c -o kernel.o -nostdlib -fno-builtin -fno-stack-protector -fno-pic -fno-PIE\n\n# 3. \ud558\ub098\uc758 \ubc14\uc774\ub108\ub9ac\ub85c \uacb0\ud569\n# Combining into a single binary\nld -m elf_i386 -Ttext 0x8000 -e start -o sector2.bin sector2.o kernel.o --oformat binary\n\n# 4. \uc774\ubbf8\uc9c0 \uc0dd\uc131 \ubc0f \uc2e4\ud589\n# Image Creation and Execution\ncat boot.bin sector2.bin &gt; temp.bin\ndd if=temp.bin of=os.img bs=512 count=2880 conv=sync\nqemu-system-x86_64 -drive file=os.img,format=raw,if=floppy -boot a<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ufe0f \uc18c\ubb38\uc790 \ucd94\uac00,\uc22b\uc790 \ubc0f \ud2b9\uc218\ubb38\uc790\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.Lowercase letters, numbers, and special characters have been added. \ud83d\udc49\ufe0f \ucf54\ub4dc \ub0b4\uc6a9\uc774 \ub9ce\uc544\uc11c \uc804\uccb4\ucf54\ub4dc\ub294 github\uc5d0 \uc788\ub294 \uc790\ub8cc\ub97c \ucc38\uc870\ud558\uc138\uc694As the code is extensive, please refer to the materials on GitHub for the full code. https:\/\/github.com\/gideonslife01\/minios \ud83d\udc49\ufe0f \ud30c\uc77c \/ files \ud83d\udc49\ufe0f \ucf54\ub4dc\uc124\uba85 \/ Code Explanation \u2714\ufe0fboot.asm &#8212; boot.asm\uc5d0\uc11c \uac12\uc774 12\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.The value [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,1],"tags":[],"class_list":["post-6143","post","type-post","status-publish","format-standard","hentry","category-os","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/6143","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=6143"}],"version-history":[{"count":2,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/6143\/revisions"}],"predecessor-version":[{"id":6146,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/6143\/revisions\/6146"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=6143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=6143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=6143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}