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

⟦90c6fa4b5⟧ TextFile

    Length: 14336 (0x3800)
    Types: TextFile
    Names: »MTDP«

Derivation

└─⟦d2d5bd9ca⟧ Bits:30005482 8" CR80 Floppy CR80FD_0155 ( Lynetten billeder )
    └─⟦ad0a5cc43⟧ 
        └─ ⟦this⟧ »SL.MTDP« 

TextFile

LIST
; DISK TO DISPLAY DATA TRANSFER PROGRAM.
; 
; THE PROGRAM IS INTENDED TO BE USED IN CONNECTION TO
; THE CR80 COLOUR DISPLAY SYSTEM.
; THE PROGRAM READS DATA FROM  FLOPPY DISK FILES  AND
; OUTPUTS THE DATA TO A AV24 I/F. WHEN OUTPUT OF DATA
; FROM ONE FILE IS FINISHED, THE PROGRAM WILL WAIT 10
; SEC. BEFORE IT CONTINUES OUTPUTTING THE NEXT FILE.
; WHEN ALL FILES HAVE BEEN OUTPUTTED,  THE PROGRAM
; WILL START OUTPUTTING THE FIRST FILE AGAIN.
;
; IF THE PROGRAM RECEIVES A X-OFF CHAR. FROM THE
; INTERFACE, IT WILL STOP OUTPUT. IT WILL NOT
; CONTINUE UNTIL A X-ON CHAR. IS RECEIVED.
;
; WHEN THE PROGRAM IS LOADED, THE DISK FILES TO
; BE OUTPUT MUST BE SPECIFIED IN THE INPUT SHARE.
;
; SYNTAX:   DISPLAY <FILENAME> <FILENAME> ... <FILENAME>
;

BEGIN    MODULE                     ;
NOLIST
         ; AU000404 0 0000  LEVEL 1  NAMES:
  C=       #000D
  INPARM=  #0068
  ENDPRM=  #0041
  INWORD=  #007C
  INCOMD=  #0086
  GIVEUE=  #0018
  OUTNL=   #005D
  PROGLH=  #000E
  BMBYTE=  #0004
  OUTHEA=  #0064
  CONTLH=  #0005
  WAITAR=  #000D
  BMINPT=  #0001
  BMWORD=  #0000
  BMTIMR=  #0002
  GETINT=  #0004
  REGISS=  #0013
  CLOSE=   #0054
  SETDEY=  #0077
  WAITET=  #000F
  BACKSE=  #0063
  WAITIT=  #0005
  WAITDY=  #0019
  OUTCHR=  #005F
  IDLENH=  #0004
  INCHAR=  #0061
  OPEN=    #0053
  REGREE=  #0010
  NAMELH=  #0003
  INIT=    #0052
  SETINT=  #0078
  INCOMD=  #0086
  WAIT=    #0059
  INITDE=  #0042
  BMOUTT=  #0003
  BMEOF=   #0040
  CLEART=  #0000
  SENDME=  #000B
  SENDAR=  #000C
  RESUMT=  #0011
  BMREET=  #0001
  BMDISP=  #0001
  OUTTEP=  #005A
USE BASE
  STACKH:= #0005
  PROCLH:= #0052
  NEXT:=   #0002
  SACTIN:= #0008
  WORK:=   #0040
  NL:=     #000A
  WORKAA:= #0295
  BFIRST:= #0006
  CAUSE:=  #001E
  NAME:=   #0007
  WRK:=    #004D
  UTILIH:= #02A1
  WORKIG:= #005E
  CURSLH:= #00B2
  CURIN:=  #005A
  DEVPR:=  #001F
  ENTRYA:= #0275
  BUFFEH:= #0008
  CURSIN:= #005F
  CENTRY:= #005D
  INTERT:= #0054
  WORKLH:= #000C
  CATALH:= #0058
  REFLEH:= #0004
  LOCACN:= #001C
  ENTRYH:= #0020
  BNEXT:=  #0007
  STREAT:= #000A
  PROC:=   #000D
  MCOUNT:= #0001
  SMASK:=  #0007
  BUFLEH:= #0009
  CBASE:=  #0015
  KINDOC:= #0100
  SHAREH:= #0022
  INTRPT:= #0034
  DRIVEH:= #0055
  MADDRS:= #0002
  SEOFAN:= #0009
  CURSWK:= #01C3
  CURSOT:= #0111
  CUROUT:= #005B
USE PROG
  LOCACT:= #822F
USE #0
         XPD:= UTILITYLENGTH
         IF XPD EQ UTILITYLENGTH OR XPD EQ PROGLENGTH THEN
IF WORDS NE 0 THEN MESSAGE WORDS FI
AREASWITCH=1
USE PROG
LOC=PROG-1
        BMREENTRANT
        XREFS
        XBUFS
        XWORDS
        XPSIZE
        0,1,0,0,0,0
        XSIZE
        0
        XPRPC
IF LOC NE PROGLENGTH THEN MESSAGE <:ERROR: PROG LENGTH:> FI
FI

IF XPD GT PROGLENGTH THEN
USE BASE
LOC=BASE
        0,REPEAT 12
IF LOC NE PROC THEN MESSAGE <:ERROR: XPROC LOCATION:> FI
        0 REPEAT 7 ; REGISTERS
        0,0
        XPROGRAM
        XPRPC
        100
        0
        0
        LOCACT
        0
        0
        XDEVPR
        100
        0 REPEAT 12 ; TIME0 - FREEAREAS
       #FFFF
        0,0,0
        0 REPEAT 3 ; PRICHN - ADJUST
        XREFSX
        XBUFSX
IF XPD NE UTILITYLENGTH THEN
        XREFS=0
        XBUFS=1
FI
        0 REPEAT 20 ; RESTING - SAVE19
0,REPEAT CONTLENGTH-1
LOC=    LOC-C
IF LOC NE PROCLENGTH-C THEN MESSAGE <:ERROR: XPROC LENGTH:> FI

IF XPD GT PROCLENGTH THEN
        0,0,0
IF LOC NE DRIVERLENGTH-C THEN MESSAGE <:ERROR: XDRIVER LENGTH:> FI

IF XPD GT DRIVERLENGTH THEN
        0 REPEAT 2 ; ESPECIAL - CATALOG
IF LOC NE CATALOGLENGTH-C THEN MESSAGE <:ERROR: XCATALOG LENGTH:> FI

IF XPD GT CATALOGLENGTH THEN
        LOCACT
        LOCACT
        XCURIN
        XCUROUT
        XCURWORK
        XCENTRY
        XWORKING
FI FI FI FI

XLOC=   LOC

MESSAGE <:START OF USER MODULE:>
LIST                                ;
                                    ;
FILES:   0,REPEAT 20*5 -1           ;   ROOM FOR 20 FILENAMES;
COUNT:   0                          ;   NUMBER OF FILENAMES;
FADDR:   0                          ;   FILENAME POINTER;
OENTRY:  0,REPEAT ENTRYLENGTH-1     ;   ENTRY AREA;
OWORK:   0,REPEAT WORKLENGTH-1      ;   WORKING AREA;
DELAY:   0                          ;
LINK:    0                          ;
                                    ;
DISPIF=  4                          ;   DISPLAY INTERFACE MODULE ADDR;
XON=     #11                        ;
XOFF=    #13                        ;
BNINRDY= 10                         ;   INPUT READY BIT;
BNOUTRY= 11                         ;   OUTPUT READY BIT;

        USE   PROG                  ;
IDP2:   DP2                         ;
                                    ;
L0:                                 ; INIT:
        MOVC  FILES             R0  ;   FILES
        MOV          R0  FADDR      ;       =>FADDR;
        MOVC  0                 R0  ;   0
        MOV          R0  COUNT      ;       =>FILECOUNT;
        MOVC  OENTRY            R0  ;   ENTRYAREA
        MOV          R0  CENTRY-C   ;       =>ENTRY.CUR;
        MOVC  OWORK             R0  ;   WORKAREA
        MOV          R0  WORKING-C  ;       =>WORKING.CUR;
L1:                                 ; NEXT NAME:
        MOV   CURIN-C           R4  ;   CURIN.CUR=>SHARE;
        MON   INPARAM               ;   INPARAM(SHARE);
        JMP               L1        ;     ERROR: GOTO NEXT NAME;
        JMP               L2        ;     TERM:  GOTO LAST NAME;
        JMP               L1        ;     WORD:  GOTO NEXT NAME;
                                    ;     NAME:  CONTINUE;
;###
        MOV   FADDR             R0  ;   FADDR=>ADDR;
        MODC  5                     ;
        MOVM         X6         X0  ;   NAME(0,4)=>ADDR(0,4);
        MOV          R0  FADDR      ;   ADDR+5=>FADDR;
        INC   COUNT     -WORK.  X7  ;   INCR(FILECOUNT);
        JMP              L1         ;   GOTO NEXT NAME;
                                    ;     
L2:                                 ; LAST NAME:
        MOVC  DISPIF            R0  ; 
        MOVC  3                 R1  ;
        CIO          R1         R0  ;   ENABLE INTERFACE;
        SLL          R0  2          ;   DEVICE<2
        MOV          R0  DEVPR-C    ;       =>DEVPR.CUR;
        MON   INITDEVICE            ;   INITDEVICE;
        MON   CLEARINTERRUPT        ;   CLEARINTERRUPT;
                                    ;
        MON   CLOSE                 ;   CLOSE(SHARE);
                                    ;
L3:                                 ; FIRST FILE:
        MOVC  FILES-5           R0  ;   FILES-5
        MOV          R0  FADDR      ;       =>FADDR;
        MOV   COUNT             R6  ;   FILECOUNT=>COUNT;
L4:                                 ; NEXT FILE:
        MOV          R6  COUNT      ;   COUNT=>FILECOUNT;
        MOVC  CURSLENGTH        R0  ;   CURSLENGTH=>SIZE;
        MOVC  2                 R1  ;   2=>BUFFERS;
        MOV   FADDR             R5  ;   RE.NAME
        ADDC  5                 R5  ;       +5
        MOV          R5  FADDR      ;           =>RE.NAME;
        MOV   3.     X5         R2  ;   IDENT.NAME
        XTR          R2  14         ;       (14:0)=>IDENT;
        INE          R2  #0300      ;   IF IDENT<>BIN THEN
        JMP              L5         ;     GOTO BYTE FILE;
        MOVC  64                R2  ;   64=>BUFSIZE;
        MOVC  BMWORD            R3  ;   WORD=>MODE;
        MON   INIT                  ;   INIT(SHAR);
        MOVC  BMINPUT OR BMWORD R3  ;   INPUT OR WORD=>MODE;
        MOV   FADDR             R0  ;   FADDR=>RE.NAME;
        MON   OPEN                  ;   OPEN(MODE,NAME,SHARE);
        JMP              DP1        ;     ERROR: GOTO EOFACT;
        MOVC  BMEOF             R0  ;   EOF
        MOV          R0  STREAT.X4  ;       =>TREAT.SHARE;
        MOVC  DP1               R0  ;   EOFACT
        MOV          R0  SEOFAN.X4  ;       =>EOFACTION.SHARE;
        JMP              BIN        ;     GOTO BIN;
;###
L5:                                 ; BYTE FILE:
        MOVC  128               R2  ;   128=>BUFSIZE;
        MOVC  BMBYTE            R3  ;   BYTE=>MODE;
        MON   INIT                  ;   INIT(SHAR);
        MOVC  BMINPUT OR BMBYTE R3  ;   INPUT OR BYTE=>MODE;
        MOV   FADDR             R0  ;   FADDR=>RE.NAME;
        MON   OPEN                  ;   OPEN(MODE,NAME,SHARE);
        JMP              DP1        ;     ERROR: GOTO EOFACT;
        MOVC  BMEOF             R0  ;   EOF
        MOV          R0  STREAT.X4  ;       =>TREAT.SHARE;
        MOVC  DP1               R0  ;   EOFACT
        MOV          R0  SEOFAN.X4  ;       =>EOFACTION.SHARE;
        JMP              CMD        ;   GOTO COMMAND DECODE;
                                    ;
DP1:                                ; EOFACT:
        MON   CLOSE                 ;   CLOSE(SHARE);
        MOVC  10000             R0  ;
        MOV          R0  DELAY      ;
DXX:                                ;
        MOVC  0                 R3  ;
        JMP          S5  DP2        ;   FILLER;
        MOV   DELAY             R0  ;
        ADDC -1                 R0  ;
        MOV          R0  DELAY      ;
        JON          R0  DXX        ;
        MOV   COUNT             R6  ;   FILECOUNT=>COUNT;
        SOB          R6  L4         ;   IF DECR(COUNT)<>0 THEN
                                    ;     GOTO NEXTFILE;
        JMP              L3         ;   GOTO FIRST FILE;
                                    ;
BIN:                                ; NEXT WORD:
        MON   INCHAR                ;   INCHAR(SHARE)=>DOUBLE;
        JMP          S5  DP2        ;   OUTPUT DOUBLE(7:0);
        SWP          R3             ;
        JMP          S5  DP2        ;   OUTPUT DOUBLE(15:8);
        JMP              BIN        ;   GOTO NEXT WORD;
                                    ; ;###
DP2:                                ; OUTPUT:
        MOVC  DISPIF            R2  ;   DISPIF=>DEVICE;
        SIO          R1         R2  ;   SENSE(STATUS,DEVICE);
        IBN          R1  BNINRDY    ;   IF STATUS(INPUT READY) THEN
        JMP              L7         ;     READ CHAR;
        IBNP         R1  BNOUTRDY   ;   IF STATUS(OUTPUT READY) THEN
        WIO          R3         R2  ;     WRITE(CHAR,DEVICE);
        JMP              0.     X5  ;     RETURN;
        MOVC  100               R0  ;   100=>DELAY;
        MOV   INTERRUPT-C       R1  ;
        MON   WAITINTERRUPT         ;   WAITINTERRUPT;
        JMP              DP2        ;     TIMEOUT: GOTO OUTPUT;
        JMP              DP2        ;     INTERRUPT: GOTO OUTPUT;
                                    ;
L7:                                 ; READ CHAR:
        RIO          R1         R2  ;   READ(CHAR,DEVICE);
        XTR          R1  7          ;
        INE          R1  XOFF       ;   IF CHAR<>XOFF THEN
        JMP              DP2        ;     GOTO OUTPUT;
L8:                                 ; WAIT X-ON:
        MOVC  100               R0  ;
        MOV   INTERRUPT-C       R1  ;
        MON   WAITINTERRUPT         ;   WAITINTERRUPT(DELAY,INTERRUPT);
        NOP                         ;     TIMEOUT: IGNORE;
        SIO          R1         R2  ;   SENSE(STATUS,DEVICE);
        IBZ          R1  BNINRDY    ;   IF NOT STATUS(INPUT READY) THEN
        JMP              L8         ;     GOTO WAIT X-ON;
        RIO          R1         R2  ;   READ(CHAR,DEVICE);
        XTR          R1  7          ;
        IEQ          R1  XON        ;   IF CHAR=X-ON THEN
        JMP              DP2        ;     GOTO OUTPUT;
        JMP              L8         ;   GOTO WAIT X-ON; 
;###
;----------------------------------------------------------------------
; COMMAND SECTION.
;----------------------------------------------------------------------

GETCOLOUR:                          ; GET COLOUR:
        MOV          R6  LINK       ;   SAVE(LINK);
