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 OBJ LINE SOURCE F2Al n08 F2A3 80FC07 f2Ab 7403 FlAB E9F301 flAB fZAB 53 f2AC saCl FUE E83900 F2Bl 7433 F2:83 03FO F2:85 8AE6 F287 2:AE3 F2.89 F289 E87500 FZBC 03F5 FZBE 03FO F2:CO FEee F2C2 7SFS F2:C4 F2C4 58 F2CS· B020 F2C7 F2C7 E87000 F2eA 03FO Flee FEC8 F2CE 75F7 F200 F200 884000 F2:03 8ED8 F205 803E490007 F2DA 7407 F2DC A06500 FlOf SADeD3 F2E2 EE FtE3 F2f3 E9EIFE F2E6 F2E6 SADE F2:E8 EeDA FlEA f2EA 803E490002 FtEF 7219 FtF 1 803E490003 F2Fb 7712 FHS 52 F2F9 SADAa] F2FC 50 F2FD F2FO EC FtFE A808 F30D 74F8 F302 B025 F304 BA0803 F307 EE noe 58 n09 5A nOA ES7EFF noD 03064EOO F311 88f8 FlU 8BFO Fl15 2801 F3l7 fEe6 F319 FEe2 F318 32EO F310 882E4AOO F321 03EO F3Z3 8AC3 F325 F6264AOO F3Z9 03eO 3684 JC HI ; HANDLE SEPARATELY 3685 CMP AH.7 ; TEST FOR BW CARD ~8. JE HI 3687 JMP 3688 Nl: ; UP_CotnIHUE 3689 PUSH ex j SAVE FILL ATTRIBUTE IN 8H 3690 NOV AX.CX I UPPER lEFT POSITION 3691 CAll SCROLL_POSITION i DO SETUP FOR SCROLL 3692 JZ N7 I BLANK_FIELD 3693 ADD SI,AX ; FROM ADDRESS 3694 NOV AH,DH ; • ROWS IN BLOCK 3695 SUB AH,Bl ; # ROWS TO BE MOVED 3696 3697 CAll HID ; MOVE ONE ROW 3698 ADD SI.B? 3699 ADD DI,B? ; POINT TO NEXT LINE IN BLOCK 3700 DEC All ; COUNT OF LINES TO HOVE 3701 JHZ H' 3702 H3: ; CLEAR_ENTRY 3703 pop AX J RECOVER ATTRIBUTE IN AH 3704 NOV AL, • I FILL WITH BLANKS 3705 J CLEAR_lOOP 3706 CALL Nil ; CLEAR THE ROW 3707 ADD DI,B? ; POINT TO NEXT LINE 3708 DEC BL ; COUNTER OF LINES TO SCROLL 3709 JNZ H4 ; CLEAR_lOOP 3710 NS: ; SCROLL_END 3711 MOV AX,OATA ; GET LOCATION 3712 MOV OS,AX 3713 CNP CRT_HODE,7 ; IS THIS THE BLACK AND WHITE CARD 3714 JE ~16 ; IF SO, SKIP THE MODE RESET 3715 NOV AL.CRT_tfODE_SET ~ GET THE VALUE OF THE MODE SET 3716 NOV DX,0308H ; ALWAYS SET COLOR CARD PORT 3717 OUT DX,AL 3718 3719 JMP 3720 N7: ; BLANK_FIELD 3721 NOV BL,OH GET ROW COUNT 3722 JMP H' ; GO CLEAR THAT AREA 3723 ENDP 3724 3725 ; ----- HANllE COMMON SCROLL SET UP HERE 3726 3127 SCROll_POSITION PROC NEAR 3128 CM? CRT_MOOE,2 I TEST FOR SPECIAL CASE HERE 3129 J8 N9 ; HAVE TO HANDLE 80X25 SEPARATELY 3730 CMP CRT_MODE, 3 3731 JA N9 3732 3733 j -----­ 80X2S COLOR CARD SCROll 3734 3735 PUSH OX 3736 MOV oX,30AH ; GUARANTEED TO BE COLOR CARD HERE 3737 PUSH AX 3738 i WAIT_DISP_ENABLE 3739 IN AL,oX ; GET PORT 3740 TEST AL.S ; WAIT FOR VERTICAL RETRACE 3741 JZ H8 ; WAIT_DISP_ENABLE 3742 NOV AL,25H 3743 MOV OX , 030SH 3744 OUT OX.Al ; TURN OFF VIDEO 3745 POP AX i DURING VERTICAL RETRACE 3746 POP OX 3747 N9: CALL POSITION ; CONVERT TO REGEN POINTER 3748 ADD AX.CRT_START ; OFFSET OF ACTIVE PAGE 3749 HOV OI,AX ; TO ADDRESS FOR SCROll 3750 HOV 5I,AX ; fROM ADDRESS fOR SCROLL 3751 SUB OX,CX ; OX = #ROWS, WCOLS IN BLOCK 3752 INC DH 3753 INC Dl J INCREMENT FOR 0 ORIGIN 3754 XOR CH,CH J SET HIGH BYTE OF COUNT TO ZERO 3755 MOV BP,CRT_COLS ; GET NUMBER OF COLUMNS IN DISPLAY 3756 AOO BP,BP ; TIMES 2 FOP ATTRIBUTE BYTE 3757 MOV AL,Bl ; GET LINE COUNT 3758 MUl BYTE PTR CRT_COLS ; DETERMINE OFFSET TO FROM ADDRESS 3759 ADD AX,AX ; *2 FOR ATTRIBUTE BYTE A-51

