home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Assembly / EDITOR22.ASM < prev    next >
Assembly Source File  |  1986-09-25  |  3KB  |  83 lines

  1. CGROUP    GROUP    CODE_SEG, DATA_SEG
  2.     ASSUME    CS:CGROUP, DS:CGROUP
  3.  
  4. CODE_SEG    SEGMENT PUBLIC
  5.  
  6. DATA_SEG    SEGMENT PUBLIC
  7.     EXTRN    SECTOR:BYTE
  8.     EXTRN    SECTOR_OFFSET:WORD
  9.     EXTRN    PHANTOM_CURSOR_X:BYTE
  10.     EXTRN    PHANTOM_CURSOR_Y:BYTE
  11. DATA_SEG    ENDS
  12. ;-----------------------------------------------------------------------;
  13. ; This procedure write one byte to SECTOR, at the memory location    ;
  14. ; pointed to by the phantom cursor.                    ;
  15. ;                                    ;
  16. ;    DL    Byte to write to SECTOR                    ;
  17. ;                                    ;
  18. ; The offset is calculated by                        ;
  19. ;   OFFSET = SECTOR_OFFSET + (16 * PHANTOM_CURSOR_Y) + PHANTOM_CURSOR_X    ;
  20. ;                                    ;
  21. ; Reads:    PHANTOM_CURSOR_X, PHANTOM_CURSOR_Y, SECTOR_OFFSET    ;
  22. ; Writes:    SECTOR                            ;
  23. ;-----------------------------------------------------------------------;
  24. WRITE_TO_MEMORY    PROC    NEAR
  25.     PUSH    AX
  26.     PUSH    BX
  27.     PUSH    CX
  28.     MOV    BX,SECTOR_OFFSET
  29.     MOV    AL,PHANTOM_CURSOR_Y
  30.     XOR    AH,AH
  31.     MOV    CL,4            ;Multiply PHANTOM_CURSOR_Y by 16
  32.     SHL    AX,CL
  33.     ADD    BX,AX            ;BX = SECTOR_OFFSET + (16 * Y)
  34.     MOV    AL,PHANTOM_CURSOR_X
  35.     XOR    AH,AH
  36.     ADD    BX,AX            ;That's the address!
  37.     MOV    SECTOR[BX],DL        ;Now, store the byte
  38.     POP    CX
  39.     POP    BX
  40.     POP    AX
  41.     RET
  42. WRITE_TO_MEMORY        ENDP
  43.  
  44.     PUBLIC    EDIT_BYTE
  45.     EXTRN    SAVE_REAL_CURSOR:NEAR, RESTORE_REAL_CURSOR:NEAR
  46.     EXTRN    MOV_TO_HEX_POSITION:NEAR, MOV_TO_ASCII_POSITION:NEAR
  47.     EXTRN    WRITE_PHANTOM:NEAR, WRITE_PROMPT_LINE:NEAR
  48.     EXTRN    CURSOR_RIGHT:NEAR, WRITE_HEX:NEAR, WRITE_CHAR:NEAR
  49. DATA_SEG    SEGMENT PUBLIC
  50.     EXTRN    EDITOR_PROMPT:BYTE
  51. DATA_SEG    ENDS
  52. ;-----------------------------------------------------------------------;
  53. ; This procedure changes a byte in memory and on the screen.        ;
  54. ;                                    ;
  55. ;    DL    Byte to write into SECTOR, and change on screen        ;
  56. ;                                    ;
  57. ; Uses:        SAVE_REAL_CURSOR, RESTORE_REAL_CURSOR            ;
  58. ;        MOV_TO_HEX_POSITION, MOV_TO_ASCII_POSITION        ;
  59. ;        WRITE_PHANTOM, WRITE_PROMPT_LINE, CURSOR_RIGHT        ;
  60. ;        WRITE_HEX, WRITE_CHAR, WRITE_TO_MEMORY            ;
  61. ; Reads:    EDITOR_PROMPT                        ;
  62. ;-----------------------------------------------------------------------;
  63. EDIT_BYTE    PROC    NEAR
  64.     PUSH    DX
  65.     CALL    SAVE_REAL_CURSOR
  66.     CALL    MOV_TO_HEX_POSITION    ;Move to the hex number in the
  67.     CALL    CURSOR_RIGHT        ; hex window
  68.     CALL    WRITE_HEX        ;Write the new number
  69.     CALL    MOV_TO_ASCII_POSITION    ;Move to the char. in the ASCII window
  70.     CALL    WRITE_CHAR        ;Write the new character
  71.     CALL    RESTORE_REAL_CURSOR    ;Move cursor back where it belongs
  72.     CALL    WRITE_PHANTOM        ;Rewrite the phantom cursor
  73.     CALL    WRITE_TO_MEMORY        ;Save this new byte in SECTOR
  74.     LEA    DX,EDITOR_PROMPT
  75.     CALL    WRITE_PROMPT_LINE
  76.     POP    DX
  77.     RET
  78. EDIT_BYTE    ENDP
  79.  
  80. CODE_SEG    ENDS
  81.  
  82.     END
  83.