GC1:    MON   INCOMMAND             ;   INCOMMAND;
        <:BLACK:>      , COL0       ;
        <:WHITE:>      , COL1       ;
        <:RED:>,0      , COL2       ;
        <:MAGENA:>     , COL3       ;
        <:BLUE:>,0     , COL4       ;
        <:CYAN:>,0     , COL5       ;
        <:GREEN:>      , COL6       ;
        <:YELLOW:>     , COL7       ;
        0              , 0          ;
        JMP              GC1        ;     TERM: GOTO GET COLOUR;
        JMP              GC1        ;     ERROR: GOTO GET COLOUR;
        JMP              GC1        ;     NOT FOUND: GOTO GET COLOUR;
                                    ;
COL0:   MODC  0 - 1                 ;
COL1:   MODC  1 - 2                 ;
COL2:   MODC  2 - 3                 ;
COL3:   MODC  3 - 4                 ;
COL4:   MODC  4 - 5                 ;
COL5:   MODC  5 - 6                 ;
COL6:   MODC  6 - 7                 ;
COL7:   MOVC  7 + 8             R0  ;   COLOUR+NOBLINK=>COLOUR;
        MON   INCHAR                ;   INCHAR(BLINK);
        IEQ         R3  <:+:>       ;   IF BLINK THEN
        ADDC -8                 R0  ;     COLOUR-NOBLINK=>COLOUR;
        INE         R3  <:+:>       ;
        MON  BACKSPACE              ;
        MOV          R0         R3  ;
        JMPI            LINK        ;   RETURN;

GETPOS:                             ; GETPOSITION:
        MOV         R6  LINK        ;   SAVE(LINK);
GP1:    MON   INWORD                ;   INWORD(POSITION);
        JMP             GP1         ;     ERROR: GOTO GETPOSITION;
        MOV   0.     X6         R3  ;
        JMP         S5  DP2         ;   OUTPUT(LINE);
GP2:                                ; GET SECOND:
        MON   INWORD                ;   INWORD(POS);
        JMP             GP2         ;     ERROR: GOTO GET SECOND;
        MOV   0.    X6          R3  ;
        JMP         S5  DP2         ;   OUTPUT(POS);
        JMPI            LINK        ;   RETURN(GETPOSITION);


CX1:    MODC   1 -  2               ;
CX2:    MODC   2 -  3               ;
CX3:    MODC   3 -  4               ;
CX4:    MODC   4 -  5               ;
CX5:    MODC   5 -  6               ;
CX6:    MODC   6 - 11               ;
CX11:   MODC  11 - 16               ;
CX16:   MODC  16 - 19               ;
CX19:   MODC  19 - 21               ;
CX21:   MODC  21 - 22               ;
CX22:   MODC  22 - 23               ;
CX23:   MODC  23 - 28               ;
CX28:   MOVC  28                R3  ;   28=>COMMAND;
        JMP          S5  DP2        ;   OUTPUT(COMMAND);
        JMP              0.     X6  ;   RETURN;
;###
CMD:                                ; NEXT COMMAND;
        MON   INCOMMAND             ;   INCOMMAND(COMMAND);
        <:TXT:>,0     , TXT         ;
        <:ECM:>,0     , CMD1        ;
        <:ETM:>,0     , CMD2        ;
        <:CUON:>,0    , CMD3        ;
        <:CUOFF:>     , CMD4        ;
        <:CUCOLR:>    , CMD5        ;
        <:CUPOS:>     , CMD6        ;
        <:INCON:>     , CMD7        ;
        <:INCOFF:>    , CMD8        ;
        <:INCPOS:>    , CMD9        ;
        <:INCLIE:>    , CMD10       ;
        <:DECPOS:>    , CMD11       ;
        <:DECLIE:>    , CMD12       ;
        <:RESLIE:>    , CMD13       ;
        <:CUHOME:>    , CMD14       ;
        <:SPLINE:>    , CMD15       ;
        <:REPEAT:>    , CMD16       ;
        <:COLOUR:>    , CMD17       ;
        <:NEWBLK:>    , CMD18       ;
        <:NEWFOT:>    , CMD19       ;
        <:ROLLUP:>    , CMD20       ;
        <:ROLLDN:>    , CMD21       ;
        <:ROLLPT:>    , CMD22       ;
        <:INVERT:>    , CMD23       ;
        <:RESET:>     , CMD25       ;
        <:SAVE:>,0    , CMD26       ;
        <:RESTOE:>    , CMD27       ;
        <:GRAPHC:>    , CMD28       ;
        <:EXIT:>,0    , CMD50       ;
        <:NEXT:>,0    , DP1         ;
        0             , 0           ;
        JMP              CMD        ;     TERM:
        JMP              CMD        ;     ERROR:
        JMP              CMD        ;     NOT FOUND:


