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

📄 procvid.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    ror edx,16

    mov edi,FontData
    xor ebx,ebx
    mov bl,al
    shl ebx,3
    add edi,ebx
    call OutputText16b
    pop ecx
    pop edx
    pop eax
    pop esi
    pop edi
    ret

NEWSYM textcolor, db 128
NEWSYM textcolor16b, dw 0FFFFh

NEWSYM outputchar5x5
    push edi
    push esi
    push eax
    mov edi,GUIFontData
    xor ebx,ebx
    mov bl,al
    shl ebx,2
    add edi,ebx
    xor ebx,ebx
    mov bl,al
    add edi,ebx
    mov cl,5
.loopa
    mov ah,[edi]
    mov ch,5
.loopb
    test ah,80h
    jz .nowrite
    mov al,[textcolor]
    mov byte[esi],al
.nowrite
    shl ah,1
    inc esi
    dec ch
    jnz .loopb
    add esi,283
    inc edi
    dec cl
    jnz .loopa
    pop eax
    pop esi
    pop edi
    ret

NEWSYM outputchar16b5x5
    push edi
    push esi
    push eax
    mov edi,GUIFontData
    xor ebx,ebx
    mov bl,al
    shl ebx,2
    add edi,ebx
    xor ebx,ebx
    mov bl,al
    add edi,ebx
    mov cl,5
.loopa
    mov ah,[edi]
    mov ch,5
.loopb
    test ah,80h
    jz .nowrite
    push eax
    mov ax,[textcolor16b]
    mov word[esi],ax
    mov word[esi+75036*4],ax
    pop eax
.nowrite
    shl ah,1
    add esi,2
    dec ch
    jnz .loopb
    add esi,283*2
    inc edi
    dec cl
    jnz .loopa
    pop eax
    pop esi
    pop edi
    ret

NEWSYM outputchar16b5x52
    push edi
    push esi
    push eax
    mov edi,GUIFontData
    xor ebx,ebx
    mov bl,al
    shl ebx,2
    add edi,ebx
    xor ebx,ebx
    mov bl,al
    add edi,ebx
    mov word[esi-288*2],0
    mov word[esi+2-288*2],0
    mov word[esi+4-288*2],0
    mov word[esi+6-288*2],0
    mov word[esi+8-288*2],0
    mov word[esi+10-288*2],0
    mov word[esi-288*2+75036*4],0
    mov word[esi+2-288*2+75036*4],0
    mov word[esi+4-288*2+75036*4],0
    mov word[esi+6-288*2+75036*4],0
    mov word[esi+8-288*2+75036*4],0
    mov word[esi+10-288*2+75036*4],0
    mov cl,5
.loopa
    mov ah,[edi]
    mov ch,5
.loopb
    mov word[esi],0
    mov word[esi+2],0
    mov word[esi+75036*4],0
    mov word[esi+2+75036*4],0
    test ah,80h
    jz .nowrite
    push eax
    mov ax,[textcolor16b]
    mov word[esi],ax
    mov word[esi+75036*4],ax
    pop eax
.nowrite
    shl ah,1
    add esi,2
    dec ch
    jnz .loopb
    add esi,283*2
    inc edi
    dec cl
    jnz .loopa
    mov word[esi],0
    mov word[esi+2],0
    mov word[esi+4],0
    mov word[esi+6],0
    mov word[esi+8],0
    mov word[esi+10],0
    mov word[esi+75036*4],0
    mov word[esi+2+75036*4],0
    mov word[esi+4+75036*4],0
    mov word[esi+6+75036*4],0
    mov word[esi+8+75036*4],0
    mov word[esi+10+75036*4],0
    pop eax
    pop esi
    pop edi
    ret

;*******************************************************
; Output Graphic String   Outputs String from edi to esi
;*******************************************************

NEWSYM OutputGraphicString
    cmp byte[cbitmode],1
    je .do16b
.no16bit
    xor eax,eax
.nextstr
    mov al,[edi]
    cmp al,0
    je .nomore
    mov al,[ASCII2Font+eax]
    call outputchar
    add esi,8
    inc edi
    jmp .nextstr
.nomore
    ret

.do16b
    sub esi,[vidbuffer]
    shl esi,1
    add esi,[vidbuffer]
    cmp byte[textcolor],128
    jne .no128
    mov word[textcolor16b],0FFFFh
.no128
    cmp byte[textcolor],129
    jne .no129
    mov word[textcolor16b],0
