Hi all! First post. Day job is principle engineer, 20yr, lately mostly Java and BigData Warehousing ETL in capital markets sector.
So, for hobbies I do anything but.
Recently I learnt my way around an Atmel MCU Atmega328p (of Arduino fame). Like learnt how to program it in ASM and C, with and without the Arduino IDE/Stack and eventually with the gcc-avr cross compile environment. Ending in a hand designed, hand soldered, minimal "blinky" on a PCB with a bare-metal bootloader-less chip, running custom ASM only. 0% Arduino.
Recently I found a series of YouTube videos on bare-metal in terms of modern x86_64 architecture which cover the ASM to get the CPU switched into various modes from 16bit with BIOS to 32bit protected and 64bit long mode, setting up the virtual memory maps and LSB page tables.
It got me started, towards a hobby space, learn by doing avenue to OS design and implementation, but now I'm a little stuck at a cross roads with where to go from here.
First I need to decide is I should remain in 64bit long mode and all the complications there in, or should I hand around in BIOS or 32bit mode and learn a few more basics first. Like a proper console, basic file and device IO, segmentation, multi-programming, scheduling, multi-tasking and so on. Then later move up into 64bit mode.
Then I need to decide the order to tackle things in. I doubt for example I would be getting anywhere near supporting the whole GNU LibC. I would be lucky if I could get a kernel to support stdlib!
I'm even wondering if it might be better to research and select a good book, even the Minux one Linus used and work that way.
Anyone done this?
Any tips, links, guides, books?
I suppose a good question is "What is the purpose?" and again, it would be as an exercise to understand by doing. Also I find all this low level bit-banging hardware a breath of fresh air after a day job in high level enterprise Java.
EDIT: Note I thought C++ forum was the closest to OS and ASM. Also, while I am currently a Java programmer I have experience in C/ASM from stock exchange internal low latency systems.
Paul
So, for hobbies I do anything but.
Recently I learnt my way around an Atmel MCU Atmega328p (of Arduino fame). Like learnt how to program it in ASM and C, with and without the Arduino IDE/Stack and eventually with the gcc-avr cross compile environment. Ending in a hand designed, hand soldered, minimal "blinky" on a PCB with a bare-metal bootloader-less chip, running custom ASM only. 0% Arduino.
Recently I found a series of YouTube videos on bare-metal in terms of modern x86_64 architecture which cover the ASM to get the CPU switched into various modes from 16bit with BIOS to 32bit protected and 64bit long mode, setting up the virtual memory maps and LSB page tables.
It got me started, towards a hobby space, learn by doing avenue to OS design and implementation, but now I'm a little stuck at a cross roads with where to go from here.
First I need to decide is I should remain in 64bit long mode and all the complications there in, or should I hand around in BIOS or 32bit mode and learn a few more basics first. Like a proper console, basic file and device IO, segmentation, multi-programming, scheduling, multi-tasking and so on. Then later move up into 64bit mode.
Then I need to decide the order to tackle things in. I doubt for example I would be getting anywhere near supporting the whole GNU LibC. I would be lucky if I could get a kernel to support stdlib!
I'm even wondering if it might be better to research and select a good book, even the Minux one Linus used and work that way.
Anyone done this?
Any tips, links, guides, books?
I suppose a good question is "What is the purpose?" and again, it would be as an exercise to understand by doing. Also I find all this low level bit-banging hardware a breath of fresh air after a day job in high level enterprise Java.
EDIT: Note I thought C++ forum was the closest to OS and ASM. Also, while I am currently a Java programmer I have experience in C/ASM from stock exchange internal low latency systems.
Paul
Last edited: