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)

classiccomputers.info
from classiccomputers.info More from this publisher
25.03.2015 Views

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

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!