A large commit.
[pdp8.git] / sw / adventure / SPEAK.RA
diff --git a/sw/adventure/SPEAK.RA b/sw/adventure/SPEAK.RA
deleted file mode 100644 (file)
index a89e095..0000000
+++ /dev/null
@@ -1,566 +0,0 @@
-/      SPEAK - Types out messages from the database\r
-/      Also includes TTY output routines that unpack\r
-/      packed sixbit into mixed case ASCII.\r
-/\r
-       FIELD1  ADVTTY\r
-\r
-TTY,   0                       / TTY Output routine, dupe of FRTS\r
-       IOF                     / Protect from race conditions\r
-       SNA                     / Input or output?\r
-       JMP     KBD             / Input - read character\r
-       DCA     HANGPT          / Output - save char\r
-       RDF\r
-       TAD     CDIF00\r
-       DCA     CDFX\r
-       CDF     0\r
-       TAD%    TOCHR           / Output character status in FRTS\r
-       SMA SZA CLA             / If gt 0, char backed up\r
-       JMP     BUSY            / Else must wait\r
-LOOP,  TAD%    TOCHR           / Get the status\r
-       CLL RAL                 /Busy flag in link\r
-       CLA CML RAR             /Complement of busy in sign\r
-       TAD     HANGPT\r
-       SPA                     /If tty not busy, \r
-       TLS                     /Send it\r
-       DCA%    TOCHR           /Store pos or neg, backed up or busy\r
-TTYRET,        ION                     /Interrupts back on\r
-CDFX,  HLT                     /Caller's field\r
-       JMP%    TTY             /Return\r
-\r
-CDIF00,        CIF CDF\r
-\r
-BUSY,  CDF     10              /Busy, must wait. Call Field 0 HANG routine\r
-       CIF     0\r
-       JMS%    HANGPT+1\r
-       0451                    / TTUHNG\r
-       CDF     0\r
-       JMP     LOOP            / Try output again\r
-\r
-KBD,   RDF\r
-       TAD     CDIF00\r
-       DCA     CDFX\r
-       CDF     0\r
-       TAD%    TICHR           / Any input?\r
-       SNA CLA\r
-       JMP     WAIT            / No, wait\r
-GETIN, TAD%    TICHR           / Get character\r
-       DCA     HANGPT          / Save\r
-       DCA%    TICHR           / Clear buffer\r
-       TAD     HANGPT\r
-       JMP     TTYRET          / Return\r
-\r
-WAIT,  CDF     10\r
-       CIF     0\r
-       JMS%    HANGPT+1        /Hang\r
-       465                     /KBUHNG\r
-       CDF     0\r
-       JMP     GETIN   /Get input\r
-TOCHR, 4\r
-TICHR, 5\r
-HANGPT,        ADDR    #HANG\r
-/\r
-/ Terminal line input routine. Used because the FRTS input is quite limited.\r
-/ This one handles scope rubouts and allows lower case input.\r
-/ Inputs: Array        Returned characters, stored one sixbit per array word\r
-/              (The FORTRAN input routine is set up this way to unpack)\r
-/      Size    Number of characters to allow\r
-/      Prompt Prompt string\r
-       FIELD1  RDLIN\r
-/\r
-       ENTRY   RDLINE\r
-RDLINE,        JA      #RLST\r
-#RLXR, ORG     .+10\r
-       TEXT    +RDLINE+\r
-#RLRET,        SETX    #RLXR\r
-       SETB    #RLBAS\r
-       JA      .+3\r
-#RLBAS,        ORG     .+6\r
-BUFPT, ORG     .+3\r
-BUFLEN,        ORG     .+3\r
-\r
-       ORG     #RLBAS+30\r
-       FNOP\r
-       JA      #RLRET\r
-       FNOP\r
-#RGOBK,        0;0\r
-#RLRTN,        BASE    #RLBAS\r
-       JA      #RGOBK\r
-#RLST, STARTD\r
-       0210\r
-       FSTA    #RGOBK,0\r
-       0200\r
-       SETX    #RLXR\r
-       SETB    #RLBAS\r
-       LDX     0,1\r
-       FSTA    #RLBAS\r
-       FLDA%   #RLBAS,1+\r
-       FSTA    BUFPT\r
-       FLDA%   #RLBAS,1+\r
-       FSTA    BUFLEN\r
-       STARTF\r
-/\r
-/      Pass down size to '8' code\r
-/\r
-       SETX    BUFSIZ  \r
-       FLDA%   BUFLEN\r
-       FNEG                    / Make it negative\r
-       ATX     0               / Pass buffer len\r
-       SETX    #RLXR\r
-       TRAP4   GETLIN          / Get input line\r
-       JA      #RLRTN          / And return\r
-/ Input reader\r
-\r
-       FIELD1  GETLN\r
-\r
-GETLIN,        0\r
-       CLA\r
-       DCA     OFFSET          / Start at offset zero\r
-       TAD%    SCOPT\r
-       AND     K200\r
-       DCA     SCOPE\r
-       TAD%    BUFFLD+1        / Get CDF for buffer\r
-       AND     FLDMSK\r
-       CLL RTL\r
-       RAL\r
-       TAD     CDFG\r
-       DCA     BUFCDF\r
-/\r
-/ Go get an input character\r
-/\r
-GETNXT,        JMS%    PTTY+1          / Called with zero to get char\r
-       DCA     INCH            / Save input\r
-/\r
-/ Specials?\r
-/\r
-       TAD     INCH\r
-       TAD     MDEL            / Delete?\r
-       SNA CLA\r
-       JMP     DELETE          / Handle that\r
-       TAD     INCH\r
-       TAD     MCR             / CR?\r
-       SNA CLA\r
-       JMP     ENTER           / End of line, let's go.\r
-       TAD     INCH\r
-       TAD     MSPC            / Less than space?\r
-       SPA CLA\r
-       JMP     BELL            / Nope, ignore\r
-       TAD     OFFSET\r
-       TAD     BUFSIZ          / Room left?\r
-       SMA CLA\r
-       JMP     BELL            / Bell if not\r
-       TAD     INCH\r
-       JMS%    PTTY+1          / Echo it\r
-       TAD     INCH\r
-       TAD     LWRA            / Is it lowercase?\r
-       SPA CLA\r
-       JMP     UPPER           / No, store it\r
-       TAD     INCH\r
-       TAD     LWRZ\r
-       SMA CLA\r
-       JMP     UPPER           / More than lowercase z\r
-       TAD     INCH\r
-       TAD     AMINA           / Adjust to uppercase\r
-       DCA     INCH\r
-UPPER, JMS     STORE           / Store this character\r
-       JMP     GETNXT          / Get more\r
-/ Store a character in the output buffer\r
-/ using the current offset\r
-/\r
-\r
-STORE, 0\r
-       TAD     OFFSET\r
-       TAD     OFFSET\r
-       TAD     OFFSET          / Count FPP words\r
-       TAD%    BUFPTR+1        / Pointer to exponent word\r
-       DCA     BPT\r
-       TAD     K27             / Exponent 27 for integer\r
-       JMS     STO\r
-       JMS     STO             / Zero high word\r
-       TAD     INCH            / Char value\r
-       AND     SIXMSK          / Convert to sixbit\r
-       JMS     STO             / Store in buffer\r
-       CDF     10              / Back to my field\r
-       ISZ     OFFSET          / One more in the buffer\r
-SPC,    240                    / Really shouldn't overflow; harmless AND\r
-       JMP%    STORE           / Return\r
-STO,   0\r
-BUFCDF,        HLT                     / Gets CDF for buffer field\r
-       DCA%    BPT\r
-       ISZ     BPT             / Next word\r
-       JMP%    STO             / Return if no skip\r
-       TAD     BUFCDF\r
-       TAD     BS              / Next field\r
-       DCA     BUFCDF\r
-       JMP%    STO\r
-\r
-BELL,  TAD     BEL             / Warn the user\r
-       JMS%    PTTY+1\r
-       JMP     GETNXT\r
-\r
-DELETE,        TAD     OFFSET          / How far into the buffer are we?\r
-       SNA CLA\r
-       JMP     BELL            / Ignore extra deletes\r
-       TAD     SCOPE\r
-       SNA CLA\r
-       JMP     DUMBDL          / Simple fortran-format delete\r
-       TAD     BS\r
-       JMS%    PTTY+1\r
-       TAD     SPC\r
-       JMS%    PTTY+1\r
-       TAD     BS\r
-       JMS%    PTTY+1\r
-       JMP     FIXOFF          / Fix the offset\r
-DUMBDL,        TAD     K334            / Backslash\r
-       JMS%    PTTY+1\r
-FIXOFF,        CLA CMA\r
-       TAD     OFFSET\r
-       DCA     OFFSET\r
-       JMP     GETNXT\r
-\r
-ENTER, TAD     CR              / Send a RETURN\r
-       JMS%    PTTY+1\r
-CLRLP, TAD     OFFSET          / Is there space available?\r
-       TAD     BUFSIZ\r
-       SMA CLA\r
-       JMP     CLRDN\r
-       TAD     SPC\r
-       DCA     INCH\r
-       JMS     STORE\r
-       JMP     CLRLP\r
-CLRDN, CIF CDF 0\r
-       JMP%    GETLIN\r
-\r
-BUFSIZ,        0\r
-SCOPT, 7726                    / Scope flag in OS/8\r
-K200,  200\r
-MDEL,  -377                    / Delete \r
-MCR,   -215\r
-CR,    215\r
-MSPC,  -240\r
-BEL,   207\r
-LWRA,  -341\r
-LWRZ,  -373\r
-AMINA, -40                     / Add to "a" to make "A"\r
-BPT,\r
-BUFFLD,        ADDR BUFPT+1\r
-SCOPE,\r
-BUFPTR,        ADDR    BUFPT+2\r
-OFFSET,\r
-PTTY,  ADDR    TTY\r
-BS,    10\r
-K334,  334\r
-CDFG,  CDF 0\r
-K27,   27\r
-SIXMSK,        77\r
-FLDMSK,        7\r
-INCH,  0\r
-\r
-/\r
-/ Fortran-callable message printer\r
-/ Put here to avoid wasting the rest of the page.\r
-/ Arguments:\r
-/      BUF             Buffer pointer\r
-/      COUNT           Number of characters to write, zero to look for end\r
-/      CRFLAG          Carriage return flags.\r
-/                      Bit 11 (1) = no lead LF\r
-/                      Bit 10 (2) = no trail CR\r
-/                      Bit 9  (4) = start lowercase\r
-/\r
-       ENTRY   SIXOUT\r
-SIXOUT,        JA      #STRT\r
-#SXR,  ORG     .+10\r
-       TEXT    +SIXOUT+\r
-#SRET, SETX    #SXR\r
-       SETB    #SBASE\r
-       JA      .+3\r
-#SBASE,        ORG     .+6\r
-CNT,   ORG     .+3\r
-SFLAG, ORG     .+3\r
-\r
-       ORG     #SBASE+30\r
-       FNOP\r
-       JA      #SRET\r
-       FNOP\r
-#SGOBK,        0;0\r
-#SRTN, BASE    #SBASE\r
-       JA      #SGOBK\r
-#STRT, STARTD\r
-       0210\r
-       FSTA    #SGOBK,0\r
-       0200\r
-       SETX    #SXR\r
-       SETB    #SBASE\r
-       LDX     0,1\r
-       FSTA    #SBASE\r
-       FLDA%   #SBASE,1+\r
-       FSTA    BUF             / Buffer pointer\r
-       FLDA%   #SBASE,1+       / Count\r
-       FSTA    CNT\r
-       FLDA%   #SBASE,1+       / Carriage control flag\r
-       FSTA    SFLAG\r
-       STARTF\r
-       FLDA%   CNT\r
-       SETX    COUNT\r
-       ATX     0\r
-       FLDA%   SFLAG\r
-       ATX     1\r
-       SETX    #SXR\r
-       TRAP4   SIX8            /Call the 8-mode output routine\r
-       JA      #SRTN\r
-\r
-       FIELD1  SXOUT\r
-       ENTRY   SIX8            / Mixed case output routine\r
-\r
-SIX8,  0\r
-       TAD     CRFLAG          /Suppresss carriage control?\r
-       RAR                     /Low bit suppresses lead LF\r
-       SZL CLA\r
-       JMP     .+4             /No leading LF\r
-       CDF     10              / My field\r
-       TAD     LF              /Linefeed\r
-       JMS%    TTYPTR+1        /Output it\r
-       TAD     CRFLAG\r
-       AND     K4              /Start in lower case?\r
-       SZA CLA\r
-       TAD     K40             /Yes\r
-       TAD     HUN             /Reset conversion factor\r
-       DCA     SHIFT\r
-       TAD     BUF             /Buffer field\r
-       AND     K7              /Just the field bits\r
-       CLL RAL\r
-       RTL                     /Into place\r
-       TAD     CDF0            /Into CDF instruction\r
-       DCA     CDF1\r
-       TAD     CDF1\r
-       DCA     CDF2\r
-       TAD     COUNT           /Get buffer length\r
-       SNA\r
-       JMP     NOTRIM          /Zero means it has a terminating "@"\r
-/\r
-/ Find the end of the string\r
-/\r
-       CLA CMA                 /End is start + len - 1\r
-       TAD     COUNT           /String len in words\r
-       TAD     BUF+1           /End of the string\r
-       DCA     PTR             /Pointer to end\r
-       TAD     COUNT           /Invert count\r
-       CMA IAC\r
-       DCA     COUNT\r
-CDF1,  HLT\r
-FNDEND,        TAD%    PTR\r
-       TAD     K3740           / - '  ' (two spaces)\r
-       SZA CLA                 / Skip if blank\r
-       JMP     NONBLK\r
-       ISZ     COUNT           /Count another\r
-       SKP\r
-       JMP     NONBLK          /If empty, done\r
-       CLA CMA                 / -1\r
-       TAD     PTR\r
-       DCA     PTR             /Back pointer up\r
-       JMP     FNDEND          /Keep looking\r
-\r
-NONBLK,        TAD     COUNT\r
-       SNA CLA                 /Skip if output left\r
-       JMP     DONE            /Nothing if count zero already\r
-NOTRIM,        TAD     BUF+1           /Reset pointer to start\r
-       DCA     PTR\r
-CDF2,  HLT\r
-       TAD%    PTR             /Get word\r
-       DCA     STEMP           /Save\r
-       TAD     STEMP\r
-       RTR\r
-       RTR\r
-       RTR                     /First sixbit\r
-       JMS     OUTONE          /Convert and output it\r
-       TAD     STEMP           /Second sixbit\r
-       JMS     OUTONE\r
-       ISZ     PTR             /Bump pointer\r
-       SKP                     /OK if no skip\r
-       JMP     NEWFLD          /Next field otherwise\r
-INCCNT,        ISZ     COUNT\r
-       JMP     CDF2            /Keep outputting\r
-DONE,  CLA\r
-       TAD     CRFLAG          /Suppress trailing CR?\r
-       RTR                     /2 bit suppresses trailing CR\r
-       SZL CLA                 /If zero, write it.\r
-       JMP     OUT             /Yes, leave now\r
-       CDF     10              /My field\r
-       TAD     CRTN\r
-       JMS%    TTYPTR+1\r
-OUT,   CIF CDF 0\r
-       JMP%    SIX8\r
-\r
-NEWFLD,        TAD     CDF1\r
-       TAD     K10             /Next field\r
-       DCA     CDF1\r
-       TAD     CDF1\r
-       DCA     CDF2\r
-       JMP     INCCNT\r
-\r
-OUTONE,        0\r
-       AND     K77             /Mask\r
-       SNA\r
-       JMP     DONE            / End of string\r
-       TAD     K7743           / minus '['\r
-       SNA\r
-       JMP     SETLWR          /Set to lowercase shift\r
-       TAD     K2              / ok, ']'?\r
-       SNA\r
-       JMP     SETUPR          /Set to uppercase\r
-       TAD     K7773           /Restore\r
-       SPA\r
-       TAD     SHIFT           /For positive, shift it\r
-       TAD     K40             /Else it's not alphabetic\r
-       CDF     10              /My field\r
-       JMS%    TTYPTR+1        /Output it\r
-       JMP%    OUTONE          /Done\r
-\r
-SETLWR,        TAD     K40             /Reset shift\r
-SETUPR,        TAD     HUN             /For upper/lower\r
-       DCA     SHIFT\r
-       JMP%    OUTONE\r
-\r
-TTYPTR,        ADDR TTY\r
-SHIFT, 140             /Shift value\r
-/ COUNT and CRFLAG must stay together\r
-COUNT, 0               /Num words to output. \r
-CRFLAG,        0               /1 - no leading LF, 2 no trailing CR\r
-PTR,   0\r
-CRTN,  15\r
-LF,    12\r
-K3740, 3740                    /minus blank\r
-BUF,   0;0;0                   /Buffer 15-bit address\r
-STEMP, 0\r
-K77,   77                      /sixbit mask\r
-K7,    7\r
-K4,    4\r
-K40,   40\r
-CDF0,  CDF\r
-HUN,   100\r
-K7743, 7743\r
-K7773, 7773\r
-K10,   10                      /Field increment\r
-K2,    2\r
-\r
-       SECT    SPEAK\r
-/C\r
-/      SUBROUTINE SPEAK(N)\r
-/C\r
-/C PRINT THE MESSAGE IN RECORD N OF THE RANDOM ACCESS MESSAGE FILE.\r
-/C\r
-/      IMPLICIT INTEGER (A-Z)\r
-/      COMMON /TXTCOM/ RTEXT,LINES,ASCVAR\r
-/      COMMON /ALPHAS/ BLANK,EOF\r
-/      DIMENSION RTEXT(205),LINES(36)\r
-/C\r
-       EXTERN  IO\r
-       EXTERN  #HANG\r
-       JA      #ST\r
-#XR,   ORG     .+10\r
-       TEXT    +SPEAK+\r
-#RET,  SETX    #XR\r
-       SETB    #BASE\r
-       JA      .+3\r
-#BASE, ORG     .+6\r
-N,     ORG     .+3\r
-#DOTMP,        ORG     .+3\r
-BLANK, TEXT +      +\r
-EOF,   TEXT +>$<   +\r
-ONE,   F 1.0\r
-FOUR,  F 4.0\r
-       ORG     #BASE+30\r
-       FNOP\r
-       JA      #RET\r
-       FNOP\r
-#GOBAK,        0;0\r
-I,     ORG     .+0003\r
-L,     ORG     .+0003\r
-OLDLOC,        ORG     .+0003\r
-       #LBL=.\r
-       COMMON  TXTCOM\r
-RTEXT, ORG     .+1147\r
-LINES, ORG     .+0044\r
-ASCVAR,        ORG     .+0003\r
-TXTLOC,        ORG     .+0003\r
-DATA,  ORG     .+0352\r
-       ORG     #LBL\r
-#RTN,  BASE    #BASE\r
-       JA      #GOBAK\r
-#ST,   STARTD\r
-       0210\r
-       FSTA    #GOBAK,0\r
-       0200\r
-       SETX    #XR\r
-       SETB    #BASE\r
-       LDX     0,1\r
-       FSTA    #BASE\r
-       FLDA%   #BASE,1+\r
-       FSTA    N\r
-       STARTF\r
-/       IF(N.EQ.0)RETURN\r
-       FLDA%   N\r
-       JEQ     #RTN\r
-/       READ(2'N) LOC,LINES\r
-       FLDA    N\r
-       STARTD\r
-       FSTA    #G0002\r
-       STARTF\r
-       JSR     IO\r
-       JA      .+0004\r
-#G0002,        JA      .\r
-/       IF(LINES(1).EQ.EOF)RETURN\r
-       FLDA    ONE\r
-       ATX     7\r
-       FLDA    LINES-0003,7\r
-       FSUB    EOF\r
-       JEQ     #RTN\r
-/1      OLDLOC = LOC\r
-#1,    FLDA    TXTLOC\r
-       FSTA    OLDLOC\r
-       FLDA    ONE\r
-       FSTA    I\r
-\r
-/       DO 3 I=36,1,-1\r
-/      Set COUNT to the number of words (36 or 44 octal)\r
-       SETX    COUNT\r
-       LDX     44,0            /44 words\r
-       LDX     0,1             /With carriage control\r
-       SETX    #XR\r
-/       L=I\r
-/3      CONTINUE\r
-/5      TYPE 2,(LINES(I),I=1,L)\r
-#5,    FLDA    LINEPT\r
-       FSTA    BUF             /Set buffer pointer\r
-       TRAP4   SIX8\r
-\r
-       FLDA%   N\r
-       FADD    ONE\r
-       FSTA%   N\r
-       FLDA    N\r
-/       READ(2'ASCVAR) LOC,LINES\r
-       STARTD\r
-       FSTA    #G0006\r
-       STARTF\r
-       JSR     IO\r
-       JA      .+0004\r
-#G0006,        JA      .\r
-/       IF(LOC .EQ. OLDLOC) GO TO 1\r
-       FLDA    TXTLOC\r
-       FSUB    OLDLOC\r
-       JEQ     #1\r
-       EXTERN  #WRITO\r
-       TRAP3   #WRITO\r
-       JA      FOUR\r
-       JA      #10+2\r
-       EXTERN  #RENDO\r
-       TRAP3   #RENDO\r
-\r
-/10     RETURN\r
-#10,   JA      #RTN\r
-/       (1X)\r
-       5061\r
-       3051\r
-/2      FORMAT(' ',36A2) PDP/8: (' ',12A6)\r
-LINEPT,        ADDR    LINES\r
-       0\r
-       END\r