Advertisement
kuraihikari

Unfinished cli

Sep 28th, 2013
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.     ;------------------------------------------------------------------------------
  3.     ;   enter = 0x0d
  4.     ;   backspace = 0x08
  5.     ;   space = 0x20
  6.     ;   > = 0x3e   
  7.     ;------------------------------------------------------------------------------
  8.  
  9.  
  10.     lbstart:
  11.         jmp lbbegin
  12.        
  13.         welcomestr db "Welcome to CLI"    
  14.         welcomelen equ $-welcomestr
  15.         timestr db 0,0,':', 0,0, ':', 0,0
  16.         timelen equ $-timestr
  17.         datestr db 0,0,'/',0,0,'/',0,0,0,0
  18.         datelen equ $-datestr
  19.         cpuinfo resb 60
  20.         cpulen equ $-cpuinfo
  21.         command resb 80
  22.        
  23.     lbbegin:
  24.         mov ah, 0
  25.         mov al, 03h
  26.         int 10h
  27.     ;-----------------------change cursor shape-------------------------------------
  28.         mov ah,01h
  29.         mov cx, 0x0707
  30.         int 10h
  31.        
  32.     ;-----------------------insert >------------------------------------------------  
  33.         mov ah, 09h
  34.         mov al, 0x3e
  35.         mov bl, 0x7
  36.         mov cx, 1
  37.         int 10h
  38.     ;-------------------------------------------------------------------------------  
  39.  
  40.     ;-----------------------move cursor and add a space-----------------------------
  41.         mov ah, 02h
  42.         mov dh, 0
  43.         mov dl, 1
  44.         mov bh, 0
  45.         int 10h    
  46.        
  47.         mov ah, 09h
  48.         mov al, 0x20
  49.         mov bl, 0x7
  50.         mov cx, 1
  51.         int 10h    
  52.     ;-------------------------------------------------------------------------------    
  53.         call prkeypr      
  54.        
  55.     prkeypr:
  56.  
  57.     mov si, 0
  58.         mov dh, 0
  59.         mov dl, 2
  60.         mov cx, 1
  61.         mov bh, 0
  62.        
  63.         mov ah, 02h
  64.         int 10h
  65.        
  66.     lbread:
  67.        
  68.         xor ah, ah
  69.         int 16h ; read a key from keyboard
  70.         cmp al, 0
  71.         jz lbread ; if special key, continue reading
  72.        
  73.         cmp al, 0x08
  74.         jz lbback
  75.        
  76.         cmp al, 0x0d
  77.         jz lbnewl
  78.        
  79.         cmp al, 0x06
  80.         jz lbtime
  81.        
  82.         cmp al, 0x03
  83.         jz lbdate
  84.        
  85.         cmp al, 23
  86.         jz lbcpu
  87.        
  88.         cmp al, 24
  89.         jz lbreb
  90.  
  91.         cmp dl, 79
  92.         jz lbread
  93.                
  94.         mov ah, 09h
  95.         mov cx, 1
  96.         mov bl, 0x7
  97.         int 10h ; write keyboard character to screen
  98.         mov [es:command+si], al ; save character in memory
  99.         inc si  
  100.        
  101.         mov ah, 0x2        
  102.         inc dl
  103.         int 10h
  104.  
  105.         jmp lbread
  106.     lbback:
  107.         call prbackspace
  108.         jmp lbread
  109.     lbtime:
  110.         call prtime
  111.         jmp lbread
  112.     lbdate:
  113.         call prdate
  114.         jmp lbread
  115.     lbcpu:
  116.         call prcpuinf
  117.         jmp lbread 
  118.     lbreb:
  119.         int 19h
  120.         jmp lbread
  121.     lbnewl:
  122.         call prnewline
  123.        
  124.     ;-----------------------print the new command-----------------------------------
  125.         mov ah, 13h
  126.         mov al, 0
  127.         mov cx, si
  128.         mov bp, command
  129.         int 10h
  130.         xor si, si
  131.        
  132.         jmp lbread
  133.         ret
  134.        
  135.     ;----------------------implement backspace functionality-----------------------
  136.     prbackspace:  
  137.     ;----------------------check if at line start-----------------------------------
  138.         cmp dl, 2
  139.         jz lblinestart ; don't do nothin'
  140.    
  141.        
  142.     ;----------------------move cursor back one space-------------------------------
  143.         dec dl
  144.         dec si
  145.         mov ah, 02d
  146.         int 10h
  147.  
  148.     ;---------------------insert space over character-------------------------------   
  149.         mov ah, 09h
  150.         mov al, 0x20; space
  151.         int 10h
  152.  
  153.     lblinestart:   
  154.         ret
  155.    
  156.    
  157.     ;-----------------------create newline------------------------------------------   
  158.     prnewline:
  159.         cmp dh, 24 ; if end of screen
  160.         jz lbscrl ; do scroll
  161.        
  162.         inc dh
  163.         mov dl, 0
  164.         mov ah, 02h
  165.         int 10h
  166.         jmp lbinsert
  167.        
  168.     lbscrl:
  169.         call prscroll  
  170.        
  171.         mov dl, 0
  172.         mov dh, 24
  173.         mov ah, 02h
  174.         int 10h
  175.     ;-----------------------insert >------------------------------------------------
  176.     lbinsert:  
  177.         mov ah, 09h
  178.         mov al, 0x3e ;>
  179.         mov bl, 0x7 ;light gray
  180.         mov cx, 1
  181.         int 10h
  182.  
  183.  
  184.     ;-----------------------move cursor and add a space-----------------------------
  185.        
  186.         mov ah, 02h
  187.         inc dl
  188.         int 10h
  189.            
  190.         mov ah, 09h
  191.         mov al, 0x20
  192.         mov bl, 0x7
  193.         mov cx, 1
  194.         int 10h    
  195.        
  196.         mov ah, 02h
  197.         inc dl
  198.         int 10h
  199.  
  200.         ret
  201.    
  202.    
  203.     ;-----------------------keep commands on screen---------------------------------
  204.     prscroll: ; SCROOOOOOOOOOOOOOOOOOOOOOLLLLLLLLLL
  205.  
  206.         mov ah, 06h
  207.         mov al, 1
  208.         mov cx, 0
  209.         mov bh, 0x07
  210.         mov dl, 79
  211.         int 10h
  212.         mov cx, 1
  213.         mov bh, 0
  214.         ret
  215.        
  216.        
  217.  
  218.        
  219.        
  220.     ;-----------------------get and print time--------------------------------------
  221.     prtime:
  222.  
  223.         push dx
  224.         mov ah, 02h
  225.         int 1ah  
  226.        
  227.         mov al, ch
  228.         mov ah, ch
  229.         and al, 0x0F
  230.         shr ah, 4
  231.         add al, 0x30
  232.         add ah, 0x30
  233.         mov [es:timestr], ah
  234.         mov [es:timestr+1], al
  235.        
  236.         mov al, cl
  237.         mov ah, cl
  238.         and al, 0x0F
  239.         shr ah, 4
  240.         add al, 0x30
  241.         add ah, 0x30
  242.         mov [es:timestr+3], ah
  243.         mov [es:timestr+4], al
  244.        
  245.         mov al, dh
  246.         mov ah, dh
  247.         and al, 0x0F
  248.         shr ah, 4
  249.         add al, 0x30
  250.         add ah, 0x30
  251.         mov [es:timestr+6], ah
  252.         mov [es:timestr+7], al
  253.        
  254.         mov ah, 13h
  255.         mov bp, timestr
  256.         mov dh, 0
  257.         mov dl, 71
  258.         xor al,al    
  259.         mov cx, timelen
  260.         int 10h
  261.            
  262.         pop dx
  263.    
  264.         mov cx, 1
  265.         mov bh, 0
  266.    
  267.         ret
  268.        
  269.        
  270.     prdate:
  271.         push dx
  272.         mov ah, 04h
  273.         int 1ah  
  274.        
  275.         mov al, dl
  276.         mov ah, dl
  277.         and al, 0x0F
  278.         shr ah, 4
  279.         add al, 0x30
  280.         add ah, 0x30
  281.         mov [es:datestr], ah
  282.         mov [es:datestr+1], al
  283.        
  284.         mov al, dh
  285.         mov ah, dh
  286.         and al, 0x0F
  287.         shr ah, 4
  288.         add al, 0x30
  289.         add ah, 0x30
  290.         mov [es:datestr+3], ah
  291.         mov [es:datestr+4], al
  292.        
  293.         mov al, ch
  294.         mov ah, ch
  295.         and al, 0x0F
  296.         shr ah, 4
  297.         add al, 0x30
  298.         add ah, 0x30
  299.         mov [es:datestr+6], ah
  300.         mov [es:datestr+7], al
  301.        
  302.         mov al, cl
  303.         mov ah, cl
  304.         and al, 0x0F
  305.         shr ah, 4
  306.         add al, 0x30
  307.         add ah, 0x30
  308.         mov [es:datestr+8], ah
  309.         mov [es:datestr+9], al
  310.        
  311.         mov ah, 13h
  312.         mov bp, datestr
  313.         mov dh, 0
  314.         mov dl, 70
  315.         xor al,al    
  316.         mov cx, datelen
  317.         int 10h
  318.        
  319.         pop dx
  320.         mov cx, 1
  321.         mov bh, 0
  322.        
  323.         ret
  324.  
  325.     prcpuinf:
  326.         push dx
  327.        
  328.         mov eax, 80000002h
  329.         cpuid
  330.         mov [es:cpuinfo+0], eax
  331.         mov [es:cpuinfo+4], ebx
  332.         mov [es:cpuinfo+8], ecx
  333.         mov [es:cpuinfo+12], edx  
  334.        
  335.         mov eax, 80000003h
  336.         cpuid
  337.         mov [es:cpuinfo+16], eax
  338.         mov [es:cpuinfo+20], ebx
  339.         mov [es:cpuinfo+24], ecx
  340.         mov [es:cpuinfo+28], edx
  341.         mov eax, 80000004h
  342.         cpuid
  343.     ;    jmp prnt
  344.         mov [es:cpuinfo+32], eax
  345.         mov [es:cpuinfo+36], ebx
  346.         mov [es:cpuinfo+40], ecx
  347.         mov [es:cpuinfo+44], edx
  348.         nop
  349.     prnt:
  350.        
  351.         mov ah, 13h    
  352.         mov ecx, 48;cpulen
  353.         mov bh, 0
  354.         mov bl, 0x07
  355.         mov dh, 3
  356.         mov dl, 3
  357.         mov bp, cpuinfo
  358.         int 10h
  359.        
  360.         pop dx
  361.         mov ecx, 1
  362.         ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement