521
ENDP
OX
NOW
HAS THE CURRENT CURSOR POS I T I
ON
.------------------------------------
--
------------
;
MED
READ
BYTE
; TH I5 ROUT I NE
WILL
TAKE
2
BYTES
FROM
THE REGEN
BUFFER,
; COMPARE
AGA
I
NST
THE CURRENT FOREGROUND COLOR,
AND
PLACE
; THE CORRE SPOND I
NG
ON
/ OFF
BIT
PATTERN
I NTO THE CURRENT
;
POSITION
IN
THE SAVE AREA
; ENTRY
--
; 5 I
,OS
=
PO
I NTER
TO
REGEN AREA OF
INTEREST
; BX = EXPANDED FOREGROUND COLOR
;
BP
=
PO
I NTER
TO
SAVE AREA
;
EXIT
--
; 5 I
AND
BP
ARE INCREMENTED
5-77
I
SIT
CARR I
AGE
RETURN
OR
CONTROL
GO
TO
CONTROL CHECK S I
FIT
I S
SAVE
REGISTER
SAVE A COPY
OF
CURRENT CURSOR
GET
BYTES
PER COLUMN
MULTIPLY
BY
ROWS
WR
I
TE
CHARACTER ONLY
COMMAND
ONLY
ONE
CHARACTER
WR
I TE THE CHARACTER
MULTIPLY
• 4
SINCE
4
ROWS/BYTE
I SOLA
TE
COLUMN
VALUE
DETERM I NE
OFFSET
RECOVER
PO
INTER
ALL
DONE
I GET CURRENT CURSOR
I SAVE
(AX)
REGISTER
IN
(01)
FOR
EXIT
I READ CURSOR POS I T I
ON
I GET CURRENT PAGE
SETT
I
NG
I READ THE CURRENT CURSOR POS I T I
ON
I RECOVER CHARACTER FROM
(0
I)
REG I STER
I GET
FIRST
BYTE
AND
SECOND
BYTES
I
SWAP
FOR COMPARE
I 2
BIT
MASK TO
TEST
THE
ENTRIES
I
RESULT
REG I STER
15TH
IS
SECT I
ON
BACKGROUND?
IF
ZERO,
IT
IS
BACKGROUND (CARRY=O)
WASN'T,
SO
SET
CARRY
I
MOVE
THAT
BI
T I NTO THE
RESULT
MOVE
THE MASK
TO
THE
RIGHT
BY 2
BI
TS
DO
IT
AGAIN
IF
MASK
DIDN'T
FALL
OUT
I STORE
RESULT
IN
SAVE AREA
I
ADJUST
PO
INTER
I
ALL
DONE
I
TEST
FOR COLUMN OVERFLOW
I SET CURSOR
I COLUMN FOR CURSOR
I CHECK FOR
LAST
ROW
I
SET_CURSOR_INC
I SET THE CURSOR
1-16
01-10-86
VIDEO
(01/10/86)
AX,CX
525
AH,02H
10H
AH,OAH
CX,I
10H
DS:DATA
PROC NEAR
DI,AX
AH,03H
BH,
.ACT
I
VE
PAGE
10H
-
AX,DI
AL,AH
CX,OCOOOH
DL,O
DL,I
CX,I
CX,I
524
lBP]
,DL
BP
AL,CR
U8
DL
DL
,BYTE
PTR
.CRT
COLS
U7
-
DL,O
DH,25-1
U6
TEST
JZ
STC
WR
I
TE
THE CHAR
TO
THE SCREEN
POS I T I
ON
THE CURSOR FOR NEXT CHAR
CMP
JBE
DETERM I NE VALUE TO
FILL
WITH
OUR
I
NG
SCROLL
RCL
SHR
SHR
JNC
MOV
INC
RET
ENDP
INC
CMP
JNZ
MOV
CMP
JNZ
MOV
INT
MOV
MOV
INT
523
525:
524:
~~~---
.-------------------------------------
----
-------
----
523
PROC
NEAR
LODSW
XCHG
MOV
MOV
ASSUME
WRITE
TTY
-
XCHG
MOV
MOV
INT
MOV
;
-----
SCROLL REQU I RED
Ul
:
V4
POSITION
THIS
ROUTINE
TAKES THE CURSOR
POSITION
CONTAINED
IN
THE
MEMORY
LOCATION,
AND
CONVERTS
IT
INTO
AN
OFFSET
INTO
THE REGEN
BUFFER,
ASSUMING
ONE
BYTE/CHAR.
FOR
MED
I
UM
RESOLUT I
ON
GRAPH I
CS,
THE NUMBER MUST
BE
DOUBLED.
ENTRY - -
NO
REG I
STERS,
MEMORY
LOCATION
.CURSOR
POSN I S USED
EXIT--
. -
AX
CONTA I
NS
OFFSET
I NTO REGEN BUFFER
1-
-
----
- -
--
---
- - - - - - - -
----
- - -
--
-
----
----
--
526
PROC
NEAR
MOV
AX,
.CURSOR
POSN
GRAPH POSN
LABEL
NEAR
- PUSH BX
MOV
BX,AX
MOV
AL,
BYTE
PTR
.CRT
COLS
MUL
AH
-
SHL
AX,I
SHL
AX,I
SUB
BH,BH
ADD
AX,BX
POP BX
RET
526
ENDP
--
WR
I
TE
TTY
---------------------------------------------------------------
__
- I
TH I 5 I NTERFACE PROV I DES A
TELETYPE
LIKE
I NTERFACE
TO
THE I
V
IDEO
CARDS.
THE I NPUT CHARACTER I S
WR
I
TTEN
TO THE CURRENT I
CURSOR POS I T I
ON,
AND
THE CURSOR I S MOVED
TO
THE NEXT POS I T I
ON.
I
IF
THE CURSOR
LEAVES
THE
LAST
COLUMN
OF
THE
FIELD,
THE COLUMN I
I S SET
TO
ZERO,
AND
THE
ROW
VALUE I S
INCREMENTED.
I F THE
ROW
I
ROW
VALUE
LEAVES
THE
FIELD,
THE CURSOR
IS
PLACED
ON
THE
LAST
ROW,
I
FIRST
COLUMN,
AND
THE
ENT
I
RE
SCREEN I S SCROLLED UP ONE
LINE.
I
WHEN
THE SCREEN I S SCROLLED
UP,
THE ATTR
IBUTE
FOR
FILL
I
NG
THE I
NEWLY
BLANKED
LINE
I S READ
FROM
THE CURSOR POS I T I
ON ON
THE PREV 10US I
LINE
BEFORE THE
SCROLL,
I N CHARACTER MODE. I N GRAPH I
CS
MODE, I
THE 0 COLOR I S
USED.
I
ENTRY
--
I
( AH) = CURRENT CRT
MODE
I
(
AL
) = CHARACTER
TO
BE
WR
I TTEN I
NOTE
THAT
BACK
SPACE,
CARRIAGE
RETURN,
BELL
AND
LINE
FEED
ARE
I
HANDLED
AS
COMMANDS
RATHER THAN
AS
DISPLAY
GRAPHICS
CHARACTERS I
(BL)
= FOREGROUND COLOR FOR CHAR
WR
I
TE
IF
CURRENTLY I N A GRAPH I
CS
MODE
I
EXIT
--
I
;
------~::_~:~~:~:~:_:~~:~-~~~~~~~-~~~:~=:~~~-~~~::~~~~~-~~~::_---------------_:
1673
06CF
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
06CF
1688
06CF
AD
1689
0600
86
C4
1690
0602
B9
COOO
1691
0605
B2
00
1692
0607
1693
0607
85
C 1
1694
0609
74
01
1695
06DB
F9
1696
06DC
1697
06DC
DO
02
1698
06DE
01
E9
1699
06EO 01
E9
1700
06E2
73
F3
170
I
06E4
88
56
00
1702
06E7
45
1703
06E8
C3
1704
06E9
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
06E9
1717
06E9
A I
0050
R
1718
06EC
1719
06EC
53
1720
06ED
8B
08
1721
06EF
AO
004A
R
1722
06F2
F6
E4
1723
06F4
01
EO
1724
06F6
01
EO
1725
06F8
2A
FF
1726
06FA
03
C3
1727
06FC
5B
1728
06FD
C3
1729
06FE
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
06FE
1754
06FE
97
1755
06FF
B4
03
1756
070
I
8A
3E
0062
R
1757
0705
CD
10
1758
0707
8B
C7
1759
1760
1761
1762
0709
3C
00
1763
070B
76
46
1764
1765
1766
0700
1767
0700
B4
OA
1768
070F
B9
0001
1769
0712
CD
10
1770
1771
1772
1773
0714
FE
C2
1774
0716
3A
16
004A
R
1775
071A
75
33
1776
071C
B2
00
1777
071E
80
FE
18
1778
0721
75
2A
1779
1780
1781
0723
1782
0723
B4
02'
1783
0725
CD
10
1784
1785
1786
IBM
Persona
I
Computer
MACRO
Assemb
I
er
Vers
i
on
2.00
VIDEO
----
01/10/86
VIDEO
DISPLAY
BIOS