sda4: commit the Glaze developer hard-drive dump
Un-ignored: the dev drive is the ground truth the restoration and emulator work constantly reference (DPL3/LIBDPL + VRENDER i860 renderer source, BT/RP live+dev game trees, VGL_LABS pod boot, scene/audio content). Kept in-repo for the pod-owner community. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
;
|
||||
; outfast.asm - some optimized comms stuff for VPX
|
||||
;
|
||||
; outveryfast
|
||||
;
|
||||
; eax = pointer to data
|
||||
; edx = link adapter base register
|
||||
; ebx = no of bytes to send
|
||||
;
|
||||
|
||||
.PROT
|
||||
|
||||
assume cs:_text
|
||||
|
||||
_text segment
|
||||
|
||||
|
||||
public outveryfast_
|
||||
public outsw_
|
||||
public wmemcpy_
|
||||
|
||||
;{{{ outveryfast_ proc
|
||||
outveryfast_ proc
|
||||
push ecx
|
||||
push esi
|
||||
|
||||
cld ; clear decrement flag, i assume
|
||||
|
||||
mov esi,eax ; save away for pump
|
||||
mov ecx,ebx
|
||||
add dx, 3 ; output status
|
||||
|
||||
#next_byte_reset:
|
||||
xor ebx,ebx ; clear error count
|
||||
|
||||
#next_byte:
|
||||
in al,dx
|
||||
and al, 1
|
||||
jz #loop_check ; output reg has cleared...
|
||||
|
||||
#loop_ready:
|
||||
|
||||
xor dx, 2 ; move to data register
|
||||
outsb ; output data in [esi++] to dx
|
||||
xor dx, 2 ; move to status register
|
||||
|
||||
loop #next_byte_reset
|
||||
|
||||
#exit_ok:
|
||||
mov ax,1
|
||||
pop esi
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
#loop_check: ; output reg has cleared...
|
||||
inc ebx
|
||||
xor ebx,256000
|
||||
jnz #next_byte
|
||||
|
||||
#exit_err:
|
||||
mov ax,0
|
||||
pop esi
|
||||
pop ecx
|
||||
ret
|
||||
|
||||
|
||||
outveryfast_ endp
|
||||
;}}}
|
||||
|
||||
; outsw - fifo transmit, followed by length word wown LA
|
||||
;
|
||||
; eax = length word
|
||||
; edx = link adapter base register
|
||||
; ebx = address of data to send
|
||||
; ecx = no of bytes to send
|
||||
;
|
||||
;
|
||||
|
||||
;{{{ outsw_ proc
|
||||
outsw_ proc
|
||||
|
||||
push esi
|
||||
add ecx, 3 ; make n_bytes be a multiple of
|
||||
and ecx, -4 ; 4 bytes
|
||||
shr ecx, 1 ; convert to shorts
|
||||
|
||||
; now do the fifo output
|
||||
|
||||
mov esi,ebx ; set up data base pointer
|
||||
|
||||
xor dx, 4 ; point at fifo read/write port
|
||||
rep outsw ; do the transfer
|
||||
xor dx, 7 ; move to output status
|
||||
and eax, -1
|
||||
jz #outsw_exitok
|
||||
|
||||
; now do the link adapter 32-bit length-word output
|
||||
|
||||
mov ecx, eax ; push length word into cx
|
||||
call output_byte
|
||||
shr ecx, 8
|
||||
call output_byte
|
||||
shr ecx, 8
|
||||
call output_byte
|
||||
shr ecx, 8
|
||||
call output_byte
|
||||
|
||||
#outsw_exitok:
|
||||
pop esi
|
||||
mov eax, 1
|
||||
ret ; return to caller
|
||||
|
||||
outsw_ endp
|
||||
|
||||
;
|
||||
; local function to output a single byte down LA
|
||||
;
|
||||
; dx = output status reg, ecx = byte to output
|
||||
;
|
||||
; on failure to output, returns to outsw caller
|
||||
;
|
||||
|
||||
output_byte proc
|
||||
|
||||
xor ebx,ebx ; do byte 0
|
||||
#byte_loop:
|
||||
in al,dx
|
||||
and al, 1
|
||||
jnz #byte_doit ; output reg has cleared...
|
||||
inc ebx
|
||||
xor ebx,256000
|
||||
jnz #byte_loop
|
||||
jmp #byte_exiterr
|
||||
#byte_doit:
|
||||
mov eax,ecx
|
||||
xor dx, 2 ; move to data register
|
||||
out dx, al ; output data in [esi++] to dx
|
||||
xor dx, 2 ; move to status register
|
||||
ret
|
||||
|
||||
#byte_exiterr:
|
||||
pop esi ; trash return address to outsw
|
||||
pop esi ; real esi
|
||||
mov eax, 0 ; put error code into eax for return
|
||||
ret ; and return to outsw caller
|
||||
|
||||
output_byte endp
|
||||
;}}}
|
||||
|
||||
; eax = dest
|
||||
; edx = src
|
||||
; ebx = no of bytes to send
|
||||
;
|
||||
;{{{ wmemcpy_ proc
|
||||
wmemcpy_ proc
|
||||
|
||||
push ecx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
mov ecx,ebx
|
||||
shr ecx,2
|
||||
mov esi,edx
|
||||
mov edi,eax
|
||||
rep movsd
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ecx
|
||||
|
||||
ret
|
||||
|
||||
wmemcpy_ endp
|
||||
;}}}
|
||||
|
||||
_text ends
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user