Hi guys! I'm new here and I am new to OS development!
Posted: Mon Feb 13, 2023 8:46 pm
So, I have been working with chatgpt to develop some code. I have a few ideas I wanted merged together and so I thought it would be interesting to ask chatgpt to try and resolve my issues...
I described to it a virtual machine monitor that I wanted written in the D programming language...it seemed to do everything all right. Then came the trickier part, I wanted to join D with assembly so that I could actually boot into the vmm.
I'm going to post the code that's been generated and (somewhat) revised by me below:
boot.asm
Code: Select all
section .text align=1
start:
; Load the kernel code into memory
mov edx, 0x8000
mov dh, 0x02
mov dl, 0x80
mov ah, 0x02
int 0x13
jnc kernel_loaded
jmp error
kernel_loaded:
; Set the entry point for the kernel
mov eax, [0x8000 + 0x218]
mov ecx, [0x8000 + 0x21A]
mov edx, 0
add edx, ecx
add ecx, ecx
add edx, ecx
add ecx, ecx
add edx, ecx
add ecx, ecx
add edx, ecx
add ecx, ecx
add edx, ecx
add eax, edx
add eax, 0x8000
jmp eax
; Display "Loading complete." on the screen
mov ah, 0x00
mov al, 'L'
int 0x10
mov ah, 0x00
mov al, 'o'
int 0x10
mov ah, 0x00
mov al, 'a'
int 0x10
mov ah, 0x00
mov al, 'd'
int 0x10
mov ah, 0x00
mov al, 'i'
int 0x10
mov ah, 0x00
mov al, 'n'
int 0x10
mov ah, 0x00
mov al, 'g'
int 0x10
mov ah, 0x00
mov al, ' '
int 0x10
mov ah, 0x00
mov al, 'c'
int 0x10
mov ah, 0x00
mov al, 'o'
int 0x10
mov ah, 0x00
mov al, 'm'
int 0x10
mov ah, 0x00
mov al, 'p'
int 0x10
mov ah, 0x00
mov al, 'l'
int 0x10
mov ah, 0x00
mov al, 'e'
int 0x10
mov ah, 0x00
mov al, 't'
int 0x10
mov ah, 0x00
mov al, 'e'
error:
; Error handling code here
; Pad the boot loader to 512 bytes
times 510 - ($-$$) db 0
dd 0xAA55
vmmonitor.d
Code: Select all
import core.stdc.stdio;
import core.stdc.string;
import core.stdc.stdlib;
import core.bitop;
class VirtualMemoryManager {
private:
// Page table for virtual memory
uint[4096] pageTable;
public:
// Set up page tables for virtual memory
void init() {
for (int i = 0; i < 4096; i++) {
pageTable[i] = i * 4096;
}
}
};
class VirtualMachineMonitor {
private:
// Instance of the virtual memory manager
VirtualMemoryManager vmm;
// Task queue for the task scheduler
uint[1024] taskQueue;
public:
// Initialize the virtual memory manager
void initVirtualMemory() {
vmm.init();
}
// Initialize the task scheduler
void initTaskScheduler() {
for (int i = 0; i < 1024; i++) {
taskQueue[i] = i;
}
}
};
// Define the kernel code
void initKernel() {
// Initialize the virtual machine monitor
VirtualMachineMonitor vmm = new VirtualMachineMonitor();
vmm.initVirtualMemory();
vmm.initTaskScheduler();
}
I guess my question for everyone is where do I go from here? I mean the code is obviously broken. Though I fail to see why. Could anyone help me out please?
Oh, and here are the commands for compiling said code:
dmd -c vmmonitor.d
nasm -f elf64 -fbin -o bootloader.o boot.asm
ld -Ttext 0x7C00 -o boot.bin bootloader.o vmmonitor.o -L /usr/include/dmd/phobos/ -lphobos2
genisoimage -o boot.iso -b boot.bin -no-emul-boot boot.bin