CMD1:   MODC   1 -   3              ;   ECM;
CMD2:   MODC   2 -   3              ;   ETM;
CMD3:   MODC   3 -   4              ;   CUON;
CMD4:   MODC   4 -   7              ;   CUOFF;
CMD7:   MODC   7 -   8              ;   INCON;
CMD8:   MODC   8 -   9              ;   INCOFF;
CMD9:   MODC   9 -  10              ;   INCPOS;
CMD10:  MODC  10 -  11              ;   INCLINE;
CMD11:  MODC  11 -  12              ;   DECPOS;
CMD12:  MODC  12 -  13              ;   DECLINE;
CMD13:  MODC  13 -  14              ;   RESLINE;
CMD14:  MODC  14 -  15              ;   CUHOME;
CMD15:  MODC  15 -  20              ;   SPLINE;
CMD20:  MODC  20 -  21              ;   ROLLUP;
CMD21:  MODC  21 -  25              ;   ROLLDOWN;
CMD25:  MODC  25 -  26              ;   RESET;
CMD26:  MODC  26 -  27              ;   SAVE;
CMD27:  MOVC  27                R3  ;   RESTORE;
        JMP          S5  DP2        ;   OUTPUT(COMMAND);
        JMP              CMD        ;   GOTO NEXT COMMAND;
;###
TXT:                                ; OUTPUT TEXT:
        JMP          S6  CX2        ;   ENTER TEXT MODE;
TXT1:                               ;
        MON   INCHAR                ;   INCHAR(CHAR);
        SEQ          R3  <:@:>      ;   IF CHAR = <:@:> OR
        IEQP         R3  NL         ;      CHAR=NL THEN
        JMP          S6  CX1        ;     ENTER COMMAND MODE;
        JMP              CMD        ;     GOTO NEXT COMMAND;
        INE          R3  <:_:>      ;   IF CHAR= _ THEN
        JMP              TXT2       ;  BEGIN
        MON   INWORD                ;       INWORD(CHAR);
        JMP              TXT1       ;         ERROR:
        MOV   0.     X6         R3  ;     END;
TXT2:   JMPI         S5  IDP2       ;   OUTPUT(CHAR);
        JMP              TXT1       ;

CMD5:                               ; CURSOR COLOUR:
        JMP          S6  CX5        ;   OUTPUT COMMAND;
        JMP          S6  GETCOLOUR  ;   OUTPUT(COLOUR);
        JMPI         S5  IDP2       ;    OUTPUT(COLOUR);
        JMP              CMD        ;   GOTO NEXT COMMAND;

CMD6:                               ; CURSOR POSITION:
        JMP          S6  CX6        ;   OUTPOUT COMMAND;
        JMP          S6  GETPOS     ;   OUTPUT(POSITION);
        JMP              CMD        ;   GOTO NEXT COMMAND;

CMD16:                              ; REPEAT:
        JMP          S6  CX16       ;   OUTPUT COMMAND;
C161:                               ;
        MON   INWORD                ;   GET COUNT;
        JMP              C161       ;     ERROR:
        MOV   0.     X6         R3  ;   0.ADDR=>COUNT;
        JMPI         S5  IDP2       ;   OUTPUT(COUNT);
        JMP              CMD        ;   GOTO NEXT COMMAND;

