; NullOS v1.0 - 16-bit Kernel (512 bytes)
; RGB Pastel Terminal - Keyboard Only
[BITS 16]
[ORG 0x7C00]
jmp start

banner: db '╔══════════════════════════════╗',13,10
       db '║  NULLOS RGB PASTEL TERMINAL  ║',13,10
       db '║  h=help w=wifi s=scan b=ble   ║',13,10
       db '║  u=usb r=rf n=net t=tb       ║',13,10
       db '║  TAB=panels KEYBOARD ONLY     ║',13,10
       db '║  ⚠ SEC LAB AUTHORIZED ONLY ⚠ ║',13,10
       db '╚══════════════════════════════╝',13,10,0

prompt: db 'nullos> ',0

tabs: dw t0,t1,t2,t3
t0: db '[TERM]',0
t1: db '[SET]',0
t2: db '[GUIDE]',0
t3: db '[TOOLS]',0

help_h: db 13,10,'h=HELP c=CLS w=WIFI s=SCAN b=BLE u=USB r=RF n=NET t=TB',13,10,0
wifi_h: db 13,10,'[WIFI] airmon/airodump/aireplay/deauth/handshake/pmkid',13,10,0
scan_h: db 13,10,'[SCAN] nmap -sS -sV 10.0.0.0/24',13,10,0
ble_h: db 13,10,'[BLE] hcitool/gatttool/btlejuice/glitch',13,10,0
usb_h: db 13,10,'[USB] rubberducky/teensy/badusb/hidinject',13,10,0
rf_h: db 13,10,'[RF] rtl-sdr/gqrx/433/915/replay/jam',13,10,0
net_h: db 13,10,'[NET] ettercap/mitmproxy/arp-spoof/dns-spoof',13,10,0
tb_h: db 13,10,'[TB4] DMA/pcileech/REQUIRES THUNDERBOLT 4',13,10,0
unk: db 'Unknown. h for help.',13,10,0
crlf: db 13,10,0

start:
    mov ax,0x0003
    int 0x10
    mov si,banner
    call p

main:
    mov si,prompt
    call p
    xor di,di

rd:
    xor ah,ah
    int 0x16
    cmp al,13
    je cmd
    cmp al,8
    je bs
    cmp al,9
    je tab
    cmp di,31
    je rd
    mov ah,0x0E
    int 0x10
    mov [buf+di],al
    inc di
    jmp rd

bs:
    cmp di,0
    je rd
    dec di
    mov ah,0x0E
    mov al,8
    int 0x10
    mov al,' '
    int 0x10
    mov al,8
    int 0x10
    jmp rd

tab:
    mov si,crlf
    call p
    mov al,[tab]
    inc al
    and al,3
    mov [tab],al
    shl al,1
    xor ah,ah
    mov bx,tabs
    add bx,ax
    mov si,[bx]
    call p
    mov si,crlf
    call p
    jmp main

cmd:
    mov byte [buf+di],0
    cmp byte [buf],0
    je main
    mov al,[buf]
    cmp al,'h'
    je hp
    cmp al,'c'
    je clr
    cmp al,'w'
    je wf
    cmp al,'s'
    je sc
    cmp al,'b'
    je bl
    cmp al,'u'
    je us
    cmp al,'r'
    je rf
    cmp al,'n'
    je nt
    cmp al,'t'
    je tb
    mov si,unk
    call p
    jmp main

hp: mov si,help_h jmp pdone
clr: mov ax,0x0003 int 0x10 mov si,banner jmp pdone
wf: mov si,wifi_h jmp pdone
sc: mov si,scan_h jmp pdone
bl: mov si,ble_h jmp pdone
us: mov si,usb_h jmp pdone
rf: mov si,rf_h jmp pdone
nt: mov si,net_h jmp pdone
tb: mov si,tb_h
pdone:
    call p
    jmp main

p:
    lodsb
    cmp al,0
    je .r
    mov ah,0x0E
    int 0x10
    jmp p
.r: ret

tab: db 0
buf: times 32 db 0

times 510-($-$$) db 0
dw 0xAA55