DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦692f86b27⟧ TextFile

    Length: 13056 (0x3300)
    Types: TextFile
    Names: »MFSCTT«

Derivation

└─⟦5ca485322⟧ Bits:30005483 8" CR80 Floppy CR80FD_0201 ( Backup SL Disk-error 2u )
    └─⟦46ea90735⟧ 
        └─ ⟦this⟧ »JAS.MFSCTT« 

TextFile

LIST
;----------------------------------------------------------------------
;
;        FRAME SYNCHRONIZER TEST PROGRAM UNDER SYSTEM ONE
;
;----------------------------------------------------------------------
BEGIN USE BASE
MODULE 
NOLIST
$S8MXGL
$S8MNAX
LIST
PMASK=   TRUE
XPD:=    UTILITYLENGTH
NOLIST
$S8MXP1
LIST
OUTCHAR1=OUTCHAR
INCHAR1=INCHAR
BEGIN
EXTERNAL OUTCHAR1, INCHAR1, OUTNL, SETDELAY, WAITEVENT, SETINTERRUPT
EXTERNAL INITDEVICE, SENDANSWER, CURIN, CUROUT, INTERRUPT
EXTERNAL RESUMEEVENT, OUTEND, REGISTERS, DEVPR, OUTTEXTP
EXTERNAL DEVICE, LOCACTION, CAUSE, ENDPROGRAM, WAITINTERRUPT, WAIT

ENTRY FIRST
FRAMESYNC= TRUE                                              
BS1=   #1000

;DEVICE DEFINITIONS
OC=  1
IF FRAMESYNC
FSCDEV=   7
FI
BAS:= 8

MODE:   0
CURADR: 0
TOP:    0
STACK:  0
LOCA:   LOCAC
SAVE0:  0
IF FRAMESYNC
BUFFSC: 0
BFCFSC: 0
CONT1:  0
FI


USE PROG

IGETADR:    GETADR
IINCHAR:    INCHAR
IHEXOUT:    HEXOUT
ILOADREG:   LOADREG
IGETREG:    GETREG


;GETADR - GET ADDRESS
;        CALL          EXIT
;
;R0                    DESTROYED
;R1                    DESTROYED
;R2                    0
;R3                    ADDRESS
;R5      LINK          DESTROYED
;R6                    DESTROYED
;R7                    DESTROYED

GETADR:                             ; GETADR:
        MOV          R5  STACK      ;   LINK=>0.STACK;
        MOVC  0                 R3  ;   0=>VALUE;
G1:                                 ; G1:
        JMP          S6  INCHAR     ;   GET CHAR;
        JMP          S5  HEXIN1     ;   TEST IF HEX CHAR;
        JMP              G1         ;   NOT HEX, GOTO G1;
        MOV          R1         R3  ;
        MOVC  3                 R2  ;   3=>COUNT;
G0:                                 ; G0:
        JMP          S5  HEXIN      ;   GET HEX CHAR;
        JMPI             STACK      ;   RETURN(ERROR);
        SLL          R3  4          ;   VALUE*16=>VALUE;
        ADD          R1         R3  ;   CHAR+VALUE=>VALUE;
        SOB          R2  G0         ;   IF DECR(COUNT)<> 0 THEN
                                    ;      GOTO G0 ;
        MOV   STACK             R5  ;   0.STACK=>LINK;
        JMP              1.     X5  ;   RETURN;


;HEXIN
;        CALL          EXIT
;
;R0                    DESTROYED
;R1                    HEX CHAR
;R5      LINK          LINK
;R6                    DESTROYED
;R7                    DESTROYED

HEXIN:                              ; HEXIN:
        JMP          S6  INCHAR     ;   GET CHAR;
HEXIN1:                             ; HEXIN1:
        IGE          R1  <:A:>      ;   IF CHAR < <A>
        JMP              HEXIN2     ;     AND
        IGE          R1  <:::>      ;     CHAR >= <:> THEN    
        JMP              0.     X5  ;   RETURN(ERROR);
HEXIN2:                             ;
        ADDC -<:A:>+10          R1  ;   CHAR-<:A:>+10 => CHAR;
        ILT          R1  10         ;   IF CHAR<10 THEN
        ADDC  <:A:>-10-<:0:>    R1  ;      CHAR+<:A:>-10-<:0:> =>CHAR;
        SGEP         R1  16         ;   IF CHAR<16 OR
        SLT          R1  0          ;                >=0 THEN
        JMP              1.     X5  ;   RETURN ELSE
        JMP              0.     X5  ;   RETURN(ERROR);


