Fundamentals 37 min read

Uncovering Lei Jun’s 22‑Year‑Old DOS TSR Code: A Deep Dive into Legacy Assembly

The article recounts Xiaomi founder Lei Jun’s early passion for programming, showcases the full assembly source of his 22‑year‑old RI/TSR utility, and reflects on his enduring love for low‑level software development while illustrating the code with historic screenshots.

Programmer DD
Programmer DD
Programmer DD
Uncovering Lei Jun’s 22‑Year‑Old DOS TSR Code: A Deep Dive into Legacy Assembly

Lei Jun, the founder, chairman and CEO of Xiaomi, began his career as a programmer and spent a decade writing code before moving into product management. An online discussion sparked curiosity about his programming skills, leading to the discovery and publication of a complete assembly program he wrote 22 years ago.

The program, titled RI.ASM , is a DOS TSR (Terminate‑and‑Stay‑Resident) utility that can remove other TSRs and manage keyboard hot‑keys. It includes extensive comments, version history, and routines for handling interrupts, memory management, and hardware initialization. Below is the full source code as originally written:

;
; RI.ASM Revision 2.12 [ July 12, 1994 ]
Revision equ 'V2.12 '
;
;  RAMinit Release 2.0 
;  Copyright (c) 1989-1994 by Yellow Rose Software Co.
;  Written by Mr. Leijun
;
;  Function:
;  Press HotKey to remove all TSR program after this program
;
; ..........................................................................
; Removed Softwares by RI:
; SPDOS v6.0F, WPS v3.0F
; Game Busters III, IV
; NETX ( Novell 3.11 )
; PC-CACHE
; Norton Cache
; Microsoft SmartDrv
; SideKick 1.56A
; MOUSE Driver
; Crazy (Monochrome simulate CGA program)
; RAMBIOS v2.0
; 386MAX Version 6.01
; ..........................................................................
; No cancel softwares:
; Windows 3.1 MSD
;
; No removed TSR softwares:
; MS-DOS fastopen
; Buffers, Files ... (QEMM 6.0)
; QCache (386MAX 6.01)
; ..........................................................................
COMMENT

V2.04 Use mouse driver software reset function to initiation mouse
2/17/1993 by Mr. Lei and Mr. Feng
V2.05 RI cannot work in Windows DOS prompt
3/9/1993 by Mr. Lei
V2.06 1. When XMS cannot allocate 1K memory, RI halts.
2. RI repeat deallocates EMS memory.
V2.07 HotKey Setup Error
4/25/1993 by Mr. Lei
V2.08 KB Buffer
V2.10 1. Release high memory blocks (EMM386 QEMM386 S-ICE 386MAX)
2. RI copies flag
V2.12 1. Exists a critical error in Init 8259 procedure
2. Save [40:F0--FF] user data area

dosseg
.model tiny
.code
locals @@
org 100h

Start: jmp Main
org 103h

True equ 1
False equ 0
MaxHandles equ 100h

INT3 macro
    out 0ffh,al
endm
;
; HotKey Status Test Var
; --------------- ---------------
;
; 7 6 5 4 3 2 1 0 417 418 496
; . . x . x . . . Left Alt is pressed 8 2
; x . . . x . . . Right Alt is pressed 8 8
; . . . x . x . . Left Ctrl is pressed 4 1
; . x . . . x . . Right Ctrl is pressed 4 4
; . . . . . . x . Left Shift is pressed 2
; . . . . . . . x Right Shift is pressed 1
;
LeftAlt equ 00101000b
RightAlt equ 10001000b
LeftCtrl equ 00010100b
RightCtrl equ 01000100b
LeftShift equ 00000010b
RightShift equ 00000001b
HotKey db LeftCtrl or RightCtrl

DataBegin dw 0
NextDataSeg dw 0fffh
oldInt2F_addr dw 0, 0
XMS_control dw 0, 0
Handle_begin dw 0
cvtOfs dw 0 ; DOS 3.0 equ 0 and above DOS 4.0 is 1
org 104h

db 0dh