LOC OBJ LINE SOURCE F32B 06 3760 PUSH ES ESTABLISH ADDRESSING TO REGEN BUFFER F3ZC IF 3761 pop OS FOR BOTH POINTERS F32:0 SOFBOO 3762 CMP BL.O o SCROll MEANS BLANK FIELD F330 C3 3763 RET ; RETURN WITH FUGS SET 3764 SCROLL_POSITION ENOP 3765 3766 j------ MOVE_ROW F331 3767 HIO PROC NEAR f331 SACA 3768 MOV Cl,Dl • GET • OF eOLS TO MOVE F333 56 3769 PUSH 51 F334 57 3770 PUSH 01 I SAVE START ADDRESS F33S F3 3171 REP MOVSW ; MOVE THAT LlUE ON SCREEN F336 A5 F337 SF 3772 POP 01 F336 Sf 3773 POP 51 I RECOVER ADDRESSES F339 C3 3774 RET 3775 HID ENDP 3776 3777 j------ CLEAR_ROW F33A 3778 HII PROC NEAR F33A SACA 3779 MOV Cl.Dl I GET I CCUJMNS TO CLEAR F33C 57 3780 PUSH 01 F33D F3 3781 REP STQSW I STORE THE fILL CHARACTER F33E AS F33f SF 3782 pop 01 F340 C3 3783 RET 3784 Nil ENDP 3765 ;--------------------------­ ---­ ---­ 3766 ; SCROLL_DOWN 3787 THIS ROUTINE MOVES THE CHARACTERS WITHIN A DEFINED 3788 BLOCK DOWN ON THE SCREEN, FILLING THE TOP LINES 3789 WITH A DEFINED CHARACTER 3790 ; INPUT 3791 (AH I = CURRENT CRT MODE 3792 (All = NUMBER OF LINES TO SCROLL 3793 (CX I = UPPER LEFT CaRtIER OF REGION 3794 (OX) = LOWER RIGHT CORNER OF REGION 3795 (BHJ = FILL CHARACTER 3796 (OS I = DATA SEGMENT 3791 'ESJ = REGEN SEGMENT 3798 ;OUPUT 3799 NOHE -­ SCREEN IS SCROllED 3800 ; --­ ---­ ----­ ------------------------­ F341 3801 SCROLL_DO~N FROC NEAR f341 FD 1802 STD ; DIRECTION FOR SCROLL DOWN f342 8AD8 3803 NOV BL,AL ; LINE COUtIT TO BL F344 80FC04 3804 CMP AH,4 ; TEST FOR GRAPHICS F347 7208 3805 JC HI2 F349 80FC01 3806 CNP AH,7 i TEST FOR BW CARD F34C 7403 3S07 JE HI2 F34E E9A601 3808 JMP GRAPHICS_DOWN F351 1809 NI2.: ; CONTINUE_DOWN F351 53 3810 FUSH BX ; SAVE ATTRIBUTE IN 8H F352 8BCZ 3811 NOV AX,OX ; LOWER RIGHT CORNER F354 E893FF 3812. CALL SCROll.POSITION ; GET REGEN LOCATION F357 742.0 3811 JZ HI. F3S9 2BfD 3814 SUB SI,AX ; SI IS FROM ADDRESS f358 8AE6 3815 MOV AH,OH ; GET TOTAL II ROWS F35D un 3816 SUB AH,Bl ; COUNT TO MOVE IN SCROLL F35F 3817 N13: F3SF E8CFFF 3816 CALL NID ; MOVE ONE ROW F362 2.BF5 3819 SUB SI,ep F364 2BFD 3820 SUB DI,BP F366 fEce 3821 DEC AH F368 75F5 3622 J~lZ HI3 F36A 3823 N14: F36A 58 3824 POP AX t RECOVER ATTRIBUTE IN AH F368 B020 3825 MOV AL, • F36D 3826 N15: F36D ESCAFF 3827 CAlL HII ; CLEAR ONE ROW F370 2BFa 3828 SUB aI,BP ; GO TO NEXT ROW F372 FEee 3829 DEC 8L F374 75F7 3830 JNZ HIS F376 E957FF 3831 JMP HS ; SCROll.END F379 3832 N16: F379 8ADE 3833 HOY BL,DH A-52

LOC OBJ LINE SOURCE<br />

F2Al n08<br />

F2A3 80FC07<br />

f2Ab 7403<br />

FlAB E9F301<br />

flAB<br />

fZAB 53<br />

f2AC saCl<br />

FUE E83900<br />

F2Bl 7433<br />

F2:83 03FO<br />

F2:85 8AE6<br />

F287 2:AE3<br />

F2.89<br />

F289 E87500<br />

FZBC 03F5<br />

FZBE 03FO<br />

F2:CO FEee<br />

F2C2 7SFS<br />

F2:C4<br />

F2C4 58<br />

F2CS· B020<br />

F2C7<br />

F2C7 E87000<br />

F2eA 03FO<br />

Flee FEC8<br />

F2CE 75F7<br />

F200<br />

F200 884000<br />

F2:03 8ED8<br />

F205 803E490007<br />

F2DA 7407<br />

F2DC A06500<br />

FlOf SADeD3<br />

F2E2 EE<br />

FtE3<br />

F2f3 E9EIFE<br />

F2E6<br />

F2E6 SADE<br />

F2:E8 EeDA<br />

FlEA<br />

f2EA 803E490002<br />

FtEF 7219<br />

FtF 1 803E490003<br />

F2Fb 7712<br />

FHS 52<br />

F2F9 SADAa]<br />

F2FC 50<br />

F2FD<br />

F2FO EC<br />

FtFE A808<br />

F30D 74F8<br />

F302 B025<br />

F304 BA0803<br />

F307 EE<br />

noe 58<br />

n09 5A<br />

nOA ES7EFF<br />

noD 03064EOO<br />

F311 88f8<br />

FlU 8BFO<br />

Fl15 2801<br />

F3l7 fEe6<br />

F319 FEe2<br />

F318 32EO<br />

F310 882E4AOO<br />

F321 03EO<br />

F3Z3 8AC3<br />

F325 F6264AOO<br />

F3Z9 03eO<br />

3684 JC HI ; HANDLE SEPARATELY<br />

3685 CMP AH.7 ; TEST FOR BW CARD<br />

~8. JE HI<br />

3687 JMP<br />

3688 Nl: ; UP_CotnIHUE<br />

3689 PUSH ex j SAVE FILL ATTRIBUTE IN 8H<br />

3690 NOV AX.CX I UPPER lEFT POSITION<br />

3691 CAll SCROLL_POSITION i DO SETUP FOR SCROLL<br />

3692 JZ N7 I BLANK_FIELD<br />

3693 ADD SI,AX ; FROM ADDRESS<br />

3694 NOV AH,DH ; • ROWS IN BLOCK<br />

3695 SUB AH,Bl ; # ROWS TO BE MOVED<br />

3696<br />

3697 CAll HID ; MOVE ONE ROW<br />

3698 ADD SI.B?<br />

3699 ADD DI,B? ; POINT TO NEXT LINE IN BLOCK<br />

3700 DEC All ; COUNT OF LINES TO HOVE<br />

3701 JHZ<br />

H'<br />

3702 H3: ; CLEAR_ENTRY<br />

3703 pop AX J RECOVER ATTRIBUTE IN AH<br />

3704 NOV AL, • I FILL WITH BLANKS<br />

3705 J CLEAR_lOOP<br />

3706 CALL Nil ; CLEAR THE ROW<br />

3707 ADD DI,B? ; POINT TO NEXT LINE<br />

3708 DEC BL ; COUNTER OF LINES TO SCROLL<br />

3709 JNZ H4 ; CLEAR_lOOP<br />

3710 NS: ; SCROLL_END<br />

3711 MOV AX,OATA ; GET LOCATION<br />

3712 MOV OS,AX<br />

3713 CNP CRT_HODE,7 ; IS THIS THE BLACK AND WHITE CARD<br />

3714 JE ~16 ; IF SO, SKIP THE MODE RESET<br />

3715 NOV AL.CRT_tfODE_SET ~ GET THE VALUE OF THE MODE SET<br />

3716 NOV DX,0308H ; ALWAYS SET COLOR CARD PORT<br />

3717 OUT DX,AL<br />

3718<br />

3719 JMP<br />

3720 N7: ; BLANK_FIELD<br />

3721 NOV BL,OH GET ROW COUNT<br />

3722 JMP<br />

H'<br />

; GO CLEAR THAT AREA<br />

3723 ENDP<br />

3724<br />

3725 ; ----- HANllE COMMON SCROLL SET UP HERE<br />

3726<br />

3127 SCROll_POSITION PROC NEAR<br />

3128 CM? CRT_MOOE,2 I TEST FOR SPECIAL CASE HERE<br />

3129 J8 N9 ; HAVE TO HANDLE 80X25 SEPARATELY<br />

3730 CMP CRT_MODE, 3<br />

3731 JA N9<br />

3732<br />

3733 j -----­ 80X2S COLOR CARD SCROll<br />

3734<br />

3735 PUSH OX<br />

3736 MOV oX,30AH ; GUARANTEED TO BE COLOR CARD HERE<br />

3737 PUSH AX<br />

3738 i WAIT_DISP_ENABLE<br />

3739 IN AL,oX ; GET PORT<br />

3740 TEST AL.S ; WAIT FOR VERTICAL RETRACE<br />

3741 JZ H8 ; WAIT_DISP_ENABLE<br />

3742 NOV AL,25H<br />

3743 MOV OX , 030SH<br />

3744 OUT OX.Al ; TURN OFF VIDEO<br />

3745 POP AX i DURING VERTICAL RETRACE<br />

3746 POP OX<br />

3747 N9: CALL POSITION ; CONVERT TO REGEN POINTER<br />

3748 ADD AX.CRT_START ; OFFSET OF ACTIVE PAGE<br />

3749 HOV OI,AX ; TO ADDRESS FOR SCROll<br />

3750 HOV 5I,AX ; fROM ADDRESS fOR SCROLL<br />

3751 SUB OX,CX ; OX = #ROWS, WCOLS IN BLOCK<br />

3752 INC DH<br />

3753 INC Dl J INCREMENT FOR 0 ORIGIN<br />

3754 XOR CH,CH J SET HIGH BYTE OF COUNT TO ZERO<br />

3755 MOV BP,CRT_COLS ; GET NUMBER OF COLUMNS IN DISPLAY<br />

3756 AOO BP,BP ; TIMES 2 FOP ATTRIBUTE BYTE<br />

3757 MOV AL,Bl ; GET LINE COUNT<br />

3758 MUl BYTE PTR CRT_COLS ; DETERMINE OFFSET TO FROM ADDRESS<br />

3759 ADD AX,AX ; *2 FOR ATTRIBUTE BYTE<br />

A-51

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

Saved successfully!

Ooh no, something went wrong!