First, remember:

                           COMMENT @

                 EHPL MI RTPADE NIISED A DP1P1

                        END OF COMMENT @


Besides setting the correct bit(s), you need to tell simh to generate the interrupt (to the proper vector). Assuming you're doing that, from the KDP's point of view you first need to set rdyo or rdyi, indicate the interrupt directions with iot, the command type, line number...

Here are the KDP bit definitions from TOPS-10 , and the most interesting interrupt service code. It's pretty readable; it uses fewer macros than the TOPS-20 driver. The constants are all octal, based as offsets from the CSR base. If you need the other routines, see http://pdp-10.trailing-edge.com/tops10_704_monitoranf_bb-x140c-sb/01/10,7/mon/d8kint.mac.html

The KDPAIV and KDPBIV routines are the two generic KDP interrupt service routines; each KDP has small prefix routines that dispatch to them after saving/setting up the registers.

The instructions RDIO and WRIO read/write Unibus space. The register address is the second argument, the contents are loaded to / stored from the first argument. If you scan the full source for them, you can see how each register is used.

If you need more help, you'll need to provide more details of what is - and isn't - happening.

        SUBTTL  DEFINITIONS -- DUP11

        DUPADR==3760300         ;ADDRESS OF 1ST DUP11
        DUPUBN==3               ;UNIBUS ADAPTER NUMBER FOR DUP11

        DPRCSR==0               ;RECEIVER CSR
          DPDTR==000002         ;DATA TERMINAL READY
        DPRDBF==2               ;(RO)RECEIVER DATA BUFFER
        DPPCSR==2               ;(WO)PARAMETER CONTROL AND STATUS REGISTER
        DPTCSR==4               ;TRANSMIT CONTROL AND STATUS REGISTER
          DPCBLP==010000        ;EXTERNAL MAINTENCE MODE (CABLE LOOPBACK)
          DPCNLP==004000        ;SYSTEMS TEST MODE (CONTROLLER LOOPBACK)
          DPMAIN==014000        ;MAINTAINENCE MODE BITS
        DPTDBF==6               ;TRANSMIT DATA BUFFER
        SUBTTL  DEFINITIONS -- KMC11

SEL0==0
BSEL1==1
        KMCRUN==100000          ;RUN FLOP
        KMCMCL==040000          ;MASTER CLEAR
        KMCCWR==020000          ;CRAM WRITE
        KMCSLU==010000          ;STEP LINE UNIT
        KMCLUL==004000          ;LINE UNIT LOOP
        KMCRMO==002000          ;ROM OUTPUT
        KMCRMI==001000          ;ROM INPUT
        KMCSUP==000400          ;STEP u-PROCESSOR
        KMCRQI==000200          ;REQUEST INPUT
        KMCIEO==000020          ;INTERRUPT ENABLE OUTPUT
        KMCIEI==000001          ;INTERRUPT ENABLE INPUT
SEL2==2
BSEL3==3                        ;CONTAINS LINE NUMBER
        KMCOVR==100000          ;KMC BUFFER OVER-RUN
        KMCRDO==000200          ;READY FOR OUTPUT
        KMCRDI==000020          ;READY FOR INPUT
        KMCIOT==000004          ;SET FOR RECEIVE CLEARED FOR TRANSMIT
        KMCTYP==000003          ;COMMAND TYPE
          BASEIN==000003        ;BASE IN
          CNTLIN==000001        ;CONTROL IN
          BFADIN==000000        ;BUFFER ADDRESS IN
          CNTLOU==000001        ;CONTROL OUT
          BFADOU==000000        ;BUFFER ADDRESS OUT
SEL4==4
BSEL5==5
                                ;BUFFER DESCRIPTOR LIST ADDRESS
                                ; (BUFFER ADR IN & OUT & CONTROL OUT)
SEL6==6
BSEL7==7
                                ;140000 ;ADR BITS 17 & 16
                                ; (BUFFER ADR IN & OUT & CONTROL OUT)
        BFREOM==010000          ;END OF MESSAGE (BUFFER ADR OUT)
        BFRENB==020000          ;BUFFER ENABLE (BUFFER ADR IN)
        BFRKIL==010000          ;BUFFER KILL (BUFFER ADR IN)
        CSRMSK==017770          ;MASK FOR DUP11 CSR ADR (BASE IN)
        CDDCMP==100000          ;FLAG THIS A DDCMP LINE (CONTROL IN)
        CHALFD==020000          ;FLAG THIS IS HALF DUPLEX (CONTROL IN)
                                ;010000 ;ENABLE SECONDARY STATION (CONTROL IN)
                                ;001000 ;CRC INHIBIT (CONTROL IN)
        CENABL==000400          ;FLAG TO ENABLE LINE (CONTROL IN)
        COUERR==000377          ;ERROR CODE (CONTROL OUT)