db Revision

db ??date

db 26
org 114h
ts rLength dw 0
MachineID db 0Fh ; IBM PC/AT

AuxHotKey db 0 ; 2Dh ; 'X' Scan Code
AuxHotKeyName db 'X$ '
Power db True
Flag db '!'
Kbd102 db 0
NoFlag db 0
StopFlag db 1
DosEnv dw 0
WorkSeg dw 0
PrevDataSeg dw 0
Copies db '1'
old_8259 db 0 ; 21h port

db 0 ; a1h port

Status dw 0
XMSbit equ 00000001b
EMSbit equ 00000010b
SKbit equ 10000000b

GoINT1C: db 0
eah
oldInt1C_addr dw 0, 0
newINT1C:
    test cs:Status, SKbit
    jnz GoINT1C
    cmp cs:StopFlag, 0
    jz @@0
    ;
    ; Mr. Lei 2/8/1993
    ; Problem: if WPS quit and reenter, old RI cann't control keyboard.
    push ds
    push ax
    xor ax, ax
    mov ds, ax
    mov ax, ds:[94]
    cmp ax, offset NewInt9
    pop ax
    pop ds
    jnz GoINT1C
    mov cs:StopFlag, 0
@@0:
    push ax
    push ds
    push es
    xor ax, ax
    mov ds, ax
    mov es, ds:[94+2]
    cmp word ptr es:[101h], 'IE' ; 'LEI'
    jz @@1
    cli
    mov cs:StopFlag, 1
    mov ax, ds:[94]
    mov cs:oldINT9_addr2, ax
    mov ax, ds:[94+2]
    mov cs:oldINT9_addr2[2], ax
    mov ds:[94], offset newINT9_2
    mov ds:[94+2], cs
    sti
@@1:
    pop es
    pop ds
    pop ax
    jmp GoINT1C

; ----------------------------------------------------------------------
; INT2F Func
;
; AX = C0D7h Return RI segment in AX
; AX = C0D8h Removes all TSR programs after RI
; AX = C0D9h Removes all TSR programs include RI
; AX = C0DAh Removes all RI copies
; ----------------------------------------------------------------------
newINT2F:
    cmp ax, 0c0d7h ; LEI Hanzi GB Code
    jnz @@1
    push cs
    pop ax
    iret
@@1:
    cmp ax, 0c0d7h+1
    jnz @@2
    jmp KeepSelf
@@2:
    cmp ax, 0c0d7h+2
    jnz @@3
    jmp NoKeepSelf
@@3:
    cmp ax, 0c0d7h+3
    jnz @@9
    mov cs:NextDataSeg, -1
    mov cs:Copies, '1'
    jmp NoKeepSelf
@@9:
    jmp dword ptr cs:oldInt2F_addr

CallInt9:
    ret

newINT9_2:
    mov cs:NoFlag, 1
    pushf
    db 9ah ; call far ptr oldint9_addr
oldInt9_Addr2 dw 0, 0
    jmp newINT9_proc

newINT9:
    pushf
    db 9ah ; call far ptr oldint9_addr
oldInt9_Addr dw 0, 0
    cmp cs:NoFlag, 0
    jz newINT9_proc
    mov cs:NoFlag, 0
    iret
newINT9_proc:
    cmp cs:Flag, '!'
    jnz @@0
    iret
@@0:
    mov cs:Flag, '!'
    push ax
    push bx
    push es
    mov ax,40h
    mov es,ax
    cmp cs:AuxHotKey, 0
    jz @@_1
    mov bx, es:[1ah]
    cmp bx, es:[1ch]
    jz @@10
    push bx
    mov bl, es:[bx+1]
    cmp bl, cs:AuxHotKey
    pop bx
    jnz @@10
