home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / rettig.zip / TRSOURCE.EXE / POKEBYTE.ASM < prev    next >
Assembly Source File  |  1990-10-22  |  3KB  |  106 lines

  1. ; POKEBYTE.ASM
  2. ;
  3. ; by Ralph Davis
  4. ; modified by Leonard Zerman
  5. ;
  6. ; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  7. ;
  8.  
  9.          PUBLIC   POKEBYTE
  10.  
  11.          INCLUDE  EXTENDA.MAC
  12.  
  13.          EXTRN    __TR_HTOI:FAR     ; Internal TR.LIB routines
  14.          EXTRN    _TR_POKE_PARMS:FAR
  15.  
  16. DGROUP GROUP _DATA
  17. ;*****************************************************
  18. _DATA  SEGMENT  WORD PUBLIC 'DATA'
  19.  
  20. ;
  21. ;    Saves input segment and offset
  22. ;
  23. SEG_ADDR    DW       ?
  24. OFF_ADDR    DW       ?
  25. ;
  26. _DATA  ENDS
  27. ;*****************************************************
  28.  
  29. ;*****************************************************
  30. POKEBYTE_TEXT SEGMENT BYTE PUBLIC 'CODE'
  31.          ASSUME   CS:POKEBYTE_TEXT,DS:_DATA
  32. ;-----------------------------------------------------
  33. ;
  34. ;     POKEBYTE(segment, offset, value)
  35. ;
  36. ;     pokes value as 1-byte integer
  37. ;
  38. ;        segment = SPACE(4)    && hexadecimal string
  39. ;        offset  = number < 65536 or hexadecimal string
  40. ;        value   = number or hexadecimal string
  41. ;
  42. ;        Returns:  .F. if less than three parameters passed
  43. ;                  .T. otherwise
  44. ;
  45. ;--------------
  46. POKEBYTE PROC     FAR
  47.          PUSH     BP
  48.          MOV      BP,SP
  49.          PUSH     DS
  50.          PUSH     ES
  51.          PUSH     BX
  52.          PUSH     DX
  53.          PUSH     SI
  54.          CALL     _TR_POKE_PARMS ; returns segment address in DX,
  55.                                  ; offset in AX
  56.          JL       POKEBYTE_ERR   ; Sign flag set means less than 2 parms
  57.          PUSH     DS             ; Save caller's DS
  58.          MOV      BX,_DATA        ; Point DS to our data segment
  59.          MOV      DS,BX
  60.          MOV      SEG_ADDR,DX
  61.          MOV      OFF_ADDR,AX
  62.          POP      DS
  63.          GET_PTYPE 3             ; find out if parameter is character
  64.                                  ; or numeric
  65.          AND      AX,CHARACTER   ; Is it a hexadecimal string?
  66.          JNZ      POKEBYTE_HEX   ; yes
  67.          GET_INT  3              ; no, pick it up as integer in AX
  68.          MOV      BX,AX          ; and move it to BX
  69.          JMP      SHORT POKE_BYTE_4
  70.  
  71. POKEBYTE_HEX:
  72.          GET_CHAR 3              ; Get parameter as char *
  73.          PUSH     DX             ; Call _TR_HTOI
  74.          PUSH     AX
  75.          CALL     __TR_HTOI      ; AX now contains parameter as integer
  76.          MOV      BX,AX          ; save it in BX
  77.          ADD      SP,4           ; Discard parameters PUSHed onto stack
  78.  
  79. POKE_BYTE_4:
  80.          MOV      AX,_DATA        ; Point to our data segment
  81.          MOV      DS,AX
  82.          MOV      AX,OFF_ADDR    ; restore offset address
  83.          MOV      SI,SEG_ADDR    ; restore segment
  84.          MOV      DS,SI
  85.          MOV      SI,AX          ; DS:SI now points to requested byte
  86.          MOV      [SI],BL        ; poke it
  87.          MOV      AX,1           ; Return .T. for successful poke
  88.          JMP      SHORT POKEBYTE_EXIT   ; and we're done
  89. POKEBYTE_ERR:
  90.          MOV      AX,0           ; return .F. for error condition
  91.  
  92. POKEBYTE_EXIT:
  93.          POP      SI
  94.          POP      DX
  95.          POP      BX
  96.          POP      ES
  97.          POP      DS
  98.          POP      BP
  99.          RET_LOGICAL AX          ; return .T. or .F. to caller
  100.          RET
  101. POKEBYTE ENDP
  102. ;------------------------------------------------
  103. POKEBYTE_TEXT    ENDS
  104. ;************************************************
  105.          END
  106.