IBM Personal Computer MACRO Assembler
Vers<on 2.00
1-4
TEST2 ---- 06/10/85
POST TESTS AND INITIALIZATION ROUTINES
06-10-85
0170 07
POP
ES
344
0171
26: C7
06 005A 0000
MOV
ES:SS TEMP.BASE LO WORD,O
345
017826: C6 06 005C 00
MOV
8YTE PTR ES: 15S-TEi:i:P.BASE HI
BYTEI,O
346
017E 8E 0058
MOV
SI,SS TEMP
-
-
347
0181
8E 06
MOV
SS,SI
348
0183 8C FFFO
MOV
SP,MAX_SEG_LEN-2
349
350
DATA SEGMENT TO SYSTEM DATA AREA
351
352
0186 6A
18
PUSH
BYTE PTR RSDA PTR
POINT TO DATA AREA
353
0166
IF
POP
05
354
355
0169 BO 80
OOV
AL, PAR
I
TY CHECK
SET CHECK PAR I TY
356
018B E6 87
OUT
DMA_PAGE+6,AL
SAVE WH I CH CHECK TO USE
351
358
PR I NT 64 K BYTES OK
359
360
0160 B8 0040
OOV
AX,64
STARTING AMOUNT OF MEMORY OK
361
0190 E8 099F R
CALL
PRT _OK
POST 65K OK MESSAGE
362
363
GET THE MEMORY SIZE DETERM I NED
I
PREPARE 8X AND OX FOR BAD CMOS 1
364
365
0193 88 B081
MOV
AX, ICMOS U M
5
LO+NM11-H+CMOS U M
5
HI+NMI
366
0196 E8 0000 E
CAll
CMOS READ -
-
-
HIGH BYTE
367
019986 EO
XCHG
AH,A[
SAVE HIGH BYTE
368
0198 E8 0000 E
CALL
CMOS READ
LOW 8YTE
369
019E 8B
IE
0013 R
MOV
8X,Q!lMEMORY SIZE
LOAD THE BASE MEMORY SIZE
370
0lA2 8B 03
MOV
DX,eX
-
SAVE BASE MEMORY SizE
371
0lA4 03 08
ADD
BX,AX
SET TOTAL MEMORY SIZE
312
373
1-----
I
S CMOS GOOD
7
314
375
0lA6 BO 8E
OOV
AL, CMOS 0 I AG+NM I
DETERMJNE THE CONDITION OF CMOS
376
0lA8 E8 0000 E
CALL
CMOS_READ
GET THE CMOS STATUS
311
376
0lA8 A8 CO
TEST
AL,BAD BAT+BAO CKSUM
CMOS OK
7
379
OIAD 74 02
J,
E20BO -
-
GO
I F YES
380
OlAF EB 5B
JMP
SHORT E20C
DEFAULT IF NOT
381
382
GET THE BASE 0->640K MEMORY SIZE FROM CONFIGURATION
IN CMOS
383
OIBI
E20BO:
384
OIBI
B8 9596
MOV
AX, (CMOS B M S LO+NM I) -H+CMOS 8 M 5 HI +NM I
385
0184 E8 0000 E
CALL
CMOS READ -
-
-
HIGH BYTE
386
0187 24 3F
AND
AL,03FH
MASK OFF THE MANUFACTURING TEST BITS
387
018986 EO
XCHG
AH,AL
,
SAVE HIGH BYTE
388
0lB8 E8 0000 E
CALL
CMOS READ
;
LOW BYTE OF 8ASE MEMORY 5 I ZE
389
0 I BE 3B DO
CMP
DX,AX
;
IS MEMORY SIZE GREATER THAN CONFIG?
390
0 I CO 74
13
.JZ
E2081
I
GO I F EQUAL
3.,
392
1-----
SET MEMORY SIZE DETERMINE NOT EQUAL TO CONFIGURATION
393
394
0lC2 50
PUSH
AX
SAVE AX
395
a
I C3 88 8E8E
OOV
AX,X· (CMOS DIAG+NMI)
ADDRESS THE STATUS BYTE
396
01C6 E8 0000 E
CALL
CMOS READ -
GET THE STATUS
397
0 I C9 DC
10
OR
AL,W-MEM SIZE
SET CMOS FLAG
398
0lC8
86
C4
XCHG
AL.AH
-
SAVE AL AND GET ADDRESS
399
oleo
E8 0000 E
CALL
CMOS WR I TE
WRITE UPDATED STATUS
400
DIDO 58
POP
AX
-
RESTORE AX
401
0101
3B DO
eMP
DX,AX
I S MEMORY SIZE GREATER THAN CONF I G
7
402
0103
77 37
JA
E20C
DEFAULT TO MEMORY SIZE DETERMINED
7
403
0105
E2081:
404
0105 8B 08
~OV
BX,AX
SET BASE MEMORY SIZE I N TOT AL REG I STER
405
0107 88 DO
~OV
DX,AX
SAVE
IN
BASE SIZE REGISTER
406
401
;~---~
CHECK MEMORY SIZE A80VE 640K FROM CONFIGURATION
408
409
0109 B8 9798
MOY
AX,(CMOS EMS LO+NMII·H+(CMOS EMS HI+NMI)
410
OIDC E8 0000 E
CALL
CMOS READ -
-
-
;
HIGH-BYTE
411
OIDF 86 EO
XCHG
AH,A[
;
SAVE HIGH BYTE
412
OIEI E8 0000 E
CALL
CMOS READ
;
LOW BYTE
413
01E4 88 C8
MOY
CX, AX
;
SAVE THE ABOVE 640K MEMORY SIZE
414
;-----
ABOVE 640K SIZE FROM MEMORY SIZE OETERM I NE
415
;-----
CX=CONFIG
AX=MEMORY SIZE DETERMINE
416
01E6 88 8081
MOV
AX, (CMOS U M 5 LO+NM I I ·H+ (CMOS U M S HI +NM I I
417
0lE9 E8 0000 E
CALL
CMOS READ -
-
-
; HI GH-8YTE
418
OIEC 86 EO
XCHG
AH,AL
;
SAVE HIGH BYTE
419
OIEE E8 0000 E
CALL
CMOS READ
;
LOW BYTE
420
WHICH IS GREATER -
AX
= MEMORY SIZE DETERMINE
421
----- CX = CONFIGURATION
(ABOVE 6401
BX = SIZE (BELOW 6401
422
423
0 IF 1 3B C8
eMP
CX,AX
;
IS CONFIGURATION EQUAL TO DETERMINED?
424
0lF3 74 OF
JZ
SET_MEMI
;
GO IF EQUAL
425
426
;-----
SET MEMORY SIZE DETERMINE NOT EQUAL TO CONFIGURATION
421
426
0lF5 50
PUSH
AX
SAVE AX
429
0 I F6 B8 8E8E
MOV
AX,X-(CMOS DIAG+NMII
ADDRESS THE STATUS BYTE
430
0lF9 E8 0000
E
CALL
CMOS READ -
GET THE STATUS
431
OIFC DC
10
OR
AL.W-MEM SIZE
SET CMOS FLAG
432
01FE 86 C4
XCHG
AL,AH
-
SAVE AL
433
0200 E8 0000 E
CALL
CMOS WR (TE
UPDATE STATUS BYTE
434
0203 58
POP
AX
-
RESTORE AX
435
436
0204
SET MEMI :
431
0204 38 C8
-
CMP
CX,AX
IS CONFIG GREATER THAN DETERMINED?
438
0206
11 02
JA
SET MEM
GO
IF YES
43'
0208 88 C8
~OV
CX,AX
USE MEMORY SIZE DETERM I NE I F NOT
440
020A
SET MEM:
-
441
020A 03
09
ADD
BX,CX
SET TOTAL MEMORY SIZE
442
020C
E20C:
443
020C
81
FA 020 I
COP
DX,513
CHECK IF 8ASE MEMORY LESS 512K
444
0210 72 00
JB
NO_640
GO
IF YES
445
446
0212 B8 B3B3
OOV
AX,X· (CMOS
INFOI28+NMII
SET 640K BASE MEMORY BIT
447
0215 E8 0000 E
CALL
CMOS READ
GET THE CURRENT STATUS
448
0218 DC 80
OR
AL,M640K
TURN ON 640K BI T IF NOT ALREADY ON
449
021A 86 C4
XCHG
AL,AH
SAVE THE CURRENT DIAGNOSTIC STATUS
450
021C E8
0000
E
CALL
CMOS_WRITE
RESTORE THE STATUS
451
021F
452
021F 89
IE 0017
R
OOV
WORD PTR IIKB FLAG, BX
SAVE TOTAL SIZE FOR LATER TESTING
453
0223 C I
EB 06
5HR
8X,6
-
D[VIDE BY 64
454
0226 48
OEC
BX
1ST 64K ALREADY DONE
455
0227 C I
EA 06
5HR
DX,6
DIVIDE BY 64 FOR BASE
450
TEST2
5-61