"Fossies" - the Fresh Open Source Software Archive

Member "fasm/tools/dos/system.inc" (21 Feb 2022, 3189 Bytes) of package /linux/misc/fasm-1.73.30.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) fasm source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 
    2 display_string:
    3     lods    byte [esi]
    4     or  al,al
    5     jz  string_end
    6     mov dl,al
    7     mov ah,2
    8     int 21h
    9     jmp display_string
   10       string_end:
   11     ret
   12 alloc:
   13     push    ebx esi edi
   14     mov cx,ax
   15     shr eax,16
   16     mov bx,ax
   17     mov ax,501h
   18     int 31h
   19     jc  dpmi_allocation_failed
   20     mov ax,bx
   21     shl eax,16
   22     mov ax,cx
   23     mov edx,main
   24     shl edx,4
   25     sub eax,edx
   26     mov bx,si
   27     shl ebx,16
   28     mov bx,di
   29     mov ecx,[memory_handles_count]
   30     inc [memory_handles_count]
   31     shl ecx,3
   32     add ecx,memory_handles
   33     mov [ecx],eax
   34     mov [ecx+4],ebx
   35     pop edi esi ebx
   36     clc
   37     ret
   38     dpmi_allocation_failed:
   39     pop edi esi ebx
   40     stc
   41     ret
   42 free:
   43     push    ebx esi edi
   44     mov esi,memory_handles
   45     mov ecx,[memory_handles_count]
   46     find_memory_handle:
   47     cmp eax,[esi]
   48     je  memory_handle_found
   49     add esi,8
   50     loop    find_memory_handle
   51     pop edi esi
   52     ret
   53     memory_handle_found:
   54     mov ebx,[esi+4]
   55     dec [memory_handles_count]
   56     dec ecx
   57     jz  free_memory
   58     remove_memory_handle:
   59     mov edx,[esi+8]
   60     mov edi,[esi+8+4]
   61     mov [esi],edx
   62     mov [esi+4],edi
   63     add esi,8
   64     loop    remove_memory_handle
   65     free_memory:
   66     mov esi,ebx
   67     shr esi,16
   68     mov di,bx
   69     mov ax,502h
   70     int 31h
   71     pop edi esi ebx
   72     ret
   73 open:
   74     push    esi edi ebp
   75     call    adapt_path
   76     mov ax,716Ch
   77     mov bx,100000b
   78     mov dx,1
   79     xor cx,cx
   80     xor si,si
   81     call    dos_int
   82     jnc open_done
   83     cmp ax,7100h
   84     je  old_open
   85     stc
   86     jmp open_done
   87       old_open:
   88     mov ax,3D00h
   89     xor dx,dx
   90     call    dos_int
   91       open_done:
   92     mov bx,ax
   93     pop ebp edi esi
   94     ret
   95     adapt_path:
   96     mov esi,edx
   97     mov edi,buffer
   98       copy_path:
   99     lodsb
  100     cmp al,'/'
  101     jne path_char_ok
  102     mov al,'\'
  103       path_char_ok:
  104     stosb
  105     or  al,al
  106     jnz copy_path
  107     ret
  108     dos_int:
  109     push    0 0 0
  110     pushw   buffer_segment buffer_segment
  111     stc
  112     pushfw
  113     push    eax
  114     push    ecx
  115     push    edx
  116     push    ebx
  117     push    0
  118     push    ebp
  119     push    esi
  120     push    edi
  121     mov ax,300h
  122     mov bx,21h
  123     xor cx,cx
  124     mov edi,esp
  125     push    es ss
  126     pop es
  127     int 31h
  128     pop es
  129     mov edi,[esp]
  130     mov esi,[esp+4]
  131     mov ebp,[esp+8]
  132     mov ebx,[esp+10h]
  133     mov edx,[esp+14h]
  134     mov ecx,[esp+18h]
  135     mov ah,[esp+20h]
  136     add esp,32h
  137     sahf
  138     mov eax,[esp-32h+1Ch]
  139     ret
  140 create:
  141     push    esi edi ebp
  142     call    adapt_path
  143     mov ax,716Ch
  144     mov bx,100001b
  145     mov dx,10010b
  146     xor cx,cx
  147     xor si,si
  148     xor di,di
  149     call    dos_int
  150     jnc create_done
  151     cmp ax,7100h
  152     je  old_create
  153     stc
  154     jmp create_done
  155     old_create:
  156     mov ah,3Ch
  157     xor cx,cx
  158     xor dx,dx
  159     call    dos_int
  160     create_done:
  161     mov bx,ax
  162     pop ebp edi esi
  163     ret
  164 write:
  165     push    edx esi edi ebp
  166     mov ebp,ecx
  167     mov esi,edx
  168       write_loop:
  169     mov ecx,1000h
  170     sub ebp,1000h
  171     jnc do_write
  172     add ebp,1000h
  173     mov ecx,ebp
  174     xor ebp,ebp
  175       do_write:
  176     push    ecx
  177     mov edi,buffer
  178     shr ecx,2
  179     rep movsd
  180     mov ecx,[esp]
  181     and ecx,11b
  182     rep movsb
  183     pop ecx
  184     mov ah,40h
  185     xor dx,dx
  186     call    dos_int
  187     or  ebp,ebp
  188     jnz write_loop
  189     pop ebp edi esi edx
  190     ret
  191 read:
  192     push    edx esi edi ebp
  193     mov ebp,ecx
  194     mov edi,edx
  195       read_loop:
  196     mov ecx,1000h
  197     sub ebp,1000h
  198     jnc do_read
  199     add ebp,1000h
  200     mov ecx,ebp
  201     xor ebp,ebp
  202       do_read:
  203     push    ecx
  204     mov ah,3Fh
  205     xor dx,dx
  206     call    dos_int
  207     cmp ax,cx
  208     jne eof
  209     mov esi,buffer
  210     mov ecx,[esp]
  211     shr ecx,2
  212     rep movsd
  213     pop ecx
  214     and ecx,11b
  215     rep movsb
  216     or  ebp,ebp
  217     jnz read_loop
  218       read_done:
  219     pop ebp edi esi edx
  220     ret
  221       eof:
  222     pop ecx
  223     stc
  224     jmp read_done
  225 close:
  226     mov ah,3Eh
  227     int 21h
  228     ret
  229 lseek:
  230     mov ah,42h
  231     mov ecx,edx
  232     shr ecx,16
  233     int 21h
  234     pushf
  235     shl edx,16
  236     popf
  237     mov dx,ax
  238     mov eax,edx
  239     ret