|
|
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: 14262 (0x37b6)
Notes: pts_type(SC)
Names: »INTVMD.SC«
└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
└─⟦this⟧ »M:167D/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 IH1501
EXTRN IH1502
EXTRN IHTC CASSETTE TAPE
EXTRN IHSOP SYSTEM OPERATORS PANEL
**
**
**
**
**
EXTRN CHLT1 LOCAL CHANNEL UNIT NO. 1
EXTRN IHDU1 DISC UNIT NO. 1
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
*
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 0
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 ILLINT
DATA IHTC 8
DATA IHSOP 9
DATA ILLINT 10
DATA ILLINT 11
DATA IH1501 12
DATA IH1502 13
DATA CHLT1 14
DATA ILLINT
DATA ILLINT
DATA ILLINT
DATA ILLINT
DATA ILLINT
DATA ILLINT
DATA ILLINT
DATA ILLINT 22
DATA ILLINT
DATA CHLT1 24
DATA ILLINT
DATA ILLINT
DATA ILLINT
DATA ILLINT 28
DATA ILLINT 29
DATA ILLINT
DATA ILLINT 31
DATA ILLINT 32
DATA ILLINT 33
DATA ILLINT
DATA ILLINT
DATA ILLINT 36
DATA ILLINT 37
DATA ILLINT 38
DATA ILLINT 39
DATA IHDU1 40
DATA ILLINT
DATA ILLINT 42
DATA ILLINT 43
DATA ILLINT
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 TRAP 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