CMD17:  MODC  17-18                 ; NEWCOLOUR:
CMD18:  MOVC  18                R3  ;  NEWBLINK:
        JMPI         S5  IDP2       ;   OUTPUT(COMMAND);
        JMP          S6  GETCOLOUR  ;   GET FOREGROUND;
        MOV          R3  DELAY      ;   SAVE(FOREGROUND);
        JMP          S6  GETCOLOUR  ;   GET BACKGROUND;
        SLL          R3  4          ;   BACKGROUND<8
        ADD   DELAY             R3  ;       +FOREGROUND=>COLOUR;
        JMPI         S5  IDP2       ;   OUTPUT(COLOUR);
        JMP              CMD        ;   GOTO NEXT COMMAND;

CMD19:                              ; NEWFORMAT:
        JMP          S6  CX19       ;   OUTPUT(COMMAND);
        MON   INCHAR                ;   INCHAR(CHAR);
        INE          R3  <:_:>      ;   IF CHAR= <:_:> THEN
        JMP              C190       ;     BEGIN
        MON   INWORD                ;       INWORD(CHAR);
        CLR              0.     X6  ;         ERROR: 0=>CHAR;
        MOV   0.     X6         R3  ;     END;
C190:   JMPI         S5  IDP2       ;   OUTPUT(CHAR);
        MOVC  9                 R0  ;   9=>COUNT;
;###
C191:                               ; NEXT PART:
        MOV          R0  LINK       ;
C192:                               ;
        MON   INWORD                ;   INWORD(PART);
        JMP              C192       ;     ERROR:
        MOV   0.     X6         R3  ;
        JMPI         S5  IDP2       ;   OUTPUT(PART);
        MOV   LINK              R0  ;
        SOB          R0  C191       ;   IF DECR(COUNT)<>0 THEN
                                    ;     GOTO NEXT PART;
        JMP              CMD        ;   GOTO NEXT COMMAND;
                                    ;
CMD22:                              ; ROLL PART:
        JMP          S6  CX22       ;   OUTPUT(COMMAND);
C221:                               ; GET DIRECTION:
        MON   INCOMMAND             ;   INCOMMAND(DIRECTION);
        <:CLEAR:>      , ROLL0      ;     CLEAR;
        <:UP:>,0,0     , ROLL1      ;     UP;
        <:DOWN:>,0     , ROLL2      ;     DOWN;
        <:LEFT:>,0     , ROLL3      ;     LEFT;
        <:RIGHT:>      , ROLL4      ;     RIGHT;
        0              , 0          ;
        JMP              C221       ;     TERM:
        JMP              C221       ;     ERROR:
        JMP              C221       ;     NOT FOUND:
                                    ;
ROLL0:  MODC  0-1                   ;
ROLL1:  MODC  1-2                   ;
ROLL2:  MODC  2-3                   ;
ROLL3:  MODC  3-4                   ;
ROLL4:  MOVC  4                 R3  ;
        JMPI         S5  IDP2       ;   OUTPUT(DIRECTION);
        JMP          S6  GETPOS     ;   OUTPUT(FIRST POSITION);
        JMP          S6  GETPOS     ;   OUTPUT(SECOND POSITION);
        JMP              CMD        ;   GOTO NEXT COMMAND;

CMD23:                              ; INVERT:
        JMP          S6  CX23       ;   OUTPUT(COMMAND);
        JMP          S6  GETPOS     ;   OUTPUT(POSITION);
        JMP              CMD        ;   GOTO NEXT COMMAND;


CMD28:                              ; GRAPHIC MODE:
        JMP          S6  CX28       ;   OUTPUT(COMMAND);
C281:                               ;
        MON   INCOMMAND             ;
        <:ALPHAM:>     , GCMD1      ;
        <:DISPLY:>     , GCMD2      ;
        <:NEWINC:>     , GCMD3      ;
        <:REPEAT:>     , GCMD4      ;
        <:POSITN:>     , GCMD5      ;
        <:COLOUR:>     , GCMD6      ;
        <:INCRET:>     , GCMD7      ;
        <:INCPOS:>     , GCMD9      ;
        <:INCLIE:>     , GCMD10     ;
        <:DECPOS:>     , GCMD11     ;
        <:DECLIE:>     , GCMD12     ;
        <:COUNTP:>     , GCMD13     ;
        0              , 0          ;
        JMP              C281       ;
        JMP              C281       ;
        JMP              C281       ;
