2014-05-30 08:55:32 +00:00
|
|
|
GETMEM16:
|
|
|
|
push eax
|
|
|
|
push ebx
|
|
|
|
push ecx
|
|
|
|
push edx
|
|
|
|
push esi
|
|
|
|
push edi
|
|
|
|
mov ax,es
|
|
|
|
push ax
|
|
|
|
mov ax,ds
|
|
|
|
push ax
|
|
|
|
|
|
|
|
mov ax,cs
|
|
|
|
mov es,ax
|
|
|
|
mov ds,ax
|
|
|
|
|
|
|
|
xor ebx,ebx
|
|
|
|
mov di,GETMEMBUFF ;es:di = ASRD
|
|
|
|
.loop:
|
|
|
|
mov eax,0E820h
|
|
|
|
mov ecx,20
|
2014-07-08 00:34:58 +00:00
|
|
|
;edx = 'SMAP'
|
2014-05-30 08:55:32 +00:00
|
|
|
mov edx,0534D4150h
|
|
|
|
int 15h
|
|
|
|
;if (CF!=0)
|
|
|
|
jc .fail
|
|
|
|
inc dword [GETMEMNUM]
|
|
|
|
;forward 20bytes
|
|
|
|
add di,20
|
|
|
|
cmp ebx,0
|
|
|
|
jne .loop
|
|
|
|
jmp .end
|
|
|
|
.fail:
|
|
|
|
mov dword [GETMEMNUM],0
|
|
|
|
.end:
|
|
|
|
|
|
|
|
pop ax
|
|
|
|
mov ds,ax
|
|
|
|
pop ax
|
|
|
|
mov es,ax
|
|
|
|
pop edi
|
|
|
|
pop esi
|
|
|
|
pop edx
|
|
|
|
pop ecx
|
|
|
|
pop ebx
|
|
|
|
pop eax
|
|
|
|
ret
|
|
|
|
|
|
|
|
DISPMEM16:
|
|
|
|
;must include io16.lib
|
|
|
|
push eax
|
|
|
|
push esi
|
|
|
|
push edi
|
|
|
|
push ecx
|
|
|
|
push edx
|
|
|
|
push ebp
|
|
|
|
mov ax,ds
|
|
|
|
push ax
|
|
|
|
mov ax,es
|
|
|
|
push ax
|
|
|
|
|
|
|
|
mov ax,cs
|
|
|
|
mov ds,ax
|
|
|
|
mov es,ax
|
|
|
|
|
|
|
|
xor eax,eax
|
|
|
|
mov eax,RAMTABLE16
|
|
|
|
push eax
|
|
|
|
call near DISPSTR16
|
|
|
|
pop eax
|
|
|
|
|
|
|
|
call DISPRETURN16
|
|
|
|
|
|
|
|
xor ebp,ebp
|
|
|
|
mov esi,GETMEMBUFF
|
|
|
|
mov ecx,[ds:GETMEMNUM]
|
|
|
|
mov edx,5
|
|
|
|
.loop1:
|
|
|
|
mov eax,dword [ds:esi]
|
|
|
|
push eax
|
|
|
|
call near DISPINTEAX16
|
|
|
|
pop eax
|
|
|
|
call near DISPSPACE16
|
|
|
|
inc ebp
|
|
|
|
dec edx
|
|
|
|
add esi,4
|
|
|
|
cmp ebp,5
|
|
|
|
jne .noinfo
|
|
|
|
xor ebp,ebp
|
|
|
|
cmp eax,1
|
|
|
|
je .ava
|
|
|
|
mov eax,RAMRESERVED
|
|
|
|
push eax
|
|
|
|
call near DISPSTR16
|
|
|
|
pop eax
|
|
|
|
jmp .noinfo
|
|
|
|
.ava:
|
|
|
|
mov eax,RAMAVAILABLE
|
|
|
|
push eax
|
|
|
|
call near DISPSTR16
|
|
|
|
pop eax
|
|
|
|
.noinfo:
|
|
|
|
cmp edx,0
|
|
|
|
jne .loop1
|
|
|
|
cmp dword [ds:esi-4],1
|
|
|
|
jne .end2
|
|
|
|
mov eax,dword [ds:esi-20]
|
|
|
|
add eax,dword [ds:esi-12]
|
|
|
|
cmp eax,[ds:DISPMEMTOTAL]
|
|
|
|
jb .end2
|
|
|
|
mov [ds:DISPMEMTOTAL],eax
|
|
|
|
.end2:
|
|
|
|
call near DISPRETURN16
|
|
|
|
dec ecx
|
|
|
|
mov edx,5
|
|
|
|
cmp ecx,0
|
|
|
|
je .end1
|
|
|
|
jmp .loop1
|
|
|
|
.end1:
|
|
|
|
call near DISPRETURN16
|
|
|
|
mov eax,RAMSIZE
|
|
|
|
push eax
|
|
|
|
call near DISPSTR16
|
|
|
|
pop eax
|
|
|
|
push dword [ds:DISPMEMTOTAL]
|
|
|
|
call near DISPINTEAX16
|
|
|
|
pop eax
|
|
|
|
pop ax
|
|
|
|
mov es,ax
|
|
|
|
pop ax
|
|
|
|
mov ds,ax
|
|
|
|
pop ebp
|
|
|
|
pop edx
|
|
|
|
pop ecx
|
|
|
|
pop edi
|
|
|
|
pop esi
|
|
|
|
pop eax
|
|
|
|
ret
|
|
|
|
|
|
|
|
DISPINTEAX16:
|
|
|
|
;Entrance: push eax
|
|
|
|
push ebp
|
|
|
|
mov ebp,esp
|
|
|
|
push eax
|
|
|
|
|
|
|
|
mov eax,dword [ss:ebp+6]
|
|
|
|
shr eax,24
|
|
|
|
mov ah,0Fh
|
|
|
|
push ax
|
|
|
|
call near DISPINTAL16
|
|
|
|
pop ax
|
|
|
|
|
|
|
|
mov eax,dword [ss:ebp+6]
|
|
|
|
shr eax,16
|
|
|
|
mov ah,0Fh
|
|
|
|
push ax
|
|
|
|
call near DISPINTAL16
|
|
|
|
pop ax
|
|
|
|
|
|
|
|
mov eax,dword [ss:ebp+6]
|
|
|
|
shr eax,8
|
|
|
|
mov ah,0Fh
|
|
|
|
push ax
|
|
|
|
call near DISPINTAL16
|
|
|
|
pop ax
|
|
|
|
|
|
|
|
mov eax,dword [ss:ebp+6]
|
|
|
|
mov ah,0Fh
|
|
|
|
push ax
|
|
|
|
call near DISPINTAL16
|
|
|
|
pop ax
|
|
|
|
|
|
|
|
pop eax
|
|
|
|
pop ebp
|
|
|
|
ret
|
|
|
|
|
|
|
|
DISPSTR16:
|
|
|
|
;Entrance: push offset
|
|
|
|
;ds:offset = String
|
|
|
|
push ebp
|
|
|
|
mov ebp,esp
|
|
|
|
push esi
|
|
|
|
push edi
|
|
|
|
push eax
|
|
|
|
push ebx
|
|
|
|
push gs
|
|
|
|
|
|
|
|
mov ax,0b800h
|
|
|
|
mov gs,ax
|
|
|
|
mov esi,dword [ss:ebp+6]
|
|
|
|
mov edi,dword [ds:GRAPHPOS]
|
|
|
|
.loop1:
|
|
|
|
mov al,byte [ds:esi]
|
|
|
|
cmp al,0
|
|
|
|
je .end
|
|
|
|
cmp al,0Ah
|
|
|
|
jne .loop2
|
|
|
|
;let edi point to the next row
|
|
|
|
;edi/(80*2) - every row:80 chars, each char takes 2 bytes.
|
|
|
|
push eax
|
|
|
|
mov eax,edi
|
|
|
|
mov bl,160
|
|
|
|
div bl
|
|
|
|
;only keep the low 8 of eax(al,aka quotion)
|
|
|
|
and eax, 0FFh
|
|
|
|
inc eax
|
|
|
|
;calculate the edi now
|
|
|
|
mov bl,160
|
|
|
|
mul bl
|
|
|
|
mov edi,eax
|
|
|
|
pop eax
|
|
|
|
inc esi
|
|
|
|
jmp .loop1
|
|
|
|
.loop2:
|
|
|
|
mov ah,0Fh
|
|
|
|
mov word [gs:edi],ax
|
|
|
|
add edi,2
|
|
|
|
inc esi
|
|
|
|
jmp .loop1
|
|
|
|
.end:
|
|
|
|
mov dword [ds:GRAPHPOS],edi
|
|
|
|
|
|
|
|
pop gs
|
|
|
|
pop ebx
|
|
|
|
pop eax
|
|
|
|
pop edi
|
|
|
|
pop esi
|
|
|
|
pop ebp
|
|
|
|
ret
|
|
|
|
|
|
|
|
DISPINTAL16:
|
|
|
|
;Entrance: push ax ,AH=ATTR, AL=Char
|
|
|
|
push ebp
|
|
|
|
mov ebp,esp
|
|
|
|
push eax
|
|
|
|
push gs
|
|
|
|
push ecx
|
|
|
|
push edi
|
|
|
|
push ebx
|
|
|
|
push ds
|
|
|
|
|
|
|
|
mov ax,cs
|
|
|
|
mov ds,ax
|
|
|
|
mov edi,dword [ds:GRAPHPOS]
|
|
|
|
mov ax,0b800h
|
|
|
|
mov gs,ax
|
|
|
|
xor eax,eax
|
|
|
|
mov ax, word [ss:ebp+6]
|
|
|
|
mov bx,ax
|
|
|
|
;keep high 4 bits of al
|
|
|
|
and al,0F0H
|
|
|
|
mov cl,4
|
|
|
|
shr al,cl
|
|
|
|
call near CHANGEAL
|
|
|
|
mov word [gs:edi],ax
|
|
|
|
add edi,2
|
|
|
|
mov dword [ds:GRAPHPOS],edi
|
|
|
|
;keep low 4 bits of al
|
|
|
|
mov ax,bx
|
|
|
|
and al,0Fh
|
|
|
|
call near CHANGEAL
|
|
|
|
mov ah,bh
|
|
|
|
mov word [gs:edi],ax
|
|
|
|
add edi,2
|
|
|
|
mov dword [ds:GRAPHPOS],edi
|
|
|
|
|
|
|
|
pop ds
|
|
|
|
pop ebx
|
|
|
|
pop edi
|
|
|
|
pop ecx
|
|
|
|
pop gs
|
|
|
|
pop eax
|
|
|
|
pop ebp
|
|
|
|
ret
|
|
|
|
|
|
|
|
CHANGEAL:
|
|
|
|
;Entrance:void
|
|
|
|
cmp al,09h
|
|
|
|
jna .l2
|
|
|
|
add al,37h
|
|
|
|
jmp .end
|
|
|
|
.l2:
|
|
|
|
add al,30h
|
|
|
|
.end:
|
|
|
|
ret
|
|
|
|
|
|
|
|
DISPRETURN16:
|
|
|
|
push eax
|
|
|
|
push ds
|
|
|
|
|
|
|
|
mov ax,cs
|
|
|
|
mov ds,ax
|
|
|
|
mov eax,IO16_RETURN
|
|
|
|
push eax
|
|
|
|
call near DISPSTR16
|
|
|
|
pop eax
|
|
|
|
|
|
|
|
pop ds
|
|
|
|
pop eax
|
|
|
|
ret
|
|
|
|
|
|
|
|
DISPSPACE16:
|
|
|
|
push eax
|
|
|
|
push ds
|
|
|
|
|
|
|
|
mov ax,cs
|
|
|
|
mov ds,ax
|
|
|
|
mov eax,IO16_SPACE
|
|
|
|
push eax
|
|
|
|
call near DISPSTR16
|
|
|
|
pop eax
|
|
|
|
|
|
|
|
pop ds
|
|
|
|
pop eax
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|