⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lasm.asm

📁 ldraw_DOS游戏开发包
💻 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 + -