;HEXOUT
;       CALL         EXIT
;R1                  DESTROYED
;R2                  DESTROYED
;R4     BIN VALUE    DESTROYED
;R5     LINK         LINK
;R6                  DESTROYED
;R7                  DESTROYED

HEXOUT:                             ; HEXOUT:
        MOVC  8#40              R1  ;   ASCII(SP) => CHAR;
        JMP          S6  OUTCHAR    ;   OUTPUT CHAR;
        MOVC  4                 R2  ;   4 => COUNT;
H2:     SLC          R4  4          ; H2:
        MOV          R4         R1  ;
        XTR          R1 4           ;   HEX(3:4) => VALUE;
        ILT          R1  10         ;   IF VALUE < 10 THEN
        ADDC <:0:>-<:A:>+10     R1  ;      VALUE+<:0:>-<:A:>+10 =>VALUE
        ADDC       <:A:>-10     R1  ;   VALUE+<:A:>-10 => CHAR;
        JMP          S6  OUTCHAR    ;   OUTPUT CHAR;
        SOB          R2  H2         ;   IF DECR(COUNT)<>0 THEN
                                    ;      GOTO H2;
        JMP              0.     X5  ;   RETURN;


;NEXTLIN
;       CALL         EXIT
;
;R0                  DESTROYED
;R1                  DESTROYED
;R2                  DESTROYED
;R5     LINK         LINK
;R6                  DESTROYED
;R7                  DESTROYED

NEXTLIN:                            ; NEXTLIN:
        XCH          R6         R4  ;
        XCH          R1         R3  ;
        MOV   CUROUT-C          R4  ;
        MON   OUTNL                 ;
        XCH          R6         R4  ;
        XCH          R1         R3  ;
        JMP              0.     X5  ;


;SPACE  OUTPUT A SPACE;
;       CALL         EXIT
;
;R0                  DESTROYED
;R1                  DESTROYED
;R6     LINK         DESTROYED
;R7                  DESTROYED

SPACE:                              ; SPACE:
        MOVC  <: :>             R1  ;
        JMP              OUTCHAR    ;   OUTPUT(<SP>);


INCHAR:                             ; INCHAR:
        XCH          R4         R0  ;
        XCH          R1         R3  ;
        MOV   CURIN-C           R4  ;
        MON   INCHAR1               ;
        XCH          R1         R3  ;
        XCH          R0         R4  ;
        JMP              0.     X6  ;

OUTCHAR:                            ; OUTCHAR:
        XCH          R4         R0  ;
        XCH          R1         R3  ;
        MOV   CUROUT-C          R4  ;
        MON   OUTCHAR1              ;
        XCH          R1         R3  ;
        XCH          R0         R4  ;
        JMP              0.     X6  ;
                                    ;
;GETREG
;       CALL        EXIT
;R0                 DESTROYED
;R1                 DESTROYED
;R3                 VALUE
;R4     REG. NO.    REG. NO
;R6     LINK        LINK

GETREG:                             ; GETREG:
        MOV          R4         R0  ;   REG. NO. => RGN;
        SLL          R0  6          ;   RGN*64 => RGN;
        ADD   DEVICE-C          R0  ;   RGN+DEVICE => RGN;
        MOV   MODE              R1  ;   0.MODE => M;
        IBNP         R1  1          ;   IF M(1:1) = 1 THEN
        SIO          R3         R0  ;    SENSE (VALUE,RGN)
        JMP              GETREG1    ;   ELSE
        RIO          R3         R0  ;    READ (VALUE,RGN);
GETREG1:IBN          R1  0          ;   IF M(0:1) = 1 THEN
        INV                     R3  ;    INVERT (VALUE);
        JMP              0.     X6  ;   RETURN;
                                    ;
;LOADREG
;       CALL        EXIT
;R0                 DESTROYED
;R1                 DESTROYED
;R3     VALUE       VALUE
;R4     REG. NO     REG. NO
;R6     LINK        LINK

