Re: Kernel in D

2014-06-05 Thread 1100110 via Digitalmars-d-learn

On 5/31/14, 7:57, ed wrote:

On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote:

So, I've gotten interested in kernel programming in D.. And as much as
I like C/C++, I wanna try innovating, I'm aware that phobos/gc and any
OS-specific issues are going to be a problem, but I'm willing to
implement them into the kernel itself.

So, I guess what I'm asking is this: What should I look out for, what
should I avoid, and what should I use to my advantage?

I'm not expecting this kernel to be Linux right off the bat, but I
would like to see how far D can go with this.

Any ideas? :P


I wrote a little kernel a while back that all started when I read this
wiki page:

http://wiki.osdev.org/D_Bare_Bones

You may be beyond this already as it is pretty basic stuff...still it's
good if you're just learning like I am. There are some articles that
helped me fix the 64-bit bootloader issues I was having as well.

Cheers,
ed



Just a warning, there are a few bugs on that wiki page.  Nothing major, 
just don't expect every example to work out of the box. (unless it has 
been  updated in the last year of course).


I thought about editing it, but I lost interest in my project before I 
got around to it. =C


I've long since forgotten what issues I encountered though...


Re: Kernel in D

2014-06-05 Thread 1100110 via Digitalmars-d-learn

On 6/5/14, 6:05, 1100110 wrote:

On 5/31/14, 7:57, ed wrote:

On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote:

So, I've gotten interested in kernel programming in D.. And as much as
I like C/C++, I wanna try innovating, I'm aware that phobos/gc and any
OS-specific issues are going to be a problem, but I'm willing to
implement them into the kernel itself.

So, I guess what I'm asking is this: What should I look out for, what
should I avoid, and what should I use to my advantage?

I'm not expecting this kernel to be Linux right off the bat, but I
would like to see how far D can go with this.

Any ideas? :P


I wrote a little kernel a while back that all started when I read this
wiki page:

http://wiki.osdev.org/D_Bare_Bones

You may be beyond this already as it is pretty basic stuff...still it's
good if you're just learning like I am. There are some articles that
helped me fix the 64-bit bootloader issues I was having as well.

Cheers,
ed



Just a warning, there are a few bugs on that wiki page.  Nothing major,
just don't expect every example to work out of the box. (unless it has
been  updated in the last year of course).

I thought about editing it, but I lost interest in my project before I
got around to it. =C

I've long since forgotten what issues I encountered though...



I should also clarify that I'm just a novice and really just wanted 
insight into how it all worked.  So anyone more experienced might simply 
know something that I did not.


Re: Kernel in D

2014-06-05 Thread ed via Digitalmars-d-learn

On Thursday, 5 June 2014 at 11:07:54 UTC, 1100110 wrote:

On 6/5/14, 6:05, 1100110 wrote:

On 5/31/14, 7:57, ed wrote:

On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote:
So, I've gotten interested in kernel programming in D.. And 
as much as
I like C/C++, I wanna try innovating, I'm aware that 
phobos/gc and any
OS-specific issues are going to be a problem, but I'm 
willing to

implement them into the kernel itself.

So, I guess what I'm asking is this: What should I look out 
for, what

should I avoid, and what should I use to my advantage?

I'm not expecting this kernel to be Linux right off the bat, 
but I

would like to see how far D can go with this.

Any ideas? :P


I wrote a little kernel a while back that all started when I 
read this

wiki page:

http://wiki.osdev.org/D_Bare_Bones

You may be beyond this already as it is pretty basic 
stuff...still it's
good if you're just learning like I am. There are some 
articles that
helped me fix the 64-bit bootloader issues I was having as 
well.


Cheers,
ed



Just a warning, there are a few bugs on that wiki page.  
Nothing major,
just don't expect every example to work out of the box. 
(unless it has

been  updated in the last year of course).

I thought about editing it, but I lost interest in my project 
before I

got around to it. =C

I've long since forgotten what issues I encountered though...



I should also clarify that I'm just a novice and really just 
wanted insight into how it all worked.  So anyone more 
experienced might simply know something that I did not.


Yes I remember now I also had some issues but I've forgotten what 
what were exactly ... it was a while ago. I put it down to the 
fact I was using DMD not GDC and trying to boot from GRUB. But it 
could be more than that.



Cheers,
ed



Re: Kernel in D

2014-06-04 Thread Kagamin via Digitalmars-d-learn

On Saturday, 31 May 2014 at 23:27:45 UTC, Qox wrote:

On Saturday, 31 May 2014 at 07:57:18 UTC, Kagamin wrote:

http://www.xomb.org/ ?


seems to be outdated, but its another OS written in D.


It's dead for only a year, the developer have probably graduated.


Kernel in D

