|
|
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: 13804 (0x35ec)
Notes: pts_type(SC)
Names: »LRPINT.SC«
└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
└─⟦this⟧ »M:TU10/LRPINT.SC«
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
└─⟦this⟧ »M:TU10/LRPINT.SC«
IDENT LRPINT REL 10.0 80-03-14 870105041000 * * ************************************************** * * 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 ENTRY PFPOST PWF POST PROCESSING 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 RELPAG RELEASE PAGE EXTRN TLDSEG LOAD SEGMENT LKM PROCESSOR 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 0 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 1 * * * 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 MONCLK 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 * A6 = LKM DATA DIRECTIVE * A2, 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 * 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 LCR A4,A3 GET SEGMENT STATUS ANK A4,/1E CHECK IF CORE RESIDENT OR... RF(NZ) LKM027 ...USED BY AN INTERRUPTED TASK * * INSERT PAGE BLOCK IN PAGE QUEUE * CF A15,RELPAG RELEASE PAGE LD A4,TTB:PW,A5 GET PSW ST A4,-2,A15 RESTORE PSW ON STACK XIF * LKM027 EQU * IFF MMUPAG+DSKPAG=0 CWK A6,9 CHECK DATA DIRECTIVE ABL(E) TLDSEG 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 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 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 PFTASK PFX DATA 1 POWER ON/OFF INDICATOR P=POWER IS ON, N=POWER IS OFF INIFLG DATA 1 INITIALIZATION FLAG NZ=INITIALIZATION PFPOST DATA 0 PWF POST PROCESSING FLAG NZ=PWF POST PROCESSING 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-A14 ON STACK STR A9,A15 STR A10,A15 STR A11,A15 STR A12,A15 STR A13,A15 STR A14,A15 XIF IFT CPU852=0 MSR 14,A15 SAVE A1-A14 ON STACK XIF ST A15,A15SAV SAVE A15 FOR BETTER TIMES HLT EJECT LRPINT * * POWER ON * POWON LD A15,A15SAV RELOAD A15 IFT CPU852=1 LDR* A14,A15 RESTORE A9-A14 LDR* A13,A15 LDR* A12,A15 LDR* A11,A15 LDR* A10,A15 LDR* A9,A15 XIF IFT CPU852=0 MLR 14,A15 RESTORE A9-A14 MSR 8,A15 XIF LD A1,DISQUE QUEUE PFTASK FIRST FOR DISPATCHING LDKL A2,TTABPF CWR A1,A2 RB(E) T:DISP ALREADY QUEUED, PWF DURING PFPOST STR A1,A2 ST A2,DISQUE IM PFPOST INDICATE PWF POST PROCESSING RB T:DISP EJECT LRPINT * * POWER FAIL TASK * STARTED AFTER ALL PWF POST PROCESSING * PFTASK CM PFPOST CLEAR PWF POST PROC FLAG CM INIFLG AND INIT FLAG CF A15,PFINIT RESTART I/O DEVICES CM PRUN EXIT PFTASK RB T:DISP 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. * RTC025 EQU * 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 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 * LDKL A1,/C4C0 LEVEL 49 AND ENABLE ST A1,18,A15 SET NEW PSW ON STACK 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 * END