LOADREG:                            ; LOADREG:
        MOV          R4         R0  ;   REG. NO => RGN;
        SLL          R0  6          ;   RGN*64 => RGN;
        ADD   DEVICE-C          R0  ;   RGN+0.DEVICE => RGN;
        MOV   MODE              R1  ;   0.MODE => M;
        IBN          R1  0          ;   IF M(0:1) = 1 THEN
        INV                     R3  ;    INVERT (VALUE);
        IBNP         R1  1          ;   IF M(1:1) = 1 THEN
        CIO          R3         R0  ;    CONTROL(VALUE,RGN)
        JMP              LOADR1     ;   ELSE
        WIO          R3         R0  ;    WRITE(VALUE,RGN);
LOADR1: IBN          R1  0          ;   IF M(1:0) = 1 THEN
        INV                     R3  ;    INVERT(VALUE);
        JMP              0.     X6  ;   RETURN;
                                    ;
                                    ;
                                    ;
FIRST:                              ; INIT INTERRUPTS:
        MOV   LOCACN-C          R0  ;
        MOV   LOCA              R1  ;
        MOV          R1  LOCACN-C   ;
        MOV          R0  LOCA       ;
F1:                                 ; DEVICE NO:
        JMP          S6  INCHAR     ;   INCHAR;
        INE          R1  10         ;   IF CHAR <> NL THEN
        JMP              F1         ;      GOTO DEVICE NO;
        JMP          S5  NEXTLIN    ;   NEWLINE;
        JMP          S6  F1TEXT     ;
        <:ENTER DEVICE NO:<0>:>
F1TEXT: MOV   CUROUT-C          R4  ;
        MON   OUTTEXTP              ;   WRITE (<:ENTER DEVICE NO::>);
        MOVC  <: :>             R3  ;
        MON   OUTEND                ;   WRITE (<: :>);
        JMP          S5  GETADR     ;   GET ADDRESS;
        JMP              F1         ;  ERROR: GOTO DEVICE NO;
        IGE          R3  64         ;   IF DEVICE NO > 63 THEN
        JMP              F1         ;     GOTO DEVICE NO;
        MOV          R3  DEVICE-C   ;   ADDRESS => 0.DEVICE;
        SLL          R3  2          ;
        MOV          R3         R0  ;
        MOV          R0  DEVPR-C    ;
        MON   INITDEVICE            ;

START:                              ; START:
        JMP          S5  NEXTLIN    ;   NEW LINE;
        MOVC  <:>:>             R3  ;
        MOV   CUROUT-C          R4  ;
        MON   OUTEND                ;
STR1:                               ; STR1:
        JMP          S6  INCHAR     ;   GET COMMAND;
                                    ;
IF FRAMESYNC
        IEQ          R1  <:O:>      ;   O - SEND DATA
        JMP              SENDDATA   ;
FI
        IEQ          R1  <:X:>      ;   X - EXIT
        MON   ENDPROGRAM            ;
        IEQ          R1  <:D:>      ;   D - MEMDUMP;
        JMP              MEMDUMP    ;
        IEQ          R1  <:C:>      ;   C - CONTINUE MEMDUMP;
        JMP              CMEMDUMP   ;
        IEQ          R1  <:P:>      ;   P - LOAD DATA;
        JMP              LOADDATA   ;
        IEQ          R1  <:Q:>      ;   Q - INSERT SAVE-LOAD PATCH;
        JMP              PATCH      ;
IF FRAMESYNC
        IEQ          R1  <:A:>      ;   A - DEFINE DATA
        JMP              FSCDATADF  ;
        IEQ          R1  <:G:>      ;   G - DUMP REGISTER IN FSC
        JMP              FSCREGDMP  ;
        IEQ          R1  <:L:>      ;   L - LOAD REGISTER IN FSC
        JMP              FSCREGLOD  ;
        IEQ          R1  <:W:>      ;   W - WAIT INTERRUPT
        JMP              WAITFSTT   ;
        IEQ          R1  <:E:>      ;   E - REPETITIVE LOAD
        JMP              CONTLOAD   ;
        IEQ          R1  <:F:>      ;   F - REPETITIVE SENSE
        JMP              CONTDUMP   ;
        IEQ          R1  <:T:>      ;   T - MEASURE INTERRUPT TIME
        JMP              INTTIME    ;
        IEQ          R1  <:I:>      ;   I - INVERTED DEVICE COMM.
        JMP              INVERT     ;
        IEQ          R1  <:N:>      ;   N - NONINVERTED DEVICE COMM.
        JMP              NONINVERT  ;
        IEQ          R1  <:R:>      ;   R - READ-WRITE DEVICE COMM.
        JMP              READWRITE  ;
        IEQ          R1  <:S:>      ;   S - SENSE-CONTROL DEVICE COMM.
        JMP              SENSECNTRL ;