2014-05-31 Thread Mineko via Digitalmars-d-learn
So, I've gotten interested in kernel programming in D.. And as 
much as I like C/C++, I wanna try innovating, I'm aware that 
phobos/gc and any OS-specific issues are going to be a problem, 
but I'm willing to implement them into the kernel itself.


So, I guess what I'm asking is this: What should I look out for, 
what should I avoid, and what should I use to my advantage?


I'm not expecting this kernel to be Linux right off the bat, but 
I would like to see how far D can go with this.


Any ideas? :P


Re: Kernel in D

2014-05-31 Thread Kagamin via Digitalmars-d-learn

http://www.xomb.org/ ?


Re: Kernel in D

2014-05-31 Thread Adam D. Ruppe via Digitalmars-d-learn

On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote:

Any ideas? :P


Buy my book, chapter 11 talks about it a little to get you 
started :P


http://www.packtpub.com/discover-advantages-of-programming-in-d-cookbook/book


The summary of my approach there is:

1) Use a regular linux compiler and a custom linker script to 
make an ELF executable, I wouldn't worry about making a cross 
compiler or anything fancy like that.


2) Use GRUB or qemu -kernel to boot that executable. No need to 
write your own bootloader.


3) Compile without the runtime, instead using a minimal object.d, 
here's a fairly simple one for example: 
http://arsdnet.net/dcode/bare/object.d or a more complete one can 
be found in here: http://arsdnet.net/dcode/minimal.zip


4) Add back features from teh real druntime as needed, but I say 
avoid those that are too hard to do memory management manually 
(so like just leave array concatenation unimplemented, instead 
write a regular struct that owns its own memory and has append 
methods and use it)


5) Love inline asm and naked functions for interrupt handlers

6) Pay attention to struct alignment (also see chapter 7 of my 
book if you decide to go that route) when defining hardware 
layouts!


7) Don't try to use TLS variables, always use __gshared on module 
level or static variables cuz tls won't actually work.




That should get you started to play around!


Re: Kernel in D

2014-05-31 Thread ed via Digitalmars-d-learn

On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote:
So, I've gotten interested in kernel programming in D.. And as 
much as I like C/C++, I wanna try innovating, I'm aware that 
phobos/gc and any OS-specific issues are going to be a problem, 
but I'm willing to implement them into the kernel itself.


So, I guess what I'm asking is this: What should I look out 
for, what should I avoid, and what should I use to my advantage?


I'm not expecting this kernel to be Linux right off the bat, 
but I would like to see how far D can go with this.


Any ideas? :P


I wrote a little kernel a while back that all started when I read 
this wiki page:


http://wiki.osdev.org/D_Bare_Bones

You may be beyond this already as it is pretty basic 
stuff...still it's good if you're just learning like I am. There 
are some articles that helped me fix the 64-bit bootloader issues 
I was having as well.


Cheers,
ed



Re: Kernel in D

2014-05-31 Thread Qox via Digitalmars-d-learn

You should definitly use templating and CTFE for your advantage.
For example you could use the (compile time) component based 
design to design (heap) allocators after a at cmpile time known 
configuration. The possibilities of templating and compile time 
code gen are enormous.


Instead of using real OOP classes you should use the object 
bound functions (you have functions which take as a first 
argument the struct or a ref of a struct, just look it up in the 
documentation for the functions).

This allows to use OOP without writing a GC.

Furthermore, all kind of array ops need GC.

If you want exception handling it could be a small problem. Even 
a simple scope expression



scope(exit) foo();


uses exception handling in the background.
It could be possible to diassemble the *.obj/*.o file, change all 
entries which use __except_list to something else.
Basically you need to rewrite *** [fs: __except_list] to 
something else which doesn't use fs, maybe you can get away with 
using a global scratch memory, i've not done any experiments tho.


Inovation with D is allways a good thing :)

---

For the building of the kernel i used gdc, together with a ld 
linkscript and some other magic (a python script which grabs some 
stuff from a disambled file or modified something, dunno). Today 
gdc is outdated, so i would choose ldc or dmd (ldc for better 
speed, but its not that important in the beginning).


Re: Kernel in D

2014-05-31 Thread Qox via Digitalmars-d-learn

On Saturday, 31 May 2014 at 07:57:18 UTC, Kagamin wrote:

http://www.xomb.org/ ?


seems to be outdated, but its another OS written in D.


Re: Kernel in D

2014-05-31 Thread Adam D. Ruppe via Digitalmars-d-learn

On Saturday, 31 May 2014 at 22:54:48 UTC, Qox wrote:

scope(exit) foo();


uses exception handling in the background.


That just works with dmd even in the bare metal environmnet.

Throwing an exception needs library support with dmd but you can 
copy/paste it from druntime - I did that in my minimal.zip.