.no129
    cmp byte[textcolor],130
    jne .no130
    xor ax,ax
    xor bx,bx
    mov cl,[vesa2_rpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_gpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_bpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov word[textcolor16b],ax
.no130
    ; Color #131, Red
    cmp byte[textcolor],131
    jne .no131
    xor ax,ax
    xor bx,bx
    mov cl,[vesa2_rpos]
    mov bx,22
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_gpos]
    mov bx,5
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_bpos]
    mov bx,5
    shl bx,cl
    add ax,bx
    mov word[textcolor16b],ax
.no131
    jmp OutputGraphicString16b

NEWSYM OutputGraphicString16b
    xor eax,eax
.nextstr
    mov al,[edi]
    cmp al,0
    je .nomore
    mov al,[ASCII2Font+eax]
    call outputchar16b
    add esi,16
    inc edi
    jmp .nextstr
.nomore
    ret

NEWSYM OutputGraphicString5x5
    cmp byte[cbitmode],1
    je .do16b
.no16bit
    xor eax,eax
.nextstr
    mov al,[edi]
    cmp al,0
    je .nomore
    mov al,[ASCII2Font+eax]
    call outputchar5x5
    add esi,6
    inc edi
    jmp .nextstr
.nomore
    ret

.do16b
    sub esi,[vidbuffer]
    shl esi,1
    add esi,[vidbuffer]
    cmp byte[textcolor],128
    jne .no128
    mov word[textcolor16b],0FFFFh
.no128
    cmp byte[textcolor],129
    jne .no129
    mov word[textcolor16b],0
.no129
    cmp byte[textcolor],130
    jne .no130
    xor ax,ax
    xor bx,bx
    mov cl,[vesa2_rpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_gpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_bpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov word[textcolor16b],ax
.no130
    ; Color #131, Red
    cmp byte[textcolor],131
    jne .no131
    xor ax,ax
    xor bx,bx
    mov cl,[vesa2_rpos]
    mov bx,22
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_gpos]
    mov bx,5
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_bpos]
    mov bx,5
    shl bx,cl
    add ax,bx
    mov word[textcolor16b],ax
.no131
    jmp OutputGraphicString16b5x5

NEWSYM OutputGraphicString16b5x5
    xor eax,eax
.nextstr
    mov al,[edi]
    cmp al,0
    je .nomore
    mov al,[ASCII2Font+eax]
    call outputchar16b5x5
    add esi,12
    inc edi
    jmp .nextstr
.nomore
    ret

NEWSYM OutputGraphicString16b5x52
    xor eax,eax
.nextstr
    mov al,[edi]
    cmp al,0
    je .nomore
    mov al,[ASCII2Font+eax]
    call outputchar16b5x52
    add esi,12
    inc edi
    jmp .nextstr
.nomore
    ret

NEWSYM OutputGraphicStringb
    cmp byte[cbitmode],1
    je near .do16b
    xor eax,eax
    cmp byte[edi-1],1
    je .dir
    cmp byte[edi-1],2
    je near .drive
    sub esi,8
.nextstr
    mov al,[edi]
    cmp al,0
    je .nomore
    mov al,[ASCII2Font+eax]
    call outputchar
    add esi,8
    inc edi
    jmp .nextstr
.nomore
    ret
.dir
    sub esi,8
    mov al,'<'
    mov al,[ASCII2Font+eax]
    call outputchar
    add esi,8
.nextstr2
    mov al,[edi]
    cmp al,0
    je .nomore2
    mov al,[ASCII2Font+eax]
    call outputchar
    add esi,8
    inc edi
    jmp .nextstr2
.nomore2
    mov al,'>'
    mov al,[ASCII2Font+eax]
    call outputchar
    ret
.drive
    sub esi,8
    mov al,'['
    mov al,[ASCII2Font+eax]
    call outputchar
    add esi,8
.nextstr3
    mov al,[edi]
    cmp al,0
    je .nomore3
    mov al,[ASCII2Font+eax]
    call outputchar
    add esi,8
    inc edi
    jmp .nextstr3
.nomore3
    mov al,']'
    mov al,[ASCII2Font+eax]
    call outputchar
    ret
.do16b
    sub esi,[vidbuffer]
    shl esi,1
    add esi,[vidbuffer]
    cmp byte[textcolor],128
    jne .no128
    mov word[textcolor16b],0FFFFh
.no128
    cmp byte[textcolor],129
    jne .no129
    mov word[textcolor16b],0
.no129
    cmp byte[textcolor],130
    jne .no130
    xor ax,ax
    xor bx,bx
    mov cl,[vesa2_rpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_gpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_bpos]
    mov bx,20
    shl bx,cl
    add ax,bx
    mov word[textcolor16b],ax
