home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / hdno / hack24.asm < prev    next >
Assembly Source File  |  1987-05-16  |  2KB  |  117 lines

  1.  
  2. ;  hack24.asm  tmn  5/1/87
  3.  
  4. ;  An example of a small resident critical error handler.
  5.  
  6. ;  Assemble with
  7.  
  8. ;    MASM HACK24;
  9. ;    LINK HACK24;
  10. ;    DEL HACK24.OBJ
  11. ;    EXE2COM HACK24
  12. ;    DEL HACK24.EXE
  13.  
  14. cseg    segment
  15.  
  16.         org 12h
  17. han_p   dd ?
  18.  
  19.         org 100h
  20.  
  21.         assume cs:cseg, ds:nothing
  22.  
  23. entry   label far
  24.         jmp install
  25.  
  26. ;  This substitute handler doesn't do much - just exits with
  27. ;  return code 3 (DOS 3.x only) to make the DOS CALL in question
  28. ;  fail immediately with an 0053 error.  Under earlier versions
  29. ;  of DOS all we do is exit with rc=0.
  30.  
  31. dos_vsn db ?
  32.  
  33. newint24 label far
  34.         sti
  35.         cmp dos_vsn,3
  36.         jb  v2x
  37.  
  38.         mov al,3
  39.         iret
  40.  
  41. v2x:    mov al,0
  42.         iret
  43.  
  44. end_of_res:
  45.  
  46. ;  Data areas.  Everything starting here is discarded when we
  47. ;  issue the TSR call.
  48.  
  49. pat_code equ $
  50. pat_op  db 0eah                   ; JMPF opcode
  51. pat_off dw newint24
  52. pat_seg dw ?
  53. pat_size equ $-pat_code
  54.  
  55. inst_msg db 'Hack24: forces fail on critical errors. TMN 1-May-87'
  56.         db 0dh, 0ah, '$'
  57.  
  58. vers_msg db 'Hack24 requires DOS 2.0 or later'
  59.         db 0dh, 0ah, '$'
  60.  
  61.         assume ds:cseg
  62.  
  63. ;  Mainline
  64.  
  65. install:
  66.         mov ah,30h                ; Save major version
  67.         int 21h
  68.         mov dos_vsn,al            
  69.         cmp al,2                  ; need at least 2.0
  70.         jae ok
  71.  
  72.         mov dx,offset vers_msg    ; complain
  73.         mov ah,09h
  74.         int 21h
  75.  
  76.         mov al,1                  ; exit with errorlevel 1
  77.         mov ah,04ch
  78.         int 21h
  79.  
  80. ok:
  81.         mov dx,offset inst_msg    ; display installation msg
  82.         mov ah,09h
  83.         int 21h
  84.  
  85. ;  Patch COMMAND.COM's own INT 24H handler to jump to us
  86.  
  87.         mov ax,cs                 ; we patch segment
  88.         mov pat_seg,ax
  89.  
  90.         mov si,offset pat_code    ; ds already -> cseg
  91.         les di,han_p
  92.         mov cx,pat_size
  93.         cld
  94.         cli
  95.         rep movsb                 ; patch DOS to jump to us
  96.         sti
  97.  
  98. ;  Now terminate and stay resident
  99.  
  100.         mov ax,offset end_of_res  ; compute paras to reserve
  101.         add ax,0fh
  102.         shr ax,1
  103.         shr ax,1
  104.         shr ax,1
  105.         shr ax,1
  106.  
  107.         mov dx,ax                 ; preferred TSR method
  108.         mov ah,31h
  109.         mov al,0
  110.         int 21h
  111.  
  112. cseg    ends
  113. end     entry
  114.  
  115.  
  116.  
  117.