FI
                                    ;
        IEQ          R1  <: :>      ;   IF CHAR = <SP> THEN
        JMP              STR1       ;      GOTO STR1;
        IEQ          R1  10         ;   IF CHAR = NL THEN
        JMP              STR1       ;      GOTO STR1;

ERROR:                              ; ERROR:
        MOVC  <:?:>             R1  ;
        JMP          S6  OUTCHAR    ;   OUTPUT ?;
        JMP              START      ;   GOTO START;
                                    ;
                                    ;
IF FRAMESYNC
                                    ;
                                    ;
SENDDATA:                           ; SEND DATA-AREA TO FSC:
        MOV   BUFFSC            R2  ;
        MOV   BFCFSC            R3  ;   GET AREASIZE ;
        MOVC  7<6               R0  ;
        ADD   DEVICE-C          R0  ;
        IEQ          R2  0          ;   IF STARTADR = 0 THEN
        JMP              ERROR      ;   GOTO ERR;
                                    ;
SENDD0:                             ;   ADDRESS := STARTADDRESS ;
        MOV          X2         R1  ;   FOR I := 1 UNTIL AREASIZE DO
        INV                     R1  ;
        SWP                     R1  ;   BEGIN
        CIO          R1         R0  ;     WRITE (FSC,HIGHBYTE(ADR)) ;
        SWP                     R1  ;
        CIO          R1         R0  ;     WRITE (FSC,LOWBYTE(ADR)) ;
        ADDC  1                 R2  ;     INCR (ADR) ;
        SOB          R3  SENDD0     ;   END ;
                                    ;
        JMP              START      ;
FI
                                    ;
LOADDATA:                           ; LOADDATA:
        JMP          S5  GETADR     ;   GETADDRESS;
        JMP              ERROR      ;   IF ERROR THEN GOTO ERROR;
        SUB   BAS               R3  ;
LD0:                                ; LD0:
        JMP          S6  INCHAR     ;   GET CHARACTER;
        IEQP         R1  <:L:>      ;   L - DECR(RE.ADDRESS);
        ADDC -1                 R3  ;
        JMP              LD0        ;   GOTO LD0;
        IEQ          R1  <:S:>      ;   S - STOP INPUT;
        JMP              START      ;   GOTO START;
        JMP          S5  HEXIN1     ;   CONVET TO HEX;
        JMP              LD0        ;   NO HEX CHAR: GOTO LD0;
        MOV          R1         R2  ;
        MOVC  3                 R4  ;   3 => COUNT;
LD1:                                ; LD1:
        JMP          S5  HEXIN      ;   GET HEX CHAR;
        JMP              ERROR      ;   IF ERROR THEN GOTO ERROR;
        SLL          R2  4          ;   HEX*16 => HEX;
        ADD          R1         R2  ;   CHAR+HEX => HEX;
        SOB          R4  LD1        ;   IF DECR(COUNT) <> 0 THEN
                                    ;   GOTO LD1;
        MOV          R2  0.     X3  ;   SAVE WORD;
        ADDC  1                 R3  ;   INCR(RE.ADDRESS);
        JMP              LD0        ;   GOTO NEW DATA(LD0);
                                    ;
                                    ;
MEMDUMP:                            ; MEMDUMP:
        JMP          S5  GETADR     ;   GET START ADDRESS;
        JMP              ERROR      ;   IF ERROR THEN GOTO ERROR;
        MOV          R3  CURADR     ;
        MOVC  #FFFF             R3  ;
        MOV          R3  TOP        ;   ADDRESS => 0.TOP;
                                    ;
CMEMDUMP:                           ; CONTINUE MEMDUMP:
        JMP          S5  NEXTLIN    ;   NEW LINE;
        MOV   CURADR            R4  ;   0.0.CURADR => RE.ADR;
        JMP          S5  HEXOUT     ;   OUTPUT RE.WORD;
        MOVC  <:L:>             R1  ;
        JMP          S6  OUTCHAR    ;
