home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / nor_asm / disk_i19.asm < prev    next >
Assembly Source File  |  1989-05-17  |  3KB  |  103 lines

  1. .MODEL    SMALL
  2.  
  3. .DATA
  4.  
  5.     EXTRN    SECTOR:BYTE
  6.     EXTRN    DISK_DRIVE_NO:BYTE
  7.     EXTRN    CURRENT_SECTOR_NO:WORD
  8.  
  9. .CODE
  10.  
  11.     PUBLIC    PREVIOUS_SECTOR
  12.     EXTRN    INIT_SEC_DISP:PROC, WRITE_HEADER:PROC
  13.     EXTRN    WRITE_PROMPT_LINE:PROC
  14. .DATA
  15.     EXTRN    CURRENT_SECTOR_NO:WORD, EDITOR_PROMPT:BYTE
  16. .CODE
  17. ;-----------------------------------------------------------------------;
  18. ; This procedure reads the previous sector, if possible.        ;
  19. ;                                    ;
  20. ; Uses:        WRITE_HEADER, READ_SECTOR, INIT_SEC_DISP        ;
  21. ;        WRITE_PROMPT_LINE                    ;
  22. ; Reads:    CURRENT_SECTOR_NO, EDITOR_PROMPT            ;
  23. ; Writes:    CURRENT_SECTOR_NO                    ;
  24. ;-----------------------------------------------------------------------;
  25. PREVIOUS_SECTOR        PROC
  26.     PUSH    AX
  27.     PUSH    DX
  28.     MOV    AX,CURRENT_SECTOR_NO    ;Get current sector number
  29.     OR    AX,AX            ;Don't decrement if already 0
  30.     JZ    DONT_DECREMENT_SECTOR
  31.     DEC    AX
  32.     MOV    CURRENT_SECTOR_NO,AX    ;Save new sector number
  33.     CALL    WRITE_HEADER
  34.     CALL    READ_SECTOR
  35.     CALL    INIT_SEC_DISP        ;Dispaly new sector
  36.     LEA    DX,EDITOR_PROMPT
  37.     CALL    WRITE_PROMPT_LINE
  38. DONT_DECREMENT_SECTOR:
  39.     POP    DX
  40.     POP    AX
  41.     RET
  42. PREVIOUS_SECTOR        ENDP
  43.  
  44.  
  45.     PUBLIC    NEXT_SECTOR
  46.     EXTRN    INIT_SEC_DISP:PROC, WRITE_HEADER:PROC
  47.     EXTRN    WRITE_PROMPT_LINE:PROC
  48. .DATA
  49.     EXTRN    CURRENT_SECTOR_NO:WORD, EDITOR_PROMPT:BYTE
  50. .CODE
  51. ;-----------------------------------------------------------------------;
  52. ; Reads the next sector.                        ;
  53. ;                                    ;
  54. ; Uses:        WRITE_HEADER, READ_SECTOR, INIT_SEC_DISP        ;
  55. ;        WRITE_PROMPT_LINE                    ;
  56. ; Reads:    CURRENT_SECTOR_NO, EDITOR_PROMPT            ;
  57. ; Writes:    CURRENT_SECTOR_NO                    ;
  58. ;-----------------------------------------------------------------------;
  59. NEXT_SECTOR    PROC
  60.     PUSH    AX
  61.     PUSH    DX
  62.     MOV    AX,CURRENT_SECTOR_NO
  63.     INC    AX            ;Move to next sector
  64.     MOV    CURRENT_SECTOR_NO,AX
  65.     CALL    WRITE_HEADER
  66.     CALL    READ_SECTOR
  67.     CALL    INIT_SEC_DISP        ;Display new sector
  68.     LEA    DX,EDITOR_PROMPT
  69.     CALL    WRITE_PROMPT_LINE
  70.     POP    DX
  71.     POP    AX
  72.     RET
  73. NEXT_SECTOR    ENDP
  74.  
  75.  
  76.     PUBLIC    READ_SECTOR
  77. ;-----------------------------------------------------------------------;
  78. ; This procedure reads one sector (512 bytes) into SECTOR.        ;
  79. ;                                    ;
  80. ; Reads:    CURRENT_SECTOR_NO, DISK_DRIVE_NO            ;
  81. ; Writes:    SECTOR                            ;
  82. ;-----------------------------------------------------------------------;
  83. READ_SECTOR    PROC
  84.     PUSH    AX
  85.     PUSH    BX
  86.     PUSH    CX
  87.     PUSH    DX
  88.     MOV    AL,DISK_DRIVE_NO    ;Drive number
  89.     MOV    CX,1            ;Read only 1 sector
  90.     MOV    DX,CURRENT_SECTOR_NO    ;Logical sector number
  91.     LEA    BX,SECTOR        ;Where to store this sector
  92.     INT    25h            ;Read the sector
  93.     POPF                ;Discard flags put on stack by DOS
  94.     POP    DX
  95.     POP    CX
  96.     POP    BX
  97.     POP    AX
  98.     RET
  99. READ_SECTOR    ENDP
  100.  
  101.  
  102.     END
  103.