25.03.2015 Views

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)

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

LOC (lBJ LINE SOURCE<br />

3007 j --- INT 17 --------------------------------­<br />

3006 ; PRIfHER_IO<br />

3009 TliIS ROUTINE PROVIDES COMMUNICATION WITH THE PRINTER<br />

3010 (AH)=O F'RIHT THE CHARACTER IN (All<br />

3011 ON RETUIHI, AH=1 IF CHARACTER COULD NOT BE PRINTED (TIME OUT)<br />

3012 OTHER BITS SET AS ON NORMAL STATUS CALL<br />

3013 (AH)=1 INITIALIZE THE PRunER PORT<br />

3014 RETURNS WITH (AH) SET WITH PRINTER STATUS<br />

3015 (AH)=2 READ THE PRINTER STATUS INTO UH)<br />

3016<br />

3017 TIME OUT<br />

3018<br />

3019<br />

51 i<br />

t1. ,::1 ~~~~:D<br />

3020 _ 1 ::. SElECTED<br />

3021 1 '" OUT OF PAPER<br />

3022 1 = ACKNOWLEDGE<br />

'3023 1 = BUSY<br />

3024<br />

3025 (OX) = PRINTER TO BE USED (0.1.2) CORRESPONDING TO ACTUAL VALUES<br />

3026 I IN PRINTER_BASE AREA<br />

3027 ; DATA AREA PRINTER_BASE CONTAItIS THE BASE ADDRESS OF THE PRINTER CAROlS)<br />

3028 AVAILABLE (LOCATED AT BEGINNWG OF DATA SEGMENT, 408H ABSOLUTE, 3 WORDS)<br />

3029 ;REGISTER5 AH IS MODIfIED<br />

3030 • ALL OTHERS UNCHANGED<br />

3031 ; ---- ---------------------------------------­<br />

3032 ASSUME CS: CODE ,DS:DATA<br />

EF02 3033 PRINTER _10 PROC fAR<br />

EFOZ Fe 3034 STI INTERRUPTS BACK ON<br />

EF03 IE 3035 PUSH os j SAVE SEGMENT<br />

EFD4 52 3036 PUSH OX<br />

EFOS 56 3037 PUSH<br />

5'<br />

EF06 51 3038 PUSH CX<br />

HD7 53 3039 PUSH ex<br />

EFDB 8E4000 3040 NOV 51 ,DATA<br />

EFDB BEDE 3041 NOV DS,SI ; ESTABLISH PRINTER SEGMENT<br />

£FDD BaFl 3042- HOV SI,DX ; GET PRINTER PARM<br />

EFOF 01E6 3043 5HL 51,1 ; WORD OFFSET INTO TABLE<br />

EFEl 88940800 3044 HOV OX,PRINTER_BASE[SI) ; GET BASE ADDRESS FOR PRINTER CARD<br />

EFES 0802 3045 OR OX,OX j TEST OX FOR ZERO, INDICATING NO PRINTER<br />

EFE7 740C 3046 JZ Bl j RETURN<br />

EFE9 0.6.£4 3047 OR AH,AH TEST FOR {AH )=0<br />

EFEB 740£ 3048 JZ e. PRINT_AL<br />

£FED FEee 3049 DEC AH TEST FOR CAH)=1<br />

EFEF 7442 3050 JZ .B<br />

INIT_PRT<br />

EFFl FEee 3051 DEC AH TEST FOR (AH )::.2<br />

EFF3 742.6. 3052- JZ 6S PR INTER STATUS<br />

£FFS 3053 Bl : RETURN<br />

EFF5 58 3054 POP ex<br />

EFF6 S9 3055 POP ex<br />

EfF7 5£ 3056 POP<br />

5'<br />

j RECOVER REGISTERS<br />

EFFS 5A 3057 POP ox j RECOVER REGISTERS<br />

EFF9 IF 3058 POP Os<br />

EFFA CF 3059 IRET<br />

3060<br />

3061 j------ PRINT THE CHARACTER IN (ALI<br />

3062­<br />

EFF6 3063 82:<br />

EFFB 50 3064 PUSH AX SAVE VALUe TO PRINT<br />

EFfC 830A 3065 HOV st.IO TIME OUT VALUE<br />

EFFE 33C9 3066 XOR ex,Cx ESTABLISH SHIFT COUNT<br />

FOOD EE 3067 OUT DX,AL ; OUTPUT CHAR TO PORT<br />

FOOl 42 3068 we ox ; PorNT TO STATUS PORT<br />

FOOl 3069 83: ; WAIT_BUSY<br />

FOOZ EC 3070 AL,DX ; GET STATUS<br />

F003 8AEO 3071 r.OV<br />

'"<br />

AH,AL j STATUS TO AH ALSO<br />

Foes A880 3072 TEST At,SOH ; IS TtfE PRINTER CURRENTLY BUSY<br />

F007 750E 3073 Jt~Z 6. j OUT_STrlOBE<br />

F009 EZF] 3074 LOOP 63 ; DECREMENT COUNT ON TIME OUT<br />

FODe FEee 3075 DEC 6L<br />

FOOD 75F3 3076 JHZ 63 ; WAIT FOR NOT BUSY<br />

FOOF BOCCOI 3077 OR AH,l ; SET EPROR FLAG<br />

FOl2 80E4F9 3078 Arm AH,OF9H ; TURN OFF THE OTHER BITS<br />

Fots EBI4 3079 JHP 5HORT 87 ; RETUPtl WITli ERROR flAG SET<br />

FOl7 30BO 84: ; OUT_STReBE<br />

FOl7 BOOO 3081 HOV AL,OOH j SET THE STROBE HIGH<br />

F019 42 3082 we DX ; STROBE IS BIT 0 OF PORT C OF 8255<br />

A-42

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

Saved successfully!

Ooh no, something went wrong!