.no130
    ; Color #131, Red
    cmp byte[textcolor],131
    jne .no131
    xor ax,ax
    xor bx,bx
    mov cl,[vesa2_rpos]
    mov bx,22
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_gpos]
    mov bx,5
    shl bx,cl
    add ax,bx
    mov cl,[vesa2_bpos]
    mov bx,5
    shl bx,cl
    add ax,bx
    mov word[textcolor16b],ax
.no131
NEWSYM OutputGraphicString16bb
    xor eax,eax
    cmp byte[edi-1],1
    je .dir
    cmp byte[edi-1],2
    je near .drive
    xor eax,eax
    sub esi,16
.nextstr
    mov al,[edi]
    cmp al,0
    je .nomore
    mov al,[ASCII2Font+eax]
    call outputchar16b
    add esi,16
    inc edi
    jmp .nextstr
.nomore
    ret
.dir
    sub esi,16
    mov al,'<'
    mov al,[ASCII2Font+eax]
    call outputchar16b
    add esi,16
.nextstr2
    mov al,[edi]
    cmp al,0
    je .nomore2
    mov al,[ASCII2Font+eax]
    call outputchar16b
    add esi,16
    inc edi
    jmp .nextstr2
.nomore2
    mov al,'>'
    mov al,[ASCII2Font+eax]
    call outputchar16b
    ret
.drive
    sub esi,16
    mov al,'['
    mov al,[ASCII2Font+eax]
    call outputchar16b
    add esi,16
.nextstr3
    mov al,[edi]
    cmp al,0
    je .nomore3
    mov al,[ASCII2Font+eax]
    call outputchar16b
    add esi,16
    inc edi
    jmp .nextstr3
.nomore3
    mov al,']'
    mov al,[ASCII2Font+eax]
    call outputchar16b
    ret

;*******************************************************
; Save Select      Allows user to select save state slot
;*******************************************************
; For Save State

NEWSYM csounddisable, db 0
NEWSYM statefileloc,  dd 0
newestfileloc db 0
newestfiledate dd 0
f3menuen db 0
PrevPictureVal db 0
CurPictureVal db 0

NEWSYM drawhline
.loop
    mov byte[esi],al
    inc esi
    loop .loop
    ret

NEWSYM drawhline16b
.loop
    mov [esi],ax
    add esi,2
    loop .loop
    ret

NEWSYM drawvline
.loop
    mov byte[esi],al
    add esi,288
    loop .loop
    ret

NEWSYM drawvline16b
.loop
    mov [esi],ax
    add esi,288*2
    loop .loop
    ret

%macro determinenewhelp 2
    mov bl,%1
    mov byte[fnamest+eax],%2
    call DetermineNew
%endmacro

DetermineNew:
    push eax
    push ebx
    mov edx,fnamest+1
    call Open_File
    jc near .nodraw
    mov bx,ax
    mov edx,fnamest+1
    call Get_File_Date
%ifndef __LINUX__
    shl edx,16
    mov dx,cx
%endif
    push edx
    call Close_File
    pop edx
    pop ebx
    pop eax
    ; date = edx, position = bl
    cmp edx,[newestfiledate]
    jbe .notlatest
    mov [newestfiledate],edx
    mov [newestfileloc],bl
.notlatest
    ret
.nodraw
    pop ebx
    pop eax
    ret

DetermineNewest:
    mov dword[newestfiledate],0
    mov byte[newestfileloc],0

%ifdef __LINUX__
    determinenewhelp 0,'t'
%else
    determinenewhelp 0,'T'
%endif
    determinenewhelp 1,'1'
    determinenewhelp 2,'2'
    determinenewhelp 3,'3'
    determinenewhelp 4,'4'
    determinenewhelp 5,'5'
    determinenewhelp 6,'6'
    determinenewhelp 7,'7'
    determinenewhelp 8,'8'
    determinenewhelp 9,'9'
    ret

NEWSYM CapturePicture
    pushad
    mov esi,[vidbuffer]
    add esi,288*2+16*2
    mov edi,PrevPicture
    mov edx,56
.next
    push esi
    push edx
    mov dx,1111011111011110b
    cmp byte[newengen],0
    je .noneweng2
    cmp byte[nggposng],5
    jne .noneweng2
    mov dx,0111101111011110b
.noneweng2
    mov ecx,64
.loop
    mov ax,[esi]
    mov bx,[esi+4]
    and ax,dx
    and bx,dx
    shr ax,1
    shr bx,1
    add ax,bx
    push ax
    mov ax,[esi+288*2]
    mov bx,[esi+4+288*2]
    and ax,dx
    and bx,dx
    shr ax,1
    shr bx,1
    add bx,ax
    pop ax
    and ax,dx
    and bx,dx
    shr ax,1
    shr bx,1
    add ax,bx
    mov [edi],ax
    add esi,8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -