Category : System Diagnostics for your computer
Archive   : MEMT386.ZIP
Filename : MEMTEST.LST

 
Output of file : MEMTEST.LST contained in archive : MEMT386.ZIP
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-1


1 page 82,120
2 title MemTest - Test Main & Extended Memory
3 .MODEL SMALL
4 .386p
5
6 ; Gene Czarcinski, 4 Sep 89
7 ;
8 ; This program is designed to test main and extended (not expanded)
9 ; (ram) memory on a 386 or 386SX. It was developed on a Wave Mate
10 ; Bullet-386SX and some of the ports or hardware values may differ on
11 ; different systems. Because it was developed on a 386, some of the
12 ; specific characteristics of a 386 are used (however, it should be
13 ; possible to convert this program to a 286 with some effort).
14 ;
15 ; NOTE that this program operates in REAL mode to test main memory
16 ; and in 386 PROTECTED mode to test extended memory.
17 ;
18 ; This program owes some of its features and code to some other
19 ; programs and some books (with programs):
20 ; - RAMHAM by Clifford A. McCullough
21 ; - 80386 A Programming and Design Handbook, 2nd Ed.
22 ; by Penn Brumm and Don Brumm
23 ; - Dr. Dobb's Toolbook of 80286/80386 Programming
24 ; Edited by Phillip Robinson
25 ; Finding enough CORRECT information to write this program was a bit
26 ; of a problem - much of it was trial and error (plus the usual set
27 ; of coding/typing errors -- interesting results when a segment reg
28 ; is incorrect in protected mode).
29 ;
30 ; Writing this program was motivated by some memory errors on my
31 ; Wave Mate system board. The bad memory caused a Parity Error
32 ; but not until after the system was up (it did not fail the BIOS
33 ; memory test). The error turned out to be a bad 1meg chip which
34 ; had a bad section of memory (1 chip, 1 bit, 256k bits). This program
35 ; found the error and when I replaced the chip, I had no more problems.
36 ; I hope this may be of use to others.
37 ;
38 ; Note that error handling is VERY PRIMATIVE - the objective was to
39 ; find the memory errors in the extended memory, not to create a full
40 ; environment for the 386 (although some interrupt handling, etc. is
41 ; necessary). This is NOT a turn-key program and some "fiddling" will
42 ; be necessary to get it to work on other systems.
43 ;
44 ; The NMI Parity Error Disable/Enable value may differ. The port
45 ; and values (bit) which indicate a Parity Error may (will) differ -
46 ; these were quessed at since they were added AFTER the problem was
47 ; fixed.
48 ;
49 ; Some simple run-time options:
50 ;
51 ; -f .. fast mode, very short display pause if error
52 ; -x .. skip check for parity error
53 ; -a .. 20 cycles of main memory checking
54 ; -b .. 100 cycles of main memory checking
55 ; -c .. 20 cycles of extended memory checking
56 ; -d .. 100 cycles of extended memory checking
57 ; default is 10 cycles each
58 ;
59 ; Note that errors or program completion cause the program to
60 ; hang in a spin-loop which will require a RESET or the Big-Red-
61 ; Switch power cycle to "terminate" (this was simple) so that messages
62 ; are left on the video screen.
63
64 ; Equates
65
66 = 0000 Line00 equ 0 ; Video Ram Displacements
67 = 00A0 Line01 equ 160
68 = 0140 Line02 equ 160*2
69 = 01E0 Line03 equ 160*3
70 = 0280 Line04 equ 160*4
71 = 0320 Line05 equ 160*5
72 = 03C0 Line06 equ 160*6
73 = 0460 Line07 equ 160*7
74 = 0500 Line08 equ 160*8
75 = 05A0 Line09 equ 160*9
76 = 0640 Line10 equ 160*10
77 = 06E0 Line11 equ 160*11
78 = 0780 Line12 equ 160*12
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-2


79 = 0820 Line13 equ 160*13
80 = 08C0 Line14 equ 160*14
81 = 0960 Line15 equ 160*15
82 = 0A00 Line16 equ 160*16
83 = 0AA0 Line17 equ 160*17
84 = 0B40 Line18 equ 160*18
85 = 0BE0 Line19 equ 160*19
86 = 0C80 Line20 equ 160*20
87 = 0D20 Line21 equ 160*21
88 = 0DC0 Line22 equ 160*22
89 = 0E60 Line23 equ 160*23
90 = 0F00 Line24 equ 160*24
91 = 0021 INTa01 equ 021h ; 8259 Controller #1
92 = 00A1 INTa02 equ 0A1h ; 8259 Controller #2
93
94 = 0060 Port_a equ 060h ; 8042 Port A
95 = 0061 Port_b equ 061h ; 8042 Port B
96 = 0062 Port_c equ 062h ; 8042 Port C
97 = 0064 Port_Status equ 064h ; 8042 Status Port
98
99 = 0061 Port_Par equ 061h ; on WaveMate, others use 062h
100 = 0080 Bits_Par equ 080h ; on WaveMate 062h, other use 0C0h on 62h
101
102 = 0070 NMIPort equ 070h ; to disable/enable parity checking
103 = 0070 Port_cmos equ 070h ;
104
105 = 00DD bit20_disable equ 11011101b ; 8042 function code to degate A20
106 = 00DF bit20_enable equ 11011111b ; 8042 function code to GATE A20
107 ; to run protected on AT, need to enable bit20 so 386 controls the
108 ; address line.
109
110 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
111 ;; Macros and Structures ;;
112 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
113
114 ; Convert 8086 segment register value to a linear address
115
116 segadr macro segr
117 sub eax,eax ; clear reg
118 mov AX,&segr ; get the segment reg
119 shl EAX,4 ; convert to a linear addr
120 endm
121
122 ; Convert an 8086 segment to linear addr in a segment descriptor
123
124 segcvt macro segr,segm
125 segadr segr
126 mov segm&.base_l,AX ; get base of data
127 shr EAX,8 ; to AH
128 mov segm&.base_m,AH ; and set mid-range byte
129 endm
130
131 ; Display Message
132
133 Vtype macro msg,len,line
134 mov si,offset msg ; addr of msg
135 mov cx,len ; length of message
136 mov di,line ; offset into screen
137 call Video_Output
138 endm
139
140 ; Define Descriptor Structure
141
142 desc struc
143 0000 0000 limit dw 0 ; offset to last byte
144 0002 0000 base_l dw 0 ; low 16 bits of base addr
145 0004 00 base_m db 0 ; bits 16-23 of base addr
146 0005 00 access db 0 ; access privledges
147 0006 00 gran db 0 ; Granularity and limit
148 0007 00 base_h db 0 ; bits 24-31 of base addr
149 0008 desc ends
150
151 ; Similar to a descriptor, describe the GATE control block
152
153 gate struc
154 0000 0000 addr_l dw 0 ; Destinations's offset 0...15
155 0002 0000 select dw 0 ; Destinations's Segment Selector
156 0004 00 db 0
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-3


157 0005 8E gate_t db 8Eh ; type, DPL
158 0006 0000 addr_h dw 0 ; offset 16...31
159 0008 gate ends
160
161 ; Describe the stack of the level 0 interrrupt handler.
162
163 stkdef struc
164 0000 0000 oldip dw 0 ; 0..15 of EIP
165 0002 0000 dw 0
166 0004 0000 oldcs dw 0 ; CS
167 0006 0000 dw 0
168 0008 0000 oldfl dw 0 ; 0..15 of EFLAGS
169 000A 0000 dw 0
170 000C 0000 oldsp dw 0 ; 0..15 of SP
171 000E 0000 dw 0
172 0010 0000 oldss dw 0 ; SP
173 0012 0000 dw 0
174 0014 0000 oldes dw 0 ; ES
175 0016 0000 dw 0
176 0018 0000 oldds dw 0 ; DS
177 001A 0000 dw 0
178 001C 0000 oldfs dw 0 ; FS
179 001E 0000 dw 0
180 0020 0000 oldgs dw 0 ; GS
181 0022 0000 dw 0
182 0024 stkdef ends
183
184
185 .CODE
186 assume cs:_text, ds:_text, es:_text, ss:_text
187
188 0080 org 80h
189 0080 command label byte ; tail of DOS command line
190
191 0100 org 100h ; this is a COM file
192 0100 E9 1BA8 R Start: jmp Main
193
194 0103 90 ALIGN 4
195 0104 0800[ stack dw 800h dup(0)
196 0000
197 ]
198
199 1104 0000 0000 stacke dw 0,0
200
201 1108 0000 dtsize dw 0
202 110A 00000000 dtload dd 0
203 110E 00000000 dsaddr dd 0
204
205 1112 B800 Vram dw 0b800h ; real seg of video ram
206
207 1114 0000 0000 0000 0000 work dw 0,0,0,0
208
209 111C 0000 Cycle dw 0 ; Memory Test Cycles
210 111E 000A CycleMm dw 10 ; Max Cycles for a pass Main
211 1120 000A CycleEm dw 10 ; Max Cycles for a pass Extended
212 1122 0000 Errors dw 0 ; number of errors which occured
213 1124 0000 LoopCnt dw 0
214 1126 0014 Pause_Cnt dw 20 ; Error Pause Loop Count
215 1128 01 Flag_CheckParity db 1 ;
216
217
218 1129 87 DB 90 ALIGN 4
219 112C MemExtnd label DWORD
220 112C 0000 MemOff dw 0 ; Current Offset
221 112E 0000 MemSeg dw 0 ; Current Segment
222
223 1130 0000 lastPat dw 0
224
225 1132 00 Mem_Val db 0
226 1133 00 Mem_Pat db 0
227 1134 00 00 Mem_Par db 0,0
228
229 1136 0000 Msize dw 0 ; Main memory size
230 1138 0000 Esize dw 0 ; Extended memory size
231
232 113A 0000 Main_S dw 0 ; Start for main memory
233 113C 0000 Main_L dw 0 ; Limit for main memory
234
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-4


235 113E Extnd_Sw label WORD
236 113E 00100000 Extnd_S dd 100000h ; Extended Memory Start (normal 1M or 100000h)
237 1142 Extnd_Lw label WORD
238 1142 00000000 Extnd_L dd 0 ; Extended Memory Limit
239
240 1146 0000 savecs dw 0
241 1148 0000 savess dw 0
242 114A 0000 savesp dw 0
243 114C 00 i8259_1 db 0 ; save int status
244 114D 00 i8259_2 db 0 ; save int status
245
246
247 ; Memory Test Patterns
248 114E B2 pattern db 10110010b ;par = e, B2
249 114F D9 db 11011001b ;par = o, D9
250 1150 6C db 01101100b ;par = e, 6C
251 1151 B6 db 10110110b ;par = o, B6
252 1152 5B db 01011011b ;par = o, 5B
253 1153 2D db 00101101b ;par = e, 2D
254 1154 96 db 10010110b ;par = e, 96
255 1155 CB db 11001011b ;par = o, CB
256 1156 65 db 01100101b ;par = e, 65
257 = 0008 pattern_len equ $-pattern-1
258
259 1157 4D 61 69 6E 20 4D msgd1 db 'Main Memory Test Done'
260 65 6D 6F 72 79 20
261 54 65 73 74 20 44
262 6F 6E 65
263 = 0015 msgd1L equ $-msgd1
264 116C 45 78 74 65 6E 64 msgd2 db 'Extended Memory Test Done'
265 65 64 20 4D 65 6D
266 6F 72 79 20 54 65
267 73 74 20 44 6F 6E
268 65
269 = 0019 msgd2L equ $-msgd2
270 = 0050 msgd2o equ 80
271 1185 41 6C 6C 20 54 65 msgd3 db 'All Testing Complete'
272 73 74 69 6E 67 20
273 43 6F 6D 70 6C 65
274 74 65
275 = 0014 msgd3L equ $-msgd3
276
277 1199 4D 65 6D 54 65 73 Msg1 db 'MemTest (09/04/89) Main='
278 74 20 28 30 39 2F
279 30 34 2F 38 39 29
280 20 20 4D 61 69 6E
281 3D
282 11B2 78 78 78 78 78 4B Msg1a db 'xxxxxK/'
283 2F
284 11B9 78 78 78 78 2C 20 Msg1ax db 'xxxx, Extended='
285 45 78 74 65 6E 64
286 65 64 3D
287 11C8 78 78 78 78 78 4B Msg1b db 'xxxxxK/'
288 2F
289 11CF 78 78 78 78 20 20 Msg1bx db 'xxxx -f='
290 2D 66 3D
291 11D8 20 20 2D 78 3D Msg1c db ' -x='
292 11DD 20 20 Msg1d db ' '
293 = 0046 Msg1Len equ $-Msg1
294 11DF 20 2A 2A 2A 20 54 Msg2 db ' *** To Terminate: Reset or BRS -- Re-Boot the System ***'
295 6F 20 54 65 72 6D
296 69 6E 61 74 65 3A
297 20 52 65 73 65 74
298 20 6F 72 20 42 52
299 53 20 2D 2D 20 52
300 65 2D 42 6F 6F 74
301 20 74 68 65 20 53
302 79 73 74 65 6D 20
303 2A 2A 2A
304 = 0039 Msg2Len equ $-Msg2
305 1218 20 54 65 73 74 MsgTst db ' Test'
306 = 0005 MsgTstL equ $-MsgTst
307 121D 57 72 69 74 65 20 Msg3 db 'Write Main Segment='
308 20 20 20 20 4D 61
309 69 6E 20 53 65 67
310 6D 65 6E 74 3D
311 = 002E Msg3ao equ ($-Msg3)*2
312 1234 78 78 78 78 3A 30 Msg3a db 'xxxx:0000'
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-5