;###
GCMD3:                              ; NEWINCREMENT:
        MODC  1 - 2                 ;
GCMD5:                              ; POSITION:
        MOVC  2                 R3  ;
        JMPI         S5  IDP2       ;   OUTPUT(COMMAND);
GC51:   MON   INWORD                ;   INWORD(FIRST);
        JMP              GC51       ;     ERROR:
        MOV   0.     X6         R3  ;
        SRL          R3  6          ;
        JMPI         S5  IDP2       ;   OUTPUT(FIRST(7:0));
        MOV   0.     X6         R3  ;
        XTR          R3  6          ;
        JMPI         S5  IDP2       ;   OUTPUT(FIRST(15:8));
GC52:   MON   INWORD                ;   INWORD(SECOND);
        JMP              GC52       ;     ERROR:
        MOV   0.     X6         R3  ;
        SRL          R3  6          ;
        JMPI         S5  IDP2       ;   OUTPUT(SECOND(7:0));
        MOV   0.     X6         R3  ;
        XTR          R3  6          ;
        JMPI         S5  IDP2       ;   OUTPUT(SECOND(15:8));
        JMP              C281       ;   GOTO NEXT GRAPHIC;

GCMD1:                              ; ENTER ALPHANUM:
        JMP          S6  CX11       ;   OUTPUT(COMMAND);
        JMP              CMD        ;   GOTO NEXT COMMAND;

GCMD4:                              ; REPEAT:
        JMP          S6  CX4        ;   OUTPUT(COMMAND);
GC41:   MON   INWORD                ;   INWORD(COUNT);
        JMP              GC41       ;     ERROR:
        MOV   0.     X6         R3  ;
        JMPI         S5  IDP2       ;   OUTPUT(COUNT);
        JMP              C281       ;   GOTO NEXT GRAPHIC;

GCMD6:                              ; COLOUR:
        JMP          S6  CX3        ;   OUTPUT(COMMAND);
        JMP          S6  GETCOLOUR  ;   GET COLOUR;
        JMPI         S5  IDP2       ;   OUTPUT(COLOUR);
        JMP              C281       ;   GOTO NEXT GRAPHIC;

GCMD2:  MODC   0 -  5               ; DISPLAY:
GCMD7:  MODC   5 -  6               ; INCREMENT:
GCMD9:  MODC   6 -  8               ; INCPOS:
GCMD10: MODC   8 -  7               ; INCLINE:
GCMD11: MODC   7 -  9               ; DECPOS:
GCMD12: MODC   9 - 10               ; DECLINE:
GCMD13: MOVC  10                R3  ; COUNTUP:
        JMPI         S5  IDP2       ;   OUTPUT(COMMAND);
        JMP              C281       ;   GOTO NEXT GRAPHIC;

CMD50:                              ; EXIT:
        MON   ENDPROGRAM            ;
        TRP   0                     ;

                                    ;
XREFS=  1                           ;
XBUFS=  3                           ;
XPRPC=  L0                          ;
NOLIST
        MESSAGE <:END OF USER MODULE:>
USE PROG
XDEVPR= 0
XPSIZE= LOC
USE BASE
XCURIN= LOC
0,REPEAT CURSOUT-CURSIN-1
XCUROUT= LOC
0,REPEAT 4
XWORKING=0, XPROGRAM=LOC
XWORDS=0, XREFSX=0, XBUFSX=0, XCURWORK=0, XCENTRY=0
XSIZE= LOC+C
USE PROG
IF LOC+XSIZE NE WORDS THEN MESSAGE <:SIZE <> WORDS:> 
MESSAGE WORDS
MESSAGE XSIZE
FI
LIST
END   ;###                          ;
«nul»