L1:                                 ; NEXT:
        MOV   CURADR            R3  ;   0.CURADR => RE.WORD;
        MOV   TOP               R4  ;   0.TOP => TOPADDRESS;
        ILO          R4         R3  ;   IF TOPADDRESS <CURADR THEN
        JMP              START      ;      GOTO START;
        MOVC  0                 R0  ;
        MON   SETDELAY              ;
        MON   WAITEVENT             ;
        JMP              ON         ;
        JMP              MDANSW     ;
        MON   SENDANSWER            ;
        JMP              START      ;
MDANSW:                             ;
        MON   RESUMEEVENT           ;
        JMP              START      ;
ON:                                 ;
        MOV          R3         R4  ;
        MODN  BAS                   ;
        MOV   0.     X4         R4  ;   0.CURADR => WORD;
        JMP          S5  HEXOUT     ;   OUTPUT WORD;
        ADDC  1                 R3  ;   INCR(RE.WORD);
        MOV          R3  CURADR     ;   RE.WORD => 0.CURADR;
        XTR          R3  3          ;   IF RE.WORD(2:3)<>0
        INE          R3  0          ;      THEN
        JMP              L1         ;      GOTO NEXT;
        JMP              CMEMDUMP   ;   GOTO CONTINUE MEMDUMP;
                                    ;
PATCH:                              ; PATCH:
        JMPI         S5  IGETADR    ;   GET ADDRESS;
        JMP              ERROR      ;   IF ERROR THEN GOTO ERROR;
        SUB   BAS               R3  ;
        MOVC  #20BE             R0  ;   SVP
        MOV          R0  0.     X3  ;
        MOV   BAS               R0  ;
        SWP                     R0  ;
        XTR          R0  8          ;
        SWP                     R0  ;
        ADDC  #56               R0  ;
        MOV          R0  1.     X3  ;
        MOVC  #0048             R0  ;
        MOV          R0  2.     X3  ;
        MOVC  #40BC             R0  ;   LDN  R0
        MOV          R0  3.     X3  ;
        JMP              START      ;   GOTO START;
IF FRAMESYNC
                                    ;
                                    ;
FSCREGLOAD:                         ; LOAD REGISTER IN FSC:
        JMPI         S5  IGETADR    ;   GET REGISTERNUMBER;
        JMP              FSCRED     ;
        MOV          R3         R4  ;   REG := REGNUMBER;
        JMP          S6  INCHAR     ;   IF NEXTCHAR <> <SP>
        INE          R1  <: :>      ;   THEN
        JMP              ERROR      ;   GOTO ERROR ;
        JMPI         S5  IGETADR    ;   GET REGISTERCONTENT ;
        JMP              ERROR      ;   IF ERROR THEN GOTO ERROR ;
        JMP          S6  LOADREG    ;   LOADREGISTER;
        JMP              START      ;   GOTO START ;
                                    ;
                                    ;
FSCREGDUMP:                         ; DUMP REGISTER IN FSC:
        JMPI         S5  IGETADR    ;   GET REGISTER NUMBER ;
        JMP              FSCREGDMP  ;
        MOV          R3         R4  ;   REGISTERNUMBER => REGN;
        JMP          S6  GETREG     ;   GETREGISTER;
        JMP          S6  SPACE      ;   WRITE(<SP>) ;
        MOV          R3         R4  ;   VALUE => BINVALUE;
        JMPI         S5  IHEXOUT    ;   WRITE (CONTENT) ;
        JMP              START      ;
                                    ;
                                    ;
FSCDATADEF:                         ; DEFINE DATA TO FSC:
        JMPI         S5  IGETADR    ;   GET STARTADR ;
        JMP              ERROR      ;   IF ERROR THEN GOTO ERROR;
        JMPI         S6  IINCHAR    ;   CHECK
        INE          R1  <: :>      ;   SPACE
        JMP              ERROR      ;   SEPARATOR ;
        MOV          R3         R4  ;   SAVEST := STARTADR ;
        JMPI         S5  IGETADR    ;   GET AREASIZE ;
        JMP              ERROR      ;   IF ERROR THEN GOTO ERROR ;
        IEQ          R3  0          ;   IF AREASIZE = 0 THEN
        JMP              ERROR      ;   GOTO ERROR;
        SUB   BAS               R4  ;   ADJUST STARTADR TO RELATIVE;
        MOV          R4  BUFFSC     ;   SAVE (STARTADR) ;
        MOV          R3  BFCFSC     ;   SAVE (AREASIZE) ;
        JMP              START      ;
                                    ;
                                    ;
                                    ;