CRAMSZ==2000                    ;SIZE OF KMC11 CRAM
DRAMSZ==2000                    ;SIZE OF KMC11 DRAM
;BUFFER DESCRIPTOR LISTS ARE STRINGS OF 3 16 BIT WORDS
; 1ST WORD 16 BITS OF BUFFER ADDRESS
; 2ND WORD 16 BIT BYTE COUNT
; 3RD WORD
        BDLLDS==100000          ;LAST DESCRIPTOR
        BDLRSY==010000          ;RESYNC TRANSMITTER
        BDLXAD==006000          ;BUFFER ADDRESS  BITS 17 & 16
        BDLEOM==001000          ;END OF MESSAGE
        BDLSOM==000400          ;START OF MESSAGE


;MESSAGES TO THE KMC11
; BASEIN:       BSEL2/  <LINE #>*400+3
;               BSEL6/  <DUP11 ADR>&017770
; CONTROL IN:   BSEL2/  <LINE #>*400+1
;               BSEL6/  FLAGS
; BF AD IN:     BSEL2/  <LINE NU>*400+0+<4 IF INPUT>
;               BSEL4/  BUFFER DESCRIPTOR LIST ADR
;               BSEL6/  FLAGS
; BF AD OUT:    BSEL2/  <LINE NU>*400+0+<4 IF RECEIVE>
;               BSEL4/  BUFFER DESCRIPTOR LIST ADR
;               BSEL6/  FLAGS
; CONTROL OUT:  BSEL2/  <LINE NU>*400+1+<4 IF RECEIVE>
;               BSEL4/  BUFFER DESCRIPTOR LIST ADR
;               BSEL6/  ERROR CODE


;CONTROL OUT BIT MASK DEFINITIONS.  THE ROUTINE "CTOTLY" TAKES A
;  CONTROL OUT CODE, TALLYS THE CONTROL OUT IN THE KDL BLOCK, AND
;  PRODUCES A BIT VECTOR OF ONE BIT REPRESENTING THE CODE.  THIS
;  BIT VECTOR REPRESENTATION IS USED TO FACILITATE PARALLEL TESTING
;  FOR VARIOUS CONDITIONS.  BIT DEFINITIONS ARE:

        CTLO06==040000          ;ABORT.  SHOULD NEVER HAPPEN
        CTLO10==020000          ;HEADER CRC ERROR.
        CTLO12==010000          ;DATA CRC ERROR.
        CTLO14==004000          ;NO RECEIVE BUFFER ASSIGNED
        CTLO16==002000          ;DATA SET READY TRANSITION
        CTLO20==001000          ;KMC-11 GOT A NXM ON A UNIBUS ADDRESS
        CTLO22==000400          ;TRANSMIT UNDERRUN.
        CTLO24==000200          ;RECEIVE OVERRUN
        CTLO26==000100          ;BUFFER KILL COMPLETE

        SUBTTL  INTERRUPTS -- INTERRUPT LEVEL INTERFACE TO THE KMC-11

                           Comment @

Each KMC-11 has two interrupt vector addresses.

    "A"       This interrupt is taken when RDYI (KMCRDI) comes up.  In this
        state the KMC-11 is ready for an input transaction.  All
        input transactions for the KMC-11 are queued in the KDP block.
        This is necessary because the following situation would otherwise
        cause a deadlock.
           1)   The KMC-11 sets RDYO and gives a BUFFER-OUT transaction.
           2)   At interrupt level, we want to do a BUFFER-IN.
           3)   If, in the meantime, the KMC-11 has set RDYO again,
                we will not be able to get RDYI until we process another
                output transaction.
        The solution to this is to queue all input transactions.  This does
        mean that we have to take an interrupt on each transaction, but it
        does circumvent the above problem.

    "B"       This interrupt is taken when RDYO (KMCRDO) comes up.  In this
        state the KMC-11 is wants to perform an output transaction.
        It is these output transactions that drive almost all of the
        interrupt level KMC/DUP processing.

    The vector instructions are set up to be JSR's to the locations "KDPAIV",
and "KDPBIV" in the KDP block for the KMC-11.  These locations contain the
5 or 6 instructions necessary to save the AC's, load "W" with the address
of the particular KDP block, and dispatch to either of the two interrupt
routines "KDPAIV" or "KDPBIV".

                         End comment @
        SUBTTL  KDPAIV -- KMC-11 INTERRUPT VECTOR "A" PROCESSING.

;KDPAIV -- ROUTINE TO HANDLE KMC-11 INTERRUPT VECTOR "A" (INPUT)
;CALL   MOVE    W,[EXP KDP-BLOCK-ADDRESS]
;       PUSHJ   P,KDPAIV        ;CALLED FROM KDPIVA IN THE KDP BLOCK
;RETURN POPJ    P,              ;TO DISMISS THE INTERRUPT.
;
;CLOBBERS MOST AC'S (WE SHOULD HAVE OUR OWN AC BLOCK ANYWAY)
;
;ON MULTI-PROCESSOR SYSTEMS, THIS CODE WILL NEED TO AOSE THE KDP INTERLOCK
;
KDPAIV::AOS     KDPACT(W)       ;COUNT THE INTERRUPT
        MOVE    T1,KDPSTS(W)    ;GET THE STATUS
        TLNN    T1,(KDPSRU)     ;  AND MAKE SURE WE THINK WE'RE ON LINE
        PJSP    T1,KDPERR       ;  IF WE DON'T, CLEAR "RUN" SO INTS WILL STOP

        MOVE    U,KDPCSR(W)     ;GET THE UNIBUS ADDRESS OF THE KMC-11
        MOVEI   T1,KMCRDI       ;GET THE "RDYI" FLAG
        TION    T1,SEL2(U)      ;MAKE SURE "RDYI" IS UP
        PJSP    T1,KDPERR       ;  IF IT'S NOT, THEN ITS AN ILLEGAL INTERRUPT
        MOVE    T3,KDPIQT(W)    ;GET NUMBER OF NEXT QUEUED TRANSACTION
        CAMN    T3,KDPIQP(W)    ;MAKE SURE THAT IT'S DIFFERENT NOT THE "PUTTER"
        PJSP    T1,KDPERR       ;  IF IT IS, THEN WE'RE GETTINT UNSOLICITED
                                ;  INTERRUPTS.  DECLARE KDP ILL.
        LSH     T3,1            ;MAKE IT AN OFFSET INTO THE QUEUE
        ADDI    T3,KDPINQ(W)    ;RELOCATE BY THE ADDRESS OF THE QUEUE
        MOVE    T1,0(T3)        ;GET SEL2 DATA
        MOVE    T2,1(T3)        ;GET SEL4, SEL6 DATA
        AOS     T3,KDPIQT(W)    ;ADVANCE QUEUE TAKER
        CAIL    T3,KDPQLN       ;IF ITS TIME TO WRAP AROUND, THEN
        SETZB   T3,KDPIQT(W)    ;  WRAP AROUND TO THE FIRST ENTRY
        MOVEI   T4,KMCRQI       ;GET THE REQUEST INPUT INTERRUPT BIT
        CAMN    T3,KDPIQP(W)    ;IF QUEUE EMPTY (PUTTER = TAKER) THEN
        BCIO    T4,SEL0(U)      ;  CLEAR RQI TO STOP THE INTERRUPTS

        WRIO    T2,SEL6(U)      ;STORE TOP WORD
        MOVSS   T2,T2           ;GET SEL4 DATA
        WRIO    T2,SEL4(U)      ;  AND STORE THAT
        TRZ     T1,KMCRDI       ;MAKE SURE RDYI CLEAR (SO KMC CAN RUN)
        WRIO    T1,SEL2(U)      ;GIVE REST OF DATA TO KMC
        POPJ    P,              ;ALL DONE
;KDPBIV -- ROUTINE TO HANDLE KMC-11 INTERRUPT VECTOR "B" (OUTPUT)
;CALL   MOVE    W,[EXP KDP-BLOCK-ADDRESS]
;       PUSHJ   P,KDPBIV        ;CALLED FROM KDPIVB IN THE KDP BLOCK
;RETURN POPJ    P,              ;TO DISMISS THE INTERRUPT
;
;CLOBBERS MOST AC'S (WE SHOULD HAVE OUR OWN AC BLOCK ANYWAYS)
;
;ON MULTI-PROCESSOR SYSTEMS THIS CODE WILL NEED TO AOSE THE KDP INTERLOCK.
;
KDPBIV::AOS     KDPBCT(W)       ;COUNT THE INTERRUPT
        MOVE    T1,KDPSTS(W)    ;GET OUR PERCEIVED STATUS
        TLNN    T1,(KDPSRU)     ;  AND MAKE SURE WE THINK WE'RE RUNNING
        PJSP    T1,KDPERR       ;  IF WE'RE NOT, CLEAR RUN AND RETURN

        MOVE    U,KDPCSR(W)     ;GET THE UNIBUS ADDRESS OF THE KMC
        RDIO    P1,SEL2(U)      ;READ STATUS BITS
        TRNN    P1,KMCRDO       ;BETTER WANT AN OUTPUT TRANSACTION
        PJSP    T1,KDPERR       ;ILLEGAL INTERRUPT. CRASH KMC
        RDIO    P2,SEL4(U)      ;READ BDL ADDRESS
        RDIO    P3,SEL6(U)      ;READ ERROR, STATUS OR WHAT EVER

        MOVEI   T1,KMCRDO       ;GET THE RDYO BIT
        BCIO    T1,SEL2(U)      ;CLEAR IT TO LET THE KMC CONTINUE
        TRNE    P1,2!KMCOVR     ;MAKE SURE TYPE IS RIGHT, AND NO OVERRUN
        PJSP    T1,KDPERR       ;  WE'RE CONFUSED. GIVE UP.

        LDB     F,[POINT 7,P1,27] ;GET 7 BIT LINE #.
        CAML    F,KDPDPN(W)     ;IS THIS A LEGAL LINE FOR THIS KDP
        PJSP    T1,KDPERR       ;  IF NOT, BETTER STOP NOW...
        ADDI    F,KDPKDL(W)     ;MAKE IT AN OFFSET INTO THE KDP BLOCK
        HRRZ    F,(F)           ;LOAD APPRIOATE KDL BLOCK ADDRESS

        SETZ    T1,             ;GET A ZERO REGISTER
        TRNE    P1,KMCIOT       ;IF INPUT, THEN
        TRO     T1,1            ;  SET LOW ORDER BIT
        TRNE    P1,1            ;IF CONTROL, THEN
        TRO     T1,2            ;  SET NEXT TO LOW ORDER BIT
        JRST    @[JRST KDPBOO   ;BUFFER OUT (OUTPUT)
                  JRST KDPBOI   ;BUFFER OUT (INPUT)
                  JRST KDPCOO   ;CONTROL OUT (OUTPUT)
                  JRST KDPCOI](T1);CONTROL OUT (INPUT)
                                ;ROUTINE DISPATCHED TO WILL RETURN.
        SUBTTL  KDPBOO -- KMC-11 BUFFER-OUT(OUTPUT) TRANSACTION PROCESSING.

;    This routine frees output buffers when a BUFFER-OUT(OUTPUT) transaction
;declares that the KMC/DUP has output all data in the buffer. It:
;          1)   Makes sure that this is the last buffer in the current
;               Buffer Description List.  (Data messages consist of two
;               buffers.  The DDCMP header buffer, and the data buffer.
;               These two buffers are combined in a single BDL)  If
;               the current buffer is not the last in the list, nothing
;               more is done, and the interrupt is exited.  (We will
;               get another interrupt when the next buffer in the BDL
;               finishes.)
;          2)   The count of buffers outstanding is decremented, and a
;               check is made to ensure that this buffer is really the
;               next one we expected to finish.
;          3)   XMTBUF is called in an attempt to fill the just freed output
;               buffer.
;
;called with:
;       F, W        := KDL and KDP pointers
;       P1, P2, P3  := SEL2, SEL4 and SEL6 of the KMC-11
;
KDPBOO: PUSHJ   P,GETBDL        ;GET T4 SET UP TO POINT TO BDL
        TLNE    T4,1            ;MAKE SURE THAT BUFFER-OUT STARTS ON EVEN BYTE
        PJSP    T1,KDPERR       ;  IF ODD BYTE, THEN KMC-11 SCREWED US
        MOVE    T1,1(T4)        ;GET WORD WITH LAST BD HALFWORD
        TLNN    T4,2            ;IF WE WANT FIRST HALFWORD,
        MOVS    T1,T1           ;  THEN SWAP IT TO THE LOW HALF
        TRNN    T1,BDLLDS       ;IS THIS THE LAST BUFFER IN THE BDL
        POPJ    P,              ;IF NOT, IGNORE THIS INTERRUPT.

;WE ARE AT END OF MESSAGE.  MAKE SURE WE GOT THE RIGHT ONE BACK

        MOVEI   S,KDSNXB        ;STATUS BIT THAT SAYS WHICH BUFFER IS NEXT OUT
        MOVEI   T1,KDLXD1(F)    ;ASSUME THAT BUFFER #1 IS FIRST BACK
        TDNE    S,KDLSTS(F)     ;  BUT IF IT SHOULD BE BUFFER #2, THEN
        MOVEI   T1,KDLXD2(F)    ;  THEN CHANGE OUR MIND.

        MOVSI   T2,(1B0)        ;GET THE BDL IN-USE MARK BIT
        TDNN    T2,0(T1)        ;  AND MAKE SURE THAT IT'S SET
;[DBUG] PJSP    T1,KDLERR       ;IF NOT, TRY TO CRASH THE LINE
        PUSHJ   P,NTDSTP##      ;WE'VE SCREWED UP THE BUFFERS [DBUG]
        ANDCAM  T2,0(T1)        ;CLEAR THE USE BIT

        HLRZ    T3,1(T1)        ;GET THE HALFWORD CONTAINING THE 3RD WORD
                                ;  OF THE FIRST BD IN THE BDL
        TRNN    T3,BDLLDS       ;IF IT'S NOT THE LAST BD, THEN
        ADD     T1,[XWD 2,1]    ;  ADVANCE THE CBP IN T1 3 WORDS (6 BYTES)
        CAMN    T1,T4           ;MAKE SURE IT'S THE BDL ADDRESS THE KMC GAVE US
        SOSGE   KDLXBC(F)       ;DECREMENT THE NUMBER OF ACTIVE OUTPUT BUFFERS
        PJSP    T1,KDPERR       ;++ EITHER BAD BUFFER, OF COUNT WENT NEGATIVE.
        XORB    S,KDLSTS(F)     ;SIGNAL THAT OTHER BUFFER IS NEXT BUFFER OUT

        PJRST   XMTBUF          ;NOW GO TRY TO FILL THE JUST FREED BUFFER
        SUBTTL  KDPBOI -- ROUTINE TO HANDLE BUFFER-OUT(INPUT) TRANSACTIONS.

;    This routine handles BUFFER-OUT(INPUT) transactions.  These
;transactions consist of input messages coming in over the synchronous
;line.  This routine:
;          1)   Frees the receive buffer. (No worry about races, this
;               code runs under the KMC interlock on multiprocessor
;               systems.  On a single processor system, it runs at
;               interrupt level.  Hence no one will try to allocate
;               the buffer between when it is freed and when it is
;               processed
;          2)   Calls RCVMSG to process the incoming message
;
;called with:
;       F, W        := KDL and KDP pointers
;       P1, P2, P3  := SEL2, SEL4 and SEL6 of the KMC-11
;
KDPBOI: PUSHJ   P,FREBOI        ;FREE THE INPUT BUFFER, (SET UP T4)
          PJSP  T1,KDPERR       ;?? KMC-11 GAVE BAD BDL ADDRESS ??
        PJRST   RCVMSG          ;GO PROCESS MESSAGE (T4 POINTS TO BDL)
        SUBTTL  KDPCOO -- PROCESS A CONTROL-OUT(OUTPUT) TRANSACTION

