mirror of
https://github.com/PDP-10/its.git
synced 2026-04-11 07:17:22 +00:00
Build ITS monitor from source code.
This commit is contained in:
1111
src/system/bits.117
Executable file
1111
src/system/bits.117
Executable file
File diff suppressed because it is too large
Load Diff
26
src/system/ch10.defs1
Executable file
26
src/system/ch10.defs1
Executable file
@@ -0,0 +1,26 @@
|
||||
;Hardware definitions for CH10 PDP-10 CHAOSNET interface
|
||||
|
||||
CHX==470 ;I/O Device number
|
||||
|
||||
;CONI/CONO BITS
|
||||
;1.1-1.3 PIA
|
||||
CHXTEN==10 ;1.4 Transmit interrupt enable
|
||||
CHXREN==20 ;1.5 Receive interrupt enable
|
||||
CHXSPY==40 ;1.6 Match any destination (on receive)
|
||||
CHXLUP==100 ;1.7 Loop back
|
||||
CHXSWB==200 ;1.8 Swap bytes
|
||||
CHXHLF==400 ;1.9 Halfword DATAO
|
||||
CHXXMT==1000 ;2.1 Transmit done (CONI)
|
||||
; Transmit or retransmit packet (CONO)
|
||||
CHXRCV==2000 ;2.2 Receive done (CONI)
|
||||
; Enable to receive next packet (CONO)
|
||||
CHXABT==4000 ;2.3 Transmit aborted (CONI)
|
||||
; Reset transmitter (CONO)
|
||||
$CHXLC==140400 ;2.4-2.7 Lost count (CONI)
|
||||
CHXRST==10000 ;2.4 Reset (CONO)
|
||||
CHXCRC==200000 ;2.8 CRC error (CONI)
|
||||
CHXWLE==400000 ;2.9 Word length error (CONI)
|
||||
CHXPLE==1,, ;3.1 Packet length error (CONI)
|
||||
CHXOVR==2,, ;3.2 Overrun (CONI)
|
||||
$CHXAD==242000 ;3.3-4.9 Chaosnet address (CONI)
|
||||
|
||||
58
src/system/ch11.defs1
Executable file
58
src/system/ch11.defs1
Executable file
@@ -0,0 +1,58 @@
|
||||
;; CH11 Unibus Chaosnet Interface definitions
|
||||
|
||||
CAICSR=3,,764140 ;COMMAND STATUS REG
|
||||
CH%CSR==0
|
||||
%CABSY==1 ;0 XMT BUSY (RO)
|
||||
%CALUP==2 ;1 LOOP BACK (R/W)
|
||||
%CASPY==4 ;2 RECIEVE MSGS FOR ANY DESTINATION (R/W)
|
||||
%CARCL==10 ;3 CLEAR THE RECEIVER, IT CAN NOW GOBBLE ANOTHER MSG (WO)
|
||||
%CAREN==20 ;4 RCV INT ENB (R/W)
|
||||
%CATEN==40 ;5 XMT INT ENB (R/W)
|
||||
%CATAB==100 ;6 TRANSMIT ABORTED BY ETHER CONFLICT (RO)
|
||||
%CATDN==200 ;7 TRANSMIT DONE. SET WHEN TRANSMITTER IS DONE
|
||||
%CATCL==400 ;8 CLEAR THE TRANSMITTER, MAKING IT READY (WO)
|
||||
$CALOS==110400 ;9-12 LOST COUNT (RO) [# MSGS RCVED WITH RCV BFR FULL]
|
||||
; WHEN MSG IS WAITING IN BUFFER, THIS COUNTS
|
||||
; THE MESSAGES THAT MATCHED OUR DESTINATION OR
|
||||
; WERE BROADCAST, BUT COULDN'T BE RECIEVED.
|
||||
; WHEN RECEIVER IS RE-ENABLED (WRITE 1 INTO %CARDN)
|
||||
; THE COUNT IS THEN CLEARED.
|
||||
; WHEN A MESSAGE IS LOST, RECEIVER ZAPS ETHER
|
||||
; SO TRANSMITTER WILL ABORT (IF MESSAGE WAS DESTINED
|
||||
; TO US.)
|
||||
%CARST==20000 ;13 I/O RESET (WO)
|
||||
%CAERR==40000 ;14 CRC ERROR (RO)
|
||||
%CARDN==100000 ;15 RCV DONE.
|
||||
|
||||
CAIMYN==3,,764142 ;MY # (READ ONLY)
|
||||
CH%MYN==2 ;RETURNS THE [SOURCE] HOST# OF THIS INTERFACE.
|
||||
|
||||
CAIWBF=3,,764142 ;WRITE BUFFER (WRITE ONLY)
|
||||
CH%WBF==2 ;FIRST WAIT FOR TDONE. (OR SET IT VIA CSR)
|
||||
;FIRST WORD IN RESETS TRANSMITTER AND CLEARS TDONE.
|
||||
;STORE INTO THIS REGISTER TO WRITE WORDS OF MESSAGE,
|
||||
;LAST WORD IN IS DESTINATION ADDRESS, THEN READ CAIXMT.
|
||||
;SOURCE ADDRESS AND CHECK WORD PUT IN BY HARDWARE.
|
||||
|
||||
CAIRBF=3,,764144 ;READ BUFFER (READ ONLY)
|
||||
CH%RBF==4 ;THE FIRST WORD READ WILL BE FILLED TO THE LEFT
|
||||
;TO MAKE THE MESSAGE RECIEVED A MULTIPLE OF 16 BITS.
|
||||
;IF THE NUMBER OF DATA BITS IN THE MESSAGE WAS A
|
||||
;MULTIPLE OF 16, THIS WORD WILL BE THE FIRST WORD PUT
|
||||
;INTO THE BUFFER BY THE TRANSMITTING HOST.
|
||||
;THE LAST 3 WORDS READ ARE DESTINATION, SOURCE, CHECK.
|
||||
|
||||
CAIRBC=3,,764146 ;RECEIVE BIT COUNTER (READ ONLY)
|
||||
CH%RBC==6 ;WHEN A MESSAGE HAS BEEN RECEIVED THIS IS ONE LESS THAN
|
||||
;THE NUMBER OF BITS IN THE MESSAGE (16 X THE
|
||||
;NUMBER OF WORDS INCLUDING THE THREE OVERHEAD WORDS.)
|
||||
;AFTER THE LAST WORD (THE CRC WORD) HAS BEEN READ, IT IS 7777
|
||||
;BITS 10 AND 11 ARE THE HIGH ORDER BITS, AND IF THEY ARE ONE,
|
||||
;THEN THERE WAS A BUFFER OVERFLOW
|
||||
|
||||
CAIXMT=3,,764152 ;READING THIS INITIATES TRANSMISSION (!!)
|
||||
CH%XMT==12 ;THE VALUE READ IS ONE'S OWN HOST#.
|
||||
|
||||
;REFERENCING ADDRESSES IN THE GROUP OF 8 WORDS NOT LISTED HERE, OR
|
||||
;USING COMBINATIONS OF READ/WRITE NOT LISTED HERE, WILL TYPICALLY CAUSE
|
||||
;STRANGE AND BIZARRE EFFECTS.
|
||||
2782
src/system/chaos.288
Executable file
2782
src/system/chaos.288
Executable file
File diff suppressed because it is too large
Load Diff
68
src/system/chsdef.15
Executable file
68
src/system/chsdef.15
Executable file
@@ -0,0 +1,68 @@
|
||||
;;; CHAOS NET PACKET DEFINITION
|
||||
|
||||
;NOTE, IF YOU MAKE CHANGES TO OPCODES OR CONNECTION STATE SYMBOLS,
|
||||
;ALSO CHANGE AI:MAINT;CHS DEFS.
|
||||
;THIS FILE IS FOR PDP-10'S - CHS DEFS IS FOR PDP-11'S.
|
||||
|
||||
|
||||
;PACKET HEADER
|
||||
;NOTE THESE ARE FULL WORD BYTE POINTERS, INCLUDING A WORD OFFSET
|
||||
|
||||
$CPKOP==341000,,0 ;OPCODE
|
||||
%CO==,,-1
|
||||
%CORFC==1 ;REQUEST FOR CONNECTION
|
||||
%COOPN==2 ;OPEN
|
||||
%COCLS==3 ;CLOSE
|
||||
%COFWD==4 ;FORWARD
|
||||
%COANS==5 ;ANSWER
|
||||
%COSNS==6 ;SENSE STATUS
|
||||
%COSTS==7 ;REPORT STATUS
|
||||
%CORUT==10 ;ROUTING INFO (NOT YET USED)
|
||||
%COLOS==11 ;REPORT LOSSAGE
|
||||
%COLSN==12 ;LISTEN FOR RFC
|
||||
%COMNT==13 ;MAINTENANCE USE, IGNORED BY NORMAL NCPS
|
||||
%COEOF==14 ;END OF FILE
|
||||
%COUNC==15 ;UNCONTROLLED USER PACKET
|
||||
%COBRD==16 ;Software broadcast packet
|
||||
%COMAX==17 ;HIGHEST NON-DATA OPCODE +1
|
||||
%CODAT==200 ;NORMAL DATA OPCODE (NOTE SIGN BIT OF WORD IS SET)
|
||||
%CODWD==300 ;16-BIT DATA
|
||||
$CPKMV==241000,,0 ;"MUPPET" VERSION (MUST BE ZERO, NO MUPPETS EXIST!)
|
||||
$CPKFC==200400,,0 ;FORWARDING COUNT
|
||||
$CPKNB==041400,,0 ;NUMBER OF BYTES
|
||||
$CPKDA==242000,,1 ;DESTINATION ADDRESS
|
||||
$CPKDN==341000,,1 ;DESTINATION SUBNET
|
||||
$CPKDH==241000,,1 ;DESTINATION HOST
|
||||
$CPKDI==042000,,1 ;DESTINATION INDEX
|
||||
%CPKD==1 ;DESTINATION ADDRESS WORD
|
||||
$CPKSA==242000,,2 ;SOURCE ADDRESS
|
||||
$CPKSN==341000,,2 ;SOURCE SUBNET
|
||||
$CPKSH==241000,,2 ;SOURCE HOST
|
||||
$CPKSI==042000,,2 ;SOURCE INDEX
|
||||
%CPKS==2 ;SOURCE ADDRESS WORD
|
||||
$CPKPN==242000,,3 ;PACKET NUMBER
|
||||
$CPKAN==042000,,3 ;ACKNOWLEDGE NUMBER
|
||||
%CPKDT==4 ;FIRST WORD OF DATA
|
||||
|
||||
;PACKET SIZE
|
||||
|
||||
;THESE NUMBERS ARE FOR 1K PACKET BUFFERS
|
||||
;%CPMXW==30. ;MAXIMUM NUMBER OF PDP10 WORDS IN WHOLE PACKET
|
||||
;%CPMXC==104. ;MAXIMUM NUMBER OF CHARACTERS OF DATA
|
||||
|
||||
;THESE NUMBERS ARE FOR 4K PACKET BUFFERS
|
||||
%CPMXW==126. ;MAXIMUM NUMBER OF PDP10 WORDS IN WHOLE PACKET
|
||||
%CPMXC==488. ;MAXIMUM NUMBER OF CHARACTERS OF DATA
|
||||
|
||||
;CONNECTION STATES
|
||||
|
||||
%CS==,,-1
|
||||
%CSCLS==0 ;CLOSED
|
||||
%CSLSN==1 ;LISTENING
|
||||
%CSRFC==2 ;RFC RECEIVED
|
||||
%CSRFS==3 ;RFC SENT
|
||||
%CSOPN==4 ;OPEN
|
||||
%CSLOS==5 ;BROKEN BY RECEIPT OF "LOS"
|
||||
%CSINC==6 ;BROKEN BY INCOMPLETE TRANSMISSION (NO RESPONSE TO SNS)
|
||||
%CSFRN==7 ;OPEN IN FOREIGN PROTOCOL MODE
|
||||
%CSBRS==10 ;BRD sent state
|
||||
926
src/system/config.196
Executable file
926
src/system/config.196
Executable file
@@ -0,0 +1,926 @@
|
||||
.AUXIL
|
||||
|
||||
;;; "INSTALLATION" RELATED SWITCHES
|
||||
|
||||
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [
|
||||
$$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEMP==1
|
||||
]
|
||||
.ELSE $$TEMP==0
|
||||
|
||||
IFNDEF DEFOPT,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFOPT FOO==BAR DOES IT UNLESS FOO ALREADY DEFINED
|
||||
DEFINE DEFOPT X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z, X
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEM2==1
|
||||
]
|
||||
.ELSE $$TEM2==0
|
||||
|
||||
IFE MCOND AIKA,[
|
||||
DEFOPT KA10P==1 ;AI-KA HAS KA10 PROCESSOR
|
||||
DEFOPT MAXJ==85. ;MAX NUMBER OF JOBS ALLOWED
|
||||
DEFOPT SWBLK==1 ;1=> SWAP BLOCKING, 0=> PRIVILEGED USER
|
||||
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||
DEFOPT PAGPRE==1 ;PAGE-IN PREEMPTION
|
||||
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||
|
||||
DEFOPT NQS==8. ;# 2314 UNITS
|
||||
DEFOPT NTUTBL==2 ;TUTS ARE 2 BLOCKS LONG (THIS DEFN BETTER AGREE WITH DC10 DEFS)
|
||||
DEFSYM NUDSL==440. ;# USER DIRECTORIES ON DISK. NOTE: JUST CHANGING THIS
|
||||
; IS NOT SUFFICIENT!!
|
||||
DEFOPT NQCHN==40. ;NUMBER 2314 CHNLS
|
||||
DEFOPT DC10P==1 ;HAS SYSTEMS CONCEPTS DISK CONTROL
|
||||
DEFOPT DMDSK==0 ;DOES NOT USE DM DSK FORMAT (I.E. HAS EXTRA WORDS)
|
||||
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS (SECONDARY PACK)
|
||||
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||
|
||||
DEFOPT C1MXP==1 ;CHNL 1 MPX FEATURE
|
||||
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
|
||||
DEFOPT TM10A==1 ;IO-BUS MAG TAPE
|
||||
DEFOPT PTRP==1 ;HAS PAPER TAPE
|
||||
DEFOPT PTPP==0 ; But punch doesn't work!
|
||||
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
|
||||
DEFOPT DPKPP==1 ;DATA POINT KLUDGE (TTY mux)
|
||||
|
||||
DEFOPT NETP==1 ; Connected to a network
|
||||
DEFOPT IMPP==1 ; Has IMP interface
|
||||
DEFOPT KAIMP==1
|
||||
DEFOPT IMPUS==206 ; ARPA net host number
|
||||
DEFOPT IMPUS3==<1200,,400006> ; Internet host number
|
||||
DEFOPT NCPP==1 ; Include NCP code
|
||||
DEFOPT NNETCH==30. ; # NCP network channels
|
||||
DEFOPT INETP==1 ; Include Internet code
|
||||
DEFOPT TCPP==1 ; Include TCP code
|
||||
DEFOPT XBL==20. ; # TCP network channels
|
||||
|
||||
DEFOPT TK10P==1 ;HAS TK10 TTY SCANNER (NO MORE, BUT LEAVE IT SO TTY#S DON'T CHANGE)
|
||||
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
|
||||
DEFOPT NNTYS==16. ;# TTYS ON KNIGHT KLUDGE
|
||||
DEFOPT NDPTYS==9. ;# TTYS ON DATAPOINT KLUDGE
|
||||
DEFOPT NSTTYS==16. ;# OF STY'S (PSEUDO-TTY'S)
|
||||
DEFOPT APL==10 ;AP TTY # (really?)
|
||||
|
||||
DEFOPT CODP==1 ; Has Morse code output device (no antenna though)
|
||||
|
||||
; The following AI-KA stuff is broken since the 10-11 interface doesn't work,
|
||||
; but is retained in case it gets fixed.
|
||||
DEFOPT TEN11P==0 ; Rubin 10-11 interface
|
||||
IFN TEN11P,[
|
||||
DEFOPT XGP==1 ; Has XGP
|
||||
DEFOPT CHAOSP==1 ; Has CHAOS net
|
||||
DEFOPT MYCHAD==2026 ; CHAOS net address
|
||||
DEFOPT NINDX==50. ; Number of Chaosnet indices
|
||||
DEFOPT T11CHP==1 ; CHAOS net goes through TEN-11 interface
|
||||
DEFOPT CH11NM==7 ; # of 10-11 PDP11 handling CHAOS net.
|
||||
DEFOPT TT11NM==0 ; # of 10-11 PDP11 that handles TV TTYs.
|
||||
DEFOPT N11TYS==16. ; # PDP11 TV TTYS
|
||||
DEFOPT MXVBN==40 ; Max video bfr # for assignment purposes.
|
||||
] ;TEN11P ; These actually correspond to video switch inputs.
|
||||
|
||||
|
||||
; The following stuff used to be on AI-KA and is unlikely to ever
|
||||
; come back.
|
||||
;DEFOPT PDP6P==0 ;HAS PDP6 (ALAS, NO MORE)
|
||||
;DEFOPT 340P==0 ;HAS 340 DISPLAY (ALAS, NO MORE)
|
||||
;DEFOPT TABP==0 ;DOESN'T HAVE SYLVANIA TABLET ANY MORE
|
||||
;DEFOPT DSDP==0 ;HAS DESELECTION DEVICE (ALAS, NO MORE)
|
||||
;DEFOPT NEWDTP==0 ;HAD OLD DECTAPE CONTROLLER
|
||||
;DEFOPT RBTCP==0 ;ROBOT CONSOLE
|
||||
;DEFOPT HCLKP==0 ;HOLLOWAY CLOCK (ALAS, NO MORE)
|
||||
;DEFOPT ARMP==0 ;HAS NO ARM (AMF MOSTLY) (R.I.P.)
|
||||
;DEFOPT OMXP==0 ;HAS OMX (OUTPUT MULTIPLEXOR) (ALAS, NO MORE)
|
||||
;DEFOPT IMXP==0 ;HAS IMX (INPUT MULTIPLEXOR) (ALAS, NO MORE)
|
||||
;DEFOPT VIDP==0 ;HAD VIDI (R.I.P.)
|
||||
;DEFOPT CCLKP==0 ;NO CHESS TOURN CLOCK STUFF
|
||||
;DEFOPT NDAP==0 ;NEW D/A CONVERTERS (ALAS, NO MORE)
|
||||
|
||||
; Physical memory variables
|
||||
|
||||
DEFOPT TSYSM==768. ;TOTAL PDP10 1K MEM BLOCKS
|
||||
DEFOPT ECCMEM==1 ;HAS HIC'S ERROR CORRECTING MEMORY
|
||||
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.);
|
||||
|
||||
DEFSYM PMRCM==1777 ;CORE ADR FIELD IN PAGE MAP (AI-KA HAS 10 BITS)
|
||||
DEFSYM PMAGEM==16000 ;AI-KA HAS ONE LESS AGE BITS
|
||||
DEFSYM PMCSHM==0 ;NO CACHE BIT
|
||||
DEFSYM PMUNSD==160000 ;UNUSED BITS
|
||||
|
||||
IFDEF TEN11P,IFN TEN11P,DEFSYM T11CPA==3776000 ;ADRS OF TEN-11 CONTROL PAGE
|
||||
IFDEF PDP6P,IFN PDP6P,DEFSYM PDP6BM==3000000 ;BASE ADR OF PDP6 MEM AS SEEN FROM 10
|
||||
IFDEF PDP6P,IFN PDP6P,DEFSYM LPDP6M==16. ;LENGTH OF PDP6 MEM IN PAGES
|
||||
] ;AIKA
|
||||
|
||||
IFE MCOND MLKA,[
|
||||
DEFOPT KA10P==1 ;ML-KA HAS KA PROCESSOR
|
||||
DEFOPT MAXJ==60. ;MAX NUMBER OF JOBS ALLOWED
|
||||
DEFOPT SWBLK==1 ;1 => SWAP BLOCKING, 0 => PRIV USER
|
||||
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||
DEFOPT PAGPRE==1 ; Page-in preemption
|
||||
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||
|
||||
DEFOPT NQCHN==30. ;NUMBER 2314 CHNLS
|
||||
DEFOPT NQS==7 ;# DISK UNITS
|
||||
DEFOPT NTUTBL==1 ;TUTS ARE ONE BLOCK LONG
|
||||
DEFSYM NUDSL==250. ;# USER DIRECTORIES ON DISK
|
||||
DEFOPT RP10P==1 ;HAS DEC RP10 DISK CONTROL (RP02)
|
||||
DEFOPT QRDCMP==1 ;SOFTWARE READ-COMPARE
|
||||
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
|
||||
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS (SECONDARY PACK)
|
||||
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||
|
||||
DEFOPT C1MXP==1 ;CHANNEL 1 MPX FEATURE
|
||||
DEFOPT NEWDTP==1 ;HAS NEW DECTAPE CONTROLLER
|
||||
;DEFOPT NUNITS==4 ; Number of utape units (R.I.P.)
|
||||
DEFOPT NMTCS==1 ;NUMBER OF MAG TAPE UNITS
|
||||
DEFOPT TM10A==1 ;IO-BUS MAG TAPE
|
||||
DEFOPT NLPTP==1 ;HAS NEW LPT (ODEC)
|
||||
DEFOPT TPLP==1 ;PSEUDO LPT
|
||||
DEFOPT PTRP==1 ;HAS PAPER TAPE
|
||||
DEFOPT PTPP==1 ; And punch works.
|
||||
DEFOPT MTYP==1 ;HAS MORTON MULTIPLEX BOX
|
||||
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
|
||||
|
||||
DEFOPT NETP==1 ; Has net connection
|
||||
DEFOPT IMPP==1 ; Has IMP interface
|
||||
DEFOPT KAIMP==1
|
||||
DEFOPT IMPUS==306 ; ARPA net host number
|
||||
DEFOPT IMPUS3==<1200,,600006> ; Internet host number
|
||||
DEFOPT NCPP==0 ; Flush NCP code
|
||||
DEFOPT NNETCH==20. ; # NCP net channels
|
||||
DEFOPT INETP==1 ; Include Internet code
|
||||
DEFOPT TCPP==1 ; Include TCP code
|
||||
DEFOPT XBL==20. ; # TCP network channels
|
||||
DEFOPT CHAOSP==1 ;CHAOS NET
|
||||
DEFOPT MYCHAD==3114 ;CHAOS NET ADDRESS
|
||||
DEFOPT NINDX==30. ;NUMBER OF INDICES
|
||||
DEFOPT CH10P==1 ;CHAOS NET VIA PDP-10 I/O BUS, NOT FRONT-END
|
||||
|
||||
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
|
||||
;DEFOPT NNVTTS==0 ;# NOVA TTYS (used to have?)
|
||||
DEFOPT NMTYS==33 ;# TTYS ON MORTON BOX
|
||||
DEFOPT NSTTYS==8 ;# STY'S (PSEUDO-TTY'S)
|
||||
|
||||
DEFOPT TSYSM==512. ;TOTAL PDP10 1K MEM BLOCKS
|
||||
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
|
||||
|
||||
DEFSYM PMRCM==777 ;9 BIT REAL CORE ADR
|
||||
DEFSYM PMAGEM==17000 ;4 BIT AGE
|
||||
DEFSYM PMCSHM==0 ;NO CACHE BIT
|
||||
DEFSYM PMUNSD==160000 ;UNUSED BITS
|
||||
] ;MLKA
|
||||
|
||||
IFE MCOND DM,[
|
||||
DEFOPT KA10P==1 ;DM HAS KA10 PROCESSOR
|
||||
DEFOPT MAXJ==63. ;MAX NUMBER OF JOBS ALLOWED
|
||||
DEFOPT SWBLK==0 ;1 => SWAP BLOCKING, 0 => PRIVILEGED USER
|
||||
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||
DEFOPT PAGPRE==0 ;NO PAGE-IN PREEMPTION
|
||||
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||
|
||||
DEFOPT NQS==6 ;# OF DISK UNITS
|
||||
DEFOPT NTUTBL==1 ;TUTS ARE ONE BLOCK LONG
|
||||
DEFSYM NUDSL==200. ;# USER DIRECTORIES ON DISK
|
||||
DEFOPT NQCHN==30. ;NUMBER 2314 CHNLS
|
||||
DEFOPT RP10P==1 ;HAS DEC RP10 DISK CONTROL (RP02)
|
||||
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
|
||||
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS
|
||||
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||
|
||||
DEFOPT C1MXP==1 ;HAS CHANNEL 1 MPX FEATURE
|
||||
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
|
||||
DEFOPT TM10B==1 ;DF10-BASED CONTROLLER
|
||||
DEFOPT TTLPTP==1 ;LPT IS A TTY (I.E. ON A TTY LINE) VALUE IS LINE #.
|
||||
DEFOPT PTRP==1 ;HAS PAPER TAPE
|
||||
DEFOPT PTPP==1 ;PUNCH DOES WORK.
|
||||
DEFOPT MTYP==1 ;HAS MORTON MULTIPLEX BOX
|
||||
;DEFOPT CODP==0 ;NO COD DEVICE (used to?)
|
||||
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
|
||||
|
||||
DEFOPT NETP==1 ; Has net connection
|
||||
DEFOPT IMPP==1 ; Has IMP interface
|
||||
DEFOPT DMIMP==1 ; This is a DM IMP interface
|
||||
DEFOPT IMPUS==106 ; ARPA net host number
|
||||
DEFOPT IMPUS3==<1200,,200006> ; Internet host number
|
||||
DEFOPT NCPP==0 ; Flush NCP code
|
||||
DEFOPT NNETCH==30. ; # NCP network channels
|
||||
DEFOPT INETP==1 ; Include Internet code
|
||||
DEFOPT TCPP==1 ; Include TCP code
|
||||
DEFOPT XBL==20. ; # TCP network channels
|
||||
|
||||
DEFOPT MSPP==1 ;HAS MESSAGE SLURPER
|
||||
DEFOPT DEMON==1 ;HAS DEMON ROUTINES
|
||||
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
|
||||
DEFOPT NMTYS==12. ;# TTYS ON MORTON BOX
|
||||
DEFOPT NSTTYS==16. ;# OF STY'S (PSEUDO-TTY'S)
|
||||
|
||||
|
||||
DEFOPT TSYSM==512. ;TOTAL PDP10 1K MEM BLOCKS
|
||||
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
|
||||
|
||||
DEFSYM PMRCM==777 ;9 BIT REAL CORE ADR
|
||||
DEFSYM PMAGEM==17000 ;4 BIT AGE
|
||||
DEFSYM PMCSHM==0 ;NO CACHE BIT
|
||||
DEFSYM PMUNSD==160000 ;UNUSED BITS
|
||||
] ;DM
|
||||
|
||||
IFE MCOND MX,[
|
||||
DEFOPT KL10P==1 ;MX IS WHAT WE CALL THE KL10 NOW
|
||||
DEFOPT MAXJ==120. ;MAX NUMBER OF JOBS ALLOWED
|
||||
DEFOPT SWBLK==1 ;1 => SWAP BLOCKING, 0 => PRIVILEGED USER
|
||||
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||
DEFOPT PAGPRE==1 ;PAGE-IN PREEMPTION
|
||||
DEFOPT SCHBLN==20. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||
|
||||
DEFOPT NQS==6 ;# OF DISK UNITS (3 RP04'S AND 3 T-300'S)
|
||||
DEFOPT NTUTBL==2 ;TUTS ARE TWO BLOCKS LONG
|
||||
DEFSYM NUDSL==500. ;# USER DIRECTORIES ON DISK
|
||||
DEFOPT NQCHN==50. ;NUMBER 2314 CHNLS
|
||||
DEFOPT RH10P==1 ;HAS DEC RH10 DISK CONTROL (RP04)
|
||||
DEFOPT T300P==3 ;TRIDENT T-300S VIA PDP-11 START AT DRIVE 3
|
||||
DEFOPT QRDCMP==0 ;SOFTWARE READ-COMPARE, HARDWARE IS PINING FOR THE
|
||||
; FJORDS (But this isn't debugged yet.)
|
||||
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
|
||||
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS
|
||||
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||
|
||||
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
|
||||
DEFOPT TM10B==1 ;DF10-BASED TAPE CONTROLLER
|
||||
|
||||
DEFOPT DL10P==1 ;HAS DL10/DC76 TTY CONTROLLER
|
||||
DEFOPT PDCLKP==1 ;HAS "DeCoriolis" CLOCK
|
||||
|
||||
DEFOPT NETP==1 ; Has net connection
|
||||
DEFOPT INETP==1 ; Include Internet IP code
|
||||
DEFOPT TCPP==1 ; Include Internet TCP code
|
||||
DEFOPT XBL==25. ; # TCP connections
|
||||
DEFOPT IMPP==1 ; Has IMP interface
|
||||
DEFOPT KAIMP==1
|
||||
DEFOPT IMPUS==106 ; ARPA net host number
|
||||
DEFOPT IMPUS3==<1200,,200006> ; Internet host number
|
||||
DEFOPT NCPP==0 ; Flush NCP code
|
||||
DEFOPT NNETCH==30. ; # NCP network channels
|
||||
DEFOPT CHAOSP==1 ;HAS CHAOS NET
|
||||
DEFOPT MYCHAD==1440 ;CHAOS NET ADDRESS
|
||||
DEFOPT NINDX==50. ;NUMBER OF INDICES
|
||||
DEFOPT DLCP==1 ;CHAOS NET GOES THROUGH DL10
|
||||
|
||||
DEFOPT NOTYS==0 ;# KA-10 CONSOLE 0 TTYS
|
||||
DEFOPT NETYS==33. ;# KL-10 DTE20 TTYS
|
||||
NEWDTE==1 ;TEMPORARY CONDITIONAL TO ENABLE NEW DTE20 PROTOCOL
|
||||
DEFOPT NDLTYS==4. ;# TTYS ON DL10/DC76
|
||||
;Note: 3d TTY on DL10 is VT52 by console.
|
||||
DEFOPT NSTTYS==25. ;# OF STY'S (PSEUDO-TTY'S)
|
||||
|
||||
DEFOPT TSYSM==2048. ;TOTAL PDP10 1K MEM BLOCKS
|
||||
DEFOPT NMMP==7 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
|
||||
|
||||
DEFSYM PMRCM==7777 ;12 BIT REAL CORE ADDR
|
||||
DEFSYM PMCSHM==10000 ;CACHE ENABLE BIT
|
||||
DEFSYM PMAGEM==160000 ;3 BIT AGE
|
||||
DEFSYM PMUNSD==0 ;NO UNUSED BITS
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[MX]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;MX
|
||||
|
||||
IFE MCOND AI,[
|
||||
DEFOPT KS10P==1 ;The new AI has a KS10 processor.
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==2 ;# of disk drive units
|
||||
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RP06P==1 ; with two RP06s
|
||||
|
||||
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||
|
||||
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||
;AI's IMP is gone 5/5/89
|
||||
;DEFOPT INETP==1 ; Include Internet code
|
||||
;DEFOPT TCPP==1 ; Include TCP code
|
||||
;DEFOPT XBL==30. ; # TCP network channels
|
||||
;DEFOPT IMPP==1 ; Has an IMP interface
|
||||
;DEFOPT KSIMP==1 ; ACC LH/DH interface on KS unibus
|
||||
;DEFOPT IMPUS==206 ; ARPA net host number
|
||||
;DEFOPT IMPUS3==<1200,,400006> ; Internet host number of IMP
|
||||
;DEFOPT PKTTRC==-1 ;Packet tracing code enabled
|
||||
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||
DEFOPT MYCHAD==3130 ;CHAOS net address
|
||||
DEFOPT NINDX==50. ;Number of indices
|
||||
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==1 ; 1 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==12. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[AI MC]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;AI
|
||||
|
||||
IFE MCOND MC,[
|
||||
DEFOPT KS10P==1 ;MC is now a KS10.
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==1 ;# of disk drive units
|
||||
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RP06P==1 ; with one RP06
|
||||
|
||||
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||
DEFOPT INETP==1 ; Include Internet code
|
||||
DEFOPT TCPP==1 ; Include TCP code
|
||||
DEFOPT XBL==30. ; # TCP network channels
|
||||
;MC's IMP is gone 5/18/89
|
||||
;DEFOPT IMPP==1 ; Has an IMP interface
|
||||
;DEFOPT KSIMP==1 ; ACC LH/DH interface on KS unibus
|
||||
;DEFOPT IMPUS==354 ; ARPA net host number
|
||||
;DEFOPT IMPUS3==<1200,,600054> ; Internet host number of IMP
|
||||
DEFOPT IPUNCP==1 ; IP in Chaos UNC is our only Internet address
|
||||
DEFOPT PKTTRC==-1 ;Packet tracing code enabled
|
||||
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||
DEFOPT MYCHAD==3131 ;CHAOS net address
|
||||
DEFOPT NINDX==50. ;Number of indices
|
||||
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==1 ; 1 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==6. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[AI MC]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;MC
|
||||
|
||||
IFE MCOND ML,[
|
||||
DEFOPT KS10P==1 ;ML is now a KS10.
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==1 ;# of disk drive units
|
||||
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RP06P==1 ; with one RP06
|
||||
|
||||
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||
DEFOPT MYCHAD==3133 ;CHAOS net address
|
||||
DEFOPT NINDX==50. ;Number of indices
|
||||
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==4 ; 4 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
DEFSYM DZ1BA=:760020
|
||||
DEFSYM DZ2BA=:760030
|
||||
DEFSYM DZ3BA=:760040
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==4. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[AI MC ML]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;ML
|
||||
|
||||
IFE MCOND MD,[
|
||||
|
||||
DEFOPT KS10P==1 ;MD is a KS10.
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==1 ;# of disk drive units
|
||||
DEFOPT NTUTBL==3 ;# 1K blocks in a TUT (better agree with disk DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RM80P==1 ; with one RM80
|
||||
|
||||
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||
DEFOPT MYCHAD==3132 ;CHAOS net address
|
||||
DEFOPT NINDX==50. ;Number of indices
|
||||
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==4 ; 4 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
DEFSYM DZ1BA=:760020
|
||||
DEFSYM DZ2BA=:760030
|
||||
DEFSYM DZ3BA=:760040
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==4. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[AI MC ML MD]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;MD
|
||||
|
||||
IFE MCOND SI,[ ;Stacken ITS
|
||||
DEFOPT KS10P==1 ;SI is a KS10
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==1 ;# of disk drive units
|
||||
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RP06P==1 ; with one RP06
|
||||
|
||||
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==2 ; 2 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
DEFSYM DZ1BA=:760020
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==16. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==8. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[SI]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;SI
|
||||
|
||||
IFE MCOND FU,[ ;Australian KS10
|
||||
DEFOPT KS10P==1 ;FU is a KS10
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==1 ;# of disk drive units
|
||||
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RP06P==1 ; with one RP06
|
||||
|
||||
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==1 ; 1 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[FU]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;FU
|
||||
|
||||
IFE MCOND PM,[ ;MRC's KS10 (PandaMonium)
|
||||
DEFOPT KS10P==1 ;PM is a KS10
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==1 ;# of disk drive units
|
||||
DEFOPT NTUTBL==2 ;# 1K blocks in a TUT (better agree with RM03 DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RM03P==1 ; with one RM03
|
||||
|
||||
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==1 ; 1 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==5. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[PM]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;PM
|
||||
|
||||
IFE MCOND DX,[ ;Digex's KS10
|
||||
DEFOPT KS10P==1 ;DX is a KS10
|
||||
|
||||
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||
|
||||
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||
|
||||
DEFOPT NQS==1 ;# of disk drive units
|
||||
DEFOPT NTUTBL==2 ;# 1K blocks in a TUT (better agree with RM03 DEFS)
|
||||
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||
; SALV and DSKDMP)
|
||||
DEFOPT RH11P==1 ; Has RH11 controller
|
||||
DEFOPT RM03P==1 ; with one RM02/3
|
||||
|
||||
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||
|
||||
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||
DEFOPT DZ11NB==1 ; 1 of them
|
||||
DEFSYM DZ0BA=:760010
|
||||
|
||||
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
|
||||
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||
|
||||
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||
|
||||
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
DEFSYM PMUNSD==146000 ;Unused bits
|
||||
|
||||
DEFINE ITSIRP BODY
|
||||
IRPS ITS,,[DX]
|
||||
BODY
|
||||
TERMIN
|
||||
TERMIN
|
||||
] ;DX
|
||||
|
||||
; Default settings for all configuration-dependent assembly parameters.
|
||||
; If a system definition has already set a value for a parameter, the
|
||||
; default here will NOT be used.
|
||||
|
||||
DEFOPT KL10P==0 ;1= KL10 processor
|
||||
DEFOPT KS10P==0 ;1= KS10 processor
|
||||
DEFOPT KA10P==0 ;1= KA10 processor
|
||||
|
||||
IFE KL10P\KS10P\KA10P, .ERR Processor type required - KL10P, KS10P or KA10P
|
||||
|
||||
IFN KS10P, DEFOPT KSFREQ==4100000./60. ; KS-ticks per PD-tick.
|
||||
|
||||
DEFOPT C1MXP==0 ;1= Has PI channel 1 MPX feature
|
||||
|
||||
DEFOPT MAXJ==63. ; Max number of jobs allowed
|
||||
DEFOPT NQCHN==30. ; Max number of user disk channels open in system
|
||||
DEFOPT SCHBLN==10. ; Number of runnable jobs to remember
|
||||
DEFOPT SWBLK==0 ;1= 1=> swap blocking, 0=> privileged user
|
||||
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||
DEFOPT PAGPRE==0 ;1= Use page-in preemption
|
||||
|
||||
; Disk parameters
|
||||
|
||||
IFNDEF NQS, .ERR NQS required - # of disk drive units
|
||||
IFNDEF NTUTBL,.ERR NTUTBL required - # 1K blocks in a TUT
|
||||
; (This defn better agree with DC/RP/RH/T3 defs)
|
||||
IFNDEF NUDSL, .ERR NUDSL required - # directories in file system
|
||||
; Just changing this will not work!!
|
||||
DEFOPT DC10P==0 ;1= Has Systems Concepts disk control
|
||||
DEFOPT RP10P==0 ;1= DEC RP10 disk control (RP02)
|
||||
DEFOPT RH10P==0 ;1= DEC RH10 disk control (RP04)
|
||||
DEFOPT RH11P==0 ;1= DEC RH11 disk control
|
||||
DEFOPT RP06P==0 ;1= RH11 with RP06's
|
||||
DEFOPT RM03P==0 ;1= RH11 with RM03's
|
||||
DEFOPT RM80P==0 ;1= RH11 with RM80's
|
||||
DEFOPT T300P==0 ;1= Trident T-300 via PDP-11
|
||||
DEFOPT QRDCMP==0 ;1= Software read-compare
|
||||
DEFOPT DMDSK==0 ;1= Use DM DSK format
|
||||
DEFOPT QRSRVP==0 ;1= Has reserved disk packs (Secondary pack)
|
||||
DEFOPT QAUTHP==0 ;1= Keep track of file authors
|
||||
|
||||
|
||||
; Magtape parameters
|
||||
DEFOPT NMTCS==0 ; # Mag tape units
|
||||
DEFOPT TM10A==0 ;1= IO-bus TM10 Mag tape
|
||||
DEFOPT TM10B==0 ;1= DF10/TM10 Magtape
|
||||
DEFOPT TM03S==0 ;1= TM03/RH11 KS Magtape
|
||||
IFN NMTCS,IFE TM10A\TM10B\TM03S,.ERR No Magtape Controller type specified?
|
||||
|
||||
|
||||
; Network parameters
|
||||
DEFOPT NETP==0 ;1= Connected to some network, include net code.
|
||||
DEFOPT CHAOSP==0 ;1= Has CHAOS net (Must have some interface def'd)
|
||||
DEFOPT NCPP==0 ;1= Include NCP code (must have IMPP)
|
||||
DEFOPT INETP==0 ;1= Include Internet Protocol code
|
||||
DEFOPT TCPP==0 ;1= Include TCP code (must have INETP)
|
||||
DEFOPT IPUNCP==0 ;1= IP in Chaos UNC is our only Internet address
|
||||
|
||||
;NCP-specific parameters
|
||||
DEFOPT NNETCH==30. ; # of NCP network channels system supports
|
||||
|
||||
;IP-specific paramters
|
||||
IFN INETP,[
|
||||
IFE IPUNCP,IFNDEF IMPUS3,.ERR IMPUS3 must be defined as Internet host addr
|
||||
IFN IPUNCP,IFE CHAOSP,.ERR Chaosnet must exist for IP encapsulation scheme
|
||||
]
|
||||
|
||||
;Chaos-specific parameters
|
||||
IFN CHAOSP,IFNDEF MYCHAD, .ERR MYCHAD must be defined as CHAOSnet host addr
|
||||
DEFOPT NINDX==0 ; Number of indices for CHAOS connections
|
||||
DEFOPT CH10P==0 ;1= CHAOS net via PDP-10 I/O bus
|
||||
DEFOPT CH11P==0 ;1= CHAOS net via Unibus Chaos board on KS10
|
||||
DEFOPT DLCP==0 ;1= CHAOS net via DL10
|
||||
DEFOPT T11CHP==0 ;1= CHAOS net via Rubin 10-11 interface
|
||||
IFN T11CHP,DEFOPT CH11NM==7 ; CHAOS net is on PDP-11 #7 of 10-11 interface
|
||||
|
||||
;IMP interface specific parameters
|
||||
DEFOPT IMPP==0 ;1= Has IMP interface to ARPAnet
|
||||
IFN IMPP,IFNDEF IMPUS, .ERR IMPUS must be defined as ARPAnet host #
|
||||
DEFOPT DMIMP==0 ;1= Has DM IMP interface
|
||||
DEFOPT KAIMP==0 ;1= Has AI-KA/ML-KA/MX-KL IMP interface
|
||||
DEFOPT KSIMP==0 ;1= Has KS10 UNIBUS ACC LH-DH IMP interface
|
||||
IFN IMPP,IFE DMIMP+KAIMP+KSIMP,.ERR IMPP requires an interface type
|
||||
IFN IMPP,IFN IPUNCP,.ERR IPUNCP and IMPP are incompatible
|
||||
|
||||
; TTY line parameters
|
||||
DEFOPT MTYP==0 ;1= Has Morton box multiplexor
|
||||
DEFOPT DL10P==0 ;1= Has DL10/DC76 TTY controller
|
||||
DEFOPT TK10P==0 ;1= Has TK10 TTY scanner
|
||||
DEFOPT DPKPP==0 ;1= Has Datapoint kludge TTY mpxr
|
||||
DEFOPT DZ11P==0 ;1= Has DZ11 Multiplexors
|
||||
|
||||
IFN DZ11P, IFNDEF DZ11NB, .ERR DZ11P requires a value for DZ11NB
|
||||
IFE DZ11P, DEFSYM DZ11NB==0 ; # DZ11s
|
||||
|
||||
DEFOPT NOTYS==0 ; # KA-10 console 0 TTYs
|
||||
DEFOPT NETYS==0 ; # KL-10 DTE20 console 0 TTYs
|
||||
DEFOPT NKSTYS==0 ; # KS-10 8080 console 0 TTYs
|
||||
DEFOPT NNVTTS==0 ; # Nova TTYs
|
||||
DEFOPT NNTYS==0 ; # TTYs on Knight kludge
|
||||
DEFOPT NDZTYS==0 ; # TTYs on DZ11s
|
||||
DEFOPT NDPTYS==0 ; # TTYs on Datapoint kludge
|
||||
DEFOPT NMTYS==0 ; # TTYs on Morton box
|
||||
DEFOPT NDLTYS==0 ; # TTYs on DL10/DC76
|
||||
DEFOPT NSTTYS==0 ; # of STY's (Pseudo-TTY's)
|
||||
DEFOPT N11TYS==0 ; # PDP11 TV TTYs (formerly 16. of them)
|
||||
IFN N11TYS,[
|
||||
DEFOPT TT11NM==0 ; # of PDP11 that handles TTYs.
|
||||
DEFOPT MXVBN==40 ; Max video buffer # for assignment purposes.
|
||||
] ; These actually correspond to video switch inputs.
|
||||
DEFOPT NF2741==0 ; First 2741 console #
|
||||
DEFOPT N2741==0 ; # 2741's (formerly 3; flushed 3/21/76)
|
||||
DEFOPT SYSCON==0 ; TTY # of system job console
|
||||
DEFOPT APL==0 ; AP TTY #
|
||||
|
||||
; Miscellaneous devices
|
||||
|
||||
DEFOPT TEN11P==0 ;1= Rubin 10-11 interface (late of AI-KA)
|
||||
DEFOPT XGP==0 ;1= Has XGP
|
||||
DEFOPT NEWDTP==0 ;1= Has new dectape controller
|
||||
DEFOPT NUNITS==0 ; # Utape (DECtape) units
|
||||
DEFOPT OLPTP==0 ;1= Has old LPT (Data Products)
|
||||
DEFOPT NLPTP==0 ;1= Has new LPT (ODEC)
|
||||
DEFOPT GLPTP==0 ;1= Has Gould LPT
|
||||
DEFOPT TTLPTP==0 ;1= LPT is on a TTY line (value = line #)
|
||||
DEFOPT PTRP==0 ;1= Has paper tape reader/punch
|
||||
DEFOPT PTPP==0 ;1= Paper tape punch works
|
||||
DEFOPT PDCLKP==0 ;1= Has "DeCoriolis" clock
|
||||
DEFOPT HCLKP==0 ;1= Has Holloway clock (device 710, 714)
|
||||
DEFOPT CCLKP==0 ;1= Hack chess tournament clock stuff (device 374)
|
||||
DEFOPT 340P==0 ;1= Has 340 display
|
||||
DEFOPT TABP==0 ;1= Has Sylvania tablet
|
||||
DEFOPT PLTP==0 ;1= Has Calcomp plotter
|
||||
DEFOPT DSDP==0 ;1= Has deselection device
|
||||
DEFOPT ARMP==0 ;1= Has arm (AMF mostly) (R.I.P.)
|
||||
DEFOPT IMXP==0 ;1= Has IMX (input A/D multiplexor) (alas, no more)
|
||||
DEFOPT OMXP==0 ;1= Has OMX (output D/A multiplexor) (alas, no more)
|
||||
DEFOPT VIDP==0 ;1= Has VIDI (R.I.P.)
|
||||
DEFOPT NTYP==0 ;1= Has DM kludge for talking to 11
|
||||
DEFOPT CODP==0 ;1= Has Morse code F1 92Mhz broadcast output device
|
||||
DEFOPT PDP6P==0 ;1= Has PDP-6 (alas, no more)
|
||||
; (turning this on probably won't work)
|
||||
DEFOPT RBTCP==0 ;1= Has Robot console
|
||||
DEFOPT NDAP==0 ;1= Has "new" D/A converters (alas, no more)
|
||||
DEFOPT STKP==0 ;1= Has Stanford keyboard (not any more)
|
||||
DEFOPT E.SP==0 ;1= Has E&S LDS-1 display
|
||||
|
||||
; Some software options
|
||||
|
||||
DEFOPT MSPP==0 ;1= Want message slurper
|
||||
DEFOPT DEMON==0 ;1= Want crufty DM demon facility
|
||||
DEFOPT TPLP==0 ;1= Want pseudo LPT
|
||||
|
||||
|
||||
; Physical memory parameters
|
||||
|
||||
DEFOPT ECCMEM==0 ;1= Has HIC's error correcting memory
|
||||
DEFOPT NMMP==4 ; # exec pages for MMP table (# vir pgs/512.)
|
||||
IFNDEF TSYSM, .ERR TSYSM required - Total PDP10 1K mem blocks
|
||||
|
||||
IFNDEF PMRCM, .ERR PMRCM required - Mem addr field in page map
|
||||
IFNDEF PMAGEM,.ERR PMAGEM required - Age bits in page map
|
||||
IFNDEF PMCSHM,.ERR PMCSHM required - Cache bit
|
||||
IFNDEF PMUNSD,.ERR PMUNSD required - Unused bits
|
||||
|
||||
IFNDEF ITSIRP,.ERR ITSIRP required - Names of local ITS machines
|
||||
|
||||
; Any parameter conflict checks can be made here.
|
||||
|
||||
IFN DZ11P,[
|
||||
IFG NDZTYS-<DZ11NB*8>, .ERR More DZ11 TTYs than controllers?
|
||||
REPEAT DZ11NB,[
|
||||
IFNDEF CONC DZ,\.RPCNT,BA, .ERR DZ11 bus address not specified.
|
||||
]
|
||||
]
|
||||
IFN $$TEMP,EXPUNGE DEFSYM
|
||||
IFN $$TEM2,EXPUNGE DEFOPT
|
||||
2989
src/system/core.82
Executable file
2989
src/system/core.82
Executable file
File diff suppressed because it is too large
Load Diff
270
src/system/dc10.defs27
Executable file
270
src/system/dc10.defs27
Executable file
@@ -0,0 +1,270 @@
|
||||
.AUXIL
|
||||
|
||||
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [
|
||||
$$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEMP==1
|
||||
]
|
||||
.ELSE $$TEMP==0
|
||||
|
||||
|
||||
;SYSTEMS CONCEPTS DC10 PHYSICAL CHARACTERISTICS
|
||||
|
||||
DEFSYM NCYLS==400. ;# CYLINDERS NORMALLY USED
|
||||
DEFSYM XCYLS==6 ;# EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS==20. ;# TRACKS/CYLINDER
|
||||
DEFSYM NSECS==2 ;# BLKS/TRK
|
||||
DEFSYM SECBLK==1 ;# SECTORS/BLOCK
|
||||
DEFSYM NBLKSC==NHEDS*NSECS ;# BLKS/CYL
|
||||
DEFSYM NBLKS==NCYLS*NBLKSC ;TOTAL # REG BLKS
|
||||
DEFSYM XBLKS==XCYLS*NBLKSC ;# XTRA BLKS
|
||||
DEFSYM TBLKS==NBLKS+XBLKS ;TOTAL BLOCKS
|
||||
|
||||
DEFSYM NTUTBL==2 ;2 BLOCKS PER TUT (DUAL-DENSITY CALCOMPS THESE DAYS)
|
||||
DEFSYM DECADE==20. ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS
|
||||
|
||||
;EXTRA WORDS IN BLOCK
|
||||
|
||||
DEFSYM XWBWC==0
|
||||
DEFSYM XWBLK==1700,, ;BP TO PREV BLK # IN FILE FLD
|
||||
DEFSYM XWAWC==171200,, ;BP TO ACTIVE WD CNT
|
||||
DEFSYM XWSYSN==1
|
||||
DEFSYM XWFN1==2
|
||||
DEFSYM XWFN2==3
|
||||
DEFSYM NXWDS==4 ;NUMBER OF EXTRA WORDS
|
||||
|
||||
DEFSYM DC0==610 ;MAIN DEVICE CODE
|
||||
DEFSYM DC1==614 ;READS ERR STATUS ETC, SETS TIMER DRIVER # ON CONO
|
||||
|
||||
;FIELDS IN HEADER WORD 0
|
||||
|
||||
DEFSYM DPKID==240700,, ;PACK ID FIELD
|
||||
DEFSYM DCYL==131100,, ;CYLINDER CHECK FIELD
|
||||
DEFSYM DSURF==60500,, ;SURFACE CHECK FIELD
|
||||
DEFSYM DSECT==600,, ;SECTOR FIELD
|
||||
|
||||
;WORD 1 HEADER
|
||||
|
||||
DEFSYM DHIND==1000,, ;4.1 INDIRECT IF 1, CYL, SURF, SECTOR SAME AS ABOVE
|
||||
DEFSYM DHSPRT==400,, ;BIT 3.9 SOFTWARE PROTECT
|
||||
DEFSYM DHHPRT==200,, ;3.8 HARDWARE PROTECT
|
||||
DEFSYM DHNXAD==270200,, ;3.7, 3.6 HOW TO COMPUTE NEXT DISK ADR
|
||||
;=00 ADD 1 TO SECTOR
|
||||
;01 SET SECTOR TO 0, ADD 1 TO SURF
|
||||
;10 SET SECTOR AND SURFACE TO 0, ADD 1 TO CYL
|
||||
;11 END OF DISK
|
||||
DEFSYM DHEPB==10,, ;PARITY BIT FOR EVEN BITS OF 56 BIT HEADER
|
||||
DEFSYM DHOPB==4,, ;PARITY BIT FOR ODD BITS OF 56 BIT HEADER
|
||||
DEFSYM DHSLNG==1600,, ;-LENGTH OF SECTOR FIELD
|
||||
|
||||
;DISK ADDRESS DATA COMMANDS (OP CODES)
|
||||
|
||||
DEFSYM DRC==400000,, ;READ COMPARE
|
||||
DEFSYM DWRITE==440000,, ;WRITE
|
||||
DEFSYM DREAD==500000,, ;READ
|
||||
DEFSYM DSEEK==540000,, ;SEEK
|
||||
DEFSYM DRCC==600000,, ;READ COMPARE CONTINUOUS
|
||||
DEFSYM DWRITC==640000,, ;WRITE CONTINUOUS
|
||||
DEFSYM DREADC==700000,, ;READ CONTINUOUS
|
||||
|
||||
DEFSYM DUNENB==20000,, ;ENABLE LOAD UNIT FIELD
|
||||
DEFSYM DUNFLD==330400,, ;UNIT FIELD
|
||||
;PKID, CYL, SURF, AND SECTOR SAME AS ABOVE
|
||||
|
||||
;COPY / COMPARE / SKIP COMMAND
|
||||
|
||||
DEFSYM DCOPY==40000,, ;COPY
|
||||
DEFSYM DCCOMP==100000,, ;COMPARE
|
||||
DEFSYM DCSKIP==140000,, ;SKIP
|
||||
|
||||
DEFSYM DCWC==241400,, ;-WC FIELD
|
||||
DEFSYM DCCA==2400,, ;CORE ADDRES
|
||||
DEFSYM DCBN==121200,, ;BLOCK NUMBER
|
||||
|
||||
;JUMP COMMANDS
|
||||
DEFSYM DHLT==0 ;0 IN 4.9-4.5 = JUMP AND IN 3.5,3.6 = HALT
|
||||
DEFSYM DXCT==20,, ;XCT
|
||||
DEFSYM DJMP==40,, ;JUMP
|
||||
DEFSYM DJSR==60,, ;JSR
|
||||
|
||||
;"B" COMMAND BITS 3.3, 3.4
|
||||
;0 ALWAYS
|
||||
DEFSYM DAOJNC==4,, ;AOJN THE CONTROL COUNTER
|
||||
DEFSYM DDOK==10,, ;ON NO DATA ERROR
|
||||
DEFSYM DSRQF==14,, ;IF SEEK RQ FLAG ON
|
||||
|
||||
;STORE REGISTER COMMAND
|
||||
DEFSYM DSREG==240400,, ;STORE REG
|
||||
;USE, UNIT BITS SAME
|
||||
DEFSYM DSREGS==240300,, ;SOURCE REGISTER SELECT FIELD
|
||||
DEFSYM DSRDB==0 ;STORE DATA BUFFER
|
||||
DEFSYM DSRDL==4,, ;STORE DISK LOCATION
|
||||
DEFSYM DSRCC==10,, ;STORE COMMAND COUNT
|
||||
DEFSYM DSRPC==24,, ;STORE PC (IN FORM OF JMP INST.)
|
||||
DEFSYM DSRWC==30,, ;STORE WORD COUNT
|
||||
DEFSYM DSRCA==34,, ;STORE CORE ADDRESS (TO XFER DATA TO OR FROM)
|
||||
|
||||
;ALU COMMAND
|
||||
DEFSYM DALU==300000,, ;BASIC ALU OP CODE
|
||||
DEFSYM DALUX==40000,, ;INDEX BIT (ADD CC TO ADR)
|
||||
DEFSYM DALUD==40,, ;DIRECT BIT IF 1, REF MEM OT GET B OP
|
||||
|
||||
DEFSYM DASL==4000,, ;SKIP ON <0
|
||||
DEFSYM DASE==10000,, ;SKIP ON = 0
|
||||
DEFSYM DASLE==14000,, ;SKIP ON < OR = 0
|
||||
DEFSYM DASA==20000,, ;ALWAYS SKIP
|
||||
DEFSYM DASGE==24000,, ;SKIP ON > OR = 0
|
||||
DEFSYM DASN==30000,, ;SKIP ON NOT = 0
|
||||
DEFSYM DASG==34000,, ;SKIP ON > 0
|
||||
|
||||
;DESTINATION SUB OP (ALSO SPECIFIES SOURCE A)
|
||||
DEFSYM DLDB==0 ;OP A FROM DB, STORE IN DB
|
||||
DEFSYM DLDL==4,, ;OP FROM DL, STORE IN DL
|
||||
DEFSYM DLCC==10,, ;OP FROM CC, STORE IN CC
|
||||
DEFSYM DLCA==14,, ;OP A =0, STORE IN CA
|
||||
DEFSYM DLTDB==20,, ;TEST DB (OP A FROM DB, NO STORE)
|
||||
DEFSYM DLDBPC==24,, ;OP A FROM DB, STORE IN PC
|
||||
DEFSYM DLDBWC==30,, ;OP A FROM DB, STORE IN WC
|
||||
DEFSYM DLDBM==34,, ;OP A FROM DB, STORE IN MEM (DIRECT MUST BE ONE TO REALLY MAKE IT)
|
||||
|
||||
;SOME USEFUL (?) OPS
|
||||
DEFSYM DLADD==100,, ;A+B
|
||||
DEFSYM DLSOS==200,, ;B-1
|
||||
DEFSYM DLLB==300,, ;B
|
||||
DEFSYM DLSUB==400,, ;B-A
|
||||
|
||||
DEFSYM DLAND==2300,, ;A&B
|
||||
DEFSYM DLIOR==2500,, ;A IOR B
|
||||
DEFSYM DLLA==3100,, ;LOAD A
|
||||
DEFSYM DLSETO==3200,, ;-1
|
||||
DEFSYM DLSETZ==3300,, ;0
|
||||
|
||||
;OPR COMMAND
|
||||
DEFSYM DOPR==200000,, ;BASIC OPR
|
||||
DEFSYM DOHXFR==400,, ;HALT DURING XFER (SO MB WILL BE SAFE)
|
||||
DEFSYM DOCSRQ==200,, ;CLEAR SEEK RQ
|
||||
DEFSYM DOSSRQ==100,, ;SET SEEK RQ
|
||||
DEFSYM DOSCFL==40,, ;SET C FLAG
|
||||
|
||||
;STORE DRIVE STATUS
|
||||
DEFSYM DSDRST==240000,, ;STORE DRIVE STATUS
|
||||
;UNIT ENABLE, UNIT FIELD SAME
|
||||
DEFSYM DSDCNT==240400,, ;COUNT-1 FIELD
|
||||
|
||||
;BITS IN DRIVE STATUS STORED
|
||||
|
||||
DEFSYM DDSWC==40,, ;WRITE CURRENT SENSED
|
||||
DEFSYM DDSUNS==20,, ;DRIVE UNSAFE
|
||||
DEFSYM DDSRDO==10,, ;READ ONLY
|
||||
DEFSYM DDSSIC==4,, ;SEEK INCOMPLETE
|
||||
DEFSYM DDSRDY==2,, ;DRIVE READY
|
||||
DEFSYM DDSONL==1,, ;DRIVE ON LINE
|
||||
DEFSYM DDSSEL==400000 ;DRIVE SELECTED
|
||||
DEFSYM DDSCYL==101000,, ;PRESENT CYLINDER
|
||||
DEFSYM DDSLAT==1000,, ;LATENCY TIMER
|
||||
|
||||
;DISK ADR "SPECIAL COMMAND"
|
||||
|
||||
DEFSYM DSPC==740000,, ;BASIC OP CODE
|
||||
;USE, UNIT FIELDS AS NORMAL
|
||||
|
||||
; E CONDITION (WAIT)
|
||||
;0 NONE
|
||||
DEFSYM DSWIDX==20,, ;WAIT UNTIL INDEX PULSE
|
||||
DEFSYM DSWSEC==40,, ;WAIT UNTIL SECTOR PULSE
|
||||
DEFSYM DSWINF==60,, ;NEVER (USE WITH G=3 OR 7)
|
||||
|
||||
; F CONDITION (OTHER WAIT)
|
||||
DEFSYM DSWHDM==0 ;WAIT FOR MATCHING HEADER
|
||||
DEFSYM DSWAGH==4,, ;ANY GOOD HEADER
|
||||
DEFSYM DSWAH==10,, ;ANY HEADER
|
||||
DEFSYM DSWNUL==14,, ;NO WAIT
|
||||
|
||||
;G OPERATION
|
||||
DEFSYM DSCRDC==0 ;READ DATA THRU DECODERS
|
||||
DEFSYM DSCRIM==100,, ;READ DATA IMAGE
|
||||
DEFSYM DSCRHD==200,, ;READ HEADER WORDS
|
||||
DEFSYM DSRCAL==300,, ;(RECALIBRATE)
|
||||
DEFSYM DSCWDC==400,, ;WRITE THRU DECODERS
|
||||
DEFSYM DSCWIM==500,, ;WRITE IMAGE
|
||||
DEFSYM DSMAIT==700,, ;MAINTENANCE (PUT CYL FIELD ON BUS LINES WITH CONTROL TAG)
|
||||
|
||||
;BITS IN CONI DC0,
|
||||
DEFSYM DASSGN==400000,, ;ASSIGNED TO PROC (WITH SWITCH)
|
||||
DEFSYM DPIRQC==400000 ;PI REQ BEING GENERATED
|
||||
DEFSYM DSSRQ==200000 ;SEEK REQUEST
|
||||
DEFSYM DSDEEB==10000 ;ENABLE INTERRUPT ON DATA ERROR OR READ/ COMP ERROR
|
||||
DEFSYM DSSERR==4000 ;ERROR FLAG
|
||||
DEFSYM DSSAEB==2000 ;ATTENTION ENABLE FLAG
|
||||
DEFSYM DSSATT==1000 ;ATTENTION FLAG
|
||||
DEFSYM DSIENB==400 ;IDLE FLAG ENABLE
|
||||
DEFSYM DSSRUN==200 ;RUN
|
||||
DEFSYM DSSACT==100 ;ACTIVE
|
||||
DEFSYM DSSCEB==40 ;CHANNEL ENABLE
|
||||
DEFSYM DSSCHF==20 ;CHANNEL FLAG
|
||||
DEFSYM DSSCFL==10 ;CPU FLAG
|
||||
;PIA 1.3-1.1
|
||||
|
||||
;DATAO DC0, SENDS COMMAND TO DISK
|
||||
; (IGNORED IF EXECUTING COMMANDS FROM MEMORY)
|
||||
|
||||
;CONO DC0,
|
||||
DEFSYM DCSET==400000 ;SET SELECTED
|
||||
DEFSYM DCCLR==200000 ;CLEAR SELECTED
|
||||
DEFSYM DCCSET==600000 ;RESET CONTROLLER THEN SET SELECTED
|
||||
DEFSYM DCDENB==10000 ;DATA ERROR ENABLE
|
||||
DEFSYM DCERR==4000 ;SET ERROR FLAG OR CLEAR ALL ERRORS
|
||||
DEFSYM DCATEB==2000 ;ATTENTION ENABLE
|
||||
DEFSYM DCCATT==1000 ;CLEAR ATTENTION
|
||||
DEFSYM DCSSRQ==1000 ;SET SEEK REQUEST
|
||||
DEFSYM DCIENB==400 ;IDLE ENABLE
|
||||
DEFSYM DCSTAR==200 ;START (SET)
|
||||
DEFSYM DCSSTP==200 ;STOP (CLEAR)
|
||||
DEFSYM DCSGL==100 ;DO SINGLE COMMAND
|
||||
DEFSYM DCCENB==40 ;CHANNEL ENABLE
|
||||
DEFSYM DCCFLG==20 ;CHANNEL FLAG
|
||||
DEFSYM DCCPUF==10 ;CPU FLAG
|
||||
;1.1-1.3 PIA
|
||||
|
||||
;CONO DC1,
|
||||
|
||||
;SET TIMER DRIVE # FROM 1.1-1.3
|
||||
|
||||
;CONI DC1,
|
||||
;LH
|
||||
DEFSYM DSATDN==360400,, ;ATTENTION DRIVE #
|
||||
DEFSYM DSTMDN==320400,, ;TIMER DRIVE #
|
||||
DEFSYM DSLAT==221000,, ;LATENCY TIMER FOR DRIVE ABOVE
|
||||
|
||||
;RH (ERROR FLAGS)
|
||||
DEFSYM DIPE==4000 ;INTERNAL PARITY ERROR
|
||||
DEFSYM DRLNER==2000 ;RECORD LENGTH
|
||||
DEFSYM DRCER==1000 ;READ COMPARE ERROR
|
||||
DEFSYM DOVRRN==400 ;OVERRUN
|
||||
DEFSYM DCKSER==200 ;CKSUM OR DECODER ERR
|
||||
DEFSYM DWTHER==100 ;WATCHDOG TIMER
|
||||
DEFSYM DFUNSF==40 ;FILE UNSAFE, SEEK INCOMPLETE OR END OR DSK
|
||||
DEFSYM DOFFL==20 ;OFF LINE OR MULT SEL
|
||||
DEFSYM DPROT==10 ;WRT KEY OR RD ONLY OR PROTECT
|
||||
DEFSYM DDOBSY==4 ;DATAO WHEN BSY
|
||||
DEFSYM DNXM==2 ;NON-EX MEM
|
||||
DEFSYM DCPERR==1 ;CORE PARITY ERR
|
||||
|
||||
DEFSYM LRIBLK==16 ;CONSISTENCY CHECK DSKDMP VS MARK
|
||||
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
|
||||
BIN
src/system/ddt.68
Executable file
BIN
src/system/ddt.68
Executable file
Binary file not shown.
BIN
src/system/ddtdsk.31
Executable file
BIN
src/system/ddtdsk.31
Executable file
Binary file not shown.
6412
src/system/disk.1224
Executable file
6412
src/system/disk.1224
Executable file
File diff suppressed because it is too large
Load Diff
153
src/system/dmpcpy.11
Executable file
153
src/system/dmpcpy.11
Executable file
@@ -0,0 +1,153 @@
|
||||
; -*- MIDAS -*-
|
||||
|
||||
TITLE DMPCPY - COPY DUMPS FROM SWAP AREA TO FILE AREA
|
||||
|
||||
A=1
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
T=6
|
||||
TT=7
|
||||
P=17
|
||||
|
||||
CHDIRI=10
|
||||
CHDSKI=11
|
||||
CHDSKO=12
|
||||
|
||||
.INSRT SYSENG;FSDEFS >
|
||||
|
||||
PDL: -20,,.
|
||||
BLOCK 20
|
||||
|
||||
;DIRECTORIES WHERE STUFF MIGHT GET DUMPED OUT OF TIMESHARING
|
||||
DIRLST: SIXBIT/./
|
||||
SIXBIT/CRASH/
|
||||
SIXBIT/CRASH2/
|
||||
NDIRS==.-DIRLST
|
||||
|
||||
DIR: BLOCK 2000
|
||||
BUF: BLOCK 2000
|
||||
|
||||
USRVAR: SIXBIT /OPTION/ ? TLO %OPINT\%OPOPC
|
||||
SIXBIT /MASK/ ? MOVE [%PIIOC\%PIPDL]
|
||||
LUSRVAR==:.-USRVAR
|
||||
|
||||
GO: .CLOSE 1, ;RUNS AS DAEMON
|
||||
MOVE P,PDL
|
||||
MOVE TT,[-LUSRVAR,,USRVAR]
|
||||
.CALL [ SETZ ? SIXBIT /USRVAR/
|
||||
MOVEI %JSELF
|
||||
SETZ TT ]
|
||||
.LOSE %LSSYS
|
||||
CHKTIM: .CALL [ SETZ ? SIXBIT /RQDATE/ ; don't frob with files
|
||||
SETZM A ] ; if system doesn't know the time
|
||||
.LOSE %LSSYS
|
||||
AOJN A,KNOTIM
|
||||
MOVEI A,30.*15. ; 15 seconds
|
||||
.SLEEP A,
|
||||
JRST CHKTIM
|
||||
|
||||
KNOTIM: MOVSI E,-NDIRS
|
||||
CHKDIR: .CALL [ SETZ ? SIXBIT/OPEN/
|
||||
[.BII,,CHDIRI]
|
||||
[SIXBIT/DSK/]
|
||||
[SIXBIT/.FILE./]
|
||||
[SIXBIT/(DIR)/]
|
||||
SETZ DIRLST(E)]
|
||||
JRST NXTDIR ; Hey, there might not -be- such a directory!
|
||||
MOVE TT,[-2000,,DIR]
|
||||
.IOT CHDIRI,TT
|
||||
.CLOSE CHDIRI,
|
||||
MOVE D,UDNAMP+DIR
|
||||
CHKFIL: CAIL D,2000
|
||||
JRST NXTDIR
|
||||
MOVE TT,UNRNDM+DIR(D)
|
||||
SKIPGE UNDATE+DIR(D)
|
||||
TLNE TT,UNDUMP\UNIGFL\UNREAP\UNLINK ; Don't screw with files
|
||||
JRST NXTFIL ; you don't understand.
|
||||
;HERE WE HAVE FOUND A FILE WRITTEN OUT OF TIMESHARING
|
||||
;COPY IT SO AS TO (1) SET THE FILE DATE AND (2) GET IT OUT
|
||||
; OF THE SWAPPING AREA. NTS FILES ARE WRITTEN IN THE SWAPPING
|
||||
; AREA TO DECREASE THE PROBABILITY OF CLOBBERING SOME OTHER FILE.
|
||||
.CALL [ SETZ ? SIXBIT/OPEN/
|
||||
MOVES TT
|
||||
[.BII,,CHDSKI]
|
||||
[SIXBIT/DSK/]
|
||||
UNFN1+DIR(D)
|
||||
UNFN2+DIR(D)
|
||||
SETZ DIRLST(E) ]
|
||||
JSP T,[ CAIE TT,%ENSFL ; perhaps a hacker deleted it
|
||||
CAIN TT,%ENAPK ; perhaps that pack had to go offline
|
||||
JRST NXTFIL
|
||||
JRST LOSE ]
|
||||
.CALL [ SETZ ? SIXBIT/OPEN/
|
||||
MOVES TT
|
||||
[.BIO,,CHDSKO]
|
||||
[SIXBIT/DSK/]
|
||||
[SIXBIT/_DMPCP/]
|
||||
[SIXBIT/OUTPUT/]
|
||||
SETZ DIRLST(E) ]
|
||||
JSP T,[ CAIE TT,%EFLDR
|
||||
JRST LOSE
|
||||
MOVEI TT,30.*60.*5 ; 5 minutes
|
||||
.SLEEP TT,
|
||||
JRST .-1 ]
|
||||
CPYFIL: MOVE TT,[-2000,,BUF]
|
||||
.IOT CHDSKI,TT
|
||||
MOVEI T,-BUF(TT)
|
||||
JUMPE T,ENDFIL
|
||||
MOVNS T
|
||||
MOVSS T
|
||||
HRRI T,BUF
|
||||
.IOT CHDSKO,T
|
||||
JRST CPYFIL
|
||||
|
||||
ENDFIL: .CLOSE CHDSKI,
|
||||
.CALL [ SETZ ? 'RENMWO
|
||||
MOVEI CHDSKO
|
||||
UNFN1+DIR(D)
|
||||
SETZ UNFN2+DIR(D) ]
|
||||
.LOSE %LSSYS
|
||||
.CLOSE CHDSKO,
|
||||
NXTFIL: ADDI D,LUNBLK
|
||||
JRST CHKFIL
|
||||
|
||||
NXTDIR: AOBJN E,CHKDIR
|
||||
.LOGOUT 1,
|
||||
.VALUE
|
||||
|
||||
; JSP T,LOSE is like .LOSE %LSFIL(TT)
|
||||
LOSE: .CALL [ SETZ ? SIXBIT /LOSE/
|
||||
MOVEI %LSFIL(TT)
|
||||
SETZI -2(T) ]
|
||||
.LOSE %LSSYS
|
||||
|
||||
TSINT:
|
||||
LOC 42
|
||||
-LTSINT,,TSINT
|
||||
LOC TSINT
|
||||
P
|
||||
%PIIOC ? 0 ? %PIIOC ? 0 ? IOCINT
|
||||
LTSINT==:.-TSINT
|
||||
|
||||
; If there is a disk or directory full problem, wait for someone to notice.
|
||||
IOCINT: PUSH P,T
|
||||
.SUSET [.RBCHN,,T]
|
||||
CAIE T,CHDSKO
|
||||
.LOSE
|
||||
.STATUS CHDSKO,T
|
||||
LDB T,[330500,,T]
|
||||
CAIE T,11 ; DEVICE FULL
|
||||
CAIN T,14 ; DIRECTORY FULL
|
||||
JRST WAIT
|
||||
.VALUE
|
||||
|
||||
WAIT: MOVEI T,30.*60.*5 ; 5 minutes
|
||||
.SLEEP T,
|
||||
POP P,T
|
||||
.CALL [ SETZ ? SIXBIT /DISMIS/
|
||||
SETZ P ]
|
||||
.LOSE %LSSYS
|
||||
|
||||
END GO
|
||||
1882
src/system/dskdmp.215
Executable file
1882
src/system/dskdmp.215
Executable file
File diff suppressed because it is too large
Load Diff
56
src/system/dz11.10
Executable file
56
src/system/dz11.10
Executable file
@@ -0,0 +1,56 @@
|
||||
;-*-MIDAS-*-
|
||||
; DZ11 definitions
|
||||
|
||||
DZLNLN==3
|
||||
DZNLN==1_DZLNLN ;Number of DZ terminal lines per board
|
||||
DZLNM==DZNLN-1 ;Line number mask given DZ number of TTY
|
||||
|
||||
%DZLM==3400 ;Line Number Mask
|
||||
%DZLS==8. ;Line number shift
|
||||
|
||||
%DZRCS==0 ;Control & Status register
|
||||
; CSR Bits and fields
|
||||
%DZCMN==10 ;Maintenance
|
||||
%DZCCL==20 ;Clear
|
||||
%DZCMS==40 ;Master Scan Enable
|
||||
%DZCRE==100 ;Receiver Interrupt Enable
|
||||
%DZCRD==200 ;Receiver Done
|
||||
%DZCSE==10000 ;Silo Alarm Enable
|
||||
%DZCSA==20000 ;Silo Alarm
|
||||
%DZCTE==40000 ;Transmitter Interrupt Enable
|
||||
%DZCTR==100000 ;Transmitter Ready
|
||||
|
||||
%DZRLP==2 ;Line Parameter register
|
||||
; LPR Bits and fields
|
||||
%DZLLM==7 ;Line number mask
|
||||
%DZLCL==10 ;Character Length position
|
||||
%DZLSC==40 ;Stop code bit
|
||||
%DZLPY==100 ;Parity bit
|
||||
%DZLOP==200 ;Odd parity
|
||||
%DZLSP==400 ;Speed code position
|
||||
%DZLSS==8. ;Speed code shift
|
||||
%DZLRO==10000 ;Receiver on
|
||||
|
||||
%DZRDR==2 ;Read Data register
|
||||
; RDR Bits and fields
|
||||
%DZDCM==377 ;Character mask
|
||||
%DZDPE==10000 ;Parity Error
|
||||
%DZDFE==20000 ;Frame Error (break key)
|
||||
%DZDOR==40000 ;Overrun
|
||||
%DZDDV==100000 ;Data valid
|
||||
|
||||
%DZRTC==4 ;Transmitter Control & Data Terminal registers
|
||||
|
||||
%DZRTD==6 ;Transmitter Buffer & Break registers
|
||||
; TDR and BR fields
|
||||
%DZTCM==377 ;Character mask
|
||||
%DZTBM==177400 ;Break mask
|
||||
|
||||
%DZRMS==6 ;Modem status
|
||||
; MSR fields
|
||||
%DZMRI==377 ;Ring detect
|
||||
%DZMCD==177400 ;Carrier detect
|
||||
|
||||
; To do:
|
||||
; - Add modem control.
|
||||
|
||||
160
src/system/ept.defs16
Executable file
160
src/system/ept.defs16
Executable file
@@ -0,0 +1,160 @@
|
||||
IFN 0,[
|
||||
.AUXIL
|
||||
]
|
||||
|
||||
IF1,[
|
||||
.TYO6 .IFNM1
|
||||
.TYO 40
|
||||
.TYO6 .IFNM2
|
||||
PRINTX / included in this assembly.
|
||||
/
|
||||
];IF1
|
||||
|
||||
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [
|
||||
$$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEMP==1
|
||||
]
|
||||
.ELSE $$TEMP==0
|
||||
|
||||
|
||||
|
||||
IFNDEF EPT, EPT=1000 ;ABSOLUTE LOCATION OF EPT
|
||||
;LOCS 0-1777 UNCACHED
|
||||
;BUT THE HARDWARE CACHES EPT REFERENCES ANYWAY
|
||||
|
||||
DEFSYM PI0LOC=EPT+40 ;PI0LOC+2*PICHN = ADDRESS OF INSTR PAIR FOR PICHN
|
||||
|
||||
DEFSYM DTEBPO=EPT+140 ;DTE20 OUTPUT (BYTE TRANSFER) BYTE POINTER
|
||||
DEFSYM DTEBPI=EPT+141 ;DTE20 INPUT (BYTE TRANSFER) BYTE POINTER
|
||||
DEFSYM DTELOC=EPT+142 ;DTE20 INTERRUPT INSTRUCTION
|
||||
DEFSYM DTEPRO=EPT+144 ;DTE20 OUTPUT (EXAMINE) PROTECTION WORD
|
||||
DEFSYM DTERLO=EPT+145 ;DTE20 OUTPUT (EXAMINE) RELOCATION WORD
|
||||
DEFSYM DTEPRI=EPT+146 ;DTE20 INPUT (DEPOSIT) PROTECTION WORD
|
||||
DEFSYM DTERLI=EPT+147 ;DTE20 INPUT (DEPOSIT) RELOCATION WORD
|
||||
|
||||
DEFSYM EPTCLK=EPT+510 ;DOUBLE WORD FOR CALENDAR CLOCK (TIME BASE)
|
||||
DEFSYM EPTPRF=EPT+512 ;DOUBLE WORD FOR PERFORMANCE COUNTER
|
||||
DEFSYM EPTEBC==EPT+504 ;DOUBLE WORD EBOX COUNT WHEN UPT=EPT
|
||||
DEFSYM EPTMBC==EPT+506 ;DOUBLE WORD MBOX COUNT WHEN UPT=EPT
|
||||
DEFSYM TIMLOC=EPT+514 ;INTERRUPT INSTRUCTION FOR INTERVAL TIMER
|
||||
|
||||
DEFSYM EPTTR1=EPT+421 ;EXEC MODE ARITH OVFL TRAP
|
||||
DEFSYM EPTTR2=EPT+422 ;EXEC MODE PDL OV TRAP
|
||||
DEFSYM EPTTR3=EPT+423 ;EXEC MODE TRAP 3 (1 PROCEED)
|
||||
|
||||
;UPT LOCATIONS - IN NON-TIME SHARING AND AT CLOCK LEVEL IN ITS UPT=EPT
|
||||
|
||||
;424 MUUO STORED HERE
|
||||
;425 MUUO PC STORED HERE
|
||||
;426 MUUO DATAI PAG, HERE
|
||||
;430 MUUO NEW PC KERNEL NO TRAP
|
||||
;431 . . K T
|
||||
;432 . . S N T
|
||||
;433 . . S T
|
||||
;434 . . C N T
|
||||
;435 . . C T
|
||||
;436 . . P N T
|
||||
;437 . . P T
|
||||
;500 PAGE FAIL WORD STORED HERE IN DEC PAGING MODE
|
||||
;501 PAGE FAIL PC STORED HERE IN DEC PAGING MODE
|
||||
;502 PAGE FAIL NEW PC FROM HERE IN DEC PAGING MODE
|
||||
;504-5 EBOX COUNT
|
||||
;506-7 MBOX COUNT
|
||||
|
||||
DEFSYM EPTPFW=EPT+500 ;PAGE FAIL WORD STORED HERE IN ITS PAGING MODE
|
||||
DEFSYM PFOPC=EPT+501 ;PAGE FAIL OLD PC STORED HERE IN ITS PAGING MODE
|
||||
DEFSYM PFNPC=EPT+502 ;PAGE FAIL NEW PC OBTAINED FROM HERE IN ITS PAGING MODE
|
||||
|
||||
;LOW CORE
|
||||
;0-200 DF10S CHANNEL PROGRAMS, INTERRUPT LOCATIONS FOR IMP INTERFACE
|
||||
;400-500 DTE20 COMMUNICATION AREA (COMMUNICATE WITH KLDCP AND IOELEV)
|
||||
;500-1000 DL10 COMMUNICATION AREA AND BUFFERS (COMMUNICATE WITH IOELEV)
|
||||
|
||||
DEFSYM QICWA=32 ;ITS DISK ICWA
|
||||
DEFSYM QIOWD=160 ;ITS DISK IOWD AREA
|
||||
DEFSYM RCIOWD=162 ;.. FOR READ COMPARE
|
||||
|
||||
DEFSYM MICWA=30 ;ITS TAPE ICWA
|
||||
DEFSYM MIOWD=170 ;ITS TAPE IOWD AREA
|
||||
|
||||
;LUUO IN EXEC MODE LOCATIONS 40,41
|
||||
|
||||
DEFSYM SLVICW=60 ;SALVAGER ICWA
|
||||
DEFSYM SLVIOW=62 ;SALVAGER IOWD AREA
|
||||
|
||||
;EXEC DDT'S DISK ROUTINES USE LOCATIONS 20 AND 21, BUT THEY SAVE AND RESTORE THEM
|
||||
|
||||
DEFSYM IMPILC=70 ;IMPTERFACE INPUT INTERRUPT INSTRUCTION PAIR
|
||||
DEFSYM IMPOLC=72 ;IMPTERFACE OUTPUT INTERRUPT INSTRUCTION PAIR
|
||||
|
||||
;DTE20 STUFF AS DEFINED BY KLDCP, ETC.
|
||||
;THE DOCUMENTATION CLAIMS THIS STUFF IS IN THE EPT, BUT ACTUALLY
|
||||
;IT'S IN FIXED LOCATIONS IN LOW CORE.
|
||||
|
||||
DEFSYM EPTDIA=440 ;DIAGNOSTIC (SALV) START ADDRESS
|
||||
DEFSYM EPTDDT=441 ;DDT START ADDRESS
|
||||
DEFSYM EPTSTL=442 ;LOADER (DSKDMP) START ADDRESS
|
||||
DEFSYM EPTITS=443 ;MONITOR (ITS) START ADDRESS
|
||||
|
||||
DEFSYM DTEFLG=444 ;DTE20 OPERATION COMPLETE FLAG (SET BY 11, CLEARED BY 10)
|
||||
DEFSYM DTECLK=445 ;DTE20 CLOCK INTERRUPT FLAG (SET BY 11, CLEARED BY 10)
|
||||
;DEFSYM DTECI=446 ;DTE20 CLOCK INTERRUPT INSTRUCTION (USED BY 10 SOFTWARE)
|
||||
DEFSYM DTET11=447 ;DTE20 10->11 ARGUMENT (SET BY 10) (NOT USED?)
|
||||
DEFSYM DTEF11=450 ;DTE20 11->10 ARGUMENT (SET BY 11)
|
||||
DEFSYM DTECMD=451 ;DTE20 10->11 COMMAND WORD (SET BY 10)
|
||||
DEFSYM DTESEQ=452 ;DTE20 OPERATION SEQUENCE NUMBER (AOS BY 10)
|
||||
DEFSYM DTEOPR=453 ;DTE20 OPERATION IN PROGRESS FLAG (SET/CLEARED BY 10)
|
||||
DEFSYM DTECHR=454 ;DTE20 LAST TYPED CHARACTER (SET BY 11, CLEARED BY 10)
|
||||
DEFSYM DTEMTO=455 ;DTE20 MONITOR-MODE TYPEOUT DONE FLAG (SET BY 11, CLEARED BY 10)
|
||||
DEFSYM DTEMTI=456 ;DTE20 MONITOR-MODE TYPEIN DONE FLAG (SET BY 11, CLEARED BY 10)
|
||||
DEFSYM DTESWR=457 ;DTE20 SIMULATED SWITCH REGISTER (SET BY 11 ON START)
|
||||
|
||||
DEFSYM DTE==200 ;DTE20 #0 DEVICE CODE
|
||||
DEFSYM %DBL11==20000 ;CONO BIT TO "DOORBELL" 11
|
||||
DEFSYM %DBL10==1000 ;CONI BIT FOR DOORBEL FROM 11. CONO BIT TO CLEAR.
|
||||
;1.1-1.3 DTE20 PIA
|
||||
|
||||
;WORDS STORED IN DTECMD
|
||||
|
||||
DEFSYM %DTTTI==2400 ;BUFFERED INPUT. CHAR RETURNED IN DTEF11 AFTER LINE TYPED.
|
||||
;NUMBER 0-377 IS CHAR TO BE TYPED OUT (FLUSHES INPUT. BUFFER NOT PRINTED UNTIL LF/^G/^@)
|
||||
DEFSYM %DTTTO==2000 ;THIS + CHAR ALSO = TTY OUTPUT
|
||||
DEFSYM %DTTYI==3400 ;"DDT" INPUT, CHAR RETURNED IN DTEF11, ZERO IF NO CHAR TYPED
|
||||
DEFSYM %DTTYO==4000 ;THIS + CHAR = ITS (MONITOR) TTY OUTPUT.
|
||||
;WHEN TYPEOUT DONE, INTERRUPT WITH DTEMTO SET.
|
||||
;TYPEIN CAUSES INTERRUPT WITH DTEMTI SET, CHAR IN DTEF11.
|
||||
DEFSYM %DTMMN==4400 ;MONITOR MODE ON (DEFAULT WHEN START)
|
||||
DEFSYM %DTMMF==5000 ;MONITOR MODE OFF (TYPEIN OF A ^X DOES THIS ALSO)
|
||||
DEFSYM %DTMMS==5400 ;RETURN MONITOR MODE STATE IN DTEF11
|
||||
;DEFSYM %DTNRM==3000 ;NORMAL PRINT MODE
|
||||
;DEFSYM %DTFRC==3001 ;FORCED PRINT MODE
|
||||
DEFSYM %DTCLN==1001 ;CLOCK ON (60 CYCLE SIMULATED CLOCK)
|
||||
DEFSYM %DTCLF==1000 ;CLOCK OFF
|
||||
;DEFSYM %DTCLW==1002 ;"CLOCK WAIT" DTET11 HAS COUNT (? WHAT THE HECK IS THIS?)
|
||||
;DEFSYM %DTCLR==1003 ;RETURN "CLOCK COUNT" IN DTEF11 (? WHAT THE HECK IS THIS?)
|
||||
DEFSYM %DTHLT==400 ;HALT
|
||||
;DEFSYM %DTFTL==401 ;DIAG FATAL ERROR (ACTUALLY JUST TURNS OFF CLOCK)
|
||||
;DEFSYM %DTERR==402 ;DIAG ERROR HALT (ACTUALLY JUST TURNS OFF CLOCK)
|
||||
;DEFSYM %DTEPG==403 ;END OF DIAGNOSTIC PROGRAM
|
||||
;DEFSYM %DTEOP==404 ;END OF DIAGNOSTIC PASS
|
||||
;DEFSYM %DTCLK==405 ;GET "CLOCK DEFAULT WORD"
|
||||
;DEFSYM %DTFSL==406 ;DIAMON FILE SELECT (NAME.EXT MUST HAVE BEEN %DTTTO'ED)
|
||||
;DEFSYM %DTFRD==407 ;DIAMON FILE READ (5 CHARS OR -1 (EOF) RETURNED IN DTEF11)
|
||||
;DEFSYM %DTCMD==410 ;KLDCP COMMAND EXECUTED FROM OUTPUT BUFFER (%DTTTO IT)
|
||||
;DEFSYM %DTRSW==1400 ;RETURN SIMULATED SWITCHES IN DTEF11. 10 SHOULD THEN STORE IN DTESWR
|
||||
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
278
src/system/evsyms.21
Executable file
278
src/system/evsyms.21
Executable file
@@ -0,0 +1,278 @@
|
||||
;This purports to be a table of all ITS symbols
|
||||
;referenced by user programs, not counting sys$j in DDT.
|
||||
;to sort in TECO, do J6FXA 12U0 <:S0; -DK> CS;$:LL :FWLFWLL J<50L .-Z; 12I 13I 10I> JGA
|
||||
;The "5" is chosen to count these 4 comment lines, and the blank line.
|
||||
;Commented-out symbols are those for obsolete devices, used from PEEK/FIDO but not essential.
|
||||
|
||||
%QAACC ;used by PEEK
|
||||
%QACTH ;used by PEEK
|
||||
%QADEL ;used by PEEK
|
||||
%QAEFR ;used by PEEK
|
||||
%QAEFW ;used by PEEK
|
||||
%QAFUL ;used by PEEK
|
||||
%QAPAR ;used by PEEK
|
||||
%QAWOV ;used by PEEK
|
||||
%QMMDR ;used by PEEK
|
||||
%QMMDW ;used by PEEK
|
||||
%QMTTR ;used by PEEK
|
||||
%QMTTW ;used by PEEK
|
||||
%QMUDR ;used by PEEK
|
||||
%QMUDW ;used by PEEK
|
||||
AC0S ;used by PEEK
|
||||
APRC ;used by PEEK
|
||||
AUSOPG ;used by PEEK
|
||||
BADBTS ;used by DDT
|
||||
CALSXB ;used by PEEK
|
||||
CLSTB ;used by PEEK
|
||||
CUSER ;used by PEEK
|
||||
DCHSTB ;used by FIDO (.EVAL and core mapping)
|
||||
DCHSTB ;used by PEEK
|
||||
DEDTIM ;used by PFTHMG DRAGON
|
||||
DEVTAB ;used by PEEK
|
||||
;DG2 ;used by PEEK
|
||||
DIRCHN ;used by PEEK
|
||||
;DISUSR ;used by FIDO (.EVAL and core mapping)
|
||||
;DISUSR ;used by PEEK
|
||||
DMNBC ;used by PFTHMG DRAGON
|
||||
DMNBD ;used by NAMDRG
|
||||
DMNBD ;used by PFTHMG DRAGON
|
||||
DMNBEL ;used by NAMDRG
|
||||
DMNBEL ;used by PFTHMG DRAGON
|
||||
DMNBF ;used by NAMDRG
|
||||
DMNBF ;used by PFTHMG DRAGON
|
||||
DMNBFE ;used by PFTHMG DRAGON
|
||||
DMNSZ ;used by NAMDRG
|
||||
DPKBAS ;used by LOCK
|
||||
;DRTM ;used by PEEK
|
||||
EDEVS ;used by PEEK
|
||||
;EUPOS ;used by PEEK
|
||||
FLSINS ;used by PEEK
|
||||
HUSRAD ;used by PEEK
|
||||
IDF1 ;used by PEEK
|
||||
IDF2 ;used by PEEK
|
||||
IDLRCE ;used by PEEK
|
||||
IFPIR ;used by PEEK
|
||||
IMPBPQ ;used by PEEK
|
||||
IMPSTL ;used by PEEK
|
||||
IMPUP ;used by FIDO (.EVAL and core mapping)
|
||||
IMPUP ;used by PEEK
|
||||
IMPUP ;used by TELNET (and by other network programs I think - MRC)
|
||||
IMPUS ;used by COMSAT (.EVAL)
|
||||
IMPUS ;used by DDT
|
||||
IMPUS ;used by NAMDRG
|
||||
IMPUS ;used by NAME
|
||||
IMPUS ;used by QMAIL (.EVAL)
|
||||
IMSOC1 ;used by PEEK
|
||||
IMSOC2 ;used by PEEK
|
||||
IMSOC3 ;used by PEEK
|
||||
IMSOC4 ;used by PEEK
|
||||
IMSOC4 ;used by NAME and NAMDRG
|
||||
IMSOC5 ;used by PEEK
|
||||
IMSOC6 ;used by PEEK
|
||||
IMSOC7 ;used by PEEK
|
||||
IMSOC8 ;used by PEEK
|
||||
IOCHNM ;used by FIDO (.EVAL and core mapping)
|
||||
IOCHNM ;used by PEEK
|
||||
IOCHNM ;used by NAME and NAMDRG
|
||||
IOCHST ;used by FIDO (.EVAL and core mapping)
|
||||
IOCHST ;used by PEEK
|
||||
IOTLSR ;used by PEEK
|
||||
IOTTB ;used by PEEK
|
||||
JBDEV ;used by PEEK
|
||||
JNAME ;used by FIDO (.EVAL and core mapping)
|
||||
JNAME ;used by NAMDRG
|
||||
JNAME ;used by NAME
|
||||
JNAME ;used by PEEK
|
||||
JNAME ;used by PFTHMG DRAGON
|
||||
JTMU ;used by PEEK
|
||||
LIOBLK ;used by PFTHMG DRAGON
|
||||
LOSRCE ;used by PEEK
|
||||
LOUTIM ;used by PEEK
|
||||
LPTUSR ;used by FIDO (.EVAL and core mapping)
|
||||
LPTUSR ;used by PEEK
|
||||
LSCALL ;used by PEEK
|
||||
LUBLK ;used by COMSAT
|
||||
LUBLK ;used by FIDO (.EVAL)
|
||||
LUBLK ;used by NAMDRG
|
||||
LUBLK ;used by NAME
|
||||
LUBLK ;used by PEEK
|
||||
LUBLK ;used by PFTHMG DRAGON
|
||||
LUBLK ;used by CLU
|
||||
LUIOP ;used by PEEK
|
||||
MAXJ ;used by COMSAT
|
||||
MEMBLT ;used by PEEK
|
||||
MEMFR ;used by PEEK
|
||||
MEMPNT ;used by PEEK
|
||||
MMMPG ;used by PEEK
|
||||
MMPNP ;used by PEEK
|
||||
MMSWP ;used by PEEK
|
||||
;MPXBUF ;used by PEEK
|
||||
MSKST ;used by PEEK
|
||||
MSKST2 ;used by PEEK
|
||||
MTUSR ;used by PEEK
|
||||
MUR ;used by PEEK
|
||||
MURUSR ;used by PEEK
|
||||
N11TYS ;used by FIDO (.EVAL)
|
||||
N11TYS ;used by NAMDRG
|
||||
N11TYS ;used by NAME
|
||||
NCBCOM ;used by PEEK
|
||||
NCT ;used by FIDO (.EVAL)
|
||||
NCT ;used by LOCK
|
||||
NCT ;used by NAMDRG
|
||||
NCT ;used by NAME
|
||||
NCT ;used by PEEK
|
||||
NDPTYS ;used by LOCK
|
||||
NETDBO ;used by NAME and NAMDRG
|
||||
NETDUI ;used by NAME and NAMDRG
|
||||
NETP ;used by COMSAT (.EVAL)
|
||||
NETP ;used by QMAIL (.EVAL)
|
||||
NF11TY ;used by FIDO (.EVAL)
|
||||
NF11TY ;used by NAMDRG
|
||||
NF11TY ;used by NAME
|
||||
NFDPTY ;used by LOCK
|
||||
NFSTTY ;used by NAMDRG
|
||||
NFSTTY ;used by NAME
|
||||
NFSTTY ;used by PEEK
|
||||
NIOCHN ;used by NAME and NAMDRG
|
||||
NMPGS ;used by PEEK
|
||||
NNTYS ;used by LOCK
|
||||
NPGSWO ;used by PEEK
|
||||
NQCHN ;used by PEEK
|
||||
NQMFWR ;used by COMSAT (.EVAL and core mapping)
|
||||
NQS ;used by PEEK
|
||||
NSTTYS ;used by NAMDRG
|
||||
NSTTYS ;used by NAME
|
||||
NSTTYS ;used by PEEK
|
||||
NSWPGS ;used by PEEK
|
||||
NULTIM ;used by PEEK
|
||||
NUNITS ;used by PEEK
|
||||
NUTIC ;used by PEEK
|
||||
NUTOC ;used by PEEK
|
||||
;NVDUSR ;used by PEEK
|
||||
NXGPFW ;used by XGPSPL
|
||||
OIPBIT ;used by DDT
|
||||
OPRSXB ;used by PEEK
|
||||
PARERR ;used by PEEK
|
||||
;PDPUSR ;used by FIDO (.EVAL and core mapping)
|
||||
;PDPUSR ;used by PEEK
|
||||
PICLR ;used by PEEK
|
||||
PIRQC ;used by PEEK
|
||||
PLTUSR ;used by PEEK
|
||||
PRVUSR ;used by PEEK
|
||||
PSWOUS ;used by PEEK
|
||||
PTPUSR ;used by PEEK
|
||||
PTRUSR ;used by PEEK
|
||||
QFBLNO ;used by PEEK
|
||||
QIRRCV ;used by PEEK
|
||||
QSCRW ;used by PEEK
|
||||
QSMDN ;used by PEEK
|
||||
QSMPRP ;used by PEEK
|
||||
QSNLCN ;used by PEEK
|
||||
QSNUD ;used by PEEK
|
||||
QSRAC ;used by PEEK
|
||||
QUDFPR ;used by PEEK
|
||||
QUDPR ;used by PEEK
|
||||
QUSR ;used by PEEK
|
||||
RNABLU ;used by PEEK
|
||||
RPCL ;used by PEEK
|
||||
SCHHB ;used by PEEK
|
||||
SCLNET ;used by LOCK
|
||||
SHUTDN ;used by NAMDRG
|
||||
SHUTDN ;used by NAME
|
||||
SILNG ;used by PEEK
|
||||
SLOADU ;used by DDT
|
||||
SLOADU ;used by PEEK
|
||||
SOLNG ;used by PEEK
|
||||
SSCHDB ;used by PEEK
|
||||
STYSTS ;used by NAMDRG
|
||||
STYSTS ;used by NAME
|
||||
STYSTS ;used by PEEK
|
||||
SUEXIT ;used by PEEK
|
||||
SUPCOR ;used by LOCK
|
||||
SUPPRO ;used by COMSAT
|
||||
SUPPRO ;used by FIDO (.EVAL and core mapping)
|
||||
SUPPRO ;used by NAMDRG
|
||||
SUPPRO ;used by NAME
|
||||
SUPPRO ;used by PEEK
|
||||
SUPPRO ;used by PFTHMG DRAGON
|
||||
SUUOH ;used by PEEK
|
||||
SV40 ;used by PEEK
|
||||
SWPOPR ;used by PEEK
|
||||
SWRCE ;used by PEEK
|
||||
SYSUSB ;used by DDT
|
||||
SYSUSE ;used by DDT
|
||||
SYSYMB ;used by DDT
|
||||
SYSYME ;used by DDT
|
||||
;TABUSR ;used by PEEK
|
||||
TCTYP ;used by FIDO (.EVAL and core mapping)
|
||||
TIME ;used by NAMDRG
|
||||
TIME ;used by NAME
|
||||
TIME ;used by PEEK
|
||||
TIME ;used by PFTHMG DRAGON
|
||||
TRNLS1 ;used by PEEK
|
||||
TRNLST ;used by PEEK
|
||||
TRUMM ;used by PEEK
|
||||
TRUNTM ;used by PEEK
|
||||
TRUNTM ;used by PFTHMG DRAGON
|
||||
TSIPRQ ;used by PFTHMG DRAGON
|
||||
TSYSM ;used by PEEK
|
||||
TT11P ;used by NAMDRG
|
||||
TT11P ;used by NAME
|
||||
TTITM ;used by NAMDRG
|
||||
TTITM ;used by NAME
|
||||
TTYCHN ;used by LOCK
|
||||
TTYSTS ;used by FIDO (.EVAL and core mapping)
|
||||
TTYSTS ;used by NAMDRG
|
||||
TTYSTS ;used by NAME
|
||||
TTYTBL ;used by FIDO (.EVAL and core mapping)
|
||||
TTYTBL ;used by NAMDRG
|
||||
TTYTBL ;used by NAME
|
||||
TTYTBL ;used by PEEK
|
||||
TTYTYP ;used by FIDO (.EVAL and core mapping)
|
||||
TTYTYP ;used by LOCK
|
||||
TTYTYP ;used by NAMDRG
|
||||
TTYTYP ;used by NAME
|
||||
;UDIR ;used by PEEK
|
||||
;UDIRO ;used by PEEK
|
||||
;UGOAL ;used by PEEK
|
||||
;ULCTM ;used by PEEK
|
||||
UMASTER ;used by FIDO (.EVAL and core mapping)
|
||||
UMASTER ;used by PEEK
|
||||
UMNTR ;used by PEEK
|
||||
UNAME ;used by COMSAT
|
||||
UNAME ;used by FIDO (.EVAL and core mapping)
|
||||
UNAME ;used by NAMDRG
|
||||
UNAME ;used by NAME
|
||||
UNAME ;used by PEEK
|
||||
UNAME ;used by PFTHMG DRAGON
|
||||
UPC ;used by PEEK
|
||||
UPGCP ;used by PEEK
|
||||
UPGSEC ;used by PEEK
|
||||
UREALT ;used by PEEK
|
||||
USRSTG ;used by COMSAT
|
||||
USIPRQ ;used by PEEK
|
||||
USIPRQ ;used by PFTHMG DRAGON
|
||||
USIPRQ ;used by CLU
|
||||
USRHI ;used by COMSAT
|
||||
USRHI ;used by FIDO (.EVAL and core mapping)
|
||||
USRHI ;used by PEEK
|
||||
USRHI ;used by PFTHMG DRAGON
|
||||
USRRCE ;used by PEEK
|
||||
USTP ;used by PEEK
|
||||
USWPRI ;used by PEEK
|
||||
USWSCD ;used by PEEK
|
||||
USWST ;used by PEEK
|
||||
USYSN1 ;used by PEEK
|
||||
USYSNM ;used by PEEK
|
||||
;UTASS ;used by PEEK
|
||||
;UTBFS ;used by PEEK
|
||||
UTMPTR ;used by NAMDRG
|
||||
UTMPTR ;used by NAME
|
||||
UTMPTR ;used by PEEK
|
||||
UTRNTM ;used by PEEK
|
||||
UTRNTM ;used by PFTHMG DRAGON
|
||||
;UTTNO ;used by PEEK
|
||||
;UTUSR ;used by PEEK
|
||||
UUAC ;used by PEEK
|
||||
XJNAME ;used by COMSAT
|
||||
XUNAME ;used by COMSAT
|
||||
216
src/system/fsdefs.43
Executable file
216
src/system/fsdefs.43
Executable file
@@ -0,0 +1,216 @@
|
||||
.AUXIL
|
||||
|
||||
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [
|
||||
$$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEMP==1
|
||||
]
|
||||
.ELSE $$TEMP==0
|
||||
|
||||
;FILE SYSTEM PARAMETERS - APPLIES TO ALL ITS MACHINES
|
||||
|
||||
;9/5/79 - tut format changed!
|
||||
;8/19/90 - DM "funny" bit flushed
|
||||
|
||||
;MFD INFO
|
||||
|
||||
IFDEF NBLKS,[ ;MFDBLK KNOWN ONLY IF .INSRT APPROPRIATE PHYSICAL PARAMS FILE
|
||||
DEFSYM MFDBLK==NBLKS/2-1 ;LOC ON DISK
|
||||
DEFSYM MFDCYL==MFDBLK/NBLKSC
|
||||
DEFSYM MFDSRF==<MFDBLK-MFDCYL*NBLKSC>*SECBLK/NSECS
|
||||
DEFSYM MFDSEC==<MFDBLK-MFDCYL*NBLKSC>*SECBLK-MFDSRF*NSECS
|
||||
]
|
||||
;RANDOM INFO IN MFD
|
||||
DEFSYM MDNUM==0 ;ASCENDING DIR NUM
|
||||
DEFSYM MDNAMP==1 ;PNTR TO ORG OF USER NAME BLOCK AREA
|
||||
DEFSYM MDYEAR==2 ;CURRENT YEAR
|
||||
DEFSYM MPDOFF==3 ;DE-CORIOLIS CLOCK OFFSET
|
||||
DEFSYM MPDWDK==4 ;PREFERRED WRITING DISK (PHYSICAL DRIVE #)
|
||||
DEFSYM MDCHK==5 ;THIS WORD MUST BE M.F.D. (FOR CHECKING)
|
||||
DEFSYM MDNUDS==6 ;NUMBER USER DIRECTORIES (FOR CHECKING ONLY)
|
||||
DEFSYM LMIBLK==7 ;TOTAL STG USED BY HACKS LIKE THIS
|
||||
;USER NAME BLKS FROM C(MDNAMP) TO END
|
||||
DEFSYM LMNBLK==2 ;# WDS/BLK
|
||||
DEFSYM MNUNAM==0 ;6BIT USER NAME
|
||||
;SECOND WORD OF A USER-NAME BLOCK IS ZERO.
|
||||
;DECUUO CONTAINS A KLUDGE WHICH DEPENDS ON THIS,
|
||||
;PLEASE NOTIFY BUG-DECUUO BEFORE CHANGING IT.
|
||||
|
||||
;TUT INFO
|
||||
|
||||
IFDEF NBLKS,[
|
||||
DEFSYM TUTBLK==MFDBLK-NTUTBL ;LOC ON DISK
|
||||
DEFSYM TUTCYL==TUTBLK/NBLKSC
|
||||
DEFSYM TUTSRF==<TUTBLK-TUTCYL*NBLKSC>*SECBLK/NSECS
|
||||
DEFSYM TUTSEC==<TUTBLK-TUTCYL*NBLKSC>*SECBLK-TUTSRF*NSECS
|
||||
]
|
||||
DEFSYM TUTBYT==3 ;SIZE OF BYTES (USED TO BE 4)
|
||||
DEFSYM TUTBP==<440000+TUTBYT_6>,,
|
||||
DEFSYM TUTEPW==36./TUTBYT ;NUMBER OF ENTRIES PER WORD
|
||||
DEFSYM TUTMAX==1_TUTBYT
|
||||
DEFSYM TUTLK==TUTMAX-1 ;HIGHEST CODE MEANS LOCKED OUT
|
||||
DEFSYM TUTMNY==TUTLK-1 ;TUT MANY OR MORE REFS
|
||||
|
||||
;RANDOM INFO IN TUT (AT THE FRONT)
|
||||
DEFSYM QPKNUM==0 ;PACK #
|
||||
DEFSYM QPAKID==1 ;PACK ID
|
||||
DEFSYM QTUTP==2 ;FREE SPACE POINTER TO TRACK AREA. ADVANCE BY CYLINDERS
|
||||
DEFSYM QSWAPA==3 ;SWAPPING AREA. FIRST TRACK OF NON-SWAPPING AREA
|
||||
;NEW FILES WILL NOT BE WRITTEN LOWER THAN THIS.
|
||||
DEFSYM QFRSTB==4 ;FIRST BLOCK TUT'ED
|
||||
DEFSYM QLASTB==5 ;LAST BLOCK TUT'ED
|
||||
DEFSYM QTRSRV==6 ;-1 IF ONLY ALLOCATED DIRS CAN HAVE FILES ON THIS PACK
|
||||
;IF NOT 0 AND NOT -1, SIXBIT NAME OF "SECONDARY" PACK
|
||||
;STG FOR RANDOM INFO ^
|
||||
DEFSYM LTIBLK==20 ;BYTES MAPPING THE DISK START HERE
|
||||
|
||||
;UFD INFO
|
||||
;IF A IS RELATIVE LOCATION OF MFD ENTRY, USER DIR IS LOCATED IN
|
||||
;TRACK NUMBERED <A-2000+2*MDNUDS>/2 (SEE QFL2)
|
||||
|
||||
DEFSYM UFDBYT==6 ;SIZE OF BYTES (Do not change!)
|
||||
DEFSYM UFDBPW==36./UFDBYT ;NUMBER OF BYTES PER WORD
|
||||
|
||||
;RANDOM INFO IN UFD
|
||||
DEFSYM UDESCP==0 ;FS PNTR TO DESC AREA
|
||||
DEFSYM UDNAMP==1 ;PNTR TO ORG OF NAME AREA
|
||||
DEFSYM UDNAME==2 ;USER NAME (FOR CHECKING)
|
||||
DEFSYM UDBLKS==3 ;LEFT HALF HAS AMOUNT OF SPACE ALLOCATED (NOT USED
|
||||
; CURRENTLY BY SYSTEM), RIGHT HALF HAS NUMBER OF BLOCKS USED.
|
||||
DEFSYM UDALLO==4 ;IF NONZERO, LEFT HALF HAS DISK NUMBER, RIGHT
|
||||
; HALF HAS AMOUNT OF SPACE ALLOCATED
|
||||
DEFSYM UDDESC==11. ;FIRST LOC AVAIL FOR DESC
|
||||
|
||||
; 8/19/90 Due to the larger size of RP07s it was necessary to officially
|
||||
; flush the DM "funny" bit. This change only changes the comments in this
|
||||
; file, but any program that interprets UFD descriptors needs to be fixed
|
||||
; to not mask that bit out (as most of them currently do). Fortunately all
|
||||
; the known ITS filesystems have zeros in all their "funny" bits, so the
|
||||
; change is upward compatible.
|
||||
|
||||
; UFD descriptor format described:
|
||||
;
|
||||
; Each 6-bit byte is taken in turn and used to compute a sequence of block
|
||||
; numbers. If N is the current descriptor byte, and B is the current block
|
||||
; number (initially undefined), then N is interpreted as follows:
|
||||
;
|
||||
; 0 Marks the end of the file description.
|
||||
;
|
||||
; 1 to UDTKMX (1 to 14) "Take" N blocks.
|
||||
; Blocks B through B + N - 1 are the next N blocks of the file.
|
||||
; Set B := B + N .
|
||||
;
|
||||
; UDTKMX+1 to UDWPH-1 (15 to 36) "Skip" B - UDTKMX blocks.
|
||||
; Set N := N + B - UDTKMX .
|
||||
; (ITS has been broken for years such that it never uses this
|
||||
; UFD descriptor code!)
|
||||
;
|
||||
; UDWPH (37) Write Place Holder
|
||||
; A noop. Used to reserve space in directories for files that are
|
||||
; being written. Just skip over it and read the next byte.
|
||||
;
|
||||
; 40 - 77 Load address and take 1.
|
||||
; Read the next NXLBYT descriptor bytes (NXLBYT=2), N2 and N3.
|
||||
; Set B := LSH(AND(N, 37), 12.) + LSH(N2, 6) + N3 .
|
||||
; Block B is the next block in the file.
|
||||
; Set B := B + 1 .
|
||||
;
|
||||
; A zero length file is described as two bytes: UDWPH then 0. UDWPH does
|
||||
; not otherwise normally appear in UFD descriptions for closed files.
|
||||
; Note that a legal description must use codes 40 - 77 before it can use
|
||||
; any code other than UDWPH.
|
||||
|
||||
; Links are described as a sequence of SIXBIT characters terminated with a
|
||||
; 0 byte. The directory, first and second name are stored in order.
|
||||
; The first two components are terminated with a ";" if they are less than
|
||||
; 6 characters long. ";" (73), ":" (72) and " " (0) are quoted by
|
||||
; preceding them with a ":". Some examples:
|
||||
;
|
||||
; Link target names: Bytes stored in directory:
|
||||
;
|
||||
; 123456 123456 123456 "123456123456123456 "
|
||||
; ALAN FOO BAR "ALAN;FOO;BAR "
|
||||
; .MAIL. NAMES > ".MAIL.NAMES;> "
|
||||
; .MAIL. LISTS MSGS ".MAIL.: LISTS: : MSGS "
|
||||
; MOON LUNAR :EJ "MOON;LUNAR;::EJ "
|
||||
;
|
||||
; There are a lot of illegal or wasteful possibilities for link descriptors
|
||||
; ("A;B ", "A;B;C;D ", ":A;:B;:C ", etc.), which is suprising since
|
||||
; somebody was clearly trying to compress them into as few bytes as
|
||||
; possible.
|
||||
|
||||
; Here is the pre 8/19/90 comment describing UFD descriptors:
|
||||
;
|
||||
; ;UFD DESCRIPTORS
|
||||
; ;0 => FREE 1-UDTKMX => TAKE NEXT N
|
||||
; ;UDTKMX+1 THRU UDWPH-1 => SKIP N-UDTKMX AND TAKE ONE
|
||||
; ;UDWPH => WRITE-PLACE-HOLDER
|
||||
; ;40 BIT SET => LOAD ADDRESS. LOWER 5 BITS PLUS NEXT NXLBYT (2)
|
||||
; ; CHARS (17 BITS IN ALL)
|
||||
; ;40 BIT & 20 BIT => "FUNNY" BLOCK IF DMDSK. WHAT IS THIS, ANYWAY?
|
||||
; ;END BY 0
|
||||
;
|
||||
; ;IF LINK DESCR
|
||||
; ;6 CHAR OR UNTIL ; = SYS NAME. MUST HAVE NO CHAR = 0 IN THIS OR
|
||||
; ; NEXT 2 NAMES
|
||||
; ;NEXT CHAR QUOTED BY : (FOR NAMES WITH : OR ;)
|
||||
; ;NEXT CHAR N1
|
||||
; ;NEXT CHAR N2
|
||||
; ;END BY 0
|
||||
|
||||
DEFSYM UDTKMX==12. ;HIGHEST "TAKE N" CODE
|
||||
DEFSYM UDWPH==31. ;PLACE HOLDER ON WRITE (OR NULL FILE)
|
||||
DEFSYM UDSKMX==UDWPH-UDTKMX-1 ;# BLOCKS THAT CAN BE SKIPPED
|
||||
DEFSYM NXLBYT==2 ;# ADDITIONAL BYTES FOR LOAD ADDR
|
||||
;IN SYSTEM THIS IS DEFINED AT FRONT OF FILE
|
||||
|
||||
;NAME AREA DATA
|
||||
|
||||
DEFSYM LUNBLK==5 ;WDS/NAME BLK
|
||||
DEFSYM UNFN1==0 ;FIRST FN
|
||||
DEFSYM UNFN2==1 ;SECOND FN
|
||||
DEFSYM UNRNDM==2 ;ALL KINDS OF RANDOM INFO
|
||||
DEFSYM UNDSCP==1500,, ;PNTR TO DESC
|
||||
DEFSYM UNPKN==150500,, ;PACK #
|
||||
DEFSYM UNLINK==1 ;LINK BIT
|
||||
DEFSYM UNLNKB==220100,,
|
||||
DEFSYM UNREAP==2 ;IF 1, DONT REAP FILE
|
||||
DEFSYM UNWRIT==4 ;OPEN FOR WRITING
|
||||
DEFSYM UNMARK==10 ;GC MARK BIT
|
||||
DEFSYM UNCDEL==20 ;DEL WHEN CLOSED
|
||||
DEFSYM DELBTS==20 ;DELETED -- IGNORE
|
||||
DEFSYM UNIGFL==24 ;BITS TO IGNORE FILE
|
||||
DEFSYM UNWRDC==301200,, ;WORD COUNT OF LAST BLOCK MOD 2000
|
||||
DEFSYM UNDUMP==400000 ;HAS BEEN DUMPED
|
||||
DEFSYM UNDATE==3 ;DATE ETC.
|
||||
DEFSYM UNTIM==2200,, ;COMPACTED TIME OF CREATION
|
||||
DEFSYM UNYMD==222000,, ;Y,M,D OF CREATION
|
||||
DEFSYM UNMON==270400,, ;MONTH
|
||||
DEFSYM UNDAY==220500,, ;DAY
|
||||
DEFSYM UNYRB==330700,, ;YEAR
|
||||
DEFSYM UNREF==4 ;REFERENCE DATE SAME AS LEFT HALF OF UNDATE
|
||||
DEFSYM UNREFD==222000,, ;REFERENCE DATE BYTE POINTER
|
||||
DEFSYM UNAUTH==111100,, ;MFD INDEX OF AUTHOR, ALL 1=> NO DIRECTORY
|
||||
DEFSYM UNBYTE==001100,, ;FILE BYTE SIZE AND LENGTH INFO.
|
||||
;LET S=BITS PER BYTE, C=COUNT OF UNUSED BYTES IN LAST WD
|
||||
;400+100xS+C S=1 TO 3 C=0 TO 35.
|
||||
;200+20xS+C S=4 TO 7 C=0 TO 8
|
||||
;44+4xS+C S=8 TO 18. C=0 TO 3
|
||||
;44-S S=19. TO 36. C=0
|
||||
;NOTE THAT OLD FILES HAVE UNBYTE=0 => S=36.
|
||||
|
||||
IF1 IFDEF NUDSL, IFG NUDSL*LMNBLK+LMIBLK-2000,.ERR MFD LOSES
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
931
src/system/imp.365
Executable file
931
src/system/imp.365
Executable file
@@ -0,0 +1,931 @@
|
||||
;;; -*- Mode:MIDAS -*-
|
||||
|
||||
IMPVRS==.IFNM2 ; Version of IMP code
|
||||
|
||||
IFN NCPP,.FATAL IMP Code doesn't support NCP any more!
|
||||
IFE KSIMP,.FATAL Wrong IMP driver file included!
|
||||
|
||||
OVHMTR IMP ;Charge all this stuff to the IMP
|
||||
|
||||
$INSRT LHDH
|
||||
|
||||
; IMP 1822 PROTOCOL INFORMATION (EXTENDED-LEADER VERSION)
|
||||
|
||||
; The IMP leader is 96 bits long, usually organized as 3 words of 32 bits.
|
||||
; For further details, these documents are available from the Network
|
||||
; Information Center:
|
||||
; IMP-HOST protocol: BBN Report No. 1822
|
||||
; NCP protocol: NIC 8246, Host-to-Host Protocol for the ARPANET
|
||||
; IP, TCP: Internet Protocol Transition Workbook, and
|
||||
; Internet Protocol Implementor's Guide
|
||||
;
|
||||
; Here is the leader format used by the IMP code. This format uses
|
||||
; no IMP padding, assumes IP only, and expects all IMP<->HOST data
|
||||
; transfers in 32-bit mode.
|
||||
;
|
||||
; Previous versions of this code which supported NCP used a much more
|
||||
; complicated leader formatting scheme based on 36 bit transfers and
|
||||
; IMP padding. That scheme is dead, see SYSTEM;IMPOLD WTHNCP for details.
|
||||
;
|
||||
; All data from the IMP interface ends up in the -10 as left-justified
|
||||
; 32-bit words. Objects of less than 32 bits length, such as IP octets,
|
||||
; are stored in PDP10 ILDB byte order.
|
||||
;
|
||||
;------------------------------------------------------------------------
|
||||
;1: 4.9-4.6 not used (0)
|
||||
; 4.5-4.2 all 1's for new format, else old msg type (4=old nop)
|
||||
; 4.1-3.3 network number (0)
|
||||
; 3.2-2.8 not used (0)
|
||||
; 2.7 trace (ignored)
|
||||
; 2.6-2.4 leader flags (2.6 is to be ignored, 2.5-2.4 are not used!)
|
||||
; 2.3-1.5 message type
|
||||
;
|
||||
;2: 4.9-4.2 Handling type (7 for big buffers, 4 for small buffers,
|
||||
; 0 for the control link)
|
||||
; 4.1-3.3 Host number on IMP
|
||||
; 3.2-1.5 IMP number
|
||||
;
|
||||
;3: 4.9-4.2 Link Number (High 8 bits of Message ID)
|
||||
; 4.1-3.7 Low 4 bits of Message ID (0)
|
||||
; 3.6-3.3 Sub-type
|
||||
; 3.2-1.5 Message length
|
||||
;------------------------------------------------------------------------
|
||||
;4: 4.9-1.5 First word of IP datagram
|
||||
; ....
|
||||
;------------------------------------------------------------------------
|
||||
;
|
||||
;In message types 2 and 6, the going-down status 16-bit word is
|
||||
;in word 3 bits 4.9-3.3.
|
||||
|
||||
;3.6-3.3 of word 3 are the padding count for type 4 (nop) from host.
|
||||
;This is currently 0 (none). Padding is only put on type-0 messages.
|
||||
|
||||
IMPLDS==3 ;IMP local leader size
|
||||
|
||||
;Byte pointers to fields of input leader
|
||||
IMOTBP: 340400,,IMPILB+0 ;Message format type
|
||||
IMTBP: 041000,,IMPILB+0 ;Message type field
|
||||
IMSABP: 043000,,IMPILB+1 ;Source address field (host+IMP)
|
||||
IMSHBP: 241000,,IMPILB+1 ;Source host field
|
||||
IMSIBP: 042000,,IMPILB+1 ;Source IMP field
|
||||
IMLNBP: 341000,,IMPILB+2 ;Link number field
|
||||
IMSTBP: 240400,,IMPILB+2 ;Subtype field
|
||||
IMMLBP: 042000,,IMPILB+2 ;Message length field
|
||||
|
||||
|
||||
|
||||
SUBTTL ARPANET VARIABLES AND TABLES
|
||||
|
||||
EBLK
|
||||
|
||||
%IMXLN==:<<8159.-96.>+31.>/32. ; Max # of 32-bit words in IMP regular msg,
|
||||
; exclusive of leader and leader padding. = 252.
|
||||
|
||||
%IMMTU==:251.*4 ; Used by IP/TCP. Driver currently rounds to PDP10 words,
|
||||
; forcing this to be 1004 instead of 1007.
|
||||
|
||||
; ACTIVE HOST TABLE. Entries herein are allocated as needed, using garbage
|
||||
; collection. Most "host number" fields are really indices into this table.
|
||||
;
|
||||
LIMPHT==<XBL+10.> ; TCP conns plus a few extra
|
||||
|
||||
IMPHTF: -1 ;Host table free list, threaded through IMPHTB, end with -1
|
||||
|
||||
IMPHTS: ;Start of table area
|
||||
IMPHTN: BLOCK LIMPHT ; Host number. 1.1-1.8 HOST, 2.1-3.7 IMP
|
||||
IMPHTB: BLOCK LIMPHT ;Bits:
|
||||
;4.9 UNUSED
|
||||
;4.8 GC MARK BIT
|
||||
;4.7-4.3 UNUSED
|
||||
;4.2-4.1 STATUS OF HOST 0 DOWN, 1 RST SENT, 2 UP
|
||||
;3.9-3.1 UNUSED
|
||||
.SEE IMPHDS ;RH Last message from IMP about "host dead status"
|
||||
IMPHTC: BLOCK LIMPHT ; # active messages outstanding for host (8 max)
|
||||
IMPHTT: BLOCK LIMPHT ; Time of last RFNM received
|
||||
IMPHTE==.-1 ;Last location in table
|
||||
|
||||
;Status variables
|
||||
;
|
||||
IMPUP: -1 ;0 => IMP up ;-1 => down ;-2 => coming up, PI still off
|
||||
;1 => down for good, until next time IMP ready line changes
|
||||
IMPTCU: 0 ;0 IMP up/down status not changing
|
||||
;>0 Trying to reinitialize, SYSJOB hasn't done so yet
|
||||
;-1 Has been reinitialized, haven't exchanged NOPs yet
|
||||
IMPUCT: 0 ;IMP coming up timeout, if 4 NOPs don't go through promptly.
|
||||
IMPDWN: BLOCK 3 ;Last message from IMP that it is going down
|
||||
;WD0: "Reason" claimed by IMP (see ch 3 of BBN report 1822)
|
||||
;WD1: Time when expected down
|
||||
;WD2: Time when expected up (SYS time=1/30 sec since up)
|
||||
|
||||
IMERCN: -1 ;CONI into here when net goes down
|
||||
|
||||
BBLK
|
||||
|
||||
EBLK
|
||||
|
||||
;Input side variables
|
||||
;
|
||||
IMPILB: BLOCK IMPLDS ;Input leader buffer
|
||||
IMPCSH: -1 ;Current source host (IMPHTB index). -1 when idle.
|
||||
IMPCLN: 0 ;Current link number
|
||||
IMIFLS: 0 ;Flushing output at interrupt handler
|
||||
IMPIEC: 0 ;Count of input errors while down.
|
||||
IMPIBC: 0 ;Count of words available in DMA input buffer
|
||||
IMPIBP: 0 ;Pointer into DMA input buffer
|
||||
|
||||
;Output side variables
|
||||
;
|
||||
;Output leader buffer
|
||||
IMOLDR: <17_10.>,,0 ;Regular new-format message
|
||||
IMOLAD: 0 ;Filled in with destination IMP address
|
||||
<233_10.>,,0 ;IP link field
|
||||
|
||||
IMNOPC: 0 ;< 0 => Send NOPs
|
||||
IMPOAC: -1 ;>= 0 => Output active, don't restart
|
||||
IMPBZY: 0 ;-1 == Waiting for output interrupt
|
||||
IMPODP: 0 ;Pointer to IP datagram being output at PI level
|
||||
IMPOS: 0 ;Output state
|
||||
%ISODL==:0 ; Not expecting output done (i.e. between messages)
|
||||
%ISONP==:1 ; Sending NOP
|
||||
%ISOID==:2 ; Sending IP Datagram
|
||||
|
||||
;Meters
|
||||
|
||||
;IP meters
|
||||
IMNIPI: 0 ; # of IP datagrams input (rcvd)
|
||||
IMNIPF: 0 ; # of IP datagrams flushed (input threw away)
|
||||
IMNIPO: 0 ; # of IP datagrams output (sent)
|
||||
IMNIPR: 0 ; # of IP RFNMs received
|
||||
IMNIP7: 0 ; # of IP Type 7 (Dest Host Dead) messages received
|
||||
IMNIP8: 0 ; # of IP Type 8 (Error) msgs rcvd
|
||||
IMNIP9: 0 ; # of IP Type 9 (Incomplete Transmission) msgs rcvd
|
||||
IMNWIG: 0 ; # words ignored by "Ignore" state (%ISIGN)
|
||||
IMNWIF: 0 ; # words flushed by IMPRM5
|
||||
|
||||
;IMP meters
|
||||
IMNSRF: 0 ;Number of spurious RFNMs on non-IP links
|
||||
IMNBLK: 0 ;Number of times blockage avoided (output held up by ITS)
|
||||
|
||||
IMPMSR: BLOCK 20;Count of IMP messages rcvd
|
||||
IMPM1S: BLOCK 4 ; # Type 1 (Error in Leader) subtype msgs
|
||||
IMPM9S: BLOCK 2 ; # Type 9 (Incomplete Transmission) subtype msgs
|
||||
IMPMSS: BLOCK 1 ;Count of IMP msg sent (we only send regular msgs)
|
||||
IMCT1: 0 ;# Unvectored interrupts
|
||||
IMCT2: 0 ;# Valid input interrupts
|
||||
IMCT3: 0 ;# Valid output interrupts
|
||||
BBLK
|
||||
|
||||
SUBTTL ARPANET MAIN-PROGRAM LEVEL
|
||||
;IMPIBF, IMPOBF defined as low-memory buffer page in ITS
|
||||
IF2,IFN IMPIBF&777,.FATAL IMPIBF not on DEC page boundary
|
||||
|
||||
;(Re)Start IMP. Called from SYSJOB to start IMP, or on error or
|
||||
; user requested cycle through LOCK
|
||||
;
|
||||
IMPINI: SETOM IMPUP ;Not up yet,
|
||||
SETOM IMPTCU ; but thinking about it.
|
||||
MOVEI A,IMPIBF_-9. ;DEC page # of IMP buffer page
|
||||
TRO A,%UQ16B\%UQVAL ;Valid mapping, 16 bit device
|
||||
IOWRI A,UBAPAG+IUIMPG_1 ;Set up 1 DEC page of UBA mapping. Note that
|
||||
; the second half of IUIMPG isn't mapped at all
|
||||
CONO PI,NETOFF ;Freeze things while IMP bashing occurs
|
||||
MOVEI A,%LHRST
|
||||
IOWRI A,%LHOCS ;Reset output side
|
||||
IOWRI A,%LHICS ;Reset Input side
|
||||
|
||||
;IMP now shut down. Reset variables
|
||||
SKIPE A,IMPODP ;Have an output datagram ?
|
||||
PUSHJ P,IPIODN ;Yep, release it.
|
||||
SETZM IMPODP ;No output datagram
|
||||
SETZM IMPOS ;Output idle
|
||||
SETOM IMPOAC ;Output interrupt level inactive
|
||||
SETZM IMPBZY ;No pending output interrupt
|
||||
|
||||
SETZM IMPIBC ;No input available
|
||||
SETZM IMPIEC ;No input errors yet
|
||||
SETZM IMIFLS ;Not flushing input at interrupt level
|
||||
SETOM IMPCSH ;No current host table index
|
||||
SETOM IMPDWN+1 ;Time for IMP to go down, not known
|
||||
CONO PI,NETON ;Allow interrupts again
|
||||
|
||||
;Wait one sec for IMP to notice rdy line drop
|
||||
MOVE T,TIME
|
||||
ADDI T,30.
|
||||
CAMLE T,TIME
|
||||
PUSHJ P,UFLS
|
||||
|
||||
MOVNI A,30. ;Allow 15 seconds to come up
|
||||
MOVEM A,IMPUCT
|
||||
MOVE T,TIME ;Note when we last started IMP
|
||||
MOVEM T,LNETIM
|
||||
PUSHJ P,IMPHRS ;Set host ready
|
||||
PUSHJ P,IMPIST ;Start input
|
||||
|
||||
MOVE T,TIME
|
||||
ADDI T,15. ;Wait 1/2 sec before we try to output
|
||||
CAMLE T,TIME
|
||||
PUSHJ P,UFLS
|
||||
MOVNI A,4
|
||||
MOVEM A,IMNOPC ;Send 4 NOPs to start
|
||||
;Falls through to start output
|
||||
|
||||
;Start IMP output
|
||||
;
|
||||
IMPOST:
|
||||
IMPIOS: CONO PI,PIOFF ;Freeze.
|
||||
AOSE IMPOAC ;Do nothing if output already active.
|
||||
JRST PIONJ
|
||||
SETOM IMPBZY ;Note we want an IMP interrupt
|
||||
CONO PI,NETRQ ;Force nonvectored IMP interrupt
|
||||
JRST PIONJ
|
||||
|
||||
;Check if IMP ready line is set
|
||||
; Called from SYSJOB.
|
||||
; Return +1 if IMP not ready, +2 if so
|
||||
;
|
||||
IMPCKR: IORDI A,%LHICS ;Get input CSR
|
||||
TRNN A,%LHINR ;Skip if IMP not ready
|
||||
AOS (P) ;Return +2 if ready
|
||||
POPJ P, ;That's all
|
||||
|
||||
;Set HOST READY. From SYS job only, please, loops waiting.
|
||||
;
|
||||
IMPHRS: IORDI T,%LHICS
|
||||
TRNN T,%LHRDY ;Can we mung?
|
||||
BUG
|
||||
IORI T,%LHHRC\%LHSE ;Turn on HR. SE prevents dropping messages
|
||||
IOWRI T,%LHICS
|
||||
MOVEI A,777777 ;I don't know why this takes so long.
|
||||
IMPHR1: IORDI T,%LHICS ;Get the bits back
|
||||
TRNE T,%LHHR ;LHDH thinks host ready is ready
|
||||
RET ;HR line set
|
||||
SOJG A,IMPHR1 ;Timed out yet?
|
||||
BUG CHECK,[IMP: Timed out setting Host Ready]
|
||||
RET
|
||||
|
||||
SUBTTL HOST-TABLE MANAGEMENT
|
||||
|
||||
;IMPHTI - Initialize host table
|
||||
; Performed whenever IMP announces that it has been reset
|
||||
;
|
||||
IMPHTI: SETOM IMPHTF ;Force GC of IMPHTB on first reference
|
||||
SETZM IMPHTS ;Clear table of old information
|
||||
MOVE A,[IMPHTS,,IMPHTS+1]
|
||||
BLT A,IMPHTE
|
||||
POPJ P,
|
||||
|
||||
; FNDHST - Look up host-table index for a given IMP host address.
|
||||
; Call with NETOFF or NETCHN PI in progress.
|
||||
; T/ IMP host address (maybe someday other nets?)
|
||||
; Returns .+1 if failed (no room in table)
|
||||
; Returns .+2
|
||||
; H/ host-table index
|
||||
; Smashes W.
|
||||
|
||||
FNDHST: MOVEI H,LIMPHT-1 ;Search for an entry for this host
|
||||
CAME T,IMPHTN(H)
|
||||
SOJGE H,.-1
|
||||
JUMPGE H,POPJ1 ;Found
|
||||
SKIPGE H,IMPHTF ;Not found, cons one off free list
|
||||
JRST FNDHS1 ;Oops, must garbage collect
|
||||
MOVE W,IMPHTB(H)
|
||||
CAIGE H,LIMPHT ;Make sure H is valid idx
|
||||
CAIL W,LIMPHT ;ditto W
|
||||
BUG HALT,[NET: FNDHST idx clobbered!!!]
|
||||
MOVEM W,IMPHTF
|
||||
MOVEM T,IMPHTN(H)
|
||||
SETZM IMPHTB(H) ;Nothing is known about this host
|
||||
SETZM IMPHTC(H) ;Assume no RFNMs outstanding
|
||||
SETZM IMPHTT(H) ;Clear out time of last RFNM.
|
||||
JRST POPJ1
|
||||
|
||||
; Host-Table full, attempt to GC it and flush unused entries, by
|
||||
; scanning all possible pointers into table.
|
||||
; IMP pointers are IMPCSH and IMPHTC(H)
|
||||
; TCP pointers are XBNADR(I)
|
||||
|
||||
; GC mark phase - mark entries in use
|
||||
FNDHS1: PUSH P,I
|
||||
MOVSI W,200000 ;Mark bit
|
||||
MOVEI H,LIMPHT-1 ;Clear all mark bits
|
||||
ANDCAM W,IMPHTB(H)
|
||||
SOJGE H,.-1
|
||||
SKIPL H,IMPCSH ;Mark from IMPCSH
|
||||
IORM W,IMPHTB(H)
|
||||
IFN TCPP,[
|
||||
MOVEI I,XBL-1
|
||||
SKIPL H,XBNADR(I) ; See if TCP conn has a net addr specified
|
||||
IORM W,IMPHTB(H) ; Yes, set the mark bit.
|
||||
SOJGE I,.-2
|
||||
] ;IFN TCPP
|
||||
|
||||
; GC sweep phase - free all unmarked entries
|
||||
SETO I, ;Free pointer
|
||||
MOVEI H,LIMPHT-1
|
||||
MOVSI W,601000 ;Protect if RFNM-WAIT, RST-WAIT, or marked
|
||||
FNDHS4:
|
||||
SKIPG IMPHTC(H) ;Also protect if any outstanding RFNMs
|
||||
TDNE W,IMPHTB(H)
|
||||
SOJGE H,FNDHS4
|
||||
JUMPL H,FNDHS5
|
||||
SETZM IMPHTN(H) ;Don't belong to any host
|
||||
MOVEM I,IMPHTB(H) ;Cons onto free list
|
||||
MOVE I,H
|
||||
SOJGE H,FNDHS4
|
||||
FNDHS5: MOVEM I,IMPHTF ;Free list
|
||||
POP P,I
|
||||
SKIPGE IMPHTF
|
||||
POPJ P, ;GC-overflow
|
||||
JRST FNDHST ;Try again, should win
|
||||
|
||||
;See if IMP code is willing to handle a particular datagram right now.
|
||||
; A/ IP DGM pointer
|
||||
; C/ Immediate destination address
|
||||
; Returns +1, can't send right now, +2, OK to send
|
||||
;
|
||||
IMPCTS: MOVE T,C ;Set up for FNDHST
|
||||
AND T,[<377_16.>+377] ;Mask out all but host and IMP field
|
||||
CALL FNDHST ;Get host index in H
|
||||
POPJ P, ;No host entry, don't send
|
||||
JSP T,IMPBLI ;See if OK to send
|
||||
POPJ P, ;IMP wants to block, no send
|
||||
JRST POPJ1 ;Skip return if OK to send.
|
||||
|
||||
|
||||
;;; IMP Blockage avoidance
|
||||
; The current IMP software will not accept more than 8 active
|
||||
; messages to a single host; attempting to send a 9th message will block
|
||||
; ALL output to the interface, until the first message has been ack'd
|
||||
; by means of one of the following message types:
|
||||
; Type 5, RFNM - Message delivered OK
|
||||
; Type 7, Host dead - transmit failed ("permanent")
|
||||
; Type 8, Error in data - interface spazzed
|
||||
; Type 9, Incomplete Transmission - temporary failure
|
||||
; If for some reason the first message simply becomes lost, the IMP timeout
|
||||
; (and blockage) can last for up to 30-45 seconds.
|
||||
; More details in BBN Report 1822.
|
||||
; ITS attempts to fix this by keeping a count of active un-ACKed
|
||||
; messages for each host it is communicating with. A timeout is also
|
||||
; associated with each host; if output to a given host is blocked by ITS
|
||||
; because there are 8 active messages, trying to send a 9th message
|
||||
; will check the last-RFNM-received time and if this was more than
|
||||
; 30 or so seconds then the IMP is probably not giving us what it should
|
||||
; and we should reset things for that host.
|
||||
|
||||
%IMPMA==:8. ; # of maximum active IMP messages allowed
|
||||
|
||||
; IMPBLI, IMPBLD - routines to hack active-message counts, called via JSP T,
|
||||
; IMPBLD decrements count.
|
||||
; IMPBLI increments count and skips if successful (else failed,
|
||||
; and must NOT output another message to this host!)
|
||||
; Also clobbers Q.
|
||||
;
|
||||
IMPBLI: AOS Q,IMPHTC(H)
|
||||
CAIGE Q,%IMPMA ;Trying to send max or more messages?
|
||||
JRST 1(T) ;No, can return safely.
|
||||
CAIG Q,%IMPMA ;Is this the maximum # allowed?
|
||||
JRST [ MOVE Q,TIME ;Yes, set up blockage timeout
|
||||
ADDI Q,60.*30. ; for one minute.
|
||||
MOVEM Q,IMPHTT(H)
|
||||
JRST 1(T)] ;And allow this one to be sent
|
||||
|
||||
; Trying to send too many messages, block it (check for timeout though)
|
||||
SOS IMPHTC(H) ;Restore original count
|
||||
AOS IMNBLK ;Increment # of times softwarily blocked.
|
||||
MOVE Q,IMPHTT(H)
|
||||
CAML Q,TIME ;See if timeout still in the future
|
||||
JRST (T) ;Yes, just take failure-return to block.
|
||||
BUG INFO,[IMP: RFNM-wait timeout! Hst=],OCT,IMPHTN(H)
|
||||
SETZM IMPHTC(H) ;This may be dangerous... oh well.
|
||||
SETZM IMPHTT(H)
|
||||
JRST (T) ;Block one last time, next try will win.
|
||||
|
||||
;Decrement block count on receipt of any kind of ACK
|
||||
;
|
||||
IMPBLD: SOSL Q,IMPHTC(H)
|
||||
JRST IMPBL2
|
||||
BUG INFO,[IMP: negative RFNM-wait cnt, Hst=],OCT,IMPHTN(H)
|
||||
SETZB Q,IMPHTC(H)
|
||||
IMPBL2: CAIL Q,%IMPMA-1 ;If we were blocking on this host,
|
||||
PUSHJ P,IMPIOS ;Ensure IMP output started up so blocked stuff
|
||||
JRST (T) ; gets sent promptly.
|
||||
|
||||
|
||||
SUBTTL ARPANET INPUT INTERRUPT LEVEL
|
||||
|
||||
;First level interrupt handling for input side. Here from UBA vector hardware.
|
||||
|
||||
IFN NETCHN-UTCCHN,.ERR NETCHN assumed == UTCCHN at IMPIBK
|
||||
|
||||
EBLK
|
||||
IMPIBK: 0
|
||||
BBLK
|
||||
JSR UTCSAV ;Save AC's, get a stack
|
||||
AOS IMCT2 ;Count input interrupts
|
||||
IORDI TT,%LHICS ;Get CS register
|
||||
TRNE TT,%LHERR\%LHNXM
|
||||
JRST IMPRST ;Try resetting the IMP
|
||||
TRNE TT,%LHMRE ;Ready line flapped
|
||||
JRST IMPIER ;Go directly to error routine
|
||||
TRNN TT,%LHRDY ;Device ready for new operation?
|
||||
JRST IMPRST ;Try resetting.
|
||||
TRNN TT,%LHEOM ;Saw EOM from IMP?
|
||||
JRST IMPIB1 ;No, word count ran out before message
|
||||
SKIPGE IMIFLS ;Flushing output?
|
||||
JRST [ SETZM IMIFLS ;Not any more!
|
||||
JRST IMPIRT ] ;But flush last piece by queueing new request
|
||||
IORDI A,%LHIWC ;End of message. Get remaining UB word count
|
||||
SKIPE A ;This would be a surprise, really
|
||||
TDO A,[-1,,600000] ;36bit number of UBA words remaining in bfr
|
||||
IDIVI A,2 ;Number of PDP10 words (cleverly rounded)
|
||||
ADDI A,IMPBFS ;Number of PDP10 words of message
|
||||
MOVEM A,IMPIBC ;Set current count of available data words
|
||||
MOVEI A,IMPIBF
|
||||
MOVEM A,IMPIBP ;Set pointer to available data words
|
||||
JRST IMPLDD ;Go process input message
|
||||
|
||||
;Here when finished processing current message.
|
||||
IMPIRT: SETOM IMPCSH ;Note no current host
|
||||
PUSHJ P,IMPIST ;Restart input listener
|
||||
JRST IMPEX
|
||||
|
||||
;Message didn't fit in input buffer. Shouldn't ever get here, but
|
||||
;might if messages concatenated due to ready line randomness
|
||||
;
|
||||
IMPIB1: BUG INFO,[IMP: Huge message]
|
||||
SETOM IMIFLS ;Say we are flushing output
|
||||
JRST IMPIRT ;And go queue up another read
|
||||
|
||||
;Here if error during IMP message transfer
|
||||
; Currently the only error handled is the IMP going non-ready
|
||||
|
||||
IMPIER: SKIPE IMPUP ;Is the IMP supposed to be up?
|
||||
JRST IMPIE1 ;No, handle errors differently
|
||||
BUG INFO,[IMP: Input Ready Error]
|
||||
JRST IMPRST ;Ready line flapped while up, cycle interface
|
||||
|
||||
IMPIE1: AOS T,IMPIEC
|
||||
CAIG T,10. ;Huge number of errors while down?
|
||||
JRST IMPIRT ;No, just ignore this input and start another
|
||||
SETZM IMPIEC ;Reset
|
||||
BUG INFO,[IMP: Excessive input errors while down]
|
||||
JRST IMPRST ;Cycle the interface
|
||||
|
||||
IMPRST: IORDI T,%LHICS ;Record IMP status for sysjob
|
||||
HRLZM T,IMERCN
|
||||
IORDI T,%LHOCS
|
||||
HRRM T,IMERCN
|
||||
MOVEI A,%LHRST ;Avoid randomness by resetting HW now.
|
||||
IOWRI A,%LHOCS ;Reset output side
|
||||
IOWRI A,%LHICS ;Reset Input side
|
||||
SETOM IMPUP ;IMP is down
|
||||
MOVEI T,1
|
||||
MOVEM T,IMPTCU ;But trying to come up (sysjob poked)
|
||||
MOVSI J,SCLNET ;Ask SYSJOB to cycle the IMP
|
||||
IORM J,SUPCOR
|
||||
JRST IMPEX
|
||||
|
||||
SUBTTL IMP leader dispatch handling
|
||||
|
||||
IMPLDD: SKIPG B,IMPIBC ;Get count of available data
|
||||
POPJ P, ;None, nothing to do.
|
||||
CAILE B,IMPLDS ;More than a leader worth?
|
||||
MOVEI B,IMPLDS ;Yep, only want leader now
|
||||
MOVS A,IMPIBP ;Copy and reformat leader to IMPILB
|
||||
HRRI A,IMPILB
|
||||
BLTUB A,IMPILB-1(B)
|
||||
ADDM B,IMPIBP ;Increment buffer pointer,
|
||||
MOVN C,B
|
||||
ADDM C,IMPIBC ; and decrement count
|
||||
|
||||
LDB T,IMOTBP ;Examine new-format flag bits of leader
|
||||
CAIL B,IMPLDS ;Large enough to be a valid leader?
|
||||
CAIE T,17 ;Verify that leader is "new" 96-bit fmt.
|
||||
JRST IMPLDE ;Go process error in leader
|
||||
|
||||
LDB T,IMLNBP ;Extract link number (high 8 bits of msg-id)
|
||||
MOVEM T,IMPCLN ;Save link message arrived on
|
||||
LDB T,IMSABP ;Get arpanet address (source host+imp)
|
||||
IFN 0,[
|
||||
LDB T,IMSHBP ;Source host
|
||||
LDB A,IMSIBP ;Source imp
|
||||
DPB A,[112000,,T] ;Form host address
|
||||
];IFN 0
|
||||
PUSHJ P,FNDHST ;H gets host table index
|
||||
JRST IMPLHE ;Host table full
|
||||
MOVEM H,IMPCSH ;Save current host
|
||||
LDB A,IMTBP ;Get message type in A
|
||||
CAIL A,IMTDTS
|
||||
JRST IMPUN ;Unknown type?
|
||||
AOS IMPMSR(A) ;Count IMP msgs rcvd
|
||||
JRST @IMTDT(A) ;Dispatch
|
||||
|
||||
IMTDT: IMPRM ; 0 Regular Message
|
||||
IMPBE1 ; 1 Error in Leader (no msg-id)
|
||||
IMPGD ; 2 IMP Going Down
|
||||
IMPUN ; 3 -
|
||||
IMPIN ; 4 NOP
|
||||
IMPRFN ; 5 RFNM - Ready For Next Message (transmit succeeded)
|
||||
IMPHDS ; 6 Host Dead Status (general info)
|
||||
IMPDHD ; 7 Destination Host Dead (transmit failed)
|
||||
IMPBE8 ; 8 Error in Data (has msg-id)
|
||||
IMPINC ; 9 Incomplete Transmission (transmit failed temporarily)
|
||||
IMPIRS ;10 Interface Reset - IMP dropped its ready line
|
||||
IMTDTS==.-IMTDT
|
||||
|
||||
IMPLHE: BUG INFO,[IMP: Message discarded due to host table full],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
|
||||
JRST IMPIRT
|
||||
|
||||
;Here if leader is too short or of wrong format.
|
||||
; B/ Leader length
|
||||
IMPLDE: SKIPE IMPUP ;If IMP is not up, we'll take anything.
|
||||
JRST IMPIRT
|
||||
CAIGE B,IMPLDS ;Announce short leader if so.
|
||||
BUG INFO,[IMP: Short leader, ],DEC,B,[wds. WD1=],OCT,IMPILB,[WD2=],OCT,IMPILB+1
|
||||
LDB A,IMOTBP ;Get message format type
|
||||
CAIN A,4 ;Old-type NOP?
|
||||
JRST IMPIRT ; Just ignore it.
|
||||
IFN 0,[ ;;For the moment this is a problem because the IMP is marked
|
||||
;;up too soon, before all incoming NOPS are received.
|
||||
CAIN A,16 ;Is it 1822L format?
|
||||
BUG INFO,[IMP: 1822L leader],OCT,IMPILB
|
||||
CAIE A,17 ;Is it not the long-leader format?
|
||||
BUG INFO,[IMP: Old-type leader],OCT,IMPILB
|
||||
]
|
||||
JRST IMPIRT ;Ignore rest of message, if any
|
||||
|
||||
;;; IMP->Host Type X (e.g. 3, 11-255) - bad type
|
||||
|
||||
IMPUN: BUG INFO,[IMP: Unknown msg type ],OCT,A,[ leader ],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
|
||||
JRST IMPIRT
|
||||
|
||||
;;; IMP->Host Type 1 - Error in leader (msg-id not given)
|
||||
;;; IMP->Host Type 8 - Error in data (msg-id given)
|
||||
|
||||
IMPBE1: LDB T,IMSTBP ;Get subtype (4 bits)
|
||||
ANDI T,3 ;Only 2 bits should be used
|
||||
AOS IMPM1S(T) ;Increment count of Type 1 subtype messages
|
||||
IMPBE8: SKIPN IMPUP ;Ignore error during initial syncronization
|
||||
BUG INFO,[IMP: Type ],DEC,A,[err msg, leader],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
|
||||
MOVE B,IMPCLN ;Get link msg came in on
|
||||
CAIN B,233 ;Internet link?
|
||||
AOS IMNIP8 ;Yes, count IP meter
|
||||
CAIN A,8. ;Error identified with a particular message?
|
||||
JSP T,IMPBLD ;Decrement count of active messages
|
||||
JRST IMPIRT
|
||||
|
||||
;;; IMP->Host Type 2 - IMP going down
|
||||
|
||||
IMPGD: LDB B,[420200,,IMPILB+2] ;Reason (see 1822)
|
||||
MOVEM B,IMPDWN
|
||||
LDB B,[360400,,IMPILB+2] ;How soon going down * 5 mins
|
||||
MOVE H,B
|
||||
IMULI B,5*60.*30. ;Ticks in 5 mins
|
||||
ADD B,TIME
|
||||
MOVEM B,IMPDWN+1
|
||||
LDB C,[241200,,IMPILB+2] ;How long to be down * 5 minutes
|
||||
MOVE Q,C
|
||||
IMULI C,5*60.*30. ;Downtime in ticks
|
||||
ADD C,B ;Add to time down
|
||||
MOVEM C,IMPDWN+2 ;Store time when will be up
|
||||
IMULI H,5 ;Minutes
|
||||
IMULI Q,5
|
||||
BUG INFO,[IMP: Going down in ],DEC,H,[mins for ],DEC,Q,[mins, reason],DEC,IMPDWN
|
||||
JRST IMPIRT
|
||||
|
||||
;;; IMP->Host Type 4 - NOP
|
||||
|
||||
IMPIN: JRST IMPIRT ;One more NOP from IMP
|
||||
|
||||
;;; IMP->Host Type 5 - RFNM (Ready For Next Message)
|
||||
|
||||
IMPRFN: JSP T,IMPBLD ;Decrement outstanding message count for host
|
||||
MOVE A,IMPCLN ;Get link #
|
||||
CAIE A,233 ;IP link number?
|
||||
JRST IMRFNX ;No, skip IP code
|
||||
AOS IMNIPR ;Bump count of IP RFNMs received
|
||||
JRST IMPIRT ; and do nothing else about it, ugh.
|
||||
|
||||
IMRFNX: BUG INFO,[IMP: Spurious RFNM from ],OCT,IMPHTN(H),[link],OCT,IMPCLN
|
||||
AOS IMNSRF
|
||||
JRST IMPIRT
|
||||
|
||||
;;; IMP->Host Type 6 - Host Down Status
|
||||
; H/ host index
|
||||
|
||||
IMPHDS: LDB A,[301400,,IMPILB+2];Bits 65-76 of leader, 4.9-3.7 3rd word
|
||||
HRRM A,IMPHTB(H) ;Store, hope user read RFC 611
|
||||
JRST IMPIRT
|
||||
|
||||
;;; IMP->Host Type 7 - Destination Host Dead
|
||||
|
||||
IMPDHD: MOVEI E,%NCDED
|
||||
JRST IMPHNR
|
||||
|
||||
;;; IMP->Host Type 9 - Incomplete Transmission
|
||||
|
||||
IMPINC: LDB T,IMSTBP ;Get subtype field (4 bit reason for failure)
|
||||
AOS IMPM9S(T) ;Bump count of subtypes
|
||||
MOVEI E,%NCINC ;This is an incomplete msg response
|
||||
|
||||
IMPHNR: JSP T,IMPBLD ;Decrement active IMP msg count for this host
|
||||
MOVE A,IMPCLN ;Link for this message?
|
||||
CAIE A,233 ;IP Link?
|
||||
JRST IMPHN1
|
||||
CAIN E,%NCINC ;Yes, count IP meters
|
||||
AOS IMNIP9
|
||||
CAIN E,%NCDED
|
||||
AOS IMNIP7
|
||||
JRST IMPIRT
|
||||
|
||||
IMPHN1: BUG INFO,[IMP: DHD or IT msg rcvd on non-IP link]
|
||||
JRST IMPIRT
|
||||
|
||||
;;; IMP->Host Type 10 - Interface Reset
|
||||
|
||||
IMPIRS: PUSHJ P,IMPHTI ;Initialize host table
|
||||
BUG INFO,[IMP: Interface reset]
|
||||
JRST IMPIRT
|
||||
|
||||
|
||||
;;; IMP->Host Type 0 - Regular Host-Host message
|
||||
; Unless the source host screwed up and sent a dataless message,
|
||||
; there is at least one word waiting to be read in the buffer.
|
||||
;
|
||||
IMPRM: SKIPG A,IMPIBC ;Get available input word count
|
||||
JRST IMPIRT ;None left, just ignore message
|
||||
MOVE B,IMPCLN ;Is link number the magic cookie for IP?
|
||||
CAIE B,233
|
||||
JRST IMPIRT ;No, ignore it
|
||||
|
||||
;IP datagram. Copy into IP buffer and pass it up.
|
||||
;
|
||||
AOS IMNIPI ;Bump count of IP datagrams received
|
||||
PUSHJ P,IPGIPT ;Ask IP for buffer of size (A)
|
||||
JRST [ AOS IMNIPF ;Punted, bump cnt of datagrams lost
|
||||
JRST IMPIRT ] ;Flush this message (err msg already printed)
|
||||
MOVE B,PK.BUF(A) ;Destination
|
||||
HRL B,IMPIBP ;Source
|
||||
MOVE C,IMPIBC ;Input words available
|
||||
ADDI C,-1(B) ;Last destination address
|
||||
BLTUB B,(C) ;Copy and reformat data to IP buffer
|
||||
MOVE B,IMPIBC ;Get word count back to B
|
||||
SETZB C,IMPIBC ;Say zero offset to IP header, and clear count.
|
||||
MOVE J,IMPCSH ;Set idx to host-table entry dgm received from.
|
||||
PUSHJ P,IPRDGM ;Hand off rcvd datagram to IP
|
||||
JRST IMPIRT ;Return from PI level, setting up for next msg
|
||||
|
||||
;Start listening for new input from IMP
|
||||
;
|
||||
IMPIST: HRREI T,-IMPBFS*2
|
||||
IOWRI T,%LHIWC ;Read up to a buffer full of data
|
||||
MOVEI T,<IUIMPG_12.>+<4*<IMPIBF&777>>
|
||||
IOWRI T,%LHICA ;Read data to here
|
||||
MOVEI T,%LHIE\%LHHRC\%LHSE\%LHGO ;Interrupt, store data, go
|
||||
IOWRI T,%LHICS ;Start read
|
||||
RET
|
||||
|
||||
|
||||
SUBTTL ARPANET OUTPUT INTERRUPT LEVEL
|
||||
|
||||
;Here on unvectored interrupt caused by call to IMPIOS
|
||||
|
||||
IMPINT: AOS IMCT1 ;Count unvectored interrupts
|
||||
JRST IMPOBZ ;Go try to start output
|
||||
;Returns directly to interrupt dispatcher
|
||||
|
||||
;First-level interrupt handling, from hardware dispatch.
|
||||
; Crash on severe interface errors
|
||||
; Restart IMP on ready line flappage.
|
||||
; Else, go look for more output to send.
|
||||
|
||||
IFN NETCHN-UTCCHN,.ERR NETCHN assumed == UTCCHN at IMPOBK
|
||||
|
||||
EBLK
|
||||
IMPOBK: 0
|
||||
BBLK
|
||||
JSR UTCSAV ;Save AC's, get a stack
|
||||
AOS IMCT3 ;Count output interrupts
|
||||
IORDI TT,%LHOCS ;Get CS register
|
||||
TRNE TT,%LHERR\%LHNXM ;Interface lost?
|
||||
JRST IMPOEC ;Try cycling
|
||||
TRNE TT,%LHMRE ;Somebody bounce a ready line?
|
||||
JRST IMPOER
|
||||
IMPOBE: TRNN TT,%LHRDY ;Device ready for new operation?
|
||||
JRST IMPOEC ;Try cycling
|
||||
PUSHJ P,IMPOBZ ;No IMP error. Perform planned action.
|
||||
JRST IMPEX ;Dismiss interrupt.
|
||||
|
||||
;Error while outputting datagram. Currently, just means ready line flapped.
|
||||
; If IMP was up, finish up IP output if necessary to free buffer, then
|
||||
; cycle the interface.
|
||||
; If trying to send NOPS to come up, just send a few more to resynch.
|
||||
;
|
||||
IMPOER: SKIPE IMPUP ;IMP up?
|
||||
JRST IMPOE1 ;Not running normally, maybe OK.
|
||||
BUG INFO,[IMP: Output RDY error]
|
||||
IMPOEC: SKIPE A,IMPODP ;Have an output datagram ?
|
||||
PUSHJ P,IPIODN ;Yep, release it.
|
||||
SETZM IMPOS ;Doing nothing useful
|
||||
JRST IMPRST ;Go poke SYSJOB to cycle the IMP
|
||||
|
||||
;Here if interface wasn't fully up.
|
||||
IMPOE1: MOVE T,IMPOS
|
||||
CAIE T,%ISONP ;Were we sending a NOP?
|
||||
BUG CHECK,[IMP: Confusing output error]
|
||||
SOS IMNOPC ;Add another NOP to make up for this one
|
||||
SETZM IMPOS ;NOt doing anything anymore
|
||||
JRST IMPOBE ;Go continue processing.
|
||||
|
||||
;IMPOBZ - Toplevel output processing routing.
|
||||
; Called from output done interrupt handler or from MP/CLOCK level with
|
||||
; NETOFF to start output.
|
||||
|
||||
IMPOBZ: SKIPL B,IMPOS
|
||||
CAIL B,IMPODL
|
||||
BUG HALT,[IMP: Bad output state]
|
||||
JRST @IMPODT(B)
|
||||
|
||||
IMPODT: OFFSET -.
|
||||
%ISODL:: IMPOB0 ; 0 Idle, look for something to send
|
||||
%ISONP:: IMPOB1 ; 1 Finished NOP
|
||||
%ISOID:: IMPOB2 ; 2 Finished IP datagram messge
|
||||
IMPODL::OFFSET 0
|
||||
|
||||
;Here when interrupt has finished processing a complete message.
|
||||
; Attempt to find something else to do.
|
||||
;
|
||||
IMORET:
|
||||
;JRST IMPOB0 ;Fall through to try for more
|
||||
|
||||
; Idle - Look for output to send. First ensure we can send stuff,
|
||||
; then try things in the order:
|
||||
; (1) Send NOP if net coming up
|
||||
; (2) Check IP datagram queue
|
||||
;
|
||||
IMPOB0: HRRZ T,IMPUP ;Get current IMP state.
|
||||
CAIE T,-2 ;Don't say it's up when it's still going down
|
||||
CAIN T,1 ;or when it is broken
|
||||
JRST IMPOBN
|
||||
|
||||
; First check to see if NOP needs to be sent.
|
||||
AOSG IMNOPC ;Check to see if sending NOPs
|
||||
JRST IMONOP ;Output a NOP
|
||||
SETZM IMPUP ;Say IMP is up
|
||||
SETZM IMPTCU ;Say no longer trying to come up
|
||||
|
||||
; Now see if there is any real traffic to send
|
||||
PUSHJ P,IPGIOQ ;Check IP. Get IP IMP output queue entry if any
|
||||
JRST IMPOBN ;Nothing there, we're done.
|
||||
|
||||
; Returns A/ ptr to IP dgm struct
|
||||
; B/ BLKO pointer to 32-bit words (unused)
|
||||
; C/ Arpanet address
|
||||
;
|
||||
;Build an IMP-format datagram at IMPOBF.
|
||||
; Set correct address in prototype leader.
|
||||
; BLT and reformat leader to IMPOBF.
|
||||
; BLT and reformat datagram to IMPOBF + leader size.
|
||||
|
||||
MOVEM A,IMPODP ;Save ptr to datagram being output
|
||||
AOS IMNIPO ;# of IP datagrams sent
|
||||
|
||||
;Put together the IMP leader in IMOLDR.
|
||||
IFN 0,[ ;First and third word initialized at assembly time
|
||||
MOVE B,[17_10.,,0] ;Regular message
|
||||
MOVEM B,IMOLDR
|
||||
MOVSI B,233_10. ;IP link # in left 8 bits
|
||||
MOVEM B,IMOLDR+2 ;Set up third word
|
||||
]
|
||||
AND C,[<377_16.>+377] ;Mask out all but host and IMP field
|
||||
LSH C,4. ;Move net address to correct field
|
||||
MOVEM C,IMOLAD ;set up second word of leader
|
||||
|
||||
;Copy leader and datagram to IMPOBF
|
||||
MOVE B,[IMOLDR,,IMPOBF]
|
||||
BLTBU B,IMPOBF+IMPLDS-1 ;Move IMP leader into place
|
||||
MOVS B,PK.BUF(A) ;SOURCE,,COUNT
|
||||
MOVEI A,IMPLDS(B) ;Size including leader to A
|
||||
HRRI B,IMPOBF+IMPLDS ;Put d'gram immediately after leader.
|
||||
BLTBU B,IMPOBF-1(A)
|
||||
PUSHJ P,IMPSOH ;Go start hardware
|
||||
MOVEI C,%ISOID ;Remember we are outputting IP leader
|
||||
MOVEM C,IMPOS
|
||||
POPJ P,
|
||||
|
||||
|
||||
|
||||
;Here if nothing to output.
|
||||
; Flag output inactive and disable interface
|
||||
;
|
||||
IMPOBN: SETOM IMPOAC ;No more output
|
||||
IORDI TT,%LHOCS
|
||||
TRZ TT,%LHIE\%LHGO ;Deactivate interface for a bit
|
||||
IOWRI TT,%LHOCS
|
||||
POPJ P,
|
||||
|
||||
;IMONOP - Send a NOP, here from IMPOBZ only.
|
||||
;
|
||||
IMONOP: MOVEI A,IMPNOS ;Length of NOP message
|
||||
MOVE B,[IMPNOP,,IMPOBF] ;BLT (and reformat) NOP to output buffer
|
||||
BLTBU B,IMPOBF-1(A)
|
||||
PUSHJ P,IMPSOH ;Start output of (A) words from IMPOBF to IMP
|
||||
MOVEI C,%ISONP ;Set correct output FSM state
|
||||
MOVEM C,IMPOS
|
||||
POPJ P,
|
||||
|
||||
;Prefabricated NOP Host-IMP leader
|
||||
IMPNOP: 17_10.,,4_4 ;New format, type 4 = NOP
|
||||
0
|
||||
0 ;No padding required on regular messages
|
||||
IMPNOS==.-IMPNOP
|
||||
|
||||
;Finished sending NOP, from IMPOBZ
|
||||
;
|
||||
IMPOB1: SETZM IMPOS ;Reset state
|
||||
JRST IMORET ;Go look for something else to do.
|
||||
|
||||
;Was sending IP datagram, from IMPOBZ
|
||||
;
|
||||
IMPOB2: SETZB A,IMPOS ;Reset output state.
|
||||
EXCH A,IMPODP ;Get active datagram and reset pointer
|
||||
PUSHJ P,IPIODN ;Tell IP level that datagram was output
|
||||
JRST IMORET ;Go see if there is anything else to do.
|
||||
|
||||
;Start output hardware.
|
||||
; A/ Count of PDP10 words to write to net.
|
||||
; Data to output in IMPOBF.
|
||||
; Must be NETOFF or at NETCHN interrupt level. Bashes A only.
|
||||
|
||||
IMPSOH: ASH A,1 ;Convert PDP10 word count to...
|
||||
MOVNS A ; negative unibus word count.
|
||||
IOWRI A,%LHOWC ;Tell the interface
|
||||
MOVEI A,<IUIMPG_12.>+<4*<IMPOBF&777>>
|
||||
IOWRI A,%LHOCA ;Unibus address of output buffer
|
||||
MOVEI A,%LHIE\%LHELB\%LHGO ;Enable interrupts, send EOM, GO
|
||||
IOWRI A,%LHOCS ;Start DMA transfer
|
||||
POPJ P, ;And forget it.
|
||||
|
||||
SUBTTL ARPANET CLOCK LEVEL
|
||||
|
||||
IMRSTO: RET ;Nothing to do any more?
|
||||
|
||||
OVHMTR UUO
|
||||
|
||||
;NETHST (HOST INFO)
|
||||
; ARG 1 - HOST => VAL 1 - STATUS, VAL 2 - HOST NUMBER
|
||||
; ARG 1 - -1 => VAL 1 - (STATUS), VAL 2 - OUR HOST NUMBER
|
||||
;NOT CURRENTLY IMPLEMENTED- ARG 1 - -1, ARG 2 - OUR GOING-DOWN REASON
|
||||
;
|
||||
ANETHST:HRRE T,A ;Let immediate -1 win (777777 not a valid host)
|
||||
AOJE T,ANETH2 ;Jump if want local status and host number
|
||||
MOVE T,A
|
||||
JSP J,STDHST ;Standardize and error-check host number
|
||||
MOVE B,T ;Return new format
|
||||
TLO B,(NW%ARP)
|
||||
MOVEI H,LIMPHT-1
|
||||
CONO PI,NETOFF ;Do we have status for this host?
|
||||
CAME T,IMPHTN(H) ;Scan table
|
||||
SOJGE H,.-1
|
||||
JUMPGE H,ANETH1 ;Yes, return it
|
||||
CONO PI,NETON ;No, have to go get it
|
||||
MOVEM T,SRN3(U)
|
||||
POPJ P, ;Oh, too bad
|
||||
|
||||
;Here to return status of foreign ARPAnet host
|
||||
ANETH1: MOVE A,IMPHTB(H) ;Get status
|
||||
CONO PI,NETON
|
||||
EXCH A,B
|
||||
CALL CVH2NA ;Convert to HOSTS2 for compat
|
||||
EXCH A,B
|
||||
JRST LSWCJ1 ;Return IMSOC, NETLST if not done already
|
||||
|
||||
;Here to return our status, host
|
||||
ANETH2:
|
||||
REPEAT 0,[
|
||||
CAIL W,2 ;(This is a crock)
|
||||
MOVEM B,NTHDSW ;If 2 args, set our reason for going down.
|
||||
]
|
||||
SKIPE IMPUP ;Fake up our status
|
||||
TDZA A,A ;We're down
|
||||
MOVSI A,2000 ;We are up
|
||||
MOVEI B,IMPUS ;And our host umber
|
||||
JRST POPJ1
|
||||
|
||||
|
||||
;NETIMP (REASON,TIMEDOWN,TIMEUP) READ/SET
|
||||
;
|
||||
ANETIM: JUMPLE W,ANETM1 ;No args, return current data
|
||||
CAIGE W,3 ;Must have 3 args if any
|
||||
JRST OPNL30
|
||||
MOVEM A,IMPDWN ;Set data
|
||||
MOVEM B,IMPDWN+1
|
||||
MOVEM C,IMPDWN+2
|
||||
JRST POPJ1
|
||||
|
||||
ANETM1: MOVE A,IMPDWN ;Get data to return
|
||||
MOVE B,IMPDWN+1
|
||||
MOVE C,IMPDWN+2
|
||||
SKIPE IMPUP ;Note current condition of IMP, too
|
||||
TLO A,400000
|
||||
JRST POPJ1
|
||||
1974
src/system/impold.wthncp
Executable file
1974
src/system/impold.wthncp
Executable file
File diff suppressed because it is too large
Load Diff
1430
src/system/inet.138
Executable file
1430
src/system/inet.138
Executable file
File diff suppressed because it is too large
Load Diff
4944
src/system/ioelev.432
Executable file
4944
src/system/ioelev.432
Executable file
File diff suppressed because it is too large
Load Diff
21930
src/system/its.1644
Executable file
21930
src/system/its.1644
Executable file
File diff suppressed because it is too large
Load Diff
5321
src/system/itsdev.974
Executable file
5321
src/system/itsdev.974
Executable file
File diff suppressed because it is too large
Load Diff
320
src/system/itsdis.50
Executable file
320
src/system/itsdis.50
Executable file
@@ -0,0 +1,320 @@
|
||||
|
||||
;DEVICE CODES
|
||||
DIS==130 ;DISPLAY PROCESSOR
|
||||
DISMAP==134 ;MEM PROT & REL
|
||||
LIPSH==(040000)
|
||||
NWSTK==LIPSH 3,
|
||||
|
||||
ADSTAR: CONO PI,CLKOFF ;TURN OFF CLOCK TO PREVENT POSSIBLE GOBBLING BY ANOTHER USER
|
||||
PUSHJ P,DISCHK ;CHECK IF THIS USER OWNS THE DISPLAY
|
||||
JRST CLKONJ ;RESTART THE CLOCK
|
||||
SETZM E.SPGH ; QSWI1 switch
|
||||
SETZM E.SCLS ; clear clobber switch
|
||||
SKIPL DISUSR ; no user
|
||||
CAMN U,DISUSR ; skips if different index
|
||||
JRST NOCLBR ; dont untie pages
|
||||
MOVEM U,E.SCLS ; else remember to untie
|
||||
SKIPA ; and dont hack disusr
|
||||
NOCLBR: MOVEM U,DISUSR ;GIVE IT TO HIM IF NO ONE ELSE OWNS IT
|
||||
CONO PI,CLKON ;RESTORE THE CLOCK
|
||||
CONO DIS,5010 ;SET STOP, CLEAR PIA
|
||||
XCTR XR,[HRRZ A,(C)] ; causes pg ld, fetches droot
|
||||
HRRM A,DSTADD ; remember for restarts
|
||||
XCTR XR,[MOVE B,(A)] ; load display page
|
||||
PUSHJ P,SWTL ; circular switch gobble
|
||||
CIRPSW
|
||||
LSH A,-10. ; page number
|
||||
SKIPN E.SCLS ; clobbering old user index ?
|
||||
JRST RDSCLB ; if not, skip it
|
||||
MOVE U,DISUSR ; old useri
|
||||
PUSHJ P,E.SCLB ; untie pages
|
||||
MOVEI U,0
|
||||
EXCH U,E.SCLS ; clear switch, fetch new usri
|
||||
MOVEM U,DISUSR
|
||||
RDSCLB: PUSHJ P,UPLC ; users pg n into circular pointer
|
||||
PUSHJ P,CHACK ; go in circles
|
||||
SKIPL C ; 4.9 implies real core in loop
|
||||
JRST NOTIED ; if not, dont tie down -- still swapped out
|
||||
MOVE T,J ; MEMPNT INDEX
|
||||
MOVE E,D ; MMP INDEX
|
||||
PUSHJ P,E.SPG1 ; go tie it down
|
||||
NOTIED: PUSHJ P,LSWPOP ; clear switch
|
||||
; now set up E&S dbrs
|
||||
MOVEI T,UDBR1A(U)
|
||||
HRLI T,<NUVPG/2>_1 ;DBL left 1 relative to 10
|
||||
MOVEM T,E.SPM+2
|
||||
HRRI T,UDBR2A(U)
|
||||
MOVEM T,E.SPM+3
|
||||
|
||||
; now start (or restart if from E.SPGI) E&S
|
||||
|
||||
RDSTAR: CONO DIS,515330 ;RESET THE WORLD
|
||||
SETOM E.SSYS ;FLAG=MAP ON (USER MODE)
|
||||
CONO DIS,515330 ;CLEAR 3D CLIPPER
|
||||
MOVEI I,1000 ;SET COUNT FOR TIMEOUT
|
||||
MOVE H,DSTADD ; fetch c(0)
|
||||
MOVEM H,E.SPM ; store in status block
|
||||
MOVSI H,140000 ; status bits -- map high and low
|
||||
MOVEM H,E.SPM+1 ; set status
|
||||
SKIPA H,[-ADSTN,,ADSTL-1]
|
||||
BLKO DIS,H
|
||||
CONSO DIS,604000 ;SKIP IF DONE OR ERROR
|
||||
SOJG I,.-1
|
||||
JUMPL H,.-3
|
||||
JUMPE I,CPOPJ ;FAIL IF TIME OUT ON START
|
||||
CONSZ DIS,600000 ;CHECK FOR EXECUTIVE ERRORS
|
||||
JRST ADXIT ;GIVE INTERRUPT, NO SKIP
|
||||
|
||||
AOS (P)
|
||||
ADCON1: CONO DIS,400 ;RUN
|
||||
ADXIT: CONO DIS,222010+DISCHN ;ALARM+MPV+STOP+PIA
|
||||
POPJ P,
|
||||
|
||||
ADSTPX: CONSZ DIS,1040 ;FAIL TO SKIP IF MEM OR SEL STOP
|
||||
JRST ILUUO ;ERROR IF STOP
|
||||
ADSTOP: CAME U,DISUSR ;SKIP IF USER OF SCOPE
|
||||
JRST URET ;EXIT IF NOT SCOPE USER
|
||||
ADSTPY: CONO DIS,5000 ; IOSTOP+STOP.INT.OFF
|
||||
CONO DIS,300 ;LR.PROG+CLR.HIT
|
||||
CONSO DIS,640000 ;SKIP IF PARITY, NXM, MPV ON
|
||||
JRST E.SUSM ;MAP IS STILL ON
|
||||
CONO DIS,400000 ;CLEAR MASTER STUFF (TURNS OFF MAP)
|
||||
CONO DIS,400000 ;CLEAR 3D CLIPPER
|
||||
|
||||
AOS E.SSYS ;REMEMBER PAGING IS OFF
|
||||
E.SUSM: CONSO DIS,4000 ;SKIP IF STOPPED AND READY
|
||||
PUSHJ P,UFLS ;ELSE WAIT UNTIL READY
|
||||
POPJ P,
|
||||
|
||||
ADCONT: PUSHJ P,ADSTPX ;ILLEGAL IF MEM OR SEL STOP
|
||||
PUSHJ P,E.SFU ; force user mode if necessary
|
||||
POPJ P,0 ; gross lossage (hardware)
|
||||
JRST ADCON1
|
||||
|
||||
ADSTEP: PUSHJ P,ADSTPX ;ILLEGAL IF MEM OR SEL STOP
|
||||
PUSHJ P,E.SFU ; Force User mode (reloads map and skips)
|
||||
POPJ P,0 ; lossage if here
|
||||
CONO DIS,40
|
||||
POPJ P,
|
||||
|
||||
ADWORD: XCTR XR,[MOVE J,(J)] ; fetch c(AC)
|
||||
PUSHJ P,ADSTOP ;MAKE SURE IT IS STOPPED
|
||||
PUSHJ P,E.SFU ;RELOAD MAP IF NECESSARY
|
||||
POPJ P,0 ;MAP NOT IN USER MODE
|
||||
DATAO DIS,J
|
||||
POPJ P,
|
||||
|
||||
ADCLOS: CAME U,DISUSR
|
||||
POPJ P,
|
||||
CONO DIS,5010 ;STOP, PI OFF
|
||||
SETZM E.SPGW ;CLEAR PAGE WAIT
|
||||
PUSHJ P,SWTL ;LOCK CIRCULAR SWITCH
|
||||
CIRPSW
|
||||
PUSHJ P,E.SCLB
|
||||
PUSHJ P,LSWPOP ;RESTORE SWITCH
|
||||
SETOM DISUSR
|
||||
POPJ P,
|
||||
|
||||
DISCHK: MOVE B,UNAME(U)
|
||||
SKIPL T,DISUSR
|
||||
CAMN B,UNAME(T)
|
||||
AOS (P)
|
||||
|
||||
ADRSTA: ;READ STATE, WRITE STATE NOT IN.
|
||||
ADSSTA: POPJ P,
|
||||
|
||||
;E&S PAGER HAS TO REFERENCE 0 TO INITIALLIZE MAP.
|
||||
;E&S FORCE USER MODE
|
||||
|
||||
E.SFU: SKIPGE E.SSYS
|
||||
JRST POPJ1 ;SKIP IF MAP OFF
|
||||
E.SFU2: MOVSI T,140000 ;ENTRY FOR DCRRST
|
||||
MOVEM T,E.SPM+1 ;RESETS STATUS
|
||||
DATAO DIS,[NWSTK 1] ;STORE SP AT 0
|
||||
PUSHJ P,E.SWT ;CANNOT UFLS -- NWSTK MIGHT BE REISSUED
|
||||
POPJ P,0 ;HARDWARE LOSSAGE
|
||||
DATAO DIS,E.SPM ;OUTPUTS C(0) (RELOADS SP)
|
||||
PUSHJ P,E.SWT
|
||||
POPJ P,0 ;LOST
|
||||
SETOM E.SSYS ;REMEMBER MAP ON
|
||||
JRST POPJ1
|
||||
|
||||
E.SWT: PUSH P,J
|
||||
MOVEI J,100 ;COUNT FOR TIMEOUT
|
||||
CONSZ DIS,4000 ;STOPPED AND READY? ELSE SKIP
|
||||
JRST POPJJ1 ;SKIP RET IF READY
|
||||
CONSO DIS,640000 ;OTHER FLAVORS OF LOSSAGE
|
||||
SOJG J,E.SWT+2 ;COUNT IF STILL OK
|
||||
CONO DIS,10 ;STOP FOR GOOD
|
||||
JRST POPJJ ;LOSES, NO SKIP RETURN
|
||||
|
||||
ADSTL: 000501052405 ;LI DIR,052405(PROGM)
|
||||
300541,,[-1,,] ;LOCLA SELINT,[-1,,](1)
|
||||
300441,,[102521,,] ;LOCLA CDIR,[102521,,](1)
|
||||
302641,,[3777,,3777] ;LOCLSA VIEW,[3777,,3777](1)
|
||||
302701,,[377777377777] ;LOCLSA WIND,[377777377777](1)
|
||||
100,,0 ; (JMP 0) load page map and go
|
||||
ADSTN==.-ADSTL
|
||||
EBLK
|
||||
|
||||
DSTADD: 000100,, ;JMP TO CODE (FILL IN ADDRESS)
|
||||
|
||||
; E&S PAGE MAP STATUS BLOCK
|
||||
E.SPM: 0 ; c(0)
|
||||
0 ; status word
|
||||
0 ; dbr low
|
||||
0 ; dbr high
|
||||
|
||||
MXDISP==16. ; maximum number of tied pages
|
||||
DISPGP: -MXDISP,,0 ; page pointer for mmp pages
|
||||
DISSWP: BLOCK MXDISP ; MMSWP INDICES TIED
|
||||
E.SPGW: 0 ; if non zero, E&S page wait page
|
||||
E.SPGH: 0 ; flag for QSWI1
|
||||
E.SCLS: 0 ; if non zero, new userI flushing disusr
|
||||
E.SSYS: 0 ; flag for pager on/off
|
||||
E.SIST: 0 ; ststus word at last interrupt
|
||||
|
||||
; counts for debugging
|
||||
|
||||
E.SNTI: 0 ; # pages tied down (total during system run)
|
||||
E.SNUT: 0 ; # pages untied (should = .-1 after dclose)
|
||||
|
||||
E.SREL: 0 ; # times pages in DISSWP table were relocated
|
||||
|
||||
; end of debug counts
|
||||
|
||||
|
||||
DSTPCT: -1 ; STOP COUNT TO HANDLE REDUNDANT STOPS
|
||||
DSCONI: 0 ;LAST CONI FROM DISPLAY
|
||||
EBRKA: 0 ;INTERRUPT SAVE AC
|
||||
EBRKU: 0 ; DITTO
|
||||
|
||||
ESBRK: 0 ;HANDLE E&S INTERRUPT
|
||||
|
||||
BBLK
|
||||
|
||||
CONSO DIS,7 ;PI CHAN ASSIGNED?
|
||||
JRST 12,@ESBRK ;NO, CANNOT INTERRUPT
|
||||
CONI DIS,DSCONI
|
||||
CONO DIS,10 ;DEASSIGN PI CHANNEL
|
||||
MOVEM U,EBRKU ;SAVE AC'S
|
||||
MOVEM A,EBRKA
|
||||
MOVEI A,%PILTP ;GIVE "LTPEN" INT (CLASS 3)
|
||||
CONSZ DIS,640040 ;PAR, NXM, MPV, SELECT
|
||||
JRST E.SFLT ; check page fault
|
||||
E.SUIN: SKIPL U,DISUSR
|
||||
IORM A,PIRQC(U)
|
||||
E.SPFR: MOVE A,EBRKA ;UNSAVE AC'S
|
||||
MOVE U,EBRKU
|
||||
JRST 12,@ESBRK ;RETURN
|
||||
|
||||
E.SFLT: CONSZ DIS,200000 ; skip if not NXM (ie not fault)
|
||||
SKIPL E.SPM+1 ; error bit set in status word ?
|
||||
JRST E.SILM ; if not, real illegal mem
|
||||
LDB U,[121000,,E.SPM+1] ; get page #
|
||||
HRROM U,E.SPGW ; save for loading (LH is flag)
|
||||
MOVE U,E.SPM+1 ; get status
|
||||
MOVEM U,E.SIST ; save status for later (debugging)
|
||||
LDB U,[330300,,U] ; access and pgerr
|
||||
CAIE U,2 ; read write/first error
|
||||
SKIPN U ; no access -- page fault
|
||||
JRST E.SPFR ; gives a page fault
|
||||
E.SILM: SETZM E.SPGW ; if not page fault, don't rq load
|
||||
MOVEI A,%PIDIS; mem fault bits
|
||||
JRST E.SUINT ; give user interrupt
|
||||
|
||||
DCRSTP: CAMN U,DISUSR ;IS THIS U ON DIS
|
||||
AOSE DSTPCT ; HERE IF THIS USER, SKIP IF FIRST CALL TO STOP
|
||||
POPJ P, ;RETURN IF NOT
|
||||
CONSO DIS,7 ; SKIP IF CURRENTLY RUNNING
|
||||
POPJ P, ; RETURN IF NOT RUNNING NOW
|
||||
CONI DIS,DSCONI ;SAVE STATE FOR RESTART
|
||||
CONO DIS,5000 ;OTHERWISE STOP IT
|
||||
DISSTQ: MOVEI TT,100
|
||||
CONSO DIS,4000 ;SKIP IF STOP ACTUALLY TAKES HOLD
|
||||
SOJG TT,.-1 ;TIME-OUT LOOP
|
||||
JUMPG TT,CPOPJ ;DID NOT TIME OUT, OK
|
||||
CONO DIS,10 ;DISABLE DISPLAY (CLEAR PIA)
|
||||
AOS DISSTQ ;CAUSE "SYSTEM CLOBBERED" ... ON SYS CONSOLE
|
||||
POPJ P,
|
||||
|
||||
|
||||
E.SLPM: PUSHJ P,DCRSTP ; stop before loading page map
|
||||
DCRRST: CAMN U,DISUSR ;IS THE CURRENT U ON DISPLAY?
|
||||
SOSL T,DSTPCT ; SKIP IF LAST START CALL, (FROM MORE THAN 1 STOP)
|
||||
POPJ P, ;NO
|
||||
AOSE T ;SKIP IF ONLY ONE STOP
|
||||
JRST 4,. ;SOME ONE IS OUT OF PHASE!
|
||||
MOVE T,DSCONI
|
||||
CONSZ DIS,7 ;SKIP IF NOT RUNNABLE
|
||||
TRNE T,4000 ;1=> WAS STOPPED
|
||||
POPJ P, ;SO QUIT
|
||||
PUSHJ P,E.SFU2 ; load E&S page map
|
||||
POPJ P,0 ; lost somehow
|
||||
CONO DIS,400 ;ELSE SET RUN
|
||||
CONO DIS,2000 ;THEN ALLOW STOP INT
|
||||
POPJ P,
|
||||
|
||||
; tie down hacks
|
||||
|
||||
;E.SPCH checks MMSWP ind in T against DISSWP
|
||||
; R0 if already there, R1 if not. ret index in H
|
||||
|
||||
E.SPCH: MOVSI H,-MXDISP
|
||||
CAMN T,DISSWP(H)
|
||||
POPJ P,0 ; found
|
||||
AOBJN H,.-2 ; look some more
|
||||
JRST POPJ1 ; not found, skip
|
||||
|
||||
E.SCLB: MOVSI H,-MXDISP
|
||||
SKIPE T,DISSWP(H) ; VALID IF NON-ZERO
|
||||
PUSHJ P,UNTIE ; UNTIE PAGE IN T (MMSWP INDEX)
|
||||
AOBJN H,E.SCLB+1
|
||||
POPJ P,0
|
||||
|
||||
; UNTIE PG T/ MMSWP index
|
||||
; H/ display table index
|
||||
|
||||
UNTIE: AOS E.SNUT ; count unties
|
||||
PUSH P,H
|
||||
MOVSI H,-1
|
||||
ADDB H,MMSWP(T) ; sos # exec pgs
|
||||
SKIPGE H ; if less than zero, untied an untied page
|
||||
JRST 4,. ; exec pg count < 0
|
||||
POP P,H
|
||||
SETZM DISSWP(H) ; clear table entries
|
||||
POPJ P,0
|
||||
|
||||
; ties down page. T/ MMSWP ind.
|
||||
|
||||
E.SPG1: SKIPL MEMBLT(T) ; frozen, so dont tie
|
||||
PUSHJ P,E.SPCH ; skips if not there
|
||||
POPJ P,0 ; dont tie
|
||||
AOS E.SNTI ; count number of ties.
|
||||
MOVSI H,1
|
||||
ADDM H,MMSWP(T) ; aos # exec pgs
|
||||
MOVE H,DISPGP ; fetch dis pg pointer
|
||||
AOBJN H,.+2
|
||||
MOVSI H,-MXDISP ; reset pointer if table full
|
||||
MOVEM H,DISPGP ; update pointer
|
||||
PUSH P,T ; now checks if slot in use
|
||||
SKIPE T,DISSWP(H)
|
||||
PUSHJ P,UNTIE ; untie page in T
|
||||
POP P,T
|
||||
MOVEM T,DISSWP(H) ; remember mmswp ind
|
||||
POPJ P,0
|
||||
|
||||
; E.SPGI called from CFHPI on page in core after fault
|
||||
|
||||
E.SPGI: SKIPGE U,DISUSR
|
||||
JRST 4,. ; why here ?
|
||||
HRRO I,CFHUVP ; user virtul page from CFH...
|
||||
CAME I,E.SPGW ; is the sam as E&S rq ?
|
||||
POPJ P,0 ; no, return
|
||||
SETOM E.SPGH ; set flag for QSWI1 (read/write/first hack)
|
||||
PUSHJ P,E.SPG1 ; tie down
|
||||
SETZM E.SPGW ; clear page wait
|
||||
PUSHJ P,RDSTART ; restart display
|
||||
POPJ P,0
|
||||
POPJ P,0 ; skip return from rdstart if wins
|
||||
|
||||
315
src/system/itsmsp.30
Executable file
315
src/system/itsmsp.30
Executable file
@@ -0,0 +1,315 @@
|
||||
;.OPEN CHNL,PNTR1
|
||||
|
||||
;PNTR1: MODE,,(SIXBIT /NET/)
|
||||
; PNTR2
|
||||
; MYNAME1
|
||||
; MYNAME2
|
||||
|
||||
;PNTR2: HISNAME1
|
||||
; HISNAME2
|
||||
; COUNT
|
||||
; buffer
|
||||
|
||||
;MODES=> BITS 3.1== READ FROM ANY
|
||||
; 3.2== READ FROM SPECIFIC
|
||||
; 3.3== SEND AND HANG
|
||||
; 3.4== SEND IMMEDIATE
|
||||
; 3.5== USE UNAME JNAME AS MY1 AND MY2
|
||||
; 3.6== USE UNAME AS HIS1
|
||||
|
||||
;OPEN FAILURES:
|
||||
; 4 HIS NAME 1 & HIS NAME 2 WERE ZERO
|
||||
; 6 TABLE FULL
|
||||
; 7 ON WRITE, RELOCATION OF READ BUFFER FAILED
|
||||
; 11 ATTEMPT TO SEND TO SELF
|
||||
; 12 NOT A LEGAL MODE
|
||||
; 20 SEND IMMEDIATE, GUY WASN'T THERE
|
||||
; 22 BUFFER NOT IN YOUR CORE IMAGE
|
||||
|
||||
|
||||
EBLK
|
||||
|
||||
MSENTS==40 ;# OF ENTRIES IN THE TABLE
|
||||
|
||||
MSUSER: BLOCK MSENTS ;USER INDEX
|
||||
MSCHNL: BLOCK MSENTS ;USERS CHANNEL
|
||||
MSBADR: BLOCK MSENTS ;RELATIVE ADDRR OF USER'S BUFR
|
||||
MSBCNT: BLOCK MSENTS ;SIZE OF USERS BUFFER
|
||||
|
||||
MSWRIT: BLOCK MSENTS ;SENDING NAME 1
|
||||
MSWRT2: BLOCK MSENTS ;SENDING NAME 2
|
||||
MSREAD: BLOCK MSENTS ;READING NAME 1
|
||||
MSRED2: BLOCK MSENTS ;READING NAME 2
|
||||
|
||||
MSPSW: -1 ;SWITCH FOR MSP VARIABLES
|
||||
0 ;EXTRA WORD, FOR SWTL ROUTINE
|
||||
|
||||
BBLK
|
||||
|
||||
IPCO: PUSHJ P,SWTL ;LOCK THE MSP SWITCH
|
||||
MSPSW
|
||||
TLNE C,1 ; read from any?
|
||||
JRST MSRA ; yes
|
||||
TLNE C,2 ; read from specific?
|
||||
JRST MSRS ; yes
|
||||
TLNE C,4 ; send and hang?
|
||||
JRST MSSH ; yes
|
||||
TLNE C,8 ; send immediate?
|
||||
JRST MSSI ; yes
|
||||
JRST OPNL12 ; none of the above
|
||||
|
||||
; read from any (RA) and read from specific (RS)
|
||||
MSRA: SETOM H ; H/-1 =>RA 0=>RS
|
||||
SKIPA
|
||||
MSRS: SETZM H
|
||||
|
||||
; find first free user slot
|
||||
MOVSI W,-MSENTS ; W/ slot index
|
||||
MSR1: SKIPG MSUSER(W) ; is this slot free?
|
||||
JRST MSR2 ; yes
|
||||
AOBJN W,MSR1
|
||||
JRST OPNL6 ; no free slots, device full
|
||||
|
||||
; W/ slot index of a free slot
|
||||
MSR2: MOVEM U,MSUSER(W) ; occupies this slot
|
||||
; make sure we have a legal buffer
|
||||
HRRZ D,A ; relative address of second buffer
|
||||
MOVEI E,3(D) ; E/ relative address of data area
|
||||
XCTR XRW,[MOVES (D)] ;CHECK COUNT FETCH?
|
||||
XCTR XRW,[MOVES TT,2(D)] ;CHECK ACTUAL COUNT PLACE
|
||||
|
||||
; bufr ok, now put data in table
|
||||
MOVEM E,MSBADR(W) ; stores buffer address
|
||||
MOVEM TT,MSBCNT(W)
|
||||
|
||||
; store sender name only if RS
|
||||
JUMPL H,MSR3
|
||||
XCTR XR,[MOVE TT,(D)] ; his name 1
|
||||
XCTR XR,[MOVE I,1(D)] ; his name 2
|
||||
TLNE C,40 ; his1 = UNAME?
|
||||
MOVE TT,UNAME(U) ; yes
|
||||
SKIPA
|
||||
MSR3: SETZB TT,I ; zero if RA
|
||||
MOVEM TT,MSWRIT(W)
|
||||
MOVEM I,MSWRT2(W)
|
||||
|
||||
; 3.5 bit in C means use UNAME JNAME as myname1 and myname2
|
||||
TLNN C,20 ; skips if want default
|
||||
JRST .+4
|
||||
MOVE TT,UNAME(U)
|
||||
MOVE I,JNAME(U)
|
||||
JRST .+3
|
||||
; else me1 is in B and me2 is in SRN3(U)
|
||||
MOVE TT,B
|
||||
MOVE I,SRN3(U)
|
||||
MOVEM TT,MSREAD(W)
|
||||
MOVEM I,MSRED2(W)
|
||||
|
||||
MOVEI TT,(R) ;GET CHANNEL
|
||||
SUBI TT,IOCHNM(U)
|
||||
MOVEM TT,MSCHNL(W) ;STORE FOR LATER INTERRUPT
|
||||
|
||||
PUSHJ P,LSWPOP ;UNLOCK MSP SWITCH
|
||||
|
||||
; now put tabl index in lh of IOCHNM(U)(R)
|
||||
HRLZ A,W
|
||||
JSP Q,OPSLD1
|
||||
MSPIO,,MSPIO ; attempted IOT will get IOCER 10.
|
||||
; send and hang (SH) and send immediate (SI)
|
||||
MSSI: SETOM H ; H/-1=>SI 0=>SH
|
||||
SKIPA
|
||||
MSSH: SETZM H
|
||||
|
||||
; validate his buffer specs
|
||||
HRRZ D,A ; relative buffer address
|
||||
MOVEI E,3(D) ; E/ relative data addr
|
||||
XCTR XRW,[MOVES (D)] ;CHECK NAME
|
||||
XCTR XRW,[MOVES Q,2(D)] ;CHECK COUNT
|
||||
|
||||
; other data
|
||||
; E/ absolute data addr
|
||||
; Q/ count
|
||||
XCTR XR,[MOVE T,(D)] ; T/ his name 1
|
||||
TLNE C,40 ; 3.6 bit means use UNAME
|
||||
MOVE T,UNAME(U) ; yes
|
||||
XCTR XR,[MOVE TT,1(D)] ; TT/ his name 2
|
||||
JUMPN T,.+3 ; T and TT can not both be zero
|
||||
SKIPN TT
|
||||
JRST OPNL4
|
||||
MOVEM TT,EPDL(U) ; EPDL(U)/ hisname2
|
||||
|
||||
; 3.5 bit in C means use UNAME JNAME as myname1 and myname2
|
||||
TLNN C,20 ; skips if wants default
|
||||
JRST .+4
|
||||
MOVE TT,UNAME(U)
|
||||
MOVE I,JNAME(U)
|
||||
JRST .+3
|
||||
; else myname1 is in B and myname2 is in SRN(U)
|
||||
MOVE TT,B
|
||||
MOVE I,SRN3(U)
|
||||
MOVEM TT,EPDL3(U) ; EPDL3/ myname1
|
||||
MOVEM I,SRN4(U) ; SRN4/ myname2
|
||||
|
||||
; see if entry is in the table
|
||||
PUSHJ P,MSSTBL
|
||||
SKIPA ; no, will havee to wait
|
||||
JRST MSS2 ; yes, service the transfer
|
||||
JUMPL H,OPNL20 ; was an SI, lose
|
||||
MSS1: XCTR XR,[MOVE T,(D)] ; in case it got munged
|
||||
TLNE C,40 ; 3.6 bit means use UNAME
|
||||
MOVE T,UNAME(U)
|
||||
|
||||
|
||||
; wait for entry to appear in table
|
||||
MSDM3: PUSH P,T ;LSWPOP CLOBBERS T
|
||||
PUSHJ P,LSWPOP ;UNLOCK MSPSW FOR WAITING
|
||||
MOVE T,(P) ;RESTOR T
|
||||
SKIPA ; forces a call to ufls
|
||||
PUSHJ P,MSSTBL
|
||||
PUSHJ P,UFLS ; hang . . . .
|
||||
PUSHJ P,SWTL ;RELOCK SWITCH NOW
|
||||
MSPSW
|
||||
POP P,T ;RESTORE T AFTER CLOBBERING BY SWTL
|
||||
PUSHJ P,MSSTBL ; read has been done, get details
|
||||
JRST MSS1 ; oops, must have been aborted
|
||||
|
||||
; FALLS THRU IF MSSTBL SKIPS
|
||||
; table index of the user is now in T
|
||||
MSS2: MOVE H,T ; H/ table index
|
||||
MOVE A,MSUSER(H) ; A/ user index
|
||||
CAMN A,U
|
||||
JRST [PUSHJ P,LSWPOP ;POP MSPSW
|
||||
JRST OPNL11]
|
||||
PUSHJ P,RPCLSR ; stop or i'll shoot
|
||||
PUSHJ P,SOSSET ;SET TO SOS USTP(A) ON PCLSR
|
||||
USTP(A)
|
||||
|
||||
; get the absolute address of the read data buffer
|
||||
MSS3: MOVE A,MSBADR(H) ; relative
|
||||
;SET UP PAGE MAP FOR RECEIVER (USER IN MSUSER(H))
|
||||
PUSH P,R
|
||||
MOVE J,MSUSER(H) ;USER TO RECEIVE
|
||||
PUSHJ P,MPLDJ ;LOAD MAP
|
||||
; fix count (sender cnt in Q, receiver cnt in MSBCNT(H))
|
||||
CAMG Q,MSBCNT(H) ; will it fit?
|
||||
JRST MSS4 ; yes
|
||||
XCTRI XRW,[SETOM -1(A)] ; no, indicate overflow will be lost
|
||||
CAIA ;REFERENCE WORKED, SKIP
|
||||
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||
MOVE B,MSBCNT(H) ; B/ count
|
||||
JRST MSS5
|
||||
MSS4: MOVE B,Q ; B/ count
|
||||
MOVE TT,MSBCNT(H)
|
||||
SUB TT,B
|
||||
XCTRI XRW,[MOVEM TT,-1(A)] ; amount that will be xfered
|
||||
CAIA ;REFERENCE WORKED, SKIP
|
||||
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||
|
||||
; if MSWRIT was zero (RA), fill it in
|
||||
MSS5: SKIPN MSWRIT(H)
|
||||
SKIPE MSWRT2(H)
|
||||
JRST MSS6
|
||||
MOVE TT,EPDL3(U)
|
||||
XCTRI XRW,[MOVEM TT,-3(A)] ; read's him1
|
||||
CAIA ;REFERENCE WORKED, SKIP
|
||||
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||
MOVE TT,SRN4(U) ;
|
||||
XCTRI XRW,[MOVEM TT,-2(A)] ; read's him2
|
||||
CAIA ;REFERENCE WORKED, SKIP
|
||||
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||
|
||||
; RESTORE USER MAP TO CURRENT USER
|
||||
MSS6: PUSHJ P,MPLDZ
|
||||
POP P,R
|
||||
; XFER => B/ CNT A/READ BUFR E/WRIT BUFR J/UNRELOCATED BUFFER (READ)
|
||||
HRRM A,IOCHST-IOCHNM(R) ;STORE RECEIVER ADDRESS FOR UBO
|
||||
MOVN W,B ;-COUNT
|
||||
MOVSS W ;-COUNT,,
|
||||
HRR W,E ;-COUNT,,ADR
|
||||
MOVE C,[SETZ W] ;POINTER FOR UBO
|
||||
MOVE A,MSUSER(H) ;GET OTHER USERS NUMBER FOR UBO
|
||||
PUSHJ P,UBO ;USER BLOCK OUTPUT - DO WRITE TRANSFER
|
||||
|
||||
; RESTART THE LOSER
|
||||
PUSHJ P,LSWPOP ;UNDO RPCLSR (SOS USTP(MSUSR(H)))
|
||||
MOVE A,MSUSER(H) ;GET TARGET USER
|
||||
MOVE B,MSCHNL(H) ;CHANNEL HE OPENED
|
||||
MOVE B,CHNBIT(B) ;BIT CORRESPONDING TO CHAN
|
||||
TDNE B,MSKST2(A) ;SKIP IF NOT ENABLED
|
||||
IORM B,IFPIR(A) ;SET HIS INTERRUPT
|
||||
|
||||
; flush read entry from the table
|
||||
SETZM MSCHNL(H)
|
||||
SETZM MSREAD(H)
|
||||
SETZM MSRED2(H)
|
||||
SETZM MSWRIT(H)
|
||||
SETZM MSWRT2(H)
|
||||
SETZM MSBADR(H)
|
||||
SETZM MSBCNT(H)
|
||||
SETZM MSUSER(H)
|
||||
|
||||
PUSHJ P,LSWPOP ;UNLOCK MSPSW
|
||||
|
||||
; end open
|
||||
SETOM A ; LH IOCHNM==-1 MEANS SEND (FOR CLOS)
|
||||
JSP Q,OPSLD1 ;DOES POPJ BACK TO UUOH
|
||||
MSPIO,,MSPIO
|
||||
; (DOES NOT COME BACK)
|
||||
|
||||
;HERE FOR FAILURE OF XCTRI WHILE MAP SET TO RECEIVER
|
||||
MSS7: POP P,R ;RESTORE STACK
|
||||
PUSHJ P,LSWPOP ;RESTART USER (SOS USTP)
|
||||
PUSHJ P,TPFLT ;TAKE PAGE FAULT, CAUSE PAGE LOAD
|
||||
PUSHJ P,MPLDZ ;RESTORE MY PAGE MAP
|
||||
JRST MSS1 ;TRY AGAIN
|
||||
|
||||
; FIND LOSER IN TABLE SKIP IF WINS
|
||||
; IN => T/READ1 EPDL/READ2 EPDL3/WRITE1 SRN4/WRITE2
|
||||
; OUT => IF WINS, T/TABLE OFFSET
|
||||
MSSTBL: PUSH P,A
|
||||
PUSH P,B
|
||||
PUSH P,C
|
||||
PUSH P,D
|
||||
MOVSI A,-MSENTS
|
||||
MOVE B,EPDL(U) ; B/ READ2
|
||||
MOVE C,EPDL3(U) ; C/ WRITE1
|
||||
MOVE D,SRN4(U) ; D/ WRITE2
|
||||
MSSTB1: CAMN T,MSREAD(A)
|
||||
CAME B,MSRED2(A)
|
||||
JRST MSSTB2
|
||||
SKIPN MSWRIT(A) ; if it was read from any
|
||||
SKIPE MSWRT2(A) ; win if WRIT and WRT2 are both zero
|
||||
JRST .+2
|
||||
JRST MSSTB3
|
||||
CAMN C,MSWRIT(A)
|
||||
CAME D,MSWRT2(A)
|
||||
JRST MSSTB2
|
||||
MSSTB3: HRRZ T,A
|
||||
AOSA -4(P)
|
||||
MSSTB2: AOBJN A,MSSTB1
|
||||
POP P,D
|
||||
POP P,C
|
||||
JRST POPBAJ
|
||||
|
||||
; close routine
|
||||
; A/ lf IOCHNM
|
||||
; R/ addr of IOCHNM(USER)(CHNL)
|
||||
|
||||
MSCLOS: TRNE A,400000 ; -1 means write
|
||||
POPJ P,
|
||||
CAIL A,MSENTS ; in bounds of table?
|
||||
POPJ P, ; no
|
||||
CAME U,MSUSER(A) ; is this still me?
|
||||
POPJ P,
|
||||
|
||||
; yes, make this a free slot
|
||||
SETZM MSCHNL(A)
|
||||
SETZM MSREAD(A)
|
||||
SETZM MSRED2(A)
|
||||
SETZM MSWRIT(A)
|
||||
SETZM MSWRT2(A)
|
||||
SETZM MSBADR(A)
|
||||
SETZM MSBCNT(A)
|
||||
SETZM MSUSER(A)
|
||||
POPJ P,
|
||||
|
||||
63
src/system/kaimp.defs1
Executable file
63
src/system/kaimp.defs1
Executable file
@@ -0,0 +1,63 @@
|
||||
;;; -*- Mode: Midas -*-
|
||||
.AUXIL
|
||||
|
||||
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; Hardware description of AI-KA/ML/MC IMP interface, device "IMP".
|
||||
; For a more detailed description, see AI Hardware Memo #10,
|
||||
; "ARPA Network Interface".
|
||||
; In particular, the "channel 1 multiplexing" feature of the ITS KA's
|
||||
; is used, so that:
|
||||
; When PI level 2 (NETCHN) is assigned, the IMP interface takes
|
||||
; all interrupts on the normal channel (goes to IMPINT).
|
||||
; When PI level 1 (IMPCHN) is assigned,
|
||||
; IMPID+(-IMPLIW) => Pseudo channel 4, location 70 (IMPILC)-> various
|
||||
; IMPOD => Pseudo channel 5, location 72 (IMPOLC)-> various
|
||||
; else normal PI channel 1 (PI0LOC+2)-> IMPBRK
|
||||
|
||||
; CONI bits - starred items cause interrupt on PIA channel
|
||||
; 1.1-1.3 => PIA
|
||||
DEFSYM IMPID==10 ;* INPUT DONE - on when word avail for DATAI
|
||||
DEFSYM IMPI32==20 ; Input in 32 bit mode
|
||||
;DEFSYM IMPIB==40 ; Input Busy
|
||||
DEFSYM IMPOD==100 ;* OUTPUT DONE - Word sent to IMP
|
||||
;DEFSYM IMPO32==200 ; Output in 32 bit mode
|
||||
;DEFSYM IMPOB==400 ; Output Busy
|
||||
DEFSYM IMPERR==1000 ;* Imp Error (interrupt if IMPIC zero)
|
||||
DEFSYM IMPR==2000 ;* Imp Ready (interrupt if IMPIC set)
|
||||
;DEFSYM IMPIC==4000 ; Imp interrupt condition
|
||||
; (0 = int on IMPERR, 1= int on IMPR)
|
||||
DEFSYM IMPHER==10000 ;* Host Error (interrupt if IMPIHE zero)
|
||||
;DEFSYM IMPHR==20000 ; Host Ready
|
||||
;DEFSYM IMPIHE==40000 ; Inhibit interrupt on Host Error (IMPHER)
|
||||
DEFSYM IMPLW==100000 ;* Last Imp Word
|
||||
|
||||
; CONO bits - starred flags are always copied directly to set states
|
||||
;* 1.1-1.3 => PIA set from these bits
|
||||
DEFSYM IMPIDC==10 ; Clear Input Done
|
||||
DEFSYM IMI32S==20 ; Set input to 32 bit mode
|
||||
DEFSYM IMI32C==40 ; Clear input in 32 bit mode
|
||||
DEFSYM IMPODC==100 ; Clear Output Done
|
||||
DEFSYM IMO32S==200 ; Set output to 32 bit mode
|
||||
DEFSYM IMO32C==400 ; Clear output in 32 bit mode
|
||||
DEFSYM IMPODS==1000 ; Set Output Done
|
||||
DEFSYM IMPIR==4000 ;* Copied to IMPIC; 1= Enable int on imp ready
|
||||
DEFSYM IMPHEC==10000 ; Clear Host Error
|
||||
;DEFSYM IMIIHE==40000 ;* Copied to IMPIHE
|
||||
; 1= Inhibit int on host error
|
||||
DEFSYM IMPLHW==200000 ; Set Last Host Word
|
||||
; (do this before last DATAO of msg)
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
561
src/system/ksdefs.193
Executable file
561
src/system/ksdefs.193
Executable file
@@ -0,0 +1,561 @@
|
||||
; -*- Midas -*- This is the file AI:KSHACK;KSDEFS >
|
||||
|
||||
;;; "Devices"
|
||||
|
||||
PI==:4 ;Interrupts
|
||||
PAG==:10 ;Paging
|
||||
..D010==:0 ;(For DDT)
|
||||
.RD.==:20 ;Read various kludges.
|
||||
..D020==:0
|
||||
.WR.==:24 ;Write various kludges.
|
||||
..D024==:0
|
||||
|
||||
;;; XCTR and paging instructions
|
||||
|
||||
UMOVE=:704^9 ;"BLKI 40,"
|
||||
;Same as XCTR XR,[MOVE ...]
|
||||
|
||||
UMOVEM=:705^9 ;"BLKI 50,"
|
||||
;Same as XCTR XW,[MOVEM ...]
|
||||
|
||||
XCTR=:103^9 ;XCT with mapping.
|
||||
XCTRI=:102^9 ;Same, but page fails cause it to skip. Done by
|
||||
;software as on the KL.
|
||||
;;XCTR bits for the KS are theoretically the same as those on the KL.
|
||||
;;These values were generated by reading the documentation rather
|
||||
;;than by copying the bits for XCTR on MC.
|
||||
XR==:4
|
||||
XW==:4
|
||||
XRW==:4
|
||||
XBYTE==:7 ;On MC-KL this is 5. The manual don't list 5 as a
|
||||
;reasonable value at all. The 2 bit causes the EA
|
||||
;calculation for the byte pointer to take place in
|
||||
;the user's context. Since ITS does the EA
|
||||
;calculation for byte pointers it XCTRs ahead of
|
||||
;time, perhaps it doesn't matter?
|
||||
XBR==:1
|
||||
XBW==:4
|
||||
XBRW==:5
|
||||
XEA==:10 ; On MC-KL this is #o16. The processor manual for
|
||||
; the KL contains some waffling about how 10 won't
|
||||
; work and you should use 14 instead. The KS
|
||||
; manual is silent on this point. Seemingly no
|
||||
; bits other than 10 can effect an immediate
|
||||
; instruction. This option doesn't exist on the KA
|
||||
; and is used by ITS in only two places, both in
|
||||
; the KL-specific page fail code. One occurance is
|
||||
; commented out with the claim that it is buggy.
|
||||
; For the moment let us assume that this value will
|
||||
; just work on the KS.
|
||||
|
||||
;;; Traditional instructions.
|
||||
|
||||
RDAPR==:CONI 0, ;= 700240,, C(E) <- System flags
|
||||
;4.3 - 3.5 Flags enabled
|
||||
; (on KL 2.8 says the cache is being swept)
|
||||
;2.3 - 1.5 Flags set
|
||||
;1.4 Some flag is interrupting
|
||||
;1.3 - 1.1 PI level
|
||||
|
||||
WRAPR==:CONO 0, ;= 700200,, System flags <- E
|
||||
; (on KL 2.8 Clears all IO devices)
|
||||
;2.7 - 2.4 Function to perform on flags:
|
||||
; 2.7 Enable
|
||||
; 2.6 Disable
|
||||
; 2.5 Clear
|
||||
; 2.4 Set
|
||||
;2.3 - 1.5 Flags to perform function upon:
|
||||
; 2.3 "Flag 24"
|
||||
; 2.2 KS interrupting the 8080
|
||||
; 2.1 Power failure
|
||||
; 1.9 No memory
|
||||
; 1.8 Bad memory data
|
||||
; 1.7 Corrected memory data
|
||||
; 1.6 Interval done
|
||||
; 1.5 8080 interrupting the KS
|
||||
; (on KL flags are:
|
||||
; 2.3 S bus error
|
||||
; 2.2 No memory
|
||||
; 2.1 IO page failure
|
||||
; 1.9 MB parity
|
||||
; 1.8 Cache directory parity
|
||||
; 1.7 Address parity
|
||||
; 1.6 Power failure
|
||||
; 1.5 Cache sweep done)
|
||||
;1.3 - 1.1 PI level
|
||||
|
||||
80INT==:12000 ;Interrupt 8080 from KS.
|
||||
|
||||
RDPI==:CONI PI, ;= 700640,, C(E) <- PI status
|
||||
;3.7 - 3.1 interrupts requested with CONO PI,
|
||||
; (on KL 2.9 - 2.7 control parity)
|
||||
;2.6 - 1.9 Interrupt in progress
|
||||
;1.8 PI system is on
|
||||
;1.7 - 1.1 Levels turned on
|
||||
|
||||
WRPI==:CONO PI, ;= 700600,, PI status <- E
|
||||
; (on KL 2.9 - 2.7 control parity)
|
||||
;2.5 Drop requests on selected levels
|
||||
;2.4 Clear PI system
|
||||
;2.3 Initiate interrupts on selected levels
|
||||
;2.2 Turn on selected levels
|
||||
;2.1 Turn off selected levels
|
||||
;1.9 Turn off PI system
|
||||
;1.8 Turn on PI system
|
||||
;1.7 - 1.1 Select level
|
||||
|
||||
;;; More traditional looking instructions, sort of...
|
||||
|
||||
APRID==:BLKI 0, ;= 700000,, C(E) <- Processor ID
|
||||
;4.9 - 4.1 Microcode options:
|
||||
; 4.5 ITS microcode
|
||||
; (on KL options are:
|
||||
; 4.9 Tops-20 Paging
|
||||
; 4.8 Extended addressing
|
||||
; 4.7 Exotic microcode
|
||||
; 4.5 ITS microcode)
|
||||
;3.9 - 3.1 Microcode version number
|
||||
;2.9 - 2.7 Hardware options:
|
||||
; None defined.
|
||||
; (on KL options are:
|
||||
; 2.9 50 Hz line frequency
|
||||
; 2.8 Cache
|
||||
; 2.7 Channel
|
||||
; 2.6 Extended KL10
|
||||
; 2.5 Master Oscillator)
|
||||
;2.6 - 1.1 Processor serial number
|
||||
|
||||
RDEBR=:CONI PAG, ;= 701240,, C(E) <- EBR
|
||||
WREBR=:CONO PAG, ;= 701200,, EBR <- E
|
||||
;2.6 Tops-20 style
|
||||
;2.5 Enable pager (and traps)
|
||||
;2.2 - 1.1 EBR physical DEC page number
|
||||
;WREBR resets the cache and page table.
|
||||
;
|
||||
; In the ITS microcode setting bit 2.6 only effects
|
||||
; the style in which MUUOs are trapped. It should
|
||||
; never be set.
|
||||
|
||||
RDUBR=:DATAI PAG, ;= 701040,, C(E) <- UBR
|
||||
WRUBR=:DATAO PAG, ;= 701140,, UBR <- C(E)
|
||||
;4.9 Set AC blocks
|
||||
;4.7 Set UBR
|
||||
;4.3 - 4.1 Current ACs
|
||||
;3.9 - 3.7 Previous ACs
|
||||
;3.2 - 1.1 UBR physical base address
|
||||
;RDUBR always returns a word with 4.9 and 4.7 set.
|
||||
;WRUBR resets the cache and page table.
|
||||
|
||||
CLRPT=:BLKO PAG, ;= 701100,, Clear page table entry
|
||||
;Invalidate the page table entry for the page
|
||||
;referenced by E and reset the cache.
|
||||
;
|
||||
;In the ITS microcode this will only invalidate the
|
||||
;page table entry for half page referenced by E.
|
||||
|
||||
CLRCSH=:BLKI PAG, ;= 701000,, Clear Cache
|
||||
;In the ITS microcode only.
|
||||
;Resets the cache.
|
||||
|
||||
|
||||
;;; Instructions for maintaining the DBRs. LPMR and SPM.
|
||||
|
||||
LDBR1=:BLKI .WR., ;= 702400,, DBR1 <- E
|
||||
SDBR1=:BLKI .RD., ;= 702000,, C(E) <- DBR1
|
||||
LDBR2=:DATAI .WR., ;= 702440,, DBR2 <- E
|
||||
SDBR2=:DATAI .RD., ;= 702040,, C(E) <- DBR2
|
||||
LDBR3=:BLKO .WR., ;= 702500,, DBR3 <- E
|
||||
SDBR3=:BLKO .RD., ;= 702100,, C(E) <- DBR3
|
||||
LDBR4=:DATAO .WR., ;= 702540,, DBR4 <- E
|
||||
SDBR4=:DATAO .RD., ;= 702140,, C(E) <- DBR4
|
||||
;LDBR1, LDBR2, LDBR3 and LDBR4 all reset the cache
|
||||
;and page table. someday they may be careful and
|
||||
;not reset the half of the page table they don't
|
||||
;effect.
|
||||
|
||||
;;; And there is also the traditional:
|
||||
|
||||
LPMR=:CONSO .WR., ;702740,, DBR1, DBR2, ... <- C(E, E+1, ...)
|
||||
SPM=:CONSO .RD., ;702340,, C(E, E+1, ...) <- DBR1, DBR2, ...
|
||||
;The format of the block read and written by these
|
||||
;two instructions is:
|
||||
; (E) DBR1
|
||||
; (E+1) DBR2
|
||||
; (E+2) Quantum timer
|
||||
; (E+3) U.JPC (If this ucode supports it)
|
||||
; (E+4) E.JPC ( " " )
|
||||
;LPMR resets the cache and page table.
|
||||
|
||||
RDTIM=:CONO .RD., ;= 702200,, C(E, E+1) <- Time
|
||||
WRTIM=:CONO .WR., ;= 702600,, Time <- C(E, E+1)
|
||||
; The time is a 71. bit unsigned number. The bottom
|
||||
; 12. bits cannot be set. The bottom 2 bits cannot
|
||||
; even be read. It increments at 4.1 MHz. The top
|
||||
; 59. bits (the ones you can set) thus measure
|
||||
; (almost) milliseconds. The top 69. bits (the
|
||||
; ones you can read) thus measure "short"
|
||||
; microseconds. The time wraps around every 18.
|
||||
; million years. To make the top 59. bits actually
|
||||
; measure milliseconds, the clock would have to run
|
||||
; at 4.096 MHz. However it -really- -does- run at
|
||||
; exactly 4.1 MHz!
|
||||
|
||||
RDINT=:CONI .RD., ;= 702240,, C(E) <- Interval
|
||||
WRINT=:CONI .WR., ;= 702640,, Interval <- C(E)
|
||||
;The interval is a 35. bit number in the same units
|
||||
;as the time. At the end of every interval the
|
||||
;interval done interrupt occurs (CONI APR, bit
|
||||
;1.5). The biggest interval you can set is about 2
|
||||
;hours and 20 minutes. In the DEC microcode the
|
||||
;interval is effectively rounded up to the next
|
||||
;millisecond, so it is really only worth your while
|
||||
;to set the top 23. bits. In the ITS microcode all
|
||||
;bits of the interval are signifigant. Although
|
||||
;the length of a -single- interval cannot be
|
||||
;controlled more accurately than under the DEC
|
||||
;microcode, the average time between interval done
|
||||
;interrupts should converge to the full 35. bit
|
||||
;value.
|
||||
|
||||
RDHSB=:CONSZ .RD., ;= 702300,, C(E) <- HSB base address
|
||||
WRHSB=:CONSZ .WR., ;= 702700,, HSB base address <- C(E)
|
||||
;4.9 Base address is invalid. If this is set
|
||||
; nothing will be written anywhere when the
|
||||
; machine halts.
|
||||
;3.1 - 1.1 Physical address of first location in
|
||||
; which to store debugging info when the
|
||||
; machine halts.
|
||||
;In the ITS microcode, the initial HSB base address
|
||||
; is #o500.
|
||||
;When the machine halts it stores a halt code in
|
||||
; physical location 0 and the PC in location 1.
|
||||
; Then if 4.9 is not set (and the machine has not
|
||||
; just powered on) the contents of the 2901's
|
||||
; registers are dumped in the halt status block,
|
||||
; followed by the VMA.
|
||||
|
||||
;;; Halt Codes
|
||||
|
||||
;CODES 0 TO 77 ARE "NORMAL" HALTS
|
||||
; POWER=0 ;POWER UP
|
||||
; HALT=1 ;HALT INSTRUCTION
|
||||
; CSL=2 ;CONSOLE HALT
|
||||
;CODES 100 TO 777 ARE SOFTWARE ERRORS
|
||||
; IOPF=100 ;I/O PAGE FAIL
|
||||
; ILLII=101 ;ILLEGAL INTERRUPT INSTRUCTION
|
||||
; ILLINT=102 ;BAD POINTER TO UNIBUS INTERRUPT VECTOR
|
||||
;CODES 1000 TO 1777 ARE HARDWARE ERRORS
|
||||
; BW14=1000 ;ILLEGAL BWRITE FUNCTION (BAD DROM)
|
||||
; NICOND 5=1004 ;ILLEGAL NICOND DISPATCH
|
||||
; MULERR=1005 ;VALUE COMPUTED FOR 10**21 WAS WRONG
|
||||
|
||||
;;; Halt Status Block definition
|
||||
|
||||
IFNDEF HSB, HSB==:500
|
||||
HSBMAG=:HSB+0
|
||||
HSBPC=:HSB+1
|
||||
HSBHR=:HSB+2
|
||||
HSBAR=:HSB+3
|
||||
HSBARX=:HSB+4
|
||||
HSBBR=:HSB+5
|
||||
HSBBRX=:HSB+6
|
||||
HSBONE=:HSB+7
|
||||
HSBEBR=:HSB+10
|
||||
HSBUBR=:HSB+11
|
||||
HSBMASK=:HSB+12
|
||||
HSBFLG=:HSB+13
|
||||
HSBPI=:HSB+14
|
||||
HSBXWD1=:HSB+15
|
||||
HSBT0=:HSB+16
|
||||
HSBT1=:HSB+17
|
||||
HSBVMA=:HSB+20
|
||||
|
||||
;;; ITS I/O instructions.
|
||||
|
||||
UBAQ==:1 ; QSK is on Unibus #1
|
||||
UBAI==:3 ; Everything else is on Unibus #3
|
||||
|
||||
IORDI=:710^9 ; C(AC) <- IO(UBAI,,E)
|
||||
IORDQ=:711^9 ; C(AC) <- IO(UBAQ,,E)
|
||||
IORD=:712^9 ; C(AC) <- IO(C(E))
|
||||
IOWR=:713^9 ; IO(C(E)) <- C(AC)
|
||||
IOWRI=:714^9 ; IO(UBAI,,E) <- C(AC)
|
||||
IOWRQ=:715^9 ; IO(UBAQ,,E) <- C(AC)
|
||||
|
||||
IORDBI=:720^9
|
||||
IORDBQ=:721^9
|
||||
IORDB=:722^9
|
||||
IOWRB=:723^9
|
||||
IOWRBI=:724^9
|
||||
IOWRBQ=:725^9
|
||||
|
||||
;;; Byte packing and unpacking instructions.
|
||||
|
||||
;;; These are new with microcode 262, but came from DEC.
|
||||
;;; Variations of BLT that the convert format of each word moved.
|
||||
;;; These are legal in user mode, too. Good thing DECUUO doesn't use them.
|
||||
BLTBU=:716^9 ;Source 8-bit bytes, Destination Unibus format
|
||||
BLTUB=:717^9 ;Source Unibus format, Destination 8-bit bytes
|
||||
|
||||
;;; Future byte packing and unpacking instructions
|
||||
|
||||
;;; =:730^9
|
||||
;;; =:731^9
|
||||
;;; =:732^9
|
||||
;;; =:733^9
|
||||
;;; =:734^9
|
||||
;;; =:735^9
|
||||
;;; =:736^9
|
||||
;;; =:737^9
|
||||
|
||||
;;; Format of ITS page fail word:
|
||||
|
||||
%PF==:1,,525252 ;Left handed bits.
|
||||
%PFUSR==:400000 ;4.9 Indicates user address space.
|
||||
%PFNXI==:200000 ;4.8 Nonexistent IO register.
|
||||
%PFNXM==:100000 ;4.7 Nonexistent memory.
|
||||
%PFPAR==:040000 ;4.6 Uncorrectable memory error.
|
||||
; (AC0 in block 7 has the word unless 4.7 is
|
||||
; also set.)
|
||||
;4.5
|
||||
%PFWRT==:010000 ;4.4 Soft fault reference called for writing.
|
||||
%PF2.9==:004000 ;4.3 - 4.2 Access bits for referenced page in soft
|
||||
%PF2.8==:002000 ; fault.
|
||||
%PFPHY==:001000 ;4.1 Address given was physical.
|
||||
;3.9
|
||||
%PFIO==:000200 ;3.8 Indicates an IO operation.
|
||||
;3.7
|
||||
;3.6
|
||||
%PFBYT==:000020 ;3.5 Indicates a byte IO operation.
|
||||
;3.4 - 1.1 IO address
|
||||
; or
|
||||
;3.1 - 1.1 Memory address
|
||||
$PFPNO==:121000 ;2.9 - 2.2 Virtual page number
|
||||
|
||||
;;; Format of ITS page table entry:
|
||||
|
||||
;2.9 - 2.8 Access bits
|
||||
; 00 Inaccessible
|
||||
; 01 Read only
|
||||
; 10 Read/Write/First
|
||||
; 11 Read/Write
|
||||
PMAGEM==:020000 ;2.5 Age bit
|
||||
PMCSHM==:010000 ;2.4 Cache enable bit
|
||||
PMRCM==:001777 ;2.1 - 1.1 Physical page number
|
||||
; (The page table supports 20 bit physical
|
||||
; addresses.)
|
||||
PMUNSD==:146000 ;Unused bits
|
||||
|
||||
;;; UPT Offsets
|
||||
;;; In non-time sharing and at clock level in ITS UPT=EPT.
|
||||
|
||||
UPTTR1==:421 ;Exec mode arith ovfl trap.
|
||||
UPTTR2==:422 ;Exec mode pdl ov trap.
|
||||
UPTTR3==:423 ;Exec mode trap 3 in non-one-proceed microcode.
|
||||
|
||||
UPTUUO==:424 ;MUUO stored here.
|
||||
UPTUPC==:425 ;MUUO old PC stored here.
|
||||
UPTUCX==:426 ;MUUO context (from RDUBR (= DATAI PAG,)) stored here.
|
||||
|
||||
;;; 427 ;Unused.
|
||||
|
||||
UPTUEN==:430 ;MUUO new PC obtained from here in exec mode when
|
||||
;traps are not enabled. (MUUO as a trap
|
||||
;instruction for example.)
|
||||
UPTUET==:431 ;MUUO new PC obtained from here in exec mode when
|
||||
;traps are enabled.
|
||||
|
||||
UPT1PO==:432 ;One-proceed old PC stored here in one-proceed
|
||||
;microcode.
|
||||
UPT1PN==:433 ;One-proceed new PC obtained from here in
|
||||
;one-proceed microcode.
|
||||
|
||||
UPTUUN==:434 ;MUUO new PC obtained from here in user mode when
|
||||
;traps are not enabled.
|
||||
UPTUUT==:435 ;MUUO new PC obtained from here in user mode when
|
||||
;traps are enabled.
|
||||
|
||||
;;; 436 ;Unused.
|
||||
;;; 437 ;Unused.
|
||||
|
||||
;;; EPT Locations
|
||||
|
||||
IFNDEF EPT, EPT==:0 ;Absolute location of EPT.
|
||||
|
||||
PI0LOC=:EPT+40 ;PI0LOC+2*PICHN = Address of instr pair for PICHN.
|
||||
IRP I,,[1,2,3,4,5,6,7]
|
||||
PI!I!LOC=:PI0LOC+<2*I>
|
||||
TERMIN
|
||||
|
||||
EPTUIT=:EPT+100 ;EPTUIT+I contains address of the interrupt table
|
||||
; for unibus adapter I. Only adapters 1 and 3 ever
|
||||
; exist.
|
||||
|
||||
EPTTR1=:EPT+421 ;Exec mode arith ovfl trap.
|
||||
EPTTR2=:EPT+422 ;Exec mode pdl ov trap.
|
||||
EPTTR3=:EPT+423 ;Exec mode trap 3 (1 proceed?).
|
||||
|
||||
;;; When EPT = UPT the following are useful to have defined:
|
||||
|
||||
EPTUUO=:EPT+UPTUUO
|
||||
EPTUPC=:EPT+UPTUPC
|
||||
EPTUCX=:EPT+UPTUCX
|
||||
EPTUEN=:EPT+UPTUEN
|
||||
EPTUET=:EPT+UPTUET
|
||||
EPT1PO=:EPT+UPT1PO
|
||||
EPT1PN=:EPT+UPT1PN
|
||||
EPTUUN=:EPT+UPTUUN
|
||||
EPTUUT=:EPT+UPTUUT
|
||||
|
||||
;;; In the ITS microcode the three words used to deliver a page fail are
|
||||
;;; determined from the current interrupt level. At level I, the page fail
|
||||
;;; word is stored in EPTPFW+<3*I>, the old PC is stored in EPTPFO+<3*I>,
|
||||
;;; and the new PC is obtained from EPTPFN+<3*I>. If no interrupts are in
|
||||
;;; progress we just use EPTPFW, EPTPFO and EPTPFN.
|
||||
|
||||
EPTPFW=:EPT+440 ;Page fail word stored here.
|
||||
EPTPFO=:EPT+441 ;Page fail old PC stored here.
|
||||
EPTPFN=:EPT+442 ;Page fail new PC obtained from here.
|
||||
|
||||
IRP I,,[1,2,3,4,5,6,7]
|
||||
EPTP!I!W=:EPTPFW+<3*I>
|
||||
EPTP!I!O=:EPTPFO+<3*I>
|
||||
EPTP!I!N=:EPTPFN+<3*I>
|
||||
TERMIN
|
||||
|
||||
;;; 8080 communication area
|
||||
|
||||
8SWIT0=:30 ;Simulated switch 0. Set by 8080 SH command.
|
||||
8KALIV=:31 ;Keep Alive & Status.
|
||||
8CTYIN=:32 ;CTY input.
|
||||
8CTYOT=:33 ;CTY output.
|
||||
8KLKIN=:34 ;KLINIK user input word (from 8080).
|
||||
8KLKOT=:35 ;KLINIK user output word (to 8080).
|
||||
8RHBAS=:36 ;BOOT RH11 base address.
|
||||
8QNUM=:37 ;BOOT Unit Number.
|
||||
8BOOTP=:40 ;Magtape Boot Format and Slave Number.
|
||||
|
||||
;;; 8080 front end (FE) filesystem format
|
||||
|
||||
;;; Disk addresses for the 8080 are stored in 36-bit words in "FE format":
|
||||
;;; (These fields are larger than those given in the DEC document because
|
||||
;;; the cylinder field given there is too small! These numbers reflect the
|
||||
;;; way that the 8080 manipulates 8 bit quantities instead.)
|
||||
%88==:777700,,177400
|
||||
%88CYL==:100,,
|
||||
$88CYL==:301400,, ; 4.9 - 3.7 Cylinder
|
||||
%88TRK==:400
|
||||
$88TRK==:101000,, ; 2.7 - 1.9 Track
|
||||
%88SEC==:1
|
||||
$88SEC==:001000,, ; 1.8 - 1.1 Sector
|
||||
|
||||
;;; The 8080 looks for the "home sector" on cylinder 0, track 0, sector 1.
|
||||
;;; If it fails to find it there it tries sector 10. The home sector is
|
||||
;;; recognized by having SIXBIT /HOM/ in location 0. Location 103 of the
|
||||
;;; home sector contains an FE format address of the first sector of the
|
||||
;;; "FE directory", which is 1000 words (4 sectors) long. Odd numbered
|
||||
;;; locations in the FE directory are not looked at by the 8080. Even
|
||||
;;; numbered locations contain FE format addresses of the first sector of
|
||||
;;; the various "FE files". The following are apparently the only FE files
|
||||
;;; used by the 8080:
|
||||
88RAM==:2 ; Microcode. Always 6 blocks long.
|
||||
; The rest are always 1000 words long. (1/2 block)
|
||||
88BT==:4 ; Bootstrap used by BT command and autoboot.
|
||||
88BT1==:6 ; Bootstrap used by BT1 command.
|
||||
88B2==:12 ; Bootstrap used by B2 command.
|
||||
88FI0==:22 ; First indirect file. Contains a sequence of
|
||||
; 8-bit bytes containing ASCII characters packed
|
||||
; backwards and right justified:
|
||||
; -------------------------------
|
||||
; | 0's | 4th | 3rd | 2nd | 1st |
|
||||
; -------------------------------
|
||||
; The 8080 stops on a zero byte (or perhaps 377?).
|
||||
; Lines must be no longer than 80 characters.
|
||||
; Lines are separated by a single ^M.
|
||||
;
|
||||
; Additional indirect files follow. FIn either
|
||||
; runs the file at 88FI0+n or at 88FI0+2*n, I can't
|
||||
; tell which.
|
||||
|
||||
;;; Note that the only thing described here that doesn't fit inside a
|
||||
;;; single ITS block is the microcode. All we need from the filesystem are
|
||||
;;; the first 2 blocks (for the home sector and the alternate home sectors)
|
||||
;;; and 6 contiguous blocks elsewhere (for the microcode).
|
||||
|
||||
;;; External register addresses
|
||||
|
||||
KSECCS==:100000 ;Memory Status Register (Controller 0)
|
||||
%KE==:1,,520040 ; Left half bits. Right half unnamed.
|
||||
; [R=Read, W=Write, C=Cleared by writing a 1]
|
||||
%KEHLD==:400000 ; 4.9 Error currently being held [R/C]
|
||||
%KEUNC==:200000 ; 4.8 Uncorrectable error [R]
|
||||
%KEREF==:100000 ; 4.7 Refresh error [R/C]
|
||||
%KEPAR==:040000 ; 4.6 Parity error [R/W]
|
||||
%KEENA==:020000 ; 4.5 ECC enabled [R]
|
||||
%KEECC==:017700 ; 4.4 - 3.7 ECC bits [R]
|
||||
%KEPWR==:000040 ; 3.6 Memory backup power is low [R/C]
|
||||
; 3.4 - 1.1 Error address [R]
|
||||
; 1.8 - 1.2 Force ECC bits if non-zero [W]
|
||||
; 1.1 Disable ECC [W]
|
||||
|
||||
;; The 7 ECC bits are decoded as follows: The top bit is a parity bit for
|
||||
;; the bottom 6. The bottom 6 are decoded:
|
||||
;;
|
||||
;; ECC code: Location of failing bit:
|
||||
;;
|
||||
;; 01 ECC 01 bit
|
||||
;; 02 ECC 02 bit
|
||||
;; 04 ECC 04 bit
|
||||
;; 10 ECC 10 bit
|
||||
;; 20 ECC 20 bit
|
||||
;; 40 ECC 40 bit
|
||||
;; 11 - 16 4.9 - 4.4
|
||||
;; 21 - 26 4.3 - 3.7
|
||||
;; 31 - 36 3.6 - 3.1
|
||||
;; 41 - 46 2.9 - 2.4
|
||||
;; 51 - 56 2.3 - 1.7
|
||||
;; 61 - 66 1.6 - 1.1
|
||||
|
||||
UBAPAG==:763000 ;(to 763077) UBA Paging RAM (One per Unibus)
|
||||
UBALEN==:64. ;Length of UBA Paging RAM
|
||||
;When read:
|
||||
%UP==:1,,525377 ; Left half bits.
|
||||
%UPPAR==:020000 ; 4.5 RAM parity bit
|
||||
%UPRPW==:010000 ; 4.4 Force read-pause-write
|
||||
%UP16B==:004000 ; 4.3 Disable upper two bits on Unibus transfers
|
||||
%UPFST==:002000 ; 4.2 Fast mode enable
|
||||
%UPVAL==:001000 ; 4.1 Entry is valid
|
||||
%UPPVL==:000400 ; 3.9 Parity is valid
|
||||
$UPPAG==:121200,, ; 3.2 - 2.2 ITS page number
|
||||
; 2.1 ITS half page
|
||||
; 3.2 - 2.1 DEC page number
|
||||
;When written:
|
||||
%UQ==:0,,537777 ; Right half bits
|
||||
%UQRPW==:400000 ; 2.9 Force read-pause-write
|
||||
%UQ16B==:200000 ; 2.8 Disable upper two bits on Unibus transfers
|
||||
%UQFST==:100000 ; 2.7 Fast mode enable
|
||||
%UQVAL==:040000 ; 2.6 Entry is valid
|
||||
; 2.2 - 1.2 ITS page number
|
||||
; 1.1 ITS half page
|
||||
; 2.2 - 1.1 DEC page number
|
||||
|
||||
UBASTA==:763100 ;UBA Status Register (One per Unibus)
|
||||
; [R=Read, W=Write, C=Cleared by writing a 1,
|
||||
; *=Cleared by any write]
|
||||
%UB==:0,,525270 ; Right half bits.
|
||||
%UBTIM==:400000 ; 2.9 Unibus timeout [R/C]
|
||||
%UBBAD==:200000 ; 2.8 Bad mem data (on NPR transfer) [R/C]
|
||||
; (Master will timeout instead if %UBDXF set)
|
||||
%UBPAR==:100000 ; 2.7 KS10 bus parity error [R/C]
|
||||
%UBNXD==:040000 ; 2.6 CPU addressed non-ex device [R/C]
|
||||
%UBHIG==:004000 ; 2.3 Interrupt request on BR7 or BR6 (high) [R]
|
||||
%UBLOW==:002000 ; 2.2 Interrupt request on BR5 or BR4 (low) [R]
|
||||
%UBPWR==:001000 ; 2.1 Power low [R/*]
|
||||
%UBDXF==:000200 ; 1.8 Disable tranfer on uncorrectable data [R/W]
|
||||
%UBINI==:000100 ; 1.7 Issue Unibus init [W]
|
||||
%UBPIH==:000070 ; 1.6 - 1.4 PI level for BR7 or BR6 (high) [R/W]
|
||||
%UBPIL==:000007 ; 1.3 - 1.1 PI level for BR5 or BR4 (low) [R/W]
|
||||
|
||||
UBAMNT==:763101 ;UBA Maintenance (One per Unibus)
|
||||
; 1.2 Spare maintenance bit (?)
|
||||
; 1.1 Change NPR address (?)
|
||||
58
src/system/ksnet.1
Executable file
58
src/system/ksnet.1
Executable file
@@ -0,0 +1,58 @@
|
||||
;;; Chaosnet interface on Unibus
|
||||
|
||||
CAICSR=3,,764140 ;COMMAND STATUS REG
|
||||
CH%CSR==0
|
||||
%CABSY==1 ;0 XMT BUSY (RO)
|
||||
%CALUP==2 ;1 LOOP BACK (R/W)
|
||||
%CASPY==4 ;2 RECIEVE MSGS FOR ANY DESTINATION (R/W)
|
||||
%CARCL==10 ;3 CLEAR THE RECEIVER, IT CAN NOW GOBBLE ANOTHER MSG (WO)
|
||||
%CAREN==20 ;4 RCV INT ENB (R/W)
|
||||
%CATEN==40 ;5 XMT INT ENB (R/W)
|
||||
%CATAB==100 ;6 TRANSMIT ABORTED BY ETHER CONFLICT (RO)
|
||||
%CATDN==200 ;7 TRANSMIT DONE. SET WHEN TRANSMITTER IS DONE
|
||||
%CATCL==400 ;8 CLEAR THE TRANSMITTER, MAKING IT READY (WO)
|
||||
$CALOS==110400 ;9-12 LOST COUNT (RO) [# MSGS RCVED WITH RCV BFR FULL]
|
||||
; WHEN MSG IS WAITING IN BUFFER, THIS COUNTS
|
||||
; THE MESSAGES THAT MATCHED OUR DESTINATION OR
|
||||
; WERE BROADCAST, BUT COULDN'T BE RECIEVED.
|
||||
; WHEN RECEIVER IS RE-ENABLED (WRITE 1 INTO %CARDN)
|
||||
; THE COUNT IS THEN CLEARED.
|
||||
; WHEN A MESSAGE IS LOST, RECEIVER ZAPS ETHER
|
||||
; SO TRANSMITTER WILL ABORT (IF MESSAGE WAS DESTINED
|
||||
; TO US.)
|
||||
%CARST==20000 ;13 I/O RESET (WO)
|
||||
%CAERR==40000 ;14 CRC ERROR (RO)
|
||||
%CARDN==100000 ;15 RCV DONE.
|
||||
|
||||
CAIMYN==3,,764142 ;MY # (READ ONLY)
|
||||
CH%MYN==2 ;RETURNS THE [SOURCE] HOST# OF THIS INTERFACE.
|
||||
|
||||
CAIWBF=3,,764142 ;WRITE BUFFER (WRITE ONLY)
|
||||
CH%WBF==2 ;FIRST WAIT FOR TDONE. (OR SET IT VIA CSR)
|
||||
;FIRST WORD IN RESETS TRANSMITTER AND CLEARS TDONE.
|
||||
;STORE INTO THIS REGISTER TO WRITE WORDS OF MESSAGE,
|
||||
;LAST WORD IN IS DESTINATION ADDRESS, THEN READ CAIXMT.
|
||||
;SOURCE ADDRESS AND CHECK WORD PUT IN BY HARDWARE.
|
||||
|
||||
CAIRBF=3,,764144 ;READ BUFFER (READ ONLY)
|
||||
CH%RBF==4 ;THE FIRST WORD READ WILL BE FILLED TO THE LEFT
|
||||
;TO MAKE THE MESSAGE RECIEVED A MULTIPLE OF 16 BITS.
|
||||
;IF THE NUMBER OF DATA BITS IN THE MESSAGE WAS A
|
||||
;MULTIPLE OF 16, THIS WORD WILL BE THE FIRST WORD PUT
|
||||
;INTO THE BUFFER BY THE TRANSMITTING HOST.
|
||||
;THE LAST 3 WORDS READ ARE DESTINATION, SOURCE, CHECK.
|
||||
|
||||
CAIRBC=3,,764146 ;RECEIVE BIT COUNTER (READ ONLY)
|
||||
CH%RBC==6 ;WHEN A MESSAGE HAS BEEN RECEIVED THIS IS ONE LESS THAN
|
||||
;THE NUMBER OF BITS IN THE MESSAGE (16 X THE
|
||||
;NUMBER OF WORDS INCLUDING THE THREE OVERHEAD WORDS.)
|
||||
;AFTER THE LAST WORD (THE CRC WORD) HAS BEEN READ, IT IS 7777
|
||||
;BITS 10 AND 11 ARE THE HIGH ORDER BITS, AND IF THEY ARE ONE,
|
||||
;THEN THERE WAS A BUFFER OVERFLOW
|
||||
|
||||
CAIXMT=3,,764152 ;READING THIS INITIATES TRANSMISSION (!!)
|
||||
CH%XMT==12 ;THE VALUE READ IS ONE'S OWN HOST#.
|
||||
|
||||
;REFERENCING ADDRESSES IN THE GROUP OF 8 WORDS NOT LISTED HERE, OR
|
||||
;USING COMBINATIONS OF READ/WRITE NOT LISTED HERE, WILL TYPICALLY CAUSE
|
||||
;STRANGE AND BIZARRE EFFECTS.
|
||||
80
src/system/lhdh.defs5
Executable file
80
src/system/lhdh.defs5
Executable file
@@ -0,0 +1,80 @@
|
||||
;;; -*- Mode: Midas -*-
|
||||
.AUXIL
|
||||
|
||||
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; The ACC IMP interface on the KS implements two separate Unibus IO
|
||||
; devices, for input and output. Both of these devices transfer data in
|
||||
; 32-bit mode only over the Unibus via DMA. Because of the DMA data
|
||||
; transfer the interrupt structure is trivial, and uses NETCHN only.
|
||||
;
|
||||
; Apparently the reset bits in the two CSRs are wired together, so
|
||||
; resetting one side of the machine resets both. This action also drops
|
||||
; the HOST READY line to the IMP.
|
||||
;
|
||||
; You must set %LHSE whenever hte HOST READY line is high, or the IMP
|
||||
; will be allowed to freely throw away data. This is true across IMP
|
||||
; message boundaries, and even if no input request is active.
|
||||
;
|
||||
|
||||
;ACC LH-DH IMP Interface Bits
|
||||
|
||||
;Interrupt information
|
||||
DEFSYM %LHVEC==250 ;Input side interrupt vector (non-standard)
|
||||
;Output side assumed to be %LHVEC+4
|
||||
DEFSYM %LHPRI==6 ;Interrupt priority (non-standard)
|
||||
|
||||
DEFSYM %LHBAS==767600 ;Base of LH/DH Unibus register address space
|
||||
|
||||
;Unibus Registers
|
||||
DEFSYM %LHICS=:%LHBAS ;Control and Status, Input side
|
||||
DEFSYM %LHIDB=:%LHBAS+2 ;Data Buffer, Input
|
||||
DEFSYM %LHICA=:%LHBAS+4 ;Current Word Address, Input
|
||||
DEFSYM %LHIWC=:%LHBAS+6 ;Word Count, Input
|
||||
|
||||
DEFSYM %LHOCS=:%LHBAS+10 ;Control and Status, Output side
|
||||
DEFSYM %LHODB=:%LHBAS+12 ;Data Buffer, Output
|
||||
DEFSYM %LHOCA=:%LHBAS+14 ;Current Word Address, Output
|
||||
DEFSYM %LHOWC=:%LHBAS+16 ;Word Count, Output
|
||||
|
||||
;Bits in CSRs
|
||||
; Bits common to input and output
|
||||
DEFSYM %LHERR==1_15. ;Error present
|
||||
DEFSYM %LHNXM==1_14. ;Non Existant Memory on DMA
|
||||
DEFSYM %LHMRE==1_9. ;Master Ready Error (ready bounce during xfr)
|
||||
DEFSYM %LHRDY==1_7. ;Device Ready (modifying LHDH regs allowed)
|
||||
DEFSYM %LHIE==1_6. ;Interrupt Enable
|
||||
DEFSYM %LHA17==1_5. ;Address bit 17 for extended unibus xfrs
|
||||
DEFSYM %LHA16==1_4. ;Address bit 16 for extended unibus xfrs
|
||||
DEFSYM %LHRST==1_1. ;Interface Reset
|
||||
DEFSYM %LHGO==1 ;GO - Start DMA Transfer
|
||||
|
||||
; Input side
|
||||
DEFSYM %LHEOM==1_13. ;End-of-Message received from IMP
|
||||
DEFSYM %LHHR==1_11. ;Host Ready (ACC's relay closed, debounced)
|
||||
DEFSYM %LHINR==1_10. ;IMP not ready
|
||||
DEFSYM %LHIBF==1_8. ;Input Buffer Full
|
||||
DEFSYM %LHSE==1_3. ;Store Enable (0 == flush data instead)
|
||||
DEFSYM %LHHRC==1_2. ;Host Ready Relay Control (1 to close relay)
|
||||
|
||||
; Output side
|
||||
DEFSYM %LHWC0==1_13. ;Output Word Count is zero
|
||||
DEFSYM %LHOBE==1_8. ;Output Buffer Empty
|
||||
DEFSYM %LHBB==1_3. ;Bus Back (loopback enable for testing)
|
||||
DEFSYM %LHELB==1_2. ;Send EOM indication to IMP at end of xfr
|
||||
; (enable Last Bit Flag)
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
|
||||
1461
src/system/mtape.197
Executable file
1461
src/system/mtape.197
Executable file
File diff suppressed because it is too large
Load Diff
2761
src/system/ncp.9
Executable file
2761
src/system/ncp.9
Executable file
File diff suppressed because it is too large
Load Diff
501
src/system/net.32
Executable file
501
src/system/net.32
Executable file
@@ -0,0 +1,501 @@
|
||||
;; For ITS network stuff, the following parameters are defined:
|
||||
;
|
||||
; NETP - General network code (net independent, both CHAOS, NCP, TCP, etc)
|
||||
; INETP - Internet Protocol code. Must have IMPP or some other device.
|
||||
; NCPP - Include NCP code (IMPP must be on)
|
||||
; TCPP - Include TCP code (INETP must be on)
|
||||
|
||||
; CHAOSP - Include CHAOS net code
|
||||
; - other CHAOS stuff, all independent of internet stuff.
|
||||
|
||||
NE%UNT==:<1_32.> ; Escape bit indicating non-Internet address
|
||||
NW$BYT==:301400 ; Byte pointer to network number (approx!)
|
||||
NE%STR==:<1_33.> ; Escape bit indicating string-type address
|
||||
|
||||
DEFINE HOSTN A,B,C,D
|
||||
.RADIX 10.,<<<<<A_8>+B>_8>+C>_8>+D,!TERMIN
|
||||
|
||||
; HOSTS3 full word network # values for certain networks
|
||||
|
||||
NW%CHS==:<NE%UNT+<7_24.>>
|
||||
NW%ARP==:<12_24.>
|
||||
NW%LCS==:<22_24.>
|
||||
NW%AI==:HOSTN 128,52,0,0
|
||||
|
||||
DEFINE GETNET AC,(ADDR) ; Macro to extract net number
|
||||
IFNB [ADDR] MOVE AC,ADDR
|
||||
TLNN AC,(17_32.) ; Check for non-Internet type addrs
|
||||
TLNN AC,(1_31.) ; Internet address, see if class A net
|
||||
TDZA AC,[77,,-1] ; Unternet or class A, zap low 3 octets
|
||||
TLNN AC,(1_30.) ; Class B or C, see which.
|
||||
TRZA AC,177777 ; Class B network, zap low 2 octets
|
||||
TRZ AC,377 ; Class C net, only zap 1 low octet
|
||||
TERMIN
|
||||
|
||||
;;; Misc defs
|
||||
CALL==<PUSHJ P,>
|
||||
RET==<POPJ P,>
|
||||
CALRET==<JRST>
|
||||
|
||||
OVHMTR NET
|
||||
|
||||
IFN IMPP,[ ; ARPAnet IMP interface code
|
||||
IFN KAIMP,[
|
||||
$INSRT IMPOLD
|
||||
]
|
||||
IFN KSIMP,[
|
||||
$INSRT IMP
|
||||
]
|
||||
]
|
||||
|
||||
OVHMTR NET
|
||||
|
||||
IFN NCPP,[ ; Old Arpanet NCP protocol code
|
||||
$INSRT NCP
|
||||
]
|
||||
OVHMTR NET
|
||||
|
||||
IFN INETP,[ ; Internet Protocol code
|
||||
$INSRT INET
|
||||
]
|
||||
|
||||
OVHMTR NET
|
||||
|
||||
IFN TCPP,[ ; Transmission Control Protocol code
|
||||
$INSRT TCP
|
||||
]
|
||||
|
||||
OVHMTR UUO
|
||||
|
||||
IFN CHAOSP,[ ; CHAOSnet interface and protocol code
|
||||
$INSRT CHAOS
|
||||
]
|
||||
OVHMTR UUO
|
||||
|
||||
SUBTTL General Network System Calls
|
||||
|
||||
; .CALL NETRFC - Get a pending Request For Connection for a specific network
|
||||
; Arg 1 - SIXBIT name of network
|
||||
; Arg 2 - optional network-dependent arg
|
||||
; (for CHAOS, points to packet buffer)
|
||||
; Val 1 - network-dependent value
|
||||
; For TCP and ARPNCP, this is <id>,,<port/socket #>
|
||||
; Control bits:
|
||||
%NQREF==:1 ; Arg 2 is previously returned identifier,
|
||||
; refuse connection and flush from queue.
|
||||
|
||||
NETRFC: MOVE C,CTLBTS(U) ; Set up control bits in C
|
||||
IFN TCPP,[
|
||||
CAMN A,[SIXBIT /TCP/]
|
||||
JRST TCPRQ
|
||||
]
|
||||
IFN CHAOSP,[
|
||||
CAMN A,[SIXBIT /CHAOS/]
|
||||
JRST [ TRNE C,%NQREF ; If refusing conn,
|
||||
JRST OPNL12 ; Ignore, can't handle yet. "Mode not avail"
|
||||
CAIGE W,2 ; Must have a 2nd arg
|
||||
JRST OPNL30 ; "Too few args"
|
||||
MOVE A,B ; Fake out old CHAOSQ call
|
||||
JRST CHAOSQ]
|
||||
]
|
||||
IFN NCPP,[ ; NOP for now
|
||||
; CAMN A,[SIXBIT /ARPNCP/]
|
||||
; JRST IMPRQ
|
||||
]
|
||||
JRST OPNL33 ; No match, say "meaningless args".
|
||||
|
||||
; .CALL NETBLK - Wait for net channel state to change, or time out.
|
||||
; Arg 1 - Channel (comes in R)
|
||||
; Arg 2 - Undesired state
|
||||
; Arg 3 - Optional timeout (as in .SLEEP), written back unless immediate
|
||||
; Val 1 - New state
|
||||
; Val 2 - Time left
|
||||
|
||||
NETBLK: HRRZ T,(R) ; Get IOCHNM RH = device index
|
||||
HLRZ I,(R) ; Get LH = often connection index
|
||||
IFN NCPP,[
|
||||
CAIL T,NETDUI
|
||||
CAILE T,NETDBO
|
||||
CAIA
|
||||
JRST [MOVE T,[HRRZ A,IMSOC4]
|
||||
JRST NETBLI]
|
||||
] ;NCPP
|
||||
IFN CHAOSP,[
|
||||
CAIE T,CHAIDN
|
||||
CAIN T,CHAODN
|
||||
JRST [MOVE T,[HRRZ A,CHSSTA]
|
||||
JRST NETBLI]
|
||||
] ;CHAOSP
|
||||
IFN TCPP,[
|
||||
CAIN T,TCPDUI
|
||||
JRST [ MOVE T,[HLRZ A,XBSTAU]
|
||||
JRST NETBLI]
|
||||
CAIN T,TCPDUO
|
||||
JRST [ MOVE T,[HRRZ A,XBSTAU]
|
||||
JRST NETBLI]
|
||||
] ;TCP
|
||||
JRST OPNL34 ; Not a net chan, say "Wrong Type Device".
|
||||
|
||||
|
||||
; T/ Instruction to XCT (not indexed) to get state in A
|
||||
; Entry at NETBLI adds (I) to the instruction.
|
||||
|
||||
NETBLI: ADDI T,(I) ; Provide "index" for instruction.
|
||||
NETBL0: CAIGE W,3
|
||||
JRST [ HRLOI D,377777 ; No time given, use infinity
|
||||
JRST NETBL4 ]
|
||||
TLNE C,1000 ; Skip if pointer rather than immediate
|
||||
JRST [ HRRZ D,C ; Get immediate time
|
||||
ADD D,TIME
|
||||
JRST NETBL4 ]
|
||||
XCTR XRW,[MOVES D,(C)] ; Get time, check writeability
|
||||
JUMPGE D,[ MOVNS D ; Relative time, make negative absolute
|
||||
SUB D,TIME
|
||||
JRST .+1 ]
|
||||
UMOVEM D,(C) ; Store back absolute time
|
||||
MOVNS D ; Make positive
|
||||
NETBL4: MOVEM D,AC0S+D(U) ; Save absolute time to wait until
|
||||
MOVEM B,AC0S+B(U) ; Save undesired state
|
||||
PUSHJ P,NETBL2 ; Skip if state change or timeout
|
||||
PUSHJ P,UFLS
|
||||
MOVE B,D
|
||||
SUB B,TIME ; How much used?
|
||||
XCT T ; Return new state
|
||||
JRST POPJ1
|
||||
|
||||
NETBL2: XCT T ; Get current state
|
||||
CAME A,AC0S+B(U) ; Skip if still match
|
||||
JRST POPJ1
|
||||
MOVE A,AC0S+D(U) ; Timeout time
|
||||
CAMG A,TIME
|
||||
AOS (P)
|
||||
POPJ P,
|
||||
|
||||
SUBTTL Utilities - CVTH2A, CVTH3A
|
||||
|
||||
|
||||
; CVH2NA - Convert network host address in A to HOSTS2 format.
|
||||
; A/ net address (any format)
|
||||
; Returns A
|
||||
|
||||
CVH2NA: PUSH P,B
|
||||
LDB B,[301400,,A] ; Get high 12 bits of net address
|
||||
CAIGE B,70 ; If less than lowest HOSTS2-fmt value
|
||||
JUMPN B,CVH2N3 ; then must be HOSTS3, go convert.
|
||||
CAIL B,1000 ; If any of high 3 bits set,
|
||||
JRST CVH2N3 ; then it's a HOSTS3 strange-fmt number.
|
||||
JUMPN B,CVH2N2
|
||||
CAILE A,377 ; Zero network, so must be ARPA net
|
||||
JRST CVH2N1 ; Not just 8 bits, just add net number.
|
||||
|
||||
; Old-style 8-bit Arpanet host number
|
||||
LSHC A,-6.
|
||||
ROT B,6.
|
||||
DPB B,[112000,,A]
|
||||
CVH2N1: TLO A,(12_33)
|
||||
JRST POPBJ
|
||||
|
||||
; Probably HOSTS2 format number
|
||||
CVH2N2: JRST POPBJ ; For now, that's good enough.
|
||||
|
||||
; HOSTS3 format number, convert it.
|
||||
CVH2N3: CAIN B,12 ; Arpa net?
|
||||
JRST [ LSHC A,-16.
|
||||
ANDI A,377
|
||||
ROT B,16.
|
||||
DPB B,[112000,,A]
|
||||
TLO A,(12_33)
|
||||
JRST POPBJ]
|
||||
CAIN B,7+<NE%UNT_-24.> ; Chaos net?
|
||||
JRST [ ANDI A,177777 ; Yup, fix it up.
|
||||
TLO A,(7_33)
|
||||
JRST POPBJ]
|
||||
CAIN B,22 ; LCS net?
|
||||
JRST [ LSHC A,-8.
|
||||
ANDI A,-1
|
||||
LSH A,2
|
||||
LSHC A,8.
|
||||
TLO A,(22_33)
|
||||
JRST POPBJ]
|
||||
|
||||
; Not a known net, but try to do something plausible.
|
||||
ANDCM A,[-1_24.] ; Preserve low 24 bits
|
||||
DPB B,[331100,,A] ; put net # into HOSTS2 field.
|
||||
POP P,B
|
||||
RET
|
||||
|
||||
; CVH3NA - Convert network host address in A to HOSTS3 (Internet) format.
|
||||
; A/ net address (any format)
|
||||
; Returns A
|
||||
|
||||
CVH3NA: PUSH P,B
|
||||
LDB B,[301400,,A] ; Get high 12 bits of net address
|
||||
CAIGE B,70 ; If less than lowest HOSTS2 value,
|
||||
JUMPN B,CVH3N3 ; it's already HOSTS3 format! (unless zero)
|
||||
CAIL B,1000 ; If any of high 3 bits were set,
|
||||
JRST CVH3N3 ; it must be a HOSTS3 strange-fmt addr.
|
||||
JUMPN B,CVH3N2 ; If not zero, then must assume HOSTS2 fmt.
|
||||
|
||||
; Old-format 8-bit Arpanet host number, or HOSTS2 with zero net.
|
||||
CAILE A,377
|
||||
JRST CVH3N6 ; If greater than 8 bits, assume HOSTS2, zero net.
|
||||
LSHC A,-6 ; Put 10 bits spacing between host/imp #s.
|
||||
LSH B,-<2+8.>
|
||||
LSHC A,<2+8.+6>
|
||||
TLO A,(12_24.) ; and add ARPA network number.
|
||||
JRST CVH3N3
|
||||
|
||||
; HOSTS2 format number
|
||||
CVH3N2: TRZE B,7 ; Zap low 3 bits to ensure correct comparison
|
||||
JRST CVH3N5 ; If any were set, can't be Chaosnet.
|
||||
CAIN B,7_3 ; Chaos net?
|
||||
JRST [ ANDI A,177777 ; Yes, kill all but bottom 16 bits
|
||||
TLO A,(NE%UNT+<7_24.>) ; Add Chaos net #
|
||||
JRST CVH3N3]
|
||||
CVH3N5: CAIN B,12_3 ; Arpa net?
|
||||
CVH3N6: JRST [ LSHC A,-9.
|
||||
ANDI A,177777
|
||||
ROT B,9.
|
||||
DPB B,[201000,,A]
|
||||
TLO A,(12_24.)
|
||||
JRST CVH3N3]
|
||||
CAIN B,22_3 ; LCS net?
|
||||
JRST [ LSHC A,-8.
|
||||
LSH A,-2
|
||||
ANDI A,377
|
||||
LSHC A,-8.
|
||||
TLO A,(22_24.)
|
||||
JRST CVH3N3]
|
||||
|
||||
; No match, assume it's HOSTS3.
|
||||
|
||||
CVH3N3: POP P,B
|
||||
RET
|
||||
|
||||
;.CALL STYNET
|
||||
;ARG 1 - STY CHANNEL
|
||||
;ARG 2 - NET INPUT CHANNEL TO CONNECT STY OUTPUT TO, OR -1 TO DISCONNECT
|
||||
;ARG 3 - NET OUTPUT CHANNEL TO CONNECT STY INPUT TO
|
||||
;ARG 4 - CHARS TO SEND WHEN OUTPUT .RESET HAPPENS ON STY'S TTY
|
||||
; UP TO 3 8-BIT CHARACTERS, LEFT JUSTIFIED.
|
||||
|
||||
NSTYNT: TLNN R,%CLSST
|
||||
JRST OPNL34 ;1ST ARG NOT A STY CHANNEL.
|
||||
HLRZ I,(R) ;GET TTY # OF STY
|
||||
HRRES B ;ALLOW IMMEDIATE -1
|
||||
JUMPGE B,NSTYN2 ;JUMP IF CONNECTING.
|
||||
PUSHJ P,NSTYN0 ;DISCONNECT
|
||||
JRST OPNL41 ;WASN'T CONNECTED
|
||||
JRST POPJ1
|
||||
|
||||
;VARIOUS ROUTINES CALL HERE WITH THE TTY# OF A STY IN I, TO DISCONNECT THE
|
||||
; STY FROM THE NETWORK. NOTE THIS ROUTINE MUST NOT CHANGE U AND MUST NOT
|
||||
; LSWCLR, SINCE IT COULD BE CALLED FROM IODCL VIA STYCLS OR NETCLS.
|
||||
|
||||
NSTYN0: MOVSI B,%SSNET ;DISCONNECTING BOTH SIDES.
|
||||
CONO PI,NETOFF
|
||||
TDNN B,STYSTS-NFSTTY(I)
|
||||
POPJ P, ;THIS STY NOT CONNECTED?
|
||||
ANDCAB B,STYSTS-NFSTTY(I) ;MARK AS NO LONGER CONNECTED
|
||||
MOVE C,STYNTL-NFSTTY(I) ;REMOVE THIS STY FROM ACTIVATION LIST
|
||||
MOVEI D,STYNTA-STYNTL+NFSTTY
|
||||
NSTYN1: CAMN I,STYNTL-NFSTTY(D) ;FIND THE STY THAT POINTS TO THIS ONE,
|
||||
MOVEM C,STYNTL-NFSTTY(D) ;AND PATCH US OUT OF THE LIST.
|
||||
SKIPE D,STYNTL-NFSTTY(D) ;SEARCH WHOLE LIST TILL FIND WHO POINTS TO US.
|
||||
JRST NSTYN1
|
||||
SETOB C,STYNTL-NFSTTY(I)
|
||||
EXCH C,STYNTI-NFSTTY(I) ;MARK THIS STY AS HAVING NO CONNECTION, GET SOCKET INDICES
|
||||
IFN CHAOSP,[
|
||||
TLNE B,%SSCHA
|
||||
JRST [ MOVSI B,%SSCHA ;DISCONNECT FROM CHAOS NET
|
||||
ANDCAM B,STYSTS-NFSTTY(I)
|
||||
MOVSI B,%CFSTY
|
||||
TDNN B,CHSSTA(C)
|
||||
JRST 4,. ;CHAOS DOESN'T THINK IT WAS CONNECTED?
|
||||
ANDCAM B,CHSSTA(C)
|
||||
JRST NETOJ1 ]
|
||||
];CHAOSP
|
||||
IFN TCPP,[
|
||||
TLNE B,%SSTCP
|
||||
JRST [ MOVSI B,%SSTCP ; Disconnect from TCP connection
|
||||
ANDCAM B,STYSTS-NFSTTY(I) ; Flush STY's "connect" bit
|
||||
MOVSI B,(XB%STY)
|
||||
TDNN B,XBUSER(C) ; Make sure TCP thinks connected
|
||||
BUG ; It isn't??
|
||||
ANDCAM B,XBUSER(C)
|
||||
JRST NETOJ1]
|
||||
] ;TCPP
|
||||
IFN NCPP,[
|
||||
MOVE B,[40000,,777]
|
||||
TDNN B,IMSOC5(C)
|
||||
JRST 4,. ;SOCKET DOESN'T THINK IT WAS CONNECTED?
|
||||
ANDCAM B,IMSOC5(C) ;AND MARK SOCKETS WE WERE CONNECTED TO AS DISCONNECTED
|
||||
MOVSS C
|
||||
TDNN B,IMSOC5(C)
|
||||
JRST 4,. ;SOCKET DOESN'T THINK IT WAS CONNECTED?
|
||||
ANDCAM B,IMSOC5(C)
|
||||
JRST NETOJ1
|
||||
] ;NCPP
|
||||
.ELSE BUG
|
||||
|
||||
; Here to set up STY connection.
|
||||
|
||||
NSTYN2: MOVE Q,I ;SAVE TTY # OF STY
|
||||
MOVEI E,1
|
||||
MOVE A,B ;DECODE THE NETWORK INPUT CHANNEL
|
||||
JSP T,CHNDCD
|
||||
HRRZ A,(R)
|
||||
IFN CHAOSP,[
|
||||
CAIE A,CHAIDN
|
||||
CAIN A,CHAODN
|
||||
JRST [ HLRZ I,(R) ;CONNECT TO CHAOS NET
|
||||
CONO PI,NETOFF
|
||||
MOVSI B,%CFSTY
|
||||
TDNE B,CHSSTA(I)
|
||||
JRST OPNL23 ;ALREADY CONNECTED, FILE LOCKED
|
||||
MOVSI C,%SSNET+%SSCHA
|
||||
TDNE C,STYSTS-NFSTTY(Q)
|
||||
JRST OPNL23 ;ALREADY CONNECTED, FILE LOCKED
|
||||
IORM B,CHSSTA(I) ;OK, HOOK UP
|
||||
DPB Q,[$CFTTN,,CHSSTA(I)]
|
||||
JRST NSTYN3 ]
|
||||
];CHAOSP
|
||||
IFN TCPP,[
|
||||
CAIE A,TCPDUI
|
||||
CAIN A,TCPDUO
|
||||
JRST [HLRZ I,(R) ; Connect to TCP, get TCB index
|
||||
CONO PI,NETOFF
|
||||
MOVSI B,(XB%STY)
|
||||
TDNE B,XBUSER(I)
|
||||
JRST OPNL23 ; TCB Already connected, say "File Locked"
|
||||
MOVSI C,%SSNET+%SSTCP
|
||||
TDNE C,STYSTS-NFSTTY(Q)
|
||||
JRST OPNL23 ; STY already connected, say "File Locked"
|
||||
DPB Q,[XB$STY (I)] ; Store TTY # to connect TCB.
|
||||
JRST NSTYN3]
|
||||
] ;TCPP
|
||||
IFN NCPP,[
|
||||
JSP T,NETCHK ;TEST LEGALITY; OPNL IF LOSES
|
||||
TDNE E,IMSOC2(I)
|
||||
JRST OPNL2 ;WRONG DIRECTION IF IT'S AN OUTPUT CHANNEL
|
||||
MOVE B,I ;SAVE INPUT IMSOC INDEX
|
||||
MOVE A,C ;DECODE OUTPUT CHANNEL
|
||||
JSP T,CHNDCD
|
||||
JSP T,NETCHK
|
||||
TDNN E,IMSOC2(I)
|
||||
JRST OPNL2 ;WRONG DIRECTION IF INPUT SOCKET
|
||||
CONO PI,NETOFF
|
||||
MOVE E,[40000,,777]
|
||||
TDNN E,IMSOC5(B) ;ERROR IF EITHER CHANNEL ALREADY CONNECTED
|
||||
TDNE E,IMSOC5(I)
|
||||
JRST OPNL23 ;"FILE LOCKED"
|
||||
MOVSI C,%SSNET
|
||||
TDNE C,STYSTS-NFSTTY(Q)
|
||||
JRST OPNL23 ;SIMILAR ERROR IF STY ALREADY CONNECTED
|
||||
HRR E,Q ;GET 40000,,TTY #
|
||||
IORM E,IMSOC5(I)
|
||||
IORM E,IMSOC5(B) ;MARK SOCKETS AS CONNECTED
|
||||
] ;NCPP
|
||||
|
||||
NSTYN3: SKIPGE STYNTL-NFSTTY(Q) ;HALT IF STY'S VARS ARE NOT CORRECT FOR A
|
||||
SKIPL STYNTI-NFSTTY(Q) ;NON-CONNECTED STY.
|
||||
JRST 4,.
|
||||
IORM C,STYSTS-NFSTTY(Q) ;ALL ERROR CAUGHT, SO MARK STY CONNECTED.
|
||||
HRL B,I ;PUT INPUT IMSOC IDX,, OUTPUT IMSOC IDX
|
||||
MOVSM B,STYNTI-NFSTTY(Q) ;INTO THE STY
|
||||
TRZ D,7777 ;STORE THE OUTPUT RESET CHARACTERS - AT MOST 3
|
||||
MOVEM D,STYORC-NFSTTY(Q)
|
||||
|
||||
;ACTIVATE IN CASE HAS UNREAD INPUT
|
||||
IFN NCPP,[
|
||||
TLNN C,%SSCHA+%SSTCP
|
||||
PUSHJ P,IMPUIN
|
||||
] ;NCPP
|
||||
IFN CHAOSP,[
|
||||
TLNE C,%SSCHA
|
||||
PUSHJ P,CHINTI
|
||||
];CHAOSP
|
||||
IFN TCPP,[
|
||||
TLNE C,%SSTCP
|
||||
PUSHJ P,TCPUII
|
||||
] ;TCPP
|
||||
JRST NETOJ1
|
||||
|
||||
SUBTTL Clock interrupt level code
|
||||
|
||||
; NETCLK - Slow net clock. Called at clock level every 1/2 sec.
|
||||
; Can clobber all ACs
|
||||
|
||||
NETCLK:
|
||||
IFN CHAOSP, PUSHJ P,CHACLK ; Run Chaos net 1/2-second clock
|
||||
IFN TCPP, PUSHJ P,TCPCLK ; Run TCP 1/2-sec clock
|
||||
SETCMB A,NETCL1 ; Flip the 1 sec switch
|
||||
JUMPE A,CPOPJ ; Return unless time for 1-sec clock
|
||||
IFN INETP,CALL IPFCLK ; Run IP reassembly timeout every 1 sec
|
||||
RET
|
||||
EBLK
|
||||
NETCL1: 0 ; Flip-flop to get 1-sec ticks
|
||||
BBLK
|
||||
|
||||
; STYNTC - Called at clock level every 1/60 sec to process all
|
||||
; necessary transfers of data between STYs and associated
|
||||
; net connections
|
||||
|
||||
STYNTC: CONO PI,NETOFF
|
||||
SKIPN I,STYNTA ;GET HEAD OF ACTIVATE LIST
|
||||
JRST NETONJ ;EMPTY
|
||||
SETZM STYNTA ;COPY LIST IN CASE A STY IS PUT BACK ON
|
||||
CONO PI,NETON
|
||||
STYNT7: MOVE A,STYNTL-NFSTTY(I) ;GET NEXT ON LIST
|
||||
MOVEM A,STYNTB ;SAVE FOR NEXT TIME AROUND LOOP
|
||||
SETOM STYNTL-NFSTTY(I) ;THIS ONE IS NO LONGER ON ACTIVATE LIST
|
||||
MOVE A,STYSTS-NFSTTY(I)
|
||||
TLNN A,%SSNET
|
||||
JRST 4,. ;STY CLAIMS NOT TO BE CONNECTED??
|
||||
MOVE R,I ;SAVE TTY #
|
||||
|
||||
IFN CHAOSP,[
|
||||
TLNE A,%SSCHA
|
||||
JRST STYCHA ;CONNECTED TO CHAOS NET
|
||||
];CHAOSP
|
||||
IFN TCPP,[
|
||||
TLNE A,%SSTCP
|
||||
JRST STYTCP
|
||||
] ;TCPP
|
||||
IFN NCPP,[
|
||||
JRST STYNCP
|
||||
];NCPP
|
||||
|
||||
STYNT8: SKIPE I,STYNTB ;GET NEXT STY FROM COPIED ACTIVATION LIST
|
||||
JRST STYNT7
|
||||
POPJ P,
|
||||
|
||||
;SUBROUTINE TO STANDARDIZE HOST NUMBER, OPNL25 IF NO GOOD
|
||||
;PROCESSES HOST NUMBER IN T, MUNGS H, CALLED BY JSP J,STDHST
|
||||
STDHST:
|
||||
IFN 1,[
|
||||
EXCH A,T
|
||||
CALL CVH3NA ; Convert # to HOSTS3 fmt
|
||||
EXCH A,T
|
||||
LDB H,[301400,,T] ; Get high 12 bits (net #)
|
||||
CAIE H,12 ; Should be ARPA net
|
||||
JRST OPNL25
|
||||
TDZ T,[NW%ARP+<377_8.>] ; Flush the net # and logical host field
|
||||
JRST (J)
|
||||
] ;IFN 1
|
||||
IFN 0,[
|
||||
LDB H,[331000,,T] ;GET NETWORK-NUMBER FIELD
|
||||
CAIE H,12 ;ONLY 12 OR 0 IS ACCEPTABLE
|
||||
JUMPN H,OPNL25
|
||||
TDNE T,[400600,,400] ;MAKE SURE OTHER RANDOM BITS AREN'T ON
|
||||
JRST OPNL25
|
||||
TLZ T,777000 ;CLEAR NETWORK NUMBER
|
||||
JUMPE T,OPNL25 ;0 IS NOT ACCEPTABLE
|
||||
CAIL T,400 ;SKIP IF OLD-STYLE HOST NUMBER
|
||||
JRST (J)
|
||||
LDB H,[060200,,T] ;GET HOST FIELD
|
||||
ANDI T,77 ;GET IMP FIELD
|
||||
EXCH H,T
|
||||
DPB H,[112000,,T] ;RECOMBINE
|
||||
JRST (J)
|
||||
] ;IFN 0
|
||||
98
src/system/ni1010.defs2
Executable file
98
src/system/ni1010.defs2
Executable file
@@ -0,0 +1,98 @@
|
||||
;;; -*- Mode: Midas -*-
|
||||
.AUXIL
|
||||
|
||||
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; Junk for Interlan NI1010A Unibus Ethernet Interface
|
||||
|
||||
;Interrupt information
|
||||
DEFSYM %ILVEC==300 ;Input side interrupt vector (non-standard)
|
||||
;Output side assumed to be %LHVEC+4
|
||||
DEFSYM %ILPRI==5 ;Interrupt priority (should be 6, but
|
||||
; hard to change to anything but 4!)
|
||||
|
||||
DEFSYM %ILBAS==764000 ;Base of NI1010A Registers in UB space
|
||||
|
||||
;Unibus Registers
|
||||
DEFSYM %ILCSR=:%ILBAS ;Control and Status Register
|
||||
DEFSYM %ILBAR=:%ILBAS+2 ;Buffer Address Register
|
||||
DEFSYM %ILBCR=:%ILBAS+4 ;Byte COunt Register
|
||||
|
||||
;Bitz
|
||||
;CSR bits
|
||||
DEFSYM %ILEUA==:140000 ;Extended UB address field
|
||||
DEFSYM %ILCMD==:37400 ;Command Function Code
|
||||
DEFSYM %ILCD==:200 ;Command Done
|
||||
DEFSYM %ILCIE==:100 ;Command Interrupt Enable
|
||||
DEFSYM %ILRD==:40 ;Receive DMA done
|
||||
DEFSYM %ILRIE==:20 ;Receive Interrupt Enable
|
||||
DEFSYM %ILSTS==:17 ;Command Status Code
|
||||
|
||||
;Commands (in %ILCMD field of CSR)
|
||||
DEFSYM %ILSML==400 ;Module Loopback (through interface)
|
||||
DEFSYM %ILSIL==1000 ;Set Internal Loopback
|
||||
DEFSYM %ILCLM==1400 ;Clear loopback mode
|
||||
DEFSYM %ILSPR==2000 ;Promiscuous Receive Mode
|
||||
DEFSYM %ILCPR==2400 ;Clear Promiscuous Receive Mode
|
||||
DEFSYM %ILSRE==3000 ;Set Receive-on-error bit
|
||||
DEFSYM %ILCRE==3400 ;Clear Receive-on-error bit
|
||||
DEFSYM %ILOFL==4000 ;Go Offline
|
||||
DEFSYM %ILONL==4400 ;Go Online
|
||||
DEFSYM %ILROD==5000 ;Run onboard diagnostics
|
||||
DEFSYM %ILSIS==6000 ;Set Insert-source-address mode
|
||||
DEFSYM %ILCIS==7000 ;Clear Insert-source-address mode
|
||||
DEFSYM %ILDPA==7400 ;Set physical address to default
|
||||
DEFSYM %ILSRM==10000 ;Receive all multicast packets
|
||||
DEFSYM %ILCRM==10400 ;Clear Receive all multicast packets
|
||||
DEFSYM %ILRRS==14000 ;Report and reset statistics
|
||||
DEFSYM %ILRCD==14400 ;Report Collision Delay Times
|
||||
DEFSYM %ILRCV==20000 ;Supply Receive Buffer
|
||||
DEFSYM %ILLXD==24000 ;Load Transmit Data
|
||||
DEFSYM %ILLXS==24400 ;Load Transmit Data and Send
|
||||
DEFSYM %ILLGA==25000 ;Load Group Addreses
|
||||
DEFSYM %ILDGA==25400 ;Delete Group Adresses
|
||||
DEFSYM %ILLPA==26000
|
||||
DEFSYM %ILFRQ==30000 ;Flush Receive BAR/BCR Queue
|
||||
DEFSYM %ILRST==37400 ;Reset
|
||||
|
||||
;Error codes. Found in %ILSTS field of CSR
|
||||
DEFSYM %ILEOK==0 ;Success
|
||||
DEFSYM %ILERT==1 ;Success, with retries
|
||||
DEFSYM %ILEBC==2 ;Illegal Command
|
||||
DEFSYM %ILEIC==3 ;Invalid Command
|
||||
DEFSYM %ILERE==4 ;Receiver Error
|
||||
DEFSYM %ILEBB==5 ;Buffer Size Too Big
|
||||
DEFSYM %ILEFS==6 ;Frams Size Too Small
|
||||
DEFSYM %ILEEC==10 ;Excessive Collisions
|
||||
DEFSYM %ILEBA==12 ;Buffer Not Word Aligned
|
||||
DEFSYM %ILENX==17 ;Non-eXistant Memory
|
||||
|
||||
;Diagnostic codes. Results from %ILROD command
|
||||
DEFSYM %ILDOK==0 ;No Problem
|
||||
DEFSYM %ILDCE==1 ;ROM/RAM Checksum Error
|
||||
DEFSYM %ILDDE==2 ;DMA Circuitry Failed
|
||||
DEFSYM %ILDXE==3 ;Transmit Circuitry Failed
|
||||
DEFSYM %ILDRE==4 ;Receive Circuitry Failed
|
||||
DEFSYM %ILDLE==5 ;Loopback checks failed
|
||||
|
||||
;Frame status bits, returned in frame status byte
|
||||
; at the top of each received packet.
|
||||
DEFSYM %ILFCE==1 ;CRC Error in packet
|
||||
DEFSYM %ILFAE==2 ;Alignment Error
|
||||
DEFSYM %ILFFL==4 ;1+ frames lost just before
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
|
||||
2432
src/system/nmtape.30
Executable file
2432
src/system/nmtape.30
Executable file
File diff suppressed because it is too large
Load Diff
230
src/system/rh10.defs26
Executable file
230
src/system/rh10.defs26
Executable file
@@ -0,0 +1,230 @@
|
||||
.AUXIL
|
||||
|
||||
;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [
|
||||
$$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEMP==1
|
||||
];IF Not DEFined DEFSYM
|
||||
.ELSE $$TEMP==0
|
||||
|
||||
|
||||
;DISK PHYSICAL PARAMETERS (RH10 CONTROLLER)
|
||||
|
||||
DEFSYM NCYLS==406. ;# CYLINDERS NORMALLY USED
|
||||
DEFSYM XCYLS==411.-NCYLS ;# CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS==19. ;# TRACKS/CYLINDER
|
||||
DEFSYM NSECS==20. ;# SECTORS/TRACK
|
||||
DEFSYM SECBLK==8 ;# SECTORS/BLOCK
|
||||
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ;# BLOCKS/CYLINDER
|
||||
DEFSYM NBLKS==NCYLS*NBLKSC ;# BLOCKS NORMALLY USED
|
||||
DEFSYM XBLKS==XCYLS*NBLKSC ;# BLOCKS FOR HACKS
|
||||
DEFSYM TBLKS==NBLKS+XBLKS ;TOTAL BLOCKS
|
||||
|
||||
DEFSYM NTUTBL==2 ;2 BLOCKS PER TUT
|
||||
DEFSYM DECADE==NBLKSC ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||
;DECADE SIZE = CYLINDER SIZE FOR KLFEDR'S SAKE
|
||||
DEFSYM DSK=270 ;I/O DEVICE NUMBER OF RH10
|
||||
|
||||
;CONI - LEFT HALF (ERROR BITS ONLY)
|
||||
|
||||
DEFSYM %HID22==4000,, ;4.3 1=>22-BIT DATA CHANNEL, 0=>18-BIT
|
||||
DEFSYM %HIILF==400,, ;3.9 ILLEGAL FUNCTION CODE IN CONTROL REGISTER
|
||||
DEFSYM %HISDE==200,, ;3.8 SELECTED DRIVE PREVIOUS ERROR NOT RESET
|
||||
DEFSYM %HIDPE==4,, ;3.3 CHANNEL DATA PARITY ERROR
|
||||
DEFSYM %HICPE==2,, ;3.2 CHANNEL CONTROL WORD PARITY ERROR
|
||||
DEFSYM %HINXM==1,, ;3.1 CHANNEL NXM ERROR
|
||||
|
||||
;CONI - RIGHT HALF
|
||||
|
||||
DEFSYM %HIBPE==400000 ;2.9 DATA BUSS PARITY ERROR
|
||||
DEFSYM %HIEXC==200000 ;2.8 "EXCEPTION" IN DRIVE DURING DATA TRANSFER
|
||||
DEFSYM %HICER==100000 ;2.7 CHANNEL ERROR (OR OF 3 BITS IN LH)
|
||||
DEFSYM %HICWW==040000 ;2.6 CONTROL WORD HAS BEEN WRITTEN
|
||||
DEFSYM %HIOVR==020000 ;2.5 OVER-RUN (MEMORY DATA LATE)
|
||||
DEFSYM %HIDRE==010000 ;2.4 DRIVE RESPONSE ERROR - NO RESPONSE FROM DRIVE
|
||||
DEFSYM %HIILC==004000 ;2.3 ILLEGAL COMMAND OR REGISTER ACCESS ERROR
|
||||
DEFSYM %HIPWR==002000 ;2.2 POWER FAIL
|
||||
DEFSYM %HICOV==000200 ;1.8 CONTROL BUS OVER-RUN
|
||||
DEFSYM %HIRAE==000100 ;1.7 REGISTER ACCESS ERROR (ONLY IF INTR ENB)
|
||||
DEFSYM %HIATN==000040 ;1.6 ATTENTION (INTERRUPTS)
|
||||
DEFSYM %HIBSY==000020 ;1.5 CONTROL BUSY WITH DATA TRANSFER
|
||||
DEFSYM %HIDON==000010 ;1.4 DATA TRANSFER DONE, NORMAL OR ERROR
|
||||
;1.1-1.3 PIA AS USUAL
|
||||
DEFSYM %HIERR==736300 ;CONI ERROR BITS
|
||||
|
||||
;CONO
|
||||
|
||||
;2.7-2.9 CLEAR CORRESPONDING ERROR BITS
|
||||
DEFSYM %HOWCW==040000 ;2.6 WRITE CONTROL WORD
|
||||
;2.3-2.5 CLEAR CORRESPONDING ERROR BITS
|
||||
DEFSYM %HORST==002000 ;2.2 RESET THE CONTROLLER
|
||||
;1.8 CLEARS CORRESPONDING ERROR BIT
|
||||
DEFSYM %HORAE==000100 ;1.7 ENABLE RAE TO INTERRUPT
|
||||
DEFSYM %HOATN==000040 ;1.6 ENABLE ATTENTION TO INTERRUPT
|
||||
DEFSYM %HOSTP==000020 ;1.5 STOP DATA TRANSFER, CLR BSY, SET DONE
|
||||
;1.4 CLEARS CORRESP BIT (DONE)
|
||||
;1.1-1.3 SET PIA
|
||||
DEFSYM %HOCLR==734210 ;CONO TO CLEAR ALL ERROR BITS
|
||||
|
||||
;CONTROLLER REGISTER NUMBERS (LH OF DATAO)
|
||||
|
||||
DEFSYM %HRLOD==1_13 ;4.3 BIT TO SAY "LOAD SELECTED REGISTER"
|
||||
DEFSYM %HRCTL==40_14 ;CONTROL REGISTER
|
||||
DEFSYM $HCDRV==.BP <7,,> ;3.1-3.3 DRIVE SELECT FIELD
|
||||
DEFSYM $HCICWA==.BP 077700 ;1.7-2.6 INITIAL CONTROL WORD ADDR
|
||||
;AS USUAL, 1.7 IS REALLY THE WRITE EVEN PARITY BIT
|
||||
;1.1-1.6 FUNCTION CODE (%HMxxx) AND GO BIT
|
||||
DEFSYM %HRBUF==50_14 ;DATA BUFFER REGISTER (MAINTENANCE)
|
||||
DEFSYM %HRIAD==44_14 ;INTERRUPT ADDRESS REGISTER
|
||||
;3.2 1=>KI-10 MODE, 0=>KA-10 MODE
|
||||
;1.1-1.9 9-BIT VECTOR ADDRESS (KI)
|
||||
DEFSYM %HRRAE==54_14 ;REGISTER ACCESS ERROR REGISTER
|
||||
;DATAI 1.1-1.8 RAE DRIVE 0-7
|
||||
;DATAO 1.1-1.8 CLEAR THAT BIT
|
||||
DEFSYM %HRCBF==74_14 ;CHANNEL BUFFER
|
||||
|
||||
;COMMANDS
|
||||
; COMMANDS THAT DO I/O ARE PUT IN %HRCTL ALONG WITH $HCICWA
|
||||
; OTHER COMMANDS ARE STORED INTO %HRDCL
|
||||
; IN EITHER CASE $HCDRV SAYS WHICH DRIVE
|
||||
|
||||
DEFSYM %HMNOP==0 ;NO OPERATION
|
||||
DEFSYM %HMUNL==3 ;UNLOAD (DOES PACK FLY OFF?)
|
||||
DEFSYM %HMREC==7 ;RECALIBRATE
|
||||
DEFSYM %HMCLR==11 ;DRIVE CLEAR (RESET ERRORS ETC.)
|
||||
DEFSYM %HMRLS==13 ;DRIVE RELEASE (DUAL PORT)
|
||||
DEFSYM %HMSRC==31 ;SEARCH (FOR R.P.S.)
|
||||
DEFSYM %HMWCH==51 ;WRITE CHECK -- DOESN'T WORK (DEC BRAIN DAMAGE)
|
||||
DEFSYM %HMWCF==53 ;WRITE CHECK FORMAT (HEADER AND DATA) -- DOESN'T WORK
|
||||
DEFSYM %HMWRT==61 ;WRITE DATA
|
||||
DEFSYM %HMWHD==63 ;WRITE HEADER AND DATA (FORMAT THE PACK)
|
||||
DEFSYM %HMRED==71 ;READ DATA
|
||||
DEFSYM %HMRHD==73 ;READ HEADER AND DATA
|
||||
DEFSYM %HMSEK==5 ;SEEK TO CYLINDER
|
||||
DEFSYM %HMOFS==15 ;OFFSET HEADS SLIGHTLY
|
||||
DEFSYM %HMCEN==17 ;RETURN HEADS TO CENTERLINE
|
||||
DEFSYM %HMACK==23 ;ACKNOWLEDGE MOUNTING OF PACK (REQUIRED BEFORE I/O)
|
||||
DEFSYM %HMRDP==21 ;"READ-IN PRESET"
|
||||
|
||||
;STANDARD FIELDS IN DRIVE REGISTERS
|
||||
|
||||
;3.1-3.3 DRIVE NUMBER ($HCDRV)
|
||||
DEFSYM %HDCBT==002000 ;4.2 CONTROL BUS TIMEOUT
|
||||
DEFSYM %HDPAR==001000 ;4.1 MASS BUS CONTROL PARITY ERROR
|
||||
DEFSYM %HDDLT==000400 ;3.9 DATA LATE (NEED 3 US BETWEEN DATAO AND DATAI)
|
||||
DEFSYM %HDILC==000200 ;3.8 ILLEGAL COMMAND
|
||||
DEFSYM %HDERR==003600 ;ALL BITS FOR ERRORS IN TALKING TO DRIVE
|
||||
;DRIVE-DEPENDENT DATA IS IN LOW 16 BITS (1.1-2.7)
|
||||
|
||||
;DRIVE REGISTERS (NUMBER IN LH OF DATAO)
|
||||
|
||||
DEFSYM %HRDCL==0_14 ;DRIVE CONTROL REGISTER
|
||||
;1.1-1.6 COMMAND (%HMxxx) 1.1=GO BIT
|
||||
DEFSYM %HCDVA==1_11. ;2.3 DRIVE AVAILABLE
|
||||
|
||||
DEFSYM %HRSTS==1_14 ;STATUS REGISTER
|
||||
;1.1-1.6 BITS ON DURING HEAD LOAD SEQUENCE
|
||||
DEFSYM %HSVV==100 ;1.7 VOLUME VALID. SET BY %HMACK, CLEARED BY
|
||||
; DRIVE TURN ON. 0 => PACK MAY HAVE BEEN CHANGED
|
||||
DEFSYM %HSRDY==200 ;1.8 DRIVE READY
|
||||
DEFSYM %HSDPR==400 ;1.9 "DRIVE PRESET" = CONNECTED TO THIS CONTROLLER
|
||||
DEFSYM %HSPGM==1000 ;2.1 "PROGRAMMABLE" = EITHER CTRLR CAN CONNECT
|
||||
DEFSYM %HSLST==2000 ;2.2 LAST SECTOR TRANSFERRED
|
||||
DEFSYM %HSWRL==4000 ;2.3 WRITE LOCK
|
||||
DEFSYM %HSMOL==10000 ;2.4 MEDIUM ON-LINE
|
||||
DEFSYM %HSPIP==20000 ;2.5 POSITIONING IN PROGRESS
|
||||
DEFSYM %HSERR==40000 ;2.6 BIT ON %HRER1, %HRER2, OR %HRER3
|
||||
DEFSYM %HSATN==100000 ;2.7 ATTENTION - ERROR, POSITIONING COMPLETE,
|
||||
; STARTUP COMPLETE, OR DRIVE AVAILABLE
|
||||
|
||||
DEFSYM %HRER1==2_14 ;ERROR REGISTER 1
|
||||
;GENERALLY THESE BITS ARE ONLY RESET BY %HMCLR
|
||||
;1.1 ILLEGAL COMMAND IN %HRDCL
|
||||
;1.2 ATTEMPT TO ACCESS NON-EXISTENT DRIVE REGISTER
|
||||
;1.3 ATTEMPT TO WRITE IN DRIVE REGISTER WHILE DRIVE BUSY
|
||||
;1.4 PARITY ERROR ON MASSBUS
|
||||
;1.5 FORMAT ERROR (PACK & CPU NOT BOTH 16- OR BOTH 18-BIT)
|
||||
;1.6 WRITE CLOCK FAIL
|
||||
DEFSYM %H1ECH==100 ;1.7 ECC HARD ERROR (NOT 11-BIT BURST)
|
||||
;1.8 HEADER COMPARE ERROR
|
||||
;1.9 HEADER CRC ERROR
|
||||
;2.1 ADDRESS OVERFLOW
|
||||
;2.2 INVALID ADDRESS
|
||||
DEFSYM %H1WLK==4000 ;2.3 ATTEMPT TO WRITE WHILE WRITE-LOCKED
|
||||
;2.4 DRIVE TIMING ERROR. MAY DE-FORMAT THE TRACK.
|
||||
;2.5 OPERATION NOT COMPLETE (3 REVS NO ACTION)
|
||||
;2.6 DRIVE UNSAFE - WRITE LOCK OR FIELD SERVICE
|
||||
DEFSYM %H1ECC==100000 ;2.7 DATA CHECK, ECC COMPUTATION INITIATED
|
||||
DEFSYM %H1SOF==110730 ;SOFT ERRORS
|
||||
|
||||
DEFSYM %HRMNT==3_14 ;MAINTENANCE REGISTER (SEE RP04 MAINT MANUAL)
|
||||
|
||||
DEFSYM %HRATN==4_14 ;ATTENTION SUMMARY REGISTER (NOT REALLY PER-DRIVE)
|
||||
;1.1-1.8 %HSATN DRIVES 0-7
|
||||
;CLEARED BY ACCESSING DRIVE OR WRITING A 1
|
||||
|
||||
DEFSYM %HRADR==5_14 ;DESIRED SECTOR/TRACK ADDRESS
|
||||
DEFSYM $HATRK==.BP 17400 ;TRACK 0-22 OCTAL
|
||||
DEFSYM $HASEC==.BP 37 ;SECTOR 0-23 OCTAL (128 WORDS EACH)
|
||||
;NOTE THESE FIELDS ARE 8-BITS EACH
|
||||
|
||||
DEFSYM %HRLAH==7_14 ;LOOK AHEAD (READ ONLY)
|
||||
;NUMBER OF 64'THS OF A SECTOR
|
||||
|
||||
DEFSYM %HRTYP==6_14 ;DRIVE TYPE (RO)
|
||||
;1.1-1.9 DRIVE TYPE NUMBER (20 FOR "RP04")
|
||||
;2.3 DUAL-PORT DRIVE
|
||||
;2.5 MOVING HEAD
|
||||
;2.6 TAPE
|
||||
;2.7 NOT BLOCK ADDRESSED
|
||||
|
||||
DEFSYM %HRSER==10_14 ;DRIVE SERIAL NUMBER (RO)
|
||||
|
||||
DEFSYM %HROFS==11_14 ;HEAD OFFSET
|
||||
;1.1-1.8 OFFSET CODE
|
||||
;1.9-2.7 MISC CRUFTIES
|
||||
|
||||
DEFSYM %HRCYL==12_14 ;DESIRED CYLINDER ADDRESS
|
||||
; 0 TO 410 DECIMAL
|
||||
|
||||
DEFSYM %HRCCY==13_14 ;CURRENT CYLINDER ADDRESS
|
||||
|
||||
DEFSYM %HRER2==14_14 ;ERROR REGISTER 2
|
||||
;MISC UNSAFE CONDITIONS IN DRIVE
|
||||
|
||||
DEFSYM %HRER3==15_14 ;ERROR REGISTER 3
|
||||
;1.1-1.7 MORE MISC UNSAFES IN DRIVE
|
||||
DEFSYM %H3SKI==40000 ;2.6 SEEK INCOMPLETE
|
||||
DEFSYM %H3OFC==100000 ;2.7 OFF CYLINDER
|
||||
|
||||
DEFSYM %HRPOS==16_14 ;ECC POSITION
|
||||
;LOCATION OF ERROR BURST WITHIN SECTOR
|
||||
|
||||
DEFSYM %HRPAT==17_14 ;ECC PATTERN
|
||||
;11-BIT ERROR BURST
|
||||
|
||||
;DF10-C CHANNEL DEFINITIONS (22-BIT- (KI-) MODE)
|
||||
|
||||
DEFSYM $DFCAD==002600,, ;CURRENT ADDRESS - 1 (IN CONTROL WORD)
|
||||
DEFSYM $DFWC==261600,, ;- WORD COUNT (IN CONTROL WORD)
|
||||
DEFSYM $DFLAD==002600,, ;LAST DATA ADDRESS (IN STORED CONTROL WD)
|
||||
DEFSYM $DFCWA==261600,, ;LAST CONTROL WORD ADDRESS (IN STORED CONTROL WORD)
|
||||
|
||||
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
289
src/system/rh11.defs48
Executable file
289
src/system/rh11.defs48
Executable file
@@ -0,0 +1,289 @@
|
||||
; -*- Midas -*-
|
||||
.AUXIL
|
||||
|
||||
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; For now, must have a disk type defined to get the correct register
|
||||
; definitions.
|
||||
|
||||
IFNDEF RP06P,RP06P==0
|
||||
IFNDEF RP07P,RP07P==0
|
||||
IFNDEF RM03P,RM03P==0
|
||||
IFNDEF RM80P,RM80P==0
|
||||
|
||||
IFN RP06P+RP07P+RM03P+RM80P-1,.FATAL Only one disk type allowed in RH11 DEFS
|
||||
|
||||
|
||||
;;; Disk RH11 Interrupt vector:
|
||||
DEFSYM PHVEC==254 ; Interrupts occur on level 6
|
||||
; (high priority) on UBA #1.
|
||||
|
||||
;;; Disk RH11 Unibus register addresses:
|
||||
|
||||
DEFSYM %HRCS1=:776700 ;CTRL AND STATUS 1.
|
||||
DEFSYM %HXSC== 1_15. ; Special Condition
|
||||
DEFSYM %HXTRE==1_14. ; Transfer Error
|
||||
DEFSYM %HXMCP==1_13. ; Mass I/O Control Bus Parity Error
|
||||
DEFSYM %HXDVA==1_11. ; Drive Available
|
||||
DEFSYM %HXPSE==1_10. ; Port Select
|
||||
DEFSYM %HXA17==1_9. ; UB Address Extension Bit 17
|
||||
DEFSYM %HXA16==1_8. ; UB Address Extension Bit 16
|
||||
DEFSYM %HXRDY==1_7. ; Ready
|
||||
DEFSYM %HXIE== 1_6. ; Interrupt Enable
|
||||
DEFSYM $HXCMD==.BP 77 ; Bits 1-5 specify commands.
|
||||
DEFSYM %HXGO== 1_0. ; GO bit
|
||||
|
||||
;;; Commands with bit 0 (GO) included:
|
||||
|
||||
DEFSYM %HMNOP==0 ; No Operation
|
||||
DEFSYM %HMUNL==3 ; Unload ("Standby" -- the pack doesn't fly off).
|
||||
DEFSYM %HMREC==7 ; Recalibrate
|
||||
DEFSYM %HMCLR==11 ; Drive clear (reset errors etc.)
|
||||
DEFSYM %HMRLS==13 ; Drive release (dual port)
|
||||
DEFSYM %HMSRC==31 ; Search (for r.p.s.)
|
||||
DEFSYM %HMWCH==51 ; Write Check (?doesn't work)
|
||||
DEFSYM %HMWCF==53 ; Write Check Format, Header and Data (?doesn't work)
|
||||
DEFSYM %HMWRT==61 ; Write Data
|
||||
DEFSYM %HMRED==71 ; Read Data
|
||||
DEFSYM %HMWHD==63 ; Write Header And Data (format the pack)
|
||||
DEFSYM %HMRHD==73 ; Read Header and Data
|
||||
IFN RP07P,[
|
||||
DEFSYM %HMWTD==65 ; Write Track Descriptor
|
||||
DEFSYM %HMRTD==75 ; Read Track Descriptor
|
||||
]
|
||||
DEFSYM %HMSEK==5 ; Seek to Cylinder
|
||||
DEFSYM %HMOFS==15 ; Offset Heads Slightly
|
||||
; Just sets %HSOFS on RP07
|
||||
DEFSYM %HMCEN==17 ; Return Heads To Centerline
|
||||
; Just clears %HSOFS on RP07
|
||||
DEFSYM %HMACK==23 ; Acknowledge mounting of pack (required before I/O)
|
||||
; No-op on RP07
|
||||
DEFSYM %HMRDP==21 ; Read-In Preset
|
||||
|
||||
DEFSYM %HRWC=:776702 ;WORD COUNT.
|
||||
|
||||
DEFSYM %HRBA=:776704 ;UNIBUS ADDRESS.
|
||||
|
||||
DEFSYM %HRADR=:776706 ;DESIRED ADDRESS.
|
||||
DEFSYM $HATRK==.BP 37400 ; Track
|
||||
DEFSYM $HASEC==.BP 00177 ; Sector
|
||||
;; These are the sizes on the RP07 -- other drives are smaller.
|
||||
;; This is OK, as most places calculate this as Track_8+Sector
|
||||
|
||||
DEFSYM %HRCS2=:776710 ;CTRL AND STATUS 2.
|
||||
DEFSYM %HYDLT==1_15. ; Data Late
|
||||
DEFSYM %HYWCE==1_14. ; Write Check Error
|
||||
DEFSYM %HYPE== 1_13. ; Parity Error
|
||||
DEFSYM %HYNED==1_12. ; Non-existant Drive
|
||||
DEFSYM %HYNEM==1_11. ; %HRBA is NXM during DMA
|
||||
DEFSYM %HYPGE==1_10. ; Program Error
|
||||
DEFSYM %HYMXF==1_9. ; Missed Transfer
|
||||
DEFSYM %HYMDP==1_8. ; Mass Data Bus Parity Error
|
||||
DEFSYM %HYOR== 1_7. ; Output Ready (for Silo buffer diag.)
|
||||
DEFSYM %HYIR== 1_6. ; Input Ready (for Silo buffer diag.)
|
||||
DEFSYM %HYCLR==1_5. ; Controller Clear
|
||||
DEFSYM %HYPAT==1_4. ; Parity Test
|
||||
DEFSYM %HYBAI==1_3. ; Unibus Address Increment Inhibit
|
||||
DEFSYM $HYDSK==.BP 7 ; Bits 2-0 are the Unit Select.
|
||||
|
||||
DEFSYM %HRSTS=:776712 ;DRIVE STATUS.
|
||||
DEFSYM %HSATN==1_15. ; Attention Active
|
||||
DEFSYM %HSERR==1_14. ; Error
|
||||
DEFSYM %HSPIP==1_13. ; Positioning In Progress
|
||||
DEFSYM %HSMOL==1_12. ; Medium On-Line
|
||||
DEFSYM %HSWRL==1_11. ; Write Locked
|
||||
DEFSYM %HSLST==1_10. ; Last Sector Transferred
|
||||
DEFSYM %HSPGM==1_9. ; Programmable
|
||||
DEFSYM %HSDPR==1_8. ; Drive Present
|
||||
DEFSYM %HSRDY==1_7. ; Drive Ready
|
||||
DEFSYM %HSVV== 1_6. ; Volume Valid
|
||||
; These are RP04-only bits in %HRSTS
|
||||
; DEFSYM %HSDE1==1_5. ; Difference Equals 1
|
||||
; DEFSYM %HSL64==1_4. ; Difference Less Than 64
|
||||
; DEFSYM %HSGRV==1_3. ; Go Reverse
|
||||
; DEFSYM %HSDIG==1_2. ; Drive To Inner Guard Band
|
||||
; DEFSYM %HSF20==1_1. ; Drive Forward 20in/sec
|
||||
; DEFSYM %HSF5== 1_0. ; Drive Forward 5in/sec
|
||||
IFN RP07P,[
|
||||
DEFSYM %HSILS==1_2. ; Interleaved Sectors
|
||||
DEFSYM %HSWRN==1_1. ; Early Warning
|
||||
DEFSYM %HSOFS==1_0. ; Offset Mode
|
||||
]
|
||||
|
||||
DEFSYM %HRER1=:776714 ;ERROR 1.
|
||||
DEFSYM %H1ECC==1_15. ; Data Check
|
||||
DEFSYM %H1UNS==1_14. ; Unsafe
|
||||
DEFSYM %H1OPI==1_13. ; Operation Incomplete
|
||||
DEFSYM %H1DTE==1_12. ; Drive Timing Error
|
||||
DEFSYM %H1WLK==1_11. ; Write Lock Error
|
||||
DEFSYM %H1IAE==1_10. ; Invalid Address Error
|
||||
DEFSYM %H1AOE==1_9. ; Address Overflow Error
|
||||
DEFSYM %H1CRC==1_8. ; Header CRC Error
|
||||
DEFSYM %H1HCE==1_7. ; Header Compare Error
|
||||
DEFSYM %H1ECH==1_6. ; ECC Hard Error
|
||||
DEFSYM %H1WCF==1_5. ; Write Clock Fail
|
||||
DEFSYM %H1FER==1_4. ; Format Error
|
||||
DEFSYM %H1PAR==1_3. ; Parity Error
|
||||
DEFSYM %H1RMR==1_2. ; Register Modification Refused
|
||||
DEFSYM %H1ILR==1_1. ; Illegal Register
|
||||
DEFSYM %H1ILF==1_0. ; Illegal Function
|
||||
|
||||
DEFSYM %HRATN=:776716 ;ATTENTION SUMMARY.
|
||||
; Each bit 7-0 corresponds to a drive asserting ATA.
|
||||
|
||||
DEFSYM %HRLAH=:776720 ;LOOK AHEAD.
|
||||
; 2.2 - 1.7 Sector Count.
|
||||
; 1.6 - 1.5 Encoded Extension Field.
|
||||
|
||||
DEFSYM %HRBUF=:776722 ;DATA BUFFER.
|
||||
|
||||
DEFSYM %HRMNT=:776724 ;MAINTENANCE.
|
||||
|
||||
DEFSYM %HRTYP=:776726 ;DRIVE TYPE.
|
||||
; 2.7 NOT BLOCK ADDRESSED
|
||||
; 2.6 TAPE
|
||||
; 2.5 Moving Head (better be a 1!!)
|
||||
; 2.3 Drive Request Required
|
||||
; 1.9 - 1.1 Drive Type Number:
|
||||
; RP04 = 20, RP05 = 21,
|
||||
; RP06 = 22, RM03 = 24,
|
||||
; RM80 = 26, RP07 = 42
|
||||
|
||||
DEFSYM %HRSER=:776730 ;SERIAL NUMBER.
|
||||
|
||||
DEFSYM %HROFS=:776732 ;OFFSET.
|
||||
; 2.9-2.8 Unused
|
||||
; 2.7 Sign Change (RP06 only)
|
||||
; 2.7 Command Modifier (RP07 only)
|
||||
; Must be set before %HMWHD, %HMWTD or %HMRTD
|
||||
; 2.6 Move Track Descriptor (RP07 only)
|
||||
; 0 = 128. bit track descriptor
|
||||
; 1 = 344. bit track descriptor
|
||||
; 2.4 Format Bit (1=16, 0=18)
|
||||
; 2.3 ECC Inhibit
|
||||
; 2.2 Header Compare Inhibit
|
||||
; 2.1 Skip Sector Inhibit (RM 16bit only)
|
||||
; 1.9 Unused
|
||||
;
|
||||
; 1.8 - 1.1 Unused on RP07
|
||||
; RP07 doesn't support offsets
|
||||
;
|
||||
; RP06 Offsets
|
||||
; 1.8 - 1.1 Offset Info
|
||||
; +400 u" 00010000
|
||||
; -400 u" 10010000
|
||||
; +800 u" 00100000
|
||||
; -800 u" 10100000
|
||||
; +1200 u" 00110000
|
||||
; -1200 u" 10110000
|
||||
; Centerline 00000000
|
||||
;
|
||||
; RMxx Offsets
|
||||
; 1.1-1.7 Unused
|
||||
; 1.8 Offset Direction
|
||||
; 0 - Away from spindle
|
||||
; 1 - Towards spindle
|
||||
|
||||
DEFSYM %HRCYL=:776734 ;DESIRED CYLINDER.
|
||||
|
||||
IFN RP06P,[
|
||||
|
||||
DEFSYM %HRCCY=:776736 ;CURRENT CYLINDER.
|
||||
|
||||
DEFSYM %HRER2=:776740 ;ERROR 2.
|
||||
DEFSYM %H2NHS==1_10. ; No Head Selection
|
||||
DEFSYM %H2WRU==1_8. ; Write Ready Unsafe
|
||||
|
||||
DEFSYM %HRER3=:776742 ;ERROR 3.
|
||||
DEFSYM %H3OFC==1_15. ; Off Cylinder
|
||||
DEFSYM %H3SKI==1_14. ; Seek Incomplete (also sets UNS+ATA+PIP+RDY)
|
||||
DEFSYM %H3DCL==1_6. ; DC power low (or perhaps AC?)
|
||||
DEFSYM %H3ACL==1_5. ; AC power low (or perhaps DC?)
|
||||
; (the documentation is confused about
|
||||
; which is which.)
|
||||
|
||||
];RP06P
|
||||
|
||||
IFN RP07P,[
|
||||
|
||||
DEFSYM %HRCCY=:776736 ;CURRENT CYLINDER.
|
||||
|
||||
DEFSYM %HRER2=:776740 ;ERROR 2.
|
||||
DEFSYM %H2PRG==1_15. ; Program Error
|
||||
DEFSYM %H2CRM==1_14. ; Control ROM parity error
|
||||
DEFSYM %H2H88==1_13. ; 8080 in drive is hung
|
||||
;; DEC unimaginatively calls the following three bits
|
||||
;; READ/WRITE UNSAFE 1, 2 and 3.
|
||||
DEFSYM %H2WU3==1_12. ; Write current when no write in progress
|
||||
DEFSYM %H2WU2==1_11. ; More than one head selected
|
||||
DEFSYM %H2WU1==1_10. ; No write transitions during a write
|
||||
DEFSYM %H2WOV==1_9. ; Write Overrun
|
||||
DEFSYM %H2WRU==1_8. ; Write Ready Unsafe
|
||||
DEFSYM $H2COD==.BP 377 ; Error Code
|
||||
;; Error codes are:
|
||||
;; 012 Seek operation too long.
|
||||
;; 013 Guard band detected during seek operation.
|
||||
;; 014 Seek operation overshoot.
|
||||
;; 104 Guard band detection failure during recalibrate operation.
|
||||
;; 105 Reference gap or guard band pattern detection failure during
|
||||
;; recalibrate operation.
|
||||
;; 106 Seek error during recalibrate operation.
|
||||
;; 112 Heads have attempted to land on guard band during recalibrate
|
||||
;; operation.
|
||||
|
||||
DEFSYM %HRER3=:776742 ;ERROR 3.
|
||||
DEFSYM %H3BDS==1_15. ; Bad Sector
|
||||
DEFSYM %H3SKI==1_14. ; Seek Incomplete (see error code in ER2)
|
||||
DEFSYM %H3DSE==1_13. ; Defect Skip Error
|
||||
DEFSYM %H3WCF==1_12. ; Write Current Failure
|
||||
DEFSYM %H3LCF==1_11. ; Logic Control Failure
|
||||
DEFSYM %H3LBC==1_10. ; Loss of Bit Clock
|
||||
DEFSYM %H3LCE==1_9. ; Loss of Cylinder Error
|
||||
DEFSYM %H3X88==1_8. ; 8080 in drive failed to respond to a command
|
||||
DEFSYM %H3DCK==1_7. ; Device Check
|
||||
DEFSYM %H3WHD==1_6. ; Index Unsafe (Bad %HMWHD)
|
||||
DEFSYM %H3DCL==1_5. ; DC Low voltage
|
||||
DEFSYM %H3SDF==1_4. ; Serdes Data (data buffer timing) Failure
|
||||
DEFSYM %H3PAR==1_3. ; Data Parity Error during write operation
|
||||
DEFSYM %H3SYB==1_2. ; Sync Byte error
|
||||
DEFSYM %H3SYC==1_1. ; Sync Clock failure
|
||||
DEFSYM %H3RTM==1_0. ; Run timeout
|
||||
|
||||
];RP07P
|
||||
|
||||
IFN RM03P\RM80P,[
|
||||
; RM has no Current Cylinder Register, the Error 2 Register is
|
||||
; in a different place with different bits, and there is no
|
||||
; Error 3 register
|
||||
|
||||
DEFSYM %HRER2=:776742 ;ERROR 2.
|
||||
DEFSYM %H2BSE==1_15. ; Bad Sector (sector marked bad on disk)
|
||||
DEFSYM %H2SKI==1_14. ; Seek Incomplete (also sets UNS+ATA+PIP+RDY)
|
||||
DEFSYM %H2OPE==1_13. ; Drive address plug was removed
|
||||
DEFSYM %H2IVC==1_12. ; Invalid Command (really drive not valid)
|
||||
DEFSYM %H2LSC==1_11. ; LSC Sucks
|
||||
DEFSYM %H2LBC==1_10. ; Loss of Bitcheck (hardware lossage)
|
||||
DEFSYM %H2DVC==1_7 ; Device Check (generic hardware lossage)
|
||||
DEFSYM %H2SSE==1_5 ; Skip Sector found (can't happen in 18bit)
|
||||
DEFSYM %H2DPE==1_3 ; Data Parity Error in controller
|
||||
|
||||
];RM03P\RM80P
|
||||
|
||||
DEFSYM %HRPOS=:776744 ;ECC POSITION.
|
||||
|
||||
DEFSYM %HRPAT=:776746 ;ECC PATTERN.
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
41
src/system/rm03.defs5
Executable file
41
src/system/rm03.defs5
Executable file
@@ -0,0 +1,41 @@
|
||||
; -*- Midas -*-
|
||||
.AUXIL
|
||||
|
||||
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; Disk Physical Parameters for RM03
|
||||
|
||||
DEFSYM NCYLS==820. ; # CYLINDERS NORMALLY USED
|
||||
DEFSYM XCYLS==823.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS==5 ; # TRACKS/CYLINDER
|
||||
DEFSYM NSECS==30. ; # SECTORS/TRK
|
||||
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||
|
||||
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||
; block. TBLKS works out to be 14814, so it takes 2 blocks to TUT an
|
||||
; RM03. This leaves plenty of room for the extra words at the beginning of
|
||||
; the TUT.
|
||||
DEFSYM NTUTBL==2 ; 2 BLOCKS PER TUT
|
||||
|
||||
; Allocate whole cylinders at a time.
|
||||
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
45
src/system/rm80.defs4
Executable file
45
src/system/rm80.defs4
Executable file
@@ -0,0 +1,45 @@
|
||||
; -*- Midas -*-
|
||||
.AUXIL
|
||||
|
||||
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; Disk Physical Parameters for RM80
|
||||
|
||||
; The RM80 actually has 561 cylinders, but it appears that the onboard
|
||||
; microprocessor diagnostics may scribble on the last two cylinders, so
|
||||
; we just leave them out of this.
|
||||
|
||||
DEFSYM NCYLS==556. ; # CYLINDERS NORMALLY USED
|
||||
DEFSYM XCYLS==559.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS==14. ; # TRACKS/CYLINDER
|
||||
DEFSYM NSECS==30. ; # SECTORS/TRK
|
||||
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||
|
||||
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||
; block. TBLKS works out to be 29172, so it takes 3 blocks to TUT an
|
||||
; RM80. This leaves plenty of room for the extra words at the beginning of
|
||||
; the TUT.
|
||||
DEFSYM NTUTBL==3 ; 3 BLOCKS PER TUT
|
||||
|
||||
; Allocate whole cylinders at a time.
|
||||
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
41
src/system/rp06.defs1
Executable file
41
src/system/rp06.defs1
Executable file
@@ -0,0 +1,41 @@
|
||||
; -*- Midas -*-
|
||||
.AUXIL
|
||||
|
||||
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; Disk Physical Parameters for RP06
|
||||
|
||||
DEFSYM NCYLS==812. ; # CYLINDERS NORMALLY USED
|
||||
DEFSYM XCYLS==815.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS==19. ; # TRACKS/CYLINDER
|
||||
DEFSYM NSECS==20. ; # SECTORS/TRK
|
||||
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||
|
||||
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||
; block. TBLKS works out to be 38305, so it takes a little more than 3
|
||||
; blocks to TUT an RP06. This leaves plenty of room for the extra words at
|
||||
; the beginning of the TUT.
|
||||
DEFSYM NTUTBL==4 ; 4 BLOCKS PER TUT
|
||||
|
||||
; Allocate whole cylinders at a time.
|
||||
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
41
src/system/rp07.defs1
Executable file
41
src/system/rp07.defs1
Executable file
@@ -0,0 +1,41 @@
|
||||
; -*- Midas -*-
|
||||
.AUXIL
|
||||
|
||||
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
; Disk Physical Parameters for RP07
|
||||
|
||||
DEFSYM NCYLS==627. ; # CYLINDERS NORMALLY USED
|
||||
DEFSYM XCYLS==630.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS==32. ; # TRACKS/CYLINDER
|
||||
DEFSYM NSECS==43. ; # SECTORS/TRK
|
||||
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||
|
||||
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||
; block. TBLKS works out to be 108360, so it takes 9 blocks to TUT an
|
||||
; RP07. This leaves plenty of room for the extra words at the beginning of
|
||||
; the TUT.
|
||||
DEFSYM NTUTBL==9 ; 9 BLOCKS PER TUT
|
||||
|
||||
; Allocate whole cylinders at a time.
|
||||
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
106
src/system/rp10.defs16
Executable file
106
src/system/rp10.defs16
Executable file
@@ -0,0 +1,106 @@
|
||||
.AUXIL
|
||||
|
||||
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [
|
||||
$$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEMP==1
|
||||
]
|
||||
.ELSE $$TEMP==0
|
||||
|
||||
|
||||
;DISK PHYSICAL PARAMETERS
|
||||
|
||||
DEFSYM NCYLS==200. ;# CYLINDERS NORMALLY USED (RP02)
|
||||
DEFSYM MCYLS==400. ;# CYLINDERS NORMALLY USED (RP03)
|
||||
DEFSYM XCYLS==3 ;# EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS==20. ;# TRACKS/CYLINDER
|
||||
DEFSYM NSECS==10. ;# SECTORS/TRK
|
||||
DEFSYM SECBLK==8 ;# SECTORS/BLOCK
|
||||
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ;# BLKS/CYL
|
||||
DEFSYM NBLKS==NCYLS*NBLKSC ;TOTAL # REG BLKS (RP02)
|
||||
DEFSYM MBLKS==MCYLS*NBLKSC ;TOTAL # REG BLKS (RP03)
|
||||
DEFSYM XBLKS==XCYLS*NBLKSC ;# XTRA BLKS
|
||||
DEFSYM TBLKS==MBLKS+XBLKS ;TOTAL BLKS
|
||||
|
||||
DEFSYM NTUTBL==1 ;1 BLOCK PER TUT
|
||||
DEFSYM DECADE==20. ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS
|
||||
DEFSYM DPC==250 ;I/O DEVICE NUMBER
|
||||
|
||||
;DISK COMMANDS
|
||||
|
||||
DEFSYM DREADC==000000,, ;READ DATA
|
||||
DEFSYM DWRITC==100000,, ;WRITE DATA
|
||||
;OP CODE 2 UNUSED
|
||||
DEFSYM DWRITH==300000,, ;WRITE HEADER AND DATA (FORMAT PACK)
|
||||
DEFSYM DSEEKC==400000,, ;POSITION HEADS
|
||||
DEFSYM DEASEC==500000,, ;CLEAR ATTENTIONS
|
||||
DEFSYM DNOOPC==600000,, ;SELECT DRIVE
|
||||
DEFSYM DRCALC==700000,, ;RECALIBRATE DRIVE
|
||||
|
||||
;BYTE POINTERS FOR ABOVE COMMANDS
|
||||
|
||||
DEFSYM DUNFLD==360300,, ;UNIT FIELD (ALL COMMANDS)
|
||||
DEFSYM DCYL==261000,, ;CYLINDER FIELD (READ,WRIT,WRITH,SEEK)
|
||||
DEFSYM DCYLXB==200100,, ;EXTRA BIT OF CYLINDER FIELD FOR RP03
|
||||
DEFSYM DSURF==210500,, ;SURFACE FIELD (READ,WRIT,WRITH)
|
||||
DEFSYM DSECT==140400,, ;SECTOR FIELD (READ,WRIT,WRITH)
|
||||
|
||||
;DATAI FIELDS
|
||||
|
||||
|
||||
DEFSYM DUNFLI==410300,, ;UNIT FIELD
|
||||
DEFSYM DCYLI==311000,, ;CYLINDER FIELD
|
||||
DEFSYM DCYLXI==130100,, ;EXTRA BIT OF CYLINDER FIELD
|
||||
|
||||
DEFSYM SKINC==100,, ;SEEK INCOMPLETE
|
||||
DEFSYM ONCYL==40,, ;ON CYLINDER
|
||||
DEFSYM ONLINE==20,, ;ON LINE
|
||||
DEFSYM FUNSAF==10,, ;FILE UNSAFE
|
||||
DEFSYM NSCHDR==4,, ;NO SUCH DRIVE
|
||||
DEFSYM RDONLY==2,, ;READ ONLY
|
||||
DEFSYM NOWRIH==1, ;WRITE HEADER LOCKOUT
|
||||
|
||||
DEFSYM RP03BT==2000 ;SELECTED DRIVE IS AN RP03
|
||||
DEFSYM SECTI==140500,,
|
||||
|
||||
DEFSYM ALLATT==776
|
||||
|
||||
;CONO INFORMATION
|
||||
|
||||
DEFSYM DCLEAR==175710 ;CLEAR ALL ERROR CONDITIONS
|
||||
|
||||
|
||||
;CONI INFORMATION
|
||||
|
||||
DEFSYM PARER== 4000
|
||||
DEFSYM SRCER== 40000
|
||||
DEFSYM HRDER==130000
|
||||
DEFSYM PROER==402300
|
||||
DEFSYM WRTER== 1000
|
||||
DEFSYM ALLER==577300
|
||||
DEFSYM DONE==10
|
||||
DEFSYM BUSY==20
|
||||
|
||||
;DF10 CHANNEL INFORMATION
|
||||
|
||||
DEFSYM $DFCAD==002600,, ;CURRENT ADDRESS - 1 (IN CONTROL WORD)
|
||||
;ALSO BITS 4.7-4.9 HAVE 1'S COMPLEMENT OF MA 3.1-3.3
|
||||
DEFSYM $DFWC==261600,, ;- WORD COUNT (IN CONTROL WORD)
|
||||
DEFSYM $DFLAD==002600,, ;LAST DATA ADDRESS (IN STORED CONTROL WD)
|
||||
DEFSYM $DFCWA==261600,, ;LAST CONTROL WORD ADDRESS (IN STORED CONTROL WORD)
|
||||
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
6685
src/system/salv.311
Executable file
6685
src/system/salv.311
Executable file
File diff suppressed because it is too large
Load Diff
2796
src/system/sysjob.117
Executable file
2796
src/system/sysjob.117
Executable file
File diff suppressed because it is too large
Load Diff
345
src/system/t20mac.1
Executable file
345
src/system/t20mac.1
Executable file
@@ -0,0 +1,345 @@
|
||||
;Random useful coding macros. GZ@OZ developed MACSYM.MID based on the
|
||||
;Twenex monitor macro collection MACSYM.MAC - this is a non-Twenex-specific
|
||||
;subset of that.
|
||||
|
||||
;Stuff supported (will add more stuff as need arises):
|
||||
; FLD(VAL,MSK) & BIT(n) & POINT SIZE,ADDR,OFFSET
|
||||
; MOVX AC,MASK & TXxx AC,MASK & JXx AC,MASK,ADDR & LOAD/STOR AC,MASK,ADDR
|
||||
; DO./ENDDO. macros (and related stuff)
|
||||
; IFxxx/ANxxx macros
|
||||
; SAVEACS [A,B,C,D] & SAVE. [LOC,LOC,LOC]
|
||||
|
||||
|
||||
.KILL ..XX,..TXZ,..TXO,..TXC,..X0,..X1,..X2,..X3,TOP.
|
||||
.XCREF ..XX,..TXZ,..TXO,..TXC,..X0,..X1,..X2,..X3
|
||||
.XCREF ..DX,..IX,..EX,.SAVX1,.SAVX2
|
||||
|
||||
IF2,.INEOF ;Don't bother if no code
|
||||
|
||||
;.NSTGW ;No storage words in this part
|
||||
|
||||
DEFINE FLD (VAL,MASK)
|
||||
<.DPB <VAL>,<.BP <MASK>,>,0>TERMIN
|
||||
|
||||
DEFINE BIT (N)
|
||||
<1_<35.-<N>>>TERMIN
|
||||
|
||||
DEFINE POINT SIZE=7,ADDR=0,COUNT=0
|
||||
RADIX 8+2
|
||||
..X1==SIZE
|
||||
..X2==COUNT
|
||||
RADIX 8
|
||||
..XX==<..X2-1>/<36./..X1>
|
||||
..X2==..X2-..XX*<36./..X1>
|
||||
<<<36.-<..X1*..X2>>_30.>+<..X1_24.>+<ADDR>+..X1>
|
||||
TERMIN
|
||||
|
||||
;MOVX - LOAD AC WITH CONSTANT
|
||||
|
||||
DEFINE MOVX AC,#MSK
|
||||
IFE <-1,,0>&MSK,[MOVEI AC,MSK]
|
||||
.ELSE [IFE <0,,-1>&MSK,[MOVSI AC,(MSK)]
|
||||
.ELSE [IFE <<-1,,0>&MSK>-<-1,,0>,[HRROI AC,MSK]
|
||||
.ELSE [IFE <<0,,-1>&MSK>-<0,,-1>,[HRLOI AC,(MSK&.LHALF)]
|
||||
.ELSE [MOVE AC,[MSK]]]]]
|
||||
TERMIN
|
||||
|
||||
;TX - TEST MASK
|
||||
|
||||
IRP OP,,[N,NA,OE,ON,OA,ZE,ZN,ZA,CE,CN,CA]
|
||||
DEFINE TX!OP AC,#MSK
|
||||
IFE <-1,,0>&MSK,[TR!OP AC,MSK]
|
||||
.ELSE [IFE <0,,-1>&MSK,[TL!OP AC,(MSK)]
|
||||
.ELSE [TD!OP AC,[MSK]]]
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
IRP OP,,[N,E]
|
||||
DEFINE TXN!OP AC,#MSK
|
||||
IFE <-1,,0>&MSK,[TRN!OP AC,MSK]
|
||||
.ELSE [IFE <0,,-1>&MSK,[TLN!OP AC,(MSK)]
|
||||
.ELSE [IFE MSK+1,[CAI!OP AC,0]
|
||||
.ELSE [TDN!OP AC,[MSK]]]]
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
..TXZ==ANDI
|
||||
..TXO==ORCMI
|
||||
..TXC==EQVI
|
||||
IRP OP,,[Z,O,C]
|
||||
DEFINE TX!OP AC,#MSK
|
||||
IFE <-1,,0>&MSK,[TR!OP AC,MSK]
|
||||
.ELSE [IFE <0,,-1>&MSK,[TL!OP AC,(MSK)]
|
||||
.ELSE [IFE <<-1,,0>&MSK>-<-1,,0>,[..TX!OP AC,-1#MSK]
|
||||
.ELSE [TD!OP AC,[MSK]]]]
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
EQUALS IORX,TXO
|
||||
EQUALS XORX,TXC
|
||||
|
||||
DEFINE ANDX AC,#MSK
|
||||
TXZ AC,-1#MSK
|
||||
TERMIN
|
||||
|
||||
SUBTTL JX -- JUMP ON MASK
|
||||
|
||||
;JXE -- JUMP IF MASKED BITS ARE EQUAL TO 0
|
||||
;JXN -- JUMP IF MASKED BITS ARE NOT EQUAL TO 0
|
||||
;JXO -- JUMP IF MASKED BITS ARE ALL ONES
|
||||
;JXF -- JUMP IF MASKED BITS ARE NOT ALL ONES (FALSE)
|
||||
|
||||
DEFINE JXE AC,#MSK,?ADR
|
||||
IFE MSK-.MINFI,[JUMPGE AC,ADR]
|
||||
.ELSE [IFE MSK+1,[JUMPE AC,ADR]
|
||||
.ELSE [TXNN AC,MSK
|
||||
JRST ADR]]
|
||||
TERMIN
|
||||
|
||||
DEFINE JXN AC,#MSK,?ADR
|
||||
IFE MSK-.MINFI,[JUMPL AC,ADR]
|
||||
.ELSE [IFE MSK+1,[JUMPN AC,ADR]
|
||||
.ELSE [TXNE AC,MSK
|
||||
JRST ADR]]
|
||||
TERMIN
|
||||
|
||||
DEFINE JXO AC,#MSK,?ADR
|
||||
IFE <.LZ MSK,>+<.TZ MSK,>-35.,[JXN AC,MSK,ADR]
|
||||
.ELSE [TXC AC,MSK
|
||||
TXCN AC,MSK
|
||||
JRST ADR]
|
||||
TERMIN
|
||||
|
||||
DEFINE JXF AC,#MSK,?ADR
|
||||
IFE <.LZ MSK,>+<.TZ MSK,>-35.,[JXE AC,MSK,ADR]
|
||||
.ELSE [TXC AC,MSK
|
||||
TXCE AC,MSK
|
||||
JRST ADR]
|
||||
TERMIN
|
||||
|
||||
;LOAD, STOR
|
||||
DEFINE LOAD AC,#MSK,?LOCN
|
||||
IFE MSK+1,[MOVE AC,LOCN]
|
||||
.ELSE [IFE MSK-777777,[HRRZ AC,LOCN]
|
||||
.ELSE [IFE MSK-<-1,,0>,[HLRZ AC,LOCN]
|
||||
.ELSE [LDB AC,[.BP MSK,LOCN]]]]
|
||||
TERMIN
|
||||
|
||||
DEFINE STOR AC,#MSK,?LOCN
|
||||
IFE MSK+1,[MOVEM AC,LOCN]
|
||||
.ELSE [IFE MSK-777777,[HRRM AC,LOCN]
|
||||
.ELSE [IFE MSK-<-1,,0>,[HRLM AC,LOCN]
|
||||
.ELSE [DPB AC,[.BP MSK,LOCN]]]]
|
||||
TERMIN
|
||||
|
||||
SUBTTL BLOCK MACROS
|
||||
|
||||
;MACROS TO PROVIDE SOME BLOCK HANDLING OF CODE
|
||||
|
||||
;DO. - LOOP STRUCTURE, DECLARES TOP OF LOOP
|
||||
; LOOP. - JUMPS TO TOP OF LOOP
|
||||
; EXIT. - EXITS LOOP
|
||||
; TOP. - TAG AT TOP OF LOOP FOR JUMPS, E.G. SOJG T4,TOP.
|
||||
; ENDLP. - TAG AT END OF LOOP FOR JUMPS, E.G. SOJL T4,ENDLP.
|
||||
|
||||
DEFINE DO.
|
||||
..DX
|
||||
TERMIN
|
||||
|
||||
DEFINE ..DX \%TGE,%SV1,%SV2,%SV3
|
||||
EQUALS %SV1,TOP. ? EQUALS %SV2,ENDDO. ? EQUALS %SV3,ENDLP.
|
||||
.KILL %SV1
|
||||
TOP.==.
|
||||
DEFINE ENDDO.
|
||||
%TGE::EQUALS TOP.,%SV1 ? EQUALS ENDDO.,%SV2 ? EQUALS ENDLP.,%SV3
|
||||
.KILL %TGE
|
||||
TERMIN
|
||||
DEFINE ENDLP.
|
||||
%TGE!!TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE ENDDO.
|
||||
.ERR ENDDO. outside loop
|
||||
TERMIN
|
||||
DEFINE ENDLP.
|
||||
.ERR ENDLP. outside loop
|
||||
TERMIN
|
||||
TOP.==-1
|
||||
|
||||
DEFINE OD.
|
||||
ENDDO.!TERMIN
|
||||
|
||||
DEFINE LOOP.
|
||||
JRST TOP.!TERMIN
|
||||
|
||||
DEFINE EXIT.
|
||||
JRST ENDLP.!TERMIN
|
||||
|
||||
|
||||
;Conditionals
|
||||
|
||||
DEFINE IFSKP.
|
||||
..IX [JRST ]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFNSK.
|
||||
TRNA
|
||||
..IX [JRST ]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFXN. AC,#MASK
|
||||
IFE 1_35.-MASK,..IX [JUMPGE AC,]
|
||||
.ELSE [IFE MASK+1,..IX [JUMPE AC,]
|
||||
.ELSE [TXNN AC,MASK
|
||||
..IX [JRST ]
|
||||
]]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFXE. AC,#MASK
|
||||
IFE 1_35.-MASK,..IX [JUMPL AC,]
|
||||
.ELSE [IFE MASK+1,..IX [JUMPN AC,]
|
||||
.ELSE [TXNE AC,MASK
|
||||
..IX [JRST ]
|
||||
]]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFE. AC
|
||||
..IX [JUMPN AC,]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFN. AC
|
||||
..IX [JUMPE AC,]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFG. AC
|
||||
..IX [JUMPLE AC,]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFGE. AC
|
||||
..IX [JUMPL AC,]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFLE. AC
|
||||
..IX [JUMPG AC,]
|
||||
TERMIN
|
||||
|
||||
DEFINE IFL. AC
|
||||
..IX [JUMPGE AC,]
|
||||
TERMIN
|
||||
|
||||
DEFINE ..IX OP,\%TAG,%SV1,%SV2
|
||||
OP!%TAG
|
||||
EQUALS %SV1,..TG ? EQUALS %SV2,ENDIF.
|
||||
DEFINE ..TG LBL
|
||||
%TAG!!LBL!TERMIN
|
||||
DEFINE ENDIF.
|
||||
..TG [::]
|
||||
.KILL ..TG
|
||||
EQUALS ..TG,%SV1 ? EQUALS ENDIF.,%SV2
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE ELSE.
|
||||
..EX
|
||||
TERMIN
|
||||
|
||||
DEFINE ..EX \%TAG
|
||||
JRST %TAG
|
||||
..TG [::]
|
||||
DEFINE ..TG LBL
|
||||
%TAG!!LBL!TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE ..TG LBL
|
||||
.ERR Conditional construct outside a conditional
|
||||
TERMIN
|
||||
|
||||
DEFINE ENDIF.
|
||||
.ERR ENDIF. outside a conditional
|
||||
TERMIN
|
||||
|
||||
|
||||
;GENERAL CASES WITHIN CONDITIONALS
|
||||
|
||||
DEFINE ANSKP.
|
||||
JRST ..TG
|
||||
TERMIN
|
||||
|
||||
DEFINE ANNSK.
|
||||
TRNA
|
||||
JRST ..TG
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDXN. AC,#MASK
|
||||
IFE 1_35.-MASK,JUMPGE AC,..TG
|
||||
.ELSE [IFE MASK+1,JUMPE AC,..TG
|
||||
.ELSE [TXNN AC,MASK
|
||||
JRST ..TG
|
||||
]]
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDXE. AC,#MASK
|
||||
IFE 1_35.-MASK,JUMPL AC,..TG
|
||||
.ELSE [IFE MASK+1,JUMPN AC,..TG
|
||||
.ELSE [TXNE AC,MASK
|
||||
JRST ..TG
|
||||
]]
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDE. AC
|
||||
JUMPN AC,..TG
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDN. AC
|
||||
JUMPE AC,..TG
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDG. AC
|
||||
JUMPLE AC,..TG
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDGE. AC
|
||||
JUMPL AC,..TG
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDLE. AC
|
||||
JUMPG AC,..TG
|
||||
TERMIN
|
||||
|
||||
DEFINE ANDL. AC
|
||||
JUMPGE AC,..TG
|
||||
TERMIN
|
||||
|
||||
|
||||
|
||||
; SAVEAC [A,B,C]
|
||||
; Supports +1/+2 returns.
|
||||
; Unlike macro version, supports arbitrary locations (not just AC's)
|
||||
; and doesn't clobber AC16. Assumes stack in P, though.
|
||||
|
||||
DEFINE SAVEAC ACS
|
||||
IRP AC,,[ACS]
|
||||
PUSH P,AC
|
||||
..XX==.IRPCNT
|
||||
TERMIN
|
||||
.SAVX1 ..XX+1,[ACS]
|
||||
TERMIN
|
||||
|
||||
EQUALS SAVE.,SAVEAC ;Not in MACRO version...
|
||||
|
||||
DEFINE .SAVX1 #N#,ACS
|
||||
PUSH P,[[CAIA
|
||||
AOS -N(P)
|
||||
.SAVX2 [ACS]
|
||||
POPJ P,
|
||||
]]
|
||||
TERMIN
|
||||
|
||||
DEFINE .SAVX2 ACS
|
||||
IRP AC,REST,[ACS]
|
||||
.SAVX2 [REST]
|
||||
POP P,AC
|
||||
.ISTOP
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
92
src/system/t300.defs7
Executable file
92
src/system/t300.defs7
Executable file
@@ -0,0 +1,92 @@
|
||||
.AUXIL
|
||||
|
||||
;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [
|
||||
$$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
|
||||
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||
.MLLIT==1
|
||||
$$TEMP==1
|
||||
];IF Not DEFined DEFSYM
|
||||
.ELSE $$TEMP==0
|
||||
|
||||
;DISK PHYSICAL PARAMETERS (CENTURY DATA T-300 AND 2561 CONTROLLER)
|
||||
;SINCE WE HAVE ALSO AN RH10 CONTROLLER, THESE ARE SUFFIXED WITH A 1
|
||||
|
||||
DEFSYM NCYLS1==812. ;# CYLINDERS NORMALLY USED
|
||||
DEFSYM XCYLS1==815.-NCYLS1 ;# CYLINDERS FOR SPARES, HACKS, ETC.
|
||||
DEFSYM NHEDS1==19. ;# TRACKS/CYLINDER
|
||||
DEFSYM NSECS1==32. ;# SECTORS/TRACK (256. 16-BIT WORDS)
|
||||
DEFSYM SECBL1==12. ;# SECTORS/BLOCK
|
||||
DEFSYM NBLKC1==NHEDS1*NSECS1/SECBL1 ;# BLOCKS/CYLINDER
|
||||
DEFSYM NBLKS1==NCYLS1*NBLKC1 ;# BLOCKS NORMALLY USED
|
||||
DEFSYM XBLKS1==XCYLS1*NBLKC1 ;# BLOCKS FOR HACKS
|
||||
DEFSYM TBLKS1==NBLKS1+XBLKS1 ;TOTAL BLOCKS
|
||||
|
||||
DEFSYM NTUTB1==4 ;4 BLOCKS PER TUT HERE
|
||||
DEFSYM TUTBL1==MFDBLK-NTUTB1 ;TUT ALSO STARTS AT A DIFFERENT PLACE
|
||||
|
||||
;TAKE DECADE FROM RH1O DEFS
|
||||
;DEFSYM DECADE==NBLKSC ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||
; ;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||
; ;DECADE SIZE = CYLINDER SIZE FOR KLFEDR'S SAKE
|
||||
|
||||
;10/11 COMMUNICATION AREA IS 14. WORDS STARTING 48. WORDS INTO THE 64.-WORD DL10 AREA
|
||||
|
||||
DEFSYM DSCCHK=DL10AR+60 ;MUST BE 2561 OCTAL
|
||||
DEFSYM DSCREQ=DL10AR+61 ;SET NON-ZERO BY 10 TO SIGNAL REQUEST TO 11
|
||||
DEFSYM DSCDON=DL10AR+62 ;SET NON-ZERO BY 11 TO SIGNAL DONE TO 10
|
||||
DEFSYM DSCFLT=DL10AR+63 ;0 NO FAULT
|
||||
DEFSYM %DFRST==100000 ;POWER CYCLED OR BROKEN, SO CONTROLLER WAS RESET
|
||||
DEFSYM %DFCQE==10000 ;CONSISTENCY ERROR IN COMMAND QUEUE
|
||||
DEFSYM %DFNXM==4000 ;NXM ERROR IN COMMAND QUEUE
|
||||
DEFSYM %DFPAR==2000 ;PARITY ERROR IN COMMAND QUEUE
|
||||
; IF ONE OF THESE BITS IS ON, BITS 1-0 AND DSCSTS
|
||||
; ARE THE ERROR ADDRESS
|
||||
;BITS 7-0 SYSTEM FAULT CODE IF LEFT BYTE IS ZERO
|
||||
; SEE THE 2561 OEM MANUAL FOR MEANING OF FAULT CODES
|
||||
DEFSYM DSCSTS=DL10AR+64 ;STATUS BITS AS FOLLOWS
|
||||
DEFSYM %DSRTR==100000 ;COMMAND WAS RETRIED
|
||||
DEFSYM %DSECH==40000 ;UNCORRECTABLE DATA ERROR (ECC HARD)
|
||||
DEFSYM %DSECC==20000 ;CORRECTED DATA ERROR
|
||||
DEFSYM %DSIDE==10000 ;ID ERROR
|
||||
DEFSYM %DSHCE==4000 ;ADDRESS ERROR (HEADER COMPARE ERROR)
|
||||
DEFSYM %DSPRT==2000 ;WRITE-PROTECT STATUS OF SECTOR (ABORTS WRITE COMMAND)
|
||||
DEFSYM %DSALT==1000 ;ALTERNATE-SECTOR STATUS (ABORTS READ, WRITE, AND CHECK)
|
||||
DEFSYM %DSOVR==400 ;FIFO OVER-RUN, NOT CORRECTED BY 1 RETRY
|
||||
DEFSYM %DSSKE==200 ;SEEK ERROR FROM DRIVE
|
||||
DEFSYM %DSOFL==100 ;DRIVE OFF-LINE OR FAULT
|
||||
DEFSYM %DSFLT==20 ;DRIVE FAULT
|
||||
DEFSYM %DSNXM==10 ;NXM ON PDP11 MEMORY
|
||||
DEFSYM %DSPAR==4 ;PARITY ERROR IN PDP11 MEMORY
|
||||
DEFSYM %DSSFL==2 ;SYSTEM FAULT, SEE LOW BYTE OF DSCFLT
|
||||
DEFSYM %DSWLK==1 ;DRIVE WRITE-LOCKED, WRITE ABORTED
|
||||
|
||||
DEFSYM DSCCMD=DL10AR+65 ;COMMAND CODE AS FOLLOWS
|
||||
DEFSYM %DMSNS==2 ;SENSE DRIVE STATE. DSCSTS GETS CODE FOR DRIVE TYPE IN
|
||||
; BITS 14-8 (10 FOR T-300), AND %DSWLK, %DSFLT, %DSOFL, %DSSKE
|
||||
DEFSYM %DMTST==3 ;TEST SPECIFIED DRIVE (RUNS DIAGNOSTICS)
|
||||
DEFSYM %DMREC==4 ;RECALIBRATE
|
||||
DEFSYM %DMSEK==5 ;SEEK
|
||||
DEFSYM %DMWRT==6 ;WRITE DATA
|
||||
DEFSYM %DMRED==20 ;READ DATA. ADD 1-10 FOR VARIOUS RECOVERY FEATURES AS
|
||||
; DOCUMENTED IN THE 2561 OEM MANUAL.
|
||||
|
||||
DEFSYM DSCDRV=DL10AR+66 ;DRIVE NUMBER (0 IS FIRST DRIVE ON 11)
|
||||
DEFSYM DSCCYL=DL10AR+67 ;CYLINDER NUMBER
|
||||
DEFSYM DSCHED=DL10AR+70 ;HEAD NUMBER
|
||||
DEFSYM DSCSEC=DL10AR+71 ;SECTOR NUMBER
|
||||
DEFSYM DSCPNT=DL10AR+72 ;4 12-BIT BYTE POINTERS TO DATA TO TRANSFER
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
3629
src/system/tcp.275
Executable file
3629
src/system/tcp.275
Executable file
File diff suppressed because it is too large
Load Diff
575
src/system/tcpbuf.58
Executable file
575
src/system/tcpbuf.58
Executable file
@@ -0,0 +1,575 @@
|
||||
COMMENT |
|
||||
|
||||
Notes on TCP input and output buffers
|
||||
|
||||
Ideally the TCP segment queues should be logically separate from the IP
|
||||
datagram queues, but for efficiency it should be possible to have them
|
||||
both together.
|
||||
|
||||
Input buffers are expected to be lists of datagrams/segments.
|
||||
This is reasonably simple, since pointers (in known places) can just be
|
||||
set up to the data (whereever it is in the datagram/segment).
|
||||
There is a problem with allocation/windows in this scheme, since it
|
||||
is possible to run out of datagram buffers before running out of window,
|
||||
if the remote site becomes cretinous about it and sends only a few
|
||||
bytes per dgram very fast. But in that case re-transmission can just
|
||||
force it to buffer up its output, so that future dgrams will be somewhat
|
||||
more filled, so it is probably OK. If this does become a screw, can
|
||||
add code to do compaction at clock level.
|
||||
|
||||
Output buffers are a little more uncertain. Could have simple
|
||||
circular buffer, with appropriate pointers set up so that IMP output
|
||||
message is read directly from the buffer (same as NCP). Alternatively
|
||||
could have queue of segments/datagrams all ready to go. Guess I'd
|
||||
like to try doing the latter, to keep things "simple" by minimizing
|
||||
the number of kinds of things floating around.
|
||||
|
||||
Problem with putting output datagram together: can't always predict
|
||||
ahead of time how big the leaders are going to be! Especially true
|
||||
for IP level, which TCP is not supposed to know too much about. Thus
|
||||
if not careful, it could happen that output is put into a segment too
|
||||
close to the start of the buffer, so that there is not enough room for
|
||||
the TCP and IP headers to fit in. Have to look at this; may need to
|
||||
give up notion of keeping all the packet internals nicely contiguous.
|
||||
Maximum IP header length is set at 60 bytes (15 words). The maximum
|
||||
TCP header length is also 15 words.
|
||||
Looking at the currently defined options, it seems unlikely that ITS
|
||||
will use any of them, and if so, they can be predicted fairly easily on
|
||||
a per-connection basis, so things should work out okay. Note that
|
||||
the IP level can always simply fragment stuff if it really wants to be
|
||||
that complex.
|
||||
|
||||
It would be nice to be able to keep track of stuff which is on the
|
||||
device (IMP) output queue but hasn't yet gone out, in order to add
|
||||
last-minute bits (like ACK) or even some more data. Idea: output "queue"
|
||||
is just a list of TCP connections that need attention, so can always
|
||||
go in and mung stuff (even change mind about outputting) just by playing
|
||||
with connection flags/lists. This is basically how NCP does it.
|
||||
|
||||
Re packet buffer design:
|
||||
Somewhat more hypothetical is the notion of keeping a "usage
|
||||
count" for each buffer, so that pointers from the packet table entries
|
||||
can point to several different buffers and not just one. When a usage
|
||||
count hits zero, put the buffer on the freelist. Actually this is not
|
||||
really needed for the case of a table entry pointing to more than one
|
||||
buffer, but it IS needed for the case of more than one table entry
|
||||
pointing to the same buffer. This might happen, for example, if
|
||||
an internet bypass were set up so that datagrams going to ourselves
|
||||
were simply vectored directly to the input queues. But for the
|
||||
time being, it probably isn't too outrageous to simply re-copy the
|
||||
datagram in question. (Also better emulates a fake network device).
|
||||
|
||||
Suggest that lists point directly to themselves rather than
|
||||
to start of entry; this allows low-level list routines to be used
|
||||
on all lists. The higher-level routines of course have to know what
|
||||
offsets to use for a specific list. Alternatively provide different routines
|
||||
for each offset needed, and equate references to the appropriate routine
|
||||
for each use. (This is what I'm trying at the moment, hence the IRPS)
|
||||
|
||||
May want to use format <head>,,<list ptr> where <head> is the addr
|
||||
of the initial pointer (not initial node). This allows backtracking
|
||||
to figure out what TCP connection or IP queue a packet belongs to.
|
||||
Brute force approach is to simply have another word for the TCB index, etc.
|
||||
|
||||
If this stuff is general enough it could be used for CHAOS packets also.
|
||||
|
|
||||
|
||||
COMMENT |
|
||||
|
||||
-- Lots of this is wrong now... --
|
||||
|
||||
Buffers are all 256 (400 octal) words long, and 4 of them fit on one
|
||||
ITS page. This size was chosen because the maximum length of an IMP
|
||||
message (not counting IMP-Host padding) is 255 words of 4 8-bit bytes
|
||||
per word. This allows one extra word; not much. Taking away the
|
||||
3 IMP leader words (which has to be done anyway for NCP to continue
|
||||
working) gives us 4 spare words per buffer.
|
||||
|
||||
This still may not be enough. Rather than shoe-horn some clever stuff
|
||||
into each buffer header, I am opting to maintain "Packet Entries" in a
|
||||
"Packet Table" separate from the "Packet Buffers" themselves. All
|
||||
messages/datagrams/segments/packets are identified by a pointer
|
||||
into the table. (Could use index, as for sockets/TCBs, but this is
|
||||
awkward for lists). The entry identified by the pointer will contain
|
||||
the actual pointers into the buffer associated with that packet.
|
||||
[NOTE: may want to have these pointers point into various places, not
|
||||
necessarily all the same buffer. Must think about this.]
|
||||
|
||||
Free buffers are linked by a freelist pointer in their first word,
|
||||
with an identifier in the second word to help GC. The only design
|
||||
issue for the buffers themselves is how to set things up so that it is
|
||||
easy to GC a large freelist, i.e. identify pages that have nothing
|
||||
but free buffers in them and thus can be removed from the system's
|
||||
address space. Currently I have simply adopted the strategem used for
|
||||
CHAOS buffers (at CHCLN) to have the core job snuffle over the freelist.
|
||||
|
||||
Note that the low-level routines for manipulating lists are actually
|
||||
referenced via macros which are given an offset as argument. This
|
||||
offset refers to the offset between the node pointer and the location
|
||||
of the "next" pointer in the node; the macro will assemble into a
|
||||
call to the right routine for that offset. Currently only offsets
|
||||
up to 2 are supported; any lists that the packet is put on must
|
||||
be threaded through the first 3 words of the node, and the macros check
|
||||
for this.
|
||||
|
|
||||
|
||||
SUBTTL Packet Tracing Code
|
||||
|
||||
IFNDEF PKTTRC,PKTTRC==:0 ; Nonzero turns tracing code on
|
||||
IF1,IFN PKTTRC,.ERR IP packet tracing code included.
|
||||
|
||||
COMMENT |
|
||||
|
||||
This code can be used to keep a history of what happens to a packet.
|
||||
The history is stored in the packet buffer as a series of indexes
|
||||
into a table of named events.
|
||||
|
||||
To trace a particular event use the TRCPKT macro.
|
||||
|
||||
TRCPKT(REG,"String")
|
||||
|
||||
REG is the register which currently contains an index to the packet
|
||||
buffer table. The code is more efficient if the register is R. String
|
||||
is the description of the event.
|
||||
|
||||
To generate the event table, you must call the TRCCOD macro somewhere
|
||||
after the last call to TRCPKT.
|
||||
|
||||
|
|
||||
|
||||
%NTRCE==:77 ; Allow this many trace events. Value must be a bit mask (all
|
||||
; ones) to work right. If you make it bigger than 77
|
||||
; you have to change the "TRC%" in the macros to something
|
||||
; shorter, too.
|
||||
|
||||
%%%TRC==1
|
||||
|
||||
; TRCCOD generates TRCTBL, which holds <code address,,address of event string>
|
||||
; for each trace event.
|
||||
DEFINE TRCCOD
|
||||
IFN PKTTRC,[
|
||||
TRC%0==:<0,,[ASCIZ /Null event/]>
|
||||
TRCTBL: REPEAT %%%TRC,CONC TRC%,\.RPCNT
|
||||
IF2, REPEAT %%%TRC,CONC EXPUNGE TRC%,\.RPCNT
|
||||
]
|
||||
TERMIN
|
||||
|
||||
DEFINE TRCPKT REG,&(EVENT)
|
||||
IFN PKTTRC,[
|
||||
IFG %%%TRC-%NTRCE,.ERR Too many packet trace events!
|
||||
CONC TRC%,\%%%TRC,==:<.,,[ASCIZ EVENT]>
|
||||
IFN REG-R,[
|
||||
PUSH P,R
|
||||
MOVE R,REG
|
||||
]
|
||||
PUSH P,TT
|
||||
MOVEI TT,%%%TRC
|
||||
PUSHJ P,PKTPTS
|
||||
POP P,TT
|
||||
IFN REG-R,[
|
||||
POP P,R
|
||||
]
|
||||
%%%TRC==%%%TRC+1
|
||||
]
|
||||
TERMIN
|
||||
|
||||
IFN PKTTRC,[
|
||||
|
||||
; Store information in the packet history data buffer
|
||||
; "Information" is a 6-bit quantity which indexes into a table
|
||||
; of strings.
|
||||
; TT/ Reason index
|
||||
; R/ Pkt Buffer index
|
||||
|
||||
PKTPTS: CONO PI,PIOFF ; Freeze machine
|
||||
DPB TT,PK.HSP(R) ; Store trace info
|
||||
IBP PK.HSP(R) ; Bump BP
|
||||
HRRZ TT,PK.HSP(R) ; Pick up history byte ref (address only)
|
||||
CAIL TT,PK.HSP(R) ; If we've gotten to the bottom,
|
||||
JRST [ MOVEI TT,PK.HST(R) ;Wrap around
|
||||
HRLI TT,(<.BP %NTRCE_30.>) ; BP to left 6 bits
|
||||
MOVEM TT,PK.HSP(R) ;Reset it to top
|
||||
JRST .+1 ]
|
||||
CONO PI,PION
|
||||
POPJ P,
|
||||
]
|
||||
|
||||
;;; Packet Table Entries
|
||||
|
||||
EBLK
|
||||
IFNDEF PKBSIZ,PKBSIZ==1000 ; 512. words per packet buffer (2048 byte MTU)
|
||||
IFNDEF NPKPGS,NPKPGS==40. ; # pages OK to use for packet buffers
|
||||
NPKB==:<NPKPGS*<2000/PKBSIZ>> ; # packet buffers available
|
||||
NPKE==:NPKB ; # packet entry nodes.
|
||||
IFN NPKB-NPKE,.ERR You must fix the UFLS at PKTGF.
|
||||
|
||||
PKETBL: OFFSET -.
|
||||
; General (device driver, etc)
|
||||
PK.FLG:: 1,,PKETBL+PK.L ; General - <flags>,,<PE freelist or dev driver list>
|
||||
%PKPIL==:<SETZ> ; Packet locked at PI level, being output
|
||||
%PKODN==:<1000,,> ; Packet has been output (else not yet)
|
||||
;;; %PKNOF==:<2000,,> ; Packet should not be freed when output done.
|
||||
%PKFLS==:<4000,,> ; Flush pkt if seen on output queue (ie dont output)
|
||||
%PKRTR==:<10000,,> ; Packet is being re-transmitted by TCP
|
||||
.SEE %PQFLX ; Low bits of LH used for on-list flags.
|
||||
|
||||
PK.IP:: 0 ; IP Datagram - <IP Header ptr>,,<IP Datagram list>
|
||||
; May be strung on Internet Queue, IP output queue
|
||||
PK.TCP:: 0 ; TCP Segment - <TCP Header pointer>,,<TCP Segment list>
|
||||
; May be strung on TCB input Q, output retransmit Q
|
||||
PK.TCI:: 0 ; TCP Segment - <# bytes data><# bytes offset><TCB index>
|
||||
PK%TDL==:<777700,,0> ; # octets of data in TCP segment
|
||||
PK%TDO==:< 77,,770000> ; # octets data is offset from TCP header
|
||||
PK%TCB==:< ,,007777> ; TCB connection index
|
||||
PK$TDL==:<.BP PK%TDL,PK.TCI>
|
||||
PK$TDO==:<.BP PK%TDO,PK.TCI>
|
||||
PK$TCB==:<.BP PK%TCB,PK.TCI>
|
||||
PK.BUF:: 0 ; General - <# wds>,,<addr of buffer>
|
||||
PK.TIM:: 0 ; General - Time sent or received, int level (Sys time)
|
||||
PK.DST:: 0 ; Immediate destination address if on output queue
|
||||
PK.HWI:: 0 ; Hardware Information - currently KS Unibus address
|
||||
|
||||
IFN PKTTRC,[
|
||||
PK.HST:: BLOCK 3 ; Packet trace history buffer
|
||||
PK.HSP:: 0 ; Packet trace history pointer
|
||||
]
|
||||
|
||||
PK.L:: OFFSET 0 ; Length of a Packet-Entry (PE) node
|
||||
REPEAT <NPKE-1>,[
|
||||
IFN .RPCNT-<NPKE-2>, 1,,.+PK.L ; Build initial freelist
|
||||
.ELSE 1,,0
|
||||
BLOCK PK.L-1
|
||||
]
|
||||
PKETBE==:.-PK.L ; Last legal PE pointer value
|
||||
|
||||
PKEQHF: PKETBE,,PKETBL ; Header for Packet-Entry node freelist
|
||||
|
||||
BBLK
|
||||
|
||||
; A "queue" is a list of nodes pointed to by a "queue header" word
|
||||
; of format <last node>,,<first node>. Each node pointer points to
|
||||
; the next node pointer (or zero if no more).
|
||||
; There is a set of flags in the LH of a certain word, at offset
|
||||
; PQ.FLG, that indicate which lists a node is currently on.
|
||||
|
||||
PQ.FLG==:PK.FLG ; Offset of word list-flags are in.
|
||||
%PQFLX==0 ; Initial val
|
||||
IFNDEF %%%QOF,%%%QOF==0 ; This gets set to highest offset supported
|
||||
|
||||
IRPS PKQGF,,[PKQGF0:PKQGF1:PKQGF2:]PKQPL,,[PKQPL0:PKQPL1:PKQPL2:]PKQPF,,[PKQPF0:PKQPF1:PKQPF2:]%PQFL,,[%PQFL0:%PQFL1:%PQFL2:]
|
||||
IFG .IRPCNT-%%%QOF,%%%QOF==.IRPCNT
|
||||
|
||||
%PQFL==:<1_.IRPCNT,,> ; Def a flag in LH at offset PQ.FLG
|
||||
%PQFLX==%PQFLX\%PQFL ; Mask of all list-flags def'd.
|
||||
|
||||
; PKQGF - Get first node from queue
|
||||
; Q/ addr of queue header
|
||||
; A/ addr of node (zero if none)
|
||||
|
||||
PKQGF: CONO PI,PIOFF ; Work at all levels
|
||||
HRRZ A,(Q) ; Get 1st from queue header word
|
||||
JUMPE A,PIONJ ; None, so return zero.
|
||||
MOVSI T,(%PQFL) ; Now clear appropriate flag for list
|
||||
XORB T,PQ.FLG(A) ; to indicate it's not on it any more.
|
||||
TLNE T,(%PQFL) ; Paranoia plus
|
||||
BUG HALT,[PK: GF node wasnt on list]
|
||||
HRRZ T,.IRPCNT(A) ; Get 2nd
|
||||
HRRM T,(Q) ; Make it 1st
|
||||
CAIN T, ; If all's well, done.
|
||||
SETZM (Q) ; Else must clear whole header
|
||||
IFNDEF PIONJ,PIONJ:
|
||||
CONO PI,PION
|
||||
POPJ P,
|
||||
|
||||
; PKQPL - Put node on queue as last thing.
|
||||
; Q/ addr of queue header
|
||||
; A/ addr of node
|
||||
PKQPL: TRNN A,-1 ; More paranoia
|
||||
BUG HALT,[PK: zero node ptr]
|
||||
HLLZS .IRPCNT(A) ; Say this node is last one
|
||||
CONO PI,PIOFF ; Work at all levels
|
||||
MOVSI T,(%PQFL) ; Paranoia: Set appropriate flag for list
|
||||
XORB T,PQ.FLG(A) ; to indicate it's on it now.
|
||||
TLNN T,(%PQFL) ; plus check...
|
||||
BUG HALT,[PK: node already on list]
|
||||
HLRZ T,(Q) ; Get last node
|
||||
HRLM A,(Q) ; Point to new last node
|
||||
JUMPN T,[HRRM A,.IRPCNT(T) ; Make prev last node point to new last
|
||||
JRST .+2] ; Skip over next instr!!
|
||||
HRRM A,(Q) ; Queue was empty, make this the new first too
|
||||
CONO PI,PION
|
||||
POPJ P,
|
||||
|
||||
; PKQPF - Put node on queue as first thing.
|
||||
; Q/ addr of queue header
|
||||
; A/ addr of node
|
||||
PKQPF: TRNN A,-1 ; Yes more paranoia
|
||||
BUG HALT,[PK: zero node ptr]
|
||||
CONO PI,PIOFF
|
||||
MOVSI T,(%PQFL) ; Paranoia: Set appropriate flag for list
|
||||
XORB T,PQ.FLG(A) ; to indicate it's on it now.
|
||||
TLNN T,(%PQFL) ; check...
|
||||
BUG HALT,[PK: node already on list]
|
||||
HRRZ T,(Q) ; Get first thing
|
||||
CAIN A,(T) ; paranoia, avoid loops to self
|
||||
BUG
|
||||
HRRM T,.IRPCNT(A) ; Make it second thing
|
||||
HRRM A,(Q) ; Make new first thing
|
||||
CAIN T,
|
||||
HRLM A,(Q) ; Was empty, also make it last thing.
|
||||
CONO PI,PION
|
||||
POPJ P,
|
||||
TERMIN
|
||||
|
||||
; Define PKQGF, etc so that they actually reference PKQGF0, etc as
|
||||
; appropriate for the given offset.
|
||||
IRP RTN,,[PKQGF,PKQPF,PKQPL]
|
||||
DEFINE RTN ?OFFST=0,
|
||||
CONC RTN,\OFFST
|
||||
IFG OFFST-%%%QOF,.ERR RTN used with bad offset
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
|
||||
; PKEGF - Get a free Packet-Entry node
|
||||
; Clears node contents.
|
||||
; Clobbers Q,T
|
||||
; Returns A/ PE ptr (0 if none)
|
||||
|
||||
PKEGF: MOVEI Q,PKEQHF
|
||||
IFE PKTTRC,[
|
||||
CALRET PKQGF ; Get a node
|
||||
]
|
||||
IFN PKTTRC,[
|
||||
CALL PKQGF
|
||||
JUMPE A,CPOPJ ; No packet
|
||||
SETZM PK.HST(A)
|
||||
SETZM PK.HST+1(A)
|
||||
SETZM PK.HST+2(A)
|
||||
MOVEI Q,PK.HST(A) ; Build byte ref to history trail
|
||||
HRLI Q,(<.BP %NTRCE_30.>) ; (dpb ref)
|
||||
MOVEM Q,PK.HSP(A) ; save ref
|
||||
POPJ P,
|
||||
]
|
||||
|
||||
; PKERT - Return a Packet-Entry node to freelist
|
||||
; A/ PE ptr to node
|
||||
; Clobbers Q,T
|
||||
|
||||
PKERT: MOVEI Q,PKEQHF ; Use Packet-Entry freelist
|
||||
CALRET PKQPF ; Put back on start of list.
|
||||
|
||||
; Note that all MP calls to the routines below which allocate or free
|
||||
; entries/buffers must be sure not to block (page fault or UFLS)
|
||||
; while any "loose" entries/buffers exist (not pointed to by any list)
|
||||
; unless there something on the PCLSR locked-switch list which will return the
|
||||
; currently "loose" entry/buffer to its freelist -- otherwise
|
||||
; it is possible for "loose" stuff to slowly accumulate.
|
||||
|
||||
; PKTGF - Get a free Packet-Entry node and Packet Buffer. Hangs until
|
||||
; it wins. Note that it depends on fact there is one PE node
|
||||
; for every packet buffer, and vice versa! If this becomes untrue
|
||||
; then the way it UFLSes should be fixed up.
|
||||
; PKTGFI - version that skips if wins, doesn't hang.
|
||||
; Returns A/ PE ptr Clobbers Q,T
|
||||
|
||||
PKTGF: SKIPN PKEQHF ; Fast check, see if any packet entries/buffers free
|
||||
CALL UFLS ; Nope, hang until something turns up.
|
||||
CALL PKTGFI ; Get a entry/buffer!
|
||||
JRST PKTGF ; None? Sigh, go hang.
|
||||
RET
|
||||
|
||||
PKTGFI: CALL PKEGF ; Get a free node
|
||||
JUMPE A,CPOPJ
|
||||
PUSH P,A ; Save pointer to it
|
||||
PKTGF1: CALL PKBGF ; Get a free buffer
|
||||
JUMPN A,PKTGF8 ; Jump if found one right away!
|
||||
CALL PKBAL ; None left on freelist, try to allocate more.
|
||||
CAIA ; Sigh, failed.
|
||||
JRST PKTGF1 ; Won, go pluck a buffer from freelist.
|
||||
|
||||
; Lost, can't get any more buffers.
|
||||
POP P,A ; None available, take non-skip return
|
||||
CALRET PKERT ; Put PE node back on its freelist.
|
||||
|
||||
; Won, store buffer pointer in PE.
|
||||
PKTGF8: MOVE T,A
|
||||
POP P,A ; Restore PE ptr
|
||||
MOVEM T,PK.BUF(A)
|
||||
MOVE T,PQ.FLG(A) ; Paranoia dept, verify not on any lists.
|
||||
TLNE T,(%PQFLX)
|
||||
BUG HALT,[PK: Freelist node not free!]
|
||||
SETZM PK.FLG(A) ; Zap all other entries in packet node.
|
||||
SETZM PK.IP(A)
|
||||
SETZM PK.TCP(A)
|
||||
SETZM PK.TCI(A)
|
||||
SETZM PK.TIM(A)
|
||||
AOS (P) ; Win, skip on return!
|
||||
RET
|
||||
|
||||
; PKTRT - Return both a Packet-Entry and its associated buffer to freelist
|
||||
; only if check shows that it doesn't belong to any lists.
|
||||
; PKTRTA - Always return to freelist. If check shows that it is still
|
||||
; on some list, bad error!
|
||||
; Clobbers A,Q,T
|
||||
; A/ PE ptr (must be off all lists)
|
||||
|
||||
PKTRTA: CAIL A,PKETBL ; Paranoia check for legal pointers
|
||||
CAILE A,PKETBE
|
||||
BUG HALT,[PK: Bad PE pointer]
|
||||
MOVE T,PQ.FLG(A)
|
||||
TLNE T,(%PQFLX\%PKPIL) ; On list or locked at I/O PI level?
|
||||
BUG HALT,[PK: Freeing packet still in use!]
|
||||
JRST PKTRTX ; Nope, can proceed to put on freelist.
|
||||
|
||||
PKTRT: CAIL A,PKETBL ; Paranoia check for legal pointers
|
||||
CAILE A,PKETBE
|
||||
BUG HALT,[PK: Bad PE pointer]
|
||||
MOVE T,PQ.FLG(A)
|
||||
TLNE T,(%PQFLX\%PKPIL) ; On a list or locked by interface PI level?
|
||||
RET ; Yes, don't return to freelist yet.
|
||||
PKTRTX: PUSH P,A ; Save PE ptr
|
||||
SKIPE A,PK.BUF(A) ; Get buffer pointer associated with PE
|
||||
CALL PKBRT ; Return the buffer
|
||||
POP P,A
|
||||
SETZM PK.BUF(A) ; Ensure buffer pointer zapped.
|
||||
CALRET PKERT ; Then return the packet entry
|
||||
|
||||
; PKTPCL - Return a packet entry/buffer while PCLSR'ing.
|
||||
; This is the standard LOSSET routine to use.
|
||||
; A must hold the PE ptr at time of the block (which we are backing
|
||||
; out of).
|
||||
; Must only clobber A and T!!
|
||||
|
||||
PKTPCL: MOVE A,AC0S+A(U) ; Get ac A at time of the block
|
||||
PUSH P,Q ; Mustn't clobber Q
|
||||
CALL PKTRT ; Return the entry/buffer (clobbers Q,T)
|
||||
JRST POPQJ
|
||||
|
||||
|
||||
EBLK
|
||||
PKBNF: 0 ; # free Packet Buffers
|
||||
PKBNT: 0 ; # total Packet Buffers
|
||||
PKBCTM: 0 ; Time of last no-more-core complaint
|
||||
PKBQHF: 0 ; Queue Header for buffer freelist
|
||||
PKBQHC: 0 ; Queue Header for core job cleanup
|
||||
BBLK
|
||||
|
||||
; PKBGF - Get a free Packet Buffer
|
||||
; Clobbers Q,T
|
||||
; Returns A/ PB ptr (0 if none)
|
||||
|
||||
PKBGF: MOVEI Q,PKBQHF ; Point to buffer freelist
|
||||
CALL PKQGF ; Get first thing off it
|
||||
JUMPE A,CPOPJ ; If got nothing, just return.
|
||||
SETZM 1(A) ; Aha, got it! Flush free-buffer identifier.
|
||||
SOS PKBNF ; Decrement # free packet buffers.
|
||||
RET
|
||||
|
||||
; PKBRT - Return a Packet Buffer to freelist. Puts back at END of freelist,
|
||||
; as PKBCLN clean-up depends on this.
|
||||
; Clobbers Q,T
|
||||
PKBRT: SETZM (A) ; Paranoia aid - clear "flags" in LH of 1st wd.
|
||||
; Otherwise PKQ routines complain.
|
||||
MOVE T,[SIXBIT /BRUNCH/]
|
||||
MOVEM T,1(A) ; Set up free-buffer identifier
|
||||
AOS PKBNF ; Increment # free packet buffers.
|
||||
MOVEI Q,PKBQHF ; Point to buffer freelist
|
||||
CALRET PKQPL ; Put it back on, at end.
|
||||
|
||||
; PKBRTL - Return a list of Packet Buffers to freelist
|
||||
; Q/ ptr to queue header of list
|
||||
; Clobbers A,T
|
||||
PKBRTL: CALL PKQGF ; Get first thing off list
|
||||
JUMPE A,CPOPJ
|
||||
PUSH P,Q
|
||||
CALL PKBRT ; Return it to buffer freelist
|
||||
POP P,Q
|
||||
JRST PKBRTL
|
||||
|
||||
; PKBAL - Allocate more Packet Buffers
|
||||
; Clobbers A,Q,T
|
||||
; Returns .+1 if lost
|
||||
; .+2 if won (must still call PKBGF to get a buffer from list)
|
||||
|
||||
PKBAL: PUSH P,B
|
||||
CONI PI,Q ; Save PI channel-on status
|
||||
ANDI Q,177
|
||||
CONO PI,UTCOFF ; Make the world safe for IOMQ
|
||||
MOVE B,PKBNT ; Check total # of buffers so far
|
||||
CAIL B,NPKB ; Make sure we're not already using max allowed
|
||||
JRST PKBAL4 ; Ugh, already at max! Go complain.
|
||||
PUSHJ P,IOMQ ; Get 1K of memory
|
||||
JRST PKBAL3 ; Mem not available, fail
|
||||
CONO PI,PICON(Q) ; Won, restore PI status
|
||||
MOVEI B,MUPKT ; Set page type = packet
|
||||
DPB B,[MUR,,MEMBLT(A)]
|
||||
LSH A,10. ; Turn allocated page # into mem address
|
||||
HRLI A,-<2000/PKBSIZ> ; Make AOBJN into page (# buffers per page)
|
||||
PKBAL2: PUSHJ P,PKBRT ; Put them all on free list
|
||||
ADDI A,PKBSIZ-1
|
||||
AOBJN A,PKBAL2
|
||||
MOVEI B,<2000/PKBSIZ> ; This many more buffers have been created
|
||||
ADDM B,PKBNT ; Increase total (PKBNF bumped by PKBRT)
|
||||
POP P,B
|
||||
AOS (P) ; Take win return.
|
||||
RET
|
||||
|
||||
; Here if packet stuff trying to use up too much core
|
||||
PKBAL4: MOVE B,PKBCTM ; Don't complain too often
|
||||
ADDI B,60.*30. ; Just once a minute
|
||||
CAMLE B,TIME
|
||||
JRST PKBAL3
|
||||
BUG CHECK,[PACKET NET ATTEMPTING TO USE TOO MUCH CORE]
|
||||
MOVE B,TIME
|
||||
MOVEM B,PKBCTM
|
||||
PKBAL3: CONO PI,PICON(Q) ; Lost, restore PI status
|
||||
POP P,B
|
||||
POPJ P, ; and take error return.
|
||||
|
||||
|
||||
; PKBCLN - Called only by core job, to clean up packet buffers.
|
||||
; Smashes all ACs.
|
||||
|
||||
PKBCLN: SKIPE A,PKBNT ; See if 2/3 or more of buffers free
|
||||
SKIPN B,PKBNF
|
||||
POPJ P, ; No buffers or none free, nothing to do
|
||||
SUBM A,B
|
||||
IDIV A,B ; Get ratio of total to used
|
||||
CAIGE A,3 ; Note if B is zero, A is unchanged
|
||||
POPJ P, ; and at least 32.
|
||||
IFL TSYSM-256., MOVEI D,TSYSM-1 ; Scan memory for packet buffer pages
|
||||
.ELSE MOVEI D,255.
|
||||
PKBCL0: LDB A,[MUR,,MEMBLT(D)]
|
||||
CAIE A,MUPKT
|
||||
PKBCL4: SOJGE D,PKBCL0
|
||||
JUMPL D,CPOPJ
|
||||
MOVE A,D ; Quickly determine if any non-free buffers
|
||||
LSH A,10. ; on this page
|
||||
HRLI A,-<2000/PKBSIZ>
|
||||
MOVE T,[SIXBIT/BRUNCH/]
|
||||
PKBCL5: CAME T,1(A)
|
||||
JRST PKBCL4 ; Not free, don't bother with slow stuff
|
||||
ADDI A,PKBSIZ-1
|
||||
AOBJN A,PKBCL5
|
||||
SETZB C,PKBQHC ; Collect all free buffers on this page
|
||||
MOVE E,PKBNF ; Loop about as many times as there are free buffers
|
||||
PKBCL1: PUSHJ P,PKBGF ; Get next free buffer
|
||||
JUMPE A,PKBCL2
|
||||
LDB B,[121000,,A]
|
||||
CAMN B,D
|
||||
JRST [ MOVEI Q,PKBQHC ; This one's on the page, save it
|
||||
PUSHJ P,PKQPL
|
||||
AOJA C,.+2 ] ; Count them
|
||||
PUSHJ P,PKBRT ; Not on the page, put back. This depends on
|
||||
; the fact PKBRT puts back at END of list!
|
||||
SOJG E,PKBCL1
|
||||
PKBCL2: CAIE C,<2000/PKBSIZ> ; Did we get the whole page?
|
||||
JRST [ MOVEI Q,PKBQHC ; No, must punt this one, and
|
||||
PUSHJ P,PKBRTL ; return all the buffers we saved up.
|
||||
JRST PKBCL4]
|
||||
MOVNS C ; Yes, get rid of these buffers
|
||||
ADDM C,PKBNT ; Decrement total # of buffers in use
|
||||
MOVE A,D
|
||||
PUSHJ P,MEMR ; Flush the page from addr space
|
||||
JRST PKBCLN ; Back to flush more, until quota done.
|
||||
343
src/system/time.950
Executable file
343
src/system/time.950
Executable file
@@ -0,0 +1,343 @@
|
||||
;I T S .OPERS RELEVANT TO REAL TIME
|
||||
|
||||
;.PDTIME AC, ;RETURNS PDUPS*<# SECS SINCE BEGINNING OF YEAR>
|
||||
|
||||
APDTIM: PUSHJ P,GPDTIM
|
||||
JRST RETM1 ;-1 IF NOT KNOWN
|
||||
JRST APTUAJ
|
||||
|
||||
;.RDATE AC, ;RETURNS SIXBIT YYMMDD IN AC
|
||||
|
||||
ARDATE: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
|
||||
JRST RETM1 ;NOT AVAILABLE
|
||||
IDIVI A,SPD ;GET # DAYS SINCE BEGINNING OF YEAR
|
||||
PUSHJ P,RDATE ;GET THE ANSWER
|
||||
JRST APTUAJ ;RETURN IT
|
||||
|
||||
;.RTIME AC, ;RETURNS SIXBIT HHMMSS (24 HOUR TIME) IN AC
|
||||
|
||||
ARTIME: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
|
||||
JRST RETM1 ;NOT AVAILABLE
|
||||
IDIVI A,SPD ;GET # SECS SINCE MIDNIGHT IN B
|
||||
PUSHJ P,RTIME ;CONVERT TO SIXBIT HHMMSS
|
||||
JRST APTUAJ ;RETURN IT
|
||||
|
||||
;.RDATIM AC, ;DOES .RTIME TO AC, .RDATE TO AC+1
|
||||
|
||||
ARDATI: PUSHJ P,GLPDTM ;GET CRUD
|
||||
JRST RETM1 ;NO LUCK (THIS IS GETTING BORING)
|
||||
IDIVI A,SPD ;CONVERT TO DAYS AND SECONDS
|
||||
HRLM A,(P) ;SAVE DAYS ON PDL
|
||||
PUSHJ P,RTIME ;GET TIME (HHMMSS)
|
||||
UMOVEM A,(J) ;GIVE TO USER
|
||||
HLRZ A,(P) ;GET DAYS AGAIN
|
||||
PUSHJ P,RDATE ;CONVERT TO SIXBIT
|
||||
AOJA J,APTUAJ ;GIVE TO USER AND RETURN
|
||||
|
||||
;.RYEAR AC, ;PUSHJ'S TO RYEAR AND MOVEM'S E TO AC
|
||||
|
||||
ARYEAR: PUSHJ P,RYEAR ;GET THE CRUFT
|
||||
UMOVEM E,(J) ;STORE YEAR AND CRUD
|
||||
POPJ P,
|
||||
|
||||
;.RLPDT AC, ;DOES .RYEAR AC+1, AND ALSO MOVEM'S A TO AC
|
||||
|
||||
ARLPDT: PUSHJ P,RYEAR ;GET THE CRUFT
|
||||
UMOVEM E,1(J) ;STORE YEAR AND CRUD
|
||||
JRST APTUAJ ;STORE TIME AND RETURN
|
||||
|
||||
;ROUTINE TO RETURN -1 ON AN OPER
|
||||
|
||||
RETM1: XCTR XRW,[SETOM (J)]
|
||||
POPJ P,
|
||||
|
||||
;GET THE CORRECTED PDUPS*<# SECS SINCE BEGINNING OF YEAR> IN A
|
||||
;SKIP IF OFFSET AVAILABLE AND CLOCK ON
|
||||
|
||||
GPDTIM:
|
||||
IFN PDCLKP,[
|
||||
SKIPN A,PDTIME ;GET THE OFFSET
|
||||
JRST GPDTM2 ;NOT AVAILABLE
|
||||
DATAI PDCLK,B ;GET WHAT THE CLOCK IS SAYING
|
||||
TLZ B,600000
|
||||
JUMPE B,GPDTM2 ;POWER PROBABLY (BUT NOT NECESSARILY) TURNED OFF
|
||||
SUBM B,A ;DO THE CORRECTION
|
||||
JUMPL A,CPOPJ ;LOST, DON'T RETURN A NEGATIVE NUMBER!
|
||||
JRST POPJ1 ;EXIT SKIPPING (SUCCESS)
|
||||
] ;PDCLKP
|
||||
IFN KS10P,[
|
||||
SKIPN PDTIME ; Offset available?
|
||||
JRST GPDTM2 ; No: Try backup
|
||||
RDTIM A ; Read clock into A!B
|
||||
TLC A,1729. ; "A most interesting number"
|
||||
TLNE A,-1 ; Does the clock look like it has been set?
|
||||
JRST GPDTM2 ; Must have been reset
|
||||
DIVI A,KSFREQ ; Convert to 60ths
|
||||
SUB A,PDTIME ; Subtract offset
|
||||
JUMPL A,CPOPJ ; Wooops, don't return a negative number! (Why
|
||||
; don't we use the backup in this case?)
|
||||
JRST POPJ1
|
||||
] ;KS10P
|
||||
GPDTM2: SKIPGE A,PDYTIM ;CLOCK NOT ON, TRY BACKUP
|
||||
POPJ P, ;SORRY, NOT AVAILABLE
|
||||
IMULI A,30. ;CONVERT TO SIXTIETHS OF A SECOND
|
||||
JRST POPJ1 ;CALL IT CORRECT AND AVAILABLE
|
||||
|
||||
;GET SIXBIT YYMMDD (DATE) IN A (LOCALIZED PDTIME/SPD IN A, YEAR IN RH(E))
|
||||
|
||||
RDATE: PUSHJ P,RDATE1 ;GET DAY IN C, MONTH IN B
|
||||
MOVE T,[1400,,A];SET UP BYTE POINTER FOR OUTPUT
|
||||
PUSHJ P,RDATM1 ;DEPOSIT DAY
|
||||
MOVE C,B ;GET MONTH
|
||||
PUSHJ P,RDATM1 ;DEPOSIT MONTH
|
||||
MOVEI B,(E) ;GET YEAR
|
||||
IDIVI B,100. ;GET LAST TWO DIGITS IN C
|
||||
ARTIMX: PUSHJ P,RDATM1 ;DEPOSIT YEAR (ENTRY FROM RTIME TO DEPOSIT HOUR)
|
||||
IOR A,[SIXBIT /000000/] ;CONVERT TO REAL SIXBIT
|
||||
POPJ P,
|
||||
|
||||
;GET MONTH (1 => JAN) IN B, DAY (1 => THE FIRST) IN C
|
||||
|
||||
RDATE1: AOS C,A ;GET DAY OF YEAR (LOCALIZED) (1 => THE FIRST)
|
||||
MOVEI B,12. ;INITIALLY ASSUME DECEMBER FOR MONTH
|
||||
CAMG C,LMNTBL-1(B) ;IF DAY IN YEAR .LE. DAY IN YEAR AT BEGINNING OF THIS MONTH,
|
||||
SOJA B,.-1 ;THEN DECREMENT TO PREVIOUS MONTH AND TRY AGAIN
|
||||
SUB C,LMNTBL-1(B) ;C(C) := DAY OF MONTH
|
||||
POPJ P,
|
||||
|
||||
LMNTBL: MNIRP [<M 1>] ;TABLE OF DAYS GONE BY AT BEGINNING OF MONTH
|
||||
|
||||
;GET THE SIXBIT TIME IN A (# SECS SINCE MIDNIGHT IN B)
|
||||
|
||||
RTIME: MOVE T,[1400,,A];SET UP BYTE POINTER FOR OUTPUT
|
||||
IDIVI B,60. ;GET SECONDS IN C
|
||||
PUSHJ P,RDATM1 ;DEPOSIT INTO A
|
||||
IDIVI B,60. ;GET HOURS IN B, MINUTES IN C
|
||||
PUSHJ P,RDATM1 ;DEPOSIT MINUTES
|
||||
MOVE C,B ;GET HOURS IN C
|
||||
JRST ARTIMX ;DEPOSIT HOURS, CONVERT TO SIXBIT, AND RETURN
|
||||
|
||||
;DEPOSIT C(C) AS TWO SIX BIT (AS OPPOSED TO SIXBIT) DECIMAL DIGITS
|
||||
; VIA T (INTO A) THEN DECREMENT T
|
||||
|
||||
RDATM1: IDIVI C,10. ;SEPARATE DIGITS
|
||||
DPB C,[60600,,D] ;DEPOSIT FIRST DIGIT TO GIVE 12 BITS
|
||||
DPB D,T ;OUTPUT BYTE
|
||||
ADD T,[140000,,] ;DECREMENT BYTE POINTER
|
||||
POPJ P, ;THAT'S ALL
|
||||
|
||||
;DO A PUSHJ P,GLPDTM THEN HACK AROUND
|
||||
;DO THOSE THINGS TO E COMMENTED IN GLPDTM AS BEING DONE BY RYEAR
|
||||
;TRY TO GET YEAR EVEN IF GLPDTM DOESN'T SKIP, BUT IN THAT CASE CLOBBER A TO -1
|
||||
|
||||
RYEAR: PUSHJ P,GLPDTM ;GET THE CRUFT
|
||||
JRST RYEAR2 ;DIDN'T SKIP, SEE WHAT CAN BE SALVAGED
|
||||
RYEAR1: PUSH P,A ;PROTECT A FROM FUTURE CLOBBERAGE
|
||||
IDIVI A,SPD ;GET LOCALIZED # DAYS SINCE BEGINNING OF YEAR
|
||||
JUMPL E,[SOJA A,.+1] ;DE-LOCALIZE
|
||||
LDB B,[270300,,E] ;DAY OF WEEK OF BEGINNING OF YEAR
|
||||
ADD A,B ;ADD IN
|
||||
IDIVI A,7 ;GET TODAY'S DAY OF WEEK (0 => SUNDAY) IN B
|
||||
DPB B,[320300,,E] ;DEPOSIT IN E
|
||||
TLO E,40000 ;DOCUMENT FACT THAT TIME OF YEAR KNOWN
|
||||
JRST POPAJ ;RESTORE A AND RETURN
|
||||
|
||||
RYEAR2: PUSHJ P,GDWOBY ;GLPDTM DIDN'T SKIP, TRY TO SALVAGE CRUFT: FIRST DOWOBY
|
||||
MOVNI A,1 ;DOCUMENT FACT THAT TIME OF YEAR NOT KNOWN
|
||||
JUMPE E,CPOPJ ;RETURN IF YEAR NOT KNOWN EITHER
|
||||
DPB B,[270300,,E] ;DAY OF WEEK OF BEGINNING OF YEAR
|
||||
JRST CMPF29 ;SEE IF LEAP YEAR, AND RETURN
|
||||
|
||||
;NOTE: THE SYMS JAN, FEB, MAR, ETC. ARE DEFINED AFTER (AND BY) MNIRP (A MACRO)
|
||||
|
||||
;INCREMENT YEAR
|
||||
|
||||
NUPDT: TLNN E,200000 ;SEE IF LEAP YEAR
|
||||
SKIPA A,[<365.*SPD*PDUPS>] ;NORMAL YEAR
|
||||
MOVE A,[<366.*SPD*PDUPS>] ;LEAP YEAR
|
||||
ADDM A,PDTIME ;UPDATE PDCLK OFFSET
|
||||
IDIVI A,30. ;CONVERT TO HALF-SECONDS
|
||||
EXCH A,PDYTIM ;ALSO UPDATE BACKUP SYSTEM
|
||||
SUBM A,PDYTIM
|
||||
AOS FYEAR ;INCREMENT YEAR
|
||||
|
||||
;INSERT OTHER CRUFT HERE IF DESIRED
|
||||
;DROPS THROUGH
|
||||
|
||||
;CODING DROPS THROUGH FROM PREVIOUS PAGE
|
||||
;GET "LOCALIZED" NUMBER OF SECONDS SINCE BEGINNING OF YEAR IN A
|
||||
;IF DIVIDED BY # SECONDS IN A DAY,
|
||||
;GIVES REMAINDER OF # SECONDS SINCE MIDNIGHT LOCAL TIME
|
||||
;QUOTIENT WHEN FED TO DATE GENERATOR ROUTINE ASSUMING LEAP YEAR GIVES CORRECT DATE
|
||||
;ALSO GET YEAR AND FLAGS (AS RETURNED BY .RYEAR) IN E
|
||||
;1.1-2.9 => YEAR (E.G. 1969.)
|
||||
;3.1-3.5 ZERO
|
||||
;3.6-3.8 => DAY OF WEEK OF BEGINNING OF YEAR (0 => SUNDAY)
|
||||
;3.9-4.2 ZERO (RYEAR SETS THIS BYTE TO TODAY'S DAY OF WEEK IF TIME OF YEAR KNOWN)
|
||||
;4.6 ZERO (RYEAR SETS IT TO 1 IF TIME OF YEAR KNOWN)
|
||||
;4.7 ONE => DAYLIGHT SAVINGS TIME IN EFFECT
|
||||
;4.8 ONE => LEAP YEAR
|
||||
;4.9 ONE => 365 DAY YEAR AND AFTER FEB 28
|
||||
;SKIPS IF PDCLK ON AND BOTH PDTIME AND FYEAR NON-ZERO (IN OTHER WORDS IF SUCCESSFUL)
|
||||
;PREVIOUS CODING DROPS THROUGH ON YEAR INCREMENT
|
||||
|
||||
GLPDTM: CONO PI,CLKOFF ;AVOID DOUBLE YEAR INCREMENT
|
||||
SKIPE E,FYEAR ;GET YEAR IN E, SKIP IF NOT AVAILABLE
|
||||
PUSHJ P,GPDTIM ;GET PDTIME, SHOULD SKIP
|
||||
JRST CLKONJ ;SOMETHING NOT AVAILABLE, DON'T SKIP
|
||||
IDIVI A,60. ;CONVERT TO SECONDS
|
||||
PUSHJ P,CMPF29 ;MAYBE SET BIT 4.8 OR 4.9 OF E, IF 4.9 SET THEN ADD SPD TO A
|
||||
CAML A,[366.*SPD] ;IF MORE THAN A YEAR HAS GONE,
|
||||
JRST NUPDT ;THEN INCREMENT YEAR
|
||||
CONO PI,CLKON ;TIMIMG ERROR PROBLEM GONE
|
||||
PUSH P,A ;SAVE # SECONDS DURING NEXT CALL
|
||||
PUSHJ P,GDWOBY ;GET DAY OF WEEK OF BEGINNING OF YEAR (0 => SUNDAY)
|
||||
DPB B,[270300,,E] ;DEPOSIT IN RIGHT PLACE
|
||||
POP P,A ;RESTORE A
|
||||
AOS (P) ;CAUSE RETURN TO SKIP
|
||||
|
||||
;IF DAYLIGHT SAVINGS TIME THEN ADD 3600. TO A AND SET BIT 4.7 IN E
|
||||
|
||||
GLPDT2: JFCL ;POPJ FOR STD TIME
|
||||
;JRST CRDDST FOR DAY LIGHT TIME
|
||||
;JFCL "NORMAL"
|
||||
CAML A,[<APR 1>*SPD+7200.] ;IF BEFORE 2AM APR 1,
|
||||
CAML A,[<OCT 31.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCT 31,
|
||||
POPJ P, ;THEN OBVIOUSLY STANDARD TIME IS IN EFFECT
|
||||
CAML A,[<APR 7>*SPD+7200.] ;IF BEFORE 2AM APR 7 STANDARD TIME,
|
||||
CAML A,[<OCT 25.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCTOBER 25,
|
||||
JRST GLPDT3 ;THEN NOT OBVIOUS
|
||||
CRDDST: TLO E,100000 ;DAYLIGHT SAVINGS TIME, SET BIT IN E
|
||||
ADDI A,3600. ;CONTINUE TO LOCALIZE THE TIME THAT WILL BE RETURNED
|
||||
POPJ P,
|
||||
|
||||
;IT IS NOW SOMETIME DURING THE WEEKS IN APR AND OCTOBER
|
||||
;WHEN IT MAY BE EITHER STANDARD OR DAYLIGHT SAVINGS TIME
|
||||
|
||||
GLPDT3: PUSH P,A ;SAVE # SECS
|
||||
CAMG A,[JUL*SPD] ;IF NOT YET JULY,
|
||||
TDZA D,D ;THEN IT MUST BE APR, SET INDEX
|
||||
MOVEI D,1 ;OCTOBER, SET INDEX
|
||||
SUB A,CRDSB(D) ;COMPENSATE FOR 2AM OR 1AM
|
||||
IDIVI A,SPD ;FLUSH SECONDS, LEAVE ONLY DAYS (IT LOOKS LIKE A LEAP YEAR, REMEMBER)
|
||||
LDB C,[270300,,E] ;GET DAY OF WEEK OF BEGINNING OF YEAR IN C
|
||||
JUMPGE E,.+3 ;IF REGULAR YEAR,
|
||||
SOJGE C,.+2 ;THEN DE-LOCALIZE SO IT WILL RE-LOCALIZE LATER...
|
||||
MOVEI C,6 ;MOD 7
|
||||
ADD A,C ;ADD TO NUMBER OF DAYS
|
||||
IDIVI A,7
|
||||
IMULI A,7
|
||||
SUB A,C ;C(A) := NUMBER OF DAYS IN YEAR BEFORE LAST SUNDAY (MAYBE TODAY)
|
||||
;IF LAST SUNDAY (AS DEFINED ABOVE) IS BELOW THE "REGION OF AMBIGUITY",
|
||||
;THEN IT HAS NOT YET CHANGED TO THE LATER TIME
|
||||
XCT CRDTST(D) ;SKIP IF DAYLIGHT SAVINGS TIME
|
||||
JRST POPAJ ;STANDARD TIME, NO CHANGES NECESSARY
|
||||
POP P,A ;DAYLIGHT SAVINGS TIME, RESTORE A
|
||||
JRST CRDDST ;MUNG A AND E AND RETURN
|
||||
|
||||
CRDSB: 7200. ;IN APR CHANGES AT 2AM EST
|
||||
3600. ;IN OCTOBER CHANGES AT 1AM EST
|
||||
|
||||
CRDTST: CAIGE A,<APR 1>
|
||||
CAIL A,<OCT 25.>
|
||||
|
||||
;IF LEAP YEAR THEN SET BIT 4.8 OF E
|
||||
;IF NOT LEAP YEAR THEN IF AFTER FEB 28 THEN SET BIT 4.9 OF E AND ADD SPD TO A
|
||||
|
||||
CMPF29: TRNN E,3 ;IF LEAP YEAR, (HOPEFULLY THIS ONLY PLACE WHERE DIRECTLY CHECKED FOR LEAP YEAR)
|
||||
TLOA E,200000 ;THEN SET BIT 4.8 OF E AND RETURN
|
||||
CAMGE A,[<<MAR 1>-1>*SPD] ;365 DAY YEAR, IF BEFORE MARCH FIRST,
|
||||
POPJ P, ;THEN RETURN
|
||||
TLO E,400000 ;365 DAY YEAR AFTER FEB 28, SET BIT 4.9 OF E
|
||||
ADDI A,SPD ;INCREMENT A ONE DAY
|
||||
POPJ P,
|
||||
|
||||
;GET DAY OF WEEK OF BEGINNING OF YEAR (IN E) (0 => SUNDAY) IN B
|
||||
;FOLLOWING ROUTINE HAS BEEN EXHAUSTIVELY CHECKED
|
||||
|
||||
GDWOBY: MOVEI A,-1(E)
|
||||
IDIVI A,400.
|
||||
MOVEI A,1(B)
|
||||
IDIVI B,4
|
||||
ADD A,B
|
||||
IDIVI B,25.
|
||||
SUB A,B
|
||||
IDIVI A,7
|
||||
POPJ P,
|
||||
|
||||
;SLOW CLOCK ROUTINE TO CHECK ON REAL-TIME CLOCK SYSTEM
|
||||
|
||||
PDCCHK: SKIPL PDYTIM ;IF BACKUP TIME (SINCE BEGINNING OF YEAR) CALCULATED,
|
||||
AOS PDYTIM ;THEN UPDATE IT
|
||||
SKIPGE TIMOFF ;IF TIMOFF NOT CALCULATED,
|
||||
POPJ P, ;THEN RETURN
|
||||
AOS A,TIMOFF ;UPDATE TIMOFF
|
||||
CAMGE A,[2*SPD] ;Incremented beyond length of day?
|
||||
JRST PDCCH1
|
||||
SETZB A,TIMOFF ;Yes - reset it.
|
||||
MOVEM A,RSWTIM ;Also reset last-resource-warning timestamp.
|
||||
PDCCH1: TRNE A,64.*2-1 ;Is this a 64. second (based on TIMOFF) clock break?
|
||||
POPJ P, ; No, so return.
|
||||
INITIM:
|
||||
IFN PDCLKP,[
|
||||
SKIPN A,PDTIME ;MAYBE UPDATE BACKUP SYSTEM
|
||||
JRST INITM2 ;PDTIME NOT AVAILABLE, DON'T
|
||||
DATAI PDCLK,B
|
||||
TLZ B,600000
|
||||
JUMPE B,INITM2 ;JUMP IF CLOCK OFF
|
||||
SUBM B,A
|
||||
JUMPL A,CPOPJ
|
||||
IDIVI A,30. ;CONVERT TO HALF-SECONDS SINCE BEGINNING OF YEAR
|
||||
MOVEM A,PDYTIM ;STORE RE-CALCULATED BACKUP TIME
|
||||
] ;PDCLKP
|
||||
IFN KS10P,[
|
||||
SKIPN PDTIME ; Update backup system?
|
||||
JRST INITM2 ; Not without offset
|
||||
RDTIM A
|
||||
TLC A,1729.
|
||||
TLNE A,-1
|
||||
JRST INITM2 ; Not if clock reset
|
||||
DIVI A,KSFREQ
|
||||
SUB A,PDTIME ; 60ths since Jan 1
|
||||
JUMPL A,CPOPJ
|
||||
IDIVI A,30. ; halfs since Jan 1
|
||||
MOVEM A,PDYTIM ; Store backup
|
||||
] ;KS10P
|
||||
INITM2: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
|
||||
POPJ P, ;SOMETHING'S MISSING
|
||||
IDIVI A,SPD ;SEPARATE INTO DAYS AND SECONDS
|
||||
LSH B,1 ;CONVERT TIME SINCE MIDNIGHT TO HALF-SECONDS
|
||||
MOVEM B,TIMOFF ;STORE RE-CALCULATED NUMBER OF HALF-SECONDS SINCE MIDNIGHT
|
||||
PUSHJ P,CLCQDT ;GET QDATE,,TIMOFF IN A
|
||||
CONO PI,UTCOFF ;INHIBIT INTERRUPTS DURING THIS RITUAL
|
||||
SKIPGE A,QMDRO ;GET ORIGIN OF MASTER DSK DIRECTORY
|
||||
JRST UTCONJ ;DIRECTORY LOCKED
|
||||
MOVE B,QACTB ;DIRECTORY CHANGED BIT FOR DSK DIRECTORY
|
||||
SKIPE T,PDTIME ;GET OFFSET FOR DECORIOLIS CLOCK
|
||||
CAMN T,MPDOFF(A) ;SEE IF IT MATCHES RELEVANT WORD IN DSKDIR
|
||||
JRST .+3 ;MATCHES OR PDTIME NOT AVAILABLE
|
||||
MOVEM T,MPDOFF(A) ;NO MATCH, CORRECT THE DSKDIR ONE
|
||||
IORM B,QMDRO ;SET DIRECTORY CHANGED BIT
|
||||
SKIPE T,FYEAR ;NOW DO THE SAME FOR THE YEAR,
|
||||
CAMN T,MDYEAR(A) ;AND THE RELEVANT WORD IN DSKDIR
|
||||
JRST .+3
|
||||
MOVEM T,MDYEAR(A)
|
||||
IORM B,QMDRO
|
||||
JRST UTCONJ ;THAT'S ALL
|
||||
|
||||
CLCQDT: PUSHJ P,RDATE1 ;GET DAY OF MONTH IN C, MONTH IN B
|
||||
SETZM QDATE ;INITIALIZE FOR FOLLOWING
|
||||
PUSH P,E-1
|
||||
PUSH P,E
|
||||
MOVE E-1,FYEAR
|
||||
IDIVI E-1,100.
|
||||
DPB E,[330700,,QDATE] ;YEAR
|
||||
POP P,E
|
||||
POP P,E-1
|
||||
DPB B,[270400,,QDATE] ;MONTH
|
||||
DPB C,[220500,,QDATE] ;DAY
|
||||
MOVE C,QDATE ;THE FIRST TIME QDATE IS SET UP,
|
||||
HRR C,TIMOFF ;SET UP QDATEI = TIME SYSTEM CAME UP.
|
||||
SKIPGE QDATEI
|
||||
MOVEM C,QDATEI ;MECHANISM IS, SET QDATEI UNLESS ALREADY SET.
|
||||
POPJ P,
|
||||
151
src/system/tm03s.defs4
Executable file
151
src/system/tm03s.defs4
Executable file
@@ -0,0 +1,151 @@
|
||||
;;; -*- Mode: Midas -*-
|
||||
.AUXIL
|
||||
|
||||
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
|
||||
;;; RH11/TM03 Interrupt vector:
|
||||
DEFSYM %TMVEC==224 ;(224/4 = 45) Interrupts occur on level 6
|
||||
; (high priority) on UBA #1.
|
||||
DEFSYM %TMBAS==772400 ;Unibus address of first register
|
||||
|
||||
;;; RH11/TM03 Unibus register addresses:
|
||||
|
||||
DEFSYM %TMCS1=:%TMBAS ;CONTROL AND STATUS 1
|
||||
DEFSYM %TM1SC==1_15. ; Special Condition
|
||||
DEFSYM %TM1TE==1_14. ; Transfer Error
|
||||
DEFSYM %TM1MP==1_13. ; Massbus Control Bus Parity Error
|
||||
DEFSYM %TM1DA==1_11. ; Drive Available
|
||||
DEFSYM %TM1A7==1_9. ; UB Address Extension Bit 17
|
||||
DEFSYM %TM1A6==1_8. ; UB Address Extension Bit 16
|
||||
DEFSYM %TM1RY==1_7. ; Ready
|
||||
DEFSYM %TM1IE==1_6. ; Interrupt Enable
|
||||
DEFSYM $TM1CM==.BP 77 ; Bits 0-5 specify commands.
|
||||
DEFSYM %TM1GO==1_0. ; GO bit
|
||||
|
||||
;;; Commands with bit 0 (GO) included:
|
||||
|
||||
DEFSYM %TMNOP==1 ;No Operation
|
||||
DEFSYM %TMUNL==3 ;Unload
|
||||
DEFSYM %TMREW==7 ;Rewind
|
||||
DEFSYM %TMCLR==11 ;Formatter clear (reset errors etc.)
|
||||
DEFSYM %TMER3==25 ;Erase three inch gap
|
||||
DEFSYM %TMWTM==27 ;Write Tape Mark
|
||||
DEFSYM %TMSPF==31 ;Space Forward
|
||||
DEFSYM %TMSPR==33 ;Space Reverse
|
||||
DEFSYM %TMWCF==51 ;Write Check FOrward
|
||||
DEFSYM %TMWCR==57 ;Write Check Reverse
|
||||
DEFSYM %TMWRT==61 ;Write Forward
|
||||
DEFSYM %TMRDF==71 ;Read Forward
|
||||
DEFSYM %TMRDR==77 ;Read Data Reverse
|
||||
|
||||
DEFSYM %TMWC=:%TMBAS+2 ;WORD COUNT.
|
||||
|
||||
DEFSYM %TMBA=:%TMBAS+4 ;UNIBUS ADDRESS.
|
||||
|
||||
DEFSYM %TMFC=:%TMBAS+6 ;TAPE FRAME COUNT
|
||||
|
||||
DEFSYM %TMCS2=:%TMBAS+10 ;CONTROL AND STATUS 2.
|
||||
DEFSYM %TM2DL==1_15. ; Data Late
|
||||
DEFSYM %TM2UP==1_13. ; Unibus Parity Error
|
||||
DEFSYM %TM2NF==1_12. ; Non-existant Formatter
|
||||
DEFSYM %TM2NM==1_11. ; %TMBA is NXM during DMA
|
||||
DEFSYM %TM2PE==1_10. ; Program Error
|
||||
DEFSYM %TM2MT==1_9. ; Missed Transfer
|
||||
DEFSYM %TM2MP==1_8. ; Massbus Data Bus Parity Error
|
||||
DEFSYM %TM2OR==1_7. ; Output Ready (for Silo buffer diag.)
|
||||
DEFSYM %TM2IR==1_6. ; Input Ready (for Silo buffer diag.)
|
||||
DEFSYM %TM2CC==1_5. ; Controller Clear
|
||||
DEFSYM %TM2PT==1_4. ; Parity Test
|
||||
DEFSYM %TM2AI==1_3. ; Unibus Address Increment Inhibit
|
||||
|
||||
DEFSYM %TMFS=:%TMBAS+12 ;FORMATTER STATUS
|
||||
DEFSYM %TMSAA==1_15. ; Attention Active
|
||||
DEFSYM %TMSES==1_14. ; Error Summary
|
||||
DEFSYM %TMSPP==1_13. ; Positioning in Progress
|
||||
DEFSYM %TMSOL==1_12. ; Medium On-Line
|
||||
DEFSYM %TMSWL==1_11. ; Write Locked
|
||||
DEFSYM %TMSET==1_10. ; End of Tape
|
||||
DEFSYM %TMSFP==1_8. ; Formatter Present
|
||||
DEFSYM %TMSFR==1_7. ; Formatter Ready
|
||||
DEFSYM %TMSSC==1_6 ; Slave Status Change
|
||||
DEFSYM %TMSPE==1_5. ; Phase Encoded (1600BPI) Mode
|
||||
DEFSYM %TMSSD==1_4. ; Slowing Down
|
||||
DEFSYM %TMSIB==1_3. ; PE Identification Burst Detected
|
||||
DEFSYM %TMSTM==1_2. ; Tape Mark detected
|
||||
DEFSYM %TMSBT==1_1. ; Beginning of Tape
|
||||
DEFSYM %TMSSA==1_0. ; Slave Attention (on-line)
|
||||
|
||||
DEFSYM %TMERR=:%TMBAS+14 ;ERROR REGISTER
|
||||
DEFSYM %TMECE==1_15. ; Correctable Data/CRC Error
|
||||
DEFSYM %TMEUS==1_14. ; Unsafe
|
||||
DEFSYM %TMEOI==1_13. ; Operation Incomplete
|
||||
DEFSYM %TMECT==1_12. ; Controller Timing Error
|
||||
DEFSYM %TMENX==1_11. ; Non Executable Function
|
||||
DEFSYM %TMECS==1_10. ; Correctable Skew/Illegal Tape Mark Error
|
||||
DEFSYM %TMEFC==1_9. ; Frame Count Error
|
||||
DEFSYM %TMENG==1_8. ; Non-standard Gap
|
||||
DEFSYM %TMEFL==1_7. ; PE Format/LRC Error
|
||||
DEFSYM %TMEIC==1_6. ; Incorrectable Data/Hard Error
|
||||
DEFSYM %TMEMD==1_5. ; Massbus Data Parity Error
|
||||
DEFSYM %TMEFS==1_4. ; Format Select Error
|
||||
DEFSYM %TMEMC==1_3. ; Massbus Control Parity Error
|
||||
DEFSYM %TMERM==1_2. ; Register Modification Refused
|
||||
DEFSYM %TMEIR==1_1. ; Illegal Register
|
||||
DEFSYM %TMEIF==1_0. ; Illegal Function
|
||||
DEFSYM %TMEHD==44077 ; Hard errors - US,NX,MD,FS,MC,RM,IR,IF
|
||||
|
||||
DEFSYM %TMASN=:%TMBAS+16 ;ATTENTION SUMMARY.
|
||||
;Each bit 7-0 corresponds to a formatter asserting ATA.
|
||||
|
||||
DEFSYM %TMCCR=:%TMBAS+20 ;CHECK CHARACTER REGISTER
|
||||
DEFSYM %TMCDP==1_8. ; Dead Track Parity/CRC Parity
|
||||
DEFSYM $TMCEI==.BP 177 ; Error Information
|
||||
|
||||
DEFSYM %TMBUF=:%TMBAS+22 ;DATA BUFFER REGISTER
|
||||
|
||||
DEFSYM %TMMNT=:%TMBAS+24 ;MAINTENANCE.
|
||||
|
||||
DEFSYM %TMTYP=:%TMBAS+26 ;DRIVE TYPE.
|
||||
;2.7 Not Sector addressed
|
||||
;2.6 Tape
|
||||
;2.5 Moving Head
|
||||
;2.3 Dual controller option available
|
||||
;1.9 - 1.1 Drive Type Number.
|
||||
; TU77=14, TU45=12, TE16=11 Nothing=10
|
||||
|
||||
DEFSYM %TMSER=:%TMBAS+30 ;SERIAL NUMBER
|
||||
|
||||
DEFSYM %TMTC=:%TMBAS+32 ;TAPE CONTROL REGISTER
|
||||
DEFSYM %TMTAC==1_15. ; Acceleration (not up to speed)
|
||||
DEFSYM %TMTFC==1_14. ; Frame Count non-zero
|
||||
DEFSYM %TMTSA==1_13. ; Slave Address (selected slave) Changed
|
||||
DEFSYM %TMTEA==1_12. ; Enable Abort on data transfer error
|
||||
DEFSYM %TMTDS==7_8. ; Density Select Field
|
||||
DEFSYM $TMTDS==.BP %TMTDS
|
||||
DEFSYM %TMD08==3 ; 800 BPI NRZI
|
||||
DEFSYM %TMD16==4 ; 1600 BPI PE
|
||||
DEFSYM %TMTFS==17_4. ; Format Select
|
||||
DEFSYM $TMTFS==.BP %TMTFS
|
||||
DEFSYM %TMFCD==0 ; PDP10 Core Dump
|
||||
DEFSYM %TMFIC==3 ; Industry Compatible (32 bit mode)
|
||||
DEFSYM %TMTEP==1_3. ; Even Parity
|
||||
DEFSYM %TMTTS==7 ; Transport Select
|
||||
DEFSYM $TMTTS==.BP %TMTTS
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
|
||||
|
||||
178
src/system/tm78s.defs2
Executable file
178
src/system/tm78s.defs2
Executable file
@@ -0,0 +1,178 @@
|
||||
;;; -*- Mode: Midas -*-
|
||||
.AUXIL
|
||||
|
||||
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||
IFNDEF DEFSYM,[
|
||||
DEFINE DEFSYM X/
|
||||
IRPS Z,,[X]
|
||||
IFNDEF Z,X
|
||||
.ELSE [ $$TEM1==Z
|
||||
X
|
||||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||
]
|
||||
.ISTOP
|
||||
TERMIN TERMIN
|
||||
$$TEMP==1
|
||||
] ;IFNDEF DEFSYM
|
||||
.ELSE, $$TEMP==0
|
||||
|
||||
|
||||
;;; RH11/TM78 Interrupt vector:
|
||||
DEFSYM %ARVEC==224 ;(224/4 = 45) Interrupts occur on level 6
|
||||
; (high priority) on UBA #1.
|
||||
DEFSYM %ARBAS==772400 ;Unibus address of first register
|
||||
|
||||
;;; RH11/TM78 Unibus register addresses:
|
||||
|
||||
DEFSYM %ARCS1==%ARBAS ;CONTROL AND STATUS 1 (RH11 and MB Reg 00)
|
||||
DEFSYM %A1SC==1_15. ; Special Condition
|
||||
DEFSYM %A1TE==1_14. ; Transfer Error
|
||||
DEFSYM %A1MCP==1_13. ; Massbus Control Bus Parity Error
|
||||
DEFSYM %A1DA==1_11. ; Drive (TM78) Available
|
||||
DEFSYM %A1A7==1_9. ; UB Address Extension Bit 17
|
||||
DEFSYM %A1A6==1_8. ; UB Address Extension Bit 16
|
||||
DEFSYM %A1RDY==1_7. ; Ready
|
||||
DEFSYM %A1IE==1_6. ; Interrupt Enable
|
||||
DEFSYM %A1CMD==77 ; Bits 0-5 specify commands.
|
||||
DEFSYM %A1GO==1_0. ; GO bit
|
||||
|
||||
;;; Commands, with GO bit or'd in.
|
||||
;;; --NOTE--
|
||||
;;; Commands are passed to the controller in two ways. Data transfer
|
||||
;;; command get written into the CS1 register, as usual. Non-data-transfer
|
||||
;;; commands are written to the %ARNDC register for the desired drive
|
||||
;;; unit (see below). Non-data-transfer commands are marked with a '*'.
|
||||
|
||||
DEFSYM %ACNOP==3 ;(*) No Operation
|
||||
DEFSYM %ACUNL==5 ;(*) Unload
|
||||
DEFSYM %ACREW==7 ;(*) Rewind
|
||||
DEFSYM %ACSNS==11 ;(*) Sense (Get status from TM)
|
||||
DEFSYM %ACDSE==13 ;(*) Data Security Erase! (Erase rest of tape)
|
||||
DEFSYM %ACWPM==15 ;(*) Write Phase Encoded (1600bpi) Tape Mark
|
||||
DEFSYM %ACWGM==17 ;(*) Write GCR (6250bpi Tape Mark
|
||||
DEFSYM %ACSFR==21 ;(*) Space Forward Record
|
||||
DEFSYM %ACSRR==23 ;(*) Space Reverse Record
|
||||
DEFSYM %ACSFF==25 ;(*) Space Forward File
|
||||
DEFSYM %ACSRF==27 ;(*) Space Reverse File
|
||||
DEFSYM %ACSFE==31 ;(*) Space Forward Either (record or file)
|
||||
DEFSYM %ACSRE==33 ;(*) Space Reverse Either
|
||||
DEFSYM %ACE3P==35 ;(*) Erase Three-inch gap, set PE
|
||||
DEFSYM %ACE3G==37 ;(*) Erase Three-inch gap, set GCR
|
||||
DEFSYM %ACCFP==41 ;(*) Close File PE (write two marks, back one)
|
||||
DEFSYM %ACCFG==43 ;(*) Close File GCR
|
||||
DEFSYM %ACEOT==45 ;(*) Space to Logical EOT
|
||||
DEFSYM %ACSFU==47 ;(*) Space forward usefully (to file or EOT)
|
||||
DEFSYM %ACWCF==51 ;Write Check Forward
|
||||
DEFSYM %ACWCR==57 ;Write Check Reverse
|
||||
DEFSYM %ACWRP==61 ;Write Forward PE
|
||||
DEFSYM %ACWRG==63 ;Write Forward GCR
|
||||
DEFSYM %ACRDF==71 ;Read Forward
|
||||
DEFSYM %ACRES==73 ;Read Extended Sense Information
|
||||
DEFSYM %ACRDR==77 ;Read Data Reverse
|
||||
|
||||
|
||||
DEFSYM %ARWC==%ARBAS+2 ;UNIBUS DMA WORD COUNT. (RH11)
|
||||
; Negative count of the number of PDP11 (18-bit) words to DMA
|
||||
|
||||
DEFSYM %ARBA==%ARBAS+4 ;UNIBUS ADDRESS. (RH11)
|
||||
; Unibus address of start of DMA transfer
|
||||
|
||||
DEFSYM %ARFC==%ARBAS+6 ;TAPE FRAME BYTE COUNT (MB Reg 05)
|
||||
|
||||
DEFSYM %ARCS2==%ARBAS+10 ;CONTROL AND STATUS 2. (RH11)
|
||||
DEFSYM %A2DL==1_15. ; Data Late
|
||||
DEFSYM %A2UPE==1_13. ; Unibus Parity Error
|
||||
DEFSYM %A2NF==1_12. ; Non-existant Formatter (TM78)
|
||||
DEFSYM %A2NM==1_11. ; Unibus mem NXM during DMA
|
||||
DEFSYM %A2PE==1_10. ; Program Error
|
||||
DEFSYM %A2MT==1_9. ; Missed Transfer
|
||||
DEFSYM %A2MDP==1_8. ; Massbus Data Bus Parity Error
|
||||
DEFSYM %A2OR==1_7. ; Output Ready (for Silo buffer diag.)
|
||||
DEFSYM %A2IR==1_6. ; Input Ready (for Silo buffer diag.)
|
||||
DEFSYM %A2CC==1_5. ; Controller Clear
|
||||
DEFSYM %A2PT==1_4. ; Parity Test
|
||||
DEFSYM %A2UAI==1_3. ; Unibus Address Increment Inhibit
|
||||
|
||||
DEFSYM %ARDER==%ARBAS+12 ;DATA TRANSFER ERROR REPORT (MB Reg 01)
|
||||
DEFSYM %ADEIC==77 ; Interrupt Code
|
||||
DEFSYM %ADEDP==1_8. ; DPR ???
|
||||
DEFSYM %ADEFC==77_10. ; Failure Code
|
||||
|
||||
DEFSYM %ARDCA==%ARBAS+14 ;DATA COMMAND ARGUMENTS (MB Reg 02)
|
||||
DEFSYM %ADACA==3 ; Command Address (TU78 unit number)
|
||||
DEFSYM %ADARC==77_2. ; Record Count
|
||||
DEFSYM %ADASC==17_8. ; Skip Count
|
||||
DEFSYM %ADAFT==7_12. ; Format
|
||||
DEFSYM %ADASR==1_15. ; Supress Repositioning on error
|
||||
|
||||
DEFSYM %ARASN==%ARBAS+16 ;ATTENTION SUMMARY. (MB Reg 04)
|
||||
;Each bit 3-0 corresponds to a drive wanting attention
|
||||
; You must explicitly -RESET- an attention bit by writing a
|
||||
; one into it before the controller can interrupt you again.
|
||||
|
||||
DEFSYM %ARDS==%ARBAS+20 ;DRIVE STATUS (MB Reg 07)
|
||||
;;; This register is valid only after a SENSE command
|
||||
;;; (or possibly an unsolicited ONLINE interrupt)
|
||||
DEFSYM %ASRDY==1_15. ; Tape Ready
|
||||
DEFSYM %ASPRE==1_14. ; Present (TM78 powered up)
|
||||
DEFSYM %ASONL==1_13. ; Online
|
||||
DEFSYM %ASREW==1_12. ; Tape Rewinding
|
||||
DEFSYM %ASPE==1_11. ; Tape is Phase Encoded
|
||||
DEFSYM %ASBOT==1_10. ; Tape at BOT
|
||||
DEFSYM %ASEOT==1_9. ; Tape at EOT
|
||||
DEFSYM %ASWPT==1_8. ; Tape is Write Protected
|
||||
DEFSYM %ASUA==1_7. ; Unit Available
|
||||
DEFSYM %ASUS==1_6. ; Unit is shared
|
||||
DEFSYM %ASMMD==1_5. ; Unit is in Maintainance mode
|
||||
DEFSYM %ASDSE==1_4. ; Data Security Erase in progress.
|
||||
|
||||
DEFSYM %ARBUF==%ARBAS+22 ;DATA BUFFER REGISTER (RH11)
|
||||
|
||||
DEFSYM %ARMR1==%ARBAS+24 ;MAINTENANCE REGISTER 1 (MB Reg 03)
|
||||
|
||||
DEFSYM %ARTYP==%ARBAS+26 ;DRIVE TYPE. (MB Reg 06)
|
||||
;;; This register is valid only after a SENSE command
|
||||
;2.7 Not Sector addressed
|
||||
;2.6 Tape
|
||||
;2.5 Moving Head (always 0)
|
||||
;2.4 7 track (always 0)
|
||||
;2.3 Dual port (must do arbitration)
|
||||
;2.2 Slave present (always 1)
|
||||
;2.1 Writable Control Store (always 0)
|
||||
;1.9 - 1.1 Drive Type Number.
|
||||
; TU78=101
|
||||
|
||||
DEFSYM %ARSER==%ARBAS+30 ;SERIAL NUMBER (MB Reg 010)
|
||||
;;; This register is valid only after a SENSE command
|
||||
;0-3 SN digit 0, in BCD
|
||||
;4-7 SN digit 1
|
||||
;8-11 SN digit 2
|
||||
;12-15 SN digit 3
|
||||
|
||||
DEFSYM %ARMR2==%ARBAS+32 ;MAINTAINANCE REGISTER 2 (MB Reg 011)
|
||||
|
||||
DEFSYM %ARMR3==%ARBAS+34 ;MAINTAINANCE REGISTER 3 (MB Reg 012)
|
||||
|
||||
DEFSYM %ARNDE==%ARBAS+36 ;NON-DATA CMD ERROR REGISTER (MB Reg 013)
|
||||
DEFSYM %ANEIC==77 ; NDT Interrupt code
|
||||
DEFSYM %ANEAA==3_8. ; Attention Address (drive that caused this)
|
||||
DEFSYM %ANEFC==77_10. ; NDT Failure Code
|
||||
|
||||
DEFSYM %ARNDA==%ARBAS+40 ;NON-DATA CMD ARG REGISTERS (MB Reg 014 - 017)
|
||||
;;; There are four of these, one for each of the possible slave TU78
|
||||
;;; units on the TM78. This is where you write commands that don't
|
||||
;;; move data over the massbus.
|
||||
DEFSYM %ANCMD==77 ; Command to execute
|
||||
DEFSYM %ANCNT==377_8. ; Count
|
||||
|
||||
DEFSYM %ARIA==%ARBAS+50 ;INTERNAL ADDRESS (MB Reg 020)
|
||||
|
||||
DEFSYM %ARID==%ARBAS+52 ;HARDWARE CONTROL (MB Reg 021)
|
||||
DEFSYM %AHRDY==1_15. ; Set when controller is ready. (read only)
|
||||
DEFSYM %AHCLR==1_14. ; Write 1 here to reset controller.
|
||||
;;; And a bunch of other stuff
|
||||
|
||||
|
||||
IFN $$TEMP,EXPUNG DEFSYM
|
||||
|
||||
|
||||
8214
src/system/ts3tty.400
Executable file
8214
src/system/ts3tty.400
Executable file
File diff suppressed because it is too large
Load Diff
400
src/system/ttytyp.314
Executable file
400
src/system/ttytyp.314
Executable file
@@ -0,0 +1,400 @@
|
||||
|
||||
;THE MASTER COPY OF THIS FILE IS KEPT ON AI:SYSTEM;TTYTYP >
|
||||
;DUPLICATES ARE KEPT ON OTHER ITS MACHINES BUT THEY SHOULD
|
||||
;NEVER BE EDITED. IF YOU'RE NOT TOTALLY SURE OF WHAT YOU'RE DOING
|
||||
;DON'T EDIT THIS FILE; ASK A HACKER FOR ASSISTANCE.
|
||||
|
||||
;HOW TO DESCRIBE EACH TTY. IT ASSUMES THE FOLLOWING:
|
||||
;EACH MACHINE MUST HAVE A BLOCK OF ENTRIES, WHICH STARTS WITH
|
||||
;THREE SEMICOLONS, A SPACE , AND THE NAME OF THE MACHINE.
|
||||
;THEN MUST COME EXACTLY ONE COMMENT PER TTY, STARTING WITH
|
||||
;"TNM ". THERE MAY BE OTHER COMMENTS NOT STARTING WITH A "TNM ".
|
||||
;THOSE OTHER COMMENTS WILL BE IGNORED BY "NAME".
|
||||
|
||||
;THIS FILE IS ARRANGED SO THAT IT CAN BE ASSEMBLED BY EITHER MIDAS OR PALX
|
||||
;THE FOLLOWING MACROS ARE USED IN THIS FILE
|
||||
;
|
||||
;SEPARATORS:
|
||||
; MCONDX CONDITIONAL FOR WHICH MACHINE
|
||||
; .ENDC TERMINATE ...
|
||||
;
|
||||
|
||||
;TERMINAL TYPES:
|
||||
;FIRST ARGUMENT TO TTDXXX MACRO IS THE LINE NUMBER
|
||||
;FOLLOWING THAT CAN BE SEVERAL OPTIONS, SELECTED BY THE FOLLOWING KEYWORD PARAMETERS:
|
||||
;TT LH(TTYTYP) ADDED TO SPEED CODE
|
||||
;TY RH(TTYTYP) ADDED TO CONTROLLER-SELECT BIT
|
||||
;TO LH(TTYOPT) ADDED TO DEFAULT BITS FOR DEVICE
|
||||
;TP RH(TTYOPT) ADDED TO PAD CODES, DEFAULT IS DEFAULT %TPORS AND %TPCBS
|
||||
;TCT TCTYP DEFAULT IS APPROPRIATE FOR TERMINAL BEING DEFINED
|
||||
;HOR SCREEN WIDTH DEFAULT ..
|
||||
;VER SCREEN HEIGHT DEFAULT ..
|
||||
;ROL LINES/GLITCH DEFAULT ..
|
||||
;SPEED OUTPUT SPEED IN BAUDS DEFAULT IS APPROPRIATE..
|
||||
;ISPEED INPUT SPEED IN BAUDS (IF DIFFERENT)
|
||||
;SOME TERMINAL TYPES DON'T ACCEPT SOME OF THESE OPTIONS WHICH WOULD BE MEANINGLESS.
|
||||
|
||||
.XCREF TT,TY,TO,TP,TCT,HOR,VER,ROL,SPEED,ISPEED ;FOOL @
|
||||
|
||||
; TTDPRT PRINTING TERMINAL (SPEED=110 => TTY35). DEFAULT SPEED IS 300.
|
||||
; TTDMRX MEMOREX 1240
|
||||
; TTDTRM TERMINET 1200
|
||||
; TTDLPT BRIGHT (OR ODEC OR GOULD) LINE PRINTER ON TTY LINE
|
||||
; TTDLA36 LA 36
|
||||
; TTDIML IMLAC
|
||||
; TTDVT VT-52
|
||||
; TTDH19 H19
|
||||
; TTDTEK TEKTRONIX
|
||||
; TTDLSR LOSING DATAPOINT
|
||||
; TTDDPT DATAPOINT
|
||||
; TTDGT40 GT-40
|
||||
; TTD11 PDP-11 (LOOKS LIKE PRINTING TERMINAL)
|
||||
; TTDRAN RANDOM TYPE, YOU BETTER SPECIFY EVERYTHING
|
||||
; TTDTV PDP-11 TV "LINE" VIA TEN-11 INTERFACE
|
||||
; TTDGRN PDP-11 TV (OR GRINNELL TV) ON NORMAL TTY LINE
|
||||
; TTD2741 N,CODE 2741 CODE=0 => EBCDIC, CODE=1 => CORRESPONDENCE
|
||||
; TTDSTY SOFTWARE PSEUDO-TTY
|
||||
; TTDC100 CONCEPT-100
|
||||
; TTDAAA Ann Arbor Ambassador
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX AIKA,{ ;;; AI-KA
|
||||
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 System Console (9th)
|
||||
TTDPRT 1,SPEED=150,TY=%TYDIL ;T01 Dialup 15CPS *
|
||||
; 8-7874 15CPS
|
||||
TTDPRT 2,SPEED=110,TY=%TYDIL ;T02 Dialup 10CPS *
|
||||
; 258-8794 10CPS
|
||||
TTDPRT 3,SPEED=110,TT=%TTLCL ;T03 XGP TTY (9TH)
|
||||
TTDPRT 4,SPEED=110,TT=%TTLCL+%TT340+%TT3HP ;T04 PDP6 TTY (9th)
|
||||
TTDPRT 5,SPEED=110,TT=%TTLCL ;T05 TTY Near LPT (9th)
|
||||
TTDPRT 6,SPEED=150,TY=%TYDIL ;T06 Dialup 15CPS *
|
||||
; 258-8795 15CPS
|
||||
TTDPRT 7,SPEED=110,TT=%TTLCL+%TT340 ;T07 Little Robot TTY (9th)
|
||||
TTDPRT 10,SPEED=134 ;T10 Baudot AP *
|
||||
;NEXT 3 USED TO BE 2741S, BUT WERE FLUSHED
|
||||
TTDPRT 11,SPEED=134 ;T11 TSTC (9th) *
|
||||
TTDPRT 12,SPEED=134 ;T12 2741 (9th) *
|
||||
TTDPRT 13,SPEED=134,TY=%TYDIL ;T13 2741 Dialup *
|
||||
TTDPRT 14 ;T14 Unused *
|
||||
TTDPRT 15,SPEED=300,TY=%TYDIL ;T15 Dialup 30CPS
|
||||
TTDPRT 16,SPEED=300,TY=%TYDIL ;T16 Dialup 30CPS
|
||||
TTDPRT 17,SPEED=300,TY=%TYDIL ;T17 Dialup 30CPS
|
||||
TTDPRT 20,SPEED=300,TY=%TYDIL ;T20 Dialup 30CPS
|
||||
TTDVT 21,SPEED=4800,TT=%TTLCL ;T21 814 x7881 Barton,Berwick,Brotsky,Sjoberg
|
||||
TTDTRM 22,TT=%TTLCL ;T22 Terminet in 813 (Hewitt)
|
||||
TTDVT 23,SPEED=4800,TT=%TTLCL ;T23 926 Under the Miro x6765
|
||||
TTDDPT 24,TT=%TTLCL+%TT340,HOR=71. ;T24 Datapoint Near XGP (9th)
|
||||
TTDAAA 25,TT=%TTLCL,SPEED=4800,TP=%TPMTA ;T25 810 Marty, Toto, Kansas x7836
|
||||
TTDDPT 26 ;T26 Datapoint in 822 (Stansfield)
|
||||
TTDAAA 27,TT=%TTLCL,SPEED=4800 ;T27 926 Under ee cummings x6765
|
||||
TTDTRM 30,ISPEED=150,TY=%TYDIL ;T30 Dialup 120/15 CPS
|
||||
; 258-6091 150 IN, 1200 OUT TERMINET
|
||||
TTDAAA 31,TT=%TTLCL,SPEED=4800,TP=%TPMTA ;T31 936 Lisp Machine Factory x6703
|
||||
TTDTRM 32,ISPEED=150,TY=%TYDIL ;T32 Dialup 120/15 CPS
|
||||
; 258-6090 150 IN, 1200 OUT TERMINET
|
||||
TTDAAA 33,SPEED=4800,TT=%TTLCL ;T33 336 Sobalvarro, Delatizky x5834
|
||||
TTDVT 34,SPEED=4800,TT=%TTLCL ;T34 908 Oro
|
||||
TTDDTM 35,SPEED=4800 ;T35 Poggio, Ullman x5781 (Bldg E10)
|
||||
TTDRAY 36,SPEED=4800,TP=%TPMTA,TT=%TTLCL ;T36 812 Attardi, Barber, Koton (x7891)
|
||||
TTDRAY 37,SPEED=4800,TP=%TPMTA,TT=%TTLCL ;T37 939 Kornfeld x5835
|
||||
TTDGT40 40,VER=29.,HOR=68.,TO=-%TOOVR ;T40 Micro-Automation PDP-11 (9th)
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX MLKA,{ ;;; ML-KA
|
||||
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 System Console
|
||||
TTDPRT 1,SPEED=1200,TY=%TYDIL ;T01 Dial-up 1.2KB Vadic
|
||||
;258-6756
|
||||
TTDPRT 2,SPEED=300,TY=%TYDIL ;T02 Dial-up line 30CPS
|
||||
;258-6742
|
||||
TTDPRT 3,SPEED=300,TY=%TYDIL ;T03 Dial-up line 30CPS
|
||||
;258-6743
|
||||
TTDPRT 4,SPEED=1200,TY=%TYDIL ;T04 Dial-up 1.2KB Vadic
|
||||
;258-7894
|
||||
TTDVT 5 ;T05 350 Waters x6037
|
||||
TTDDPT 6,TT=%TTLCL ;T06 9th flr near console
|
||||
TTDLA36 7 ;T07 800D DECwriter
|
||||
TTDVT 10 ;T10 3rd flr VT52 #833
|
||||
TTDPRT 11,SPEED=1200,TY=%TYDIL ;T11 Dial-up 1.2KB Vadic
|
||||
;258-6757
|
||||
TTDVT 12 ;T12 8th flr VT52
|
||||
TTDVT 13 ;T13 8th flr VT52 #433
|
||||
TTDVT 14 ;T14 8th flr VT52
|
||||
TTDVT 15 ;T15 8th flr VT52
|
||||
TTDVT 16 ;T16 3rd flr VT52 #517
|
||||
TTDVT 17 ;T17 3rd flr VT52 #256
|
||||
TTDVT 20 ;T20 3rd flr VT52 #342
|
||||
TTDVT 21 ;T21 3rd flr VT52 #1224
|
||||
TTDVT 22 ;T22 3rd flr VT52 #8462
|
||||
TTDVT 23 ;T23 3rd flr VT52 #8453
|
||||
TTDVT 24 ;T24 3rd flr VT52 #7559
|
||||
TTDVT 25 ;T25 3rd flr VT52 #8379
|
||||
TTDVT 26 ;T26 3rd flr VT52 #7320
|
||||
TTDVT 27 ;T27 3rd flr VT52 #8437
|
||||
TTDVT 30 ;T30 VT52 in Library
|
||||
TTDVT 31 ;T31 5th flr VT52
|
||||
;This is now plugged into the right-hand 4-prong in 512A. That is in
|
||||
;parallel with Ann Rubin (Liskov-Dennis's secretary), so she'd
|
||||
;need to be asked if someone wanted to do an - ahem - demo.
|
||||
TTDPRT 32,SPEED=1200,TY=%TYDIL ;T32 Dial-up 1.2KB Vadic
|
||||
;258-6733
|
||||
TTDC100 33 ;T33 317 Burke x3546
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX DM,{ ;;; DM
|
||||
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 930 x2910 CPU
|
||||
TTDLPT 1 ;T01 215 ODEC LPT
|
||||
TTDVT 2 ;T02 205 x1440 Lebling
|
||||
TTDVT 3 ;T03 219 x1450 Vezza
|
||||
TTDVT 4 ;T04 203 x1429 Sangal
|
||||
TTDVT 5 ;T05 214A x1410 Apollo Room
|
||||
TTDIML 6 ;T06 [not in use]
|
||||
TTDPRT 7 ;T07 214A x1410 APOLLO
|
||||
TTDVT 10 ;T10 204 x1418 Galley
|
||||
TTDVT 11 ;T11 801/A x6025/4 Faris/Meyer
|
||||
TTDVT 12 ;T12 218 x7706 Venckus
|
||||
TTDVT 13 ;T13 222 x5800 Niamir
|
||||
TTDPRT 14,SPEED=110,TT=%TTLCL ;T14 [not in use]
|
||||
TTDIML 15 ;T15 [not in use]
|
||||
TTDVT 16 ;T16 209 x1430 Ilson
|
||||
TTDIML 17 ;T17 [not in use]
|
||||
TTDVT 20 ;T20 218A x7705 Licklider
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX MX,{ ;;; MX
|
||||
TTDLA36 0,TT=%TTLCL,HOR=110. ;T00 System Console
|
||||
TTDPRT 1,SPEED=1200,TY=%TYDIL+%TYMDM ;T01 Vadic Dialup
|
||||
;253-6045
|
||||
TTDVT 2,SPEED=9600 ;T02 TRANTOR Math Dept 2-366 x3-6598
|
||||
TTDPRT 3,TY=%TYDIL+%TYMDM ;T03 Dialup
|
||||
TTDPRT 4,TY=%TYDIL+%TYMDM ;T04 Dialup
|
||||
;253-7985
|
||||
TTDPRT 5,TY=%TYDIL+%TYMDM ;T05 Dialup
|
||||
;253-7986
|
||||
TTDPRT 6,TY=%TYDIL+%TYMDM ;T06 Dialup
|
||||
;253-7987
|
||||
TTDPRT 7,TY=%TYDIL+%TYMDM ;T07 Dialup
|
||||
;253-7988
|
||||
TTDPRT 10,TY=%TYDIL+%TYMDM ;T10 Vadic Dialup
|
||||
;253-6985
|
||||
TTDPRT 11,TY=%TYDIL+%TYMDM ;T11 Vadic Dialup
|
||||
;253-6986
|
||||
TTDPRT 12,TY=%TYDIL+%TYMDM ;T12 Vadic Dialup
|
||||
;253-6987
|
||||
TTDPRT 13,TY=%TYDIL+%TYMDM ;T13 Vadic Dialup
|
||||
;253-6988
|
||||
TTDPRT 14,TY=%TYDIL+%TYMDM ;T14 Vadic Dialup
|
||||
;253-6989
|
||||
TTDPRT 15,TY=%TYDIL+%TYMDM ;T15 Vadic Dialup
|
||||
;253-6990
|
||||
TTDPRT 16,TY=%TYDIL+%TYMDM ;T16 Vadic Dialup
|
||||
;Draper Lab
|
||||
TTDPRT 17,TY=%TYDIL+%TYMDM ;T17 Vadic Dialup
|
||||
TTDDPT 20 ;T20 not connected
|
||||
TTDPRT 21,TY=%TYRLM,SPEED=9600 ;T21 ROLM Data Feature
|
||||
; #4997
|
||||
TTDPRT 22,TY=%TYRLM,SPEED=9600 ;T22 ROLM Data Feature
|
||||
; #4996
|
||||
TTDPRT 23,TY=%TYRLM,SPEED=9600 ;T23 ROLM Data Feature
|
||||
; #4601
|
||||
TTDPRT 24,TY=%TYRLM,SPEED=9600 ;T24 ROLM Data Feature
|
||||
; #4999
|
||||
TTDPRT 25,TY=%TYRLM,SPEED=9600 ;T25 ROLM Data Feature
|
||||
TTDPRT 26,TY=%TYRLM,SPEED=9600 ;T26 ROLM Data Feature
|
||||
; #4603
|
||||
TTDPRT 27,TY=%TYRLM,SPEED=9600 ;T27 ROLM Data Feature
|
||||
TTDPRT 30,TY=%TYRLM,SPEED=9600 ;T30 ROLM Data Feature
|
||||
TTDPRT 31,TY=%TYRLM,SPEED=9600 ;T31 ROLM Data Feature
|
||||
; #4991
|
||||
TTDPRT 32,TY=%TYRLM,SPEED=9600 ;T32 ROLM Data Feature
|
||||
; #4992
|
||||
TTDPRT 33,TY=%TYRLM,SPEED=9600 ;T33 ROLM Data Feature
|
||||
TTDPRT 34,TY=%TYRLM,SPEED=9600 ;T34 ROLM Data Feature
|
||||
TTDPRT 35,TY=%TYRLM,SPEED=9600 ;T35 ROLM Data Feature
|
||||
TTDPRT 36,TY=%TYRLM,SPEED=9600 ;T36 ROLM Data Frobozz
|
||||
; #4990
|
||||
TTDPRT 37,TY=%TYRLM,SPEED=9600 ;T37 ROLM Data Feature
|
||||
TTDPRT 40,TY=%TYRLM,SPEED=9600 ;T40 ROLM Data Feature
|
||||
TTDPRT 41,TY=%TYRLM,SPEED=300 ;T41 ROLM slow
|
||||
TTDPRT 42,TY=%TYRLM,SPEED=9600 ;T42 ROLM Data Feature
|
||||
TTDVT 43,TT=%TTLCL ;T43 9th Floor VT52
|
||||
TTDPRT 44,SPEED=110,TT=%TTLCL ;T44 DC76 TTY
|
||||
.ENDC ;}
|
||||
|
||||
REPEAT NSTTYS,[
|
||||
TTDSTY \NFSTTY+.RPCNT
|
||||
.ENDR ;]
|
||||
|
||||
REPEAT N11TYS,[
|
||||
TTDTV \NF11TY+.RPCNT
|
||||
.ENDR ;]
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX AI,{ ;;; AI
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDPRT 1,SPEED=1200 ;T01 Chronograph
|
||||
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||
TTDPRT 3,SPEED=2400,TY=%TYDIL ;T03 Dialup
|
||||
;258-7814
|
||||
TTDPRT 4,SPEED=2400,TY=%TYDIL ;T04 Dialup
|
||||
;258-7815
|
||||
TTDVT 5,SPEED=9600 ;T05 DZ Line 5 (VT52)
|
||||
TTDVT 6,SPEED=9600,TT=%TTLCL ;T06 9th Floor VT52 by AI x6765
|
||||
TTDVT 7,SPEED=9600 ;T07 DZ Line 7 (VT52)
|
||||
TTDAAA 10,SPEED=9600 ;T10 DZ Line 8 (AAA)
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX MC,{ ;;; MC
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDPRT 1,SPEED=2400,TY=%TYDIL ;T01 Dialup
|
||||
;258-7585
|
||||
TTDPRT 2,SPEED=2400,TY=%TYDIL ;T02 Dialup
|
||||
;258-7586
|
||||
TTDVT 3,SPEED=9600,TT=%TTLCL ;T03 9th Floor VT52 by MC x6765
|
||||
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||
TTDAAA 6,SPEED=9600 ;T06 DZ Line 6 (AAA)
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX ML,{ ;;; ML
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDPRT 1,SPEED=2400,TY=%TYDIL ;T01 Dialup
|
||||
;258-7832
|
||||
TTDPRT 2,SPEED=2400,TY=%TYDIL ;T02 Dialup
|
||||
;258-7833
|
||||
TTDVT 3,SPEED=9600,TT=%TTLCL ;T03 9th Floor VT52 by ML x6765
|
||||
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||
TTDAAA 6,SPEED=9600 ;T06 DZ Line 6 (AAA)
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX MD,{ ;;; MD
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDVT 1,SPEED=9600,TT=%TTLCL ;T01 9th Floor VT52 by MD x6765
|
||||
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
|
||||
TTDAAA 4,SPEED=9600 ;T04 DZ Line 4 (AAA)
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX SI,{ ;;; SI
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDPRT 1,SPEED=9600 ;T01 DZ Line 1
|
||||
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
|
||||
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
|
||||
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
|
||||
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
|
||||
TTDPRT 11,SPEED=9600 ;T11 DZ Line 11
|
||||
TTDPRT 12,SPEED=9600 ;T12 DZ Line 12
|
||||
TTDPRT 13,SPEED=9600 ;T13 DZ Line 13
|
||||
TTDPRT 14,SPEED=9600 ;T14 DZ Line 14
|
||||
TTDPRT 15,SPEED=9600 ;T15 DZ Line 15
|
||||
TTDPRT 16,SPEED=9600 ;T16 DZ Line 16
|
||||
TTDPRT 17,SPEED=9600 ;T17 DZ Line 17
|
||||
TTDPRT 20,SPEED=9600 ;T20 DZ Line 20
|
||||
TTDPRT 21,SPEED=9600 ;T21 DZ Line 21
|
||||
TTDPRT 22,SPEED=9600 ;T22 DZ Line 22
|
||||
TTDPRT 23,SPEED=9600 ;T23 DZ Line 23
|
||||
TTDPRT 24,SPEED=9600 ;T24 DZ Line 24
|
||||
TTDPRT 25,SPEED=9600 ;T25 DZ Line 25
|
||||
TTDPRT 26,SPEED=9600 ;T26 DZ Line 26
|
||||
TTDPRT 27,SPEED=9600 ;T27 DZ Line 27
|
||||
TTDPRT 30,SPEED=9600 ;T30 DZ Line 30
|
||||
TTDPRT 31,SPEED=9600 ;T31 DZ Line 31
|
||||
TTDPRT 32,SPEED=9600 ;T32 DZ Line 32
|
||||
TTDPRT 33,SPEED=9600 ;T33 DZ Line 33
|
||||
TTDPRT 34,SPEED=9600 ;T34 DZ Line 34
|
||||
TTDPRT 35,SPEED=9600 ;T35 DZ Line 35
|
||||
TTDPRT 36,SPEED=9600 ;T36 DZ Line 36
|
||||
TTDPRT 37,SPEED=9600 ;T37 DZ Line 37
|
||||
TTDPRT 40,SPEED=9600 ;T40 DZ Line 40
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX FU,{ ;;; FU
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDPRT 1,SPEED=9600 ;T01 DZ Line 1
|
||||
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
|
||||
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
|
||||
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
|
||||
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX PM,{ ;;; PM
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDPRT 1,SPEED=9600 ;T01 (9600 baud)
|
||||
TTDPRT 2,SPEED=9600 ;T02 (9600 baud)
|
||||
TTDPRT 3,SPEED=1200,TY=%TYDIL ;T03 Dialup (1200 baud)
|
||||
TTDPRT 4,SPEED=1200,TY=%TYDIL ;T04 Dialup (1200 baud)
|
||||
TTDPRT 5,SPEED=9600 ;T05 (9600 baud)
|
||||
|
||||
.ENDC ;}
|
||||
|
||||
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||
|
||||
MCONDX DX,{ ;;; DX
|
||||
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||
TTDPRT 1,SPEED=300 ;T01 DZ Line 1 (300 baud)
|
||||
TTDPRT 2,SPEED=1200 ;T02 DZ Line 2 (1200 baud)
|
||||
TTDPRT 3,SPEED=2400 ;T03 DZ Line 3 (2400 baud)
|
||||
TTDPRT 4,SPEED=4800 ;T04 DZ Line 4 (4800 baud)
|
||||
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
|
||||
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
|
||||
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
|
||||
|
||||
.ENDC ;}
|
||||
5995
src/system/tv.132
Executable file
5995
src/system/tv.132
Executable file
File diff suppressed because it is too large
Load Diff
2009
src/system/utape.952
Executable file
2009
src/system/utape.952
Executable file
File diff suppressed because it is too large
Load Diff
158
src/system/whovar.5
Executable file
158
src/system/whovar.5
Executable file
@@ -0,0 +1,158 @@
|
||||
;channel header pointer (location 40, read only)
|
||||
;
|
||||
; ADDRESS(channel header area)
|
||||
; ADDRESS(pointer area)
|
||||
; I/O version number
|
||||
; source file version number
|
||||
; 0 always 0
|
||||
; INITED non-zero indicates PDP-11 is running ok(can be cleared by PDP-10)
|
||||
; 0 always 0
|
||||
; GDOWN used as flag by PDP-10 to acknowledge clear of INITED
|
||||
;
|
||||
;channel header area (aligned on PDP-10 word)
|
||||
;
|
||||
; KBD channel:
|
||||
; KBDFLG cleared by 10/set by 11 (chain of activated KBD buffers)
|
||||
; 0 allows PDP-10 to do SKIPN for activation test
|
||||
; DPY channel: (1 per console)
|
||||
; DPYCHN buffer assigned to channel, if zero then DPY channel is closed
|
||||
; DPYKBD .BYTE KBD#, DPY# (377 for either implies not assigned)
|
||||
; KBD flags: (1 per console)
|
||||
; ECOFLG Set by PDP-10. Next time DPYBUF is empty clear ECOFLG
|
||||
; and put flag on KBD ring to signal this condition
|
||||
; CHNCLS if -1, log this guy out!!!!
|
||||
; WHO flags: (1 per console)
|
||||
; WHOLIN who line variables for this console
|
||||
; WHOUSR -1=>do system line, 0=>user who line
|
||||
;
|
||||
;format of KBD buffer (aligned on PDP-10 word)
|
||||
;
|
||||
; KBDSTS negative=>-(data byte count), 0=>free
|
||||
; 0
|
||||
; KBDRNG next KBD buffer associated with this KBD
|
||||
; KBDLST next buffer on activated list (0=>end of chain)
|
||||
; KBDCHN keyboard channel
|
||||
; 0 not used
|
||||
; KBDATA key board data area (1 PDP-11 word/character)
|
||||
;
|
||||
;format of DPY buffer (aligned on PDP-10 word)
|
||||
;
|
||||
; DPY10B word PDP-10 is hacking (used only for initailization)
|
||||
; DPY11B word PDP-11 is hacking
|
||||
; DPYPP page printer variables
|
||||
; DPYLGL last legal address in this buffer
|
||||
; DPYSIZ size of data area in bytes
|
||||
; 0 not used
|
||||
; DPYATA display data area (1 PDP-11 word/character)
|
||||
;
|
||||
;format of pointer area (aligned on PDP-10 word)
|
||||
;
|
||||
; ADDRESS(system who line variables)
|
||||
; ADDRESS(PDP-10/PDP-11 communication area)
|
||||
; TENWHO (SET TO -1 WHENEVER ANYONE TYPES WHO LINE COMMAND, RESET TO 0 WHEN 10
|
||||
; UPDATES WHO LINES
|
||||
; TENWH1 PADDING
|
||||
;
|
||||
;Notes:
|
||||
;
|
||||
;1. All addresses and pointers are in PDP-11 address space.
|
||||
;
|
||||
;2. KBD buffers are ringed two per channel. While the PDP-10 is
|
||||
; emptying one, the PDP-11 can fill the other.
|
||||
;
|
||||
;3. There is only one DPY buffer per channel. When the buffer is filled
|
||||
; with negative numbers, it is free. When the PDP-10 writes a positive
|
||||
; number in the current word: then the PDP-11 processes the data in that
|
||||
; word, sets that word to a negative number, and advances to the next word.
|
||||
;WHO LINE VARIABLES
|
||||
;
|
||||
;SYSTEM WHO LINE (one PDP-11 word/line unless otherwise indicated)
|
||||
; ITSTCH # total # 10/11 dpy channels (read only for PDP-10)
|
||||
; ITSCHN # 10/11 dpy channels in use (read only for PDP-10)
|
||||
; ITSVER ITS version #
|
||||
; ITSJOB total jobs
|
||||
; ITSCOR total core
|
||||
; ITSRU runnable users
|
||||
; ITSWBJ # jobs swap blocked
|
||||
; ITSJWP # jobs waiting for pages
|
||||
; ITSTRC total runable core
|
||||
; ITSCFU core available for users
|
||||
; ITSDAT date [byte (7) year (4) month (5) day]
|
||||
; ITSDBG system debug flag
|
||||
; ITSTIM time of day (# half seconds since midnight) aligned on PDP-10 word
|
||||
; ITSTI1 low order of time
|
||||
; ITSUSR total number of users
|
||||
;
|
||||
;USER WHO LINE (One PDP-11 word per line unless otherwise noted)
|
||||
WHJOB==0 ;job #, -1=>who line not in use
|
||||
; WHJOB1 ;pads WHJOB
|
||||
WHMODE==1 ;mode 0=>follow keyboard
|
||||
; 1=>freeze
|
||||
; 2=>next higher (when PDP-10 sees this state, it searches
|
||||
; user variables for next higher job index number with same
|
||||
; uname. When it finds it, it stores the number in job #
|
||||
; and changes mode to 1
|
||||
; 3=>next lower
|
||||
; WHMOD1 ;pads WHMODE
|
||||
WHUNAM==2 ;uname in sixbit (left 18 bits in first two words, right in next two)
|
||||
; WHUNM1
|
||||
WHUNM2==3
|
||||
; WHUNM3
|
||||
WHJNAM==4 ;jname in sixbit
|
||||
; WHJNM1
|
||||
WHJNM2==5
|
||||
; WHJNM3
|
||||
WHSNAM==6 ;sname in sixbit
|
||||
; WHSNM1
|
||||
WHSNM2==7
|
||||
; WHSNM3
|
||||
WHSTAT==10 ;status in sixbit, 0=>job does not exist
|
||||
; WHSTA1
|
||||
WHSTA2==11
|
||||
; WHSTA3
|
||||
WHJ%RT==12 ;job % run time
|
||||
; WHJTRT job total run time (one millisec units)
|
||||
; WHRPAG job number of pages real mem assigned
|
||||
; WHPAG job number of pages virtual mem assigned
|
||||
; WHO1 user who line control word
|
||||
; WHO1A
|
||||
; WHO2 first user who line variable
|
||||
; WHO2A
|
||||
; WHO2B
|
||||
; WHO2C
|
||||
; WHO3 second user who line variable
|
||||
; WHO3A
|
||||
; WHO3B
|
||||
; WHO3C
|
||||
;
|
||||
;
|
||||
;NOTE: The PDP-11 will not update who lines until it sees that ITSTIM
|
||||
; has changed.
|
||||
;
|
||||
;PDP-10/PDP-11 COMMAND CHANNEL
|
||||
;
|
||||
; CMDFLG aligned on PDP-10
|
||||
; 0=>buffer is free (PDP-10 can write CMDBUF)
|
||||
; positive=>command # from PDP-10 (PDP-11 can write CMDBUF)
|
||||
; negative=>affirmative reply from PDP-11 (0=>command failed)
|
||||
; PDP-10 can read CMDBUF, then must zero CMDFLG
|
||||
; CMDFL1 always 0
|
||||
; CMDBUF each arg takes 4 bytes (1 PDP-10 word)
|
||||
;
|
||||
; PDP-10/PDP-11 COMMANDS
|
||||
;
|
||||
; 1 video switch
|
||||
; arg1: video switch input # (set by PDP-10)
|
||||
; arg2: video switch output # ( " " " " )
|
||||
;
|
||||
; 2 reserve DPY
|
||||
; arg1: DPY reserved (set by PDP-11)
|
||||
;
|
||||
; 3 free DPY
|
||||
; arg1: DPY to free (set by PDP-10)
|
||||
;
|
||||
;;other 10-11 commuincation issues ..
|
||||
;
|
||||
;;go down resetting video switch vs not
|
||||
;;PDP-11 indicates it has reset video switch
|
||||
; ;(PDP-10 then detaches all jobs with tv ttys)
|
||||
Reference in New Issue
Block a user