@@_1:
    mov ah,es:[17h] ; test CTRL SHIFT ALT
    mov al,cs:HotKey
    push ax
    and ax,0f0fh
    cmp al,ah
    pop ax
    jnz @@10
    cmp cs:Kbd102, True
    jnz @@1
    shr al, 1
    shr al, 1
    shr al, 1
    shr al, 1
    push ax
    mov ah, es:[18h]
    and ax,303h
    cmp al, ah
    pop ax
    jnz @@10
    mov ah, es:[96h]
    shr ax, 1
    shr ax, 1
    and ax,303h
    cmp al, ah
    jnz @@10
    cmp cs:AuxHotKey, 0
    jz @@_3
    inc bx
    inc bx
    cmp bx, 3eh
    jb @@_2
    mov bx, 1eh
@@_2:
    mov es:[1ah], bx
@@_3:
    call IsWinDos
    or ax, ax
    jz @@1
    call Beep
@@10:
    sti
    pop es
    pop bx
    pop ax
    mov cs:Flag, ' '
    iret
@@1:
    ; OK
    pop es
    pop bx
    pop ax

KeepSelf:
    call RemoveTSR
    push es
    mov es,cs:WorkSeg
    mov dx,es:tsrLength
    mov di,dx
    mov al,0h ; Aug 24, 1993
    mov cx,100h
    rep stosb
    pop es
    int 27h

NoKeepSelf:
    mov ax,0e07h
    int 10h
    mov cs:clsStr, 47h ; Color (White in Red)
    call RemoveTSR
    dec cs:Copies
    call RestoreSelfIntVec
    push es
    cmp cs:PrevDataSeg, 0
    jz @@1
    mov es, cs:PrevDataSeg
    mov es:NextDataSeg, -1
@@1:
    pop es
    mov ax, 4c00h
    int 21h

; ---------------------------------------------------------------------------
IsWinDOS:
    mov ax, 1600h
    int 2fh
    cmp al, 01h
    jz @@9
    cmp al, 0fh
    jz @@9 ; Windows/386 Version 2.X
    cmp al, 00h
    jz @@1
    cmp al, 80h
    jnz @@9 ; Windows 3 in enhanced mode
    ; Version number in AL/AH
@@1:
    mov ax, 4680h
    int 2fh
    cmp al, 80h
    jnz @@9
    xor ax, ax
    jmp @@10
@@9:
    mov ax, 1
@@10:
    ret

; -----------------------------------------------------------------------
RestoreSelfIntVec:
    cmp Copies, '0'
    jz @@0
    ret
@@0:
    cli
    push cs
    pop ds
    xor ax, ax
    mov es, ax
    mov si, offset oldInt9_Addr
    mov di, 94h
    movsw
    movsw
    mov si, offset oldInt2F_Addr
    mov di, 2F4h
    movsw
    movsw
    mov si, offset oldInt1C_Addr
    mov di, 1Ch4h
    movsw
    movsw
    sti
    ret

; ------------- KERNEL PROGRAM ----------------------------------------------
RemoveTSR:
    pop ax
    cli ; Set stack
    mov sp, cs
    mov ss, sp
    mov sp, 100h
    sti
    push ax
    cmp cs:Power, True
    jnz @@1
    call Init8259
@@1:
    push cs
    pop ds
    @@_0:
        mov ax,ds:NextDataSeg
        cmp ax, -1
        jz @@_1
        mov cs:PrevDataSeg, ds
        mov ds, ax
        jmp @@_0
    @@_1:
        mov si,ds:DataBegin
        mov cs:WorkSeg, ds
        lodsw
        cmp ax, 'XX'
        jz @@_2
        call Beep
        ret
    @@_2:
        call RestoreEnvStr
        call RestoreMCB ; restore current mcb
        call CloseFiles
        call RestorePort
        call RestoreLEDs
        call RestoreVecList ; Restore vectors list
        call RestoreFloppyParam
        cmp cs:Power, True
        jnz @@2
        call RestoreCVTchain ; Restore cvt chain
        call RestoreMemoryManager
