|
|
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: 13694 (0x357e)
Notes: pts_type(SC)
Names: »LRPINT.SC«
└─⟦245262b9f⟧ Bits:30009679 Philips computer tape "600220"
└─⟦this⟧ »M:92LP/LRPINT.SC«
└─⟦this⟧ »M:92NA/LRPINT.SC«
└─⟦38a30a456⟧ Bits:30009662 Philips computer tape "600104"
└─⟦this⟧ »M:92OD/LRPINT.SC«
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
└─⟦this⟧ »M:92LP/LRPINT.SC«
└─⟦6349b94c6⟧ Bits:30009684 Philips computer tape "600308"
└─⟦this⟧ »M:92D1/LRPINT.SC«
└─⟦726a6c4ca⟧ Bits:30009685 Philips computer tape "600309"
└─⟦this⟧ »M:92D2/LRPINT.SC«
└─⟦9ad21746d⟧ Bits:30009682 Philips computer tape "600304"
└─⟦this⟧ »M:92NA/LRPINT.SC«
└─⟦a25d6defe⟧ Bits:30009676 Philips computer tape "600210"
└─⟦this⟧ »M:92NA/LRPINT.SC«
IDENT LRPINT 9.2DK 1 79-11-16 870105040920 =DK1, HANGING REM. TERM. 80-03-11 * * ************************************************** * * 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 LRPINT * * *********** * ENTRIES * *********** * * ENTRY IHLKM LKM INTERRUPT HANDLER ENTRY LKM030 SPECIAL TLDSEG REQUEST ERROR ENTRY ENTRY LKMRQE LKM REQUEST ERROR ENTRY LKMERR HALT SYSTEM DUE TO FATAL LKM ERROR ENTRY LKMQDI QUEUE JOB 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 EJECT LRPINT * * ************* * EXTERNALS * ************* * * EXTRN TDISP DISPATCHER EXTRN DISQUE DISPATCHER QUEUE EXTRN PRUN TTAB OF RUNNING PROGRAM EXTRN MEXIT MONITOR TASK EXIT EXTRN MONMMU MONITOR (SYSTEM) MMU TABLE EXTRN QTJOB QUEUE TASK EXTRN QMJOB QUEUE MONITOR JOB EXTRN SWL48 SWITCH TO LEVEL 48 EXTRN SWLXY SWITCH TO LEVEL XY EXTRN FREBLK SET BLOCK FREE EXTRN SAVE8 SAVE 8 REGISTERS EXTRN PFINIT RESTART OF DEVICES EXTRN HALT HALT MODULE EXTRN INTSAV INTERRUPT SAVE MODULE EXTRN TTABLD LOAD TASK TTAB EXTRN PQEMTY PAGE QUEUE EMPTY FLAG EXTRN PAGQUE FREE PAGE QUEUE EXTRN SEG:PB PAGE BLOCK ADDRESS EXTRN PAG:QB QUEUE LINK BACKWARD EXTRN TTB:SB SEGMENT BLOCK POINTER EXTRN TTB:PW PROGRAM STATUS WORD EXTRN TTB:SA FIRST WORD OF SAVE AREA IN TTAB EXTRN LKMAL LKM REQUEST TABLE EJECT LRPINT * * ***************************************** * * CONDITIONAL ASSEMBLY * ***************************************** * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 1 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * * * A PROGRAM VERSION USING TOSS DISC PAGING * IS OBTAINED BY SETTING DSKPAG EQU 1. * DSKPAG EQU 0 * * * A PROGRAM VERSION USING NO MONITOR CLOCK FUNCTIONS * IS OBTAINED BY SETTING MCLOCK EQU 0. * X:A EQU 1 MONCLK EQU 1 * EJECT LRPINT * * * 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. * * - EXIT CONDITIONS ARE SET AND A BRANCH IS MADE TO * APPROPRIATE LKM PROCESSOR. * * EXIT CONDITIONS ARE: * * A4 = LABEL ADDRESS OF LKM REQUEST * (A4 = 0 INDICATES NO LABEL IN LKM REQUEST) * A5 = TTAB ADDRESS OF CALLING PROGRAM * A2, A3 AND A6 ARE LOST. * * ALL OTHER REGISTERS REMAIN UNCHANGED FROM CALLING * PROGRAM. * * * IHLKM EQU * ST P,INTSAV SAVE LAST INTERRUPT RIT /1D RESET INTERNAL INTERRUPT FLAG * EJECT LRPINT * * ST A15,LKM010 SAVE A15 LD A15,PRUN LOAD TTAB ADDRESS * IFT CPU852=1 ADKL A15,TTB:SA+28 SET A15 TO LAST IN SAVE AREA STR A14,A15 SAVE USER 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 XIF * IFT CPU852=0 MS 14,TTB:SA+2,A15 SAVE A1-A14 IN TTAB SAVE AREA XIF * LD A5,PRUN GET TTAB ADDRESS OF CALLING TASK LDKL A15,0 RESTORE A15 STACK POINTER LKM010 EQU *-2 * EJECT LRPINT * * GET LKM REQUEST PARAMETERS * LDR* A3,A15 LDR* A2,A15 LOAD P.C. AND ADJUST STACK POINTER ST A3,TTB:PW,A5 STORE PSW IN TTAB * IFT MMUPAG=0 LD A3,-2,A2 GET INSTRUCTION CODE LDR* A6,A2 GET DATA DIRECTIVE XIF * IFT MMUPAG=1 ANK A3,1 RF(NZ) LKM015 USER MODE? TL MONMMU NO, LOAD MONITOR MMU TABLE * LKM015 EQU * EL A3,-2,A2 GET INSTRUCTION CODE ELR A6,A2 GET DATA DIRECTIVE XIF * CWK A3,/2804 RF(E) LKM025 LKM? CWK A3,/6300 RF(E) LKM025 TRAP? * * STACK OVERFLOW: HALT SYSTEM * LDK A1,7 HALT PARAMETER RF LKM070 HALT SYSTEM DUE TO STACK OVERFLOW * EJECT LRPINT * * LKM025 EQU * IFT DSKPAG=1 LD A3,TTB:SB,A5 GET SEGMENT BLOCK ADDRESS RF(Z) LKM027 NO SEGMENT? LDR* A4,A3 GET SEGMENT STATUS ANKL A4,/1E00 CHECK IF CORE RESIDENT OR... RF(NZ) LKM027 ...USED BY AN INTERRUPTED TASK * * INSERT PAGE BLOCK IN PAGE QUEUE * LD A3,SEG:PB,A3 GET PAGE BLOCK ADDRESS LDKL A4,PAGQUE GET PAGQUE ADDRESS ST A4,PAG:QB,A3 LDR* A4,A4 GET ADDRESS OF FIRST BLOCK IN PAGQUE STR A4,A3 UPDATE QUEUE LINKS ST A3,PAGQUE ST A3,PAG:QB,A4 LD A3,PQEMTY CHECK IF LOAD TASK IN PAUSE STATE RF(Z) LKM027 PAGE QUEUE NOT EMPTY? * EJECT LRPINT * * RESTART LOAD TASK * CM PQEMTY INDICATE PAGE QUEUE NOT EMPTY LDR A4,A5 SAVE A5 LDKL A5,TTABLD GET LDTASK TTAB ADDRESS CF A15,QTJOB RESTART LOAD TASK LDR A5,A4 RESTORE A5 LD A4,TTB:PW,A5 GET PSW ST A4,-2,A15 RESTORE PSW ON STACK * LKM027 EQU * XIF * IFF MMUPAG+DSKPAG=0 CWK A6,9 CHECK DATA DIRECTIVE RF(E) LKM060 LOAD SEGMENT REQUEST? XIF * EJECT LRPINT * * LKM030 EQU * CM PRUN INDICATE IDLE LOOP RUNNING CF A15,SWL48 SWITCH TO LEVEL 48 LDK A4,0 LDR A3,A6 GET DATA DIRECTIVE RF(NN) LKM050 NO LABEL? * * LKM REQUEST WITH LABEL * ADK A2,2 NGR A3,A3 MAKE DATA DIRECTIVE POSITIVE * IFT MMUPAG=0 LDR* A4,A2 GET LABEL XIF * IFT MMUPAG=1 ELR A4,A2 GET LABEL XIF * EJECT LRPINT * * UPDATE TTB:SA AND GO TO LKM PROCESSOR * LKM050 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? INH LD A3,LKMAL,A3 * IFF MMUPAG+DSKPAG=0 RF LKM065 * LKM060 EQU * LOAD SEGMENT REQUEST (DATA 9) LD A3,LKMAL+18 GET TLDSEG ADDRESS XIF * LKM065 EQU * ABR(NZ) A3 BRANCH TO LKM PROCESSOR * EJECT LRPINT * * * L K M E R R * * LKMERR LDK A1,15 INDICATE REQUESTED LKM PROC. NOT PRESENT * LKM070 EQU * CF A15,HALT HALT SYSTEM * * * 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 * T:DISP EQU * COMMON EXIT TO DISPATCHER ABL TDISP GO TO DISPATCHER * EJECT LRPINT * * I H R T C * * THIS IS THE REAL TIME CLOCK INTERRUPT HANDLER. * THE TIMER QUEUE WILL BE PROCESSED EACH 100 MS. * IHRTC ST P,INTSAV SAVE LAST INTERRUPT RIT /1B RESET INTERRUPT FLAG IM COUNT RF(P) RTC010 CHECK TIMER QUEUE? RTN A15 * RTC010 EQU * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * LDKL A4,-4 SET 100 MS SWITCH ST A4,COUNT LDKL A2,CLOCK QUEUE CLOCK ROUTINE AS MJOB CF A15,QMJOB * IFT MONCLK=1 IM SECOND RF(P) RTC025 UPDATE MONITOR CLOCK? XIF * RTC020 EQU * CF A15,SWLXY SWITCH TO LEVEL XY RB T:DISP * EJECT LRPINT * * IFT MONCLK=1 * * MONITOR CLOCK UPDATING ROUTINE STARTED EACH SECOND. * MCLOCK EQU * RTC025 LDKL A4,-9 SET SECOND SWITCH ST A4,SECOND 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? RB(N) MCLO20 MIDNIGHT CARRY? RB(P) MCLO10 UPDATE MINUTES? LDK A3,24 UPDATE HOURS RB MCLO20 XIF * * * M O N C L O * * MONCLO EQU * IFT MONCLK=1 DATA 0 ACCUMULATED 24 HOUR CARRY DATA 0 HOUR DATA 0 MINUTE DATA 0 SECOND SECOND DATA 0 SECOND SWITCH XIF * EJECT LRPINT * * 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 ABL(Z) MEXIT END OF QUEUE IM 4,A4 INCREMENT TIMER RB(N) CLK10 NOT TIME OUT? RF(Z) CLK30 TIME OUT? LDR* A3,A4 RELEASE TIMER STR A3,A6 CF A15,FREBLK LDR A4,A2 CF A15,FREBLK RB CLK20 * EJECT LRPINT * * CLK30 CF A15,CLK40 CALL TIME OUT ROUTINE CF A15,SWL48 SWITCH TO LEVEL 48 DK1 INH RB CLK10 * CLK40 EQU * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * DK1 INH 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 LRPINT * * * I H P F A R * * THIS IS THE POWER FAIL/AUTO RESTART INTERRUPT HANDLER. * * DATA 0 TTABPF DATA 0 TTAB FOR POWER FAIL DATA '#P' DATA 0 A15SAV DATA 0 DATA /00C0 DATA POWOFF * * * WORK AREAS * * PFX DATA 1 POWER ON/OFF INDICATOR * * INIFLG DATA 1 INITIALIZATION FLAG * EJECT LRPINT * * * 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) POWON POWER ON? * * POWER OFF * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * LD A1,DISQUE QUEUE PFTASK FIRST FOR DISPATCHING LDKL A2,TTABPF STR A1,A2 ST A2,DISQUE RB T:DISP * POWOFF ST A15,A15SAV SAVE A15 FOR BETTER TIMES HLT * EJECT LRPINT * * POWER ON * POWON LD A15,A15SAV RELOAD A15 CM INIFLG RESET INIT FLAG CF A15,PFINIT CM PRUN RB T:DISP * * * END