WAITFT:                             ; WAITINTERRUPT:
        MOV   INTERRUPT-C       R1  ;
        MOVC  0                 R0  ;   0 => DELAY;
        MON   WAITINTERRUPT         ;   WAITINTERRUPT;
        JMP              TIME       ;  TIMEOUT: GOTO NOINT;
        JMP          S6  WAITTX     ;  INTERRUPT: CONTINUE;
        <:DEVICE <0>:>              ;
        <: PRIORITY <0>:>           ;
WAITTX: MOV   CUROUT-C          R4  ;
        MON   OUTTEXTP              ;   WRITE (<:DEVICE :>);
        MOV   DEVICE-C          R4  ;
        MOV          R6         R3  ;
        JMPI         S5  IHEXOUT    ;   WRITE ( DEVICE );
        MOV          R3         R6  ;
        MOV   CUROUT-C          R4  ;
        MON   OUTTEXTP              ;   WRITE (<: PRIORITY :>);
        MOV   DEVPR-C           R3  ;
        XTR          R3  2          ;
        ADDC  <:0:>             R3  ;
        MON   OUTCHAR1              ;   WRITE ( PRIORITY );
        MON   OUTNL                 ;   WRITE ( <10> );
        MON   WAIT                  ;   WAIT (SHARE);
        JMP              WAITFT     ;   GOTO WAITINTERRUPT;
                                    ;
TIME:                               ; NOINT:
        MOVC  0                 R0  ;
        MON   SETDELAY              ;   0 => DELAY;
        MON   WAITEVENT             ;   WAITEVENT;
        JMP              WAITFT     ;  TIMEOUT: GOTO WAITINTERRUPT;
        JMP              MDANSW     ;  ANSWER: RESUME AND GOTO START;
WAIMES: MON   SENDANSWER            ;  MESSAGE: ANSWER AND GOTO START;
        JMP              START      ;
                                    ;
                                    ;
                                    ;
CONTLOAD:                           ; REPETITIVE LOAD:
        JMPI         S5  IGETADR    ;   GET REG NUMBER;
        JMP              CONTLOAD   ;
        MOV          R3         R4  ;   REG := REGNUMBER;
        JMPI         S6  IINCHAR    ;   CHECK
        INE          R1  <: :>      ;   SPACE
        JMP              ERROR      ;   SEPARATOR;
        JMPI         S5  IGETADR    ;   GET REG CONT1;
        JMP              ERROR      ;
        MOV          R3  CONT1      ;   SAVECONT1 := REG CONT1;
        JMPI         S6  IINCHAR    ;   CHECK
        INE          R1  <: :>      ;   SPACE
        JMP              ERROR      ;   SEPARATOR;
        JMPI         S5  IGETADR    ;
        JMP              ERROR      ;
        MOVC  #FFFF             R5  ;
        MOV          R3         R2  ;   SAVE REG CONT2;
CLLOOP:                             ; LOADAGAIN:
        MOV   CONT1             R3  ;   REG CONT1 => VALUE;
        JMPI         S6  ILOADREG   ;   LOADREGISTER;
        MOV          R2         R3  ;   REG CONT2 => VALUE;
        JMPI         S6  ILOADREG   ;   LOADREGISTER;
        SOB          R5  CLLOOP     ;
        MOVC  0                 R0  ;
        MON   SETDELAY              ;
        MON   WAITEVENT             ;
        JMP              TIMEOUT    ;
        JMP              MDANSW     ;
        MON   SENDANSWER            ;
        JMP              START      ;
TIMEOUT:                            ;
        MOVC  #FFFF             R5  ;
        JMP              CLLOOP     ;
                                    ;
                                    ;
                                    ;
CONTDUMP:                           ; REPETITIVE SENSE:
        JMPI         S5  IGETADR    ;   GET REG NUMBER;
        JMP              CONTDUMP   ;
        MOV          R3         R4  ;   REG NUMBER => REGN;
        MOVC  #FFFF             R5  ;