313 30 30 30
314 = 0020 Msg3Len equ $-Msg3
315 = 0048 Msg3Leno equ ($-Msg3+4)*2
316 123D 57 72 69 74 65 20 Msg4 db 'Write Extended Segment='
317 45 78 74 65 6E 64
318 65 64 20 53 65 67
319 6D 65 6E 74 3D
320 = 002E Msg4ao equ ($-Msg4)*2
321 1254 78 78 78 78 3A Msg4a db 'xxxx:'
322 1259 78 78 78 78 Msg4b db 'xxxx'
323 = 0020 Msg4Len equ $-Msg4
324 = 0048 Msg4Leno equ ($-Msg4+4)*2
325 125D 2A 2A 20 45 72 72 Msg5 db '** Error: Address='
326 6F 72 3A 20 20 41
327 64 64 72 65 73 73
328 3D
329 1270 78 78 78 78 3A Msg5a db 'xxxx:'
330 1275 78 78 78 78 20 20 Msg5b db 'xxxx Pattern:'
331 20 20 50 61 74 74
332 65 72 6E 3A
333 1285 78 78 2C 20 4D 65 Msg5c db 'xx, Memory:'
334 6D 6F 72 79 3A
335 1290 78 78 2C 20 50 61 Msg5d db 'xx, Parity:'
336 72 69 74 79 3A
337 129B 78 78 Msg5e db 'xx'
338 = 0040 msg5Len equ $-Msg5
339 129D 20 20 20 20 4D 61 Msg7 db ' Main Memory Test Segment Start='
340 69 6E 20 4D 65 6D
341 6F 72 79 20 54 65
342 73 74 20 53 65 67
343 6D 65 6E 74 20 53
344 74 61 72 74 3D
345 12C0 78 78 78 78 20 20 Msg7a db 'xxxx Limit='
346 20 20 20 20 20 4C
347 69 6D 69 74 3D
348 12D1 78 78 78 78 20 20 Msg7b db 'xxxx Max Cycles='
349 20 20 20 20 20 4D
350 61 78 20 43 79 63
351 6C 65 73 3D
352 12E7 78 78 78 78 78 Msg7d db 'xxxxx'
353 = 004F Msg7Len equ $-Msg7
354 12EC 45 78 74 65 6E 64 Msg8 db 'Extended Memory Test Segment Start='
355 65 64 20 4D 65 6D
356 6F 72 79 20 54 65
357 73 74 20 53 65 67
358 6D 65 6E 74 20 53
359 74 61 72 74 3D
360 130F 30 30 31 30 3A Msg8a db '0010:'
361 1314 30 30 30 30 20 20 Msg8a2 db '0000 Limit='
362 4C 69 6D 69 74 3D
363 1320 78 78 78 78 3A Msg8b db 'xxxx:'
364 1325 78 78 78 78 20 20 Msg8c db 'xxxx Max Cycles='
365 4D 61 78 20 43 79
366 63 6C 65 73 3D
367 1336 78 78 78 78 78 Msg8d db 'xxxxx'
368 = 004F Msg8Len equ $-Msg8
369 133B 43 79 63 6C 65 3D Msg9 db 'Cycle='
370 = 000C Msg9ao equ ($-Msg9)*2
371 1341 78 78 78 78 78 2C Msg9a db 'xxxxx, Errors='
372 20 45 72 72 6F 72
373 73 3D
374 = 0028 Msg9bo equ ($-Msg9)*2
375 134F 78 78 78 78 78 Msg9b db 'xxxxx'
376 = 0019 Msg9Len equ $-Msg9
377
378 1354 41 64 64 72 65 73 Emsg3 db 'Address Line A20 failed to gate open'
379 73 20 4C 69 6E 65
380 20 41 32 30 20 66
381 61 69 6C 65 64 20
382 74 6F 20 67 61 74
383 65 20 6F 70 65 6E
384 = 0024 Emsg3L equ $-Emsg3
385
386
387
388
389 ; 386 Protected Mode Tables, etc.
390
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-6


391 ; Define the Global Descriptor Table (GDT)
392
393 ALIGN 8
394 1378 gdt_def LABEL word
395 1378 0000 d_gdt desc <> ; first one is a dummy
396 137A 0000
397 137C 00
398 137D 00
399 137E 00
400 137F 00
401
402 1380 FFFF d_cs desc <0ffffh,0,0,10011010b,00001111b,0> ; Code
403 1382 0000
404 1384 00
405 1385 9A
406 1386 0F
407 1387 00
408
409 = 0008 s_cs equ d_cs-gdt_def
410 1388 FFFF d_ds desc <0ffffh,0,0,10010010b,00001111b,0> ; Data
411 138A 0000
412 138C 00
413 138D 92
414 138E 0F
415 138F 00
416
417 = 0010 s_ds equ d_ds-gdt_def
418 1390 0000 d_ss desc <0,0,0,10010110b,00000000b,0> ; Stack
419 1392 0000
420 1394 00
421 1395 96
422 1396 00
423 1397 00
424
425 = 0018 s_ss equ d_ss-gdt_def
426 1398 FF0F d_crt desc <0fffh,0,0,10010010b,00001111b,0> ; CRT
427 139A 0000
428 139C 00
429 139D 92
430 139E 0F
431 139F 00
432
433 = 0020 s_crt equ d_crt-gdt_def
434 13A0 FF0F d_mem desc <0fffh,0,0,10010010b,10000000b,0> ; To ref hi memory
435 13A2 0000
436 13A4 00
437 13A5 92
438 13A6 80
439 13A7 00
440
441 = 0028 s_mem equ d_mem-gdt_def
442 = 0030 gdt_size equ $-gdt_def
443
444 ; Define the Interrupt Descriptor Table (IDT)
445
446 ALIGN 8
447 13A8 idt_def LABEL WORD
448 13A8 21C7 R gate ; Divide
449 13AA 0800
450 13AC 00
451 13AD 8E
452 13AE 0000
453
454 .SALL
455 13B0 21D0 R gate ; Debug
456 13B2 0800
457 13B4 00
458 13B5 8E
459 13B6 0000
460
461 13B8 21D9 R gate ; NMI
462 13BA 0800
463 13BC 00
464 13BD 8E
465 13BE 0000
466
467 13C0 21E2 R gate ; BrkPt
468 13C2 0800
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-7


469 13C4 00
470 13C5 8E
471 13C6 0000
472
473 13C8 21EB R gate ; Overflow
474 13CA 0800
475 13CC 00
476 13CD 8E
477 13CE 0000
478
479 13D0 21F4 R gate ; Bounds
480 13D2 0800
481 13D4 00
482 13D5 8E
483 13D6 0000
484
485 13D8 21FD R gate ; Invalid Opcode
486 13DA 0800
487 13DC 00
488 13DD 8E
489 13DE 0000
490
491 13E0 2206 R gate ; CoProcessor Error
492 13E2 0800
493 13E4 00
494 13E5 8E
495 13E6 0000
496
497 13E8 220F R gate ; Double Fault
498 13EA 0800
499 13EC 00
500 13ED 8E
501 13EE 0000
502
503 13F0 2225 R gate ; Coproc Segment Overrun
504 13F2 0800
505 13F4 00
506 13F5 8E
507 13F6 0000
508
509 13F8 222E R gate ; Invalid TSS
510 13FA 0800
511 13FC 00
512 13FD 8E
513 13FE 0000
514
515 1400 2237 R gate ; Segment Not Present
516 1402 0800
517 1404 00
518 1405 8E
519 1406 0000
520
521 1408 2240 R gate ; Stack Exception
522 140A 0800
523 140C 00
524 140D 8E
525 140E 0000
526
527 1410 2249 R gate ; General Protection
528 1412 0800
529 1414 00
530 1415 8E
531 1416 0000
532
533 1418 2252 R gate ; Page Fault
534 141A 0800
535 141C 00
536 141D 8E
537 141E 0000
538
539 1420 226D R gate ;
540 1422 0800
541 1424 00
542 1425 8E
543 1426 0000
544
545 1428 2264 R gate ; Coproc Error
546 142A 0800
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-8


547 142C 00
548 142D 8E
549 142E 0000
550
551 1430 226D R gate ; 17
552 1432 0800
553 1434 00
554 1435 8E
555 1436 0000
556
557 1438 226D R gate ; 18
558 143A 0800
559 143C 00
560 143D 8E
561 143E 0000
562
563 1440 226D R gate ; 19
564 1442 0800
565 1444 00
566 1445 8E
567 1446 0000
568
569 1448 226D R gate ; 20
570 144A 0800
571 144C 00
572 144D 8E
573 144E 0000
574
575 1450 226D R gate ; 21
576 1452 0800
577 1454 00
578 1455 8E
579 1456 0000
580
581 1458 226D R gate ; 22
582 145A 0800
583 145C 00
584 145D 8E
585 145E 0000
586
587 1460 226D R gate ; 23
588 1462 0800
589 1464 00
590 1465 8E
591 1466 0000
592
593 1468 226D R gate ; 24
594 146A 0800
595 146C 00
596 146D 8E
597 146E 0000
598
599 1470 226D R gate ; 25
600 1472 0800
601 1474 00
602 1475 8E
603 1476 0000
604
605 1478 226D R gate ; 26
606 147A 0800
607 147C 00
608 147D 8E
609 147E 0000
610
611 1480 226D R gate ; 27
612 1482 0800
613 1484 00
614 1485 8E
615 1486 0000
616
617 1488 226D R gate ; 28
618 148A 0800
619 148C 00
620 148D 8E
621 148E 0000
622
623 1490 226D R gate ; 29
624 1492 0800
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-9


625 1494 00
626 1495 8E
627 1496 0000
628
629 1498 226D R gate ; 30
630 149A 0800
631 149C 00
632 149D 8E
633 149E 0000
634
635 14A0 226D R gate ; 31
636 14A2 0800
637 14A4 00
638 14A5 8E
639 14A6 0000
640
641 REPT 224
642 gate ; PE Interrupt Gates
643 ENDM
644 = 0800 idt_size equ $-idt_def
645 .XALL
646
647 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
648 ; Entry ;
649 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
650
651 1BA8 Main proc near
652 1BA8 8C C8 mov ax,cs ; init real-mode seg addr
653 1BAA 8E D0 mov ss,ax
654 1BAC 8E D8 mov ds,ax
655 1BAE 8E C0 mov es,ax

