-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmapmem.asm
99 lines (92 loc) · 1.77 KB
/
mapmem.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
ASSUME ds:NOTHING,es:NOTHING
MCBId equ +0
MCBOwner equ +1
MCBSize equ +3
MapMem:
push ds
push es
call GetFreeMem ; allign free blocks
mov si,offset MM_text1
call WriteLnASCIIZ
mov ah,52h
int 21h ; get list of lists
ASSUME es:NOTHING
mov ax,es:[bx-2] ; get first MCB
DoMCB:
mov ds,ax
ASSUME ds:NOTHING
mov es,SegData
ASSUME es:DGROUP
call WriteHexWord
mov si,offset MM_text2
call WriteASCIIZ
mov ax,ds:[MCBSize]
inc ax ; count MCB itself too
call WriteHexWord
mov si,offset MM_text2
call WriteASCIIZ
mov ax,ds:[MCBOwner]
push ds
mov si,offset MM_NoOwner
or ax,ax
je WriteOwner
mov si,offset MM_OwnerDos
cmp ax,8
je WriteOwner
dec ax
mov ds,ax
ASSUME ds:NOTHING
mov si,8
mov di,offset Filename3
mov cx,si
CopyByte:
lodsb
cmp al,0
je Fill
stosb
loop CopyByte
Fill:
mov al,20h
repnz stosb
stosb
pop ds
push ds
mov ax,ds
inc ax
mov bx,ds:[MCBOwner]
mov si,offset MM_OwnerSelf
cmp ax,bx
je AddDescription
mov ds,bx
mov si,offset MM_OwnerEnv
cmp ax,ds:[002Ch]
je AddDescription
mov si,offset MM_OwnerData
AddDescription:
mov ds,SegData
mov cx,20
repnz movsb
mov si,offset Filename3
WriteOwner:
call WriteLnASCIIZ
pop ds
mov ax,ds
add ax,ds:[3]
inc ax
mov bl,ds:[0] ; get MCB type
cmp bl,'M'
je DoMCB
call WriteLn
pop es
pop ds
.data
MM_text1 db 'block size owner type',CR,LF
db '----------------------------------------',0
; 0000h 0000h UNP41234 program
MM_text2 db 'h ',0
MM_NoOwner db '-------- unused memory block',0
MM_OwnerDos db 'MS-DOS special DOS block',0
MM_OwnerSelf db 'program',0
MM_OwnerEnv db 'environment',0
MM_OwnerData db 'data',0
.code