CDLOOP:                             ; DUMPAGAIN:
        JMPI         S6  IGETREG    ;   GETREGISTER;
        SOB          R5  CDLOOP     ;
        MOVC  0                 R0  ;
        MON   SETDELAY              ;
        MON   WAITEVENT             ;
        JMP              CDTIMEOUT  ;
        JMP              MDANSW     ;
        MON   SENDANSWER            ;
        JMP              START      ;
CDTIMEOUT:                          ;
        MOVC  #FFFF             R5  ;
        JMP              CDLOOP     ;
                                    ;
                                    ;
                                    ;
                                    ;
INTTIME:                            ; MEASURE INTERRUPT TIME:
        JMPI         S5  IGETADR    ;   GET NO OF INTERRUPTS;
        JMP              ERROR      ;
WINT:                               ; NEW INTERRUPT:
        MOVC  255               R0  ;   2.55 SEC => DELAY;
        MOV   INTERRUPT-C       R1  ;
        MON   WAITINTERRUPT         ;   WAITINTERRUPT;
        JMP              INTSLOW    ;  TIMEOUT: GOTO SLOW;
        SOB          R3  WINT       ;  INTERRUPT: IF DECR(COUNT)>0 THEN
                                    ;               GOTO NEW INTERRUPT
        JMP              START      ;   ELSE GOTO START;
INTSLOW:                            ; SLOW:
        JMP          S6  INTTXT     ;
        <:TOO SLOW INTERRUPT RATE<0>:>
INTTXT: MOV   CUROUT-C          R4  ;
        MON   OUTTEXTP              ;
        JMP              START      ;
                                    ;
                                    ;
                                    ;
INVERT:                             ; SET INVERTED DEVICE COMM.:
        MOVC  MODE              R0  ;   MODE => ADR;
        MOVC  #FFFF             R1  ;   #FFFF => BITS;
        MODC  #0001                 ;   #0001 => MASK;
        PUT          R1         X0  ;   PUT BITS MASKED INTO 0.ADR;
        JMP              START      ;   GOTO START;
                                    ;
                                    ;
NONINVERT:                          ; SET NONINVERTED DEVICE COMM.:
        MOVC  MODE              R0  ;   MODE => ADR;
        MOVC  0                 R1  ;   0 => BITS;
        MODC  #0001                 ;   #0001 => MASK;
        PUT          R1         X0  ;   PUT BITS MASKED INTO 0.ADR;
        JMP              START      ;   GOTO START
                                    ;
                                    ;
READWRITE:                          ; SET READWRITE DEVICE COMM.:
        MOVC  MODE              R0  ;   MODE => ADR;
        MOVC  0                 R1  ;   0 => BITS;
        MODC  #0002                 ;   #0002 => MASK;
        PUT          R1         X0  ;   PUT BITS MASKED INTO 0.ADR;
        JMP              START      ;   GOTO START;
                                    ;
                                    ;
SENSECONTROL:                       ; SET SENSECONTROL DEVICE COMM.:
        MOVC  MODE              R0  ;   MODE => ADR;
        MOVC  #FFFF             R1  ;   #FFFF => BITS;
        MODC  #0002                 ;   #0002 => MASK;
        PUT          R1         X0  ;   PUT BITS MASKED INTO 0.ADR;
        JMP              START      ;   GOTO START;
FI

LOCAC:                              ;
        MOV          R0  SAVE0      ;
        MOV   CAUSE-C           R0  ;
        IEQP         R0  0          ;
        MOV   SAVE0             R0  ;
        JMPI             LOCA       ;
        JMP          S6  LOCTXT     ;
        <:<10>CAUSE:<0>:>
LOCTXT:                             ;
        MOV   CUROUT-C          R4  ;
        MON   OUTTEXTP              ;
        MOV          R0         R4  ;
        JMPI         S5  IHEXOUT    ;
        MOVC  0                 R0  ;
        LDS          R0             ;
        MOV   SAVE0             R0  ;
        JMP              START      ;
        NOP                         ;

USE BASE
END
XPRPC= FIRST
XREFS=2
XBUFS=2
NOLIST
$S8MXP2
LIST
END    



«eof»