 .386P
 .model FLAT
_TEXT SEGMENT

 public _gfx_directx_write_bank, ;, .balign, 4, 090h, ;, _gfx_directx_write_bank:
 test ds:dword ptr[44+edx],67108864
 jnz Locked
 pushad
 push edx
 call dword ptr[_ptr_gfx_directx_autolock]
 pop edx
 popad
Locked:
 mov eax,ds:dword ptr[64+edx+eax*4]
 ret

 public _gfx_directx_unwrite_bank, ;, .balign, 4, 090h, ;, _gfx_directx_unwrite_bank:
 test ds:dword ptr[44+edx],33554432
 jz NoUnlock
 pushad
 push edx
 call dword ptr[_ptr_gfx_directx_unlock]
 pop edx
 popad
 and ds:dword ptr[44+edx],offset not 33554432
NoUnlock:
 ret

 public _gfx_directx_write_bank_win, ;, .balign, 4, 090h, ;, _gfx_directx_write_bank_win:
 pushad
 mov ebx,ds:dword ptr[_wd_dirty_lines]
 add ebx,ds:dword ptr[56+edx]
 mov ds:byte ptr[ebx+eax],1
 test ds:dword ptr[44+edx],67108864
 jnz Locked_win
 push edx
 call dword ptr[_ptr_gfx_directx_autolock]
 pop edx
Locked_win:
 popad
 mov eax,ds:dword ptr[64+edx+eax*4]
 ret

 public _gfx_directx_unwrite_bank_win, ;, .balign, 4, 090h, ;, _gfx_directx_unwrite_bank_win:
 pushad
 test ds:dword ptr[44+edx],33554432
 jz NoUnlock_win
 push edx
 call dword ptr[_ptr_gfx_directx_unlock]
 pop edx
 and ds:dword ptr[44+edx],offset not 33554432
NoUnlock_win:
 mov eax,ds:dword ptr[_pseudo_screen]
 test ds:dword ptr[44+eax],67108864
 jnz no_update_bank_win
 call near ptr update_dirty_lines
no_update_bank_win:
 popad
 ret

 public _gfx_directx_unlock_win, ;, .balign, 4, 090h, ;, _gfx_directx_unlock_win:
 push ebp
 mov ebp,esp
 push ebx
 push esi
 push edi
 mov edx,ds:dword ptr[8+ebp]
 push edx
 call dword ptr[_ptr_gfx_directx_unlock]
 pop edx
 mov eax,ds:dword ptr[_pseudo_screen]
 test ds:dword ptr[44+eax],67108864
 jnz no_update_win
 call near ptr update_dirty_lines
no_update_win:
 pop edi
 pop esi
 pop ebx
 pop ebp
 ret

update_dirty_lines:
 sub esp,16
 mov ds:dword ptr[esp],0
 mov ecx,ds:dword ptr[eax]
 mov ds:dword ptr[8+esp],ecx
 mov ebx,ds:dword ptr[_wd_dirty_lines]
 mov esi,ds:dword ptr[4+eax]
 mov edi,0
next_line:
 mov al,ds:byte ptr[ebx+edi]
 test al,al
 jz test_end
 mov ds:dword ptr[4+esp],edi
loop_dirty_lines:
 mov ds:byte ptr[ebx+edi],0
 inc edi
 mov al,ds:byte ptr[ebx+edi]
 test al,al
 jnz loop_dirty_lines
 mov ds:dword ptr[12+esp],edi
 lea eax,ds:dword ptr[esp]
 push eax
 call dword ptr[_update_window]
 pop eax
test_end:
 inc edi
 cmp esi,edi
 jge next_line
 add esp,16
 ret

 public _gfx_gdi_write_bank, ;, .balign, 4, 090h, ;, _gfx_gdi_write_bank:
 pushad
 mov ebx,ds:dword ptr[_gdi_dirty_lines]
 add ebx,ds:dword ptr[56+edx]
 mov ds:byte ptr[ebx+eax],1
 test ds:dword ptr[44+edx],67108864
 jnz Locked_gdi
 push edx
 call dword ptr[_ptr_gfx_gdi_autolock]
 pop edx
Locked_gdi:
 popad
 mov eax,ds:dword ptr[64+edx+eax*4]
 ret

 public _gfx_gdi_unwrite_bank, ;, .balign, 4, 090h, ;, _gfx_gdi_unwrite_bank:
 pushad
 test ds:dword ptr[44+edx],33554432
 jz NoUnlock_gdi
 push edx
 call dword ptr[_ptr_gfx_gdi_unlock]
 pop edx
 and ds:dword ptr[44+edx],offset not 33554432
NoUnlock_gdi:
 popad
 ret
_TEXT ENDS
 END