;    This routine processes CONTROL-OUT(OUTPUT) transactions.  These
;consist primarily of various errors detected by the KMC-11.  This routine:
;          1)   Counts the control out transaction code (CTOTLY)
;          2)   Verifys that the error is legal/recoverable.  If not,
;               it crashes the KMC-11.
;          3)   If the control out frees an output BDL, it assumes that
;               an output message has been clobbered, queues a REP message
;               to speed a recovery NAK, and calls "KDPBOO" to free the BDL.
;
;called with:
;       F, W        := KDL and KDP pointers
;       P1, P2, P3  := SEL2, SEL4 and SEL6 of the KMC-11
;
KDPCOO: PUSHJ   P,SAVE1##       ;WE USE P1 FOR A "BIT MASK"
        PUSHJ   P,CTOTLY        ;TALLY THE CONTROL OUT CODE AND
                                ;  PUT "BIT MASK" IN P1
          PJSP  T1,KDPERR       ;IF ILLEGAL CODE, KMC-11 IS SICK...

        TLNE    P1,^-<CTLO14!CTLO16!CTLO22!CTLO26> ;THESE ARE LEGAL OUTPUT
          PJSP  T1,KDPERR       ;  IF IT'S NOT ONE OF THEM, CRASH KMC-11

        TLNE    P1,CTLO14       ;IS THIS A BUFFER TEMP UNAVAILABLE?
        JRST    [MOVEI T1,RSNBTU ;IF SO, GET THAT NAK CODE
                 PJRST RCVXNK]  ;SEND THE NAK AND RETURN

        TLNE    P1,CTLO26       ;IF THIS A "FLUSH DONE" TRANSACTION
        JRST    KDPFLO          ;  IF FLUSH DONE, GO UPDATE KDLSTS
        TLNN    P1,CTLO22       ;DOES THIS TRANSACTION FREE A BDL?
        POPJ    P,              ;  IF NOT, RETURN (DON'T CALL XMTBUF...)

        MOVSI   T1,(KDSREP)     ;ASSUME MESSAGE WAS CLOBBERED, SO
        IORM    T1,KDLSTS(F)    ;  SO REQUEST A REP TO SPEED RECOVERY

        PJRST   KDPBOO          ;PROCESS REST JUST LIKE ANY OTHER BUFFER-OUT
        SUBTTL  KDPCOI -- PROCESS CONTROL-OUT(INPUT) TRANSACTIONS

;    This routine processes the CONTROL-OUT(INPUT) transactions.  These
;transactions are primarily errors noticed by the KMC-11.  In particular,
;BCC (checksum) errors are processed here.  This routine:
;          1)   Tallys the CONTROL-OUT transaction
;          2)   Sees if it is a legal/recoverable error.  If not, it
;               crashes the KMC-11
;          3)   If the transaction frees an input buffer, that is done.
;          4)   If the transaction implies that a message was lost,
;               an approiate NAK is queued.
;
;called with:
;       F, W        := KDL and KDP pointers
;       P1, P2, P3  := SEL2, SEL4 and SEL6 of the KMC-11
;
KDPCOI: PUSHJ   P,SAVE1##       ;P1 WILL HAVE THE "BIT MASK" IN IT.
        PUSHJ   P,CTOTLY        ;TALLY THE CONTROL OUT TYPE
                                ;  RETURNS "BIT MASK" IN P1
          PJSP  T1,KDPERR       ;UNKNOWN CODE. KMC-11 IS SICK...
        TLNE    P1,^-<CTLO10!CTLO12!CTLO24!CTLO26> ;IS THIS LEGAL FOR INPUT
        PJSP    T1,KDLERR       ;UN-RECOVERABLE ERROR.  BETTER START OVER

        TLNE    P1,CTLO26       ;IS THIS AN "INPUT FLUSH" DONE TRANSACTION
        JRST    KDPFLI          ;  IF INPUT FLUSH, GO UPDATE KDLSTS
        TLNE    P1,<CTLO10!CTLO12!CTLO24> ;DOES THIS FREE A BDL?
        PUSHJ   P,[PUSHJ P,FREBOI ;FREE THE INPUT BDL
                     PJSP T1,KDLERR ;BAD ADDRESS RETURNED BY KMC-11. DIE
                   POPJ P,]     ;RETURN TO MAIN FLOW

        TLNN    P1,<CTLO10!CTLO12!CTLO24> ;DOES THIS REQUIRE A NAK?
        PJRST   RCVBUF          ;IF NO NAK REQUIRED, WE ARE DONE
                                ;  ATTEMPT TO REQUEUE A BUFFER AND RETURN
        MOVEI   T1,RSNHCK       ;ASSUME THAT ERROR WAS HEADER CHECKSUM
        TLNE    P1,CTLO12       ;  BUT IF IT WAS A DATA CHECKSUM
        MOVEI   T1,RSNDCK       ;  THEN CHANGE OUR MINDS AND USE THAT
        TLNE    P1,CTLO24       ;  UNLESS IT WAS AN OVER-RUN, IN WHICH
        MOVEI   T1,RSNOVR       ;  CASE WE SHOULD USE THIS.
        PJRST   RCVXNK          ;QUEUE NAK AND REQUEUE BUFFERS IF POSSIBLE
