|
|
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: 14338 (0x3802)
Notes: pts_type(SC)
Names: »INTVMD.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/INTVMD.SC«
IDENT INTVMD REL 8.2 78-09-15 870105040820 * *************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * INTVMD = INTERRUPT VECTORS AND SYSTEM START * * * * * * *************************************************** * * * THIS MODULE CONTAINS HARDWARE INTERRUPT VECTORS, * COMMUNICATION VECTOR TABLE,STACK AREA * AND MONITOR INITIALIZATION. * * EJECT ENTRY CVTMSZ MEMORY SIZE ENTRY CVTSTB STACK BASE ENTRY CVTSBA ADDRESS TO START OF BUFFER POOL ENTRY CVTEBA ADDRESS TO END OF BUFFER POOL ENTRY CVTINP INTERPRETER ADDRESS TABLE ENTRY CVTDK START UP DISC ENTRY CVTAPA APPLICATION ADDRESS ENTRY CVTAPS APPLICATION START ADDRESS ENTRY CVTCLK REAL TIME CLOCK ENTRY LOOP IDLE LOOP ENTRY INIM40 MONCON ENTRY ENTRY CVTLSB SEGMENT LOAD BLOCK TABLE ADDRESS ENTRY FREPAR FREE PARTITION POINTER ENTRY PARLEN PARTITION LENGTH ENTRY NUMPAR NUMBER OF PARTITIONS EXTRN IHPFAR POWER FAIL / AUTO RESTART EXTRN IHLKM LKM INTERRUPT EXTRN IHRTC REAL TIME CLOCK EXTRN IHTW TYPEWRITER EXTRN IHTC CASSETTE TAPE EXTRN IHSOP SYSTEM OPERATORS PANEL ** ** ** ** ** ** EXTRN CHRT1 REMOTE CHANNEL UNIT NO. 1 EXTRN CHRT2 REMOTE CHANNEL UNIT NO. 2 EXTRN CHRT3 EXTRN CHRT4 EXTRN IHCC1 CASSETTE CHANGER NO. 1 EXTRN IHCC2 2 EXTRN IHCC3 3 EXTRN CHLT1 LOCAL CHANNEL UNIT NO. 1 EXTRN CHLT2 LOCAL CHANNEL UNIT NO. 2 EXTRN CHLT3 EXTRN CHLT4 LOCAL CHANNEL UNIT NO. 4 EXTRN IHFD FLOPPY DISCEN EXTRN IHLP LINE PRINTER EXTRN IHCR CARD-READER EXTRN IHDU1 DISC UNIT NO. 1 EXTRN IHDU2 DISC UNIT NO. 2 EXTRN IHMT MAG. TAPE EXTRN ILLINT ILLEGAL INTERRUPT EXTRN HALT HALT ROUTINE EXTRN TCTAB EXTRN TTB:ID TASK IDENTIFICATION EXTRN TTB:ST TASK STATUS AND LEVEL EXTRN PRUN TTAB FOR RUNNING PROGRAM EXTRN INIMON MONITOR INITIALIZATION ROUTINE EXTRN BUG BUGGER EXTRN PFINIT INIT AFTER MASTER CLEAR EXTRN IHINPT TRAP HANDLER * FD EQU /09 FD DEVICE ADDRESS CHCR EQU /0E CHCR DEVICE ADDRESS SOP EQU /2E SOP DEVICE ADDRESS X:A EQU /0 SEGLEN EQU X:A SEGMENT LENGTH IN BYTES X:B EQU 0 NUMPAR EQU X:B NUMBER OF PARTITIONS * BY SETTING X:A NOT EQUAL TO ZERO, UNLOAD IS NOT * PERFORMED ON CASSETTE AFTER THE APPLICATION LOADING * X:C EQU 0 UNLOAD EQU X:C DOPDSK EQU 0 REL0 EQU * EJECT * * INTERRUPT VECTORS * DATA IHPFAR 0 DATA IHLKM 1 DATA IHRTC 2 DATA ILLINT 3 DATA ILLINT 4 DATA ILLINT 5 DATA ILLINT 6 DATA IHTW 7 DATA IHTC 8 DATA IHSOP 9 DATA ILLINT 10 DATA ILLINT 11 DATA ILLINT 12 DATA ILLINT 13 DATA CHLT1 14 DATA IHFD 15 DATA CHRT1 16 DATA CHRT2 17 DATA CHRT3 18 DATA CHRT4 19 DATA IHCC1 20 DATA IHCC2 21 DATA ILLINT 22 DATA IHCC3 23 DATA CHLT1 24 DATA CHLT2 25 DATA CHLT3 26 DATA CHLT4 27 DATA ILLINT 28 DATA ILLINT 29 DATA IHFD 30 DATA ILLINT 31 DATA ILLINT 32 DATA ILLINT 33 DATA IHLP 34 DATA IHCR 35 DATA ILLINT 36 DATA ILLINT 37 DATA ILLINT 38 DATA ILLINT 39 DATA IHDU1 40 DATA IHDU2 41 DATA ILLINT 42 DATA ILLINT 43 DATA IHMT 44 DATA ILLINT 45 DATA ILLINT 46 DATA ILLINT 47 DATA ILLINT 48 DATA ILLINT 49 DATA ILLINT 50 DATA ILLINT 51 DATA ILLINT 52 DATA ILLINT 53 DATA ILLINT 54 DATA ILLINT 55 DATA ILLINT 56 DATA ILLINT 57 DATA ILLINT 58 DATA ILLINT 59 DATA ILLINT 60 DATA ILLINT 61 DATA ILLINT 62 DATA IHINPT TRAP ROUTINE HLT EJECT * * SYSTEM HALTS * HLT HLT * * COMMUNICATION VECTOR TABLE * CVTMSZ DATA 0 MEMORY SIZE CVTSTB DATA STB STACK BASE CVTSBA DATA 0 START OF BUFFER AREA CVTEBA DATA 0 END OF BUFFER AREA CVTINP DATA 0 INTERPPRETER TABLE ADDRESS RF INIT RF BUGG CVTAPA DATA 0 APPLICATION ADDRESS CVTAPS DATA 0 APPLICATON START ADDRESS CVTCLK DATA 0 REAL TIME CLOCK CVTLSB DATA 0 ADDRESS TO LOAD SEGMENT BLOCK TABLE CVTDK DATA 0 START UP DISC FREPAR DATA 0 FREE PARTITION POINTER PARLEN DATA 0 LENGTH OF PARTITIONS IN BYTES CVTAPN DATA 0 APPLICATION NUMBER (START SWITCH) CVTSUB DATA 0 ADDRESS TO IPL READ SECTOR SUBROUTINE EJECT * * INIMON AND BUGGER ENTRIES * INIT LDKL A1,INIMON INITIALIZE AND START APPL RF BRANCH BUGG LDKL A13,/90 START BUGGER LDKL A14,-8 AD A14,CVTAPA LDKL A1,BUG BRANCH ABR(NZ) A1 HLT TRAP LDK A1,/D HALT PARAMETER CF A15,HALT EJECT * * SAVE MEMORY SIZE, END OF BUFFER POOL * AND LOAD STACK BASE * * ON ENTRY: * A1 = APPLICATION DISC ADDRESS * A2 = START UP DISC, F0=FIX, F1=CARTRIDGE * A9 = ADDRESS TO DPL (A9+2 = ADDRESS TO APPLICATION NO.) * A10= RELOCATION BASE * A11= BUFFER ADDRESS+2 * A12= MONITOR START ADDRESS * A13= APPLICATION ADDRESS * A14= MEMORY SIZE * A15= ADDRESS TO READ SECTOR SUBROUTINE * INIM EQU * ST A2,CVTDK ST A14,CVTMSZ MEMORY SIZE SUKL A14,2 ST A14,CVTEBA END OF BUFFER POOL IFT DOPDSK=1 LDR A13,A9 LDR A9,A12 ORKL A12,/FFE ST A12,CVTEBA ADKL A12,2 ST A12,CVTMSZ LDR A12,A9 XIF LDR A14,P LOAD STACK BASE LDKL A2,/400 INDICATE LOAD ON SOP OTR A2,0,SOP LD A2,2,A9 APPLICATION NO. ST A2,CVTAPN SAVE IN CVT ST A15,CVTSUB SAVE ADDRESS TO READ SECTOR SUBR. * * READ LSBT * LDR A6,A1 IFT DOPDSK=1 SUK A6,1 ST A3,CVTAPN RF INIM20 XIF CFR A14,A15 READ LSBT LDR* A2,A11 GET LENGTH CWK A2,12 ONE SEGMENT ? RF(E) INIM20 ST A13,CVTLSB STORE ADDRESS TO LSBT ADK A2,2 INIM08 EQU * LDR A3,A11 BUFFER ADDRESS LDR A5,A13 ADKL A5,408 INIM10 LDR* A4,A3 GET TABLE WORD STR A4,A13 STORE TABLE WORD ADKL A13,2 UPDATE MEMORY ADDRESS ADK A3,2 INCREMENT FETCH ADDRESS SUK A2,2 READY ? RF(E) INIM20 CWR A5,A13 RB(NE) INIM10 ADK A6,1 CFR A14,A15 RB INIM08 EJECT * * SAVE APPLICATION ADDRESS AND RELOCATION BASE * INIM20 ST A13,CVTAPA APPLICATION ADDRESS ADR A10,A13 APPLICATION RELOCATION BASE EJECT * * READ AND RELOCATION ROUTINE * * ON ENTRY: * A10 = RELOCATION BASE * A11 = INPUT BUFFER ADDRESS * A13 = OUTPUT ADDRESS * * REGISTER USAGE: * A2 = RELOCATION BITS CHECK REG * A3 = ADDRESS OF RELOCATION TABLE * A4 = RELOCATION BIT COUNTER * A5 = CODE WORD ADDRESS * A7 = CODE WORD COUNTER * A8 = CODE WORD * * READ SECTORS OF LOAD MODULE AND RELOCATE ADK A6,1 UPDATE SECTOR NUMBER CFR A14,A15 READ FIRST SECTOR LDR* A2,A11 START ADDRESS ADR A2,A10 ADD RELOCATION BASE ST A2,CVTAPS SAVE START ADDRESS LD A1,4,A11 LENGTH IN BYTES ADR A1,A10 ADD RELOCATION BASE ADK A1,2 LDKL A7,368 BYTES IN FIRST SECTOR LDR A3,A11 ADK A3,8 BUFFER START LDKL A4,-4 RF RELOCS RELOC LDK A4,0 LDKL A7,376 NUMBER OF BYTES IN NORMAL SECTOR LDR A3,A11 RELOCS LDR A5,A3 BUFFER ADDRESS POINTER ADR A3,A7 ADDRESS TO RELOCATION WORDS MOV EQU * LDR* A2,A3 RELOCATION BITS SRC A2,1 LDR A4,A4 FIRST SECTOR ? RF(E) RELOCF NO SLC A2,4 RELOCF ADK A3,2 POINTER TO NEXT RELOCATION WORD ADK A4,16 NUMBER OF BITS MOVE EQU * LDR* A8,A5 GET CODE WORD FROM BUFFER SLC A2,1 CHECK RELOCATION BIT RF(NN) MOVABS NO RELOCATION ADR A8,A10 ADD RELOCATION BASE MOVABS STR A8,A13 STORE CODE WORD ADK A5,2 UPDATE BUFFER POINTER ADKL A13,2 UPDATE MEMORY POINTER CWR A13,A1 APPL. LOADED ? RF(E) REDEND CWR A13,A9 LAST POSITION ADMITTED ? RF(NE) MONFOR NO LDKL A1,/100 FELUTG OTR A1,0,SOP HLT MONFOR SUK A7,2 LAST ? RF(Z) MOVEND YES SUK A4,1 NEXT RELOCATION WORD ? RB(P) MOVE RB MOV YES MOVEND ADK A6,1 UPDATE SECTOR POINTER CFR A14,A15 READ NEXT SECTOR RB RELOC EJECT * * SAVE START OF BUFFER POOL AND INDICATE LOADING ENDED * REDEND EQU * ST A13,CVTSBA LDKL A4,NUMPAR OVERLAY SYSTEM ? RF(E) INIM35 NO ADKL A13,10 DUMMY NEEDED AT SEGMENT LOAD ST A13,CVTSBA START OF BUFFER POOL * * CALCULATE NECESSARY PARTITION LENGTH * LDKL A1,SEGLEN GET MINIMUM LENGTH IN BYTES SUR A2,A2 SUKL A1,368 BYTES IN 1:ST SECTOR RF(NP) PAREND ADKL A2,368 PARADD SUKL A1,376 BYTES IN 2:ND-N:TH SECTOR RF(NP) PAREND ADKL A2,376 RB PARADD PAREND ADKL A2,408 RESERVED SPACE FOR LAST SECTOR ST A2,PARLEN EJECT * * TEST IF MEMORY SPACE AVAILABLE FOR PARTITIONS * LDR A3,A4 LDR A1,A13 SRL A1,1 START ADDRESS REFERENCE LD A2,PARLEN SRL A2,1 PARTITION LENGTH REFERENCE INIM28 ADR A1,A2 OVERFLOW? RF(O) OVERFL ERROR SUK A3,1 RB(NZ) INIM28 LD A2,CVTEBA GET MEMORY SIZE SRL A2,1 CWR A1,A2 RF(NG) INILNK OVERFL EQU * MEMORY OVERFLOW ERROR LDKL A1,/100 RB FELUTG EJECT * * LINK FREE PARTITION QUEUE * INILNK EQU * ST A13,FREPAR SET FREE PARTITION POINTER INIM29 SUK A4,1 LAST PARTITION ? RF(E) INIM32 LDR A5,A13 AD A13,PARLEN ADD PARTITION LENGTH STR A13,A5 STORE LINK RB INIM29 INIM32 CMR A13 EJECT INIM35 EQU * LDK A7,0 OTR A7,0,SOP INDICATE LOADING ENDED LD A7,CVTDK START UP DISC ANK A7,/F SLL A7,4 ORS A7,INIM37 ANK A7,/80 RF(Z) INIM38 NOT FLEX DISC LDK A7,/C UNLOCK INIM37 CIO A7,1,FD RB(NA) *-2 SST A7,FD RB(NA) *-2 INIM38 EQU * * * CHECK IF BUGGER IN CORE * LDR A14,A10 LDKL A13,INIM40 RESTART ADDRESS LDKL A1,BUG ABR(NZ) A1 EJECT * * FIND FIRST USER TASK * INIM40 EQU * LD A1,TCTAB TCTAB ADDRESS LDR* A4,A1 TCTAB LENGTH INIM50 ADK A1,2 SUK A4,2 RF(NZ) INIM60 HLT NO USER TASK FOUND INIM60 LDR* A5,A1 TTAB ADDRESS LD A2,TTB:ID,A5 TASK IDENTIFICATION RB(N) INIM50 MONITOR TASK ST A5,PRUN SET TTAB FOR RUNNING PROGRAM CMR A5 LD A7,TTB:ST,A5 GET USER LEVEL SRC A7,6 EJECT * * INITIALIZE STACK * LDKL A15,STB-32 STACK BASE - IDLE LOOP LDK A1,0 STR A1,A15 TTAB-ADDRESS OF IDLE LOOP LDKL A13,NUMPAR OVERLAY SYSTEM? RF(Z) INIM70 STR A1,A15 SEGMENT POINTRER OF IDLE LOOP * * START SYSTEM * INIM70 EQU * LDKL A13,WAITIS STR A13,A15 STORE USER START ADDRESS STR A7,A15 AND LEVEL ON STACK ABL PFINIT INITIALIZE DEVICES DATA /FC00 PSW IDLE LOOP DATA LOOP STB EQU *-2 STACK BASE * * IDLE LOOP * LOOP RB * WAITIS EQU * LDKL A8,10 LKM DATA 6 LD A1,CVTDK START UP DISC SLL A1,8 INTO LEFT BYTE LC A1,CVTAPN+1 APPLICATION NO IN RIGTH BYTE LD A2,CVTSUB ADDRESS TO IPL READ SECTOR SUBROUTINE ABI CVTAPS END INIM