home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / r / root.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  5.9 KB  |  250 lines

  1.  
  2.  
  3. PAGE  59,132
  4.  
  5.  
  6.  
  7. ;██████████████████████████████████████████████████████████████████████████
  8.  
  9. ;██                                         ██
  10.  
  11. ;██                    ROOT                         ██
  12.  
  13. ;██                                         ██
  14.  
  15. ;██      Created:   30-Aug-92                             ██
  16.  
  17. ;██      Passes:    5           Analysis Options on: none             ██
  18.  
  19. ;██                                         ██
  20.  
  21. ;██████████████████████████████████████████████████████████████████████████
  22.  
  23.  
  24.  
  25. data_0001e    equ    78h
  26.  
  27. data_0002e    equ    7C0Bh            ;*
  28.  
  29. data_0003e    equ    7C0Dh            ;*
  30.  
  31. data_0004e    equ    7C0Eh            ;*
  32.  
  33. data_0005e    equ    7C10h            ;*
  34.  
  35. data_0006e    equ    7C11h            ;*
  36.  
  37. data_0007e    equ    7C13h            ;*
  38.  
  39. data_0008e    equ    7C15h            ;*
  40.  
  41. data_0009e    equ    7C16h            ;*
  42.  
  43. data_0010e    equ    7C18h            ;*
  44.  
  45. data_0011e    equ    7C1Ah            ;*
  46.  
  47. data_0012e    equ    7C1Ch            ;*
  48.  
  49. data_0013e    equ    7C1Eh            ;*
  50.  
  51. data_0014e    equ    7C20h            ;*
  52.  
  53. data_0015e    equ    7C24h            ;*
  54.  
  55. data_0016e    equ    7C25h            ;*
  56.  
  57. data_0017e    equ    7C3Eh            ;*
  58.  
  59. data_0018e    equ    7C49h            ;*
  60.  
  61. data_0019e    equ    7C4Bh            ;*
  62.  
  63. data_0020e    equ    7C4Dh            ;*
  64.  
  65. data_0021e    equ    7C4Fh            ;*
  66.  
  67. data_0022e    equ    7C50h            ;*
  68.  
  69. data_0023e    equ    7C52h            ;*
  70.  
  71. data_0024e    equ    7D9Eh            ;*
  72.  
  73. data_0025e    equ    7DE6h            ;*
  74.  
  75.  
  76.  
  77. seg_a        segment    byte public
  78.  
  79.         assume    cs:seg_a, ds:seg_a
  80.  
  81.  
  82.  
  83.  
  84.  
  85.         org    100h
  86.  
  87.  
  88.  
  89. root        proc    far
  90.  
  91.  
  92.  
  93. start:
  94.  
  95.         jmp    short loc_0002
  96.  
  97.         db    90h
  98.  
  99.         db    'MSDOS5.0'
  100.  
  101.         db     00h, 02h, 04h, 01h, 00h, 02h
  102.  
  103.         db     00h, 02h,0FEh,0EFh,0F8h, 3Ch
  104.  
  105.         db     00h, 11h, 00h, 0Fh, 00h, 11h
  106.  
  107.         db    7 dup (0)
  108.  
  109.         db     80h, 00h, 29h, 27h, 45h, 08h
  110.  
  111.         db     19h
  112.  
  113.         db    'MS-DOS_5   FAT16   '
  114.  
  115. loc_0002:
  116.  
  117.         cli                ; Disable interrupts
  118.  
  119.         xor    ax,ax            ; Zero register
  120.  
  121.         mov    ss,ax
  122.  
  123.         mov    sp,7C00h
  124.  
  125.         push    ss
  126.  
  127.         pop    es
  128.  
  129.         mov    bx,data_0001e
  130.  
  131.         lds    si,dword ptr ss:[bx]    ; Load 32 bit ptr
  132.  
  133.         push    ds
  134.  
  135.         push    si
  136.  
  137.         push    ss
  138.  
  139.         push    bx
  140.  
  141.         mov    di,data_0017e
  142.  
  143.         mov    cx,0Bh
  144.  
  145.         cld                ; Clear direction
  146.  
  147.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  148.  
  149.         push    es
  150.  
  151.         pop    ds
  152.  
  153.         mov    byte ptr [di-2],0Fh
  154.  
  155.         mov    cx,ds:data_0010e
  156.  
  157.         mov    [di-7],cl
  158.  
  159.         mov    [bx+2],ax
  160.  
  161.         mov    word ptr [bx],7C3Eh
  162.  
  163.         sti                ; Enable interrupts
  164.  
  165.         int    13h            ; Disk  dl=drive a  ah=func 00h
  166.  
  167.                         ;  reset disk, al=return status
  168.  
  169.         jc    loc_0004        ; Jump if carry Set
  170.  
  171.         xor    ax,ax            ; Zero register
  172.  
  173.         cmp    ds:data_0007e,ax
  174.  
  175.         je    loc_0003        ; Jump if equal
  176.  
  177.         mov    cx,ds:data_0007e
  178.  
  179.         mov    ds:data_0014e,cx
  180.  
  181. loc_0003:
  182.  
  183.         mov    al,ds:data_0005e
  184.  
  185.         mul    word ptr ds:data_0009e    ; ax = data * ax
  186.  
  187.         add    ax,ds:data_0012e
  188.  
  189.         adc    dx,ds:data_0013e
  190.  
  191.         add    ax,ds:data_0004e
  192.  
  193.         adc    dx,0
  194.  
  195.         mov    ds:data_0022e,ax
  196.  
  197.         mov    ds:data_0023e,dx
  198.  
  199.         mov    ds:data_0018e,ax
  200.  
  201.         mov    ds:data_0019e,dx
  202.  
  203.         mov    ax,20h
  204.  
  205.         mul    word ptr ds:data_0006e    ; ax = data * ax
  206.  
  207.         mov    bx,ds:data_0002e
  208.  
  209.         add    ax,bx
  210.  
  211.         dec    ax
  212.  
  213.         div    bx            ; ax,dx rem=dx:ax/reg
  214.  
  215.         add    ds:data_0018e,ax
  216.  
  217.         adc    word ptr ds:data_0019e,0
  218.  
  219.         mov    bx,500h
  220.  
  221.         mov    dx,ds:data_0023e
  222.  
  223.         mov    ax,ds:data_0022e
  224.  
  225.         call    sub_0002
  226.  
  227.         jc    loc_0004        ; Jump if carry Set
  228.  
  229.         mov    al,1
  230.  
  231.         call    sub_0003
  232.  
  233.         jc    loc_0004        ; Jump if carry Set
  234.  
  235.         mov    di,bx
  236.  
  237.         mov    cx,0Bh
  238.  
  239.         mov    si,data_0025e
  240.  
  241.         repe    cmpsb            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  242.  
  243.         jnz    loc_0004        ; Jump if not zero
  244.  
  245.         lea    di,[bx+20h]        ; Load effective addr
  246.  
  247.         mov    cx,0Bh
  248.  
  249.         repe    cmpsb            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  250.  
  251.         jz    loc_0006        ; Jump if zero
  252.  
  253. loc_0004:
  254.  
  255.         mov    si,data_0024e
  256.  
  257.         call    sub_0001
  258.  
  259.         xor    ax,ax            ; Zero register
  260.  
  261.         int    16h            ; Keyboard i/o  ah=function 00h
  262.  
  263.                         ;  get keybd char in al, ah=scan
  264.  
  265.         pop    si
  266.  
  267.         pop    ds
  268.  
  269.         pop    word ptr [si]
  270.  
  271.         pop    word ptr [si+2]
  272.  
  273.         int    19h            ; Bootstrap loader
  274.  
  275. loc_0005:
  276.  
  277.         pop    ax
  278.  
  279.         pop    ax
  280.  
  281.         pop    ax
  282.  
  283.         jmp    short loc_0004
  284.  
  285. loc_0006:
  286.  
  287.         mov    ax,[bx+1Ah]
  288.  
  289.         dec    ax
  290.  
  291.         dec    ax
  292.  
  293.         mov    bl,ds:data_0003e
  294.  
  295.         xor    bh,bh            ; Zero register
  296.  
  297.         mul    bx            ; dx:ax = reg * ax
  298.  
  299.         add    ax,ds:data_0018e
  300.  
  301.         adc    dx,ds:data_0019e
  302.  
  303.         mov    bx,700h
  304.  
  305.         mov    cx,3
  306.  
  307.  
  308.  
  309. locloop_0007:
  310.  
  311.         push    ax
  312.  
  313.         push    dx
  314.  
  315.         push    cx
  316.  
  317.         call    sub_0002
  318.  
  319.         jc    loc_0005        ; Jump if carry Set
  320.  
  321.         mov    al,1
  322.  
  323.         call    sub_0003
  324.  
  325.         pop    cx
  326.  
  327.         pop    dx
  328.  
  329.         pop    ax
  330.  
  331.         jc    loc_0004        ; Jump if carry Set
  332.  
  333.         add    ax,1
  334.  
  335.         adc    dx,0
  336.  
  337.         add    bx,ds:data_0002e
  338.  
  339.         loop    locloop_0007        ; Loop if cx > 0
  340.  
  341.  
  342.  
  343.         mov    ch,ds:data_0008e
  344.  
  345.         mov    dl,ds:data_0015e
  346.  
  347.         mov    bx,ds:data_0018e
  348.  
  349.         mov    ax,ds:data_0019e
  350.  
  351. ;*        jmp    far ptr loc_0001    ;*
  352.  
  353.         db    0EAh, 00h, 00h, 70h, 00h
  354.  
  355.  
  356.  
  357. root        endp
  358.  
  359.  
  360.  
  361. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  362.  
  363. ;                   SUBROUTINE
  364.  
  365. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  366.  
  367.  
  368.  
  369. sub_0001    proc    near
  370.  
  371. loc_0008:
  372.  
  373.         lodsb                ; String [si] to al
  374.  
  375.         or    al,al            ; Zero ?
  376.  
  377.         jz    loc_ret_0010        ; Jump if zero
  378.  
  379.         mov    ah,0Eh
  380.  
  381.         mov    bx,7
  382.  
  383.         int    10h            ; Video display   ah=functn 0Eh
  384.  
  385.                         ;  write char al, teletype mode
  386.  
  387.         jmp    short loc_0008
  388.  
  389.  
  390.  
  391. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  392.  
  393.  
  394.  
  395. sub_0002:
  396.  
  397.         cmp    dx,ds:data_0010e
  398.  
  399.         jae    loc_0009        ; Jump if above or =
  400.  
  401.         div    word ptr ds:data_0010e    ; ax,dxrem=dx:ax/data
  402.  
  403.         inc    dl
  404.  
  405.         mov    ds:data_0021e,dl
  406.  
  407.         xor    dx,dx            ; Zero register
  408.  
  409.         div    word ptr ds:data_0011e    ; ax,dxrem=dx:ax/data
  410.  
  411.         mov    ds:data_0016e,dl
  412.  
  413.         mov    ds:data_0020e,ax
  414.  
  415.         clc                ; Clear carry flag
  416.  
  417.         retn
  418.  
  419. loc_0009:
  420.  
  421.         stc                ; Set carry flag
  422.  
  423.  
  424.  
  425. loc_ret_0010:
  426.  
  427.         retn
  428.  
  429. sub_0001    endp
  430.  
  431.  
  432.  
  433.  
  434.  
  435. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  436.  
  437. ;                   SUBROUTINE
  438.  
  439. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  440.  
  441.  
  442.  
  443. sub_0003    proc    near
  444.  
  445.         mov    ah,2
  446.  
  447.         mov    dx,ds:data_0020e
  448.  
  449.         mov    cl,6
  450.  
  451.         shl    dh,cl            ; Shift w/zeros fill
  452.  
  453.         or    dh,ds:data_0021e
  454.  
  455.         mov    cx,dx
  456.  
  457.         xchg    ch,cl
  458.  
  459.         mov    dl,ds:data_0015e
  460.  
  461.         mov    dh,ds:data_0016e
  462.  
  463.         int    13h            ; Disk  dl=drive ?  ah=func 02h
  464.  
  465.                         ;  read sectors to memory es:bx
  466.  
  467.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  468.  
  469.         retn
  470.  
  471. sub_0003    endp
  472.  
  473.  
  474.  
  475.         db    0Dh, 0Ah, 'Non-System disk or dis'
  476.  
  477.         db    'k error', 0Dh, 0Ah, 'Replace and'
  478.  
  479.         db    ' press any key when ready', 0Dh, 0Ah
  480.  
  481.         db    0
  482.  
  483.         db    'IO      SYSMSDOS   SYS'
  484.  
  485.         db     00h, 00h, 55h,0AAh
  486.  
  487.  
  488.  
  489. seg_a        ends
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.         end    start
  498.  
  499.