@@2:
        call RestoreBiosData
        call Enable8259
        mov ah, 1
        int 16h
        call RestoreClockSpeed
        call CloseSpeaker
        call ResetDisk
        call UpdateTime
        call ClosePRN
        mov bx,cs:WorkSeg
        mov ah,50h
        int 21h
        mov ax,3 int 10h ; Set display mode
        call InitPRN
        call InitMouse
        mov al, cs:Copies
        cmp al, '1'
        ja @@sh1
        mov cs:ShowCopies, ''
        jmp @@sh2
    @@sh1:
        mov cs:ShowCopies, al
    @@sh2:
        mov si, offset clsStr
        call ColorPrintStr
        mov cs:Flag, ' '
        cmp Copies, '1'
        jnz @@_end
        mov cs:StopFlag, 0
    @@_end:
        call ClearKB_Buffer
        ret

Beep:
    mov ax,0e07h
    int 10h
    ret

; #########################################################################

ClearKB_Buffer:
    push es
    push bx
    mov bx, 0040h
    mov es, bx
    cli
    mov bx, es:[1ah]
    mov es:[1ch], bx
    sti
    pop bx
    pop es
    ret

Init8259:
    ; cmp cs:Copies, '1'
    ; jz @@1
    ; ret
@@1:
    cmp cs:MachineID, 0fch
    ja @@pc_xt
@@AT:
    mov bx,870h
    mov al,0
    out 0F1h,al
    jcxz $+2
    jcxz $+2
    mov al,11h ; ICW1
    out 0A0h,al
    jcxz $+2
    jcxz $+2
    out 20h,al
    jcxz $+2
    jcxz $+2
    mov al,bl ; ICW2
    out 0A1h,al
    jcxz $+2
    jcxz $+2
    mov al,bh
    out 21h,al
    jcxz $+2
    jcxz $+2
    mov al,2 ; ICW3
    out 0A1h,al
    jcxz $+2
    jcxz $+2
    mov al,4
    out 21h,al
    jcxz $+2
    jcxz $+2
    mov al,1 ; ICW4
    out 0A1h,al
    jcxz $+2
    jcxz $+2
    out 21h,al
    jcxz $+2
    jcxz $+2
    mov al,0FFh ; OCW1
    out 0A1h,al
    jcxz $+2
    jcxz $+2
    out 21h,al
    ret
@@pc_xt:
    mov al,13h ; ICW1
    out 20h,al
    jcxz $+2
    jcxz $+2
    mov al,8 ; ICW2
    out 21h,al
    jcxz $+2
    jcxz $+2
    mov al,9 ; ICW4
    out 21h,al
    jcxz $+2
    jcxz $+2
    mov al,0FFh ; OCW1
    out 21h,al
    ret

Enable8259:
    mov ax, word ptr cs:old_8259
    out 021h,ax
    jcxz $+2
    jcxz $+2
    mov al,ah
    out 0a1h,al ; DEC PC Bus Mouse
    ret ; July 1994 by Mr. Lei

; -------------------------------------------------------------------------
RestoreBiosData:
    mov ax, '--'
    stosw
    push ds
    push si
    mov si, 40h
    mov ds, si
    mov si, 10h
    movsw
    mov si, 0a8h
    movsw
    movsw
    mov si, 49h
    mov cx, 1dh
    rep movsb
    mov si, 0f0h
    mov cx, 8
    rep movsw
    pop si
    pop ds
    ret

; ---------------------------------------------------------------------------
RestoreMCB:
    push ds
    push es
    lodsw ; 'MZ'
@@0:
    lodsw
    cmp ax, 'MM'
    jz @@1
    mov es,ax
    xor di,di
    movsb
    movsw
    movsw
    inc ax
    mov bx, ds
    cmp ax, bx
    jz @@10
    mov byte ptr es:[8], 0 ; Aug 24, 1993
@@10:
    cmp byte ptr es:[0], 'Z'
    jnz @@0
    mov byte ptr es:[10h], 0
    jmp @@0
@@1:
    pop es
    pop ds
    ret

; -------------------------------------------------------------------------
CloseFiles:
    mov ax, 5 ; Begin handle
    push ds
    push si
    mov cx, 15 ; Max handle
    sub cx, ax
    inc cx
    mov bx, ax
