home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / dskutl / hdsource.arc / HDFMT.ASM < prev    next >
Assembly Source File  |  1986-02-24  |  16KB  |  427 lines

  1.      PAGE     64,132            ;PAGE WIDTH,LENGTH
  2.      .SALL
  3.      TITLE     PC/AT DIAGNOSTIC - FORMAT ROUTINE
  4. ; **********************************************************************
  5. ; *                                       *
  6. ; *    MODULE NAME    HDFMT                           *
  7. ; *    AUTHOR           JIM BRACKING                       *
  8. ; *                                       *
  9. ; *    DECSRIPTION    THIS PROGRAM PERFORMS THE FOLLOWING           *
  10. ; *               FUNCTIONS:                       *
  11. ; *                                       *
  12. ; *               1. FORMATS HARD DISKS                   *
  13. ; *                                       *
  14. ; **********************************************************************
  15. ;
  16. ; **********************************************************************
  17. ; *            EXTERNAL PROGRAM REFERENCES               *
  18. ; **********************************************************************
  19.      EXTRN     SCRMGR:NEAR
  20. ; **********************************************************************
  21. ; *              EXTERNAL DATA REFERENCES               *
  22. ; **********************************************************************
  23.      INCLUDE HDDATA.ASM
  24. ; **********************************************************************
  25. ; *            EXTERNAL SUBROUTINE REFERENCES               *
  26. ; **********************************************************************
  27.      INCLUDE HDSUB.ASM
  28.      EXTRN     LOGERR:NEAR
  29. ; **********************************************************************
  30. ; *                PUBLIC DECLARES                   *
  31. ; **********************************************************************
  32.      PUBLIC  HDFMT
  33. ; **********************************************************************
  34. ; *                 MACROS                    *
  35. ; **********************************************************************
  36.      IF1
  37.      INCLUDE HD.MAC
  38.      INCLUDE \SCRMGR\SCRNWORK.MAC
  39.      ENDIF
  40. ; **********************************************************************
  41. ; *                                       *
  42. ; *                   BEGIN                       *
  43. ; *                                       *
  44. ; **********************************************************************
  45. CSEG     SEGMENT PARA PUBLIC 'CODE'
  46.      ASSUME CS:CSEG
  47. HDFMT  PROC    NEAR
  48.      ASSUME  DS:CSEG           ;DATA SEGMENT
  49.      JMP     BY_ID               ;JMP AROUND ID
  50.      ID     HDFMT
  51.      INCLUDE \SCRMGR\SCRNWORK.ASM
  52. ; **********************************************************************
  53. ; *             EQUATES AND STRUCTURES                *
  54. ; **********************************************************************
  55.      INCLUDE HDEQU.ASM
  56. ; **********************************************************************
  57. ; *                 SCREENS                   *
  58. ; **********************************************************************
  59.   SFIELD FM0,FM1,,@LABEL,RV+BLINK,14,34,' WARNING '
  60.   SFIELD FM1,FM2,,@LABEL,LO,15,18,'THIS WILL DESTROY ALL DATA ON THE HARD DISK'
  61.   SFIELD FM2,FM3,,@LABEL,LO,16,22,'REPLY Y TO CONTINUE OR N TO STOP -'
  62.   SFIELD FM3,FM0,,@YN+@UC+@NFULL+@REQ,LO,16,57,' '
  63.   SFIELD T05,T05,,@LABEL,RV,17,33,'FORMAT DRIVE'
  64. ;
  65.   SFIELD X00,X01,,@LABEL,RV,23,02,'CTRL-F1 TO START'
  66.   SFIELD X01,X02,,@LABEL,RV,23,29,'ESC FOR THE MAIN MENU'
  67.   SFIELD X02,X00,,@LABEL,RV,23,62,'CTRL-BRK TO STOP'
  68. ;
  69.   SFIELD XI0,XI1,,@LABEL,LO,19,05,'DRIVE =>'
  70.   SFIELD XI1,XI2,1,@EX+@NUM+@UC+@NFULL+@REQ,LO,19,14
  71.   SFIELD XI2,XI3A,,@LABEL,LO,20,05,'(1 OR 2)'
  72.   SFIELD XI3A,XI3B,,@LABEL,LO,21,05,'CLEAR DEFECTS =>'
  73.   SFIELD XI3B,XI3,1,@EX+@YN+@UC+@NFULL+@REQ,LO,21,22
  74.   SFIELD XI3,XI4,,@LABEL,LO,19,22,'INTERLEAVE =>'
  75.   SFIELD XI4,XI5,1,@EX+@NUM+@NFULL+@REQ,LO,19,36
  76.   SFIELD XI5,XI0,,@LABEL,LO,20,26,'(1-8)'
  77. ;
  78.   SFIELD XS0,XS1,,@LABEL,LO,19,46,'STATUS =>'
  79.   SFIELD XS1,XS0,,@LABEL,LO,19,56,'** IDLE **   '
  80. ;
  81.   SFIELD XS2,XS3,,@LABEL,LO,19,46,'STATUS =>'
  82.   SFIELD XS3,XS2,,@LABEL,HI,19,56,'** WORKING **'
  83. ;
  84.   SFIELD XC0,XC1,,@LABEL,LO,20,46,'CYLINDER =>'
  85.   SFIELD XC1,XC0,04,@LABEL,LO,20,58
  86. ;
  87.   SFIELD XE0,XE1,,@LABEL,LO,21,46,'ERRORS =>'
  88.   SFIELD XE1,XE0,04,@LABEL,LO,21,56
  89. ;
  90.   SFIELD E01,E02,,@LABEL,LO,16,02,'  CYL XXXX HEAD XX HAS BEEN FLAGGED'
  91.   SFIELD E02,E03,04,@LABEL,LO,16,08
  92.   SFIELD E03,E01,02,@LABEL,LO,16,18
  93. BY_ID:
  94. HDFMT  ENDP
  95. ; *********************************************************************
  96. ; *                                      *
  97. ; *                 FORMAT DRIVE                  *
  98. ; *                                      *
  99. ; *********************************************************************
  100. FMT     PROC
  101.      CLS     LO,4,1,23,78           ;CLEAR THE SCREEN
  102.      BOX     17,0,08,80,LO           ;OUTLINE
  103.      WRITEC  0CCH,LO,17,0,1        ;  THE
  104.      WRITEC  0B9H,LO,17,79,1       ;  SCREEN
  105.      WRITE     T05               ;TYPE OF TEST
  106.      WRITE     X00               ;COMMANDS
  107. FMT_00:
  108.      WRITE     XS0               ;STATUS
  109.      LEA     BX,XI1            ;DRIVE ENTRY
  110.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  111.      MOV     [BX].S_DATA,' '       ;CLEAR DRIVE
  112.      LEA     BX,XI4            ;INTERLEAVE ENTRY
  113.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  114.      MOV     [BX].S_DATA,'3'       ;DEFAULT INTERLEAVE OF 3 (AT)
  115.      CMP     PCT,00H           ;IBM/AT??
  116.      JE     FMT_01            ;YES
  117.      MOV     [BX].S_DATA,'6'       ;DEFAULT INTERLEAVE OF 6 (PC)
  118. FMT_01:
  119.      LEA     BX,XI3B           ;DEFAULT NO TO
  120.      MOV     [BX].S_DATA,'N'       ;  CLEAR DEFECTS
  121.      WRITE     XI0               ;DRIVE + INTERLEAVE
  122. FMT_02:
  123.      READR     BX               ;FETCH DRIVE AND INTERLEAVE
  124.      CALL     TRANS_KEY           ;TRANSLATE THE KEY
  125.      JNC     FMT_04            ;SUCESSFULL
  126. FMT_03:
  127.      CALL     BEEP               ;RING THE BELL
  128.      JMP     FMT_02            ;TRY AGAIN
  129. FMT_04:
  130.      CMP     AL,ESC_KEY           ;ESCAPE KEY??
  131.      JNE     FMT_05            ;NO
  132.      JMP     EXIT               ;RETURN
  133. FMT_05:
  134.      CMP     AL,C_BRK           ;CONTROL BREAK KEY??
  135.      JNE     FMT_07            ;NO
  136.      JMP     FMT               ;YES - START OVER
  137. FMT_07:
  138.      CMP     AL,C_F1           ;CTRL_F1??
  139.      JNE     FMT_03            ;NO - INVALID KEY
  140.      LEA     BX,XI1            ;DRIVE ENTRY
  141.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  142.      MOV     AL,[BX].S_DATA        ;FETCH DRIVE NUMBER
  143.      CMP     AL,'1'                ;VALID DRIVE??
  144.      JE     FMT_08            ;YES
  145.      CMP     AL,'2'                ;VALID DRIVE??
  146.      JE     FMT_08            ;YES
  147.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  148.      PMSG     22               ;DISPLAY THE MESSAGE
  149.      CALL     BEEP               ;RING THE BELL
  150.      WRITE     XI0               ;DRIVE + INTERLEAVE
  151.      JMP     FMT_02            ;TRY AGAIN
  152. FMT_08:
  153.      AND     AL,0FH            ;ADJUST
  154.      DEC     AL               ;  DRIVE NUMBER
  155.      CMP     AL,NUM_DR           ;DRIVE INSTALLED
  156.      JB     FMT_10            ;YES
  157.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  158.      PMSG     21               ;DISPLAY THE MESSAGE
  159.      CALL     BEEP               ;RING THE BELL
  160.      WRITE     XI0               ;DRIVE + INTERLEAVE
  161.      JMP     FMT_02            ;TRY AGAIN
  162. FMT_10:
  163.      MOV     DR,AL               ;SAVE DRIVE NUMBER
  164.      LEA     BX,XI4            ;INTERLEAVE ENTRY
  165.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  166.      MOV     AL,[BX].S_DATA        ;FETCH INTERLEAVE
  167.      CMP     AL,'1'                ;IN RANGE??
  168.      JB     FMT_15            ;NO
  169.      CMP     AL,'8'                ;IN RANGE??
  170.      JA     FMT_15            ;NO
  171.      JMP     FMT_20            ;CONTINUE
  172. FMT_15:
  173.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  174.      PMSG     23               ;DISPLAY THE MESSAGE
  175.      CALL     BEEP               ;RING THE BELL
  176.      WRITE     XI2               ;DRIVE + INTERLEAVE
  177.      JMP     FMT_02            ;TRY AGAIN
  178. FMT_20:
  179.      CMP     PCT,00H           ;IBM/AT??
  180.      JNE     FMT_35            ;NO
  181.      XOR     AH,AH               ;CLEAR AH
  182.      AND     AL,0FH            ;MAKE IT A DIGIT
  183.      DEC     AL               ;RELEATIVE TO ZERO
  184.      XOR     DX,DX               ;CLEAR DX
  185.      MOV     CX,17               ;SECTORS PER TRACK
  186.      MUL     CX
  187.      LEA     SI,INL_TBL           ;INTERLEAVE TABLE
  188.      ADD     SI,AX               ;TABLE INDEX
  189.      XOR     AX,AX               ;PAD CHARACTER
  190.      MOV     CX,512            ;BUFFER SIZE
  191.      CLD                   ;FORWARD DIRECTION
  192.      LEA     DI,FMT_BUFF           ;FORMAT BUFFER
  193.      PUSH     DS               ;ESTABLISH
  194.      POP     ES               ;  SEGMENT
  195.      REP     STOSB               ;ZERO THE BUFFER
  196.      MOV     CX,17               ;NUMBER OF SECTORS
  197.      LEA     DI,FMT_BUFF           ;FORMAT BUFFER
  198. FMT_30:
  199.      LODSB                   ;FETCH SECTOR NUMBER
  200.      XCHG     AL,AH               ;ADJUST FOR STOSW
  201.      STOSW                   ;SET SECTOR NUMBER
  202.      XOR     AX,AX               ;CLEAR AX
  203.      LOOP     FMT_30            ;COMPLETE THE BUFFER
  204. FMT_35:
  205.      LEA     BX,XI1            ;DRIVE ENTRY
  206.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  207.      LEA     BX,XI4            ;INTERLEAVE ENTRY
  208.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  209.      WRITE     XI0               ;DRIVE + INTERLEAVE
  210.      LEA     BX,FM3            ;REPLY ENTRY
  211.      MOV     [BX].S_DATA,' '       ;CLEAR REPLY
  212.      CLS     LO,4,2,16,78           ;CLEAR THE SCREEN
  213.      WRITE     FM0               ;DISPLAY FORMAT MESSAGE
  214.      READ     FM0               ;GET REPLY
  215.      LEA     BX,FM3            ;REPLY ENTRY
  216.      CMP     [BX].S_DATA,'Y'       ;CONTINUE??
  217.      JE     FMT_40            ;YES
  218.      JMP     FMT               ;RESTART
  219. FMT_40:
  220.      CALL     READ_PARMS           ;FETCH DRIVE PARMS
  221.      MOV     CUR_HD,0           ;INITIALIZE
  222.      MOV     CUR_SEC,1           ; THE
  223.      MOV     CUR_CYL,0           ;  STARTING FIELDS
  224.      MOV     ERR_CNT,0           ;CLEAR THE ERROR COUNT
  225.      MOV     NUM_SEC,17           ;NUMBER OF SECTORS
  226.      WRITE     XS2               ;STATUS
  227.      CLS     LO,4,2,16,78           ;CLEAR THE SCREEN
  228.      CALL     HIDE_CUR           ;HIDE THE CURSOR
  229. ; *********************************************************************
  230. ; *             BEGIN THE FORMAT PROCESS              *
  231. ; *********************************************************************
  232.      CALL     CTLR_DIAG           ;EXECUTE CTLR HDNOSTICS
  233.      JNC     FMT_50            ;SUCESSFULL
  234.      PMSG     24,HI               ;FORMAT FAILED
  235.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  236.      JMP     FMT_00            ;TERMINATE FORMAT
  237. ; *********************************************************************
  238. ; *               SCAN FOR DEFECTS                  *
  239. ; *********************************************************************
  240. FMT_50:
  241.      PUSH     DS               ;ESTABLISH
  242.      POP     ES               ;  SEGMENT
  243.      LEA     DI,DATA_BUF           ;DEFECT BUFFER
  244.      MOV     CX,516/2           ;LENGTH IN WORDS
  245.      MOV     AX,0FFFFH           ;PAD DATA
  246.      CLD                   ;FORWARD DIRECTION
  247.      REP     STOSW               ;CLEAR THE BUFFER
  248.      MOV     HD_CMD,VER_CMD        ;VERIFY COMMAND
  249.      MOV     NUM_SEC,1           ;NUMBER OF SECTORS
  250.      LEA     DI,DATA_BUF           ;FIRST ENTRY
  251.      LEA     BX,XI3B           ;DEFAULT NO TO
  252.      CMP     [BX].S_DATA,'Y'       ;CLEAR DEFECTS??
  253.      JE     FMT_65            ;YES - SKIP DEFECT SCAN
  254. FMT_55:
  255.      CALL     UPD_CYL           ;DISPLAY CYLINDER NUMBER
  256.      MOV     AH,HD_CMD           ;FETCH COMMAND
  257.      MOV     AL,NUM_SEC           ;NUMBER OF SECTORS
  258.      MOV     DX,CUR_CYL           ;CURRENT CYLINDER
  259.      XCHG     DH,DL               ;ADJUST IT
  260.      MOV     CX,6               ;SHIFT COUNT
  261.      SHL     DL,CL               ;ADJUST CYL HIGH
  262.      OR     DL,CUR_SEC           ;SET SECTOR NUMBER
  263.      MOV     CX,DX               ;CX SET
  264.      MOV     DH,CUR_HD           ;SET HEAD
  265.      MOV     DL,DR               ;DRIVE
  266.      OR     DL,80H            ;  NUMBER
  267.      INT     13H               ;EXECUTE THE COMMAND
  268.      JNC     FMT_60            ;SUCESSFULL
  269.      CMP     AH,BSEC_ER           ;FLAGGED TRACK??
  270.      JE     FMT_57            ;YES
  271.      CMP     AH,BTRK_ER           ;FLAGGED TRACK??
  272.      JNE     FMT_60            ;NO
  273. FMT_57:
  274.      MOV     AX,CUR_CYL           ;SAVE
  275.      STOSW                   ; ALL
  276.      MOV     AL,CUR_HD           ;  FLAGGED
  277.      STOSB                   ;   AREAS
  278. FMT_60:
  279.      CALL     NEXT_TRK           ;NEXT TRACK
  280.      JNC     FMT_55            ;AND PROCESS IT
  281. FMT_65:
  282.      CMP     PCT,00H           ;IBM/AT??
  283.      JE     FMT_70            ;YES
  284.      JMP     FMT_200           ;NO
  285. ; *********************************************************************
  286. ; *                  FMT IBM/AT                  *
  287. ; *********************************************************************
  288. FMT_70:
  289.      MOV     HD_CMD,FMT_CMD        ;FORMAT COMMAND
  290.      LEA     BX,FMT_BUFF           ;FORMAT BUFFER
  291.      PUSH     DS               ;ESTABLISH
  292.      POP     ES               ;  SEGMENT
  293.      MOV     CUR_HD,0           ;INITIALIZE
  294.      MOV     CUR_SEC,1           ; THE
  295.      MOV     CUR_CYL,0           ;  STARTING FIELDS
  296.      MOV     ERR_CNT,0           ;CLEAR THE ERROR COUNT
  297.      MOV     NUM_SEC,17           ;NUMBER OF SECTORS
  298. FMT_80:
  299.      MOV     AH,0BH            ;CHECK FOR
  300.      INT     21H               ;  CONTROL BREAK
  301.      CALL     UPD_CYL           ;DISPLAY CURRENT CYLINDER
  302.      CALL     EXEC_CMD           ;FORMAT THE TRACK
  303.      JNC     FMT_90            ;SUCESSFULL
  304.      CMP     AL,0FFH           ;CTLR BROKE??
  305.      JNE     FMT_85            ;NO
  306.      JMP     FMT_00
  307. FMT_85:
  308.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  309. FMT_90:
  310.      CALL     NEXT_TRK           ;NEXT TRACK
  311.      JNC     FMT_80            ;AND PROCESS IT
  312. ; *********************************************************************
  313. ; *                 FLAG DEFECTS                  *
  314. ; *********************************************************************
  315. FMT_95:
  316.      LEA     BX,XI3B           ;DEFAULT NO TO
  317.      CMP     DATA_BUF,0FFFFH       ;ANY DEFECTS FOUND??
  318.      JNE     FMT_100           ;YES
  319.      JMP     FMT_150           ;EXIT
  320. FMT_100:
  321.      LEA     DI,FMT_BUFF           ;FORMAT BUFFER
  322.      MOV     AL,80H            ;BAD SECTOR INDICATOR
  323.      MOV     CX,17               ;NUMBER OF SECTORS
  324.      CLD                   ;FORWARD DIRECTION
  325. FMT_105:
  326.      STOSB                   ;SET BAD SECTOR INDICATOR
  327.      INC     DI               ;NEXT SECTOR
  328.      LOOP     FMT_105           ;AND PROCESS IT
  329. ;
  330.      LEA     DI,DATA_BUF           ;DEFECT BUFFER
  331. FMT_110:
  332.      MOV     AX,[DI]           ;FETCH CYLINDER ADDRESS
  333.      CMP     AX,0FFFFH           ;ALL DONE??
  334.      JE     FMT_150           ;YES
  335.      MOV     CUR_CYL,AX           ;SET CYLINDER
  336.      MOV     AL,[DI+2]           ;FETCH HEAD
  337.      MOV     CUR_HD,AL           ;AND SAVE IT
  338.      LEA     BX,FMT_BUFF           ;FORMAT BUFFER
  339.      MOV     HD_CMD,FMBT_CMD       ;FORMAT BAD TRACK COMMAND
  340.      CALL     EXEC_CMD           ;FLAG THE TRACK
  341.      MOV     AX,CUR_CYL           ;FORMAT
  342.      LEA     BX,E02            ;  CYLINDER
  343.      CALL     CONV_ASCII
  344.      XOR     AX,AX               ;CLEAR AX
  345.      MOV     AL,CUR_HD           ;FORMAT
  346.      LEA     BX,E03            ;  HEAD
  347.      CALL     CONV_ASCII
  348.      SCROLL  LO,4,2,16,78           ;SCROLL
  349.      WRITE     E01               ;DISPLAY THE MESSAGE
  350.      CALL     LOGERR            ;PRINT THE MESSAGE
  351.      ADD     DI,3               ;NEXT DEFECT
  352.      JMP     FMT_110           ;AND PROCESS IT
  353. FMT_150:
  354.      MOV     HD_CMD,SEEK_CMD       ;LETS
  355.      MOV     CUR_CYL,0           ; BRING
  356.      MOV     CUR_HD,0           ;  THE HEADS
  357.      CALL     EXEC_CMD           ;  HOME
  358.      PMSG     25,HI               ;FORMAT COMPLETE
  359.      JMP     FMT_00            ;NEXT
  360. ; *********************************************************************
  361. ; *                  FMT IBM/PC                  *
  362. ; *********************************************************************
  363. FMT_200:
  364.      MOV     HD_CMD,WSEC_CMD       ;WRITE SECTOR BUFFER
  365.      LEA     BX,FMT_BUFF           ;FORMAT BUFFER
  366.      PUSH     DS               ;ESTABLISH
  367.      POP     ES               ;  SEGMENT
  368.      MOV     CUR_HD,0           ;INITIALIZE
  369.      MOV     CUR_SEC,1           ; THE
  370.      MOV     CUR_CYL,0           ;  STARTING FIELDS
  371.      MOV     ERR_CNT,0           ;CLEAR THE ERROR COUNT
  372.      MOV     NUM_SEC,17           ;NUMBER OF SECTORS
  373.      CALL     EXEC_CMD           ;CLEAR THE SECTOR BUFFER
  374. ;
  375.      MOV     AH,FMD_CMD           ;FORMAT DRIVE COMMAND
  376.      LEA     BX,XI4            ;FETCH
  377.      MOV     AL,[BX].S_DATA        ; INTERLEAVE
  378.      AND     AL,0FH            ;MAKE IT A DIGIT
  379.      MOV     DX,CUR_CYL           ;CURRENT CYLINDER
  380.      XCHG     DH,DL               ;ADJUST IT
  381.      MOV     CX,6               ;SHIFT COUNT
  382.      SHL     DL,CL               ;ADJUST CYL HIGH
  383.      OR     DL,CUR_SEC           ;SET SECTOR NUMBER
  384.      MOV     CX,DX               ;CX SET
  385.      MOV     DH,CUR_HD           ;SET HEAD
  386.      MOV     DL,DR               ;DRIVE
  387.      OR     DL,80H            ;  NUMBER
  388.      INT     13H               ;EXECUTE THE COMMAND
  389.      JNC     FMT_210           ;SUCESSFULL
  390.      PMSG     24,HI               ;FORMAT FAILED
  391.      JMP     FMT_00
  392. FMT_210:
  393.      JMP     FMT_95            ;WRITE TRACK FLAGS
  394. ; *********************************************************************
  395. ; *                E X I T                   *
  396. ; *********************************************************************
  397. EXIT:
  398.      RET                   ;RETURN
  399. FMT     ENDP
  400. ; *********************************************************************
  401. ; *            DISPLAY CURRENT CYLINDER              *
  402. ; *********************************************************************
  403. UPD_CYL  PROC
  404.      PUSHALL
  405.      MOV     AX,CUR_CYL           ;FORMAT
  406.      LEA     BX,XC1            ; CYLINDER
  407.      CALL     CONV_ASCII           ;  DISPLAY
  408.      WRITE     XC0               ;CYLINDER
  409.      POPALL
  410.      RET                   ;RETURN
  411. UPD_CYL  ENDP
  412. ; *********************************************************************
  413. ; *               DISPLAY ERROR COUNT                  *
  414. ; *********************************************************************
  415. UPD_ERR  PROC
  416.      PUSHALL
  417.      XOR     AX,AX               ;CLEAR AX
  418.      MOV     AX,ERR_CNT           ;FORMAT
  419.      LEA     BX,XE1            ; ERROR COUNT
  420.      CALL     CONV_ASCII           ;  DISPLAY
  421.      WRITE     XE0               ;ERROR COUNT
  422.      POPALL
  423.      RET                   ;RETURN
  424. UPD_ERR  ENDP
  425. CSEG     ENDS
  426.      END     HDFMT
  427.