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 OBJ LINE SOURCE<br />

5641 ;--- INT lA ------------------------------­<br />

5642 TIME_OF _DAY<br />

5643 THIS ROUTINE ALLOWS THE CLOCK TO BE SET/READ<br />

5644<br />

5645 INPUT<br />

5646 IAH) = 0 READ THE CURRENT CLOCK SETTING<br />

5647 RETURNS ex = HIGH PORTION Of COUNT<br />

5648 OX = lOW PORTIOt~ Of COUNT<br />

5649 AL = 0 IF TIHER HAS NOT PASSED 24 HOURS SINCE LAST READ<br />

5650 0 IF ON ANOTHER DAY<br />

5651 IAH) = 1 SET THE CURRENT ClOCK<br />

5652 CX = HIGH PORTION OF COUUT<br />

5653 OX = LOW PORTION OF COUNT<br />

5654 NOTE: COut-ITS OCCUR AT THE RATE OF 1193180/65536 COUIITS/SEC<br />

5655 lOR ABOUT 18.2 PER SECOND -­ SEE EQUATES BELOW)<br />

5656 ; -------­----------­-----------------­------­<br />

5657 ASSUME CS:CODE.DS:DATA<br />

FE6E 5658 TIME_OF_DAY PROC FAR<br />

FE6E Fe 5659 STI INTERRUPTS BACK ON<br />

FE6f IE 5660 PUSH DS SAVE SEGMENT<br />

FE70 50 5661 PUSH AX SAVE PARN<br />

FE7l 884000 5662 MOV AX.DATA<br />

FE74 8E08 5663 MOV DS.AX I ESTABLISH ADDRESSING TO VALUES<br />

FE76 56 5664 POP AX i GET BACK INPUT PARM<br />

FEn OAE4 5665 OR AH.AH ; AH=O<br />

FE79 7407 5666 JZ T2 ; READ_TIME<br />

FE7B FEee 5667 DEC AH I AH=1<br />

FE7D 7416 5668 JZ n ; SET_TINE<br />

FE7F 5669 Tl: ; TOO_RETURN<br />

FE7F FB 5670 STI ; INTERRUPTS BACK ON<br />

FEeD IF 5671 POP os ; RECOVER SEGMENT<br />

FEel CF 567Z IRET ; RETURN TO CAllER<br />

5673<br />

FEel 5674 12: I READ_TIME<br />

FEez FA 5675 CLI ; NO TIMER INTERRUPTS WHILE READING<br />

FEB3 A07000 5676 MOV AL.TINER_OFl<br />

~ FE86 C606700000 5677 MOV TIMER_OFL.O ; GET OVERFLOW. AND RESET THE FLAG<br />

FEes 860E6EOO 5678 MDV CX. TIMER_HIGH<br />

FE8F 88166COO 5679 MOV OX. TIMER_LOW<br />

FE93 EBEA 5680 JMP Tl<br />

5681<br />

FE 95 5682 T3: SET_TIME<br />

FE95 FA 5683 CLI NO INTERRUPTS WHILE WRITING<br />

FE96 69166COO 5684 MOV TINER_LOW. OX<br />

FE9A 890E6EOO 5685 MOV TIMER_HIGH .CX SET THE TIME<br />

FE9E C606700000 5686 MOV TIMER_OFl.O RESET OVERflOW<br />

FEU EBDA 5667 JMP Tl TOO_RETURN<br />

TIME_OF _DAY<br />

568~ ; -------­----------­-­----------------------­<br />

5690 ; THIS ROUTINE HANDLES THE TINER INTERRUPT fROM<br />

56~1 ; CHANNEL 0 OF THE 8253 TIMER. INPUT FREQUENCY IS 1.19318 HHZ<br />

5692 ; AHD THE DIVISOR IS 65536 , RESULTING IN APPROX. 18. Z INTERRUPTS<br />

5693 ; EVERY SECOND.<br />

5694<br />

5695 THE INTERRUPT HANDLER MAINTAINS A COUNT OF INTERRUPTS SINCE POWER<br />

5696 ON TIME. WHICH MAY BE USED TO ESTABLISH TINE OF DAY.<br />

5697 THE INTERRUPT HANDLER ALSO DECREMENTS THE MOTOR COtHROl COUNT<br />

5698 OF THE DISKETTE, AND WHEU IT EXPIRES, WILL TURN OFF THE DISKETTE<br />

5699 NOTOR. AND RESET THE MOTOR RU~INING FLAGS<br />

5700 THE INTERRUPT HAf'..'OLER WILL ALSO INVOKE A USER ROUTINE THROUGH INTERRUPT<br />

5701 lCH AT EVERY' TIME TICK. THE USER MUST CODE A ROUTINE AND PLACE THE<br />

5702 CORRECT ADDRESS IN THE VECTOR TABLE.<br />

5703<br />

HAS 5704 TIMER_INT PROC FAR<br />

FEAS Fe 5705 STI ; INTERRUPTS BACK ON<br />

~FEA61E 5706 PUSH DS<br />

FEA7 50 5707 PUSH AX<br />

FEAB 52 5708 PUSH DX ; SAVE MACHINE STATE<br />

FEA9 884000 5709 MDV AX.DATA<br />

FEAC BED8 5710 MOV DS,AX ESTABLISH ADDRESSABIlITY<br />

FEAE FF066COO 5711 INC TIMER_lOW INCREMENT TIt1E<br />

FEBZ 7504 5712 JIIZ T4 TEST_DAY<br />

FEB4 FF066EOD 5713 INC TIMER_HIGH UICREMENT HIGH WORD OF TIME<br />

FEBS 5714 T4: TE!"T_DAY<br />

A-77

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

Saved successfully!

Ooh no, something went wrong!