@@1:
    push bx
    push cx
    mov ah, 3eh
    int 21h
    pop cx
    pop bx
    inc bx
    loop @@1
    pop si
    pop ds
    ret

; -------------------------------------------------------------------------
RestorePort:
    mov di, 40h ; restore port
    mov es, di
    xor di, di
    mov cx, 8
    rep movsw
    ret

; -------------------------------------------------------------------------
RestoreLEDs:
    lodsb
    and al, 11110000b ; LED status
    mov ah, es:[17h]
    and ah, 00001111b
    or ah, al
    and ah, 0f0h ; Clear CTRL ALT SHIFT
    mov es:[17h], ah
    ret

; -------------------------------------------------------------------------
RestoreEnvStr:
    lodsw
    push si
    push di
    push ds
    push es
    mov es, cs:DosEnv
    mov ds, ax
    xor si, si
    xor di, di
@@0:
    lodsb
    or al, al
    jnz @@1
    cmp byte ptr ds:[si], 0
    jz @@2
    @@1:
        stosb
        jmp @@0
    @@2:
        stosb
        stosb
    pop es
    pop ds
    pop di
    pop si
    ret

; -----------------------------------------------------------------------
RestoreVecList:
    xor ax,ax
    mov di,ax
    mov es,ax
    mov cx,100h
@@0:
    lodsw
    xchg dx, ax
    lodsw
    cmp dx, 'EL'
    jnz @@1
    cmp al, 'I'
    jnz @@1
    sub cl, ah
    push cx
    mov cl, ah
    mov ax, es:[di-4]
    mov dx, es:[di-2]
@@a:
    stosw
    xchg ax, dx
    stosw
    xchg ax, dx
    loop @@a
    pop cx
    or cx, cx
    jz @@9
    jmp @@0
@@1:
    xchg ax, dx
    stosw
    xchg ax, dx
    stosw
    loop @@0
@@9:
    ret

;----------------------------------------------------------------------------
RestoreFloppyParam:
    push es
    push ax
    xor ax, ax
    mov es, ax
    mov byte ptr es:[525h], 2
    pop ax
    pop es
    ret

;---------------------------------------------------------------------------
RestoreCVTchain:
    lodsw
    cmp ax, 'VC'
    jz @_0
    call Beep
    ret
@_0:
    push ax
    push cx
    push es
    ; DPB
    lodsw
    mov di, ax
    lodsw
    mov es, ax
@@1:
    lodsb
    inc di
    stosb
    add di, cs:cvtOfs
    add di, 10h
    movsw
    movsw
    les di, es:[di+2]
    cmp di, -1
    jnz @@1
    ; DCB
    lodsw
    mov di, ax
    lodsw
    mov es, ax
    xor ax, ax
    dec ax
    stosw
    ; Device Driver Chain
    lodsw
    mov di, ax
    lodsw
    mov es, ax
    xor cx, cx
@@9:
    push di
    mov cl, 5
    rep movsw
    pop di
    les di, es:[di]
    mov ax, di
    inc ax
    jnz @@9
    pop es
    pop cx
    pop ax
    ret

; ----------------------------------------------------------------------------
RestoreMemoryManager:
    test cs:Status, XMSbit
    jz @1
    call LoadXMSstatus
@1:
    test cs:Status, EMSbit
    jz @2
    call LoadEMSstatus
@2:
    ret

LoadEMSstatus:
    lodsw
    cmp ax, 'ME'
    jz @_0
    call Beep
    ret
@_0:
    lodsw
    mov cx, ax
    xor dx, dx
@_1:
    push ds
    push si
    push dx
    push cx
@0:
    cmp dx, ds:[si]
    jz @1
    add si, 4
    loop @0
    push cx
    mov cx, 5
@0:
    mov ah, 45h ; Deallocate Handle and Memory
    int 67h
    or ah, ah
    jz @1
    loop @0
@1:
    pop cx
    pop cx
    pop dx
    pop si
    pop ds
    inc dx
    cmp dx, 100h
    jb @_1
    shl cx, 1
    shl cx, 1
    add si, cx
    ret

