home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix Heaven Sunny 2
/
APPARE2.BIN
/
oh_towns
/
ugoku
/
ugokulib
/
etc
/
console.asm
next >
Wrap
Assembly Source File
|
1995-06-20
|
4KB
|
244 lines
; Graph_lib
;
; call from High C
;
; 1990 4 Hiroshi TODA
;
.386p
work4 struc ; files WORK
;data area
path dd ? ; path name address
output dd ? ; file name output address
dta dd ? ; DTA trans address
attr dd ? ; attr
fmode dd ? ; 0:first 1:next 2:end
;work area
pathbuf dd ? ; path 転送
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
dd ?
fbuf dd ?
work4 ends
work5 struc ; key console BIOS WORK
x51 dd ?
x52 dd ?
x53 dd ?
x54 dd ?
work5 ends
cseg segment 'CODE'
assume cs:cseg,ds:cseg
;files(work,para) para=eax --> path-addre out-addre DTAout-add attr mode
public files
db 'files',5
files proc near
push ebp
mov ebp,esp ; ebp <-- param area top add
push esi
push edi
push ebx
mov esi,offset #buffer ; esi <-- 自前の buffer
mov edi,[ebp+12] ; edi <-- para. add.
xor ecx,ecx ; ecx=count
file01: mov eax,[edi][ecx*4] ; para. --> work area
mov [esi][ecx*4],eax
inc ecx
cmp ecx,5
jb file01
mov edx,[esi].path ; path trans
lea edi,[esi].pathbuf
xor ecx,ecx
file0A: mov eax,[edx][ecx*4]
mov [edi][ecx*4],eax
inc ecx
cmp ecx,16
jb file0A
mov eax,[esi].fmode ; eax <-- mode
cmp eax,0
jne file05
lea edx,[esi].fbuf ; mode 0
file02: mov ah,1Ah ; buffer set
int 21H
mov edx,[esi].path
file03: mov ah,4Eh ; first search
mov ecx,[esi].attr ; attr.
int 21h
jc file07 ; no file
call putf
xor eax,eax
jmp file08
file05: cmp eax,1
jne file08
mov ah,4Fh ; mode 1
int 21h
jc file07
call putf
xor eax,eax
jmp file08
file07: and eax,0FFFFh
file08: pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
putf: lea edx,[esi].fbuf+1Eh ; display f-name out
mov edi,[esi].output
xor ecx,ecx
putf01: mov byte ptr [edi][ecx],20h
inc ecx
cmp ecx,16
jb putf01
mov eax,[edx]
and eax,0FFFFh ; '..', '.' check
cmp eax,02E2Eh
je putf02
cmp eax,02Eh
jne putf0A
putf02: mov [edi],eax
jmp putf05
putf0A: xor ecx,ecx
putf03: mov al,[edx][ecx]
cmp al,'.'
je putf04
mov [edi][ecx],al
inc ecx
cmp ecx,13
jb putf03
jmp putf05
putf04: inc ecx
mov eax,[edx][ecx]
mov [edi].9,eax
putf05: lea edx,[esi].fbuf ; DTA out
mov edi,[esi].dta
xor ecx,ecx
putf06: mov al,[edx][ecx]
mov [edi][ecx],al
inc ecx
cmp ecx,43
jb putf06
ret
#buffer db 256 dup(0)
files endp
;get_directory(drive,path_name_address)
public get_directory
db 'get_directory',13
get_directory proc near
push ebp
mov ebp,esp ; ebp <-- param area top add
push esi
push edi
push ebx
mov esi,[ebp+12] ; path_name address
mov edx,[ebp+8] ; drive number
mov ah,47h
int 21h
jc #get01
xor eax,eax
#get01: and eax,0000FFFFh
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
get_directory endp
;keyin(out,para) para=eax,ebx,ecx,edx --> out=eax,ebx,ecx,edx
public keyin
db 'keyin',5
keyin proc near
push ebp
mov ebp,esp ; ebp <-- param area top add
push esi
push edi
push ebx
mov esi,[ebp+8] ; esi <-- work area top add
mov edi,[ebp+12] ; edi <-- para. add.
xor ecx,ecx ; ecx=count
key01: mov eax,[edi][ecx*4] ; para. --> work area
mov [esi][ecx*4],eax
inc ecx
cmp ecx,4
jb key01
mov eax,[esi].x51 ; ES store
mov ebx,[esi].x52
mov ecx,[esi].x53
mov edx,[esi].x54
int 90H
mov [esi].x51,eax
mov [esi].x52,ebx
mov [esi].x53,ecx
mov [esi].x54,edx
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
keyin endp
;console(out,para) para=eax,ebx,ecx,edx --> out=eax,ebx,ecx,edx
public console
db 'console',7
console proc near
push ebp
mov ebp,esp ; ebp <-- param area top add
push esi
push edi
push ebx
mov esi,[ebp+8] ; esi <-- work area top add
mov edi,[ebp+12] ; edi <-- para. add.
xor ecx,ecx ; ecx=count
cns01: mov eax,[edi][ecx*4] ; para. --> work area
mov [esi][ecx*4],eax
inc ecx
cmp ecx,4
jb cns01
mov eax,[esi].x51 ; ES store
mov ebx,[esi].x52
mov ecx,[esi].x53
mov edx,[esi].x54
int 91H
mov [esi].x51,eax
mov [esi].x52,ebx
mov [esi].x53,ecx
mov [esi].x54,edx
xor eax,eax
pop ebx
pop edi
pop esi
mov esp,ebp
pop ebp
ret
console endp
cseg ends
end