656 1BB0 BC 1104 mov sp,stacke-_text ; set our stack
657
658 1BB3 B4 00 mov ah,00h ; initialize display
659 1BB5 B0 03 mov al,3 ; video mode 3
660 1BB7 CD 10 int 10h
661
662 1BB9 BE 0081 R mov si,offset command+1 ; process any run-time options
663 1BBC FC cld
664 1BBD AC opt1: lodsb
665 1BBE 3C 0D cmp al,0dh ; C/R is end
666 1BC0 0F 84 1C14 R je optend
667 1BC4 3C 2D cmp al,'-' ; option marker
668 1BC6 75 F5 jne opt1
669 1BC8 AC lodsb ; option found, get next char
670 1BC9 0C 20 or al,20h ; fold to lower case
671 1BCB 3C 66 cmp al,'f' ; fast mode?
672 1BCD 75 08 jne short opt2
673 1BCF C7 06 1126 R 0001 mov pause_cnt,1
674 1BD5 EB E6 jmp opt1
675 1BD7 3C 78 opt2: cmp al,'x' ; skip parity check
676 1BD9 75 07 jne short opt3
677 1BDB C6 06 1128 R 00 mov flag_CheckParity,0
678 1BE0 EB DB jmp opt1
679 1BE2 3C 61 opt3: cmp al,'a' ; CycleMm=20 Main
680 1BE4 75 08 jne short opt4
681 1BE6 C7 06 111E R 0014 mov CycleMm,20
682 1BEC EB CF jmp opt1
683 1BEE 3C 62 opt4: cmp al,'b' ; CycleMm=100 Main
684 1BF0 75 08 jne short opt5
685 1BF2 C7 06 111E R 0064 mov CycleMm,100
686 1BF8 EB C3 jmp opt1
687 1BFA 3C 63 opt5: cmp al,'c' ; CycleEm=10 Extended
688 1BFC 75 08 jne short opt6
689 1BFE C7 06 1120 R 0014 mov CycleEm,20
690 1C04 EB B7 jmp opt1
691 1C06 3C 64 opt6: cmp al,'d' ; CycleEm=100 Extended
692 1C08 75 08 jne short opt7
693 1C0A C7 06 1120 R 0064 mov CycleEm,100
694 1C10 EB AB jmp opt1
695 1C12 opt7:
696 1C12 EB A9 jmp opt1
697 1C14 83 3E 1126 R 01 optend: cmp Pause_cnt,1
698 1C19 75 05 jne short optend1
699 1C1B C6 06 11D8 R 66 mov Msg1c,'f'
700 1C20 80 3E 1128 R 00 optend1:cmp flag_checkparity,0
701 1C25 75 05 jne short optend2
702 1C27 C6 06 11DD R 78 mov Msg1d,'x'
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-10


703 1C2C A1 111E R optend2:mov ax,cycleMm
704 1C2F BB 12E7 R mov bx,offset Msg7d
705 1C32 E8 1D25 R call Convert_Decimal
706 1C35 A1 1120 R mov ax,cycleEm
707 1C38 BB 1336 R mov bx,offset Msg8d
708 1C3B E8 1D25 R call Convert_Decimal
709
710 1C3E CD 12 int 12h ; get size of convensional memory
711 1C40 A3 1136 R mov Msize,ax
712 1C43 BB 11B2 R mov bx,offset Msg1a
713 1C46 E8 1D25 R call Convert_Decimal
714 1C49 A1 1136 R mov ax,Msize
715 1C4C BB 11B9 R mov bx,offset Msg1ax
716 1C4F E8 1D71 R call Convert_Hex
717
718 1C52 B4 88 mov ah,88h ; get size of extended memory
719 1C54 CD 15 int 15h
720 1C56 A3 1138 R mov Esize,ax
721 1C59 BB 11C8 R mov bx,offset Msg1b
722 1C5C E8 1D25 R call Convert_Decimal
723 1C5F A1 1138 R mov ax,Esize
724 1C62 BB 11CF R mov bx,offset Msg1bx
725 1C65 E8 1D71 R call Convert_Hex
726
727 vtype Msg1,Msg1Len,Line03
728 1C68 BE 1199 R 1 mov si,offset Msg1 ; addr of msg
729 1C6B B9 0046 1 mov cx,Msg1Len ; length of message
730 1C6E BF 01E0 1 mov di,Line03 ; offset into screen
731 1C71 E8 1D16 R 1 call Video_Output
732
733 1C74 8C 0E 113A R mov Main_S,cs ; calc start of testing.
734 1C78 B8 23DA mov ax,Progend-_text
735 1C7B 05 4020 add ax,4020h
736 1C7E C1 E8 04 shr ax,4
737 1C81 03 06 113A R add ax,Main_S
738 1C85 25 FC00 and ax,0fc00h
739 1C88 A3 113A R mov Main_S,ax
740 1C8B BB 12C0 R mov bx,offset Msg7a
741 1C8E E8 1D71 R call Convert_Hex
742 1C91 A1 1136 R mov ax,Msize
743 1C94 C1 E0 06 shl ax,6
744 1C97 A3 113C R mov Main_L,ax
745 1C9A BB 12D1 R mov bx,offset Msg7b
746 1C9D E8 1D71 R call Convert_hex
747
748 Vtype Msg7,Msg7Len,Line04 ; Intro Msg
749 1CA0 BE 129D R 1 mov si,offset Msg7 ; addr of msg
750 1CA3 B9 004F 1 mov cx,Msg7Len ; length of message
751 1CA6 BF 0280 1 mov di,Line04 ; offset into screen
752 1CA9 E8 1D16 R 1 call Video_Output
753
754 1CAC 66| 2B C0 sub eax,eax
755 1CAF A1 1138 R mov ax,Esize ; setup extended memory
756 1CB2 0B C0 or ax,ax
757 1CB4 0F 84 1D01 R jz Main5 ; NO Extended Memory
758 1CB8 05 0400 add ax,0400h
759 1CBB 66| C1 E0 0A shl eax,10 ; in K, mpy by 1024 to get megs
760 1CBF 66| 48 dec eax ; limit is minus 1
761 1CC1 66| A3 1142 R mov Extnd_L,EAX
762 1CC5 A1 1144 R mov ax,Extnd_Lw+2
763 1CC8 BB 1320 R mov bx,offset Msg8b
764 1CCB E8 1D71 R call Convert_Hex
765 1CCE A1 1142 R mov ax,Extnd_Lw
766 1CD1 BB 1325 R mov bx,offset Msg8c
767 1CD4 E8 1D71 R call Convert_Hex
768 1CD7 A1 1140 R mov ax,Extnd_Sw+2
769 1CDA BB 130F R mov bx,offset Msg8a
770 1CDD E8 1D71 R call Convert_Hex
771 1CE0 A1 113E R mov ax,Extnd_Sw
772 1CE3 BB 1314 R mov bx,offset Msg8a2
773 1CE6 E8 1D71 R call Convert_Hex
774 Vtype Msg8,Msg8Len,Line05
775 1CE9 BE 12EC R 1 mov si,offset Msg8 ; addr of msg
776 1CEC B9 004F 1 mov cx,Msg8Len ; length of message
777 1CEF BF 0320 1 mov di,Line05 ; offset into screen
778 1CF2 E8 1D16 R 1 call Video_Output
779 Vtype Msg2,Msg2Len,Line23
780 1CF5 BE 11DF R 1 mov si,offset Msg2 ; addr of msg
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-11


781 1CF8 B9 0039 1 mov cx,Msg2Len ; length of message
782 1CFB BF 0E60 1 mov di,Line23 ; offset into screen
783 1CFE E8 1D16 R 1 call Video_Output
784
785 1D01 Main5:
786 1D01 B0 80 mov al,80h ; disable the NMI interrupt
787 1D03 E6 70 out NMIport,al
788
789 1D05 E8 1DE4 R call Check_Main
790 1D08 A1 1138 R mov ax,Esize
791 1D0B 0B C0 or ax,ax
792 1D0D 0F 84 1D14 R jz Done ; NO Extended Memory
793 1D11 E8 22BA R call Exec_Prot ; Yes, enter PE and Check it.
794
795 1D14 Done:
796 1D14 CD 20 int 20h ; for now
797 1D16 Main endp
798
799 ; Output a message directly to the screen - bypass any use of the BIOS
800 ; SI=offset to msg, CX-msglength, DI=offset into screen
801 1D16 Video_Output proc near
802 1D16 06 push ES
803 1D17 B4 07 mov ah,7 ; video attribute
804 1D19 8E 06 1112 R mov ES,Vram ; video ram segment (addr or selector)
805 1D1D FC cld ; incrementing
806 1D1E AC Vout1: lodsb
807 1D1F AB stosw
808 1D20 49 dec cx
809 1D21 75 FB jnz Vout1
810 1D23 07 pop ES
811 1D24 C3 ret
812 1D25 Video_Output endp
813
814 ; Convert number in AX to 5 digit decimal/ASCII equivalent into
815 ; the area (offset) pointed to by BX.
816 1D25 Convert_Decimal proc near
817 1D25 51 push cx
818 1D26 52 push dx
819 1D27 56 push si
820 1D28 B9 0005 mov cx,5
821 1D2B C6 07 20 Conv1: mov byte ptr [BX],' ' ; clear buffer
822 1D2E 43 inc bx
823 1D2F E2 FA loop Conv1
824 1D31 BE 000A mov si,10 ; to get digits
825 1D34 0B C0 or ax,ax ; positive numbers only
826 1D36 0F 89 1D3C R jns Conv5
827 1D3A F7 D8 neg ax
828 1D3C 2B D2 Conv5: sub dx,dx
829 1D3E F7 F6 div si
830 1D40 83 C2 30 add dx,'0'
831 1D43 4B dec bx
832 1D44 88 17 mov [bx],dl
833 1D46 0B C0 or ax,ax ; done if zero
834 1D48 75 F2 jnz Conv5
835 1D4A 5E pop si
836 1D4B 5A pop dx
837 1D4C 59 pop cx
838 1D4D C3 ret
839 1D4E Convert_Decimal endp
840
841 ; Convert number in AL to 2 digit hex/ASCII equivalent into
842 ; the area (offset) pointed to by BX.
843 1D4E Hexit proc near
844 1D4E 50 push ax
845 1D4F 24 0F and al,0fh
846 1D51 0C 30 or al,30h
847 1D53 3C 3A cmp al,3ah
848 1D55 0F 8C 1D5B R jl Hex_al
849 1D59 04 07 add al,7
850 1D5B 88 47 01 Hex_al: mov 1[bx],al
851 1D5E 58 pop ax
852 1D5F C1 E8 04 shr ax,4
853 1D62 24 0F and al,0fh
854 1D64 0C 30 or al,30h
855 1D66 3C 3A cmp al,3ah
856 1D68 0F 8C 1D6E R jl Hex_ah
857 1D6C 04 07 add al,7
858 1D6E 88 07 Hex_ah: mov [bx],al
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-12