LoadXMSstatus:
    lodsw
    cmp ax, 'MX'
    jz @_0
    call Beep
    ret
@_0:
    lodsw
    mov cx, ax
    jcxz @5
@1:
    lodsw
    mov dx, ax
@2:
    push dx
    mov ah, 0h ; free
    call dword ptr cs:xms_control
    or ax, ax
    pop dx
    jnz @4
    cmp bl, 0abh
    jnz @4
    push dx
    mov ah, 0dh ; unlock
    call dword ptr cs:xms_control
    or ax, ax
    pop dx
    jmp @2
@4:
    loop @1
@5:
    ret

CloseSpeaker:
    in al, 61h
    and al, 0fch
    out 61h, al
    ret

RestoreClockSpeed:
    mov al, 00110110b
    out 43h, al
    xor ax, ax
    out 40h, al
    out 40h, al
    ret

ResetDisk:
    xor ax, ax
    xor dx, dx
    int 13h ; Restore A
    inc dx
    int 13h ; Restore B
    mov dl, 80h
    int 13h ; Restore C
    ret

ClosePRN:
    mov ah, 51h ; Get PSP seg
    int 21h
    mov es, bx
    mov ax, es:[16h] ; Prev PSP seg
    cmp ax, bx
    jnz @9
    mov ax, 3e00h ; COMMAND
    mov bx, 4
    int 21h
@9:
    ret

InitPRN:
    mov ax, 3e00h
    mov bx, 4 ; PRN
    int 21h
    mov ax, 3d01h
    mov dx, offset PRNname
    push cs
    pop ds
    int 21h
    ret
PRNname db 'PRN',0

InitMouse:
    push es
    xor ax, ax
    mov es, ax
    cmp word ptr es:[33h4+2], 0
    jz @0
    cmp word ptr es:[33h4], 0
    jz @0
    mov ax, 21h
    int 33h ; Hook Mouse Interrupt
@0:
    pop es
    ret

UpdateTime:
    call GetRealTime
    mov ah, 2dh
    int 21h
    ret

GetRealTime:
    mov ah, 2 Ah
    int 1Ah
    mov al,ch
    call BCDxchg
    mov ch,al
    mov al,cl
    call BCDxchg
    mov cl,al
    mov al,dh
    call BCDxchg
    mov dh,al
    mov dl,0
    ret

BCDxchg:
    push ax
    push cx
    mov cl,4
    shr al,cl
    pop cx
    mov bl,0Ah
    mul bl
    pop bx
    and bl,0Fh
    add al,bl
    ret

ColorPrintStr:
    lodsb
    mov bh, al ; color
    xor cx, cx
    mov dx, 014fh
    mov ax, 0600h
    int 10h
    mov ah, 02h ; GotoXY (0,0)
    xor dx, dx
    mov bh, 0
    int 10h
PrintStr:
    push cs
    pop ds
    xor bx, bx
@@1:
    lodsb
    cmp al, '$'
    jz @@2
    or al, al
    jz @@2
    mov ah, 0eh
    int 10h
    jmp short @@1
@@2:
    mov al, cs:clsStrcolor
    mov cs:clsStr, al
    ret

Self dw 0
clsStrcolor db 17h
clsStr db 17h ; Color (White in Blue)
    db ' RAMinit Version 2.12 (c) 1989-1994 by KingSoft Ltd. Mr. Leijun'
    db 0dh,0ah,'$'
ShowCopies db ''
endTSR equ $

; ... (remaining code omitted for brevity) ...

Beyond the technical details, the article shares anecdotes about Lei Jun’s devotion to programming, his belief that coding is both a craft and an art, and stories of his early days mentoring developers, illustrating how his passion for software shaped his later leadership at Xiaomi.

Images included depict screenshots of the historic code and photos highlighting Lei Jun’s programming legacy.

Assemblylow-level programmingLegacy CodeDOSLei JunTSR
Programmer DD
Written by

Programmer DD

A tinkering programmer and author of "Spring Cloud Microservices in Action"

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.