IBM
Personal
Computer
MACRO
Assembler
Version
2.00
POST
-----
01/
10/86
SYSTEM
POST
AND
BIOS
PROCEDURES
1-25
01-10-86
; ----------------------------------------------------------------
TH I S LOOP I S TO READ EACH CURSOR POS I T I
ON
FROM THE
; SCREEN AND
PRINT
IT.
(BH)=
VISUAL
PAGE
(CH)=
ROWS
AT
THIS
POINT
WE
KNOW
THE
COLUMNS/LINE
COUNT
IS
IN
(CL)
1
AND THE NUMBER OF
ROWS
ON
THE
DISPLAY
IS
IN
(CH).
1
THE PAGE
IF
APPLICABLE
IS
IN
(BH).
THE
STACK
HAS 1
(OS),
(AX),
(BX),
(CX),
(OX)
PUSHED.
1
.
--
----------------------------------------
--
--------------------
>COR
DX,DX
;
FIRST
PRINTER
MOV
AH,02H
;
SET
PRINTER
STATUS
REQUEST COMMAND
I
NT
I 7H ; REQUEST CURRENT PR I NTER
STATUS
XOR
AH,080H
; CHECK FOR
PRINTER
BUSY
(NOT
CONNECTED)
TEST
AH,
OAOH
;
OR
OUT OF
PAPER
JNZ
PRI70
; ERROR
EXIT
IF
PRINTER
STATUS
ERROR
PAGE
; - - - I
NT
05
H - - -
--
--
- - - - -
--
- - -
---
- - - - - - - - - -
--
---
--
- - - - - - - - -
--
- - - -
---
- - - -
---
-
--
; PR I
NT
SCREEN 1
;
-TH
I S LOG I C
WILL
BE
I NVOKED
BY
INTERRUPT
05H
TO PR I
NT
THE
SCREEN.
1
;
THE
CURSOR
POSITION
AT
THE
TIME
THIS
ROUTINE
IS
INVOKED
WILL
BE
1
; SAVED AND RESTORED UPON
COMPLETION.
THE
ROUTINE
IS
INTENDED
TO 1
; RUN
WITH
I
NTERRUPTS
ENABLED.
I F A SUBSEQUENT PR I
NT
SCREEN
KEY
1
;
IS
DEPRESSED
WHILE
THIS
ROUTINE
IS
PRINTING
IT
WILL
BE
IGNORED.
1
; THE
BASE
PRINTERS
STATUS
IS
CHECKED FOR NOT BUSY AND NOT OUT OF 1
;
PAPER.
AN
INITIAL
STATUS
ERROR
WILL
ABEND THE
PRINT
REQUEST.
1
; ADDRESS
0050:0000
CONTAINS
THE
STATUS
OF THE
PRINT
SCREENI
1
; :
;
50:
0 = 0 PR I
NT
SCREEN HAS NOT
BEEN
CALLED
OR
UPON RETURN 1
; FROM A
CALL
TH
I S I
NO
I
CATES
A
SUCCESSFUL
OPERATION.
1
; = I PR I
NT
SCREEN I
SIN
PROGRESS - IGNORE
TH
I S
REQUEST.
1
; =
255
ERROR ENCOUNTERED
OUR
I
NG
PR I
NT
I
NG.
1
INDICATE
CURSOR
SET
REQUEST
NEW
CURSOR
POSITION
ESTABLISHED
I
NO
I
CATE
READ CHARACTER FROM 0 I
SPLA
Y
CHARACTER
NOW
IN
(AL)
SEE I F
VALl
0 CHAR
JUMP I F
VAL
I 0 CHAR
ELSE
MAKE I T A
BLANK
SAVE CURSOR POS I
TI
ON
INDICATE
FIRST
PRINTER
(DX=
0)
INDICATE
PRINT
CHARACTER
IN
(AL)
PR I
NT
THE
CHARACTER
RECALL
CURSOR POS I T I
ON
TEST
FOR PR I NTER ERROR
EX
I T I F ERROR
DETECTED
ADVANCE TO
NEXT
COLUMN
SEE I
FAT
END OF
LINE
I F NOT LOOP FOR
NEXT
COLUMN
BACK TO COLUMN 0
(AH)
=0
SAVE
NEW
CURSOR
POSITION
LINE
FEED
CARR I AGE RETURN
RECALL
CURSOR POS I T I
ON
ADVANCE TO
NEXT
LINE
FINI
SHED?
I F NOT LOOP FOR
NEXT
LINE
GET CURSOR POS I T I
ON
INDICATE
REQUEST CURSOR
SET
CURSOR POS I T I
ON
RESTORED
BLOCK
INTERRUPTS
TI
LL
STACK
CLEARED
MOVE
OK
RESULTS
FLAG
TO
STATUS
BYTE
EXIT
PRINTER
ROUTINE
-
CARR I AGE RETURN
LINE
FEED
TO PR
INTER
SAVE SCREEN BOUNDS
NOW
READ THE CURRENT CURSOR POS I T I
ON
AND RESTORE
AT
END OF
ROUTINE
RECALL
SCREEN BOUNDS
PRESERVE
THE
OR
I G I
NAL
POS I T I
ON
INITIAL
CURSOR
(0,0)
AND
FIRST
PRINTER
WILL
REQUEST THE CURRENT SCREEN
MODE
(ALl
=
MODE
( AH) = NUMBER COLUMNS /
LINE
(BH)=
VISUAL
PAGE
WILL
MAKE USE OF
(CX)
REG I STER TO
CONTROL
ROWS
ON
SCREEN & COLUMNS
ADJUST
ROWS
ON
0 I
SPLA
Y COUNT
(CL)
= NUMBER
COLUMNS/LINE
(CH)
= NUMBER OF
ROWS
ON
0 I
SPLA
Y
DEL
AY I
NTERRUPT
ENABLE
TILL
FLAG
SET
USE
004010100
FOR
STATUS
AREA STORAGE
GET
STATUS
BYTE
DATA
SEGMENT
SEE
IF
PR I
NT
ALREADY
IN
PROGRES S
EX
IT
IF
PR I
NT
ALREADY
I N PROGRESS
INDICATE
PRINT
NOW
IN
PROGRESS
MUST RUN
WITH
I
NTERRUPTS
ENABLED
SAVE
WORK
REGI
STERS
OSTATUS
BYTE,
0
SHORT
PRI80
OX
AH,02H
10H
OX
DX,DX
AH,AH
17H
OX
AH,29H
PRI60
DL
CL,DL
PRIIO
DL,DL
AH,DL
OX
CRLF
OX
DH
CH,DH
PRIIO
AH,02H
10H
AH,08H
10H
AL,AL
PRI20
AL,
'
CRLF
CX
AH,03H
10H
CX
OX
DX,DX
OFF54H
o
IF54H
POP
MOV
INT
CLI
MOV
JMP
MOV
INT
MOV
INT
OR
JNZ
MOV
PUSH
XOR
XOR
INT
POP
TEST
JNZ
INC
CMP
JNZ
XOR
MOV
PUSH
CALL
POP
INC
CMP
JNZ
CALL
PUSH
MOV
INT
POP
PUSH
XOR
ORG
ORG
PR120:
PRIIO:
MOV
CL,AH
MOV
CH
,OROWS
INC
CH
PRINT_SCREEN_I
PROC
FAR
PUSH
OS
CALL
DDS
CMP
OSTATUS
BYTE,
I
JE
PR190-
MOV
OSTATUS_BYTE,I
STI
PUSH
AX
PUSH BX
PUSH
CX
PUSH
OX
MOV
AH,OFH
INT
10H
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
IF54
2677
2678
IF54
2679
2680
IF54
IE
268
I 1
F55
E8
I A I 2 R
2682
1
F58
80
3E
0 I
00
R 0 I
2683
I
F5D
74
7C
2684
I
F5F
C6
06
0 I
00
R 0 I
2685
IF64
FB
2686
I
F65
50
2687
IF66
53
2688
IF67
51
2689
I
F68
52
2690
I
F69
B4
OF
269
I I
F6B
CD
10
2692
2693
2694
I
F6D
8A
CC
2695
I
F6F
8A
2E
0084
R
2696
1
F73
FE
C5
2697
2698
2699
2700
270
I
2702
2703
2704
2705
I
F75
33
02
2706
I
F77
B4
02
2707
IF79
CD
17
2708
1
F7B
80
F4
80
2709
1
F7E
F6
C4
AO
27
10 1F 8 I
75
4E
2711
2712
1
F83
E8
1FDD R
2713
IF86
51
2714
IF87
B4
03
2715
I
F89
CD
10
2716
IF8B
59
2717
IF8C
52
2718
I
F8D
33
02
2719
2720
2721
2722
2723
IF8F
2724
I
F8F
B4
02
2725
IF91
CD
10
2726
I
F93
B4
08
2727
I
F95
CD
10
2728
I
F97
OA
CO
2729
1
F99
75
02
2730
I
F9B
BO
20
2731
IF9D
2732
IF9D
52
2733
I
F9E
33
02
2734
I FAO
32
E4
2735
IFA2
CD
17
2736
IFA4
5A
2737
I
FA5
F6
C4
29
2738
I
FA8
75
22
2739
I
FAA
FE
C2
2740
I
FAC
3A
CA
274
1 I F AE
75
OF
2742
I FBO
32
02
2743
I
FB2
8A
E2
2744
IFB4
52
2745
I
FB5
E8
I FDD R
2746
I
FB8
5A
2747
IFB9
FE
C6
2748
I
FBB
3A
EE
2749
1
FBD
75
DO
2750
2751
IFBF
5A
2752
I FCO
B4
02
2753
IFC2
CD
10
2754
IFC4
FA
2755
IFC5
C6
06
0100
R
00
2756
I
FCA
EB
OB
5-108
POST
(01/10/86)