859 1D70 C3 ret
860 1D71 Hexit endp
861
862 ; Convert number in AX to 4 digit hex/ASCII equivalent into
863 ; the area (offset) pointed to by BX.
864 1D71 Convert_Hex proc near
865 1D71 53 push bx
866 1D72 50 push ax
867 1D73 8A C4 mov al,ah
868 1D75 E8 1D4E R call Hexit
869 1D78 58 pop ax
870 1D79 83 C3 02 add bx,2
871 1D7C E8 1D4E R call Hexit
872 1D7F 5B pop bx
873 1D80 C3 ret
874 1D81 Convert_Hex endp
875
876 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
877 ; Memory bad, report error ;
878 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
879
880 1D81 Bad_Mem proc near
881 1D81 51 push cx
882 1D82 56 push si
883 1D83 57 push di
884 1D84 53 push bx
885 1D85 A1 1122 R mov ax,Errors
886 1D88 BB 134F R mov bx,offset Msg9b
887 1D8B E8 1D25 R call Convert_Decimal
888 Vtype Msg9b,5,Line10+Msg9bo
889 1D8E BE 134F R 1 mov si,offset Msg9b ; addr of msg
890 1D91 B9 0005 1 mov cx,5 ; length of message
891 1D94 BF 0668 1 mov di,Line10+Msg9bo ; offset into screen
892 1D97 E8 1D16 R 1 call Video_Output
893
894 1D9A A1 112E R mov ax,MemSeg
895 1D9D BB 1270 R mov bx,offset Msg5a
896 1DA0 E8 1D71 R call Convert_Hex
897 1DA3 A1 112C R mov ax,MemOff
898 1DA6 BB 1275 R mov bx,offset Msg5b
899 1DA9 E8 1D71 R call Convert_Hex
900 1DAC A0 1133 R mov al,Mem_Pat
901 1DAF BB 1285 R mov bx,offset Msg5c
902 1DB2 E8 1D4E R call Hexit
903 1DB5 A0 1132 R mov al,Mem_Val
904 1DB8 BB 1290 R mov bx,offset Msg5d
905 1DBB E8 1D4E R call Hexit
906 1DBE A0 1134 R mov al,Mem_Par
907 1DC1 BB 129B R mov bx,offset Msg5e
908 1DC4 E8 1D4E R call Hexit
909 Vtype Msg5,Msg5Len,Line14
910 1DC7 BE 125D R 1 mov si,offset Msg5 ; addr of msg
911 1DCA B9 0040 1 mov cx,Msg5Len ; length of message
912 1DCD BF 08C0 1 mov di,Line14 ; offset into screen
913 1DD0 E8 1D16 R 1 call Video_Output
914 1DD3 8B 1E 1126 R mov bx,pause_cnt ; pause to display msg
915 1DD7 2B C9 pause1: sub cx,cx
916 1DD9 49 pause2: dec cx
917 1DDA 75 FD jnz pause2
918 1DDC 4B dec bx
919 1DDD 75 F8 jnz pause1
920 1DDF 5B pop bx
921 1DE0 5F pop di
922 1DE1 5E pop si
923 1DE2 59 pop cx
924 1DE3 C3 ret
925 1DE4 Bad_Mem endp
926
927 ;;;;;;;;;;;;;;;;;;;;;
928 ; Check Main Memory ;
929 ;;;;;;;;;;;;;;;;;;;;;
930
931 1DE4 Check_Main proc near
932 1DE4 A1 113A R mov ax,Main_S ; setup
933 1DE7 A3 112E R mov MemSeg,ax
934 1DEA C7 06 111C R 0001 mov Cycle,1
935 1DF0 C7 06 1122 R 0000 mov Errors,0
936 1DF6 A1 1122 R mov ax,Errors
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-13


937 1DF9 BB 134F R mov bx,offset Msg9b
938 1DFC E8 1D25 R call Convert_Decimal
939
940 Vtype Msg3,Msg3Len,Line07
941 1DFF BE 121D R 1 mov si,offset Msg3 ; addr of msg
942 1E02 B9 0020 1 mov cx,Msg3Len ; length of message
943 1E05 BF 0460 1 mov di,Line07 ; offset into screen
944 1E08 E8 1D16 R 1 call Video_Output
945 Vtype Msg9,Msg9Len,Line10
946 1E0B BE 133B R 1 mov si,offset Msg9 ; addr of msg
947 1E0E B9 0019 1 mov cx,Msg9Len ; length of message
948 1E11 BF 0640 1 mov di,Line10 ; offset into screen
949 1E14 E8 1D16 R 1 call Video_Output
950
951 1E17 Main_Loop:
952 1E17 A1 111C R mov ax,Cycle
953 1E1A BB 1341 R mov bx,offset Msg9a
954 1E1D E8 1D25 R call Convert_Decimal
955 Vtype Msg9a,5,Line10+Msg9ao
956 1E20 BE 1341 R 1 mov si,offset Msg9a ; addr of msg
957 1E23 B9 0005 1 mov cx,5 ; length of message
958 1E26 BF 064C 1 mov di,Line10+Msg9ao ; offset into screen
959 1E29 E8 1D16 R 1 call Video_Output
960
961 1E2C A1 1130 R mov ax,LastPat
962 1E2F 48 dec ax ; start at different place each time
963 1E30 7D 03 jge short ml1
964 1E32 B8 0008 mov ax,pattern_len
965 1E35 A3 1130 R ml1: mov LastPat,ax
966
967 Vtype Msg3,MsgTstL,Line07
968 1E38 BE 121D R 1 mov si,offset Msg3 ; addr of msg
969 1E3B B9 0005 1 mov cx,MsgTstL ; length of message
970 1E3E BF 0460 1 mov di,Line07 ; offset into screen
971 1E41 E8 1D16 R 1 call Video_Output
972
973 1E44 A1 113A R mov ax,Main_S ; re-init for writing
974 1E47 A3 112E R mov MemSeg,ax
975 ; now write data to main memory
976 1E4A FC cld
977 1E4B A1 1130 R mov ax,LastPat
978 1E4E 05 114E R add ax,offset pattern
979 1E51 8B F0 mov si,ax
980
981 1E53 56 wm1: push si
982 1E54 A1 112E R mov ax,MemSeg
983 1E57 BB 1234 R mov bx,offset Msg3a
984 1E5A E8 1D71 R call Convert_Hex
985 Vtype Msg3a,4,Line07+Msg3ao
986 1E5D BE 1234 R 1 mov si,offset Msg3a ; addr of msg
987 1E60 B9 0004 1 mov cx,4 ; length of message
988 1E63 BF 048E 1 mov di,Line07+Msg3ao ; offset into screen
989 1E66 E8 1D16 R 1 call Video_Output
990 1E69 5E pop si
991 1E6A 8E 06 112E R mov es,MemSeg ; point to segment to be written
992 1E6E B9 1000 mov cx,1000h ; 4K block
993 1E71 2B FF sub di,di ; start at zero offset
994 1E73 AC wm5: lodsb ; put pattern byte into memory
995 1E74 26: 88 05 mov es:[di],al
996 1E77 47 inc di
997 1E78 81 FE 1156 R cmp si,offset pattern+pattern_len
998 1E7C 7E 03 jle short wm6
999 1E7E BE 114E R mov si,offset pattern
1000 1E81 E2 F0 wm6: loop wm5
1001 1E83 A1 112E R mov ax,MemSeg ; bump up 4k
1002 1E86 05 0100 add ax,0100h
1003 1E89 A3 112E R mov MemSeg,ax
1004 1E8C 05 00FF add ax,0ffh
1005 1E8F 3B 06 113C R cmp ax,Main_L
1006 1E93 72 BE jb wm1
1007
1008 1E95 8B 1E 1126 R mov bx,pause_cnt ; pause to display msg
1009 1E99 2B C9 wm_x1: sub cx,cx
1010 1E9B 49 wm_x2: dec cx
1011 1E9C 75 FD jnz wm_x2
1012 1E9E 4B dec bx
1013 1E9F 75 F8 jnz wm_x1
1014 Vtype MsgTst,MsgTstL,Line07
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-14


1015 1EA1 BE 1218 R 1 mov si,offset MsgTst ; addr of msg
1016 1EA4 B9 0005 1 mov cx,MsgTstL ; length of message
1017 1EA7 BF 0460 1 mov di,Line07 ; offset into screen
1018 1EAA E8 1D16 R 1 call Video_Output
1019
1020 1EAD A1 113A R mov ax,Main_S ; re-init for testing
1021 1EB0 A3 112E R mov MemSeg,ax
1022 ; now test the data in main memory
1023 1EB3 FC cld
1024 1EB4 A1 1130 R mov ax,LastPat
1025 1EB7 05 114E R add ax,offset pattern
1026 1EBA 8B F0 mov si,ax
1027
1028 1EBC 56 tm1: push si
1029 1EBD A1 112E R mov ax,MemSeg
1030 1EC0 BB 1234 R mov bx,offset Msg3a
1031 1EC3 E8 1D71 R call Convert_Hex
1032 Vtype Msg3a,4,Line07+Msg3ao
1033 1EC6 BE 1234 R 1 mov si,offset Msg3a ; addr of msg
1034 1EC9 B9 0004 1 mov cx,4 ; length of message
1035 1ECC BF 048E 1 mov di,Line07+Msg3ao ; offset into screen
1036 1ECF E8 1D16 R 1 call Video_Output
1037
1038 1ED2 5E pop si
1039 1ED3 8E 06 112E R mov es,MemSeg ; point to segment to be tested
1040 1ED7 B9 1000 mov cx,1000h ; 4K block
1041 1EDA 2B FF sub di,di ; start at zero offset
1042 1EDC 26: 8A 05 tm3: mov al,es:[di] ; check pattern byte against memory
1043 1EDF 3A 04 cmp al,[si]
1044 1EE1 0F 85 1F02 R jne tm7 ; bad byte
1045 1EE5 A2 1132 R mov Mem_Val,al ; save if bad parity
1046 1EE8 E4 61 in al,Port_Par ; check parity
1047 1EEA A8 80 test al,Bits_Par ; shows parity error
1048 1EEC 0F 85 1F1C R jnz tm8
1049 1EF0 46 tm4: inc si
1050 1EF1 47 inc di
1051 1EF2 81 FE 1156 R cmp si,offset pattern+pattern_len
1052 1EF6 0F 8E 1EFD R jle tm6
1053 1EFA BE 114E R mov si,offset pattern
1054 1EFD E2 DD tm6: loop tm3
1055 1EFF EB 34 90 jmp tm9
1056 1F02 FF 06 1122 R tm7: inc Errors
1057 1F06 89 3E 112C R mov MemOff,di
1058 1F0A A2 1132 R mov Mem_Val,al
1059 1F0D E4 61 in al,Port_Par
1060 1F0F A2 1134 R mov Mem_Par,al
1061 1F12 8A 04 mov al,[si]
1062 1F14 A2 1133 R mov Mem_Pat,al
1063 1F17 E8 1D81 R call Bad_Mem ; display
1064 1F1A EB D4 jmp tm4
1065 1F1C FF 06 1122 R tm8: inc Errors
1066 1F20 89 3E 112C R mov MemOff,di
1067 1F24 8C 06 112E R mov MemSeg,ES
1068 1F28 A2 1134 R mov Mem_Par,al
1069 1F2B 8A 04 mov al,[si]
1070 1F2D A2 1133 R mov Mem_Pat,al
1071 1F30 E8 1D81 R call Bad_Mem ; display
1072 1F33 EB BB jmp tm4
1073 1F35 A1 112E R tm9: mov ax,MemSeg ; bump up 4k
1074 1F38 05 0100 add ax,0100h
1075 1F3B A3 112E R mov MemSeg,ax
1076 1F3E 05 00FF add ax,0ffh
1077 1F41 3B 06 113C R cmp ax,Main_L
1078 1F45 0F 82 1EBC R jb tm1
1079
1080 1F49 8B 1E 1126 R mov bx,pause_cnt ; pause to display msg
1081 1F4D 2B C9 tm_x1: sub cx,cx
1082 1F4F 49 tm_x2: dec cx
1083 1F50 75 FD jnz tm_x2
1084 1F52 4B dec bx
1085 1F53 75 F8 jnz tm_x1
1086
1087 1F55 A1 113A R mov ax,Main_S ; re-init
1088 1F58 A3 112E R mov MemSeg,ax
1089 1F5B A1 111C R mov ax,Cycle
1090 1F5E 40 inc ax
1091 1F5F A3 111C R mov Cycle,ax
1092 1F62 3B 06 111E R cmp ax,CycleMm
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-15