;KDPFLO ROUTINE TO CLEAN UP WHEN OUTPUT BUFFER FLUSH IS COMPLETED.
;  CLEAR "XMIT FLUSH IN PROGRESS" AND SAY NO OUTPUT BUFFERS QUEUED.

KDPFLO: LDB     T1,KDLSTA##     ;GET THE LINE'S STATE (JUST TO MAKE SURE)
        MOVEI   T2,KDSXFL       ;GET THE "XMIT FLUSH" IN PROGRESS BIT
        CAIN    T1,KD%FLS       ;IF WE'RE NOT IN "BUFFER FLUSH STATE", OR
        TDNN    T2,KDLSTS(F)    ;  WE'RE NOT FLUSHING XMIT BUFFERS
        PJSP    T1,KDPERR       ;  THEN ASSUME THE KMC-11 SCREWED UP

        SETZM   KDLXBC(F)       ;SAY "NO OUTPUT BUFFERS ACTIVE"
        MOVEI   T1,KDSNXB!KDSXFL;  ALSO SAY THAT NEXT BUFFER IS #0, AND
        ANDCAB  T1,KDLSTS(F)    ;  WE'RE NOT FLUSHING ANY MORE
        JRST    KDPFLX          ;SEE IF WE CAN LEAVE "FLUSH" STATE


;KDPFLI ROUTINE TO CLEAN UP WHEN INPUT BUFFER FLUSH IS COMPLETE

KDPFLI: LDB     T1,KDLSTA##     ;GET LINE'S STATE
        MOVEI   T2,KDSRFL       ;"RECEIVE FLUSH IN PROGRESS" BIT
        CAIN    T1,KD%FLS       ;MAKE SURE WE'RE FLUSHING
        TDNN    T2,KDLSTS(F)    ;MAKE SURE IT'S INPUT
        PJSP    T1,KDPERR       ;IF NOT INPUT FLUSH, THEN KMC GAVE BAD CODE

        SETZM   KDLRBC(F)       ;ZERO COUNT OF RECEIVE BUFFERS POSTED
        MOVEI   T1,KDSNRB!KDSRFL;SAY BUFFER #0 NEXT, AND
        ANDCAB  T1,KDLSTS(F)    ;  INPUT FLUSH COMPLETE

KDPFLX: MOVEI   T2,KD%INI       ;ASSUME THAT WE HAVE CLEARED BOTH FLUSH BITS
        TRNN    T1,KDSRFL!KDSXFL;  AND IF WE HAVE,
        DPB     T2,KDLSTA##     ;  THEN WE'RE IN "INITED" STATE
        POPJ    P,              ;DONE WITH THE INTERRUPT

This communication may not represent my employer's views,
if any, on the matters discussed.

On 19-May-13 04:53, Robert Jarratt wrote:
-----Original Message-----
From: [email protected] [mailto:simh-bounces@trailing-
edge.com] On Behalf Of Rich Alderson
Sent: 08 May 2013 01:02
To: [email protected]; [email protected]
Subject: Re: [Simh] TOPS-20 Source with KMC11 Driver Code?

From: "Robert Jarratt" <[email protected]>
Date: Tue, 7 May 2013 23:33:36 +0100
Can anyone point me at the right place to look at TOPS-20 driver code
for the KMC11? I can see that it is trying to get the Microprocessor
to do something and read back some values, but I don't know what
values it wants to get and so it reports:
Hi, Rob,

http://pdp-10.trailing-edge.com/tops20v41_monitor_sources/index.html

You want the file KDPSRV.MAC in that directory.

                                                                 Rich
_______________________________________________
Simh mailing list
[email protected]
http://mailman.trailing-edge.com/mailman/listinfo/simh

I am making some progress with getting the KMC/DUP emulation working in SIMH
for TOPS-20. At the moment I am stuck on one thing, which is the interrupts
to tell the OS that the KMC has processed a buffer. The OS sets the
interrupt enable bit and when I have something to report to the OS I set the
relevant interrupt bit. However, nothing happens when I do that. I am
wondering if I have the right interrupt bit? I am using bits 8 and 9
(decimal).

I am not sure how to find out which bit I should be setting.

Can anyone help?

Regards

Rob

_______________________________________________
Simh mailing list
[email protected]
http://mailman.trailing-edge.com/mailman/listinfo/simh


Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

_______________________________________________
Simh mailing list
[email protected]
http://mailman.trailing-edge.com/mailman/listinfo/simh

Reply via email to