Files
TeslaRel410/sda4/DPL3/OUTFAST.LST
T
CydandClaude Fable 5 db7745fcd0 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>
2026-07-04 19:41:15 -05:00

269 lines
14 KiB
Plaintext

Phar Lap Macro Assembler Version 4.1 Wed Jul 27 11:31:36 1994
Page 1-1
;
; outfast.asm - some optimized comms st
uff for VPX
;
; outveryfast
;
; eax = pointer to data
; edx = link adapter base register
; ebx = no of bytes to send
;
.PROT
assume cs:_text
00000000 _text segment
public outveryfast_
public outsw_
public wmemcpy_
;{{{ outveryfast_ proc
00000000 outveryfast_ proc
00000000 51 push ecx
00000001 56 push esi
00000002 FC cld ; clear decreme
nt flag, i assume
00000003 8B F0 mov esi,eax ; save away for
pump
00000005 8B CB mov ecx,ebx
00000007 66| 83 C2 03 add dx, 3 ; output status
0000000B #next_byte_reset:
0000000B 33 DB xor ebx,ebx ; clear error c
ount
0000000D #next_byte:
0000000D EC in al,dx
0000000E 24 01 and al, 1
00000010 0F 84 00000012 jz #loop_check ; output reg has
cleared...
00000016 #loop_ready:
00000016 66| 83 F2 02 xor dx, 2 ; move to data r
egister
0000001A 6E outsb ; output data in
[esi++] to dx
0000001B 66| 83 F2 02 xor dx, 2 ; move to status
register
Phar Lap Macro Assembler Version 4.1 Wed Jul 27 11:31:36 1994
Page 1-2
0000001F E2 EA loop #next_byte_reset
00000021 #exit_ok:
00000021 66| B8 0001 mov ax,1
00000025 5E pop esi
00000026 59 pop ecx
00000027 C3 ret
00000028 #loop_check: ; output
reg has cleared...
00000028 43 inc ebx
00000029 81 F3 0003E800 xor ebx,256000
0000002F 75 DC jnz #next_byte
00000031 #exit_err:
00000031 66| B8 0000 mov ax,0
00000035 5E pop esi
00000036 59 pop ecx
00000037 C3 ret
outveryfast_ endp
;}}}
; outsw - fifo transmit, followed by le
ngth 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
00000038 outsw_ proc
00000038 56 push esi
00000039 83 C1 03 add ecx, 3 ; mak
e n_bytes be a multiple of
0000003C 83 E1 FC and ecx, -4 ; 4 b
ytes
0000003F D1 E9 shr ecx, 1 ; con
vert to shorts
; now do the fifo output
00000041 8B F3 mov esi,ebx ; set
up data base pointer
00000043 66| 83 F2 04 xor dx, 4 ; poi
nt at fifo read/write port
00000047 F3/ 66| 6F rep outsw ; do
Phar Lap Macro Assembler Version 4.1 Wed Jul 27 11:31:36 1994
Page 1-3
the transfer
0000004A 66| 83 F2 07 xor dx, 7 ; mov
e to output status
0000004E 25 FFFFFFFF and eax, -1
00000053 0F 84 0000001F jz #outsw_exitok
; now do the link adapter 32-bit leng
th-word output
00000059 8B C8 mov ecx, eax ; pus
h length word into cx
0000005B E8 0000001F call output_byte
00000060 C1 E9 08 shr ecx, 8
00000063 E8 00000017 call output_byte
00000068 C1 E9 08 shr ecx, 8
0000006B E8 0000000F call output_byte
00000070 C1 E9 08 shr ecx, 8
00000073 E8 00000007 call output_byte
00000078 #outsw_exitok:
00000078 5E pop esi
00000079 B8 00000001 mov eax, 1
0000007E C3 ret ; ret
urn to caller
outsw_ endp
;
; local function to output a single byt
e down LA
;
; dx = output status reg, ecx = byte to
output
;
; on failure to output, returns to outs
w caller
;
0000007F output_byte proc
0000007F 33 DB xor ebx,ebx ; do
byte 0
00000081 #byte_loop:
00000081 EC in al,dx
00000082 24 01 and al, 1
00000084 0F 85 0000000E jnz #byte_doit ; out
put reg has cleared...
0000008A 43 inc ebx
0000008B 81 F3 0003E800 xor ebx,256000
00000091 75 EE jnz #byte_loop
00000093 E9 0000000C jmp #byte_exiterr
00000098 #byte_doit:
00000098 8B C1 mov eax,ecx
0000009A 66| 83 F2 02 xor dx, 2 ; move to data r
Phar Lap Macro Assembler Version 4.1 Wed Jul 27 11:31:36 1994
Page 1-4
egister
0000009E EE out dx, al ; output data in
[esi++] to dx
0000009F 66| 83 F2 02 xor dx, 2 ; move to status
register
000000A3 C3 ret
000000A4 #byte_exiterr:
000000A4 5E pop esi ; trash return a
ddress to outsw
000000A5 5E pop esi ; real esi
000000A6 B8 00000000 mov eax, 0 ; put error code
into eax for return
000000AB C3 ret ; and return to
outsw caller
output_byte endp
;}}}
; eax = dest
; edx = src
; ebx = no of bytes to send
;
;{{{ wmemcpy_ proc
000000AC wmemcpy_ proc
000000AC 51 push ecx
000000AD 56 push esi
000000AE 57 push edi
000000AF 8B CB mov ecx,ebx
000000B1 C1 E9 02 shr ecx,2
000000B4 8B F2 mov esi,edx
000000B6 8B F8 mov edi,eax
000000B8 F3/ A5 rep movsd
000000BA 5F pop edi
000000BB 5E pop esi
000000BC 59 pop ecx
000000BD C3 ret
wmemcpy_ endp
;}}}
000000BE _text ends
end
Phar Lap Macro Assembler Version 4.1 Wed Jul 27 11:31:36 1994
Symbols-1
GROUPS AND SEGMENTS
Name Size Use Align Combine Class
_text . . . . . . . . . . . . . 000000BE USE32 PARA NONE
PROCEDURES
Name Type Offset Scope Segment
output_byte . . . . . . . . . . N PROC 0000007F Prvate _text
LOCAL VARIABLES AND LABELS
#byte_doit . . . . . . . . . N LABEL 00000098 Local _text
#byte_exiterr . . . . . . . . N LABEL 000000A4 Local _text
#byte_loop . . . . . . . . . N LABEL 00000081 Local _text
outsw_ . . . . . . . . . . . . . N PROC 00000038 Public _text
LOCAL VARIABLES AND LABELS
#outsw_exitok . . . . . . . . N LABEL 00000078 Local _text
outveryfast_ . . . . . . . . . . N PROC 00000000 Public _text
LOCAL VARIABLES AND LABELS
#exit_err . . . . . . . . . . N LABEL 00000031 Local _text
#exit_ok . . . . . . . . . . N LABEL 00000021 Local _text
#loop_check . . . . . . . . . N LABEL 00000028 Local _text
#loop_ready . . . . . . . . . N LABEL 00000016 Local _text
#next_byte . . . . . . . . . N LABEL 0000000D Local _text
#next_byte_reset . . . . . . N LABEL 0000000B Local _text
wmemcpy_ . . . . . . . . . . . . N PROC 000000AC Public _text
15 Symbols
0 Warning Errors
0 Severe Errors