1093 1F66 0F 8E 1E17 R jle Main_loop
1094 Vtype msgd1,msgd1L,line21
1095 1F6A BE 1157 R 1 mov si,offset msgd1 ; addr of msg
1096 1F6D B9 0015 1 mov cx,msgd1L ; length of message
1097 1F70 BF 0D20 1 mov di,line21 ; offset into screen
1098 1F73 E8 1D16 R 1 call Video_Output
1099 Vtype Msg9,Msg9Len,Line07+Msg3Leno
1100 1F76 BE 133B R 1 mov si,offset Msg9 ; addr of msg
1101 1F79 B9 0019 1 mov cx,Msg9Len ; length of message
1102 1F7C BF 04A8 1 mov di,Line07+Msg3Leno ; offset into screen
1103 1F7F E8 1D16 R 1 call Video_Output
1104 1F82 C3 ret
1105 1F83 Check_Main endp
1106
1107 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1108 ;; Initialize and Enter Protected Mode ;;
1109 ;; ... Then call Check_Extended ;;
1110 ;; ... Finally, return to real mode ;;
1111 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1112
1113
1114 1F83 Check_Extended proc near
1115 1F83 B8 0028 mov ax,s_mem ; init segment
1116 1F86 8E E8 mov GS,ax
1117 1F88 C7 06 111C R 0001 mov Cycle,1
1118 1F8E C7 06 1122 R 0000 mov errors,0
1119 1F94 A1 1122 R mov ax,Errors
1120 1F97 BB 134F R mov bx,offset Msg9b
1121 1F9A E8 1D25 R call Convert_Decimal
1122
1123 Vtype Msg4,Msg4Len,Line08
1124 1F9D BE 123D R 1 mov si,offset Msg4 ; addr of msg
1125 1FA0 B9 0020 1 mov cx,Msg4Len ; length of message
1126 1FA3 BF 0500 1 mov di,Line08 ; offset into screen
1127 1FA6 E8 1D16 R 1 call Video_Output
1128 Vtype Msg9,Msg9Len,Line10
1129 1FA9 BE 133B R 1 mov si,offset Msg9 ; addr of msg
1130 1FAC B9 0019 1 mov cx,Msg9Len ; length of message
1131 1FAF BF 0640 1 mov di,Line10 ; offset into screen
1132 1FB2 E8 1D16 R 1 call Video_Output
1133
1134 1FB5 A1 111C R ce1: mov ax,Cycle
1135 1FB8 BB 1341 R mov bx,offset Msg9a
1136 1FBB E8 1D25 R call Convert_Decimal
1137 Vtype Msg9a,5,Line10+Msg9ao
1138 1FBE BE 1341 R 1 mov si,offset Msg9a ; addr of msg
1139 1FC1 B9 0005 1 mov cx,5 ; length of message
1140 1FC4 BF 064C 1 mov di,Line10+Msg9ao ; offset into screen
1141 1FC7 E8 1D16 R 1 call Video_Output
1142
1143 1FCA A1 1130 R mov ax,LastPat
1144 1FCD 48 dec ax ; start at different place each time
1145 1FCE 7D 03 jge short ce2
1146 1FD0 B8 0008 mov ax,pattern_len
1147 1FD3 A3 1130 R ce2: mov LastPat,ax
1148
1149 Vtype Msg4,MsgTstL,Line08
1150 1FD6 BE 123D R 1 mov si,offset Msg4 ; addr of msg
1151 1FD9 B9 0005 1 mov cx,MsgTstL ; length of message
1152 1FDC BF 0500 1 mov di,Line08 ; offset into screen
1153 1FDF E8 1D16 R 1 call Video_Output
1154
1155 1FE2 66| A1 113E R mov eax,Extnd_S ; re-init for writing
1156 1FE6 66| A3 112C R mov MemExtnd,eax
1157 1FEA C7 06 1124 R 0000 mov LoopCnt,0
1158 ; now write the data to memory
1159 1FF0 FC cld
1160 1FF1 A1 1130 R mov ax,LastPat
1161 1FF4 05 114E R add ax,offset pattern
1162 1FF7 8B F0 mov si,ax
1163 1FF9 56 we1: push si
1164 1FFA A1 112E R mov ax,MemSeg
1165 1FFD BB 1254 R mov bx,offset Msg4a
1166 2000 E8 1D71 R call Convert_Hex
1167 2003 A1 112C R mov ax,MemOff
1168 2006 BB 1259 R mov bx,offset Msg4b
1169 2009 E8 1D71 R call Convert_Hex
1170 Vtype MSg4a,9,Line08+Msg4ao
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-16


1171 200C BE 1254 R 1 mov si,offset MSg4a ; addr of msg
1172 200F B9 0009 1 mov cx,9 ; length of message
1173 2012 BF 052E 1 mov di,Line08+Msg4ao ; offset into screen
1174 2015 E8 1D16 R 1 call Video_Output
1175 2018 5E pop si
1176 2019 8B 0E 1124 R mov cx,LoopCnt
1177 201D 66| 8B 3E 112C R mov edi,MemExtnd ; start
1178 2022 AC we5: lodsb ; put pattern byte into memory
1179 2023 65: 67| 88 07 mov gs:[edi],al
1180 2027 66| 47 inc edi
1181 2029 81 FE 1156 R cmp si,offset pattern+pattern_len
1182 202D 7E 03 jle short we6
1183 202F BE 114E R mov si,offset pattern
1184 2032 E2 EE we6: loop we5
1185 2034 66| 89 3E 112C R mov MemExtnd,EDI
1186 2039 66| 3B 3E 1142 R cmp edi,Extnd_L ; at end?
1187 203E 73 1E jnb short we_x
1188 2040 66| 81 C7 00010000 add edi,10000h
1189 2047 66| 3B 3E 1142 R cmp edi,Extnd_L ; at end?
1190 204C 72 AB jb we1
1191 204E 66| 8B 3E 1142 R mov edi,Extnd_L
1192 2053 66| 2B 3E 112C R sub edi,MemExtnd
1193 2058 89 3E 1124 R mov LoopCnt,DI
1194 205C EB 9B jmp we1
1195
1196 205E 8B 1E 1126 R we_x: mov bx,pause_cnt ; pause to display msg
1197 2062 2B C9 we_x1: sub cx,cx
1198 2064 49 we_x2: dec cx
1199 2065 75 FD jnz we_x2
1200 2067 4B dec bx
1201 2068 75 F8 jnz we_x1
1202 Vtype MsgTst,MsgTstL,Line08
1203 206A BE 1218 R 1 mov si,offset MsgTst ; addr of msg
1204 206D B9 0005 1 mov cx,MsgTstL ; length of message
1205 2070 BF 0500 1 mov di,Line08 ; offset into screen
1206 2073 E8 1D16 R 1 call Video_Output
1207
1208 2076 66| A1 113E R mov eax,Extnd_S ; re-init for testing
1209 207A 66| A3 112C R mov MemExtnd,eax
1210 207E C7 06 1124 R 0000 mov LoopCnt,0
1211 ; now test the memory
1212 2084 FC cld
1213 2085 A1 1130 R mov ax,LastPat
1214 2088 05 114E R add ax,offset pattern
1215 208B 8B F0 mov si,ax
1216 208D 56 te1: push si
1217 208E A1 112E R mov ax,MemSeg
1218 2091 BB 1254 R mov bx,offset Msg4a
1219 2094 E8 1D71 R call Convert_Hex
1220 2097 A1 112C R mov ax,MemOff
1221 209A BB 1259 R mov bx,offset Msg4b
1222 209D E8 1D71 R call Convert_Hex
1223 Vtype Msg4a,9,Line08+Msg4ao
1224 20A0 BE 1254 R 1 mov si,offset Msg4a ; addr of msg
1225 20A3 B9 0009 1 mov cx,9 ; length of message
1226 20A6 BF 052E 1 mov di,Line08+Msg4ao ; offset into screen
1227 20A9 E8 1D16 R 1 call Video_Output
1228 20AC 5E pop si
1229 20AD 8B 0E 1124 R mov cx,LoopCnt
1230 20B1 66| 8B 3E 112C R mov edi,MemExtnd ; start
1231 20B6 65: 67| 8A 07 te3: mov al,GS:[EDI] ; check pattern byte against memory
1232 20BA 3A 04 cmp al,[si]
1233 20BC 0F 85 20E3 R jne te7 ; bad byte
1234 20C0 80 3E 1128 R 00 cmp flag_CheckParity,0
1235 20C5 74 0B je short te4
1236 20C7 A2 1132 R mov Mem_Val,al ; save if bad parity
1237 20CA E4 61 in al,Port_Par ; check parity
1238 20CC A8 80 test al,Bits_Par ; shows parity error
1239 20CE 0F 85 2106 R jnz te8
1240 20D2 46 te4: inc si
1241 20D3 66| 47 inc edi
1242 20D5 81 FE 1156 R cmp si,offset pattern+pattern_len
1243 20D9 7E 03 jle short te6
1244 20DB BE 114E R mov si,offset pattern
1245 20DE E2 D6 te6: loop te3
1246 20E0 EB 42 90 jmp te9
1247 20E3 FF 06 1122 R te7: inc Errors ; memory did not compare
1248 20E7 A2 1132 R mov Mem_Val,al
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-17


1249 20EA 66| 89 3E 112C R mov MemExtnd,EDI
1250 20EF 66| 89 3E 112C R mov MemExtnd,EDI
1251 20F4 E4 61 in al,Port_Par
1252 20F6 A2 1134 R mov Mem_Par,al
1253 20F9 8A 04 mov al,[si]
1254 20FB A2 1133 R mov Mem_Pat,al
1255 20FE E8 1D81 R call Bad_Mem ; display info
1256 2101 E8 2297 R call Empty_8042
1257 2104 EB CC jmp te4
1258 2106 FF 06 1122 R te8: inc Errors ; memory compared but parity error
1259 210A 66| 89 3E 112C R mov MemExtnd,EDI
1260 210F 66| 89 3E 112C R mov MemExtnd,EDI
1261 2114 A2 1134 R mov Mem_Par,al
1262 2117 8A 04 mov al,[si]
1263 2119 A2 1133 R mov Mem_Pat,al
1264 211C E8 1D81 R call Bad_Mem ; display info
1265 211F E8 2297 R call Empty_8042
1266 2122 EB AE jmp te4
1267 2124 66| 89 3E 112C R te9: mov MemExtnd,edi ; at end?
1268 2129 66| 3B 3E 1142 R cmp edi,Extnd_L
1269 212E 73 21 jnb short te_x
1270 2130 66| 81 C7 00010000 add edi,10000h
1271 2137 66| 3B 3E 1142 R cmp edi,Extnd_L
1272 213C 0F 82 208D R jb te1
1273 2140 66| 8B 3E 1142 R mov edi,Extnd_L
1274 2145 66| 2B 3E 112C R sub edi,MemExtnd
1275 214A 89 3E 1124 R mov LoopCnt,DI
1276 214E E9 208D R jmp te1
1277
1278 2151 56 te_x: push si
1279 2152 A1 112E R mov ax,MemSeg
1280 2155 BB 1254 R mov bx,offset Msg4a
1281 2158 E8 1D71 R call Convert_Hex
1282 215B A1 112C R mov ax,MemOff
1283 215E BB 1259 R mov bx,offset Msg4b
1284 2161 E8 1D71 R call Convert_Hex
1285 Vtype Msg4a,9,Line08+Msg4ao
1286 2164 BE 1254 R 1 mov si,offset Msg4a ; addr of msg
1287 2167 B9 0009 1 mov cx,9 ; length of message
1288 216A BF 052E 1 mov di,Line08+Msg4ao ; offset into screen
1289 216D E8 1D16 R 1 call Video_Output
1290 2170 5E pop si
1291 2171 8B 1E 1126 R mov bx,pause_cnt ; pause to display msg
1292 2175 2B C9 te_x1: sub cx,cx
1293 2177 49 te_x2: dec cx
1294 2178 75 FD jnz te_x2
1295 217A 4B dec bx
1296 217B 75 F8 jnz te_x1
1297
1298 217D 66| A1 113E R mov eax,Extnd_S ; re-init
1299 2181 66| A3 112C R mov MemExtnd,eax
1300 2185 A1 111C R mov ax,Cycle
1301 2188 40 inc ax
1302 2189 A3 111C R mov Cycle,ax
1303 218C 3B 06 1120 R cmp ax,CycleEm
1304 2190 0F 8E 1FB5 R jle ce1
1305 Vtype msgd2,msgd2L,line21+msgd2o
1306 2194 BE 116C R 1 mov si,offset msgd2 ; addr of msg
1307 2197 B9 0019 1 mov cx,msgd2L ; length of message
1308 219A BF 0D70 1 mov di,line21+msgd2o ; offset into screen
1309 219D E8 1D16 R 1 call Video_Output
1310 Vtype Msg9,Msg9Len,Line08+Msg3Leno
1311 21A0 BE 133B R 1 mov si,offset Msg9 ; addr of msg
1312 21A3 B9 0019 1 mov cx,Msg9Len ; length of message
1313 21A6 BF 0548 1 mov di,Line08+Msg3Leno ; offset into screen
1314 21A9 E8 1D16 R 1 call Video_Output
1315 21AC C3 ret
1316 21AD Check_Extended endp
1317
1318 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1319 ; Interrupt Handlers
1320 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1321
1322
1323 = 1800 intspv equ 1800h ; base value of interrupt handler stack
1324 = 17E0 intspv1 equ 17e0h ; if no code on stack
1325 = 17DC intspv2 equ intspv1-4 ; if code IS stored
1326 21AD 0000 int_rdisp dw 0 ; to check SP
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-18


