Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;------------------------------------------------------------------------------
- ; enter = 0x0d
- ; backspace = 0x08
- ; space = 0x20
- ; > = 0x3e
- ;------------------------------------------------------------------------------
- lbstart:
- jmp lbbegin
- welcomestr db "Welcome to CLI"
- welcomelen equ $-welcomestr
- timestr db 0,0,':', 0,0, ':', 0,0
- timelen equ $-timestr
- datestr db 0,0,'/',0,0,'/',0,0,0,0
- datelen equ $-datestr
- cpuinfo resb 60
- cpulen equ $-cpuinfo
- command resb 80
- lbbegin:
- mov ah, 0
- mov al, 03h
- int 10h
- ;-----------------------change cursor shape-------------------------------------
- mov ah,01h
- mov cx, 0x0707
- int 10h
- ;-----------------------insert >------------------------------------------------
- mov ah, 09h
- mov al, 0x3e
- mov bl, 0x7
- mov cx, 1
- int 10h
- ;-------------------------------------------------------------------------------
- ;-----------------------move cursor and add a space-----------------------------
- mov ah, 02h
- mov dh, 0
- mov dl, 1
- mov bh, 0
- int 10h
- mov ah, 09h
- mov al, 0x20
- mov bl, 0x7
- mov cx, 1
- int 10h
- ;-------------------------------------------------------------------------------
- call prkeypr
- prkeypr:
- mov si, 0
- mov dh, 0
- mov dl, 2
- mov cx, 1
- mov bh, 0
- mov ah, 02h
- int 10h
- lbread:
- xor ah, ah
- int 16h ; read a key from keyboard
- cmp al, 0
- jz lbread ; if special key, continue reading
- cmp al, 0x08
- jz lbback
- cmp al, 0x0d
- jz lbnewl
- cmp al, 0x06
- jz lbtime
- cmp al, 0x03
- jz lbdate
- cmp al, 23
- jz lbcpu
- cmp al, 24
- jz lbreb
- cmp dl, 79
- jz lbread
- mov ah, 09h
- mov cx, 1
- mov bl, 0x7
- int 10h ; write keyboard character to screen
- mov [es:command+si], al ; save character in memory
- inc si
- mov ah, 0x2
- inc dl
- int 10h
- jmp lbread
- lbback:
- call prbackspace
- jmp lbread
- lbtime:
- call prtime
- jmp lbread
- lbdate:
- call prdate
- jmp lbread
- lbcpu:
- call prcpuinf
- jmp lbread
- lbreb:
- int 19h
- jmp lbread
- lbnewl:
- call prnewline
- ;-----------------------print the new command-----------------------------------
- mov ah, 13h
- mov al, 0
- mov cx, si
- mov bp, command
- int 10h
- xor si, si
- jmp lbread
- ret
- ;----------------------implement backspace functionality-----------------------
- prbackspace:
- ;----------------------check if at line start-----------------------------------
- cmp dl, 2
- jz lblinestart ; don't do nothin'
- ;----------------------move cursor back one space-------------------------------
- dec dl
- dec si
- mov ah, 02d
- int 10h
- ;---------------------insert space over character-------------------------------
- mov ah, 09h
- mov al, 0x20; space
- int 10h
- lblinestart:
- ret
- ;-----------------------create newline------------------------------------------
- prnewline:
- cmp dh, 24 ; if end of screen
- jz lbscrl ; do scroll
- inc dh
- mov dl, 0
- mov ah, 02h
- int 10h
- jmp lbinsert
- lbscrl:
- call prscroll
- mov dl, 0
- mov dh, 24
- mov ah, 02h
- int 10h
- ;-----------------------insert >------------------------------------------------
- lbinsert:
- mov ah, 09h
- mov al, 0x3e ;>
- mov bl, 0x7 ;light gray
- mov cx, 1
- int 10h
- ;-----------------------move cursor and add a space-----------------------------
- mov ah, 02h
- inc dl
- int 10h
- mov ah, 09h
- mov al, 0x20
- mov bl, 0x7
- mov cx, 1
- int 10h
- mov ah, 02h
- inc dl
- int 10h
- ret
- ;-----------------------keep commands on screen---------------------------------
- prscroll: ; SCROOOOOOOOOOOOOOOOOOOOOOLLLLLLLLLL
- mov ah, 06h
- mov al, 1
- mov cx, 0
- mov bh, 0x07
- mov dl, 79
- int 10h
- mov cx, 1
- mov bh, 0
- ret
- ;-----------------------get and print time--------------------------------------
- prtime:
- push dx
- mov ah, 02h
- int 1ah
- mov al, ch
- mov ah, ch
- and al, 0x0F
- shr ah, 4
- add al, 0x30
- add ah, 0x30
- mov [es:timestr], ah
- mov [es:timestr+1], al
- mov al, cl
- mov ah, cl
- and al, 0x0F
- shr ah, 4
- add al, 0x30
- add ah, 0x30
- mov [es:timestr+3], ah
- mov [es:timestr+4], al
- mov al, dh
- mov ah, dh
- and al, 0x0F
- shr ah, 4
- add al, 0x30
- add ah, 0x30
- mov [es:timestr+6], ah
- mov [es:timestr+7], al
- mov ah, 13h
- mov bp, timestr
- mov dh, 0
- mov dl, 71
- xor al,al
- mov cx, timelen
- int 10h
- pop dx
- mov cx, 1
- mov bh, 0
- ret
- prdate:
- push dx
- mov ah, 04h
- int 1ah
- mov al, dl
- mov ah, dl
- and al, 0x0F
- shr ah, 4
- add al, 0x30
- add ah, 0x30
- mov [es:datestr], ah
- mov [es:datestr+1], al
- mov al, dh
- mov ah, dh
- and al, 0x0F
- shr ah, 4
- add al, 0x30
- add ah, 0x30
- mov [es:datestr+3], ah
- mov [es:datestr+4], al
- mov al, ch
- mov ah, ch
- and al, 0x0F
- shr ah, 4
- add al, 0x30
- add ah, 0x30
- mov [es:datestr+6], ah
- mov [es:datestr+7], al
- mov al, cl
- mov ah, cl
- and al, 0x0F
- shr ah, 4
- add al, 0x30
- add ah, 0x30
- mov [es:datestr+8], ah
- mov [es:datestr+9], al
- mov ah, 13h
- mov bp, datestr
- mov dh, 0
- mov dl, 70
- xor al,al
- mov cx, datelen
- int 10h
- pop dx
- mov cx, 1
- mov bh, 0
- ret
- prcpuinf:
- push dx
- mov eax, 80000002h
- cpuid
- mov [es:cpuinfo+0], eax
- mov [es:cpuinfo+4], ebx
- mov [es:cpuinfo+8], ecx
- mov [es:cpuinfo+12], edx
- mov eax, 80000003h
- cpuid
- mov [es:cpuinfo+16], eax
- mov [es:cpuinfo+20], ebx
- mov [es:cpuinfo+24], ecx
- mov [es:cpuinfo+28], edx
- mov eax, 80000004h
- cpuid
- ; jmp prnt
- mov [es:cpuinfo+32], eax
- mov [es:cpuinfo+36], ebx
- mov [es:cpuinfo+40], ecx
- mov [es:cpuinfo+44], edx
- nop
- prnt:
- mov ah, 13h
- mov ecx, 48;cpulen
- mov bh, 0
- mov bl, 0x07
- mov dh, 3
- mov dl, 3
- mov bp, cpuinfo
- int 10h
- pop dx
- mov ecx, 1
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement