Advertisement
Guest User

My code

a guest
Mar 2nd, 2023
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  [org 0x7c00]
  2.  [bits 16]
  3.  
  4.  init:
  5.    mov [BOOT_DISK], dl
  6.    xor ax, ax
  7.    mov es, ax
  8.    mov ds, ax
  9.    mov bp, 0x8000
  10.    mov sp, bp
  11.    mov bx, KERNEL_LOCATION
  12.    mov dh, 20
  13.    mov ah, 0x02
  14.    mov al, dh
  15.    mov ch, 0x00
  16.    mov dh, 0x00
  17.    mov cl, 0x02
  18.    mov dl, [BOOT_DISK]
  19.    int 0x13
  20.    mov ah, 0x0e
  21.    mov bx, string
  22.    mov si, reserved
  23.    jmp loop
  24.  
  25.  loop:
  26.    mov al, [bx]
  27.    cmp al, 0
  28.    je key_press
  29.    int 0x10
  30.    inc bx
  31.    jmp loop
  32.  
  33.  PS1:
  34.    cmp byte [bx], 0
  35.    je go_back_PS1
  36.    mov ah, 0x0e
  37.    mov al, [bx]
  38.    int 0x10
  39.    inc bx
  40.    jmp PS1
  41.  
  42.  go_back_PS1:
  43.    popa
  44.    jmp key_press
  45.  
  46.  command_not_found:
  47.    cmp byte [bx], 0
  48.    je go_back_command_not_found
  49.    mov al, [bx]
  50.    int 0x10
  51.    inc bx
  52.    jmp command_not_found
  53.  
  54.  go_back_command_not_found:
  55.    popa
  56.    pusha
  57.    mov bx, PS1_env
  58.    jmp PS1
  59.  
  60.  key_press:
  61.    mov ah, 0x00
  62.    int 0x16
  63.    cmp al, 0x21
  64.  ;  mov si, reserved
  65.    jge compare
  66.    jl other_chars
  67.    jmp key_press
  68.  
  69.  compare:
  70.    cmp al, 0x7e
  71.    jl print
  72.    jmp key_press
  73.  
  74.  print:
  75.    pusha
  76.    mov ah, 0x0e
  77.    int 0x10
  78.    popa
  79.    mov [si], al
  80.    inc si
  81.    jmp key_press
  82.  
  83.  other_chars:
  84.    cmp ah, 0x1C
  85.    je enter
  86.    cmp ah, 0x39
  87.    je space
  88.    cmp al, 0x8
  89.    je backspace
  90.    jmp key_press
  91.  
  92.  enter:
  93.    pusha
  94.    mov ah, 0x0e
  95.    mov al, 0x0a
  96.    int 0x10
  97.    mov al, 0x0d
  98.    int 0x10
  99.    popa
  100.    mov di, reserved
  101.    mov bx, ping_command
  102.    jmp loop1
  103.  
  104.  loop1:
  105.    cmp di, si
  106.    je middle_loop1
  107.    cmp byte [bx], 0
  108.    je go_back_loop1
  109.    mov ch, [di]
  110.    cmp ch, [bx]
  111.    jne go_back_loop1
  112.  ;  pusha
  113.  ;  mov ah, 0x0e
  114.  ;  mov al, [di]
  115.  ;  int 0x10
  116.  ;  popa
  117.    inc di
  118.    inc bx
  119.    jmp loop1
  120.  
  121.  go_back_loop1:
  122.    mov si, reserved
  123.    mov bx, ping_command
  124.    pusha
  125.    mov ah, 0x0e
  126.    mov bx, command_not_found_text
  127.    jmp command_not_found
  128.  ;  pusha
  129.  ;  mov bx, PS1_env
  130.  ;  jmp PS1
  131.  ;  jmp key_press
  132.  
  133.  middle_loop1:
  134.    mov si, reserved
  135.    mov bx, pong
  136.    pusha
  137.    jmp print_ping
  138.  
  139.  print_ping:
  140.    cmp byte [bx], 0
  141.    je go_back_print_ping
  142.    mov ah, 0x0e
  143.    mov al, [bx]
  144.    int 0x10
  145.    inc bx
  146.    jmp print_ping
  147.  
  148.  go_back_print_ping:
  149.    mov al, 0x0a
  150.    int 0x10
  151.    mov al, 0x0d
  152.    int 0x10
  153.    jmp enter_PM
  154.  ;  mov bx, PS1_env
  155.  ;  jmp PS1
  156.  ;  popa
  157.  ;  jmp key_press
  158.  
  159.  space:
  160.    pusha
  161.    mov ah, 0x0e
  162.    mov al, ' '
  163.    int 0x10
  164.    popa
  165.    mov byte [si], ' '
  166.    inc si
  167.    jmp key_press
  168.  
  169.  backspace:
  170.    cmp si, reserved
  171.    jle key_press
  172.    pusha
  173.    mov ah, 0x0e
  174.    int 0x10
  175.    mov al, ' '
  176.    int 0x10
  177.    mov al, 0x8
  178.    int 0x10
  179.    popa
  180.    dec si
  181.    jmp key_press
  182.  
  183.  enter_PM:
  184.  ;  mov ah, 0x0
  185.  ;  mov al, 0x3
  186.  ;  int 0x10
  187.    cli
  188.    lidt [IDT_Descriptor]
  189.    lgdt [GDT_Descriptor]
  190.    mov eax, cr0
  191.    or eax, 1
  192.    mov cr0, eax
  193.    jmp CODE_SEG:protected_mode
  194.  
  195.  [bits 32]
  196.  protected_mode:
  197.  ;  mov byte [0xb8000], 'A'
  198.  ;  jmp halt
  199.    call KERNEL_LOCATION
  200.    jmp halt
  201.  
  202.  halt:
  203.    hlt
  204.    jmp halt
  205.  
  206.  GDT_Start:
  207.    null_descriptor:
  208.      dd 0
  209.      dd 0
  210.    code_descriptor:
  211.      dw 0xffff
  212.      dw 0
  213.      db 0
  214.      db 0b10011010
  215.      db 0b11001111
  216.      db 0
  217.    data_descriptor:
  218.      dw 0xffff
  219.      dw 0
  220.      db 0
  221.      db 0b10010010
  222.      db 0b11001111
  223.      db 0
  224.  GDT_End:
  225.  
  226.  GDT_Descriptor:
  227.    dw GDT_End - GDT_Start - 1
  228.    dd GDT_Start
  229.  
  230.  IDT_Start:
  231.    KEYBOARD:
  232.      dw 0x0078
  233.      dw CODE_SEG
  234.      db 0
  235.      db 0b11100001
  236.      dw 0x0000
  237.  IDT_End:
  238.  
  239.  IDT_Descriptor:
  240.    dw IDT_End - IDT_Start - 1
  241.    dd IDT_Start
  242.  
  243.  CODE_SEG equ code_descriptor - GDT_Start
  244.  DATA_SEG equ data_descriptor - GDT_Start
  245.  KERNEL_LOCATION equ 0x1000
  246.  BOOT_DISK db 0
  247.  ping_command db "ping", 0
  248.  pong db "pong", 0
  249.  PS1_env db "admin% ", 0
  250.  command_not_found_text db "Command not found!", 0xa, 0xd, 0
  251.  string db "It's me! Mario!", 0xa, 0xd, "admin% ", 0
  252.  times 510-($-$$) db 0
  253.  dw 0xAA55
  254.  reserved resb 128
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement