|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 11118 (0x2b6e)
Notes: pts_type(SC)
Names: »LRPINT.SC«
└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
└─⟦this⟧ »M:KMDV/LRPINT.SC«
IDENT LRPINT REL 8.2 78-09-15 870105040820 * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * LRPINT = INTERRUPT HANDLERS FOR LKM, RTC * AND POWER FAILURE * * * * * ************************************************** * * * * THIS MODULE CONTAINS MANDATORY INTERRUPT HANDLERS * FOR TOSS. THESE ARE: * * -IHLKM: LKM-INTERRUPT * * -IHRTC: RTC-INTERRUPT * * -IHPFAR: POWER FAILURE INTERRUPT * * IN THIS MODULE ENTRIES FOR REQUEST ERRORS ALSO ARE * PROVIDED. THESE ARE: * * -LKMRQE: SET A7=-1 QUEUE JOB AND DISPATCH * * -LKMQDI: QUEUE JOB AND DISPATCH * EJECT *********** * ENTRIES * *********** * ENTRY IHLKM LKM INTERRUPT HANDLER ENTRY LKMRQE LKM REQUEST ERROR ENTRY LKMQDI QUEUE AND DISPATCH * ENTRY IHRTC RTC INTERRUPT HANDLER ENTRY TIMQUE POINTER TO FIRST BLOCK IN TIMER QUEUE ENTRY MONCLO MONITOR CLOCK ENTRY IHPFAR POWER FAILURE INTERRUPT HANDLER ENTRY INIFLG INITIALIZATION FLAG * ************* * EXTERNALS * ************* * EXTRN TDISP DISPATCHER EXTRN LKMDIS ENTRY TO BE DISPATCHED AFTR LKM-REQUEST EXTRN PRUN TTAB OF RUNING PROGRAM EXTRN QTJOB QUEUE TERMINAL JOB EXTRN SWL48 SWITCH TO LEVEL 48 EXTRN TTB:SA FIRST WORD OF SAVE AREA IN TTAB EXTRN TTB:TD START OF TERMINAL DEVICES EXTRN LKMAL LKM REQUEST TABLE EXTRN FREBLK SET BLOCK FREE EXTRN QMJOB QUEUE MONITOR JOB EXTRN RETU14 RESTORE A1-A14 FROM INTERRUPT STACK EXTRN CVTCLK REAL TIME CLOCK EXTRN PFINIT RESTART OF DEVICES EXTRN SAVE8 SAVE 8 REGISTERS EXTRN PFTAB POWER FAIL TABLE EXTRN HALT HALT-MODULE EXTRN SACT ACTIVE SEGMENT EXTRN LRUNEW INSERT SEGMENT IN LRUQUEUE EXTRN INTSAV INTERRUPT SAVE MODULE EJECT * * * BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE * TO EXCLUDE MONITOR CLOCK FUNCTIONS. * THIS IS DONE BY SETTING X:A = 0 * X:A EQU 1 KLOCKA EQU 0 EJECT * * * I H L K M * * * THIS IS THE LKM INTERRUPT HANDLER. THE FOLLOWING * STEPS ARE CARRIED OUT: * * - IF STACK OVERFLOW SYSTEM HALTS. * - ELSE REGISTERS A1-A14 ARE SAVED IN TTAB FOR RUNNING * PROGRAM. * - DISPATCH ADDRESS 'LKMDIS' AND 8 REGISTERS ARE SET ON STACK * - TTB:SA IS UPDATED IN TTAB * - EXIT CONDITIONS ARE SET AND A BRANCH IS MADE TO * APPROPIATE LKM-PROCESSOR. * * EXIT CONDITIONS ARE: * * A4 = LABLE ADDRESS OF LKM-REQUEST * (A4=0 INDICATES NO LABLE IN LKM-REQUEST) * A5 = TTAB-ADDRESS OF CALLING PROGRAM * A2 AND A3 ARE LOST. * ALL OTHER REGISTERS REMAIN UNCHANGED FROM CALLING * PROGRAM. * * * IHLKM EQU * ST P,INTSAV SAVE LAST INTERRUPT RIT /1D RESET INTERNAL INTERRUPT FLAG LKM010 INH ST A15,LKM020 SAVE A15 LD A15,PRUN LOAD TTAB-ADDRESS ADKL A15,TTB:SA+28 SET A15 TO LAST IN SAVE AREA STR A14,A15 SAVE USERS REGISTERS, -A14 STR A13,A15 -A13 STR A12,A15 -A12 STR A11,A15 -A11 STR A10,A15 -A10 STR A9,A15 -A9 STR A8,A15 -A8 STR A7,A15 -A7 STR A6,A15 -A6 STR A5,A15 -A5 STR A4,A15 -A4 STR A3,A15 -A3 STR A2,A15 -A2 STR A1,A15 -A1 LDKL A15,0 RESTORE A15 STACK POINTER LKM020 EQU *-2 * * * GET DISPATCH ADDRESS AND SWITCH LEVEL * LDR* A2,A15 LDR* A2,A15 LOAD P.C. AND ADJUST STACK POINTER LD A3,-2,A2 CWK A3,/2804 RF(E) LKM025 LKM CWK A3,/6300 RF(E) LKM025 TRAP LDK A1,7 HALT PARAMETER CF A15,HALT HALT IF STACK OVERFLOW LKM025 LDKL A3,LKMDIS STR A3,A15 SET DISPATCH ADDRESS ON STACK LDKL A3,/C000 STR A3,A15 SET LEVEL 48 SUKL A15,16 RESERVE SPACE FOR 8 REGISTERS LD A3,SACT ACTIVE SEGMENT RF(E) LKM027 CF A15,LRUNEW CM SACT LKM027 EQU * CF A15,SWL48 SWITCH TO LEVEL 48 LD A5,PRUN LOAD TTAB-ADDRESS OF CALLING PROGRAM LDK A4,0 RESET LABEL INDICATOR LDR* A3,A2 LOAD DATA DIRECTIVE RF(NN) LKM030 NO LABLE * * * LKM-REQUEST WITH LABLE * ADK A2,2 LDR* A4,A2 LOAD LABLE NGR A3,A3 NEGATE DATA * * * UPDATE TTB:SA AND GO TO LKM-PROCESSOR * LKM030 EQU * ADK A2,2 SAVE NEXT ADDRESS TO ST A2,TTB:SA,A5 EXECUTE IN TTAB ADR A3,A3 GET INDEX IN LKMAL RF(Z) LKMQDI PROGRAM SWITCH REQUEST CW A3,LKMAL RF(NL) LKMRQE INVALID DATA DIRECTIVE LD A3,LKMAL,A3 RF(Z) LKMRQE ERROR IF NOT PRESENT INH INHIBIT INTERRUPTS ABR A3 BRANCH TO LKM-PROCESSOR EJECT * * * L K M R Q E * * SET A7=-1,QUEUE TERMINAL JOB AND DISPATCH * * A5 = TTAB-ADDRESS * * LKMRQE EQU * LDKL A2,-1 ST A2,TTB:SA+14,A5 SET -1 IN SAVE AREA A7 * * * L K M Q D I * * QUEUE TERMINAL JOB AND DISPATCH * * A5 = TTAB-ADDRESS * * LKMQDI EQU * CF A15,QTJOB ABL TDISP GO TO DISPATCHER EJECT * * I H R T C * * THIS IS THE REAL TIME CLOCK INTERRUPT HANDLER * THE TIMER QUEUE WILL BE PROCESSED EACH 100 MS * IHRTC EQU * ST P,INTSAV SAVE LAST INTERRUPT RIT /1B RESET INTERRUPT FLAG IM COUNT RF(P) RTC010 RTN A15 RTC010 CF A15,SAVE8 IM CVTCLK INCREMENT CVT CLOCK LDKL A4,-4 SET 100 MS SWITCH ST A4,COUNT LDKL A2,CLOCK QUEUE CLOCK-ROUTINE AS MJOB CF A15,QMJOB * IFT KLOCKA=1 * IM DINKAN RF(P) RTC025 UPDATE MONITOR CLOCK EACH SECOND * XIF * RTC020 ABL TDISP * IFT KLOCKA=1 EJECT * * * MONITOR CLOCK UPDATING ROUTINE STARTED EACH SECOND * * MCLOCK EQU * RTC025 LDKL A4,-9 SET SECOND SWITCH ST A4,DINKAN LDK A4,4 MCLO10 LDK A3,60 NUMBER OF MINUTES AND SECONDS MCLO20 IM MONCLO+2,A4 INCREMENT TIME XR A3,MONCLO+2,A4 CHANGE MINUTES OR HOURS ? RB(NE) RTC020 GO TO DISPATCHER CM MONCLO+2,A4 RESTART TIME COUNTER SUK A4,2 END ? RF(N) MCLO30 MIDNIGTH CARRY RB(P) MCLO10 UPDATE MINUTES LDK A3,24 UPDATE HOURS RB MCLO20 MCLO30 IM MONCLO UPDATE 24 HOUR CARRY RB RTC020 GOTO DISPATCHER * * XIF * MONCLO EQU * IFT KLOCKA=1 DATA 0 ACCUMULATED 24 HOUR CARRY * DATA 0 HOUR DATA 0 MINUTE DATA 0 SECOND * DINKAN DATA 0 SECOND SWITCH * * XIF EJECT * * CLOCK ROUTINE STARTED EACH 100 MS. * CLOCK INH LDKL A4,TIMQUE LOAD FIRST TIMER ADDRESS CLK10 LDR A6,A4 CLK20 LDR* A4,A6 GET TIMER BLOCK RB(Z) RTC020 END OF QUEUE IM 4,A4 INCREMENT TIMER RB(N) CLK10 NOT TIME OUT, GET NEXT IN QUEUE RF(Z) CLK30 TIME OUT LDR* A3,A4 RELEASE TIMER STR A3,A6 CF A15,FREBLK LDR A4,A2 CF A15,FREBLK RB CLK20 CLK30 CF A15,CLK40 CALL TIME OUT ROUTINE INH RB CLK10 CLK40 CF A15,SAVE8 LD A2,2,A4 LOAD DISP BLOCK LD A1,4,A2 GET PARAMETER ABI 2,A2 GO TO TIME OUT ROUTINE * * * COUNT DATA 0 100 MS SWITCH * * * T I M Q U E * * POINTER TO FIRST BLOCK IN TIMER QUEUE * TIMQUE EQU * DATA 0 EJECT * * * I H P F A R * * THIS IS THE POWER FAIL/AUTO RESTART INTERRUPT HANDLER * * * 1. POWER OFF * * REGISTERS A1-A14 ARE SAVED ON INTERRUPT STACK AND * STACK POINTER IS SAVED IN CORE * THEN SYSTEM IS HALTED * * * 2. POWER ON * * STACK POINTER A15 IS RESTORED * COMMON DEVICES ARE RESTARTED BY MODULE PFINIT * REGISTERS A1 - A14 ARE RESTORED FROM INTERRUPT STACK * AND RETURN IS GIVEN TO INTERRUPTED PROGRAM * * * * WORK AREAS * * PFX DATA 1 POWER ON OFF INDICATOR * * INIFLG DATA 1 INITIALIZATION FLAG * EJECT * * * POWER FAIL/AUTO RESTART INTERRUPT * * IHPFAR EQU * ST P,INTSAV SAVE LAST INTERRUPT RIT /17 RESET INTERNAL INTERRUPT C1S PFX INDICATE POWER ON OR OFF RF(P) PFA200 POWER ON * * POWER OFF * CF A15,SAVE8 SAVE A1 - A8 ON STACK STR A9,A15 SAVE A9 - A14 ON STACK STR A10,A15 STR A11,A15 STR A12,A15 STR A13,A15 STR A14,A15 ST A15,PFA210 SAVE A15 STACK POINTER PFA100 HLT HALT SYSTEM * * POWER ON * PFA200 EQU * LDKL A15,0 RESTORE A15 STACK POINTER PFA210 EQU *-2 CM INIFLG RESET INITIALIZATION FLAG CF A15,PFINIT RESTART COMMON DEVICES ABL RETU14 RESTORE A1-A14 FROM INTERRUPT STACK END