1327 21AF 0000 intcod1 dw 0 ; interrupt code word 1
1328 21B1 0000 intcod2 dw 0 ; interrupt code word 2
1329
1330 21B3 44 6F 75 62 6C 65 xmsg08 db 'Double Fault'
1331 20 46 61 75 6C 74
1332 = 000C xmsg08l equ $-xmsg08
1333 21BF 46 61 75 6C 74 20 xmsg1 db 'Fault '
1334 21C5 78 78 xmsg1a db 'xx'
1335 = 0008 xmsg1l equ $-xmsg1
1336
1337 ; Interrupt Fault Handlers
1338
1339 21C7 B9 0000 int00: mov cx,0
1340 21CA BE 0000 mov si,0
1341 21CD E9 2276 R jmp int_comm
1342 21D0 B9 0001 int01: mov cx,1
1343 21D3 BE 0000 mov si,0
1344 21D6 E9 2276 R jmp int_comm
1345 21D9 B9 0002 int02: mov cx,2
1346 21DC BE 0000 mov si,0
1347 21DF E9 2276 R jmp int_comm
1348 21E2 B9 0003 int03: mov cx,3
1349 21E5 BE 0000 mov si,0
1350 21E8 E9 2276 R jmp int_comm
1351 21EB B9 0004 int04: mov cx,4
1352 21EE BE 0000 mov si,0
1353 21F1 E9 2276 R jmp int_comm
1354 21F4 B9 0005 int05: mov cx,5
1355 21F7 BE 0000 mov si,0
1356 21FA EB 7A 90 jmp int_comm
1357 21FD B9 0006 int06: mov cx,6
1358 2200 BE 0000 mov si,0
1359 2203 EB 71 90 jmp int_comm
1360 2206 B9 0007 int07: mov cx,7
1361 2209 BE 0000 mov si,0
1362 220C EB 68 90 jmp int_comm
1363 220F B9 0008 int08: mov cx,8 ; Double Fault
1364 2212 B8 0010 mov AX,s_ds ; get some addressability
1365 2215 8E D8 mov DS,AX
1366 Vtype xmsg08,xmsg08l,line02
1367 2217 BE 21B3 R 1 mov si,offset xmsg08 ; addr of msg
1368 221A B9 000C 1 mov cx,xmsg08l ; length of message
1369 221D BF 0140 1 mov di,line02 ; offset into screen
1370 2220 E8 1D16 R 1 call Video_Output
1371 2223 EB FE jmp $ ; SPIN - go no further
1372 2225 B9 0009 int09: mov cx,9
1373 2228 BE 0000 mov si,0
1374 222B EB 49 90 jmp int_comm
1375 222E B9 000A int10: mov cx,10
1376 2231 BE 0000 mov si,0
1377 2234 EB 40 90 jmp int_comm
1378 2237 B9 000B int11: mov cx,11
1379 223A BE 0000 mov si,0
1380 223D EB 37 90 jmp int_comm
1381 2240 B9 000C int12: mov cx,12
1382 2243 BE 0000 mov si,0
1383 2246 EB 2E 90 jmp int_comm
1384 2249 B9 000D int13: mov cx,13
1385 224C BE 0000 mov si,0
1386 224F EB 25 90 jmp int_comm
1387 2252 B9 000E int14: mov cx,14
1388 2255 BE 0000 mov si,0
1389 2258 EB 1C 90 jmp int_comm
1390 225B B9 000F int15: mov cx,15
1391 225E BE 0000 mov si,0
1392 2261 EB 13 90 jmp int_comm
1393 2264 B9 0010 int16: mov cx,16
1394 2267 BE 0000 mov si,0
1395 226A EB 0A 90 jmp int_comm
1396
1397 ; Misc Interrupt Handler
1398
1399 226D B9 00FF intxx: mov cx,255
1400 2270 BE 0000 mov si,0
1401 2273 EB 01 90 jmp int_comm
1402
1403 ; Common routine for handling interrupts
1404 2276 int_comm:
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-19


