home *** CD-ROM | disk | FTP | other *** search
/ C++ Games Programming / CPPGAMES.ISO / digmid / real / t16.asm < prev    next >
Assembly Source File  |  1993-10-26  |  2KB  |  136 lines

  1.  
  2.     LOCALS            ;; Enable local labels
  3.  
  4.         IDEAL                   ;; Use Turbo Assembler's IDEAL mode
  5.     JUMPS
  6.  
  7. SMALL_MODEL    equ    0   ;: True if declaring C procedures as near.
  8.             ; It is false here because all procedures are
  9.             ; far, so that you can link any memory model
  10.             ; to theme. (They are prototyped as well.)
  11.  
  12.  
  13.         INCLUDE "PROLOGUE.MAC"          ;; common prologue
  14.  
  15.  
  16. SEGMENT  _TEXT BYTE PUBLIC 'CODE'               ;; Set up _TEXT segment
  17.         ENDS
  18.  
  19.     ASSUME    CS: _TEXT, DS: _TEXT, SS: NOTHING, ES: NOTHING
  20.  
  21. SEGMENT _TEXT
  22.  
  23. Macro    CPROC    name        ; Macro to establish a C callable procedure.
  24.     public    _&name
  25. IF    SMALL_MODEL
  26. Proc    _&name    near
  27. ELSE
  28. Proc    _&name    far
  29. ENDIF
  30.     endm
  31.  
  32. CPROC    Left8
  33.     ARG    SOURCE:DWORD,DEST:DWORD,SLEN:WORD
  34.     PENTER    0
  35.     PushCREGS
  36.  
  37.     lds    si,[SOURCE]
  38.     les    di,[DEST]
  39.     mov    cx,[SLEN]
  40.     xor    ax,ax
  41. @@GO:    movsb
  42.     stosb
  43.     loop    @@GO
  44.  
  45.     PopCREGS
  46.     PLEAVE
  47.     ret
  48.     endp
  49.  
  50. CPROC    Right8
  51.     ARG    SOURCE:DWORD,DEST:DWORD,SLEN:WORD
  52.     PENTER    0
  53.     PushCREGS
  54.  
  55.     lds    si,[SOURCE]
  56.     les    di,[DEST]
  57.     mov    cx,[SLEN]
  58.     xor    ax,ax
  59. @@GO:    stosb
  60.     movsb
  61.     loop    @@GO
  62.  
  63.     PopCREGS
  64.     PLEAVE
  65.     ret
  66.     endp
  67.  
  68. CPROC    Mono16
  69.     ARG    SOURCE:DWORD,DEST:DWORD,SLEN:WORD
  70.     PENTER    0
  71.     PushCREGS
  72.  
  73.     lds    si,[SOURCE]
  74.     les    di,[DEST]
  75.     mov    cx,[SLEN]
  76. @@GO:    lodsb
  77.     mov    ah,al
  78.     xor    al,al
  79.     sub    ax,32767
  80.     stosw
  81.     loop    @@GO
  82.  
  83.     PopCREGS
  84.     PLEAVE
  85.     ret
  86.     endp
  87.  
  88. CPROC    Left16
  89.     ARG    SOURCE:DWORD,DEST:DWORD,SLEN:WORD
  90.     PENTER    0
  91.     PushCREGS
  92.  
  93.     lds    si,[SOURCE]
  94.     les    di,[DEST]
  95.     mov    cx,[SLEN]
  96.  
  97. @@GO:    lodsb
  98.     mov    ah,al
  99.     xor    al,al
  100.     sub    ax,32767
  101.     stosw
  102.     mov    ax,8000h
  103.     stosw
  104.     loop    @@GO
  105.  
  106.     PopCREGS
  107.     PLEAVE
  108.     ret
  109.     endp
  110.  
  111. CPROC    Right16
  112.     ARG    SOURCE:DWORD,DEST:DWORD,SLEN:WORD
  113.     PENTER    0
  114.     PushCREGS
  115.  
  116.     lds    si,[SOURCE]
  117.     les    di,[DEST]
  118.     mov    cx,[SLEN]
  119.  
  120. @@GO:    mov    ax,8000h
  121.     stosw
  122.     lodsb
  123.     mov    ah,al
  124.     xor    al,al
  125.     sub    ax,32767
  126.     stosw
  127.     loop    @@GO
  128.  
  129.     PopCREGS
  130.     PLEAVE
  131.     ret
  132.     endp
  133.  
  134.     ends
  135.     end
  136.