[BITS 16]
[ORG 0X7C00]

jmp 0:start

start:

xor   ax,ax
mov   ds,ax
mov   es,ax
mov   ss,ax
mov   sp,0x7C00 

MOV AL,65
CALL setvideomode
CALL setcolor
MOV SI, EnterString
CALL PrintString

MOV AH,02
MOV AL,18d
MOV CH,0
MOV CL,02d
MOV DH,0
MOV DL,00h
MOV BX,0
MOV ES,BX
MOV SI,buffer
MOV BX,si
INT 13H
JC sad
XCHG BX,BX

cli 
lgdt  [gdtr]

mov   eax, cr0
or    al,0x1 
mov   cr0,eax
jmp   0x10: protected

[BITS 32]

protected:

mov   ax,0x08 
mov   ds,ax
mov   es,ax
mov   ss,ax
mov   esp,0x7C00
jmp   buffer
	
[BITS 16]

sad: 
hlt
JMP $


setcolor:
MOV AH,0X0B
MOV BH,0X00
MOV BL,0x02
INT 0X10
RET

setvideomode:
MOV AH,0X00
MOV AL,0X12
INT 0X10


MOV AH,0X02
MOV BH,0X00
MOV DH,100
MOV DL,100
RET

PrintCharacter:	

MOV AH, 0x0E	
MOV BH, 0x00	
MOV BL, 0x07	
INT 0x10	
RET		

PrintString:	
	
next_character:	
MOV AL, [SI]	
INC SI		
OR AL, AL	
JZ exit_function 
CALL PrintCharacter 
JMP next_character	
exit_function:	
RET		

HelloString db 'RAHUL IS A NOOB AND I WONT BOOT',0
ConfirmString db 'Well seems a prob in kernel then',0
EnterString db 'Entering ......',0
ExitString db 'Exited......',0

gdt:        dw    0x0000, 0x0000, 0x0000, 0x0000
sys_data:   dw    0xFFFF, 0x0000, 0x9200, 0x00CF
sys_code:   dw    0xFFFF, 0x0000, 0x9800, 0x00CF
gdt_end:

gdtr:       dw gdt_end - gdt - 1   
            dd gdt 
TIMES 510 - ($ - $$) db 0
DW 0xAA55


buffer:
