IBM 5150 PC Technical Reference (6025005, August, 1981) (PDF)
IBM 5150 PC Technical Reference (6025005, August, 1981) (PDF) IBM 5150 PC Technical Reference (6025005, August, 1981) (PDF)
lOC 08J LINE SOURCE F376 fBED 3834 JMP N14 3835 SCROL~OO!J:N ENDP 3836 ; ----------------------- ------------------ 3837 ; READ_At_CURRENT 3838 THIS ROUTINE READS THE ATTRIBUTE AND CHARACTER AT THE CURRENT 3839 CURSOR POSITION AHO RETURNS THEM TO THE CALLER 3a40 ; INPUT 3841 (AH) :: CURRENT CRT t10DE 3842 (8H) :: DISPLAY PAGE ( ALPHA HODES ONLY 1 3843 (as) = DATA SEGMENT 3844 (ES) = REGEN SEGMENT 3845 ;OUTPUT 3846 (ALI = CHAR READ 3347 (AH) :: ATTRIBUTE READ 3848 ; -------------------- - - ------------------- 3849 ASSUME CS:CQDE.DS:DATA.ES:DATA F37D 3850 READ_AC_CURRENT PROt NEAR F37C 80FC04 3851 eMP AH,4 ; IS THIS GRAPHICS n80 7Z0B 3852 JC PI f382 80FC07 3853 CMP AH.7 ; IS THIS ew CARD F38S 7403 3854 JE PI Fl87 E9A902 3855 JMP GRAPHICS_READ FlSA 3856 PI: ; READ_AC_CONTINUE F3eA E81,o..OO 3857 CALL FINO_POSITION F38D 8BF3 3858 MOV SI,ex j ESTABLISH ADDRESSING IN 51 3659 3S60 3861 j------ WAIT FOR HORIZONTAL RETRACE F3SF 8BI66300 3862 MOV DX.AOOR_6845 ; GET BASE ADDRESS F393 83C206 3863 ADD OX.6 i POINT AT STATUS PORT F396 06 3864 PUSH ES F397 IF 386$ POP OS ; GET SEGMENT FOR QUICK ACcESS F398 3866 P2 : ; W.IT FOR RETR.CE LOW F398 EC 3867 IN AL,OX ; GET STATUS F399 ,0..801 3868 TEST AL,1 ; IS HaRZ RETRACE LOW f39B 75FB 3869 JNZ P2 ; WAIT UNTIL IT IS F39D FA 3870 CLI j NO MORE INTERRUPTS r'\ F39E 3871 P3: ; WAIT FOR RETRACE HIGH F39E EC 3872 IN AL.OX ; GET STATUS f39F ,0..801 3873 TEST AL.! ; IS IT HIGH FlAl 74F8 3874 JZ P3 ; WAIT UNTIL IT IS FlA.3 AD 3875 lOOSW ; GET THE CHAR/ATTR F3A4 E9Z0Ff 3876 JMP VIDEO_RETURN 3877 RE.O_AC_CURREHT ENDP 3878 FlA7 3879 nA7 8ACF 3880 MQV CL,BH ; DISPLAY PAGE TO CX F3A9 3ZED 3881 XOR CH.CH FlAB 86Fl 3882 NOV 5I.CX ; MOVE TO SI fOR INDEX F3AO DIE6 3883 SAL 51.1 ; • 2: FOR WORD OFFSET F3AF 88845000 3884 I10V AX,[SI+ OFFSET CURSOR]OSNJ ; GET ROW/COLUMN OF THAT PAGE F3B3 330B 3885 XOR ex.ex SET START ADDRESS TO ZERO F3BS n06 3686 JCXZ P5 nB7 3887 P4: F367 031£4COO 3888 ADD BX.CRT_LEN LENGTH Of BUFfeR FlBB EZFA 3889 lOOP P4 FlBD 3890 ps: ; NO_PAGE F3BD E8CBFE 3891 CALL POSITlON ; DETERMINE LOCATION IN REGEN nco 0308 3892 AOO BX.AX ; ADD TO START OF REGEN F3C2 C3 3893 RET 3694 FINO_POSITION Et.'OP 3895 ; ----- ~----------- ----------------------- 3896 ;WRITE_AC_CURRENT 3897 THIS ROUTINE WRITES THE ATTRIBUTE AND CHARACTER AT 3696 THE CURRENT CURSOR POSITION 38'99 ; INPUT 3'900 ! AH) = CURRENT CRT MODE 3901 (BH) = DISPLAY PAGE 3902 (CXl = COUNT OF cHARACTERS TO WRITE 3903 (AU = CHAR' TO WRITE 3904 tBLl = ATTRIBUTE Of CHAR TO WRITE 3905 CDS) .. DATA SEGMENT 3906 (ES) = REGEN SEGMENT 3907 ;OUTPUT 3908 NONE 3909 ; --------- ------------- --------------------- A-53
LOC OBJ LINE SOURCE F3Cl 3910 NEAR F3C3 60fC04 3911 CMP AH,4 i IS THIS GRAPHICS F3C6 7208 3912 JC P6 nCB BOFC07 3913 CMP AH,7 I IS THIS BW CARD nCB 7403 3914 J' P6 nco E98101 3915 JMP noo 3916 P6: i WRITE_AC_CONTINUE Floa 8An 3917 HOV AH,BL ; GET ATTRIBUTE TO AH F30Z 50 3918 PUSH AX I SAVE ON STACK Fl03 SI 3919 PUSH ex ; SAVE WRITE COUNT F3D4 ESC OFF 39Z0 CALL FlNO_POSITlOH F30? 8BFB ]92:1 HOY DI.BX • ADDRESS TO 01 REGISTER n09 59 3922 POP ex ~ WRITE COUNT FlOA 58 3923 pop ex J CHARACTER IN BX REG F30B 3924 1'7: ; WRITE_LOOP 3925 3926 ; ------ WAlT FOR HORIZONTAL RETRACE 3927 F30B 8B166300 3n8 MOY DX.ADDR_6645 ; GET BASE ADDRESS nOf 63C206 3929 ADD DX.6 i POINT AT STATUS PORT F3El 3930 P6: F3E2 EC 3931 IN Al,DX ; GET STATUS BE3 A801 3932 TEST Al.t I IS IT LOW F3E5 75FB 39~3 JUZ P6 I WAIT UNTIL IT IS F3E7 FA 3934 ell ; NO MORE INTERRUPTS FlEa 3935 P9: FlEe EC 3936 IN .U,DX ; GET STATUS F3E9 ASOI 3937 TEST Al,l ; IS IT HIGH FlEB 74FB 3936 JZ P9 ; WAIT UNTIL IT IS FlED 8BC3 3939 MOV Ax.ex ; RECOVER THE CHAR/ATTR F3EF AS 3940 STOSW ; PUT THE CHAR/ATTR F3FO Fa 3941 sn ; INTERRUPTS BACK ON F3F1 E2E8 3942 j AS MANY TIMES AS REQUESTED F3F3 E9DIFD 3943 3944 3945 .---------------------------------------- 394. .WRITE_C_CURRENT 3947 THIS ROUTINE WRITES THE CHARACTER AT 3946 THE CURRENT CURSOR POSITION. ATTRIBUTE UNCHANGED 3949 ;INPUT 3950 ( AH) : CURRENT CRT MODE 3951 (BH) = DISPLAY PAGE 3952 (CX) : COUNT OF CHARACTERS TO WRITE 3953 tAll = CHAR TO WRITE 3954 (OS) = DATA SEGMENT 3955 (ES) = REGEN SEGMEtlT 3956 .OUTPUT 3957 NONE 3956 ; --------------------________________--- F3F6 3959 WRITE_C_CURRENT PROC NEAR F3F6 BOFC04 396-0 eMP AH.4 IS THIS GRAPHICS F3F9 7208 396.1 JC PI0 F3FB 80FC07 3962 CMP AH.7 IS THIS Bioi CARD F3FE 7403 3963 J' Pl. F400 E97EOI 3964 JMP GRAPHICS_WRITE F403 3965 PIO: F403 50 396-6 PUSH AX ; SAVE ON STACK F404 51 3967 PUSH CX ; SAVE WRITE COUNT F40S E89FFF 3966 CALL FIND_POSITION F40e SBFB 3969 HOV DI.BX ; ADDRESS TO 01 F40A S9 3970 POP CX ; WRITE coutn F40B 58 3971 POP ; BL HAS CHAR TO WRITE F40C 3912 PH: i WRITE_LOOP 3973 3974 j------ WAIT FOR HORIZONTAL RETRACE 3975 F40C 8S166300 3976 HOY OX , AODR_6845 ; GET BASE ADDRESS F410 83C206 3977 ADD DX.6 I POINT AT STATUS PORT f413 3976 pt2: F413 EC 3979 IN AL.DX GET STATUS F414 A801 3960 TEST AL,I IS IT LOW F416 7SfB 3961 JNZ PI2 ; WAIT UNTIL IT IS F418 FA 3962 ClI ; NO MORE INTERRUPTS F419 3963 PI3: F419 EC 3964 IN AL,OX I GET STATUS F41A A801 3965 TEST Al.t ;; IS IT HIGH A·54
- Page 195 and 196: lOC OBJ LINE SOURCE STITlE( ROM BIO
- Page 197 and 198: LOC OBJ LINE SOURCE 0068 ?! 155 De
- Page 199 and 200: LOC OBJ LINE SOURCE E09E BBf5 EOAO
- Page 201 and 202: lOC OBJ LINE SOURCE £179 E2FD 462
- Page 203 and 204: LOC OBJ LINE SOURCE E278 7408 612 J
- Page 205 and 206: lOC OBJ LINE SOURCE 755 ; ---------
- Page 207 and 208: LOC OSJ LINE SOU RCE E42B 7440 900
- Page 209 and 210: lOC OBJ LINE SOURCE ESIE 884000 E52
- Page 211 and 212: LaC OBJ LINE SOURCE E613 803E120001
- Page 213 and 214: LaC OSJ LINE SOURCE E6EC eSOAOE E6E
- Page 215 and 216: LaC OBJ LINE SOURCE E7SF 1505 .402:
- Page 217 and 218: LaC OBJ LINE SOURCE 1659 ASSUME CS:
- Page 219 and 220: LOC OBJ LINE SOURCE E994 8E08 1798
- Page 221 and 222: LOC 08J LINE SOURCE £"91 474849 EA
- Page 223 and 224: LaC OBJ LINE SOURCE E890 E99700 E89
- Page 225 and 226: LOC 08J LINE SOURCE 2255 ;-- INT 13
- Page 227 and 228: LOC OS! LINE SOURCE 2407 ;------ DI
- Page 229 and 230: lOC OBJ LINE SOURCE (Eol 7438 fE03
- Page 231 and 232: LOC OBJ LINE SOURCE Ef'tD £67200 2
- Page 233 and 234: LOC OBJ LINE SOURCE 2870 I ~- -----
- Page 235 and 236: LOC (lBJ LINE SOURCE 3007 j --- INT
- Page 237 and 238: laC OBJ LINE SOURCE 3157 (AH}=6 SCR
- Page 239 and 240: lOC OBJ LINE SOURt.:E FOA43828ZDOAI
- Page 241 and 242: lOC OBJ LINE SOURCE FtC7 3458 VIDEO
- Page 243 and 244: LOC OBJ LINE SOURCE F260 750E f2:62
- Page 245: LOC OBJ LINE SOURCE F32B 06 3760 PU
- Page 249 and 250: laC OBJ LINE SOURCE 1'460 80HfE F46
- Page 251 and 252: LOC OBJ LINE SOURCE F4FF BSFB 4213
- Page 253 and 254: LOC OBJ LINE SOURCE 4359 j------ IM
- Page 255 and 256: LOC OBJ LINE SOURCE F689 57 4511 PU
- Page 257 and 258: lOC OBJ LINE SOLIRCE 4662 THE 0 COL
- Page 259 and 260: LOC OBJ LINE SOURCE F7Cl 8AC4 F7e]
- Page 261 and 262: LaC OBJ LINE SOURCE F840 4967 EQUIP
- Page 263 and 264: LOC OBJ LINE SOURCE F8DA E304 5116
- Page 265 and 266: LOC OBJ LINE SOURCE F97E EBF9 5268
- Page 267 and 268: LOC OBJ LINE SOURCE H20 C3 5415 RET
- Page 269 and 270: LOC OBJ LINE SOURCE fC46 0030300000
- Page 271 and 272: LOC OBJ LINE SOURCE FEBS 833E6E0018
- Page 273 and 274: lOC OBJ LINE SOURCE 5866 ;.*.-•
- Page 275 and 276: A-82 NOTES
- Page 277 and 278: 8088 REGISTER MODEL AX: AH Al ACCUM
- Page 279 and 280: MEMORY SEGMENTATION MODEL LOGICAL
- Page 281 and 282: XCHG =Exchange RegisterImemory with
- Page 283 and 284: SBB = Subtract with borrow Reg./mem
- Page 285 and 286: AND = And Reg./memory and register
- Page 287 and 288: Indirect within segment 11111111 mo
- Page 289 and 290: 8088 CONDITIONAL TRANSFER OPERATION
- Page 291 and 292: BOBBINSTRUCTION SET MATRIX LO HI 0
- Page 293 and 294: INSTRUCTION SET INDEX Mnemonic Pag
- Page 295 and 296: VALUE AS CHARACTERS AS TEXT ATTRIBU
lOC 08J LINE SOURCE<br />
F376 fBED 3834 JMP N14<br />
3835 SCROL~OO!J:N ENDP<br />
3836 ; ----------------------- ------------------<br />
3837 ; READ_At_CURRENT<br />
3838 THIS ROUTINE READS THE ATTRIBUTE AND CHARACTER AT THE CURRENT<br />
3839 CURSOR POSITION AHO RETURNS THEM TO THE CALLER<br />
3a40<br />
; INPUT<br />
3841 (AH) :: CURRENT CRT t10DE<br />
3842 (8H) :: DISPLAY PAGE ( ALPHA HODES ONLY 1<br />
3843 (as) = DATA SEGMENT<br />
3844 (ES) = REGEN SEGMENT<br />
3845 ;OUTPUT<br />
3846 (ALI = CHAR READ<br />
3347 (AH) :: ATTRIBUTE READ<br />
3848 ; -------------------- - - -------------------<br />
3849 ASSUME CS:CQDE.DS:DATA.ES:DATA<br />
F37D 3850 READ_AC_CURRENT PROt NEAR<br />
F37C 80FC04 3851 eMP AH,4 ; IS THIS GRAPHICS<br />
n80 7Z0B 3852 JC PI<br />
f382 80FC07 3853 CMP AH.7 ; IS THIS ew CARD<br />
F38S 7403 3854 JE PI<br />
Fl87 E9A902 3855 JMP GRAPHICS_READ<br />
FlSA 3856 PI: ; READ_AC_CONTINUE<br />
F3eA E81,o..OO 3857 CALL FINO_POSITION<br />
F38D 8BF3 3858 MOV SI,ex j ESTABLISH ADDRESSING IN 51<br />
3659<br />
3S60<br />
3861<br />
j------ WAIT FOR HORIZONTAL RETRACE<br />
F3SF 8BI66300 3862 MOV DX.AOOR_6845 ; GET BASE ADDRESS<br />
F393 83C206 3863 ADD OX.6 i POINT AT STATUS PORT<br />
F396 06 3864 PUSH ES<br />
F397 IF 386$ POP OS ; GET SEGMENT FOR QUICK ACcESS<br />
F398 3866 P2 : ; W.IT FOR RETR.CE LOW<br />
F398 EC 3867 IN AL,OX ; GET STATUS<br />
F399 ,0..801 3868 TEST AL,1 ; IS HaRZ RETRACE LOW<br />
f39B 75FB 3869 JNZ P2 ; WAIT UNTIL IT IS<br />
F39D FA 3870 CLI j NO MORE INTERRUPTS<br />
r'\<br />
F39E 3871 P3: ; WAIT FOR RETRACE HIGH<br />
F39E EC 3872 IN AL.OX ; GET STATUS<br />
f39F ,0..801 3873 TEST AL.! ; IS IT HIGH<br />
FlAl 74F8 3874 JZ P3 ; WAIT UNTIL IT IS<br />
FlA.3 AD 3875 lOOSW ; GET THE CHAR/ATTR<br />
F3A4 E9Z0Ff 3876 JMP VIDEO_RETURN<br />
3877 RE.O_AC_CURREHT ENDP<br />
3878<br />
FlA7 3879<br />
nA7 8ACF 3880 MQV CL,BH ; DISPLAY PAGE TO CX<br />
F3A9 3ZED 3881 XOR CH.CH<br />
FlAB 86Fl 3882 NOV 5I.CX ; MOVE TO SI fOR INDEX<br />
F3AO DIE6 3883 SAL 51.1 ; • 2: FOR WORD OFFSET<br />
F3AF 88845000 3884 I10V AX,[SI+ OFFSET CURSOR]OSNJ ; GET ROW/COLUMN OF THAT PAGE<br />
F3B3 330B 3885 XOR ex.ex SET START ADDRESS TO ZERO<br />
F3BS n06 3686 JCXZ P5<br />
nB7 3887 P4:<br />
F367 031£4COO 3888 ADD BX.CRT_LEN LENGTH Of BUFfeR<br />
FlBB EZFA 3889 lOOP P4<br />
FlBD 3890 ps: ; NO_PAGE<br />
F3BD E8CBFE 3891 CALL POSITlON ; DETERMINE LOCATION IN REGEN<br />
nco 0308 3892 AOO BX.AX ; ADD TO START OF REGEN<br />
F3C2 C3 3893 RET<br />
3694 FINO_POSITION Et.'OP<br />
3895 ; ----- ~----------- -----------------------<br />
3896 ;WRITE_AC_CURRENT<br />
3897 THIS ROUTINE WRITES THE ATTRIBUTE AND CHARACTER AT<br />
3696 THE CURRENT CURSOR POSITION<br />
38'99 ; INPUT<br />
3'900 ! AH) = CURRENT CRT MODE<br />
3901 (BH) = DISPLAY PAGE<br />
3902 (CXl = COUNT OF cHARACTERS TO WRITE<br />
3903 (AU = CHAR' TO WRITE<br />
3904 tBLl = ATTRIBUTE Of CHAR TO WRITE<br />
3905 CDS) .. DATA SEGMENT<br />
3906 (ES) = REGEN SEGMENT<br />
3907 ;OUTPUT<br />
3908 NONE<br />
3909 ; --------- ------------- ---------------------<br />
A-53