home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / hp2647 / hp264x.mss < prev    next >
Text File  |  2020-01-01  |  21KB  |  532 lines

  1. @string(-hp2vrsn="1.2")
  2. @Chapter<HP264x KERMIT (Rover-Kermit)>
  3. @Begin<Description,Leftmargin +15,Indent -15,spread 0>
  4. @i(Program:)@\John F. Chandler (Harvard/Smithsonian
  5. Center for Astrophysics)
  6.  
  7. @i(Language:)@\8080 Assembler
  8.  
  9. @i(Version:)@\@value(-hp2vrsn)
  10.  
  11. @i(Date:)@\August 1987
  12.  
  13. @i(Documentation:)@\John F. Chandler (CfA)
  14. @end<Description>
  15.  
  16. @i<Rover-Kermit Capabilities At A Glance:>
  17. @begin<format,leftmargin +2,above 1,below 1>
  18. @tabclear()@tabset(3.5inches,4.0inches,4.5inches)
  19. Local operation:@\Yes
  20. Remote operation:@\No
  21. Transfers text files:@\Yes
  22. Transfers binary files:@\Yes
  23. Wildcard send:@\N/A
  24. ^X/^Z interruption:@\Yes
  25. Filename collision avoidance:@\N/A
  26. Can time out:@\Yes
  27. 8th-bit prefixing:@\Yes
  28. Repeat count prefixing:@\Yes
  29. Alternate block checks:@\Yes
  30. Terminal emulation:@\Host
  31. Communication settings:@\Host
  32. Transmit BREAK:@\Host
  33. IBM communication:@\Yes
  34. Transaction logging:@\No
  35. Session logging (raw download):@\Host
  36. Raw upload:@\Host
  37. Act as server:@\No
  38. Talk to server:@\Yes; SEND, GET, FIN, LOGOUT
  39. Advanced commands for servers:@\Yes; GENERIC, HOST, KERMIT
  40. Local file management:@\N/A
  41. Handle file attributes:@\No
  42. Command/init files:@\Host
  43. Printer control:@\Host
  44. @end<format>
  45.  
  46. @Section<Summary of HP264x-Series Terminals>
  47.  
  48. The 2640-series work stations combine terminal functionality with a
  49. variety of programmability and graphics features.  The members of the
  50. series (all driven by 8080's) share a common set of ROM system entries
  51. for display, telecommunications, and device I/O, as well as a built-in
  52. loader driven by escape sequences with addresses and data expressed as
  53. octal character strings.@index(Loader)
  54. The loader is not, however, a linking loader -- it accepts only
  55. absolute addresses and data.
  56.  
  57. Various members of the series offer storage devices in the form
  58. of cartridge tapes and
  59. @Index(Disks)diskettes.  However,
  60. the diskettes are not used as
  61. random access media, rather as fast
  62. @Index(Tapes)"tapes".  This
  63. chapter will speak of all such devices as tapes.
  64.  
  65. The combination of absolute loader and primitive file system tends
  66. to push software design toward monolithic programs fitting into
  67. preassigned memory regions with immovable, globally known entry
  68. vectors.  Insofar as the operating system entry vectors
  69. are the same among the
  70. different members of the series, these restrictions are an
  71. advantage in terms of software portability.  Another
  72. result of these limits is that many customary Kermit
  73. functions, such as interactions with the local file system,
  74. are infeasible.  At the same time, I/O is generally a simple matter
  75. for an application program, such as Kermit, since "one call does it all."
  76.  
  77. Rover-Kermit was developed on a 2647, which contains 64K of RAM in addition
  78. to 64K of bank-switched ROM.  Others in the series
  79. generally have no more than 64K
  80. total RAM+ROM, and certain system entries will vary accordingly along
  81. with the method of calling them.  On the 2647, Kermit operates as a
  82. memory-resident system extension which can supersede the normal terminal
  83. function when needed.  The 2647, being highly programmable, can be loaded
  84. with alternate state tables to emulate practically any other kind of
  85. terminal regardless of whether Kermit is present.  The programmability
  86. of the others in the series varies -- the 2648, in particular, can not
  87. be set up to emulate other terminal types.
  88.  
  89. @Section<Rover-Kermit Description>
  90.  
  91. Since Rover-Kermit runs on a standalone terminal,
  92. it is always in control of the
  93. screen -- it is always
  94. @i<local>@index<Local>.  Thus, it always keeps the
  95. screen updated with the file name and the packet and retry counts,
  96. whether sending or receiving.  See below for details of the screen
  97. layout.
  98. @Index(Interruption)Because it is local, Rover-Kermit also monitors the
  99. keyboard and interrupts a file transfer in either direction upon
  100. recognizing a CTRL-X or CTRL-Z.  As always in such cases, Rover-Kermit
  101. can stop unconditionally when sending but must rely on cooperation from
  102. the remote Kermit when receiving.
  103.  
  104. @index<Timeout>
  105. Rover-Kermit can call a timeout exit from a telecommunications
  106. input request and thereby break deadlocks automatically.  The
  107. timeouts done by Rover-Kermit are "fuzzy" because they
  108. depend on the speed of the processor,
  109. the verbosity of the operating system
  110. code, and on the amount of keyboard activity.  For
  111. the usual 2-MHz clock rate the timeout
  112. should closely approximate that requested by the remote Kermit
  113. anywhere up to 64 seconds.  However, a request of zero is treated as
  114. 64, and requests over 64 are taken modulo 64.  The
  115. timeout can also be disabled by command.
  116.  
  117. If despite the timeout capability, the transmission appears to be stuck,
  118. then manual
  119. @Index(Intervention)intervention is probably
  120. needed above and beyond the
  121. usual response to a
  122. timeout (namely to retransmit the last packet or
  123. to NAK@Index(NAK) the expected packet to cause the
  124. remote host to send it again).  In
  125. that case, the user may depress the CNTL and both shift keys
  126. simultaneously to gain keyboard access to telecommunications.  At that
  127. point any string of characters up to, and including, a carriage return
  128. may be typed at the remote host to prompt further activity.  The string
  129. will also be echoed locally regardless of the duplex setting.  Since
  130. Kermit displays all characters transmitted by the remote host (except
  131. those within packets), the string will be displayed twice
  132. if the remote host also echoes.  In any case,
  133. the record of the preceding non-packet
  134. traffic should indicate what is needed
  135. to restart the transmission.  If all else fails, the transmission can be
  136. @Index(Interruption)halted by pressing the
  137. @Index(RESET)"RESET TERMINAL"
  138. key.  Rover-Kermit will then restart and wait for commands (such as
  139. @Index<QUIT>QUIT).  One
  140. note of warning: halting a transfer to or from tape will
  141. result in the abandonment of an entry in the
  142. @index(Active File Table)
  143. Active File Table.  Eventually, the entire table can be filled with
  144. abandoned entries, and it will be necessary to
  145. @i(Hard Reset)@Index(RESET) the
  146. terminal to recover the "lost" entries.
  147.  
  148. @heading<Screen Layout>
  149.  
  150. @Index(Screen)
  151. While Rover-Kermit is running, the upper right corner of the screen
  152. always shows a list of Kermit commands.  The remainder of the top
  153. eight lines are used for displaying Kermit's status.  Figure
  154. @ref(-hp2scr) shows a snapshot of the display after a successful
  155. GET.  The top line always shows Kermit's version number, and the
  156. second line provides a mnemonic label for the third, which displays
  157. the data Rover-Kermit will use for Send-Init negotiations.  The third
  158. line also shows an asterisk under the word Core or Tape to indicate
  159. which form of storage is selected, plus the current definitions of the
  160. input and output "tape" devices.  The fourth line (the Program State
  161. line)
  162. @Index(Program State)
  163. shows the most recent command (or error message from the remote
  164. Kermit).  The fifth, sixth, and seventh lines
  165. show the most recent file transmitted
  166. and the packet and retry counts.  The eighth line
  167. @Index(Message)
  168. (the Message line) shows the most recent user prompt or error message,
  169. or else the Value-specified parameters after a
  170. @Index(PARM)PARM command.  The
  171. remainder of the screen constitutes a window into the scrolled
  172. display workspace of the terminal.  Text replies from a remote Server
  173. and any non-packet traffic during a transfer are added to the bottom
  174. of the workspace.  While Rover-Kermit is running, the display can be
  175. scrolled by means of the ROLL UP, ROLL DOWN, HOME, and HOME DOWN keys
  176. (as during normal operation).
  177. @begin<figure,leftmargin +0>
  178. @blankspace(1)
  179. @bar()
  180. @begin(verbatim)
  181. Rover Kermit @value(-hp2vrsn)                        Send, Receive, ...
  182.             Btpp."8BR                   Core, Tape, Kermit, ...
  183.      Parms: ~# @@-#Y1~  Src: L  Dst: R   *
  184. Get
  185.       File: GOOD.DATA
  186.     Record: 126
  187.    Retries: 0
  188. Transfer done
  189. @end(verbatim)
  190. @bar()
  191. @caption(Screen snapshot after GET command)
  192. @tag(-hp2scr)
  193. @end(figure)
  194.  
  195. @heading<Rover-Kermit Commands>
  196.  
  197. Rover-Kermit uses a minimal set of commands, each abbreviated to a single
  198. letter.  Options, if any, will be requested by a subsequent
  199. prompt.  While you are responding to a prompt, the
  200. characters you type will be
  201. upcased and displayed on the
  202. @Index(Message)Message line, and
  203. both DEL and BACKSPACE will back up
  204. the cursor and remove the last character from the response string
  205. (though not from the display).  Other
  206. control and function keys will be ignored (except RETURN, which
  207. terminates your response).  During
  208. operation, Rover-Kermit maintains a display of all possible
  209. commands (and subcommands where appropriate), but offers no other
  210. @Index(HELP)HELP facility.
  211. @begin<description,leftmargin +8,indent -8>
  212. @Index(SEND)SEND@\Send the current file to
  213. the remote Kermit.  Kermit
  214. will prompt you for the filename, but you need not enter one;
  215. if you just type
  216. a carriage return, Kermit will use a default name.  In the case of a
  217. RAM file, the default is the name received with the file.  However, for
  218. a tape file there is no name available, and the default is
  219. "A.B".
  220.  
  221. @Index(RECEIVE)RECEIVE@\Receive file(s) from the remote Kermit.  Store
  222. them on successive output tape files.  Note: if you are receiving
  223. into the
  224. @Index(RAM file)RAM file, each file received will overwrite
  225. any previous one.
  226.  
  227. @Index<GET>GET@\When Rover-Kermit is talking to a Kermit Server on
  228. the remote host, you should use the GET command
  229. to request the server to send files to you.  You
  230. will be prompted for the file name.
  231.  
  232. @Index(LOGOUT)LOGOUT@\When talking to a remote Kermit Server,
  233. this command shuts down the server and logs it out,
  234. and also exits from Rover-Kermit to normal terminal operation.  To
  235. protect you against inadvertantly striking the "L" key, Kermit prompts
  236. you for confirmation of the LOGOUT command.
  237.  
  238. @Index(FINISH)FINISH@\Like LOGOUT, but shuts down the
  239. remote server without logging it out.
  240.  
  241. @Index(QUIT)QUIT@\Exit to normal terminal operation.
  242.  
  243. @Index(HOST)@Index(Generic)KERMIT@\Send a command to a remote Kermit
  244. Server.  You will be prompted for the command type (C for a remote host
  245. command, K for a Kermit command, or G for a generic Kermit command)
  246. and the text.  The command character will not be displayed, but
  247. the command will appear on the Message line as you type it.  Any
  248. reply will be displayed on the screen.
  249.  
  250. @Index(CORE)CORE@\Specifies input/output to the@Index(RAM file)
  251. RAM file, up to 32K characters in length.
  252.  
  253. @Index(TAPE)TAPE@\Specifies input/output to the cartridge tape units
  254. or other devices.  The default
  255. device names@index(Device names)
  256. under this option are L(eft tape) and R(ight tape) for input and output,
  257. respectively, but they may be reversed or set to any of the other
  258. possibilities, namely, S(ource), D(estination), G(raphics), N(ull), or
  259. U(serio).  These represent
  260. the SOURCE or DESTINATION assignments
  261. in the terminal, the display (graphics for input, alpha for output),
  262. a null file, or an optional I/O device.  See the terminal
  263. documentation for more details.  The devices are selected
  264. via the PARM command.
  265.  
  266. @Index(SET)@Index(PARM)
  267. PARM@\Sets or changes a parameter for Kermit operation.  This
  268. command is divided into four sub-functions, each in turn
  269. abbreviated to a single keystroke (oN, oFf, Char, or Value), and each
  270. sub-function can operate on any one of a list of parameters.  See
  271. below for a detailed description of the parameters and keystroke
  272. sequences.
  273. @end<description>
  274.  
  275. @Heading<Setting/Changing Parameters>
  276.  
  277. Parameters for Rover-Kermit operation may be set by sequences of
  278. keystrokes typed while Kermit is running.  Kermit provides a menu of
  279. possible options on the Program State line
  280. @Index(Program State)to guide in the entry of
  281. such sequences.  All alphabetic keys are taken as upper
  282. case.  Sequences
  283. consist of at least a "P", a sub-function, and a parameter
  284. name.  The Value sub-function takes, in addition,
  285. a decimal number entered before the parameter name.  The number
  286. must be entered with no
  287. imbedded blanks or commas.  The values of all such parameters are
  288. displayed (in decimal) on the Message line after a PARM command
  289. completes.  The Character sub-function, on the other hand, takes a
  290. character argument entered after the parameter name.  Character
  291. parameters are permanently displayed
  292. on the third line, but the ON/OFF parameters (other than the eighth-bit
  293. flag, which doubles as a character parameter) are not displayed at all.
  294.  
  295. @begin<description,leftmargin +8,indent -8>
  296. @Index(Block check type)
  297. BLOCK@\PCB<n> sets the block check type to <n>.  Available options are
  298. 1 and 2.  The default is 1.
  299.  
  300. @Index(Buffer length)
  301. BUFSZ@\PV<n>B sets Rover-Kermit's buffer length to <n>.  The valid
  302. range is 20-94, and 94 is the initial value.
  303.  
  304. @Index(Device names)
  305. DEST@\PCD<c> sets the output device code to <c>.  The default is R, and
  306. other possible values are L, S, D, G, N, and U.  See
  307. also the TAPE command.
  308.  
  309. @Index(Handshake)
  310. HNDSHK@\PV<n>H sets the IBM turnaround character to <n>.  The default is
  311. 17 (XON), but any value 1-31 is valid.
  312.  
  313. @Index(IBM)
  314. IBM@\P(N|F)I sets the "IBM" flag.  "ON" (the default) means that
  315. Rover-Kermit waits for the turnaround character before sending any
  316. packets (see HNDSHK above).
  317.  
  318. @Index(Packet character)
  319. MARK@\PV<n>M sets the packet start character to <n>.  The default is 1
  320. (SOH), but any value 1-31 is valid.
  321.  
  322. @Index(Quote character)
  323. QUOTE@\PCQ<c> sets the control quote character to <c>.  The default
  324. is #.  Note: letters may not be used for this character because
  325. the command interpreter upcases all keystrokes.
  326.  
  327. @Index(Retry limit)
  328. RETRY@\PV<n>R sets the packet retry limit to <n>.  The default
  329. is 10, but any value 1-199 is valid.
  330.  
  331. @Index(Repeat prefix)
  332. RPTQ@\PCR<c> sets the repeat prefix character to <c>.  The default is ~.
  333.  
  334. SOURCE@\PCS<c> sets the input device code to <c>.  The default
  335. is L.  Other possible values are R, S, D, G, N, and U.  See
  336. also the TAPE command.
  337.  
  338. @Index(Timeout)
  339. TIME@\PV<n>T sets the timeout limit to <n>.  The default is 3, but any
  340. value 1-94 is valid.
  341.  
  342. TIMER@\P(N|F)T sets the timer on or off.  The default is ON.
  343.  
  344. @Index(Eighth-bit prefix)
  345. 8-BIT@\P(N|F)8 sets the 8th bit prefix option on or off.  "ON" (the
  346. default) permits 8th-bit quoting if the remote Kermit requests it.
  347.  
  348. 8-BIT@\PC8<c> sets the 8th bit prefix character to <c>.  Note:
  349. letters may not be used for this character because the
  350. command interpreter upcases all keystrokes.
  351. @end<description>
  352.  
  353. Since Rover-Kermit is permanently resident, its configuration can also
  354. be set or examined from without by typing
  355. loader sequences or display commands at the operating
  356. system.  Table
  357. @ref<-hp2sets> gives a list of memory locations that may be altered
  358. to change the Kermit defaults.  Such
  359. settings may be combined as desired to obtain any particular
  360. configuration, and, since loader commands may come from any source,
  361. such commands may be called out from a tape file or sent by the remote
  362. host for convenience.  Aside from this packaging property and the
  363. capacity for setting the I/O to HP-IB devices,
  364. these loader
  365. commands are obviously less convenient than the
  366. usual command sequences.  Among other
  367. things, they can be executed only when Rover-Kermit is not
  368. running.  Note: an I/O device code is actually a string ending with a
  369. carriage return, stored in a nine-byte array.  The carriage return must
  370. always follow immediately after the device code.
  371. @Index(TIMER)@Index(IBM)@Index(Handshake)@Index(Packet character)
  372. @Index(Eighth-bit prefix)@Index(Retry limit)@Index(Quote character)
  373. @Index(Repeat prefix)@Index(Device names)@Index(Buffer length)
  374. @Index(Timeout)@Index(Block check type)
  375. @begin<table,leftmargin +0,use format>
  376. @tabclear()@tabset(0.8in,1.6in)
  377. @bar()
  378. @blankspace(1)
  379. @u(Name)@\@ux<Address>@\@ux<Values>
  380. BKTP@\106773@\Block check type.  Default is 1 (61).
  381. BUFSZ@\106732@\Buffer length for INIT.  Default is 94. (176).
  382. DEST@\107552@\Output device code.  Default is R (122).
  383. DPTQ@\106725@\Repeat prefix character.  Default is ~ (176).
  384. HNDSHK@\104144@\IBM turnaround character.  Default is XON (21).
  385. IBM@\104155@\315 if on, 1 if off.  Default is ON.
  386. MARK@\105463@\Packet start character.  Default is SOH (1).
  387. QUOTE@\106720@\Quote character.  Default is # (43).
  388. RETRY@\105655@\Retry limit.  Default is 10. (12).
  389. SOURCE@\107605@\Input device code.  Default is L (114).
  390. TIME@\106741@\Timeout limit for INIT.  Default is 3. (43).
  391. TIMER@\105116@\312 if on, 332 if off.  Default is ON.
  392. 8-BIT@\106772@\8th bit quote option.  Default is Y (131).
  393. @tag<-hp2sets>
  394. @caption<Settable locations (addresses and values in octal)>
  395. @blankspace(1)
  396. @bar()
  397. @end<table>
  398.  
  399. For example, to assign the output to a printer on HP-IB#7, enter
  400. @Example(<ESC>&c 107552a 110d 43d 67d 15D)
  401.  
  402. To set the output back to the right tape, enter
  403. @Example(<ESC>&c 107552a 122d 15D)
  404.  
  405. To set the 8th-bit prefix to lower-case "z", enter
  406. @Example(<ESC>&c 106772a 172D)
  407.  
  408. @heading<Error Messages>
  409.  
  410. @Index(Error)@Index(Message)
  411. Error messages from Rover-Kermit are largely self-explanatory
  412. but brief.  For conditions that terminate a file transfer,
  413. the same message is both
  414. displayed on the screen (on the Message line) and sent
  415. to the remote Kermit as an Error packet.  In fact, whenever a transfer
  416. completes, some message will appear on the Message line, usually
  417. accompanied by an audible tone.  The beep is suppressed only when a very
  418. short file transfer completes normally.
  419. @begin<description,leftmargin +21,indent -21>
  420. Remote host aborted@\specifies that the remote Kermit issued an error
  421. packet.
  422.  
  423. Bad INIT data@\specifies disagreement over the control quote character.
  424.  
  425. I/O error@\specifies a tape I/O error or overflow of the RAM file.
  426.  
  427. Split prefix@\specifies that a byte specification is apparently split
  428. between packets.
  429.  
  430. Bad repeat count@\specifies that Rover-Kermit has attempted to decode
  431. a non-positive repeat count.
  432.  
  433. Bad packet type@\specifies that Rover-Kermit has received
  434. an invalid type of packet.
  435.  
  436. Retry limit - <c>@\specifies that Rover-Kermit has found an error
  437. repeatedly up to the retry limit.  The last character indicates what
  438. kind of error: K => packet out of sequence,
  439. N => NAK or ill-formed packet, or T => timeout.
  440.  
  441. No local storage@\specifies that no tape is inserted.
  442. @end<description>
  443.  
  444. @section<Rover-Kermit Source language>
  445. The Rover-Kermit has been assembled not with a standard 8080
  446. assembler, but
  447. with a slightly eccentric one developed on an HP2647.  The differences
  448. in notation are quite simple, but pervasive.
  449. @begin<itemize>
  450.  
  451. A "*" in column 1 denotes a comment.
  452.  
  453. Statement labels are never suffixed with colons.
  454.  
  455. Octal constants are denoted
  456. by the suffix "Q".
  457.  
  458. The current location counter is represented by the
  459. symbol "*".
  460.  
  461. The operator ":" is used to represent concatenation of
  462. two quantities into a two-byte value, low-order byte first.
  463.  
  464. There is a special pseudo-operation "ASCC" for assembling character
  465. strings.
  466. A string within quotes is assembled into
  467. standard ASCII codes.  A quotation mark (apostrophe) may be inserted as
  468. a pair of quotes in the usual fashion.  Control
  469. characters may be inserted by including
  470. triplets of decimal digits for the desired
  471. characters within quotation marks.  Unless
  472. the string is followed by ",-", the
  473. assembler appends a null to the output.  For example,
  474. @example<@ @ ASCC@ @ 'It''s true!'013''>
  475. yields:  It's true!<CR><NUL>
  476.  
  477. There is a special pseudo-operation "EJECT" to skip to the next page
  478. on the output listing.
  479.  
  480. Quoted character strings are not allowed anywhere except in "ASCC"
  481. instructions.  There is a function operation "CHAR", which evaluates
  482. to the ASCII character value of the next character after the
  483. delimiting blank.  For example, "CHAR -" evaluates to 55 (octal) and
  484. may be used in expressions.
  485.  
  486. There is a function operation "INSTR" which evaluates to the
  487. opcode of the symbol after the delimiting blank.  For example,
  488. "INSTR MOV" evaluates to 100 (octal).
  489. @end<itemize>
  490.  
  491. @Section(What's New)
  492.  
  493. The following are the most important of the changes and improvements in
  494. release 1.2 of Rover-Kermit.
  495.  
  496. @Begin(itemize)
  497. Two-byte checksums.
  498.  
  499. Mnemonic commands for setting parameters.
  500.  
  501. More elaborate display of current settings.
  502.  
  503. ^X/^Z interruption.
  504.  
  505. Retain filespec on RAM file.
  506.  
  507. Display any characters received while waiting for handshake.
  508.  
  509. Fixed bug in creating repeat strings from runs longer than 94.
  510.  
  511. Flush data communication buffer before starting any transaction (except
  512. the first in a given session).
  513.  
  514. The ROLL and HOME keys now work for the conversation workspace.
  515. @End(itemize)
  516.  
  517. @section<Future Work>
  518.  
  519. Work that could be done in future releases includes:
  520. @begin<itemize>
  521.  
  522. Add multi-file transmissions from cartridge tape.
  523.  
  524. Release Active File Blocks in case of error.@index(Active File Table)
  525.  
  526. Add three-@|byte block checks.
  527.  
  528. Encode/decode error packets.
  529.  
  530. Implement "A" packets.
  531. @end<itemize>
  532.