1405 2276 50 push AX ; temp get a reg
1406 2277 B8 0010 mov ax,s_ds ; to get addressability
1407 227A 8E D8 mov DS,AX
1408 227C 58 pop AX
1409 227D 60 pusha ; save all regs
1410 227E 8B C1 mov AX,CX
1411 2280 BB 21C5 R mov BX,offset xmsg1a
1412 2283 E8 1D4E R call Hexit
1413 Vtype xmsg1,xmsg1l,Line00
1414 2286 BE 21BF R 1 mov si,offset xmsg1 ; addr of msg
1415 2289 B9 0008 1 mov cx,xmsg1l ; length of message
1416 228C BF 0000 1 mov di,Line00 ; offset into screen
1417 228F E8 1D16 R 1 call Video_Output
1418 2292 EB FE jmp $ ; ****DEBUG**** SPIN
1419 2294 61 popa
1420 2295 66| CF IretD
1421
1422
1423 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1424 ;
1425 ; This controls a signal which gates address bit 20.
1426 ;
1427 ; The gate A20 signal is an output of the 8042 slave processor.
1428 ; Address bit 20 should be gated ON before entering protect
1429 ; mode so that memory is addressed properly (if not, then odd numbered
1430 ; megs are mapped to the next lowest even numbered meg!!. When
1431 ; exiting protect mode (going back to real mode), the address A20
1432 ; should be gated back off.
1433 ;
1434 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1435
1436
1437 2297 Empty_8042 proc near
1438 2297 66| B9 00100000 mov ecx,100000h ; for timeout (big number)
1439 229D E4 64 empty: in al,port_status ; read the 8042 status port
1440 229F 24 02 and al,00000010b ; test input buffer full flag
1441 22A1 E0 FA loopnz empty ; loop until empty or timeout
1442 22A3 C3 ret
1443 22A4 Empty_8042 endp
1444
1445 22A4 Gate_A20 proc near
1446 ;
1447 ; On entry, AH contains the code (enable or disable)
1448 ;
1449 22A4 E8 2297 R call Empty_8042
1450 22A7 75 10 jnz short exit_8042 ; yes
1451 22A9 B0 D1 mov al,0D1h ; 8042 command to write output port (I hope)
1452 22AB E6 64 out port_status,al
1453 22AD E8 2297 R call empty_8042
1454 22B0 75 07 jnz short exit_8042
1455 22B2 8A C4 mov al,ah
1456 22B4 E6 60 out port_a,al ; output gate signal
1457 22B6 E8 2297 R call empty_8042
1458 22B9 Exit_8042:
1459 22B9 C3 ret
1460 22BA Gate_A20 endp
1461
1462
1463 22BA Exec_Prot proc near ; Setup and switch to PE
1464 22BA FC cld
1465 22BB FA cli
1466 22BC 8C 0E 1146 R mov savecs,CS
1467 22C0 8C 16 1148 R mov savess,SS
1468 22C4 89 26 114A R mov savesp,SP
1469
1470 ; First, Enable the A20 line
1471 22C8 B4 DF mov ah,bit20_enable
1472 22CA E8 22A4 R call gate_a20
1473 22CD 0A C0 or al,al ; zero if OK
1474 22CF 0F 84 22E0 R jz A20_ON
1475 Vtype Emsg3,Emsg3L,Line24
1476 22D3 BE 1354 R 1 mov si,offset Emsg3 ; addr of msg
1477 22D6 B9 0024 1 mov cx,Emsg3L ; length of message
1478 22D9 BF 0F00 1 mov di,Line24 ; offset into screen
1479 22DC E8 1D16 R 1 call Video_Output
1480 22DF C3 ret
1481 22E0 A20_ON:
1482
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-20


1483 ; Convert segment regs into linear addresses.
1484 22E0 8E 06 1112 R mov ES,Vram
1485 segcvt ES,d_crt
1486 22E4 66| 2B C0 2 sub eax,eax ; clear reg
1487 22E7 8C C0 2 mov AX,ES ; get the segment reg
1488 22E9 66| C1 E0 04 2 shl EAX,4 ; convert to a linear addr
1489 22ED A3 139A R 1 mov d_crt.base_l,AX ; get base of data
1490 22F0 66| C1 E8 08 1 shr EAX,8 ; to AH
1491 22F4 88 26 139C R 1 mov d_crt.base_m,AH ; and set mid-range byte
1492 22F8 C7 06 1112 R 0020 mov Vram,s_crt ; Protected Mode Video
1493 segcvt CS,d_cs
1494 22FE 66| 2B C0 2 sub eax,eax ; clear reg
1495 2301 8C C8 2 mov AX,CS ; get the segment reg
1496 2303 66| C1 E0 04 2 shl EAX,4 ; convert to a linear addr
1497 2307 A3 1382 R 1 mov d_cs.base_l,AX ; get base of data
1498 230A 66| C1 E8 08 1 shr EAX,8 ; to AH
1499 230E 88 26 1384 R 1 mov d_cs.base_m,AH ; and set mid-range byte
1500 segcvt DS,d_ds
1501 2312 66| 2B C0 2 sub eax,eax ; clear reg
1502 2315 8C D8 2 mov AX,DS ; get the segment reg
1503 2317 66| C1 E0 04 2 shl EAX,4 ; convert to a linear addr
1504 231B A3 138A R 1 mov d_ds.base_l,AX ; get base of data
1505 231E 66| C1 E8 08 1 shr EAX,8 ; to AH
1506 2322 88 26 138C R 1 mov d_ds.base_m,AH ; and set mid-range byte
1507 segcvt SS,d_ss
1508 2326 66| 2B C0 2 sub eax,eax ; clear reg
1509 2329 8C D0 2 mov AX,SS ; get the segment reg
1510 232B 66| C1 E0 04 2 shl EAX,4 ; convert to a linear addr
1511 232F A3 1392 R 1 mov d_ss.base_l,AX ; get base of data
1512 2332 66| C1 E8 08 1 shr EAX,8 ; to AH
1513 2336 88 26 1394 R 1 mov d_ss.base_m,AH ; and set mid-range byte
1514
1515
1516 ; Setup GDT, IDT, etc. to run protected
1517
1518 segadr DS
1519 233A 66| 2B C0 1 sub eax,eax ; clear reg
1520 233D 8C D8 1 mov AX,DS ; get the segment reg
1521 233F 66| C1 E0 04 1 shl EAX,4 ; convert to a linear addr
1522 2343 66| A3 110E R mov dsaddr,EAX
1523 2347 66| 2B DB sub EBX,EBX
1524 234A 66| 8D 1E 1378 R lea EBX,gdt_def
1525 234F 66| 03 D8 add EBX,EAX
1526 2352 66| 89 1E 110A R mov dtload,EBX ; set addr
1527 2357 C7 06 1108 R 002F mov dtsize,gdt_size-1
1528 235D 0F 01 16 1108 R LGDT FWORD PTR dtsize
1529
1530 2362 66| 2B DB sub EBX,EBX
1531 2365 66| 8D 1E 13A8 R lea EBX,idt_def
1532 236A 66| 03 D8 add EBX,EAX
1533 236D 66| 89 1E 110A R mov dtload,EBX ; set addr
1534 2372 C7 06 1108 R 07FF mov dtsize,idt_size-1
1535 2378 0F 01 1E 1108 R LIDT FWORD PTR dtsize
1536
1537 237D 0F 20 C0 mov EAX,CR0 ; get control reg
1538 2380 0C 01 or AL,1 ; turn PE on
1539 2382 0F 22 C0 mov CR0,EAX ; set it
1540 2385 EB 00 jmp short @f ; clear pipeline, etc.
1541 2387 90 @@: nop
1542
1543 2388 B8 0010 mov AX,s_ds ; and seg regs
1544 238B 8E D8 mov DS,AX
1545 238D 8E C0 mov ES,AX
1546 238F 8E E0 mov FS,AX
1547 2391 8E E8 mov GS,AX
1548 2393 B8 0018 mov AX,s_ss
1549 2396 8E D0 mov SS,AX
1550 2398 EA db 0eah ; do far jump to set CS
1551 2399 239D 0008 dw go_prot_2-_text,s_cs
1552 239D go_prot_2:
1553
1554 239D B0 80 mov al,80h ; disable the NMI interrupt
1555 239F E6 70 out NMIport,al
1556
1557 23A1 E8 1F83 R call Check_Extended
1558
1559 ; restore for real mode
1560 23A4 FC cld
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Page 1-21


1561 23A5 FA cli
1562 23A6 0F 20 C0 mov EAX,CR0 ; get control reg
1563 23A9 24 FE and AL,0FEh ; turn PE off
1564 23AB 0F 22 C0 mov CR0,EAX ; set it
1565 23AE EB 01 90 jmp go_real
1566 23B1 go_real:
1567 23B1 8E 16 1148 R mov SS,savess
1568 23B5 8B 26 114A R mov SP,savesp
1569 23B9 A1 1146 R mov AX,savecs
1570 23BC 8E D8 mov DS,AX
1571 23BE 8E C0 mov ES,AX
1572 23C0 8E E0 mov FS,AX
1573 23C2 8E E8 mov GS,AX
1574 23C4 C7 06 1112 R B800 mov Vram,0b800h ; Restore Real Mode Video
1575 Vtype msgd3,msgd3L,Line22
1576 23CA BE 1185 R 1 mov si,offset msgd3 ; addr of msg
1577 23CD B9 0014 1 mov cx,msgd3L ; length of message
1578 23D0 BF 0DC0 1 mov di,Line22 ; offset into screen
1579 23D3 E8 1D16 R 1 call Video_Output
1580 23D6 EB FE jmp $ ; SPIN - pending interrupts screwed up,
1581 ; leave video display up rather
1582 ; than re-booting.
1583 23D8 FB sti
1584 23D9 C3 ret
1585 23DA Exec_Prot endp
1586
1587 = 23DA ProgEnd equ $
1588
1589 23DA _text ends
1590 end start

Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Symbols-1


Macros:

N a m e Lines

SEGADR . . . . . . . . . . . . . 3
SEGCVT . . . . . . . . . . . . . 4
VTYPE . . . . . . . . . . . . . 4

Structures and Records:

N a m e Width # fields
Shift Width Mask Initial

DESC . . . . . . . . . . . . . . 0008 0006
LIMIT . . . . . . . . . . . . 0000
BASE_L . . . . . . . . . . . . 0002
BASE_M . . . . . . . . . . . . 0004
ACCESS . . . . . . . . . . . . 0005
GRAN . . . . . . . . . . . . . 0006
BASE_H . . . . . . . . . . . . 0007
GATE . . . . . . . . . . . . . . 0008 0005
ADDR_L . . . . . . . . . . . . 0000
SELECT . . . . . . . . . . . . 0002
GATE_T . . . . . . . . . . . . 0005
ADDR_H . . . . . . . . . . . . 0006
STKDEF . . . . . . . . . . . . . 0024 0012
OLDIP . . . . . . . . . . . . 0000
OLDCS . . . . . . . . . . . . 0004
OLDFL . . . . . . . . . . . . 0008
OLDSP . . . . . . . . . . . . 000C
OLDSS . . . . . . . . . . . . 0010
OLDES . . . . . . . . . . . . 0014
OLDDS . . . . . . . . . . . . 0018
OLDFS . . . . . . . . . . . . 001C
OLDGS . . . . . . . . . . . . 0020

Segments and Groups:

N a m e Size Length Align Combine Class

DGROUP . . . . . . . . . . . . . GROUP
_DATA . . . . . . . . . . . . 16 Bit 0000 WORD PUBLIC 'DATA'
_TEXT . . . . . . . . . . . . . 16 Bit 23DA WORD PUBLIC 'CODE'

Symbols:

N a m e Type Value Attr

A20_ON . . . . . . . . . . . . . L NEAR 22E0 _TEXT

BAD_MEM . . . . . . . . . . . . N PROC 1D81 _TEXT Length = 0063
BIT20_DISABLE . . . . . . . . . NUMBER 00DD
BIT20_ENABLE . . . . . . . . . . NUMBER 00DF
BITS_PAR . . . . . . . . . . . . NUMBER 0080

CE1 . . . . . . . . . . . . . . L NEAR 1FB5 _TEXT
CE2 . . . . . . . . . . . . . . L NEAR 1FD3 _TEXT
CHECK_EXTENDED . . . . . . . . . N PROC 1F83 _TEXT Length = 022A
CHECK_MAIN . . . . . . . . . . . N PROC 1DE4 _TEXT Length = 019F
COMMAND . . . . . . . . . . . . L BYTE 0080 _TEXT
CONV1 . . . . . . . . . . . . . L NEAR 1D2B _TEXT
CONV5 . . . . . . . . . . . . . L NEAR 1D3C _TEXT
CONVERT_DECIMAL . . . . . . . . N PROC 1D25 _TEXT Length = 0029
CONVERT_HEX . . . . . . . . . . N PROC 1D71 _TEXT Length = 0010
CYCLE . . . . . . . . . . . . . L WORD 111C _TEXT
CYCLEEM . . . . . . . . . . . . L WORD 1120 _TEXT
CYCLEMM . . . . . . . . . . . . L WORD 111E _TEXT

DONE . . . . . . . . . . . . . . L NEAR 1D14 _TEXT
DSADDR . . . . . . . . . . . . . L DWORD 110E _TEXT
DTLOAD . . . . . . . . . . . . . L DWORD 110A _TEXT
DTSIZE . . . . . . . . . . . . . L WORD 1108 _TEXT
D_CRT . . . . . . . . . . . . . L QWORD 1398 _TEXT
D_CS . . . . . . . . . . . . . . L QWORD 1380 _TEXT
D_DS . . . . . . . . . . . . . . L QWORD 1388 _TEXT
D_GDT . . . . . . . . . . . . . L QWORD 1378 _TEXT
D_MEM . . . . . . . . . . . . . L QWORD 13A0 _TEXT
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Symbols-2


D_SS . . . . . . . . . . . . . . L QWORD 1390 _TEXT

EMPTY . . . . . . . . . . . . . L NEAR 229D _TEXT
EMPTY_8042 . . . . . . . . . . . N PROC 2297 _TEXT Length = 000D
EMSG3 . . . . . . . . . . . . . L BYTE 1354 _TEXT
EMSG3L . . . . . . . . . . . . . NUMBER 0024
ERRORS . . . . . . . . . . . . . L WORD 1122 _TEXT
ESIZE . . . . . . . . . . . . . L WORD 1138 _TEXT
EXEC_PROT . . . . . . . . . . . N PROC 22BA _TEXT Length = 0120
EXIT_8042 . . . . . . . . . . . L NEAR 22B9 _TEXT
EXTND_L . . . . . . . . . . . . L DWORD 1142 _TEXT
EXTND_LW . . . . . . . . . . . . L WORD 1142 _TEXT
EXTND_S . . . . . . . . . . . . L DWORD 113E _TEXT
EXTND_SW . . . . . . . . . . . . L WORD 113E _TEXT

FLAG_CHECKPARITY . . . . . . . . L BYTE 1128 _TEXT

GATE_A20 . . . . . . . . . . . . N PROC 22A4 _TEXT Length = 0016
GDT_DEF . . . . . . . . . . . . L WORD 1378 _TEXT
GDT_SIZE . . . . . . . . . . . . NUMBER 0030
GO_PROT_2 . . . . . . . . . . . L NEAR 239D _TEXT
GO_REAL . . . . . . . . . . . . L NEAR 23B1 _TEXT

HEXIT . . . . . . . . . . . . . N PROC 1D4E _TEXT Length = 0023
HEX_AH . . . . . . . . . . . . . L NEAR 1D6E _TEXT
HEX_AL . . . . . . . . . . . . . L NEAR 1D5B _TEXT

I8259_1 . . . . . . . . . . . . L BYTE 114C _TEXT
I8259_2 . . . . . . . . . . . . L BYTE 114D _TEXT
IDT_DEF . . . . . . . . . . . . L WORD 13A8 _TEXT
IDT_SIZE . . . . . . . . . . . . NUMBER 0800
INT00 . . . . . . . . . . . . . L NEAR 21C7 _TEXT
INT01 . . . . . . . . . . . . . L NEAR 21D0 _TEXT
INT02 . . . . . . . . . . . . . L NEAR 21D9 _TEXT
INT03 . . . . . . . . . . . . . L NEAR 21E2 _TEXT
INT04 . . . . . . . . . . . . . L NEAR 21EB _TEXT
INT05 . . . . . . . . . . . . . L NEAR 21F4 _TEXT
INT06 . . . . . . . . . . . . . L NEAR 21FD _TEXT
INT07 . . . . . . . . . . . . . L NEAR 2206 _TEXT
INT08 . . . . . . . . . . . . . L NEAR 220F _TEXT
INT09 . . . . . . . . . . . . . L NEAR 2225 _TEXT
INT10 . . . . . . . . . . . . . L NEAR 222E _TEXT
INT11 . . . . . . . . . . . . . L NEAR 2237 _TEXT
INT12 . . . . . . . . . . . . . L NEAR 2240 _TEXT
INT13 . . . . . . . . . . . . . L NEAR 2249 _TEXT
INT14 . . . . . . . . . . . . . L NEAR 2252 _TEXT
INT15 . . . . . . . . . . . . . L NEAR 225B _TEXT
INT16 . . . . . . . . . . . . . L NEAR 2264 _TEXT
INTA01 . . . . . . . . . . . . . NUMBER 0021
INTA02 . . . . . . . . . . . . . NUMBER 00A1
INTCOD1 . . . . . . . . . . . . L WORD 21AF _TEXT
INTCOD2 . . . . . . . . . . . . L WORD 21B1 _TEXT
INTSPV . . . . . . . . . . . . . NUMBER 1800
INTSPV1 . . . . . . . . . . . . NUMBER 17E0
INTSPV2 . . . . . . . . . . . . NUMBER 17DC
INTXX . . . . . . . . . . . . . L NEAR 226D _TEXT
INT_COMM . . . . . . . . . . . . L NEAR 2276 _TEXT
INT_RDISP . . . . . . . . . . . L WORD 21AD _TEXT

LASTPAT . . . . . . . . . . . . L WORD 1130 _TEXT
LINE00 . . . . . . . . . . . . . NUMBER 0000
LINE01 . . . . . . . . . . . . . NUMBER 00A0
LINE02 . . . . . . . . . . . . . NUMBER 0140
LINE03 . . . . . . . . . . . . . NUMBER 01E0
LINE04 . . . . . . . . . . . . . NUMBER 0280
LINE05 . . . . . . . . . . . . . NUMBER 0320
LINE06 . . . . . . . . . . . . . NUMBER 03C0
LINE07 . . . . . . . . . . . . . NUMBER 0460
LINE08 . . . . . . . . . . . . . NUMBER 0500
LINE09 . . . . . . . . . . . . . NUMBER 05A0
LINE10 . . . . . . . . . . . . . NUMBER 0640
LINE11 . . . . . . . . . . . . . NUMBER 06E0
LINE12 . . . . . . . . . . . . . NUMBER 0780
LINE13 . . . . . . . . . . . . . NUMBER 0820
LINE14 . . . . . . . . . . . . . NUMBER 08C0
LINE15 . . . . . . . . . . . . . NUMBER 0960
LINE16 . . . . . . . . . . . . . NUMBER 0A00
LINE17 . . . . . . . . . . . . . NUMBER 0AA0
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Symbols-3


LINE18 . . . . . . . . . . . . . NUMBER 0B40
LINE19 . . . . . . . . . . . . . NUMBER 0BE0
LINE20 . . . . . . . . . . . . . NUMBER 0C80
LINE21 . . . . . . . . . . . . . NUMBER 0D20
LINE22 . . . . . . . . . . . . . NUMBER 0DC0
LINE23 . . . . . . . . . . . . . NUMBER 0E60
LINE24 . . . . . . . . . . . . . NUMBER 0F00
LOOPCNT . . . . . . . . . . . . L WORD 1124 _TEXT


MAIN . . . . . . . . . . . . . . N PROC 1BA8 _TEXT Length = 016E
MAIN5 . . . . . . . . . . . . . L NEAR 1D01 _TEXT
MAIN_L . . . . . . . . . . . . . L WORD 113C _TEXT
MAIN_LOOP . . . . . . . . . . . L NEAR 1E17 _TEXT
MAIN_S . . . . . . . . . . . . . L WORD 113A _TEXT
MEMEXTND . . . . . . . . . . . . L DWORD 112C _TEXT
MEMOFF . . . . . . . . . . . . . L WORD 112C _TEXT
MEMSEG . . . . . . . . . . . . . L WORD 112E _TEXT
MEM_PAR . . . . . . . . . . . . L BYTE 1134 _TEXT
MEM_PAT . . . . . . . . . . . . L BYTE 1133 _TEXT
MEM_VAL . . . . . . . . . . . . L BYTE 1132 _TEXT
ML1 . . . . . . . . . . . . . . L NEAR 1E35 _TEXT
MSG1 . . . . . . . . . . . . . . L BYTE 1199 _TEXT
MSG1A . . . . . . . . . . . . . L BYTE 11B2 _TEXT
MSG1AX . . . . . . . . . . . . . L BYTE 11B9 _TEXT
MSG1B . . . . . . . . . . . . . L BYTE 11C8 _TEXT
MSG1BX . . . . . . . . . . . . . L BYTE 11CF _TEXT
MSG1C . . . . . . . . . . . . . L BYTE 11D8 _TEXT
MSG1D . . . . . . . . . . . . . L BYTE 11DD _TEXT
MSG1LEN . . . . . . . . . . . . NUMBER 0046
MSG2 . . . . . . . . . . . . . . L BYTE 11DF _TEXT
MSG2LEN . . . . . . . . . . . . NUMBER 0039
MSG3 . . . . . . . . . . . . . . L BYTE 121D _TEXT
MSG3A . . . . . . . . . . . . . L BYTE 1234 _TEXT
MSG3AO . . . . . . . . . . . . . NUMBER 002E
MSG3LEN . . . . . . . . . . . . NUMBER 0020
MSG3LENO . . . . . . . . . . . . NUMBER 0048
MSG4 . . . . . . . . . . . . . . L BYTE 123D _TEXT
MSG4A . . . . . . . . . . . . . L BYTE 1254 _TEXT
MSG4AO . . . . . . . . . . . . . NUMBER 002E
MSG4B . . . . . . . . . . . . . L BYTE 1259 _TEXT
MSG4LEN . . . . . . . . . . . . NUMBER 0020
MSG4LENO . . . . . . . . . . . . NUMBER 0048
MSG5 . . . . . . . . . . . . . . L BYTE 125D _TEXT
MSG5A . . . . . . . . . . . . . L BYTE 1270 _TEXT
MSG5B . . . . . . . . . . . . . L BYTE 1275 _TEXT
MSG5C . . . . . . . . . . . . . L BYTE 1285 _TEXT
MSG5D . . . . . . . . . . . . . L BYTE 1290 _TEXT
MSG5E . . . . . . . . . . . . . L BYTE 129B _TEXT
MSG5LEN . . . . . . . . . . . . NUMBER 0040
MSG7 . . . . . . . . . . . . . . L BYTE 129D _TEXT
MSG7A . . . . . . . . . . . . . L BYTE 12C0 _TEXT
MSG7B . . . . . . . . . . . . . L BYTE 12D1 _TEXT
MSG7D . . . . . . . . . . . . . L BYTE 12E7 _TEXT
MSG7LEN . . . . . . . . . . . . NUMBER 004F
MSG8 . . . . . . . . . . . . . . L BYTE 12EC _TEXT
MSG8A . . . . . . . . . . . . . L BYTE 130F _TEXT
MSG8A2 . . . . . . . . . . . . . L BYTE 1314 _TEXT
MSG8B . . . . . . . . . . . . . L BYTE 1320 _TEXT
MSG8C . . . . . . . . . . . . . L BYTE 1325 _TEXT
MSG8D . . . . . . . . . . . . . L BYTE 1336 _TEXT
MSG8LEN . . . . . . . . . . . . NUMBER 004F
MSG9 . . . . . . . . . . . . . . L BYTE 133B _TEXT
MSG9A . . . . . . . . . . . . . L BYTE 1341 _TEXT
MSG9AO . . . . . . . . . . . . . NUMBER 000C
MSG9B . . . . . . . . . . . . . L BYTE 134F _TEXT
MSG9BO . . . . . . . . . . . . . NUMBER 0028
MSG9LEN . . . . . . . . . . . . NUMBER 0019
MSGD1 . . . . . . . . . . . . . L BYTE 1157 _TEXT
MSGD1L . . . . . . . . . . . . . NUMBER 0015
MSGD2 . . . . . . . . . . . . . L BYTE 116C _TEXT
MSGD2L . . . . . . . . . . . . . NUMBER 0019
MSGD2O . . . . . . . . . . . . . NUMBER 0050
MSGD3 . . . . . . . . . . . . . L BYTE 1185 _TEXT
MSGD3L . . . . . . . . . . . . . NUMBER 0014
MSGTST . . . . . . . . . . . . . L BYTE 1218 _TEXT
MSGTSTL . . . . . . . . . . . . NUMBER 0005
MSIZE . . . . . . . . . . . . . L WORD 1136 _TEXT

Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Symbols-4


NMIPORT . . . . . . . . . . . . NUMBER 0070

OPT1 . . . . . . . . . . . . . . L NEAR 1BBD _TEXT
OPT2 . . . . . . . . . . . . . . L NEAR 1BD7 _TEXT
OPT3 . . . . . . . . . . . . . . L NEAR 1BE2 _TEXT
OPT4 . . . . . . . . . . . . . . L NEAR 1BEE _TEXT
OPT5 . . . . . . . . . . . . . . L NEAR 1BFA _TEXT
OPT6 . . . . . . . . . . . . . . L NEAR 1C06 _TEXT
OPT7 . . . . . . . . . . . . . . L NEAR 1C12 _TEXT
OPTEND . . . . . . . . . . . . . L NEAR 1C14 _TEXT
OPTEND1 . . . . . . . . . . . . L NEAR 1C20 _TEXT
OPTEND2 . . . . . . . . . . . . L NEAR 1C2C _TEXT

PATTERN . . . . . . . . . . . . L BYTE 114E _TEXT
PATTERN_LEN . . . . . . . . . . NUMBER 0008
PAUSE1 . . . . . . . . . . . . . L NEAR 1DD7 _TEXT
PAUSE2 . . . . . . . . . . . . . L NEAR 1DD9 _TEXT
PAUSE_CNT . . . . . . . . . . . L WORD 1126 _TEXT
PORT_A . . . . . . . . . . . . . NUMBER 0060
PORT_B . . . . . . . . . . . . . NUMBER 0061
PORT_C . . . . . . . . . . . . . NUMBER 0062
PORT_CMOS . . . . . . . . . . . NUMBER 0070
PORT_PAR . . . . . . . . . . . . NUMBER 0061
PORT_STATUS . . . . . . . . . . NUMBER 0064
PROGEND . . . . . . . . . . . . NEAR 23DA _TEXT

SAVECS . . . . . . . . . . . . . L WORD 1146 _TEXT
SAVESP . . . . . . . . . . . . . L WORD 114A _TEXT
SAVESS . . . . . . . . . . . . . L WORD 1148 _TEXT
STACK . . . . . . . . . . . . . L WORD 0104 _TEXT Length = 0800
STACKE . . . . . . . . . . . . . L WORD 1104 _TEXT
START . . . . . . . . . . . . . L NEAR 0100 _TEXT
S_CRT . . . . . . . . . . . . . NUMBER 0020
S_CS . . . . . . . . . . . . . . NUMBER 0008
S_DS . . . . . . . . . . . . . . NUMBER 0010
S_MEM . . . . . . . . . . . . . NUMBER 0028
S_SS . . . . . . . . . . . . . . NUMBER 0018

TE1 . . . . . . . . . . . . . . L NEAR 208D _TEXT
TE3 . . . . . . . . . . . . . . L NEAR 20B6 _TEXT
TE4 . . . . . . . . . . . . . . L NEAR 20D2 _TEXT
TE6 . . . . . . . . . . . . . . L NEAR 20DE _TEXT
TE7 . . . . . . . . . . . . . . L NEAR 20E3 _TEXT
TE8 . . . . . . . . . . . . . . L NEAR 2106 _TEXT
TE9 . . . . . . . . . . . . . . L NEAR 2124 _TEXT
TE_X . . . . . . . . . . . . . . L NEAR 2151 _TEXT
TE_X1 . . . . . . . . . . . . . L NEAR 2175 _TEXT
TE_X2 . . . . . . . . . . . . . L NEAR 2177 _TEXT
TM1 . . . . . . . . . . . . . . L NEAR 1EBC _TEXT
TM3 . . . . . . . . . . . . . . L NEAR 1EDC _TEXT
TM4 . . . . . . . . . . . . . . L NEAR 1EF0 _TEXT
TM6 . . . . . . . . . . . . . . L NEAR 1EFD _TEXT
TM7 . . . . . . . . . . . . . . L NEAR 1F02 _TEXT
TM8 . . . . . . . . . . . . . . L NEAR 1F1C _TEXT
TM9 . . . . . . . . . . . . . . L NEAR 1F35 _TEXT
TM_X1 . . . . . . . . . . . . . L NEAR 1F4D _TEXT
TM_X2 . . . . . . . . . . . . . L NEAR 1F4F _TEXT

VIDEO_OUTPUT . . . . . . . . . . N PROC 1D16 _TEXT Length = 000F
VOUT1 . . . . . . . . . . . . . L NEAR 1D1E _TEXT
VRAM . . . . . . . . . . . . . . L WORD 1112 _TEXT

WE1 . . . . . . . . . . . . . . L NEAR 1FF9 _TEXT
WE5 . . . . . . . . . . . . . . L NEAR 2022 _TEXT
WE6 . . . . . . . . . . . . . . L NEAR 2032 _TEXT
WE_X . . . . . . . . . . . . . . L NEAR 205E _TEXT
WE_X1 . . . . . . . . . . . . . L NEAR 2062 _TEXT
WE_X2 . . . . . . . . . . . . . L NEAR 2064 _TEXT
WM1 . . . . . . . . . . . . . . L NEAR 1E53 _TEXT
WM5 . . . . . . . . . . . . . . L NEAR 1E73 _TEXT
WM6 . . . . . . . . . . . . . . L NEAR 1E81 _TEXT
WM_X1 . . . . . . . . . . . . . L NEAR 1E99 _TEXT
WM_X2 . . . . . . . . . . . . . L NEAR 1E9B _TEXT
WORK . . . . . . . . . . . . . . L WORD 1114 _TEXT

XMSG08 . . . . . . . . . . . . . L BYTE 21B3 _TEXT
XMSG08L . . . . . . . . . . . . NUMBER 000C
XMSG1 . . . . . . . . . . . . . L BYTE 21BF _TEXT
Microsoft (R) Macro Assembler Version 5.10 9/4/89 12:47:40

MemTest - Test Main & Extended Memory Symbols-5


XMSG1A . . . . . . . . . . . . . L BYTE 21C5 _TEXT
XMSG1L . . . . . . . . . . . . . NUMBER 0008

@0 . . . . . . . . . . . . . . . L NEAR 2387 _TEXT
@CODE . . . . . . . . . . . . . TEXT _TEXT
@CODESIZE . . . . . . . . . . . TEXT 0
@CPU . . . . . . . . . . . . . . TEXT 3471
@DATASIZE . . . . . . . . . . . TEXT 0
@FILENAME . . . . . . . . . . . TEXT memtest
@VERSION . . . . . . . . . . . . TEXT 510


1180 Source Lines
1551 Total Lines
291 Symbols

47030 + 205412 Bytes symbol space free

0 Warning Errors
0 Severe Errors


  3 Responses to “Category : System Diagnostics for your computer
Archive   : MEMT386.ZIP
Filename : MEMTEST.LST

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/