From eaa8b0914df5708dcded6397ae450f3bdcac10ef Mon Sep 17 00:00:00 2001 From: kieron Date: Tue, 15 Sep 2015 21:13:23 +0000 Subject: [PATCH] Initial Commit. git-svn-id: https://spexeah.com:8443/svn/Asuro@1 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Compile.bat | 52 ++++++++++++++++ bin/kernel.obj | Bin 0 -> 8704 bytes lib/console.o | Bin 0 -> 2052 bytes lib/console.ppu | Bin 0 -> 2980 bytes lib/kernel.o | Bin 0 -> 2120 bytes lib/kernel.ppu | Bin 0 -> 1410 bytes lib/libpconsole.a | Bin 0 -> 16190 bytes lib/libpkernel.a | Bin 0 -> 17428 bytes lib/libpmultiboot.a | Bin 0 -> 21818 bytes lib/libpsystem.a | Bin 0 -> 91378 bytes lib/multiboot.o | Bin 0 -> 2336 bytes lib/multiboot.ppu | Bin 0 -> 3007 bytes lib/stub.o | Bin 0 -> 912 bytes lib/system.o | Bin 0 -> 6368 bytes lib/system.ppu | Bin 0 -> 7993 bytes linker.script | 31 ++++++++++ src/console.pas | 147 ++++++++++++++++++++++++++++++++++++++++++++ src/kernel.pas | 70 +++++++++++++++++++++ src/multiboot.pas | 55 +++++++++++++++++ src/stub.asm | 79 ++++++++++++++++++++++++ src/system.pas | 15 +++++ 21 files changed, 449 insertions(+) create mode 100644 Compile.bat create mode 100644 bin/kernel.obj create mode 100644 lib/console.o create mode 100644 lib/console.ppu create mode 100644 lib/kernel.o create mode 100644 lib/kernel.ppu create mode 100644 lib/libpconsole.a create mode 100644 lib/libpkernel.a create mode 100644 lib/libpmultiboot.a create mode 100644 lib/libpsystem.a create mode 100644 lib/multiboot.o create mode 100644 lib/multiboot.ppu create mode 100644 lib/stub.o create mode 100644 lib/system.o create mode 100644 lib/system.ppu create mode 100644 linker.script create mode 100644 src/console.pas create mode 100644 src/kernel.pas create mode 100644 src/multiboot.pas create mode 100644 src/stub.asm create mode 100644 src/system.pas diff --git a/Compile.bat b/Compile.bat new file mode 100644 index 00000000..9530db2b --- /dev/null +++ b/Compile.bat @@ -0,0 +1,52 @@ +@echo off +set /a ERRCOUNT=0 +echo ======================= +echo == ASURO COMPILATION == +echo ======================= +echo. +echo Compiling ASM Stub... +echo. +nasm -f elf src\stub.asm -o lib\stub.o +if %ERRORLEVEL% GEQ 1 ( + echo Failed to compile stub! + set /a ERRCOUNT=%ERRCOUNT%+1 +) ELSE ( + echo Success. +) +echo. +echo ======================= +echo. +echo Compiling FPC Sources... +echo. +fpc -Aelf -n -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -Rintel -Tlinux -FElib\ src\kernel.pas +if %ERRORLEVEL% GEQ 1 ( + echo Failed to compile FPC Sources! + set /a ERRCOUNT=%ERRCOUNT%+1 +) ELSE ( + echo Success. +) +echo. +echo ======================= +echo. +echo Linking... +echo. +ld -A elf32-i386 --gc-sections -s -Tlinker.script -o bin\kernel.obj lib\stub.o lib\kernel.o lib\multiboot.o lib\system.o lib\console.o +if %ERRORLEVEL% GEQ 1 ( + echo Failed linking! + set /a ERRCOUNT=%ERRCOUNT%+1 +) ELSE ( + echo Success. +) +echo. +echo ======================= +echo. +if %ERRCOUNT% GEQ 1 ( + echo %ERRCOUNT% Errors Occurred, please review. +) ELSE ( + echo No errors. +) +echo. +echo ======================= +echo. +echo Press any key to exit... +pause > nul \ No newline at end of file diff --git a/bin/kernel.obj b/bin/kernel.obj new file mode 100644 index 0000000000000000000000000000000000000000..25ce963a703e6110a9a663ecec268cc6327a6031 GIT binary patch literal 8704 zcmeHMZ)g)|7=M#qnroWWRHJ0t;R%OqOpDu`j4>g$RvcEFt#!hXrI+N=h9!65a;X;F zEJVRG6#8-dwE1mcHWd62R5oi%{WBd_{h;oP$b@W_u@BNp9cIt--X*=HSIhpu_TirP z?s=a-@AK#P-k;>n-jBve10jTgqg*DW2plOy&o4fWfVpM;xfXJ^>Bfelqx;5&zQJUc z%P8`IBBZ&PAW5>yMMX}@NnBFmcJ}mgX*n*o`+OeW2p#Ssq}zcNEYJh8qM_O03=%)+ z@CXs&B{!iuIQ+;#fqJK2w*!V)Kc#-KgZ{veg!V-Ur~BdroC9PqUHFgA?W%ZKtrmlQ zfdF-zi6i0u_PC%5s6;#Vj(jC57AQo*7u%!REY*bI%ppdLX@vA&tk*hEf3ptJf7bKC z&lgC)pM-l$EXeau5@YzcUwc$~3UZP0`$_3rfcmm)>slSbvg>Ua6}r6JAM;G#F|7wb!FYC@(zCGc9om&I&ZF1dGmQo+yo@nky{G+997rS*b2HlA@%hH_(t5`w zji#U8j1Gl1K0nD!jGo;HbFn@a>eE!7`KL9W$9OZZj1G~)TUg}DK=4GMMZ4Ca8Rbtg z9yb-W`yJYCFdw^>yYu(EC_v5mNw(67(NO+zP&>$bp&`F^gb$3WeDhQzIezg|R-2gn z>5OBB(I(CiZFZk__Z$}dy$4QnbNNeKPOQ=H7jIm@etquY_^%Dx?c=v{_m5pwnSE1@ zo3-Cdx1X2G1&9o3{RN1epA1ewuldJ;YQAy(Vi*feG0c|yQ;#w`dJxh#5b)chU7`8D zqxohr-zx2zDc>~a(;k#QG3Cim1}3mb6X|!IeYO#>5wH=k5wH=k5wH=k5wH=k5wH>X z_YuIa9=jA#%m~?-km90(B1UCNdEW|~HlSDC2r;-jDgo_R@KMOJuvbPc$HjEOok`~mYEWHC;8rIY; zAA)pgF)b^@9Jie#dpef%-JKj5TyO?o>yTWZtO63In0p~+4Xq1{sYE0z#;~}^pol$3 zR3VxYBXmz^8M|-o($n>w6+)Kt!Tl~4zJ((pugJJ}gR&P5t>NlIMG#J`&O+z&*Sl@S z*_5np_$7C_>}bdOkOvGN1pYbfu(TQSCWCJQ4%8He?ZKRmqG{}7E9we5fKQFC(me*j zd=qBW?uua}!VJEUw< zpKcxpJ(yqD*NlDprDP0#u+U8;SSPzZJsD9ljF7Kh_Ac}d*7zE~4kfA8t5rSI*b9xN zL~tgxo+NQ6Va(&E&Z>bikJ-+gqKHy#m;wKVF>#0Gq@;=p zCN__Kd<+&PlBrnh09Wf{rSt3(lu8Qo*u^K3*sj5w-5&}HewKhTYQ~$+yScRY{0<4Js^N$K% zcw<`GFe2J~Eqq#32j#f2Fqj3&N{@FsR*!_7cErX6C7zUo6n*?)NVvZj>xe6ZYYXdR ja2myQ8fnI;@DB$EN57uO literal 0 HcmV?d00001 diff --git a/lib/console.o b/lib/console.o new file mode 100644 index 0000000000000000000000000000000000000000..696fc28063889e4d384ad1c1aa200115a27b26c4 GIT binary patch literal 2052 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 XT8!p}W-gF< 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 literal 0 HcmV?d00001 diff --git a/lib/libpkernel.a b/lib/libpkernel.a new file mode 100644 index 0000000000000000000000000000000000000000..9d3b3bf1f9b9e54c0d9ac1de9a67517d65cf2590 GIT binary patch literal 17428 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%0DSCsoCzLqin zSxUP%*Y#Pjuj;{g)t;^4tK_ruuWseqK+}L3e@g&d>qh?h+kkZnV{PdGIYvv zCg@B#))jL%0Ft|n2i11~50axYpTmP^SMU@@@K4cf4hQ;=6im?3``&D3F#e1S@QP7w zMyKZ3@ixj)ed1>@yd@h+*qj)fEP5fCzrLaC#@ICZt8n~kqrJAV-PlyKopI)x{%65B zn-a2w#YeF|-S}%}dTF*=o1S;n#kVpJMRgR|!y^erL|rGiFpRaL?L*NhX4p^{YbqDX z*PUbcc33Hd-#Y zWCT-6mbfBn9h0xhDHjI?lH0>0i71E}SkP$kq8wtuTTYRLh4BgdReh&4f@66h z)MUZPkdm{&1Jak1+Cl>3KgV8D+tES2CWR^W8GLZB95s^_NCn2S*~`b3XZG@@T%2Z; z+}n60_44nd3@?bm(^zxhL(H==2Uy9dEDFpT!A#buoxk5{cBcWuS9W({c&&Nm#`V=} z?Z#FUhIemmbsASN?zFvlozJ#go#yb_+J!Ieb{bb-_L|?~(`j~Unr-L5cbe@qTjA22 b2%W;zxADkepKa$Icbe@q8}%0;^P2ttzp$BX literal 0 HcmV?d00001 diff --git a/lib/multiboot.o b/lib/multiboot.o new file mode 100644 index 0000000000000000000000000000000000000000..6134b201460e0b9afe8609f4db46d2bcabdb63f9 GIT binary patch literal 2336 zcma)7O=uHA6rPxB+t_GZMI&w5qxuHS3kOE;6$c3}A4_ulv3o0&{zA7*p2u~t?VRuGCj`CGeMmh7SF5HPGQ6;>py`>BHP-H%%Yw z1cVQ;V~B9XsjXMTm2$lv>Xp^yI<2mUFF9<=TDzwby<-UqMMlr=h|6w{vi3ORNyhVx zms&XJ)apy?ty7HH$pLXoJ*=z4C;hpc65eqdNOEdHt=`zsHGhrH!r;lFXjs+?S(pES zG-BMLU)TPPG|=eX>r=n~MiremQ{krWi-y7D2A6fT+;O$vhHhgDQ=n z-#H-JrBbXHL#{q0c_&E4C@D#`Az<> zRr{}Et@%ym&AHih=4RT>*(Fcs=X0JtT`YRaF4z&O9lScal%4VHVnNR#BkO7}J)O&H zPr06FZ)g5jYE<2O(cP4#g_4)e>zTBhu?y*3*YevN({^FD*kjRM0%NINabwqAaUe9f4^ z-KF>_V~TN%ae{G@@hamq;UT4NFn1a0|3&p)F}`J_{~7rc_`huRV@xrQF-|Z}GGdu~ z8YsW@R>})DWn{^hfxgzHm6wrpQ|Ki_bV)eq>ma&E5e;cYNAC#LlVR%UZKQD;Gg^Xl zn@FVf($|u7RFmFQ=?PO!A#g2{D7`Kky89?pq68kIy85Z-zB=kxje6QBQ|Lw?Q{ zQ%^q|eV?as>LlH~045|)~WH1`xmZpGZK$H;P zCLDe#f=7yq!r5t-7xAH9Vjf?*xwM>{|Bz+siDCXIsaOPh>BUI3u?_>54iN;~ZY(3x zOC8Pfut~*@g8-Sn-z*lB-oVio6Rc}26Ve+!n&m++nj?v(kd&}Bg9qOo8Hosw3Xcho z3r~=0tsP;f5dEyE^zl8C+_}Z0N~9eO_j9AO7;DlCENFx0SfWWBYo}2{H|&?zz0hB4 z1l5YS=@*KA-D?z9OTO0tilRiwGa(uqWj4*m`Qx~0=E<^O_Da>aecpb*#ojbnL`h?DvVz^J)qowa*j0l?s1P>C z?P8un5%P-u?O=`LKWNc!8Z>;&3K~g}SSuGxL4}b+7AaZ6I_S>`vWIzlxmpapwdz)- zp=j8G@3IPnDy1Dp*-HvopY4dn-UELUHDto}X%d*jY@%a9J$5cd+m`jw)htVKRBC~QFAt6`R+l|q>h zb^k)No{A$H{{1>A`7=DFJ6JV3L@_(Su1YHMb zceTFl;lL!HP<60fUK#BORR_!I4IO96)RPJ8<)1v*q;o7dE-FlVwGjFq4jp%k9kY0@ zy+Vi+e0JOu%sX57&0vGG>bx~b8UsX3Ujum4uG3G?e$j%D88Bj|6BZRAWx#ssDT^L4 zXxuPeIZm?_D>t@ld}x;}E^BZ|evq>ZPEwZXA=Vl|e-xvwKM;P&Ns2Sfh~GPY_4Ut& z)!?Sk08XNNHn(^qH|H%aPhXo|nt46P{~AfLmWPGZOAKPV%#8+6L5Js8=9Xu!E-Wm2 zU~>!8FXtA$`RVI3*A%rG+snKvIp2JRNUKTMW)S$1{2^}>rOwF0FS4yTm_hfj*Ni&G z#UjTRh#+N9i+l11>N@p~3UHQz2smX@%n#Oo%D94im2tQql)uM1LvI9~?CewM0|?#q z5!`$M2M0$3PAXi_N$w>PoIG&yo$ot8xqsKxtt*N`q$y;E6pRpEB=$1gCRND)$8aY4 zoM=7*vQ`>Y6LA%A9$fxqf=xQOuuXxBfU*W9tlJei1Z+cF1y{2u|4bqA4&f~L5_kn1 z|GfcTo_7mPFQ7@2^R_@(kRsp&ny??|U=1R!Uz$3-U&py$e(?H;8)=7c-<aXu;6 zf#V)>OL;E~WJk&waNLv3-#}2DTgvZ%<6dR{0Ruf}1lIQ~!wgljT;h0+PvCgBXf<3Z z8y_FCoy$Z#FIRhFse2M3X7v`eBL8105*hEd(2 zt`(LthGhjb{3FqzhD8IIV>@Q4UdVOVu*+kFY&NLb47(m_(x64%DC`)(ogO7amc--a Qm!7>r1r8AJMTH0X0|}9W2><{9 literal 0 HcmV?d00001 diff --git a/lib/system.o b/lib/system.o new file mode 100644 index 0000000000000000000000000000000000000000..736030d711bd8e359cd77981dc17eb46497e7ee9 GIT binary patch literal 6368 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 literal 0 HcmV?d00001 diff --git a/linker.script b/linker.script new file mode 100644 index 00000000..e0452f1b --- /dev/null +++ b/linker.script @@ -0,0 +1,31 @@ +ENTRY(kstart) +SECTIONS +{ + .text 0x100000 : + { + text = .; _text = .; __text = .; + *(.text) + . = ALIGN(4096); + } + .data : + { + data = .; _data = .; __data = .; + *(.data) + kimage_text = .; + LONG(text); + kimage_data = .; + LONG(data); + kimage_bss = .; + LONG(bss); + kimage_end = .; + LONG(end); + . = ALIGN(4096); + } + .bss : + { + bss = .; _bss = .; __bss = .; + *(.bss) + . = ALIGN(4096); + } + end = .; _end = .; __end = .; +} \ No newline at end of file diff --git a/src/console.pas b/src/console.pas new file mode 100644 index 00000000..184ec35c --- /dev/null +++ b/src/console.pas @@ -0,0 +1,147 @@ +{ +///////////////////////////////////////////////////////// +// // +// Freepascal barebone OS // +// console.pas // +// // +///////////////////////////////////////////////////////// +// +// By: De Deyn Kim +// License: Public domain +// +} + +unit console; + +interface + +var + xpos: Integer = 0; + ypos: Integer = 0; + +procedure kclearscreen(); +procedure kwritechr(c: Char); +procedure kwritestr(s: PChar); +procedure kwriteint(i: Integer); +procedure kwritedword(i: DWORD); + +implementation + +var + vidmem: PChar = PChar($b8000); + +procedure kclearscreen(); [public, alias: 'kclearscreen']; +var + i: Integer; +begin + for i := 0 to 3999 do + vidmem[i] := #0; +end; + +procedure kwritechr(c: Char); [public, alias: 'kwritechr']; +var + offset: Integer; +begin + if (ypos > 24) then + ypos := 0; + + if (xpos > 79) then + xpos := 0; + + offset := (xpos shl 1) + (ypos * 160); + vidmem[offset] := c; + offset += 1; + vidmem[offset] := #7; + offset += 1; + + xpos := (offset mod 160); + ypos := (offset - xpos) div 160; + xpos := xpos shr 1; +end; + +procedure kwritestr(s: PChar); [public, alias: 'kwritestr']; +var + offset, i: Integer; +begin + if (ypos > 24) then + ypos := 0; + + if (xpos > 79) then + xpos := 0; + + offset := (xpos shl 1) + (ypos * 160); + i := 0; + + while (s[i] <> Char($0)) do + begin + vidmem[offset] := s[i]; + offset += 1; + vidmem[offset] := #7; + offset += 1; + i += 1; + end; + + xpos := (offset mod 160); + ypos := (offset - xpos) div 160; + xpos := xpos shr 1; +end; + +procedure kwriteint(i: Integer); [public, alias: 'kwriteint']; +var + buffer: array [0..11] of Char; + str: PChar; + digit: DWORD; + minus: Boolean; +begin + str := @buffer[11]; + str^ := #0; + + if (i < 0) then + begin + digit := -i; + minus := True; + end + else + begin + digit := i; + minus := False; + end; + + repeat + Dec(str); + str^ := Char((digit mod 10) + Byte('0')); + digit := digit div 10; + until (digit = 0); + + if (minus) then + begin + Dec(str); + str^ := '-'; + end; + + kwritestr(str); +end; + +procedure kwritedword(i: DWORD); [public, alias: 'kwritedword']; +var + buffer: array [0..11] of Char; + str: PChar; + digit: DWORD; +begin + for digit := 0 to 10 do + buffer[digit] := '0'; + + str := @buffer[11]; + str^ := #0; + + digit := i; + repeat + Dec(str); + str^ := Char((digit mod 10) + Byte('0')); + digit := digit div 10; + until (digit = 0); + + kwritestr(@Buffer[0]); +end; + +end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas new file mode 100644 index 00000000..72621e01 --- /dev/null +++ b/src/kernel.pas @@ -0,0 +1,70 @@ +{ +///////////////////////////////////////////////////////// +// // +// Freepascal barebone OS // +// kernel.pas // +// // +///////////////////////////////////////////////////////// +// +// By: De Deyn Kim +// License: Public domain +// +} + +unit kernel; + +interface + +uses + multiboot, + console; + +procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; + +implementation + +procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; [public, alias: 'kmain']; +begin + kclearscreen(); + kwritestr('Freepascal barebone OS booted!'); + xpos := 0; + ypos += 1; + + if (mbmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then + begin + kwritestr('Halting system, a multiboot-compliant boot loader needed!'); + asm + cli + hlt + end; + end + else + begin + kwritestr('Booted by a multiboot-compliant boot loader!'); + xpos := 0; + ypos += 2; + kwritestr('Multiboot information:'); + xpos := 0; + ypos += 2; + kwritestr(' Lower memory = '); + kwriteint(mbinfo^.mem_lower); + kwritestr('KB'); + xpos := 0; + ypos += 1; + kwritestr(' Higher memory = '); + kwriteint(mbinfo^.mem_upper); + kwritestr('KB'); + xpos := 0; + ypos += 1; + kwritestr(' Total memory = '); + kwriteint(((mbinfo^.mem_upper + 1000) div 1024) +1); + kwritestr('MB'); + end; + + asm + @loop: + jmp @loop + end; +end; + +end. \ No newline at end of file diff --git a/src/multiboot.pas b/src/multiboot.pas new file mode 100644 index 00000000..140c9fc0 --- /dev/null +++ b/src/multiboot.pas @@ -0,0 +1,55 @@ +unit multiboot; + +interface + +const + KERNEL_STACKSIZE = $4000; + + MULTIBOOT_BOOTLOADER_MAGIC = $2BADB002; + +type + Pelf_section_header_table_t = ^elf_section_header_table_t; + elf_section_header_table_t = packed record + num: DWORD; + size: DWORD; + addr: DWORD; + shndx: DWORD; + end; + + Pmultiboot_info_t = ^multiboot_info_t; + multiboot_info_t = packed record + flags: DWORD; + mem_lower: DWORD; { Amount of memory available below 1mb } + mem_upper: DWORD; { Amount of memory available above 1mb } + boot_device: DWORD; + cmdline: DWORD; + mods_count: DWORD; + mods_addr: DWORD; + elf_sec: elf_section_header_table_t; + mmap_length: DWORD; + mmap_addr: DWORD; + end; + + Pmodule_t = ^module_t; + module_t = packed record + mod_start: DWORD; + mod_end: DWORD; + name: DWORD; + reserved: DWORD; + end; + + Pmemory_map_t = ^memory_map_t; + memory_map_t = packed record + size: DWORD; + { You can declare these two as a single qword if your compiler supports it } + base_addr_low: DWORD; + base_addr_high: DWORD; + { And again, these can be made into one qword variable. } + length_low: DWORD; + length_high: DWORD; + mtype: DWORD; + end; + +implementation + +end. \ No newline at end of file diff --git a/src/stub.asm b/src/stub.asm new file mode 100644 index 00000000..b361513e --- /dev/null +++ b/src/stub.asm @@ -0,0 +1,79 @@ +;///////////////////////////////////////////////////////// +;// // +;// Freepascal barebone OS // +;// stub.asm // +;// // +;///////////////////////////////////////////////////////// +;// +;// By: De Deyn Kim +;// License: Public domain +;// + +; +; Kernel stub +; + +; +; We are in 32bits protected mode +; +[bits 32] + +; +; Export entrypoint +; +[global kstart] + +; +; Import kernel entrypoint +; +[extern kmain] + +; +; Posible multiboot header flags +; +MULTIBOOT_MODULE_ALIGN equ 1<<0 +MULTIBOOT_MEMORY_MAP equ 1<<1 +MULTIBOOT_GRAPHICS_FIELDS equ 1<<2 +MULTIBOOT_ADDRESS_FIELDS equ 1<<16 + +; +; Multiboot header defines +; +MULTIBOOT_HEADER_MAGIC equ 0x1BADB002 +MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_MODULE_ALIGN | MULTIBOOT_MEMORY_MAP +MULTIBOOT_HEADER_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) + +; +; Kernel stack size +; +KERNEL_STACKSIZE equ 0x4000 + +section .text + +; +; Multiboot header +; +align 4 +dd MULTIBOOT_HEADER_MAGIC +dd MULTIBOOT_HEADER_FLAGS +dd MULTIBOOT_HEADER_CHECKSUM + +; +; Entrypoint +; +kstart: + mov esp, KERNEL_STACK+KERNEL_STACKSIZE ;Create kernel stack + push eax ;Multiboot magic number + push ebx ;Multiboot info + call kmain ;Call kernel entrypoint + cli ;Clear interrupts + hlt ;Halt machine + +section .bss + +; +; Kernel stack location +; +align 32 +KERNEL_STACK: + resb KERNEL_STACKSIZE \ No newline at end of file diff --git a/src/system.pas b/src/system.pas new file mode 100644 index 00000000..6f706f00 --- /dev/null +++ b/src/system.pas @@ -0,0 +1,15 @@ +unit system; + +interface + +type + cardinal = 0..$FFFFFFFF; + hresult = cardinal; + dword = cardinal; + integer = longint; + + pchar = ^char; + +implementation + +end. \ No newline at end of file