📄 systree.asm
字号:
mov eax,edx
xor edx,edx
mov ebx,62
mul ebx
add eax,fileinfo
mov ebx,155*65536
shr ecx,16
mov bx,cx
add ebx,5*65536+3
mov ecx,0xffffff
cmp [eax+21],word 'SM'
jnz noasm
mov ecx,0x88ffff
noasm:
cmp [eax+7],word 'OL'
jnz nofolt
mov ecx,0xffff00
nofolt:
cmp [eax+7],word 'EL'
jnz nodelt
mov ecx,0x99aaee
nodelt:
mov edx,eax
mov esi,57
mov eax,4
int 0x40
popa
add ecx,(13*65536)
inc edx
cmp edx,37
jnz newb
popa
ret
fileinfoblock:
dd 0x0 ; read
dd 0x0 ; first block
dd 0x1 ; number of blocks to read
dd 0x20000 ; ret
dd 0x10000 ; work
filedir:
times 12*10 db 32
read_directory:
mov edi,0x20000
mov eax,0
mov ecx,512
cld
rep stosb
mov esi,location
mov edi,filedir
mov ecx,12*8
cld
rep movsb
mov eax,[loclen]
mov [filedir+eax],byte 0
mov eax,[readblock]
dec eax
mov [fileinfoblock+4],eax
mov eax,58
mov ebx,fileinfoblock
int 0x40
cmp eax,0
jne hd_read_error
mov [dirlen],ebx
mov esi,0x20000
mov edi,data_area+1024
mov ecx,512
cld
rep movsb
mov ebx,1024
; command succesful
mov esi,data_area+1024
mov edi,fileinfo+11
mov edx,16
newlineb:
pusha ; clear
mov al,32
mov ecx,58
sub edi,11
cld
rep stosb
popa
mov cl,[esi] ; end of entries ?
cmp cl,6
jnz noib0
mov [edi-5],dword 'EOE '
add esi,32
add edi,62
jmp inf
noib0:
mov cl,[esi+0]
cmp cl,0xe5
je yesdelfil
mov cl,[esi+11] ; long fat32 name ?
cmp cl,0xf
jnz noib1
mov [edi-5],dword 'F32 '
add esi,32
add edi,62
jmp inf
noib1:
mov eax,'DAT ' ; data or .. ?
mov cl,[esi+0] ; deleted file
cmp cl,0xe5
je yesdelfil
cmp cl,0x0
je yesdelfil
jmp nodelfil
yesdelfil:
mov eax,'DEL '
jmp ffile
nodelfil:
mov cl,[esi+11] ; folder
and cl,0x10
jz ffile
mov eax,'FOL '
mov [edi-5],eax
mov [edi+45],byte '-'
jmp nosize
ffile:
mov [edi-5],eax
pusha ; size
mov eax,[esi+28]
mov esi,edi
add esi,37
mov ebx,10
mov ecx,8
newnum:
xor edx,edx
div ebx
add dl,48
mov [esi],dl
cmp eax,0
jz zernum
sub esi,1
loop newnum
zernum:
popa
nosize:
pusha ; date
mov [edi+17],dword '. .'
mov [edi+21],dword '2002'
movzx eax,word [esi+24]
mov ecx,eax
mov ebx,32
xor edx,edx
div ebx
xor edx,edx
mov ebx,10
div ebx
add al,48 ; year
movzx eax,dl
xor edx,edx
mov ebx,10
div ebx
add al,48
add dl,48
mov [edi+15],byte '0' ; day
mov [edi+16],byte '0'
mov eax,ecx
xor edx,edx
mov ebx,32
div ebx
xor edx,edx
mov ebx,16
div ebx
mov eax,edx
xor edx,edx
mov ebx,10
div ebx
add al,48
add dl,48
mov [edi+18],al ; month
mov [edi+19],dl
popa
pusha ; number
mov ecx,17
sub ecx,edx
mov eax,[readblock]
sub eax,1
shl eax,4
add eax,ecx
xor edx,edx
mov ebx,10
div ebx
add dl,48
mov [edi-8],dl ;0001
xor edx,edx
div ebx
add dl,48
mov [edi-9],dl ;0010
xor edx,edx
div ebx
add al,48
add dl,48
mov [edi-10],dl ;0100
mov [edi-11],al ;1000
mov [edi-7],byte '.'
popa
mov ecx,8 ; first 8
cld
rep movsb
mov [edi],byte '.'
add edi,1
mov ecx,3 ; last 3
cld
rep movsb
add esi,(32-11)
add edi,(60-12+2)
inf:
sub edx,1
cmp edx,0
jnz newlineb
ret
hd_read_error:
cmp eax,1
jnz la1
mov edx,nodef
mov esi,50
la1:
cmp eax,2
jnz la2
mov esi,nosup
mov edi,data_area+8
mov ecx,50
cld
rep movsb
mov edx,data_area
mov esi,8+50
la2:
cmp eax,3
jnz la3
mov esi,unknw
mov edi,data_area+8
mov ecx,50
cld
rep movsb
mov edx,data_area
mov esi,8+50
la3:
cmp eax,4
jnz la4
mov edx,xpart
mov esi,50
la4:
cmp eax,5
jnz la5
mov edx,eof
mov esi,50
dec dword [readblock]
add [loclen],dword 12
la5:
cmp eax,6
jnz la6
mov edx,fnf
mov esi,50
la6:
mov eax,4
mov ebx,70*65536+265
mov ecx,0x00000000
int 0x40
sub [loclen],dword 12
jmp read_directory
; DATA AREA
dirlen dd 0x1
b_color dd 0x6677cc
editor db 'TINYPAD '
param db ' ',0
text db '/ '
up db 0x18
down db 0x19
xx db 'x'
loclen dd 0
readblock dd 1
labelt db 'SYSTEM TREE'
labellen:
root db 'ROOTDIR '
location:
db '/ / / / '
db '/ / / / '
db '/ / / / '
db '/ / / / '
db '/ / / / '
db '/ / / / '
db '/ / / / '
db '/ / / / '
fileinfo:
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
db ' 00. . 10.20 01.01.00 '
nodef db 'NO HD BASE AND/OR FAT32 PARTITION DEFINED. '
xpart db 'INVALID PARTITION AND/OR HD BASE '
nosup db '<- FS, NO SUPPORT YET '
unknw db '<- UNKNOWN FS '
eof db 'END OF FILE '
fnf db 'FILE NOT FOUND '
data_area:
I_END:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -