📄 lasm.asm
字号:
; *****************************************************************************
; *
; * LinSys v1.1 for Watcom C++ 10.0
; * By Lin Wei inc 2000,
; *
; * Header file for the LinSys library.
; * This should be included by everyone and everything.
; *
; * See readme.txt for copyright information.
; *
.486p
.DOSSEG
.MODEL FLAT,C
.CODE
SC_INDEX equ 03c4h
CRTC_INDEX equ 03d4h
MISC_OUTPUT equ 03c2h
SCREEN_ADDR equ 0a0000h
VRAM_ADDR dd 0a0000h
CUR_PAGE db 0
DATA_1 dd 0
DATA_2 dw 0
DATA_3 dw 0
; void LBLit1X(char *sour,char *dest,int d_s,int d_d,short len,short wid);
; void LBLit2X(char *sour,char *dest,int d_s,int d_d,short len,short wid);
; void LModeXShow(char *vbuf,char *buf,short len);
; void LModeXSetVRAM(unsigned short offset);
; void LModeXSetStartAddr(unsigned short offset);
; void LLoadPalX(char *buf);
; void LSavePalX(char *buf);
; void LVGApageX(short page);
; void LMemCpy2X(void *dest,void *source,long Len);
; void LFGetSum(short *result,char *res,short len);
;////////////////////////////////////////////////////////////////////////////
LBlit1X PROC PUBLIC USES ESI EDI EAX EBX ECX EDX,
SOURCE:DWORD, DEST:DWORD, D_S:DWORD, D_D:DWORD, LEN:WORD, WID:WORD
CLD
MOV ESI,SOURCE
MOV EDI,DEST
XOR EBX,EBX
XOR EAX,EAX
XOR ECX,ECX
MOV BX,WID
MOV AX,LEN
Loop_line:
MOV CX,AX
SHR CX,2
REP MOVSD
MOV CX,AX
AND CX,3
CMP Cl,0
JZ next
REP MOVSB
next:
ADD ESI,D_S
ADD EDI,D_D
DEC BX
JNZ Loop_line
RET
LBlit1X ENDP
LBlit2X PROC PUBLIC USES ESI EDI EBX ECX EDX AX,
SOURCE:DWORD, DEST:DWORD, D_S:DWORD, D_D:DWORD, LEN:WORD, WID:WORD
CLD
MOV ESI,SOURCE
MOV EDI,DEST
XOR EBX,EBX
XOR ECX,ECX
XOR EDX,EDX
MOV BX,WID
MOV DX,LEN
Loop_line:
MOV CX,DX
Loop_pixel:
MOV AL,[ESI]
CMP AL,0
JE No_write
MOV [EDI],AL
No_write:
INC ESI
INC EDI
DEC CX
JNZ Loop_pixel
next:
ADD ESI,D_S
ADD EDI,D_D
DEC BX
JNZ Loop_line
RET
LBlit2X ENDP
LMemCpy2X PROC PUBLIC USES ESI EDI ECX AX,
DEST:DWORD, SOURCE:DWORD, LEN:DWORD
cld
mov esi,source
mov edi,dest
mov ecx,len
_for:mov al,[esi]
cmp al,0
jz _next
mov [edi],al
_next:inc esi
inc edi
dec ecx
jnz _for
ret
LMemCpy2X ENDP
LModeXShow PROC PUBLIC USES ESI EDI ECX DX,
VBUF:DWORD, SOURCE:DWORD, LEN:WORD
cld
mov esi,SOURCE
mov edi,VBUF
mov dx,SC_INDEX
mov al,2
out dx,al
inc dx
mov al,1
out dx,al
shr LEN,2
sub ecx,ecx
mov cx,LEN
push esi
Pixel_Loop1:
movsb
inc esi
inc esi
inc esi
dec cx
jnz Pixel_Loop1
mov al,2
out dx,al
mov edi,VBUF
mov cx,LEN
pop esi
inc esi
push esi
Pixel_Loop2:
movsb
inc esi
inc esi
inc esi
dec cx
jnz Pixel_Loop2
mov al,4
out dx,al
mov edi,VBUF
mov cx,LEN
pop esi
inc esi
push esi
Pixel_Loop3:
movsb
inc esi
inc esi
inc esi
dec cx
jnz Pixel_Loop3
mov al,8
out dx,al
mov edi,VBUF
mov cx,LEN
pop esi
inc esi
Pixel_Loop4:
movsb
inc esi
inc esi
inc esi
dec cx
jnz Pixel_Loop4
ret
LModeXShow ENDP
LModeXSetVRAM PROC PUBLIC USES EAX,
NEWVRAM:WORD
sub eax,eax
mov ax,NEWVRAM
add eax,SCREEN_ADDR
mov VRAM_ADDR,eax
ret
LModeXSetVRAM ENDP
LModeXSetStartAddr PROC PUBLIC USES AX BX DX,
SADDR:WORD
mov dx,CRTC_INDEX
mov bx,SADDR
mov al,0ch
mov ah,bh
out dx,ax
inc al
mov ah,bl
out dx,ax
ret
LModeXSetStartAddr ENDP
LVGApageX PROC PUBLIC USES BX AX DX,
VGAPAGE:WORD
mov bx,VGAPAGE
cmp bl,CUR_PAGE
jz exit
xor bl,02h
mov dx,3c4h
mov al,0eh
out dx,al
inc dx
mov al,bl
out dx,al
exit:
mov AX,VGAPAGE
mov CUR_PAGE,al
ret
LVGApageX ENDP
LLoadPalX PROC PUBLIC USES EDI ESI EAX ECX EDX,
BUF:DWORD
mov edi,buf
xor ecx,ecx
next_color:
mov dx,3c7h
mov al,cl
out dx,al
add dx,2
in al,dx
stosb
in al,dx
stosb
in al,dx
stosb
inc cx
cmp cx,256
jb next_color
ret
LLoadPalX ENDP
LSetPalX PROC PUBLIC USES EDI ESI EAX EDX CX BX,
BUF:DWORD
mov esi,buf
sub cx,cx
sub bx,bx
mov cx,256
next_color:
mov dx,3c8h
mov al,bl
out dx,al
inc dx
outsb
outsb
outsb
inc bx
dec cx
jnz next_color
ret
LSetPalX ENDP
LFGetSum PROC PUBLIC USES ECX ESI AX BX,
RESULT:DWORD, RES:DWORD, LEN:WORD
cld
sub ax,ax
sub bx,bx
sub ecx,ecx
mov cx,LEN
mov esi,RES
loop_j:
mov bl,[esi]
inc si
add ax,bx
dec cx
jnz loop_j
mov esi,RESULT
mov [esi],ax
ret
LFGetSum ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -