1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-13 15:27:28 +00:00
2017-01-22 21:47:26 +01:00

172 lines
7.2 KiB
Plaintext

ON A KA10
FORTY => 40
UUOH => XUUOH
000040 MUUO SAVE
000041 JSR UUOH
THIS IS WHAT A UUO DOES
WHEN RUNNING IN THE UUO HANDLER THE FL,,PC OF THE JOB THAT IS
DOING THE UUO IS LYING IN XUUOH
XUUOH: 0
UUOH0: SAVE AC'S INTO SHADOW
...
JRST URET
URET: RESTORE AC'S FROM SHADOW
JRST ULEAVE
ULEAVE: JRST 2,@UUOH
THIS IS WHAT THE CLOCK DOES
THE CLOCK IS THE THING THAT DOES ALL THE RESCHEDULING
WHEN A JOB IS RUNNING, THE ACS ARE IN THE ACS, AND
(1) THE MOVEM AT CLUSAV HAS AN ABSOLUTE ADDRESS THAT POINTS TO AC17S(U)
(2) THE JRST 2 AT UEXIT HAS AN ABSOLUTE ADDRESS THAT POINTS TO XUUOH ON THE KA (SO THE
UPDATE IS A WASTE) AND AT XUUOH(U) ON THE OTHERS (WHICH ISN'T)
WHEN A JOB ISN'T RUNNING, THE ACS ARE IN AC0S(U) THROUGH AC17S(U), FL,,PC IS IN UPC(U)
THE JOB MAY BE RUNNING IN A UUO, IN WHICH CASE
(1) THE OP/AC/EA FOR THE UUO IS IN ABSOLUTE LOCATION 000040
(2) THE FL,,PC FOR THE UUO IS IN XUUOH (WHERE JSR IN 41 POINTS, HENCE @41)
(3) THE USER'S UUO ACS ARE IN UUOACS(U) (LOC 0-17 OF XCTR, BECAUSE OF REMAP)
WHEN A JOB IS NOT RUNNING
(1) THE UUO WORD (FROM LOCATION 000040) IS IN SV40(U)
(2) XUUOH IS IN SUUOH(U)
(3) THE USER'S UUO ACS ARE IN UUOACS(U) (LOC 0-17 OF XCTR, BECAUSE OF REMAP)
ALL MUUOS (AND EXEC MODE LUUOS) ARE PROCESSED BY UUOH (THERE IS A JSR UUOH IN 000041)
ON NON-KA MACHINES THE SYSJOB ALLOWS MUUOS, BUT EVERYONE ELSE BUGCHECKS
TRAPS ARE PROCESSED AT CODE THAT BEGINS AT CLKB1, INVOKED BY THE APR
(CLK) PI HANDLER TRAPS CAN BE PROCESSED AT LOW PRIORITY BECAUSE THE CLK
PI HANDLER DOES THE CONTEXT SWITCHING, AND THE CHECK FOR TRAPS HAPPENS
BEFORE ANY CONTEXT SWITCHING, SO THE CLK PI HANDLER IS GUARANTEED TO
HAVE INTERRUPTED THE RIGHT JOB (ALTHOUGH BAD THINGS WOULD HAPPEN IF A
HIGHER-PRIORITY PI ROUTINE EVERY SET A TRAP FLAG, SINCE THE TRAP WOULD
HANG AROUND UNTIL THE HIGHER-PRIORITY HANDLER EXITED, AND THEN THE USER
JOB WOULD BE INTERRUPTED, BUT THE JOB ISN'T DOING ANYTHING RELATED TO
THE TRAP) THE CODE IN THE CLK PI HANDLER CALLS ROUTINES LIKE "AROV"
WHICH TURNS OFF BITS IN THE SAVED FLAGS IN CLKBRK, AND SETS SW PI BITS
IN A, WHICH EVENTUALLY GET TRANSFORMED INTO ITS-STYLE SOFTWARE
INTERRUPTS
THERE ARE USET VARIABLES WITH NAMES LIKE TR1INS AND SUCH ON THE KA,
THESE ARE SOMEWHAT DEGENERATE THE BIG TABLE AT USETL HAS THE TRAP
VARIABLES WITH MODE 2, 2, 0, 0 WHICH MEANS CALL ROUTINE ON READ, AND
ILLEGAL ON WRITE THE READ ROUTINES (URTRnI) SIMPLY READS THE "TRAP
INSTRUCTION" FOR THE KA WHICH IS ALWAYS A 0,,%PIXXX WORD, BECAUSE
POSTING AN INTERRUPT IS THE ONLY THING THAT IS POSSIBLE
KA10 PAGING ERROR CHECK IS AT CLKB1H
IF XCTRI DID NOT WHACK DATAI PAG, AND WE DID NOT NEED TO RUN THE ERROR
HANDLER AT HIGH PRIORITY SO THAT THE HIGH PRIORITY HANDLER COULD MOVE
THE RESULT OF THE DATAI PAG TO SOME PLACE IN THE USER VARIABLES, COULD
THE ERROR AND TRAP PI BE RUN AT PI 7 ?
THE KA IS A LITTLE BIT LIKE THIS
IT'S EQUIVALENT OF BY DATAI PAG IS SPM, WHICH STORES THE MAPS
CLKBRK DOES ONE OF THESE RIGHT AT THE START, INTO UPGML (NULL JOB) OR UPGML(U) (OTHERS)
UPJPC: 0 FAULT ADDRESS,,0
UPOPC: 0 OLDFL,,OLDPC USED TO TELL IF PC MOVES ?
UPMAR: 0 MAR ADDRESS AND CONDITION
UPQUAN: 0 EXPGNG+1,,0 PE, QUAN
UPDBR1: 0 USER MAP
UPDBR2: 0 USER MAP
UPDBR3: 0 EXEUMP (EXEC MODE UPPER MAP) LOADED WITH EXECMP, BUT IT'S UNDEFINED
UPACP: 0 B KEY, C KEY, AC POINTER LOCATION OF USER 00-17 ?
LATER ON (CLKB1H) CODE THAT DEALS WITH FAULTS LOOKS AT UPQUAN(U) TO
FIGURE OUT WHAT HAPPENED
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+---------------------------------------------------------------------+-+
| |A|
| |R|
| |E|
+---------------------------------------------------------------------+-+
ARE AC Remap Enable
0 AC Remap Disabled (Reset Value)
1 AC Remap Enabled
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+---------------------------+-----------------------------------+-------+
| | A | |
| | R | |
| | B | |
+---------------------------+-----------------------------------+-------+
ARB AC Remap Base
Address of 16-word block in physical memory
The AC remap function, if enabled, provides a special mapping
for virtual addresses 00-17 in both the exec and user virtual address spaces.
If AC remap is enabled (ARE=1), any virtual address in the range
00-17 is mapped into a physical address by combining the base address
in ARB with the low 4 bits of the virtual address. This check happens before
the check if paging is enabled; if ARE=1 and PE=0 then two chunks
of memory can be accessed; a 16-word chunk anywhere in the physical address
space, and locations 20-777777.
The remap function is done on all virtual addresses in the range
00-17 that make it to PAG. The only way for a program to generate these
addresses is to execute an instruction with a memory address in
this range under an XCTR relocation; if the address is used in an ordinary
way, or is used under an XCTR in a way that does not require
relocation, then the address will be an AC reference, and will not
be delivered to PAG. Addresses generated by ITS will, in
all likelyhood, be user mode addresses, generated by XCTR when the
previous mode flag is set to 1.
KA XCTR SKIPS ON VIOLATION, JUST LIKE XCTRI, AND THE UPOPC IS USED TO BACK
UP THE PC (DOESN'T DO THE RIGHT THING IF INTERRUPT IS INHIBITED)
PGLDU HAS A MODE WHICH SAYS WHICH CAN SWITCH BETWEEN AC0S AND UUOACS
IT LOOKS AT %UMSOA AND DECIDES IF RH OF UPACP SHOULD HOLD AC0S(X) OR UUOACS(X)
IF %UMSOA IS 0 WE GET UUOACS(X)
SO WHEN THE CONTEXT SWITCH WRITES SOMETHING INTO THE SHADOW, IT'S ACTUALLY CONTROLLED
BY THIS FIELD (IT'S NOT WRITING INTO LOCATIONS 00-17 OF USER MODE MEMORY)
UMAPS(X) IS NORMALLY 0, SO WHEN PGLDU IS CALLED, IT POINTS UPACP AT UUOACS(X)
IS UPACP A PHYSICAL ADDRESS OR AN EXEC MODE VIRTUAL ADDRESS ?
STACY REMEMBERS IT AS A PHYSICAL ADDRESS
CLKBRK: 0
XCT CLUSAV MOVEM U,AC17S(U), MADE ABSOLUTE
MOVE U,CLKBRK
MOVEM U,CLKBRS
SPM UPGML(U)
MOVEM T,AC16S(U)
BLT REST OF AC'S INTO AC0S-AC17S
MOVE U,USER
MOVE P,CPDLP
...
SCHED: MOVE T,CLKBRK CLKBRK HOLDS FL,,PC WHILE IN CLK PI
MOVEM T,UPC(U) SAVE IN USER BLOCK
COPY UEXIT- INTO UUO(U)..SUEXND-1(U) SAVE UEXIT AREA
; EFFECTIVELY, THIS COPY IS
MOVE T,XUUOH
MOVEM T,SUUOH(U)
; END EFFECTIVELY
IF SWITCH, SAVE OLD
MOVE T,40 SAVE THE UUO CODE
MOVEM T,SV40(U)
IF SWITCH, LOAD NEW
MOVE T,SV40(U)
MOVEM T,40 RESTORE THE UUO CODE
MOVE T,UPC(U) JOBS FL,,PC TO CLKBRK FOR RETURN
MOEM T,CLKBRK
MOVSI T,UUO(U) RESTORE UEXIT AREA
HRRI T,UEXIT
BLT T,UEXND-1
; EFFECTIVELY
; THE SWAP OF JRST 2,@XUUOH IS A WASTE ON KA (ON KL/KS IT NEED TO POINT INTO UPT)
MOVEI T,AC17S(U)
HRRM T,CLUSAV MAKE THE MOVEM U,AC17S(U) ABSOLUTE
MOVE T,SUUOH(U)
MOVEM T,XUUOH
; END EFFECTIVELY
RELOAD AC FROM AC0S(U)-AC17S(U)
JRST 12,@CLKBRK